Починил импорт + доставка в тот же город

This commit is contained in:
Arsen Mirzaev Tatyano-Muradovich 2022-03-11 08:39:10 +10:00
parent 82d6747425
commit 4da846825b
3 changed files with 88 additions and 55 deletions

View File

@ -740,30 +740,39 @@ class OrderController extends Controller
avia: $order_edge_supply->dlvr['type'] === 'avia' avia: $order_edge_supply->dlvr['type'] === 'avia'
); );
// Инициализация даты отправки if ($delivery['ready'] ?? false) {
try { // Указана дата готовности к получению
// Взять данные из "arrivalToOspSender" (Дата прибытия на терминал-отправитель)
$delivery_send_date = DateTime::createFromFormat('Y-m-d', $delivery['orderDates']['arrivalToOspSender'])->getTimestamp(); // Инициализация доставки
} catch (Throwable $e) { $delivery = $delivery['ready'];
// Взять данные из "pickup" (Дата передачи груза на адресе отправителя) } 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) { } catch (Exception $e) {
// var_dump($e->getMessage()); // var_dump($e->getMessage());
// var_dump($e->getTrace()); // var_dump($e->getTrace());

View File

@ -7,8 +7,9 @@ namespace app\models;
use yii; use yii;
use app\models\traits\SearchByEdge; use app\models\traits\SearchByEdge;
use app\models\connection\Dellin; use app\models\Dellin as DellinModel;
use app\models\Settings; use app\models\Settings;
use app\models\connection\Dellin;
use datetime; use datetime;
use exception; use exception;
@ -192,7 +193,7 @@ class Search extends Document
$connection['product'] = Product::searchBySupplyId($connection['supply_edge_product'][0]['_from']); $connection['product'] = Product::searchBySupplyId($connection['supply_edge_product'][0]['_from']);
try { try {
// Инициализация данных геолокации // Доставка "auto"
try { try {
$from = (int) (Warehouse::searchBySupply(Supply::searchByCatn($connection['supply']['catn']))[0]->trmn ?? Settings::searchActive()?->delivery_from_default ?? 36); $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; $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; $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'] = $buffer_connection['data'];
$connection['delivery']['type'] = 'auto'; $connection['delivery']['type'] = 'auto';
@ -262,8 +271,8 @@ class Search extends Document
// var_dump(json_decode($e->getMessage(), true)['errors']); // var_dump(json_decode($e->getMessage(), true)['errors']);
// die; // die;
} finally { } 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); $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; $buffer_delivery_avia = $connection;
try { try {
// Инициализация данных геолокации // Доставка "avia"
if ($cost = $connection['supply']['cost'] < 1) { if ($cost = $connection['supply']['cost'] < 1) {
// Цена меньше единицы (подразумевается как ошибка) // Цена меньше единицы (подразумевается как ошибка)
@ -296,6 +305,8 @@ class Search extends Document
$to = 36; $to = 36;
} }
// Доставка в другие города
// Инициализация буфера доставки // Инициализация буфера доставки
$buffer_connection = $connection['product']['bffr']["$from-$to-avia"] ?? null; $buffer_connection = $connection['product']['bffr']["$from-$to-avia"] ?? null;
@ -358,6 +369,9 @@ class Search extends Document
$buffer_connections[] = $buffer_delivery_avia; $buffer_connections[] = $buffer_delivery_avia;
} }
} }
// Пропуск доставки "avia"
skip_avia:
} }
@ -513,29 +527,39 @@ class Search extends Document
default => '<i class="mr-1 fas fa-truck"></i>' default => '<i class="mr-1 fas fa-truck"></i>'
}; };
// Инициализация даты отправки if ($delivery['ready'] ?? false) {
try { // Указана дата готовности к получению
// Взять данные из "arrivalToOspSender" (Дата прибытия на терминал-отправитель)
$delivery_send_date = datetime::createFromFormat('Y-m-d', $delivery['orderDates']['arrivalToOspSender'])->getTimestamp(); // Инициализация доставки
} catch (throwable $e) { $delivery = $delivery['ready'];
// Взять данные из "pickup" (Дата передачи груза на адресе отправителя) } 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;
} }
// Инициализация индекса аккаунта // Инициализация индекса аккаунта

View File

@ -650,13 +650,13 @@ class Supply extends Product implements ProductInterface, OfferInterface
}; };
// Запись поставки // Запись поставки
$create($article); $create((string) $article);
foreach ($analogs as $_supply) { foreach ($analogs as $_supply) {
// Перебор аналогов (если найдены) // Перебор аналогов (если найдены)
// Запись поставки // Запись поставки
$create($_supply); $create((string) $_supply);
} }
} }
} }