Доработка
This commit is contained in:
parent
21cec0c5b4
commit
4f898bf796
|
@ -296,6 +296,7 @@ class Order extends Document implements DocumentInterface
|
||||||
* Поиск содержимого заказа
|
* Поиск содержимого заказа
|
||||||
*
|
*
|
||||||
* @todo В будущем возможно заказ не только поставок реализовать
|
* @todo В будущем возможно заказ не только поставок реализовать
|
||||||
|
* Переписать реестр и проверку на дубликаты, не понимаю как они работают
|
||||||
*/
|
*/
|
||||||
public function content(int $limit = 1, int $page = 1): Supply|array|null
|
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}'
|
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 = [];
|
$registry = [];
|
||||||
|
@ -337,7 +383,7 @@ class Order extends Document implements DocumentInterface
|
||||||
|
|
||||||
if (in_array([
|
if (in_array([
|
||||||
'catn' => $connection['supply']['catn'],
|
'catn' => $connection['supply']['catn'],
|
||||||
'type' => $connection['order_edge_supply'][0]['dlvr']['type'] ?? 'auto'
|
'type' => $type = reset($connection['order_edge_supply'])['dlvr']['type'] ?? 'auto'
|
||||||
], $registry)) {
|
], $registry)) {
|
||||||
// Если данная поставка найдена в реестре
|
// Если данная поставка найдена в реестре
|
||||||
|
|
||||||
|
@ -348,29 +394,23 @@ class Order extends Document implements DocumentInterface
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Инициализация
|
|
||||||
$amount = 0;
|
|
||||||
|
|
||||||
// Повторный перебор для поиска дубликатов
|
// Повторный перебор для поиска дубликатов
|
||||||
foreach ($connections as &$connection_for_check) {
|
foreach ($connections as &$connection_for_check) {
|
||||||
if ($connection == $connection_for_check) {
|
if ($connection == $connection_for_check) {
|
||||||
// Найден дубликат
|
// Найден дубликат
|
||||||
|
|
||||||
// Постинкрементация счётчика
|
|
||||||
$amount++;
|
|
||||||
|
|
||||||
// Запись в реестр
|
// Запись в реестр
|
||||||
$registry[] = [
|
$registry[$key] = [
|
||||||
'catn' => $connection_for_check['supply']['catn'],
|
'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) {
|
foreach ($connections as $key => &$connection) {
|
||||||
// Перебор поставок
|
// Перебор поставок
|
||||||
|
@ -397,7 +437,7 @@ class Order extends Document implements DocumentInterface
|
||||||
// Поиск привязанного товара
|
// Поиск привязанного товара
|
||||||
$connection['product'] = Product::searchBySupplyId($connection['supply']['_id']);
|
$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 {
|
try {
|
||||||
|
@ -428,7 +468,7 @@ class Order extends Document implements DocumentInterface
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// Инициализация доставки Dellin (самолётом)
|
// Инициализация доставки Dellin (самолётом)
|
||||||
$connection['delivery']['avia'] = Dellin::calcDeliveryAdvanced(
|
$connection['delivery'] = Dellin::calcDeliveryAdvanced(
|
||||||
$connection['account']['opts']['delivery_from_terminal'],
|
$connection['account']['opts']['delivery_from_terminal'],
|
||||||
yii::$app->user->identity->opts['delivery_to_terminal'],
|
yii::$app->user->identity->opts['delivery_to_terminal'],
|
||||||
(int) ($connection['product']['wght'] ?? 0),
|
(int) ($connection['product']['wght'] ?? 0),
|
||||||
|
@ -439,7 +479,7 @@ class Order extends Document implements DocumentInterface
|
||||||
avia: true
|
avia: true
|
||||||
);
|
);
|
||||||
} catch (Exception $e) {
|
} catch (Exception $e) {
|
||||||
$connection['delivery']['avia']['error'] = true;
|
$connection['delivery']['error'] = true;
|
||||||
|
|
||||||
// var_dump($e->getMessage());
|
// var_dump($e->getMessage());
|
||||||
// var_dump($e->getTrace());
|
// 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'])) {
|
if (isset($connection['delivery']['error'])) {
|
||||||
// Не удалось рассчитать доставку
|
// Не удалось рассчитать доставку
|
||||||
|
|
||||||
|
// Инициализация индикатора
|
||||||
|
$delivery_icon = '';
|
||||||
|
|
||||||
// Инициализация времени
|
// Инициализация времени
|
||||||
$delivery = '?';
|
$delivery = '?';
|
||||||
|
|
||||||
|
@ -51,10 +54,19 @@ use DateTime;
|
||||||
} else {
|
} 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 {
|
try {
|
||||||
$delivery_converted = DateTime::createFromFormat('Y-m-d H:i:s', $connection['delivery']['orderDates']['giveoutFromOspReceiver'])->getTimestamp();
|
$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_converted = DateTime::createFromFormat('Y-m-d', $connection['delivery']['orderDates']['arrivalToOspReceiver'])->getTimestamp();
|
||||||
}
|
}
|
||||||
$delivery = ceil(($delivery_converted - time()) / 60 / 60 / 24) + 1;
|
$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">
|
<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>
|
||||||
<div class="col-2 my-auto text-right">
|
<div class="col-2 my-auto text-right">
|
||||||
<a type="button" onclick="return false;">$delivery дн</a>
|
<p>$delivery_icon $delivery дн</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-2 my-auto mr-3 text-right">
|
<div class="col-2 my-auto mr-3 text-right">
|
||||||
$cost
|
$cost
|
||||||
|
|
Reference in New Issue