Обновление панели аутентификации и отображения товаров в заказах

This commit is contained in:
Arsen Mirzaev Tatyano-Muradovich 2021-07-30 20:43:37 +10:00
parent 8270eaed11
commit d087256181
13 changed files with 312 additions and 181 deletions

View File

@ -99,9 +99,9 @@ $config = [
'profile/geolocation/<action:(init)>' => 'profile/geolocation-<action>',
'orders' => 'order/index',
'orders/<type:[^/]+>' => 'order/index',
'orders/<_key:[^/]+>/<action:(accept)>' => 'order/<action>',
'orders/supply/<_key:[^/]+>/<action:(read|write|edit|delete)>' => 'order/supply-<action>',
'orders/supply/<_key:[^/]+>/<action:(read|write|edit|delete)>/<target:(stts|cost|time|comm)>' => 'order/supply-<action>-<target>',
'orders/<catn:[^/]+>/<action:(accept)>' => 'order/<action>',
'orders/supply/<catn:[^/]+>/<action:(read|write|edit|delete)>' => 'order/supply-<action>',
'orders/supply/<catn:[^/]+>/<action:(read|write|edit|delete)>/<target:(stts|cost|time|comm)>' => 'order/supply-<action>-<target>',
'invoices/<order:[^/]+>' => 'invoice/index',
'invoices/<order:[^/]+>/<action:(download)>' => 'invoice/<action>',
'verify/send' => 'verify/send',

View File

@ -44,11 +44,14 @@ class AuthenticationController extends Controller
// Фильтрация
$target = match ($target) {
'menu' => 'menu',
'panel' => 'panel',
'main' => 'main',
default => 'main'
};
// Рендер для всплывающей панели
$panel = $target === 'panel';
if (yii::$app->request->isPost) {
// AJAX-POST-запрос
@ -72,15 +75,13 @@ class AuthenticationController extends Controller
// Инициализация
$notifications_button = $this->renderPartial('/notification/button');
$notifications_panel_full = true;
$notifications_panel = $this->renderPartial('/notification/panel', compact('notifications_panel_full'));
$notifications_panel = $this->renderPartial('/notification/panel', ['notifications_panel_full' => true]);
// Запись ответа
$return = [
$target => $this->renderPartial('/account/panel/authenticated', compact(
'menu' => $this->renderPartial('/account/panel/authenticated', compact(
'notifications_button',
'notifications_panel',
'notifications_panel_full'
'notifications_panel'
)),
'_csrf' => yii::$app->request->getCsrfToken()
];
@ -131,7 +132,7 @@ class AuthenticationController extends Controller
yii::$app->response->statusCode = 400;
return [
$target => $this->renderPartial('/account/index', compact('model')),
$target => $this->renderPartial('/account/index', compact('model', 'panel')),
'redirect' => '/authentication',
'_csrf' => yii::$app->request->getCsrfToken()
];
@ -141,7 +142,7 @@ class AuthenticationController extends Controller
if (!yii::$app->user->isGuest) {
yii::$app->response->redirect('/');
} else {
return $this->render('/account/index');
return $this->render('/account/index', compact('model', 'panel'));
}
}
}

View File

@ -19,6 +19,7 @@ use app\models\connection\Dellin;
use app\models\Invoice;
use app\models\Notification;
use app\models\Settings;
use app\models\Supply;
use app\models\SupplyEdgeProduct;
use Codeception\PHPUnit\ResultPrinter\HTML;
@ -561,15 +562,20 @@ class OrderController extends Controller
/**
* Чтение инстанции поставки в заказе (order_edge_supply)
*
* @param int $_key Ключ записи в коллекции order_edge_supply
* @param string $catn Артикул поставки
*
* @return string|array|null
*/
public function actionSupplyRead(int $_key): string|array|null
public function actionSupplyRead(string $catn): string|array|null
{
// Инициализация
$buffer = [];
if ($supply = OrderEdgeSupply::searchBySupplyCatn($catn)) {
// Удалось найти инстанцию поставки
}
if ($order_edge_supply = OrderEdgeSupply::searchById($_id = OrderEdgeSupply::collectionName() . '/' . $_key)) {
// Удалось найти инстанцию поставки
@ -661,17 +667,24 @@ class OrderController extends Controller
/**
* Запись статуса поставки в заказе (order_edge_supply)
*
* @param int $_key Ключ записи в коллекции order_edge_supply
* @param string $catn Артикул поставки
*
* @return string|array|null
*/
public function actionSupplyWriteStts(int $_key): string|array|null
public function actionSupplyWriteStts(string $catn): string|array|null
{
// Инициализация
$stts = yii::$app->request->post('stts') ?? yii::$app->request->get('stts');
$stts = yii::$app->request->post('stts') ?? yii::$app->request->get('stts') ?? '';
$buffer = [];
if ($order_edge_supply = OrderEdgeSupply::searchById($_id = OrderEdgeSupply::collectionName() . '/' . $_key)) {
if ($supply = OrderEdgeSupply::searchBySupplyCatn($_id = Supply::collectionName() . '/' . $catn)) {
// Удалось найти инстанцию поставки
var_dump($supply);
}
if ($order_edge_supply = OrderEdgeSupply::searchById($_id = OrderEdgeSupply::collectionName() . '/' . $catn)) {
// Удалось найти инстанцию поставки
// Запись в буфер изначальных данных
@ -711,17 +724,17 @@ class OrderController extends Controller
/**
* Запись цены поставки в заказе (order_edge_supply)
*
* @param int $_key Ключ записи в коллекции order_edge_supply
* @param string $catn Артикул поставки
*
* @return string|array|null
*/
public function actionSupplyEditCost(int $_key): string|array|null
public function actionSupplyEditCost(int $catn): string|array|null
{
// Инициализация
$cost = yii::$app->request->post('cost') ?? yii::$app->request->get('cost');
$buffer = [];
if ($order_edge_supply = OrderEdgeSupply::searchById($_id = OrderEdgeSupply::collectionName() . '/' . $_key)) {
if ($order_edge_supply = OrderEdgeSupply::searchById($_id = OrderEdgeSupply::collectionName() . '/' . $catn)) {
// Удалось найти инстанцию поставки
// Запись в буфер изначальных данных

View File

@ -19,16 +19,24 @@ class RegistrationController extends Controller
// Инициализация
$model = new AccountForm(yii::$app->request->post('AccountForm') ?? yii::$app->request->get('AccountForm'));
$type = yii::$app->request->post('type') ?? yii::$app->request->get('type');
$target = yii::$app->request->post('target') ?? yii::$app->request->get('target');
$model->scenario = $model::SCENARIO_REGISTRATION;
// Фильтрация
$target = match ($target) {
'panel' => 'panel',
'main' => 'main',
default => 'main'
};
// Рендер для всплывающей панели
$panel = $target === 'panel';
if (yii::$app->request->isPost) {
// POST-запрос
yii::$app->response->format = Response::FORMAT_JSON;
// Валидация формы
if (!empty($errors = ActiveForm::validate($model))) return $errors;
if ($type === 'registration' && (!yii::$app->user->isGuest || $model->registration())) {
// Данные прошли проверку и аккаунт был создан
@ -43,7 +51,7 @@ class RegistrationController extends Controller
$model->scenario = $model::SCENARIO_REGISTRATION;
return [
'main' => $this->renderPartial('/account/index', compact('model') + ['registration' => true]),
$target => $this->renderPartial('/account/index', compact('model', 'panel') + ['registration' => true]),
'redirect' => '/registration',
'_csrf' => yii::$app->request->getCsrfToken()
];
@ -51,8 +59,7 @@ class RegistrationController extends Controller
// Инициализация
$notifications_button = $this->renderPartial('/notification/button');
$notifications_panel_full = true;
$notifications_panel = $this->renderPartial('/notification/panel', compact('notifications_panel_full'));
$notifications_panel = $this->renderPartial('/notification/panel', ['notifications_panel_full' => true]);
// Запись ответа
$return = [
@ -108,7 +115,7 @@ class RegistrationController extends Controller
yii::$app->response->statusCode = 400;
return [
'main' => $this->renderPartial('/account/index', compact('model') + ['registration' => true]),
$target => $this->renderPartial('/account/index', compact('model', 'panel') + ['registration' => true]),
'redirect' => '/registration',
'_csrf' => yii::$app->request->getCsrfToken()
];
@ -118,7 +125,7 @@ class RegistrationController extends Controller
if (!yii::$app->user->isGuest) {
yii::$app->response->redirect('/');
} else {
return $this->render('/account/index', compact('model') + ['registration' => true]);
return $this->render('/account/index', compact('model', 'panel') + ['registration' => true]);
}
}
}

View File

@ -337,6 +337,17 @@ class Order extends Document implements DocumentInterface
return $limit === 1 ? $return[0] ?? null : $return;
}
// /**
// * Объеденить дубликаты поставок
// *
// * @return array Данные заказа
// */
// public function mergeDuplicateSupplies(array $order): array {
// foreach ($orders as $order) {
// }
// }
/**
* Поиск содержимого заказа
*
@ -444,6 +455,7 @@ class Order extends Document implements DocumentInterface
foreach ($connections as &$connection_for_check) {
if ($connection == $connection_for_check) {
// Найден дубликат
// Запись в реестр
$registry[$key] = [
'catn' => $connection_for_check['supply']['catn'],
@ -456,7 +468,6 @@ class Order extends Document implements DocumentInterface
$connection['amount'] = count($connection['order_edge_supply']);
}
// Инициализация дополнительных данных
foreach ($connections as $key => &$connection) {
// Перебор поставок
@ -620,6 +631,27 @@ class Order extends Document implements DocumentInterface
return $connections;
}
/**
* Проверка на то, что все поставки подтверждены
*
* @param array $order_edge_supply Поставки
*
* @return bool Статус подтверждения всех поставок (true если все и false если хотя бы одна из них не подтверждена)
*/
public static function checkSuppliesStts(array $order_edge_supply): bool {
foreach ($order_edge_supply as $edge) {
// Перебор поставок
if (empty($edge['stts']) || $edge['stts'] !== 'accepted') {
// Найдена неподтверждённая поставка
return false;
}
}
return true;
}
/**
* @return DocumentInterface[]
*/

View File

@ -19,12 +19,12 @@ use app\models\AccountForm;
<?php
// Инициализация идентификатора формы
if ($isPopupMenu ?? false) {
if ($panel ?? false) {
// Генерация документа во всплывающем меню
// Инициализация параметров
$form_id = 'form_account_menu';
$target = 'menu';
$form_id = 'form_account_panel';
$target = 'panel';
} else {
// Генерация документа в основном блоке страницы
@ -54,21 +54,21 @@ use app\models\AccountForm;
?>
<?php if ($registration ?? false) : ?>
<?php if ($isPopupMenu ?? false) : ?>
<?php if ($panel ?? false) : ?>
<h5 class="mb-4 text-center">Регистрация</h5>
<?php else : ?>
<h3 class="mb-4 text-center">Регистрация</h3>
<?php endif ?>
<?php else : ?>
<?php if ($isPopupMenu ?? false) : ?>
<?php if ($panel ?? false) : ?>
<h5 class="mb-4 text-center">Аутентификация</h5>
<?php else : ?>
<h3 class="mb-4 text-center">Аутентификация</h3>
<?php endif ?>
<?php endif ?>
<?= $form->field($model, 'mail', ['enableLabel' => false, 'options' => ['class' => 'mb-2'], 'errorOptions' => ['class' => 'help-block help-block-error px-2 small']])->textInput(['autofocus' => true, 'placeholder' => $model->getAttributeLabel('mail')]) ?>
<?= $form->field($model, 'pswd', ['enableLabel' => false, 'errorOptions' => ['class' => 'help-block help-block-error px-2 small']])->passwordInput(['placeholder' => $model->getAttributeLabel('pswd')]) ?>
<?= $form->field($model, 'mail', ['enableLabel' => false, 'options' => ['class' => 'mb-2'], 'inputOptions' => ['class' => 'form-control button_clean', 'errorOptions' => ['class' => 'help-block help-block-error px-2 small']]])->textInput(['autofocus' => true, 'placeholder' => $model->getAttributeLabel('mail')]) ?>
<?= $form->field($model, 'pswd', ['enableLabel' => false, 'inputOptions' => ['class' => 'form-control button_clean'], 'errorOptions' => ['class' => 'help-block help-block-error px-2 small']])->passwordInput(['placeholder' => $model->getAttributeLabel('pswd')]) ?>
<div class="d-flex mb-2 mt-4">
<?= Html::submitButton('Войти', ['name' => 'submitAuthentication', 'onclick' => 'authentication(this.parentElement.parentElement, \'' . $target . '\');', 'class' => 'flex-grow-1 mr-2 btn btn-primary button_clean']) ?>
@ -77,7 +77,7 @@ use app\models\AccountForm;
'{endLabel}</div>'])->checkbox()->label($model->getAttributeLabel('auto'), ['class' => 'w-100 m-0']) ?>
</div>
<?= Html::submitButton('Регистрация', ['name' => 'submitRegistration', 'onclick' => 'return registration_start(this.parentElement);', 'class' => 'col-12 ml-auto btn btn-success btn-sm button_clean']) ?>
<?= Html::submitButton('Регистрация', ['name' => 'submitRegistration', 'onclick' => 'return registration_start(this.parentElement, \'' . $target . '\');', 'class' => 'col-12 ml-auto btn btn-success btn-sm button_clean']) ?>
<?php
@ -90,18 +90,29 @@ use app\models\AccountForm;
<?php if ($registration ?? false) : ?>
<script defer>
if (document.readyState === "complete") {
let form = document.getElementById('<?= $form_id ?>');
// Инициализация формы
let form = document.getElementById('<?= $form_id ?>');
// Запуск программы регистрации
registration_start(form, 'panel');
if (document.readyState === "complete") {
// Документ загружен
// Обработчик события инициализации
$(form).on('afterInit', function(e) {
registration_start(form);
// Запуск программы регистрации
registration_start(form, 'panel');
});
} else {
document.addEventListener('DOMContentLoaded', function() {
let form = document.getElementById('<?= $form_id ?>');
// Документ не загружен
// Обработчик события загрузки документа
document.addEventListener('DOMContentLoaded', function() {
// Обработчик события инициализации
$(form).on('afterInit', function(e) {
registration_start(form);
// Запуск программы регистрации
registration_start(form, 'panel');
});
}, false);
}

View File

@ -6,14 +6,14 @@ use yii;
?>
<?=$notifications_button?>
<?=$notifications_panel?>
<?= $notifications_button ?>
<?= $notifications_panel ?>
<a class="text-dark my-auto mr-2" title="Корзина" href="/cart" role="button" onclick="return page_cart();"><i class="fas fa-shopping-cart mx-2"></i></a>
<a class="text-dark my-auto mr-2" title="Заказы" href="/orders" role="button" onclick="return page_orders();"><i class="fas fa-list mx-2"></i></a>
<div class="btn-group my-auto">
<a class="btn m-0 px-0 text-dark button_clean" title="Личный кабинет" href="/profile" role="button" onclick="return page_profile();"><b><?= yii::$app->user->identity->mail ?></b></a>
<button id="profile_button" class="btn button_clean_full pr-0 dropdown-toggle dropdown-toggle-split button_clean" type="button" data-toggle="dropdown" onmouseover="$('#profile_button').dropdown('show')"></button>
<div id="profile_button_panel" class="dropdown-menu dropdown-menu-right py-1" aria-labelledby="profile_button" onmouseout="$('#profile_button').dropdown('show')">
<a class="dropdown-item button_white text-dark" onclick="deauthentication()">Выход (<?= yii::$app->user->identity->mail ?>)</a>
</div>
<button id="menu_auth_panel_button" class="pr-0 btn button_clean button_clean_full" type="button" onclick="return deauthentication();" title="Выход"><i class="fas fa-sign-out-alt"></i></button>
<!-- <div id="menu_auth_panel" class="py-1 text-center d-none">
<a class="py-1 px-3 d-block button_white text-dark" onclick="return deauthentication();"><b>Выход</b></a>
</div> -->
</div>

View File

@ -11,10 +11,9 @@ use app\models\helpers\JsManager;
<a class="text-dark my-auto mr-2" title="Заказы" href="/orders" role="button" onclick="return page_orders();"><i class="fas fa-list mx-2"></i></a>
<div class="btn-group my-auto">
<a class="btn m-0 px-0 text-dark button_clean" title="Личный кабинет" href="/profile" role="button" onclick="return page_profile();">Личный кабинет</a>
<button id="profile_button" class="btn pr-0 dropdown-toggle dropdown-toggle-split button_clean" type="button" data-toggle="dropdown" onmouseover="$('#profile_button').dropdown('show')"></button>
<div id="profile_button_panel" class="dropdown-menu dropdown-menu-long dropdown-menu-right p-3" aria-labelledby="profile_button" onmouseout="$('#profile_button').dropdown('show')">
<?= yii::$app->controller->renderPartial('/account/index', compact('model') + ['isPopupMenu' => true]) ?>
<!-- <a class="dropdown-item-text text-center px-0 py-2" href="#"><small>Восстановление пароля</small></a> -->
<button id="menu_auth_panel_button" class="pr-0 btn button_clean button_clean_full" type="button" onmouseover="return menu_auth_panel_show(document.getElementById('menu_auth_panel'));" onclick="return menu_auth_panel_show(document.getElementById('menu_auth_panel'));"><i class="fas fa-caret-down"></i></button>
<div id="menu_auth_panel" class="p-3 d-none">
<?= yii::$app->controller->renderPartial('/account/index', compact('model') + ['panel' => true]) ?>
</div>
</div>

View File

@ -2,11 +2,13 @@
declare(strict_types=1);
use app\models\AccountEdgeOrder;
use app\models\OrderEdgeSupply;
use yii;
use yii\bootstrap\ActiveForm;
use app\models\AccountEdgeOrder;
use app\models\Order;
use app\models\OrderEdgeSupply;
// Инициализация
if (
!yii::$app->user->isGuest
@ -110,18 +112,18 @@ if (
}
}
// Инициализация окружения
extract($supply);
?>
<?php foreach ($supply['order_edge_supply'] as $part) : ?>
<a id="<?= $part['_key'] ?>_supply" class="row p-2 px-0 rounded row_supply" type="button" onclick="return orders_supply_edit('<?= $part['_key'] ?>', <?= $order['order']['_key'] ?>);">
<img class="col-auto px-0 h-100 img-fluid rounded" src="<?= $covr ?>" />
<p id="<?= $part['_key'] ?>_supply_stts_indicator" class="col d-flex text-dark"><?= $supply['product']['catn'] ?>
<?php if (isset($part['stts']) && $part['stts'] == 1) : ?>
<span id="<?= $part['_key'] ?>_supply_stts_indicator_icon" class="ml-auto my-auto fas fa-check"></span>
<?php endif ?>
</p>
</a>
<?php endforeach ?>
<a id="<?= $supply['catn'] ?>_supply" class="row mb-2 p-2 px-0 rounded row_supply" type="button" onclick="return orders_supply_edit('<?= $supply['catn'] ?>', <?= $order['order']['_key'] ?>);">
<img class="col-auto px-0 h-100 img-fluid rounded" src="<?= $covr ?>" />
<p id="<?= $supply['catn'] ?>_supply_stts_indicator" class="col d-flex text-dark"><?= $product['catn'] . ' x' . $amount ?>
<?php if (Order::checkSuppliesStts($order_edge_supply)) : ?>
<span id="<?= $supply['catn'] ?>_supply_stts_indicator_icon" class="ml-auto my-auto fas fa-check"></span>
<?php endif ?>
</p>
</a>
<?php if ($count++ < count($order['supplies'])) : ?>
<div class="dropdown-divider mb-2"></div>
@ -205,9 +207,10 @@ if (
<input id="checkbox_cart_all" type="checkbox" onchange="return cart_list_checkbox(this);" />
</div> -->
<span class="col-2"><b>Артикул</b></span>
<span class="col-4"><b>Статус</b></span>
<span class="col-3"><b>Статус</b></span>
<span class="col-3"><b>Поступление</b></span>
<span class="col-3"><b>Стоимость</b></span>
<span class="col-2"><b>Количество</b></span>
<span class="col-2"><b>Стоимость</b></span>
</div>
<?php
@ -252,92 +255,92 @@ if (
// Инициализация окружения
extract($supply);
foreach ($order_edge_supply as $part) {
// Перебор связей поставок с заказом
// Инициализация связи поставки с заказом (подразумевается, что все одинаковые по основным параметрам)
$part = $order_edge_supply[0];
// Инициализация доставки
if (isset($delivery['error'])) {
// Не удалось рассчитать доставку
// Инициализация индикатора
$date_icon = '';
// Инициализация доставки
if (isset($delivery['error'])) {
// Не удалось рассчитать доставку
if (isset($part['date'])) {
// Найдены данные в инстанции поставки
// Инициализация индикатора
$date_icon = '';
// Инициализация доставки
if (isset($part['date'])) {
// Найдены данные в инстанции поставки
// Запись в буфер вывода
// $time = $part['time'] . ' дн';
$date = date('d.m.Y', $part['date']);
$date_html = "<span class=\"m-auto\">$date</span>";
} else {
$date = 'Неизвестно';
$date_html = "<small class=\"m-auto\">$date</small>";
}
// Инициализация стоимости
if (isset($part['cost'])) $cost_html = '<span class="m-auto">' . ($cost = $part['cost']) . ' <small>' . $currency . '</small></span>';
else $cost_html = '<small class="m-auto">' . ($cost = 'Неизвестно') . '</small>';
// Запись в буфер вывода
// $time = $part['time'] . ' дн';
$date = date('d.m.Y', $part['date']);
$date_html = "<span class=\"m-auto\">$date</span>";
} else {
// Удалось рассчитать доставку
// Инициализация типа доставки
$time_type = $part['dlvr']['type'] ?? 'auto';
// Инициализация индикатора
$date_icon = match ($time_type) {
'avia' => '<i class="ml-1 fas fa-plane"></i>',
default => '<i class="ml-1 fas fa-truck"></i>'
};
// Инициализация доставки
if (isset($part['date'])) {
// Найдены данные в инстанции поставки
// Запись в буфер вывода
// $time = $part['time'] . ' дн';
$date = date('d.m.Y', $part['date']);
$date_html = "<span class=\"m-auto\">$date</span>";
} else {
// Рассчет времени из данных поставки
try {
$time_converted = DateTime::createFromFormat('Y-m-d H:i:s', $delivery['orderDates']['giveoutFromOspReceiver'])->getTimestamp();
} catch (Exception $e) {
$time_converted = DateTime::createFromFormat('Y-m-d', $delivery['orderDates']['arrivalToOspReceiver'])->getTimestamp();
}
// $time = (ceil(($time_converted - time()) / 60 / 60 / 24) + 1) . ' дн';
$date = date('d.m.Y', $time_converted);
$date_html = "<span class=\"m-auto\">$date</span>";
}
// Инициализация стоимости
if (isset($part['cost'])) $cost_html = '<span class="m-auto">' . ($cost = $part['cost']) . ' <small>' . $currency . '</small></span>';
else $cost_html = '<span class="m-auto">' . ($cost = $cost) . ' <small>' . $currency . '</small></span>';
$date = 'Неизвестно';
$date_html = "<small class=\"m-auto\">$date</small>";
}
// Инициализация статуса связи поставки
$status = OrderEdgeSupply::convertStatusToRussian($part['stts'] ?? 0);
// Инициализация стоимости
if (isset($part['cost'])) $cost_html = '<span class="m-auto">' . ($cost = $part['cost']) . ' <small>' . $currency . '</small></span>';
else $cost_html = '<small class="m-auto">' . ($cost = 'Неизвестно') . '</small>';
} else {
// Удалось рассчитать доставку
// Инициализация класса для поставки (если необходимо)
$css = match ($part['stts'] ?? 0) {
'accepted', 1 => ' supply_accepted',
default => ''
// Инициализация типа доставки
$time_type = $part['dlvr']['type'] ?? 'auto';
// Инициализация индикатора
$date_icon = match ($time_type) {
'avia' => '<i class="ml-1 fas fa-plane"></i>',
default => '<i class="ml-1 fas fa-truck"></i>'
};
// Пробела между supply и $css не должно быть
$supplies_html .= <<<HTML
// Инициализация доставки
if (isset($part['date'])) {
// Найдены данные в инстанции поставки
// Запись в буфер вывода
// $time = $part['time'] . ' дн';
$date = date('d.m.Y', $part['date']);
$date_html = "<span class=\"m-auto\">$date</span>";
} else {
// Рассчет времени из данных поставки
try {
$time_converted = DateTime::createFromFormat('Y-m-d H:i:s', $delivery['orderDates']['giveoutFromOspReceiver'])->getTimestamp();
} catch (Exception $e) {
$time_converted = DateTime::createFromFormat('Y-m-d', $delivery['orderDates']['arrivalToOspReceiver'])->getTimestamp();
}
// $time = (ceil(($time_converted - time()) / 60 / 60 / 24) + 1) . ' дн';
$date = date('d.m.Y', $time_converted);
$date_html = "<span class=\"m-auto\">$date</span>";
}
// Инициализация стоимости
if (isset($part['cost'])) $cost_html = '<span class="m-auto">' . ($cost = $part['cost']) . ' <small>' . $currency . '</small></span>';
else $cost_html = '<span class="m-auto">' . ($cost = $cost) . ' <small>' . $currency . '</small></span>';
}
// Инициализация статуса связи поставки
$status = OrderEdgeSupply::convertStatusToRussian($part['stts'] ?? '');
// Инициализация класса для поставки (если необходимо)
$css = match ($part['stts'] ?? '') {
'accepted' => ' supply_accepted',
default => ''
};
// Пробела между supply и $css не должно быть
$supplies_html .= <<<HTML
<div class="row py-2 supply$css text-center">
<div class="col-2">{$supply['catn']}</div>
<div class="col-4 d-flex"><small class="m-auto">$status</small></div>
<div class="col-3 d-flex"><small class="m-auto">$status</small></div>
<div class="col-3 d-flex">$date_html</div>
<div class="col-3 d-flex">$cost_html</div>
<div class="col-2">$amount</div>
<div class="col-2 d-flex">$cost_html</div>
</div>
HTML;
// Обновление общего счётчика цены
$sum += (int) $cost;
}
// Обновление общего счётчика цены
$sum += (int) $cost;
}
}
@ -353,9 +356,10 @@ if (
$supplies_html
<div class="row py-2 cart_list_target_total text-center">
<div class="col-2">$invoice</div>
<div class="col-4"><b>$status</b></div>
<div class="col-3"><b>$status</b></div>
<div class="col-3"><b>$date</b></div>
<div class="col-3"><b>$sum <small><b>руб</b></small></b></div>
<div class="col-2"></div>
<div class="col-2"><b>$sum <small><b>руб</b></small></b></div>
</div>
HTML;
}

View File

@ -7,16 +7,15 @@ nav {
height: max-content;
}
#profile_button+.dropdown-menu-long {
#menu_auth_panel_button+#menu_auth_panel {
z-index: 9999;
top: 100%;
right: 0;
width: 250px;
}
#profile_button+.dropdown-menu #form_account .help-block-error {
margin-bottom: .5rem;
}
#profile_button_panel {
z-index: 1500;
position: absolute;
background: #fff;
border: 1px solid #ced4da;
border-radius: 3px;
}
.h-divider {
@ -204,4 +203,4 @@ nav {
.h-title>* {
display: none !important;
}
}
}

View File

@ -54,13 +54,13 @@ function deauthentication() {
});
};
function registration_start(form, type) {
// Инициализация постфикса
let postfix = '';
function registration_start(form, target = 'main') {
// // Инициализация постфикса
// let postfix = '';
if (type === 'menu') {
postfix = '-menu';
}
// if (target === 'panel') {
// postfix = '-panel';
// }
// Удаление кнопок аутентификации
form.children[4].remove();
@ -89,7 +89,7 @@ function registration_start(form, type) {
// Изменение вызываемой функции
registration.setAttribute('onclick', 'return registration_end(this.parentElement);');
registration.setAttribute('onclick', 'return registration_end(this.parentElement, \'' + target + '\');');
// // Инициализация оболочки поля повтора пароля
// let password_repeat_wrap = document.createElement('div');
@ -187,7 +187,7 @@ function registration_start(form, type) {
return false;
};
function registration_end(form) {
function registration_end(form, target = 'main') {
// Инициализация
$(form).yiiActiveForm('init');
@ -202,10 +202,15 @@ function registration_end(form) {
form = $(form).serializeArray();
}
form.push({
name: 'type',
value: 'registration'
});
form.push(
{
name: 'type',
value: 'registration'
},
{
name: 'target',
value: target
});
$.ajax({
url: '/registration',
@ -256,6 +261,42 @@ function account_response(data, status, xhr) {
// reinitialization(main);
// }
if (data !== undefined) {
// Получены данные с сервера
// Панель
if (data.panel !== undefined) {
// Данные с панелью переданы
// Инициализация
let panel = document.getElementById('menu_auth_panel');
if (panel !== null) {
// Панель инициализирована
// Обновление документа
panel.innerHTML = data.panel;
// Реинициализация
reinitialization(panel);
}
}
// Меню
if (data.menu !== undefined) {
// Данные с меню переданы
// Инициализация
let menu = document.getElementsByTagName('menu')[0];
// Обновление документа
menu.innerHTML = data.menu;
// Реинициализация
reinitialization(menu);
}
}
main_response(data, status, xhr);
}
@ -269,22 +310,6 @@ function account_response_success(data, status, xhr) {
// // Обновление панели поиска
// product_search();
if (data !== undefined) {
// Получены данные с сервера
// Меню
if (data.menu !== undefined) {
// Инициализация
let menu = document.getElementsByTagName('menu')[0];
// Обновление документа
menu.innerHTML = data.menu;
// Реинициализация
reinitialization(menu);
}
}
account_response(data, status, xhr);
}

View File

@ -66,9 +66,48 @@ function page_orders() {
return false;
};
function notifications() {
function menu_auth_panel_show(panel) {
if (panel !== undefined) {
// Необходимые данные переданы
return false;
// Отображение панели
panel.classList.remove('d-none');
// Возможность скрыть панель при клике вне её
function menu_auth_panel_hide_handler(event) {
if (panel.contains(event.target)) {
// Событие произошло по панели или элементов внутри неё
return true;
} else {
// Событие произошло вне панели
// Скрыть панель
return menu_auth_panel_hide(panel);
};
};
// Запись обработчика события
document.addEventListener('mousedown', menu_auth_panel_hide_handler);
return false;
};
return true;
};
function menu_auth_panel_hide(panel) {
if (panel !== undefined) {
// Необходимые данные переданы
// Скрытие панели
panel.classList.add('d-none');
return false;
};
return true;
};
function menu_responce(data, status, xhr) {

View File

@ -72,12 +72,13 @@ function orders_supply_edit(supply_key, order_key) {
data: {
'_csrf': yii.getCsrfToken()
},
success: function (data, statu, xhrs) {
success: function (data, status, xhr) {
// Удаление индикатора загрузки
panel.innerHTML = '';
if (data !== undefined) {
// Получены данные с сервера
// Идентификатор
if (document.getElementById(supply.getAttribute('id') + '_id') === null) {
// Инициализация контейнера