]> gitweb.erp-flowers.ru Git - erp24_rep/yii-erp24/.git/commitdiff
дубликаты feature_fomichev_2026-03-06_TO8-22_promobonuses origin/feature_fomichev_2026-03-06_TO8-22_promobonuses
authorVladimir Fomichev <vladimir.fomichev@erp-flowers.ru>
Fri, 6 Mar 2026 14:57:12 +0000 (17:57 +0300)
committerVladimir Fomichev <vladimir.fomichev@erp-flowers.ru>
Fri, 6 Mar 2026 14:57:12 +0000 (17:57 +0300)
erp24/api2/controllers/BonusController.php

index 58226280191320e2e2e5f9eff57358f83fe6ec34..2952ad56d96173ee1d67e2d2f4264ace8c8c24ef 100644 (file)
@@ -849,14 +849,23 @@ class BonusController extends BaseController
         if (!empty($lid_id)) {
 
             file_put_contents(self::OUT_DIR . '/sale_bonuses_' . $fl . '.json', PHP_EOL . '--' . __LINE__, FILE_APPEND);
-            $tipSaleForCheck = $usePromoWriteOff ? Promocode::TIP_SALE_PROMOBONUS : 'sale';
-            $writeOffAlready = UsersBonus::find()->where(['lid_id' => $lid_id, 'phone' => $phone, 'tip_sale' => $tipSaleForCheck, 'tip' => 'minus'])->one() != null;
+            // TO8-22: Проверяем дубликат по ЛЮБОМУ tip_sale (sale или promobonus),
+            // чтобы повторный запрос с тем же check_id не начислил кэшбек
+            $writeOffAlready = UsersBonus::find()
+                ->where(['lid_id' => $lid_id, 'phone' => $phone, 'tip' => 'minus'])
+                ->andWhere(['in', 'tip_sale', ['sale', Promocode::TIP_SALE_PROMOBONUS]])
+                ->one() != null;
         }
 
         file_put_contents(self::OUT_DIR . '/sale_bonuses_' . $fl . '.json', PHP_EOL . '--' . __LINE__, FILE_APPEND);
 
+        // TO8-22: Если по этому check_id уже было списание (обычное или промо) — отклоняем повторный запрос
+        if ($writeOffAlready) {
+            return $this->asJson(["error_id" => 7, "error" => "Списание по данному чеку уже произведено"]);
+        }
+
         $user_balans_new = $user_balans;
-        if ($write_off_bonuses && !$writeOffAlready) {
+        if ($write_off_bonuses) {
             // TO8-22: При промо-списании auth_code не требуется (списание автоматическое)
             if (!$usePromoWriteOff) {
                 // Проверка кода только при стандартном списании
@@ -1909,7 +1918,7 @@ class BonusController extends BaseController
                 "phone" => $phone,
                 "code" => $result['code'],
             ], JSON_UNESCAPED_UNICODE));
-            return $this->asJson(["error_id" => 10, "error" => "Ошибка активации промокода", "debug" => $e->getMessage()]);
+            return $this->asJson(["error_id" => 10, "error" => "Ошибка активации промокода"]);
         }
     }
 }