]> gitweb.erp-flowers.ru Git - erp24_rep/yii-erp24/.git/commitdiff
Формирование списка звонка
authorfomichev <vladimir.fomichev@erp-flowers.ru>
Fri, 27 Dec 2024 11:57:38 +0000 (14:57 +0300)
committerfomichev <vladimir.fomichev@erp-flowers.ru>
Fri, 27 Dec 2024 11:57:38 +0000 (14:57 +0300)
erp24/records/Users.php

index 1d9d2e3443d92046ad06f7fb16ac86df03128c94..4936278bc5b44b5e72177f7ff70513ea3a7c5522 100755 (executable)
@@ -591,37 +591,67 @@ class Users extends \yii\db\ActiveRecord
             }, $phones);
         }
 
-        $users = UsersTelegram::find()
+        $salesData = Sales::find()
+            ->select([
+                'phone',
+                'lastSaleDate' => 'MAX(date)',
+                'dealsCount' => 'COUNT(*)',
+                'totalSum' => 'SUM(summ)'
+            ])
             ->where(['phone' => $phones])
+            ->groupBy('phone')
+            ->asArray()
+            ->indexBy('phone')
+            ->all();
+
+        $memorableDates = UsersEvents::find()
+            ->select(['phone'])
+            ->where(['phone' => $phones])
+            ->distinct()
+            ->asArray()
+            ->indexBy('phone')
+            ->all();
+
+        $telegramUsers = UsersTelegram::find()
+            ->select(['phone', 'first_name', 'username'])
+            ->where(['phone' => $phones])
+            ->asArray()
+            ->indexBy('phone')
+            ->all();
+
+        $usersData = Users::find()
+            ->select(['phone', 'name'])
+            ->where(['phone' => $phones])
+            ->asArray()
+            ->indexBy('phone')
             ->all();
 
         $data = [];
-        foreach ($users as $user) {
-            $memorableDateExists = UsersEvents::find()
-                ->where(['phone' => $user['phone']])
-                ->exists() ? 1 : 0;
+        foreach ($phones as $phone) {
+            $sales = $salesData[$phone] ?? [
+                'lastSaleDate' => null,
+                'dealsCount' => 0,
+                'totalSum' => 0,
+            ];
 
-            $query = Sales::find()
-                ->select([
-                    'lastSaleDate' => 'MAX(date)',
-                    'dealsCount' => 'COUNT(*)',
-                    'totalSum' => 'SUM(summ)'
-                ])
-                ->where(['phone' => $user['phone']])
-                ->asArray()
-                ->one();
+            $lastDate = $sales['lastSaleDate'] ? date('d-m-Y', strtotime($sales['lastSaleDate'])) : 'нет данных';
+            $dealsCount = $sales['dealsCount'] ?? 0;
+            $totalSum = $sales['totalSum'] ?? 0;
+
+            $memorableDateExists = isset($memorableDates[$phone]) ? 1 : 0;
 
-            $lastDate = $query['lastSaleDate'] ? date('d-m-Y', strtotime($query['lastSaleDate'])) : 'нет данных';
-            $dealsCount = $query['dealsCount'] ?? 0;
-            $totalSum = $query['totalSum'] ?? 0;
+            $name = $telegramUsers[$phone]['first_name']
+                ?? $telegramUsers[$phone]['username']
+                ?? $usersData[$phone]['name']
+                ?? 'нет данных';
 
             $data[] = [
-                'phone' => $user['phone'],
+                'phone' => $phone,
                 'last_date' => $lastDate,
                 'deals_count' => $dealsCount,
                 'total_sum' => $totalSum,
                 'memorable_date' => $memorableDateExists,
-                'name' => $user['first_name'] ?? ($user['username'] ?? ''),
+                'name' => $name,
             ];
         }