]> gitweb.erp-flowers.ru Git - erp24_rep/yii-erp24/.git/commitdiff
Переписал обновление бонусного уровня
authorfomichev <vladimir.fomichev@erp-flowers.ru>
Wed, 5 Feb 2025 18:46:43 +0000 (21:46 +0300)
committerfomichev <vladimir.fomichev@erp-flowers.ru>
Wed, 5 Feb 2025 18:46:43 +0000 (21:46 +0300)
erp24/api2/controllers/BonusController.php

index fd146f18a7f731a52000448bc3283e2ccc894c5a..f94ee3d7352158571ddec21d7dfcbda9ce2b6695 100644 (file)
@@ -1194,10 +1194,40 @@ class BonusController extends BaseController
         return $this->asJson($mess);
     }
 
+    /**
+     * Создаёт новую запись в таблице UsersBonusLevels.
+     *
+     * @param Users $user
+     * @param string $bonusLevel
+     * @param string $check_id
+     * @param string $check_name
+     * @param string $createdAt
+     * @return bool
+     */
+    protected function createBonusHistoryRecord($user, $bonusLevel, $check_id, $check_name, $createdAt)
+    {
+        $bonusRecord = new UsersBonusLevels();
+        $bonusRecord->phone = $user->phone;
+        $bonusRecord->user_id = $user->id;
+        $bonusRecord->bonus_level = $bonusLevel;
+        $bonusRecord->created_at = $createdAt;
+        $bonusRecord->check_id = $check_id;
+        $bonusRecord->check_name = $check_name;
+        $bonusRecord->active = 1;
+
+        if (!$bonusRecord->save()) {
+            LogService::apiErrorLog(
+                json_encode(["error_id" => 100, "error" => $bonusRecord->getErrors()], JSON_UNESCAPED_UNICODE)
+            );
+            return false;
+        }
+        return true;
+    }
+
     /**
      * Обновляет бонусный уровень пользователя.
      *
-     * @param Users  $user      Модель пользователя.
+     * @param Users  $user       Модель пользователя.
      * @param float  $sale_price Текущая сумма покупок.
      * @param string $check_id   Идентификатор чека.
      * @param string $check_name Имя (номер) чека.
@@ -1209,80 +1239,45 @@ class BonusController extends BaseController
             ->orderBy(['threshold' => SORT_ASC])
             ->all();
 
-        $newBonusLevel = null;
-
+        $computedBonusLevel = null;
         foreach ($bonusLevels as $level) {
             if ($sale_price > $level->threshold) {
-                $newBonusLevel = $level->alias;
+                $computedBonusLevel = $level->alias;
             }
         }
+        $newBonusLevel = $computedBonusLevel ?? 'silver';
 
-        if (empty($user->bonus_level)) {
-            $existingLevel = UsersBonusLevels::find()
-                ->where(['or', ['phone' => $user->phone], ['user_id' => $user->id]])
-                ->andWhere(['active' => 1])
-                ->one();
-
-            if (!$existingLevel && $newBonusLevel) {
-                $user->bonus_level = $newBonusLevel;
-                if (!$user->save()) {
-                    LogService::apiErrorLog(
-                        json_encode(["error_id" => 6.1, "error" => $user->getErrors()], JSON_UNESCAPED_UNICODE)
-                    );
-                }
+        $existingHistoryLevel = UsersBonusLevels::find()
+            ->where(['or', ['phone' => $user->phone], ['user_id' => $user->id]])
+            ->andWhere(['active' => 1])
+            ->one();
 
-                $bonusRecord = new UsersBonusLevels();
-                $bonusRecord->phone = $user->phone;
-                $bonusRecord->user_id = $user->id;
-                $bonusRecord->bonus_level = $newBonusLevel;
-                $bonusRecord->created_at = date('Y-m-d H:i:s');
-                $bonusRecord->check_id = $check_id;       // используем значения из запроса
-                $bonusRecord->check_name = $check_name;     // используем значения из запроса
-                $bonusRecord->active = 1;
+        $now = date('Y-m-d H:i:s');
 
-                if (!$bonusRecord->save()) {
-                    LogService::apiErrorLog(
-                        json_encode(["error_id" => 7.1, "error" => $bonusRecord->getErrors()], JSON_UNESCAPED_UNICODE)
-                    );
-                }
+        if (empty($user->bonus_level) || $user->bonus_level !== $newBonusLevel) {
+            $user->bonus_level = $newBonusLevel;
+            if (!$user->save()) {
+                LogService::apiErrorLog(
+                    json_encode(["error_id" => 6.1, "error" => $user->getErrors()], JSON_UNESCAPED_UNICODE)
+                );
             }
-        } else {
-            $activeLevel = UsersBonusLevels::find()
-                ->where(['or', ['phone' => $user->phone], ['user_id' => $user->id]])
-                ->andWhere(['active' => 1])
-                ->one();
-
-            if ($newBonusLevel && $activeLevel && $activeLevel->bonus_level !== $newBonusLevel) {
-                $activeLevel->active = 0;
-                $activeLevel->updated_at = date('Y-m-d H:i:s');
-                if (!$activeLevel->save()) {
-                    LogService::apiErrorLog(
-                        json_encode(["error_id" => 6.2, "error" => $activeLevel->getErrors()], JSON_UNESCAPED_UNICODE)
-                    );
-                }
 
-                $bonusRecord = new UsersBonusLevels();
-                $bonusRecord->phone = $user->phone;
-                $bonusRecord->user_id = $user->id;
-                $bonusRecord->bonus_level = $newBonusLevel;
-                $bonusRecord->created_at = date('Y-m-d H:i:s');
-                $bonusRecord->check_id = $check_id;
-                $bonusRecord->check_name = $check_name;
-                $bonusRecord->active = 1;
-
-                if (!$bonusRecord->save()) {
-                    LogService::apiErrorLog(
-                        json_encode(["error_id" => 6.3, "error" => $bonusRecord->getErrors()], JSON_UNESCAPED_UNICODE)
-                    );
-                }
-
-                $user->bonus_level = $newBonusLevel;
-                if (!$user->save()) {
+            if ($existingHistoryLevel) {
+                $existingHistoryLevel->active = 0;
+                $existingHistoryLevel->updated_at = $now;
+                if (!$existingHistoryLevel->save()) {
                     LogService::apiErrorLog(
-                        json_encode(["error_id" => 6.4, "error" => $user->getErrors()], JSON_UNESCAPED_UNICODE)
+                        json_encode(
+                            ["error_id" => 6.2, "error" => $existingHistoryLevel->getErrors()],
+                            JSON_UNESCAPED_UNICODE
+                        )
                     );
                 }
             }
+
+            $this->createBonusHistoryRecord($user, $newBonusLevel, $check_id, $check_name, $now);
+        } elseif (!empty($user->bonus_level) && !$existingHistoryLevel) {
+            $this->createBonusHistoryRecord($user, $user->bonus_level, $check_id, $check_name, $now);
         }
     }