From 011412e09f307db04349dec2b6917a40704a783f Mon Sep 17 00:00:00 2001 From: Aleksey Filippov Date: Wed, 11 Feb 2026 17:49:17 +0300 Subject: [PATCH] =?utf8?q?[ERP-43]=20=D0=A1=D0=BE=D0=BE=D0=B1=D1=89=D0=B5?= =?utf8?q?=D0=BD=D0=B8=D0=B5=20=D0=BD=D0=B0=D0=BF=D0=BE=D0=BC=D0=B8=D0=BD?= =?utf8?q?=D0=B0=D0=BD=D0=B8=D0=B5,=20=D0=B2=D1=81=D0=BF=D0=BB=D1=8B=D0=B2?= =?utf8?q?=D0=B0=D1=8E=D1=89=D0=B5=D0=B5=20=D0=B4=D0=BB=D1=8F=20=D0=BE?= =?utf8?q?=D1=82=D0=BA=D1=80=D1=8B=D1=82=D0=B8=D1=8F=20=D0=B8=20=D0=B7?= =?utf8?q?=D0=B0=D0=BA=D1=80=D1=8B=D1=82=D0=B8=D1=8F=20=D1=81=D0=BC=D0=B5?= =?utf8?q?=D0=BD=D1=8B.?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- erp24/controllers/ShiftReminderController.php | 26 +++++++++++++++ erp24/web/js/shift-reminder.js | 33 ++++++++++++++----- 2 files changed, 51 insertions(+), 8 deletions(-) diff --git a/erp24/controllers/ShiftReminderController.php b/erp24/controllers/ShiftReminderController.php index 552df8fa..6378dd4e 100644 --- a/erp24/controllers/ShiftReminderController.php +++ b/erp24/controllers/ShiftReminderController.php @@ -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'); diff --git a/erp24/web/js/shift-reminder.js b/erp24/web/js/shift-reminder.js index 7aa14d2c..d6f708f6 100644 --- a/erp24/web/js/shift-reminder.js +++ b/erp24/web/js/shift-reminder.js @@ -19,9 +19,12 @@ 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', @@ -43,6 +46,10 @@ * 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'); @@ -125,13 +132,18 @@ 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; @@ -387,14 +399,19 @@ // 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 -- 2.39.5