Топовый малыш
This commit is contained in:
parent
bc98da67ce
commit
8abdaf4626
|
@ -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>',
|
||||||
|
|
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -794,7 +794,7 @@ class Account extends Document implements IdentityInterface, PartnerInterface
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Поиск заявок на регистрацию поставщиков
|
* Запись поставщика
|
||||||
*
|
*
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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>
|
||||||
|
|
Binary file not shown.
|
@ -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) {
|
||||||
// Обработка ответов
|
// Обработка ответов
|
||||||
|
|
||||||
|
|
|
@ -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 = {
|
||||||
|
|
Reference in New Issue