Доработка

This commit is contained in:
Arsen Mirzaev Tatyano-Muradovich 2021-06-07 05:53:14 +10:00
parent 21cec0c5b4
commit 4f898bf796
2 changed files with 74 additions and 22 deletions

View File

@ -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;
}
// Запись валюты

View File

@ -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