]> gitweb.erp-flowers.ru Git - erp24_rep/yii-erp24/.git/commitdiff
Правки таблицы и расчета когорт
authorfomichev <vladimir.fomichev@erp-flowers.ru>
Sat, 28 Dec 2024 06:52:29 +0000 (09:52 +0300)
committerfomichev <vladimir.fomichev@erp-flowers.ru>
Sat, 28 Dec 2024 06:52:29 +0000 (09:52 +0300)
erp24/commands/CronController.php
erp24/controllers/UsersMessageManagementController.php
erp24/records/Users.php
erp24/views/users-message-management/view-kogort.php

index 054fe4e2aa184a3939ebb58e4a61ebd6d43d915f..f063c0119048a91ca9774f32f11c48c3e310e951 100644 (file)
@@ -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 {
index 067d690f1d2c835d57a0a59ccf9c4c9c99e087c9..bcf3b861bac1468df63af297fb5474c4e85b2e86 100644 (file)
@@ -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,
             ],
index 4936278bc5b44b5e72177f7ff70513ea3a7c5522..c460ce80e663b6a78676bcf0c048610505726733 100755 (executable)
@@ -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])
index 21dea9f80d2dd550bcbcf3e61303b39bc5771df0..55766abb6958a771fca2c83cae32143434bf6004 100644 (file)
@@ -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 == '') {
     <?= GridView::widget([
         'dataProvider' => $dataProvider,
         'columns' => $columns,
+
     ]); ?>
 
 </div>