Доработка

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 В будущем возможно заказ не только поставок реализовать * @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;
} }
// Запись валюты // Запись валюты

View File

@ -43,6 +43,9 @@ use DateTime;
if (isset($connection['delivery']['error'])) { if (isset($connection['delivery']['error'])) {
// Не удалось рассчитать доставку // Не удалось рассчитать доставку
// Инициализация индикатора
$delivery_icon = '';
// Инициализация времени // Инициализация времени
$delivery = '?'; $delivery = '?';
@ -51,6 +54,15 @@ 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();
@ -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