]> gitweb.erp-flowers.ru Git - erp24_rep/yii-erp24/.git/commitdiff
ERP-438 Доработка эндпойнтов
authormarina <m.zozirova@gmail.com>
Tue, 22 Jul 2025 09:32:45 +0000 (12:32 +0300)
committermarina <m.zozirova@gmail.com>
Tue, 22 Jul 2025 09:32:45 +0000 (12:32 +0300)
erp24/api2/controllers/ClientController.php

index 31ba2e648ef985c6e5dc6d22c42fa7d5c6581775..f4513243be9c6cb31bf6b4b5dbd258a072f228b0 100644 (file)
@@ -694,6 +694,7 @@ class ClientController extends BaseController
             'pages' => ['totalCount' => (int)$pages->totalCount, 'page' => $pages->page, 'per-page' => $pages->pageSize]
         ]]);
     }
+
     public function actionUseBonuses()
     {
         Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
@@ -709,7 +710,21 @@ class ClientController extends BaseController
             return $this->asJson(['error' => ['code' => 400, 'message' => 'Недостаточно параметров']]);
         }
 
-        $sale = Sales::findOne(['number' => $orderId]);
+        $totalBonus = (int)UsersBonus::find()
+            ->select([new \yii\db\Expression("SUM(CASE WHEN tip = 'plus' THEN bonus ELSE 0 END) - SUM(CASE WHEN tip = 'minus' THEN bonus ELSE 0 END)")])
+            ->where(['phone' => $phone])
+            ->scalar();
+
+        if ($totalBonus < $pointsToUse) {
+            return $this->asJson(['error' => ['code' => 403, 'message' => 'Недостаточно бонусов для списания']]);
+        }
+
+        $sale = Sales::find()
+            ->andWhere(['number' => $orderId])
+            ->andWhere(['phone' => $clientId])
+            ->andWhere(['operation' => 'Продажа'])
+            ->one();
+
         if (!$sale) {
             return $this->asJson(['error' => ['code' => 404, 'message' => 'Продажа не найдена']]);
         }
@@ -724,10 +739,20 @@ class ClientController extends BaseController
             ]);
         }
 
+        $salePercent = UsersBonusLevels::find()
+            ->alias('ubl')
+            ->leftJoin('bonus_levels bl', 'bl.alias = ubl.bonus_level')
+            ->andFilterWhere(['user_id' => $clientId])
+            ->andFilterWhere(['check_id' => $sale->id])
+            ->andFilterWhere(['ubl.active' => 1])
+            ->select('cashback_rate')
+            ->scalar();
+
         $userBonus = new UsersBonus();
         $userBonus->phone = $phone;
         $userBonus->name = $comment ?? sprintf(
-            'Возврат с покупки 10%%. Чек %s от %s. Сумма чека %s',
+            'Спиcание бонусов %s%% по чеку %s от %s. Сумма чека %s',
+            $salePercent,
             $sale->number,
             date('d.m.Y H:i:s', strtotime($sale->date)),
             $sale->summ
@@ -787,19 +812,39 @@ class ClientController extends BaseController
             return $this->asJson(['error' => ['code' => 400, 'message' => 'Недостаточно параметров']]);
         }
 
-        $sale = Sales::findOne(['number' => $orderId]);
+        $sale = Sales::find()
+            ->andWhere(['number' => $orderId])
+            ->andWhere(['phone' => $clientId])
+            ->andWhere(['operation' => 'Продажа'])
+            ->one();
+
         if (!$sale) {
             return $this->asJson(['error' => ['code' => 404, 'message' => 'Продажа не найдена']]);
         }
 
+        if (UsersBonus::find()
+            ->andFilterWhere(['phone' => $phone])
+            ->andFilterWhere(['user_id' => $clientId])
+            ->andFilterWhere(['tip' => 'plus'])
+            ->one()
+        ) {
+            return $this->asJson([
+                'response' => [
+                    'code' => 200,
+                    'status' => 'success',
+                    'data' => 'Бонусы за этот заказ уже начислены'
+                ]
+            ]);
+        }
+
         $userBonus = new UsersBonus();
         $userBonus->phone = $phone;
-        $userBonus->name = $comment ?? sprintf(
-            'Возврат с покупки 10%%. Чек %s от %s. Сумма чека %s',
-            $sale->number,
-            date('d.m.Y H:i:s', strtotime($sale->date)),
-            $sale->summ
-        );
+        $userBonus->name = $comment . sprintf(
+                'Возврат с покупки 10%%. Чек %s от %s. Сумма чека %s',
+                $sale->number,
+                date('d.m.Y H:i:s', strtotime($sale->date)),
+                $sale->summ
+            );
         $userBonus->date = date('Y-m-d H:i:s');
         $userBonus->site_id = 1;
         $userBonus->setka_id = 1;
@@ -823,7 +868,8 @@ class ClientController extends BaseController
 
         $totalBonus = (int)UsersBonus::find()
             ->select([new \yii\db\Expression("SUM(CASE WHEN tip = 'plus' THEN bonus ELSE 0 END) - SUM(CASE WHEN tip = 'minus' THEN bonus ELSE 0 END)")])
-            ->where(['phone' => $phone])
+            ->andFilterWhere(['phone' => $phone])
+            ->andFilterWhere(['user_id' => $clientId])
             ->scalar();
 
         return $this->asJson([
@@ -853,7 +899,8 @@ class ClientController extends BaseController
         }
 
         $user = UsersBonus::find()
-            ->where(['id' => $clientId, 'phone' => $phone])
+            ->andFilterWhere(['phone' => $phone])
+            ->andFilterWhere(['user_id' => $clientId])
             ->one();
 
         if (!$user) {
@@ -869,7 +916,9 @@ class ClientController extends BaseController
                 'bl.id as level_id'
             ])
             ->leftJoin('bonus_levels bl', 'bl.alias = ubl.bonus_level AND bl.active = 1')
-            ->where(['ubl.user_id' => $clientId, 'ubl.phone' => $phone, 'ubl.active' => 1])
+            ->andFilterWhere(['ubl.phone' => $phone])
+            ->andFilterWhere(['ubl.user_id' => $clientId])
+            ->andFilterWhere(['ubl.active' => 1])
             ->asArray()
             ->one();