]> gitweb.erp-flowers.ru Git - erp24_rep/yii-erp24/.git/commitdiff
Заполнение таблицы
authorfomichev <vladimir.fomichev@erp-flowers.ru>
Fri, 20 Dec 2024 15:09:01 +0000 (18:09 +0300)
committerfomichev <vladimir.fomichev@erp-flowers.ru>
Fri, 20 Dec 2024 15:09:01 +0000 (18:09 +0300)
erp24/migrations/m241220_131428_create_sent_kogort_table.php
erp24/records/Users.php

index 80fb59dcfb4b14b26bac474e1462e6236b35cc54..11c8c17e5fbd7c7462735a96f98f447bffd670fe 100644 (file)
@@ -24,7 +24,7 @@ class m241220_131428_create_sent_kogort_table extends Migration
                 'status' => $this->tinyInteger(1)->notNull()->defaultValue(1)->comment('Вхождение в когорту'),
                 'contact' => $this->tinyInteger(1)->notNull()->defaultValue(0)->comment('Контакт с клиентом'),
                 'purchase' => $this->tinyInteger(1)->notNull()->defaultValue(0)->comment('Покупка'),
-                'created_at' => $this->dateTime()->notNull()->comment('Дата создания записи'),
+                'created_at' => $this->dateTime()->notNull()->defaultExpression('CURRENT_TIMESTAMP')->comment('Дата создания записи'),
             ]);
         }
     }
index 91f780e2c8e43cca1fbf216cb9a2e43717023314..182120beb4dd1fe496646a582150bdb33ac2ea19 100755 (executable)
@@ -301,6 +301,14 @@ class Users extends \yii\db\ActiveRecord
         $startDate = $startDate ?? date('Y-m-d');
         $monthDay = date('m-d', strtotime($startDate));
 
+        $messagesSettings = UsersMessageManagement::find()
+            ->where(['active' => 1])
+            ->one();
+
+        $step1 = $messagesSettings ? $messagesSettings->day_before_step1 : 10;
+        $step2 = $messagesSettings ? $messagesSettings->day_before_step2 : 4;
+        $step3 = $messagesSettings ? $messagesSettings->day_before_step3 : 2;
+
         $salesPhone = Sales::find()
             ->where(new \yii\db\Expression("TO_CHAR(date, 'MM-DD') = :monthDay", [':monthDay' => $monthDay]))
             //->andWhere(new \yii\db\Expression("date <= NOW()"))
@@ -315,32 +323,44 @@ class Users extends \yii\db\ActiveRecord
             ->column();
 
         $usersArray = array_unique(array_merge($salesPhone, $memorableDate));
+        //TODO: Проверка что он уже участвовал в когорте раннее
+        $phonesSent = SentKogort::find()
+            ->select('phone')
+            ->where(['between', 'kogort_date', date('Y-m-d', strtotime("$startDate -$step1 days")), date('Y-m-d', strtotime("$startDate -1 days"))])
+            ->column();
+
+        $filteredUsers = array_diff($usersArray, $phonesSent);
+        $kogortData = array_values($filteredUsers);
+
         $data = [];
         if ($type === 'target') {
-            //TODO: Проверка что он уже участвовал в когорте раннее
-
-            foreach ($usersArray as $phone) {
-                $userPhone = $phone;
-                $userData = [
-                    'phone' => $userPhone,
-                ];
-                $data[] = $userData;
+            $kogortPhones = SentKogort::find()
+                ->select('phone')
+                ->where(['kogort_date' => $startDate])
+                ->column();
+            foreach ($kogortData as $phone) {
+                if($phone) {
+                    if (!in_array($phone, $kogortPhones) ) {
+                        $sentKogort = new SentKogort;
+                        $sentKogort->phone = $phone;
+                        $sentKogort->kogort_date = $startDate;
+                        $sentKogort->kogort_unixtime = (int)strtotime($startDate . ' 00:00:00');
+                        $sentKogort->status = 1;
+                        $sentKogort->save(false);
+                    }
+
+                    $userData = [
+                        'phone' => $phone,
+                    ];
+                    $data[] = $userData;
+                }
             }
             return $data;
         }
 
-
+// Выборка по пользователям  - проверка на подписку
         $query = Users::find()
-            //          ->andWhere() //заглушка на проверку что он уже участвовал в
-            ->andWhere(['phone' => $usersArray]);
-
-        $messagesSettings = UsersMessageManagement::find()
-            ->where(['active' => 1])
-            ->one();
-
-        $step1 = $messagesSettings ? $messagesSettings->day_before_step1 : 10;
-        $step2 = $messagesSettings ? $messagesSettings->day_before_step2 : 4;
-        $step3 = $messagesSettings ? $messagesSettings->day_before_step3 : 2;
+            ->andWhere(['phone' => $kogortData]);
 
         if ($type === 'whatsapp') {
             $excludeSalesPhone = Sales::find()