diff --git a/mirzaev/skillparts/system/controllers/AccountController.php b/mirzaev/skillparts/system/controllers/AccountController.php new file mode 100644 index 0000000..a6155a4 --- /dev/null +++ b/mirzaev/skillparts/system/controllers/AccountController.php @@ -0,0 +1,102 @@ + [ + 'class' => AccessControl::class, + 'rules' => [ + [ + 'allow' => true, + 'roles' => ['@'], + 'actions' => [ + 'index', + 'edit', + ] + ], + [ + 'allow' => false, + 'roles' => ['?'], + 'denyCallback' => [$this, 'accessDenied'] + ] + ] + ] + ]; + } + + public function accessDenied() + { + // Инициализация + $cookies = yii::$app->response->cookies; + + // Запись cookie с редиректом, который выполнится после авторизации + $cookies->add(new Cookie([ + 'name' => 'redirect', + 'value' => yii::$app->request->pathInfo + ])); + + if (Yii::$app->request->isPost) { + // POST-запрос + + // Настройка + Yii::$app->response->format = Response::FORMAT_JSON; + + // Генерация ответа + Yii::$app->response->content = json_encode([ + 'main' => $this->renderPartial('/account/index'), + 'redirect' => yii::$app->request->pathInfo, + '_csrf' => Yii::$app->request->getCsrfToken() + ]); + } else if (Yii::$app->request->isGet) { + // GET-запрос + + $this->redirect('/authentication'); + } + } + + public function actionIndex() + { + return $this->renderPartial('/accounts/index'); + } + + public function actionEdit(int $_key, string $target) + { + if (yii::$app->user->isGuest) { + // Аккаунт не аутентифицирован + } else { + if (yii::$app->request->isPost) { + // AJAX-POST-запрос + + if ($account = Account::searchById(Account::collectionName() . '/' . $_key)) { + // Аккаунт найден + + // Запись параметра + $account->{$target} = yii::$app->request->post('value') ?? yii::$app->request->get('value') ?? 'Неизвестно'; + + // Настройка формата ответа + yii::$app->response->format = Response::FORMAT_JSON; + + return $account->update() > 0; + } + } + } + + // Запись кода ответа + yii::$app->response->statusCode = 500; + + return false; + } +} diff --git a/mirzaev/skillparts/system/controllers/ProfileController.php b/mirzaev/skillparts/system/controllers/ProfileController.php index 3bdacab..59ef208 100644 --- a/mirzaev/skillparts/system/controllers/ProfileController.php +++ b/mirzaev/skillparts/system/controllers/ProfileController.php @@ -10,7 +10,6 @@ use yii\web\Controller; use yii\web\Response; use yii\web\Cookie; use yii\web\UploadedFile; -use yii\web\User; use app\models\Account; use app\models\Supply; @@ -21,9 +20,9 @@ use app\models\Settings; use app\models\Dellin; use app\models\SettingsEdgeSettings; use app\models\Terminal; + use Dadata\DadataClient as Dadata; -use Exception; -use moonland\phpexcel\Excel; + use Throwable; class ProfileController extends Controller @@ -798,12 +797,14 @@ class ProfileController extends Controller // Перебор журнала if ($jrnl['action'] === 'create') { - // Заявка найдена + // Запись о создании найдена // Запись даты регистрации $registration_date = $jrnl['date']; - } else if ($jrnl['action'] === 'request to become a supplier') { - // Заявка найдена + } + + if ($jrnl['action'] === 'request to become a supplier') { + // Запись о подаче заявку на становление поставщиком найдена // Запись даты отправки заявки $supplier_date = $jrnl['date']; @@ -816,26 +817,43 @@ class ProfileController extends Controller if (empty($supplier_data) || empty($supplier_date) || empty($registration_date)) { // Данные из журнала не найдены - // Запись кода ответа - yii::$app->response->statusCode = 500; - - return; + // Пропуск + continue; } - // Инициализация индекса - Account::generateIndexes([$account]); + // if (!isset($account->indx) || empty($account->indx)) { + if (empty($account->indx)) { + // Индекс не инициализирован - // Инициализация пароля - $account->passwordInit(); + // Инициализация индекса + Account::generateIndexes([$account]); + } + + // if (!isset($account->pswd) || empty($account->pswd)) { + if (empty($account->pswd)) { + // Пароль не инициализирован + + // Инициализация пароля + $account->passwordInit(); + } // Запись в буфер ответа $response[] = [ '_key' => $account->_key, 'name' => $account->name, 'mail' => $account->mail, + 'boss' => $account->boss, + 'desc' => $account->desc, 'simc' => $account->simc, + 'simc' => $account->simc, + 'comp' => $account->comp, + 'cntc' => $account->cntc, + 'taxn' => $account->taxn, + 'cntg' => $account->cntg, + 'fadd' => $account->fadd, + 'ladd' => $account->ladd, + 'chck' => $account->chck, 'indx' => $account->indx, - 'pswd' => $account->pswd, 'vrfy' => Account::validateVrfy($account->vrfy), 'data' => $supplier_data, 'date' => [ diff --git a/mirzaev/skillparts/system/models/Account.php b/mirzaev/skillparts/system/models/Account.php index 8e43ba1..2fb68bd 100644 --- a/mirzaev/skillparts/system/models/Account.php +++ b/mirzaev/skillparts/system/models/Account.php @@ -38,22 +38,29 @@ class Account extends Document implements IdentityInterface, PartnerInterface return array_merge( parent::attributes(), [ - 'auth', + 'name', 'mail', + 'desc', 'indx', 'pswd', - 'name', 'simc', - 'city', + 'boss', + 'sity', 'zone', 'comp', + 'cntc', 'taxn', + 'cntg', + 'fadd', + 'ladd', + 'chck', 'onec', 'opts', 'agnt', 'type', 'vrfy', 'geol', + 'auth', 'acpt' ] ); @@ -67,22 +74,29 @@ class Account extends Document implements IdentityInterface, PartnerInterface return array_merge( parent::attributeLabels(), [ - 'auth' => 'Аутентификационный хеш', + 'name' => 'Контактное лицо', 'mail' => 'Почта', + 'desc' => 'Описание', 'indx' => 'Псевдоанонимный идентификатор', 'pswd' => 'Пароль', - 'name' => 'Имя', 'simc' => 'Номер', + 'boss' => 'Директор', 'sity' => 'Город', 'zone' => 'Часовой пояс', 'comp' => 'Компания', + 'cntc' => 'Контакты', 'taxn' => 'ИНН', + 'cntg' => 'КПП', + 'fadd' => 'Фактический адрес', + 'ladd' => 'Юридический адрес', + 'chck' => 'Расчетный счет', 'onec' => 'Данные 1C', 'opts' => 'Параметры', 'agnt' => 'Агент (поставщик)', 'type' => 'Тип аккаунта', 'vrfy' => 'Статус подтверждения владением почты', 'geol' => 'Геолокация', + 'auth' => 'Аутентификационный хеш', 'acpt' => 'Согласие с офертой' ] ); diff --git a/mirzaev/skillparts/system/web/js/profile_panel.js b/mirzaev/skillparts/system/web/js/profile_panel.js index e965137..30b31fc 100644 --- a/mirzaev/skillparts/system/web/js/profile_panel.js +++ b/mirzaev/skillparts/system/web/js/profile_panel.js @@ -65,7 +65,6 @@ function page_profile_panel_input_suppliers_requests_init() { }; function page_profile_panel_suppliers_choose(button) { - if (button === 'profile_panel_input_suppliers') { document.getElementById('profile_panel_input_notifications').addAttribute('onclick', 'return page_profile_panel_input_suppliers_notifications_init();'); document.getElementById('profile_panel_input_settings').addAttribute('onclick', 'return page_profile_panel_input_suppliers_settings_init();'); @@ -226,7 +225,7 @@ function page_profile_panel_input_suppliers_requests_generate(suppliers) { input_name.setAttribute('class', 'form-control button_clean mb-3'); input_name.setAttribute('type', 'text'); input_name.setAttribute('placeholder', 'Иванов Иван Иванович'); - input_name.setAttribute('onchange', 'return profile_panel_input_suppliers_requests_block_name_edit(' + account._key + ', this);'); + input_name.setAttribute('onchange', 'return profile_panel_input_suppliers_requests_block_edit(' + account._key + ', "name", this.value);'); input_name.value = account.name ?? ''; // Инициализация ярлыка "BOSS" @@ -240,7 +239,7 @@ function page_profile_panel_input_suppliers_requests_generate(suppliers) { input_boss.setAttribute('class', 'form-control button_clean mb-3'); input_boss.setAttribute('type', 'text'); input_boss.setAttribute('placeholder', 'Иванов Иван Иванович'); - input_boss.setAttribute('onchange', 'return profile_panel_input_suppliers_requests_block_boss_edit(' + account._key + ', this);'); + input_boss.setAttribute('onchange', 'return profile_panel_input_suppliers_requests_block_edit(' + account._key + ', "boss", this.value);'); input_boss.value = account.boss ?? ''; // Инициализация ярлыка "SIMC" (телефон) @@ -253,7 +252,7 @@ function page_profile_panel_input_suppliers_requests_generate(suppliers) { input_simc.setAttribute('id', 'profile_panel_input_suppliers_requests_block_info_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_simc_edit(' + account._key + ', this);'); + input_simc.setAttribute('onchange', 'return profile_panel_input_suppliers_requests_block_edit(' + account._key + ', "simc", this.value);'); input_simc.value = account.simc ?? ''; // Инициализация ярлыка "MAIL" @@ -266,7 +265,7 @@ function page_profile_panel_input_suppliers_requests_generate(suppliers) { input_mail.setAttribute('id', 'profile_panel_input_suppliers_requests_block_info_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_mail_edit(' + account._key + ', this);'); + input_mail.setAttribute('onchange', 'return profile_panel_input_suppliers_requests_block_edit(' + account._key + ', "mail", this.value);'); input_mail.value = account.mail ?? ''; // Инициализация колонки с вторичными данными аккаунта @@ -288,7 +287,7 @@ function page_profile_panel_input_suppliers_requests_generate(suppliers) { input_indx.setAttribute('id', 'profile_panel_input_suppliers_requests_block_info_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_indx_edit(' + account._key + ', this);'); + input_indx.setAttribute('onchange', 'return profile_panel_input_suppliers_requests_block_edit(' + account._key + ', "indx", this.value);'); input_indx.value = account.indx ?? ''; // Инициализация кнопки "INDX" @@ -298,29 +297,29 @@ function page_profile_panel_input_suppliers_requests_generate(suppliers) { button_indx.setAttribute('role', 'button'); button_indx.innerHTML = ''; - // Инициализация ярлыка "PSWD" - let label_pswd = document.createElement('label'); - label_pswd.setAttribute('class', 'control-label'); - label_pswd.innerText = 'Пароль'; + // // Инициализация ярлыка "PSWD" + // let label_pswd = document.createElement('label'); + // label_pswd.setAttribute('class', 'control-label'); + // label_pswd.innerText = 'Пароль'; - // Инициализация оболочки "PSWD" - let wrap_pswd = document.createElement('div'); - wrap_pswd.setAttribute('class', 'row mx-0 mb-3'); + // // Инициализация оболочки "PSWD" + // let wrap_pswd = document.createElement('div'); + // wrap_pswd.setAttribute('class', 'row mx-0 mb-3'); - // Инициализация поля "PSWD" - let input_pswd = document.createElement('input'); - input_pswd.setAttribute('id', 'profile_panel_input_suppliers_requests_block_info_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_pswd_edit(' + account._key + ', this);'); - input_pswd.value = account.pswd ?? ''; + // // Инициализация поля "PSWD" + // let input_pswd = document.createElement('input'); + // input_pswd.setAttribute('id', 'profile_panel_input_suppliers_requests_block_info_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);'); + // input_pswd.value = account.pswd ?? ''; - // Инициализация кнопки "PSWD" - let button_pswd = document.createElement('a'); - button_pswd.setAttribute('class', 'ml-2 my-auto text-dark'); - button_pswd.setAttribute('type', 'button'); - button_pswd.setAttribute('role', 'button'); - button_pswd.innerHTML = ''; + // // Инициализация кнопки "PSWD" + // let button_pswd = document.createElement('a'); + // button_pswd.setAttribute('class', 'ml-2 my-auto text-dark'); + // button_pswd.setAttribute('type', 'button'); + // button_pswd.setAttribute('role', 'button'); + // button_pswd.innerHTML = ''; // Инициализация ярлыка "FILE" let label_file = document.createElement('label'); @@ -343,7 +342,7 @@ function page_profile_panel_input_suppliers_requests_generate(suppliers) { input_taxn.setAttribute('id', 'profile_panel_input_suppliers_requests_block_info_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_taxn_edit(' + account._key + ', this);'); + input_taxn.setAttribute('onchange', 'return profile_panel_input_suppliers_requests_block_edit(' + account._key + ', "taxn", this.value);'); input_taxn.value = account.taxn ?? ''; // Инициализация ярлыка "CNTG" @@ -356,7 +355,7 @@ function page_profile_panel_input_suppliers_requests_generate(suppliers) { input_cntg.setAttribute('id', 'profile_panel_input_suppliers_requests_block_info_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_cntg_edit(' + account._key + ', this);'); + input_cntg.setAttribute('onchange', 'return profile_panel_input_suppliers_requests_block_edit(' + account._key + ', "cntg", this.value);'); input_cntg.value = account.cntg ?? ''; // Инициализация ярлыка "FADD" @@ -369,7 +368,7 @@ function page_profile_panel_input_suppliers_requests_generate(suppliers) { input_fadd.setAttribute('id', 'profile_panel_input_suppliers_requests_block_info_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_fadd_edit(' + account._key + ', this);'); + input_fadd.setAttribute('onchange', 'return profile_panel_input_suppliers_requests_block_edit(' + account._key + ', "fadd", this.value);'); input_fadd.value = account.fadd ?? ''; // Инициализация ярлыка "LADD" @@ -382,34 +381,34 @@ function page_profile_panel_input_suppliers_requests_generate(suppliers) { input_ladd.setAttribute('id', 'profile_panel_input_suppliers_requests_block_info_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_ladd_edit(' + account._key + ', this);'); + input_ladd.setAttribute('onchange', 'return profile_panel_input_suppliers_requests_block_edit(' + account._key + ', "ladd", this.value);'); input_ladd.value = account.ladd ?? ''; // Инициализация ярлыка "CHCK" let label_chck = document.createElement('label'); label_chck.setAttribute('class', 'control-label'); - label_chck.innerText = 'Расчетный адрес'; + label_chck.innerText = 'Расчетный счет'; // Инициализация поля "CHCK" let input_chck = document.createElement('input'); input_chck.setAttribute('id', 'profile_panel_input_suppliers_requests_block_info_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_chck_edit(' + account._key + ', this);'); + input_chck.setAttribute('onchange', 'return profile_panel_input_suppliers_requests_block_edit(' + account._key + ', "chck", this.value);'); input_chck.value = account.chck ?? ''; - // Инициализация ярлыка "CMPN" - let label_cmpn = document.createElement('label'); - label_cmpn.setAttribute('class', 'control-label'); - label_cmpn.innerText = 'Организация'; + // Инициализация ярлыка "COMP" + let label_comp = document.createElement('label'); + label_comp.setAttribute('class', 'control-label'); + label_comp.innerText = 'Организация'; - // Инициализация поля "CMPN" - let input_cmpn = document.createElement('input'); - input_cmpn.setAttribute('id', 'profile_panel_input_suppliers_requests_block_info_cmpn_' + account._key); - input_cmpn.setAttribute('class', 'form-control button_clean mb-3'); - input_cmpn.setAttribute('type', 'text'); - input_cmpn.setAttribute('onchange', 'return profile_panel_input_suppliers_requests_block_cmpn_edit(' + account._key + ', this);'); - input_cmpn.value = account.cmpn ?? ''; + // Инициализация поля "COMP" + let input_comp = document.createElement('input'); + input_comp.setAttribute('id', 'profile_panel_input_suppliers_requests_block_info_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);'); + input_comp.value = account.comp ?? ''; // Инициализация ярлыка "CNTC" let label_cntc = document.createElement('label'); @@ -421,7 +420,7 @@ function page_profile_panel_input_suppliers_requests_generate(suppliers) { input_cntc.setAttribute('id', 'profile_panel_input_suppliers_requests_block_info_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_cntc_edit(' + account._key + ', this);'); + input_cntc.setAttribute('onchange', 'return profile_panel_input_suppliers_requests_block_edit(' + account._key + ', "cntc", this.value);'); input_cntc.value = account.cntc ?? ''; // Инициализация ярлыка "DESC" @@ -434,7 +433,7 @@ function page_profile_panel_input_suppliers_requests_generate(suppliers) { textarea_desc.setAttribute('id', 'profile_panel_input_suppliers_requests_block_info_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_desc_edit(' + account._key + ', this);'); + textarea_desc.setAttribute('onchange', 'return profile_panel_input_suppliers_requests_block_edit(' + account._key + ', "desc", this.value);'); textarea_desc.value = account.desc ?? ''; // Инициализация разделителя для геолокации @@ -470,10 +469,10 @@ function page_profile_panel_input_suppliers_requests_generate(suppliers) { wrap_indx.appendChild(button_indx); block_info.appendChild(wrap_indx); - block_info.appendChild(label_pswd); - wrap_pswd.appendChild(input_pswd); - wrap_pswd.appendChild(button_pswd); - block_info.appendChild(wrap_pswd); + // block_info.appendChild(label_pswd); + // wrap_pswd.appendChild(input_pswd); + // wrap_pswd.appendChild(button_pswd); + // block_info.appendChild(wrap_pswd); block_info.appendChild(label_desc); block_info.appendChild(textarea_desc); @@ -485,8 +484,8 @@ function page_profile_panel_input_suppliers_requests_generate(suppliers) { block_details.appendChild(label_boss); block_details.appendChild(input_boss); - block_details.appendChild(label_cmpn); - block_details.appendChild(input_cmpn); + block_details.appendChild(label_comp); + block_details.appendChild(input_comp); block_details.appendChild(label_taxn); block_details.appendChild(input_taxn); @@ -551,3 +550,19 @@ function page_profile_panel_input_suppliers_requests_generate(suppliers) { // Возврат return html; } + +function profile_panel_input_suppliers_requests_block_edit(_key, target, value) { + $.ajax({ + url: `/account/${_key}/${target}/edit`, + type: 'post', + dataType: 'json', + data: { + '_csrf': yii.getCsrfToken(), + 'value': value + }, + success: page_profile_response_success, + error: page_profile_response_error + }); + + return false; +}