From: Aleksey Filippov Date: Mon, 2 Mar 2026 20:17:24 +0000 (+0300) Subject: fix(ERP-252): fallback when address object exists but street is empty X-Git-Url: https://gitweb.erp-flowers.ru/?a=commitdiff_plain;h=2b869193c0e7da1c765273672463950a9b3b097b;p=erp24_rep%2Fyii-erp24%2F.git fix(ERP-252): fallback when address object exists but street is empty $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 --- diff --git a/erp24/services/MarketplaceService.php b/erp24/services/MarketplaceService.php index 5f3c44f0..5dc9ed35 100644 --- a/erp24/services/MarketplaceService.php +++ b/erp24/services/MarketplaceService.php @@ -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();