'pages' => ['totalCount' => (int)$pages->totalCount, 'page' => $pages->page, 'per-page' => $pages->pageSize]
]]);
}
+
public function actionUseBonuses()
{
Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
return $this->asJson(['error' => ['code' => 400, 'message' => 'Недостаточно параметров']]);
}
- $sale = Sales::findOne(['number' => $orderId]);
+ $totalBonus = (int)UsersBonus::find()
+ ->select([new \yii\db\Expression("SUM(CASE WHEN tip = 'plus' THEN bonus ELSE 0 END) - SUM(CASE WHEN tip = 'minus' THEN bonus ELSE 0 END)")])
+ ->where(['phone' => $phone])
+ ->scalar();
+
+ if ($totalBonus < $pointsToUse) {
+ return $this->asJson(['error' => ['code' => 403, 'message' => 'Недостаточно бонусов для списания']]);
+ }
+
+ $sale = Sales::find()
+ ->andWhere(['number' => $orderId])
+ ->andWhere(['phone' => $clientId])
+ ->andWhere(['operation' => 'Продажа'])
+ ->one();
+
if (!$sale) {
return $this->asJson(['error' => ['code' => 404, 'message' => 'Продажа не найдена']]);
}
]);
}
+ $salePercent = UsersBonusLevels::find()
+ ->alias('ubl')
+ ->leftJoin('bonus_levels bl', 'bl.alias = ubl.bonus_level')
+ ->andFilterWhere(['user_id' => $clientId])
+ ->andFilterWhere(['check_id' => $sale->id])
+ ->andFilterWhere(['ubl.active' => 1])
+ ->select('cashback_rate')
+ ->scalar();
+
$userBonus = new UsersBonus();
$userBonus->phone = $phone;
$userBonus->name = $comment ?? sprintf(
- 'Возврат с покупки 10%%. Чек %s от %s. Сумма чека %s',
+ 'Спиcание бонусов %s%% по чеку %s от %s. Сумма чека %s',
+ $salePercent,
$sale->number,
date('d.m.Y H:i:s', strtotime($sale->date)),
$sale->summ
return $this->asJson(['error' => ['code' => 400, 'message' => 'Недостаточно параметров']]);
}
- $sale = Sales::findOne(['number' => $orderId]);
+ $sale = Sales::find()
+ ->andWhere(['number' => $orderId])
+ ->andWhere(['phone' => $clientId])
+ ->andWhere(['operation' => 'Продажа'])
+ ->one();
+
if (!$sale) {
return $this->asJson(['error' => ['code' => 404, 'message' => 'Продажа не найдена']]);
}
+ if (UsersBonus::find()
+ ->andFilterWhere(['phone' => $phone])
+ ->andFilterWhere(['user_id' => $clientId])
+ ->andFilterWhere(['tip' => 'plus'])
+ ->one()
+ ) {
+ return $this->asJson([
+ 'response' => [
+ 'code' => 200,
+ 'status' => 'success',
+ 'data' => 'Бонусы за этот заказ уже начислены'
+ ]
+ ]);
+ }
+
$userBonus = new UsersBonus();
$userBonus->phone = $phone;
- $userBonus->name = $comment ?? sprintf(
- 'Возврат с покупки 10%%. Чек %s от %s. Сумма чека %s',
- $sale->number,
- date('d.m.Y H:i:s', strtotime($sale->date)),
- $sale->summ
- );
+ $userBonus->name = $comment . sprintf(
+ 'Возврат с покупки 10%%. Чек %s от %s. Сумма чека %s',
+ $sale->number,
+ date('d.m.Y H:i:s', strtotime($sale->date)),
+ $sale->summ
+ );
$userBonus->date = date('Y-m-d H:i:s');
$userBonus->site_id = 1;
$userBonus->setka_id = 1;
$totalBonus = (int)UsersBonus::find()
->select([new \yii\db\Expression("SUM(CASE WHEN tip = 'plus' THEN bonus ELSE 0 END) - SUM(CASE WHEN tip = 'minus' THEN bonus ELSE 0 END)")])
- ->where(['phone' => $phone])
+ ->andFilterWhere(['phone' => $phone])
+ ->andFilterWhere(['user_id' => $clientId])
->scalar();
return $this->asJson([
}
$user = UsersBonus::find()
- ->where(['id' => $clientId, 'phone' => $phone])
+ ->andFilterWhere(['phone' => $phone])
+ ->andFilterWhere(['user_id' => $clientId])
->one();
if (!$user) {
'bl.id as level_id'
])
->leftJoin('bonus_levels bl', 'bl.alias = ubl.bonus_level AND bl.active = 1')
- ->where(['ubl.user_id' => $clientId, 'ubl.phone' => $phone, 'ubl.active' => 1])
+ ->andFilterWhere(['ubl.phone' => $phone])
+ ->andFilterWhere(['ubl.user_id' => $clientId])
+ ->andFilterWhere(['ubl.active' => 1])
->asArray()
->one();