}
$time = $this->time ? (int)$this->time : time();
- $stepsBack = $this->stepsBack ?? 0;
+
$currentYear = date('Y', $time);
$currentMonth = date('m', $time);
$currentDay = date('j', $time);
$currentDate = sprintf('%04d-%02d-%02d', $currentYear, $currentMonth, $currentDay);
$step1 = $messagesSettings ? $messagesSettings->day_before_step1 : 10;
+ $stepsBack = $this->stepsBack ?? $step1;
- for ($i = $stepsBack; $i >= 0; $i--) {
- $dateToProcess = date('Y-m-d', strtotime("-$i days", strtotime($currentDate)));
- $startDate = date('Y-m-d', strtotime("+$step1 days", strtotime($dateToProcess)));
+ // Генерация для прошлых дат (от текущей даты на $step1 дней назад)
+ for ($i = $stepsBack; $i > 0; $i--) {
+ $kogortDate = date('Y-m-d', strtotime("-$i days", strtotime($currentDate))); // Дата когорты
+ $targetDate = date('Y-m-d', strtotime("+$step1 days", strtotime($kogortDate))); // Целевая дата
- $kogortPhones = Users::formKogortByDateAndType($startDate, 'target');
+ $kogortPhones = Users::formKogortByDateAndType($targetDate, 'target');
if (!empty($kogortPhones)) {
- Users::saveKogort($kogortPhones, $startDate, SentKogort::KOGORT_NUMBERS['target']);
- $this->stdout("Ð\9aогоÑ\80Ñ\82а длÑ\8f даÑ\82Ñ\8b {$startDate} успешно сохранена.\n", BaseConsole::FG_GREEN);
+ Users::saveKogort($kogortPhones, $kogortDate, $targetDate, SentKogort::KOGORT_NUMBERS['target']);
+ $this->stdout("Ð\9aогоÑ\80Ñ\82а на {$kogortDate} длÑ\8f Ñ\86елевой даÑ\82Ñ\8b {$targetDate} успешно сохранена.\n", BaseConsole::FG_GREEN);
} else {
- $this->stdout("Нет данных для формирования когорты на дату {$startDate}.\n", BaseConsole::FG_RED);
+ $this->stdout("Нет данных для формирования когорты для целевой даты {$targetDate}.\n", BaseConsole::FG_RED);
+ }
+ }
+
+ // Генерация для текущей даты
+ $kogortDate = $currentDate;
+ $targetDate = date('Y-m-d', strtotime("+$step1 days", strtotime($kogortDate)));
+
+ $kogortPhones = Users::formKogortByDateAndType($targetDate, 'target');
+
+ if (!empty($kogortPhones)) {
+ Users::saveKogort($kogortPhones, $kogortDate, $targetDate, SentKogort::KOGORT_NUMBERS['target']);
+ $this->stdout("Когорта на {$kogortDate} для целевой даты {$targetDate} успешно сохранена.\n", BaseConsole::FG_GREEN);
+ } else {
+ $this->stdout("Нет данных для формирования когорты для целевой даты {$targetDate}.\n", BaseConsole::FG_RED);
+ }
+
+ // Генерация для будущих дат (от текущей даты на $step1 дней вперёд)
+ for ($i = 1; $i <= $step1; $i++) {
+ $kogortDate = date('Y-m-d', strtotime("+$i days", strtotime($currentDate))); // Дата когорты
+ $targetDate = date('Y-m-d', strtotime("+$step1 days", strtotime($kogortDate))); // Целевая дата
+
+ $kogortPhones = Users::formKogortByDateAndType($targetDate, 'target');
+
+ if (!empty($kogortPhones)) {
+ Users::saveKogort($kogortPhones, $kogortDate, $targetDate, SentKogort::KOGORT_NUMBERS['target'], true);
+ $this->stdout("Когорта на {$kogortDate} для целевой даты {$targetDate} успешно сохранена.\n", BaseConsole::FG_GREEN);
+ } else {
+ $this->stdout("Нет данных для формирования когорты для целевой даты {$targetDate}.\n", BaseConsole::FG_RED);
}
}
$step2 = $messagesSettings ? $messagesSettings->day_before_step2 : 4;
for ($i = $stepsBack; $i >= 0; $i--) {
- $dateToProcess = date('Y-m-d', strtotime("-$i days", strtotime($currentDate)));
- $startDate = date('Y-m-d', strtotime("+$step2 days", strtotime($dateToProcess)));
+ $kogortDate = date('Y-m-d', strtotime("-$i days", strtotime($currentDate)));
+ $targetDate = date('Y-m-d', strtotime("+$step2 days", strtotime($kogortDate)));
- $kogortPhones = Users::formKogortByDateAndType($startDate, 'whatsapp');
+ $kogortPhones = Users::formKogortByDateAndType($targetDate, 'whatsapp');
if (!empty($kogortPhones)) {
- Users::saveKogort($kogortPhones, $startDate, SentKogort::KOGORT_NUMBERS['whatsapp']);
+ Users::saveKogort($kogortPhones, $kogortDate, $targetDate, SentKogort::KOGORT_NUMBERS['whatsapp']);
$this->stdout(
- "Когорта для Вотсапа на дату {$startDate} успешно создана.\n",
+ "Когорта для Вотсапа на {$kogortDate} для целевой даты {$targetDate} успешно создана.\n",
BaseConsole::FG_GREEN
);
} else {
$this->stdout(
- "Нет данных для формирования когорты для Ватсапа на дату {$startDate}.\n",
+ "Нет данных для формирования когорты для Ватсапа на {$kogortDate} для целевой даты {$targetDate}.\n",
BaseConsole::FG_RED
);
}
}
+ // Генерация для будущих дат (от текущей даты на $step2 дней вперёд)
+ for ($i = 1; $i <= $step2; $i++) {
+ $kogortDate = date('Y-m-d', strtotime("+$i days", strtotime($currentDate))); // Дата когорты
+ $targetDate = date('Y-m-d', strtotime("+$step2 days", strtotime($kogortDate))); // Целевая дата
+
+ $kogortPhones = Users::formKogortByDateAndType($targetDate, 'target');
+
+ if (!empty($kogortPhones)) {
+ Users::saveKogort($kogortPhones, $kogortDate, $targetDate, SentKogort::KOGORT_NUMBERS['whatsapp'], true);
+ $this->stdout("Когорта на {$kogortDate} для целевой даты {$targetDate} успешно сохранена.\n", BaseConsole::FG_GREEN);
+ } else {
+ $this->stdout("Нет данных для формирования когорты для целевой даты {$targetDate}.\n", BaseConsole::FG_RED);
+ }
+ }
+
return ExitCode::OK;
}
$step3 = $messagesSettings ? $messagesSettings->day_before_step3 : 2;
for ($i = $stepsBack; $i >= 0; $i--) {
- $dateToProcess = date('Y-m-d', strtotime("-$i days", strtotime($currentDate)));
- $startDate = date('Y-m-d', strtotime("+$step3 days", strtotime($dateToProcess)));
+ $kogortDate = date('Y-m-d', strtotime("-$i days", strtotime($currentDate)));
+ $targetDate = date('Y-m-d', strtotime("+$step3 days", strtotime($kogortDate)));
- $kogortPhones = Users::formKogortByDateAndType($startDate, 'call');
+ $kogortPhones = Users::formKogortByDateAndType($targetDate, 'call');
if (!empty($kogortPhones)) {
- Users::saveKogort($kogortPhones, $startDate, SentKogort::KOGORT_NUMBERS['call']);
+ Users::saveKogort($kogortPhones, $kogortDate, $targetDate, SentKogort::KOGORT_NUMBERS['call']);
$this->stdout(
- "Ð\9aогоÑ\80Ñ\82а длÑ\8f Ð\97вонка на даннÑ\83Ñ\8e даÑ\82Ñ\83 {$startDate} Ñ\83Ñ\81пеÑ\88но Ñ\81оздана.\n",
+ "Ð\9aогоÑ\80Ñ\82а звонка на {$kogortDate} длÑ\8f Ñ\86елевой даÑ\82Ñ\8b {$targetDate} Ñ\83Ñ\81пеÑ\88но Ñ\81оÑ\85Ñ\80анена.\n",
BaseConsole::FG_GREEN
);
} else {
$this->stdout(
- "Ð\9dеÑ\82 даннÑ\8bÑ\85 длÑ\8f Ñ\84оÑ\80миÑ\80ованиÑ\8f когоÑ\80Ñ\82Ñ\8b длÑ\8f Ð\92аÑ\82Ñ\81апа на даÑ\82Ñ\83 {$startDate}.\n",
+ "Ð\9dеÑ\82 даннÑ\8bÑ\85 длÑ\8f Ñ\84оÑ\80миÑ\80ованиÑ\8f когоÑ\80Ñ\82Ñ\8b длÑ\8f звонка на даÑ\82Ñ\83 {$targetDate}.\n",
BaseConsole::FG_RED
);
}
}
+
+ // Генерация для будущих дат (от текущей даты на $step2 дней вперёд)
+ for ($i = 1; $i <= $step3; $i++) {
+ $kogortDate = date('Y-m-d', strtotime("+$i days", strtotime($currentDate))); // Дата когорты
+ $targetDate = date('Y-m-d', strtotime("+$step3 days", strtotime($kogortDate))); // Целевая дата
+
+ $kogortPhones = Users::formKogortByDateAndType($targetDate, 'target');
+
+ if (!empty($kogortPhones)) {
+ Users::saveKogort($kogortPhones, $kogortDate, $targetDate, SentKogort::KOGORT_NUMBERS['call'], true);
+ $this->stdout("Когорта на {$kogortDate} для целевой даты {$targetDate} успешно сохранена.\n", BaseConsole::FG_GREEN);
+ } else {
+ $this->stdout("Нет данных для формирования когорты для целевой даты {$targetDate}.\n", BaseConsole::FG_RED);
+ }
+ }
+
return ExitCode::OK;
}
* @property int $id
* @property string $phone Телефон пользователя
* @property string $kogort_date Дата когорты
+ * @property string $target_date Целевая дата
* @property int $kogort_unixtime UNIX-время когорты
* @property int $kogort_number Номер типа когорты когорты
* @property int $status Вхождение в когорту
public function rules()
{
return [
- [['phone', 'kogort_date', 'kogort_unixtime', 'kogort_number', 'created_at'], 'required'],
- [['kogort_date', 'created_at'], 'safe'],
+ [['phone', 'kogort_date', 'target_date', 'kogort_unixtime', 'kogort_number', 'created_at'], 'required'],
+ [['kogort_date', 'target_date', 'created_at'], 'safe'],
[['kogort_unixtime', 'status', 'contact', 'purchase'], 'default', 'value' => null],
[['kogort_unixtime', 'status', 'contact', 'purchase', 'kogort_number'], 'integer'],
[['phone'], 'string', 'max' => 15],
'id' => 'ID',
'phone' => 'Телефон пользователя',
'kogort_date' => 'Дата когорты',
+ 'target_date' => 'Целевая дата',
'kogort_number' => 'Номер типа когорты когорты',
'kogort_unixtime' => 'UNIX-время когорты',
'status' => 'Вхождение в когорту',
$filteredUsers = array_diff($usersArray, $phonesSent);
$kogortData = array_values($filteredUsers);
+ if (isset($messagesSettings->test_phones_active) &&
+ $messagesSettings->test_phones_active == 0 &&
+ !empty($messagesSettings->test_phones_list))
+ {
+ $testPhones = array_map('trim', explode(',', $messagesSettings->test_phones_list));
+ $kogortData = array_merge($kogortData, $testPhones);
+ }
+
if ($type === 'target') {
return $kogortData;
}
return array_diff($whatsappPhones, $excludeSalesPhone);
}
- public static function saveKogort(array $phones, string $startDate, int $kogort_number): array
+ public static function saveKogort(array $phones, string $kogortDate, string $targetDate, int $kogort_number, bool $delete = false): array
{
$data = [];
$kogortPhones = SentKogort::find()
->select('phone')
- ->where(['kogort_date' => $startDate, 'kogort_number' => $kogort_number])
+ ->where(['kogort_date' => $kogortDate, 'kogort_number' => $kogort_number])
->column();
- if ($kogortPhones) {
- SentKogort::deleteAll(['kogort_date' => $startDate, 'kogort_number' => $kogort_number]);
+ if ($kogortPhones && $delete) {
+ SentKogort::deleteAll(['kogort_date' => $kogortDate, 'kogort_number' => $kogort_number]);
$kogortPhones =[];
}
if ($phone && !in_array($phone, $kogortPhones)) {
$sentKogort = new SentKogort();
$sentKogort->phone = $phone;
- $sentKogort->kogort_date = $startDate;
- $sentKogort->kogort_unixtime = (int)strtotime($startDate . ' 00:00:00');
+ $sentKogort->kogort_date = $kogortDate;
+ $sentKogort->target_date = $targetDate;
+ $sentKogort->kogort_unixtime = (int)strtotime($kogortDate . ' 00:00:00');
$sentKogort->status = 1;
$sentKogort->kogort_number = $kogort_number;
$sentKogort->save(false);