Топовый малыш

This commit is contained in:
Arsen Mirzaev Tatyano-Muradovich 2022-01-25 14:46:25 +10:00
parent bc98da67ce
commit 8abdaf4626
11 changed files with 506 additions and 61 deletions

View File

@ -103,6 +103,8 @@ $config = [
'<section:(product|cart)>/<catn:[^/]+>/<action:(read|write|edit|delete)>/<target:(title|catn|dscr|dmns|wght|image|cover|comm)>' => '<section>/<action>-<target>', '<section:(product|cart)>/<catn:[^/]+>/<action:(read|write|edit|delete)>/<target:(title|catn|dscr|dmns|wght|image|cover|comm)>' => '<section>/<action>-<target>',
'profile/geolocation/<action:(init|write)>' => 'profile/geolocation-<action>', 'profile/geolocation/<action:(init|write)>' => 'profile/geolocation-<action>',
'profile/panel/<panel:(suppliers)>/<block:(requests)>/<action:(search)>' => 'profile/panel-<panel>-<block>-<action>', 'profile/panel/<panel:(suppliers)>/<block:(requests)>/<action:(search)>' => 'profile/panel-<panel>-<block>-<action>',
'profile/imports/<action:(delete)>' => 'profile/imports-<action>',
'profile/warehouses/<action:(write|delete|rename)>' => 'profile/warehouses-<action>',
'orders' => 'order/index', 'orders' => 'order/index',
'orders/<filter:[^/]+>' => 'order/index', 'orders/<filter:[^/]+>' => 'order/index',
'orders/<catn:[^/]+>/<action:(accept)>' => 'order/<action>', 'orders/<catn:[^/]+>/<action:(accept)>' => 'order/<action>',

View File

@ -20,7 +20,10 @@ use app\models\Settings;
use app\models\Dellin; use app\models\Dellin;
use app\models\SettingsEdgeSettings; use app\models\SettingsEdgeSettings;
use app\models\Terminal; use app\models\Terminal;
use app\models\Import;
use app\models\ImportEdgeSupply;
use app\models\Warehouse; use app\models\Warehouse;
use app\models\WarehouseEdgeImport;
use Dadata\DadataClient as Dadata; use Dadata\DadataClient as Dadata;
use Throwable; use Throwable;
@ -49,7 +52,11 @@ class ProfileController extends Controller
'monitoring', 'monitoring',
'readGroups', 'readGroups',
'geolocation-write', '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; 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;
}
}
} }

View File

@ -794,7 +794,7 @@ class Account extends Document implements IdentityInterface, PartnerInterface
} }
/** /**
* Поиск заявок на регистрацию поставщиков * Запись поставщика
* *
* @return array * @return array
*/ */

View File

@ -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 * Запись данных свойств по UUID 1C
* *
@ -623,14 +633,6 @@ class Supply extends Product implements ProductInterface, OfferInterface
return null; return null;
} }
/**
*
*/
public function write($context = null)
{
return $this->onec;
}
/** /**
* @param mixed|null $context * @param mixed|null $context
* @return array * @return array

View File

@ -38,14 +38,11 @@ class WarehouseEdgeImport extends Edge
* Поиск по инстанции импорта * Поиск по инстанции импорта
* *
* @param Import $import Инстанция импорта * @param Import $import Инстанция импорта
* @param int $limit Ограничение по максимальному количеству
* *
* @return array Связи склада и инстанций поставок * @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();
} }
} }

View File

@ -230,8 +230,8 @@ use DateTime;
<div class="p-3 mx-0 row"> <div class="p-3 mx-0 row">
<div id="cart_registration_menu" class="mr-5 col px-0"> <div id="cart_registration_menu" class="mr-5 col px-0">
<div class="row mb-4 mx-0"> <div class="row mb-4 mx-0">
<label class="ml-auto btn button_white mb-0 mr-4" for="cart_registration_individual">Физическое лицо</label> <label id="cart_registration_individual_button" class="ml-auto btn button_white mb-0 mr-4" for="cart_registration_individual" onclick="cart_registration_choose('cart_registration_individual', <?= $account['_key'] ?>)">Физическое лицо</label>
<label class="mr-auto btn button_white mb-0" for="cart_registration_entity" onclick="cart_registration_entity_init(<?= $account['_key'] ?>)">Юридическое лицо</label> <label id="cart_registration_entity_button" class="mr-auto btn button_white active mb-0" for="cart_registration_entity" onclick="cart_registration_choose('cart_registration_entity', <?= $account['_key'] ?>); cart_registration_entity_init(<?= $account['_key'] ?>)">Юридическое лицо</label>
</div> </div>
<div class="cart_registration_content d-flex"> <div class="cart_registration_content d-flex">
<input type="radio" id="cart_registration_individual" name="registration_panel" /> <input type="radio" id="cart_registration_individual" name="registration_panel" />
@ -260,6 +260,8 @@ use DateTime;
$delivery_to_terminal_list ?? $delivery_to_terminal_list = ['Нет данных']; $delivery_to_terminal_list ?? $delivery_to_terminal_list = ['Нет данных'];
?> ?>
<small class="mb-2"><b>Терминал для получения</b></small>
<?= $form->field($model_delivery, 'opts[delivery_to_terminal]', ['options' => ['class' => "mb-0"]]) <?= $form->field($model_delivery, 'opts[delivery_to_terminal]', ['options' => ['class' => "mb-0"]])
->dropDownList($delivery_to_terminal_list, [ ->dropDownList($delivery_to_terminal_list, [
'onChange' => 'page_profile_settings(this.parentElement.parentElement, undefined, \'\'); cart_cost_calculate();', 'onChange' => 'page_profile_settings(this.parentElement.parentElement, undefined, \'\'); cart_cost_calculate();',
@ -271,10 +273,11 @@ use DateTime;
<div class="mb-0 mx-0 row"> <div class="mb-0 mx-0 row">
<div class="ml-auto px-0 col d-flex"> <div class="ml-auto px-0 col d-flex">
<a class="ml-auto col btn button_clean button_blue" title="Оформить заказ" href="/orders" role="button" onclick="return cart_request();"> <b class="ml-auto my-auto mr-3">
<span id="cart_cost">0</span> <span id="cart_cost">0</span>
руб руб
</a> </b>
<a class="col-5 btn button_clean button_blue" title="Оформить заказ" href="/orders" role="button" onclick="return cart_request();">Купить</a>
</div> </div>
</div> </div>
</div> </div>
@ -291,11 +294,15 @@ use DateTime;
cart_cost_calculate(); cart_cost_calculate();
cart_registration_entity_init(<?= $account['_key'] ?>); cart_registration_entity_init(<?= $account['_key'] ?>);
cart_registration_choose('cart_registration_entity', <?= $account['_key'] ?>);
} else { } else {
document.addEventListener('DOMContentLoaded', function() { document.addEventListener('DOMContentLoaded', function() {
cart_cost_calculate(); cart_cost_calculate();
cart_registration_entity_init(<?= $account['_key'] ?>); cart_registration_entity_init(<?= $account['_key'] ?>);
cart_registration_choose('cart_registration_entity', <?= $account['_key'] ?>);
}, false); }, false);
} }
</script> </script>

View File

@ -40,7 +40,7 @@ $panel ?? $panel = 'profile_panel_supplies_input_import';
</div> </div>
<input type="radio" id="profile_panel_supplies_input_import" name="main_panel" <?= $panel === 'profile_panel_supplies_input_import' ? 'checked' : null ?> /> <input type="radio" id="profile_panel_supplies_input_import" name="main_panel" <?= $panel === 'profile_panel_supplies_input_import' ? 'checked' : null ?> />
<div class="col"> <div class="col d-flex flex-column">
<h5>Управление складами</h5> <h5>Управление складами</h5>
<div class="dropdown-divider mb-4"></div> <div class="dropdown-divider mb-4"></div>
@ -105,7 +105,9 @@ $panel ?? $panel = 'profile_panel_supplies_input_import';
?> ?>
<div class="mb-3 row"> <div class="mb-3 row">
<div class="col-auto"><?= ++$amount ?>.</div> <div class="col-auto">
<?= ++$amount ?>.
</div>
<div class="col"> <div class="col">
<?= $import->name ?? 'Без названия' ?> <?= $import->name ?? 'Без названия' ?>
</div> </div>
@ -113,8 +115,8 @@ $panel ?? $panel = 'profile_panel_supplies_input_import';
<?= $create ?? 'Неизвестно' ?> <?= $create ?? 'Неизвестно' ?>
</div> </div>
<a class="pr-0 my-auto col-auto fas fa-user text-dark" href="<?= $date_connect_with_account ?? 'Неизвестно' ?>"></a> <a class="pr-0 my-auto col-auto fas fa-user text-dark" href="<?= $date_connect_with_account ?? 'Неизвестно' ?>"></a>
<a class="pr-0 my-auto col-auto fas fa-file-download text-dark" type="button" onclick="page_profile_supplies_download()"></a> <a class="pr-0 my-auto col-auto fas fa-file-download text-dark" title="Скачать" href="<?= $download ?>" aria-hidden="true" download></a>
<a class="my-auto col-auto fas fa-trash-alt text-dark" type="button" onclick="page_profile_supplies_delete()"></a> <a class="my-auto col-auto fas fa-trash-alt text-dark" title="Удалить" type="button" aria-hidden="true" onclick="return page_profile_imports_delete(<?= $import->_key ?>);"></a>
</div> </div>
<?php if ($amount < count($imports)) : ?> <?php if ($amount < count($imports)) : ?>
@ -130,8 +132,12 @@ $panel ?? $panel = 'profile_panel_supplies_input_import';
$amount_warehouses = 0; $amount_warehouses = 0;
?> ?>
<?php foreach ($warehouses as $warehouse) : ?> <?php foreach ($warehouses as $warehouse) : ?>
<section class="col<?= ++$amount_warehouses <= count($warehouses) ? ' mb-4' : '' ?>"> <section class="col<?= ++$amount_warehouses < count($warehouses) ? ' mb-4' : '' ?>">
<h5 class="d-flex"><?= $warehouse->name ?? 'Без названия' ?><small class="ml-auto mt-auto"><a class="text-dark fas fa-pen" type="button" onclick="edit_zaloopa"></a></small></h5> <h5 class="d-flex">
<?= $warehouse->name ?? 'Без названия' ?>
<small class="ml-auto mt-auto"><a class="text-dark fas fa-pen" type="button" onclick="return page_profile_warehouses_rename(<?= $warehouse->_key ?>, prompt('Название склада', this.parentElement.parentElement.innerText));"></a></small>
<small class="ml-3 mt-auto"><a class="text-dark fas fa-trash-alt" type="button" onclick="return page_profile_warehouses_delete(<?= $warehouse->_key ?>);"></a></small>
</h5>
<?php $form = ActiveForm::begin([ <?php $form = ActiveForm::begin([
'id' => 'form_warehouse_settings', 'id' => 'form_warehouse_settings',
@ -161,13 +167,20 @@ $panel ?? $panel = 'profile_panel_supplies_input_import';
?> ?>
<?php foreach (Import::searchByWarehouse($warehouse) as $import) : ?> <?php foreach (Import::searchByWarehouse($warehouse) as $import) : ?>
<?php
// Инициализация ссылки на скачивание
preg_match_all('/\/files\/.*$/', $import->file, $matches);
$download = $matches[0][0];
?>
<div class="mx-2 mb-3 row"> <div class="mx-2 mb-3 row">
<div class="col-auto"><?= ++$amount_imports ?>.</div> <div class="col-auto">
<?= ++$amount_imports ?>.
</div>
<div class="col"> <div class="col">
<?= $import[0]->name ?? 'Без названия' ?> <?= $import[0]->name ?? 'Без названия' ?>
</div> </div>
<a class="pr-0 my-auto col-auto fas fa-file-download text-dark" type="button" aria-hidden="true" onclick="page_profile_supplies_download()"></a> <a class="pr-0 my-auto col-auto fas fa-file-download text-dark" title="Скачать" href="<?= $download ?>" aria-hidden="true" download></a>
<a class="my-auto col-auto fas fa-trash-alt text-dark" type="button" aria-hidden="true" onclick="page_profile_supplies_delete()"></a> <a class="my-auto col-auto fas fa-trash-alt text-dark" title="Удалить" type="button" aria-hidden="true" onclick="return page_profile_imports_delete(<?= $import->_key ?>);"></a>
</div> </div>
<?php endforeach ?> <?php endforeach ?>
@ -180,13 +193,13 @@ $panel ?? $panel = 'profile_panel_supplies_input_import';
'options' => ['class' => ''] 'options' => ['class' => '']
], ],
'options' => [ 'options' => [
'class' => 'px-3 mb-3', 'class' => 'px-3',
'onsubmit' => 'return false;' 'onsubmit' => 'return false;'
] ]
]); ]);
?> ?>
<div class="mb-3 row"> <div class="row">
<?= $form->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\')']) ?> <?= $form->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\')']) ?>
</div> </div>
@ -196,10 +209,39 @@ $panel ?? $panel = 'profile_panel_supplies_input_import';
</section> </section>
<?php if ($amount_warehouses < count($warehouses)) : ?> <?php if ($amount_warehouses < count($warehouses)) : ?>
<div class="dropdown-divider mx-3 mb-4"></div> <!-- <div class="dropdown-divider mx-3 mb-3"></div> -->
<?php endif ?> <?php endif ?>
<?php endforeach ?> <?php endforeach ?>
<a class="mx-auto text-dark fas fa-plus" title="Добавить" type="button" onclick="return page_profile_warehouses_write();"></a>
<?php endif ?> <?php endif ?>
<div class="dropdown-divider mt-4 mb-3"></div>
<section class="mx-3 px-2">
<!-- <b class="mb-2 row">Инструкция</b> -->
<small class="row">
<dl class="mb-0">
<dt>
1. Заполните Excel-документ, где в первой строке записаны названия колонок
<dd class="mx-4 mt-2 mb-1"><b>Артикул:</b> "артикул", "article", "catn"</dd>
<dd class="mx-4 mb-1"><b>Производитель:</b> "производитель", "production", "prod"</dd>
<dd class="mx-4 mb-1"><b>Стоимость:</b> "стоимость", "cost"</dd>
<dd class="mx-4 mb-3"><b>Количество:</b> "количество", "amount", "amnt"</dd>
</dt>
<dt>
2. Выберите или создайте склад и настройте его
<dd class="mx-4 mt-2 mb-1"><b>1.</b> Установите город в котором находится склад</dd>
<dd class="mx-4 mb-1"><b>2.</b> Нажмите на кнопку "Обзор..." и выбирете Excel-документ</dd>
<dd class="mx-4 mb-1"><b>3.</b> Вам предложит подтвердить отправку на сервер</dd>
<dd class="mx-4 mb-3"><b>4.</b> Если вы не уверены, что правильно заполнили документ, то отклоните загрузку и вам предложит отправить документ модератору. Мы сами настроим и загрузим ваш документ, а так же пришлем исправления, если выявим ошибки</dd>
</dt>
<dt>
3. Проверьте что все товары загрузились успешно
<dd class="mx-4 mt-2 mb-1"><b>1.</b> Присутствуют в поиске</dd>
<dd class="mx-4 mb-1"><b>2.</b> Отображаются в списке поставок склада</dd>
<dd class="mx-4 mb-3"><b>3.</b> В полученном уведомлении не написано об ошибках или непривязанных поставках. Если поставка не привязалась, то модератор автоматически получает запрос на решение проблемы (отсутствие товара в базе данных, либо неподходящие данные в документе). После обработки вам придёт уведомление и письмо на почту</dd>
</dt>
</dl>
</small>
</section>
</div> </div>
</div> </div>
</div> </div>

View File

@ -471,30 +471,6 @@ function cart_registration_entity_generate(account) {
block_details.setAttribute('id', 'details'); block_details.setAttribute('id', 'details');
block_details.setAttribute('class', 'pr-0 col-6 d-flex flex-column'); 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 = '<i class="fas fa-redo-alt" onclick="return profile_panel_input_suppliers_requests_block_regen(\'indx\');"></i>';
// Инициализация ярлыка "TAXN" // Инициализация ярлыка "TAXN"
let label_taxn = document.createElement('label'); let label_taxn = document.createElement('label');
label_taxn.setAttribute('class', 'control-label'); label_taxn.setAttribute('class', 'control-label');
@ -563,7 +539,7 @@ function cart_registration_entity_generate(account) {
// Инициализация ярлыка "CNTC" // Инициализация ярлыка "CNTC"
let label_cntc = document.createElement('label'); let label_cntc = document.createElement('label');
label_cntc.setAttribute('class', 'control-label'); label_cntc.setAttribute('class', 'control-label');
label_cntc.innerText = 'Контакты'; label_cntc.innerText = 'Дополнительная информация';
// Инициализация поля "CNTC" // Инициализация поля "CNTC"
let input_cntc = document.createElement('textarea'); let input_cntc = document.createElement('textarea');
@ -598,11 +574,6 @@ function cart_registration_entity_generate(account) {
block_info.appendChild(label_mail); block_info.appendChild(label_mail);
block_info.appendChild(input_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(label_cntc);
block_info.appendChild(input_cntc); block_info.appendChild(input_cntc);
@ -635,6 +606,23 @@ function cart_registration_entity_generate(account) {
return html; 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) { function cart_response(data, status, xhr) {
// Обработка ответов // Обработка ответов

View File

@ -83,6 +83,70 @@ function page_profile_supplies_import_excel(form, warehouse, account, panel) {
return false; 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) { function page_supplies_settings(form, warehouse, panel) {
if (form == undefined) { if (form == undefined) {
form = { form = {