]> gitweb.erp-flowers.ru Git - erp24_rep/yii-erp24/.git/commitdiff
Правки по ватсапу и звонку
authorfomichev <vladimir.fomichev@erp-flowers.ru>
Thu, 26 Dec 2024 14:45:06 +0000 (17:45 +0300)
committerfomichev <vladimir.fomichev@erp-flowers.ru>
Thu, 26 Dec 2024 14:45:06 +0000 (17:45 +0300)
erp24/records/Users.php

index 5d0a0859b802f32ad060b3096b179374d0313ae6..2bd28af62988f7513c1ca3acadefa03d720622b2 100755 (executable)
@@ -506,13 +506,13 @@ class Users extends \yii\db\ActiveRecord
 
         return $type === 'whatsapp'
             ? self::processWhatsappKogort($kogortData, $startDate)
-            : self::processCallKogort($kogortData, $startDate);
+            : self::processCallKogort(self::processWhatsappKogort($kogortData, $startDate), $startDate);
     }
 
     /**
      * Обработка выборки для WhatsApp когорты
      */
-    private static function processWhatsappKogort(array $phones, string $startDate): array
+    private static function processWhatsappKogort(array $targetPhones, string $startDate): array
     {
         $messagesSettings = UsersMessageManagement::find()
             ->where(['active' => 1])
@@ -520,11 +520,14 @@ class Users extends \yii\db\ActiveRecord
 
         $step1 = $messagesSettings ? $messagesSettings->day_before_step1 : 10;
         $step2 = $messagesSettings ? $messagesSettings->day_before_step2 : 4;
-        $usersQuery = UsersTelegram::find()->andWhere(['phone' => $phones]);
-        $usersQuery->andWhere(['is_blocked' => 0]);
-        $usersQuery->andWhere(['is_registered' => 1]);
 
 
+        $excludeRegistered = UsersTelegram::find()
+            ->where(['is_blocked' => 0, 'is_registered' => 1])
+            ->distinct('phone')
+            ->select('phone')
+            ->column();
+
         $excludeSalesPhone = Sales::find()
             ->where(['>=', 'date', date('Y-m-d', strtotime("$startDate -$step1 days"))])
             ->andWhere(['<=', 'date', date('Y-m-d', strtotime("$startDate -$step2 days"))])
@@ -532,16 +535,15 @@ class Users extends \yii\db\ActiveRecord
             ->select('phone')
             ->column();
 
-        $usersQuery->andWhere(['not in', 'phone', $excludeSalesPhone])
-        ->distinct('phone')
-        ->select('phone');
-        return $usersQuery->column();
+        $whatsappPhones = array_diff($targetPhones, $excludeRegistered);
+
+        return array_diff($whatsappPhones, $excludeSalesPhone);
     }
 
     /**
      * Обработка выборки для Call когорты
      */
-    private static function processCallKogort(array $phones, string $startDate): array
+    private static function processCallKogort(array $whatsappPhones, string $startDate): array
     {
         $messagesSettings = UsersMessageManagement::find()
             ->where(['active' => 1])
@@ -550,11 +552,6 @@ class Users extends \yii\db\ActiveRecord
         $step2 = $messagesSettings ? $messagesSettings->day_before_step2 : 4;
         $step3 = $messagesSettings ? $messagesSettings->day_before_step3 : 2;
 
-        // Подзапрос базы пользователей с учетом подписки на телеграм
-        $usersQuery = UsersTelegram::find()->andWhere(['phone' => $phones]);
-        $usersQuery->andWhere(['is_blocked' => 0]);
-        $usersQuery->andWhere(['is_registered' => 1]);
-
         // Исключаем телефоны с продажами в период от 4 до 2 дней до даты
         $excludeSalesPhone = Sales::find()
             ->where(['>=', 'date', date('Y-m-d', strtotime("$startDate -$step2 days"))])
@@ -563,9 +560,8 @@ class Users extends \yii\db\ActiveRecord
             ->select('phone')
             ->column();
 
-        $usersQuery->andWhere(['not in', 'phone', $excludeSalesPhone]);
 
-        return $usersQuery->column();
+        return array_diff($whatsappPhones, $excludeSalesPhone);
     }
 
     public static function saveKogort(array $phones, string $startDate, int $kogort_number): array