From 6d3feb0bb4789850701e618d87828e8f6b768c45 Mon Sep 17 00:00:00 2001 From: fomichev Date: Sat, 28 Dec 2024 09:52:29 +0300 Subject: [PATCH] =?utf8?q?=D0=9F=D1=80=D0=B0=D0=B2=D0=BA=D0=B8=20=D1=82?= =?utf8?q?=D0=B0=D0=B1=D0=BB=D0=B8=D1=86=D1=8B=20=D0=B8=20=D1=80=D0=B0?= =?utf8?q?=D1=81=D1=87=D0=B5=D1=82=D0=B0=20=D0=BA=D0=BE=D0=B3=D0=BE=D1=80?= =?utf8?q?=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- erp24/commands/CronController.php | 87 ++++++------------- .../UsersMessageManagementController.php | 12 +-- erp24/records/Users.php | 14 ++- .../users-message-management/view-kogort.php | 7 +- 4 files changed, 39 insertions(+), 81 deletions(-) diff --git a/erp24/commands/CronController.php b/erp24/commands/CronController.php index 054fe4e2..f063c011 100644 --- a/erp24/commands/CronController.php +++ b/erp24/commands/CronController.php @@ -187,6 +187,12 @@ class CronController extends Controller public function actionGenerateTargetKogorts() { + $messagesSettings = UsersMessageManagement::find()->one(); + if (empty($messagesSettings) && $messagesSettings->active == 0) { + $this->stdout("Рассылка неактивна. Генерация корорт прервана.\n", BaseConsole::FG_RED); + return ExitCode::UNAVAILABLE; + } + date_default_timezone_set('Europe/Moscow'); if ($this->time && !is_numeric($this->time)) { @@ -201,36 +207,19 @@ class CronController extends Controller $currentDay = date('j', $time); $currentDate = sprintf('%04d-%02d-%02d', $currentYear, $currentMonth, $currentDay); - /*if (date('j', $time) == 1) { - $startDay = 1; - $endDay = cal_days_in_month(CAL_GREGORIAN, $currentMonth, $currentYear); - } elseif (date('j', $time) == 21) { - $startDay = 1; - $endDay = 10; - $currentMonth = ($currentMonth == 12) ? 1 : (int)$currentMonth + 1; - $currentYear = ($currentMonth == 1) ? (int)$currentYear + 1 : $currentYear; - } else { - $this->stdout("Формирование когорты в текущий день невозможно. Пропускаю.\n", BaseConsole::FG_YELLOW); - return ExitCode::UNAVAILABLE; - }*/ - - $messagesSettings = UsersMessageManagement::find() - // ->where(['active' => 1]) - ->one(); - $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($dateToProcess, 'target'); + $kogortPhones = Users::formKogortByDateAndType($startDate, 'target'); if (!empty($kogortPhones)) { - Users::saveKogort($kogortPhones, $dateToProcess, SentKogort::KOGORT_NUMBERS['target']); - $this->stdout("Когорта для даты {$dateToProcess} успешно сохранена.\n", BaseConsole::FG_GREEN); + Users::saveKogort($kogortPhones, $startDate, SentKogort::KOGORT_NUMBERS['target']); + $this->stdout("Когорта для даты {$startDate} успешно сохранена.\n", BaseConsole::FG_GREEN); } else { - $this->stdout("Нет данных для формирования когорты на дату {$dateToProcess}.\n", BaseConsole::FG_RED); + $this->stdout("Нет данных для формирования когорты на дату {$startDate}.\n", BaseConsole::FG_RED); } } @@ -245,6 +234,11 @@ class CronController extends Controller */ public function actionGenerateWhatsappKogorts() { + $messagesSettings = UsersMessageManagement::find()->one(); + if (empty($messagesSettings) && $messagesSettings->active == 0) { + $this->stdout("Рассылка неактивна. Генерация корорт прервана.\n", BaseConsole::FG_RED); + return ExitCode::UNAVAILABLE; + } date_default_timezone_set('Europe/Moscow'); if ($this->time && !is_numeric($this->time)) { @@ -255,39 +249,23 @@ class CronController extends Controller $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(); - $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))); - /* 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($dateToProcess, 'whatsapp'); + $kogortPhones = Users::formKogortByDateAndType($startDate, 'whatsapp'); if (!empty($kogortPhones)) { - Users::saveKogort($kogortPhones, $dateToProcess, SentKogort::KOGORT_NUMBERS['whatsapp']); + Users::saveKogort($kogortPhones, $startDate, SentKogort::KOGORT_NUMBERS['whatsapp']); $this->stdout( - "Когорта для Вотсапа на дату {$dateToProcess} успешно создана.\n", + "Когорта для Вотсапа на дату {$startDate} успешно создана.\n", BaseConsole::FG_GREEN ); } else { $this->stdout( - "Нет данных для формирования когорты для Ватсапа на дату {$dateToProcess}.\n", + "Нет данных для формирования когорты для Ватсапа на дату {$startDate}.\n", BaseConsole::FG_RED ); } @@ -298,6 +276,11 @@ class CronController extends Controller public function actionGenerateCallKogorts() { + $messagesSettings = UsersMessageManagement::find()->one(); + if (empty($messagesSettings) && $messagesSettings->active == 0) { + $this->stdout("Рассылка неактивна. Генерация корорт прервана.\n", BaseConsole::FG_RED); + return ExitCode::UNAVAILABLE; + } date_default_timezone_set('Europe/Moscow'); if ($this->time && !is_numeric($this->time)) { @@ -306,34 +289,18 @@ class CronController extends Controller } $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; 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 - ); - continue; - }*/ - - $kogortPhones = Users::formKogortByDateAndType($dateToProcess, 'call'); + $kogortPhones = Users::formKogortByDateAndType($startDate, 'call'); if (!empty($kogortPhones)) { - Users::saveKogort($kogortPhones, $dateToProcess, SentKogort::KOGORT_NUMBERS['call']); + Users::saveKogort($kogortPhones, $startDate, SentKogort::KOGORT_NUMBERS['call']); $this->stdout( - "Когорта для Звонка на данную дату {$dateToProcess} успешно создана.\n", + "Когорта для Звонка на данную дату {$startDate} успешно создана.\n", BaseConsole::FG_GREEN ); } else { diff --git a/erp24/controllers/UsersMessageManagementController.php b/erp24/controllers/UsersMessageManagementController.php index 067d690f..bcf3b861 100644 --- a/erp24/controllers/UsersMessageManagementController.php +++ b/erp24/controllers/UsersMessageManagementController.php @@ -272,7 +272,6 @@ class UsersMessageManagementController extends Controller public function actionViewKogortUsers($date, $type) { - // $data = Users::getUsersListForKogort($date, $type); $dataKogort = SentKogort::find() ->where(['kogort_date' => $date, 'kogort_number' => SentKogort::KOGORT_NUMBERS[$type]]) ->select(['phone']) @@ -280,20 +279,17 @@ class UsersMessageManagementController extends Controller $data = Users::prepareDataForExport($dataKogort, $date, $type); - $messagesSettings = UsersMessageManagement::find() - // ->where(['active' => 1]) - ->one(); + $messagesSettings = UsersMessageManagement::find()->one(); $message = ''; - if($messagesSettings && $messagesSettings->{UsersMessageManagement::TYPE_MESSAGE[$type]}) { $message = $messagesSettings->replaceShortcodes( $messagesSettings->{UsersMessageManagement::TYPE_MESSAGE[$type]} ); } - - + $models = ArrayHelper::index($data, 'phone'); + // var_dump($models); die(); $dataProvider = new ArrayDataProvider([ - 'allModels' => $data, + 'allModels' => $models, 'pagination' => [ 'pageSize' => 200, ], diff --git a/erp24/records/Users.php b/erp24/records/Users.php index 4936278b..c460ce80 100755 --- a/erp24/records/Users.php +++ b/erp24/records/Users.php @@ -452,12 +452,10 @@ class Users extends \yii\db\ActiveRecord $monthDay = date('m-d', strtotime($startDate)); - $messagesSettings = UsersMessageManagement::find() - //->where(['active' => 1]) - ->one(); + $messagesSettings = UsersMessageManagement::find()->one(); - $hold = isset($messagesSettings->hold) ? $messagesSettings->hold : 10; - $holdActive = isset($messagesSettings->hold_active) ? $messagesSettings->hold_active : 1; + $hold = isset($messagesSettings->hold) ? $messagesSettings->hold : 0; + $holdActive = isset($messagesSettings->hold_active) ? $messagesSettings->hold_active : 0; $salesPhone = Sales::find() ->where(new \yii\db\Expression("TO_CHAR(date, 'MM-DD') = :monthDay", [':monthDay' => $monthDay])) @@ -479,6 +477,7 @@ class Users extends \yii\db\ActiveRecord ->where(['between', 'kogort_date', date('Y-m-d', strtotime("$startDate -$hold days")), date('Y-m-d', strtotime("$startDate -1 days"))]) + ->andWhere(['kogort_number' => SentKogort::KOGORT_NUMBERS['target']]) ->column(); } else { $phonesSent = []; @@ -501,14 +500,11 @@ class Users extends \yii\db\ActiveRecord */ private static function processWhatsappKogort(array $targetPhones, string $startDate): array { - $messagesSettings = UsersMessageManagement::find() - // ->where(['active' => 1]) - ->one(); + $messagesSettings = UsersMessageManagement::find()->one(); $step1 = $messagesSettings ? $messagesSettings->day_before_step1 : 10; $step2 = $messagesSettings ? $messagesSettings->day_before_step2 : 4; - $excludeRegistered = UsersTelegram::find() ->where(['is_blocked' => 0, 'is_registered' => 1]) ->andWhere(['phone' => $targetPhones]) diff --git a/erp24/views/users-message-management/view-kogort.php b/erp24/views/users-message-management/view-kogort.php index 21dea9f8..55766abb 100644 --- a/erp24/views/users-message-management/view-kogort.php +++ b/erp24/views/users-message-management/view-kogort.php @@ -12,9 +12,8 @@ use yii\helpers\Html; $this->title = 'Когорта пользователей'; $this->params['breadcrumbs'][] = $this->title; -$model = $dataProvider->getModels()[0] ?? null; -$attributes = $model ? array_keys($model) : []; - +$model = $dataProvider->getModels() ?? null; +$attributes = array_keys($model[$dataProvider->getKeys()[0]]) ?? []; $columns = array_map(function ($attribute) { return [ 'attribute' => $attribute, @@ -24,7 +23,6 @@ $columns = array_map(function ($attribute) { 'label' => ucfirst(str_replace('_', ' ', $attribute)), ]; }, $attributes); - array_unshift($columns, ['class' => 'yii\grid\SerialColumn']); if ($message == '') { $message = Html::a('Нет сообщения для рассылки - сформируйте ее в интерфейсе', ['index'], ['class' => 'btn btn-link']); @@ -66,6 +64,7 @@ if ($message == '') { $dataProvider, 'columns' => $columns, + ]); ?> -- 2.39.5