From 8abdaf4626f536536a694932dced138ff9fe6c9f Mon Sep 17 00:00:00 2001 From: Arsen Mirzaev Tatyano-Muradovich Date: Tue, 25 Jan 2022 14:46:25 +1000 Subject: [PATCH] =?UTF-8?q?=D0=A2=D0=BE=D0=BF=D0=BE=D0=B2=D1=8B=D0=B9=20?= =?UTF-8?q?=D0=BC=D0=B0=D0=BB=D1=8B=D1=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../skillparts/system/config/web.php.example | 2 + .../system/controllers/ProfileController.php | 345 +++++++++++++++++- mirzaev/skillparts/system/models/Account.php | 2 +- mirzaev/skillparts/system/models/Supply.php | 18 +- .../system/models/WarehouseEdgeImport.php | 7 +- .../skillparts/system/views/cart/index.php | 15 +- .../system/views/profile/supplies.php | 66 +++- .../web/files/{20827450 => }/.gitignore | 0 .../1637773114/Тест импорта.xlsx | Bin 8540 -> 0 bytes mirzaev/skillparts/system/web/js/cart.js | 48 +-- mirzaev/skillparts/system/web/js/profile.js | 64 ++++ 11 files changed, 506 insertions(+), 61 deletions(-) rename mirzaev/skillparts/system/web/files/{20827450 => }/.gitignore (100%) delete mode 100644 mirzaev/skillparts/system/web/files/20827450/1637773114/Тест импорта.xlsx diff --git a/mirzaev/skillparts/system/config/web.php.example b/mirzaev/skillparts/system/config/web.php.example index d3e408a..cdd45b8 100644 --- a/mirzaev/skillparts/system/config/web.php.example +++ b/mirzaev/skillparts/system/config/web.php.example @@ -103,6 +103,8 @@ $config = [ '///' => '
/-', 'profile/geolocation/' => 'profile/geolocation-', 'profile/panel///' => 'profile/panel---', + 'profile/imports/' => 'profile/imports-', + 'profile/warehouses/' => 'profile/warehouses-', 'orders' => 'order/index', 'orders/' => 'order/index', 'orders//' => 'order/', diff --git a/mirzaev/skillparts/system/controllers/ProfileController.php b/mirzaev/skillparts/system/controllers/ProfileController.php index 9e1b9cd..99fb44a 100644 --- a/mirzaev/skillparts/system/controllers/ProfileController.php +++ b/mirzaev/skillparts/system/controllers/ProfileController.php @@ -20,7 +20,10 @@ use app\models\Settings; use app\models\Dellin; use app\models\SettingsEdgeSettings; use app\models\Terminal; +use app\models\Import; +use app\models\ImportEdgeSupply; use app\models\Warehouse; +use app\models\WarehouseEdgeImport; use Dadata\DadataClient as Dadata; use Throwable; @@ -49,7 +52,11 @@ class ProfileController extends Controller 'monitoring', 'readGroups', 'geolocation-write', - 'panel-suppliers-requests-search' + 'panel-suppliers-requests-search', + 'imports-delete', + 'warehouses-write', + 'warehouses-rename', + 'warehouses-delete' ] ], [ @@ -976,4 +983,340 @@ class ProfileController extends Controller return; } + + public function actionCount(): array|string|null + { + if (yii::$app->request->isPost) { + // POST-запрос + + // Настройка типа ответа + yii::$app->response->format = Response::FORMAT_JSON; + + return [ + 'button' => $this->renderPartial('/cart/button', ['cart_amount' => Order::count(supplies: true)]), + '_csrf' => yii::$app->request->getCsrfToken() + ]; + } + } + + /** + * Удалить инстанцию поставки + * + * @return array|string|null + */ + public function actionImportsDelete(): array|string|null + { + // Инициализация аккаунта + $account = Account::initAccount(); + + // Инициализация остальных входных параметров + $supply = new Supply(yii::$app->request->post('Supply') ?? yii::$app->request->get('Supply')); + $panel = yii::$app->request->post('panel') ?? yii::$app->request->get('panel'); + $sidebar = $this->renderPartial('sidebar'); + $groups = self::readGroups(); + + if (yii::$app->request->isPost) { + // POST-запрос + + // Запись заголовка с типом ответа + yii::$app->response->format = Response::FORMAT_JSON; + + // Инициализация буфера вывода + $return = [ + '_csrf' => yii::$app->request->getCsrfToken() + ]; + + // Инициализация идентификатора + $_key = yii::$app->request->post('_key'); + + if (empty($_key)) { + // Не передан идентификатор + + // Запись кода ошибки + yii::$app->response->statusCode = 500; + + return $return; + } + + if ($import = Import::searchById(Import::collectionName() . "/$_key")) { + // Найдена инстанция поставки + + if ($edge = WarehouseEdgeImport::searchByImport($import)[0]) { + // Найдено ребро: СКЛАД -> ИНСТАНЦИЯ ПОСТАВКИ + + // Инициализация счётчика удалённых поставок + $deleted = 0; + + foreach (Supply::searchByImport($import->readId(), limit: 9999) as $supply) { + // Перебор найденных поставок + + if (ImportEdgeSupply::searchBySupply($supply, limit: 1)?->delete() === 1) { + // Удалено ребро: ИНСТАНЦИЯ ПОСТАВКИ -> ПОСТАВКА + + // Удаление поставки + if ($supply->delete() === 1) ++$deleted; + } + } + + // Отправка уведомления + Notification::_write("Удалено $deleted поставок из инстанции поставки $_key", account: $account->_key); + + if ($edge->delete()) { + // Удалено ребро: СКЛАД -> ИНСТАНЦИЯ ПОСТАВКИ + + if ($import->delete()) { + // Удалена инстанция поставки + + // Отправка уведомления + Notification::_write("Инстанция поставки $_key была удалена", account: $account->_key); + } + } + } + } else { + // Не найдена инстанция поставки + + // Отправка уведомления + Notification::_write("Не найдена инстанция поставки $_key", account: $account->_key); + } + + // Запись в буфер вывода реинициализированного элемента + $return['main'] = $this->renderPartial('supplies', compact( + 'supply', + 'groups', + 'sidebar', + 'panel' + )); + + return $return; + } + } + + /** + * Записать (создать) склад + * + * @return array|string|null + */ + public function actionWarehousesWrite(): array|string|null + { + // Инициализация аккаунта + $account = Account::initAccount(); + + // Инициализация остальных входных параметров + $supply = new Supply(yii::$app->request->post('Supply') ?? yii::$app->request->get('Supply')); + $panel = yii::$app->request->post('panel') ?? yii::$app->request->get('panel'); + $sidebar = $this->renderPartial('sidebar'); + $groups = self::readGroups(); + + if (yii::$app->request->isPost) { + // POST-запрос + + // Запись заголовка с типом ответа + yii::$app->response->format = Response::FORMAT_JSON; + + // Инициализация буфера вывода + $return = [ + '_csrf' => yii::$app->request->getCsrfToken() + ]; + + // Запись склада + if (Warehouse::writeByAccount($account)) Notification::_write("Создан новый склад", account: $account->_key); + else Notification::_write("Не удалось создать новый склад", account: $account->_key); + + // Запись в буфер вывода реинициализированного элемента + $return['main'] = $this->renderPartial('supplies', compact( + 'supply', + 'groups', + 'sidebar', + 'panel' + )); + + return $return; + } + } + + + /** + * Переименовать склад + * + * @return array|string|null + */ + public function actionWarehousesRename(): array|string|null + { + // Инициализация аккаунта + $account = Account::initAccount(); + + // Инициализация остальных входных параметров + $supply = new Supply(yii::$app->request->post('Supply') ?? yii::$app->request->get('Supply')); + $panel = yii::$app->request->post('panel') ?? yii::$app->request->get('panel'); + $sidebar = $this->renderPartial('sidebar'); + $groups = self::readGroups(); + + if (yii::$app->request->isPost) { + // POST-запрос + + // Запись заголовка с типом ответа + yii::$app->response->format = Response::FORMAT_JSON; + + // Инициализация буфера вывода + $return = [ + '_csrf' => yii::$app->request->getCsrfToken() + ]; + + // Инициализация идентификатора + $_key = yii::$app->request->post('_key'); + + // Инициализация названия\ + $name = yii::$app->request->post('name'); + + if (empty($_key) || empty($name)) { + // Не передан идентификатор или название + + // Запись кода ошибки + yii::$app->response->statusCode = 500; + + return $return; + } + + if ($warehouse = Warehouse::searchById(Warehouse::collectionName() . "/$_key")) { + // Найден склад + + // Запись старого названия + $old = $warehouse->name; + + // Запись параметров + $warehouse->name = $name; + + if ($warehouse->update() >= 1) { + // Обновлён склад + + // Отправка уведомления + Notification::_write("Склад $_key переименован: \"$old\" > \"$name\"", account: $account->_key); + } else { + // Не обновлён склад + + // Отправка уведомления + Notification::_write("Не удалось переименовать склад $_key", account: $account->_key); + } + } else { + // Не найден склад + + // Отправка уведомления + Notification::_write("Не найден склад $_key", account: $account->_key); + } + + // Запись в буфер вывода реинициализированного элемента + $return['main'] = $this->renderPartial('supplies', compact( + 'supply', + 'groups', + 'sidebar', + 'panel' + )); + + return $return; + } + } + + /** + * Удалить склад + * + * @return array|string|null + */ + public function actionWarehousesDelete(): array|string|null + { + // Инициализация аккаунта + $account = Account::initAccount(); + + // Инициализация остальных входных параметров + $supply = new Supply(yii::$app->request->post('Supply') ?? yii::$app->request->get('Supply')); + $panel = yii::$app->request->post('panel') ?? yii::$app->request->get('panel'); + $sidebar = $this->renderPartial('sidebar'); + $groups = self::readGroups(); + + if (yii::$app->request->isPost) { + // POST-запрос + + // Запись заголовка с типом ответа + yii::$app->response->format = Response::FORMAT_JSON; + + // Инициализация буфера вывода + $return = [ + '_csrf' => yii::$app->request->getCsrfToken() + ]; + + // Инициализация идентификатора + $_key = yii::$app->request->post('_key'); + + if (empty($_key)) { + // Не передан идентификатор + + // Запись кода ошибки + yii::$app->response->statusCode = 500; + + return $return; + } + + if ($warehouse = Warehouse::searchById(Warehouse::collectionName() . "/$_key")) { + // Найден склад + + foreach (Import::searchByWarehouse($warehouse, limit: 100) as $import) { + // Найдены инстанции поставки + + if ($edge = WarehouseEdgeImport::searchByImport($import)[0]) { + // Найдено ребро: СКЛАД -> ИНСТАНЦИЯ ПОСТАВКИ + + // Инициализация счётчика удалённых поставок + $deleted = 0; + + foreach (Supply::searchByImport($import->readId(), limit: 9999) as $supply) { + // Перебор найденных поставок + + if (ImportEdgeSupply::searchBySupply($supply, limit: 1)?->delete() === 1) { + // Удалено ребро: ИНСТАНЦИЯ ПОСТАВКИ -> ПОСТАВКА + + // Удаление поставки + if ($supply->delete() === 1) ++$deleted; + } + } + + // Отправка уведомления + Notification::_write("Удалено $deleted поставок из инстанции поставки $_key", account: $account->_key); + + if ($edge->delete()) { + // Удалено ребро: СКЛАД -> ИНСТАНЦИЯ ПОСТАВКИ + + if ($import->delete()) { + // Удалена инстанция поставки + + // Отправка уведомления + Notification::_write("Инстанция поставки $_key была удалена", account: $account->_key); + } + } + } + } + + + if ($warehouse->delete()) { + // Удалён склад + + // Отправка уведомления + Notification::_write("Склад $_key был удалён", account: $account->_key); + } + } else { + // Не найден склад + + // Отправка уведомления + Notification::_write("Не найден склад $_key", account: $account->_key); + } + + // Запись в буфер вывода реинициализированного элемента + $return['main'] = $this->renderPartial('supplies', compact( + 'supply', + 'groups', + 'sidebar', + 'panel' + )); + + return $return; + } + } } diff --git a/mirzaev/skillparts/system/models/Account.php b/mirzaev/skillparts/system/models/Account.php index adc3192..51062ea 100644 --- a/mirzaev/skillparts/system/models/Account.php +++ b/mirzaev/skillparts/system/models/Account.php @@ -794,7 +794,7 @@ class Account extends Document implements IdentityInterface, PartnerInterface } /** - * Поиск заявок на регистрацию поставщиков + * Запись поставщика * * @return array */ diff --git a/mirzaev/skillparts/system/models/Supply.php b/mirzaev/skillparts/system/models/Supply.php index 89476b7..3046010 100644 --- a/mirzaev/skillparts/system/models/Supply.php +++ b/mirzaev/skillparts/system/models/Supply.php @@ -166,6 +166,16 @@ class Supply extends Product implements ProductInterface, OfferInterface ); } + /** + * Поиск через связь с инстанцией импорта + * + * @param string|null $id Идентификатор инстанции импорта + */ + public static function searchByImport(string|null $id = null, int|null $limit = 10): array + { + return static::find()->where(['_from' => $id])->limit($limit)->all(); + } + /** * Запись данных свойств по UUID 1C * @@ -623,14 +633,6 @@ class Supply extends Product implements ProductInterface, OfferInterface return null; } - /** - * - */ - public function write($context = null) - { - return $this->onec; - } - /** * @param mixed|null $context * @return array diff --git a/mirzaev/skillparts/system/models/WarehouseEdgeImport.php b/mirzaev/skillparts/system/models/WarehouseEdgeImport.php index 4406922..74baf0a 100644 --- a/mirzaev/skillparts/system/models/WarehouseEdgeImport.php +++ b/mirzaev/skillparts/system/models/WarehouseEdgeImport.php @@ -38,14 +38,11 @@ class WarehouseEdgeImport extends Edge * Поиск по инстанции импорта * * @param Import $import Инстанция импорта - * @param int $limit Ограничение по максимальному количеству * * @return array Связи склада и инстанций поставок - * - * @deprecated Бесполезно */ - public static function searchByImport(Import $import, int $limit = 1): array + public static function searchByImport(Import $import): array { - return static::find()->where(['_to' => $import->readId()])->limit($limit)->all(); + return static::find()->where(['_to' => $import->readId()])->limit(1)->all(); } } diff --git a/mirzaev/skillparts/system/views/cart/index.php b/mirzaev/skillparts/system/views/cart/index.php index 4b61362..d7991e9 100644 --- a/mirzaev/skillparts/system/views/cart/index.php +++ b/mirzaev/skillparts/system/views/cart/index.php @@ -230,8 +230,8 @@ use DateTime;
- - + +
@@ -260,6 +260,8 @@ use DateTime; $delivery_to_terminal_list ?? $delivery_to_terminal_list = ['Нет данных']; ?> + Терминал для получения + field($model_delivery, 'opts[delivery_to_terminal]', ['options' => ['class' => "mb-0"]]) ->dropDownList($delivery_to_terminal_list, [ 'onChange' => 'page_profile_settings(this.parentElement.parentElement, undefined, \'\'); cart_cost_calculate();', @@ -271,10 +273,11 @@ use DateTime;
@@ -291,11 +294,15 @@ use DateTime; cart_cost_calculate(); cart_registration_entity_init(); + + cart_registration_choose('cart_registration_entity', ); } else { document.addEventListener('DOMContentLoaded', function() { cart_cost_calculate(); cart_registration_entity_init(); + + cart_registration_choose('cart_registration_entity', ); }, false); } diff --git a/mirzaev/skillparts/system/views/profile/supplies.php b/mirzaev/skillparts/system/views/profile/supplies.php index a7906bf..cdcdc7a 100644 --- a/mirzaev/skillparts/system/views/profile/supplies.php +++ b/mirzaev/skillparts/system/views/profile/supplies.php @@ -40,7 +40,7 @@ $panel ?? $panel = 'profile_panel_supplies_input_import';
/> -
+
Управление складами
@@ -105,7 +105,9 @@ $panel ?? $panel = 'profile_panel_supplies_input_import'; ?>
-
.
+
+ . +
name ?? 'Без названия' ?>
@@ -113,8 +115,8 @@ $panel ?? $panel = 'profile_panel_supplies_input_import';
- - + +
@@ -130,8 +132,12 @@ $panel ?? $panel = 'profile_panel_supplies_input_import'; $amount_warehouses = 0; ?> -
-
name ?? 'Без названия' ?>
+
+
+ name ?? 'Без названия' ?> + + +
'form_warehouse_settings', @@ -161,13 +167,20 @@ $panel ?? $panel = 'profile_panel_supplies_input_import'; ?> + file, $matches); + $download = $matches[0][0]; + ?>
-
.
+
+ . +
name ?? 'Без названия' ?>
- - + +
@@ -180,13 +193,13 @@ $panel ?? $panel = 'profile_panel_supplies_input_import'; 'options' => ['class' => ''] ], 'options' => [ - 'class' => 'px-3 mb-3', + 'class' => 'px-3', 'onsubmit' => 'return false;' ] ]); ?> -
+
field($supply, 'file_excel', ['enableLabel' => false])->fileInput(['multiple' => true, 'onChange' => 'page_profile_supplies_import_excel(this.parentElement.parentElement.parentElement, ' . $warehouse->_key . ', undefined, \'profile_panel_supplies_input_import\')']) ?>
@@ -196,10 +209,39 @@ $panel ?? $panel = 'profile_panel_supplies_input_import';
- + + + +
+ + +
+
+ 1. Заполните Excel-документ, где в первой строке записаны названия колонок +
Артикул: "артикул", "article", "catn"
+
Производитель: "производитель", "production", "prod"
+
Стоимость: "стоимость", "cost"
+
Количество: "количество", "amount", "amnt"
+ +
+ 2. Выберите или создайте склад и настройте его +
1. Установите город в котором находится склад
+
2. Нажмите на кнопку "Обзор..." и выбирете Excel-документ
+
3. Вам предложит подтвердить отправку на сервер
+
4. Если вы не уверены, что правильно заполнили документ, то отклоните загрузку и вам предложит отправить документ модератору. Мы сами настроим и загрузим ваш документ, а так же пришлем исправления, если выявим ошибки
+ +
+ 3. Проверьте что все товары загрузились успешно +
1. Присутствуют в поиске
+
2. Отображаются в списке поставок склада
+
3. В полученном уведомлении не написано об ошибках или непривязанных поставках. Если поставка не привязалась, то модератор автоматически получает запрос на решение проблемы (отсутствие товара в базе данных, либо неподходящие данные в документе). После обработки вам придёт уведомление и письмо на почту
+ +
+
+
diff --git a/mirzaev/skillparts/system/web/files/20827450/.gitignore b/mirzaev/skillparts/system/web/files/.gitignore similarity index 100% rename from mirzaev/skillparts/system/web/files/20827450/.gitignore rename to mirzaev/skillparts/system/web/files/.gitignore diff --git a/mirzaev/skillparts/system/web/files/20827450/1637773114/Тест импорта.xlsx b/mirzaev/skillparts/system/web/files/20827450/1637773114/Тест импорта.xlsx deleted file mode 100644 index 861f74212aec1325b1706501f56ca9734a44af1d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8540 zcmeHM1y>x|*6m=y-Q9z`JB@1y!QI_yoFE-6NRZ$VoFr%n?(XjHlHl$H_&W1uUS=}$ z{em~uYt`+lRr{=}d-p!)+;dbEpkc59Z~%A!06+mSIec$r@B{#efdK%p0Ps+{5{?ca za|e*2nwOKgt3HdTy&ZWD3=~}!01EQ_zsLXZ3>3!?D0i@-OI^u+m)K;MUo01c=RN@U zU^2WAY3+R1U1+MCVQu}G@#YR4n2lq@`vr4k(TC$?$g14Iz8W0X-Jpsb5!l(G(q|FZ-5_6uLhB{HiE5q8ZIVK> zD_t$;l#waaGFwPY6YA3N3S2`oFR2n2VR=FLd7(~sj4fk}ub!`W3*Fm@bCuhA9vmw} zX59?2Knn2qEI`FJq7t`+!(rrArzlRY;=pk``O+QD8WwTq3XxfTMs$psGCrj}(`tTC zhU9a8UIwt=$KJkLzSidlro_GuAI6?;!bn{|VqaqH)StBi(fe8{s9%L1toH5*`s|Nx z>ApTZN!;=0cz^={9v`6rDu0n>l{y>MIfQG95Y-_;WNGMPZs*F%^5guk9RG(k_@_@V zj#GNx!G;`iB>O$I_iAb>1|6v2AuiiMq2?DLw}@61l}k;u)bflNU5)THw2Xg~-}nB7 zC84O@UW&_guHpzxY(c7OkCKq2TW7bY474tZ($2+eofz&@7gLuhGV)$@?oH7QMYW%@ z75Y}Fq$f@!zo3t>Xc8h|bSr5un_QPZnF78%CK-+JhBBj6z zBI-T>d-Xhz^`7eB6Ai?~27XV1I9mko4iE}&anPf@#sl1dKTOAE+8CQ`(WE?}&xa

XjnJS&TEmj+ zTWkQrWOEt=gG-K8<~PK=>JJYZ+6lAwL9fH2ux`DEVS+uLQp2pZ%H{+pZiap8Opf4^ zyf^Y?p=dwZUDzGjz3P~mVl5NZSRrdJ_S?Pj6x&ifG5IbTWu|%im?eX`1Ja5Chg-Nk z3X!yGz*K#emdAJU=i&=#%#0)Y1T`sO(2^$;W3gDQHfz zyp%D+_1+lI$8W{HQuvV+jNymw%%Ry=-%2PTS(>=%IwMnFEIf<)mB}y9+43{%%LPk` zgNB(Wdm8R-+dvU{@#j%nGy|s1@Ud@5;CJ19>gnDmF=-%J71%eFkFV9e6NTXF@EQw75icUpgOL$CID{{aKj#`H0;wMQJlSRl9 zMg?Un)s1<~*JgW+<_jbiR+96@+ z!+XE#U)ijBC4SF6#)L&VnL<8>+${bKG*5*IqYew>D;~{lTjW=GhWAf02^5J>I)lig z9wHS&0Q?h(O#Ty2{w$V1Ldz3KrUwz*|MpR=s-)1#hTeqq5XuHw7aWW^5G&=r`W_m5 zUnTtlEd{6F`3ez3y}s780xPs*h}Y3jkNXuj>N+&mMH}O%a7-9)EW0B?SjVBWA!vA$ zgA!7(3@jGr{_bAU0TODeD^{IITrX1wHs9B4IvRq|+z*tJ=XK*DTsFgOZX7nQqa^(h z*E&$S8E_l)a=!#zSyMxvN^i0CSSPV?36}}>A{#p+K#&tc@dAu(Pf{>mw@F>XpEiEC zQ1TkKZOgqy-XbniAT8t;_6-4%hxW>l`P0X_Zsnvjs2{C?fOq}$Eeoei1LsE;n|(b~ zE0C4`yJsCV{D|ZZp-bRX001BI#P6Qf)ymu)(Lzd|A2wFMSQ6wxFqSJQC!&G5?s@dBwj^&Bj1R7X&JQle z#EkS^7w<`!mj}%`7_360XZvs&CG9m7uoKgaLTOPeRy?*t`z{4m zjO9V!FQYSwzN788iIOSLlf`wXw31X;oMLYx)S=~crH^vCU!1*cHSib~?$B7t0yqF% zVLB_e>f%oO;6&D$$w;b@%HBp2eR&OwEd|7VS$u5B@-)K)YTjZyBePt%7W|OYi0o3$ zJg8as2xHR3o{almPgrv943nz|s;e`1v`%1xhLb5OVbP~{PPV|-LibtNKGYmy1Aa>P zV)wEsTdH+>7t4idy#$xvq=~@vf)Tz8?(&l#HI zbf?=HDx+g^pynP`Bni;dpa~ED-3;4r$lsn|Yx#JNjz z9A7)5l;^q-dSA~!h&x5WS{d&WVWL@RqU9gC>L!w6{SJ}=L=yhk!T!cokd?W;IqPrd z-)Oq8tsAi*jqS&JE(+fy*eqAx)JbGFr#!z;OR<-?>1-EW()X52nsYe{AuvwpB40&T z!4UD)o&-G#*XU@{LvnBs&pn1PXIx3j1z+00he{e-t-LXhVPDtbFx#c~(wyb9V=>4X)sYQVYpmgvEn zIHv3%*@de+T3Iy9|X(sKP^kaT0nKl6> ze2GPr`}8W8p0^bhiD!uVxSt;H^mQ0MClwa(x^`WzaWS9O7w=Q7@ww^H^nZ0# zclM2SrN#HV+w_IC(98*|-|c#rV@pfFaAYlf*O_BRqv!4BO^xBh$%bjfm2$YWfUm5{ z;CtKa*}6Ux{H$P6(tJk?_DFPgCKZ@w=F&S#j)0lOuz4qayO3jdL6Jl7aa6ITN1*(|Tu zIg(if%4JTQobF*?%t0RT?CbT~(0oHB+61N6M3thZtu=f!<| z`Q2k=`2zPXG1t=Jwf&EjAiNCcgbO^TJH)uXy?{i>3+}(=688V(I1? zAL>ai2`MF>Mwy^hyMK1C;;hm%z=)}K1OoR4sbAE@SQQgeAbqCHmUd@h(!s@5+VM*$ zRL7mk2H5Nsx3>2MZfPuBH0=`us@1~Q-weKVr!MO+RUEFf@YZE3FnCfHuB9#(yOX$C z@8;c=LTnQ{0Lz-g$tOe)9j;%r|c49yb^q=eF&HDEte`j+7R$7aYgV?sNnG1&Uc;P zE1eP+nP75jnU9xLqco1zPs{IRsgzW75>y=8D#8<1<#4`EHEX2rP^~!AcsI|_0$(W$ zqq|<6K~)^;POh;huYSGT5&8gO-yzuZd==YM99FX+h!u?tG)8xs$ch!+5W0S+d6GbM<@FKs< zF>}Dv7oZe>?-vI|nTG3A+6%$#5d(^^4Cooxch3~6s_)MtB*Z|6Ppia>mUrRuHJUi- zyqX*;CJ|pd6yOC#Eob4~4o$BH?h(_M%@l+hj5;QQZSWHtvnY3Xb@M|si`*KeKh9kV zpq-i{M+&`*7Q#h0=(4?X{Kpu!>5Wp*1j)B_AaM-kKQYV|`XkB8Q&(_UU_)QR z+a`fO#E}o*nh(j#dP_wvhKMbT2vSgpR|+C~ougkTHKV_Y+9Z*re~vmFB@l0?ARS&U z%k$NV%lFJ;Ip!^^4gF|HO1N#p>gr%mSb-j%9y8|mHI_4JeD%aaFk*=oxTd%rZ)Z=_ z*}Mk4#6nO3Pp+1*nqO6fK%w4j7N=q9-G%K-UllvqKFuUs#Sw{{AV>|1@XBA7dJC}z z9xLS$EiCV=U(=}zv*zR}Ki;AP5mTg@NSy(l{k9%pN&tV9c&cqQ=o3#Ub<~v{X`gE@ zqy9W+D@{F<*Ko!-$vgIJuTYrY5eY=f_0VTkGhb6=p-pB(1aF)OlXT_~x4cW3!Vo0& zk!Y{v{Z&)$Hq-6Z2sJauLJ*H(lJlHPgL!(vpwYVS+)rlqoisSU4z);(1)C-d^%CE# zCYO8UP@6oI*FE=>5K)~e-WCI80L0eFr`i^3a72|gN7an7pN+f05x>X-|&1ILE8}#c125Y<^jd&7v%)Y7ODRh5Hp}hQ4_=@99S>N2g&*M`9&Q z1FqWiVT-w0wEKb2O`)r>BVuO``RsaSax|-7*zQcOXqMfZVXkX2aX`iN7{ zKIFr@sDMHKh&%txb4yp4oq7nri6C1{?B98AW$a>Z_7db`?O^#E-OZxg!lBsFC6C%4 zB)0ETo$;iovC!K60`HzEjSB?ISt?#J?X3`vUO&6 zc77xEix$n)Wy|Ts=xLwqNPxL~FkO?JtYlF@d%as(q0ufzV6IKO?#`c(`Xa5wlJO-? zBnP@R>4D~qy9bL?S@2mW~+lG+9 zH*Q6~gAKd;2zDiVvsr2U-Z`igIzgWvUK#rc=u(ZdP)R*zUt@5G+6;zY4_@U2IhxHo zxN*#>%MN?^eY-<_BR#-$ks+2wttlZ14Hi7}a zR+m2J9-L8D9m;v~e5=^5TxHt;Y<$&TG40pZVke)c!NY?sC~oF5DKzftwTeUy4R-XY zCPfCRc{nV%5k_ML_I!`nEBXd{GcWEX)f+Ga)@2cCxt!AWYJHho20mXX-0Tcro!Z~) z`KevOAB7bLe^{JVsJXL-It969IU4SLojOU)CKt9$=02%TSQwtWF^gP}8O?ZpE3%`s z9WaK48+X^=pZUNbb{1ogOhO$p`LPr24r|=JiG}K(WE~e>#`9>RQxr1Cf8XLmyQ!Nb zLFkDA4FI73nV!Z@PXDqKGG)IX>2Yn!MC_0fhiqdq{7vDZ}FY&zLCgmwrC6KJUgRT;>Lf+xGV zuhh-C^t|q810?)XzkMU-fiDd@rQV00i{Z09@t08eEZBTrHV+4txNZwSZ50es@UjG* z_h}~UJ925Y_2iJ((`@%xIWfAn^^|DYm>Vm%m8RkO4#%|TwJGMla(l@u?Z_Dqh?wanX_y|Ib4c|6x%=^YpEQ@tz ze?h_*ljW1tBdCmN)bN2Z;1W`|J^;RD8NEi7XUzn`~n~mzMJ&N)&Bt+l)kJ0 diff --git a/mirzaev/skillparts/system/web/js/cart.js b/mirzaev/skillparts/system/web/js/cart.js index 9f54461..0daf049 100644 --- a/mirzaev/skillparts/system/web/js/cart.js +++ b/mirzaev/skillparts/system/web/js/cart.js @@ -471,30 +471,6 @@ function cart_registration_entity_generate(account) { block_details.setAttribute('id', 'details'); block_details.setAttribute('class', 'pr-0 col-6 d-flex flex-column'); - // Инициализация ярлыка "INDX" - let label_indx = document.createElement('label'); - label_indx.setAttribute('class', 'control-label'); - label_indx.innerText = 'Индекс'; - - // Инициализация оболочки "INDX" - let wrap_indx = document.createElement('div'); - wrap_indx.setAttribute('class', 'row mx-0 mb-3'); - - // Инициализация поля "INDX" - let input_indx = document.createElement('input'); - input_indx.setAttribute('id', 'indx'); - input_indx.setAttribute('class', 'col form-control button_clean'); - input_indx.setAttribute('type', 'text'); - input_indx.setAttribute('onchange', 'return cart_registration_block_edit(' + account._key + ', "indx", this.value);'); - input_indx.value = account.indx ?? ''; - - // Инициализация кнопки "INDX" - let button_indx = document.createElement('a'); - button_indx.setAttribute('class', 'ml-2 my-auto text-dark'); - button_indx.setAttribute('type', 'button'); - button_indx.setAttribute('role', 'button'); - button_indx.innerHTML = ''; - // Инициализация ярлыка "TAXN" let label_taxn = document.createElement('label'); label_taxn.setAttribute('class', 'control-label'); @@ -563,7 +539,7 @@ function cart_registration_entity_generate(account) { // Инициализация ярлыка "CNTC" let label_cntc = document.createElement('label'); label_cntc.setAttribute('class', 'control-label'); - label_cntc.innerText = 'Контакты'; + label_cntc.innerText = 'Дополнительная информация'; // Инициализация поля "CNTC" let input_cntc = document.createElement('textarea'); @@ -598,11 +574,6 @@ function cart_registration_entity_generate(account) { block_info.appendChild(label_mail); block_info.appendChild(input_mail); - block_info.appendChild(label_indx); - wrap_indx.appendChild(input_indx); - wrap_indx.appendChild(button_indx); - block_info.appendChild(wrap_indx); - block_info.appendChild(label_cntc); block_info.appendChild(input_cntc); @@ -635,6 +606,23 @@ function cart_registration_entity_generate(account) { return html; }; +function cart_registration_choose(button = 'cart_registration_entity', account) { + // Деинициализация всех вкладок + document.getElementById('cart_registration_entity').checked = + document.getElementById('cart_registration_individual').checked = false; + + document.getElementById('cart_registration_entity').setAttribute('onclick', 'page_profile_panel_choose(\'cart_registration_entity\')'); + document.getElementById('cart_registration_individual').setAttribute('onclick', 'page_profile_panel_choose(\'cart_registration_individual\'); cart_registration_entity_init(' + account + ')'); + + document.querySelector('[for="cart_registration_entity"]').classList.remove('active'); + document.querySelector('[for="cart_registration_individual"]').classList.remove('active'); + + // Инициализация запрошенной вкладки + document.getElementById(button).checked = true; + document.getElementById(button + '_button').removeAttribute('onclick'); + document.querySelector('[for="' + button + '"]').classList.add('active'); +} + function cart_response(data, status, xhr) { // Обработка ответов diff --git a/mirzaev/skillparts/system/web/js/profile.js b/mirzaev/skillparts/system/web/js/profile.js index ce1e01a..a5b5e7a 100644 --- a/mirzaev/skillparts/system/web/js/profile.js +++ b/mirzaev/skillparts/system/web/js/profile.js @@ -83,6 +83,70 @@ function page_profile_supplies_import_excel(form, warehouse, account, panel) { return false; }; +function page_profile_imports_delete(_key) { + $.ajax({ + url: '/profile/imports/delete', + type: 'post', + dataType: 'json', + data: { + '_csrf': yii.getCsrfToken(), + _key + }, + success: page_profile_response_success, + error: page_profile_response_error + }); + + return false; +}; + +function page_profile_warehouses_write() { + $.ajax({ + url: '/profile/warehouses/write', + type: 'post', + dataType: 'json', + data: { + '_csrf': yii.getCsrfToken() + }, + success: page_profile_response_success, + error: page_profile_response_error + }); + + return false; +}; + +function page_profile_warehouses_delete(_key) { + $.ajax({ + url: '/profile/warehouses/delete', + type: 'post', + dataType: 'json', + data: { + '_csrf': yii.getCsrfToken(), + _key + }, + success: page_profile_response_success, + error: page_profile_response_error + }); + + return false; +}; + +function page_profile_warehouses_rename(_key, name) { + $.ajax({ + url: '/profile/warehouses/rename', + type: 'post', + dataType: 'json', + data: { + '_csrf': yii.getCsrfToken(), + _key, + name + }, + success: page_profile_response_success, + error: page_profile_response_error + }); + + return false; +}; + function page_supplies_settings(form, warehouse, panel) { if (form == undefined) { form = {