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 ()

\ No newline at end of file +

Импортированы товары из 1C ()

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) + ]; + + ?> +

#

+

+ + +

+
+ +
+
+ + + + + + + + + +

+
+ + + + + + + +
+

Поставки не найдены

+
+ +
+
+

Выберите поставку

+
+
+ + 'Запрошен', + 'handled' => 'Обрабатывается', + 'completed' => 'Завершен', + } + ?> + +

Статус:

+ Здесь будет информация об общей цене и о максимальном сроке доставки которые будут меняться по мере настройки и подтверждения наличия поставок + Подтвердить +
+
+
+ + + +
+

Заказов нет

+
+ +
+ + /> + +

Заказы

@@ -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);
- 'submitRequest', 'id' => 'request-button-send', 'class' => 'col-auto mx-auto btn button_white button_clean']) ?> + '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 +}