]> gitweb.erp-flowers.ru Git - erp24_rep/yii-erp24/.git/commitdiff
fix(ERP-251): parse delivery address from text when API returns no structured address
authorAleksey Filippov <Aleksey.Filippov@erp-flowers.ru>
Mon, 2 Mar 2026 19:16:55 +0000 (22:16 +0300)
committerAleksey Filippov <Aleksey.Filippov@erp-flowers.ru>
Mon, 2 Mar 2026 19:16:55 +0000 (22:16 +0300)
Some orders (FlowWow) have delivery info as free text in raw_data
instead of structured address fields. When $delivery->getAddress()
returns null, fallback to parseAddressFromDeliveryText() to extract
city/street/house from the text. Applied in all 3 delivery creation
points in processOrders().

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
erp24/services/MarketplaceService.php

index e3ce7061b045ed810c18a15581d6c44f70609c10..9843706da0570e4e0366d2a1295ce769b48e07c8 100644 (file)
@@ -1344,7 +1344,26 @@ class MarketplaceService
                                     $deliveryModel->latitude = $gps->getLatitude();
                                     $deliveryModel->longitude = $gps->getLongitude();
                                 } else {
-                                    // GPS координаты отсутствуют, устанавливаем значения по умолчанию
+                                    $deliveryModel->latitude = 0.0;
+                                    $deliveryModel->longitude = 0.0;
+                                }
+                            } else {
+                                // Адрес не структурирован — парсим из текстовой строки delivery в raw_data
+                                $rawData = json_decode($marketplaceOrder->raw_data, true);
+                                $deliveryText = $rawData['delivery'] ?? null;
+                                if ($deliveryText && is_string($deliveryText)) {
+                                    $parsed = self::parseAddressFromDeliveryText($deliveryText);
+                                    $deliveryModel->country = 'Россия';
+                                    $deliveryModel->city = $parsed['city'];
+                                    $deliveryModel->street = $parsed['street'];
+                                    $deliveryModel->house = $parsed['house'];
+                                    $deliveryModel->latitude = $parsed['latitude'];
+                                    $deliveryModel->longitude = $parsed['longitude'];
+                                } else {
+                                    $deliveryModel->country = 'Уточняется';
+                                    $deliveryModel->city = 'Уточняется';
+                                    $deliveryModel->street = 'Уточняется';
+                                    $deliveryModel->house = 'Уточняется';
                                     $deliveryModel->latitude = 0.0;
                                     $deliveryModel->longitude = 0.0;
                                 }
@@ -1558,7 +1577,26 @@ class MarketplaceService
                                     $deliveryModel->latitude = $gps->getLatitude();
                                     $deliveryModel->longitude = $gps->getLongitude();
                                 } else {
-                                    // GPS координаты отсутствуют, устанавливаем значения по умолчанию
+                                    $deliveryModel->latitude = 0.0;
+                                    $deliveryModel->longitude = 0.0;
+                                }
+                            } else {
+                                // Адрес не структурирован — парсим из текстовой строки delivery в raw_data
+                                $rawData = json_decode($marketplaceOrder->raw_data, true);
+                                $deliveryText = $rawData['delivery'] ?? null;
+                                if ($deliveryText && is_string($deliveryText)) {
+                                    $parsed = self::parseAddressFromDeliveryText($deliveryText);
+                                    $deliveryModel->country = 'Россия';
+                                    $deliveryModel->city = $parsed['city'];
+                                    $deliveryModel->street = $parsed['street'];
+                                    $deliveryModel->house = $parsed['house'];
+                                    $deliveryModel->latitude = $parsed['latitude'];
+                                    $deliveryModel->longitude = $parsed['longitude'];
+                                } else {
+                                    $deliveryModel->country = 'Уточняется';
+                                    $deliveryModel->city = 'Уточняется';
+                                    $deliveryModel->street = 'Уточняется';
+                                    $deliveryModel->house = 'Уточняется';
                                     $deliveryModel->latitude = 0.0;
                                     $deliveryModel->longitude = 0.0;
                                 }
@@ -1891,7 +1929,26 @@ class MarketplaceService
                                         $deliveryModel->latitude = $gps->getLatitude();
                                         $deliveryModel->longitude = $gps->getLongitude();
                                     } else {
-                                        // GPS координаты отсутствуют, устанавливаем значения по умолчанию
+                                        $deliveryModel->latitude = 0.0;
+                                        $deliveryModel->longitude = 0.0;
+                                    }
+                                } else {
+                                    // Адрес не структурирован — парсим из текстовой строки delivery в raw_data
+                                    $rawData = json_decode($marketplaceOrder->raw_data, true);
+                                    $deliveryText = $rawData['delivery'] ?? null;
+                                    if ($deliveryText && is_string($deliveryText)) {
+                                        $parsed = self::parseAddressFromDeliveryText($deliveryText);
+                                        $deliveryModel->country = 'Россия';
+                                        $deliveryModel->city = $parsed['city'];
+                                        $deliveryModel->street = $parsed['street'];
+                                        $deliveryModel->house = $parsed['house'];
+                                        $deliveryModel->latitude = $parsed['latitude'];
+                                        $deliveryModel->longitude = $parsed['longitude'];
+                                    } else {
+                                        $deliveryModel->country = 'Уточняется';
+                                        $deliveryModel->city = 'Уточняется';
+                                        $deliveryModel->street = 'Уточняется';
+                                        $deliveryModel->house = 'Уточняется';
                                         $deliveryModel->latitude = 0.0;
                                         $deliveryModel->longitude = 0.0;
                                     }