$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;
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));
$model->base = Promocode::BASE_BASE;
$model->save();
}
+ PromocodeService::applyToSingleUnUsedPromocodes($model);
return $this->redirect('/promocode/index');
} else {
var_dump($model->getErrors());
'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('Дата начала действия промокода'),
* @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 Дата начала действия промокода
{
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;
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'],
];
'bonus' => 'Bonus',
'duration' => 'Duration',
'active' => 'Active',
+ 'used' => 'Used',
'base' => 'Base',
'parent_id' => 'Parent ID',
'date_start' => 'Date Start',
$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();
}
}
}
+
+ 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
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) {
return $model->active ? 'Да' : 'Нет';
}
],
+ [
+ 'label' => 'Уже введён',
+ 'value' => function ($model) {
+ return $model->used == Promocode::USED_YES ? 'Введён' : 'Нет';
+ }
+ ],
[
'label' => 'Дата начала действия промокода',
'value' => function ($model) {
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) {