From: Aleksey Filippov Date: Wed, 11 Feb 2026 14:49:17 +0000 (+0300) Subject: [ERP-43] Сообщение напоминание, всплывающее для открытия и закрытия смены. X-Git-Url: https://gitweb.erp-flowers.ru/?a=commitdiff_plain;h=011412e09f307db04349dec2b6917a40704a783f;p=erp24_rep%2Fyii-erp24%2F.git [ERP-43] Сообщение напоминание, всплывающее для открытия и закрытия смены. --- 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