From 8bcac9755097ab87b85ff4418a61afc70ed9288e Mon Sep 17 00:00:00 2001 From: fomichev Date: Tue, 17 Dec 2024 13:08:37 +0300 Subject: [PATCH] =?utf8?q?=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB=20?= =?utf8?q?=D0=B2=D1=8B=D0=B2=D0=BE=D0=B4=20=D0=BA=D0=BE=D0=BB=D0=B8=D1=87?= =?utf8?q?=D0=B5=D1=81=D1=82=D0=B2=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../UsersMessageManagementController.php | 86 +++++++++++++++---- .../web/js/users-message-management/index.js | 52 ++++++++++- 2 files changed, 118 insertions(+), 20 deletions(-) diff --git a/erp24/controllers/UsersMessageManagementController.php b/erp24/controllers/UsersMessageManagementController.php index e2c96e2b..4f36ea1e 100644 --- a/erp24/controllers/UsersMessageManagementController.php +++ b/erp24/controllers/UsersMessageManagementController.php @@ -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']; + } } diff --git a/erp24/web/js/users-message-management/index.js b/erp24/web/js/users-message-management/index.js index ea886ceb..5442d72c 100644 --- a/erp24/web/js/users-message-management/index.js +++ b/erp24/web/js/users-message-management/index.js @@ -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 (); +}); -- 2.39.5