Доработка
This commit is contained in:
parent
21cec0c5b4
commit
4f898bf796
|
@ -296,6 +296,7 @@ class Order extends Document implements DocumentInterface
|
|||
* Поиск содержимого заказа
|
||||
*
|
||||
* @todo В будущем возможно заказ не только поставок реализовать
|
||||
* Переписать реестр и проверку на дубликаты, не понимаю как они работают
|
||||
*/
|
||||
public function content(int $limit = 1, int $page = 1): Supply|array|null
|
||||
{
|
||||
|
@ -320,13 +321,58 @@ class Order extends Document implements DocumentInterface
|
|||
select: '{supply, order_edge_supply}'
|
||||
);
|
||||
|
||||
// Рекурсивная фильтрации соединений
|
||||
recursive_connections_filtration:
|
||||
|
||||
// Инициализация статуса об изменении списка поставок
|
||||
$changed = false;
|
||||
|
||||
// Инициализация глобального буфера поставок
|
||||
$buffer_global = [];
|
||||
|
||||
// Разделение поставок по типам доставки
|
||||
// foreach ($connections as $key => &$connection) {
|
||||
// // Перебор поставок
|
||||
foreach ($connections as &$connection) {
|
||||
// Перебор поставок
|
||||
|
||||
// $connection
|
||||
// }
|
||||
if (count($connection['order_edge_supply'] ?? []) > 1) {
|
||||
// Поставок более чем одна
|
||||
|
||||
// Инициализация (выбор значения для фильтрации)
|
||||
$target_dlvr_type = reset($connection['order_edge_supply'])['dlvr']['type'] ?? 'auto';
|
||||
|
||||
// Инициализация буфера поставок
|
||||
$buffer = $connection;
|
||||
unset($buffer['order_edge_supply']);
|
||||
|
||||
foreach ($connection['order_edge_supply'] as $key => &$order_edge_supply) {
|
||||
// Перебор рёбер: ЗАКАЗ -> ПОСТАВКА
|
||||
|
||||
// if ((empty($order_edge_supply['dlvr']['type']) && $target_dlvr_type === 'auto')
|
||||
// || (isset($order_edge_supply['dlvr']['type']) && $order_edge_supply['dlvr']['type'] !== $target_dlvr_type)
|
||||
// ) {
|
||||
if ((isset($order_edge_supply['dlvr']['type']) && $order_edge_supply['dlvr']['type'] === $target_dlvr_type)
|
||||
|| (empty($order_edge_supply['dlvr']['type']) && $target_dlvr_type === 'auto')) {
|
||||
// Тип доставки для одной поставки отличается
|
||||
|
||||
// Запись в буфер
|
||||
$buffer['order_edge_supply'][$key] = $order_edge_supply;
|
||||
|
||||
// Удаление из списка
|
||||
unset($connection['order_edge_supply'][$key]);
|
||||
|
||||
// Перезапись статуса
|
||||
$changed = true;
|
||||
}
|
||||
}
|
||||
|
||||
// Запись из буфера в глобальный буфер
|
||||
$buffer_global[] = $buffer;
|
||||
}
|
||||
}
|
||||
|
||||
$connections = array_merge($connections, $buffer_global);
|
||||
|
||||
// if ($changed) goto recursive_connections_filtration;
|
||||
|
||||
// Инициализация реестра дубликатов
|
||||
$registry = [];
|
||||
|
@ -337,7 +383,7 @@ class Order extends Document implements DocumentInterface
|
|||
|
||||
if (in_array([
|
||||
'catn' => $connection['supply']['catn'],
|
||||
'type' => $connection['order_edge_supply'][0]['dlvr']['type'] ?? 'auto'
|
||||
'type' => $type = reset($connection['order_edge_supply'])['dlvr']['type'] ?? 'auto'
|
||||
], $registry)) {
|
||||
// Если данная поставка найдена в реестре
|
||||
|
||||
|
@ -348,29 +394,23 @@ class Order extends Document implements DocumentInterface
|
|||
continue;
|
||||
}
|
||||
|
||||
// Инициализация
|
||||
$amount = 0;
|
||||
|
||||
// Повторный перебор для поиска дубликатов
|
||||
foreach ($connections as &$connection_for_check) {
|
||||
if ($connection == $connection_for_check) {
|
||||
// Найден дубликат
|
||||
|
||||
// Постинкрементация счётчика
|
||||
$amount++;
|
||||
|
||||
// Запись в реестр
|
||||
$registry[] = [
|
||||
$registry[$key] = [
|
||||
'catn' => $connection_for_check['supply']['catn'],
|
||||
'type' => $connection['order_edge_supply'][0]['dlvr']['type'] ?? 'auto'
|
||||
'type' => $type
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
// Запись количества для заказа
|
||||
$connection['amount'] = $amount;
|
||||
// Запись количества заказанных поставок
|
||||
$connection['amount'] = count($connection['order_edge_supply']);
|
||||
}
|
||||
|
||||
|
||||
// Инициализация дополнительных данных
|
||||
foreach ($connections as $key => &$connection) {
|
||||
// Перебор поставок
|
||||
|
@ -397,7 +437,7 @@ class Order extends Document implements DocumentInterface
|
|||
// Поиск привязанного товара
|
||||
$connection['product'] = Product::searchBySupplyId($connection['supply']['_id']);
|
||||
|
||||
if (empty($connection['order_edge_supply']['dlvr']) || $connection['order_edge_supply']['dlvr']['type'] === 'auto') {
|
||||
if (empty(reset($connection['order_edge_supply'])['dlvr']['type']) || reset($connection['order_edge_supply'])['dlvr']['type'] === 'auto') {
|
||||
// Доставка автоматическая
|
||||
|
||||
try {
|
||||
|
@ -428,7 +468,7 @@ class Order extends Document implements DocumentInterface
|
|||
|
||||
try {
|
||||
// Инициализация доставки Dellin (самолётом)
|
||||
$connection['delivery']['avia'] = Dellin::calcDeliveryAdvanced(
|
||||
$connection['delivery'] = Dellin::calcDeliveryAdvanced(
|
||||
$connection['account']['opts']['delivery_from_terminal'],
|
||||
yii::$app->user->identity->opts['delivery_to_terminal'],
|
||||
(int) ($connection['product']['wght'] ?? 0),
|
||||
|
@ -439,7 +479,7 @@ class Order extends Document implements DocumentInterface
|
|||
avia: true
|
||||
);
|
||||
} catch (Exception $e) {
|
||||
$connection['delivery']['avia']['error'] = true;
|
||||
$connection['delivery']['error'] = true;
|
||||
|
||||
// var_dump($e->getMessage());
|
||||
// var_dump($e->getTrace());
|
||||
|
@ -449,7 +489,7 @@ class Order extends Document implements DocumentInterface
|
|||
}
|
||||
|
||||
// Запись цены (цена поставки + цена доставки + наша наценка)
|
||||
$connection['cost']['avia'] = ($cost['ЦенаЗаЕдиницу'] ?? $connection['supply']->onec['Цены']['Цена']['ЦенаЗаЕдиницу']) + ($connection['delivery']['avia']['price']['all'] ?? $connection['delivery']['avia']['price']['one'] ?? 0) + ($settings['increase'] ?? 0) ?? 0;
|
||||
$connection['cost'] = ($cost['ЦенаЗаЕдиницу'] ?? $connection['supply']->onec['Цены']['Цена']['ЦенаЗаЕдиницу']) + ($connection['delivery']['price']['all'] ?? $connection['delivery']['price']['one'] ?? 0) + ($settings['increase'] ?? 0) ?? 0;
|
||||
}
|
||||
|
||||
// Запись валюты
|
||||
|
|
|
@ -43,6 +43,9 @@ use DateTime;
|
|||
if (isset($connection['delivery']['error'])) {
|
||||
// Не удалось рассчитать доставку
|
||||
|
||||
// Инициализация индикатора
|
||||
$delivery_icon = '';
|
||||
|
||||
// Инициализация времени
|
||||
$delivery = '?';
|
||||
|
||||
|
@ -51,10 +54,19 @@ use DateTime;
|
|||
} else {
|
||||
// Удалось рассчитать доставку
|
||||
|
||||
// Инициализация типа доставки
|
||||
$delivery_type = reset($connection['order_edge_supply'])['dlvr']['type'] ?? 'auto';
|
||||
|
||||
// Инициализация индикатора
|
||||
$delivery_icon = match ($delivery_type) {
|
||||
'avia' => '<i class="mr-1 fas fa-plane"></i>',
|
||||
default => '<i class="mr-1 fas fa-truck"></i>'
|
||||
};
|
||||
|
||||
// Инициализация времени
|
||||
try {
|
||||
$delivery_converted = DateTime::createFromFormat('Y-m-d H:i:s', $connection['delivery']['orderDates']['giveoutFromOspReceiver'])->getTimestamp();
|
||||
} catch(Exception $e) {
|
||||
} catch (Exception $e) {
|
||||
$delivery_converted = DateTime::createFromFormat('Y-m-d', $connection['delivery']['orderDates']['arrivalToOspReceiver'])->getTimestamp();
|
||||
}
|
||||
$delivery = ceil(($delivery_converted - time()) / 60 / 60 / 24) + 1;
|
||||
|
@ -83,7 +95,7 @@ use DateTime;
|
|||
<input id="cart_list_amnt_{$connection['supply']['catn']}" class="form-control text-center" type="text" value="{$connection['amount']}" onchange="return cart_list_amount_update('{$connection['supply']['catn']}', this)" aria-invalid="false">
|
||||
</div>
|
||||
<div class="col-2 my-auto text-right">
|
||||
<a type="button" onclick="return false;">$delivery дн</a>
|
||||
<p>$delivery_icon $delivery дн</p>
|
||||
</div>
|
||||
<div class="col-2 my-auto mr-3 text-right">
|
||||
$cost
|
||||
|
|
Reference in New Issue