Работа над сайтом 19
This commit is contained in:
parent
5e01240938
commit
dc30b8c6bb
|
@ -98,7 +98,7 @@ $config = [
|
||||||
'<section:(product|cart)>/<catn:[^/]+>/<action:(read|write|edit|delete)>/<target:(title|catn|dscr|dmns|wght|image|cover|comm)>' => '<section>/<action>-<target>',
|
'<section:(product|cart)>/<catn:[^/]+>/<action:(read|write|edit|delete)>/<target:(title|catn|dscr|dmns|wght|image|cover|comm)>' => '<section>/<action>-<target>',
|
||||||
'profile/geolocation/<action:(init|write)>' => 'profile/geolocation-<action>',
|
'profile/geolocation/<action:(init|write)>' => 'profile/geolocation-<action>',
|
||||||
'orders' => 'order/index',
|
'orders' => 'order/index',
|
||||||
'orders/<filter:[^/]+>' => 'order/index',
|
'orders/<type:[^/]+>' => 'order/index',
|
||||||
'orders/<catn:[^/]+>/<action:(accept)>' => 'order/<action>',
|
'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)>' => 'order/supply-<action>',
|
||||||
'orders/supply/<catn:[^/]+>/<action:(read|write|edit|delete)>/<target:(stts|cost|time|comm)>' => 'order/supply-<action>-<target>',
|
'orders/supply/<catn:[^/]+>/<action:(read|write|edit|delete)>/<target:(stts|cost|time|comm)>' => 'order/supply-<action>-<target>',
|
||||||
|
|
|
@ -76,12 +76,14 @@ class AuthenticationController extends Controller
|
||||||
// Инициализация
|
// Инициализация
|
||||||
$notifications_button = $this->renderPartial('/notification/button');
|
$notifications_button = $this->renderPartial('/notification/button');
|
||||||
$notifications_panel = $this->renderPartial('/notification/panel', ['notifications_panel_full' => true]);
|
$notifications_panel = $this->renderPartial('/notification/panel', ['notifications_panel_full' => true]);
|
||||||
|
$cart_button = $this->renderPartial('/cart/button', ['cart_amount' => Order::count(supplies: true)]);
|
||||||
|
|
||||||
// Запись ответа
|
// Запись ответа
|
||||||
$return = [
|
$return = [
|
||||||
'menu' => $this->renderPartial('/account/panel/authenticated', compact(
|
'menu' => $this->renderPartial('/account/panel/authenticated', compact(
|
||||||
'notifications_button',
|
'notifications_button',
|
||||||
'notifications_panel'
|
'notifications_panel',
|
||||||
|
'cart_button'
|
||||||
)),
|
)),
|
||||||
'_csrf' => yii::$app->request->getCsrfToken()
|
'_csrf' => yii::$app->request->getCsrfToken()
|
||||||
];
|
];
|
||||||
|
|
|
@ -30,7 +30,8 @@ class CartController extends Controller
|
||||||
'roles' => ['@'],
|
'roles' => ['@'],
|
||||||
'actions' => [
|
'actions' => [
|
||||||
'index',
|
'index',
|
||||||
'edit-comm'
|
'edit-comm',
|
||||||
|
'count'
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
|
@ -195,4 +196,19 @@ class CartController extends Controller
|
||||||
return $this->redirect('/');
|
return $this->redirect('/');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function actionCount(): array|string|null
|
||||||
|
{
|
||||||
|
if (yii::$app->request->isPost) {
|
||||||
|
// POST-запрос
|
||||||
|
|
||||||
|
// Настройка типа ответа
|
||||||
|
yii::$app->response->format = Response::FORMAT_JSON;
|
||||||
|
|
||||||
|
return [
|
||||||
|
'button' => $this->renderPartial('/cart/button', ['cart_amount' => Order::count(supplies: true)]),
|
||||||
|
'_csrf' => yii::$app->request->getCsrfToken()
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,6 +9,7 @@ use yii\web\Controller;
|
||||||
use yii\web\Response;
|
use yii\web\Response;
|
||||||
|
|
||||||
use app\models\AccountForm;
|
use app\models\AccountForm;
|
||||||
|
use app\models\Order;
|
||||||
|
|
||||||
class IdentificationController extends Controller
|
class IdentificationController extends Controller
|
||||||
{
|
{
|
||||||
|
@ -38,14 +39,15 @@ class IdentificationController extends Controller
|
||||||
|
|
||||||
// Инициализация
|
// Инициализация
|
||||||
$notifications_button = $this->renderPartial('/notification/button');
|
$notifications_button = $this->renderPartial('/notification/button');
|
||||||
$notifications_panel_full = true;
|
$notifications_panel = $this->renderPartial('/notification/panel', ['notifications_panel_full' => true]);
|
||||||
$notifications_panel = $this->renderPartial('/notification/panel', compact('notifications_panel_full'));
|
$cart_button = $this->renderPartial('/cart/button', ['cart_amount' => Order::count(supplies: true)]);
|
||||||
|
|
||||||
// Запись ответа
|
// Запись ответа
|
||||||
$return = [
|
$return = [
|
||||||
'menu' => $this->renderPartial('/account/panel/authenticated', compact(
|
'menu' => $this->renderPartial('/account/panel/authenticated', compact(
|
||||||
'notifications_button',
|
'notifications_button',
|
||||||
'notifications_panel'
|
'notifications_panel',
|
||||||
|
'cart_button'
|
||||||
)),
|
)),
|
||||||
'_csrf' => yii::$app->request->getCsrfToken()
|
'_csrf' => yii::$app->request->getCsrfToken()
|
||||||
];
|
];
|
||||||
|
|
|
@ -18,6 +18,7 @@ use app\models\AccountEdgeOrder;
|
||||||
use app\models\connection\Dellin;
|
use app\models\connection\Dellin;
|
||||||
use app\models\Invoice;
|
use app\models\Invoice;
|
||||||
use app\models\Notification;
|
use app\models\Notification;
|
||||||
|
use app\models\Search;
|
||||||
use app\models\Settings;
|
use app\models\Settings;
|
||||||
use app\models\Supply;
|
use app\models\Supply;
|
||||||
use app\models\SupplyEdgeProduct;
|
use app\models\SupplyEdgeProduct;
|
||||||
|
@ -112,88 +113,171 @@ class OrderController extends Controller
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function actionIndex(string $filter = 'all')
|
public function actionIndex(string $type = 'all')
|
||||||
{
|
{
|
||||||
// Инициализация cookie
|
// Инициализация cookie
|
||||||
$cookies = yii::$app->response->cookies;
|
$cookies = yii::$app->response->cookies;
|
||||||
|
|
||||||
// Инициализация открытой панели ("Модерация", "Мои заказы")
|
// Инициализация открытой панели ("Модерация", "Мои заказы")
|
||||||
$panel = yii::$app->request->post('panel') ?? yii::$app->request->get('panel') ?? 'orders_panel_orders';
|
$window = yii::$app->request->post('window') ?? yii::$app->request->get('window') ?? 'orders_panel_orders';
|
||||||
|
|
||||||
// Инициализация фильтра по типу
|
// Инициализация данных поиска
|
||||||
if ($filter === 'last') {
|
try {
|
||||||
// Запрошено использование прошлых данных о фильтрации по типу
|
if ('@last' === $search = yii::$app->request->post('search') ?? yii::$app->request->get('search')) {
|
||||||
|
// Запрошено использование прошлых данных
|
||||||
|
|
||||||
// Чтение сохраненных cookie с данными прошлой фильтрации по типу
|
// Чтение сохраненных данных в cookie
|
||||||
$filter = $cookies->get('filter');
|
$search = $cookies->get('search');
|
||||||
|
|
||||||
|
if (empty($search)) {
|
||||||
|
// Переданы неверные данные
|
||||||
|
|
||||||
|
throw new Exception("Переданы неверные данные \$search: $search", 500);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// Запрошен поиск
|
||||||
|
|
||||||
|
if (empty($search)) {
|
||||||
|
// Переданы неверные данные
|
||||||
|
|
||||||
|
throw new Exception("Переданы неверные данные \$search: $search", 500);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Запись данных в cookie
|
||||||
|
$cookies->add(new Cookie([
|
||||||
|
'name' => 'search',
|
||||||
|
'value' => $search
|
||||||
|
]));
|
||||||
|
}
|
||||||
|
} catch (Exception $e) {
|
||||||
|
// Деинициализация (не удалять, отправляется в представление через compact)
|
||||||
|
$search = null;
|
||||||
|
} finally {
|
||||||
|
if (isset($search)) {
|
||||||
|
// Запись в историю
|
||||||
|
Search::write($search, 'order');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Инициализация открытого окна
|
||||||
|
try {
|
||||||
|
if ('@last' === $type) {
|
||||||
|
// Запрошено использование прошлых данных
|
||||||
|
|
||||||
|
// Чтение сохраненных данных в cookie
|
||||||
|
$type = $cookies->get('type');
|
||||||
|
|
||||||
|
if (empty($type)) {
|
||||||
|
// Переданы неверные данные
|
||||||
|
|
||||||
|
throw new Exception("Переданы неверные данные \$type: $type", 500);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
// Запрошена сортировка
|
// Запрошена сортировка
|
||||||
|
|
||||||
// Запись cookie с данными текущей фильтрации по типу
|
if (empty($type)) {
|
||||||
$cookies->add(new Cookie([
|
// Переданы неверные данные
|
||||||
'name' => 'filter',
|
|
||||||
'value' => $filter
|
throw new Exception("Переданы неверные данные \$type: $type", 500);
|
||||||
]));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Инициализация входных данных
|
// Запись данных в cookie
|
||||||
$from = yii::$app->request->post('from') ?? yii::$app->request->get('from');
|
$cookies->add(new Cookie([
|
||||||
$to = yii::$app->request->post('to') ?? yii::$app->request->get('to');
|
'name' => 'type',
|
||||||
|
'value' => $type
|
||||||
|
]));
|
||||||
|
}
|
||||||
|
} catch (Exception $e) {
|
||||||
|
// Реинициализация
|
||||||
|
$type = 'all';
|
||||||
|
}
|
||||||
|
|
||||||
// Инициализация фильтра по периоду
|
// Инициализация данных периода (от)
|
||||||
if (!empty($from) && !empty($to) && filter_var($from, FILTER_VALIDATE_INT) && filter_var($to, FILTER_VALIDATE_INT)) {
|
try {
|
||||||
// Данные фильтра по периоду переданы и представляют собой целые числа (подразумевается unixtime)
|
if ('@last' === $from = yii::$app->request->post('from') ?? yii::$app->request->get('from')) {
|
||||||
|
// Запрошено использование прошлых данных
|
||||||
|
|
||||||
// Конвертация типов
|
// Чтение сохраненных данных в cookie
|
||||||
$from = (int) $from;
|
$from = $cookies->get('from');
|
||||||
$to = (int) $to;
|
|
||||||
|
|
||||||
// Запись cookie с данными начала периода
|
if (empty($from) || !filter_var($from, FILTER_VALIDATE_INT)) {
|
||||||
|
// Переданы неверные данные (необходим unixtime)
|
||||||
|
|
||||||
|
throw new Exception("Переданы неверные данные \$from: $from", 500);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// Запрошен поиск
|
||||||
|
|
||||||
|
if (empty($from) || !filter_var($from, FILTER_VALIDATE_INT)) {
|
||||||
|
// Переданы неверные данные (необходим unixtime)
|
||||||
|
|
||||||
|
throw new Exception("Переданы неверные данные \$from: $from", 500);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Запись данных в cookie
|
||||||
$cookies->add(new Cookie([
|
$cookies->add(new Cookie([
|
||||||
'name' => 'from',
|
'name' => 'from',
|
||||||
'value' => $from
|
'value' => $from
|
||||||
]));
|
]));
|
||||||
|
}
|
||||||
|
} catch (Exception $e) {
|
||||||
|
// Реинициализация
|
||||||
|
$from = time() - 604800;
|
||||||
|
} finally {
|
||||||
|
// Конвертация типа
|
||||||
|
$from = (int) $from;
|
||||||
|
}
|
||||||
|
|
||||||
// Запись cookie с данными окончания периода
|
// Инициализация данных периода (до)
|
||||||
|
try {
|
||||||
|
if ('@last' === $to = yii::$app->request->post('to') ?? yii::$app->request->get('to')) {
|
||||||
|
// Запрошено использование прошлых данных
|
||||||
|
|
||||||
|
// Чтение данных в cookie
|
||||||
|
$to = $cookies->get('to');
|
||||||
|
|
||||||
|
if (empty($to) || !filter_var($to, FILTER_VALIDATE_INT)) {
|
||||||
|
// Переданы неверные данные (необходим unixtime)
|
||||||
|
|
||||||
|
throw new Exception("Переданы неверные данные \$to: $to", 500);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// Запрошен поиск
|
||||||
|
|
||||||
|
if (empty($to) || !filter_var($to, FILTER_VALIDATE_INT)) {
|
||||||
|
// Переданы неверные данные (необходим unixtime)
|
||||||
|
|
||||||
|
throw new Exception("Переданы неверные данные \$to: $to", 500);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Запись данных в cookie
|
||||||
$cookies->add(new Cookie([
|
$cookies->add(new Cookie([
|
||||||
'name' => 'to',
|
'name' => 'to',
|
||||||
'value' => $to
|
'value' => $to
|
||||||
]));
|
]));
|
||||||
} else {
|
|
||||||
// Некоректные данные или их отсутствие
|
|
||||||
|
|
||||||
// Чтение сохраненных cookie с данными прошлой фильтрации по периоду (начало)
|
|
||||||
$from = $cookies->get('from');
|
|
||||||
|
|
||||||
// Чтение сохраненных cookie с данными прошлой фильтрации по периоду (конец)
|
|
||||||
$to = $cookies->get('to');
|
|
||||||
|
|
||||||
if (empty($from) || empty($to) || filter_var($from, FILTER_VALIDATE_INT) || filter_var($to, FILTER_VALIDATE_INT)) {
|
|
||||||
// Каких-то cookie не оказалось, либо данные в них не подходящие, либо это первый запрос, но без фильтрации по периоду
|
|
||||||
|
|
||||||
// Реинициализация на стандартные параметры (неделя)
|
|
||||||
$from = time() - 604800;
|
|
||||||
$to = time();
|
|
||||||
} else {
|
|
||||||
// Данные в cookie найдены и подходят для выполнения
|
|
||||||
|
|
||||||
// Конвертация типов
|
|
||||||
$from = (int) $from;
|
|
||||||
$to = (int) $to;
|
|
||||||
}
|
}
|
||||||
|
} catch (Exception $e) {
|
||||||
|
// Реинициализация
|
||||||
|
$to = time();
|
||||||
|
} finally {
|
||||||
|
// Конвертация типа
|
||||||
|
$to = (int) $to;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Инициализация заказов
|
// Инициализация заказов
|
||||||
$orders = Order::search(
|
$orders = Order::search(
|
||||||
type: $filter,
|
type: $type,
|
||||||
limit: 10,
|
limit: 10,
|
||||||
page: 1,
|
page: 1,
|
||||||
select: '{account_edge_order, order}',
|
select: '{account_edge_order, order}',
|
||||||
supplies: true,
|
supplies: true,
|
||||||
from: $from,
|
from: $from,
|
||||||
to: $to
|
to: $to,
|
||||||
|
search: $search
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// Фильтрация
|
||||||
|
|
||||||
if (
|
if (
|
||||||
!yii::$app->user->isGuest
|
!yii::$app->user->isGuest
|
||||||
&& yii::$app->user->identity->type === 'administrator'
|
&& yii::$app->user->identity->type === 'administrator'
|
||||||
|
@ -221,7 +305,8 @@ class OrderController extends Controller
|
||||||
$to = DateTime::createFromFormat('U', (string) $to)->format('Y-m-d');
|
$to = DateTime::createFromFormat('U', (string) $to)->format('Y-m-d');
|
||||||
|
|
||||||
return [
|
return [
|
||||||
'main' => $this->renderPartial('/orders/index', compact('orders', 'moderator_orders', 'from', 'to', 'panel')),
|
'main' => $this->renderPartial('/orders/index', compact('orders', 'moderator_orders', 'search', 'from', 'to', 'window')
|
||||||
|
+ ['panel' => $this->renderPartial('/orders/search/panel', ['response' => $orders[0]['supplies']])]),
|
||||||
'title' => 'Заказы',
|
'title' => 'Заказы',
|
||||||
'redirect' => '/orders',
|
'redirect' => '/orders',
|
||||||
'_csrf' => yii::$app->request->getCsrfToken()
|
'_csrf' => yii::$app->request->getCsrfToken()
|
||||||
|
|
|
@ -60,12 +60,14 @@ class RegistrationController extends Controller
|
||||||
// Инициализация
|
// Инициализация
|
||||||
$notifications_button = $this->renderPartial('/notification/button');
|
$notifications_button = $this->renderPartial('/notification/button');
|
||||||
$notifications_panel = $this->renderPartial('/notification/panel', ['notifications_panel_full' => true]);
|
$notifications_panel = $this->renderPartial('/notification/panel', ['notifications_panel_full' => true]);
|
||||||
|
$cart_button = $this->renderPartial('/cart/button', ['cart_amount' => Order::count(supplies: true)]);
|
||||||
|
|
||||||
// Запись ответа
|
// Запись ответа
|
||||||
$return = [
|
$return = [
|
||||||
'menu' => $this->renderPartial('/account/panel/authenticated', compact(
|
'menu' => $this->renderPartial('/account/panel/authenticated', compact(
|
||||||
'notifications_button',
|
'notifications_button',
|
||||||
'notifications_panel'
|
'notifications_panel',
|
||||||
|
'cart_button'
|
||||||
)),
|
)),
|
||||||
'_csrf' => yii::$app->request->getCsrfToken()
|
'_csrf' => yii::$app->request->getCsrfToken()
|
||||||
];
|
];
|
||||||
|
|
|
@ -28,7 +28,7 @@ class Order extends Document implements DocumentInterface
|
||||||
/**
|
/**
|
||||||
* Поставки для записи
|
* Поставки для записи
|
||||||
*/
|
*/
|
||||||
public array $supplies;
|
public array|int $supplies;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Имя коллекции
|
* Имя коллекции
|
||||||
|
@ -261,8 +261,18 @@ class Order extends Document implements DocumentInterface
|
||||||
*
|
*
|
||||||
* @todo Привести в порядок
|
* @todo Привести в порядок
|
||||||
*/
|
*/
|
||||||
public static function search(Account|string $account = null, string $type = 'current', int $limit = 1, int $page = 1, string $select = null, bool $supplies = false, int|null $from = null, int|null $to = null): self|array|null
|
public static function search(
|
||||||
{
|
Account|string $account = null,
|
||||||
|
string $type = 'current',
|
||||||
|
string|null $search = null,
|
||||||
|
int $limit = 1,
|
||||||
|
int $page = 1,
|
||||||
|
string|null $select = null,
|
||||||
|
bool $supplies = false,
|
||||||
|
int|null $from = null,
|
||||||
|
int|null $to = null,
|
||||||
|
bool $count = false
|
||||||
|
): self|int|array|null {
|
||||||
// Инициализация аккаунта
|
// Инициализация аккаунта
|
||||||
if (empty($account) && isset(yii::$app->user->identity)) {
|
if (empty($account) && isset(yii::$app->user->identity)) {
|
||||||
// Данные не переданы
|
// Данные не переданы
|
||||||
|
@ -322,7 +332,7 @@ class Order extends Document implements DocumentInterface
|
||||||
$where = "edge._to == order._id";
|
$where = "edge._to == order._id";
|
||||||
}
|
}
|
||||||
|
|
||||||
// Запрос на поиск заказов
|
// Поиск заказов в базе данных
|
||||||
$return = self::searchByEdge(
|
$return = self::searchByEdge(
|
||||||
from: 'account',
|
from: 'account',
|
||||||
to: 'order',
|
to: 'order',
|
||||||
|
@ -333,9 +343,16 @@ class Order extends Document implements DocumentInterface
|
||||||
offset: $offset,
|
offset: $offset,
|
||||||
sort: ['DESC'],
|
sort: ['DESC'],
|
||||||
select: $select,
|
select: $select,
|
||||||
direction: 'INBOUND'
|
direction: 'INBOUND',
|
||||||
|
count: !$supplies && $count ? true : false
|
||||||
);
|
);
|
||||||
|
|
||||||
|
if (!$supplies && $count) {
|
||||||
|
// Запрошен подсчет заказов
|
||||||
|
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
if ($supplies) {
|
if ($supplies) {
|
||||||
// Запрошен поиск поставок
|
// Запрошен поиск поставок
|
||||||
|
|
||||||
|
@ -354,7 +371,13 @@ class Order extends Document implements DocumentInterface
|
||||||
}
|
}
|
||||||
|
|
||||||
// Чтение полного содержания
|
// Чтение полного содержания
|
||||||
$container['supplies'] = $buffer->content(30);
|
$container['supplies'] = $buffer->content($limit, $page, $search, count: $count);
|
||||||
|
|
||||||
|
if ($count) {
|
||||||
|
// Запрошен подсчет поставок
|
||||||
|
|
||||||
|
return $container['supplies'];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -378,11 +401,19 @@ class Order extends Document implements DocumentInterface
|
||||||
* @todo В будущем возможно заказ не только поставок реализовать
|
* @todo В будущем возможно заказ не только поставок реализовать
|
||||||
* Переписать реестр и проверку на дубликаты, не понимаю как они работают
|
* Переписать реестр и проверку на дубликаты, не понимаю как они работают
|
||||||
*/
|
*/
|
||||||
public function content(int $limit = 1, int $page = 1): Supply|array|null
|
public function content(int $limit = 1, int $page = 1, string|null $search = null, bool $count = false): Supply|int|array|null
|
||||||
{
|
{
|
||||||
// Генерация сдвига по запрашиваемым данным (пагинация)
|
// Генерация сдвига по запрашиваемым данным (пагинация)
|
||||||
$offset = $limit * ($page - 1);
|
$offset = $limit * ($page - 1);
|
||||||
|
|
||||||
|
if (!empty($search)) {
|
||||||
|
// Передан поиск по продуктам в заказах
|
||||||
|
|
||||||
|
// Добавить ограничитель
|
||||||
|
|
||||||
|
$limit = 9999;
|
||||||
|
}
|
||||||
|
|
||||||
// Поиск по рёбрам: ЗАКАЗ -> ПОСТАВКА
|
// Поиск по рёбрам: ЗАКАЗ -> ПОСТАВКА
|
||||||
$connections = Supply::searchByEdge(
|
$connections = Supply::searchByEdge(
|
||||||
from: 'order',
|
from: 'order',
|
||||||
|
@ -397,10 +428,18 @@ class Order extends Document implements DocumentInterface
|
||||||
where: 'edge._to == supply._id',
|
where: 'edge._to == supply._id',
|
||||||
limit: $limit,
|
limit: $limit,
|
||||||
offset: $offset,
|
offset: $offset,
|
||||||
|
filterStart: ['catn' => $search],
|
||||||
direction: 'INBOUND',
|
direction: 'INBOUND',
|
||||||
select: '{supply, order_edge_supply}'
|
select: '{supply, order_edge_supply}',
|
||||||
|
count: $count
|
||||||
);
|
);
|
||||||
|
|
||||||
|
if ($count) {
|
||||||
|
// Запрошен подсчет
|
||||||
|
|
||||||
|
return $connections;
|
||||||
|
}
|
||||||
|
|
||||||
// Рекурсивная фильтрации соединений
|
// Рекурсивная фильтрации соединений
|
||||||
recursive_connections_filtration:
|
recursive_connections_filtration:
|
||||||
|
|
||||||
|
@ -838,4 +877,17 @@ class Order extends Document implements DocumentInterface
|
||||||
// Отправка
|
// Отправка
|
||||||
return Notification::_write($text, type: $type);
|
return Notification::_write($text, type: $type);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Посчитать количство заказов или количество поставок в заказах
|
||||||
|
*
|
||||||
|
* @param int $limit Ограничение
|
||||||
|
* @param bool $supplies Считать поставки в активном заказе (иначе - заказы)
|
||||||
|
*
|
||||||
|
* @return int Количество
|
||||||
|
*/
|
||||||
|
public static function count(int $limit = 500, bool $supplies = false): int
|
||||||
|
{
|
||||||
|
return self::search(supplies: $supplies, type: $supplies ? 'current' : 'all', limit: $limit, count: true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,6 +35,7 @@ class Search extends Document
|
||||||
parent::attributes(),
|
parent::attributes(),
|
||||||
[
|
[
|
||||||
'text',
|
'text',
|
||||||
|
'type',
|
||||||
'ipv4',
|
'ipv4',
|
||||||
'head'
|
'head'
|
||||||
]
|
]
|
||||||
|
@ -50,6 +51,7 @@ class Search extends Document
|
||||||
parent::attributeLabels(),
|
parent::attributeLabels(),
|
||||||
[
|
[
|
||||||
'text' => 'Текст',
|
'text' => 'Текст',
|
||||||
|
'type' => 'Тип',
|
||||||
'ipv4' => 'IPv4',
|
'ipv4' => 'IPv4',
|
||||||
'head' => 'Заголовки'
|
'head' => 'Заголовки'
|
||||||
]
|
]
|
||||||
|
@ -86,9 +88,10 @@ class Search extends Document
|
||||||
* Запись
|
* Запись
|
||||||
*
|
*
|
||||||
* @param string $text Текст запроса
|
* @param string $text Текст запроса
|
||||||
|
* @param string $type Тип запроса
|
||||||
* @param Account|null $account Пользователь совершивший запрос
|
* @param Account|null $account Пользователь совершивший запрос
|
||||||
*/
|
*/
|
||||||
public static function write(string $text, Account|null $account = null): ?self
|
public static function write(string $text, string $type = 'general', Account|null $account = null): ?self
|
||||||
{
|
{
|
||||||
// Инициализация
|
// Инициализация
|
||||||
$vertex = new self;
|
$vertex = new self;
|
||||||
|
@ -96,6 +99,7 @@ class Search extends Document
|
||||||
|
|
||||||
// Настройки
|
// Настройки
|
||||||
$vertex->text = $text;
|
$vertex->text = $text;
|
||||||
|
$vertex->type = $type;
|
||||||
|
|
||||||
if ($vertex->save()) {
|
if ($vertex->save()) {
|
||||||
// Поиск записан
|
// Поиск записан
|
||||||
|
|
|
@ -16,11 +16,6 @@ trait SearchByEdge
|
||||||
* Поиск через связи рёбрами с аккаунтом
|
* Поиск через связи рёбрами с аккаунтом
|
||||||
*
|
*
|
||||||
* Аргумент $asArray и его реализацию пришлось добавить чтобы не переписывать кучу кода
|
* Аргумент $asArray и его реализацию пришлось добавить чтобы не переписывать кучу кода
|
||||||
*
|
|
||||||
* @param string $id Идентификатор пользователя
|
|
||||||
* @param int $limit Количество
|
|
||||||
* @param int $offset Сдвиг
|
|
||||||
* @param string $sort Сортировка
|
|
||||||
*/
|
*/
|
||||||
public static function searchByEdge(
|
public static function searchByEdge(
|
||||||
string $from,
|
string $from,
|
||||||
|
@ -37,9 +32,11 @@ trait SearchByEdge
|
||||||
array|null $let = [],
|
array|null $let = [],
|
||||||
string|array $select = null,
|
string|array $select = null,
|
||||||
callable|null $handle = null,
|
callable|null $handle = null,
|
||||||
|
array|null $filterStart = null,
|
||||||
array $params = [],
|
array $params = [],
|
||||||
bool $asArray = true,
|
bool $asArray = true,
|
||||||
bool $debug = false
|
bool $debug = false,
|
||||||
|
bool $count = false
|
||||||
): mixed {
|
): mixed {
|
||||||
$subquery = static::find()
|
$subquery = static::find()
|
||||||
->params($params)
|
->params($params)
|
||||||
|
@ -65,6 +62,12 @@ trait SearchByEdge
|
||||||
$query->let(...$let);
|
$query->let(...$let);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!empty($filterStart)) {
|
||||||
|
// Переданы дополнительные условия фильтрации
|
||||||
|
|
||||||
|
$query->filter($filterStart, 'START_SENSETIVE');
|
||||||
|
}
|
||||||
|
|
||||||
// Инициализация
|
// Инициализация
|
||||||
$request = $query
|
$request = $query
|
||||||
->foreach($foreach)
|
->foreach($foreach)
|
||||||
|
@ -80,7 +83,11 @@ trait SearchByEdge
|
||||||
}
|
}
|
||||||
|
|
||||||
// Запрос
|
// Запрос
|
||||||
if (isset($handle)) {
|
if ($count) {
|
||||||
|
// Запрошен подсчет
|
||||||
|
|
||||||
|
return $query->count();
|
||||||
|
} else if (isset($handle)) {
|
||||||
// Передана функция для постобработки
|
// Передана функция для постобработки
|
||||||
|
|
||||||
return $handle($request);
|
return $handle($request);
|
||||||
|
|
|
@ -6,9 +6,9 @@ use yii;
|
||||||
|
|
||||||
?>
|
?>
|
||||||
|
|
||||||
<?= $notifications_button ?>
|
|
||||||
<?= $notifications_panel ?>
|
<?= $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>
|
<?= $notifications_button ?>
|
||||||
|
<?= $cart_button ?>
|
||||||
<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>
|
<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">
|
<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>
|
<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>
|
||||||
|
|
|
@ -0,0 +1,18 @@
|
||||||
|
<a id="cart_button" class="mr-2 h-100 text-dark d-flex" title="Корзина" href="/cart" onclick="return page_cart();">
|
||||||
|
<?php
|
||||||
|
if (empty($cart_amount) || $cart_amount < 1) {
|
||||||
|
// Новые уведомления не найдены
|
||||||
|
|
||||||
|
echo <<<HTML
|
||||||
|
<i class="mx-2 fas fa-shopping-cart"></i>
|
||||||
|
HTML;
|
||||||
|
} else {
|
||||||
|
// Новые уведомления найдены
|
||||||
|
|
||||||
|
echo <<<HTML
|
||||||
|
<small class="ml-2 mr-1 my-auto"><b>$cart_amount</b></small>
|
||||||
|
<i class="mr-2 my-auto fas fa-shopping-cart cart_button_active"></i>
|
||||||
|
HTML;
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
</a>
|
|
@ -82,7 +82,7 @@ AppAsset::register($this);
|
||||||
<div id="searchPanel" class="col">
|
<div id="searchPanel" class="col">
|
||||||
<form class="d-flex catalog_search" onsubmit="return false;">
|
<form class="d-flex catalog_search" onsubmit="return false;">
|
||||||
<div class="position-relative col-sm-8 col-lg-10 px-0">
|
<div class="position-relative col-sm-8 col-lg-10 px-0">
|
||||||
<input id="search_line" type="text" class="form-control button_clean col-12 catalog_search_line button_clean" placeholder="Введите номер запчасти, например: 45223503481" oninput="$('#search_line').dropdown('hide'); product_search(this.value);" data-toggle="dropdown" aria-expanded="false" autocomplete="off">
|
<input id="search_line" type="text" class="form-control button_clean col-12 catalog_search_line" placeholder="Введите номер запчасти, например: 45223503481" oninput="$('#search_line').dropdown('hide'); return product_search(this.value);" data-toggle="dropdown" aria-expanded="false" autocomplete="off">
|
||||||
<?php
|
<?php
|
||||||
// Сделать системные настройки и по ним работать
|
// Сделать системные настройки и по ним работать
|
||||||
$search_panel = yii::$app->controller->renderPartial('/search/panel', ['history' => true]);
|
$search_panel = yii::$app->controller->renderPartial('/search/panel', ['history' => true]);
|
||||||
|
|
|
@ -1,17 +1,17 @@
|
||||||
<a id="notification_button" class="text-dark d-flex h-100 mr-2" title="Уведомления" role="button" data-toggle="dropdown" data-offset="-100%p + 100%" onclick="return notification_stream();">
|
<a id="notification_button" class="mr-2 h-100 text-dark d-flex" title="Уведомления" role="button" data-toggle="dropdown" data-offset="-100%p + 100%" onclick="return notification_stream();">
|
||||||
<?php
|
<?php
|
||||||
if (empty($notifications_new_amount) || $notifications_new_amount < 1) {
|
if (empty($notifications_new_amount) || $notifications_new_amount < 1) {
|
||||||
// Новые уведомления не найдены
|
// Новые уведомления не найдены
|
||||||
|
|
||||||
echo <<<HTML
|
echo <<<HTML
|
||||||
<i class="fas fa-bell my-auto mx-2"></i>
|
<i class="mx-2 fas fa-bell my-auto"></i>
|
||||||
HTML;
|
HTML;
|
||||||
} else {
|
} else {
|
||||||
// Новые уведомления найдены
|
// Новые уведомления найдены
|
||||||
|
|
||||||
echo <<<HTML
|
echo <<<HTML
|
||||||
<small class="my-auto ml-2 mr-1"><b>$notifications_new_amount</b></small>
|
<small class="ml-2 mr-1 my-auto"><b>$notifications_new_amount</b></small>
|
||||||
<i class="fas fa-bell my-auto mr-2 notification_button_active"></i>
|
<i class="mr-2 my-auto fas fa-bell notification_button_active"></i>
|
||||||
HTML;
|
HTML;
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
|
|
|
@ -10,16 +10,16 @@ use app\models\Order;
|
||||||
use app\models\OrderEdgeSupply;
|
use app\models\OrderEdgeSupply;
|
||||||
|
|
||||||
// Инициализация открытой панели
|
// Инициализация открытой панели
|
||||||
if (empty($panel)) {
|
if (empty($window)) {
|
||||||
if (
|
if (
|
||||||
!yii::$app->user->isGuest
|
!yii::$app->user->isGuest
|
||||||
&& yii::$app->user->identity->type === 'administrator'
|
&& yii::$app->user->identity->type === 'administrator'
|
||||||
|| yii::$app->user->identity->type === 'moderator'
|
|| yii::$app->user->identity->type === 'moderator'
|
||||||
) {
|
) {
|
||||||
|
|
||||||
$panel ?? $panel = 'orders_panel_moderation';
|
$window ?? $window = 'orders_panel_moderation';
|
||||||
} else {
|
} else {
|
||||||
$panel ?? $panel = 'orders_panel_orders';
|
$window ?? $window = 'orders_panel_orders';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -36,7 +36,7 @@ if (empty($panel)) {
|
||||||
<label class="btn button_white mb-0 mr-2" for="orders_panel_moderation">Модерация</label>
|
<label class="btn button_white mb-0 mr-2" for="orders_panel_moderation">Модерация</label>
|
||||||
<label class="btn button_white mb-0" for="orders_panel_orders">Мои заказы</label>
|
<label class="btn button_white mb-0" for="orders_panel_orders">Мои заказы</label>
|
||||||
</div>
|
</div>
|
||||||
<input type="radio" id="orders_panel_moderation" name="main_panel" <?= $panel === 'orders_panel_moderation' ? 'checked' : null ?> />
|
<input type="radio" id="orders_panel_moderation" name="main_panel" <?= $window === 'orders_panel_moderation' ? 'checked' : null ?> />
|
||||||
<article>
|
<article>
|
||||||
<div class="orders_panel_moderation_menu mb-3">
|
<div class="orders_panel_moderation_menu mb-3">
|
||||||
<label class="btn btn-sm button_white mb-0 mr-2" for="orders_panel_moderation_all">Все</label>
|
<label class="btn btn-sm button_white mb-0 mr-2" for="orders_panel_moderation_all">Все</label>
|
||||||
|
@ -122,7 +122,7 @@ if (empty($panel)) {
|
||||||
|
|
||||||
<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'] ?>);">
|
<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 ?>" />
|
<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 ?>
|
<p id="<?= $supply['catn'] ?>_supply_stts_indicator" class="col d-flex text-dark"><?= $product['catn'] . ' x' . $amount['auto'] ?>
|
||||||
<?php if (Order::checkSuppliesStts($order_edge_supply)) : ?>
|
<?php if (Order::checkSuppliesStts($order_edge_supply)) : ?>
|
||||||
<span id="<?= $supply['catn'] ?>_supply_stts_indicator_icon" class="ml-auto my-auto fas fa-check"></span>
|
<span id="<?= $supply['catn'] ?>_supply_stts_indicator_icon" class="ml-auto my-auto fas fa-check"></span>
|
||||||
<?php endif ?>
|
<?php endif ?>
|
||||||
|
@ -176,28 +176,41 @@ if (empty($panel)) {
|
||||||
<?php endif ?>
|
<?php endif ?>
|
||||||
</article>
|
</article>
|
||||||
|
|
||||||
<input type="radio" id="orders_panel_orders" name="main_panel" <?= $panel === 'orders_panel_orders' ? 'checked' : null ?> />
|
<input type="radio" id="orders_panel_orders" name="main_panel" <?= $window === 'orders_panel_orders' ? 'checked' : null ?> />
|
||||||
<?php endif ?>
|
<?php endif ?>
|
||||||
|
|
||||||
<article class="page_order_panel mt-3 py-3 px-4 rounded <?= $account_type ?? false ? '' : 'd-block'; ?>">
|
<article class="page_order_panel mt-3 py-3 px-4 rounded <?= $account_type ?? false ? '' : 'd-block'; ?>">
|
||||||
<div class="row mt-2 mb-2">
|
<div class="row mt-2 mb-2">
|
||||||
<h4 class="col ml-4"><i class="fas fa-list mr-2"></i>Заказы</h4>
|
<h4 class="col ml-4"><i class="fas fa-list mr-2"></i>Заказы</h4>
|
||||||
<div class="col-auto orders_panel_menu ml-auto text-right">
|
<div class="col-auto orders_panel_menu ml-auto text-right">
|
||||||
<a class="btn btn-sm button_white button_clean font-weight-bold mb-0 mr-2" type="button" onclick="return orders_read('all');">Все</a>
|
<a class="btn btn-sm button_white button_clean font-weight-bold mb-0 mr-2" type="button" onclick="return orders_read('@last', 'all');">Все</a>
|
||||||
<a class="btn btn-sm button_white button_clean font-weight-bold mb-0 mr-2" type="button" onclick="return orders_read('requested');">Запрошенные</a>
|
<a class="btn btn-sm button_white button_clean font-weight-bold mb-0 mr-2" type="button" onclick="return orders_read('@last', 'requested');">Запрошенные</a>
|
||||||
<a class="btn btn-sm button_white button_clean font-weight-bold mb-0 mr-2" type="button" onclick="return orders_read('accepted');">Активные</a>
|
<a class="btn btn-sm button_white button_clean font-weight-bold mb-0 mr-2" type="button" onclick="return orders_read('@last', 'accepted');">Активные</a>
|
||||||
<a class="btn btn-sm button_white button_clean font-weight-bold mb-0" type="button" onclick="return orders_read('completed');">Завершенные</a>
|
<a class="btn btn-sm button_white button_clean font-weight-bold mb-0" type="button" onclick="return orders_read('@last', 'completed');">Завершенные</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row mb-4">
|
<div class="row mb-4 px-3">
|
||||||
|
<div class="col-3 p-0 form-control form-control-sm d-flex align-items-center">
|
||||||
|
<i id="orders_search_line_icon" class="ml-2 fas fa-search"></i><input id="orders_search_line" type="text" class="h-100 pr-3 my-auto form_clean_full" value="<?= $search ?? null ?>" placeholder="Номер запчасти" oninput="$('#orders_search_line').dropdown('hide'); return orders_read(this.value);" data-toggle="dropdown" aria-expanded="false" autocomplete="off">
|
||||||
|
<?php
|
||||||
|
// Сделать системные настройки и по ним работать
|
||||||
|
$orders_search_panel = $panel ?? yii::$app->controller->renderPartial('/orders/search/panel', ['history' => true]);
|
||||||
|
|
||||||
|
echo <<<HTML
|
||||||
|
<div id="orders_search_line_window" class="dropdown-menu w-100" aria-labelledby="orders_search_line">
|
||||||
|
$orders_search_panel
|
||||||
|
</div>
|
||||||
|
HTML;
|
||||||
|
?>
|
||||||
|
</div>
|
||||||
<small class="ml-auto d-flex">
|
<small class="ml-auto d-flex">
|
||||||
<a class="btn btn-sm button_white button_clean mb-0 mr-2 l" type="button" onclick="return orders_read('last','<?= time() - 86400 ?>', '<?= time() ?>');">День</a>
|
<a class="btn btn-sm button_white button_clean mb-0 mr-2 l" type="button" onclick="return orders_read('@last', '@last', '<?= time() - 86400 ?>', '<?= time() ?>');">День</a>
|
||||||
<a class="btn btn-sm button_white button_clean mb-0 mr-2" type="button" onclick="return orders_read('last', '<?= time() - 604800 ?>', '<?= time() ?>');">Неделя</a>
|
<a class="btn btn-sm button_white button_clean mb-0 mr-2" type="button" onclick="return orders_read('@last', '@last', '<?= time() - 604800 ?>', '<?= time() ?>');">Неделя</a>
|
||||||
<a class="btn btn-sm button_white button_clean mb-0 mr-2" type="button" onclick="return orders_read('last', '<?= time() - 2592000 ?>', '<?= time() ?>');">Месяц</a>
|
<a class="btn btn-sm button_white button_clean mb-0 mr-2" type="button" onclick="return orders_read('@last', '@last', '<?= time() - 2592000 ?>', '<?= time() ?>');">Месяц</a>
|
||||||
<a class="btn btn-sm button_white button_clean mb-0 mr-2" type="button" onclick="return orders_read('last', '<?= time() - 31536000 ?>', '<?= time() ?>');">Год</a>
|
<a class="btn btn-sm button_white button_clean mb-0 mr-2" type="button" onclick="return orders_read('@last', '@last', '<?= time() - 31536000 ?>', '<?= time() ?>');">Год</a>
|
||||||
</small>
|
</small>
|
||||||
<div class="ml-2 mr-3 px-0 w-auto form-control form-control-sm text-center">
|
<div class="col-auto ml-2 w-auto form-control form-control-sm">
|
||||||
<input id="orders_period_calendar" class="pl-0 form_clean_full text-center" type="text" />
|
<input id="orders_period_calendar" class="pl-0 h-100 form_clean_full text-center" type="text" /><i class="ml-2 fas fa-calendar-alt my-auto"></i>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col mb-4 list rounded">
|
<div class="col mb-4 list rounded">
|
||||||
|
@ -304,9 +317,9 @@ if (empty($panel)) {
|
||||||
// Рассчет времени из данных поставки
|
// Рассчет времени из данных поставки
|
||||||
|
|
||||||
try {
|
try {
|
||||||
$time_converted = DateTime::createFromFormat('Y-m-d H:i:s', $delivery['orderDates']['giveoutFromOspReceiver'])->getTimestamp();
|
$time_converted = DateTime::createFromFormat('Y-m-d H:i:s', $delivery['auto']['orderDates']['giveoutFromOspReceiver'])->getTimestamp();
|
||||||
} catch (Exception $e) {
|
} catch (Exception $e) {
|
||||||
$time_converted = DateTime::createFromFormat('Y-m-d', $delivery['orderDates']['arrivalToOspReceiver'])->getTimestamp();
|
$time_converted = DateTime::createFromFormat('Y-m-d', $delivery['auto']['orderDates']['arrivalToOspReceiver'])->getTimestamp();
|
||||||
}
|
}
|
||||||
// $time = (ceil(($time_converted - time()) / 60 / 60 / 24) + 1) . ' дн';
|
// $time = (ceil(($time_converted - time()) / 60 / 60 / 24) + 1) . ' дн';
|
||||||
$date = date('d.m.Y', $time_converted);
|
$date = date('d.m.Y', $time_converted);
|
||||||
|
@ -315,7 +328,7 @@ if (empty($panel)) {
|
||||||
|
|
||||||
// Инициализация стоимости
|
// Инициализация стоимости
|
||||||
if (isset($part['cost'])) $cost_html = '<span class="m-auto">' . ($cost = $part['cost']) . ' <small>' . $currency . '</small></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>';
|
else $cost_html = '<span class="m-auto">' . ($cost = $cost['auto']) . ' <small>' . $currency . '</small></span>';
|
||||||
}
|
}
|
||||||
|
|
||||||
// Инициализация статуса связи поставки
|
// Инициализация статуса связи поставки
|
||||||
|
@ -333,7 +346,7 @@ if (empty($panel)) {
|
||||||
<div class="col-2">{$supply['catn']}</div>
|
<div class="col-2">{$supply['catn']}</div>
|
||||||
<div class="col-3 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">$date_html</div>
|
||||||
<div class="col-2">$amount</div>
|
<div class="col-2">{$amount['auto']}</div>
|
||||||
<div class="col-2 d-flex">$cost_html</div>
|
<div class="col-2 d-flex">$cost_html</div>
|
||||||
</div>
|
</div>
|
||||||
HTML;
|
HTML;
|
||||||
|
|
|
@ -0,0 +1,53 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
use app\models\Search;
|
||||||
|
|
||||||
|
if (isset($history) && $history) {
|
||||||
|
// Отображение истории
|
||||||
|
|
||||||
|
if (yii::$app->user->isGuest) {
|
||||||
|
// Не аутентифицирован
|
||||||
|
|
||||||
|
// В будущем выводить историю из cookie
|
||||||
|
|
||||||
|
echo <<<HTML
|
||||||
|
<p class="m-0 py-2 d-flex justify-content-center">Войдите для просмотра истории поиска</p>
|
||||||
|
HTML;
|
||||||
|
} else if ($rows = Search::searchByEdge(
|
||||||
|
from: 'account',
|
||||||
|
to: 'search',
|
||||||
|
sort: ['DESC'],
|
||||||
|
where: ['search.type' => 'order']
|
||||||
|
)) {
|
||||||
|
// История поиска существует
|
||||||
|
|
||||||
|
foreach ($rows as $row) {
|
||||||
|
// Инициализация
|
||||||
|
$time = $row->jrnl;
|
||||||
|
$date = empty($time) ? '' : date('d.m.y', end($time)['date']);
|
||||||
|
|
||||||
|
echo <<<HTML
|
||||||
|
<a class="dropdown-item d-flex button_white text-dark" href="/search?type=product&q=$row->text">$row->text<span class="ml-auto">$date</span></a>
|
||||||
|
HTML;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (isset($response) && $response) {
|
||||||
|
// Ответ получен
|
||||||
|
|
||||||
|
foreach ($response as $row) {
|
||||||
|
// Перебор найденных данных
|
||||||
|
|
||||||
|
$catn = $row['supply']['catn'];
|
||||||
|
|
||||||
|
echo <<<HTML
|
||||||
|
<a class="dropdown-item button_white text-dark" href="/product/$catn">$catn</a>
|
||||||
|
HTML;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
echo <<<HTML
|
||||||
|
<p class="m-0 py-2 d-flex justify-content-center">Ничего не найдено</p>
|
||||||
|
HTML;
|
||||||
|
}
|
||||||
|
?>
|
|
@ -18,7 +18,8 @@ if (isset($history) && $history) {
|
||||||
} else if ($rows = Search::searchByEdge(
|
} else if ($rows = Search::searchByEdge(
|
||||||
from: 'account',
|
from: 'account',
|
||||||
to: 'search',
|
to: 'search',
|
||||||
sort: ['DESC']
|
sort: ['DESC'],
|
||||||
|
where: ['search.type' => 'general']
|
||||||
)) {
|
)) {
|
||||||
// История поиска существует
|
// История поиска существует
|
||||||
|
|
||||||
|
|
|
@ -149,6 +149,12 @@ nav {
|
||||||
background-color: #d7d4dd;
|
background-color: #d7d4dd;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#notification_button .notification_button_active, #cart_button .cart_button_active {
|
||||||
|
/* color: #123EAB; */
|
||||||
|
color: #0010ff;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@media (max-width: 400px) {
|
@media (max-width: 400px) {
|
||||||
.catalog_search {
|
.catalog_search {
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
|
|
|
@ -1,8 +1,3 @@
|
||||||
#notification_button .notification_button_active {
|
|
||||||
/* color: #123EAB; */
|
|
||||||
color: #0010ff;
|
|
||||||
}
|
|
||||||
|
|
||||||
#notifications_popup_wrap>.notification {
|
#notifications_popup_wrap>.notification {
|
||||||
min-height : 60px;
|
min-height : 60px;
|
||||||
border : 1px solid #a39bb1;
|
border : 1px solid #a39bb1;
|
||||||
|
|
|
@ -66,3 +66,11 @@
|
||||||
margin-left: 0;
|
margin-left: 0;
|
||||||
opacity: 0;
|
opacity: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#page_orders article #orders_search_line_icon {
|
||||||
|
position: absolute;
|
||||||
|
}
|
||||||
|
|
||||||
|
#page_orders article #orders_search_line {
|
||||||
|
padding-left: 13%;
|
||||||
|
}
|
||||||
|
|
|
@ -18,6 +18,9 @@ function cart_write(supply_id, delivery_type, amount = 1) {
|
||||||
error: cart_response_error
|
error: cart_response_error
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Пересчет количества товаров в корзине для кнопки в меню
|
||||||
|
setTimeout(cart_count, 500);
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -36,6 +39,9 @@ function cart_delete() {
|
||||||
error: cart_response_error
|
error: cart_response_error
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Пересчет количества товаров в корзине для кнопки в меню
|
||||||
|
setTimeout(cart_count, 500);
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -54,6 +60,9 @@ function cart_request() {
|
||||||
error: cart_response_error
|
error: cart_response_error
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Пересчет количества товаров в корзине для кнопки в меню
|
||||||
|
setTimeout(cart_count, 500);
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -134,6 +143,9 @@ function cart_list_delete(target, amount = 0) {
|
||||||
// Реинициализация
|
// Реинициализация
|
||||||
document.getElementById('cart_list_action').value = 'none';
|
document.getElementById('cart_list_action').value = 'none';
|
||||||
|
|
||||||
|
// Пересчет количества товаров в корзине для кнопки в меню
|
||||||
|
setTimeout(cart_count, 500);
|
||||||
|
|
||||||
// Пересчитывание стоимости
|
// Пересчитывание стоимости
|
||||||
cart_cost_calculate();
|
cart_cost_calculate();
|
||||||
|
|
||||||
|
@ -164,6 +176,9 @@ function cart_list_amount_update(target, type, input) {
|
||||||
error: cart_response_error
|
error: cart_response_error
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Пересчет количества товаров в корзине для кнопки в меню
|
||||||
|
setTimeout(cart_count, 500);
|
||||||
|
|
||||||
// Пересчитывание стоимости
|
// Пересчитывание стоимости
|
||||||
cart_cost_calculate();
|
cart_cost_calculate();
|
||||||
};
|
};
|
||||||
|
|
|
@ -13,6 +13,8 @@ function main_response(data, status, xhr) {
|
||||||
// Обновление документа
|
// Обновление документа
|
||||||
main.innerHTML = data.main;
|
main.innerHTML = data.main;
|
||||||
|
|
||||||
|
// alert('Основной блок на ' + data.main);
|
||||||
|
|
||||||
// Реинициализация
|
// Реинициализация
|
||||||
reinitialization(main);
|
reinitialization(main);
|
||||||
};
|
};
|
||||||
|
|
|
@ -96,7 +96,6 @@ function menu_auth_panel_show(panel) {
|
||||||
return true;
|
return true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
function menu_auth_panel_hide(panel) {
|
function menu_auth_panel_hide(panel) {
|
||||||
if (panel !== undefined) {
|
if (panel !== undefined) {
|
||||||
// Необходимые данные переданы
|
// Необходимые данные переданы
|
||||||
|
@ -110,6 +109,66 @@ function menu_auth_panel_hide(panel) {
|
||||||
return true;
|
return true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
function cart_count() {
|
||||||
|
$.ajax({
|
||||||
|
url: '/cart/count',
|
||||||
|
type: 'post',
|
||||||
|
dataType: 'json',
|
||||||
|
data: {
|
||||||
|
'_csrf': yii.getCsrfToken()
|
||||||
|
},
|
||||||
|
success: function (data, status, xhr) {
|
||||||
|
|
||||||
|
if (data !== undefined) {
|
||||||
|
// Получены данные с сервера
|
||||||
|
|
||||||
|
// Кнопка корзины
|
||||||
|
if (data.button !== undefined) {
|
||||||
|
// Инициализация
|
||||||
|
button_old = document.getElementById('cart_button');
|
||||||
|
|
||||||
|
// Запись
|
||||||
|
button_old.insertAdjacentHTML("beforebegin", data.button);
|
||||||
|
|
||||||
|
// Запись
|
||||||
|
button_old.remove();
|
||||||
|
|
||||||
|
// Реинициализация
|
||||||
|
$('#cart_button').dropdown().init();
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
return menu_success(data, status, xhr);
|
||||||
|
},
|
||||||
|
error: function (data, status, xhr) {
|
||||||
|
|
||||||
|
if (data !== undefined) {
|
||||||
|
// Получены данные с сервера
|
||||||
|
|
||||||
|
// Кнопка корзины
|
||||||
|
if (data.button !== undefined) {
|
||||||
|
// Инициализация
|
||||||
|
button_old = document.getElementById('cart_button');
|
||||||
|
|
||||||
|
// Запись
|
||||||
|
button_old.insertAdjacentHTML("beforebegin", data.button);
|
||||||
|
|
||||||
|
// Запись
|
||||||
|
button_old.remove();
|
||||||
|
|
||||||
|
// Реинициализация
|
||||||
|
$('#cart_button').dropdown().init();
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
return menu_error(data, status, xhr);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
function menu_responce(data, status, xhr) {
|
function menu_responce(data, status, xhr) {
|
||||||
// Обработка ответов
|
// Обработка ответов
|
||||||
|
|
||||||
|
|
|
@ -15,7 +15,7 @@ function notification_last() {
|
||||||
};
|
};
|
||||||
|
|
||||||
// Проверка уведомлений
|
// Проверка уведомлений
|
||||||
setInterval(notification_last, 10000);
|
setInterval(notification_last, 3000);
|
||||||
|
|
||||||
function notification_popup_create(html, id) {
|
function notification_popup_create(html, id) {
|
||||||
// Инициализация
|
// Инициализация
|
||||||
|
@ -48,7 +48,7 @@ function notification_popup_delete(notification) {
|
||||||
// Удаление
|
// Удаление
|
||||||
notification.remove();
|
notification.remove();
|
||||||
}, 300);
|
}, 300);
|
||||||
}, 3000);
|
}, 1000);
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,26 +1,17 @@
|
||||||
// Запросить заказы
|
// Запросить заказы
|
||||||
function orders_read(type = 'all', from, to, panel = 'orders_panel_orders') {
|
function orders_read(search = '@last', type = '@last', from = '@last', to = '@last', window = 'orders_panel_orders') {
|
||||||
// type = 'last' (оставить без изменений и взять данные из cookie
|
// '@last' - оставить без изменений и взять данные из cookie
|
||||||
// Пустые from и to тоже возьмутся из текущих значений в cookie
|
|
||||||
|
|
||||||
if (from !== undefined && to !== undefined) {
|
if (search.length > 1) {
|
||||||
// Данные периода переданы
|
// Проверка на длину запроса пройдена
|
||||||
|
|
||||||
// Инициализация буфера с данными запроса
|
// Инициализация буфера с данными запроса
|
||||||
data = {
|
data = {
|
||||||
'_csrf': yii.getCsrfToken(),
|
'_csrf': yii.getCsrfToken(),
|
||||||
|
'search': search,
|
||||||
'from': from,
|
'from': from,
|
||||||
'to': to,
|
'to': to,
|
||||||
'panel': panel
|
'window': window
|
||||||
};
|
|
||||||
} else {
|
|
||||||
// Данные периода не переданы
|
|
||||||
|
|
||||||
// Инициализация буфера с данными запроса
|
|
||||||
data = {
|
|
||||||
'_csrf': yii.getCsrfToken(),
|
|
||||||
'panel': panel
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// Запрос
|
// Запрос
|
||||||
|
@ -35,6 +26,7 @@ function orders_read(type = 'all', from, to, panel = 'orders_panel_orders') {
|
||||||
|
|
||||||
// // Пересчитывание стоимости
|
// // Пересчитывание стоимости
|
||||||
// cart_cost_calculate();
|
// cart_cost_calculate();
|
||||||
|
};
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
};
|
};
|
||||||
|
|
Reference in New Issue