From 9b6b746793db089c820a25651aa12ad2092008c2 Mon Sep 17 00:00:00 2001 From: Ali <010109ali@gmail.com> Date: Wed, 10 Jun 2026 17:52:03 +0000 Subject: [PATCH] fix(e-taxes): stop Loading Data spinner sticking over progress bar; surface list load buttons; client + send_sales_api updates; az locale Co-Authored-By: Claude Opus 4.8 (1M context) --- invoice_az/client/e_taxes_customers_list.js | 23 ++- invoice_az/client/e_taxes_items_list.js | 18 +- invoice_az/client/e_taxes_suppliers_list.js | 23 ++- invoice_az/client/e_taxes_unit_list.js | 22 ++- invoice_az/client/journal_entry.js | 6 +- invoice_az/client/purchase_invoice.js | 12 +- invoice_az/client/purchase_order.js | 6 +- invoice_az/client/sales_invoice.js | 7 +- invoice_az/client/sales_order.js | 6 +- .../e_taxes_settings/e_taxes_settings.js | 24 ++- invoice_az/locale/az.po | 162 +++++++++--------- invoice_az/send_sales_api.py | 4 +- 12 files changed, 184 insertions(+), 129 deletions(-) diff --git a/invoice_az/client/e_taxes_customers_list.js b/invoice_az/client/e_taxes_customers_list.js index 0e18762..d788f92 100644 --- a/invoice_az/client/e_taxes_customers_list.js +++ b/invoice_az/client/e_taxes_customers_list.js @@ -19,7 +19,11 @@ frappe.listview_settings['E-Taxes Customers'] = { check_and_process_token_customers(function() { show_invoice_filter_dialog_customers(); }); - }); + }, __('E-Taxes')); + + listview.page.add_inner_button(__('Open Settings'), function() { + frappe.set_route('Form', 'E-Taxes Settings'); + }, __('E-Taxes')); } }; @@ -818,14 +822,15 @@ function process_invoices_for_customers_with_progress(invoices, token, processed // Если все инвойсы обработаны if (currentIndex >= invoices.length) { cleanup_customers_loading_state(); - - // Показываем итоговый результат - frappe.msgprint({ - title: __('Customers Loaded Successfully'), - indicator: 'green', - message: __('Created {0} customers and {1} suppliers. Total invoices processed: {2}', - [processedCount, 0, invoices.length]) // suppliers считается на сервере - }); + + // Показываем итоговый результат через тост (не msgprint): frappe.show_progress + // и frappe.msgprint — два пересекающихся Bootstrap-модала; показ msgprint сразу + // после hide_progress оставляет висящий .modal-backdrop и блокирует страницу. + frappe.show_alert({ + message: __('Created {0} customers and {1} suppliers. Total invoices processed: {2}', + [processedCount, 0, invoices.length]), // suppliers считается на сервере + indicator: 'green' + }, 10); // ИСПРАВЛЕНО: Обновляем список с задержкой для уверенности в очистке состояния setTimeout(function() { diff --git a/invoice_az/client/e_taxes_items_list.js b/invoice_az/client/e_taxes_items_list.js index abfa826..4c88784 100644 --- a/invoice_az/client/e_taxes_items_list.js +++ b/invoice_az/client/e_taxes_items_list.js @@ -18,7 +18,11 @@ frappe.listview_settings['E-Taxes Item'] = { check_and_process_token_items(function() { show_items_filter_dialog(); }); - }); + }, __('E-Taxes')); + + listview.page.add_inner_button(__('Open Settings'), function() { + frappe.set_route('Form', 'E-Taxes Settings'); + }, __('E-Taxes')); } }; @@ -860,11 +864,13 @@ function process_invoices_for_items(invoices, token, accumulated_data, current_i message += __(' Updated {0} existing items with new source information.', [accumulated_data.updated_count]); } - frappe.msgprint({ - title: __('Items Loaded Successfully'), - indicator: 'green', - message: message - }); + // Показываем итоговый результат через тост (не msgprint): frappe.show_progress + // и frappe.msgprint — два пересекающихся Bootstrap-модала; показ msgprint сразу + // после hide_progress оставляет висящий .modal-backdrop и блокирует страницу. + frappe.show_alert({ + message: message, + indicator: 'green' + }, 10); // ИСПРАВЛЕНО: Refresh list с задержкой для уверенности в очистке состояния setTimeout(function() { diff --git a/invoice_az/client/e_taxes_suppliers_list.js b/invoice_az/client/e_taxes_suppliers_list.js index 35c7f25..da725d4 100644 --- a/invoice_az/client/e_taxes_suppliers_list.js +++ b/invoice_az/client/e_taxes_suppliers_list.js @@ -19,7 +19,11 @@ frappe.listview_settings['E-Taxes Suppliers'] = { check_and_process_token_suppliers(function() { show_invoice_filter_dialog_suppliers(); }); - }); + }, __('E-Taxes')); + + listview.page.add_inner_button(__('Open Settings'), function() { + frappe.set_route('Form', 'E-Taxes Settings'); + }, __('E-Taxes')); } }; @@ -818,14 +822,15 @@ function process_invoices_for_suppliers_with_progress(invoices, token, processed // Если все инвойсы обработаны if (currentIndex >= invoices.length) { cleanup_suppliers_loading_state(); - - // Показываем итоговый результат - frappe.msgprint({ - title: __('Suppliers Loaded Successfully'), - indicator: 'green', - message: __('Created {0} suppliers and {1} customers. Total invoices processed: {2}', - [processedCount, 0, invoices.length]) // customers считается на сервере - }); + + // Показываем итоговый результат через тост (не msgprint): frappe.show_progress + // и frappe.msgprint — два пересекающихся Bootstrap-модала; показ msgprint сразу + // после hide_progress оставляет висящий .modal-backdrop и блокирует страницу. + frappe.show_alert({ + message: __('Created {0} suppliers and {1} customers. Total invoices processed: {2}', + [processedCount, 0, invoices.length]), // customers считается на сервере + indicator: 'green' + }, 10); // ИСПРАВЛЕНО: Обновляем список с задержкой для уверенности в очистке состояния setTimeout(function() { diff --git a/invoice_az/client/e_taxes_unit_list.js b/invoice_az/client/e_taxes_unit_list.js index 6a77ab2..ce374d4 100644 --- a/invoice_az/client/e_taxes_unit_list.js +++ b/invoice_az/client/e_taxes_unit_list.js @@ -18,7 +18,11 @@ frappe.listview_settings['E-Taxes Unit'] = { check_and_process_token_units(function() { show_units_filter_dialog(); }); - }); + }, __('E-Taxes')); + + listview.page.add_inner_button(__('Open Settings'), function() { + frappe.set_route('Form', 'E-Taxes Settings'); + }, __('E-Taxes')); } }; @@ -797,13 +801,15 @@ function process_invoices_for_units(invoices, token, accumulated_data, current_i const outboxText = accumulated_data.outbox_count ? __(' and {0} sales invoices', [accumulated_data.outbox_count]) : ''; - frappe.msgprint({ - title: __('Units Loaded Successfully'), - indicator: 'green', - message: __('Created {0} unique units. Skipped {1} duplicates. Total invoices processed: {2}{3}{4}', - [accumulated_data.created_count, accumulated_data.skipped_count, - accumulated_data.total_invoices, inboxText, outboxText]) - }); + // Показываем итоговый результат через тост (не msgprint): frappe.show_progress + // и frappe.msgprint — два пересекающихся Bootstrap-модала; показ msgprint сразу + // после hide_progress оставляет висящий .modal-backdrop и блокирует страницу. + frappe.show_alert({ + message: __('Created {0} unique units. Skipped {1} duplicates. Total invoices processed: {2}{3}{4}', + [accumulated_data.created_count, accumulated_data.skipped_count, + accumulated_data.total_invoices, inboxText, outboxText]), + indicator: 'green' + }, 10); // Refresh list if (cur_list) { diff --git a/invoice_az/client/journal_entry.js b/invoice_az/client/journal_entry.js index dba0589..49a94a1 100644 --- a/invoice_az/client/journal_entry.js +++ b/invoice_az/client/journal_entry.js @@ -1516,7 +1516,11 @@ frappe.listview_settings['Journal Entry'] = { onload: function(listview) { listview.page.add_inner_button(__('Import VAT Operations from E-Taxes'), function() { VATETaxes.import.showDialog(); - }); + }, __('E-Taxes')); + + listview.page.add_inner_button(__('Open Settings'), function() { + frappe.set_route('Form', 'E-Taxes Settings'); + }, __('E-Taxes')); listview.refresh(); } diff --git a/invoice_az/client/purchase_invoice.js b/invoice_az/client/purchase_invoice.js index 9e88ef8..9bb01dc 100644 --- a/invoice_az/client/purchase_invoice.js +++ b/invoice_az/client/purchase_invoice.js @@ -756,11 +756,15 @@ function add_purchase_act_buttons(frm) { return; } - // Status: Created, not signed - show sign button + // Status: Created, not signed if (frm.doc.etaxes_purchase_send_status === 'Created, not signed') { - frm.add_custom_button(__('Sign Act with ASAN Imza'), function() { - sign_purchase_act(frm); - }, __('E-Taxes Purchase Act')); + // TEMPORARILY DISABLED: signing uses the SALES endpoint + // (/invoice/sign/withAsanImza), which is wrong for purchase acts. + // Acts require a different endpoint and payload. Keep act as draft + // only until the correct act-signing endpoint is implemented. + // frm.add_custom_button(__('Sign Act with ASAN Imza'), function() { + // sign_purchase_act(frm); + // }, __('E-Taxes Purchase Act')); frm.add_custom_button(__('Cancel Act on E-Taxes'), function() { cancel_act_on_etaxes(frm); diff --git a/invoice_az/client/purchase_order.js b/invoice_az/client/purchase_order.js index 86f71c7..2313689 100644 --- a/invoice_az/client/purchase_order.js +++ b/invoice_az/client/purchase_order.js @@ -1549,7 +1549,11 @@ frappe.listview_settings['Purchase Order'] = { onload: function(listview) { listview.page.add_inner_button(__('Import from E-Taxes'), function() { ETaxes.import.showDialog(); - }); + }, __('E-Taxes')); + + listview.page.add_inner_button(__('Open Settings'), function() { + frappe.set_route('Form', 'E-Taxes Settings'); + }, __('E-Taxes')); listview.columns.push({ type: 'Check', diff --git a/invoice_az/client/sales_invoice.js b/invoice_az/client/sales_invoice.js index 38e2cf9..bdfad73 100644 --- a/invoice_az/client/sales_invoice.js +++ b/invoice_az/client/sales_invoice.js @@ -1584,10 +1584,11 @@ function add_etaxes_buttons(frm) { if (frm.doc.etaxes_send_status === 'Created, not signed') { frm.page.set_indicator(__('Draft Created'), 'orange'); + // TEMPORARILY DISABLED: keep document as draft only for now. // Add button to sign document - frm.add_custom_button(__('Sign Document'), function() { - sign_document(frm); - }, __('E-Taxes')); + // frm.add_custom_button(__('Sign Document'), function() { + // sign_document(frm); + // }, __('E-Taxes')); // Add button to view details frm.add_custom_button(__('View Details'), function() { diff --git a/invoice_az/client/sales_order.js b/invoice_az/client/sales_order.js index 76e8673..7f36627 100644 --- a/invoice_az/client/sales_order.js +++ b/invoice_az/client/sales_order.js @@ -1602,7 +1602,11 @@ frappe.listview_settings['Sales Order'] = { // ДОБАВЛЕНО: кнопка импорта из E-Taxes для Sales Order listview.page.add_inner_button(__('Import from E-Taxes'), function() { SalesETaxes.import.showDialog(); - }); + }, __('E-Taxes')); + + listview.page.add_inner_button(__('Open Settings'), function() { + frappe.set_route('Form', 'E-Taxes Settings'); + }, __('E-Taxes')); listview.columns.push({ type: 'Check', 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 4906c68..07ee073 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 @@ -987,9 +987,14 @@ function process_invoices_for_reference_data(invoices, token, accumulated_data, // Инициализация при первом вызове if (current_index === 0) { window.cancelReferenceLoading = false; - + + // Спиннер "Loading Data" (фаза вытягивания инвойсов) больше не нужен — убираем + // его принудительно ровно в момент появления прогресс-бара, иначе он залипает + // поверх и бесконечно крутится (Bootstrap не всегда доигрывает fade-анимацию). + hide_loading_dialog_settings(); + // Показываем прогресс-бар для обработки инвойсов - frappe.show_progress(__('Processing Reference Data'), 0, invoices.length, + frappe.show_progress(__('Processing Reference Data'), 0, invoices.length, __('Processing {0} invoices...', [invoices.length]), null, true); } @@ -1988,11 +1993,21 @@ function hide_loading_dialog_settings() { if (loading_dialog_settings) { try { loading_dialog_settings.hide(); + // Принудительно сносим DOM модалки: если Bootstrap не доиграл fade + // (фоновая вкладка, прерванный transitionend), .hide() оставляет окно + // висеть — спиннер «крутится» поверх прогресс-бара. + if (loading_dialog_settings.$wrapper) { + loading_dialog_settings.$wrapper.remove(); + } } catch (e) { console.error('Error hiding loading dialog:', e); } loading_dialog_settings = null; } + // Подчищаем залипшую подложку. Безопасно: вызывается до frappe.show_progress, + // который вешает свою backdrop заново. + $('.modal-backdrop').remove(); + $('body').removeClass('modal-open').css('padding-right', ''); } function poll_authentication_status_settings(asan_login_name, bearer_token, callback) { @@ -2318,7 +2333,8 @@ function check_loading_completion(loading_state, frm) { indicator: 'green' }, 3); // Показываем на 3 секунды - // Небольшая задержка и начинаем обработку + // Небольшая задержка и начинаем обработку (прогресс-бар появляется быстро, + // спиннер "Loading Data" к этому моменту уже снят). setTimeout(() => { process_invoices_for_reference_data(loading_state.all_invoices, loading_state.token, { items_created: 0, @@ -2336,6 +2352,6 @@ function check_loading_completion(loading_state, frm) { load_customers: loading_state.load_customers, load_suppliers: loading_state.load_suppliers }); - }, 2000); + }, 400); } } diff --git a/invoice_az/locale/az.po b/invoice_az/locale/az.po index 6ebf108..11a437a 100644 --- a/invoice_az/locale/az.po +++ b/invoice_az/locale/az.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: Invoice Az VERSION\n" "Report-Msgid-Bugs-To: info@jeyerp.az\n" "POT-Creation-Date: 2026-04-24 18:12+0000\n" -"PO-Revision-Date: 2026-04-24 18:12+0000\n" +"PO-Revision-Date: 2026-05-25 02:44+0000\n" "Last-Translator: \n" "Language-Team: Azerbaijani\n" "Language: az\n" @@ -17,6 +17,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "Generated-By: Babel 2.16.0\n" +"X-Generator: Poedit 3.4.2\n" #. AI-generated #: invoice_az/client/e_taxes_items_list.js:860 @@ -177,8 +178,8 @@ msgid "" "action is irreversible. Are you sure?

" msgstr "" "
XƏBƏRDARLIQ! Bu əməliyyat " -"bütün uyğunlaşdırılmamış elementlər üçün sistemdə yeni müştərilər " -"yaradacaq!

Bu əməliyyat geri qaytarıla bilməz. Əminsiniz?

" +"bütün uyğunlaşdırılmamış elementlər üçün sistemdə yeni müştərilər yaradacaq!" +"

Bu əməliyyat geri qaytarıla bilməz. Əminsiniz?

" #. AI-generated #: invoice_az/invoice_az/doctype/e_taxes_settings/e_taxes_settings.js:122 @@ -188,8 +189,8 @@ msgid "" "action is irreversible. Are you sure?

" msgstr "" "
XƏBƏRDARLIQ! Bu əməliyyat " -"bütün xəritələnməmiş elementlər üçün sistemdə yeni maddələr " -"yaradacaq!

Bu əməliyyat geri qaytarıla bilməz. Əminsiniz?

" +"bütün xəritələnməmiş elementlər üçün sistemdə yeni maddələr yaradacaq!

Bu əməliyyat geri qaytarıla bilməz. Əminsiniz?

" #. AI-generated #: invoice_az/invoice_az/doctype/e_taxes_settings/e_taxes_settings.js:534 @@ -228,8 +229,8 @@ msgstr "" #. AI-generated #: invoice_az/client/sales_invoice.js:1631 msgid "" -"Warning: This will permanently remove the invoice from " -"E-Taxes system." +"Warning: This will permanently remove the invoice from E-" +"Taxes system." msgstr "" "Xəbərdarlıq: Bu, qaiməni E-Taxes sistemindən həmişəlik " "siləcək." @@ -373,22 +374,22 @@ msgstr "Fəaliyyət Adı Təfərrüatı" #. AI-generated #: invoice_az/invoice_az/doctype/e_taxes_settings/e_taxes_settings.js:383 msgid "Add unmapped customers" -msgstr "Xəritələnməmiş müştəriləri əlavə et" +msgstr "Uyğunlaşdırılmamış müştəriləri əlavə et" #. AI-generated #: invoice_az/invoice_az/doctype/e_taxes_settings/e_taxes_settings.js:152 msgid "Add unmapped items" -msgstr "Xəritələnməmiş elementləri əlavə et" +msgstr "Uyğunlaşdırılmamış elementləri əlavə et" #. AI-generated #: invoice_az/invoice_az/doctype/e_taxes_settings/e_taxes_settings.js:564 msgid "Add unmapped suppliers" -msgstr "Xəritələnməmiş təchizatçıları əlavə edin" +msgstr "Uyğunlaşdırılmamış təchizatçıları əlavə edin" #. AI-generated #: invoice_az/invoice_az/doctype/e_taxes_settings/e_taxes_settings.js:739 msgid "Add unmapped units" -msgstr "Xəritələnməmiş vahidləri əlavə et" +msgstr "Uyğunlaşdırılmamış vahidləri əlavə et" #. AI-generated #: invoice_az/invoice_az/doctype/e_taxes_settings/e_taxes_settings.js:431 @@ -398,7 +399,7 @@ msgstr "{0} uyğunlaşdırılmamış müştəri əlavə edildi" #. AI-generated #: invoice_az/invoice_az/doctype/e_taxes_settings/e_taxes_settings.js:243 msgid "Added {0} unmapped items" -msgstr "{0} xəritələnməmiş element əlavə edildi" +msgstr "{0} uyğunlaşdırılmamış element əlavə edildi" #. AI-generated #: invoice_az/invoice_az/doctype/e_taxes_settings/e_taxes_settings.js:609 @@ -549,24 +550,24 @@ msgstr "Tətbiq et" msgid "" "Are you really sure you want to create new UOM units? This cannot be undone." msgstr "" -"Yeni UOM vahidləri yaratmaq istədiyinizə əminsiniz? Bu əməliyyat geri " -"qaytarıla bilməz." +"Yeni ölçü vahidləri yaratmaq istədiyinizdən əminsiniz? Bu əməliyyatı geri " +"almaq mümkün deyil." #. AI-generated #: invoice_az/invoice_az/doctype/e_taxes_settings/e_taxes_settings.js:356 msgid "" "Are you really sure you want to create new customers? This cannot be undone." msgstr "" -"Yeni müştərilər yaratmaq istədiyinizə əminsiniz? Bu əməliyyat geri qaytarıla" -" bilməz." +"Yeni müştərilər yaratmaq istədiyinizə əminsiniz? Bu əməliyyat geri " +"qaytarıla bilməz." #. AI-generated #: invoice_az/invoice_az/doctype/e_taxes_settings/e_taxes_settings.js:125 msgid "" "Are you really sure you want to create new items? This cannot be undone." msgstr "" -"Yeni elementlər yaratmaq istədiyinizə əminsiniz? Bu əməliyyat geri qaytarıla" -" bilməz." +"Yeni elementlər yaratmaq istədiyinizə əminsiniz? Bu əməliyyat geri " +"qaytarıla bilməz." #. AI-generated #: invoice_az/invoice_az/doctype/e_taxes_settings/e_taxes_settings.js:537 @@ -606,12 +607,12 @@ msgstr "Asan Login" #. AI-generated #: invoice_az/invoice_az/doctype/asan_login/asan_login.json msgid "Auth Status" -msgstr "Autentifikasiya Statusu" +msgstr "Təsdiqlənmə Statusu" #. AI-generated #: invoice_az/invoice_az/doctype/asan_login/asan_login.js:559 msgid "Authenticate" -msgstr "Doğrulama" +msgstr "Təsdiqlənmə" #. Option for the 'Auth Status' (Select) field in DocType 'Asan Login' #. AI-generated @@ -624,7 +625,7 @@ msgstr "Təsdiqlənmiş" #. AI-generated #: invoice_az/invoice_az/doctype/asan_login/asan_login.json msgid "Authentication" -msgstr "Autentifikasiya" +msgstr "Kimlik təsdiqi" #. AI-generated #: invoice_az/client/company.js:464 @@ -644,7 +645,7 @@ msgstr "Autentifikasiya" #: invoice_az/client/supplier.js:473 #: invoice_az/invoice_az/doctype/e_taxes_settings/e_taxes_settings.js:2120 msgid "Authentication Complete" -msgstr "Autentifikasiya Tamamlandı" +msgstr "Kimlik təsdiq Tamamlandı" #. AI-generated #: invoice_az/client/company.js:304 invoice_az/client/company.js:367 @@ -674,7 +675,7 @@ msgstr "Autentifikasiya Tamamlandı" #: invoice_az/invoice_az/doctype/e_taxes_settings/e_taxes_settings.js:1881 #: invoice_az/invoice_az/doctype/e_taxes_settings/e_taxes_settings.js:2051 msgid "Authentication Error" -msgstr "Autentifikasiya xətası" +msgstr "Kimlik təsdiq xətası" #. AI-generated #: invoice_az/client/company.js:297 @@ -701,7 +702,7 @@ msgstr "Kimlik Doğrulaması Tələb Olunur" #: invoice_az/invoice_az/doctype/asan_login/asan_login.js:225 #: invoice_az/invoice_az/doctype/asan_login/asan_login.js:676 msgid "Authentication Status" -msgstr "Autentifikasiya Statusu" +msgstr "Kimlik təsdiqi Statusu" #. AI-generated #: invoice_az/client/company.js:355 @@ -717,7 +718,7 @@ msgstr "Autentifikasiya Statusu" #: invoice_az/client/supplier.js:362 #: invoice_az/invoice_az/doctype/e_taxes_settings/e_taxes_settings.js:2033 msgid "Authentication Successful" -msgstr "Autentifikasiya uğurlu oldu" +msgstr "Kimlik təsdiqi uğurlu oldu" #. AI-generated #: invoice_az/client/company.js:327 @@ -733,7 +734,7 @@ msgstr "Autentifikasiya uğurlu oldu" #: invoice_az/client/supplier.js:334 #: invoice_az/invoice_az/doctype/e_taxes_settings/e_taxes_settings.js:2007 msgid "Authentication Timeout" -msgstr "Autentifikasiya Müddətinin Bitməsi" +msgstr "Kimlik təsdiqi Müddətinin Bitməsi" #. AI-generated #: invoice_az/client/company.js:250 @@ -753,7 +754,7 @@ msgstr "Autentifikasiya Müddətinin Bitməsi" #: invoice_az/client/supplier.js:255 #: invoice_az/invoice_az/doctype/e_taxes_settings/e_taxes_settings.js:1817 msgid "Authentication canceled. Operation cannot be completed." -msgstr "Autentifikasiya ləğv edildi. Əməliyyat tamamlana bilməz." +msgstr "Kimlik təsdiqi ləğv edildi. Əməliyyat tamamlana bilməz." #. AI-generated #: invoice_az/client/e_taxes_customers_list.js:761 @@ -765,14 +766,14 @@ msgstr "Autentifikasiya ləğv edildi. Əməliyyat tamamlana bilməz." #: invoice_az/client/e_taxes_unit_list.js:725 #: invoice_az/client/e_taxes_unit_list.js:883 msgid "Authentication cancelled" -msgstr "Autentifikasiya ləğv edildi" +msgstr "Kimlik təsdiqi ləğv edildi" #. AI-generated #: invoice_az/invoice_az/doctype/e_taxes_settings/e_taxes_settings.js:1084 msgid "Authentication expired. Please re-authenticate and try again." msgstr "" -"Autentifikasiyanın müddəti bitib. Zəhmət olmasa yenidən autentifikasiyadan " -"keçin və yenidən cəhd edin." +"Kimlik təsdiqi müddəti bitib. Zəhmət olmasa yenidən kimlik təsdiqi keçin və " +"yenidən cəhd edin." #. AI-generated #: invoice_az/client/company.js:305 @@ -788,19 +789,19 @@ msgstr "" #: invoice_az/client/supplier.js:311 #: invoice_az/invoice_az/doctype/e_taxes_settings/e_taxes_settings.js:1882 msgid "Authentication request failed" -msgstr "Autentifikasiya sorğusu uğursuz oldu" +msgstr "Kimlik təsdiq sorğusu uğursuz oldu" #. AI-generated #: invoice_az/invoice_az/doctype/asan_login/asan_login.js:58 #: invoice_az/invoice_az/doctype/asan_login/asan_login.js:657 msgid "Authentication request failed." -msgstr "Autentifikasiya sorğusu uğursuz oldu." +msgstr "Kimlik təsdiq sorğusu uğursuz oldu." #. AI-generated #: invoice_az/invoice_az/doctype/asan_login/asan_login.js:19 msgid "Authentication request sent. Please confirm on your phone." msgstr "" -"Autentifikasiya sorğusu göndərildi. Zəhmət olmasa telefonunuzda təsdiqləyin." +"Kimlik təsdiq sorğusu göndərildi. Zəhmət olmasa telefonunuzda təsdiqləyin." #. AI-generated #: invoice_az/client/journal_entry.js:961 @@ -810,8 +811,8 @@ msgid "" "Authentication token not found. Please complete the authentication process " "in E-Taxes settings." msgstr "" -"Autentifikasiya tokeni tapılmadı. Zəhmət olmasa E-Taxes parametrlərində " -"autentifikasiya prosesini tamamlayın." +"Kimlik təsdiq tokeni tapılmadı. Zəhmət olmasa E-Taxes parametrlərində " +"kimlik təsdiq prosesini tamamlayın." #. AI-generated #: invoice_az/client/journal_entry.js:1182 @@ -1078,8 +1079,8 @@ msgstr "Ləğv edilir..." #. AI-generated #: invoice_az/invoice_az/doctype/e_taxes_vat_operations/e_taxes_vat_operations.py:16 msgid "" -"Cannot delete or cancel E-Taxes VAT Operations {0} because it is linked with" -" Journal Entry {1}" +"Cannot delete or cancel E-Taxes VAT Operations {0} because it is linked " +"with Journal Entry {1}" msgstr "" "{0} E-Vergilər ƏDV Əməliyyatları silinə və ya ləğv edilə bilməz, çünki {1} " "Jurnal Qeydi ilə əlaqələndirilib" @@ -1336,7 +1337,7 @@ msgstr "Şirkət" #: invoice_az/client/supplier.js:393 #: invoice_az/invoice_az/doctype/e_taxes_settings/e_taxes_settings.js:2069 msgid "Completing Authentication" -msgstr "Autentifikasiya tamamlanır" +msgstr "Kimlik təsdiqi Tamamlanır" #. AI-generated #: invoice_az/client/employee.js:364 @@ -1844,48 +1845,48 @@ msgstr "Debet Hesabı" #. AI-generated #: invoice_az/invoice_az/doctype/e_taxes_settings/e_taxes_settings.json msgid "Default Business Partner Settings" -msgstr "Defolt Biznes Tərəfdaş Parametrləri" +msgstr "Standart Biznes Tərəfdaş Parametrləri" #. Label of the default_customer_group (Link) field in DocType 'E-Taxes #. Settings' #. AI-generated #: invoice_az/invoice_az/doctype/e_taxes_settings/e_taxes_settings.json msgid "Default Customer Group" -msgstr "Defolt Müştəri Qrupu" +msgstr "Standart Müştəri Qrupu" #. Label of the default_item_group (Link) field in DocType 'E-Taxes Settings' #. AI-generated #: invoice_az/invoice_az/doctype/e_taxes_settings/e_taxes_settings.json msgid "Default Item Group" -msgstr "Defolt Məhsul Qrupu" +msgstr "Standart Məhsul Qrupu" #. Label of the default_item_settings_section (Section Break) field in DocType #. 'E-Taxes Settings' #. AI-generated #: invoice_az/invoice_az/doctype/e_taxes_settings/e_taxes_settings.json msgid "Default Item Settings" -msgstr "Defolt Məhsul Parametrləri" +msgstr "Standart Məhsul Parametrləri" #. Label of the default_item_tax_template (Link) field in DocType 'E-Taxes #. Settings' #. AI-generated #: invoice_az/invoice_az/doctype/e_taxes_settings/e_taxes_settings.json msgid "Default Item Tax Template" -msgstr "Defolt Məhsul Vergi Şablonu" +msgstr "Standart Məhsul Vergi Şablonu" #. Label of the default_payment_terms (Link) field in DocType 'E-Taxes #. Settings' #. AI-generated #: invoice_az/invoice_az/doctype/e_taxes_settings/e_taxes_settings.json msgid "Default Payment Terms" -msgstr "Defolt Ödəniş Şərtləri" +msgstr "Standart Ödəniş Şərtləri" #. Label of the default_supplier_group (Link) field in DocType 'E-Taxes #. Settings' #. AI-generated #: invoice_az/invoice_az/doctype/e_taxes_settings/e_taxes_settings.json msgid "Default Supplier Group" -msgstr "Defolt Təchizatçı Qrupu" +msgstr "Standart Təchizatçı Qrupu" #. Label of the default_uom (Link) field in DocType 'E-Taxes Settings' #. AI-generated @@ -2023,8 +2024,8 @@ msgstr "Sənəd Növü" msgid "" "Document contains unsaved changes. Save before performing the operation?" msgstr "" -"Sənəddə yadda saxlanılmamış dəyişikliklər var. Əməliyyatı yerinə yetirməzdən" -" əvvəl yadda saxlanılsın?" +"Sənəddə yadda saxlanılmamış dəyişikliklər var. Əməliyyatı yerinə " +"yetirməzdən əvvəl yadda saxlanılsın?" #. AI-generated #: invoice_az/client/journal_entry.js:1491 @@ -2155,7 +2156,7 @@ msgstr "E-Taxes ID: {0}" #. AI-generated #: invoice_az/invoice_az/doctype/e_taxes_sales_outbox/e_taxes_sales_outbox.json msgid "E-Taxes Invoice ID" -msgstr "E-Taxes Invoice ID" +msgstr "E-Taxes Qaimə nömrəsi" #. Name of a DocType #. AI-generated @@ -2354,7 +2355,7 @@ msgstr "E-Taxes ƏDV Əməliyyatları" #: invoice_az/client/sales_invoice.js:1039 #: invoice_az/client/sales_order.js:1020 msgid "E-Taxes authentication settings not found" -msgstr "E-Taxes autentifikasiya parametrləri tapılmadı" +msgstr "E-Taxes kimlik təsdiqi parametrləri tapılmadı" #. Option for the 'E-Cash Status' (Select) field in DocType 'E-Taxes Cash #. Register' @@ -2448,19 +2449,19 @@ msgstr "Bitmə Tarixi" #. AI-generated #: invoice_az/invoice_az/doctype/testapi/testapi.js:74 msgid "Enter this code in ASAN Sign: {0}" -msgstr "Bu kodu ASAN Sign-a daxil edin: {0}" +msgstr "Bu kodu ASAN İmza-ya daxil edin: {0}" #. Label of the entity_details_oid (Data) field in DocType 'Amas Employees' #. AI-generated #: invoice_az/invoice_az/doctype/amas_employees/amas_employees.json msgid "Entity Details OID" -msgstr "Entity Details OID" +msgstr "Hüquqi Şəxs Məlumatlarının OID-i" #. Label of the entity_oid (Data) field in DocType 'Amas Employees' #. AI-generated #: invoice_az/invoice_az/doctype/amas_employees/amas_employees.json msgid "Entity OID" -msgstr "Entity OID" +msgstr "Hüquqi Şəxsin OID" #. Option for the 'ƏMAS Status' (Select) field in DocType 'Asan Login' #. AI-generated @@ -2609,7 +2610,7 @@ msgstr "Xəta mesajı" #. AI-generated #: invoice_az/invoice_az/doctype/e_taxes_settings/e_taxes_settings.js:727 msgid "Error creating UOM units" -msgstr "UOM vahidləri yaradılarkən xəta baş verdi" +msgstr "Ölçü vahidləri yaradılarkən xəta baş verdi" #. AI-generated #: invoice_az/invoice_az/doctype/e_taxes_settings/e_taxes_settings.js:371 @@ -2661,7 +2662,7 @@ msgstr "Satış qaimələri yüklənərkən xəta baş verdi" #: invoice_az/client/purchase_order.js:573 #: invoice_az/client/sales_invoice.js:592 invoice_az/client/sales_order.js:573 msgid "Error log cleared" -msgstr "Xəta jurnalı təmizləndi" +msgstr "Xəta qeydləri təmizləndi" #. AI-generated #: invoice_az/client/etaxes_common.js:807 @@ -2669,7 +2670,7 @@ msgstr "Xəta jurnalı təmizləndi" #: invoice_az/client/purchase_order.js:762 #: invoice_az/client/sales_invoice.js:781 invoice_az/client/sales_order.js:762 msgid "Error log exported successfully" -msgstr "Xəta jurnalı uğurla ixrac edildi" +msgstr "Xəta qeydi uğurla ixrac edildi" #. AI-generated #: invoice_az/invoice_az/doctype/e_taxes_settings/e_taxes_settings.js:321 @@ -2800,7 +2801,7 @@ msgstr "FIN: {0}" #. AI-generated #: invoice_az/invoice_az/doctype/e_taxes_presented_certificate/e_taxes_presented_certificate.json msgid "FK Doc OID" -msgstr "FK Doc OID" +msgstr "Əlaqəli Sənədin OID" #. Option for the 'Auth Status' (Select) field in DocType 'Asan Login' #. Option for the 'Status' (Select) field in DocType 'E-Taxes Purchase Outbox' @@ -2841,7 +2842,7 @@ msgstr "E-Taxes-də qaimə ləğv edilə bilmədi" #: invoice_az/client/e_taxes_unit_list.js:208 #: invoice_az/invoice_az/doctype/e_taxes_settings/e_taxes_settings.js:1828 msgid "Failed to check authentication status" -msgstr "Autentifikasiya statusunu yoxlamaq alınmadı" +msgstr "Kimlik təsdiqi statusunun yoxlanılması uğursuz oldu" #. AI-generated #: invoice_az/client/purchase_order.js:1079 @@ -2909,7 +2910,7 @@ msgstr "ƏMAS-dan bağlantı kəsilə bilmədi" #: invoice_az/client/purchase_order.js:768 #: invoice_az/client/sales_invoice.js:787 invoice_az/client/sales_order.js:768 msgid "Failed to export error log" -msgstr "Xəta jurnalı ixrac edilə bilmədi" +msgstr "Xəta qeyd ixrac edilə bilmədi" #. AI-generated #: invoice_az/client/supplier.js:663 @@ -2922,7 +2923,7 @@ msgstr "E-Taxes-dən təchizatçı məlumatları alına bilmədi" #: invoice_az/client/e_taxes_suppliers_list.js:883 #: invoice_az/client/e_taxes_unit_list.js:875 msgid "Failed to get authentication token" -msgstr "Autentifikasiya tokeni alınmadı" +msgstr "Kimlik təsdiq tokeni alınmadı" #. AI-generated #: invoice_az/client/company.js:434 @@ -3316,8 +3317,8 @@ msgstr "ID" #. AI-generated #: invoice_az/client/journal_entry.js:1177 msgid "" -"If checked, Journal Entries will be created in Draft status instead of being" -" submitted automatically" +"If checked, Journal Entries will be created in Draft status instead of " +"being submitted automatically" msgstr "" "Seçilərsə, Jurnal Qeydləri avtomatik təsdiqlənmək əvəzinə Qaralama " "statusunda yaradılacaq" @@ -3325,8 +3326,8 @@ msgstr "" #. AI-generated #: invoice_az/client/journal_entry.js:1184 msgid "" -"If checked, will automatically create Customer records and mappings for TINs" -" not found in the system" +"If checked, will automatically create Customer records and mappings for " +"TINs not found in the system" msgstr "" "Seçilərsə, sistemdə tapılmayan VÖEN-lər üçün Müştəri qeydləri və " "uyğunlaşdırmalar avtomatik yaradılacaq" @@ -3562,7 +3563,7 @@ msgstr "İmzalanıb" #. AI-generated #: invoice_az/invoice_az/doctype/e_taxes_item_mapping/e_taxes_item_mapping.json msgid "Is Stock Item" -msgstr "Stok Məhsuludur" +msgstr "Anbar Məhsuludur" #. Label of the is_valid (Data) field in DocType 'Amas Employees' #. AI-generated @@ -3691,7 +3692,7 @@ msgstr "İşin Başlama Tarixi" #. AI-generated #: invoice_az/invoice_az/doctype/e_taxes_vat_operations/e_taxes_vat_operations.json msgid "Journal Entry" -msgstr "Jurnal qeydi" +msgstr "Əməliyyat Qeydi" #. Label of the labour_function (Small Text) field in DocType 'Amas Employees' #. AI-generated @@ -4074,7 +4075,7 @@ msgstr "Əl ilə" #: invoice_az/invoice_az/doctype/e_taxes_suppliers/e_taxes_suppliers.json #: invoice_az/invoice_az/doctype/e_taxes_unit/e_taxes_unit.json msgid "Mapped" -msgstr "Xəritələnib" +msgstr "Əlaqələndirilmiş" #. Label of the mapped_customer (Link) field in DocType 'E-Taxes Customers' #. AI-generated @@ -4120,7 +4121,7 @@ msgstr "Uyğunlaşdırılmış ÖV" #: invoice_az/invoice_az/doctype/e_taxes_supplier_mappings/e_taxes_supplier_mappings.json #: invoice_az/invoice_az/doctype/e_taxes_unit_mapping/e_taxes_unit_mapping.json msgid "Mapping Type" -msgstr "Xəritələmə Növü" +msgstr "Əlaqələndirmə Növü" #. Label of the mappings_tab (Tab Break) field in DocType 'E-Taxes Settings' #. AI-generated @@ -5108,8 +5109,8 @@ msgid "" "Please select Act Kind (Agricultural Products Act or Metal Scrap Reception " "Act)" msgstr "" -"Zəhmət olmasa Akt Növünü seçin (Kənd Təsərrüfatı Məhsulları Aktı və ya Metal" -" Qırıntıları Qəbul Aktı)" +"Zəhmət olmasa Akt Növünü seçin (Kənd Təsərrüfatı Məhsulları Aktı və ya " +"Metal Qırıntıları Qəbul Aktı)" #. AI-generated #: invoice_az/client/purchase_invoice.js:640 @@ -6587,8 +6588,8 @@ msgid "" "This will create a draft act. You will need to sign it with ASAN Imza after " "creation." msgstr "" -"Bu, qaralama akt yaradacaq. Yaradıldıqdan sonra onu ASAN İmza ilə imzalamalı" -" olacaqsınız." +"Bu, qaralama akt yaradacaq. Yaradıldıqdan sonra onu ASAN İmza ilə " +"imzalamalı olacaqsınız." #. AI-generated #: invoice_az/client/purchase_invoice.js:880 @@ -6598,18 +6599,17 @@ msgstr "Bu, aktı yekunlaşdıracaq və E-Taxes-ə göndərəcək." #. AI-generated #: invoice_az/invoice_az/doctype/e_taxes_settings/e_taxes_settings.js:969 msgid "" -"This will load {0} from E-Taxes for the period {1} to " -"{2}.

Process:
1. First, all invoices will be " -"fetched (may take 1-2 minutes)
2. Then each invoice will be processed for" -" reference data

This operation may take several minutes " +"This will load {0} from E-Taxes for the period {1} to {2}." +"

Process:
1. First, all invoices will be fetched " +"(may take 1-2 minutes)
2. Then each invoice will be processed for " +"reference data

This operation may take several minutes " "depending on the number of invoices.

Continue?" msgstr "" -"Bu, {1} - {2} dövrü üçün E-Taxes-dən {0} " -"yükləyəcək.

Proses:
1. Əvvəlcə bütün qaimələr " -"çəkiləcək (1-2 dəqiqə çəkə bilər)
2. Sonra hər bir qaimə istinad " -"məlumatları üçün emal ediləcək

Bu əməliyyat qaimələrin " -"sayından asılı olaraq bir neçə dəqiqə çəkə bilər.

Davam " -"edilsin?" +"Bu, {1} - {2} dövrü üçün E-Taxes-dən {0} yükləyəcək.

Proses:" +"
1. Əvvəlcə bütün qaimələr çəkiləcək (1-2 dəqiqə çəkə " +"bilər)
2. Sonra hər bir qaimə istinad məlumatları üçün emal " +"ediləcək

Bu əməliyyat qaimələrin sayından asılı olaraq bir " +"neçə dəqiqə çəkə bilər.

Davam edilsin?" #. AI-generated #: invoice_az/client/company.js:272 diff --git a/invoice_az/send_sales_api.py b/invoice_az/send_sales_api.py index c901848..a5d2e2f 100644 --- a/invoice_az/send_sales_api.py +++ b/invoice_az/send_sales_api.py @@ -176,7 +176,7 @@ def validate_invoice_for_sending(doc): if not customer.tax_id: return { "valid": False, - "message": f"Customer '{doc.customer}' does not have a TIN (tax_id). Please update customer details." + "message": f"Customer '{doc.customer}' does not have a TIN. Please update customer details." } # Validate items @@ -357,7 +357,7 @@ def get_customer_objects(sales_invoice_name): if not customer.tax_id: return { "success": False, - "message": f"Customer '{doc.customer}' does not have a TIN (tax_id). Please update customer details." + "message": f"Customer '{doc.customer}' does not have a TIN. Please update customer details." } # Get authentication token