From: Alexander Smirnov Date: Mon, 10 Jun 2024 10:56:51 +0000 (+0300) Subject: add used parameter, apply base settings to children X-Git-Tag: 1.2^2~2^2~2 X-Git-Url: https://gitweb.erp-flowers.ru/?a=commitdiff_plain;h=542c53a71e455461c23aa19f26ff9cff19c98285;p=erp24_rep%2Fyii-erp24%2F.git add used parameter, apply base settings to children --- diff --git a/erp24/api2/controllers/ClientController.php b/erp24/api2/controllers/ClientController.php index c3d2308a..ee56c9e9 100644 --- a/erp24/api2/controllers/ClientController.php +++ b/erp24/api2/controllers/ClientController.php @@ -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" => "Промокод уже использован"]); } 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 ? "истёк срок действия промокода" : "промокод не известен"]); + return $this->asJson(["error_id" => 2, "error" => $promoCodeWeak ? "Истёк срок действия промокода" : "Промокод не известен"]); } $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)); diff --git a/erp24/controllers/PromocodeController.php b/erp24/controllers/PromocodeController.php index 91fb9168..0b525905 100644 --- a/erp24/controllers/PromocodeController.php +++ b/erp24/controllers/PromocodeController.php @@ -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()); diff --git a/erp24/migrations/m240605_072755_create_table_promocode.php b/erp24/migrations/m240605_072755_create_table_promocode.php index fe58bfd6..999e1d54 100755 --- a/erp24/migrations/m240605_072755_create_table_promocode.php +++ b/erp24/migrations/m240605_072755_create_table_promocode.php @@ -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('Дата начала действия промокода'), diff --git a/erp24/records/Promocode.php b/erp24/records/Promocode.php index c4ae00fa..9e64a7ba 100644 --- a/erp24/records/Promocode.php +++ b/erp24/records/Promocode.php @@ -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', diff --git a/erp24/services/PromocodeService.php b/erp24/services/PromocodeService.php index fa37b02a..aa88f667 100644 --- a/erp24/services/PromocodeService.php +++ b/erp24/services/PromocodeService.php @@ -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 diff --git a/erp24/views/promocode/edit.php b/erp24/views/promocode/edit.php index 090394ee..d0deaf92 100644 --- a/erp24/views/promocode/edit.php +++ b/erp24/views/promocode/edit.php @@ -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) { diff --git a/erp24/views/promocode/index.php b/erp24/views/promocode/index.php index 4fd9c4f2..7bdaafc7 100644 --- a/erp24/views/promocode/index.php +++ b/erp24/views/promocode/index.php @@ -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) {