]> gitweb.erp-flowers.ru Git - erp24_rep/yii-erp24/.git/commitdiff
add used parameter, apply base settings to children
authorAlexander Smirnov <fredeom@mail.ru>
Mon, 10 Jun 2024 10:56:51 +0000 (13:56 +0300)
committerAlexander Smirnov <fredeom@mail.ru>
Mon, 10 Jun 2024 10:56:51 +0000 (13:56 +0300)
erp24/api2/controllers/ClientController.php
erp24/controllers/PromocodeController.php
erp24/migrations/m240605_072755_create_table_promocode.php
erp24/records/Promocode.php
erp24/services/PromocodeService.php
erp24/views/promocode/edit.php
erp24/views/promocode/index.php

index c3d2308a7349c4466499726ed05a65bdcd16463d..ee56c9e90d9018362ae8c9707e80e9a5c964bc8f 100644 (file)
@@ -1080,13 +1080,13 @@ class ClientController extends BaseController {
 
         $tip_sale = 'p_' . $result['code'];
         $userBonus = UsersBonus::find()->where(['phone' => $phone, 'tip_sale' => $tip_sale])->one();
-        if ($userBonus) {
-            return $this->asJson(["error_id" => 3, "error" => "промокод уже использован"]);
+        if ($userBonus || ($promoCode && $promoCode->used == Promocode::USED_YES)) {
+            return $this->asJson(["error_id" => 3, "error" => "Ð\9fромокод уже использован"]);
         }
 
         if (!$promoCode || ($promoCode->base == Promocode::BASE_SINGLE_USE && $promoCode->parent && $promoCode->parent->active == Promocode::ACTIVE_OFF)) {
             $promoCodeWeak = Promocode::find()->where(['code' => $result['code'], 'base' => [Promocode::BASE_SHARED, Promocode::BASE_SINGLE_USE]])->one();
-            return $this->asJson(["error_id" => 2, "error" => $promoCodeWeak ? "иÑ\81Ñ\82Ñ\91к Ñ\81Ñ\80ок Ð´ÐµÐ¹Ñ\81Ñ\82виÑ\8f Ð¿Ñ\80омокода" : "промокод не известен"]);
+            return $this->asJson(["error_id" => 2, "error" => $promoCodeWeak ? "Ð\98Ñ\81Ñ\82Ñ\91к Ñ\81Ñ\80ок Ð´ÐµÐ¹Ñ\81Ñ\82виÑ\8f Ð¿Ñ\80омокода" : "Ð\9fромокод не известен"]);
         }
 
         $usersBonus = new UsersBonus;
@@ -1114,6 +1114,7 @@ class ClientController extends BaseController {
 
         if ($promoCode->base == Promocode::BASE_SINGLE_USE) {
             $promoCode->active = Promocode::ACTIVE_OFF;
+            $promoCode->used = Promocode::USED_YES;
             $promoCode->save();
             if ($promoCode->getErrors()) {
                 LogService::apiErrorLog(json_encode(["error_id" => 6, "error" => $promoCode->getErrors()], JSON_UNESCAPED_UNICODE));
index 91fb9168486afe08e1b5e6454cfe5b5bf03fda45..0b525905abbb1e0d192fda0d022bb5d4d8a0841a 100644 (file)
@@ -43,6 +43,7 @@ class PromocodeController extends Controller
                     $model->base = Promocode::BASE_BASE;
                     $model->save();
                 }
+                PromocodeService::applyToSingleUnUsedPromocodes($model);
                 return $this->redirect('/promocode/index');
             } else {
                 var_dump($model->getErrors());
index fe58bfd600a1d7b226c74ca52582a00db9695a0f..999e1d549bf8d679a1faa1e91f3263293b091a33 100755 (executable)
@@ -19,6 +19,7 @@ class m240605_072755_create_table_promocode extends Migration
             'bonus' => $this->integer()->notNull()->comment('Количество бонусов получаемых по промокоду'),
             'duration' => $this->integer()->notNull()->comment('Продолжительность действия бонуса'),
             'active' => $this->tinyInteger()->notNull()->defaultValue(0)->comment('0 - не активный, 1 - активный'),
+            'used' => $this->tinyInteger()->notNull()->defaultValue(0)->comment('0 - не использован, 1 - использован'),
             'base' => $this->tinyInteger()->notNull()->defaultValue(0)->comment('0 - многоразовый промокод, 1 - база для одноразовых, 2 - одноразовый промокод'),
             'parent_id' => $this->integer()->null()->comment('ID промокода базы'),
             'date_start' => $this->timestamp()->notNull()->comment('Дата начала действия промокода'),
index c4ae00fa216ff3cefcc331a333124444baa1d7d7..9e64a7ba2f3d2f22a4f88eedb4d43db2eda2a620 100644 (file)
@@ -12,6 +12,7 @@ use Yii;
  * @property int $bonus Количество бонусов получаемых по промокоду
  * @property int $duration Продолжительность действия бонуса
  * @property int $active 0 - не активный, 1 - активный
+ * @property int $used 0 - не использован, 1 - использован
  * @property int $base 0 - многоразовый промокод, 1 - база для одноразовых, 2 - одноразовый промокод
  * @property int|null $parent_id ID промокода базы
  * @property string $date_start Дата начала действия промокода
@@ -25,6 +26,8 @@ class Promocode extends \yii\db\ActiveRecord
 {
     const ACTIVE_ON = 1;
     const ACTIVE_OFF = 0;
+    const USED_YES = 1;
+    const USED_NO = 0;
     const BASE_SHARED = 0;
     const BASE_BASE = 1;
     const BASE_SINGLE_USE = 2;
@@ -37,7 +40,7 @@ class Promocode extends \yii\db\ActiveRecord
         return [
             [['code', 'bonus', 'duration', 'active', 'date_start', 'date_end', 'created_by', 'created_at'], 'required'],
             [['code'], 'string', 'max' => 13],
-            [['bonus', 'duration', 'active', 'base', 'parent_id', 'created_by', 'updated_by'], 'integer'],
+            [['bonus', 'duration', 'active', 'used', 'base', 'parent_id', 'created_by', 'updated_by'], 'integer'],
             [['date_start', 'date_end', 'created_at', 'updated_at'], 'datetime', 'format' => 'php:Y-m-d H:i:s'],
             [['updated_by', 'updated_at', 'generatePromocodeCount'], 'safe'],
         ];
@@ -50,6 +53,7 @@ class Promocode extends \yii\db\ActiveRecord
             'bonus' => 'Bonus',
             'duration' => 'Duration',
             'active' => 'Active',
+            'used' => 'Used',
             'base' => 'Base',
             'parent_id' => 'Parent ID',
             'date_start' => 'Date Start',
index fa37b02a1946977463944ebdf4f09113cef80130..aa88f667076b762f321c5d19069a7a04e16541e2 100644 (file)
@@ -29,7 +29,6 @@ class PromocodeService
             $singleUsePromocode->parent_id = $basePromocode->id;
             $singleUsePromocode->date_start = $basePromocode->date_start;
             $singleUsePromocode->date_end = $basePromocode->date_end;
-            $singleUsePromocode->date_start = $basePromocode->date_start;
             $singleUsePromocode->created_by = Yii::$app->user->id;
             $singleUsePromocode->created_at = date("Y-m-d H:i:s");
             $singleUsePromocode->save();
@@ -38,4 +37,20 @@ class PromocodeService
             }
         }
     }
+
+    public static function applyToSingleUnUsedPromocodes(Promocode $basePromocode) {
+        $children = Promocode::find()->where(['parent_id' => $basePromocode->id, 'used' => Promocode::USED_NO])->all();
+        foreach ($children as $singleUsePromocode) {
+            /** @var $singleUsePromocode Promocode */
+            $singleUsePromocode->bonus = $basePromocode->bonus;
+            $singleUsePromocode->duration = $basePromocode->duration;
+            $singleUsePromocode->active = $basePromocode->active;
+            $singleUsePromocode->date_start = $basePromocode->date_start;
+            $singleUsePromocode->date_end = $basePromocode->date_end;
+            $singleUsePromocode->save();
+            if ($singleUsePromocode->getErrors()) {
+                var_dump($singleUsePromocode->getErrors());
+            }
+        }
+    }
 }
\ No newline at end of file
index 090394ee798b3708307d73bc620c4c1d36d35cac..d0deaf9273ac306088662fcd8520c90b424ce8db 100644 (file)
@@ -75,7 +75,12 @@ use \yii_app\helpers\PrintBlockHelper;
                         return Html::a($model->code, ['edit', 'id' => $model->id], ['class' => 'btn btn-link']);
                     }
                 ],
-                'bonus',
+                [
+                    'label' => 'Бонус',
+                    'value' => function ($model) {
+                        return $model->bonus;
+                    }
+                ],
                 [
                     'label' => 'Время действия бонуса в днях',
                     'value' => function ($model) {
@@ -94,6 +99,12 @@ use \yii_app\helpers\PrintBlockHelper;
                         return $model->active ? 'Да' : 'Нет';
                     }
                 ],
+                [
+                    'label' => 'Уже введён',
+                    'value' => function ($model) {
+                        return $model->used == Promocode::USED_YES ? 'Введён' : 'Нет';
+                    }
+                ],
                 [
                     'label' => 'Дата начала действия промокода',
                     'value' => function ($model) {
index 4fd9c4f2a2016768e1b797af05f5c515da55b9d3..7bdaafc7861ae414cca720b8cae6bf80642865a0 100644 (file)
@@ -25,7 +25,12 @@ use yii\helpers\Html;
                     return Html::a($model->code, ['edit', 'id' => $model->id], ['class' => 'btn btn-link']);
                 }
             ],
-            'bonus',
+            [
+                'label' => 'Бонус',
+                'value' => function ($model) {
+                    return $model->bonus;
+                }
+            ],
             [
                 'label' => 'Время действия бонуса в днях',
                 'value' => function ($model) {