diff --git a/eu_einvoice/european_e_invoice/custom/sales_invoice.py b/eu_einvoice/european_e_invoice/custom/sales_invoice.py index da4ba878..e57ef6e3 100644 --- a/eu_einvoice/european_e_invoice/custom/sales_invoice.py +++ b/eu_einvoice/european_e_invoice/custom/sales_invoice.py @@ -127,6 +127,7 @@ def __init__( self.doc = None self.item_tax_rates = set() self.delivery_dates = [] + self.vat_exemption_reason_text = "" def get_einvoice(self) -> Document | None: """Return the einvoice document as a Python object.""" @@ -135,6 +136,9 @@ def get_einvoice(self) -> Document | None: def create_einvoice(self): """Create the einvoice document as a Python object.""" self.doc = Document() + self.vat_exemption_reason_text = str( + frappe.db.get_single_value("E Invoice Settings", "vat_exemption_reason_text") or "" + ).strip() self._set_context() self._set_header() @@ -273,7 +277,10 @@ def _set_seller(self): self._set_seller_address() def _set_seller_id(self): - for row in self.customer.supplier_numbers: + supplier_numbers = getattr(self.customer, "supplier_numbers", None) + if not supplier_numbers: + return + for row in supplier_numbers: if row.company == self.invoice.company and row.supplier_number: self.doc.trade.agreement.seller.id = row.supplier_number break @@ -486,6 +493,7 @@ def _add_line_item(self, item: SalesInvoiceItem): ("Sales Taxes and Charges Template", self.invoice.taxes_and_charges), ] ).upper() + self._set_optional_vat_exemption_reason_text(li.settlement.trade_tax) li.settlement.monetary_summation.total_amount = flt(item.net_amount, item.precision("net_amount")) self.doc.trade.items.add(li) @@ -614,8 +622,13 @@ def _add_empty_tax(self): ("Sales Taxes and Charges Template", self.invoice.taxes_and_charges), ] ).upper() + self._set_optional_vat_exemption_reason_text(trade_tax) self.doc.trade.settlement.trade_tax.add(trade_tax) + def _set_optional_vat_exemption_reason_text(self, trade_tax: ApplicableTradeTax) -> None: + if self.vat_exemption_reason_text: + trade_tax.exemption_reason = self.vat_exemption_reason_text + def _add_delivery_date(self): if self.delivery_dates: delivery_date = sorted(self.delivery_dates)[-1] diff --git a/eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py b/eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py index fdd68a2d..58f7838b 100644 --- a/eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py +++ b/eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py @@ -1,6 +1,7 @@ # Copyright (c) 2024, ALYF GmbH and contributors # For license information, please see license.txt +from __future__ import annotations from pathlib import Path from typing import TYPE_CHECKING @@ -279,6 +280,8 @@ def parse_tax(self, tax: ApplicableTradeTax): t.basis_amount = flt_or_none(tax.basis_amount._value) t.rate_applicable_percent = flt_or_none(tax.rate_applicable_percent._value) t.calculated_amount = flt_or_none(tax.calculated_amount._value) + reason_text = tax.exemption_reason._text + t.vat_exemption_reason_text = str(reason_text).strip() if reason_text else None def parse_payment_term(self, term: PaymentTerms): if not term.partial_amount.children: diff --git a/eu_einvoice/european_e_invoice/doctype/e_invoice_settings/e_invoice_settings.json b/eu_einvoice/european_e_invoice/doctype/e_invoice_settings/e_invoice_settings.json index 9b5f467f..5a38368f 100644 --- a/eu_einvoice/european_e_invoice/doctype/e_invoice_settings/e_invoice_settings.json +++ b/eu_einvoice/european_e_invoice/doctype/e_invoice_settings/e_invoice_settings.json @@ -12,6 +12,8 @@ "error_action_on_save", "error_action_on_submit", "sales_invoice_number_field", + "section_break_bt120", + "vat_exemption_reason_text", "section_break_yldr", "auto_attach_xml", "attach_field_for_xml_file" @@ -74,13 +76,24 @@ "fieldname": "sales_invoice_number_field", "fieldtype": "Autocomplete", "label": "Sales Invoice Number Field" + }, + { + "fieldname": "section_break_bt120", + "fieldtype": "Section Break", + "label": "VAT exemption (e-invoice)" + }, + { + "description": "If set, written to BT-120 (ram:ExemptionReason) on VAT breakdowns where an exemption reason code is emitted. Left unset in the XML when empty.", + "fieldname": "vat_exemption_reason_text", + "fieldtype": "Small Text", + "label": "Default VAT exemption reason" } ], "grid_page_length": 50, "index_web_pages_for_search": 1, "issingle": 1, "links": [], - "modified": "2026-02-06 17:52:09.990716", + "modified": "2026-06-08 17:22:50.000159", "modified_by": "Administrator", "module": "European e-Invoice", "name": "E Invoice Settings", @@ -101,4 +114,4 @@ "sort_field": "creation", "sort_order": "DESC", "states": [] -} \ No newline at end of file +} diff --git a/eu_einvoice/european_e_invoice/doctype/e_invoice_settings/e_invoice_settings.py b/eu_einvoice/european_e_invoice/doctype/e_invoice_settings/e_invoice_settings.py index f61bdfcf..48197706 100644 --- a/eu_einvoice/european_e_invoice/doctype/e_invoice_settings/e_invoice_settings.py +++ b/eu_einvoice/european_e_invoice/doctype/e_invoice_settings/e_invoice_settings.py @@ -23,6 +23,7 @@ class EInvoiceSettings(Document): sales_invoice_number_field: DF.Autocomplete | None validate_sales_invoice_on_save: DF.Check validate_sales_invoice_on_submit: DF.Check + vat_exemption_reason_text: DF.SmallText | None # end: auto-generated types def before_validate(self): diff --git a/eu_einvoice/european_e_invoice/doctype/e_invoice_trade_tax/e_invoice_trade_tax.json b/eu_einvoice/european_e_invoice/doctype/e_invoice_trade_tax/e_invoice_trade_tax.json index 8a631c44..1d58a7a2 100644 --- a/eu_einvoice/european_e_invoice/doctype/e_invoice_trade_tax/e_invoice_trade_tax.json +++ b/eu_einvoice/european_e_invoice/doctype/e_invoice_trade_tax/e_invoice_trade_tax.json @@ -9,6 +9,7 @@ "basis_amount", "rate_applicable_percent", "calculated_amount", + "vat_exemption_reason_text", "tax_account" ], "fields": [ @@ -35,6 +36,12 @@ "options": "currency", "read_only": 1 }, + { + "fieldname": "vat_exemption_reason_text", + "fieldtype": "Small Text", + "label": "VAT exemption reason", + "read_only": 1 + }, { "fieldname": "tax_account", "fieldtype": "Link", @@ -45,13 +52,14 @@ "index_web_pages_for_search": 1, "istable": 1, "links": [], - "modified": "2024-09-26 21:18:13.837830", + "modified": "2026-06-08 17:23:25.953878", "modified_by": "Administrator", "module": "European e-Invoice", "name": "E Invoice Trade Tax", "owner": "Administrator", "permissions": [], + "row_format": "Dynamic", "sort_field": "creation", "sort_order": "DESC", "states": [] -} \ No newline at end of file +} diff --git a/eu_einvoice/european_e_invoice/doctype/e_invoice_trade_tax/e_invoice_trade_tax.py b/eu_einvoice/european_e_invoice/doctype/e_invoice_trade_tax/e_invoice_trade_tax.py index c63ad54f..76032038 100644 --- a/eu_einvoice/european_e_invoice/doctype/e_invoice_trade_tax/e_invoice_trade_tax.py +++ b/eu_einvoice/european_e_invoice/doctype/e_invoice_trade_tax/e_invoice_trade_tax.py @@ -21,6 +21,7 @@ class EInvoiceTradeTax(Document): parenttype: DF.Data rate_applicable_percent: DF.Percent tax_account: DF.Link | None + vat_exemption_reason_text: DF.SmallText | None # end: auto-generated types pass diff --git a/eu_einvoice/locale/de.po b/eu_einvoice/locale/de.po index 7050e587..55f0576f 100644 --- a/eu_einvoice/locale/de.po +++ b/eu_einvoice/locale/de.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: European e-Invoice VERSION\n" "Report-Msgid-Bugs-To: hallo@alyf.de\n" -"POT-Creation-Date: 2026-05-12 20:34+0053\n" +"POT-Creation-Date: 2026-06-08 13:47+0053\n" "PO-Revision-Date: 2026-02-05 11:13+0100\n" "Last-Translator: hallo@alyf.de\n" "Language: de\n" @@ -18,7 +18,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.16.0\n" -#: eu_einvoice/european_e_invoice/custom/sales_invoice.py:790 +#: eu_einvoice/european_e_invoice/custom/sales_invoice.py:803 msgid "A document level discount is currently not supported in the e-invoice." msgstr "Ein Rabatt auf der Dokumentebene wird in der E-Rechnung derzeit nicht unterstützt." @@ -55,7 +55,7 @@ msgstr "Vereinbarung" msgid "Allowance Total" msgstr "Abschläge gesamt" -#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:105 +#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:106 msgid "An E Invoice Import with the same Invoice ID and Supplier already exists." msgstr "Eine E-Rechnung mit der gleichen Rechnungs-ID und Lieferanten existiert bereits." @@ -73,7 +73,7 @@ msgstr "XML-Datei automatisch anhängen" #. Label of the payee_bic (Data) field in DocType 'E Invoice Import' #: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.json msgid "BIC" -msgstr "" +msgstr "BIC" #. Label of the basis_amount (Currency) field in DocType 'E Invoice Trade Tax' #: eu_einvoice/european_e_invoice/doctype/e_invoice_trade_tax/e_invoice_trade_tax.json @@ -165,11 +165,11 @@ msgstr "Käufer-Referenz" msgid "Calculation Percent" msgstr "Berechnung Prozentsatz" -#: eu_einvoice/european_e_invoice/custom/sales_invoice.py:821 +#: eu_einvoice/european_e_invoice/custom/sales_invoice.py:834 msgid "Cannot create E Invoice." msgstr "E-Rechnung konnte nicht erstellt werden." -#: eu_einvoice/european_e_invoice/custom/sales_invoice.py:835 +#: eu_einvoice/european_e_invoice/custom/sales_invoice.py:848 msgid "Cannot validate E Invoice schematron." msgstr "E-Rechnung konnte nicht validiert werden." @@ -184,7 +184,7 @@ msgstr "Zuschläge gesamt" msgid "Configure this if you are storing custom invoice numbers in a field other than name." msgstr "Konfigurieren Sie dies, wenn Sie benutzerdefinierte Rechnungsnummern in einem anderen Feld als name speichern." -#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:211 +#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:212 msgid "Could not validate E Invoice schematron. See Error Log for details." msgstr "E-Rechnung konnte nicht validiert werden. Details im Fehlerlog." @@ -194,6 +194,12 @@ msgstr "E-Rechnung konnte nicht validiert werden. Details im Fehlerlog." msgid "Create Supplier Address" msgstr "Lieferanten-Adresse erstellen" +#. Label of the vat_exemption_reason_text (Small Text) field in DocType 'E +#. Invoice Settings' +#: eu_einvoice/european_e_invoice/doctype/e_invoice_settings/e_invoice_settings.json +msgid "Default VAT exemption reason" +msgstr "Standard Grund für die Umsatzsteuerbefreiung" + #: eu_einvoice/european_e_invoice/custom/sales_invoice.js:14 msgid "Download eInvoice" msgstr "E-Rechnung herunterladen" @@ -217,7 +223,7 @@ msgstr "Fälliger Betrag" msgid "E Invoice Import" msgstr "E-Rechnungs-Import" -#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:650 +#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:653 msgid "E Invoice Import {0} does not exist" msgstr "E-Rechnungs-Import {0} existiert nicht" @@ -254,7 +260,7 @@ msgstr "E-Rechnungs-Einstellungen" msgid "E Invoice Trade Tax" msgstr "E-Rechnungs-Steuer" -#: eu_einvoice/european_e_invoice/custom/sales_invoice.py:803 +#: eu_einvoice/european_e_invoice/custom/sales_invoice.py:816 msgid "E Invoice is not correct" msgstr "E-Rechnung ist nicht korrekt" @@ -273,7 +279,7 @@ msgstr "E-Rechnung" #: eu_einvoice/desktop_icon/e_invoicing.json #: eu_einvoice/workspace_sidebar/e_invoicing.json msgid "E-Invoicing" -msgstr "E-Rechnungen" +msgstr "" #: eu_einvoice/custom_fields.py:63 eu_einvoice/custom_fields.py:85 #: eu_einvoice/custom_fields.py:107 @@ -289,11 +295,11 @@ msgstr "Schema der elektronischen Adresse" msgid "Embedded Document" msgstr "Eingebettetes Dokument" -#: eu_einvoice/european_e_invoice/doctype/e_invoice_settings/e_invoice_settings.py:50 +#: eu_einvoice/european_e_invoice/doctype/e_invoice_settings/e_invoice_settings.py:51 msgid "Field '{0}' does not exist on Sales Invoice doctype" msgstr "Feld '{0}' existiert nicht im DocType 'Sales Invoice'" -#: eu_einvoice/european_e_invoice/doctype/e_invoice_settings/e_invoice_settings.py:58 +#: eu_einvoice/european_e_invoice/doctype/e_invoice_settings/e_invoice_settings.py:59 msgid "Field '{0}' must be of type 'Attach'. Current type: {1}" msgstr "Feld '{0}' muss vom Typ 'Anhängen' sein. Aktueller Typ: {1}" @@ -303,6 +309,17 @@ msgstr "Feld '{0}' muss vom Typ 'Anhängen' sein. Aktueller Typ: {1}" msgid "File Section" msgstr "Datei-Abschnitt" +#. Description of the 'Default VAT exemption reason' (Small Text) field in +#. DocType 'E Invoice Settings' +#: eu_einvoice/european_e_invoice/doctype/e_invoice_settings/e_invoice_settings.json +msgid "If set, written to BT-120 (ram:ExemptionReason) on VAT breakdowns where an exemption reason code is emitted. Left unset in the XML when empty." +msgstr "Wenn ausgefüllt, wird der Text als BT-120 (ram:ExemptionReason) in der Steueraufschlüsselung geschrieben, sobald ein Befreiungsgrundcode ausgegeben wird. Bleibt das Feld leer, wird BT-120 im XML nicht gesetzt." + +#. Label of the id (Data) field in DocType 'E Invoice Import' +#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.json +msgid "Invoice ID" +msgstr "Rechnungs-ID" + #. Label of the line_total (Currency) field in DocType 'E Invoice Import' #: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.json msgid "Line Total" @@ -318,11 +335,11 @@ msgstr "Mit {0} verknüpfen" msgid "Monetary Summation" msgstr "Gesamtbeträge" -#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:443 +#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:446 msgid "No machine-readable data was found in the PDF file. You can create a regular Purchase Invoice manually instead." msgstr "In der PDF-Datei wurden keine maschinenlesbaren Daten gefunden. Sie können stattdessen eine reguläre Eingangsrechnung manuell erstellen." -#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:446 +#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:449 msgid "Not an E-Invoice" msgstr "Keine E-Rechnung" @@ -344,11 +361,11 @@ msgstr "Teilbetrag" msgid "Payment Means" msgstr "Zahlungsmittel" -#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:119 +#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:120 msgid "Please create or select a supplier before submitting" msgstr "Bitte vor dem Buchen einen Lieferanten auswählen oder erstellen." -#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:125 +#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:126 msgid "Please map all invoice lines to an item before submitting" msgstr "Bitte vor dem Buchen alle Positionen einem Artikel zuordnen." @@ -356,7 +373,7 @@ msgstr "Bitte vor dem Buchen alle Positionen einem Artikel zuordnen." msgid "Please note the validation errors of the e-invoice." msgstr "Bitte beachten Sie die Validierungsfehler der E-Rechnung." -#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:122 +#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:123 msgid "Please select a company before submitting" msgstr "Bitte vor dem Buchen ein Unternehmen auswählen." @@ -371,7 +388,7 @@ msgstr "Produktbeschreibung" msgid "Product Name" msgstr "Produktname" -#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:644 +#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:647 msgid "Purchase Invoice {0} is already linked to E Invoice Import {1}" msgstr "Eingangsrechnung {0} ist bereits mit E-Rechnungs-Import {1} verknüpft" @@ -468,11 +485,11 @@ msgstr "Lieferantenrechnungsdatei" msgid "Tax Basis Total" msgstr "Steuerbasis gesamt" -#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:453 +#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:456 msgid "The format of the uploaded file ({0}) is not supported for E-Invoices. Please upload a valid E-Invoice file or create a regular Purchase Invoice manually instead." msgstr "Das Format der hochgeladenen Datei ({0}) wird für E-Rechnungen nicht unterstützt. Bitte laden Sie eine gültige E-Rechnungsdatei hoch oder erstellen Sie stattdessen eine reguläre Eingangsrechnung manuell." -#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:160 +#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:161 msgid "The uploaded file does not contain valid XML data." msgstr "Die hochgeladene Datei enthält keine gültige XML-Daten." @@ -486,7 +503,7 @@ msgstr "Vorausbezahlt" msgid "Unit Code" msgstr "Einheits-Code" -#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:456 +#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:459 msgid "Unsupported file format" msgstr "Nicht unterstütztes Dateiformat" @@ -495,6 +512,18 @@ msgstr "Nicht unterstütztes Dateiformat" msgid "Upload the .xml or .pdf file provided by your supplier." msgstr "Laden Sie die von Ihrem Lieferanten bereitgestellte .xml- oder .pdf-Datei hoch." +#. Label of the section_break_bt120 (Section Break) field in DocType 'E Invoice +#. Settings' +#: eu_einvoice/european_e_invoice/doctype/e_invoice_settings/e_invoice_settings.json +msgid "VAT exemption (e-invoice)" +msgstr "Umsatzsteuerbefreiung (E-Rechnung)" + +#. Label of the vat_exemption_reason_text (Small Text) field in DocType 'E +#. Invoice Trade Tax' +#: eu_einvoice/european_e_invoice/doctype/e_invoice_trade_tax/e_invoice_trade_tax.json +msgid "VAT exemption reason" +msgstr "Grund für Umsatzsteuerbefreiung" + #. Label of the validate_sales_invoice_on_save (Check) field in DocType 'E #. Invoice Settings' #: eu_einvoice/european_e_invoice/doctype/e_invoice_settings/e_invoice_settings.json @@ -532,19 +561,19 @@ msgstr "Validierungswarnungen" msgid "Warning Message" msgstr "Warnung" -#: eu_einvoice/european_e_invoice/custom/sales_invoice.py:769 +#: eu_einvoice/european_e_invoice/custom/sales_invoice.py:782 msgid "{0} row #{1}: Discount Date should be after Posting Date" msgstr "{0} Zeile {1}: Rabatt-Datum sollte nach Buchungsdatum liegen" -#: eu_einvoice/european_e_invoice/custom/sales_invoice.py:758 +#: eu_einvoice/european_e_invoice/custom/sales_invoice.py:771 msgid "{0} row #{1}: The charge type 'Actual' is only supported in the eInvoice profiles 'EXTENDED' and 'XRECHNUNG'." msgstr "Die Gebührenart 'Tatsächlich' wird nur in den E-Rechnungs-Profilen 'EXTENDED' und 'XRECHNUNG' unterstützt." -#: eu_einvoice/european_e_invoice/custom/sales_invoice.py:746 +#: eu_einvoice/european_e_invoice/custom/sales_invoice.py:759 msgid "{0} row #{1}: Type '{2}' is not supported in e-invoice" msgstr "{0} Zeile #{1}: Typ '{2}' wird in der E-Rechnung nicht unterstützt" -#: eu_einvoice/european_e_invoice/custom/sales_invoice.py:781 +#: eu_einvoice/european_e_invoice/custom/sales_invoice.py:794 msgid "{0}: Only one mode of payment will be considered in the e-invoice." msgstr "{0}: Nur eine Zahlungsart wird in der E-Rechnung berücksichtigt." diff --git a/eu_einvoice/locale/main.pot b/eu_einvoice/locale/main.pot index 8de6ba93..82c42aea 100644 --- a/eu_einvoice/locale/main.pot +++ b/eu_einvoice/locale/main.pot @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: European e-Invoice VERSION\n" "Report-Msgid-Bugs-To: hallo@alyf.de\n" -"POT-Creation-Date: 2026-05-12 20:34+0053\n" -"PO-Revision-Date: 2026-05-12 20:34+0053\n" +"POT-Creation-Date: 2026-06-08 13:47+0053\n" +"PO-Revision-Date: 2026-06-08 13:47+0053\n" "Last-Translator: hallo@alyf.de\n" "Language-Team: hallo@alyf.de\n" "MIME-Version: 1.0\n" @@ -16,7 +16,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.16.0\n" -#: eu_einvoice/european_e_invoice/custom/sales_invoice.py:790 +#: eu_einvoice/european_e_invoice/custom/sales_invoice.py:803 msgid "A document level discount is currently not supported in the e-invoice." msgstr "" @@ -53,7 +53,7 @@ msgstr "" msgid "Allowance Total" msgstr "" -#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:105 +#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:106 msgid "An E Invoice Import with the same Invoice ID and Supplier already exists." msgstr "" @@ -163,11 +163,11 @@ msgstr "" msgid "Calculation Percent" msgstr "" -#: eu_einvoice/european_e_invoice/custom/sales_invoice.py:821 +#: eu_einvoice/european_e_invoice/custom/sales_invoice.py:834 msgid "Cannot create E Invoice." msgstr "" -#: eu_einvoice/european_e_invoice/custom/sales_invoice.py:835 +#: eu_einvoice/european_e_invoice/custom/sales_invoice.py:848 msgid "Cannot validate E Invoice schematron." msgstr "" @@ -182,7 +182,7 @@ msgstr "" msgid "Configure this if you are storing custom invoice numbers in a field other than name." msgstr "" -#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:211 +#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:212 msgid "Could not validate E Invoice schematron. See Error Log for details." msgstr "" @@ -192,6 +192,12 @@ msgstr "" msgid "Create Supplier Address" msgstr "" +#. Label of the vat_exemption_reason_text (Small Text) field in DocType 'E +#. Invoice Settings' +#: eu_einvoice/european_e_invoice/doctype/e_invoice_settings/e_invoice_settings.json +msgid "Default VAT exemption reason" +msgstr "" + #: eu_einvoice/european_e_invoice/custom/sales_invoice.js:14 msgid "Download eInvoice" msgstr "" @@ -215,7 +221,7 @@ msgstr "" msgid "E Invoice Import" msgstr "" -#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:650 +#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:653 msgid "E Invoice Import {0} does not exist" msgstr "" @@ -252,7 +258,7 @@ msgstr "" msgid "E Invoice Trade Tax" msgstr "" -#: eu_einvoice/european_e_invoice/custom/sales_invoice.py:803 +#: eu_einvoice/european_e_invoice/custom/sales_invoice.py:816 msgid "E Invoice is not correct" msgstr "" @@ -287,11 +293,11 @@ msgstr "" msgid "Embedded Document" msgstr "" -#: eu_einvoice/european_e_invoice/doctype/e_invoice_settings/e_invoice_settings.py:50 +#: eu_einvoice/european_e_invoice/doctype/e_invoice_settings/e_invoice_settings.py:51 msgid "Field '{0}' does not exist on Sales Invoice doctype" msgstr "" -#: eu_einvoice/european_e_invoice/doctype/e_invoice_settings/e_invoice_settings.py:58 +#: eu_einvoice/european_e_invoice/doctype/e_invoice_settings/e_invoice_settings.py:59 msgid "Field '{0}' must be of type 'Attach'. Current type: {1}" msgstr "" @@ -301,6 +307,17 @@ msgstr "" msgid "File Section" msgstr "" +#. Description of the 'Default VAT exemption reason' (Small Text) field in +#. DocType 'E Invoice Settings' +#: eu_einvoice/european_e_invoice/doctype/e_invoice_settings/e_invoice_settings.json +msgid "If set, written to BT-120 (ram:ExemptionReason) on VAT breakdowns where an exemption reason code is emitted. Left unset in the XML when empty." +msgstr "" + +#. Label of the id (Data) field in DocType 'E Invoice Import' +#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.json +msgid "Invoice ID" +msgstr "" + #. Label of the line_total (Currency) field in DocType 'E Invoice Import' #: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.json msgid "Line Total" @@ -316,11 +333,11 @@ msgstr "" msgid "Monetary Summation" msgstr "" -#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:443 +#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:446 msgid "No machine-readable data was found in the PDF file. You can create a regular Purchase Invoice manually instead." msgstr "" -#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:446 +#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:449 msgid "Not an E-Invoice" msgstr "" @@ -342,11 +359,11 @@ msgstr "" msgid "Payment Means" msgstr "" -#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:119 +#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:120 msgid "Please create or select a supplier before submitting" msgstr "" -#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:125 +#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:126 msgid "Please map all invoice lines to an item before submitting" msgstr "" @@ -354,7 +371,7 @@ msgstr "" msgid "Please note the validation errors of the e-invoice." msgstr "" -#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:122 +#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:123 msgid "Please select a company before submitting" msgstr "" @@ -369,7 +386,7 @@ msgstr "" msgid "Product Name" msgstr "" -#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:644 +#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:647 msgid "Purchase Invoice {0} is already linked to E Invoice Import {1}" msgstr "" @@ -466,11 +483,11 @@ msgstr "" msgid "Tax Basis Total" msgstr "" -#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:453 +#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:456 msgid "The format of the uploaded file ({0}) is not supported for E-Invoices. Please upload a valid E-Invoice file or create a regular Purchase Invoice manually instead." msgstr "" -#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:160 +#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:161 msgid "The uploaded file does not contain valid XML data." msgstr "" @@ -484,7 +501,7 @@ msgstr "" msgid "Unit Code" msgstr "" -#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:456 +#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:459 msgid "Unsupported file format" msgstr "" @@ -493,6 +510,18 @@ msgstr "" msgid "Upload the .xml or .pdf file provided by your supplier." msgstr "" +#. Label of the section_break_bt120 (Section Break) field in DocType 'E Invoice +#. Settings' +#: eu_einvoice/european_e_invoice/doctype/e_invoice_settings/e_invoice_settings.json +msgid "VAT exemption (e-invoice)" +msgstr "" + +#. Label of the vat_exemption_reason_text (Small Text) field in DocType 'E +#. Invoice Trade Tax' +#: eu_einvoice/european_e_invoice/doctype/e_invoice_trade_tax/e_invoice_trade_tax.json +msgid "VAT exemption reason" +msgstr "" + #. Label of the validate_sales_invoice_on_save (Check) field in DocType 'E #. Invoice Settings' #: eu_einvoice/european_e_invoice/doctype/e_invoice_settings/e_invoice_settings.json @@ -531,19 +560,19 @@ msgstr "" msgid "Warning Message" msgstr "" -#: eu_einvoice/european_e_invoice/custom/sales_invoice.py:769 +#: eu_einvoice/european_e_invoice/custom/sales_invoice.py:782 msgid "{0} row #{1}: Discount Date should be after Posting Date" msgstr "" -#: eu_einvoice/european_e_invoice/custom/sales_invoice.py:758 +#: eu_einvoice/european_e_invoice/custom/sales_invoice.py:771 msgid "{0} row #{1}: The charge type 'Actual' is only supported in the eInvoice profiles 'EXTENDED' and 'XRECHNUNG'." msgstr "" -#: eu_einvoice/european_e_invoice/custom/sales_invoice.py:746 +#: eu_einvoice/european_e_invoice/custom/sales_invoice.py:759 msgid "{0} row #{1}: Type '{2}' is not supported in e-invoice" msgstr "" -#: eu_einvoice/european_e_invoice/custom/sales_invoice.py:781 +#: eu_einvoice/european_e_invoice/custom/sales_invoice.py:794 msgid "{0}: Only one mode of payment will be considered in the e-invoice." msgstr ""