* @var int|null Таймштамп текущего времени (принимается через параметр команды --time)
*/
public $time;
+ public $stepsBack;
public function actions()
{
return ExitCode::OK;
}
+ /**
+ * Формирование когорты WhatsApp.
+ * @param int|null $stepsBack Количество дней назад для формирования когорт.
+ * @return int
+ */
public function actionGenerateWhatsappKogorts()
{
date_default_timezone_set('Europe/Moscow');
- $currentDate = date('Y-m-d');
+ if ($this->time && !is_numeric($this->time)) {
+ $this->stdout("Некорректный формат времени\n", BaseConsole::FG_RED);
+ return ExitCode::DATAERR;
+ }
+
+ $currentDate = $this->time ? date('Y-m-d', (int)$this->time) : date('Y-m-d');
+ $stepsBack = $this->stepsBack ?? 0;
$messagesSettings = UsersMessageManagement::find()
->where(['active' => 1])
$step2 = $messagesSettings ? $messagesSettings->day_before_step2 : 4;
- $startDate = date('Y-m-d', strtotime("+$step2 days", strtotime($currentDate)));
+ 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)));
- if (
- SentKogort::find()
- ->where(['kogort_date' => $startDate, 'kogort_number' => SentKogort::KOGORT_NUMBERS['whatsapp']])
- ->exists()
- ) {
- $this->stdout(
- "Когорта для Вотсапа на данную дату {$startDate} уже существует. Пропустить...\n",
- BaseConsole::FG_YELLOW
- );
- return;
- }
+ if (
+ SentKogort::find()
+ ->where(['kogort_date' => $startDate, 'kogort_number' => SentKogort::KOGORT_NUMBERS['whatsapp']])
+ ->exists()
+ ) {
+ $this->stdout(
+ "Когорта для Вотсапа на дату {$startDate} уже существует. Пропустить...\n",
+ BaseConsole::FG_YELLOW
+ );
+ continue;
+ }
- $kogortPhones = Users::formKogortByDateAndType($startDate, 'whatsapp');
+ $kogortPhones = Users::formKogortByDateAndType($startDate, 'whatsapp');
- if (!empty($kogortPhones)) {
- Users::saveKogort($kogortPhones, $startDate, SentKogort::KOGORT_NUMBERS['whatsapp']);
- $this->stdout("Когорта для Вотсапа на данную дату {$startDate} успешно создана.\n", BaseConsole::FG_GREEN);
- } else {
- $this->stdout(
- "Нет данных для формирования когорты для Ватсапа на дату {$startDate}.\n",
- BaseConsole::FG_RED
- );
+ if (!empty($kogortPhones)) {
+ Users::saveKogort($kogortPhones, $startDate, SentKogort::KOGORT_NUMBERS['whatsapp']);
+ $this->stdout(
+ "Когорта для Вотсапа на дату {$startDate} успешно создана.\n",
+ BaseConsole::FG_GREEN
+ );
+ } else {
+ $this->stdout(
+ "Нет данных для формирования когорты для Ватсапа на дату {$startDate}.\n",
+ BaseConsole::FG_RED
+ );
+ }
}
+
+ return ExitCode::OK;
}
public function actionGenerateCallKogorts()
{
date_default_timezone_set('Europe/Moscow');
- $currentDate = date('Y-m-d');
-
+ if ($this->time && !is_numeric($this->time)) {
+ $this->stdout("Некорректный формат времени\n", BaseConsole::FG_RED);
+ return ExitCode::DATAERR;
+ }
+ $currentDate = $this->time ? date('Y-m-d', (int)$this->time) : date('Y-m-d');
+ $stepsBack = $this->stepsBack ?? 0;
$messagesSettings = UsersMessageManagement::find()
->where(['active' => 1])
->one();
$step3 = $messagesSettings ? $messagesSettings->day_before_step3 : 2;
- $startDate = date('Y-m-d', strtotime("+$step3 days", strtotime($currentDate)));
+ 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)));
- if (
- SentKogort::find()
- ->where(['kogort_date' => $startDate, 'kogort_number' => SentKogort::KOGORT_NUMBERS['call']])
- ->exists()
- ) {
- $this->stdout(
- "Когорта для Звонка на данную дату {$startDate} уже существует. Пропустить...\n",
- BaseConsole::FG_YELLOW
- );
- return;
- }
+ if (
+ SentKogort::find()
+ ->where(['kogort_date' => $startDate, 'kogort_number' => SentKogort::KOGORT_NUMBERS['call']])
+ ->exists()
+ ) {
+ $this->stdout(
+ "Когорта для Звонка на данную дату {$startDate} уже существует. Пропустить...\n",
+ BaseConsole::FG_YELLOW
+ );
+ continue;
+ }
- $kogortPhones = Users::formKogortByDateAndType($startDate, 'call');
+ $kogortPhones = Users::formKogortByDateAndType($startDate, 'call');
- if (!empty($kogortPhones)) {
- Users::saveKogort($kogortPhones, $startDate, SentKogort::KOGORT_NUMBERS['call']);
- $this->stdout("Когорта для Звонка на данную дату {$startDate} успешно создана.\n", BaseConsole::FG_GREEN);
- } else {
- $this->stdout(
- "Нет данных для формирования когорты для Ватсапа на дату {$startDate}.\n",
- BaseConsole::FG_RED
- );
+ if (!empty($kogortPhones)) {
+ Users::saveKogort($kogortPhones, $startDate, SentKogort::KOGORT_NUMBERS['call']);
+ $this->stdout(
+ "Когорта для Звонка на данную дату {$startDate} успешно создана.\n",
+ BaseConsole::FG_GREEN
+ );
+ } else {
+ $this->stdout(
+ "Нет данных для формирования когорты для Ватсапа на дату {$startDate}.\n",
+ BaseConsole::FG_RED
+ );
+ }
}
}
-
public function options($actionID)
{
$options = parent::options($actionID);
- if ($actionID === 'generate-target-kogorts') {
- $options[] = 'time';
- }
- return array_unique($options);
+ $options[] = 'time';
+ $options[] = 'stepsBack';
+
+ return $options;
}
}