]> gitweb.erp-flowers.ru Git - erp24_rep/yii-erp24/.git/commitdiff
Добавил вывод количества
authorfomichev <vladimir.fomichev@erp-flowers.ru>
Tue, 17 Dec 2024 10:08:37 +0000 (13:08 +0300)
committerfomichev <vladimir.fomichev@erp-flowers.ru>
Tue, 17 Dec 2024 10:08:37 +0000 (13:08 +0300)
erp24/controllers/UsersMessageManagementController.php
erp24/web/js/users-message-management/index.js

index e2c96e2bf61ffc175a649ba2f1ad2804a12e555b..4f36ea1e7819e7c9a057c95d31802de89d1f45c8 100644 (file)
@@ -21,7 +21,8 @@ use yii_app\records\UsersMessageManagementLogs;
 
 class UsersMessageManagementController extends Controller
 {
-    public static function saveLogs($old, $new) {
+    public static function saveLogs($old, $new)
+    {
         $cnt = 0;
         foreach (array_keys($old) as $oldKey) {
             if ($new[$oldKey] != $old[$oldKey]) {
@@ -29,7 +30,7 @@ class UsersMessageManagementController extends Controller
             }
         }
         foreach (array_keys($old) as $oldKey) {
-            if ($cnt >1 && $new[$oldKey] != $old[$oldKey]) {
+            if ($cnt > 1 && $new[$oldKey] != $old[$oldKey]) {
                 $log = new UsersMessageManagementLogs;
                 $log->field_name = $oldKey;
                 $log->value_old = '' . $old[$oldKey];
@@ -49,28 +50,31 @@ class UsersMessageManagementController extends Controller
         $request = Yii::$app->request;
         $model = UsersMessageManagement::find()->one();
         $month = date('m');
-        $year =  date('Y');
+        $year = date('Y');
 
         $startDate = date('Y-m-d', strtotime("$year-$month-01"));
         $endDate = date('Y-m-t', strtotime($startDate));
 
         $dates = [];
         $currentDate = strtotime($startDate);
-
+        $types = array_keys(Users::KOGORT_TYPES);
         while ($currentDate <= strtotime($endDate)) {
             $formattedDate = date('Y-m-d', $currentDate);
             $dates[$formattedDate] = [
                 'target' => [
                     $this->generateLink($formattedDate, 'target', 'generate-excel'),
-                    $this->generateLink($formattedDate, 'target', 'view-kogort-users')
+                    $this->generateLink($formattedDate, 'target', 'view-kogort-users'),
+                   // count(Users::getUsersListForKogort($formattedDate))
                 ],
                 'whatsapp' => [
                     $this->generateLink($formattedDate, 'whatsapp', 'generate-excel'),
-                    $this->generateLink($formattedDate, 'whatsapp', 'view-kogort-users')
+                    $this->generateLink($formattedDate, 'whatsapp', 'view-kogort-users'),
+                   // count(Users::getUsersListForKogort($formattedDate, 'whatsapp'))
                 ],
                 'call' => [
                     $this->generateLink($formattedDate, 'call', 'generate-excel'),
-                    $this->generateLink($formattedDate, 'call', 'view-kogort-users')
+                    $this->generateLink($formattedDate, 'call', 'view-kogort-users'),
+                   // count(Users::getUsersListForKogort($formattedDate, 'call'))
                 ],
             ];
             $currentDate = strtotime('+1 day', $currentDate);
@@ -106,8 +110,18 @@ class UsersMessageManagementController extends Controller
 
                 return $this->redirect(Yii::$app->request->referrer);
             } else {
-                if (!empty(array_intersect_key($model->getErrors(), ['offer_1' => 1, 'offer_2' => 2, 'offer_whatsapp' => 3, 'offer_text' => 4]))) {
-                    Yii::$app->session->setFlash('error', "Перейдите на вкладку Сообщения рассылки, чтобы заполнить пустые поля");
+                if (
+                    !empty(
+                        array_intersect_key(
+                            $model->getErrors(),
+                            ['offer_1' => 1, 'offer_2' => 2, 'offer_whatsapp' => 3, 'offer_text' => 4]
+                        )
+                    )
+                ) {
+                    Yii::$app->session->setFlash(
+                        'error',
+                        "Перейдите на вкладку Сообщения рассылки, чтобы заполнить пустые поля"
+                    );
                     $tab = 2;
                 }
             }
@@ -118,7 +132,7 @@ class UsersMessageManagementController extends Controller
             'links' => $dates,
             'month' => $month,
             'year' => $year,
-             'tab' => $tab,
+            'tab' => $tab,
 
         ]);
     }
@@ -137,20 +151,24 @@ class UsersMessageManagementController extends Controller
         $dates = [];
         $currentDate = strtotime($startDate);
 
+        $types = array_keys(Users::KOGORT_TYPES);
         while ($currentDate <= strtotime($endDate)) {
             $formattedDate = date('Y-m-d', $currentDate);
             $dates[$formattedDate] = [
                 'target' => [
                     $this->generateLink($formattedDate, 'target', 'generate-excel'),
-                    $this->generateLink($formattedDate, 'target', 'view-kogort-users')
+                    $this->generateLink($formattedDate, 'target', 'view-kogort-users'),
+                   // count(Users::getUsersListForKogort($formattedDate))
                 ],
                 'whatsapp' => [
                     $this->generateLink($formattedDate, 'whatsapp', 'generate-excel'),
-                    $this->generateLink($formattedDate, 'whatsapp', 'view-kogort-users')
+                    $this->generateLink($formattedDate, 'whatsapp', 'view-kogort-users'),
+                   // count(Users::getUsersListForKogort($formattedDate, 'whatsapp'))
                 ],
                 'call' => [
                     $this->generateLink($formattedDate, 'call', 'generate-excel'),
-                    $this->generateLink($formattedDate, 'call', 'view-kogort-users')
+                    $this->generateLink($formattedDate, 'call', 'view-kogort-users'),
+                   // count(Users::getUsersListForKogort($formattedDate, 'call'))
                 ],
             ];
             $currentDate = strtotime('+1 day', $currentDate);
@@ -208,7 +226,10 @@ class UsersMessageManagementController extends Controller
             $filename = "users-{$type}-{$date}.xlsx";
             $response = Yii::$app->response;
             $response->format = \yii\web\Response::FORMAT_RAW;
-            $response->headers->set('Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
+            $response->headers->set(
+                'Content-Type',
+                'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
+            );
             $response->headers->set('Content-Disposition', "attachment; filename=\"{$filename}\"");
             $response->headers->set('Cache-Control', 'max-age=0');
             $response->headers->add('Pragma', 'public');
@@ -217,7 +238,6 @@ class UsersMessageManagementController extends Controller
             $writer = new Xlsx($spreadsheet);
             $writer->save('php://output');
             die;
-
         } catch (\Exception $e) {
             Yii::error("Excel generation error: " . $e->getMessage());
             Yii::$app->session->setFlash('error', 'Произошла ошибка при генерации Excel файла.');
@@ -257,6 +277,7 @@ class UsersMessageManagementController extends Controller
             'type' => $type,
         ]);
     }
+
     public function actionLogs()
     {
         $model = DynamicModel::validateData([
@@ -291,13 +312,17 @@ class UsersMessageManagementController extends Controller
 
         $dataProvider = new ActiveDataProvider(['query' => $query]);
 
-        $fieldNames = array_merge([null => '__Любые__'], (new UsersMessageManagement)->attributeLabels());
+        $fieldNames = array_merge([null => '__Любые__'], (new UsersMessageManagement())->attributeLabels());
 
         $adminArr = [];
         $adminArrOther = [];
         foreach (\yii_app\records\Admin::find()->with('adminGroup')->all() as $admin) {
             if ($admin->group_id > 0) {
-                $tmp = ['id' => $admin->id, 'name' => $admin->name, 'groupName' => $admin->adminGroup->name ?? "Другие"];
+                $tmp = [
+                    'id' => $admin->id,
+                    'name' => $admin->name,
+                    'groupName' => $admin->adminGroup->name ?? "Другие"
+                ];
                 if ($tmp['groupName'] == 'Другие') {
                     $adminArrOther[] = $tmp;
                 } else {
@@ -305,9 +330,34 @@ class UsersMessageManagementController extends Controller
                 }
             }
         }
-        $adminArr = ArrayHelper::merge([['id' => null, 'name' => '__Любой__', 'groupName' => '__Любой__']], $adminArr, $adminArrOther);
+        $adminArr = ArrayHelper::merge(
+            [['id' => null, 'name' => '__Любой__', 'groupName' => '__Любой__']],
+            $adminArr,
+            $adminArrOther
+        );
         $admins = ArrayHelper::map($adminArr, 'id', 'name', 'groupName');
 
         return $this->render('logs', compact('model', 'fieldNames', 'dataProvider', 'admins'));
     }
+
+
+    public function actionGetUserCount()
+    {
+        Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
+
+        $request = Yii::$app->request;
+      //  var_dump($request); die();
+        if ($request->isAjax) {
+            $date = $request->get('date');
+            $type = $request->get('type');
+
+           // var_dump($date); die();
+            if ($date && $type) {
+                $count = count(Users::getUsersListForKogort($date, $type));
+                return ['success' => true, 'count' => $count];
+            }
+        }
+
+        return ['success' => false, 'message' => 'Invalid request'];
+    }
 }
index ea886cebcccfb3f62ffd19b87d60e23aa594d149..5442d72c6865414a3ff9a365780c2887e205433c 100644 (file)
@@ -39,7 +39,48 @@ $(document).ready(() => {
     addCharCounter("#usersmessagemanagement-offer_2", 10000);
     addCharCounter("#usersmessagemanagement-offer_text", 900);
     addCharCounter("#usersmessagemanagement-offer_whatsapp", 900);
-})
+});
+
+function fetchUsersCount () {
+    const placeholders = document.querySelectorAll('.count-placeholder');
+
+    placeholders.forEach(function (el) {
+        const date = el.getAttribute('data-date');
+        const type = el.getAttribute('data-type');
+
+        console.log(date, type);
+
+        if (!date || !type) {
+            return;
+        }
+
+        const params = new URLSearchParams({ date, type });
+        const url = '/users-message-management/get-user-count?' + params.toString();
+
+        fetch(url, {
+            method: 'GET',
+            headers: {
+                //'Content-Type': 'application/json',
+                //'X-CSRF-Token': yii.getCsrfToken(),
+                'X-Requested-With': 'XMLHttpRequest'
+            },
+            // body: JSON.stringify({ date: date, type: type })
+        })
+            .then(response => response.json())
+            .then(data => {
+                console.log(data);
+                if (data.success) {
+                    el.textContent = data.count;
+                } else {
+                    el.textContent = 'Ошибка';
+                }
+            })
+            .catch(error => {
+                console.error('Ошибка при загрузке данных:', error);
+                el.textContent = 'Ошибка';
+            });
+    });
+}
 
 document.addEventListener('DOMContentLoaded', function () {
     const monthSelect = document.getElementById('month-select');
@@ -59,19 +100,26 @@ document.addEventListener('DOMContentLoaded', function () {
         fetch(url, {
             method: 'GET',
             headers: {
-                'X-Requested-With': 'XMLHttpRequest' // Указываем, что это AJAX-запрос
+                'X-Requested-With': 'XMLHttpRequest'
             },
         })
             .then(response => response.text())
             .then(html => {
                 // Обновляем таблицу с данными
                 document.querySelector('#data-table').innerHTML = html;
+                fetchUsersCount ();
             })
             .catch(error => {
                 console.error('Ошибка:', error);
             });
+
     }
 
     monthSelect.addEventListener('change', handleFormChange);
     yearSelect.addEventListener('change', handleFormChange);
 });
+
+
+document.addEventListener("DOMContentLoaded", function () {
+    fetchUsersCount ();
+});