return $this->asJson($mess);
}
+ /**
+ * Создаёт новую запись в таблице UsersBonusLevels.
+ *
+ * @param Users $user
+ * @param string $bonusLevel
+ * @param string $check_id
+ * @param string $check_name
+ * @param string $createdAt
+ * @return bool
+ */
+ protected function createBonusHistoryRecord($user, $bonusLevel, $check_id, $check_name, $createdAt)
+ {
+ $bonusRecord = new UsersBonusLevels();
+ $bonusRecord->phone = $user->phone;
+ $bonusRecord->user_id = $user->id;
+ $bonusRecord->bonus_level = $bonusLevel;
+ $bonusRecord->created_at = $createdAt;
+ $bonusRecord->check_id = $check_id;
+ $bonusRecord->check_name = $check_name;
+ $bonusRecord->active = 1;
+
+ if (!$bonusRecord->save()) {
+ LogService::apiErrorLog(
+ json_encode(["error_id" => 100, "error" => $bonusRecord->getErrors()], JSON_UNESCAPED_UNICODE)
+ );
+ return false;
+ }
+ return true;
+ }
+
/**
* Обновляет бонусный уровень пользователя.
*
- * @param Users $user Модель пользователя.
+ * @param Users $user Модель пользователя.
* @param float $sale_price Текущая сумма покупок.
* @param string $check_id Идентификатор чека.
* @param string $check_name Имя (номер) чека.
->orderBy(['threshold' => SORT_ASC])
->all();
- $newBonusLevel = null;
-
+ $computedBonusLevel = null;
foreach ($bonusLevels as $level) {
if ($sale_price > $level->threshold) {
- $newBonusLevel = $level->alias;
+ $computedBonusLevel = $level->alias;
}
}
+ $newBonusLevel = $computedBonusLevel ?? 'silver';
- if (empty($user->bonus_level)) {
- $existingLevel = UsersBonusLevels::find()
- ->where(['or', ['phone' => $user->phone], ['user_id' => $user->id]])
- ->andWhere(['active' => 1])
- ->one();
-
- if (!$existingLevel && $newBonusLevel) {
- $user->bonus_level = $newBonusLevel;
- if (!$user->save()) {
- LogService::apiErrorLog(
- json_encode(["error_id" => 6.1, "error" => $user->getErrors()], JSON_UNESCAPED_UNICODE)
- );
- }
+ $existingHistoryLevel = UsersBonusLevels::find()
+ ->where(['or', ['phone' => $user->phone], ['user_id' => $user->id]])
+ ->andWhere(['active' => 1])
+ ->one();
- $bonusRecord = new UsersBonusLevels();
- $bonusRecord->phone = $user->phone;
- $bonusRecord->user_id = $user->id;
- $bonusRecord->bonus_level = $newBonusLevel;
- $bonusRecord->created_at = date('Y-m-d H:i:s');
- $bonusRecord->check_id = $check_id; // используем значения из запроса
- $bonusRecord->check_name = $check_name; // используем значения из запроса
- $bonusRecord->active = 1;
+ $now = date('Y-m-d H:i:s');
- if (!$bonusRecord->save()) {
- LogService::apiErrorLog(
- json_encode(["error_id" => 7.1, "error" => $bonusRecord->getErrors()], JSON_UNESCAPED_UNICODE)
- );
- }
+ if (empty($user->bonus_level) || $user->bonus_level !== $newBonusLevel) {
+ $user->bonus_level = $newBonusLevel;
+ if (!$user->save()) {
+ LogService::apiErrorLog(
+ json_encode(["error_id" => 6.1, "error" => $user->getErrors()], JSON_UNESCAPED_UNICODE)
+ );
}
- } else {
- $activeLevel = UsersBonusLevels::find()
- ->where(['or', ['phone' => $user->phone], ['user_id' => $user->id]])
- ->andWhere(['active' => 1])
- ->one();
-
- if ($newBonusLevel && $activeLevel && $activeLevel->bonus_level !== $newBonusLevel) {
- $activeLevel->active = 0;
- $activeLevel->updated_at = date('Y-m-d H:i:s');
- if (!$activeLevel->save()) {
- LogService::apiErrorLog(
- json_encode(["error_id" => 6.2, "error" => $activeLevel->getErrors()], JSON_UNESCAPED_UNICODE)
- );
- }
- $bonusRecord = new UsersBonusLevels();
- $bonusRecord->phone = $user->phone;
- $bonusRecord->user_id = $user->id;
- $bonusRecord->bonus_level = $newBonusLevel;
- $bonusRecord->created_at = date('Y-m-d H:i:s');
- $bonusRecord->check_id = $check_id;
- $bonusRecord->check_name = $check_name;
- $bonusRecord->active = 1;
-
- if (!$bonusRecord->save()) {
- LogService::apiErrorLog(
- json_encode(["error_id" => 6.3, "error" => $bonusRecord->getErrors()], JSON_UNESCAPED_UNICODE)
- );
- }
-
- $user->bonus_level = $newBonusLevel;
- if (!$user->save()) {
+ if ($existingHistoryLevel) {
+ $existingHistoryLevel->active = 0;
+ $existingHistoryLevel->updated_at = $now;
+ if (!$existingHistoryLevel->save()) {
LogService::apiErrorLog(
- json_encode(["error_id" => 6.4, "error" => $user->getErrors()], JSON_UNESCAPED_UNICODE)
+ json_encode(
+ ["error_id" => 6.2, "error" => $existingHistoryLevel->getErrors()],
+ JSON_UNESCAPED_UNICODE
+ )
);
}
}
+
+ $this->createBonusHistoryRecord($user, $newBonusLevel, $check_id, $check_name, $now);
+ } elseif (!empty($user->bonus_level) && !$existingHistoryLevel) {
+ $this->createBonusHistoryRecord($user, $user->bonus_level, $check_id, $check_name, $now);
}
}