Изменение отображения в поиске
This commit is contained in:
parent
fab290eacd
commit
21cec0c5b4
|
@ -150,23 +150,26 @@ class OrderController extends Controller
|
||||||
|
|
||||||
// Инициализация входных данных
|
// Инициализация входных данных
|
||||||
$account = yii::$app->user->identity;
|
$account = yii::$app->user->identity;
|
||||||
$supplies = yii::$app->request->post('supplies');
|
$supply_id = yii::$app->request->post('supply_id');
|
||||||
|
$amount = yii::$app->request->post('amount') ?? 1;
|
||||||
|
$delivery_type = yii::$app->request->post('delivery_type');
|
||||||
|
|
||||||
|
// Запись настроек ответа в буфер
|
||||||
yii::$app->response->format = Response::FORMAT_JSON;
|
yii::$app->response->format = Response::FORMAT_JSON;
|
||||||
|
|
||||||
|
if (empty($supply_id) || empty($delivery_type)) {
|
||||||
|
// Не выполнены условия для выполнения
|
||||||
|
|
||||||
|
// 501 Not Implemented
|
||||||
|
yii::$app->response->statusCode = 501;
|
||||||
|
}
|
||||||
|
|
||||||
// Инициализация возврата по умолчанию
|
// Инициализация возврата по умолчанию
|
||||||
$return = [
|
$return = [
|
||||||
'_csrf' => yii::$app->request->getCsrfToken()
|
'_csrf' => yii::$app->request->getCsrfToken()
|
||||||
];
|
];
|
||||||
|
|
||||||
if (is_null($supplies)) {
|
// Инициализация корзины
|
||||||
// 501 Not Implemented
|
|
||||||
yii::$app->response->statusCode = 501;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!is_null($supplies)) {
|
|
||||||
// Переданы поставки для записи
|
|
||||||
|
|
||||||
if (!$model = Order::search($account)) {
|
if (!$model = Order::search($account)) {
|
||||||
// Корзина не найдена (текущий заказ)
|
// Корзина не найдена (текущий заказ)
|
||||||
|
|
||||||
|
@ -178,17 +181,8 @@ class OrderController extends Controller
|
||||||
AccountEdgeOrder::write($account->readId(), $model->readId(), 'current') or $model->addError('errors', 'Не удалось инициализировать ребро: АККАУНТ -> ЗАКАЗ');
|
AccountEdgeOrder::write($account->readId(), $model->readId(), 'current') or $model->addError('errors', 'Не удалось инициализировать ребро: АККАУНТ -> ЗАКАЗ');
|
||||||
}
|
}
|
||||||
|
|
||||||
// Проверка входных данных
|
|
||||||
if (!is_array($supplies)) {
|
|
||||||
// Неверные входные данные
|
|
||||||
|
|
||||||
// Запись ошибки
|
|
||||||
$model->addError('errors', 'Переменная должна быть массивом');
|
|
||||||
}
|
|
||||||
|
|
||||||
// Если запись не удалась, то вернуть код: 500 Internal Server Error
|
// Если запись не удалась, то вернуть код: 500 Internal Server Error
|
||||||
$model->writeSupply($supplies) or yii::$app->response->statusCode = 500;
|
$model->writeSupply($supply_id, $delivery_type, (int) $amount) or yii::$app->response->statusCode = 500;
|
||||||
}
|
|
||||||
|
|
||||||
return $return;
|
return $return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -105,9 +105,10 @@ class ProfileController extends Controller
|
||||||
// Инициализация
|
// Инициализация
|
||||||
is_array($model->opts) || $model->opts = [];
|
is_array($model->opts) || $model->opts = [];
|
||||||
|
|
||||||
// Запись
|
// Запись в буфер
|
||||||
$model->opts = array_merge($model->opts, $vars['opts']);
|
$model->opts = array_merge($model->opts, $vars['opts']);
|
||||||
|
|
||||||
|
// Запись в базу данных
|
||||||
$model->update();
|
$model->update();
|
||||||
} else {
|
} else {
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -165,6 +165,9 @@ class SearchController extends Controller
|
||||||
select: '{supply, supply_edge_product}'
|
select: '{supply, supply_edge_product}'
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// Инициализация буфера
|
||||||
|
$buffer_connections = [];
|
||||||
|
|
||||||
if (count($connections) === 11) {
|
if (count($connections) === 11) {
|
||||||
// Если в базе данных хранится много поставок
|
// Если в базе данных хранится много поставок
|
||||||
|
|
||||||
|
@ -179,15 +182,16 @@ class SearchController extends Controller
|
||||||
$connection['account'] = Account::searchBySupplyId($connection['supply_edge_product'][0]['_from']);
|
$connection['account'] = Account::searchBySupplyId($connection['supply_edge_product'][0]['_from']);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// Инициализация доставки
|
// Инициализация доставки (автоматическая)
|
||||||
$connection['delivery'] = Dellin::calcDeliveryAdvanced(
|
$connection['delivery'] = Dellin::calcDeliveryAdvanced(
|
||||||
explode('_', $connection['account']['opts']['delivery_from_terminal'])[1],
|
$buffer['account']['opts']['delivery_from_terminal'],
|
||||||
explode('_', yii::$app->user->identity->opts['delivery_to_terminal'])[1],
|
yii::$app->user->identity->opts['delivery_to_terminal'],
|
||||||
(int) ($connection['product']['wght'] ?? 0),
|
(int) ($connection['product']['wght'] ?? 0),
|
||||||
(int) ($connection['product']['dmns']['x'] ?? 0),
|
(int) ($connection['product']['dmns']['x'] ?? 0),
|
||||||
(int) ($connection['product']['dmns']['y'] ?? 0),
|
(int) ($connection['product']['dmns']['y'] ?? 0),
|
||||||
(int) ($connection['product']['dmns']['z'] ?? 0)
|
(int) ($connection['product']['dmns']['z'] ?? 0)
|
||||||
);
|
);
|
||||||
|
$buffer['delivery']['type'] = 'auto';
|
||||||
} catch (Exception $e) {
|
} catch (Exception $e) {
|
||||||
$connection['delivery']['error'] = true;
|
$connection['delivery']['error'] = true;
|
||||||
|
|
||||||
|
@ -196,9 +200,47 @@ class SearchController extends Controller
|
||||||
|
|
||||||
// Инициализация цены (цена поставки + цена доставки + наша наценка)
|
// Инициализация цены (цена поставки + цена доставки + наша наценка)
|
||||||
$connection['cost'] = ($cost['ЦенаЗаЕдиницу'] ?? $connection['supply_edge_product'][0]['onec']['Цены']['Цена']['ЦенаЗаЕдиницу']) + ($connection['delivery']['price']['all'] ?? $connection['delivery']['price']['one'] ?? 0) + ($settings['increase'] ?? 0);
|
$connection['cost'] = ($cost['ЦенаЗаЕдиницу'] ?? $connection['supply_edge_product'][0]['onec']['Цены']['Цена']['ЦенаЗаЕдиницу']) + ($connection['delivery']['price']['all'] ?? $connection['delivery']['price']['one'] ?? 0) + ($settings['increase'] ?? 0);
|
||||||
|
|
||||||
|
// Инициализация версии для рассчета доставки по воздуху
|
||||||
|
$buffer = $connection;
|
||||||
|
|
||||||
|
try {
|
||||||
|
// Инициализация доставки Dellin (самолётом)
|
||||||
|
$buffer['delivery'] = Dellin::calcDeliveryAdvanced(
|
||||||
|
$buffer['account']['opts']['delivery_from_terminal'],
|
||||||
|
yii::$app->user->identity->opts['delivery_to_terminal'],
|
||||||
|
(int) ($buffer['product']['wght'] ?? 0),
|
||||||
|
(int) ($buffer['product']['dmns']['x'] ?? 0),
|
||||||
|
(int) ($buffer['product']['dmns']['y'] ?? 0),
|
||||||
|
(int) ($buffer['product']['dmns']['z'] ?? 0),
|
||||||
|
avia: true
|
||||||
|
);
|
||||||
|
$buffer['delivery']['type'] = 'avia';
|
||||||
|
} catch (Exception $e) {
|
||||||
|
$buffer['delivery']['error'] = true;
|
||||||
|
|
||||||
|
// var_dump($e->getMessage());
|
||||||
|
// var_dump($e->getTrace());
|
||||||
|
// var_dump($e->getFile());
|
||||||
|
// die;
|
||||||
|
|
||||||
|
// var_dump(json_decode($e->getMessage(), true)['errors']);
|
||||||
|
// die;
|
||||||
}
|
}
|
||||||
|
|
||||||
$row = $connections;
|
if (!isset($buffer['delivery']['error']) || $buffer['delivery']['error'] !== true) {
|
||||||
|
// Если рассчиталась доставка самолётом
|
||||||
|
|
||||||
|
// Инициализация цены (цена поставки + цена доставки + наша наценка)
|
||||||
|
$buffer['cost'] = ($cost['ЦенаЗаЕдиницу'] ?? $buffer['supply_edge_product'][0]['onec']['Цены']['Цена']['ЦенаЗаЕдиницу']) + ($buffer['delivery']['price']['all'] ?? $buffer['delivery']['price']['one'] ?? 0) + ($settings['increase'] ?? 0);
|
||||||
|
|
||||||
|
// Запись в буфер
|
||||||
|
$buffer_connections[] = $buffer;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Запись обработанных данных
|
||||||
|
$row['supplies'] = array_merge($connections, $buffer_connections);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Запись ответа
|
// Запись ответа
|
||||||
|
|
|
@ -362,14 +362,14 @@ class Account extends Document implements IdentityInterface, PartnerInterface
|
||||||
foreach ($city->data['terminals']['terminal'] as $termial) {
|
foreach ($city->data['terminals']['terminal'] as $termial) {
|
||||||
// Перебор терминалов
|
// Перебор терминалов
|
||||||
|
|
||||||
if (in_array('id_'.$termial['id'], $list, true)) {
|
if (in_array($termial['id'], $list, true)) {
|
||||||
// Если встретился дубликат (исполняется очень часто)
|
// Если встретился дубликат (исполняется очень часто)
|
||||||
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Запись
|
// Запись
|
||||||
empty($termial['id']) or $list['id_'.$termial['id']] = $city->data['name'] . ' (' . $termial['address'] . ')';
|
$list[$termial['id']] = $city->data['name'] . ' (' . $termial['address'] . ')';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -393,15 +393,16 @@ class Account extends Document implements IdentityInterface, PartnerInterface
|
||||||
foreach ($terminals as $terminal) {
|
foreach ($terminals as $terminal) {
|
||||||
// Перебор городов
|
// Перебор городов
|
||||||
|
|
||||||
if (in_array('id_' . $terminal->dell, $list, true)) {
|
if (in_array($terminal->dell, $list, true)) {
|
||||||
// Если встретился дубликат (исполняется очень часто)
|
// Если встретился дубликат (исполняется очень часто)
|
||||||
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Запись
|
// Запись
|
||||||
empty($terminal->cntr) && empty($terminal->city) && empty($terminal->strt) && empty($terminal->hous)
|
// empty($terminal->cntr) &&
|
||||||
or $list['id_' . $terminal->dell] = "$terminal->city ($terminal->strt, $terminal->hous, $terminal->offs)";
|
empty($terminal->city) && empty($terminal->strt) && empty($terminal->hous)
|
||||||
|
or $list[$terminal->dell] = "$terminal->city ($terminal->strt, $terminal->hous" . (empty($terminal->offs) ? ')' : ", $terminal->offs)");
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->syncListWithSettings($list, 'delivery_to_terminal');
|
return $this->syncListWithSettings($list, 'delivery_to_terminal');
|
||||||
|
@ -431,18 +432,18 @@ class Account extends Document implements IdentityInterface, PartnerInterface
|
||||||
unset($list[$this->opts[$var]]);
|
unset($list[$this->opts[$var]]);
|
||||||
|
|
||||||
// Сохранение параметра в начале массива
|
// Сохранение параметра в начале массива
|
||||||
$list = array_merge([$this->opts[$var] => $buffer], $list);
|
$list = [$this->opts[$var] => $buffer] + $list;
|
||||||
} else {
|
} else {
|
||||||
// Совпадение не найдено
|
// Совпадение не найдено
|
||||||
|
|
||||||
// Сохранение параметра из данных аккаунта в начале массива
|
// Сохранение параметра из данных аккаунта в начале массива
|
||||||
$list = array_merge([$this->opts[$var] => $this->opts[$var]], $list);
|
$list = [$this->opts[$var] => $this->opts[$var]] + $list;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// Параметр $var не найден в настройках аккаунта
|
// Параметр $var не найден в настройках аккаунта
|
||||||
|
|
||||||
// Сохранение параметра из данных аккаунта в начале массива
|
// Сохранение параметра из данных аккаунта в начале массива
|
||||||
$list = array_merge(['Выберите' => 'Выберите'], $list);
|
$list = ['Выберите' => 'Выберите'] + $list;
|
||||||
}
|
}
|
||||||
|
|
||||||
return $list;
|
return $list;
|
||||||
|
|
|
@ -4,6 +4,8 @@ declare(strict_types=1);
|
||||||
|
|
||||||
namespace app\models;
|
namespace app\models;
|
||||||
|
|
||||||
|
use ArangoDBClient\Document as ArangoDBDocument;
|
||||||
|
|
||||||
class Dellin extends Document
|
class Dellin extends Document
|
||||||
{
|
{
|
||||||
public static function collectionName(): string
|
public static function collectionName(): string
|
||||||
|
@ -33,9 +35,26 @@ class Dellin extends Document
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Поиск по идентификатору города
|
* Поиск по идентификатору города
|
||||||
|
*
|
||||||
|
* @param string $id Идентификатор города
|
||||||
*/
|
*/
|
||||||
public static function searchByCityId(string $id): ?static
|
public static function searchByCityId(string $id): ?static
|
||||||
{
|
{
|
||||||
return static::findOne(['data["id"]' => $id]);
|
return static::findOne(['data["id"]' => $id]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Поиск по идентификатору терминала
|
||||||
|
*
|
||||||
|
* @param string $id Идентификатор терминала
|
||||||
|
* @param bool $terminal_data_only Запрос только данных терминала
|
||||||
|
*/
|
||||||
|
public static function searchByTerminalId(string $id, bool $terminal_data_only = false): bool|static|array|null|ArangoDBDocument
|
||||||
|
{
|
||||||
|
if ($terminal_data_only) {
|
||||||
|
return static::find()->foreach(['terminal' => self::collectionName() . '.data["terminals"]["terminal"]'])->where(['terminal["id"] == "' . $id . '"'])->select('terminal')->createCommand()->execute()->getAll()[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
return static::find()->foreach(['terminal' => self::collectionName() . '.data["terminals"]["terminal"]'])->where(['terminal["id"] == "' . $id . '"'])->one();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -100,35 +100,31 @@ class Order extends Document implements DocumentInterface
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Запись товара
|
* Запись товара к заказу
|
||||||
*
|
*
|
||||||
* $supply = [ Supply $supply, int $amount = 1 ]
|
* $supply = [ Supply $supply, int $amount = 1 ]
|
||||||
*
|
*
|
||||||
* @param Supply|array $supply Поставка
|
* @param string $supply_id Идентификатор поставки
|
||||||
|
* @param string $delivery_type Тип доставки
|
||||||
|
* @param int $amount Количество
|
||||||
* @param Account $trgt Заказчик
|
* @param Account $trgt Заказчик
|
||||||
*
|
*
|
||||||
* @return int Количество записанных поставок
|
* @return int Количество записанных поставок
|
||||||
*
|
*
|
||||||
* @todo Создать параметр разделителя для администрации
|
* @todo Создать параметр разделителя для администрации
|
||||||
*/
|
*/
|
||||||
public function writeSupply(Supply|string|array $supply, Account $trgt = null): int
|
public function writeSupply(string $supply_id, string $delivery_type, int $amount = 1, Account $trgt = null): int
|
||||||
{
|
{
|
||||||
// Инициализация
|
// Инициализация
|
||||||
$trgt ?? $trgt = yii::$app->user->identity ?? throw new Exception('Не удалось инициализировать заказчика');
|
$trgt ?? $trgt = yii::$app->user->identity ?? throw new Exception('Не удалось инициализировать заказчика');
|
||||||
|
|
||||||
if ($supply instanceof Supply) {
|
// Проверка корзины
|
||||||
// Передана инстанция класса поставки или второй элемент массива не является числом
|
|
||||||
|
|
||||||
// Унификация входных данных
|
|
||||||
$supply = [$supply->catn => 1];
|
|
||||||
}
|
|
||||||
|
|
||||||
if (is_null($this->_key)) {
|
if (is_null($this->_key)) {
|
||||||
// Корзина не инициализирована
|
// Корзина не инициализирована
|
||||||
|
|
||||||
// Инициализация
|
// Инициализация корзины
|
||||||
if (!$this->save()) {
|
if (!$this->save()) {
|
||||||
// Инициализация заказа не удалась
|
// Инициализация корзины (активного заказа) не удалась
|
||||||
|
|
||||||
throw new Exception('Ошибка при записи заказа в базу данных');
|
throw new Exception('Ошибка при записи заказа в базу данных');
|
||||||
}
|
}
|
||||||
|
@ -142,43 +138,46 @@ class Order extends Document implements DocumentInterface
|
||||||
}
|
}
|
||||||
|
|
||||||
// Инициализация
|
// Инициализация
|
||||||
$amount = 0;
|
$amount_buffer = 0;
|
||||||
|
|
||||||
foreach (is_array($supply) ? $supply : [$supply => 1] as $supply_raw => $amount_raw) {
|
// Обработка поставок
|
||||||
// Перебор поставок
|
for ($i = 0; $i < $amount; $i++) {
|
||||||
|
|
||||||
for ($i = 0; $i < $amount_raw; $i++) {
|
|
||||||
// Создание рёбер соразмерно запросу (добавление нескольких продуктов в корзину)
|
// Создание рёбер соразмерно запросу (добавление нескольких продуктов в корзину)
|
||||||
|
|
||||||
// Запись ребра: ЗАКАЗ -> ПОСТАВКА
|
// Запись ребра: ЗАКАЗ -> ПОСТАВКА
|
||||||
if (!$supply_model = Supply::searchByCatn($supply_raw) or !OrderEdgeSupply::write($this->readId(), $supply_model->readId(), 'write')) {
|
if (!$supply_model = Supply::searchById($supply_id) or !$order_edge_supply = OrderEdgeSupply::write($this->readId(), $supply_model->readId(), 'write')) {
|
||||||
// Поставка не найдена или запись ребра не удалась
|
// Поставка не найдена или запись ребра не удалась
|
||||||
|
|
||||||
continue;
|
continue;
|
||||||
} else {
|
} else {
|
||||||
// Ребро создано (товар подключен к заказу)
|
// Ребро создано (товар подключен к заказу)
|
||||||
|
|
||||||
// Постинкрементация счётчика добавленных товаров
|
// Обновление счётчика добавленных товаров
|
||||||
$amount++;
|
$amount_buffer++;
|
||||||
|
|
||||||
|
// Запись типа доставки
|
||||||
|
$order_edge_supply->dlvr = [
|
||||||
|
'type' => $delivery_type
|
||||||
|
];
|
||||||
|
$order_edge_supply->update();
|
||||||
|
|
||||||
// Запись в журнал
|
// Запись в журнал
|
||||||
$this->journal('write', ['target' => $supply_model->readId()]);
|
$this->journal('write', ['target' => $supply_model->readId()]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if ($amount === 0) {
|
if ($amount_buffer === 0) {
|
||||||
// Отправка уведомления
|
// Отправка уведомления
|
||||||
self::notification('Неудачная попытка добавить товар в корзину');
|
self::notification('Неудачная попытка добавить товар в корзину');
|
||||||
} else if ($amount === 1) {
|
} else if ($amount_buffer === 1) {
|
||||||
// Отправка уведомления
|
// Отправка уведомления
|
||||||
self::notification('Товар ' . $supply_model->catn . ' добавлен в корзину');
|
self::notification('Товар ' . $supply_model->catn . ' добавлен в корзину');
|
||||||
} else {
|
} else {
|
||||||
// Отправка уведомления
|
// Отправка уведомления
|
||||||
self::notification('Добавлено ' . $amount . ' товаров в корзину');
|
self::notification('Добавлено ' . $amount_buffer . ' товаров в корзину');
|
||||||
}
|
}
|
||||||
|
|
||||||
return $amount;
|
return $amount_buffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -321,6 +320,14 @@ class Order extends Document implements DocumentInterface
|
||||||
select: '{supply, order_edge_supply}'
|
select: '{supply, order_edge_supply}'
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
|
// Разделение поставок по типам доставки
|
||||||
|
// foreach ($connections as $key => &$connection) {
|
||||||
|
// // Перебор поставок
|
||||||
|
|
||||||
|
// $connection
|
||||||
|
// }
|
||||||
|
|
||||||
// Инициализация реестра дубликатов
|
// Инициализация реестра дубликатов
|
||||||
$registry = [];
|
$registry = [];
|
||||||
|
|
||||||
|
@ -328,7 +335,10 @@ class Order extends Document implements DocumentInterface
|
||||||
foreach ($connections as $key => &$connection) {
|
foreach ($connections as $key => &$connection) {
|
||||||
// Перебор поставок
|
// Перебор поставок
|
||||||
|
|
||||||
if (in_array($connection['supply']['catn'], $registry)) {
|
if (in_array([
|
||||||
|
'catn' => $connection['supply']['catn'],
|
||||||
|
'type' => $connection['order_edge_supply'][0]['dlvr']['type'] ?? 'auto'
|
||||||
|
], $registry)) {
|
||||||
// Если данная поставка найдена в реестре
|
// Если данная поставка найдена в реестре
|
||||||
|
|
||||||
// Удаление
|
// Удаление
|
||||||
|
@ -350,7 +360,10 @@ class Order extends Document implements DocumentInterface
|
||||||
$amount++;
|
$amount++;
|
||||||
|
|
||||||
// Запись в реестр
|
// Запись в реестр
|
||||||
$registry[] = $connection_for_check['supply']['catn'];
|
$registry[] = [
|
||||||
|
'catn' => $connection_for_check['supply']['catn'],
|
||||||
|
'type' => $connection['order_edge_supply'][0]['dlvr']['type'] ?? 'auto'
|
||||||
|
];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -384,11 +397,14 @@ 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') {
|
||||||
|
// Доставка автоматическая
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// Инициализация доставки Dellin (автоматическая)
|
// Инициализация доставки Dellin (автоматическая)
|
||||||
$connection['delivery']['auto'] = Dellin::calcDeliveryAdvanced(
|
$connection['delivery'] = Dellin::calcDeliveryAdvanced(
|
||||||
explode('_', $connection['account']['opts']['delivery_from_terminal'])[1],
|
$connection['account']['opts']['delivery_from_terminal'],
|
||||||
explode('_', yii::$app->user->identity->opts['delivery_to_terminal'])[1],
|
yii::$app->user->identity->opts['delivery_to_terminal'],
|
||||||
(int) ($connection['product']['wght'] ?? 0),
|
(int) ($connection['product']['wght'] ?? 0),
|
||||||
(int) ($connection['product']['dmns']['x'] ?? 0),
|
(int) ($connection['product']['dmns']['x'] ?? 0),
|
||||||
(int) ($connection['product']['dmns']['y'] ?? 0),
|
(int) ($connection['product']['dmns']['y'] ?? 0),
|
||||||
|
@ -396,19 +412,25 @@ class Order extends Document implements DocumentInterface
|
||||||
count($connection['order_edge_supply'])
|
count($connection['order_edge_supply'])
|
||||||
);
|
);
|
||||||
} catch (Exception $e) {
|
} catch (Exception $e) {
|
||||||
$connection['delivery']['auto']['error'] = true;
|
$connection['delivery']['error'] = true;
|
||||||
|
|
||||||
|
// var_dump($e->getMessage());
|
||||||
|
// var_dump($e->getTrace());
|
||||||
|
// var_dump($e->getFile()); die;
|
||||||
|
|
||||||
// var_dump(json_decode($e->getMessage(), true)['errors']); die;
|
// var_dump(json_decode($e->getMessage(), true)['errors']); die;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Запись цены (цена поставки + цена доставки + наша наценка)
|
// Запись цены (цена поставки + цена доставки + наша наценка)
|
||||||
$connection['cost']['auto'] = ($cost['ЦенаЗаЕдиницу'] ?? $connection['supply']->onec['Цены']['Цена']['ЦенаЗаЕдиницу']) + ($connection['delivery']['auto']['price']['all'] ?? $connection['delivery']['auto']['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;
|
||||||
|
} else {
|
||||||
|
// Доставка самолётом
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// Инициализация доставки Dellin (автоматическая)
|
// Инициализация доставки Dellin (самолётом)
|
||||||
$connection['delivery']['avia'] = Dellin::calcDeliveryAdvanced(
|
$connection['delivery']['avia'] = Dellin::calcDeliveryAdvanced(
|
||||||
explode('_', $connection['account']['opts']['delivery_from_terminal'])[1],
|
$connection['account']['opts']['delivery_from_terminal'],
|
||||||
explode('_', yii::$app->user->identity->opts['delivery_to_terminal'])[1],
|
yii::$app->user->identity->opts['delivery_to_terminal'],
|
||||||
(int) ($connection['product']['wght'] ?? 0),
|
(int) ($connection['product']['wght'] ?? 0),
|
||||||
(int) ($connection['product']['dmns']['x'] ?? 0),
|
(int) ($connection['product']['dmns']['x'] ?? 0),
|
||||||
(int) ($connection['product']['dmns']['y'] ?? 0),
|
(int) ($connection['product']['dmns']['y'] ?? 0),
|
||||||
|
@ -419,11 +441,16 @@ class Order extends Document implements DocumentInterface
|
||||||
} catch (Exception $e) {
|
} catch (Exception $e) {
|
||||||
$connection['delivery']['avia']['error'] = true;
|
$connection['delivery']['avia']['error'] = true;
|
||||||
|
|
||||||
|
// var_dump($e->getMessage());
|
||||||
|
// var_dump($e->getTrace());
|
||||||
|
// var_dump($e->getFile()); die;
|
||||||
|
|
||||||
// var_dump(json_decode($e->getMessage(), true)['errors']); die;
|
// var_dump(json_decode($e->getMessage(), true)['errors']); die;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Запись цены (цена поставки + цена доставки + наша наценка)
|
// Запись цены (цена поставки + цена доставки + наша наценка)
|
||||||
$connection['cost']['avia'] = ($cost['ЦенаЗаЕдиницу'] ?? $connection['supply']->onec['Цены']['Цена']['ЦенаЗаЕдиницу']) + ($connection['delivery']['avia']['price']['all'] ?? $connection['delivery']['avia']['price']['one'] ?? 0) + ($settings['increase'] ?? 0) ?? 0;
|
$connection['cost']['avia'] = ($cost['ЦенаЗаЕдиницу'] ?? $connection['supply']->onec['Цены']['Цена']['ЦенаЗаЕдиницу']) + ($connection['delivery']['avia']['price']['all'] ?? $connection['delivery']['avia']['price']['one'] ?? 0) + ($settings['increase'] ?? 0) ?? 0;
|
||||||
|
}
|
||||||
|
|
||||||
// Запись валюты
|
// Запись валюты
|
||||||
$connection['currency'] = $cost['Валюта'];
|
$connection['currency'] = $cost['Валюта'];
|
||||||
|
|
|
@ -26,7 +26,8 @@ class OrderEdgeSupply extends Edge
|
||||||
'comm',
|
'comm',
|
||||||
'cost',
|
'cost',
|
||||||
'time',
|
'time',
|
||||||
'stts'
|
'stts',
|
||||||
|
'dlvr'
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -42,7 +43,8 @@ class OrderEdgeSupply extends Edge
|
||||||
'comm' => 'Комментарий',
|
'comm' => 'Комментарий',
|
||||||
'cost' => 'Цена',
|
'cost' => 'Цена',
|
||||||
'time' => 'Время',
|
'time' => 'Время',
|
||||||
'stts' => 'Статус'
|
'stts' => 'Статус',
|
||||||
|
'dlvr' => 'Доставка'
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -76,6 +78,11 @@ class OrderEdgeSupply extends Edge
|
||||||
'time',
|
'time',
|
||||||
'integer',
|
'integer',
|
||||||
'message' => '{attribute} должно быть числом'
|
'message' => '{attribute} должно быть числом'
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'dlvr',
|
||||||
|
'arrayValidator',
|
||||||
|
'message' => '{attribute} должен быть массивом'
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
|
|
|
@ -43,13 +43,15 @@ class Terminal extends Document
|
||||||
'city',
|
'city',
|
||||||
'strt',
|
'strt',
|
||||||
'hous',
|
'hous',
|
||||||
'offs',
|
'offs'
|
||||||
'dell'
|
|
||||||
],
|
],
|
||||||
'string'
|
'string'
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
'hndl',
|
[
|
||||||
|
'dell',
|
||||||
|
'hndl'
|
||||||
|
],
|
||||||
'int'
|
'int'
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
|
|
|
@ -13,7 +13,6 @@ use GuzzleHttp\Client as Guzzle;
|
||||||
use GuzzleHttp\Exception\ClientException as GuzzleException;
|
use GuzzleHttp\Exception\ClientException as GuzzleException;
|
||||||
|
|
||||||
use Exception;
|
use Exception;
|
||||||
use phpDocumentor\Reflection\Types\Nullable;
|
|
||||||
|
|
||||||
class Dellin extends Model
|
class Dellin extends Model
|
||||||
{
|
{
|
||||||
|
@ -62,8 +61,8 @@ class Dellin extends Model
|
||||||
* Рассчет нескольких товаров идет через простое перемножение результатов доставки одного товара
|
* Рассчет нескольких товаров идет через простое перемножение результатов доставки одного товара
|
||||||
* В API всегда идет рассчет для одного товара, так было решено
|
* В API всегда идет рассчет для одного товара, так было решено
|
||||||
*
|
*
|
||||||
* @param string $from Номер КЛАДР
|
* @param string $from Идентификатор терминала Dellin
|
||||||
* @param string $to Номер КЛАДР
|
* @param string $to Идентификатор терминала Dellin
|
||||||
* @param int $weight Вес (г)
|
* @param int $weight Вес (г)
|
||||||
* @param int $x Ширина (cм)
|
* @param int $x Ширина (cм)
|
||||||
* @param int $y Высота (cм)
|
* @param int $y Высота (cм)
|
||||||
|
@ -80,6 +79,10 @@ class Dellin extends Model
|
||||||
return self::handle(function () use ($from, $to, $weight, $x, $y, $z, $amount, $avia) {
|
return self::handle(function () use ($from, $to, $weight, $x, $y, $z, $amount, $avia) {
|
||||||
// Всё готово к работе
|
// Всё готово к работе
|
||||||
|
|
||||||
|
// Инициализация
|
||||||
|
$from = DellinModel::searchByTerminalId($from, terminal_data_only: true);
|
||||||
|
$to = DellinModel::searchByTerminalId($to, terminal_data_only: true);
|
||||||
|
|
||||||
// Значения по умолчанию, если указан 0
|
// Значения по умолчанию, если указан 0
|
||||||
$x === 0 and $x = 25;
|
$x === 0 and $x = 25;
|
||||||
$y === 0 and $y = 55;
|
$y === 0 and $y = 55;
|
||||||
|
@ -131,11 +134,11 @@ class Dellin extends Model
|
||||||
|
|
||||||
$query['delivery']['deliveryType']['type'] = 'small';
|
$query['delivery']['deliveryType']['type'] = 'small';
|
||||||
$query['delivery']['derival']['variant'] = 'address';
|
$query['delivery']['derival']['variant'] = 'address';
|
||||||
$query['delivery']['derival']['address']['search'] = $from;
|
$query['delivery']['derival']['address']['search'] = $from->fullAddress;
|
||||||
$query['delivery']['derival']['time']['worktimeStart'] = '08:00';
|
$query['delivery']['derival']['time']['worktimeStart'] = '08:00';
|
||||||
$query['delivery']['derival']['time']['worktimeEnd'] = '20:00';
|
$query['delivery']['derival']['time']['worktimeEnd'] = '20:00';
|
||||||
$query['delivery']['arrival']['variant'] = 'address';
|
$query['delivery']['arrival']['variant'] = 'address';
|
||||||
$query['delivery']['arrival']['address']['search'] = $to;
|
$query['delivery']['arrival']['address']['search'] = $to->fullAddress;
|
||||||
$query['delivery']['arrival']['time']['worktimeStart'] = '08:00';
|
$query['delivery']['arrival']['time']['worktimeStart'] = '08:00';
|
||||||
$query['delivery']['arrival']['time']['worktimeEnd'] = '20:00';
|
$query['delivery']['arrival']['time']['worktimeEnd'] = '20:00';
|
||||||
} else {
|
} else {
|
||||||
|
@ -155,9 +158,9 @@ class Dellin extends Model
|
||||||
}
|
}
|
||||||
|
|
||||||
$query['delivery']['derival']['variant'] = 'terminal';
|
$query['delivery']['derival']['variant'] = 'terminal';
|
||||||
$query['delivery']['derival']['terminalID'] = $from;
|
$query['delivery']['derival']['terminalID'] = $from->id;
|
||||||
$query['delivery']['arrival']['variant'] = 'terminal';
|
$query['delivery']['arrival']['variant'] = 'terminal';
|
||||||
$query['delivery']['arrival']['terminalID'] = $to;
|
$query['delivery']['arrival']['terminalID'] = $to->id;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Инициализация
|
// Инициализация
|
||||||
|
@ -222,10 +225,12 @@ class Dellin extends Model
|
||||||
/**
|
/**
|
||||||
* Рассчет доставки
|
* Рассчет доставки
|
||||||
*
|
*
|
||||||
* @param string $from Номер КЛАДР
|
* @param string $from Идентификатор терминала Dellin
|
||||||
* @param string $to Номер КЛАДР
|
* @param string $to Идентификатор терминала Dellin
|
||||||
*
|
*
|
||||||
* @return string
|
* @return string
|
||||||
|
*
|
||||||
|
* @deprecated
|
||||||
*/
|
*/
|
||||||
public static function calcDelivery(string $from, string $to): array
|
public static function calcDelivery(string $from, string $to): array
|
||||||
{
|
{
|
||||||
|
|
|
@ -40,41 +40,27 @@ use DateTime;
|
||||||
// Перебор поставок
|
// Перебор поставок
|
||||||
|
|
||||||
// Инициализация доставки
|
// Инициализация доставки
|
||||||
if (isset($connection['delivery']['auto']['error'])) {
|
if (isset($connection['delivery']['error'])) {
|
||||||
// Не удалось рассчитать доставку
|
// Не удалось рассчитать доставку
|
||||||
|
|
||||||
// Инициализация времени
|
// Инициализация времени
|
||||||
$delivery_auto = '?';
|
$delivery = '?';
|
||||||
|
|
||||||
// Инициализация цены
|
// Инициализация цены
|
||||||
$cost_auto = '?';
|
$cost = '?';
|
||||||
} else {
|
} else {
|
||||||
// Удалось рассчитать доставку
|
// Удалось рассчитать доставку
|
||||||
|
|
||||||
// Инициализация времени
|
// Инициализация времени
|
||||||
$delivery_auto = ceil((DateTime::createFromFormat('Y-m-d', $connection['delivery']['auto']['orderDates']['arrivalToOspReceiver'])->getTimestamp() - time()) / 60 / 60 / 24) + 1;
|
try {
|
||||||
|
$delivery_converted = DateTime::createFromFormat('Y-m-d H:i:s', $connection['delivery']['orderDates']['giveoutFromOspReceiver'])->getTimestamp();
|
||||||
// Инициализация цены
|
} catch(Exception $e) {
|
||||||
$cost_auto = $connection['cost']['auto'] . ' ' . $connection['currency'];
|
$delivery_converted = DateTime::createFromFormat('Y-m-d', $connection['delivery']['orderDates']['arrivalToOspReceiver'])->getTimestamp();
|
||||||
}
|
}
|
||||||
|
$delivery = ceil(($delivery_converted - time()) / 60 / 60 / 24) + 1;
|
||||||
// Инициализация доставки
|
|
||||||
if (isset($connection['delivery']['avia']['error'])) {
|
|
||||||
// Не удалось рассчитать доставку
|
|
||||||
|
|
||||||
// Инициализация времени
|
|
||||||
$delivery_avia = '?';
|
|
||||||
|
|
||||||
// Инициализация цены
|
// Инициализация цены
|
||||||
$cost_avia = '?';
|
$cost = $connection['cost'] . ' ' . $connection['currency'];
|
||||||
} else {
|
|
||||||
// Удалось рассчитать доставку
|
|
||||||
|
|
||||||
// Инициализация времени
|
|
||||||
$delivery_avia = ceil((DateTime::createFromFormat('Y-m-d H:i:s', $connection['delivery']['avia']['orderDates']['giveoutFromOspReceiver'])->getTimestamp() - time()) / 60 / 60 / 24) + 1;
|
|
||||||
|
|
||||||
// Инициализация цены
|
|
||||||
$cost_avia = $connection['cost']['avia'] . ' ' . $connection['currency'];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Инициализация комментария
|
// Инициализация комментария
|
||||||
|
@ -97,12 +83,10 @@ 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_auto дн</a>
|
<a type="button" onclick="return false;">$delivery дн</a>
|
||||||
<a type="button" onclick="return false;">$delivery_avia дн</a>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="col-2 my-auto mr-3 text-right">
|
<div class="col-2 my-auto mr-3 text-right">
|
||||||
$cost_auto
|
$cost
|
||||||
$cost_avia
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="dropdown-divider"></div>
|
<div class="dropdown-divider"></div>
|
||||||
|
|
|
@ -31,13 +31,14 @@
|
||||||
|
|
||||||
<?php
|
<?php
|
||||||
// Инициализация
|
// Инициализация
|
||||||
extract($row[0]);
|
extract($row);
|
||||||
$name ?? $name = 'Без названия';
|
$name ?? $name = 'Без названия';
|
||||||
// $dscr ?? $dscr = 'Описание';
|
// $dscr ?? $dscr = 'Описание';
|
||||||
$catg ?? $catg = 'Категория';
|
$catg ?? $catg = 'Категория';
|
||||||
$covr = null;
|
$catn ?? $catn = 'Неизвестно';
|
||||||
|
|
||||||
// Инициализация обложки
|
// Инициализация обложки
|
||||||
|
$covr = null;
|
||||||
foreach ($imgs ?? [] as $img) {
|
foreach ($imgs ?? [] as $img) {
|
||||||
// Перебор изображений для обложки
|
// Перебор изображений для обложки
|
||||||
|
|
||||||
|
@ -61,12 +62,23 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Инициализация буфера с HTML поставок
|
||||||
$supplies_html = '';
|
$supplies_html = '';
|
||||||
|
|
||||||
|
// Инициализация блокировщика для пустого блока (на случай, если нет поставок, чтобы не было дубликатов вывода)
|
||||||
|
$empty_block = false;
|
||||||
|
|
||||||
|
// Инициализация счётчика поставок
|
||||||
|
$supplies_amount = count($row['supplies']);
|
||||||
|
|
||||||
|
// Инициализация указателя номера цикла
|
||||||
|
$supply_iterator = 1;
|
||||||
?>
|
?>
|
||||||
|
|
||||||
|
<?php foreach ($row['supplies'] as $supply) : ?>
|
||||||
<?php
|
<?php
|
||||||
// Инициализация артикула
|
// Инициализация переменных
|
||||||
$catn = $supply['catn'] ?? $supply['onec']['Артикул'];
|
extract($supply);
|
||||||
|
|
||||||
// Инициализация цены
|
// Инициализация цены
|
||||||
$price_raw = $cost;
|
$price_raw = $cost;
|
||||||
|
@ -81,25 +93,49 @@
|
||||||
$amount .= ' шт';
|
$amount .= ' шт';
|
||||||
}
|
}
|
||||||
|
|
||||||
// Инициализация доставки// Инициализация доставки
|
// Инициализация доставки
|
||||||
if (isset($delivery['error'])) {
|
if (isset($delivery['error']) || $delivery === '?') {
|
||||||
// Не удалось рассчитать доставку
|
// Не удалось рассчитать доставку
|
||||||
|
|
||||||
$delivery = '?';
|
$delivery = '?';
|
||||||
} else {
|
} else {
|
||||||
// Удалось рассчитать доставку
|
// Удалось рассчитать доставку
|
||||||
|
|
||||||
$delivery = (DateTime::createFromFormat('Y-m-d', $delivery['orderDates']['arrivalToOspReceiver'])->getTimestamp() - time()) / 60 / 60 / 24 + 1;
|
// Инициализация типа доставки
|
||||||
|
$delivery_type = $delivery['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', $delivery['orderDates']['giveoutFromOspReceiver'])->getTimestamp();
|
||||||
|
} catch (Exception $e) {
|
||||||
|
$delivery_converted = DateTime::createFromFormat('Y-m-d', $delivery['orderDates']['arrivalToOspReceiver'])->getTimestamp();
|
||||||
|
}
|
||||||
|
$delivery = ceil(($delivery_converted - time()) / 60 / 60 / 24) + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Инициализация индекса аккаунта
|
// Инициализация индекса аккаунта
|
||||||
$index = $account['indx'] ?? 'Неизвестен';
|
$index = $account['indx'] ?? 'Неизвестен';
|
||||||
|
|
||||||
|
// Инициализация модификатора класса
|
||||||
|
if ($supplies_amount > $supply_iterator) {
|
||||||
|
$supply_class_modifier = 'mb-1';
|
||||||
|
} else {
|
||||||
|
$supply_class_modifier = '';
|
||||||
|
}
|
||||||
|
|
||||||
if ($amount_raw < 1 || $price_raw < 1) {
|
if ($amount_raw < 1 || $price_raw < 1) {
|
||||||
// Нет в наличии или цена 0 рублей
|
// Нет в наличии или цена 0 рублей
|
||||||
|
|
||||||
|
if ($empty_block) continue;
|
||||||
|
|
||||||
$supplies_html .= <<<HTML
|
$supplies_html .= <<<HTML
|
||||||
<div class="row my-auto m-0 h-100 text-right">
|
<div class="row $supply_class_modifier m-0 h-100 text-right">
|
||||||
<a class="col-auto ml-auto my-auto text-dark" href="/order/new/custom" role="button" onclick="return false;">
|
<a class="col-auto ml-auto my-auto text-dark" href="/order/new/custom" role="button" onclick="return false;">
|
||||||
<small>
|
<small>
|
||||||
Заказать поиск у оператора
|
Заказать поиск у оператора
|
||||||
|
@ -107,41 +143,42 @@
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
HTML;
|
HTML;
|
||||||
|
|
||||||
|
// Запись блокировщика
|
||||||
|
$empty_block = true;
|
||||||
} else {
|
} else {
|
||||||
// Есть в наличии
|
// Есть в наличии
|
||||||
|
|
||||||
$supplies_html .= <<<HTML
|
$supplies_html .= <<<HTML
|
||||||
<div class="row my-auto m-0 h-100 text-right">
|
<div class="row $supply_class_modifier m-0 text-right">
|
||||||
<small class="col-1 my-auto ml-auto pl-2 pr-0">
|
<div class="col-5 mr-4"></div>
|
||||||
$index
|
<small class="col-1 ml-2 my-auto pl-2 pr-0">$index</small>
|
||||||
</small>
|
<small class="col-1 my-auto pl-2 pr-0 text-center">$amount</small>
|
||||||
<small class="col-1 my-auto pl-2 pr-0">
|
<small class="col-auto mr-2 my-auto pl-2 pr-0 text-left">$delivery_icon $delivery дн</small>
|
||||||
$amount
|
<b class="col-2 ml-auto my-auto">$price</b>
|
||||||
</small>
|
<a class="col-1 ml-0 py-2 text-dark d-flex button_white rounded" title="Добавить $catn в корзину" role="button" onclick="return cart_write('{$supply['_id']}', '$delivery_type');">
|
||||||
<small class="col-1 my-auto pl-2 pr-0 mr-2">
|
|
||||||
$delivery дн
|
|
||||||
</small>
|
|
||||||
<b class="col-2 my-auto">
|
|
||||||
$price
|
|
||||||
</b>
|
|
||||||
<a class="col-1 h-100 text-dark d-flex button_white rounded" title="Добавить $catn в корзину" role="button" onclick="return cart_write('$catn');">
|
|
||||||
<i class="fas fa-cart-arrow-down pr-1 m-auto"></i>
|
<i class="fas fa-cart-arrow-down pr-1 m-auto"></i>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
HTML;
|
HTML;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Обновление счётчика
|
||||||
|
++$supply_iterator;
|
||||||
?>
|
?>
|
||||||
|
|
||||||
|
<?php endforeach ?>
|
||||||
|
|
||||||
<div class="col pb-2">
|
<div class="col pb-2">
|
||||||
<div class="row p-2 rounded">
|
<div class="row p-2 rounded">
|
||||||
<img class="ml-0 h-100 img-fluid rounded" src="<?= $covr ?>" />
|
<img class="ml-0 h-100 img-fluid rounded" src="<?= $covr ?>" />
|
||||||
<div class="col-3 ml-3 p-0 d-flex flex-column">
|
<div class="col-3 ml-3 p-0 d-flex flex-column row_fixed_height">
|
||||||
<a class="my-auto text-dark" href="/product/<?= $catn ?>">
|
<a class="my-auto text-dark" href="/product/<?= $catn ?>">
|
||||||
<h5 class="m-0"><?= $name ?></h5>
|
<h5 class="m-0"><?= $name ?></h5>
|
||||||
<h6 class="m-0"><small><?= $catn ?></small></h6>
|
<h6 class="m-0"><small><?= $catn ?></small></h6>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-1 ml-2 p-0 d-flex flex-column">
|
<div class="col-1 ml-2 p-0 d-flex flex-column row_fixed_height">
|
||||||
<a class="my-auto text-dark" href="/product/<?= $catn ?>">
|
<a class="my-auto text-dark" href="/product/<?= $catn ?>">
|
||||||
<small><?= $catg ?></small>
|
<small><?= $catg ?></small>
|
||||||
</a>
|
</a>
|
||||||
|
|
|
@ -38,7 +38,7 @@ if (isset($history) && $history) {
|
||||||
foreach ($response as $row) {
|
foreach ($response as $row) {
|
||||||
// Перебор найденных данных
|
// Перебор найденных данных
|
||||||
|
|
||||||
$catn = $row[0]['supply']['catn'];
|
$catn = $row['catn'];
|
||||||
|
|
||||||
echo <<<HTML
|
echo <<<HTML
|
||||||
<a class="dropdown-item button_white text-dark" href="/product/$catn">$catn</a>
|
<a class="dropdown-item button_white text-dark" href="/product/$catn">$catn</a>
|
||||||
|
|
|
@ -1,14 +1,17 @@
|
||||||
#page_search nav>div,
|
#page_search nav>div, #page_search section>div>div {
|
||||||
#page_search section>div>div {
|
/* height : 65px; */
|
||||||
height : 65px;
|
|
||||||
background-color: #fff;
|
background-color: #fff;
|
||||||
border-right : 0 solid #fff;
|
border-right: 0 solid #fff;
|
||||||
transition : 100ms ease-in;
|
transition: 100ms ease-in;
|
||||||
|
}
|
||||||
|
|
||||||
|
#page_search .row_fixed_height {
|
||||||
|
height: calc(65px - 1rem);
|
||||||
}
|
}
|
||||||
|
|
||||||
#page_search section>div>div>img {
|
#page_search section>div>div>img {
|
||||||
object-fit: cover;
|
object-fit: cover;
|
||||||
width : calc(65px - 1rem);
|
width: calc(65px - 1rem);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* #page_search nav > div, #page_search section > div:hover > div {
|
/* #page_search nav > div, #page_search section > div:hover > div {
|
||||||
|
|
|
@ -1,19 +1,19 @@
|
||||||
/**
|
/**
|
||||||
* Записать в корзину (создать корзину, если не существует)
|
* Записать в корзину (создать корзину, если не существует)
|
||||||
*/
|
*/
|
||||||
function cart_write(catn, amount = 1) {
|
function cart_write(supply_id, delivery_type, amount = 1) {
|
||||||
// Инициализация
|
// Инициализация
|
||||||
let data = {};
|
let data = {};
|
||||||
data[catn] = amount;
|
data['supply_id'] = supply_id;
|
||||||
|
data['amount'] = amount;
|
||||||
|
data['delivery_type'] = delivery_type;
|
||||||
|
data['_csrf'] = yii.getCsrfToken()
|
||||||
|
|
||||||
$.ajax({
|
$.ajax({
|
||||||
url: '/order/write',
|
url: '/order/write',
|
||||||
type: 'post',
|
type: 'post',
|
||||||
dataType: 'json',
|
dataType: 'json',
|
||||||
data: {
|
data: data,
|
||||||
'_csrf': yii.getCsrfToken(),
|
|
||||||
'supplies': data
|
|
||||||
},
|
|
||||||
success: cart_response_success,
|
success: cart_response_success,
|
||||||
error: cart_response_error
|
error: cart_response_error
|
||||||
});
|
});
|
||||||
|
|
Reference in New Issue