Обновление панели аутентификации и отображения товаров в заказах
This commit is contained in:
parent
8270eaed11
commit
d087256181
|
@ -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',
|
||||
|
|
|
@ -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'));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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)) {
|
||||
// Удалось найти инстанцию поставки
|
||||
|
||||
// Запись в буфер изначальных данных
|
||||
|
|
|
@ -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]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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[]
|
||||
*/
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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) {
|
||||
// Инициализация контейнера
|
||||
|
|
Reference in New Issue