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) <noreply@anthropic.com>
This commit is contained in:
Ali 2026-06-10 17:52:03 +00:00
parent cc3621dc8b
commit 9b6b746793
12 changed files with 184 additions and 129 deletions

View File

@ -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'));
}
};
@ -819,13 +823,14 @@ 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',
// Показываем итоговый результат через тост (не 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 считается на сервере
});
[processedCount, 0, invoices.length]), // suppliers считается на сервере
indicator: 'green'
}, 10);
// ИСПРАВЛЕНО: Обновляем список с задержкой для уверенности в очистке состояния
setTimeout(function() {

View File

@ -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() {

View File

@ -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'));
}
};
@ -819,13 +823,14 @@ 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',
// Показываем итоговый результат через тост (не 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 считается на сервере
});
[processedCount, 0, invoices.length]), // customers считается на сервере
indicator: 'green'
}, 10);
// ИСПРАВЛЕНО: Обновляем список с задержкой для уверенности в очистке состояния
setTimeout(function() {

View File

@ -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',
// Показываем итоговый результат через тост (не 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])
});
accumulated_data.total_invoices, inboxText, outboxText]),
indicator: 'green'
}, 10);
// Refresh list
if (cur_list) {

View File

@ -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();
}

View File

@ -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);

View File

@ -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',

View File

@ -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() {

View File

@ -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',

View File

@ -988,6 +988,11 @@ 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,
__('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);
}
}

View File

@ -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: <jeyerp@jeycloud.az>\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?</p>"
msgstr ""
"<div style=\"color: red; font-weight: bold;\">XƏBƏRDARLIQ! Bu əməliyyat "
"bütün uyğunlaşdırılmamış elementlər üçün sistemdə yeni müştərilər "
"yaradacaq!</div><p>Bu əməliyyat geri qaytarıla bilməz. Əminsiniz?</p>"
"bütün uyğunlaşdırılmamış elementlər üçün sistemdə yeni müştərilər yaradacaq!"
"</div><p>Bu əməliyyat geri qaytarıla bilməz. Əminsiniz?</p>"
#. 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?</p>"
msgstr ""
"<div style=\"color: red; font-weight: bold;\">XƏBƏRDARLIQ! Bu əməliyyat "
"bütün xəritələnməmiş elementlər üçün sistemdə yeni maddələr "
"yaradacaq!</div><p>Bu əməliyyat geri qaytarıla bilməz. Əminsiniz?</p>"
"bütün xəritələnməmiş elementlər üçün sistemdə yeni maddələr yaradacaq!</"
"div><p>Bu əməliyyat geri qaytarıla bilməz. Əminsiniz?</p>"
#. 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 ""
"<strong>Warning:</strong> This will permanently remove the invoice from "
"E-Taxes system."
"<strong>Warning:</strong> This will permanently remove the invoice from E-"
"Taxes system."
msgstr ""
"<strong>Xəbərdarlıq:</strong> 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}.<br><br><strong>Process:</strong><br>1. First, all invoices will be "
"fetched (may take 1-2 minutes)<br>2. Then each invoice will be processed for"
" reference data<br><br><strong>This operation may take several minutes "
"This will load {0} from E-Taxes for the period {1} to {2}."
"<br><br><strong>Process:</strong><br>1. First, all invoices will be fetched "
"(may take 1-2 minutes)<br>2. Then each invoice will be processed for "
"reference data<br><br><strong>This operation may take several minutes "
"depending on the number of invoices.</strong><br><br>Continue?"
msgstr ""
"Bu, {1} - {2} dövrü üçün E-Taxes-dən {0} "
"yükləyəcək.<br><br><strong>Proses:</strong><br>1. Əvvəlcə bütün qaimələr "
"çəkiləcək (1-2 dəqiqə çəkə bilər)<br>2. Sonra hər bir qaimə istinad "
"məlumatları üçün emal ediləcək<br><br><strong>Bu əməliyyat qaimələrin "
"sayından asılı olaraq bir neçə dəqiqə çəkə bilər.</strong><br><br>Davam "
"edilsin?"
"Bu, {1} - {2} dövrü üçün E-Taxes-dən {0} yükləyəcək.<br><br><strong>Proses:"
"</strong><br>1. Əvvəlcə bütün qaimələr çəkiləcək (1-2 dəqiqə çəkə "
"bilər)<br>2. Sonra hər bir qaimə istinad məlumatları üçün emal "
"ediləcək<br><br><strong>Bu əməliyyat qaimələrin sayından asılı olaraq bir "
"neçə dəqiqə çəkə bilər.</strong><br><br>Davam edilsin?"
#. AI-generated
#: invoice_az/client/company.js:272

View File

@ -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