Принятие и отказ в регистрации

This commit is contained in:
Arsen Mirzaev Tatyano-Muradovich 2021-09-22 11:38:53 +10:00
parent 134ce8f162
commit 8c53872955
13 changed files with 426 additions and 98 deletions

View File

@ -94,6 +94,10 @@ $config = [
'class' => 'yii\rest\UrlRule',
'controller' => 'main'
],
'<_key:[0-9]+>' => 'account/index',
'<_key:[0-9]+>/<target:[^/]+>/<action:(read|edit|delete|regenerate)>' => 'account/<action>',
'<_key:[0-9]+>/files/<file:[^/]+>' => 'account/file',
'<_key:[0-9]+>/<action:(accept|decline)>' => 'account/<action>',
'product/<catn:[^/]+>' => 'product/index',
'<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>',

View File

@ -7,6 +7,7 @@ namespace app\controllers;
use yii;
use yii\web\Controller;
use yii\web\Response;
use yii\web\Cookie;
use yii\filters\AccessControl;
use app\models\Account;
@ -19,14 +20,36 @@ class AccountController extends Controller
'access' => [
'class' => AccessControl::class,
'rules' => [
[
'allow' => true,
'actions' => [
'file'
]
],
[
'allow' => true,
'roles' => ['@'],
'actions' => [
'index',
'edit',
'regenerate'
]
],
[
'allow' => true,
'actions' => ['accept', 'decline'],
'matchCallback' => function ($rule, $action): bool {
if (
!yii::$app->user->isGuest
&& (yii::$app->user->identity->type === 'administrator'
|| yii::$app->user->identity->type === 'moderator')
) {
return true;
}
return false;
}
],
[
'allow' => false,
'roles' => ['?'],
@ -72,6 +95,130 @@ class AccountController extends Controller
return $this->renderPartial('/accounts/index');
}
/**
* Подтверждение
*
* @param int $_key Идентификатор аккаунта
*/
public function actionAccept(string $_key)
{
if (yii::$app->user->isGuest) {
// Аккаунт не аутентифицирован
} else {
if (yii::$app->request->isPost) {
// AJAX-POST-запрос
if (
yii::$app->user->identity->type === 'administrator'
|| yii::$app->user->identity->type === 'moderator'
) {
// Запрос произведен уполномоченным
if ($account = Account::searchById(Account::collectionName() . '/' . $_key)) {
// Аккаунт найден
$account->type = 'user';
if ($account->update() > 0) {
// Удалось перезаписать данные в хранилище
// Запись в журнал
$account->journal('accepted into suppliers');
// Отправка письма с подтверждением аккаунта
$account->sendMailVerify();
// Настройка формата ответа
yii::$app->response->format = Response::FORMAT_JSON;
return true;
}
}
}
}
}
// Запись кода ответа
yii::$app->response->statusCode = 500;
return false;
}
/**
* Отказ
*
* @param int $_key Идентификатор аккаунта
*/
public function actionDecline(string $_key)
{
if (yii::$app->user->isGuest) {
// Аккаунт не аутентифицирован
} else {
if (yii::$app->request->isPost) {
// AJAX-POST-запрос
if (
yii::$app->user->identity->type === 'administrator'
|| yii::$app->user->identity->type === 'moderator'
) {
// Запрос произведен уполномоченным
if ($account = Account::searchById(Account::collectionName() . '/' . $_key)) {
// Аккаунт найден
// Отправка письма с отказом и причиной
$account->sendMailDecline(yii::$app->request->post('reason') ?? yii::$app->request->get('reason'));
// Настройка формата ответа
yii::$app->response->format = Response::FORMAT_JSON;
// Удаление аккаунта
return $account->delete() > 0;
}
}
}
}
// Запись кода ответа
yii::$app->response->statusCode = 500;
return false;
}
/**
* Запрос файла
*
* @param int $_key Идентификатор аккаунта
* @param string $file Путь до файла от каталога аккаунта
*/
public function actionFile(string $_key, string $file)
{
// Инициализация файла
$file = YII_PATH_PUBLIC . "/../assets/accounts/$_key/files/$file";
if (file_exists($file)) {
// Удалось найти файл
return $this->response->sendFile($file);
} else {
// Не удалось найти файл
// Запись кода ответа
yii::$app->response->statusCode = 500;
// Перенаправление на страницу аккаунта
return yii::$app->response->redirect("/$_key");
}
}
/**
* Редактирование параметра
*
* @param int $_key
* @param string $target
*
* @return void
*/
public function actionEdit(int $_key, string $target)
{
if (yii::$app->user->isGuest) {
@ -80,6 +227,13 @@ class AccountController extends Controller
if (yii::$app->request->isPost) {
// AJAX-POST-запрос
if (
$_key === yii::$app->user->identity->_key ||
(yii::$app->user->identity->type === 'administrator'
|| yii::$app->user->identity->type === 'moderator')
) {
// Запрос произведен с изменяемого аккаунта, либо уполномоченным
if ($account = Account::searchById(Account::collectionName() . '/' . $_key)) {
// Аккаунт найден
@ -93,6 +247,52 @@ class AccountController extends Controller
}
}
}
}
// Запись кода ответа
yii::$app->response->statusCode = 500;
return false;
}
/**
* Регенерация параметра
*
* @param int $_key
* @param string $target
* @return void
*/
public function actionRegenerate(int $_key, string $target)
{
if (yii::$app->user->isGuest) {
// Аккаунт не аутентифицирован
} else {
if (yii::$app->request->isPost) {
// AJAX-POST-запрос
if ($account = Account::searchById(Account::collectionName() . '/' . $_key)) {
// Аккаунт найден
if (
$account->_key === yii::$app->user->identity->_key ||
(yii::$app->user->identity->type === 'administrator'
|| yii::$app->user->identity->type === 'moderator')
) {
// Запрос произведен с изменяемого аккаунта, либо уполномоченным
if ($target === 'indx') {
// Запрошена регенерация индекса
// Настройка формата ответа
yii::$app->response->format = Response::FORMAT_JSON;
// Регенерация индекса
return Account::generateIndexes([$account], force: true);
}
}
}
}
}
// Запись кода ответа
yii::$app->response->statusCode = 500;

View File

@ -703,8 +703,6 @@ class ProfileController extends Controller
*/
public static function syncGeolocationWithDellin(Account|int|null $account = null): bool
{
Account::initForController($account);
// Синхронизация с базой данных (таблица с ДеловыеЛинии)
if (isset($account->geol['data']) && $dellin = Dellin::searchByCityKladr(str_pad($account->geol['data']['city_kladr_id'], 25, '0000000000000000000000'))) {
// Удалось найти город с терминалами ДеловыеЛинии

View File

@ -34,13 +34,13 @@ class SuppliersController extends Controller
// Запись поставщика
Account::writeSupplier($request['name'], $request['phon'], $request['mail'], $file = UploadedFile::getInstance(new Request($request), 'file'));
// yii::$app->mail_system->compose()
// ->setFrom(yii::$app->params['mail']['system'])
// ->setTo(yii::$app->params['mail']['info'])
// ->setSubject('Регистрация поставщика')
// ->setHtmlBody($this->renderPartial('/mails/supplier', $request))
// ->attach($file->tempName, ['fileName' => $file->name])
// ->send();
yii::$app->mail_system->compose()
->setFrom(yii::$app->params['mail']['system'])
->setTo(yii::$app->params['mail']['info'])
->setSubject('Регистрация поставщика')
->setHtmlBody($this->renderPartial('/mails/supplier', $request))
->attach($file->tempName, ['fileName' => $file->name])
->send();
return $this->renderPartial('/suppliers/requested');
}

View File

@ -565,11 +565,11 @@ class Account extends Document implements IdentityInterface, PartnerInterface
* Генерация псевдоанонимных индексов
*
* @param [int] $accounts Массив аккаунтов
* @param bool $init Параметр обозначающий изменение только для тех у кого ранее идентификатор задан не был (без перезаписи)
* @param bool $force Перезаписывать, если существует
*
* @return int Количество успешно обработанных аккаунтов
*/
public static function generateIndexes(array $accounts, bool $init = true): int
public static function generateIndexes(array $accounts, bool $force = false): int
{
// Инициализация
$amount = 0;
@ -597,14 +597,14 @@ class Account extends Document implements IdentityInterface, PartnerInterface
foreach ($accounts as $account) {
// Перебор запрошенных аккаунтов
if (($init && empty($account->indx)) || !$init) {
// Запись только тех аккаунтов у кого не инициализирован индекс или если указано отсутствие проверки
if ($force || empty($account->indx)) {
// Запись только тех аккаунтов у кого не инициализирован индекс, либо если указана перезапись
// Повтор генерации
regenerate_index:
// Генерация
$account->indx = $int_to_string(random_int(0, 29)) . $int_to_string(random_int(0, 29)) . $int_to_string(random_int(0, 29));
$account->indx = $int_to_string(random_int(0, 27)) . $int_to_string(random_int(0, 27)) . $int_to_string(random_int(0, 27));
if (in_array($account->indx, $registry)) {
// Сгенерированный индекс обнаружено в реестре запрещённых индексов
@ -703,6 +703,19 @@ class Account extends Document implements IdentityInterface, PartnerInterface
return false;
}
public function sendMailDecline(string $reason = 'Проблема с данными'): bool
{
// Отправка письма
yii::$app->mail_system->compose()
->setFrom(yii::$app->params['mail']['system'])
->setTo($this->mail)
->setSubject('Отказано в регистрации')
->setHtmlBody(yii::$app->controller->renderPartial('/mails/suppliers/decline', ['reason' => $reason]))
->send();
return false;
}
/**
* Инициализация пароля
*/
@ -714,10 +727,11 @@ class Account extends Document implements IdentityInterface, PartnerInterface
// Генерация пароля
$this->pswd = self::passwordGenerate();
// Сохранение и возврат
return $this->update() > 1;
// Возврат
return true;
}
// Возврат (подразумевается неудача)
return false;
}
@ -825,6 +839,7 @@ class Account extends Document implements IdentityInterface, PartnerInterface
// Настройка
$account->agnt = true;
$account->name = $name;
$account->boss = $name;
$account->simc = $phone;
$account->mail = $mail;
$account->type = 'requested';
@ -832,16 +847,16 @@ class Account extends Document implements IdentityInterface, PartnerInterface
// Генерация пароля
$account->passwordInit();
// Инициализация индекса
Account::generateIndexes([$account]);
if ($account->save()) {
// Удалось сохранить аккаунт
if (!file_exists($dir = YII_PATH_PUBLIC . '/../assets/accounts/' . $account->_key . '/documents')) {
// Инициализация индекса
Account::generateIndexes([$account]);
if (!file_exists($path = YII_PATH_PUBLIC . "/../assets/accounts/$account->_key/files")) {
// Директория для хранения документов не найдена
if (!mkdir($dir, 0775, true)) {
if (!mkdir($path, 0775, true)) {
// Не удалось записать директорию
return false;
@ -849,15 +864,22 @@ class Account extends Document implements IdentityInterface, PartnerInterface
}
// Перенос файла из временной директории
copy($file->tempName, $file2 = $dir . '/' . $file->name);
copy($file->tempName, $path .= "/$file->name");
// Запись в журнал
$account->journal('request to become a supplier', [
'name' => $name,
'phone' => $phone,
'mail' => $mail,
'file' => $file2
'file' => [
'path' => $path,
'uri' => "/$account->_key/files/$file->name"
]
]);
// Отправка уведомлений
Notification::_write(yii::$app->controller->renderPartial('/notification/system/suppliers/request', ['_key' => $account->_key]), html: true, account: '@authorized');
return $account;
}
@ -871,7 +893,7 @@ class Account extends Document implements IdentityInterface, PartnerInterface
*/
public static function searchSuppliersRequests(): array
{
return self::find()->where(['agnt' => true, 'type' => 'requested'])->all();
return self::find()->where(['agnt' => true, 'type' => 'requested'])->orderBy(['DESC'])->all();
}
/**

View File

@ -156,7 +156,7 @@ class Notification extends Document
{
// Инициализация
$model = new self;
$account or $account = yii::$app->user->identity->_key ?? throw new Exception('Не удалось инициализировать получателя');
$account ?? $account = yii::$app->user->identity->_key ?? throw new Exception('Не удалось инициализировать получателя');
if ((bool) (int) $html) {
// Получен текст в формете HTML-кода
@ -186,16 +186,16 @@ class Notification extends Document
* Поиск получателя
*
* @param self $model Уведомление
* @param string $text Необработанный текст
* @param string $targets Необработанный текст с получателями
* @param string $type Тип уведомления
*/
protected static function searchReceiverAndConnect(self $model, string $text, string $type = self::TYPE_NOTICE): AccountEdgeNotification|array|null
protected static function searchReceiverAndConnect(self $model, string $targets, string $type = self::TYPE_NOTICE): AccountEdgeNotification|array|null
{
// Инициализация
$return = [];
// Конвертация
$accounts = array_map('trim', explode(self::$delimiter, $text));
$accounts = array_map('trim', explode(self::$delimiter, $targets));
foreach ($accounts as $account) {
if (in_array('@all', $accounts, true)) {
@ -218,7 +218,7 @@ class Notification extends Document
|| in_array('@auth', $accounts, true)
|| in_array('@autheds', $accounts, true)
) {
// Всем авторизованным
// Всем авторизованным (админам и модераторам)
// Инициализация
$return = [];

View File

@ -327,46 +327,23 @@ class Product extends Document
// Инициализация
$data = [];
$amount = 0;
if (is_null($account)) {
// Данные аккаунта не переданы
if (yii::$app->user->isGuest) {
// Аккаунт не аутентифицирован
return false;
} else {
// Аккаунт аутентифицирован
// Инициализация
$account = yii::$app->user->identity;
}
} else {
if (is_int($account)) {
// Передан идентификатор (_key) аккаунта (подразумевается)
// Инициализация (поиск в базе данных)
if (!$account = Account::searchById(Account::collectionName() . "/$account")) {
// Не удалось инициализировать аккаунт
return false;
}
}
}
$account = Account::initAccount($account);
if ($this->validate()) {
foreach ($this->file_excel as $file) {
// Перебор файлов
// Инициализация
$dir = YII_PATH_PUBLIC . '../assets/import/' . (new DateTime('now', new DateTimeZone($account->zone ?? Settings::search()['timezone_default'] ?? 'UTC+3'))) . '/excel/' . (yii::$app->user->identity->_key ?? 'system') . '/' . time() . '/';
preg_match_all('/UTC([\+\-0-9:]*)/', $account->zone ?? Settings::search()['timezone_default'] ?? 'UTC+3', $timezone);
$timezone = $timezone[1][0];
$path = YII_PATH_PUBLIC . "/../assets/accounts/$account->_key/files/" . (new DateTime('now', new DateTimeZone($timezone)))->getTimestamp();
// Сохранение на диск
if (!file_exists($dir)) {
mkdir($dir, 0775, true);
}
$file->saveAs($path = $dir . $file->baseName . '.' . $file->extension);
if (!file_exists($path))
if (!mkdir($path, 0775, true))
throw new Exception('Не удалось создать директорию', 500);
$file->saveAs($path = $path . "/$file->baseName.$file->extension");
$data[] = Excel::import($path, [
'setFirstRecordAsKeys' => true,
@ -407,17 +384,18 @@ class Product extends Document
// (new $group())->writeMember($product, $this->group);
} else {
// Проверка не пройдена
foreach ($product->errors as $attribute => $error) {
$this->addError($attribute, $error);
}
// Добавление ошибок
foreach ($product->errors as $attribute => $error) $this->addError($attribute, $error);
}
}
}
}
// Деинициализация
$this->file_excel = '';
$this->file_excel = null;
// Макрос действий после импорта
static::afterImportExcel($amount);
return true;

View File

@ -0,0 +1,17 @@
<div style="padding: 0 14%;">
<div style="background: #fff;">
<a title="SkillParts" href="https://skillparts.ru">
<img style="width: 150px;" src="https://skillparts.ru/img/logos/skillparts.png" alt="SkillParts">
</a>
</div>
<div style="background: #f0eefb; padding: 40px; margin: 30px 0;">
<h3 style="text-align: center; margin-bottom: 30px;"><b>Отказано в регистрации</b></h3>
<p style="margin: 0 40px; margin-bottom: 8px;"><b>Причина: </b><?= $reason ?? 'Ошибка' ?></p>
<a style="display: block; text-align: center;" href="https://skillparts.loc/suppliers/request">Повторная заявка</a>
</div>
<div style="background: #fff;">
<small>Вы получили это сообщение потому, что на ваш почтовый адрес была совершена регистрация</small>
</br>
<small>Если это были не вы, проверьте безопасность ваших аккаунтов и свяжитесь с администрацией</small>
</div>
</div>

View File

@ -12,6 +12,7 @@
</div>
<div style="background: #fff;">
<small>Вы получили это сообщение потому, что на ваш почтовый адрес была совершена регистрация</small>
</br>
<small>Если это были не вы, проверьте безопасность ваших аккаунтов и свяжитесь с администрацией</small>
</div>
</div>

View File

@ -23,7 +23,10 @@ foreach ($notification->jrnl as $jrnl) {
}
$title = <<<HTML
<b class="row mb-1 px-3"><small>$type<span class="ml-auto">$date</span></small></b>
<small class="mb-1 w-100 d-flex">
<b class="mr-auto">$type</b>
<b class="ml-auto">$date</b>
</small>
HTML;
echo <<<HTML

View File

@ -0,0 +1 @@
<a class="text-dark" href="/profile/panel#<?= $_key ?>">Заявка на регистрацию поставщика: <?= $_key ?></a>

View File

@ -107,7 +107,8 @@ main {
transition: 0s;
}
.button_blue_simple:active {
.button_blue_simple:active,
.button_blue_simple:focus {
color: #ddd;
background-color: #391e97;
transition: 0s;
@ -125,7 +126,8 @@ main {
transition: 0s;
}
.button_blue:active {
.button_blue:active,
.button_blue:focus {
color: #ddd;
background-color: #391e97;
transition: 0s;
@ -143,7 +145,8 @@ main {
transition: 0s;
}
.button_red:active {
.button_red:active,
.button_red:focus {
color: #ddd;
background-color: #971e1e;
transition: 0s;
@ -161,7 +164,8 @@ main {
transition: 0s;
}
.button_red_softer:active {
.button_red_softer:active,
.button_red_softer:focus {
color: #ddd;
background-color: #b82d2d;
transition: 0s;
@ -176,12 +180,14 @@ main {
transition: 0s;
}
.button_white:active {
.button_white:active,
.button_white:focus {
background-color: #cfd3dd;
transition: 0s;
}
.button_white_hover {
/* Что я натворил? */
background-color: #eaebee !important;
transition: 0s;
}
@ -195,7 +201,8 @@ main {
transition: 0s;
}
.button_grey:active {
.button_grey:active,
.button_grey:focus {
background-color: #8c94a8;
transition: 0s;
}

View File

@ -137,7 +137,7 @@ function page_profile_panel_input_suppliers_requests_generate(suppliers) {
// Инициализация контейнера
let container = document.createElement('div');
container.setAttribute('id', 'profile_panel_input_suppliers_requests_block_' + account._key);
container.setAttribute('id', account._key);
container.setAttribute('class', i < suppliers.length ? 'mb-3 px-3 py-1 row panel_supplier_request' : 'px-3 py-1 row panel_supplier_request');
// Инициализация первой строки
@ -146,7 +146,7 @@ function page_profile_panel_input_suppliers_requests_generate(suppliers) {
// Инициализация колонки с метаданными аккаунта
let block_metadata = document.createElement('div');
block_metadata.setAttribute('id', 'profile_panel_input_suppliers_requests_block_metadata_' + account._key);
block_metadata.setAttribute('id', 'metadata_' + account._key);
block_metadata.setAttribute('class', 'col-4 pr-0 d-flex flex-column');
// Инициализация оболочки идентификатора аккаунта
@ -200,6 +200,7 @@ function page_profile_panel_input_suppliers_requests_generate(suppliers) {
button_accept.setAttribute('class', 'mb-2 btn form-control button_blue');
button_accept.setAttribute('type', 'button');
button_accept.setAttribute('role', 'button');
button_accept.setAttribute('onclick', 'return profile_panel_input_suppliers_requests_block_accept(' + account._key + ');');
button_accept.innerText = 'Подтвердить';
// Инициализация кнопки отклонения
@ -207,11 +208,12 @@ function page_profile_panel_input_suppliers_requests_generate(suppliers) {
button_decline.setAttribute('class', 'btn form-control button_red_softer');
button_decline.setAttribute('type', 'button');
button_decline.setAttribute('role', 'button');
button_decline.setAttribute('onclick', 'return profile_panel_input_suppliers_requests_block_decline(' + account._key + ');');
button_decline.innerText = 'Отклонить';
// Инициализация колонки с основными данными аккаунта
let block_info = document.createElement('div');
block_info.setAttribute('id', 'profile_panel_input_suppliers_requests_block_info_' + account._key);
block_info.setAttribute('id', '' + account._key);
block_info.setAttribute('class', 'col-4 pl-0 d-flex flex-column');
// Инициализация ярлыка "NAME"
@ -221,7 +223,7 @@ function page_profile_panel_input_suppliers_requests_generate(suppliers) {
// Инициализация поля "NAME"
let input_name = document.createElement('input');
input_name.setAttribute('id', 'profile_panel_input_suppliers_requests_block_info_name_' + account._key);
input_name.setAttribute('id', 'name_' + account._key);
input_name.setAttribute('class', 'form-control button_clean mb-3');
input_name.setAttribute('type', 'text');
input_name.setAttribute('placeholder', 'Иванов Иван Иванович');
@ -235,7 +237,7 @@ function page_profile_panel_input_suppliers_requests_generate(suppliers) {
// Инициализация поля "BOSS"
let input_boss = document.createElement('input');
input_boss.setAttribute('id', 'profile_panel_input_suppliers_requests_block_info_boss_' + account._key);
input_boss.setAttribute('id', 'boss_' + account._key);
input_boss.setAttribute('class', 'form-control button_clean mb-3');
input_boss.setAttribute('type', 'text');
input_boss.setAttribute('placeholder', 'Иванов Иван Иванович');
@ -249,7 +251,7 @@ function page_profile_panel_input_suppliers_requests_generate(suppliers) {
// Инициализация поля "SIMC" (телефон)
let input_simc = document.createElement('input');
input_simc.setAttribute('id', 'profile_panel_input_suppliers_requests_block_info_simc_' + account._key);
input_simc.setAttribute('id', 'simc_' + account._key);
input_simc.setAttribute('class', 'form-control button_clean mb-3');
input_simc.setAttribute('type', 'number');
input_simc.setAttribute('onchange', 'return profile_panel_input_suppliers_requests_block_edit(' + account._key + ', "simc", this.value);');
@ -262,7 +264,7 @@ function page_profile_panel_input_suppliers_requests_generate(suppliers) {
// Инициализация поля "MAIL"
let input_mail = document.createElement('input');
input_mail.setAttribute('id', 'profile_panel_input_suppliers_requests_block_info_mail_' + account._key);
input_mail.setAttribute('id', 'mail_' + account._key);
input_mail.setAttribute('class', 'form-control button_clean mb-3');
input_mail.setAttribute('type', 'mail');
input_mail.setAttribute('onchange', 'return profile_panel_input_suppliers_requests_block_edit(' + account._key + ', "mail", this.value);');
@ -270,7 +272,7 @@ function page_profile_panel_input_suppliers_requests_generate(suppliers) {
// Инициализация колонки с вторичными данными аккаунта
let block_details = document.createElement('div');
block_details.setAttribute('id', 'profile_panel_input_suppliers_requests_block_details_' + account._key);
block_details.setAttribute('id', 'details_' + account._key);
block_details.setAttribute('class', 'col-4 d-flex flex-column');
// Инициализация ярлыка "INDX"
@ -284,7 +286,7 @@ function page_profile_panel_input_suppliers_requests_generate(suppliers) {
// Инициализация поля "INDX"
let input_indx = document.createElement('input');
input_indx.setAttribute('id', 'profile_panel_input_suppliers_requests_block_info_indx_' + account._key);
input_indx.setAttribute('id', 'indx_' + account._key);
input_indx.setAttribute('class', 'col form-control button_clean');
input_indx.setAttribute('type', 'text');
input_indx.setAttribute('onchange', 'return profile_panel_input_suppliers_requests_block_edit(' + account._key + ', "indx", this.value);');
@ -295,7 +297,7 @@ function page_profile_panel_input_suppliers_requests_generate(suppliers) {
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"></i>';
button_indx.innerHTML = '<i class="fas fa-redo-alt" onclick="return profile_panel_input_suppliers_requests_block_regen(' + account._key + ', \'indx\');"></i>';
// // Инициализация ярлыка "PSWD"
// let label_pswd = document.createElement('label');
@ -308,7 +310,7 @@ function page_profile_panel_input_suppliers_requests_generate(suppliers) {
// // Инициализация поля "PSWD"
// let input_pswd = document.createElement('input');
// input_pswd.setAttribute('id', 'profile_panel_input_suppliers_requests_block_info_pswd_' + account._key);
// input_pswd.setAttribute('id', 'pswd_' + account._key);
// input_pswd.setAttribute('class', 'col form-control button_clean');
// input_pswd.setAttribute('type', 'text');
// input_pswd.setAttribute('onchange', 'return profile_panel_input_suppliers_requests_block_edit(' + account._key + ', "pswd", this.value);');
@ -329,7 +331,7 @@ function page_profile_panel_input_suppliers_requests_generate(suppliers) {
// Инициализация ссылки на "FILE"
let button_file = document.createElement('a');
button_file.setAttribute('class', 'btn form-control button_blue');
button_file.setAttribute('href', '/' + account._key + '/requests/supplier/' + account.date.supl + '/document');
button_file.setAttribute('href', account.data.file.uri);
button_file.innerHTML = 'Скачать';
// Инициализация ярлыка "TAXN"
@ -339,7 +341,7 @@ function page_profile_panel_input_suppliers_requests_generate(suppliers) {
// Инициализация поля "TAXN"
let input_taxn = document.createElement('input');
input_taxn.setAttribute('id', 'profile_panel_input_suppliers_requests_block_info_taxn_' + account._key);
input_taxn.setAttribute('id', 'taxn_' + account._key);
input_taxn.setAttribute('class', 'form-control button_clean mb-3');
input_taxn.setAttribute('type', 'text');
input_taxn.setAttribute('onchange', 'return profile_panel_input_suppliers_requests_block_edit(' + account._key + ', "taxn", this.value);');
@ -352,7 +354,7 @@ function page_profile_panel_input_suppliers_requests_generate(suppliers) {
// Инициализация поля "CNTG"
let input_cntg = document.createElement('input');
input_cntg.setAttribute('id', 'profile_panel_input_suppliers_requests_block_info_cntg_' + account._key);
input_cntg.setAttribute('id', 'cntg_' + account._key);
input_cntg.setAttribute('class', 'form-control button_clean mb-3');
input_cntg.setAttribute('type', 'text');
input_cntg.setAttribute('onchange', 'return profile_panel_input_suppliers_requests_block_edit(' + account._key + ', "cntg", this.value);');
@ -365,7 +367,7 @@ function page_profile_panel_input_suppliers_requests_generate(suppliers) {
// Инициализация поля "FADD"
let input_fadd = document.createElement('input');
input_fadd.setAttribute('id', 'profile_panel_input_suppliers_requests_block_info_fadd_' + account._key);
input_fadd.setAttribute('id', 'fadd_' + account._key);
input_fadd.setAttribute('class', 'form-control button_clean mb-3');
input_fadd.setAttribute('type', 'text');
input_fadd.setAttribute('onchange', 'return profile_panel_input_suppliers_requests_block_edit(' + account._key + ', "fadd", this.value);');
@ -378,7 +380,7 @@ function page_profile_panel_input_suppliers_requests_generate(suppliers) {
// Инициализация поля "LADD"
let input_ladd = document.createElement('input');
input_ladd.setAttribute('id', 'profile_panel_input_suppliers_requests_block_info_ladd_' + account._key);
input_ladd.setAttribute('id', 'ladd_' + account._key);
input_ladd.setAttribute('class', 'form-control button_clean mb-3');
input_ladd.setAttribute('type', 'text');
input_ladd.setAttribute('onchange', 'return profile_panel_input_suppliers_requests_block_edit(' + account._key + ', "ladd", this.value);');
@ -391,7 +393,7 @@ function page_profile_panel_input_suppliers_requests_generate(suppliers) {
// Инициализация поля "CHCK"
let input_chck = document.createElement('input');
input_chck.setAttribute('id', 'profile_panel_input_suppliers_requests_block_info_chck_' + account._key);
input_chck.setAttribute('id', 'chck_' + account._key);
input_chck.setAttribute('class', 'form-control button_clean mb-3');
input_chck.setAttribute('type', 'text');
input_chck.setAttribute('onchange', 'return profile_panel_input_suppliers_requests_block_edit(' + account._key + ', "chck", this.value);');
@ -404,7 +406,7 @@ function page_profile_panel_input_suppliers_requests_generate(suppliers) {
// Инициализация поля "COMP"
let input_comp = document.createElement('input');
input_comp.setAttribute('id', 'profile_panel_input_suppliers_requests_block_info_comp_' + account._key);
input_comp.setAttribute('id', 'comp_' + account._key);
input_comp.setAttribute('class', 'form-control button_clean mb-3');
input_comp.setAttribute('type', 'text');
input_comp.setAttribute('onchange', 'return profile_panel_input_suppliers_requests_block_edit(' + account._key + ', "comp", this.value);');
@ -417,7 +419,7 @@ function page_profile_panel_input_suppliers_requests_generate(suppliers) {
// Инициализация поля "CNTC"
let input_cntc = document.createElement('textarea');
input_cntc.setAttribute('id', 'profile_panel_input_suppliers_requests_block_info_cntc_' + account._key);
input_cntc.setAttribute('id', 'cntc_' + account._key);
input_cntc.setAttribute('class', 'form-control button_clean profile_panel_input_suppliers_requests_block_textarea');
input_cntc.setAttribute('type', 'text');
input_cntc.setAttribute('onchange', 'return profile_panel_input_suppliers_requests_block_edit(' + account._key + ', "cntc", this.value);');
@ -430,7 +432,7 @@ function page_profile_panel_input_suppliers_requests_generate(suppliers) {
// Инициализация поля "DESC"
let textarea_desc = document.createElement('textarea');
textarea_desc.setAttribute('id', 'profile_panel_input_suppliers_requests_block_info_desc_' + account._key);
textarea_desc.setAttribute('id', 'desc_' + account._key);
textarea_desc.setAttribute('class', 'form-control button_clean mb-3 profile_panel_input_suppliers_requests_block_textarea');
textarea_desc.setAttribute('type', 'text');
textarea_desc.setAttribute('onchange', 'return profile_panel_input_suppliers_requests_block_edit(' + account._key + ', "desc", this.value);');
@ -551,9 +553,18 @@ function page_profile_panel_input_suppliers_requests_generate(suppliers) {
return html;
}
/**
* Редактирование параметра
*
* @param {*} _key
* @param {*} target
* @param {*} value
*
* @returns
*/
function profile_panel_input_suppliers_requests_block_edit(_key, target, value) {
$.ajax({
url: `/account/${_key}/${target}/edit`,
url: `/${_key}/${target}/edit`,
type: 'post',
dataType: 'json',
data: {
@ -566,3 +577,89 @@ function profile_panel_input_suppliers_requests_block_edit(_key, target, value)
return false;
}
/**
* Регенерация параметра
*
* @param {*} _key
* @param {*} target
* @returns
*/
function profile_panel_input_suppliers_requests_block_regen(_key, target) {
$.ajax({
url: `/${_key}/${target}/regenerate`,
type: 'post',
dataType: 'json',
data: {
'_csrf': yii.getCsrfToken()
},
success: (data, status, xhr) => {
// Реинициализация списка
page_profile_panel_input_suppliers_requests_init();
return page_profile_response_success(data, status, xhr);
},
error: page_profile_response_error
});
return false;
}
/**
* Подтверждение регистрации
*
* @param {*} _key
* @param {*} target
* @returns
*/
function profile_panel_input_suppliers_requests_block_accept(_key) {
$.ajax({
url: `/${_key}/accept`,
type: 'post',
dataType: 'json',
data: {
'_csrf': yii.getCsrfToken()
},
success: (data, status, xhr) => {
// Реинициализация списка
page_profile_panel_input_suppliers_requests_init();
return page_profile_response_success(data, status, xhr);
},
error: page_profile_response_error
});
return false;
}
/**
* Отклонение регистрации
*
* @param {*} _key
* @param {*} target
* @returns
*/
function profile_panel_input_suppliers_requests_block_decline(_key, reason) {
if (reason === undefined) {
reason = prompt('Причина отказа', 'Недостаточно данных');
}
$.ajax({
url: `/${_key}/decline`,
type: 'post',
dataType: 'json',
data: {
'_csrf': yii.getCsrfToken(),
reason
},
success: (data, status, xhr) => {
// Реинициализация списка
page_profile_panel_input_suppliers_requests_init();
return page_profile_response_success(data, status, xhr);
},
error: page_profile_response_error
});
return false;
}