From: marina Date: Tue, 22 Jul 2025 09:32:45 +0000 (+0300) Subject: ERP-438 Доработка эндпойнтов X-Git-Url: https://gitweb.erp-flowers.ru/?a=commitdiff_plain;h=efd1208dd114263767be4c5cfb430cfd2cf6ca92;p=erp24_rep%2Fyii-erp24%2F.git ERP-438 Доработка эндпойнтов --- diff --git a/erp24/api2/controllers/ClientController.php b/erp24/api2/controllers/ClientController.php index 31ba2e64..f4513243 100644 --- a/erp24/api2/controllers/ClientController.php +++ b/erp24/api2/controllers/ClientController.php @@ -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();