пошел нахуй

This commit is contained in:
Arsen Mirzaev Tatyano-Muradovich 2022-03-10 09:00:12 +10:00
parent a31214ad6a
commit 82d6747425
13 changed files with 154 additions and 87 deletions

View File

@ -97,7 +97,7 @@ $config = [
'<_key:[0-9]+>' => 'account/index',
'<_key:[0-9]+>/<target:[^/]+>/<action:(read|edit|delete|regenerate)>' => 'account/<action>',
'<_key:[0-9]+>/files/<file:[^/]+>' => 'account/file',
'<_key:[0-9]+>/<action:(accept|decline)>' => 'account/<action>',
'<_key:[0-9]+>/<action:(accept|decline|data)>' => 'account/<action>',
'product/<catn:[^/]+>' => 'product/index',
'product/<catn:[^/]+>/<action:(write|delete|connect|disconnect|status)>' => 'product/<action>',
'<section:(product|cart)>/<catn:[^/]+>/<action:(read|write|edit|delete)>/<target:(title|catn|dscr|dmns|wght|image|cover|comm)>' => '<section>/<action>-<target>',

View File

@ -23,7 +23,8 @@ class AccountController extends Controller
[
'allow' => true,
'actions' => [
'file'
'file',
'data'
]
],
[
@ -258,8 +259,9 @@ class AccountController extends Controller
/**
* Регенерация параметра
*
* @param int $_key
* @param int $_key Идентификатор
* @param string $target
*
* @return void
*/
public function actionRegenerate(int $_key, string $target)
@ -299,4 +301,55 @@ class AccountController extends Controller
return false;
}
/**
* Информация
*
* @param int $_key Идентификатор
*/
public function actionData(int $_key)
{
if (yii::$app->request->isPost) {
// AJAX-POST-запрос
// Инициализация аккаунта (тот кто выполняет запрос)
$account = account::initAccount();
// Поиск данных об аккаунта (запрашиваемом)
$data = account::initAccount($_key)->getAttributes();
if ($account->isAdmin() || $account->isModer()) {
// Авторизован как работник
} else if ((int) $account->_key === $_key) {
// Авторизован как владелец аккаунта
unset(
$data['vrfy'],
$data['geol'],
$data['auth'],
$data['jrnl'],
$data['acpt'],
$data['pswd']
);
} else {
// Не авторизован
// Очистка от защищенных свойств
$data = [
'_key' => $data['_key'],
'indx' => $data['indx'],
'agnt' => $data['agnt'],
'type' => $data['type']
];
}
// Настройка формата ответа
yii::$app->response->format = Response::FORMAT_JSON;
return [
'data' => $data,
'_csrf' => Yii::$app->request->getCsrfToken()
];
}
}
}

View File

@ -588,67 +588,77 @@ class OrderController extends Controller
// Инициализация
$model = Order::searchByType(supplies: true);
// Поиск ребра
$account_edge_order = AccountEdgeOrder::searchByVertex(yii::$app->user->id, $model->readId(), 'current')[0];
if (($account_edge_order = AccountEdgeOrder::searchByVertex(yii::$app->user->id, $model->readId(), 'current')[0]) ?? false) {
// Найдено ребро: АККАУНТ -> ЗАКАЗ
if ($supplies = OrderEdgeSupply::searchByDirection($account_edge_order->to)) {
// Поставки найдены
// Добавить проверку на то, что товары активны
if ($order_edge_supply = OrderEdgeSupply::searchByDirection($account_edge_order->_to, type: 'write', limit: 500)) {
// Найдены рёбра: ЗАКАЗ -> ПОСТАВКА
}
foreach ($order_edge_supply as $edge) {
// Перебор рёбер: ЗАКАЗ -> ПОСТАВКА
var_dump($supplies); die;
if ($product = Product::searchBySupplyId($edge->_to)) {
// Найден товар
if (count($account_edge_order) > 1) {
// Найден более чем 1 заказ
return null;
}
// Запись
$account_edge_order->type = 'requested';
if ($account_edge_order->update()) {
// Удалось сохранить изменения
// Запись в журнал
$model->journal('requested');
// Инициализация буфера поставок
$supplies = [];
foreach ($model['supplies'] as $supply) {
// Перебор поставок
$supplies[] = [
'title' => $supply['supply']['catn'],
'amount' => [
'value' => $supply['amount'] ?? 0,
'unit' => 'шт'
],
'cost' => [
'value' => $supply['cost'] ?? 0,
'unit' => 'руб'
],
'type' => 'supply'
];
// Проверка на активность товара
if ($product['stts'] === 'active');
else $edge->delete();
}
}
}
Invoice::generate($model->_key, $this->renderPartial('/invoice/order/pattern', [
'buyer' => [
'id' => yii::$app->user->identity->_key,
'info' => 'Неизвестно'
],
'order' => [
'id' => $model->_key,
'date' => $account_edge_order->date ?? time(),
'entries' => $supplies
]
]));
// Реиницилазация
$model = Order::searchByType(supplies: true);
// Отправка уведомлений модераторам
Notification::_write($this->renderPartial('/notification/system/orders/new', ['id' => $account_edge_order->_key]), true, '@auth', Notification::TYPE_MODERATOR_ORDER_NEW);
// Запись
$account_edge_order->type = 'requested';
if ($account_edge_order->update()) {
// Удалось сохранить изменения
// Запись в журнал
$model->journal('requested');
// Инициализация буфера поставок
$supplies = [];
foreach ($model['supplies'] as $supply) {
// Перебор поставок
$supplies[] = [
'title' => $supply['supply']['catn'],
'delivery' => 0,
'amount' => [
// 'value' => $supply['amount'][$supply['order_edge_supply'][]] ?? 0,
// 'value' => $supply['amount'] ?? 0,
'value' => 0,
'unit' => 'шт'
],
'cost' => [
// 'value' => $supply['cost'] ?? 0,
'value' => 0,
'unit' => 'руб'
],
'type' => 'supply'
];
}
Invoice::generate($model->_key, $this->renderPartial('/invoice/order/pattern', [
'buyer' => [
'id' => yii::$app->user->identity->_key,
'info' => 'Неизвестно'
],
'order' => [
'id' => $model->_key,
'date' => $account_edge_order->date ?? time(),
'entries' => $supplies
]
]));
// Отправка уведомлений модераторам
Notification::_write($this->renderPartial('/notification/system/orders/new', ['id' => $account_edge_order->_key]), true, '@auth', Notification::TYPE_MODERATOR_ORDER_NEW);
}
}
return $this->actionIndex();

View File

@ -877,6 +877,9 @@ class ProfileController extends Controller
return false;
}
/**
* Поиск заявок на регистрацию
*/
public function actionPanelSuppliersRequestsSearch()
{
if (Yii::$app->request->isPost) {

View File

@ -31,6 +31,7 @@ class SearchController extends Controller
if ($auth_only && yii::$app->user->isGuest) {
// Если активирован режим "Поиск только аутентифицированным" и запрос пришел не от аутентифицированного
// Запись кода ответа: 401 (необходима авторизация)
yii::$app->response->statusCode = 401;

View File

@ -549,7 +549,7 @@ class Order extends Document implements DocumentInterface
// Чтение стоимости
$cost = Supply::readCostById($connection['supply']['_id']);
if (empty($cost) || $cost['ЦенаЗаЕдиницу'] < 1) {
if (empty($cost) || $cost < 1) {
// Если стоимость не найдена или равна нулю (явная ошибка)
// Удаление из базы данных
@ -633,7 +633,7 @@ class Order extends Document implements DocumentInterface
}
// Запись цены (цена поставки + цена доставки + наша наценка)
$connection['cost']['auto'] = ($cost['ЦенаЗаЕдиницу'] ?? $connection['supply']->onec['Цены']['Цена']['ЦенаЗаЕдиницу']) + ($connection['delivery']['auto']['price']['all'] ?? $connection['delivery']['auto']['price']['one'] ?? 0) + ($settings['increase'] ?? 0) ?? 0;
$connection['cost']['auto'] = ($cost ?? $connection['supply']->onec['Цены']['Цена']['ЦенаЗаЕдиницу']) + ($connection['delivery']['auto']['price']['all'] ?? $connection['delivery']['auto']['price']['one'] ?? 0) + ($settings['increase'] ?? 0) ?? 0;
// } else {
// Доставка самолётом
@ -696,11 +696,11 @@ class Order extends Document implements DocumentInterface
}
// Запись цены (цена поставки + цена доставки + наша наценка)
$connection['cost']['avia'] = ($cost['ЦенаЗаЕдиницу'] ?? $connection['supply']->onec['Цены']['Цена']['ЦенаЗаЕдиницу']) + ($connection['delivery']['avia']['price']['all'] ?? $connection['delivery']['avia']['price']['one'] ?? 0) + ($settings['increase'] ?? 0) ?? 0;
$connection['cost']['avia'] = ($cost ?? $connection['supply']->onec['Цены']['Цена']['ЦенаЗаЕдиницу']) + ($connection['delivery']['avia']['price']['all'] ?? $connection['delivery']['avia']['price']['one'] ?? 0) + ($settings['increase'] ?? 0) ?? 0;
// }
// Запись валюты
$connection['currency'] = $cost['Валюта'];
$connection['currency'] = 'руб';
}
return $connections;

View File

@ -255,12 +255,12 @@ class Search extends Document
} catch (Exception $e) {
$connection['delivery']['error'] = true;
var_dump($e->getMessage());
var_dump($e->getTrace());
var_dump($e->getFile());
// var_dump($e->getMessage());
// var_dump($e->getTrace());
// var_dump($e->getFile());
var_dump(json_decode($e->getMessage(), true)['errors']);
die;
// var_dump(json_decode($e->getMessage(), true)['errors']);
// die;
} finally {
// echo $connection['delivery']['price']['all'];
// Инициализация цены (цена поставки + цена доставки + наша наценка)

View File

@ -895,15 +895,11 @@ class Supply extends Product implements ProductInterface, OfferInterface
* @param string $_id Идентификатор поставки
* @param Product|null $product Товар для поиска по вершинам
*
* @return array|null Данные о ценах
* @return int|null Стоимость (руб)
*/
public static function readCostById(string $_id, Product $product = null): ?array
public static function readCostById(string $_id, Product $product = null): ?int
{
if (isset($product)) {
return SupplyEdgeProduct::searchByVertex($_id, $product->readId(), type: 'connect', limit: 1)['onec']['Цены']['Цена'];
}
return SupplyEdgeProduct::searchByDirection($_id, type: 'connect', limit: 1)['onec']['Цены']['Цена'];
return Supply::searchById($_id)->cost ?? null;
}
/**

View File

@ -25,7 +25,6 @@ use DateTime;
<span>Артикул</span>
</div>
<div class="col-4">
<span>Описание</span>
</div>
<div class="col-1 ml-auto px-0 text-center">
<span>Количество</span>
@ -104,7 +103,6 @@ use DateTime;
{$supply['catn']}
</div>
<div class="col-4 my-auto">
{$supply['dscr']}
</div>
<div class="col-1 my-auto ml-auto">
<input id="cart_list_amnt_{$supply['catn']}_auto" class="form-control text-center" type="text" value="{$amount['auto']}" onchange="return cart_list_amount_update('{$supply['catn']}', 'auto', this)" aria-invalid="false">

View File

@ -156,9 +156,7 @@ use app\models\Settings;
<td style="text-align: center; border: solid; border-left: thick;" colspan="1" valign="center"><?= $row++ ?></td>
<td style="text-align: left; border: solid;" colspan="6" valign="center"><?= $entry['title'] ?></td>
<?php var_dump($entry) ?>
<td style="text-align: center; border: solid;" colspan="2" valign="center"><?= $entry['amount']['auto']['value'] ?></td>
<td style="text-align: center; border: solid;" colspan="2" valign="center"><?= $entry['amount']['value'] ?></td>
<td style="text-align: center; border: solid;" valign="center"><?= $entry['cost']['value'] ?></td>
<td style="text-align: center; border: solid;" valign="center"><?= $entry['cost']['unit'] ?></td>
<td style="text-align: center; border: solid; border-right: thick;" colspan="2" valign="center"><?= $cost += $entry['cost']['value'] * $entry['amount']['value'] ?></td>

View File

@ -216,7 +216,7 @@ $panel ?? $panel = 'profile_panel_supplies_input_import';
<!-- <div class="dropdown-divider mx-3 mb-3"></div> -->
<?php endif ?>
<?php endforeach ?>
<a class="mx-auto text-dark fas fa-plus" title="Добавить склад" type="button" onclick="return page_profile_warehouses_write();"></a>
<a class="mx-auto text-dark fas fa-plus" type="button" onclick="return page_profile_warehouses_write();">Создать склад</a>
<?php endif ?>
<div class="dropdown-divider mt-4 mb-3"></div>
<section class="mx-3 px-2">

View File

@ -348,7 +348,7 @@ function cart_registration_entity_init(_key, wrap = 'cart_registration_entity_bo
wrap = document.getElementById(wrap);
$.ajax({
url: '/profile/panel/suppliers/requests/search',
url: '/' + _key + '/data',
type: 'post',
dataType: 'json',
data: {
@ -361,13 +361,13 @@ function cart_registration_entity_init(_key, wrap = 'cart_registration_entity_bo
if (data !== undefined) {
// Получены данные с сервера
if (data.suppliers !== undefined && data.suppliers !== null) {
if (data.data !== undefined && data.data !== null) {
// Найдены данные поставщиков
// Удаление данных в оболочке
wrap.innerHTML = null;
for (let html of cart_registration_entity_generate(data.suppliers[0])) {
for (let html of cart_registration_entity_generate(data.data)) {
// Перебор сгенерированных HTML-элементов
// Запись в документ
@ -438,7 +438,7 @@ function cart_registration_entity_generate(account) {
input_boss.setAttribute('type', 'text');
input_boss.setAttribute('placeholder', 'Иванов Иван Иванович');
input_boss.setAttribute('onchange', 'return cart_registration_block_edit(' + account._key + ', "boss", this.value);');
input_boss.value = account.boss ?? '';;
input_boss.value = account.boss ?? '';
// Инициализация ярлыка "SIMC" (телефон)
let label_simc = document.createElement('label');
@ -451,7 +451,7 @@ function cart_registration_entity_generate(account) {
input_simc.setAttribute('class', 'form-control button_clean mb-3');
input_simc.setAttribute('type', 'number');
input_simc.setAttribute('onchange', 'return cart_registration_block_edit(' + account._key + ', "simc", this.value);');
input_simc.value = '';
input_simc.value = account.simc ?? '';
// Инициализация ярлыка "MAIL"
let label_mail = document.createElement('label');
@ -607,13 +607,21 @@ function cart_registration_entity_generate(account) {
};
function cart_registration_choose(button = 'cart_registration_entity', account) {
// Инициализация элементов
let entity = document.getElementById('cart_registration_entity');
let entity_button = document.getElementById('cart_registration_entity_button');
let individual = document.getElementById('cart_registration_individual');
let individual_button = document.getElementById('cart_registration_individual_button');
// Деинициализация всех вкладок
document.getElementById('cart_registration_entity').checked =
document.getElementById('cart_registration_individual').checked = false;
entity.checked = false;
individual.checked = false;
document.getElementById('cart_registration_entity').setAttribute('onclick', 'page_profile_panel_choose(\'cart_registration_entity\')');
document.getElementById('cart_registration_individual').setAttribute('onclick', 'page_profile_panel_choose(\'cart_registration_individual\'); cart_registration_entity_init(' + account + ')');
// Запись скриптов
entity_button.setAttribute('onclick', 'cart_registration_choose(\'cart_registration_entity\', ' + account + '); cart_registration_entity_init(' + account + ')');
individual_button.setAttribute('onclick', 'cart_registration_choose(\'cart_registration_individual\', ' + account + ')');
// Удаление активного статуса
document.querySelector('[for="cart_registration_entity"]').classList.remove('active');
document.querySelector('[for="cart_registration_individual"]').classList.remove('active');