diff --git a/mirzaev/skillparts/system/controllers/ProfileController.php b/mirzaev/skillparts/system/controllers/ProfileController.php index 0b47908..3bdacab 100644 --- a/mirzaev/skillparts/system/controllers/ProfileController.php +++ b/mirzaev/skillparts/system/controllers/ProfileController.php @@ -58,8 +58,9 @@ class ProfileController extends Controller 'actions' => ['panel', 'panel-notification-write'], 'matchCallback' => function ($rule, $action): bool { if ( - yii::$app->user->identity->type === 'administrator' - || yii::$app->user->identity->type === 'moderator' + !yii::$app->user->isGuest + && (yii::$app->user->identity->type === 'administrator' + || yii::$app->user->identity->type === 'moderator') ) { return true; } diff --git a/mirzaev/skillparts/system/web/css/main.css b/mirzaev/skillparts/system/web/css/main.css index dc00591..145e4df 100644 --- a/mirzaev/skillparts/system/web/css/main.css +++ b/mirzaev/skillparts/system/web/css/main.css @@ -149,6 +149,24 @@ main { transition: 0s; } +.button_red_softer { + color: #eee; + background-color: #ce2c2c; + transition: 0s; +} + +.button_red_softer:hover { + color: #fff; + background-color: #da3636; + transition: 0s; +} + +.button_red_softer:active { + color: #ddd; + background-color: #b82d2d; + transition: 0s; +} + .button_white { background-color: #fff; } diff --git a/mirzaev/skillparts/system/web/css/pages/profile.css b/mirzaev/skillparts/system/web/css/pages/profile.css index 0352996..46550a5 100644 --- a/mirzaev/skillparts/system/web/css/pages/profile.css +++ b/mirzaev/skillparts/system/web/css/pages/profile.css @@ -25,8 +25,11 @@ background-color: #f7f6f9; } -#page_profile [id^=profile_panel_]>.profile_panel_content #profile_panel_input_suppliers_requests .panel_supplier_request { - height: 200px; +#page_profile [id^=profile_panel_]>.profile_panel_content #profile_panel_input_suppliers_requests .panel_supplier_request .profile_panel_input_suppliers_requests_block_textarea { + min-height: 100px; + display: inline-block; + height: 100%; +} } /* #page_profile [id^=profile_panel_]>.profile_panel_content>div>.header_blue~.row:nth-child(2n + 1) { diff --git a/mirzaev/skillparts/system/web/js/profile_panel.js b/mirzaev/skillparts/system/web/js/profile_panel.js index 264478e..e965137 100644 --- a/mirzaev/skillparts/system/web/js/profile_panel.js +++ b/mirzaev/skillparts/system/web/js/profile_panel.js @@ -102,6 +102,9 @@ function page_profile_panel_input_suppliers_requests_init(wrap = 'profile_panel_ if (data.suppliers !== undefined && data.suppliers !== null) { // Найдены данные поставщиков + // Удаление данных в оболочке + wrap.innerHTML = null; + for (let html of page_profile_panel_input_suppliers_requests_generate(data.suppliers)) { // Перебор сгенерированных HTML-элементов @@ -136,12 +139,16 @@ 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('class', i < suppliers.length ? 'mb-3 px-3 py-1 row' : 'px-3 py-1 row'); + container.setAttribute('class', i < suppliers.length ? 'mb-3 px-3 py-1 row panel_supplier_request' : 'px-3 py-1 row panel_supplier_request'); + + // Инициализация первой строки + let row_1 = document.createElement('div'); + row_1.setAttribute('class', 'row px-0'); // Инициализация колонки с метаданными аккаунта let block_metadata = document.createElement('div'); block_metadata.setAttribute('id', 'profile_panel_input_suppliers_requests_block_metadata_' + account._key); - block_metadata.setAttribute('class', 'col-4 pl-0 d-flex flex-column'); + block_metadata.setAttribute('class', 'col-4 pr-0 d-flex flex-column'); // Инициализация оболочки идентификатора аккаунта let wrap_id = document.createElement('p'); @@ -157,9 +164,13 @@ function page_profile_panel_input_suppliers_requests_generate(suppliers) { value_id.setAttribute('class', 'ml-auto'); value_id.innerText = account._key; + // Инициализация разделителя для даты + let metadata_date_divider = document.createElement('div'); + metadata_date_divider.setAttribute('class', 'dropdown-divider mt-auto mx-2 mb-2'); + // Инициализация оболочки времени регистрации let wrap_regs = document.createElement('p'); - wrap_regs.setAttribute('class', 'mt-auto mb-2 px-3 row'); + wrap_regs.setAttribute('class', 'mt-1 mb-2 px-3 row'); // Инициализация ярлыка времени регистрации let label_regs = document.createElement('b'); @@ -173,7 +184,7 @@ function page_profile_panel_input_suppliers_requests_generate(suppliers) { // Инициализация оболочки времени заявки let wrap_supl = document.createElement('p'); - wrap_supl.setAttribute('class', 'mt-0 mb-2 px-3 row'); + wrap_supl.setAttribute('class', 'mt-0 mb-3 px-3 row'); // Инициализация ярлыка времени заявки let label_supl = document.createElement('b'); @@ -185,30 +196,52 @@ function page_profile_panel_input_suppliers_requests_generate(suppliers) { value_supl.setAttribute('class', 'ml-auto'); value_supl.innerText = moment.unix(account.date.supl).locale('ru-ru').format('DD.MM.YYYY'); - // Инициализация кнопки сохранения - let button_save = document.createElement('a'); - button_save.setAttribute('class', 'btn form-control button_blue'); - button_save.setAttribute('type', 'button'); - button_save.setAttribute('role', 'button'); - button_save.innerText = 'Сохранить'; + // Инициализация кнопки подтверждения + let button_accept = document.createElement('a'); + button_accept.setAttribute('class', 'mb-2 btn form-control button_blue'); + button_accept.setAttribute('type', 'button'); + button_accept.setAttribute('role', 'button'); + button_accept.innerText = 'Подтвердить'; + + // Инициализация кнопки отклонения + let button_decline = document.createElement('a'); + button_decline.setAttribute('class', 'btn form-control button_red_softer'); + button_decline.setAttribute('type', 'button'); + button_decline.setAttribute('role', 'button'); + 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('class', 'col-4 d-flex flex-column'); + block_info.setAttribute('class', 'col-4 pl-0 d-flex flex-column'); // Инициализация ярлыка "NAME" let label_name = document.createElement('label'); label_name.setAttribute('class', 'control-label'); - label_name.innerText = 'Имя'; + label_name.innerText = 'Контактное лицо'; // Инициализация поля "NAME" let input_name = document.createElement('input'); input_name.setAttribute('id', 'profile_panel_input_suppliers_requests_block_info_name_' + account._key); 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.value = account.name; + input_name.value = account.name ?? ''; + + // Инициализация ярлыка "BOSS" + let label_boss = document.createElement('label'); + label_boss.setAttribute('class', 'control-label'); + label_boss.innerText = 'Директор'; + + // Инициализация поля "BOSS" + let input_boss = document.createElement('input'); + input_boss.setAttribute('id', 'profile_panel_input_suppliers_requests_block_info_boss_' + account._key); + 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.value = account.boss ?? ''; // Инициализация ярлыка "SIMC" (телефон) let label_simc = document.createElement('label'); @@ -221,7 +254,7 @@ function page_profile_panel_input_suppliers_requests_generate(suppliers) { 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.value = account.simc; + input_simc.value = account.simc ?? ''; // Инициализация ярлыка "MAIL" let label_mail = document.createElement('label'); @@ -231,15 +264,15 @@ 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('class', 'form-control button_clean'); + 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.value = account.mail; + input_mail.value = account.mail ?? ''; // Инициализация колонки с вторичными данными аккаунта let block_details = document.createElement('div'); block_details.setAttribute('id', 'profile_panel_input_suppliers_requests_block_details_' + account._key); - block_details.setAttribute('class', 'col-4 pr-0 d-flex flex-column'); + block_details.setAttribute('class', 'col-4 d-flex flex-column'); // Инициализация ярлыка "INDX" let label_indx = document.createElement('label'); @@ -256,7 +289,7 @@ function page_profile_panel_input_suppliers_requests_generate(suppliers) { 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.value = account.indx; + input_indx.value = account.indx ?? ''; // Инициализация кнопки "INDX" let button_indx = document.createElement('a'); @@ -280,7 +313,7 @@ function page_profile_panel_input_suppliers_requests_generate(suppliers) { 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; + input_pswd.value = account.pswd ?? ''; // Инициализация кнопки "PSWD" let button_pswd = document.createElement('a'); @@ -300,42 +333,206 @@ function page_profile_panel_input_suppliers_requests_generate(suppliers) { button_file.setAttribute('href', '/' + account._key + '/requests/supplier/' + account.date.supl + '/document'); button_file.innerHTML = 'Скачать'; - // Компоновка элементов блока с основной информацией - wrap_id.appendChild(label_id); - wrap_id.appendChild(value_id); - block_metadata.appendChild(wrap_id); - wrap_regs.appendChild(label_regs); - wrap_regs.appendChild(value_regs); - block_metadata.appendChild(wrap_regs); - wrap_supl.appendChild(label_supl); - wrap_supl.appendChild(value_supl); - block_metadata.appendChild(wrap_supl); - block_metadata.appendChild(button_save); + // Инициализация ярлыка "TAXN" + let label_taxn = document.createElement('label'); + label_taxn.setAttribute('class', 'control-label'); + label_taxn.innerText = 'ИНН'; + + // Инициализация поля "TAXN" + let input_taxn = document.createElement('input'); + 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.value = account.taxn ?? ''; + + // Инициализация ярлыка "CNTG" + let label_cntg = document.createElement('label'); + label_cntg.setAttribute('class', 'control-label'); + label_cntg.innerText = 'КПП'; + + // Инициализация поля "CNTG" + let input_cntg = document.createElement('input'); + 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.value = account.cntg ?? ''; + + // Инициализация ярлыка "FADD" + let label_fadd = document.createElement('label'); + label_fadd.setAttribute('class', 'control-label'); + label_fadd.innerText = 'Фактический адрес'; + + // Инициализация поля "FADD" + let input_fadd = document.createElement('input'); + 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.value = account.fadd ?? ''; + + // Инициализация ярлыка "LADD" + let label_ladd = document.createElement('label'); + label_ladd.setAttribute('class', 'control-label'); + label_ladd.innerText = 'Юридический адрес'; + + // Инициализация поля "LADD" + let input_ladd = document.createElement('input'); + 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.value = account.ladd ?? ''; + + // Инициализация ярлыка "CHCK" + let label_chck = document.createElement('label'); + label_chck.setAttribute('class', 'control-label'); + 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.value = account.chck ?? ''; + + // Инициализация ярлыка "CMPN" + let label_cmpn = document.createElement('label'); + label_cmpn.setAttribute('class', 'control-label'); + label_cmpn.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 ?? ''; + + // Инициализация ярлыка "CNTC" + let label_cntc = document.createElement('label'); + label_cntc.setAttribute('class', 'control-label'); + label_cntc.innerText = 'Контакты'; + + // Инициализация поля "CNTC" + let input_cntc = document.createElement('textarea'); + 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.value = account.cntc ?? ''; + + // Инициализация ярлыка "DESC" + let label_desc = document.createElement('label'); + label_desc.setAttribute('class', 'control-label'); + label_desc.innerText = 'Описание'; + + // Инициализация поля "DESC" + let textarea_desc = document.createElement('textarea'); + 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.value = account.desc ?? ''; + + // Инициализация разделителя для геолокации + let metadata_geolocation_divider = document.createElement('div'); + metadata_geolocation_divider.setAttribute('class', 'dropdown-divider mx-2 mb-2'); + + // Инициализация оболочки найденного по геолокации города + let wrap_city = document.createElement('p'); + wrap_city.setAttribute('class', 'mt-1 mb-2 px-3 row'); + + // Инициализация ярлыка найденного по геолокации города + let label_city = document.createElement('b'); + label_city.setAttribute('class', ''); + label_city.innerText = 'Город:'; + + // Инициализация значения найденного по геолокации города + let value_city = document.createElement('span'); + value_city.setAttribute('class', 'ml-auto'); + value_city.innerText = account.city ?? 'Неизвестно'; // Компоновка элементов блока с основной информацией block_info.appendChild(label_name); block_info.appendChild(input_name); + block_info.appendChild(label_simc); block_info.appendChild(input_simc); + block_info.appendChild(label_mail); block_info.appendChild(input_mail); - // Компоновка элементов блока с вторичными данными - block_details.appendChild(label_indx); + block_info.appendChild(label_indx); wrap_indx.appendChild(input_indx); wrap_indx.appendChild(button_indx); - block_details.appendChild(wrap_indx); - block_details.appendChild(label_pswd); + block_info.appendChild(wrap_indx); + + block_info.appendChild(label_pswd); wrap_pswd.appendChild(input_pswd); wrap_pswd.appendChild(button_pswd); - block_details.appendChild(wrap_pswd); - block_details.appendChild(label_file); - block_details.appendChild(button_file); + block_info.appendChild(wrap_pswd); + + block_info.appendChild(label_desc); + block_info.appendChild(textarea_desc); + + block_info.appendChild(label_file); + block_info.appendChild(button_file); + + // Компоновка элементов блока с вторичными данными + block_details.appendChild(label_boss); + block_details.appendChild(input_boss); + + block_details.appendChild(label_cmpn); + block_details.appendChild(input_cmpn); + + block_details.appendChild(label_taxn); + block_details.appendChild(input_taxn); + + block_details.appendChild(label_cntg); + block_details.appendChild(input_cntg); + + block_details.appendChild(label_fadd); + block_details.appendChild(input_fadd); + + block_details.appendChild(label_ladd); + block_details.appendChild(input_ladd); + + block_details.appendChild(label_chck); + block_details.appendChild(input_chck); + + block_details.appendChild(label_cntc); + block_details.appendChild(input_cntc); + + // Компоновка элементов блока с технической информацией + wrap_id.appendChild(label_id); + wrap_id.appendChild(value_id); + block_metadata.appendChild(wrap_id); + + block_metadata.appendChild(metadata_geolocation_divider); + wrap_city.appendChild(label_city); + wrap_city.appendChild(value_city); + block_metadata.appendChild(wrap_city); + + + block_metadata.appendChild(metadata_date_divider); + wrap_regs.appendChild(label_regs); + wrap_regs.appendChild(value_regs); + block_metadata.appendChild(wrap_regs); + + wrap_supl.appendChild(label_supl); + wrap_supl.appendChild(value_supl); + block_metadata.appendChild(wrap_supl); + + block_metadata.appendChild(button_accept); + block_metadata.appendChild(button_decline); // Компоновка всех колонок - container.appendChild(block_metadata); container.appendChild(block_info); container.appendChild(block_details); + container.appendChild(block_metadata); html.add(container);