diff --git a/mirzaev/skillparts/system/controllers/CartController.php b/mirzaev/skillparts/system/controllers/CartController.php
index 95cb2ed..bd1b797 100644
--- a/mirzaev/skillparts/system/controllers/CartController.php
+++ b/mirzaev/skillparts/system/controllers/CartController.php
@@ -36,10 +36,15 @@ class CartController extends Controller
// Инициализация
$model = new Order();
- $model->save() or throw new Exception('Не удалось инициализировать заказ');
- // Подключение
- $model->connect($account);
+ if ($model->save()) {
+ // Удалось инициализировать заказ
+
+ // Подключение заказа к аккаунту
+ $model->connect($account);
+ } else {
+ throw new Exception('Не удалось инициализировать заказ');
+ }
}
// Инициализация содержимого корзины
diff --git a/mirzaev/skillparts/system/controllers/OrderController.php b/mirzaev/skillparts/system/controllers/OrderController.php
index bb48339..324d87e 100644
--- a/mirzaev/skillparts/system/controllers/OrderController.php
+++ b/mirzaev/skillparts/system/controllers/OrderController.php
@@ -12,6 +12,8 @@ use yii\web\Cookie;
use app\models\Order;
use app\models\AccountEdgeOrder;
+use app\models\Notification;
+use Codeception\PHPUnit\ResultPrinter\HTML;
use Exception;
class OrderController extends Controller
@@ -71,6 +73,7 @@ class OrderController extends Controller
{
// Инициализация
$orders = Order::search(type: 'all', limit: 10, page: 1, select: '{account_edge_order, order}');
+ $moderator_orders = self::genOrdersForModeration();
if (yii::$app->request->isPost) {
// POST-запрос
@@ -78,14 +81,14 @@ class OrderController extends Controller
yii::$app->response->format = Response::FORMAT_JSON;
return [
- 'main' => $this->renderPartial('/orders/index', compact('orders')),
+ 'main' => $this->renderPartial('/orders/index', compact('orders', 'moderator_orders')),
'title' => 'Заказы',
'redirect' => '/orders',
'_csrf' => yii::$app->request->getCsrfToken()
];
}
- return $this->render('/orders/index', compact('orders'));
+ return $this->render('/orders/index', compact('orders', 'moderator_orders'));
}
/**
@@ -313,13 +316,21 @@ class OrderController extends Controller
$edge = $edge[0];
// Запись
- $edge->type = 'accepted';
+ $edge->type = 'requested';
- // Отправка изменений
- $edge->update();
+ if ($edge->update()) {
+ // Удалось сохранить изменения
+
+ // Запись в журнал
+ $model->journal('requested');
+
+ // Отправка уведомлений модераторам
+ Notification::_write($this->renderPartial('/notification/system/newOrder', ['id' => $edge->_key]), true, '@auth', Notification::TYPE_MODERATOR_ORDER_NEW);
+ }
// Инициализация
- $orders = Order::search(type: 'all', limit: 10, page: 1, select: '{account_edge_order, order}');
+ $orders = Order::search(type: 'all', limit: 30, page: 1, select: '{account_edge_order, order}');
+ $moderator_orders = Order::search(account: '@all', type: 'requested', limit: 10, page: 1, select: '{account_edge_order, order}');
if (yii::$app->request->isPost) {
// POST-запрос
@@ -327,13 +338,32 @@ class OrderController extends Controller
yii::$app->response->format = Response::FORMAT_JSON;
return [
- 'main' => $this->renderPartial('/orders/index', compact('orders')),
+ 'main' => $this->renderPartial('/orders/index', compact('orders', 'moderator_orders')),
'title' => 'Заказы',
'redirect' => '/orders',
'_csrf' => yii::$app->request->getCsrfToken()
];
}
- return $this->render('/orders/index', compact('orders'));
+ return $this->render('/orders/index', compact('orders', 'moderator_orders'));
+ }
+
+ /**
+ * Генерация данных заказов для модераторов
+ *
+ * Включает поиск запрошенных заказов и связанных с ними поставках
+ *
+ * @return array ['order' => array, 'order_edge_account' => array, 'supplies' => array]
+ */
+ protected static function genOrdersForModeration(int $page = 1): array {
+ $orders = Order::search(account: '@all', type: 'requested', limit: 10, page: 1, select: '{account_edge_order, order}');
+
+ foreach ($orders as &$order) {
+ // Перебор заказов
+
+ $order['supplies'] = Order::searchById($order['order']['_id'])->content(10, $page);
+ }
+
+ return $orders;
}
}
diff --git a/mirzaev/skillparts/system/models/Account.php b/mirzaev/skillparts/system/models/Account.php
index f6cf38d..69dba75 100644
--- a/mirzaev/skillparts/system/models/Account.php
+++ b/mirzaev/skillparts/system/models/Account.php
@@ -215,6 +215,30 @@ class Account extends Document implements IdentityInterface, PartnerInterface
return static::searchById($_id);
}
+ /**
+ * Чтение всех модераторов
+ */
+ public static function readAllModerators(): array
+ {
+ return static::find()->where(['type' => 'moderator'])->all();
+ }
+
+ /**
+ * Чтение всех администраторов
+ */
+ public static function readAllAdministrators(): array
+ {
+ return static::find()->where(['type' => 'administrator'])->all();
+ }
+
+ /**
+ * Чтение всех уполномоченных аккаунтов
+ */
+ public static function readAllAuthorizeds(): array
+ {
+ return static::find()->where(['type' => 'moderator'])->orWhere(['type' => 'administrator'])->all();
+ }
+
/**
* Проверка почты
*/
diff --git a/mirzaev/skillparts/system/models/Notification.php b/mirzaev/skillparts/system/models/Notification.php
index 65b0bce..89290c5 100644
--- a/mirzaev/skillparts/system/models/Notification.php
+++ b/mirzaev/skillparts/system/models/Notification.php
@@ -29,20 +29,25 @@ class Notification extends Document
const SCENARIO_TRUSTED_CREATE = 'create';
/**
- * Тип уведомления: памятка
+ * Уведомление: "памятка"
*/
const TYPE_NOTICE = 'notice';
/**
- * Тип уведомления: предупреждение
+ * Уведомление: "предупреждение"
*/
const TYPE_WARNING = 'warning';
/**
- * Тип уведомления: ошибка
+ * Уведомление: "ошибка"
*/
const TYPE_ERROR = 'error';
+ /**
+ * Уведомление для модераторов: "новый заказ"
+ */
+ const TYPE_MODERATOR_ORDER_NEW = 'new order';
+
/**
* Цель для отправки уведомления
*
@@ -192,7 +197,7 @@ class Notification extends Document
foreach ($accounts as $account) {
if (in_array('@all', $accounts, true)) {
- // Найден флаг обозначающий отправку всем пользователям
+ // Всем пользователям
// Инициализация
$return = [];
@@ -200,11 +205,64 @@ class Notification extends Document
foreach (Account::readAll() as $account) {
// Перебор всех аккаунтов
+ // Запись ребра: УВЕДОМЛЕНИЕ -> АККАУНТ
+ $return[] = AccountEdgeNotification::writeSafe($model->readId(), $account->readId(), $type);
+ }
+ } else if (
+ in_array('@authorized', $accounts, true)
+ || in_array('@authorizeds', $accounts, true)
+ || in_array('@authorised', $accounts, true)
+ || in_array('@authoriseds', $accounts, true)
+ || in_array('@auth', $accounts, true)
+ || in_array('@autheds', $accounts, true)
+ ) {
+ // Всем авторизованным
+
+ // Инициализация
+ $return = [];
+
+ foreach (Account::readAllAuthorizeds() as $account) {
+ // Перебор всех аккаунтов
+
+ // Запись ребра: УВЕДОМЛЕНИЕ -> АККАУНТ
+ $return[] = AccountEdgeNotification::writeSafe($model->readId(), $account->readId(), $type);
+ }
+ } else if (
+ in_array('@administrator', $accounts, true)
+ || in_array('@administrators', $accounts, true)
+ || in_array('@admin', $accounts, true)
+ || in_array('@admins', $accounts, true)
+ ) {
+ // Администраторам
+
+ // Инициализация
+ $return = [];
+
+ foreach (Account::readAllAdministrators() as $account) {
+ // Перебор всех аккаунтов
+
+ // Запись ребра: УВЕДОМЛЕНИЕ -> АККАУНТ
+ $return[] = AccountEdgeNotification::writeSafe($model->readId(), $account->readId(), $type);
+ }
+ } else if (
+ in_array('@moderator', $accounts, true)
+ || in_array('@moderators', $accounts, true)
+ || in_array('@moder', $accounts, true)
+ || in_array('@moders', $accounts, true)
+ ) {
+ // Модераторам
+
+ // Инициализация
+ $return = [];
+
+ foreach (Account::readAllModerators() as $account) {
+ // Перебор всех аккаунтов
+
// Запись ребра: УВЕДОМЛЕНИЕ -> АККАУНТ
$return[] = AccountEdgeNotification::writeSafe($model->readId(), $account->readId(), $type);
}
} else if (in_array('@test', $accounts, true)) {
- // Найден флаг обозначающий тестирование (отправка самому себе)
+ // Тестирование (отправка самому себе)
$return[] = AccountEdgeNotification::writeSafe($model->readId(), yii::$app->user->id, $type);
} else {
diff --git a/mirzaev/skillparts/system/models/Order.php b/mirzaev/skillparts/system/models/Order.php
index 68f1a52..2eb065e 100644
--- a/mirzaev/skillparts/system/models/Order.php
+++ b/mirzaev/skillparts/system/models/Order.php
@@ -236,33 +236,51 @@ class Order extends Document implements DocumentInterface
/**
* Поиск заказа
*/
- public static function search(Account $account = null, string $type = 'current', int $limit = 1, int $page = 1, string $select = null): self|array|null
+ public static function search(Account|string $account = null, string $type = 'current', int $limit = 1, int $page = 1, string $select = null): self|array|null
{
- // Инициализация
- $account or $account = yii::$app->user->identity ?? throw new Exception('Не удалось инициализировать пользователя');
+ // Инициализация аккаунта
+ if (empty($account) && isset(yii::$app->user->identity)) {
+ // Данные не переданы
- // Генерация сдвига по запрашиваемым данным (пагинация)
- $offset = $limit * ($page - 1);
-
- if (strcasecmp($type, 'all') !== 0) {
- // Если не указан параметр поиска всех заказов
-
- $where_type = [
- 'account_edge_order.type' => $type
+ $subquery_where = [
+ [
+ 'account._id' => yii::$app->user->identity->readId()
+ ]
];
+ } else if ($account instanceof Account) {
+ // Передан аккаунт
+
+ $subquery_where = [
+ [
+ 'account._id' => $account->readId()
+ ]
+ ];
+ } else if (str_contains($account, '@all')) {
+ // Запрос на обработку всех аккаунтов
+
+ $subquery_where = [];
} else {
- $where_type = [];
+ throw new Exception('Не удалось инициализировать пользователя');
}
+ // Инициализация типа заказа
+ if (strcasecmp($type, 'all') !== 0) {
+ // Если не указан поиск всех заказов
+
+ $subquery_where[] = [
+ 'account_edge_order.type' => $type
+ ];
+ }
+
+
+ // Инициализация сдвига по запрашиваемым данным (пагинация)
+ $offset = $limit * ($page - 1);
+
+ // Запрос
$return = self::searchByEdge(
from: 'account',
to: 'order',
- subquery_where: [
- [
- 'account._id' => $account->readId()
- ],
- $where_type
- ],
+ subquery_where: $subquery_where,
foreach: ['edge' => 'account_edge_order'],
where: 'edge._to == order._id',
limit: $limit,
@@ -366,8 +384,7 @@ class Order extends Document implements DocumentInterface
// Поиск привязанного товара
$connection['product'] = Product::searchBySupplyId($connection['supply']['_id']);
- try
- {
+ try {
// Инициализация доставки Dellin (автоматическая)
$connection['delivery']['auto'] = Dellin::calcDeliveryAdvanced(
explode('_', $connection['account']['opts']['delivery_from_terminal'])[1],
@@ -385,10 +402,9 @@ class Order extends Document implements DocumentInterface
}
// Запись цены (цена поставки + цена доставки + наша наценка)
- $connection['cost']['auto'] = ($cost['ЦенаЗаЕдиницу'] ?? $connection['supply']->onec['Цены']['Цена']['ЦенаЗаЕдиницу']) + ($connection['delivery']['auto']['price']['all'] ?? $connection['delivery']['auto']['price']['one'] ?? 0) + ($settings['increase'] ?? 0);
+ $connection['cost']['auto'] = ($cost['ЦенаЗаЕдиницу'] ?? $connection['supply']->onec['Цены']['Цена']['ЦенаЗаЕдиницу']) + ($connection['delivery']['auto']['price']['all'] ?? $connection['delivery']['auto']['price']['one'] ?? 0) + ($settings['increase'] ?? 0) ?? 0;
- try
- {
+ try {
// Инициализация доставки Dellin (автоматическая)
$connection['delivery']['avia'] = Dellin::calcDeliveryAdvanced(
explode('_', $connection['account']['opts']['delivery_from_terminal'])[1],
@@ -403,11 +419,11 @@ class Order extends Document implements DocumentInterface
} catch (Exception $e) {
$connection['delivery']['avia']['error'] = true;
- 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);
+ $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['Валюта'];
diff --git a/mirzaev/skillparts/system/models/connection/Dellin.php b/mirzaev/skillparts/system/models/connection/Dellin.php
index f31c064..c0e8531 100644
--- a/mirzaev/skillparts/system/models/connection/Dellin.php
+++ b/mirzaev/skillparts/system/models/connection/Dellin.php
@@ -118,6 +118,9 @@ class Dellin extends Model
$length = $z;
}
+ // Инициализация
+ $query = [];
+
// Рассчёт типа доставки
if (
$weight <= 30
@@ -126,43 +129,46 @@ class Dellin extends Model
) {
// Доставка категории "small"
- $type = 'small';
- $variant = 'address';
+ $query['delivery']['deliveryType']['type'] = 'small';
+ $query['delivery']['derival']['variant'] = 'address';
+ $query['delivery']['derival']['address']['search'] = $from;
+ $query['delivery']['derival']['time']['worktimeStart'] = '08:00';
+ $query['delivery']['derival']['time']['worktimeEnd'] = '20:00';
+ $query['delivery']['arrival']['variant'] = 'address';
+ $query['delivery']['arrival']['address']['search'] = $to;
+ $query['delivery']['arrival']['time']['worktimeStart'] = '08:00';
+ $query['delivery']['arrival']['time']['worktimeEnd'] = '20:00';
} else {
// Доставка категории "auto"
if ($avia) {
// Рассчет для доставки по воздуху
+ // Ограничение на минимальный вес
$weight <= 0.5 and $weight = 0.5;
- $type = 'avia';
+
+ $query['delivery']['deliveryType']['type'] = 'avia';
} else {
// Рассчет для доставки по земле
- $type = 'auto';
+ $query['delivery']['deliveryType']['type'] = 'auto';
}
- $variant = 'terminal';
+ $query['delivery']['derival']['variant'] = 'terminal';
+ $query['delivery']['derival']['terminalID'] = $from;
+ $query['delivery']['arrival']['variant'] = 'terminal';
+ $query['delivery']['arrival']['terminalID'] = $to;
}
- // Запрос
- $request = self::$browser->post('/v2/calculator.json', [
- 'json' => [
+ // Инициализация
+ $query = array_merge_recursive(
+ $query,
+ [
'appkey' => yii::$app->params['dellin']['key'],
'sessionID' => self::$session,
'delivery' => [
- 'deliveryType' => [
- 'type' => $type
- ],
'derival' => [
- 'produceDate' => date('Y-m-d', time() + ($settings['delivery_handle_time'] ?? 86400)),
- 'variant' => $variant,
- 'terminalID' => $from,
-
- ],
- 'arrival' => [
- 'variant' => $variant,
- 'terminalID' => $to
+ 'produceDate' => date('Y-m-d', time() + ($settings['delivery_handle_time'] ?? 86400))
]
],
'members' => [
@@ -182,6 +188,11 @@ class Dellin extends Model
'oversizedVolume' => $x * $y * $z
]
]
+ );
+
+ // Запрос
+ $request = self::$browser->post('/v2/calculator.json', [
+ 'json' => $query
]);
if ($request->getStatusCode() === 200) {
diff --git a/mirzaev/skillparts/system/views/cart/index.php b/mirzaev/skillparts/system/views/cart/index.php
index 53cea9a..fe147c3 100644
--- a/mirzaev/skillparts/system/views/cart/index.php
+++ b/mirzaev/skillparts/system/views/cart/index.php
@@ -43,11 +43,15 @@ use DateTime;
if (isset($connection['delivery']['auto']['error'])) {
// Не удалось рассчитать доставку
+ // Инициализация времени
$delivery_auto = '?';
+
+ // Инициализация цены
+ $cost_auto = '?';
} else {
// Удалось рассчитать доставку
- // Инициализация
+ // Инициализация времени
$delivery_auto = ceil((DateTime::createFromFormat('Y-m-d', $connection['delivery']['auto']['orderDates']['arrivalToOspReceiver'])->getTimestamp() - time()) / 60 / 60 / 24) + 1;
// Инициализация цены
@@ -58,10 +62,15 @@ use DateTime;
if (isset($connection['delivery']['avia']['error'])) {
// Не удалось рассчитать доставку
+ // Инициализация времени
$delivery_avia = '?';
+
+ // Инициализация цены
+ $cost_avia = '?';
} else {
// Удалось рассчитать доставку
+ // Инициализация времени
$delivery_avia = ceil((DateTime::createFromFormat('Y-m-d H:i:s', $connection['delivery']['avia']['orderDates']['giveoutFromOspReceiver'])->getTimestamp() - time()) / 60 / 60 / 24) + 1;
// Инициализация цены
diff --git a/mirzaev/skillparts/system/views/notification/system/afterImport1c.php b/mirzaev/skillparts/system/views/notification/system/afterImport1c.php
index ec4f15f..25ae329 100644
--- a/mirzaev/skillparts/system/views/notification/system/afterImport1c.php
+++ b/mirzaev/skillparts/system/views/notification/system/afterImport1c.php
@@ -1,2 +1 @@
-
-
Импортированы товары из 1C (= $date ?>)
\ No newline at end of file
+Импортированы товары из 1C (= $date ?>)
diff --git a/mirzaev/skillparts/system/views/notification/system/newOrder.php b/mirzaev/skillparts/system/views/notification/system/newOrder.php
new file mode 100644
index 0000000..93450ff
--- /dev/null
+++ b/mirzaev/skillparts/system/views/notification/system/newOrder.php
@@ -0,0 +1 @@
+Новый заказ
diff --git a/mirzaev/skillparts/system/views/offer/supplier.php b/mirzaev/skillparts/system/views/offer/supplier.php
index 58b805d..fc9ef9e 100644
--- a/mirzaev/skillparts/system/views/offer/supplier.php
+++ b/mirzaev/skillparts/system/views/offer/supplier.php
@@ -33,7 +33,7 @@
4 Гарантия, условия возврата
4.1 Комплектность товара проверяется торговой площадкой при получении на складе торговой площадкой
- 4.2 Поставщик гарантирует приём возврата некачественного, а так же некомплектного товара в течение 60 дней
+ 4.2 Поставщик гарантирует приём возврата некачественного, а так же некомплектного товара в течение 60 дней
4.3 Выявленные расхождения в поставке, возврат товара отражаются сообщаются поставщику на адрес электронной почты указанную при регистрации
4.4 Поставщик даёт согласие и гарантирует законность сбора/обработки/хранения и передачи сведений, в т. ч. персональных данных, которые поставщик указывает в системе сайта
@@ -41,7 +41,7 @@
5 Иные условия
5.1 Все споры решаются путём переговоров, в ином случае в Арбитражном суде города Хабаровск
- 5.2 Настоящий договор-оферта может быть расторгнут: - по инициативе поставщика путём направления соответствующего сообщения в систему сайта либо на электронный адрес указанный ниже в теле текста настоящего договора-оферты; - по инициативе торговой площадки путём направления соответствующего сообщения через систему сайта, либо на адрес электронной почты указанной поставщиком при регистрации
+ 5.2 Настоящий договор-оферта может быть расторгнут: - по инициативе поставщика путём направления соответствующего сообщения в систему сайта либо на электронный адрес указанный ниже в теле текста настоящего договора-оферты; - по инициативе торговой площадки путём направления соответствующего сообщения через систему сайта, либо на адрес электронной почты указанной поставщиком при регистрации
5.3 Изменения оферты вступают в силу с момента их публикации
5.4 Стороны информированы о ранее действующих версиях оферт
diff --git a/mirzaev/skillparts/system/views/orders/index.php b/mirzaev/skillparts/system/views/orders/index.php
index 89d29d3..9a8b694 100644
--- a/mirzaev/skillparts/system/views/orders/index.php
+++ b/mirzaev/skillparts/system/views/orders/index.php
@@ -1,7 +1,174 @@
+user->isGuest
+ && yii::$app->user->identity->type === 'administrator'
+ || yii::$app->user->identity->type === 'moderator'
+) {
+ $panel ?? $panel = 'orders_panel_moderation';
+} else {
+ $panel ?? $panel = 'orders_panel_orders';
+}
+
+?>
+
-
+ user->isGuest
+ && yii::$app->user->identity->type === 'administrator'
+ || yii::$app->user->identity->type === 'moderator'
+ ) : ?>
+
+ />
+
+
+
+
+
+
+
+
+
+ date('H:i', $date),
+ 'm.d.Y' => date('m.d.Y', $date)
+ ];
+
+ ?>
+ #= $order['order']['_key'] ?>
+
+ = $date['H:i'] ?? 'Неизвестно' ?>
+ = $date['m.d.Y'] ?? 'Неизвестно' ?>
+
+
+
+
+
+
+
+
+ 'Запрошен',
+ 'handled' => 'Обрабатывается',
+ 'completed' => 'Завершен',
+ }
+ ?>
+
+
Статус: = $status ?>
+
Здесь будет информация об общей цене и о максимальном сроке доставки которые будут меняться по мере настройки и подтверждения наличия поставок
+
Подтвердить
+
+
+
+
+
+
+
+
+
+
+ />
+
+
Заказы
@@ -61,4 +228,11 @@
-
\ No newline at end of file
+
+user->isGuest
+ && (yii::$app->user->identity->type === 'administrator'
+ || yii::$app->user->identity->type === 'moderator')
+) : ?>
+
+
diff --git a/mirzaev/skillparts/system/views/search/index.php b/mirzaev/skillparts/system/views/search/index.php
index e2c362c..8377343 100644
--- a/mirzaev/skillparts/system/views/search/index.php
+++ b/mirzaev/skillparts/system/views/search/index.php
@@ -37,6 +37,7 @@
$catg ?? $catg = 'Категория';
$covr = null;
+ // Инициализация обложки
foreach ($imgs ?? [] as $img) {
// Перебор изображений для обложки
@@ -53,6 +54,9 @@
// Обложка не инициализирована
if (!$covr = $imgs[0]['h150'] ?? false) {
+ // Не удалось использовать первое изображение как обложку
+
+ // Запись обложки по умолчанию
$covr = '/img/covers/h150/product.png';
}
}
diff --git a/mirzaev/skillparts/system/views/suppliers/request.php b/mirzaev/skillparts/system/views/suppliers/request.php
index 27e9574..f29818c 100644
--- a/mirzaev/skillparts/system/views/suppliers/request.php
+++ b/mirzaev/skillparts/system/views/suppliers/request.php
@@ -95,7 +95,7 @@ AppAsset::register($this);
- = Html::submitButton('Отправить', ['name' => 'submitRequest', 'id' => 'request-button-send', 'class' => 'col-auto mx-auto btn button_white button_clean']) ?>
+ = Html::submitButton('Отправить', ['name' => 'submitRequest', 'id' => 'request-button-send', 'class' => 'col-auto mx-auto btn button_blue button_clean']) ?>
diff --git a/mirzaev/skillparts/system/web/css/pages/orders.css b/mirzaev/skillparts/system/web/css/pages/orders.css
index b1c4a90..b75315f 100644
--- a/mirzaev/skillparts/system/web/css/pages/orders.css
+++ b/mirzaev/skillparts/system/web/css/pages/orders.css
@@ -1,16 +1,36 @@
-#page_orders article {
+#page_orders .page_order_panel {
background-color: #fff;
}
-#page_orders article .list .row:nth-child(2n+1) {
+#page_orders .page_order_panel .list .row:nth-child(2n+1) {
background-color: #f7f6f9;
}
-#page_orders article .list .row:first-child {
+#page_orders .page_order_panel .list .row:first-child {
background-color: #dbdde3;
}
#page_orders .cart_field_cost span {
font-weight: bold;
font-size: larger;
-}
\ No newline at end of file
+}
+
+#page_orders>article, #page_orders>input {
+ display: none;
+}
+
+#page_orders>input:checked+article {
+ display: block;
+}
+
+#page_orders article .row_supply {
+ height: 60px;
+}
+
+#page_orders article .row_supply:hover {
+ background-color: #e9e7ee;
+}
+
+#page_orders article .row_supply:active, #page_orders article .row_supply_active {
+ background-color: #e4e2ea;
+}
diff --git a/mirzaev/skillparts/system/web/js/cart.js b/mirzaev/skillparts/system/web/js/cart.js
index 9ee0544..f38e6e0 100644
--- a/mirzaev/skillparts/system/web/js/cart.js
+++ b/mirzaev/skillparts/system/web/js/cart.js
@@ -315,6 +315,12 @@ function cart_response(data, status) {
reinitialization(main);
}
+ // Перенаправление
+ if (data.redirect !== undefined) {
+ // Перенаправление
+ history.pushState({}, document.title, data.redirect);
+ }
+
// CSRF-токен
if (data._csrf !== undefined) {
// Обновление документа
diff --git a/mirzaev/skillparts/system/web/js/orders.js b/mirzaev/skillparts/system/web/js/orders.js
new file mode 100644
index 0000000..548d777
--- /dev/null
+++ b/mirzaev/skillparts/system/web/js/orders.js
@@ -0,0 +1,42 @@
+
+function orders_response(data, status) {
+ // Обработка ответов
+
+ // Основной блок
+ if (data.main !== undefined) {
+ main = document.getElementsByTagName('main')[0];
+
+ // Обновление документа
+ main.innerHTML = data.main;
+
+ // Реинициализация
+ reinitialization(main);
+ }
+
+ // Перенаправление
+ if (data.redirect !== undefined) {
+ // Перенаправление
+ history.pushState({}, document.title, data.redirect);
+ }
+
+ // CSRF-токен
+ if (data._csrf !== undefined) {
+ // Обновление документа
+ $('meta[name=csrf-token]').prop("content", data._csrf);
+ }
+}
+
+function orders_response_success(data, status) {
+ // Обработка ответов от удавшихся запросов
+
+ orders_response(data, status);
+}
+
+function orders_response_error(data, status) {
+ // Обработка ответов от неудавшихся запросов
+
+ // Инициализвация
+ data = data.responseJSON;
+
+ orders_response(data, status);
+}
diff --git a/mirzaev/skillparts/system/web/js/orders_panel.js b/mirzaev/skillparts/system/web/js/orders_panel.js
new file mode 100644
index 0000000..a9ddc0a
--- /dev/null
+++ b/mirzaev/skillparts/system/web/js/orders_panel.js
@@ -0,0 +1,23 @@
+function orders_supply_edit(target, order_number) {
+ // Поиск панели для вывода информации
+ let panel = document.getElementById('orders_panel_edit_' + order_number);
+
+ // Поиск всех кнопок с поставками
+ let rows = document.getElementsByClassName('row_supply');
+
+ // Деактивация остальных кнопок
+ for (let i = 0; i < rows.length; i++) {
+ if (rows[i].parentElement.parentElement.getAttribute('id') === 'orders_panel_supplies_' + order_number) {
+ // Если это кнопка конкретно с этого заказа
+
+ rows[i].classList.remove('row_supply_active');
+ }
+ }
+
+ // Активация выбранной кнопки
+ target.classList.add('row_supply_active');
+
+ panel.innerHTML = target.getAttribute('id');
+
+ return false
+}