]> gitweb.erp-flowers.ru Git - erp24_rep/yii-erp24/.git/commitdiff
[ERP-43] Сообщение напоминание, всплывающее для открытия и закрытия смены.
authorAleksey Filippov <Aleksey.Filippov@erp-flowers.ru>
Wed, 11 Feb 2026 14:49:17 +0000 (17:49 +0300)
committerAleksey Filippov <Aleksey.Filippov@erp-flowers.ru>
Wed, 11 Feb 2026 14:49:17 +0000 (17:49 +0300)
erp24/controllers/ShiftReminderController.php
erp24/web/js/shift-reminder.js

index 552df8fa1bf7f3fbb0558ecb1cac11cc1200b362..6378dd4e86f70e64a130f28393c2f62a2d415f5b 100644 (file)
@@ -157,6 +157,20 @@ class ShiftReminderController extends Controller
             $request = Yii::$app->request;
             $userId = Yii::$app->user->id;
 
+            // Тестовый контур: ?test_shift_reminder=1 на странице → test_mode=1 в POST
+            // Активен только в dev-окружении, обходит все проверки
+            if (YII_ENV_DEV && $request->post('test_mode') === '1') {
+                Yii::info("TEST MODE: Force showing reminder for user {$userId}", 'shift-reminder');
+                return [
+                    'success' => true,
+                    'show_reminder' => true,
+                    'reminder_key' => 'day_shift',
+                    'message' => 'ТЕСТОВОЕ НАПОМИНАНИЕ: Пожалуйста, откройте/закройте смену.',
+                    'reference_date' => date('Y-m-d'),
+                    'test_mode' => true,
+                ];
+            }
+
             // Получаем reminder_key из запроса или используем дефолтное значение
             $reminderKey = $request->post('reminder_key', 'day_shift');
 
@@ -277,6 +291,18 @@ class ShiftReminderController extends Controller
             $request = Yii::$app->request;
             $userId = Yii::$app->user->id;
 
+            // Тестовый контур: в test mode подтверждение просто закрывает окно
+            if (YII_ENV_DEV && $request->post('test_mode') === '1') {
+                Yii::info("TEST MODE: Confirm for user {$userId}", 'shift-reminder');
+                return [
+                    'success' => true,
+                    'message' => 'Test reminder confirmed.',
+                    'reference_date' => date('Y-m-d'),
+                    'next_check_at' => time() + 30,
+                    'test_mode' => true,
+                ];
+            }
+
             // Получаем reminder_key из запроса
             $reminderKey = $request->post('reminder_key');
 
index 7aa14d2cd5e0dcbb8cc9e6803f5f918281eb54a6..d6f708f6325ae381309ac85b02eb43e347f4e07f 100644 (file)
         console.error('ShiftReminder: CSRF tokens not found in meta tags. AJAX requests will fail.');
     }
 
+    // Test mode: activated via ?test_shift_reminder=1 in URL (YII_ENV_DEV only)
+    const testMode = (new URLSearchParams(window.location.search)).get('test_shift_reminder') === '1';
+
     // Configuration
     const CONFIG = {
-        pollInterval: 30000, // 30 seconds
+        pollInterval: testMode ? 5000 : 30000, // 5s in test mode, 30s normal
         maxPollInterval: 240000, // 4 minutes (for exponential backoff)
         retryIntervals: [30000, 60000, 120000, 240000], // Exponential backoff
         localStorageKey: 'shift_reminder_shown',
      * Initialize the shift reminder system
      */
     function init() {
+        if (testMode) {
+            console.info('ShiftReminder: TEST MODE active (?test_shift_reminder=1)');
+        }
+
         // Initialize BroadcastChannel for multi-tab coordination
         if (typeof BroadcastChannel !== 'undefined') {
             state.bcChannel = new BroadcastChannel('shift_reminder_channel');
             return;
         }
 
+        var postData = {
+            [csrfParam]: csrfToken
+        };
+        if (testMode) {
+            postData.test_mode = '1';
+        }
+
         $.ajax({
             url: '/shift-reminder/check',
             type: 'POST',
             dataType: 'json',
-            data: {
-                [csrfParam]: csrfToken
-            },
+            data: postData,
             success: function(response) {
                 // Reset retry count on successful request
                 state.retryCount = 0;
         // Disable button to prevent double-clicks
         $('#shift-reminder-confirm-btn').prop('disabled', true).text('Подтверждение...');
 
+        var confirmData = {
+            reminder_key: reminderKey,
+            [csrfParam]: csrfToken
+        };
+        if (testMode) {
+            confirmData.test_mode = '1';
+        }
+
         $.ajax({
             url: '/shift-reminder/confirm',
             type: 'POST',
             dataType: 'json',
-            data: {
-                reminder_key: reminderKey,
-                [csrfParam]: csrfToken
-            },
+            data: confirmData,
             success: function(response) {
                 if (response.success) {
                     // Store confirmation in localStorage for multi-tab coordination