Переработа всего под производителя
This commit is contained in:
parent
e8454defc2
commit
4f80a465bc
|
@ -148,14 +148,14 @@ class CartController extends Controller
|
||||||
return $this->render('index', compact('account', 'model', 'connections', 'delivery_to_terminal_list'));
|
return $this->render('index', compact('account', 'model', 'connections', 'delivery_to_terminal_list'));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function actionEditComm(string $catn): array|string|null
|
public function actionEditComm(string $catn, string $prod): array|string|null
|
||||||
{
|
{
|
||||||
// Инициализация
|
// Инициализация
|
||||||
$return = [
|
$return = [
|
||||||
'_csrf' => yii::$app->request->getCsrfToken()
|
'_csrf' => yii::$app->request->getCsrfToken()
|
||||||
];
|
];
|
||||||
|
|
||||||
if (is_null($catn)) {
|
if (is_null($catn) || is_null($prod)) {
|
||||||
// Не получен артикул
|
// Не получен артикул
|
||||||
|
|
||||||
yii::$app->response->statusCode = 500;
|
yii::$app->response->statusCode = 500;
|
||||||
|
@ -163,7 +163,7 @@ class CartController extends Controller
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($edges = OrderEdgeSupply::searchBySupplyCatn($catn, Order::searchByType())) {
|
if ($edges = OrderEdgeSupply::searchBySupplyCatnAndProd($catn, $prod, Order::searchByType())) {
|
||||||
// Рёбра найдены (связи заказа с поставкой)
|
// Рёбра найдены (связи заказа с поставкой)
|
||||||
|
|
||||||
// Инициализация
|
// Инициализация
|
||||||
|
@ -216,7 +216,7 @@ class CartController extends Controller
|
||||||
return $return;
|
return $return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($model = Product::searchByCatn($catn)) {
|
if ($model = Product::searchByCatnAndProd($catn, $prod)) {
|
||||||
return $this->render('index', compact('model'));
|
return $this->render('index', compact('model'));
|
||||||
} else {
|
} else {
|
||||||
return $this->redirect('/');
|
return $this->redirect('/');
|
||||||
|
|
|
@ -693,14 +693,17 @@ class OrderController extends Controller
|
||||||
*
|
*
|
||||||
* @return string|array|null
|
* @return string|array|null
|
||||||
*/
|
*/
|
||||||
public function actionSupplyRead(string $catn): string|array|null
|
public function actionSupplyRead(string $catn, string $prod): string|array|null
|
||||||
{
|
{
|
||||||
// Инициализация
|
// Инициализация
|
||||||
$buffer = [];
|
$buffer = [];
|
||||||
|
|
||||||
if ($supply = OrderEdgeSupply::searchBySupplyCatn($catn)) {
|
if (empty($catn) || empty($prod)) {
|
||||||
// Удалось найти инстанцию поставки
|
// Не получены обязательные параметры
|
||||||
|
|
||||||
|
yii::$app->response->statusCode = 500;
|
||||||
|
|
||||||
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($order_edge_supply = OrderEdgeSupply::searchById($_id = OrderEdgeSupply::collectionName() . '/' . $catn)) {
|
if ($order_edge_supply = OrderEdgeSupply::searchById($_id = OrderEdgeSupply::collectionName() . '/' . $catn)) {
|
||||||
|
@ -791,6 +794,8 @@ class OrderController extends Controller
|
||||||
$order_edge_supply->save();
|
$order_edge_supply->save();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
end:
|
||||||
|
|
||||||
// Запись обязательных параметров
|
// Запись обязательных параметров
|
||||||
$buffer['_csrf'] = yii::$app->request->getCsrfToken();
|
$buffer['_csrf'] = yii::$app->request->getCsrfToken();
|
||||||
|
|
||||||
|
@ -807,13 +812,21 @@ class OrderController extends Controller
|
||||||
*
|
*
|
||||||
* @return string|array|null
|
* @return string|array|null
|
||||||
*/
|
*/
|
||||||
public function actionSupplyWriteStts(string $catn): string|array|null
|
public function actionSupplyWriteStts(string $catn, string $prod): 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 = [];
|
$buffer = [];
|
||||||
|
|
||||||
if ($supply = OrderEdgeSupply::searchBySupplyCatn($_id = Supply::collectionName() . '/' . $catn)) {
|
if (empty($catn) || empty($prod)) {
|
||||||
|
// Не получены обязательные параметры
|
||||||
|
|
||||||
|
yii::$app->response->statusCode = 500;
|
||||||
|
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($supply = OrderEdgeSupply::searchBySupplyCatnAndProd($catn, $prod)) {
|
||||||
// Удалось найти инстанцию поставки
|
// Удалось найти инстанцию поставки
|
||||||
|
|
||||||
var_dump($supply);
|
var_dump($supply);
|
||||||
|
@ -847,6 +860,8 @@ class OrderController extends Controller
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
end:
|
||||||
|
|
||||||
// Запись обязательных параметров
|
// Запись обязательных параметров
|
||||||
$buffer['_csrf'] = yii::$app->request->getCsrfToken();
|
$buffer['_csrf'] = yii::$app->request->getCsrfToken();
|
||||||
|
|
||||||
|
|
|
@ -79,9 +79,9 @@ class ProductController extends Controller
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
public function actionIndex(string $catn): array|string|null
|
public function actionIndex(string $prod, string $catn): array|string|null
|
||||||
{
|
{
|
||||||
if ($model = Product::searchByCatn($catn)) {
|
if ($model = Product::searchByCatnAndProd($catn, $prod)) {
|
||||||
// Товар найден
|
// Товар найден
|
||||||
|
|
||||||
if (yii::$app->request->isAjax) {
|
if (yii::$app->request->isAjax) {
|
||||||
|
@ -107,14 +107,14 @@ class ProductController extends Controller
|
||||||
*
|
*
|
||||||
* @param string $catn Артикул
|
* @param string $catn Артикул
|
||||||
*/
|
*/
|
||||||
public function actionWrite(string $catn): array|string|null
|
public function actionWrite(string $catn, string $prod): array|string|null
|
||||||
{
|
{
|
||||||
// Инициализация буфера ответа
|
// Инициализация буфера ответа
|
||||||
$return = [
|
$return = [
|
||||||
'_csrf' => yii::$app->request->getCsrfToken()
|
'_csrf' => yii::$app->request->getCsrfToken()
|
||||||
];
|
];
|
||||||
|
|
||||||
if (empty($catn)) {
|
if (empty($catn) || empty($prod)) {
|
||||||
// Не получен артикул
|
// Не получен артикул
|
||||||
|
|
||||||
// Запись кода ответа
|
// Запись кода ответа
|
||||||
|
@ -124,10 +124,10 @@ class ProductController extends Controller
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($product = Product::searchByCatn($catn)) {
|
if ($product = Product::searchByCatnAndProd($catn, $prod)) {
|
||||||
// Найден товар
|
// Найден товар
|
||||||
|
|
||||||
if (SupplyEdgeProduct::searchByVertex(Supply::searchByCatn($catn)->readId(), $product->readId(), filter: ['type' => 'connect'])) {
|
if (SupplyEdgeProduct::searchByVertex(Supply::searchByCatnAndProd($catn, $prod)->readId(), $product->readId(), filter: ['type' => 'connect'])) {
|
||||||
// Удалось найти ребро: ПОСТАВКА -> ТОВАР
|
// Удалось найти ребро: ПОСТАВКА -> ТОВАР
|
||||||
|
|
||||||
// Запись кода ответа
|
// Запись кода ответа
|
||||||
|
@ -141,7 +141,7 @@ class ProductController extends Controller
|
||||||
} else {
|
} else {
|
||||||
// Не удалось найти ребро: ПОСТАВКА -> ТОВАР
|
// Не удалось найти ребро: ПОСТАВКА -> ТОВАР
|
||||||
|
|
||||||
if (SupplyEdgeProduct::write(Supply::searchByCatn($catn)->readId(), $product->readId(), data: ['type' => 'connect'])) {
|
if (SupplyEdgeProduct::write(Supply::searchByCatnAndProd($catn, $prod)->readId(), $product->readId(), data: ['type' => 'connect'])) {
|
||||||
// Удалось создать ребро: ПОСТАВКА -> ТОВАР
|
// Удалось создать ребро: ПОСТАВКА -> ТОВАР
|
||||||
|
|
||||||
$return['alert'] = "Товар уже существовал, связь с поставкой записана: $catn";
|
$return['alert'] = "Товар уже существовал, связь с поставкой записана: $catn";
|
||||||
|
@ -248,7 +248,7 @@ class ProductController extends Controller
|
||||||
*
|
*
|
||||||
* @param string $catn Артикул
|
* @param string $catn Артикул
|
||||||
*/
|
*/
|
||||||
public function actionDelete(string $catn): array|string|null
|
public function actionDelete(string $catn, string $prod): array|string|null
|
||||||
{
|
{
|
||||||
// Инициализация буфера ответа
|
// Инициализация буфера ответа
|
||||||
$return = [
|
$return = [
|
||||||
|
@ -265,7 +265,7 @@ class ProductController extends Controller
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($product = Product::searchByCatn($catn)) {
|
if ($product = Product::searchByCatnAndProd($catn, $prod)) {
|
||||||
// Товар найден
|
// Товар найден
|
||||||
|
|
||||||
if ($product->disconnect()) {
|
if ($product->disconnect()) {
|
||||||
|
@ -327,7 +327,7 @@ class ProductController extends Controller
|
||||||
return $return;
|
return $return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Product::searchByCatn($catn)) {
|
if (Product::searchByCatnAndProd($catn, $prod)) {
|
||||||
// Обрабатываемый товар ещё существует (подразумевается, что произошла ошибка)
|
// Обрабатываемый товар ещё существует (подразумевается, что произошла ошибка)
|
||||||
|
|
||||||
// Возврат на страницу товара
|
// Возврат на страницу товара
|
||||||
|
@ -343,9 +343,10 @@ class ProductController extends Controller
|
||||||
/**
|
/**
|
||||||
* Подключение аналога
|
* Подключение аналога
|
||||||
*
|
*
|
||||||
|
* @param string $prod Производитель
|
||||||
* @param string $catn Артикул
|
* @param string $catn Артикул
|
||||||
*/
|
*/
|
||||||
public function actionConnect(string $catn): array|string|null
|
public function actionConnect(string $prod, string $catn): array|string|null
|
||||||
{
|
{
|
||||||
// Инициализация буфера ответа
|
// Инициализация буфера ответа
|
||||||
$return = [
|
$return = [
|
||||||
|
@ -362,23 +363,23 @@ class ProductController extends Controller
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($from = Product::searchByCatn($catn)) {
|
if ($from = Product::searchByCatnAndProd($catn, $prod)) {
|
||||||
// Найден товар
|
// Найден товар
|
||||||
|
|
||||||
if ($target = yii::$app->request->post('catn') ?? yii::$app->request->get('catn')) {
|
if ($target = yii::$app->request->post('catn') ?? yii::$app->request->get('catn')) {
|
||||||
// Инициализирован артикул товара для связи
|
// Инициализирован артикул товара для связи
|
||||||
|
|
||||||
if ($to = Product::searchByCatn($target)) {
|
if ($to = Product::searchByCatn($target)) {
|
||||||
// Существует товар к которому планируется соединение
|
// Существуют товары к которым планируется соединение
|
||||||
} else {
|
} else {
|
||||||
// Не существует товар к которому планируется соединение
|
// Не существуют товары к которым планируется соединение
|
||||||
|
|
||||||
// Инициализация товара
|
// Инициализация товара
|
||||||
if ($to = Product::writeEmpty((string) $target)) {
|
if ($to = [Product::writeEmpty((string) $target, $from->prod)]) {
|
||||||
// Удалось записать товар
|
// Удалось записать товар
|
||||||
|
|
||||||
// Запись в буфер возврата
|
// Запись в буфер возврата
|
||||||
$return['alert'] = "Не удалось записать новый товар: $target";
|
$return['alert'] = "Записан новый товар: $target ($from->prod)";
|
||||||
} else {
|
} else {
|
||||||
// Не удалось записать товар
|
// Не удалось записать товар
|
||||||
|
|
||||||
|
@ -386,25 +387,28 @@ class ProductController extends Controller
|
||||||
yii::$app->response->statusCode = 500;
|
yii::$app->response->statusCode = 500;
|
||||||
|
|
||||||
// Запись в буфер возврата
|
// Запись в буфер возврата
|
||||||
$return['alert'] = "Не удалось записать новый товар: $target";
|
$return['alert'] = "Не удалось записать новый товар: $target ($from->prod)";
|
||||||
|
|
||||||
// Переход в конец алгоритма
|
// Переход в конец алгоритма
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (count($from->synchronization($to)) > 0) {
|
// Инициализация количества созданных рёбер
|
||||||
// Созданы рёбра
|
$writed = 0;
|
||||||
|
|
||||||
// Запись в буфер возврата
|
foreach ($to as $product) {
|
||||||
$return['alert'] = 'Продукты успешно соединены';
|
// Перебор товаров для записи связи: ТОВАР -> ТОВАР
|
||||||
} else {
|
|
||||||
// Не созданы рёбра
|
|
||||||
|
|
||||||
// Запись в буфер возврата
|
// Универсализация данных (приведение к объекту)
|
||||||
$return['alert'] = 'Не удалось соединить продукты';
|
if (is_array($product) && !$product = Product::searchByCatnAndProd($product['catn'], $product['prod'])) continue;
|
||||||
|
|
||||||
|
// Запись ребра и синхронизация (добавление в группу к остальным аналогам)
|
||||||
|
if (count($from->synchronization($product)) > 0) $writed++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Запись в буфер возврата
|
||||||
|
$return['alert'] = "Создано $writed связей";
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// Не найден товар
|
// Не найден товар
|
||||||
|
@ -413,7 +417,7 @@ class ProductController extends Controller
|
||||||
yii::$app->response->statusCode = 500;
|
yii::$app->response->statusCode = 500;
|
||||||
|
|
||||||
// Запись в буфер возврата
|
// Запись в буфер возврата
|
||||||
$return['alert'] = "Не удалось найти товар: $catn";
|
$return['alert'] = "Не удалось найти товар: $catn ($prod)";
|
||||||
|
|
||||||
// Переход в конец алгоритма
|
// Переход в конец алгоритма
|
||||||
goto end;
|
goto end;
|
||||||
|
@ -430,11 +434,11 @@ class ProductController extends Controller
|
||||||
return $return;
|
return $return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Product::searchByCatn($catn)) {
|
if (Product::searchByCatnAndProd($catn, $prod)) {
|
||||||
// Старый товар ещё существует (подразумевается, что произошла ошибка)
|
// Старый товар ещё существует (подразумевается, что произошла ошибка)
|
||||||
|
|
||||||
// Возврат на страницу товара
|
// Возврат на страницу товара
|
||||||
return $this->redirect("/product/$catn");
|
return $this->redirect("/product/$prod/$catn");
|
||||||
} else {
|
} else {
|
||||||
// Обрабатываемый товар не существует (подразумевается, что произошла ошибка)
|
// Обрабатываемый товар не существует (подразумевается, что произошла ошибка)
|
||||||
|
|
||||||
|
@ -448,14 +452,14 @@ class ProductController extends Controller
|
||||||
*
|
*
|
||||||
* @param string $catn Артикул
|
* @param string $catn Артикул
|
||||||
*/
|
*/
|
||||||
public function actionDisconnect(string $catn): array|string|null
|
public function actionDisconnect(string $catn, string $prod): array|string|null
|
||||||
{
|
{
|
||||||
// Инициализация буфера ответа
|
// Инициализация буфера ответа
|
||||||
$return = [
|
$return = [
|
||||||
'_csrf' => yii::$app->request->getCsrfToken()
|
'_csrf' => yii::$app->request->getCsrfToken()
|
||||||
];
|
];
|
||||||
|
|
||||||
if (empty($catn)) {
|
if (empty($catn) || empty($prod)) {
|
||||||
// Не получен артикул
|
// Не получен артикул
|
||||||
|
|
||||||
// Запись кода ответа
|
// Запись кода ответа
|
||||||
|
@ -465,13 +469,13 @@ class ProductController extends Controller
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($from = Product::searchByCatn($catn)) {
|
if ($from = Product::searchByCatnAndProd($catn, $prod)) {
|
||||||
// Товар найден
|
// Товар найден
|
||||||
|
|
||||||
// Инициализация цели
|
// Инициализация цели
|
||||||
$target = yii::$app->request->post('catn') ?? yii::$app->request->get('catn');
|
$target = yii::$app->request->post('catn') ?? yii::$app->request->get('catn');
|
||||||
|
|
||||||
if ($from->disconnect(Product::searchByCatn(empty($target) ? null : $target))) {
|
if ($from->disconnect($target)) {
|
||||||
// Удалено ребро (связь)
|
// Удалено ребро (связь)
|
||||||
|
|
||||||
// Запись в буфер возврата
|
// Запись в буфер возврата
|
||||||
|
@ -510,11 +514,11 @@ class ProductController extends Controller
|
||||||
return $return;
|
return $return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Product::searchByCatn($catn)) {
|
if (Product::searchByCatnAndProd($catn, $prod)) {
|
||||||
// Обрабатываемый товар ещё существует (подразумевается, что произошла ошибка)
|
// Обрабатываемый товар ещё существует (подразумевается, что произошла ошибка)
|
||||||
|
|
||||||
// Возврат на страницу товара
|
// Возврат на страницу товара
|
||||||
return $this->redirect("/product/$catn");
|
return $this->redirect("/product/$prod/$catn");
|
||||||
} else {
|
} else {
|
||||||
// Обрабатываемый товар не существует (подразумевается, что произошла ошибка)
|
// Обрабатываемый товар не существует (подразумевается, что произошла ошибка)
|
||||||
|
|
||||||
|
@ -523,14 +527,14 @@ class ProductController extends Controller
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function actionEditTitle(string $catn): array|string|null
|
public function actionEditTitle(string $catn, string $prod): array|string|null
|
||||||
{
|
{
|
||||||
// Инициализация
|
// Инициализация
|
||||||
$return = [
|
$return = [
|
||||||
'_csrf' => yii::$app->request->getCsrfToken()
|
'_csrf' => yii::$app->request->getCsrfToken()
|
||||||
];
|
];
|
||||||
|
|
||||||
if (empty($catn)) {
|
if (empty($catn) || empty($prod)) {
|
||||||
// Не получен артикул
|
// Не получен артикул
|
||||||
|
|
||||||
yii::$app->response->statusCode = 500;
|
yii::$app->response->statusCode = 500;
|
||||||
|
@ -538,7 +542,7 @@ class ProductController extends Controller
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($model = Product::searchByCatn($catn)) {
|
if ($model = Product::searchByCatnAndProd($catn, $prod)) {
|
||||||
// Товар найден
|
// Товар найден
|
||||||
|
|
||||||
// Инициализация
|
// Инициализация
|
||||||
|
@ -566,21 +570,21 @@ class ProductController extends Controller
|
||||||
return $return;
|
return $return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($model = Product::searchByCatn($catn)) {
|
if ($model = Product::searchByCatnAndProd($catn, $prod)) {
|
||||||
return $this->render('index', compact('model'));
|
return $this->render('index', compact('model'));
|
||||||
} else {
|
} else {
|
||||||
return $this->redirect('/');
|
return $this->redirect('/');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function actionEditCatn(string $catn): array|string|null
|
public function actionEditCatn(string $catn, string $prod): array|string|null
|
||||||
{
|
{
|
||||||
// Инициализация
|
// Инициализация
|
||||||
$return = [
|
$return = [
|
||||||
'_csrf' => yii::$app->request->getCsrfToken()
|
'_csrf' => yii::$app->request->getCsrfToken()
|
||||||
];
|
];
|
||||||
|
|
||||||
if (empty($catn)) {
|
if (empty($catn) || empty($prod)) {
|
||||||
// Не получен артикул
|
// Не получен артикул
|
||||||
|
|
||||||
yii::$app->response->statusCode = 500;
|
yii::$app->response->statusCode = 500;
|
||||||
|
@ -588,7 +592,7 @@ class ProductController extends Controller
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($model = Product::searchByCatn($catn)) {
|
if ($model = Product::searchByCatnAndProd($catn, $prod)) {
|
||||||
// Товар найден
|
// Товар найден
|
||||||
|
|
||||||
// Инициализация
|
// Инициализация
|
||||||
|
@ -617,11 +621,11 @@ class ProductController extends Controller
|
||||||
return $return;
|
return $return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Product::searchByCatn($catn)) {
|
if (Product::searchByCatnAndProd($catn, $prod)) {
|
||||||
// Старый товар ещё существует (подразумевается, что произошла ошибка)
|
// Старый товар ещё существует (подразумевается, что произошла ошибка)
|
||||||
|
|
||||||
// Возврат на страницу товара
|
// Возврат на страницу товара
|
||||||
return $this->redirect("/product/$catn");
|
return $this->redirect("/product/$prod/$catn");
|
||||||
} else {
|
} else {
|
||||||
// Старый товар не существует (подразумевается, что его артикул успешно изменён)
|
// Старый товар не существует (подразумевается, что его артикул успешно изменён)
|
||||||
|
|
||||||
|
@ -630,14 +634,14 @@ class ProductController extends Controller
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function actionEditDscr(string $catn): array|string|null
|
public function actionEditDscr(string $catn, string $prod): array|string|null
|
||||||
{
|
{
|
||||||
// Инициализация
|
// Инициализация
|
||||||
$return = [
|
$return = [
|
||||||
'_csrf' => yii::$app->request->getCsrfToken()
|
'_csrf' => yii::$app->request->getCsrfToken()
|
||||||
];
|
];
|
||||||
|
|
||||||
if (empty($catn)) {
|
if (empty($catn) || empty($prod)) {
|
||||||
// Не получен артикул
|
// Не получен артикул
|
||||||
|
|
||||||
yii::$app->response->statusCode = 500;
|
yii::$app->response->statusCode = 500;
|
||||||
|
@ -645,7 +649,7 @@ class ProductController extends Controller
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($product = Product::searchByCatn($catn)) {
|
if ($product = Product::searchByCatnAndProd($catn, $prod)) {
|
||||||
// Товар найден
|
// Товар найден
|
||||||
|
|
||||||
// Инициализация
|
// Инициализация
|
||||||
|
@ -673,21 +677,21 @@ class ProductController extends Controller
|
||||||
return $return;
|
return $return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($model = Product::searchByCatn($catn)) {
|
if ($model = Product::searchByCatnAndProd($catn, $prod)) {
|
||||||
return $this->render('index', compact('model'));
|
return $this->render('index', compact('model'));
|
||||||
} else {
|
} else {
|
||||||
return $this->redirect('/');
|
return $this->redirect('/');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function actionEditDmns(string $catn): array|string|null
|
public function actionEditDmns(string $catn, string $prod): array|string|null
|
||||||
{
|
{
|
||||||
// Инициализация
|
// Инициализация
|
||||||
$return = [
|
$return = [
|
||||||
'_csrf' => yii::$app->request->getCsrfToken()
|
'_csrf' => yii::$app->request->getCsrfToken()
|
||||||
];
|
];
|
||||||
|
|
||||||
if (empty($catn)) {
|
if (empty($catn) || empty($prod)) {
|
||||||
// Не получен артикул
|
// Не получен артикул
|
||||||
|
|
||||||
yii::$app->response->statusCode = 500;
|
yii::$app->response->statusCode = 500;
|
||||||
|
@ -695,7 +699,7 @@ class ProductController extends Controller
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($product = Product::searchByCatn($catn)) {
|
if ($product = Product::searchByCatnAndProd($catn, $prod)) {
|
||||||
// Товар найден
|
// Товар найден
|
||||||
|
|
||||||
// Инициализация
|
// Инициализация
|
||||||
|
@ -729,21 +733,21 @@ class ProductController extends Controller
|
||||||
return $return;
|
return $return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($model = Product::searchByCatn($catn)) {
|
if ($model = Product::searchByCatnAndProd($catn, $prod)) {
|
||||||
return $this->render('index', compact('model'));
|
return $this->render('index', compact('model'));
|
||||||
} else {
|
} else {
|
||||||
return $this->redirect('/');
|
return $this->redirect('/');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function actionEditWght(string $catn): array|string|null
|
public function actionEditWght(string $catn, string $prod): array|string|null
|
||||||
{
|
{
|
||||||
// Инициализация
|
// Инициализация
|
||||||
$return = [
|
$return = [
|
||||||
'_csrf' => yii::$app->request->getCsrfToken()
|
'_csrf' => yii::$app->request->getCsrfToken()
|
||||||
];
|
];
|
||||||
|
|
||||||
if (empty($catn)) {
|
if (empty($catn) || empty($prod)) {
|
||||||
// Не получен артикул
|
// Не получен артикул
|
||||||
|
|
||||||
yii::$app->response->statusCode = 500;
|
yii::$app->response->statusCode = 500;
|
||||||
|
@ -751,7 +755,7 @@ class ProductController extends Controller
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($product = Product::searchByCatn($catn)) {
|
if ($product = Product::searchByCatnAndProd($catn, $prod)) {
|
||||||
// Товар найден
|
// Товар найден
|
||||||
|
|
||||||
// Инициализация
|
// Инициализация
|
||||||
|
@ -779,7 +783,7 @@ class ProductController extends Controller
|
||||||
return $return;
|
return $return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($model = Product::searchByCatn($catn)) {
|
if ($model = Product::searchByCatnAndProd($catn, $prod)) {
|
||||||
return $this->render('index', compact('model'));
|
return $this->render('index', compact('model'));
|
||||||
} else {
|
} else {
|
||||||
return $this->redirect('/');
|
return $this->redirect('/');
|
||||||
|
@ -793,7 +797,7 @@ class ProductController extends Controller
|
||||||
'_csrf' => yii::$app->request->getCsrfToken()
|
'_csrf' => yii::$app->request->getCsrfToken()
|
||||||
];
|
];
|
||||||
|
|
||||||
if (empty($catn)) {
|
if (empty($catn) || empty($prod)) {
|
||||||
// Не получен артикул
|
// Не получен артикул
|
||||||
|
|
||||||
yii::$app->response->statusCode = 500;
|
yii::$app->response->statusCode = 500;
|
||||||
|
@ -801,7 +805,7 @@ class ProductController extends Controller
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($product = Product::searchByCatn($catn)) {
|
if ($product = Product::searchByCatnAndProd($catn, $prod)) {
|
||||||
// Товар найден
|
// Товар найден
|
||||||
|
|
||||||
// Инициализация
|
// Инициализация
|
||||||
|
@ -828,14 +832,14 @@ class ProductController extends Controller
|
||||||
return $return;
|
return $return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($model = Product::searchByCatn($catn)) {
|
if ($model = Product::searchByCatnAndProd($catn, $prod)) {
|
||||||
return $this->render('index', compact('model'));
|
return $this->render('index', compact('model'));
|
||||||
} else {
|
} else {
|
||||||
return $this->redirect('/');
|
return $this->redirect('/');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function actionDeleteImage(string $catn): array|string|null
|
public function actionDeleteImage(string $catn, string $prod): array|string|null
|
||||||
{
|
{
|
||||||
// Инициализация
|
// Инициализация
|
||||||
$return = [
|
$return = [
|
||||||
|
@ -843,7 +847,7 @@ class ProductController extends Controller
|
||||||
];
|
];
|
||||||
$index = yii::$app->request->post('index') ?? yii::$app->request->get('index');
|
$index = yii::$app->request->post('index') ?? yii::$app->request->get('index');
|
||||||
|
|
||||||
if (empty($catn) || empty($index)) {
|
if (empty($catn) || empty($index) || empty($prod)) {
|
||||||
// Не получены обязательные параметры
|
// Не получены обязательные параметры
|
||||||
|
|
||||||
yii::$app->response->statusCode = 500;
|
yii::$app->response->statusCode = 500;
|
||||||
|
@ -851,7 +855,7 @@ class ProductController extends Controller
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($product = Product::searchByCatn($catn)) {
|
if ($product = Product::searchByCatnAndProd($catn, $prod)) {
|
||||||
// Товар найден
|
// Товар найден
|
||||||
|
|
||||||
// Инициализация (буфер нужен из-за кривых сеттеров)
|
// Инициализация (буфер нужен из-за кривых сеттеров)
|
||||||
|
@ -883,14 +887,14 @@ class ProductController extends Controller
|
||||||
return $return;
|
return $return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($model = Product::searchByCatn($catn)) {
|
if ($model = Product::searchByCatnAndProd($catn, $prod)) {
|
||||||
return $this->render('index', compact('model'));
|
return $this->render('index', compact('model'));
|
||||||
} else {
|
} else {
|
||||||
return $this->redirect('/');
|
return $this->redirect('/');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function actionWriteCover(string $catn): array|string|null
|
public function actionWriteCover(string $catn, string $prod): array|string|null
|
||||||
{
|
{
|
||||||
// Инициализация
|
// Инициализация
|
||||||
$return = [
|
$return = [
|
||||||
|
@ -898,7 +902,7 @@ class ProductController extends Controller
|
||||||
];
|
];
|
||||||
$index = yii::$app->request->post('index') ?? yii::$app->request->get('index');
|
$index = yii::$app->request->post('index') ?? yii::$app->request->get('index');
|
||||||
|
|
||||||
if (empty($catn) || empty($index)) {
|
if (empty($catn) || empty($index) || empty($prod)) {
|
||||||
// Не получены обязательные параметры
|
// Не получены обязательные параметры
|
||||||
|
|
||||||
yii::$app->response->statusCode = 500;
|
yii::$app->response->statusCode = 500;
|
||||||
|
@ -906,7 +910,7 @@ class ProductController extends Controller
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($product = Product::searchByCatn($catn)) {
|
if ($product = Product::searchByCatnAndProd($catn, $prod)) {
|
||||||
// Товар найден
|
// Товар найден
|
||||||
|
|
||||||
// Инициализация (буфер нужен из-за кривых сеттеров)
|
// Инициализация (буфер нужен из-за кривых сеттеров)
|
||||||
|
@ -948,7 +952,7 @@ class ProductController extends Controller
|
||||||
return $return;
|
return $return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($model = Product::searchByCatn($catn)) {
|
if ($model = Product::searchByCatnAndProd($catn, $prod)) {
|
||||||
return $this->render('index', compact('model'));
|
return $this->render('index', compact('model'));
|
||||||
} else {
|
} else {
|
||||||
return $this->redirect('/');
|
return $this->redirect('/');
|
||||||
|
@ -960,7 +964,7 @@ class ProductController extends Controller
|
||||||
*
|
*
|
||||||
* @param string $catn Артикул
|
* @param string $catn Артикул
|
||||||
*/
|
*/
|
||||||
public function actionStatus(string $catn): array|string|null
|
public function actionStatus(string $prod, string $catn): array|string|null
|
||||||
{
|
{
|
||||||
if (yii::$app->request->isPost) {
|
if (yii::$app->request->isPost) {
|
||||||
// POST-запрос
|
// POST-запрос
|
||||||
|
@ -973,7 +977,7 @@ class ProductController extends Controller
|
||||||
'_csrf' => yii::$app->request->getCsrfToken()
|
'_csrf' => yii::$app->request->getCsrfToken()
|
||||||
];
|
];
|
||||||
|
|
||||||
if (empty($catn)) {
|
if (empty($catn) || empty($prod)) {
|
||||||
// Не получен артикул
|
// Не получен артикул
|
||||||
|
|
||||||
// Запись кода ответа
|
// Запись кода ответа
|
||||||
|
@ -983,7 +987,7 @@ class ProductController extends Controller
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($product = Product::searchByCatn($catn)) {
|
if ($product = Product::searchByCatnAndProd($catn, $prod)) {
|
||||||
// Найден товар
|
// Найден товар
|
||||||
|
|
||||||
// Запись старого статуса
|
// Запись старого статуса
|
||||||
|
@ -1008,7 +1012,7 @@ class ProductController extends Controller
|
||||||
// Не записаны изменения
|
// Не записаны изменения
|
||||||
|
|
||||||
// Отправка уведомления
|
// Отправка уведомления
|
||||||
Notification::_write("Не удалось изменить статус на $stts у товара $catn", type: Notification::TYPE_ERROR);
|
Notification::_write("Не удалось изменить статус на $stts у товара $catn ($prod)", type: Notification::TYPE_ERROR);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// Не найден товар
|
// Не найден товар
|
||||||
|
@ -1017,7 +1021,7 @@ class ProductController extends Controller
|
||||||
yii::$app->response->statusCode = 500;
|
yii::$app->response->statusCode = 500;
|
||||||
|
|
||||||
// Отправка уведомления
|
// Отправка уведомления
|
||||||
Notification::_write("Не удалось найти товар $catn", type: Notification::TYPE_ERROR);
|
Notification::_write("Не удалось найти товар $catn ($prod)", type: Notification::TYPE_ERROR);
|
||||||
|
|
||||||
// Переход в конец алгоритма
|
// Переход в конец алгоритма
|
||||||
goto end;
|
goto end;
|
||||||
|
|
|
@ -558,7 +558,6 @@ class ProfileController extends Controller
|
||||||
} else {
|
} else {
|
||||||
// Не получен аккаунт для которого необходимо загрузить каталог
|
// Не получен аккаунт для которого необходимо загрузить каталог
|
||||||
|
|
||||||
|
|
||||||
if ($supply->importExcel((int) $warehouse)) {
|
if ($supply->importExcel((int) $warehouse)) {
|
||||||
|
|
||||||
return [
|
return [
|
||||||
|
@ -807,6 +806,9 @@ class ProfileController extends Controller
|
||||||
*/
|
*/
|
||||||
public static function syncGeolocationWithDellin(Account|int|null $account = null): bool
|
public static function syncGeolocationWithDellin(Account|int|null $account = null): bool
|
||||||
{
|
{
|
||||||
|
// Инициализщация аккаунта
|
||||||
|
$account = Account::initAccount($account);
|
||||||
|
|
||||||
// Синхронизация с базой данных (таблица с ДеловыеЛинии)
|
// Синхронизация с базой данных (таблица с ДеловыеЛинии)
|
||||||
if (isset($account->geol['data']) && $dellin = Dellin::searchByCityKladr(str_pad($account->geol['data']['city_kladr_id'], 25, '0000000000000000000000'))) {
|
if (isset($account->geol['data']) && $dellin = Dellin::searchByCityKladr(str_pad($account->geol['data']['city_kladr_id'], 25, '0000000000000000000000'))) {
|
||||||
// Удалось найти город с терминалами ДеловыеЛинии
|
// Удалось найти город с терминалами ДеловыеЛинии
|
||||||
|
|
|
@ -186,6 +186,8 @@ class Order extends Document implements DocumentInterface
|
||||||
* @param Supply|array $supply Товары
|
* @param Supply|array $supply Товары
|
||||||
*
|
*
|
||||||
* @return int Количество удалённых рёбер
|
* @return int Количество удалённых рёбер
|
||||||
|
*
|
||||||
|
* @todo Доделать
|
||||||
*/
|
*/
|
||||||
public function deleteSupply(Supply|array $supply): int
|
public function deleteSupply(Supply|array $supply): int
|
||||||
{
|
{
|
||||||
|
@ -599,7 +601,7 @@ class Order extends Document implements DocumentInterface
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// Инициализация инстанции продукта в базе данных
|
// Инициализация инстанции продукта в базе данных
|
||||||
$product = Product::searchByCatn($connection['product']['catn']);
|
$product = Product::searchByCatnAndProd($connection['product']['catn'], $connection['product']['prod']);
|
||||||
|
|
||||||
// Инициализация доставки Dellin (автоматическая)
|
// Инициализация доставки Dellin (автоматическая)
|
||||||
$product->bffr = ($product->bffr ?? []) + [
|
$product->bffr = ($product->bffr ?? []) + [
|
||||||
|
@ -662,7 +664,7 @@ class Order extends Document implements DocumentInterface
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// Инициализация инстанции продукта в базе данных
|
// Инициализация инстанции продукта в базе данных
|
||||||
$product = Product::searchByCatn($connection['product']['catn']);
|
$product = Product::searchByCatnAndProd($connection['product']['catn'], $connection['product']['prod']);
|
||||||
|
|
||||||
// Инициализация доставки Dellin (автоматическая)
|
// Инициализация доставки Dellin (автоматическая)
|
||||||
$product->bffr = ($product->bffr ?? []) + [
|
$product->bffr = ($product->bffr ?? []) + [
|
||||||
|
|
|
@ -96,6 +96,8 @@ class OrderEdgeSupply extends Edge
|
||||||
* @param int $limit Максимальное количество
|
* @param int $limit Максимальное количество
|
||||||
*
|
*
|
||||||
* @return array Поставки
|
* @return array Поставки
|
||||||
|
*
|
||||||
|
* @deprecated
|
||||||
*/
|
*/
|
||||||
public static function searchBySupplyCatn(string $catn, Order $order = null, int $limit = 10): array
|
public static function searchBySupplyCatn(string $catn, Order $order = null, int $limit = 10): array
|
||||||
{
|
{
|
||||||
|
@ -114,6 +116,33 @@ class OrderEdgeSupply extends Edge
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Поиск поставки по артикулу
|
||||||
|
*
|
||||||
|
* @param string $catn Артикул
|
||||||
|
* @param Order $order Заказ
|
||||||
|
* @param int $limit Максимальное количество
|
||||||
|
*
|
||||||
|
* @return array Поставки
|
||||||
|
*/
|
||||||
|
public static function searchBySupplyCatnAndProd(string $catn, string $prod, Order $order = null, int $limit = 10): array
|
||||||
|
{
|
||||||
|
if ($supply = Supply::searchByCatnAndProd($catn, $prod)) {
|
||||||
|
// Поставка найдена
|
||||||
|
|
||||||
|
if (isset($order)) {
|
||||||
|
// Поиск только по определённому заказу
|
||||||
|
|
||||||
|
return self::find()->where(['_from' => $order->readId(), '_to' => $supply->readId()])->limit($limit)->all();
|
||||||
|
}
|
||||||
|
|
||||||
|
return self::find()->where(['_to' => $supply->readId()])->limit($limit)->all();
|
||||||
|
}
|
||||||
|
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
public static function convertStatusToRussian(string|int $status): string
|
public static function convertStatusToRussian(string|int $status): string
|
||||||
{
|
{
|
||||||
return match($status) {
|
return match($status) {
|
||||||
|
|
|
@ -223,7 +223,7 @@ class Product extends Document
|
||||||
if ($this->isNewRecord) {
|
if ($this->isNewRecord) {
|
||||||
// Новая запись
|
// Новая запись
|
||||||
|
|
||||||
$this->stts = 'inactive';
|
$this->stts = $this->stts ?? 'inactive';
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -235,13 +235,15 @@ class Product extends Document
|
||||||
/**
|
/**
|
||||||
* Запись пустого продукта
|
* Запись пустого продукта
|
||||||
*/
|
*/
|
||||||
public static function writeEmpty(string $catn): ?self
|
public static function writeEmpty(string $catn, string $prod = 'Неизвестный', bool $active = false): ?self
|
||||||
{
|
{
|
||||||
// Инициализация
|
// Инициализация
|
||||||
$model = new self;
|
$model = new self;
|
||||||
|
|
||||||
// Настройки
|
// Настройки
|
||||||
$model->catn = $catn;
|
$model->catn = $catn;
|
||||||
|
$model->prod = $prod;
|
||||||
|
$model->stts = $active ? 'active' : 'inactive';
|
||||||
|
|
||||||
// Запись
|
// Запись
|
||||||
return $model->save() ? $model : null;
|
return $model->save() ? $model : null;
|
||||||
|
@ -346,7 +348,7 @@ class Product extends Document
|
||||||
*
|
*
|
||||||
* @todo Переделать нормально
|
* @todo Переделать нормально
|
||||||
*/
|
*/
|
||||||
public static function searchByCatn(string|null $catn, int $limit = 1, array $select = []): static|array|null
|
public static function searchByCatn(string $catn, int $limit = 999, array $select = []): static|array|null
|
||||||
{
|
{
|
||||||
if ($limit <= 1) {
|
if ($limit <= 1) {
|
||||||
return static::findOne(['catn' => $catn]);
|
return static::findOne(['catn' => $catn]);
|
||||||
|
@ -369,6 +371,37 @@ class Product extends Document
|
||||||
return $query;
|
return $query;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Поиск по каталожному номеру и производителю
|
||||||
|
*
|
||||||
|
* Ищет продукт и возвращает его,
|
||||||
|
* либо выполняет поиск через представление
|
||||||
|
*
|
||||||
|
* @todo Переделать нормально
|
||||||
|
*/
|
||||||
|
public static function searchByCatnAndProd(string $catn, string $prod, int $limit = 1, array $select = []): static|array|null
|
||||||
|
{
|
||||||
|
if ($limit <= 1) {
|
||||||
|
return static::findOne(['catn' => $catn, 'prod' => $prod]);
|
||||||
|
}
|
||||||
|
|
||||||
|
$query = self::find()
|
||||||
|
->where(['catn' => $catn, 'prod' => $prod])
|
||||||
|
->limit($limit)
|
||||||
|
->select($select)
|
||||||
|
->createCommand()
|
||||||
|
->execute()
|
||||||
|
->getAll();
|
||||||
|
|
||||||
|
foreach ($query as &$attribute) {
|
||||||
|
// Приведение всех свойств в массив и очистка от лишних данных
|
||||||
|
|
||||||
|
$attribute = $attribute->getAll();
|
||||||
|
}
|
||||||
|
|
||||||
|
return $query;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Поиск по каталожному номеру (через представления)
|
* Поиск по каталожному номеру (через представления)
|
||||||
*
|
*
|
||||||
|
@ -432,18 +465,19 @@ class Product extends Document
|
||||||
/**
|
/**
|
||||||
* Найти все аналоги
|
* Найти все аналоги
|
||||||
*
|
*
|
||||||
* @param string $catn Идентификатор товара
|
* @param string $prod Производитель
|
||||||
|
* @param string $catn Артикул
|
||||||
* @param int $limit Ограничение по количеству
|
* @param int $limit Ограничение по количеству
|
||||||
*
|
*
|
||||||
* @return array|null Найденные аналоги
|
* @return array|null Найденные аналоги
|
||||||
*/
|
*/
|
||||||
public static function searchAnalogs(string $catn, int $limit = 30): ?array
|
public static function searchAnalogs(string $prod, string $catn, int $limit = 30): ?array
|
||||||
{
|
{
|
||||||
// Инициализация буфера возврата
|
// Инициализация буфера возврата
|
||||||
$return = [];
|
$return = [];
|
||||||
|
|
||||||
// Поиск ключей аналогов
|
// Поиск ключей аналогов
|
||||||
$analogs = ProductEdgeProduct::searchConnections(self::searchByCatn($catn)->_key, $limit);
|
$analogs = ProductEdgeProduct::searchConnections(self::searchByCatnAndProd($catn, $prod)?->_key, $limit);
|
||||||
|
|
||||||
foreach ($analogs as $analog) {
|
foreach ($analogs as $analog) {
|
||||||
// Перебор найденных ключей (_key) аналогов
|
// Перебор найденных ключей (_key) аналогов
|
||||||
|
@ -694,21 +728,21 @@ class Product extends Document
|
||||||
*
|
*
|
||||||
* @param string $catn Артикул, каталожный номер
|
* @param string $catn Артикул, каталожный номер
|
||||||
*/
|
*/
|
||||||
public static function initEmpty(string $catn): Supply|array
|
public static function initEmpty(string $catn, string $prod): Supply|array
|
||||||
{
|
{
|
||||||
$oemn = self::searchOemn($catn);
|
$oemn = self::searchOemn($catn);
|
||||||
|
|
||||||
if (count($oemn) === 1) {
|
if (count($oemn) === 1) {
|
||||||
// Передан только один артикул
|
// Передан только один артикул
|
||||||
|
|
||||||
if ($model = Product::searchByCatn($catn)) {
|
if ($model = Product::searchByCatnAndProd($catn, $prod)) {
|
||||||
// Продукт уже существует
|
// Продукт уже существует
|
||||||
|
|
||||||
return $model;
|
return $model;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Запись пустого продукта
|
// Запись пустого продукта
|
||||||
return Product::writeEmpty($catn);
|
return Product::writeEmpty($catn, $prod);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Инициализация
|
// Инициализация
|
||||||
|
@ -717,14 +751,14 @@ class Product extends Document
|
||||||
foreach ($oemn as $catn) {
|
foreach ($oemn as $catn) {
|
||||||
// Перебор всех найденных артикулов
|
// Перебор всех найденных артикулов
|
||||||
|
|
||||||
if ($model = Product::searchByCatn($catn)) {
|
if ($model = Product::searchByCatnAndProd($catn, $prod)) {
|
||||||
// Продукт уже существует
|
// Продукт уже существует
|
||||||
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Запись
|
// Запись
|
||||||
if ($model = Product::writeEmpty($catn)) {
|
if ($model = Product::writeEmpty($catn, $prod)) {
|
||||||
// Записано
|
// Записано
|
||||||
|
|
||||||
// Запись в массив сохранённых моделей
|
// Запись в массив сохранённых моделей
|
||||||
|
@ -734,4 +768,32 @@ class Product extends Document
|
||||||
|
|
||||||
return $models;
|
return $models;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Активация
|
||||||
|
*
|
||||||
|
* @return bool Статус выполнения
|
||||||
|
*/
|
||||||
|
public function activate(): bool
|
||||||
|
{
|
||||||
|
$this->stts = 'activate';
|
||||||
|
|
||||||
|
if ($this->update() > 0) return true;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Деактивация
|
||||||
|
*
|
||||||
|
* @return bool Статус выполнения
|
||||||
|
*/
|
||||||
|
public function deactivate(): bool
|
||||||
|
{
|
||||||
|
$this->stts = 'inactive';
|
||||||
|
|
||||||
|
if ($this->update() > 0) return true;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -196,7 +196,7 @@ class Search extends Document
|
||||||
// Доставка "auto"
|
// Доставка "auto"
|
||||||
|
|
||||||
try {
|
try {
|
||||||
$from = (int) (Warehouse::searchBySupply(Supply::searchByCatn($connection['supply']['catn']))[0]->trmn ?? Settings::searchActive()?->delivery_from_default ?? 36);
|
$from = (int) (Warehouse::searchBySupply(Supply::searchByCatnAndProd($connection['supply']['catn'], $connection['supply']['prod']))[0]->trmn ?? Settings::searchActive()?->delivery_from_default ?? 36);
|
||||||
} catch (exception $e) {
|
} catch (exception $e) {
|
||||||
$from = empty(Settings::searchActive()->delivery_from_default) ? 36 : (int) Settings::searchActive()->delivery_from_default;
|
$from = empty(Settings::searchActive()->delivery_from_default) ? 36 : (int) Settings::searchActive()->delivery_from_default;
|
||||||
}
|
}
|
||||||
|
@ -234,7 +234,7 @@ class Search extends Document
|
||||||
$connection['delivery']['type'] = 'auto';
|
$connection['delivery']['type'] = 'auto';
|
||||||
} else {
|
} else {
|
||||||
// Инициализация инстанции продукта в базе данных
|
// Инициализация инстанции продукта в базе данных
|
||||||
$product = Product::searchByCatn($connection['product']['catn']);
|
$product = Product::searchByCatnAndProd($connection['product']['catn'], $connection['product']['prod']);
|
||||||
|
|
||||||
if ($connection['delivery'] = Dellin::calcDeliveryAdvanced(
|
if ($connection['delivery'] = Dellin::calcDeliveryAdvanced(
|
||||||
$from,
|
$from,
|
||||||
|
@ -294,7 +294,7 @@ class Search extends Document
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
$from = (int) (Warehouse::searchBySupply(Supply::searchByCatn($connection['supply']['catn']))[0]->trmn ?? Settings::searchActive()?->delivery_from_default ?? 36);
|
$from = (int) (Warehouse::searchBySupply(Supply::searchByCatnAndProd($connection['supply']['catn'], $connection['supply']['prod']))[0]->trmn ?? Settings::searchActive()?->delivery_from_default ?? 36);
|
||||||
} catch (Exception $e) {
|
} catch (Exception $e) {
|
||||||
$from = empty(Settings::searchActive()->delivery_from_default) ? 36 : (int) Settings::searchActive()->delivery_from_default;
|
$from = empty(Settings::searchActive()->delivery_from_default) ? 36 : (int) Settings::searchActive()->delivery_from_default;
|
||||||
}
|
}
|
||||||
|
@ -319,7 +319,7 @@ class Search extends Document
|
||||||
$buffer_delivery_avia['delivery']['type'] = 'avia';
|
$buffer_delivery_avia['delivery']['type'] = 'avia';
|
||||||
} else {
|
} else {
|
||||||
// Инициализация инстанции продукта в базе данных
|
// Инициализация инстанции продукта в базе данных
|
||||||
$product = Product::searchByCatn($buffer_delivery_avia['product']['catn']);
|
$product = Product::searchByCatnAndProd($buffer_delivery_avia['product']['catn'], $connection['product']['prod']);
|
||||||
|
|
||||||
if ($buffer_delivery_avia['delivery'] = Dellin::calcDeliveryAdvanced(
|
if ($buffer_delivery_avia['delivery'] = Dellin::calcDeliveryAdvanced(
|
||||||
$from,
|
$from,
|
||||||
|
@ -388,6 +388,8 @@ class Search extends Document
|
||||||
/**
|
/**
|
||||||
* Генерация HTML-кода с найденным товаром
|
* Генерация HTML-кода с найденным товаром
|
||||||
*
|
*
|
||||||
|
* Я сам в ахуе, переделывать не буду
|
||||||
|
*
|
||||||
* @param array $row Товар сгенерированный через Search::content()
|
* @param array $row Товар сгенерированный через Search::content()
|
||||||
* @param string|null $cover Обложка
|
* @param string|null $cover Обложка
|
||||||
* @param array $empties Реестр не найденных товаров
|
* @param array $empties Реестр не найденных товаров
|
||||||
|
@ -465,17 +467,12 @@ class Search extends Document
|
||||||
// Инициализация количества
|
// Инициализация количества
|
||||||
// $amount_raw = $amount = $supply['amnt'] ?? $supply_edge_product[0]['onec']['Количество'] ?? 0;
|
// $amount_raw = $amount = $supply['amnt'] ?? $supply_edge_product[0]['onec']['Количество'] ?? 0;
|
||||||
|
|
||||||
$amount_raw = $amount = count(@SupplyEdgeProduct::searchByVertex(@Supply::collectionName() . '/' . $supply['_key'], @Product::searchByCatn($supply['catn'])->readId(), limit: 999)) ?? 1;
|
// Инициализация цены и её представления
|
||||||
|
$amount_raw = $amount = count(@SupplyEdgeProduct::searchByVertex(@Supply::collectionName() . '/' . $supply['_key'], @Product::searchByCatnAndProd($supply['catn'], $supply['prod'])->readId(), limit: 999)) ?? 1;
|
||||||
if (empty($amount_raw) || $amount_raw < 1) {
|
|
||||||
// Уже не используется
|
|
||||||
$amount = 'Под заказ';
|
|
||||||
} else {
|
|
||||||
$amount .= ' шт';
|
$amount .= ' шт';
|
||||||
}
|
|
||||||
|
|
||||||
if ($amount_raw < 1 || $price_raw < 1) {
|
if ($amount_raw < 1 || $price_raw < 1) {
|
||||||
// Нет в наличии или цена 0 рублей
|
// Количество 0 или цена 0
|
||||||
|
|
||||||
// Поставки отстутвуют
|
// Поставки отстутвуют
|
||||||
no_supplies:
|
no_supplies:
|
||||||
|
@ -494,7 +491,7 @@ class Search extends Document
|
||||||
HTML;
|
HTML;
|
||||||
|
|
||||||
// Запись в список ненайденных
|
// Запись в список ненайденных
|
||||||
$empties[] = $row['catn'];
|
$empties[$row['prod']] = [$row['catn']] + (isset($empties[$row['prod']]) ? $empties[$row['prod']] : []);
|
||||||
|
|
||||||
// Запись блокировщика
|
// Запись блокировщика
|
||||||
$empty_block = true;
|
$empty_block = true;
|
||||||
|
|
|
@ -468,24 +468,24 @@ class Supply extends Product implements ProductInterface, OfferInterface
|
||||||
// Поиск аналогов
|
// Поиск аналогов
|
||||||
$analogs = explode(',', (string) ($row['Аналоги'] ?? $row['аналоги'] ?? $row['Analogs'] ?? $row['analogs'] ?? $row['ОЕМ'] ?? $row['eom'] ?? ''), 50);
|
$analogs = explode(',', (string) ($row['Аналоги'] ?? $row['аналоги'] ?? $row['Analogs'] ?? $row['analogs'] ?? $row['ОЕМ'] ?? $row['eom'] ?? ''), 50);
|
||||||
|
|
||||||
|
// Поиск производителя
|
||||||
|
$prod = $row['Производитель'] ?? $row['производитель'] ?? $row['Production'] ?? $row['production'] ?? $row['prod'] ?? 'Неизвестный';
|
||||||
|
|
||||||
// Инициализация функции создания поставки
|
// Инициализация функции создания поставки
|
||||||
$create = function (string $_supply) use ($row, $analogs, &$created, &$updated, &$imported, $amount, $account): bool {
|
$create = function (string $_supply) use ($article, $row, $prod, $analogs, &$created, &$updated, &$imported, $amount, $account): bool {
|
||||||
// Очистка
|
// Очистка
|
||||||
$_supply = trim($_supply);
|
$_supply = trim($_supply);
|
||||||
|
|
||||||
// Проверка на то, что передано пустое поле "Аналоги" (подразумевается)
|
|
||||||
if (empty($_supply)) return false;
|
|
||||||
|
|
||||||
// Инициализация буфера документов
|
|
||||||
$_row = [];
|
|
||||||
|
|
||||||
// Инициализация статуса ошибки
|
// Инициализация статуса ошибки
|
||||||
$error = false;
|
$error = false;
|
||||||
|
|
||||||
|
// Инициализация буфера документов
|
||||||
|
$_row = [];
|
||||||
|
|
||||||
// Запись артикула (каталожного номера) в буфер
|
// Запись артикула (каталожного номера) в буфер
|
||||||
$_row['catn'] = $_supply;
|
$_row['catn'] = $_supply;
|
||||||
$_row['cost'] = (float) preg_replace('/[^\d\.]+/', '', preg_replace('/\,+/', ' ', $row['Стоимость'] ?? $row['стоимость'] ?? $row['Цена'] ?? $row['цена'] ?? $row['Cost'] ?? $row['cost'] ?? $row['Price'] ?? $row['price']));
|
$_row['cost'] = (float) preg_replace('/[^\d\.]+/', '', preg_replace('/\,+/', ' ', $row['Стоимость'] ?? $row['стоимость'] ?? $row['Цена'] ?? $row['цена'] ?? $row['Cost'] ?? $row['cost'] ?? $row['Price'] ?? $row['price'])) ?? 0;
|
||||||
$_row['prod'] = $row['Производитель'] ?? $row['производитель'] ?? $row['Production'] ?? $row['production'] ?? $row['prod'];
|
$_row['prod'] = $prod;
|
||||||
$_row['oemn'] = array_walk($analogs, 'trim');
|
$_row['oemn'] = array_walk($analogs, 'trim');
|
||||||
|
|
||||||
// Инициализация буфера поставки
|
// Инициализация буфера поставки
|
||||||
|
@ -497,21 +497,57 @@ class Supply extends Product implements ProductInterface, OfferInterface
|
||||||
// Проверка пройдена
|
// Проверка пройдена
|
||||||
|
|
||||||
if (($_supply = $supply->validateForUniqueness($account)) instanceof static) {
|
if (($_supply = $supply->validateForUniqueness($account)) instanceof static) {
|
||||||
// Найден документ с такими параметрами
|
// Найдена поставка с такими параметрами (артикул и производитель)
|
||||||
|
|
||||||
if ($_supply->cost === $_row['cost']) {
|
if ($_supply->cost !== $_row['cost']) {
|
||||||
// Стоимость не изменилась
|
// Стоимость изменилась
|
||||||
|
|
||||||
if ($product = Product::searchByCatn($_supply->catn)) {
|
if ($product = Product::searchByCatnAndProd($supply->catn, $supply->prod)) {
|
||||||
|
// Найден товар подходящий для привязки с только что созданной поставкой (подразумевается что уже был привязан в коде выше)
|
||||||
|
|
||||||
|
// Приведение типа (для анализатора)
|
||||||
|
if (is_array($product)) $product = $product[0];
|
||||||
|
} else {
|
||||||
|
// Не найден товар подходящий для привязки с только что созданной поставкой
|
||||||
|
|
||||||
|
if ($product = Product::writeEmpty($supply->catn, $supply->prod, Account::isMinimalAuthorized($account))) {
|
||||||
|
// Удалось записать новый товар (НЕАКТИВНЫЙ)
|
||||||
|
|
||||||
|
// Отправка уведомления
|
||||||
|
// Notification::_write("Не найден товар подходящий для связи с поставкой: $supply->catn", account: '@authorized');
|
||||||
|
} else {
|
||||||
|
// Не удалось записать новый товар
|
||||||
|
|
||||||
|
// Отправка уведомления
|
||||||
|
Notification::_write("Не удалось создать новый товар: $supply->catn", account: '@authorized');
|
||||||
|
|
||||||
|
// Запись статуса об ошибке
|
||||||
|
$error = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Завершение выполнения при ошибке
|
||||||
|
if ($error) return !$error;
|
||||||
|
|
||||||
|
if ($product = Product::searchByCatnAndProd($_supply->catn, $_supply->prod)) {
|
||||||
// Найден товар подходящий для привязки с этой поставкой
|
// Найден товар подходящий для привязки с этой поставкой
|
||||||
|
|
||||||
for ($i = 0; $i++ < $amount;) {
|
for ($i = 0; $i++ < $amount;) {
|
||||||
// Перебор создаваемых рёбер (так работает обозначение количества товаров в наличии)
|
// Перебор создаваемых рёбер (так работает обозначение количества товаров в наличии)
|
||||||
|
|
||||||
// Поиск ребёр
|
// Поиск ребёр
|
||||||
$edges = SupplyEdgeProduct::searchByVertex($supply->readId(), $product->readId(), limit: 999);
|
$edges = SupplyEdgeProduct::searchByVertex($_supply->readId(), $product->readId(), limit: 999);
|
||||||
|
|
||||||
if ($amount === count($edges)) {
|
if (count($edges) === 0) {
|
||||||
|
// Ребёр нет, но должны быть (если количество загружаемых поставок более нуля)
|
||||||
|
|
||||||
|
for ($i = 0; $i++ < $amount;) {
|
||||||
|
// Перебор создаваемых рёбер (так работает обозначение количества товаров в наличии)
|
||||||
|
|
||||||
|
// Запись ребра
|
||||||
|
SupplyEdgeProduct::write($_supply->readId(), $product->readId(), data: ['type' => 'connect']);
|
||||||
|
}
|
||||||
|
} else if ($amount === count($edges)) {
|
||||||
// Количество товаров в поставке не изменилось
|
// Количество товаров в поставке не изменилось
|
||||||
|
|
||||||
// Раз изменений нет, то обновлять ничего не нужно
|
// Раз изменений нет, то обновлять ничего не нужно
|
||||||
|
@ -520,7 +556,7 @@ class Supply extends Product implements ProductInterface, OfferInterface
|
||||||
// Количество товаров в поставке стало МЕНЬШЕ
|
// Количество товаров в поставке стало МЕНЬШЕ
|
||||||
|
|
||||||
// Расчёт разницы
|
// Расчёт разницы
|
||||||
$delete = $edges - $amount;
|
$delete = count($edges) - $amount;
|
||||||
|
|
||||||
// Инициализация количества рёбер которые не удалось удалить
|
// Инициализация количества рёбер которые не удалось удалить
|
||||||
$failed = 0;
|
$failed = 0;
|
||||||
|
@ -539,12 +575,12 @@ class Supply extends Product implements ProductInterface, OfferInterface
|
||||||
}
|
}
|
||||||
|
|
||||||
// Отправка уведомления
|
// Отправка уведомления
|
||||||
Notification::_write("Не удалось удалить $failed рёбер у поставки $supply->catn");
|
Notification::_write("Не удалось удалить $failed рёбер у поставки $_supply->catn");
|
||||||
} else if ($amount > $edges) {
|
} else if ($amount > count($edges)) {
|
||||||
// Количество товаров в поставке стало БОЛЬШЕ
|
// Количество товаров в поставке стало БОЛЬШЕ
|
||||||
|
|
||||||
// Расчёт разницы
|
// Расчёт разницы
|
||||||
$write = $amount - $edges;
|
$write = $amount - count($edges);
|
||||||
|
|
||||||
// Инициализация количества рёбер которые не удалось записать
|
// Инициализация количества рёбер которые не удалось записать
|
||||||
$failed = 0;
|
$failed = 0;
|
||||||
|
@ -552,7 +588,7 @@ class Supply extends Product implements ProductInterface, OfferInterface
|
||||||
for ($i = 0; $i < $write; $i++) {
|
for ($i = 0; $i < $write; $i++) {
|
||||||
// Перебор рёбер на запись (синхронизация)
|
// Перебор рёбер на запись (синхронизация)
|
||||||
|
|
||||||
if (SupplyEdgeProduct::write($supply->readId(), $product->readId(), data: ['type' => 'connect'])) {
|
if (SupplyEdgeProduct::write($_supply->readId(), $product->readId(), data: ['type' => 'connect'])) {
|
||||||
// Записано ребро
|
// Записано ребро
|
||||||
} else {
|
} else {
|
||||||
// Не записано ребро
|
// Не записано ребро
|
||||||
|
@ -563,7 +599,7 @@ class Supply extends Product implements ProductInterface, OfferInterface
|
||||||
}
|
}
|
||||||
|
|
||||||
// Отправка уведомления
|
// Отправка уведомления
|
||||||
Notification::_write("Не удалось записать $failed рёбер у поставки $supply->catn");
|
Notification::_write("Не удалось записать $failed рёбер у поставки $_supply->catn");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -602,40 +638,6 @@ class Supply extends Product implements ProductInterface, OfferInterface
|
||||||
$imported[] = $supply;
|
$imported[] = $supply;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($product = Product::searchByCatn($supply->catn)) {
|
|
||||||
// Найден товар подходящий для привязки с только что созданной поставкой
|
|
||||||
|
|
||||||
// Приведение типа (для анализатора)
|
|
||||||
if (is_array($product)) $product = $product[0];
|
|
||||||
} else {
|
|
||||||
// Не найден товар подходящий для привязки с только что созданной поставкой
|
|
||||||
|
|
||||||
if ($product = Product::writeEmpty($supply->catn)) {
|
|
||||||
// Удалось записать новый товар (НЕАКТИВНЫЙ)
|
|
||||||
|
|
||||||
// Отправка уведомления
|
|
||||||
// Notification::_write("Не найден товар подходящий для связи с поставкой: $supply->catn", account: '@authorized');
|
|
||||||
} else {
|
|
||||||
// Не удалось записать новый товар
|
|
||||||
|
|
||||||
// Отправка уведомления
|
|
||||||
Notification::_write("Не удалось создать новый товар: $supply->catn", account: '@authorized');
|
|
||||||
|
|
||||||
// Запись статуса об ошибке
|
|
||||||
$error = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// if (isset($product->prod) && $product->prod === $supply->prod) {
|
|
||||||
// // Производитель совпадает с тем, что указан в товаре
|
|
||||||
for ($i = 0; $i++ < $amount;) {
|
|
||||||
// Перебор создаваемых рёбер (так работает обозначение количества товаров в наличии)
|
|
||||||
|
|
||||||
// Запись ребра
|
|
||||||
SupplyEdgeProduct::write($supply->readId(), $product->readId(), data: ['type' => 'connect']);
|
|
||||||
}
|
|
||||||
// }
|
|
||||||
} else {
|
} else {
|
||||||
// Проверка не пройдена
|
// Проверка не пройдена
|
||||||
|
|
||||||
|
@ -646,6 +648,31 @@ class Supply extends Product implements ProductInterface, OfferInterface
|
||||||
$error = true;
|
$error = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (Account::isMinimalAuthorized($account)) {
|
||||||
|
// Авторизованный пользователь
|
||||||
|
|
||||||
|
// Активация товара
|
||||||
|
$product->activate();
|
||||||
|
|
||||||
|
// Инициализация списка артикулов группы для добавления аналогов
|
||||||
|
$group = [$article] + $analogs;
|
||||||
|
|
||||||
|
foreach ($group as $catn) {
|
||||||
|
// Перебор артикулов для добавления аналогов
|
||||||
|
|
||||||
|
if ($targets = Product::searchByCatn($catn)) {
|
||||||
|
// Найдены товары для добавления аналогов
|
||||||
|
|
||||||
|
foreach ($targets as $target) {
|
||||||
|
// Перебор товаров для добавления аналогов
|
||||||
|
|
||||||
|
// Добавление в группу аналогов
|
||||||
|
$product->synchronization($target);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return !$error;
|
return !$error;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -55,7 +55,7 @@ use app\models\Product;
|
||||||
&& (yii::$app->user->identity->type === 'administrator'
|
&& (yii::$app->user->identity->type === 'administrator'
|
||||||
|| yii::$app->user->identity->type === 'moderator')
|
|| yii::$app->user->identity->type === 'moderator')
|
||||||
) : ?>
|
) : ?>
|
||||||
<input id="product_slider_image_new" type="file" class="d-none" onchange="return product_panel_images_write('<?= $model['catn'] ?>', this);" multiple />
|
<input id="product_slider_image_new" type="file" class="d-none" onchange="return product_panel_images_write('<?= $model['catn'] ?>', '<?= $model['prod'] ?>', this);" multiple />
|
||||||
<label class="p-0 mb-2 button_write unselectable" for="product_slider_image_new" role="button">
|
<label class="p-0 mb-2 button_write unselectable" for="product_slider_image_new" role="button">
|
||||||
<img class="img-fluid rounded" src="/img/covers/h150/product_new.png" />
|
<img class="img-fluid rounded" src="/img/covers/h150/product_new.png" />
|
||||||
</label>
|
</label>
|
||||||
|
@ -89,14 +89,15 @@ use app\models\Product;
|
||||||
) {
|
) {
|
||||||
// Инициализация артикула
|
// Инициализация артикула
|
||||||
$catn = $model['catn'];
|
$catn = $model['catn'];
|
||||||
|
$prod = $model['prod'];
|
||||||
|
|
||||||
echo <<<HTML
|
echo <<<HTML
|
||||||
<input type="radio" id="product_slider_image_$key" name="slider" $checked/>
|
<input type="radio" id="product_slider_image_$key" name="slider" $checked/>
|
||||||
<div class="col p-0 unselectable">
|
<div class="col p-0 unselectable">
|
||||||
<img class="mb-3 img-fluid w-100 rounded" src="$orig"/>
|
<img class="mb-3 img-fluid w-100 rounded" src="$orig"/>
|
||||||
<div class="d-flex justify-content-center">
|
<div class="d-flex justify-content-center">
|
||||||
<button class="flex-grow-1 mr-3 btn button_blue button_clean" onclick="return product_panel_images_cover_write('$catn', '$key');">Сделать обложкой</button>
|
<button class="flex-grow-1 mr-3 btn button_blue button_clean" onclick="return product_panel_images_cover_write('$catn', '$prod', '$key');">Сделать обложкой</button>
|
||||||
<button class="btn button_red button_clean" onclick="return product_panel_images_delete('$catn', '$key');">Удалить</button>
|
<button class="btn button_red button_clean" onclick="return product_panel_images_delete('$catn', '$prod', '$key');">Удалить</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
HTML;
|
HTML;
|
||||||
|
@ -119,28 +120,17 @@ use app\models\Product;
|
||||||
&& (yii::$app->user->identity->type === 'administrator'
|
&& (yii::$app->user->identity->type === 'administrator'
|
||||||
|| yii::$app->user->identity->type === 'moderator')) : ?>
|
|| yii::$app->user->identity->type === 'moderator')) : ?>
|
||||||
<nav class="row my-2 py-2 px-3 rounded product_admin_menu">
|
<nav class="row my-2 py-2 px-3 rounded product_admin_menu">
|
||||||
<a id="product_info_admin_connect" class="mr-2 h-100 text-dark d-flex" title="Подсоединить аналог" role="button" onclick="return product_panel_connect('<?= $model['catn'] ?>');">
|
<a id="product_info_admin_connect" class="mr-2 h-100 text-dark d-flex" title="Подсоединить аналог" role="button" onclick="return product_panel_connect('<?= $model['catn'] ?>', '<?= $model['prod'] ?>');">
|
||||||
<i class="fas fa-plus-square my-auto"></i>
|
<i class="fas fa-plus-square my-auto"></i>
|
||||||
</a>
|
</a>
|
||||||
<a id="product_info_admin_connect" class="mr-2 h-100 text-dark d-flex" title="Отсоединить аналог" role="button" onclick="return product_panel_disconnect('<?= $model['catn'] ?>');">
|
<a id="product_info_admin_connect" class="mr-2 h-100 text-dark d-flex" title="Отсоединить аналог" role="button" onclick="return product_panel_disconnect('<?= $model['catn'] ?>', '<?= $model['prod'] ?>');">
|
||||||
<i class="fas fa-minus-square my-auto"></i>
|
<i class="fas fa-minus-square my-auto"></i>
|
||||||
</a>
|
</a>
|
||||||
<a id="product_info_admin_connect" class="ml-auto h-100 text-dark d-flex" title="Удалить" role="button" onclick="return product_panel_delete('<?= $model['catn'] ?>');">
|
<a id="product_info_admin_connect" class="ml-auto h-100 text-dark d-flex" title="Удалить" role="button" onclick="return product_panel_delete('<?= $model['catn'] ?>', '<?= $model['prod'] ?>');">
|
||||||
<i class="fas fa-trash-alt my-auto"></i>
|
<i class="fas fa-trash-alt my-auto"></i>
|
||||||
</a>
|
</a>
|
||||||
</nav>
|
</nav>
|
||||||
<?php endif ?>
|
<?php endif ?>
|
||||||
<div class="row mb-2">
|
|
||||||
<?php if (
|
|
||||||
!yii::$app->user->isGuest
|
|
||||||
&& (yii::$app->user->identity->type === 'administrator'
|
|
||||||
|| yii::$app->user->identity->type === 'moderator')
|
|
||||||
) : ?>
|
|
||||||
<h3 id="title_<?= $model['catn'] ?>" class="my-auto pointer-event product_title" role="button" onclick="return product_panel_title_edit('<?= $model['catn'] ?>', this);"><?= $model['prod'] ?? 'Без названия' ?></h3>
|
|
||||||
<?php else : ?>
|
|
||||||
<h3 id="title_<?= $model['catn'] ?>" class="my-auto"><?= $model['prod'] ?? 'Без названия' ?></h3>
|
|
||||||
<?php endif ?>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="row mb-2">
|
<div class="row mb-2">
|
||||||
<?php if (
|
<?php if (
|
||||||
|
@ -148,19 +138,19 @@ use app\models\Product;
|
||||||
&& (yii::$app->user->identity->type === 'administrator'
|
&& (yii::$app->user->identity->type === 'administrator'
|
||||||
|| yii::$app->user->identity->type === 'moderator')
|
|| yii::$app->user->identity->type === 'moderator')
|
||||||
) : ?>
|
) : ?>
|
||||||
<h6 id="catn_<?= $model['catn'] ?>" class="mr-auto my-auto pointer-event product_title" role="button" onclick="return product_panel_catn_edit('<?= $model['catn'] ?>', this, true);">
|
<h1 id="catn_<?= $model['catn'] ?>" class="mr-auto my-auto pointer-event product_catn" role="button" onclick="return product_panel_catn_edit('<?= $model['catn'] ?>', '<?= $model['prod'] ?>', this, true);">
|
||||||
<?= $model['catn'] ?? '' ?>
|
<?= $model['catn'] ?? '' ?>
|
||||||
</h6>
|
</h1>
|
||||||
<h6 id="prod_<?= $model['catn'] ?>" class="my-0">
|
<h2 id="prod_<?= $model['catn'] ?>" class="mt-auto my-0 product_prod" role="button" onclick="return product_panel_prod_edit('<?= $model['catn'] ?>', '<?= $model['prod'] ?>', this, true);">
|
||||||
<?= $model['prod'] ?? 'Неизвестно' ?>
|
<?= $model['prod'] ?? 'Неизвестно' ?>
|
||||||
</h6>
|
</h2>
|
||||||
<?php else : ?>
|
<?php else : ?>
|
||||||
<h6 id="catn_<?= $model['catn'] ?>" class="mr-auto my-0">
|
<h1 id="catn_<?= $model['catn'] ?>" class="mr-auto my-auto product_catn">
|
||||||
<?= $model['catn'] ?>
|
<?= $model['catn'] ?>
|
||||||
</h6>
|
</h1>
|
||||||
<h6 id="prod_<?= $model['catn'] ?>" class="my-0">
|
<h2 id="prod_<?= $model['catn'] ?>" class="mt-auto my-0 product_prod">
|
||||||
<?= $model['prod'] ?? 'Неизвестно' ?>
|
<?= $model['prod'] ?? 'Неизвестно' ?>
|
||||||
</h6>
|
</h2>
|
||||||
<?php endif ?>
|
<?php endif ?>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@ -176,11 +166,11 @@ use app\models\Product;
|
||||||
<section id="prod_<?= $model['catn'] ?>_info" class="col">
|
<section id="prod_<?= $model['catn'] ?>_info" class="col">
|
||||||
<!-- Габариты -->
|
<!-- Габариты -->
|
||||||
<p class="form-control-sm p-0 h-auto">
|
<p class="form-control-sm p-0 h-auto">
|
||||||
<b>Габариты:</b><span id="prod_<?= $model['catn'] ?>_dmns_x" class="ml-1 pointer-event" role="button" onclick="return product_panel_dimensions_edit('<?= $model['catn'] ?>', this, 'x');"><?= empty($model['dmns']['x']) ? '0' : $model['dmns']['x'] ?></span><span class="mr-1">см</span><small>x</small><span id="prod_<?= $model['catn'] ?>_dmns_y" class="ml-1 pointer-event" role="button" onclick="return product_panel_dimensions_edit('<?= $model['catn'] ?>', this, 'y');"><?= empty($model['dmns']['y']) ? '0' : $model['dmns']['y'] ?></span><span class="mr-1">см</span><small>x</small><span id="prod_<?= $model['catn'] ?>_dmns_z" class="ml-1 pointer-event" role="button" onclick="return product_panel_dimensions_edit('<?= $model['catn'] ?>', this, 'z');"><?= empty($model['dmns']['z']) ? '0' : $model['dmns']['z'] ?></span><span class="mr-1">см</span>
|
<b>Габариты:</b><span id="prod_<?= $model['catn'] ?>_dmns_x" class="ml-1 pointer-event" role="button" onclick="return product_panel_dimensions_edit('<?= $model['catn'] ?>', '<?= $model['prod'] ?>', this, 'x');"><?= empty($model['dmns']['x']) ? '0' : $model['dmns']['x'] ?></span><span class="mr-1">см</span><small>x</small><span id="prod_<?= $model['catn'] ?>_dmns_y" class="ml-1 pointer-event" role="button" onclick="return product_panel_dimensions_edit('<?= $model['catn'] ?>', '<?= $model['prod'] ?>', this, 'y');"><?= empty($model['dmns']['y']) ? '0' : $model['dmns']['y'] ?></span><span class="mr-1">см</span><small>x</small><span id="prod_<?= $model['catn'] ?>_dmns_z" class="ml-1 pointer-event" role="button" onclick="return product_panel_dimensions_edit('<?= $model['catn'] ?>', '<?= $model['prod'] ?>', this, 'z');"><?= empty($model['dmns']['z']) ? '0' : $model['dmns']['z'] ?></span><span class="mr-1">см</span>
|
||||||
</p>
|
</p>
|
||||||
<!-- Вес -->
|
<!-- Вес -->
|
||||||
<p class="form-control-sm p-0 h-auto">
|
<p class="form-control-sm p-0 h-auto">
|
||||||
<b>Вес:</b><span id="prod_<?= $model['catn'] ?>_dmns_x" class="ml-1 pointer-event" role="button" onclick="return product_panel_weight_edit('<?= $model['catn'] ?>', this);"><?= empty($model['wght']) ? '0' : $model['wght'] ?></span><span class="mr-1">г</span>
|
<b>Вес:</b><span id="prod_<?= $model['catn'] ?>_dmns_x" class="ml-1 pointer-event" role="button" onclick="return product_panel_weight_edit('<?= $model['catn'] ?>', '<?= $model['prod'] ?>', this);"><?= empty($model['wght']) ? '0' : $model['wght'] ?></span><span class="mr-1">г</span>
|
||||||
</p>
|
</p>
|
||||||
</section>
|
</section>
|
||||||
<?php else : ?>
|
<?php else : ?>
|
||||||
|
@ -206,7 +196,7 @@ use app\models\Product;
|
||||||
&& (yii::$app->user->identity->type === 'administrator'
|
&& (yii::$app->user->identity->type === 'administrator'
|
||||||
|| yii::$app->user->identity->type === 'moderator')
|
|| yii::$app->user->identity->type === 'moderator')
|
||||||
) : ?>
|
) : ?>
|
||||||
<p id="description_<?= $model['catn'] ?>" class="mt-0 ml-0 text-break pointer-event product_description" role="button" onclick="return product_panel_description_edit('<?= $model['catn'] ?>', this);"><?= $model['dscr'] ?? 'Без описания' ?></p>
|
<p id="description_<?= $model['catn'] ?>" class="mt-0 ml-0 text-break pointer-event product_description" role="button" onclick="return product_panel_description_edit('<?= $model['catn'] ?>', '<?= $model['prod'] ?>', this);"><?= $model['dscr'] ?? 'Без описания' ?></p>
|
||||||
<?php else : ?>
|
<?php else : ?>
|
||||||
<p id="description_<?= $model['catn'] ?>" class="mt-0 ml-0 text-break product_description"><?= $model['prod'] ?? 'Без описания' ?></p>
|
<p id="description_<?= $model['catn'] ?>" class="mt-0 ml-0 text-break product_description"><?= $model['prod'] ?? 'Без описания' ?></p>
|
||||||
<?php endif ?>
|
<?php endif ?>
|
||||||
|
@ -220,18 +210,19 @@ use app\models\Product;
|
||||||
) {
|
) {
|
||||||
// Инициализация артикула
|
// Инициализация артикула
|
||||||
$catn = $model['catn'];
|
$catn = $model['catn'];
|
||||||
|
$prod = $model['prod'];
|
||||||
|
|
||||||
if (isset($model['stts']) && $model['stts'] === 'active') {
|
if (isset($model['stts']) && $model['stts'] === 'active') {
|
||||||
// Товар активен
|
// Товар активен
|
||||||
|
|
||||||
echo <<<HTML
|
echo <<<HTML
|
||||||
<button class="row btn button_red button_clean" onclick="return product_panel_product_stts('$catn', 'inactive');">Деактивировать</button>
|
<button class="row btn button_red button_clean" onclick="return product_panel_product_stts('$catn', '$prod', 'inactive');">Деактивировать</button>
|
||||||
HTML;
|
HTML;
|
||||||
} else {
|
} else {
|
||||||
// Товар неактивен, либо что-то с ним ещё
|
// Товар неактивен, либо что-то с ним ещё
|
||||||
|
|
||||||
echo <<<HTML
|
echo <<<HTML
|
||||||
<button class="row btn button_green button_clean" onclick="return product_panel_product_stts('$catn', 'active');">Активировать</button>
|
<button class="row btn button_green button_clean" onclick="return product_panel_product_stts('$catn', '$prod', 'active');">Активировать</button>
|
||||||
HTML;
|
HTML;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,8 +35,9 @@ $timezone = $timezone[1][0];
|
||||||
|
|
||||||
<div class="mb-3 row">
|
<div class="mb-3 row">
|
||||||
<div class="pr-0 col-auto"><?= ++$amount ?>.</div>
|
<div class="pr-0 col-auto"><?= ++$amount ?>.</div>
|
||||||
<a class="pr-0 col overflow-hidden" title="<?= $product->name ?? 'Открыть страницу товара' ?>" href="/product/<?= $product->catn ?? 'Неизвестно' ?>">
|
<a class="pr-0 col overflow-hidden" title="<?= $product->name ?? 'Артикул' ?>" href="/product/<?= $product->prod ?? 'Неизвестно' ?>/<?= $product->catn ?? 'Неизвестно' ?>">
|
||||||
<?= $product->catn ?? 'Неизвестно' ?>
|
<?= $product->catn ?? 'Неизвестно' ?>
|
||||||
|
<span class="text-dark" title="Производитель"> (<?= $product->prod ?? 'Неизвестно' ?>)</span>
|
||||||
</a>
|
</a>
|
||||||
<div class="my-auto pr-0 col-auto text-right">
|
<div class="my-auto pr-0 col-auto text-right">
|
||||||
<?= $create ?? 'Неизвестно' ?>
|
<?= $create ?? 'Неизвестно' ?>
|
||||||
|
|
|
@ -214,11 +214,11 @@ $timezone = $timezone[1][0];
|
||||||
|
|
||||||
<div class="mb-3 row">
|
<div class="mb-3 row">
|
||||||
<div class="pr-0 col-auto"><?= ++$amount ?>.</div>
|
<div class="pr-0 col-auto"><?= ++$amount ?>.</div>
|
||||||
<div class="pr-0 col-2 overflow-hidden" title="Название">
|
<div class="pr-0 col-2 overflow-hidden" title="Артикул">
|
||||||
<?= $supply->catn ?? 'Неизвестно' ?>
|
<?= $supply->catn ?? 'Неизвестно' ?>
|
||||||
|
<span class="text-dark" title="Производитель"> (<?= $product->prod ?? 'Неизвестно' ?>)</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="my-auto pr-0 col" title="Описание">
|
<div class="my-auto pr-0 col">
|
||||||
<?= $supply->dscr ?? 'Без описания' ?>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="my-auto pr-0 col-auto" title="Количество">
|
<div class="my-auto pr-0 col-auto" title="Количество">
|
||||||
<?= $supply->amnt ?? '0' ?>шт
|
<?= $supply->amnt ?? '0' ?>шт
|
||||||
|
@ -230,9 +230,9 @@ $timezone = $timezone[1][0];
|
||||||
<?= $create ?? 'Неизвестно' ?>
|
<?= $create ?? 'Неизвестно' ?>
|
||||||
</div>
|
</div>
|
||||||
<?php if (empty($product)) : ?>
|
<?php if (empty($product)) : ?>
|
||||||
<a class="my-auto pr-0 col-auto fas fa-shopping-basket icon_red" title="Товар отсутствует" type="button" onclick="return profile_panel_input_suppliers_accounts_create_product(this, <?= "'$supply->catn'" ?? null ?>);"></a>
|
<a class="my-auto pr-0 col-auto fas fa-shopping-basket icon_red" title="Товар отсутствует" type="button" onclick="return profile_panel_input_suppliers_accounts_create_product(this, <?= "'$supply->catn'" ?? null ?>, <?= "'$supply->prod'" ?? null ?>);"></a>
|
||||||
<?php else : ?>
|
<?php else : ?>
|
||||||
<a class="my-auto pr-0 col-auto fas fa-shopping-basket text-dark" title="Товар" href="<?= "/product/$product->catn" ?>"></a>
|
<a class="my-auto pr-0 col-auto fas fa-shopping-basket text-dark" title="Товар" href="<?= "/product/$product->prod/$product->catn" ?>"></a>
|
||||||
<?php endif ?>
|
<?php endif ?>
|
||||||
<a class="my-auto pr-0 col-auto fas fa-user text-dark" title="Владелец" href="<?= $account ?? '/' ?>"></a>
|
<a class="my-auto pr-0 col-auto fas fa-user text-dark" title="Владелец" href="<?= $account ?? '/' ?>"></a>
|
||||||
<a class="my-auto col-auto fas fa-trash-alt text-dark" type="button" title="Удалить" onclick="page_profile_supplies_delete()"></a>
|
<a class="my-auto col-auto fas fa-trash-alt text-dark" type="button" title="Удалить" onclick="page_profile_supplies_delete()"></a>
|
||||||
|
|
|
@ -44,7 +44,7 @@ $panel ?? $panel = 'profile_panel_supplies_input_import';
|
||||||
<h5>Управление складами</h5>
|
<h5>Управление складами</h5>
|
||||||
<div class="dropdown-divider mb-4"></div>
|
<div class="dropdown-divider mb-4"></div>
|
||||||
|
|
||||||
<?php if (Account::isMinimalAuthorized()) : ?>
|
<?php if (false && Account::isMinimalAuthorized()) : ?>
|
||||||
<?php
|
<?php
|
||||||
$form = ActiveForm::begin([
|
$form = ActiveForm::begin([
|
||||||
'id' => 'form_product_import_excel',
|
'id' => 'form_product_import_excel',
|
||||||
|
|
|
@ -49,7 +49,7 @@ use app\models\Search;
|
||||||
<div class="row p-2 rounded">
|
<div class="row p-2 rounded">
|
||||||
<img class="ml-0 rounded" src="<?= $covr ?>" />
|
<img class="ml-0 rounded" src="<?= $covr ?>" />
|
||||||
<div class="col-3 ml-3 p-0 d-flex flex-column row_fixed_height">
|
<div class="col-3 ml-3 p-0 d-flex flex-column row_fixed_height">
|
||||||
<a class="my-auto text-dark" href="/product/<?= $catn ?>">
|
<a class="my-auto text-dark" href="/product/<?= $prod ?>/<?= $catn ?>">
|
||||||
<h5 class="m-0"><?= $catn ?></h5>
|
<h5 class="m-0"><?= $catn ?></h5>
|
||||||
<h6 class="m-0"><small><?= $prod ?></small></h6>
|
<h6 class="m-0"><small><?= $prod ?></small></h6>
|
||||||
</a>
|
</a>
|
||||||
|
@ -72,15 +72,20 @@ use app\models\Search;
|
||||||
// Инициализация буфера записанных аналогов
|
// Инициализация буфера записанных аналогов
|
||||||
$writed = [];
|
$writed = [];
|
||||||
|
|
||||||
foreach ($empties as $catn) {
|
foreach ($empties as $prod => $products) {
|
||||||
// Перебор товаров без поставок
|
// Перебор поставок
|
||||||
|
|
||||||
// Чтение и запись asdasdas
|
foreach ($products as $catn) {
|
||||||
$analogs[$catn] = Search::content(products: Product::searchAnalogs($catn));
|
// Перебор товаров
|
||||||
|
|
||||||
|
// Чтение и запись аналогов
|
||||||
|
$analogs[$catn] = Search::content(products: Product::searchAnalogs($prod, $catn));
|
||||||
|
|
||||||
// Исключение из вывода в списке аналогов
|
// Исключение из вывода в списке аналогов
|
||||||
$writed[$catn] = true;
|
$writed[$catn] = true;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
?>
|
?>
|
||||||
<?php foreach ($analogs as $products) : ?>
|
<?php foreach ($analogs as $products) : ?>
|
||||||
<?php foreach ($products as $product) : ?>
|
<?php foreach ($products as $product) : ?>
|
||||||
|
@ -101,7 +106,7 @@ use app\models\Search;
|
||||||
<div class="row p-2 rounded">
|
<div class="row p-2 rounded">
|
||||||
<img class="ml-0 rounded" src="<?= $covr ?>" />
|
<img class="ml-0 rounded" src="<?= $covr ?>" />
|
||||||
<div class="col-3 ml-3 p-0 d-flex flex-column row_fixed_height">
|
<div class="col-3 ml-3 p-0 d-flex flex-column row_fixed_height">
|
||||||
<a class="my-auto text-dark" href="/product/<?= $catn ?>">
|
<a class="my-auto text-dark" href="/product/<?= $prod ?>/<?= $catn ?>">
|
||||||
<h5 class="m-0"><?= $catn ?></h5>
|
<h5 class="m-0"><?= $catn ?></h5>
|
||||||
<h6 class="m-0"><small><?= $prod ?></small></h6>
|
<h6 class="m-0"><small><?= $prod ?></small></h6>
|
||||||
</a>
|
</a>
|
||||||
|
|
|
@ -75,11 +75,18 @@
|
||||||
border: none;
|
border: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
#page_product article .product_title {
|
#page_product article :is(product_catn, product_prod) {
|
||||||
word-wrap: anywhere;
|
word-wrap: anywhere;
|
||||||
word-break: break-all;
|
word-break: break-all;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#page_product article h1.product_catn {
|
||||||
|
font-size: larger;
|
||||||
|
}
|
||||||
|
|
||||||
|
#page_product article h2.product_prod {
|
||||||
|
font-size: small;
|
||||||
|
}
|
||||||
|
|
||||||
#page_product article .product_admin_menu {
|
#page_product article .product_admin_menu {
|
||||||
background-color: #f4f4f6;
|
background-color: #f4f4f6;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
function product_panel_title_edit(catn, element) {
|
function product_panel_title_edit(catn, prod, element) {
|
||||||
if (catn !== null && catn !== undefined && element !== null && element !== undefined) {
|
if (catn !== null && catn !== undefined && prod !== null && prod !== undefined && element !== null && element !== undefined) {
|
||||||
element.innerHTML = '<input class="form-control text-center" type="text" value="' + element.innerText + '" onchange="return product_panel_title_save(\'' + catn + '\', this.parentElement)" aria-invalid="false">';
|
element.innerHTML = '<input class="form-control text-center" type="text" value="' + element.innerText + '" onchange="return product_panel_title_save(\'' + catn + '\', \'' + prod + '\', this.parentElement)" aria-invalid="false">';
|
||||||
|
|
||||||
element.removeAttribute('onclick');
|
element.removeAttribute('onclick');
|
||||||
|
|
||||||
|
@ -10,8 +10,8 @@ function product_panel_title_edit(catn, element) {
|
||||||
return true;
|
return true;
|
||||||
};
|
};
|
||||||
|
|
||||||
function product_panel_title_save(catn, element) {
|
function product_panel_title_save(catn, prod, element) {
|
||||||
if (catn !== null && catn !== undefined && element !== null && element !== undefined) {
|
if (catn !== null && catn !== undefined && prod !== null && prod !== undefined && element !== null && element !== undefined) {
|
||||||
// Инициализация
|
// Инициализация
|
||||||
let text = element.children[0].value;
|
let text = element.children[0].value;
|
||||||
|
|
||||||
|
@ -19,10 +19,10 @@ function product_panel_title_save(catn, element) {
|
||||||
element.innerHTML = text;
|
element.innerHTML = text;
|
||||||
|
|
||||||
// Запись аттрибута (предзагрузка)
|
// Запись аттрибута (предзагрузка)
|
||||||
element.setAttribute('onclick', 'return product_panel_title_edit(\'' + catn + '\', this);');
|
element.setAttribute('onclick', 'return product_panel_title_edit(\'' + catn + '\', \'' + prod + '\', this);');
|
||||||
|
|
||||||
$.ajax({
|
$.ajax({
|
||||||
url: '/product/' + catn + '/edit/title',
|
url: '/product/' + prod + '/' + catn + '/edit/title',
|
||||||
type: 'post',
|
type: 'post',
|
||||||
dataType: 'json',
|
dataType: 'json',
|
||||||
data: {
|
data: {
|
||||||
|
@ -40,7 +40,7 @@ function product_panel_title_save(catn, element) {
|
||||||
element.innerHTML = data.name;
|
element.innerHTML = data.name;
|
||||||
|
|
||||||
// Запись аттрибута
|
// Запись аттрибута
|
||||||
element.setAttribute('onclick', 'return product_panel_title_edit(\'' + catn + '\', this);');
|
element.setAttribute('onclick', 'return product_panel_title_edit(\'' + catn + '\', \'' + prod + '\', this);');
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -55,9 +55,9 @@ function product_panel_title_save(catn, element) {
|
||||||
return true;
|
return true;
|
||||||
};
|
};
|
||||||
|
|
||||||
function product_panel_catn_edit(catn, element, redirect = false) {
|
function product_panel_catn_edit(catn, prod, element, redirect = false) {
|
||||||
if (catn !== null && catn !== undefined && element !== null && element !== undefined) {
|
if (catn !== null && catn !== undefined && prod !== null && prod !== undefined && element !== null && element !== undefined) {
|
||||||
element.innerHTML = '<input class="form-control text-center" type="text" value="' + element.innerText + '" onchange="return product_panel_catn_save(\'' + catn + '\', this.parentElement, ' + redirect + ')" aria-invalid="false">';
|
element.innerHTML = '<input class="form-control text-center" type="text" value="' + element.innerText + '" onchange="return product_panel_catn_save(\'' + catn + '\', \'' + prod + '\', this.parentElement, ' + redirect + ')" aria-invalid="false">';
|
||||||
|
|
||||||
element.removeAttribute('onclick');
|
element.removeAttribute('onclick');
|
||||||
|
|
||||||
|
@ -67,8 +67,8 @@ function product_panel_catn_edit(catn, element, redirect = false) {
|
||||||
return true;
|
return true;
|
||||||
};
|
};
|
||||||
|
|
||||||
function product_panel_catn_save(catn, element, redirect = false) {
|
function product_panel_catn_save(catn, prod, element, redirect = false) {
|
||||||
if (catn !== null && catn !== undefined && element !== null && element !== undefined) {
|
if (catn !== null && catn !== undefined && prod !== null && prod !== undefined && element !== null && element !== undefined) {
|
||||||
// Инициализация
|
// Инициализация
|
||||||
let text = element.children[0].value;
|
let text = element.children[0].value;
|
||||||
|
|
||||||
|
@ -76,10 +76,10 @@ function product_panel_catn_save(catn, element, redirect = false) {
|
||||||
element.innerHTML = text;
|
element.innerHTML = text;
|
||||||
|
|
||||||
// Запись аттрибута (предзагрузка)
|
// Запись аттрибута (предзагрузка)
|
||||||
element.setAttribute('onclick', 'return product_panel_catn_edit(\'' + catn + '\', this);');
|
element.setAttribute('onclick', 'return product_panel_catn_edit(\'' + catn + '\', \'' + prod + '\', this);');
|
||||||
|
|
||||||
$.ajax({
|
$.ajax({
|
||||||
url: '/product/' + catn + '/edit/catn',
|
url: '/product/' + prod + '/' + catn + '/edit/catn',
|
||||||
type: 'post',
|
type: 'post',
|
||||||
dataType: 'json',
|
dataType: 'json',
|
||||||
data: {
|
data: {
|
||||||
|
@ -96,8 +96,49 @@ function product_panel_catn_save(catn, element, redirect = false) {
|
||||||
return true;
|
return true;
|
||||||
};
|
};
|
||||||
|
|
||||||
function product_panel_dimensions_edit(catn, element, dimension) {
|
function product_panel_prod_edit(catn, prod, element, redirect = false) {
|
||||||
if (catn !== null && catn !== undefined && element !== null && element !== undefined) {
|
if (catn !== null && catn !== undefined && prod !== null && prod !== undefined && element !== null && element !== undefined) {
|
||||||
|
element.innerHTML = '<input class="form-control text-center" type="text" value="' + element.innerText + '" onchange="return product_panel_prod_save(\'' + catn + '\', \'' + prod + '\', this.parentElement, ' + redirect + ')" aria-invalid="false">';
|
||||||
|
|
||||||
|
element.removeAttribute('onclick');
|
||||||
|
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
|
||||||
|
return true;
|
||||||
|
};
|
||||||
|
|
||||||
|
function product_panel_prod_save(catn, prod, element, redirect = false) {
|
||||||
|
if (catn !== null && catn !== undefined && prod !== null && prod !== undefined && element !== null && element !== undefined) {
|
||||||
|
// Инициализация
|
||||||
|
let text = element.children[0].value;
|
||||||
|
|
||||||
|
// Обновление заголовка (предзагрузка)
|
||||||
|
element.innerHTML = text;
|
||||||
|
|
||||||
|
// Запись аттрибута (предзагрузка)
|
||||||
|
element.setAttribute('onclick', 'return product_panel_catn_edit(\'' + catn + '\', \'' + prod + '\', this);');
|
||||||
|
|
||||||
|
$.ajax({
|
||||||
|
url: '/product/' + prod + '/' + catn + '/edit/prod',
|
||||||
|
type: 'post',
|
||||||
|
dataType: 'json',
|
||||||
|
data: {
|
||||||
|
'_csrf': yii.getCsrfToken(),
|
||||||
|
'text': text
|
||||||
|
},
|
||||||
|
success: product_response_success,
|
||||||
|
error: product_response_error
|
||||||
|
});
|
||||||
|
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
|
||||||
|
return true;
|
||||||
|
};
|
||||||
|
|
||||||
|
function product_panel_dimensions_edit(catn, prod, element, dimension) {
|
||||||
|
if (catn !== null && catn !== undefined && prod !== null && prod !== undefined && element !== null && element !== undefined) {
|
||||||
|
|
||||||
let input = document.createElement('input');
|
let input = document.createElement('input');
|
||||||
|
|
||||||
|
@ -109,7 +150,7 @@ function product_panel_dimensions_edit(catn, element, dimension) {
|
||||||
|
|
||||||
element.replaceWith(input);
|
element.replaceWith(input);
|
||||||
|
|
||||||
product_panel_handler_save(product_panel_dimensions_save, catn, input, dimension);
|
product_panel_handler_save(product_panel_dimensions_save, catn, prod, input, dimension);
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
};
|
};
|
||||||
|
@ -117,8 +158,8 @@ function product_panel_dimensions_edit(catn, element, dimension) {
|
||||||
return true;
|
return true;
|
||||||
};
|
};
|
||||||
|
|
||||||
function product_panel_dimensions_save(catn, element, dimension) {
|
function product_panel_dimensions_save(catn, prod, element, dimension) {
|
||||||
if (catn !== null && catn !== undefined && element !== null && element !== undefined) {
|
if (catn !== null && catn !== undefined && prod !== null && prod !== undefined && element !== null && element !== undefined) {
|
||||||
// Инициализация
|
// Инициализация
|
||||||
let text = element.value;
|
let text = element.value;
|
||||||
let span = document.createElement('span');
|
let span = document.createElement('span');
|
||||||
|
@ -126,7 +167,7 @@ function product_panel_dimensions_save(catn, element, dimension) {
|
||||||
span.setAttribute('id', element.id);
|
span.setAttribute('id', element.id);
|
||||||
span.setAttribute('class', 'ml-1 pointer-event');
|
span.setAttribute('class', 'ml-1 pointer-event');
|
||||||
span.setAttribute('role', 'button');
|
span.setAttribute('role', 'button');
|
||||||
span.setAttribute('onclick', 'return product_panel_dimensions_edit(\'' + catn + '\', this, \'' + dimension + '\');');
|
span.setAttribute('onclick', 'return product_panel_dimensions_edit(\'' + catn + '\', \'' + prod + '\', this, \'' + dimension + '\');');
|
||||||
|
|
||||||
if (text.length === 0) {
|
if (text.length === 0) {
|
||||||
text = '0';
|
text = '0';
|
||||||
|
@ -137,7 +178,7 @@ function product_panel_dimensions_save(catn, element, dimension) {
|
||||||
element.replaceWith(span);
|
element.replaceWith(span);
|
||||||
|
|
||||||
$.ajax({
|
$.ajax({
|
||||||
url: '/product/' + catn + '/edit/dmns',
|
url: '/product/' + prod + '/' + catn + '/edit/dmns',
|
||||||
type: 'post',
|
type: 'post',
|
||||||
dataType: 'json',
|
dataType: 'json',
|
||||||
data: {
|
data: {
|
||||||
|
@ -155,7 +196,7 @@ function product_panel_dimensions_save(catn, element, dimension) {
|
||||||
span.innerText = data.dimension;
|
span.innerText = data.dimension;
|
||||||
|
|
||||||
// Запись аттрибута
|
// Запись аттрибута
|
||||||
span.setAttribute('onclick', 'return product_panel_dimensions_edit(\'' + catn + '\', this, \'' + dimension + '\');');
|
span.setAttribute('onclick', 'return product_panel_dimensions_edit(\'' + catn + '\', \'' + prod + '\', this, \'' + dimension + '\');');
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -171,8 +212,8 @@ function product_panel_dimensions_save(catn, element, dimension) {
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
function product_panel_weight_edit(catn, element) {
|
function product_panel_weight_edit(catn, prod, element) {
|
||||||
if (catn !== null && catn !== undefined && element !== null && element !== undefined) {
|
if (catn !== null && catn !== undefined && prod !== null && prod !== undefined && element !== null && element !== undefined) {
|
||||||
|
|
||||||
let input = document.createElement('input');
|
let input = document.createElement('input');
|
||||||
|
|
||||||
|
@ -184,7 +225,7 @@ function product_panel_weight_edit(catn, element) {
|
||||||
|
|
||||||
element.replaceWith(input);
|
element.replaceWith(input);
|
||||||
|
|
||||||
product_panel_handler_save(product_panel_weight_save, catn, input);
|
product_panel_handler_save(product_panel_weight_save, catn, prod, input);
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
};
|
};
|
||||||
|
@ -192,8 +233,8 @@ function product_panel_weight_edit(catn, element) {
|
||||||
return true;
|
return true;
|
||||||
};
|
};
|
||||||
|
|
||||||
function product_panel_weight_save(catn, element) {
|
function product_panel_weight_save(catn, prod, element) {
|
||||||
if (catn !== null && catn !== undefined && element !== null && element !== undefined) {
|
if (catn !== null && catn !== undefined && prod !== null && prod !== undefined && element !== null && element !== undefined) {
|
||||||
// Инициализация
|
// Инициализация
|
||||||
let text = element.value;
|
let text = element.value;
|
||||||
let span = document.createElement('span');
|
let span = document.createElement('span');
|
||||||
|
@ -201,7 +242,7 @@ function product_panel_weight_save(catn, element) {
|
||||||
span.setAttribute('id', element.id);
|
span.setAttribute('id', element.id);
|
||||||
span.setAttribute('class', 'ml-1 pointer-event');
|
span.setAttribute('class', 'ml-1 pointer-event');
|
||||||
span.setAttribute('role', 'button');
|
span.setAttribute('role', 'button');
|
||||||
span.setAttribute('onclick', 'return product_panel_weight_edit(\'' + catn + '\', this);');
|
span.setAttribute('onclick', 'return product_panel_weight_edit(\'' + catn + '\', \'' + prod + '\', this);');
|
||||||
|
|
||||||
if (text.length === 0) {
|
if (text.length === 0) {
|
||||||
text = '0';
|
text = '0';
|
||||||
|
@ -212,7 +253,7 @@ function product_panel_weight_save(catn, element) {
|
||||||
element.replaceWith(span);
|
element.replaceWith(span);
|
||||||
|
|
||||||
$.ajax({
|
$.ajax({
|
||||||
url: '/product/' + catn + '/edit/wght',
|
url: '/product/' + prod + '/' + catn + '/edit/wght',
|
||||||
type: 'post',
|
type: 'post',
|
||||||
dataType: 'json',
|
dataType: 'json',
|
||||||
data: {
|
data: {
|
||||||
|
@ -229,7 +270,7 @@ function product_panel_weight_save(catn, element) {
|
||||||
span.innerText = data.weight;
|
span.innerText = data.weight;
|
||||||
|
|
||||||
// Запись аттрибута
|
// Запись аттрибута
|
||||||
span.setAttribute('onclick', 'return product_panel_weight_edit(\'' + catn + '\', this);');
|
span.setAttribute('onclick', 'return product_panel_weight_edit(\'' + catn + '\', \'' + prod + '\', this);');
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -244,9 +285,9 @@ function product_panel_weight_save(catn, element) {
|
||||||
return true;
|
return true;
|
||||||
};
|
};
|
||||||
|
|
||||||
function product_panel_description_edit(catn, element) {
|
function product_panel_description_edit(catn, prod, element) {
|
||||||
if (catn !== null && catn !== undefined && element !== null && element !== undefined) {
|
if (catn !== null && catn !== undefined && prod !== null && prod !== undefined && element !== null && element !== undefined) {
|
||||||
element.innerHTML = '<textarea class="form-control" cols="50" rows="5" onchange = "return product_panel_description_save(\'' + catn + '\', this.parentElement)">' + element.innerText + '</textarea>';
|
element.innerHTML = '<textarea class="form-control" cols="50" rows="5" onchange = "return product_panel_description_save(\'' + catn + '\', \'' + prod + '\', this.parentElement)">' + element.innerText + '</textarea>';
|
||||||
|
|
||||||
element.removeAttribute('onclick');
|
element.removeAttribute('onclick');
|
||||||
|
|
||||||
|
@ -256,8 +297,8 @@ function product_panel_description_edit(catn, element) {
|
||||||
return true;
|
return true;
|
||||||
};
|
};
|
||||||
|
|
||||||
function product_panel_description_save(catn, element) {
|
function product_panel_description_save(catn, prod, element) {
|
||||||
if (catn !== null && catn !== undefined && element !== null && element !== undefined) {
|
if (catn !== null && catn !== undefined && prod !== null && prod !== undefined && element !== null && element !== undefined) {
|
||||||
// Инициализация
|
// Инициализация
|
||||||
let text = element.children[0].value;
|
let text = element.children[0].value;
|
||||||
|
|
||||||
|
@ -265,10 +306,10 @@ function product_panel_description_save(catn, element) {
|
||||||
element.innerHTML = text;
|
element.innerHTML = text;
|
||||||
|
|
||||||
// Запись аттрибута (предзагрузка)
|
// Запись аттрибута (предзагрузка)
|
||||||
element.setAttribute('onclick', 'return product_panel_description_edit(\'' + catn + '\', this);');
|
element.setAttribute('onclick', 'return product_panel_description_edit(\'' + catn + '\', \'' + prod + '\', this);');
|
||||||
|
|
||||||
$.ajax({
|
$.ajax({
|
||||||
url: '/product/' + catn + '/edit/dscr',
|
url: '/product/' + prod + '/' + catn + '/edit/dscr',
|
||||||
type: 'post',
|
type: 'post',
|
||||||
dataType: 'json',
|
dataType: 'json',
|
||||||
data: {
|
data: {
|
||||||
|
@ -285,7 +326,7 @@ function product_panel_description_save(catn, element) {
|
||||||
element.innerHTML = data.description;
|
element.innerHTML = data.description;
|
||||||
|
|
||||||
// Запись аттрибута
|
// Запись аттрибута
|
||||||
element.setAttribute('onclick', 'return product_panel_description_edit(\'' + catn + '\', this);');
|
element.setAttribute('onclick', 'return product_panel_description_edit(\'' + catn + '\', \'' + prod + '\', this);');
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -306,7 +347,7 @@ function product_panel_description_save(catn, element) {
|
||||||
* @param {*} catn
|
* @param {*} catn
|
||||||
* @returns
|
* @returns
|
||||||
*/
|
*/
|
||||||
function product_panel_connect(catn, group) {
|
function product_panel_connect(catn, prod, group) {
|
||||||
if (group === null || group === '') {
|
if (group === null || group === '') {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -317,9 +358,9 @@ function product_panel_connect(catn, group) {
|
||||||
group = prompt('Подключить аналог');
|
group = prompt('Подключить аналог');
|
||||||
}
|
}
|
||||||
|
|
||||||
if (catn !== null && catn !== undefined) {
|
if (catn !== null && catn !== undefined && prod !== null && prod !== undefined) {
|
||||||
$.ajax({
|
$.ajax({
|
||||||
url: '/product/' + catn + '/connect',
|
url: '/product/' + prod + '/' + catn + '/connect',
|
||||||
type: 'post',
|
type: 'post',
|
||||||
dataType: 'json',
|
dataType: 'json',
|
||||||
data: {
|
data: {
|
||||||
|
@ -343,10 +384,10 @@ function product_panel_connect(catn, group) {
|
||||||
* @param {*} catn
|
* @param {*} catn
|
||||||
* @returns
|
* @returns
|
||||||
*/
|
*/
|
||||||
function product_panel_disconnect(catn) {
|
function product_panel_disconnect(catn, prod) {
|
||||||
if (catn !== null && catn !== undefined) {
|
if (catn !== null && catn !== undefined) {
|
||||||
$.ajax({
|
$.ajax({
|
||||||
url: '/product/' + catn + '/disconnect',
|
url: '/product/' + prod + '/' + catn + '/disconnect',
|
||||||
type: 'post',
|
type: 'post',
|
||||||
dataType: 'json',
|
dataType: 'json',
|
||||||
data: {
|
data: {
|
||||||
|
@ -363,10 +404,10 @@ function product_panel_disconnect(catn) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
function product_panel_delete(catn) {
|
function product_panel_delete(catn, prod) {
|
||||||
if (catn !== null && catn !== undefined) {
|
if (catn !== null && catn !== undefined && prod !== null && prod !== undefined) {
|
||||||
$.ajax({
|
$.ajax({
|
||||||
url: '/product/' + catn + '/delete',
|
url: '/product/' + prod + '/' + catn + '/delete',
|
||||||
type: 'post',
|
type: 'post',
|
||||||
dataType: 'json',
|
dataType: 'json',
|
||||||
data: {
|
data: {
|
||||||
|
@ -382,8 +423,8 @@ function product_panel_delete(catn) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
function product_panel_images_write(catn, element) {
|
function product_panel_images_write(catn, prod, element) {
|
||||||
if (catn !== null && catn !== undefined && element !== null && element !== undefined) {
|
if (catn !== null && catn !== undefined && prod !== null && prod !== undefined && element !== null && element !== undefined) {
|
||||||
// Инициализация
|
// Инициализация
|
||||||
let data = new FormData();
|
let data = new FormData();
|
||||||
|
|
||||||
|
@ -393,7 +434,7 @@ function product_panel_images_write(catn, element) {
|
||||||
};
|
};
|
||||||
|
|
||||||
$.ajax({
|
$.ajax({
|
||||||
url: '/product/' + catn + '/write/image',
|
url: '/product/' + prod + '/' + catn + '/write/image',
|
||||||
type: 'post',
|
type: 'post',
|
||||||
dataType: 'json',
|
dataType: 'json',
|
||||||
processData: false,
|
processData: false,
|
||||||
|
@ -409,10 +450,10 @@ function product_panel_images_write(catn, element) {
|
||||||
return true;
|
return true;
|
||||||
};
|
};
|
||||||
|
|
||||||
function product_panel_images_delete(catn, index) {
|
function product_panel_images_delete(catn, prod, index) {
|
||||||
if (catn !== null && catn !== undefined && index !== null && index !== undefined) {
|
if (catn !== null && catn !== undefined && prod !== null && prod !== undefined && index !== null && index !== undefined) {
|
||||||
$.ajax({
|
$.ajax({
|
||||||
url: '/product/' + catn + '/delete/image',
|
url: '/product/' + prod + '/' + catn + '/delete/image',
|
||||||
type: 'post',
|
type: 'post',
|
||||||
dataType: 'json',
|
dataType: 'json',
|
||||||
data: {
|
data: {
|
||||||
|
@ -429,10 +470,10 @@ function product_panel_images_delete(catn, index) {
|
||||||
return true;
|
return true;
|
||||||
};
|
};
|
||||||
|
|
||||||
function product_panel_images_cover_write(catn, index) {
|
function product_panel_images_cover_write(catn, prod, index) {
|
||||||
if (catn !== null && catn !== undefined && index !== null && index !== undefined) {
|
if (catn !== null && catn !== undefined && prod !== null && prod !== undefined && index !== null && index !== undefined) {
|
||||||
$.ajax({
|
$.ajax({
|
||||||
url: '/product/' + catn + '/write/cover',
|
url: '/product/' + prod + '/' + catn + '/write/cover',
|
||||||
type: 'post',
|
type: 'post',
|
||||||
dataType: 'json',
|
dataType: 'json',
|
||||||
data: {
|
data: {
|
||||||
|
@ -449,11 +490,11 @@ function product_panel_images_cover_write(catn, index) {
|
||||||
return true;
|
return true;
|
||||||
};
|
};
|
||||||
|
|
||||||
function product_panel_handler_save(save, catn, element, ...vars) {
|
function product_panel_handler_save(save, catn, prod, element, ...vars) {
|
||||||
if (save !== undefined && save !== null) {
|
if (save !== undefined && save !== null) {
|
||||||
let product_panel_handler_save_function = function (event) {
|
let product_panel_handler_save_function = function (event) {
|
||||||
if (event.target.id !== element.id) {
|
if (event.target.id !== element.id) {
|
||||||
save(catn, element, ...vars);
|
save(catn, prod, element, ...vars);
|
||||||
document.body.removeEventListener('click', product_panel_handler_save_function, true);
|
document.body.removeEventListener('click', product_panel_handler_save_function, true);
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -462,10 +503,10 @@ function product_panel_handler_save(save, catn, element, ...vars) {
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
function product_panel_product_stts(catn, stts) {
|
function product_panel_product_stts(catn, prod, stts) {
|
||||||
if (catn !== null && catn !== undefined && stts !== null && stts !== undefined) {
|
if (catn !== null && catn !== undefined && prod !== null && prod !== undefined && stts !== null && stts !== undefined) {
|
||||||
$.ajax({
|
$.ajax({
|
||||||
url: '/product/' + catn + '/status',
|
url: '/product/' + prod + '/' + catn + '/status',
|
||||||
type: 'post',
|
type: 'post',
|
||||||
dataType: 'json',
|
dataType: 'json',
|
||||||
data: {
|
data: {
|
||||||
|
|
|
@ -707,13 +707,11 @@ function profile_panel_input_suppliers_requests_block_decline(_key, reason) {
|
||||||
/**
|
/**
|
||||||
* Создание товара
|
* Создание товара
|
||||||
*/
|
*/
|
||||||
function profile_panel_input_suppliers_accounts_create_product(button, _key) {
|
function profile_panel_input_suppliers_accounts_create_product(button, catn, prod) {
|
||||||
if (_key === undefined) {
|
if (catn === undefined || prod === undefined) return false;
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
$.ajax({
|
$.ajax({
|
||||||
url: `/product/${_key}/write`,
|
url: `/product/${prod}/${catn}/write`,
|
||||||
type: 'post',
|
type: 'post',
|
||||||
dataType: 'json',
|
dataType: 'json',
|
||||||
data: {
|
data: {
|
||||||
|
@ -722,13 +720,13 @@ function profile_panel_input_suppliers_accounts_create_product(button, _key) {
|
||||||
success: (data, status, xhr) => {
|
success: (data, status, xhr) => {
|
||||||
if (data.catn !== undefined) {
|
if (data.catn !== undefined) {
|
||||||
// Реинициализация кнопки создания товара
|
// Реинициализация кнопки создания товара
|
||||||
button.href = `/product/${_key}`;
|
button.href = `/product/${prod}/${catn}`;
|
||||||
button.onclick = null;
|
button.onclick = null;
|
||||||
button.classList.remove('icon_red');
|
button.classList.remove('icon_red');
|
||||||
button.classList.add('text-dark');
|
button.classList.add('text-dark');
|
||||||
button.title = 'Товар создан';
|
button.title = 'Товар создан';
|
||||||
|
|
||||||
product_panel_connect(_key, prompt('Подключить аналог (пусто - не подключать)'));
|
product_panel_connect(catn, prod, prompt('Подключить аналог (пусто - не подключать)'));
|
||||||
}
|
}
|
||||||
|
|
||||||
return page_profile_response_success(data, status, xhr);
|
return page_profile_response_success(data, status, xhr);
|
||||||
|
|
Reference in New Issue