diff --git a/mirzaev/skillparts/system/controllers/OrderController.php b/mirzaev/skillparts/system/controllers/OrderController.php index 8707a87..39b3dfd 100644 --- a/mirzaev/skillparts/system/controllers/OrderController.php +++ b/mirzaev/skillparts/system/controllers/OrderController.php @@ -740,30 +740,39 @@ class OrderController extends Controller avia: $order_edge_supply->dlvr['type'] === 'avia' ); - // Инициализация даты отправки - try { - // Взять данные из "arrivalToOspSender" (Дата прибытия на терминал-отправитель) + if ($delivery['ready'] ?? false) { + // Указана дата готовности к получению - $delivery_send_date = DateTime::createFromFormat('Y-m-d', $delivery['orderDates']['arrivalToOspSender'])->getTimestamp(); - } catch (Throwable $e) { - // Взять данные из "pickup" (Дата передачи груза на адресе отправителя) + // Инициализация доставки + $delivery = $delivery['ready']; + } else { + // Не указана дата готовности к получению - $delivery_send_date = DateTime::createFromFormat('Y-m-d', $delivery['orderDates']['pickup'])->getTimestamp(); + // Инициализация даты отправки + try { + // Взять данные из "arrivalToOspSender" (Дата прибытия на терминал-отправитель) + + $delivery_send_date = DateTime::createFromFormat('Y-m-d', $delivery['orderDates']['arrivalToOspSender'])->getTimestamp(); + } catch (Throwable $e) { + // Взять данные из "pickup" (Дата передачи груза на адресе отправителя) + + $delivery_send_date = DateTime::createFromFormat('Y-m-d', $delivery['orderDates']['pickup'])->getTimestamp(); + } + + // Инициализация времени доставки + try { + // Доставка по воздуху (подразумевается), данные из "giveoutFromOspReceiver" (Дата и время, с которого груз готов к выдаче на терминале) + + $delivery_converted = DateTime::createFromFormat('Y-m-d H:i:s', $delivery['orderDates']['giveoutFromOspReceiver'])->getTimestamp(); + } catch (Throwable $e) { + // Автоматическая доставка (подразумевается), данные из "arrivalToOspReceiver" (Дата прибытия натерминал-получатель) + + $delivery_converted = DateTime::createFromFormat('Y-m-d', $delivery['orderDates']['arrivalToOspReceiver'])->getTimestamp(); + } + + // Инициализация доставки + $delivery = ceil(($delivery_converted - ($delivery_send_date ?? 0)) / 60 / 60 / 24) + 1; } - - // Инициализация времени доставки - try { - // Доставка по воздуху (подразумевается), данные из "giveoutFromOspReceiver" (Дата и время, с которого груз готов к выдаче на терминале) - - $delivery_converted = DateTime::createFromFormat('Y-m-d H:i:s', $delivery['orderDates']['giveoutFromOspReceiver'])->getTimestamp(); - } catch (Throwable $e) { - // Автоматическая доставка (подразумевается), данные из "arrivalToOspReceiver" (Дата прибытия натерминал-получатель) - - $delivery_converted = DateTime::createFromFormat('Y-m-d', $delivery['orderDates']['arrivalToOspReceiver'])->getTimestamp(); - } - - // Рассчет времени доставки - $delivery = ceil(($delivery_converted - ($delivery_send_date ?? 0)) / 60 / 60 / 24) + 1; } catch (Exception $e) { // var_dump($e->getMessage()); // var_dump($e->getTrace()); diff --git a/mirzaev/skillparts/system/models/Search.php b/mirzaev/skillparts/system/models/Search.php index 155a1fd..0d26f94 100644 --- a/mirzaev/skillparts/system/models/Search.php +++ b/mirzaev/skillparts/system/models/Search.php @@ -7,8 +7,9 @@ namespace app\models; use yii; use app\models\traits\SearchByEdge; -use app\models\connection\Dellin; +use app\models\Dellin as DellinModel; use app\models\Settings; +use app\models\connection\Dellin; use datetime; use exception; @@ -192,7 +193,7 @@ class Search extends Document $connection['product'] = Product::searchBySupplyId($connection['supply_edge_product'][0]['_from']); try { - // Инициализация данных геолокации + // Доставка "auto" try { $from = (int) (Warehouse::searchBySupply(Supply::searchByCatn($connection['supply']['catn']))[0]->trmn ?? Settings::searchActive()?->delivery_from_default ?? 36); @@ -206,6 +207,21 @@ class Search extends Document $to = 36; } + if (DellinModel::searchByTerminalId($from)->data['cityID'] === DellinModel::searchByTerminalId($to)->data['cityID']) { + // Доставка в пределах города + + $connection['delivery'] = [ + 'price' => [ + 'all' => 1 + ], + 'ready' => 1, + 'type' => 'auto' + ]; + + goto skip_avia; + } + // Доставка в другие города + // Инициализация буфера доставки $buffer_connection = $connection['product']['bffr']["$from-$to"] ?? null; @@ -213,13 +229,6 @@ class Search extends Document // Найдены данные доставки в буфере // и срок хранения не превышен, информация актуальна - // var_dump($buffer_connection); - // var_dump(isset($buffer_connection['data'])); - // var_dump(isset($buffer_connection)); - // var_dump(time() < $buffer_connection['expires'] ?? 0); - // var_dump(isset($buffer_connection) && time() < $buffer_connection['expires'] ?? 0); - // die; - // Запись в буфер вывода $connection['delivery'] = $buffer_connection['data']; $connection['delivery']['type'] = 'auto'; @@ -262,8 +271,8 @@ class Search extends Document // var_dump(json_decode($e->getMessage(), true)['errors']); // die; } finally { - // echo $connection['delivery']['price']['all']; - // Инициализация цены (цена поставки + цена доставки + наша наценка) + // echo $connection['delivery']['price']['all']; + // Инициализация цены (цена поставки + цена доставки + наша наценка) $connection['cost'] = $cost + ($connection['delivery']['price']['all'] ?? $connection['delivery']['price']['one'] ?? 0) + ($settings['increase'] ?? 0); } @@ -271,7 +280,7 @@ class Search extends Document $buffer_delivery_avia = $connection; try { - // Инициализация данных геолокации + // Доставка "avia" if ($cost = $connection['supply']['cost'] < 1) { // Цена меньше единицы (подразумевается как ошибка) @@ -296,6 +305,8 @@ class Search extends Document $to = 36; } + // Доставка в другие города + // Инициализация буфера доставки $buffer_connection = $connection['product']['bffr']["$from-$to-avia"] ?? null; @@ -358,6 +369,9 @@ class Search extends Document $buffer_connections[] = $buffer_delivery_avia; } } + + // Пропуск доставки "avia" + skip_avia: } @@ -513,29 +527,39 @@ class Search extends Document default => '' }; - // Инициализация даты отправки - try { - // Взять данные из "arrivalToOspSender" (Дата прибытия на терминал-отправитель) + if ($delivery['ready'] ?? false) { + // Указана дата готовности к получению - $delivery_send_date = datetime::createFromFormat('Y-m-d', $delivery['orderDates']['arrivalToOspSender'])->getTimestamp(); - } catch (throwable $e) { - // Взять данные из "pickup" (Дата передачи груза на адресе отправителя) + // Инициализация доставки + $delivery = $delivery['ready']; + } else { + // Не указана дата готовности к получению - $delivery_send_date = datetime::createFromFormat('Y-m-d', $delivery['orderDates']['pickup'])->getTimestamp(); + // Инициализация даты отправки + try { + // Взять данные из "arrivalToOspSender" (Дата прибытия на терминал-отправитель) + + $delivery_send_date = datetime::createFromFormat('Y-m-d', $delivery['orderDates']['arrivalToOspSender'])->getTimestamp(); + } catch (throwable $e) { + // Взять данные из "pickup" (Дата передачи груза на адресе отправителя) + + $delivery_send_date = datetime::createFromFormat('Y-m-d', $delivery['orderDates']['pickup'])->getTimestamp(); + } + + // Инициализация времени доставки + try { + // Доставка по воздуху (подразумевается), данные из "giveoutFromOspReceiver" (Дата и время, с которого груз готов к выдаче на терминале) + + $delivery_converted = @datetime::createFromFormat('Y-m-d H:i:s', $delivery['orderDates']['giveoutFromOspReceiver'])->getTimestamp(); + } catch (Throwable $e) { + // Автоматическая доставка (подразумевается), данные из "arrivalToOspReceiver" (Дата прибытия натерминал-получатель) + + $delivery_converted = @datetime::createFromFormat('Y-m-d', $delivery['orderDates']['arrivalToOspReceiver'])->getTimestamp(); + } + + // Инициализация доставки + $delivery = ceil(($delivery_converted - ($delivery_send_date ?? 0)) / 60 / 60 / 24) + 1; } - - // Инициализация времени доставки - try { - // Доставка по воздуху (подразумевается), данные из "giveoutFromOspReceiver" (Дата и время, с которого груз готов к выдаче на терминале) - - $delivery_converted = datetime::createFromFormat('Y-m-d H:i:s', $delivery['orderDates']['giveoutFromOspReceiver'])->getTimestamp(); - } catch (Throwable $e) { - // Автоматическая доставка (подразумевается), данные из "arrivalToOspReceiver" (Дата прибытия натерминал-получатель) - - $delivery_converted = datetime::createFromFormat('Y-m-d', $delivery['orderDates']['arrivalToOspReceiver'])->getTimestamp(); - } - - $delivery = ceil(($delivery_converted - ($delivery_send_date ?? 0)) / 60 / 60 / 24) + 1; } // Инициализация индекса аккаунта diff --git a/mirzaev/skillparts/system/models/Supply.php b/mirzaev/skillparts/system/models/Supply.php index cebb1f6..b482863 100644 --- a/mirzaev/skillparts/system/models/Supply.php +++ b/mirzaev/skillparts/system/models/Supply.php @@ -650,13 +650,13 @@ class Supply extends Product implements ProductInterface, OfferInterface }; // Запись поставки - $create($article); + $create((string) $article); foreach ($analogs as $_supply) { // Перебор аналогов (если найдены) // Запись поставки - $create($_supply); + $create((string) $_supply); } } }