]> gitweb.erp-flowers.ru Git - erp24_rep/yii-erp24/.git/commitdiff
fix(ERP-252): fallback when address object exists but street is empty
authorAleksey Filippov <Aleksey.Filippov@erp-flowers.ru>
Mon, 2 Mar 2026 20:17:24 +0000 (23:17 +0300)
committerAleksey Filippov <Aleksey.Filippov@erp-flowers.ru>
Mon, 2 Mar 2026 20:17:24 +0000 (23:17 +0300)
$delivery->getAddress() returns non-null object with empty street field.
Changed from if/else to unconditional check: if street is still empty
after structured address fill, apply parseAddressFromDeliveryText()
or "Уточняется" defaults. Markers updated to [ERP-252-v3].

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

index 5f3c44f0dc5ab8f0c63f70bfb574427435642249..5dc9ed3533084c392153fe726cbec61dd1e0f073 100644 (file)
@@ -1347,26 +1347,27 @@ class MarketplaceService
                                     $deliveryModel->latitude = 0.0;
                                     $deliveryModel->longitude = 0.0;
                                 }
-                            } else {
-                                // Адрес не структурирован — парсим из текстовой строки delivery в raw_data
+                            }
+                            // Fallback: если street всё равно пустой — парсим из raw_data или ставим дефолт
+                            if (empty($deliveryModel->street)) {
                                 $rawData = json_decode($marketplaceOrder->raw_data, true);
                                 $deliveryText = $rawData['delivery'] ?? null;
-                                Yii::warning('[ERP-252-v2] address=null для заказа #' . $marketplaceOrder->id . ', deliveryText=' . ($deliveryText ?: 'NULL'), 'marketplace');
+                                Yii::warning('[ERP-252-v3] new: street empty для заказа #' . $marketplaceOrder->id . ', address=' . ($address ? 'object' : 'null') . ', deliveryText=' . ($deliveryText ?: 'NULL'), 'marketplace');
                                 if ($deliveryText && is_string($deliveryText)) {
                                     $parsed = self::parseAddressFromDeliveryText($deliveryText);
-                                    $deliveryModel->country = 'Россия';
-                                    $deliveryModel->city = $parsed['city'];
+                                    $deliveryModel->country = $deliveryModel->country ?: 'Россия';
+                                    $deliveryModel->city = $deliveryModel->city ?: $parsed['city'];
                                     $deliveryModel->street = $parsed['street'];
-                                    $deliveryModel->house = $parsed['house'];
-                                    $deliveryModel->latitude = $parsed['latitude'];
-                                    $deliveryModel->longitude = $parsed['longitude'];
+                                    $deliveryModel->house = $deliveryModel->house ?: $parsed['house'];
+                                    $deliveryModel->latitude = $deliveryModel->latitude ?: $parsed['latitude'];
+                                    $deliveryModel->longitude = $deliveryModel->longitude ?: $parsed['longitude'];
                                 } else {
-                                    $deliveryModel->country = 'Уточняется';
-                                    $deliveryModel->city = 'Уточняется';
+                                    $deliveryModel->country = $deliveryModel->country ?: 'Уточняется';
+                                    $deliveryModel->city = $deliveryModel->city ?: 'Уточняется';
                                     $deliveryModel->street = 'Уточняется';
-                                    $deliveryModel->house = 'Уточняется';
-                                    $deliveryModel->latitude = 0.0;
-                                    $deliveryModel->longitude = 0.0;
+                                    $deliveryModel->house = $deliveryModel->house ?: 'Уточняется';
+                                    $deliveryModel->latitude = $deliveryModel->latitude ?: 0.0;
+                                    $deliveryModel->longitude = $deliveryModel->longitude ?: 0.0;
                                 }
                             }
                             $shipments = $delivery->getShipments();
@@ -1581,26 +1582,27 @@ class MarketplaceService
                                     $deliveryModel->latitude = 0.0;
                                     $deliveryModel->longitude = 0.0;
                                 }
-                            } else {
-                                // Адрес не структурирован — парсим из текстовой строки delivery в raw_data
+                            }
+                            // Fallback: если street всё равно пустой — парсим из raw_data или ставим дефолт
+                            if (empty($deliveryModel->street)) {
                                 $rawData = json_decode($marketplaceOrder->raw_data, true);
                                 $deliveryText = $rawData['delivery'] ?? null;
-                                Yii::warning('[ERP-252-v2] update: address=null для заказа #' . $marketplaceOrder->id . ', deliveryText=' . ($deliveryText ?: 'NULL'), 'marketplace');
+                                Yii::warning('[ERP-252-v3] update: street empty для заказа #' . $marketplaceOrder->id . ', address=' . ($address ? 'object' : 'null') . ', deliveryText=' . ($deliveryText ?: 'NULL'), 'marketplace');
                                 if ($deliveryText && is_string($deliveryText)) {
                                     $parsed = self::parseAddressFromDeliveryText($deliveryText);
-                                    $deliveryModel->country = 'Россия';
-                                    $deliveryModel->city = $parsed['city'];
+                                    $deliveryModel->country = $deliveryModel->country ?: 'Россия';
+                                    $deliveryModel->city = $deliveryModel->city ?: $parsed['city'];
                                     $deliveryModel->street = $parsed['street'];
-                                    $deliveryModel->house = $parsed['house'];
-                                    $deliveryModel->latitude = $parsed['latitude'];
-                                    $deliveryModel->longitude = $parsed['longitude'];
+                                    $deliveryModel->house = $deliveryModel->house ?: $parsed['house'];
+                                    $deliveryModel->latitude = $deliveryModel->latitude ?: $parsed['latitude'];
+                                    $deliveryModel->longitude = $deliveryModel->longitude ?: $parsed['longitude'];
                                 } else {
-                                    $deliveryModel->country = 'Уточняется';
-                                    $deliveryModel->city = 'Уточняется';
+                                    $deliveryModel->country = $deliveryModel->country ?: 'Уточняется';
+                                    $deliveryModel->city = $deliveryModel->city ?: 'Уточняется';
                                     $deliveryModel->street = 'Уточняется';
-                                    $deliveryModel->house = 'Уточняется';
-                                    $deliveryModel->latitude = 0.0;
-                                    $deliveryModel->longitude = 0.0;
+                                    $deliveryModel->house = $deliveryModel->house ?: 'Уточняется';
+                                    $deliveryModel->latitude = $deliveryModel->latitude ?: 0.0;
+                                    $deliveryModel->longitude = $deliveryModel->longitude ?: 0.0;
                                 }
                             }
                             $dates = $delivery->getDates();
@@ -1934,26 +1936,27 @@ class MarketplaceService
                                         $deliveryModel->latitude = 0.0;
                                         $deliveryModel->longitude = 0.0;
                                     }
-                                } else {
-                                    // Адрес не структурирован — парсим из текстовой строки delivery в raw_data
+                                }
+                                // Fallback: если street всё равно пустой — парсим из raw_data или ставим дефолт
+                                if (empty($deliveryModel->street)) {
                                     $rawData = json_decode($marketplaceOrder->raw_data, true);
                                     $deliveryText = $rawData['delivery'] ?? null;
-                                    Yii::warning('[ERP-252-v2] existing: address=null для заказа #' . $marketplaceOrder->id . ', deliveryText=' . ($deliveryText ?: 'NULL'), 'marketplace');
+                                    Yii::warning('[ERP-252-v3] existing: street empty для заказа #' . $marketplaceOrder->id . ', address=' . ($address ? 'object' : 'null') . ', deliveryText=' . ($deliveryText ?: 'NULL'), 'marketplace');
                                     if ($deliveryText && is_string($deliveryText)) {
                                         $parsed = self::parseAddressFromDeliveryText($deliveryText);
-                                        $deliveryModel->country = 'Россия';
-                                        $deliveryModel->city = $parsed['city'];
+                                        $deliveryModel->country = $deliveryModel->country ?: 'Россия';
+                                        $deliveryModel->city = $deliveryModel->city ?: $parsed['city'];
                                         $deliveryModel->street = $parsed['street'];
-                                        $deliveryModel->house = $parsed['house'];
-                                        $deliveryModel->latitude = $parsed['latitude'];
-                                        $deliveryModel->longitude = $parsed['longitude'];
+                                        $deliveryModel->house = $deliveryModel->house ?: $parsed['house'];
+                                        $deliveryModel->latitude = $deliveryModel->latitude ?: $parsed['latitude'];
+                                        $deliveryModel->longitude = $deliveryModel->longitude ?: $parsed['longitude'];
                                     } else {
-                                        $deliveryModel->country = 'Уточняется';
-                                        $deliveryModel->city = 'Уточняется';
+                                        $deliveryModel->country = $deliveryModel->country ?: 'Уточняется';
+                                        $deliveryModel->city = $deliveryModel->city ?: 'Уточняется';
                                         $deliveryModel->street = 'Уточняется';
-                                        $deliveryModel->house = 'Уточняется';
-                                        $deliveryModel->latitude = 0.0;
-                                        $deliveryModel->longitude = 0.0;
+                                        $deliveryModel->house = $deliveryModel->house ?: 'Уточняется';
+                                        $deliveryModel->latitude = $deliveryModel->latitude ?: 0.0;
+                                        $deliveryModel->longitude = $deliveryModel->longitude ?: 0.0;
                                     }
                                 }
                                 $shipments = $delivery->getShipments();