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;