}
$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);
- if (date('j', $time) == 1) {
+ /*if (date('j', $time) == 1) {
$startDay = 1;
$endDay = cal_days_in_month(CAL_GREGORIAN, $currentMonth, $currentYear);
} elseif (date('j', $time) == 21) {
} else {
$this->stdout("Формирование когорты в текущий день невозможно. Пропускаю.\n", BaseConsole::FG_YELLOW);
return ExitCode::UNAVAILABLE;
- }
+ }*/
- for ($day = $startDay; $day <= $endDay; $day++) {
- $currentDate = sprintf('%04d-%02d-%02d', $currentYear, $currentMonth, $day);
+ $messagesSettings = UsersMessageManagement::find()
+ ->where(['active' => 1])
+ ->one();
- /*if (
- SentKogort::find()
- ->where(['kogort_date' => $currentDate, 'kogort_number' => SentKogort::KOGORT_NUMBERS['target']])
- ->exists()
- ) {
- $this->stdout("Когорта для даты {$currentDate} уже существует. Пропускаю...\n", BaseConsole::FG_YELLOW);
- continue;
- }*/
+ $step1 = $messagesSettings ? $messagesSettings->day_before_step1 : 10;
+
+ 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)));
- $kogortPhones = Users::formKogortByDateAndType($currentDate, 'target');
+ $kogortPhones = Users::formKogortByDateAndType($startDate, 'target');
if (!empty($kogortPhones)) {
- Users::saveKogort($kogortPhones, $currentDate, SentKogort::KOGORT_NUMBERS['target']);
- $this->stdout("Когорта для даты {$currentDate} успешно сохранена.\n", BaseConsole::FG_GREEN);
+ Users::saveKogort($kogortPhones, $startDate, SentKogort::KOGORT_NUMBERS['target']);
+ $this->stdout("Когорта для даты {$startDate} успешно сохранена.\n", BaseConsole::FG_GREEN);
} else {
- $this->stdout("Нет данных для формирования когорты на дату {$currentDate}.\n", BaseConsole::FG_RED);
+ $this->stdout("Нет данных для формирования когорты на дату {$startDate}.\n", BaseConsole::FG_RED);
}
}
$usersArray = array_unique(array_merge($salesPhone, $memorableDate));
- if ($holdActive == 1) {
+ if ($hold > 0) {
$phonesSent = SentKogort::find()
->select('phone')
->where(['between', 'kogort_date',
date('Y-m-d', strtotime("$startDate -1 days"))])
->column();
} else {
- $phonesSent =[];
+ $phonesSent = [];
}
-
$filteredUsers = array_diff($usersArray, $phonesSent);
$kogortData = array_values($filteredUsers);