diff --git a/mirzaev/skillparts/system/config/web.php.example b/mirzaev/skillparts/system/config/web.php.example
index 651255b..8336323 100644
--- a/mirzaev/skillparts/system/config/web.php.example
+++ b/mirzaev/skillparts/system/config/web.php.example
@@ -51,15 +51,28 @@ $config = [
'errorHandler' => [
'errorAction' => 'error',
],
- 'mailer' => [
+ 'mail_info' => [
'class' => 'yii\swiftmailer\Mailer',
'useFileTransport' => false,
'transport' => [
'class' => 'Swift_SmtpTransport',
- 'host' => 'ssl://smtp.yandex.com',
+ 'host' => 'smtp.yandex.com',
'username' => 'info@skillparts.ru',
'password' => 'SkillParts_1337',
- 'port' => '587',
+ 'port' => '465',
+ 'encryption' => 'ssl',
+
+ ],
+ ],
+ 'mail_system' => [
+ 'class' => 'yii\swiftmailer\Mailer',
+ 'useFileTransport' => false,
+ 'transport' => [
+ 'class' => 'Swift_SmtpTransport',
+ 'host' => 'smtp.yandex.com',
+ 'username' => 'system@skillparts.ru',
+ 'password' => 'System01001010Null',
+ 'port' => '465',
'encryption' => 'ssl',
],
],
diff --git a/mirzaev/skillparts/system/controllers/OrderController.php b/mirzaev/skillparts/system/controllers/OrderController.php
index 1825c8c..0b93a1f 100644
--- a/mirzaev/skillparts/system/controllers/OrderController.php
+++ b/mirzaev/skillparts/system/controllers/OrderController.php
@@ -361,7 +361,7 @@ class OrderController extends Controller
public function actionPay(): string|array|null
{
// Инициализация
- $model = Order::search();
+ $model = Order::search(supplies: true);
// Поиск ребра
$edge = AccountEdgeOrder::searchByVertex(yii::$app->user->id, $model->readId(), 'current');
@@ -381,12 +381,33 @@ class OrderController extends Controller
if ($edge->update()) {
// Удалось сохранить изменения
- // Генерация счета
+ // Инициализация буфера поставок
+ $supplies = [];
+
+ foreach($model['supplies'] as $supply) {
+ $supplies[] = [
+ 'title' => $supply['supply']['catn'],
+ 'amount' => [
+ 'value' => $supply['amount'] ?? 0,
+ 'unit' => 'шт'
+ ],
+ 'cost' => [
+ 'value' => $supply['cost'] ?? 0,
+ 'unit' => 'руб'
+ ],
+ 'type' => 'supply'
+ ];
+ }
+
Invoice::generate($model->_key, $this->renderPartial('/invoice/order/pattern', [
- 'account' => yii::$app->user->identity->_key,
+ 'buyer' => [
+ 'id' => yii::$app->user->identity->_key,
+ 'info' => 'Неизвестно'
+ ],
'order' => [
'id' => $model->_key,
- 'date' => $edge->date ?? time() // @todo доделать
+ 'date' => $edge->date ?? time(),
+ 'entries' => $supplies
]
]));
@@ -394,7 +415,7 @@ class OrderController extends Controller
$model->journal('requested');
// Отправка уведомлений модераторам
- Notification::_write($this->renderPartial('/notification/system/newOrder', ['id' => $edge->_key]), true, '@auth', Notification::TYPE_MODERATOR_ORDER_NEW);
+ Notification::_write($this->renderPartial('/notification/system/orders/new', ['id' => $edge->_key]), true, '@auth', Notification::TYPE_MODERATOR_ORDER_NEW);
}
// Инициализация
@@ -525,6 +546,9 @@ class OrderController extends Controller
if ($order_edge_supply = OrderEdgeSupply::searchById($_id = OrderEdgeSupply::collectionName() . '/' . $_key)) {
// Удалось найти инстанцию поставки
+ // Запись в буфер изначальных данных
+ $old = $order_edge_supply->stts;
+
// Запись в буфер записи в базу данных
$order_edge_supply->stts = $stts;
@@ -532,6 +556,12 @@ class OrderController extends Controller
if ($order_edge_supply->save()) {
// Удалось сохранить изменения
+ // Инициализация аккаунта покупателя
+ $account = Account::searchById(AccountEdgeOrder::searchByOrder($order_edge_supply->_from)[0]->_from);
+
+ // Отправка уведомления
+ Notification::_write($this->renderPartial('/notification/system/orders/edit', ['order' => $order_edge_supply->_from, 'from' => OrderEdgeSupply::convertStatusToRussian($old), 'to' => OrderEdgeSupply::convertStatusToRussian($stts), 'target' => 'Комментарий']), true, $account->_key, Notification::TYPE_NOTICE);
+
// Запись в буфер вывода
$buffer['stts'] = $order_edge_supply->stts;
} else {
@@ -566,6 +596,9 @@ class OrderController extends Controller
if ($order_edge_supply = OrderEdgeSupply::searchById($_id = OrderEdgeSupply::collectionName() . '/' . $_key)) {
// Удалось найти инстанцию поставки
+ // Запись в буфер изначальных данных
+ $old = $order_edge_supply->cost;
+
// Запись в буфер записи в базу данных
$order_edge_supply->cost = $cost;
@@ -573,6 +606,12 @@ class OrderController extends Controller
if ($order_edge_supply->save()) {
// Удалось сохранить изменения
+ // Инициализация аккаунта покупателя
+ $account = Account::searchById(AccountEdgeOrder::searchByOrder($order_edge_supply->_from)[0]->_from);
+
+ // Отправка уведомления
+ Notification::_write($this->renderPartial('/notification/system/orders/edit', ['order' => $order_edge_supply->_from, 'from' => $old, 'to' => $cost, 'target' => 'Цена']), true, $account->_key, Notification::TYPE_NOTICE);
+
// Запись в буфер вывода
$buffer['cost'] = $order_edge_supply->cost;
} else {
@@ -607,6 +646,9 @@ class OrderController extends Controller
if ($order_edge_supply = OrderEdgeSupply::searchById($_id = OrderEdgeSupply::collectionName() . '/' . $_key)) {
// Удалось найти инстанцию поставки
+ // Запись в буфер изначальных данных
+ $old = $order_edge_supply->time;
+
// Запись в буфер записи в базу данных
$order_edge_supply->time = $time;
@@ -614,6 +656,12 @@ class OrderController extends Controller
if ($order_edge_supply->save()) {
// Удалось сохранить изменения
+ // Инициализация аккаунта покупателя
+ $account = Account::searchById(AccountEdgeOrder::searchByOrder($order_edge_supply->_from)[0]->_from);
+
+ // Отправка уведомления
+ Notification::_write($this->renderPartial('/notification/system/orders/edit', ['order' => $order_edge_supply->_from, 'from' => $old, 'to' => $time, 'target' => 'Дата поставки']), true, $account->_key, Notification::TYPE_NOTICE);
+
// Запись в буфер вывода
$buffer['time'] = $order_edge_supply->time;
} else {
@@ -648,6 +696,9 @@ class OrderController extends Controller
if ($order_edge_supply = OrderEdgeSupply::searchById($_id = OrderEdgeSupply::collectionName() . '/' . $_key)) {
// Удалось найти инстанцию поставки
+ // Запись в буфер изначальных данных
+ $old = $order_edge_supply->comm;
+
// Запись в буфер записи в базу данных
$order_edge_supply->comm = $comm;
@@ -655,6 +706,12 @@ class OrderController extends Controller
if ($order_edge_supply->save()) {
// Удалось сохранить изменения
+ // Инициализация аккаунта покупателя
+ $account = Account::searchById(AccountEdgeOrder::searchByOrder($order_edge_supply->_from)[0]->_from);
+
+ // Отправка уведомления
+ Notification::_write($this->renderPartial('/notification/system/orders/edit', ['order' => $order_edge_supply->_from, 'from' => $old, 'to' => $comm, 'target' => 'Комментарий']), true, $account->_key, Notification::TYPE_NOTICE);
+
// Запись в буфер вывода
$buffer['comm'] = $order_edge_supply->comm;
} else {
diff --git a/mirzaev/skillparts/system/controllers/SuppliersController.php b/mirzaev/skillparts/system/controllers/SuppliersController.php
index 3a1a501..ba6be62 100644
--- a/mirzaev/skillparts/system/controllers/SuppliersController.php
+++ b/mirzaev/skillparts/system/controllers/SuppliersController.php
@@ -29,7 +29,7 @@ class SuppliersController extends Controller
{
$request = yii::$app->request->post('Request') ?? yii::$app->request->get('Request');
- yii::$app->mailer->compose()
+ yii::$app->mail_system->compose()
->setFrom(yii::$app->params['mail']['system'])
->setTo(yii::$app->params['mail']['info'])
->setSubject('Регистрация поставщика')
diff --git a/mirzaev/skillparts/system/models/Account.php b/mirzaev/skillparts/system/models/Account.php
index 3219d1d..2b0c813 100644
--- a/mirzaev/skillparts/system/models/Account.php
+++ b/mirzaev/skillparts/system/models/Account.php
@@ -538,4 +538,19 @@ class Account extends Document implements IdentityInterface, PartnerInterface
select: 'account_edge_supply[0]'
)[0];
}
+
+ /**
+ * Генерация текста обозначающего статус аккаунта на русском языке
+ *
+ * @return string Статус аккаунта
+ */
+ public function statusLabel(): string
+ {
+ return match($this->type) {
+ 'administrator', 'admin' => 'Администратор',
+ 'moderator', 'moder' => 'Модератор',
+ 'supplier' => 'Поставщик',
+ default => 'Покупатель',
+ };
+ }
}
diff --git a/mirzaev/skillparts/system/models/AccountForm.php b/mirzaev/skillparts/system/models/AccountForm.php
index c4bc15e..b99fef4 100644
--- a/mirzaev/skillparts/system/models/AccountForm.php
+++ b/mirzaev/skillparts/system/models/AccountForm.php
@@ -119,7 +119,14 @@ class AccountForm extends Model
$this->account->pswd = yii::$app->security->generatePasswordHash($this->pswd);
// Регистрация
- return $this->account->save();
+ if ($this->account->save()) {
+ // Успешно завершена регистрация
+
+ // Генерация индекса
+ Account::generateIndexes([$this->account]);
+
+ return true;
+ }
}
return false;
diff --git a/mirzaev/skillparts/system/models/Notification.php b/mirzaev/skillparts/system/models/Notification.php
index 89290c5..da6b5f5 100644
--- a/mirzaev/skillparts/system/models/Notification.php
+++ b/mirzaev/skillparts/system/models/Notification.php
@@ -147,8 +147,10 @@ class Notification extends Document
*
* @param string $html Содержимое уведомления (HTML или текст)
* @param bool|string|null $html Содержимое уведомления (HTML или текст)
- * @param string $account Получатель уведомления
+ * @param string $account Получатель уведомления (_key)
* @param string $type Тип уведомления
+ *
+ * @todo Намного удобнее будет заменить _key на _id, чтобы из рёбер сразу получать аккаунт без лишних операций
*/
public static function _write(string $text, bool|string|null $html = false, string $account = null, string $type = self::TYPE_NOTICE): self|array|null
{
diff --git a/mirzaev/skillparts/system/models/Order.php b/mirzaev/skillparts/system/models/Order.php
index c160407..55d4c29 100644
--- a/mirzaev/skillparts/system/models/Order.php
+++ b/mirzaev/skillparts/system/models/Order.php
@@ -296,16 +296,19 @@ class Order extends Document implements DocumentInterface
foreach ($return as &$container) {
// Перебор заказов
- // Инициализация настроек
- $config = $container['order'];
- unset($config['_id'], $config['_rev'], $config['_id']);
+ if ($container instanceof Order) {
+ $buffer = $container;
+ } else {
+ // Инициализация настроек
+ $config = $container['order'];
+ unset($config['_id'], $config['_rev'], $config['_id']);
- if ($buffer = new Order($config)) {
- // Удалось инициализировать буфер заказа
-
- // Чтение полного содержания
- $container['supplies'] = $buffer->content(100);
+ // Инициализация буфера
+ $buffer = new Order($config);
}
+
+ // Чтение полного содержания
+ $container['supplies'] = $buffer->content(30);
}
}
@@ -371,7 +374,8 @@ class Order extends Document implements DocumentInterface
// || (isset($order_edge_supply['dlvr']['type']) && $order_edge_supply['dlvr']['type'] !== $target_dlvr_type)
// ) {
if ((isset($order_edge_supply['dlvr']['type']) && $order_edge_supply['dlvr']['type'] === $target_dlvr_type)
- || (empty($order_edge_supply['dlvr']['type']) && $target_dlvr_type === 'auto')) {
+ || (empty($order_edge_supply['dlvr']['type']) && $target_dlvr_type === 'auto')
+ ) {
// Тип доставки для одной поставки отличается
// Запись в буфер
diff --git a/mirzaev/skillparts/system/views/notification/system/newOrder.php b/mirzaev/skillparts/system/views/notification/system/newOrder.php
deleted file mode 100644
index 93450ff..0000000
--- a/mirzaev/skillparts/system/views/notification/system/newOrder.php
+++ /dev/null
@@ -1 +0,0 @@
-Новый заказ
diff --git a/mirzaev/skillparts/system/views/notification/system/orders/edit.php b/mirzaev/skillparts/system/views/notification/system/orders/edit.php
new file mode 100644
index 0000000..fba82a2
--- /dev/null
+++ b/mirzaev/skillparts/system/views/notification/system/orders/edit.php
@@ -0,0 +1 @@
+
Данные заказа #= $order ?> изменены: = $target ?> с = $from ?> на = $to ?>
diff --git a/mirzaev/skillparts/system/views/notification/system/orders/new.php b/mirzaev/skillparts/system/views/notification/system/orders/new.php
new file mode 100644
index 0000000..86b9443
--- /dev/null
+++ b/mirzaev/skillparts/system/views/notification/system/orders/new.php
@@ -0,0 +1 @@
+Новый заказ
diff --git a/mirzaev/skillparts/system/views/orders/index.php b/mirzaev/skillparts/system/views/orders/index.php
index e8472a6..9355518 100644
--- a/mirzaev/skillparts/system/views/orders/index.php
+++ b/mirzaev/skillparts/system/views/orders/index.php
@@ -173,23 +173,15 @@ if (
Заказы
-
-
+
+
-
- Поставки
-
-
- Статус
-
-
- Время
-
-
-
-
+
Артикул
+
Статус
+
Поступление
+
Стоимость
$date";
} else {
- $time = 'Неизвестно';
+ $date = 'Неизвестно';
+ $date_html = "
$date";
}
// Инициализация стоимости
- if (isset($part['cost'])) $cost = $part['cost'] . ' ' . $currency;
- else $cost = 'Неизвестно';
+ if (isset($part['cost'])) $cost_html = '
' . ($cost = $part['cost']) . ' ' . $currency . '';
+ else $cost_html = '
' . ($cost = 'Неизвестно') . '';
} else {
// Удалось рассчитать доставку
@@ -257,17 +253,19 @@ if (
$time_type = $part['dlvr']['type'] ?? 'auto';
// Инициализация индикатора
- $time_icon = match ($time_type) {
- 'avia' => '
',
- default => '
'
+ $date_icon = match ($time_type) {
+ 'avia' => '
',
+ default => '
'
};
// Инициализация доставки
- if (isset($part['time'])) {
+ if (isset($part['date'])) {
// Найдены данные в инстанции поставки
// Запись в буфер вывода
- $time = $part['time'] . ' дн';
+ // $time = $part['time'] . ' дн';
+ $date = date('d.m.Y', $part['date']);
+ $date_html = "
$date";
} else {
// Рассчет времени из данных поставки
@@ -276,25 +274,37 @@ if (
} catch (Exception $e) {
$time_converted = DateTime::createFromFormat('Y-m-d', $delivery['orderDates']['arrivalToOspReceiver'])->getTimestamp();
}
- $time = (ceil(($time_converted - time()) / 60 / 60 / 24) + 1) . ' дн';
+ // $time = (ceil(($time_converted - time()) / 60 / 60 / 24) + 1) . ' дн';
+ $date = date('d.m.Y', $time_converted);
+ $date_html = "
$date";
}
// Инициализация стоимости
- if (isset($part['cost'])) $cost = $part['cost'] . ' ' . $currency;
- else $cost = $cost . ' ' . $currency;
+ if (isset($part['cost'])) $cost_html = '
' . ($cost = $part['cost']) . ' ' . $currency . '';
+ else $cost_html = '
' . ($cost = $cost) . ' ' . $currency . '';
}
// Инициализация статуса связи поставки
$status = OrderEdgeSupply::convertStatusToRussian($part['stts'] ?? 0);
+ // Инициализация класса для поставки (если необходимо)
+ $css = match ($part['stts'] ?? 0) {
+ 'accepted', 1 => ' supply_accepted',
+ default => ''
+ };
+
+ // Пробела между supply и $css не должно быть
$supplies_html .= <<
+
{$supply['catn']}
-
$status
-
$time_icon $time
-
$cost
+
$status
+
$date_html
+
$cost_html
HTML;
+
+ // Обновление общего счётчика цены
+ $sum += (int) $cost;
}
}
}
@@ -308,22 +318,12 @@ if (
HTML;
echo <<
-
-
- $supplies_html
-
-
- $status
-
-
- $date
-
-
- $invoice
-
+ $supplies_html
+
+
$invoice
+
$status
+
$date
+
$sum руб
HTML;
}
diff --git a/mirzaev/skillparts/system/views/profile/sidebar.php b/mirzaev/skillparts/system/views/profile/sidebar.php
index ec4effb..27d3180 100644
--- a/mirzaev/skillparts/system/views/profile/sidebar.php
+++ b/mirzaev/skillparts/system/views/profile/sidebar.php
@@ -12,8 +12,9 @@ use app\models\SupplyEdgeProduct;
?>
-
Почта:
-
= yii::$app->user->identity->mail ?>
+
Договор: = yii::$app->user->identity->_key ?>
+
Статус: = yii::$app->user->identity->statusLabel() ?>
+
Почта: = yii::$app->user->identity->mail ?>
@@ -122,4 +123,4 @@ use app\models\SupplyEdgeProduct;
= SupplyEdgeProduct::readAmount() ?>
-
\ No newline at end of file
+
diff --git a/mirzaev/skillparts/system/views/suppliers/requested.php b/mirzaev/skillparts/system/views/suppliers/requested.php
index 571f9f6..05ec6a4 100644
--- a/mirzaev/skillparts/system/views/suppliers/requested.php
+++ b/mirzaev/skillparts/system/views/suppliers/requested.php
@@ -74,8 +74,12 @@ AppAsset::register($this);
- Заявка на подключение
- отсоси
+ Заявка отправлена
+
diff --git a/mirzaev/skillparts/system/web/css/pages/orders.css b/mirzaev/skillparts/system/web/css/pages/orders.css
index 8433d45..7428ca2 100644
--- a/mirzaev/skillparts/system/web/css/pages/orders.css
+++ b/mirzaev/skillparts/system/web/css/pages/orders.css
@@ -2,12 +2,18 @@
background-color: #fff;
}
-#page_orders .page_order_panel .list > .row:nth-child(2n+1) {
+#page_orders .page_order_panel .list>.row:first-child, #page_orders article .cart_list_target_total {
+ background-color: #dbdde3;
+}
+
+#page_orders .page_order_panel .list>.supply.row:nth-child(2n-1) {
background-color: #f7f6f9;
}
-#page_orders .page_order_panel .list > .row:first-child {
- background-color: #dbdde3;
+#page_orders .page_order_panel .list>.supply.supply_accepted.row {
+ -webkit-box-shadow: 4px 0px 0px 0px #123EAB inset;
+ -moz-box-shadow: 4px 0px 0px 0px #123EAB inset;
+ box-shadow: 4px 0px 0px 0px #123EAB inset;
}
#page_orders .cart_field_cost span {