use Yii;
use yii\data\Pagination;
+use yii\db\Expression;
use yii\helpers\Json;
use yii_app\helpers\ClientHelper;
use yii_app\helpers\UtilHelper;
return $this->asJson(["error_id" => 1.2, "error" => "phone is required"]);
}
- $promoCode = Promocode::find()->where(['code' => $result['code'], 'active' => '1'])->one();
+ $promoCode = Promocode::find()->where(['code' => $result['code'], 'active' => '1', 'base' => [Promocode::BASE_SHARED, Promocode::BASE_SINGLE_USE]])
+ ->andWhere(['<=', new Expression("TO_CHAR(date_start, 'YYYY-MM-DD')"), date('Y-m-d')])
+ ->andWhere(['>=', new Expression("TO_CHAR(date_end, 'YYYY-MM-DD')"), date('Y-m-d')])
+ ->one();
/** @var $promoCode Promocode */
- if (!$promoCode) {
- return $this->asJson(["error_id" => 2, "error" => "промокод не известен"]);
- }
$tip_sale = 'p_' . $result['code'];
$userBonus = UsersBonus::find()->where(['phone' => $phone, 'tip_sale' => $tip_sale])->one();
if ($userBonus) {
- return $this->asJson(["error_id" => 2, "error" => "промокод уже использован"]);
+ return $this->asJson(["error_id" => 3, "error" => "промокод уже использован"]);
+ }
+
+ if (!$promoCode) {
+ $promoCodeWeak = Promocode::find()->where(['code' => $result['code'], 'base' => [Promocode::BASE_SHARED, Promocode::BASE_SINGLE_USE]])->one();
+ return $this->asJson(["error_id" => 2, "error" => $promoCodeWeak ? "истёк срок действия промокода" : "промокод не известен"]);
}
$usersBonus = new UsersBonus;
$usersBonus->tip = 'plus';
$usersBonus->tip_sale = $tip_sale;
$usersBonus->phone = $phone;
- $usersBonus->name = "Бонусы по промокоду";
+ $usersBonus->name = "Бонусы по промокоду " . $promoCode->code;
$usersBonus->store_id = 0;
$usersBonus->site_id = 0;
$usersBonus->referal_id = 0;
$usersBonus->save();
if ($usersBonus->getErrors()) {
LogService::apiErrorLog(json_encode(["error_id" => 5, "error" => $usersBonus->getErrors()], JSON_UNESCAPED_UNICODE));
- return $this->asJson(["error_id" => 2, "error" => array_values($usersBonus->firstErrors)[0] ?? ""]);
+ return $this->asJson(["error_id" => 5, "error" => array_values($usersBonus->firstErrors)[0] ?? ""]);
+ }
+
+ if ($promoCode->base == Promocode::BASE_SINGLE_USE) {
+ $promoCode->active = Promocode::ACTIVE_OFF;
+ $promoCode->save();
+ if ($promoCode->getErrors()) {
+ LogService::apiErrorLog(json_encode(["error_id" => 6, "error" => $promoCode->getErrors()], JSON_UNESCAPED_UNICODE));
+ return $this->asJson(["error_id" => 6, "error" => array_values($promoCode->firstErrors)[0] ?? ""]);
+ }
}
$mess = ['ok'];
$model->date_end = date("Y-m-d 00:00:00", strtotime("+366 day", time()));
} else {
$model = Promocode::findOne($id);
- $dataProvider = new ActiveDataProvider(['query' => Promocode::find()->where(['base' => Promocode::BASE_SINGLE_USE, 'parent_id' => $id])]);
+ $dataProvider = new ActiveDataProvider(['query' => Promocode::find()->where(['base' => Promocode::BASE_SINGLE_USE, 'parent_id' => $id])
+ ->orderBy(['created_at' => SORT_DESC, 'code' => SORT_ASC])]);
}
/** @var $model Promocode */
if (Yii::$app->request->isPost && $model->load(Yii::$app->request->post())) {