From 69f2acec862da7586113489511850ae4e4b4aeb3 Mon Sep 17 00:00:00 2001 From: Ali <010109ali@gmail.com> Date: Fri, 15 May 2026 15:06:00 +0000 Subject: [PATCH] fix(e-taxes-settings): stop page freeze after reference data loading The data loading dialog was opened via frappe.msgprint, which reuses the shared frappe.msg_dialog. We then rewrote .modal-body via $.html(...) on each progress tick, destroying the DOM that frappe.show_progress also relies on. After hide(), Bootstrap left a modal-backdrop behind and the whole page became unclickable until reload. Switch to the dedicated show_loading_dialog_settings / update_loading_message_settings / hide_loading_dialog_settings dialog that already exists in this file, so msg_dialog is never touched. Co-Authored-By: Claude Opus 4.7 (1M context) --- .../e_taxes_settings/e_taxes_settings.js | 62 ++++++------------- 1 file changed, 20 insertions(+), 42 deletions(-) diff --git a/invoice_az/invoice_az/doctype/e_taxes_settings/e_taxes_settings.js b/invoice_az/invoice_az/doctype/e_taxes_settings/e_taxes_settings.js index a56e924..4906c68 100644 --- a/invoice_az/invoice_az/doctype/e_taxes_settings/e_taxes_settings.js +++ b/invoice_az/invoice_az/doctype/e_taxes_settings/e_taxes_settings.js @@ -2186,17 +2186,17 @@ function start_staged_invoice_loading(frm, values) { }; window.cancelReferenceLoading = false; - - // ВОЗВРАЩАЕМ: Модальное окно в центре экрана - const loading_dialog = frappe.msgprint({ - title: __('Loading Data'), - message: __('Fetching invoices from E-Taxes, please wait...'), - indicator: 'blue' - }); - - // Сохраняем ссылку на диалог в состоянии - loading_state.loading_dialog = loading_dialog; - + + // Используем выделенный диалог вместо frappe.msgprint, чтобы не модифицировать + // shared frappe.msg_dialog (который также используется frappe.show_progress). + // Прямая правка .modal-body у msg_dialog приводила к "залипшему" backdrop + // после завершения загрузки и блокировала всю страницу. + show_loading_dialog_settings( + __('Loading Data'), + __('Fetching invoices from E-Taxes, please wait...'), + '' + ); + // Начинаем загрузку inbox load_invoice_batch(loading_state, 'inbox', frm); } @@ -2204,10 +2204,7 @@ function start_staged_invoice_loading(frm, values) { // НОВАЯ ФУНКЦИЯ: Загрузка одной порции инвойсов function load_invoice_batch(loading_state, source, frm) { if (window.cancelReferenceLoading) { - // Закрываем диалог при отмене - if (loading_state.loading_dialog && loading_state.loading_dialog.hide) { - loading_state.loading_dialog.hide(); - } + hide_loading_dialog_settings(); frappe.show_alert({ message: __('Loading cancelled'), indicator: 'red' @@ -2229,10 +2226,7 @@ function load_invoice_batch(loading_state, source, frm) { callback: function(r) { if (!r.message || !r.message.success) { if (source === 'inbox') { - // Если inbox не удался - закрываем диалог и показываем ошибку - if (loading_state.loading_dialog && loading_state.loading_dialog.hide) { - loading_state.loading_dialog.hide(); - } + hide_loading_dialog_settings(); frappe.msgprint(__('Failed to load invoices: ') + (r.message?.message || 'Unknown error')); return; } else { @@ -2267,22 +2261,12 @@ function load_invoice_batch(loading_state, source, frm) { (source === 'outbox' && loading_state.last_update_count === 0) // Первое сообщение для outbox ); - if (should_update && loading_state.loading_dialog && loading_state.loading_dialog.$wrapper) { - const progress_text = source === 'inbox' ? + if (should_update) { + const progress_text = source === 'inbox' ? __('Finding purchase invoices: {0} found...', [loading_state.total_loaded]) : __('Finding sales invoices: {0} total found...', [loading_state.total_loaded]); - - // Пробуем обновить текст в модальном окне - try { - const $wrapper = loading_state.loading_dialog.$wrapper; - const $modal_body = $wrapper.find('.modal-body'); - if ($modal_body.length > 0) { - $modal_body.html(`

${progress_text}

`); - } - } catch (e) { - console.log('Could not update modal text:', e); - } - + + update_loading_message_settings(progress_text, ''); loading_state.last_update_count = loading_state.total_loaded; } @@ -2306,10 +2290,7 @@ function load_invoice_batch(loading_state, source, frm) { }, error: function(r) { if (source === 'inbox') { - // Закрываем диалог при ошибке - if (loading_state.loading_dialog && loading_state.loading_dialog.hide) { - loading_state.loading_dialog.hide(); - } + hide_loading_dialog_settings(); frappe.msgprint(__('Error loading invoices: ') + (r.message || 'Network error')); } else { // Ошибка outbox - продолжаем без него @@ -2324,11 +2305,8 @@ function load_invoice_batch(loading_state, source, frm) { // НОВАЯ ФУНКЦИЯ: Проверка завершения загрузки function check_loading_completion(loading_state, frm) { if (loading_state.inbox_completed && loading_state.outbox_completed) { - // ИСПРАВЛЕНО: Закрываем диалог загрузки - if (loading_state.loading_dialog && loading_state.loading_dialog.hide) { - loading_state.loading_dialog.hide(); - } - + hide_loading_dialog_settings(); + if (loading_state.all_invoices.length === 0) { frappe.msgprint(__('No invoices found for the selected period.')); return;