19.0 vanilla

This commit is contained in:
Ernad Husremovic 2026-03-09 09:30:07 +01:00
parent ba20ce7443
commit 768b70e05e
2357 changed files with 1057103 additions and 712486 deletions

View file

@ -5,17 +5,17 @@ Electronic invoicing module
===========================
Allows to export and import formats: E-FFF, UBL Bis 3, EHF3, NLCIUS, Factur-X (CII), XRechnung (UBL).
When generating the PDF on the invoice, the PDF will be embedded inside the xml for all UBL formats. This allows the
receiver to retrieve the PDF with only the xml file. Note that **EHF3 is fully implemented by UBL Bis 3** (`reference
When generating the PDF on the invoice, the PDF will be embedded inside the xml for all UBL formats. This allows the
receiver to retrieve the PDF with only the xml file. Note that **EHF3 is fully implemented by UBL Bis 3** (`reference
<https://anskaffelser.dev/postaward/g3/spec/current/billing-3.0/norway/#_implementation>`_).
The formats can be chosen from the journal (Journal > Advanced Settings) linked to the invoice.
The formats can be chosen from the journal (Journal > Advanced Settings) linked to the invoice.
Note that E-FFF, NLCIUS and XRechnung (UBL) are only available for Belgian, Dutch and German companies,
respectively. UBL Bis 3 is only available for companies which country is present in the `EAS list
Note that E-FFF, NLCIUS and XRechnung (UBL) are only available for Belgian, Dutch and German companies,
respectively. UBL Bis 3 is only available for companies which country is present in the `EAS list
<https://docs.peppol.eu/poacc/billing/3.0/codelist/eas/>`_.
Note also that in order for Chorus Pro to automatically detect the "PDF/A-3 (Factur-X)" format, you need to activate
Note also that in order for Chorus Pro to automatically detect the "PDF/A-3 (Factur-X)" format, you need to activate
the "Factur-X PDF/A-3" option on the journal. This option will also validate the xml against the Factur-X and Chorus
Pro rules and show the errors.
@ -28,35 +28,14 @@ pip install odoo-bringout-oca-ocb-account_edi_ubl_cii
## Dependencies
This addon depends on:
- account_edi
## Manifest Information
- **Name**: Import/Export electronic invoices with UBL/CII
- **Version**: 1.0
- **Category**: Accounting/Accounting
- **License**: LGPL-3
- **Installable**: True
- account
## Source
Based on [OCA/OCB](https://github.com/OCA/OCB) branch 16.0, addon `account_edi_ubl_cii`.
- Repository: https://github.com/OCA/OCB
- Branch: 19.0
- Path: addons/account_edi_ubl_cii
## License
This package maintains the original LGPL-3 license from the upstream Odoo project.
## Documentation
- Overview: doc/OVERVIEW.md
- Architecture: doc/ARCHITECTURE.md
- Models: doc/MODELS.md
- Controllers: doc/CONTROLLERS.md
- Wizards: doc/WIZARDS.md
- Install: doc/INSTALL.md
- Usage: doc/USAGE.md
- Configuration: doc/CONFIGURATION.md
- Dependencies: doc/DEPENDENCIES.md
- Troubleshooting: doc/TROUBLESHOOTING.md
- FAQ: doc/FAQ.md
This package preserves the original LGPL-3 license.

View file

@ -1,3 +1,13 @@
# -*- coding: utf-8 -*-
from . import models
from . import wizard
def uninstall_hook(env):
env["res.partner"]._clear_removed_edi_formats(
"facturx",
"nlcius",
"ubl_a_nz",
"ubl_bis3",
"ubl_sg",
"xrechnung",
)

View file

@ -1,4 +1,3 @@
# -*- coding: utf-8 -*-
{
'name': "Import/Export electronic invoices with UBL/CII",
'version': '1.0',
@ -8,29 +7,36 @@ Electronic invoicing module
===========================
Allows to export and import formats: E-FFF, UBL Bis 3, EHF3, NLCIUS, Factur-X (CII), XRechnung (UBL).
When generating the PDF on the invoice, the PDF will be embedded inside the xml for all UBL formats. This allows the
receiver to retrieve the PDF with only the xml file. Note that **EHF3 is fully implemented by UBL Bis 3** (`reference
When generating the PDF on the invoice, the PDF will be embedded inside the xml for all UBL formats. This allows the
receiver to retrieve the PDF with only the xml file. Note that **EHF3 is fully implemented by UBL Bis 3** (`reference
<https://anskaffelser.dev/postaward/g3/spec/current/billing-3.0/norway/#_implementation>`_).
The formats can be chosen from the journal (Journal > Advanced Settings) linked to the invoice.
The formats can be chosen from the journal (Journal > Advanced Settings) linked to the invoice.
Note that E-FFF, NLCIUS and XRechnung (UBL) are only available for Belgian, Dutch and German companies,
respectively. UBL Bis 3 is only available for companies which country is present in the `EAS list
Note that E-FFF, NLCIUS and XRechnung (UBL) are only available for Belgian, Dutch and German companies,
respectively. UBL Bis 3 is only available for companies which country is present in the `EAS list
<https://docs.peppol.eu/poacc/billing/3.0/codelist/eas/>`_.
Note also that in order for Chorus Pro to automatically detect the "PDF/A-3 (Factur-X)" format, you need to activate
Note also that in order for Chorus Pro to automatically detect the "PDF/A-3 (Factur-X)" format, you need to activate
the "Factur-X PDF/A-3" option on the journal. This option will also validate the xml against the Factur-X and Chorus
Pro rules and show the errors.
""",
'depends': ['account_edi'],
'depends': ['account'],
'data': [
'data/account_edi_data.xml',
'data/cii_22_templates.xml',
'data/ubl_20_templates.xml',
'data/ubl_21_templates.xml',
'views/account_tax_views.xml',
'views/account_move_views.xml',
'views/res_partner_views.xml',
'report/account_edi_ubl_cii_report_templates.xml',
],
'assets': {
'web.assets_backend': [
'account_edi_ubl_cii/static/src/scss/**/*',
],
},
'installable': True,
'application': False,
'auto_install': True,
'author': 'Odoo S.A.',
'license': 'LGPL-3',
'uninstall_hook': 'uninstall_hook',
}

View file

@ -1,42 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="edi_facturx_1_0_05" model="account.edi.format">
<field name="name">Factur-X (PDF/A-3)</field>
<field name="code">facturx_1_0_05</field>
</record>
<record id="edi_nlcius_1" model="account.edi.format">
<field name="name">NLCIUS (Netherlands)</field>
<field name="code">nlcius_1</field>
</record>
<record id="ubl_bis3" model="account.edi.format">
<field name="name">Peppol BIS Billing 3.0</field>
<field name="code">ubl_bis3</field>
</record>
<record id="ubl_de" model="account.edi.format">
<field name="name">XRechnung UBL (Germany)</field>
<field name="code">ubl_de</field>
</record>
<record id="edi_ubl_2_1" model="account.edi.format">
<field name="name">UBL 2.1</field>
<field name="code">ubl_2_1</field>
</record>
<record id="edi_efff_1" model="account.edi.format">
<field name="name">E-FFF (BE)</field>
<field name="code">efff_1</field>
</record>
<record id="ubl_a_nz" model="account.edi.format">
<field name="name">A-NZ BIS Billing 3.0</field>
<field name="code">ubl_a_nz</field>
</record>
<record id="ubl_sg" model="account.edi.format">
<field name="name">SG BIS Billing 3.0</field>
<field name="code">ubl_sg</field>
</record>
</odoo>

View file

@ -5,7 +5,9 @@
<t t-set="line" t-value="line_vals['line']"/>
<t xmlns:ram="urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100"
xmlns:rsm="urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100"
xmlns:udt="urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100">
xmlns:udt="urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100"
xmlns:qdt="urn:un:unece:uncefact:data:standard:QualifiedDataType:100"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<ram:IncludedSupplyChainTradeLineItem>
<!-- Line number. -->
@ -22,17 +24,14 @@
<ram:SellerAssignedID
t-if="line.product_id and line.product_id.default_code"
t-out="line.product_id.default_code"/>
<!-- TODO:
<ram:Name t-esc="line.product_id.name or line.name"/>
<ram:Description t-esc="line.name" t-if="line.name != line.product_id.name"/>
-->
<ram:Name t-esc="line.name"/>
<ram:Name t-out="line.product_id.name"/>
<ram:Description t-out="line.name" t-if="line.name != line.product_id.name"/>
</ram:SpecifiedTradeProduct>
<!-- Amounts. -->
<ram:SpecifiedLineTradeAgreement>
<!-- Line information: unit_price
NB: the gross_price_unit should be the price tax excluded !
NB: the gross_price_unit should be the price tax excluded!
if price_unit = 100 and tax 10% price_include -> then the gross_price_unit is 91
-->
<ram:GrossPriceProductTradePrice>
@ -56,7 +55,7 @@
<ram:SpecifiedLineTradeDelivery>
<ram:BilledQuantity
t-att-unitCode="line_vals.get('unece_uom_code')"
t-out="line.quantity"/> <!-- /!\ The quantity is the line.quantity since we keep the unece_uom_code ! -->
t-out="line_vals.get('quantity')"/>
</ram:SpecifiedLineTradeDelivery>
<ram:SpecifiedLineTradeSettlement>
@ -69,6 +68,16 @@
</ram:ApplicableTradeTax>
</t>
<!-- Billing Period -->
<ram:BillingSpecifiedPeriod t-if="line_vals.get('billing_start') and line_vals.get('billing_end')">
<ram:StartDateTime>
<udt:DateTimeString format="102" t-out="format_date(line_vals['billing_start'])"/>
</ram:StartDateTime>
<ram:EndDateTime>
<udt:DateTimeString format="102" t-out="format_date(line_vals['billing_end'])"/>
</ram:EndDateTime>
</ram:BillingSpecifiedPeriod>
<!-- Allowance/Charge on the line -->
<t t-foreach="line_vals.get('allowance_charge_vals_list')" t-as="allowance_charge_vals">
<ram:SpecifiedTradeAllowanceCharge>
@ -94,21 +103,23 @@
<template id="account_invoice_partner_facturx_export_22">
<t xmlns:ram="urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100"
xmlns:rsm="urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100"
xmlns:udt="urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100">
xmlns:udt="urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100"
xmlns:qdt="urn:un:unece:uncefact:data:standard:QualifiedDataType:100"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<!-- Contact. -->
<ram:Name t-out="partner.display_name"/>
<ram:Name t-out="partner.display_name if partner.name else partner.commercial_partner_id.display_name"/>
<ram:SpecifiedLegalOrganization t-if="specified_legal_organization_val">
<ram:ID t-att-schemeID="str('0002')"
t-out="specified_legal_organization_val"/>
</ram:SpecifiedLegalOrganization>
<ram:DefinedTradeContact t-if="not hide_dtc">
<ram:PersonName t-esc="partner.name"/>
<ram:TelephoneUniversalCommunication t-if="partner.phone or partner.mobile">
<ram:CompleteNumber t-esc="partner.phone or partner.mobile"/>
<ram:PersonName t-out="partner.name"/>
<ram:TelephoneUniversalCommunication t-if="partner.phone">
<ram:CompleteNumber t-out="partner.phone"/>
</ram:TelephoneUniversalCommunication>
<ram:EmailURIUniversalCommunication t-if="partner.email">
<ram:URIID schemeID='SMTP' t-esc="partner.email"/>
<ram:URIID t-out="partner.email"/>
</ram:EmailURIUniversalCommunication>
</ram:DefinedTradeContact>
@ -120,7 +131,9 @@
<template id="account_invoice_address_facturx_export_22">
<t xmlns:ram="urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100"
xmlns:rsm="urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100"
xmlns:udt="urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100">
xmlns:udt="urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100"
xmlns:qdt="urn:un:unece:uncefact:data:standard:QualifiedDataType:100"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<!-- Address. -->
<ram:PostalTradeAddress>
<ram:PostcodeCode t-out="partner.zip"/>
@ -137,7 +150,9 @@
<rsm:CrossIndustryInvoice
xmlns:ram="urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100"
xmlns:rsm="urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100"
xmlns:udt="urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100">
xmlns:udt="urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100"
xmlns:qdt="urn:un:unece:uncefact:data:standard:QualifiedDataType:100"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<!-- Factur-x level:
* minimum or basicwl: urn:factur-x.eu:1p0...
* basic: urn:cen.eu:en16931:2017:compliant:factur-x.eu:1p0:basic
@ -180,7 +195,11 @@
</t>
<!-- VAT. -->
<ram:SpecifiedTaxRegistration t-if="record.company_id.vat">
<ram:SpecifiedTaxRegistration t-if="record.fiscal_position_id.foreign_vat">
<ram:ID schemeID="VA" t-out="record.fiscal_position_id.foreign_vat"/>
</ram:SpecifiedTaxRegistration>
<ram:SpecifiedTaxRegistration t-elif="record.company_id.vat">
<ram:ID schemeID="VA" t-out="record.company_id.vat"/>
</ram:SpecifiedTaxRegistration>
</ram:SellerTradeParty>
@ -236,7 +255,7 @@
<!-- Bank account. -->
<ram:SpecifiedTradeSettlementPaymentMeans t-if="record.partner_bank_id.sanitized_acc_number">
<ram:TypeCode>42</ram:TypeCode>
<ram:TypeCode t-out="payment_means_code"/>
<ram:PayeePartyCreditorFinancialAccount>
<ram:IBANID
t-if="record.partner_bank_id.acc_type == 'iban'"
@ -282,6 +301,10 @@
<ram:DueDateDateTime t-if="record.invoice_date_due">
<udt:DateTimeString format="102" t-out="format_date(record.invoice_date_due)"/>
</ram:DueDateDateTime>
<ram:ApplicableTradePaymentDiscountTerms t-if="record.invoice_payment_term_id.early_discount and record.invoice_payment_term_id.early_pay_discount_computation == 'mixed'">
<ram:BasisPeriodMeasure unitCode="DAY" t-out="record.invoice_payment_term_id.discount_days"/>
<ram:CalculationPercent t-out="record.invoice_payment_term_id.discount_percentage"/>
</ram:ApplicableTradePaymentDiscountTerms>
</ram:SpecifiedTradePaymentTerms>
<!-- Summary. -->
@ -310,12 +333,12 @@
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<rdf:Description xmlns:pdfaid="http://www.aiim.org/pdfa/ns/id/" rdf:about="">
<pdfaid:part>3</pdfaid:part>
<pdfaid:conformance>B</pdfaid:conformance>
<pdfaid:conformance>A</pdfaid:conformance>
</rdf:Description>
<rdf:Description xmlns:dc="http://purl.org/dc/elements/1.1/" rdf:about="">
<dc:title>
<rdf:Alt>
<rdf:li t-att="{'xml:lang': 'x-default'}" t-esc="title"/>
<rdf:li t-att="{'xml:lang': 'x-default'}" t-out="title"/>
</rdf:Alt>
</dc:title>
<dc:creator>
@ -334,8 +357,8 @@
</rdf:Description>
<rdf:Description xmlns:xmp="http://ns.adobe.com/xap/1.0/" rdf:about="">
<xmp:CreatorTool>Odoo</xmp:CreatorTool>
<xmp:CreateDate t-esc="date"/>
<xmp:ModifyDate t-esc="date"/>
<xmp:CreateDate t-out="date"/>
<xmp:ModifyDate t-out="date"/>
</rdf:Description>
<rdf:Description xmlns:pdfaExtension="http://www.aiim.org/pdfa/ns/extension/"
xmlns:pdfaSchema="http://www.aiim.org/pdfa/ns/schema#"

View file

@ -1,414 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<template id="ubl_20_AddressType">
<t xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2"
xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2"
xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2">
<cbc:StreetName t-out="vals.get('street_name')"/>
<cbc:AdditionalStreetName t-out="vals.get('additional_street_name')"/>
<cbc:CityName t-out="vals.get('city_name')"/>
<cbc:PostalZone t-out="vals.get('postal_zone')"/>
<cbc:CountrySubentity t-out="vals.get('country_subentity')"/>
<cbc:CountrySubentityCode t-out="vals.get('country_subentity_code')"/>
<cac:Country>
<t t-set="country_vals" t-value="vals.get('country_vals', {})"/>
<cbc:IdentificationCode
t-att="country_vals.get('identification_code_attrs', {})"
t-out="country_vals.get('identification_code')"/>
<cbc:Name t-out="country_vals.get('name')"/>
</cac:Country>
</t>
</template>
<template id="ubl_20_PartyType">
<t xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2"
xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2"
xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2">
<t t-set="partner" t-value="vals.get('partner') or builder.env['res.partner']"/>
<cbc:EndpointID
t-att="vals.get('endpoint_id_attrs', {})"
t-out="vals.get('endpoint_id')"/>
<t t-foreach="vals.get('party_identification_vals', [])" t-as="party_vals">
<cac:PartyIdentification>
<cbc:ID
t-att="party_vals.get('id_attrs', {})"
t-out="party_vals.get('id')"/>
</cac:PartyIdentification>
</t>
<t t-foreach="vals.get('party_name_vals', [])" t-as="party_vals">
<cac:PartyName>
<cbc:Name t-out="party_vals.get('name')"/>
</cac:PartyName>
</t>
<cac:PostalAddress>
<t t-call="{{AddressType_template}}">
<t t-set="vals" t-value="vals.get('postal_address_vals', {})"/>
</t>
</cac:PostalAddress>
<t t-foreach="vals.get('party_tax_scheme_vals', [])" t-as="foreach_vals">
<cac:PartyTaxScheme>
<cbc:RegistrationName t-out="foreach_vals.get('registration_name')"/>
<cbc:CompanyID
t-att="foreach_vals.get('company_id_attrs', {})"
t-out="foreach_vals.get('company_id')"/>
<cac:RegistrationAddress>
<t t-call="{{AddressType_template}}">
<t t-set="vals" t-value="foreach_vals.get('registration_address_vals', {})"/>
</t>
</cac:RegistrationAddress>
<cac:TaxScheme>
<cbc:ID t-out="foreach_vals.get('tax_scheme_id')"/>
</cac:TaxScheme>
</cac:PartyTaxScheme>
</t>
<t t-foreach="vals.get('party_legal_entity_vals', [])" t-as="foreach_vals">
<cac:PartyLegalEntity>
<cbc:RegistrationName t-out="foreach_vals.get('registration_name')"/>
<cbc:CompanyID
t-att="foreach_vals.get('company_id_attrs', {})"
t-out="foreach_vals.get('company_id')"/>
<cac:RegistrationAddress>
<t t-call="{{AddressType_template}}">
<t t-set="vals" t-value="foreach_vals.get('registration_address_vals', {})"/>
</t>
</cac:RegistrationAddress>
</cac:PartyLegalEntity>
</t>
<cac:Contact>
<t t-set="contact_vals" t-value="vals.get('contact_vals', {})"/>
<cbc:ID t-out="contact_vals.get('id')"/>
<cbc:Name t-out="contact_vals.get('name')"/>
<cbc:Telephone t-out="contact_vals.get('telephone')"/>
<cbc:ElectronicMail t-out="contact_vals.get('electronic_mail')"/>
</cac:Contact>
</t>
</template>
<template id="ubl_20_PaymentMeansType">
<t xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2"
xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2"
xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2">
<cbc:PaymentMeansCode
t-att="vals.get('payment_means_code_attrs', {})"
t-out="vals.get('payment_means_code')"/>
<cbc:PaymentDueDate t-out="vals.get('payment_due_date')"/>
<cbc:InstructionID t-out="vals.get('instruction_id')"/>
<t t-foreach="vals.get('payment_id_vals', [])" t-as="payment_id">
<cbc:PaymentID t-out="payment_id"/>
</t>
<cac:PayeeFinancialAccount>
<t t-set="payee_financial_account_vals" t-value="vals.get('payee_financial_account_vals', {})"/>
<cbc:ID
t-att="payee_financial_account_vals.get('id_attrs', {})"
t-out="payee_financial_account_vals.get('id')"/>
<cac:FinancialInstitutionBranch>
<t t-set="financial_institution_branch_vals" t-value="payee_financial_account_vals.get('financial_institution_branch_vals', {})"/>
<cbc:ID
t-att="financial_institution_branch_vals.get('id_attrs', {})"
t-out="financial_institution_branch_vals.get('id')"/>
<cac:FinancialInstitution>
<t t-set="financial_institution_vals" t-value="financial_institution_branch_vals.get('financial_institution_vals', {})"/>
<cbc:ID
t-att="financial_institution_vals.get('id_attrs', {})"
t-out="financial_institution_vals.get('id')"/>
<cbc:Name t-out="financial_institution_vals.get('name')"/>
<cac:Address>
<t t-call="{{AddressType_template}}">
<t t-set="vals" t-value="financial_institution_vals.get('address_vals', {})"/>
</t>
</cac:Address>
</cac:FinancialInstitution>
</cac:FinancialInstitutionBranch>
</cac:PayeeFinancialAccount>
</t>
</template>
<template id="ubl_20_TaxCategoryType">
<t xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2"
xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2"
xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2">
<cbc:ID
t-att="vals.get('id_attrs', {})"
t-out="vals.get('id')"/>
<cbc:Name t-out="vals.get('name')"/>
<cbc:Percent t-out="vals.get('percent')"/>
<cbc:TaxExemptionReasonCode
t-out="vals.get('tax_exemption_reason_code')"/>
<cbc:TaxExemptionReason
t-out="vals.get('tax_exemption_reason')"/>
<cac:TaxScheme>
<cbc:ID t-translation="off" t-out="vals.get('tax_scheme_id')"/>
</cac:TaxScheme>
</t>
</template>
<template id="ubl_20_TaxTotalType">
<t xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2"
xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2"
xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2">
<cbc:TaxAmount
t-att-currencyID="vals['currency'].name"
t-out="format_float(vals.get('tax_amount'), vals.get('currency_dp'))"/>
<t t-foreach="vals.get('tax_subtotal_vals', [])" t-as="foreach_vals">
<cac:TaxSubtotal>
<cbc:TaxableAmount
t-att-currencyID="foreach_vals['currency'].name"
t-out="format_float(foreach_vals.get('taxable_amount'), foreach_vals.get('currency_dp'))"/>
<cbc:TaxAmount
t-att-currencyID="foreach_vals['currency'].name"
t-out="format_float(foreach_vals.get('tax_amount'), foreach_vals.get('currency_dp'))"/>
<cbc:Percent t-out="foreach_vals.get('percent')"/>
<cac:TaxCategory>
<t t-call="{{TaxCategoryType_template}}">
<t t-set="vals" t-value="foreach_vals.get('tax_category_vals', {})"/>
</t>
</cac:TaxCategory>
</cac:TaxSubtotal>
</t>
</t>
</template>
<template id="ubl_20_AllowanceChargeType">
<t xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2"
xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2"
xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2">
<cbc:ChargeIndicator t-out="vals.get('charge_indicator')"/>
<cbc:AllowanceChargeReasonCode t-out="vals.get('allowance_charge_reason_code')"/>
<cbc:AllowanceChargeReason t-out="vals.get('allowance_charge_reason')"/>
<cbc:MultiplierFactorNumeric t-out="vals.get('multiplier_factor')"/>
<cbc:Amount
t-att-currencyID="vals.get('currency_name')"
t-out="format_float(vals.get('amount'), vals.get('currency_dp'))"/>
<t t-foreach="vals.get('tax_category_vals', [])" t-as="foreach_vals">
<cac:TaxCategory>
<t t-call="{{TaxCategoryType_template}}">
<t t-set="vals" t-value="foreach_vals"/>
</t>
</cac:TaxCategory>
</t>
</t>
</template>
<template id="ubl_20_InvoiceLineType">
<t xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2"
xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2"
xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2">
<cbc:ID t-out="vals.get('id')"/>
<cbc:Note t-out="vals.get('note')"/>
<cbc:InvoicedQuantity
t-if="invoice.move_type == 'out_invoice'"
t-att="vals.get('invoiced_quantity_attrs', {})"
t-out="vals.get('invoiced_quantity')"/>
<cbc:CreditedQuantity
t-if="invoice.move_type == 'out_refund'"
t-att="vals.get('invoiced_quantity_attrs', {})"
t-out="vals.get('invoiced_quantity')"/>
<cbc:LineExtensionAmount
t-att-currencyID="vals['currency'].name"
t-out="format_float(vals.get('line_extension_amount'), vals.get('currency_dp'))"/>
<!-- AllowanceCharge is only present for InvoiceLine, not for CreditNoteLine in UBL 2.0
(they are both present in UBL 2.1 and next)
http://www.datypic.com/sc/ubl20/e-cac_CreditNoteLine.html
http://www.datypic.com/sc/ubl20/e-cac_InvoiceLine.html
-->
<t t-if="invoice.move_type == 'out_invoice'">
<t t-foreach="vals.get('allowance_charge_vals', [])" t-as="foreach_vals">
<cac:AllowanceCharge>
<t t-call="{{AllowanceChargeType_template}}">
<t t-set="vals" t-value="foreach_vals"/>
</t>
</cac:AllowanceCharge>
</t>
</t>
<t t-foreach="vals.get('tax_total_vals', [])" t-as="foreach_vals">
<cac:TaxTotal>
<t t-call="{{TaxTotalType_template}}">
<t t-set="vals" t-value="foreach_vals"/>
</t>
</cac:TaxTotal>
</t>
<cac:Item>
<t t-set="item_vals" t-value="vals.get('item_vals', {})"/>
<cbc:Description t-out="item_vals.get('description')"/>
<cbc:Name t-out="item_vals.get('name')"/>
<cac:SellersItemIdentification>
<cbc:ID t-out="item_vals.get('sellers_item_identification_vals', {}).get('id')"/>
</cac:SellersItemIdentification>
<t t-foreach="item_vals.get('classified_tax_category_vals', [])" t-as="foreach_vals">
<cac:ClassifiedTaxCategory>
<t t-call="{{TaxCategoryType_template}}">
<t t-set="vals" t-value="foreach_vals"/>
</t>
</cac:ClassifiedTaxCategory>
</t>
</cac:Item>
<cac:Price>
<t t-set="vals" t-value="vals.get('price_vals', {})"/>
<cbc:PriceAmount
t-att-currencyID="vals['currency'].name"
t-out="vals.get('price_amount')"/>
<!-- nbr of item units to which the price applies), i.e.: 1 Dozen = 12 units, not mandatory -->
<cbc:BaseQuantity
t-att="vals.get('base_quantity_attrs', {})"
t-out="vals.get('base_quantity')"/>
</cac:Price>
</t>
</template>
<template id="ubl_20_InvoiceType">
<t xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2"
xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2"
xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2">
<cbc:UBLVersionID t-out="vals.get('ubl_version_id')"/>
<cbc:CustomizationID t-out="vals.get('customization_id')"/>
<cbc:ProfileID t-out="vals.get('profile_id')"/>
<cbc:ID t-out="vals.get('id')"/>
<cbc:IssueDate t-out="vals.get('issue_date')"/>
<cbc:InvoiceTypeCode
t-if="invoice.move_type == 'out_invoice'"
t-att="vals.get('invoice_type_code_attrs', {})"
t-out="vals.get('invoice_type_code')"
/>
<t t-foreach="vals.get('note_vals', [])" t-as="note">
<cbc:Note t-out="note"/>
</t>
<cbc:DocumentCurrencyCode
t-att="vals.get('document_currency_code_attrs', {})"
t-out="invoice.currency_id.name.upper()"/>
<t t-foreach="vals.get('invoice_period_vals_list', [])" t-as="foreach_vals">
<cac:InvoicePeriod>
<cbc:StartDate t-out="foreach_vals.get('start_date')"/>
<cbc:EndDate t-out="foreach_vals.get('end_date')"/>
</cac:InvoicePeriod>
</t>
<cac:OrderReference>
<cbc:ID t-esc="vals.get('order_reference')"/>
<cbc:SalesOrderID t-esc="vals.get('sales_order_id')"/>
</cac:OrderReference>
<cac:BillingReference t-if="vals.get('billing_reference_vals')">
<cac:InvoiceDocumentReference>
<cbc:ID t-out="vals['billing_reference_vals'].get('id')"/>
<cbc:IssueDate t-out="vals['billing_reference_vals'].get('issue_date')"/>
</cac:InvoiceDocumentReference>
</cac:BillingReference>
<cac:AccountingSupplierParty>
<t t-set="accounting_supplier_vals" t-value="vals.get('accounting_supplier_party_vals', {})"/>
<cac:Party>
<t t-call="{{PartyType_template}}">
<t t-set="vals" t-value="accounting_supplier_vals.get('party_vals', {})"/>
</t>
</cac:Party>
</cac:AccountingSupplierParty>
<cac:AccountingCustomerParty>
<t t-set="accounting_customer_vals" t-value="vals.get('accounting_customer_party_vals', {})"/>
<cac:Party>
<t t-call="{{PartyType_template}}">
<t t-set="vals" t-value="accounting_customer_vals.get('party_vals', {})"/>
</t>
</cac:Party>
</cac:AccountingCustomerParty>
<t id="delivery_foreach" t-foreach="vals.get('delivery_vals_list', [])" t-as="foreach_vals">
<cac:Delivery>
<cbc:ActualDeliveryDate t-out="foreach_vals.get('actual_delivery_date')"/>
<cac:DeliveryLocation>
<cac:Address>
<t t-call="{{AddressType_template}}">
<t t-set="vals"
t-value="foreach_vals.get('delivery_location_vals', {}).get('delivery_address_vals', {})"/>
</t>
</cac:Address>
</cac:DeliveryLocation>
</cac:Delivery>
</t>
<!-- In UBL 2.0 PaymentMeans is only present for Invoice
while in UBL 2.1, it is present for Invoice and CreditNote
http://www.datypic.com/sc/ubl20/e-ns19_Invoice.html
http://www.datypic.com/sc/ubl20/e-ns14_CreditNote.html -->
<t t-if="invoice.move_type == 'out_invoice'">
<t t-foreach="vals.get('payment_means_vals_list', [])" t-as="foreach_vals">
<cac:PaymentMeans>
<t t-call="{{PaymentMeansType_template}}">
<t t-set="vals" t-value="foreach_vals"/>
</t>
</cac:PaymentMeans>
</t>
</t>
<t t-foreach="vals.get('payment_terms_vals', [])" t-as="foreach_vals">
<cac:PaymentTerms>
<t t-foreach="foreach_vals.get('note_vals', [])" t-as="note">
<cbc:Note t-out="note"/>
</t>
</cac:PaymentTerms>
</t>
<t t-foreach="vals.get('allowance_charge_vals', [])" t-as="foreach_vals">
<cac:AllowanceCharge>
<t t-call="{{AllowanceChargeType_template}}">
<t t-set="vals" t-value="foreach_vals"/>
</t>
</cac:AllowanceCharge>
</t>
<t t-foreach="vals.get('tax_total_vals', [])" t-as="foreach_vals">
<cac:TaxTotal>
<t t-call="{{TaxTotalType_template}}">
<t t-set="vals" t-value="foreach_vals"/>
</t>
</cac:TaxTotal>
</t>
<cac:LegalMonetaryTotal>
<t t-set="monetary_tot_vals" t-value="vals.get('legal_monetary_total_vals', {})"/>
<cbc:LineExtensionAmount
t-att-currencyID="monetary_tot_vals['currency'].name"
t-out="format_float(monetary_tot_vals.get('line_extension_amount'), monetary_tot_vals.get('currency_dp'))"/>
<cbc:TaxExclusiveAmount
t-att-currencyID="monetary_tot_vals['currency'].name"
t-out="format_float(monetary_tot_vals.get('tax_exclusive_amount'), monetary_tot_vals.get('currency_dp'))"/>
<cbc:TaxInclusiveAmount
t-att-currencyID="monetary_tot_vals['currency'].name"
t-out="format_float(monetary_tot_vals.get('tax_inclusive_amount'), monetary_tot_vals.get('currency_dp'))"/>
<cbc:AllowanceTotalAmount
t-att-currencyID="monetary_tot_vals['currency'].name"
t-out="format_float(monetary_tot_vals.get('allowance_total_amount'), monetary_tot_vals.get('currency_dp'))"/>
<cbc:ChargeTotalAmount
t-att-currencyID="monetary_tot_vals['currency'].name"
t-out="format_float(monetary_tot_vals.get('charge_total_amount'), monetary_tot_vals.get('currency_dp'))"/>
<cbc:PrepaidAmount
t-att-currencyID="monetary_tot_vals['currency'].name"
t-out="format_float(monetary_tot_vals.get('prepaid_amount'), monetary_tot_vals.get('currency_dp'))"/>
<cbc:PayableAmount
t-att-currencyID="monetary_tot_vals['currency'].name"
t-out="format_float(monetary_tot_vals.get('payable_amount'), monetary_tot_vals.get('currency_dp'))"/>
</cac:LegalMonetaryTotal>
<t t-foreach="vals.get('invoice_line_vals', [])" t-as="foreach_vals">
<cac:InvoiceLine t-if="invoice.move_type == 'out_invoice'">
<t t-call="{{InvoiceLineType_template}}">
<t t-set="vals" t-value="foreach_vals"/>
</t>
</cac:InvoiceLine>
<cac:CreditNoteLine t-if="invoice.move_type == 'out_refund'">
<t t-call="{{InvoiceLineType_template}}">
<t t-set="vals" t-value="foreach_vals"/>
</t>
</cac:CreditNoteLine>
</t>
</t>
</template>
<template id="ubl_20_Invoice">
<Invoice xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2"
xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2"
xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2">
<t t-call="{{InvoiceType_template}}"/>
</Invoice>
</template>
<template id="ubl_20_CreditNote">
<CreditNote xmlns="urn:oasis:names:specification:ubl:schema:xsd:CreditNote-2"
xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2"
xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2">
<t t-call="{{InvoiceType_template}}"/>
</CreditNote>
</template>
</odoo>

View file

@ -1,64 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<template id="ubl_21_InvoiceLineType" inherit_id="account_edi_ubl_cii.ubl_20_InvoiceLineType" primary="True">
<xpath expr="//*[local-name()='Item']" position="before">
<t t-if="invoice.move_type == 'out_refund'">
<!-- AllowanceCharge and TaxTotal are swapped in the CreditLine
w.r.t InvoiceLine. see: http://www.datypic.com/sc/ubl21/e-cac_InvoiceLine.html
vs http://www.datypic.com/sc/ubl21/e-cac_CreditNoteLine.html-->
<t t-foreach="vals.get('allowance_charge_vals', [])" t-as="foreach_vals">
<cac:AllowanceCharge
xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2"
xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2"
xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2">
<t t-call="{{AllowanceChargeType_template}}">
<t t-set="vals" t-value="foreach_vals"/>
</t>
</cac:AllowanceCharge>
</t>
</t>
</xpath>
</template>
<template id="ubl_21_InvoiceType" inherit_id="account_edi_ubl_cii.ubl_20_InvoiceType" primary="True">
<xpath expr="//*[local-name()='IssueDate']" position="after">
<cbc:DueDate
xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2"
xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2"
xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2"
t-if="invoice.move_type == 'out_invoice'"
t-out="vals.get('due_date')"/>
<cbc:CreditNoteTypeCode
xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2"
xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2"
xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2"
t-if="invoice.move_type == 'out_refund'"
t-att="vals.get('invoice_type_code_attrs', {})"
t-out="vals.get('credit_note_type_code')"
/>
</xpath>
<xpath expr="//*[local-name()='DocumentCurrencyCode']" position="after">
<cbc:BuyerReference
xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2"
xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2"
xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2"
t-out="vals.get('buyer_reference')"/>
</xpath>
<xpath expr="//*[@id='delivery_foreach']" position="after">
<t t-if="invoice.move_type == 'out_refund'">
<t t-foreach="vals.get('payment_means_vals_list', [])" t-as="foreach_vals">
<cac:PaymentMeans
xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2"
xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2"
xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2">
<t t-call="{{PaymentMeansType_template}}">
<t t-set="vals" t-value="foreach_vals"/>
</t>
</cac:PaymentMeans>
</t>
</t>
</xpath>
</template>
</odoo>

View file

@ -1,410 +0,0 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * account_edi_ubl_cii
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-02-10 08:26+0000\n"
"PO-Revision-Date: 2022-09-22 05:44+0000\n"
"Language-Team: Afrikaans (https://app.transifex.com/odoo/teams/41243/af/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Language: af\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "1.0"
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_facturx_export_22
msgid "42"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "<strong>Format used to import the invoice: %s</strong>"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid ""
"<strong>Format used to import the invoice: %s</strong> <p><li> %s </li></p>"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "A payment of %s was detected."
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_a_nz
msgid "A-NZ BIS Billing 3.0"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Articles 226 items 11 to 15 Directive 2006/112/EN"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "At least one of the following fields %s is required on %s."
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_de
msgid "BIS3 DE (XRechnung)"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_common
msgid ""
"Common functions for EDI documents: generate the data, the constraints, etc"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_20.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_20.py:0
#, python-format
msgid "Conditional cash/payment discount"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_cii_facturx.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_20.py:0
#, python-format
msgid ""
"Could not retrieve currency: %s. Did you enable the multicurrency option and"
" activate the currency ?"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Could not retrieve the tax: %s %% for line '%s'."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Could not retrieve the unit of measure for line with label '%s'."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Down Payment"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Down Payments"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_efff
msgid "E-FFF (BE)"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_format
msgid "EDI format"
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "EN 16931"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "Each invoice line shall have one and only one tax."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "Each invoice line should have a product or a label."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Each invoice line should have at least one tax."
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_mail_template
msgid "Email Templates"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_format.py:0
#, python-format
msgid ""
"Errors occured while creating the EDI document (format: %s). The receiver "
"might refuse it."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Export outside the EU"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_cii
msgid "Factur-x/XRechnung CII 2.2.0"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid ""
"For intracommunity supply, the actual delivery date or the invoicing period "
"should be included."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "For intracommunity supply, the delivery address should be included."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Intra-Community supply"
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "Invoice generated by Odoo"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "No Electronic Address Scheme (EAS) could be found for %s."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid ""
"No gross price, net price nor line subtotal amount found for line in xml"
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "Odoo"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_ir_actions_report
msgid "Report Action"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_sg
msgid "SG BIS Billing 3.0"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_nl
msgid "SI-UBL 2.0 (NLCIUS)"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Tax '%s' is invalid: %s"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid ""
"The VAT number of the supplier does not seem to be valid. It should be of "
"the form: NO179728982MVA."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "The VAT of the %s should be prefixed with its country code."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "The country is required for the %s."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_cii_facturx.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_20.py:0
#, python-format
msgid "The currency '%s' is not active."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "The customer %s must have a Bronnoysund company registry."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "The customer %s must have a KVK or OIN number."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "The element %s is required on %s."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "The field %s is required on %s."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_cii_facturx.py:0
#, python-format
msgid ""
"The field 'Sanitized Account Number' is required on the Recipient Bank."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_cii_facturx.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_20.py:0
#, python-format
msgid ""
"The invoice has been converted into a credit note and the quantities have "
"been reverted."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_format.py:0
#, python-format
msgid ""
"The journal in which to upload should either be a sale or a purchase "
"journal."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "The supplier %s must have a Bronnoysund company registry."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "The supplier %s must have a KVK or OIN number."
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_20
msgid "UBL 2.0"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_21
msgid "UBL 2.1"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_bis3
msgid "UBL BIS Billing 3.0.12"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_cii_facturx.py:0
#, python-format
msgid ""
"When the Canary Island General Indirect Tax (IGIC) applies, the tax rate on "
"each invoice line should be greater than 0."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_cii_facturx.py:0
#, python-format
msgid ""
"You should include at least one tax per invoice line. [BR-CO-04]-Each "
"Invoice line (BG-25) shall be categorized with an Invoiced item VAT category"
" code (BT-151)."
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "factur-x.xml"
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "fx"
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "urn:factur-x:pdfa:CrossIndustryDocument:invoice:1p0#"
msgstr ""

View file

@ -1,424 +0,0 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * account_edi_ubl_cii
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-02-06 13:31+0000\n"
"PO-Revision-Date: 2022-09-22 05:44+0000\n"
"Language-Team: Amharic (https://app.transifex.com/odoo/teams/41243/am/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Language: am\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "1.0"
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_facturx_export_22
msgid "42"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "<strong>Format used to import the invoice: %s</strong>"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid ""
"<strong>Format used to import the invoice: %s</strong> <p><li> %s </li></p>"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "A payment of %s was detected."
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_a_nz
msgid "A-NZ BIS Billing 3.0"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Articles 226 items 11 to 15 Directive 2006/112/EN"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "At least one of the following fields %s is required on %s."
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_de
msgid "BIS3 DE (XRechnung)"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_common
msgid ""
"Common functions for EDI documents: generate the data, the constraints, etc"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_20.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_20.py:0
#, python-format
msgid "Conditional cash/payment discount"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_cii_facturx.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_20.py:0
#, python-format
msgid ""
"Could not retrieve currency: %s. Did you enable the multicurrency option and"
" activate the currency ?"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Could not retrieve the tax: %s %% for line '%s'."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Could not retrieve the unit of measure for line with label '%s'."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Down Payment"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Down Payments"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_efff
msgid "E-FFF (BE)"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_format
msgid "EDI format"
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "EN 16931"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "Each invoice line shall have one and only one tax."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "Each invoice line should have a product or a label."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Each invoice line should have at least one tax."
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_mail_template
msgid "Email Templates"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_format.py:0
#, python-format
msgid ""
"Errors occured while creating the EDI document (format: %s). The receiver "
"might refuse it."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Export outside the EU"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_cii
msgid "Factur-x/XRechnung CII 2.2.0"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid ""
"For intracommunity supply, the actual delivery date or the invoicing period "
"should be included."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "For intracommunity supply, the delivery address should be included."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Intra-Community supply"
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "Invoice generated by Odoo"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "No Electronic Address Scheme (EAS) could be found for %s."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid ""
"No gross price, net price nor line subtotal amount found for line in xml"
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "Odoo"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_ir_actions_report
msgid "Report Action"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_sg
msgid "SG BIS Billing 3.0"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_nl
msgid "SI-UBL 2.0 (NLCIUS)"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Tax '%s' is invalid: %s"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid ""
"The VAT number of the supplier does not seem to be valid. It should be of "
"the form: NO179728982MVA."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "The VAT of the %s should be prefixed with its country code."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "The country is required for the %s."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_cii_facturx.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_20.py:0
#, python-format
msgid "The currency '%s' is not active."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "The customer %s must have a Bronnoysund company registry."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "The customer %s must have a KVK or OIN number."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "The element %s is required on %s."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "The field %s is required on %s."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_cii_facturx.py:0
#, python-format
msgid ""
"The field 'Sanitized Account Number' is required on the Recipient Bank."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid ""
"The invoice contains line(s) with a negative unit price, which is not "
"allowed. You might need to set a negative quantity instead."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_cii_facturx.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_20.py:0
#, python-format
msgid ""
"The invoice has been converted into a credit note and the quantities have "
"been reverted."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_format.py:0
#, python-format
msgid ""
"The journal in which to upload should either be a sale or a purchase "
"journal."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "The supplier %s must have a Bronnoysund company registry."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "The supplier %s must have a KVK or OIN number."
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_20
msgid "UBL 2.0"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_21
msgid "UBL 2.1"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_bis3
msgid "UBL BIS Billing 3.0.12"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_cii_facturx.py:0
#, python-format
msgid ""
"When the Canary Island General Indirect Tax (IGIC) applies, the tax rate on "
"each invoice line should be greater than 0."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_cii_facturx.py:0
#, python-format
msgid ""
"You should include at least one tax per invoice line. [BR-CO-04]-Each "
"Invoice line (BG-25) shall be categorized with an Invoiced item VAT category"
" code (BT-151)."
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "factur-x.xml"
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_line_facturx_export_22
msgid "false"
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "fx"
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "urn:factur-x:pdfa:CrossIndustryDocument:invoice:1p0#"
msgstr ""

View file

@ -1,410 +0,0 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * account_edi_ubl_cii
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-02-10 08:26+0000\n"
"PO-Revision-Date: 2022-09-22 05:44+0000\n"
"Language-Team: Belarusian (https://app.transifex.com/odoo/teams/41243/be/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Language: be\n"
"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n"
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "1.0"
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_facturx_export_22
msgid "42"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "<strong>Format used to import the invoice: %s</strong>"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid ""
"<strong>Format used to import the invoice: %s</strong> <p><li> %s </li></p>"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "A payment of %s was detected."
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_a_nz
msgid "A-NZ BIS Billing 3.0"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Articles 226 items 11 to 15 Directive 2006/112/EN"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "At least one of the following fields %s is required on %s."
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_de
msgid "BIS3 DE (XRechnung)"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_common
msgid ""
"Common functions for EDI documents: generate the data, the constraints, etc"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_20.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_20.py:0
#, python-format
msgid "Conditional cash/payment discount"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_cii_facturx.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_20.py:0
#, python-format
msgid ""
"Could not retrieve currency: %s. Did you enable the multicurrency option and"
" activate the currency ?"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Could not retrieve the tax: %s %% for line '%s'."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Could not retrieve the unit of measure for line with label '%s'."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Down Payment"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Down Payments"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_efff
msgid "E-FFF (BE)"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_format
msgid "EDI format"
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "EN 16931"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "Each invoice line shall have one and only one tax."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "Each invoice line should have a product or a label."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Each invoice line should have at least one tax."
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_mail_template
msgid "Email Templates"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_format.py:0
#, python-format
msgid ""
"Errors occured while creating the EDI document (format: %s). The receiver "
"might refuse it."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Export outside the EU"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_cii
msgid "Factur-x/XRechnung CII 2.2.0"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid ""
"For intracommunity supply, the actual delivery date or the invoicing period "
"should be included."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "For intracommunity supply, the delivery address should be included."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Intra-Community supply"
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "Invoice generated by Odoo"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "No Electronic Address Scheme (EAS) could be found for %s."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid ""
"No gross price, net price nor line subtotal amount found for line in xml"
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "Odoo"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_ir_actions_report
msgid "Report Action"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_sg
msgid "SG BIS Billing 3.0"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_nl
msgid "SI-UBL 2.0 (NLCIUS)"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Tax '%s' is invalid: %s"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid ""
"The VAT number of the supplier does not seem to be valid. It should be of "
"the form: NO179728982MVA."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "The VAT of the %s should be prefixed with its country code."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "The country is required for the %s."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_cii_facturx.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_20.py:0
#, python-format
msgid "The currency '%s' is not active."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "The customer %s must have a Bronnoysund company registry."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "The customer %s must have a KVK or OIN number."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "The element %s is required on %s."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "The field %s is required on %s."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_cii_facturx.py:0
#, python-format
msgid ""
"The field 'Sanitized Account Number' is required on the Recipient Bank."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_cii_facturx.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_20.py:0
#, python-format
msgid ""
"The invoice has been converted into a credit note and the quantities have "
"been reverted."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_format.py:0
#, python-format
msgid ""
"The journal in which to upload should either be a sale or a purchase "
"journal."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "The supplier %s must have a Bronnoysund company registry."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "The supplier %s must have a KVK or OIN number."
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_20
msgid "UBL 2.0"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_21
msgid "UBL 2.1"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_bis3
msgid "UBL BIS Billing 3.0.12"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_cii_facturx.py:0
#, python-format
msgid ""
"When the Canary Island General Indirect Tax (IGIC) applies, the tax rate on "
"each invoice line should be greater than 0."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_cii_facturx.py:0
#, python-format
msgid ""
"You should include at least one tax per invoice line. [BR-CO-04]-Each "
"Invoice line (BG-25) shall be categorized with an Invoiced item VAT category"
" code (BT-151)."
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "factur-x.xml"
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "fx"
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "urn:factur-x:pdfa:CrossIndustryDocument:invoice:1p0#"
msgstr ""

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -1,450 +0,0 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * account_edi_ubl_cii
#
# Translators:
# Braulio D. López Vázquez <bdl@odoo.com>, 2022
# Martin Trigaux, 2022
# Patricia Gutiérrez Capetillo <pagc@odoo.com>, 2022
# Alfonso González, 2023
# Iran Villalobos López, 2023
# Fernanda Alvarez, 2024
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-02-10 08:26+0000\n"
"PO-Revision-Date: 2022-09-22 05:44+0000\n"
"Last-Translator: Fernanda Alvarez, 2024\n"
"Language-Team: Spanish (Mexico) (https://app.transifex.com/odoo/teams/41243/es_MX/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Language: es_MX\n"
"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n"
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "1.0"
msgstr "1.0"
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_facturx_export_22
msgid "42"
msgstr "42"
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "<strong>Format used to import the invoice: %s</strong>"
msgstr "<strong>Formato usado para importar la factura: %s</strong>"
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid ""
"<strong>Format used to import the invoice: %s</strong> <p><li> %s </li></p>"
msgstr ""
"<strong>Formato usado para importar la factura: %s</strong> <p><li> %s "
"</li></p>"
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "A payment of %s was detected."
msgstr "Se detectó un pago de %s."
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_a_nz
msgid "A-NZ BIS Billing 3.0"
msgstr "Facturación A-NZ BIS 3.0"
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Articles 226 items 11 to 15 Directive 2006/112/EN"
msgstr "Artículos 226 Apuntes 11 a 15 Directiva 2006/112/EN"
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "At least one of the following fields %s is required on %s."
msgstr "Al menos uno de los siguientes campos %s se necesita en %s."
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_de
msgid "BIS3 DE (XRechnung)"
msgstr "BIS3 DE (XRechnung)"
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_common
msgid ""
"Common functions for EDI documents: generate the data, the constraints, etc"
msgstr ""
"Funciones comunes para documentos EDI: generar datos, limitaciones, etc."
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_20.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_20.py:0
#, python-format
msgid "Conditional cash/payment discount"
msgstr "Descuento condicional por efectivo/pago"
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_cii_facturx.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_20.py:0
#, python-format
msgid ""
"Could not retrieve currency: %s. Did you enable the multicurrency option and"
" activate the currency ?"
msgstr ""
"No se pudo recuperar la divisa: %s. ¿Activó la opción multimoneda y activó "
"la divisa?"
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Could not retrieve the tax: %s %% for line '%s'."
msgstr "No se pudo recuperar el impuesto: %s %% para línea '%s'."
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Could not retrieve the unit of measure for line with label '%s'."
msgstr ""
"No se pudo recuperar la unidad de medida para la línea con la etiqueta "
"\"%s\"."
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Down Payment"
msgstr "Anticipo"
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Down Payments"
msgstr "Anticipos"
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_efff
msgid "E-FFF (BE)"
msgstr "E-FFF (BE)"
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_format
msgid "EDI format"
msgstr "Formato EDI"
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "EN 16931"
msgstr "EN 16931"
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "Each invoice line shall have one and only one tax."
msgstr "Cada línea de factura debe tener un, y solo un, impuesto."
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "Each invoice line should have a product or a label."
msgstr "Cada línea de factura debe tener al menos un producto o una etiqueta."
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Each invoice line should have at least one tax."
msgstr "Cada línea de factura debe tener al menos un impuesto."
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_mail_template
msgid "Email Templates"
msgstr "Plantillas de correo electrónico"
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_format.py:0
#, python-format
msgid ""
"Errors occured while creating the EDI document (format: %s). The receiver "
"might refuse it."
msgstr ""
"Ocurrieron errores al crear el documento EDI (formato: %s). Es posible que "
"el receptor lo rechace."
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Export outside the EU"
msgstr "Exportar fuera de la UE"
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_cii
msgid "Factur-x/XRechnung CII 2.2.0"
msgstr "Factur-x/XRechnung CII 2.2.0"
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid ""
"For intracommunity supply, the actual delivery date or the invoicing period "
"should be included."
msgstr ""
"Para un suministro intracomunitario, debe incluir la fecha actual de la "
"entrega o el periodo de la factura."
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "For intracommunity supply, the delivery address should be included."
msgstr ""
"Para un suministro intracomunitario, debe incluir la dirección de entrega."
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Intra-Community supply"
msgstr "Suministro intracomunitario"
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "Invoice generated by Odoo"
msgstr "Factura generada por Odoo"
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "No Electronic Address Scheme (EAS) could be found for %s."
msgstr ""
"No se encontró esquema de dirección electrónica (EAS, por sus siglas en "
"inglés) para %s."
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid ""
"No gross price, net price nor line subtotal amount found for line in xml"
msgstr ""
"No se encontró el precio bruto o neto ni el importe subtotal de línea para "
"la línea en XML"
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "Odoo"
msgstr "Odoo"
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_ir_actions_report
msgid "Report Action"
msgstr "Acción de reporte"
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_sg
msgid "SG BIS Billing 3.0"
msgstr "Facturación SG BIS 3.0"
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_nl
msgid "SI-UBL 2.0 (NLCIUS)"
msgstr "SI-UBL 2.0 (NLCIUS)"
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Tax '%s' is invalid: %s"
msgstr "El impuesto \"%s\" no es válido: %s"
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid ""
"The VAT number of the supplier does not seem to be valid. It should be of "
"the form: NO179728982MVA."
msgstr ""
"Parece que el NIF del proveedor no es válido, debería tener el formato: "
"NO179728982MVA."
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "The VAT of the %s should be prefixed with its country code."
msgstr ""
"El número de identificación fiscal de %s debería tener el código de su país "
"como prefijo."
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "The country is required for the %s."
msgstr "El país es necesario para %s."
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_cii_facturx.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_20.py:0
#, python-format
msgid "The currency '%s' is not active."
msgstr "La divisa '%s' no está activa"
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "The customer %s must have a Bronnoysund company registry."
msgstr "El cliente %s debe tener un registro mercantil en Brønnøysund."
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "The customer %s must have a KVK or OIN number."
msgstr "El cliente %s debe tener un KVK o número OIN."
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "The element %s is required on %s."
msgstr "El elemento %s es necesario en %s"
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "The field %s is required on %s."
msgstr "El campo %s es necesario en %s"
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_cii_facturx.py:0
#, python-format
msgid ""
"The field 'Sanitized Account Number' is required on the Recipient Bank."
msgstr ""
"El campo 'Número de cuenta depurado' es necesario en el banco del "
"destinatario."
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_cii_facturx.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_20.py:0
#, python-format
msgid ""
"The invoice has been converted into a credit note and the quantities have "
"been reverted."
msgstr ""
"La factura se convirtió en una nota de crédito y las cantidades se "
"revirtieron."
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_format.py:0
#, python-format
msgid ""
"The journal in which to upload should either be a sale or a purchase "
"journal."
msgstr ""
"El diario en el que se va a cargar debe ser un diario de ventas o de "
"compras."
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "The supplier %s must have a Bronnoysund company registry."
msgstr "El proveedor %s debe tener un registro en la empresa Bronnoysund."
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "The supplier %s must have a KVK or OIN number."
msgstr "El proveedor %s debe tener un número KVK y OIN."
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_20
msgid "UBL 2.0"
msgstr "UBL 2.0"
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_21
msgid "UBL 2.1"
msgstr "UBL 2.1"
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_bis3
msgid "UBL BIS Billing 3.0.12"
msgstr "Facturación UBL BIS 3.0.12"
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_cii_facturx.py:0
#, python-format
msgid ""
"When the Canary Island General Indirect Tax (IGIC) applies, the tax rate on "
"each invoice line should be greater than 0."
msgstr ""
"Cuando el Impuesto General Indirecto Canario (IGIC) aplica, la tasa "
"tributaria en cada línea de factura debe ser mayor a 0."
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_cii_facturx.py:0
#, python-format
msgid ""
"You should include at least one tax per invoice line. [BR-CO-04]-Each "
"Invoice line (BG-25) shall be categorized with an Invoiced item VAT category"
" code (BT-151)."
msgstr ""
"Debe incluir al menos un impuesto por cada línea en la factura. [BR-CO-04]. "
"Deberá categorizar cada línea de la factura (BG-25) por código de categoría "
"de IVA del artículo facturado (BT-151)."
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "factur-x.xml"
msgstr "factur-x.xml"
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "fx"
msgstr "fx"
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "urn:factur-x:pdfa:CrossIndustryDocument:invoice:1p0#"
msgstr "urn:factur-x:pdfa:CrossIndustryDocument:invoice:1p0#"

View file

@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 15.0+e\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-06-15 09:16+0000\n"
"POT-Creation-Date: 2023-05-16 13:48+0000\n"
"PO-Revision-Date: 2022-06-15 09:16+0000\n"
"Last-Translator: \n"
"Language-Team: \n"
@ -16,6 +16,192 @@ msgstr ""
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
msgid "%s should have a KVK or OIN number: the Peppol e-address (EAS) should be '0106' or '0190'."
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model.fields.selection,name:account_edi_ubl_cii.selection__res_partner__peppol_eas__0002
msgid "0002 - System Information et Repertoire des Entreprise et des Etablissements: SIRENE"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model.fields.selection,name:account_edi_ubl_cii.selection__res_partner__peppol_eas__0007
msgid "0007 - Organisationsnummer (Swedish legal entities)"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model.fields.selection,name:account_edi_ubl_cii.selection__res_partner__peppol_eas__0009
msgid "0009 - SIRET-CODE"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model.fields.selection,name:account_edi_ubl_cii.selection__res_partner__peppol_eas__0037
msgid "0037 - LY-tunnus"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model.fields.selection,name:account_edi_ubl_cii.selection__res_partner__peppol_eas__0060
msgid "0060 - Data Universal Numbering System (D-U-N-S Number)"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model.fields.selection,name:account_edi_ubl_cii.selection__res_partner__peppol_eas__0088
msgid "0088 - EAN Location Code"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model.fields.selection,name:account_edi_ubl_cii.selection__res_partner__peppol_eas__0096
msgid "0096 - DANISH CHAMBER OF COMMERCE Scheme (EDIRA compliant)"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model.fields.selection,name:account_edi_ubl_cii.selection__res_partner__peppol_eas__0097
msgid "0097 - FTI - Ediforum Italia, (EDIRA compliant)"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model.fields.selection,name:account_edi_ubl_cii.selection__res_partner__peppol_eas__0106
msgid "0106 - Association of Chambers of Commerce and Industry in the Netherlands, (EDIRA compliant)"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model.fields.selection,name:account_edi_ubl_cii.selection__res_partner__peppol_eas__0130
msgid "0130 - Directorates of the European Commission"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model.fields.selection,name:account_edi_ubl_cii.selection__res_partner__peppol_eas__0135
msgid "0135 - SIA Object Identifiers"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model.fields.selection,name:account_edi_ubl_cii.selection__res_partner__peppol_eas__0142
msgid "0142 - SECETI Object Identifiers"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model.fields.selection,name:account_edi_ubl_cii.selection__res_partner__peppol_eas__0151
msgid "0151 - Australian Business Number (ABN) Scheme"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model.fields.selection,name:account_edi_ubl_cii.selection__res_partner__peppol_eas__0183
msgid "0183 - Swiss Unique Business Identification Number (UIDB)"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model.fields.selection,name:account_edi_ubl_cii.selection__res_partner__peppol_eas__0184
msgid "0184 - DIGSTORG"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model.fields.selection,name:account_edi_ubl_cii.selection__res_partner__peppol_eas__0188
msgid "0188 - Corporate Number of The Social Security and Tax Number System"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model.fields.selection,name:account_edi_ubl_cii.selection__res_partner__peppol_eas__0190
msgid "0190 - Dutch Originator's Identification Number"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model.fields.selection,name:account_edi_ubl_cii.selection__res_partner__peppol_eas__0191
msgid "0191 - Centre of Registers and Information Systems of the Ministry of Justice"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model.fields.selection,name:account_edi_ubl_cii.selection__res_partner__peppol_eas__0192
msgid "0192 - Enhetsregisteret ved Bronnoysundregisterne"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model.fields.selection,name:account_edi_ubl_cii.selection__res_partner__peppol_eas__0193
msgid "0193 - UBL.BE party identifier"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model.fields.selection,name:account_edi_ubl_cii.selection__res_partner__peppol_eas__0195
msgid "0195 - Singapore UEN identifier"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model.fields.selection,name:account_edi_ubl_cii.selection__res_partner__peppol_eas__0196
msgid "0196 - Kennitala - Iceland legal id for individuals and legal entities"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model.fields.selection,name:account_edi_ubl_cii.selection__res_partner__peppol_eas__0198
msgid "0198 - ERSTORG"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model.fields.selection,name:account_edi_ubl_cii.selection__res_partner__peppol_eas__0199
msgid "0199 - Legal Entity Identifier (LEI)"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model.fields.selection,name:account_edi_ubl_cii.selection__res_partner__peppol_eas__0200
msgid "0200 - Legal entity code (Lithuania)"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model.fields.selection,name:account_edi_ubl_cii.selection__res_partner__peppol_eas__0201
msgid "0201 - Codice Univoco Unità Organizzativa iPA"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model.fields.selection,name:account_edi_ubl_cii.selection__res_partner__peppol_eas__0202
msgid "0202 - Indirizzo di Posta Elettronica Certificata"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model.fields.selection,name:account_edi_ubl_cii.selection__res_partner__peppol_eas__0204
msgid "0204 - Leitweg-ID"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model.fields.selection,name:account_edi_ubl_cii.selection__res_partner__peppol_eas__0208
msgid "0208 - Numero d'entreprise / ondernemingsnummer / Unternehmensnummer"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model.fields.selection,name:account_edi_ubl_cii.selection__res_partner__peppol_eas__0209
msgid "0209 - GS1 identification keys"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model.fields.selection,name:account_edi_ubl_cii.selection__res_partner__peppol_eas__0210
msgid "0210 - CODICE FISCALE"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model.fields.selection,name:account_edi_ubl_cii.selection__res_partner__peppol_eas__0211
msgid "0211 - PARTITA IVA"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model.fields.selection,name:account_edi_ubl_cii.selection__res_partner__peppol_eas__0212
msgid "0212 - Finnish Organization Identifier"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model.fields.selection,name:account_edi_ubl_cii.selection__res_partner__peppol_eas__0213
msgid "0213 - Finnish Organization Value Add Tax Identifier"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model.fields.selection,name:account_edi_ubl_cii.selection__res_partner__peppol_eas__0215
msgid "0215 - Net service ID"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model.fields.selection,name:account_edi_ubl_cii.selection__res_partner__peppol_eas__0216
msgid "0216 - OVTcode"
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "1.0"
@ -27,103 +213,331 @@ msgid "42"
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_line_facturx_export_22
msgid "95"
#: model:ir.model.fields.selection,name:account_edi_ubl_cii.selection__res_partner__peppol_eas__9901
msgid "9901 - Danish Ministry of the Interior and Health"
msgstr ""
#. module: account_edi_ubl_cii
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "<strong>Format used to import the invoice: %s</strong>"
#: model:ir.model.fields.selection,name:account_edi_ubl_cii.selection__res_partner__peppol_eas__9910
msgid "9910 - Hungary VAT number"
msgstr ""
#. module: account_edi_ubl_cii
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid ""
"<strong>Format used to import the invoice: %s</strong> <p><li> %s </li></p>"
#: model:ir.model.fields.selection,name:account_edi_ubl_cii.selection__res_partner__peppol_eas__9913
msgid "9913 - Business Registers Network"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model.fields.selection,name:account_edi_ubl_cii.selection__res_partner__peppol_eas__9914
msgid "9914 - Österreichische Umsatzsteuer-Identifikationsnummer"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model.fields.selection,name:account_edi_ubl_cii.selection__res_partner__peppol_eas__9915
msgid "9915 - Österreichisches Verwaltungs bzw. Organisationskennzeichen"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model.fields.selection,name:account_edi_ubl_cii.selection__res_partner__peppol_eas__9918
msgid "9918 - SOCIETY FOR WORLDWIDE INTERBANK FINANCIAL, TELECOMMUNICATION S.W.I.F.T"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model.fields.selection,name:account_edi_ubl_cii.selection__res_partner__peppol_eas__9919
msgid "9919 - Kennziffer des Unternehmensregisters"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model.fields.selection,name:account_edi_ubl_cii.selection__res_partner__peppol_eas__9920
msgid "9920 - Agencia Española de Administración Tributaria"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model.fields.selection,name:account_edi_ubl_cii.selection__res_partner__peppol_eas__9922
msgid "9922 - Andorra VAT number"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model.fields.selection,name:account_edi_ubl_cii.selection__res_partner__peppol_eas__9923
msgid "9923 - Albania VAT number"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model.fields.selection,name:account_edi_ubl_cii.selection__res_partner__peppol_eas__9924
msgid "9924 - Bosnia and Herzegovina VAT number"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model.fields.selection,name:account_edi_ubl_cii.selection__res_partner__peppol_eas__9925
msgid "9925 - Belgium VAT number"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model.fields.selection,name:account_edi_ubl_cii.selection__res_partner__peppol_eas__9926
msgid "9926 - Bulgaria VAT number"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model.fields.selection,name:account_edi_ubl_cii.selection__res_partner__peppol_eas__9927
msgid "9927 - Switzerland VAT number"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model.fields.selection,name:account_edi_ubl_cii.selection__res_partner__peppol_eas__9928
msgid "9928 - Cyprus VAT number"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model.fields.selection,name:account_edi_ubl_cii.selection__res_partner__peppol_eas__9929
msgid "9929 - Czech Republic VAT number"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model.fields.selection,name:account_edi_ubl_cii.selection__res_partner__peppol_eas__9930
msgid "9930 - Germany VAT number"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model.fields.selection,name:account_edi_ubl_cii.selection__res_partner__peppol_eas__9931
msgid "9931 - Estonia VAT number"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model.fields.selection,name:account_edi_ubl_cii.selection__res_partner__peppol_eas__9932
msgid "9932 - United Kingdom VAT number"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model.fields.selection,name:account_edi_ubl_cii.selection__res_partner__peppol_eas__9933
msgid "9933 - Greece VAT number"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model.fields.selection,name:account_edi_ubl_cii.selection__res_partner__peppol_eas__9934
msgid "9934 - Croatia VAT number"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model.fields.selection,name:account_edi_ubl_cii.selection__res_partner__peppol_eas__9935
msgid "9935 - Ireland VAT number"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model.fields.selection,name:account_edi_ubl_cii.selection__res_partner__peppol_eas__9936
msgid "9936 - Liechtenstein VAT number"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model.fields.selection,name:account_edi_ubl_cii.selection__res_partner__peppol_eas__9937
msgid "9937 - Lithuania VAT number"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model.fields.selection,name:account_edi_ubl_cii.selection__res_partner__peppol_eas__9938
msgid "9938 - Luxemburg VAT number"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model.fields.selection,name:account_edi_ubl_cii.selection__res_partner__peppol_eas__9939
msgid "9939 - Latvia VAT number"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model.fields.selection,name:account_edi_ubl_cii.selection__res_partner__peppol_eas__9940
msgid "9940 - Monaco VAT number"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model.fields.selection,name:account_edi_ubl_cii.selection__res_partner__peppol_eas__9941
msgid "9941 - Montenegro VAT number"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model.fields.selection,name:account_edi_ubl_cii.selection__res_partner__peppol_eas__9942
msgid "9942 - Macedonia, the former Yugoslav Republic of VAT number"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model.fields.selection,name:account_edi_ubl_cii.selection__res_partner__peppol_eas__9943
msgid "9943 - Malta VAT number"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model.fields.selection,name:account_edi_ubl_cii.selection__res_partner__peppol_eas__9944
msgid "9944 - Netherlands VAT number"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model.fields.selection,name:account_edi_ubl_cii.selection__res_partner__peppol_eas__9945
msgid "9945 - Poland VAT number"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model.fields.selection,name:account_edi_ubl_cii.selection__res_partner__peppol_eas__9946
msgid "9946 - Portugal VAT number"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model.fields.selection,name:account_edi_ubl_cii.selection__res_partner__peppol_eas__9947
msgid "9947 - Romania VAT number"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model.fields.selection,name:account_edi_ubl_cii.selection__res_partner__peppol_eas__9948
msgid "9948 - Serbia VAT number"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model.fields.selection,name:account_edi_ubl_cii.selection__res_partner__peppol_eas__9949
msgid "9949 - Slovenia VAT number"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model.fields.selection,name:account_edi_ubl_cii.selection__res_partner__peppol_eas__9950
msgid "9950 - Slovakia VAT number"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model.fields.selection,name:account_edi_ubl_cii.selection__res_partner__peppol_eas__9951
msgid "9951 - San Marino VAT number"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model.fields.selection,name:account_edi_ubl_cii.selection__res_partner__peppol_eas__9952
msgid "9952 - Türkiye VAT number"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model.fields.selection,name:account_edi_ubl_cii.selection__res_partner__peppol_eas__9953
msgid "9953 - Holy See (Vatican City State) VAT number"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model.fields.selection,name:account_edi_ubl_cii.selection__res_partner__peppol_eas__9955
msgid "9955 - Swedish VAT number"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model.fields.selection,name:account_edi_ubl_cii.selection__res_partner__peppol_eas__9957
msgid "9957 - French VAT number"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model.fields.selection,name:account_edi_ubl_cii.selection__res_partner__peppol_eas__9959
msgid "9959 - Employer Identification Number (EIN, USA)"
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.res_config_settings_view_form
msgid "<span class=\"fa fa-lg fa-building-o\" title=\"Values set here are company-specific.\"/>"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
msgid "A payment of %s was detected."
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_a_nz
msgid "A-NZ BIS Billing 3.0"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_move_send
msgid "Account Move Send"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Articles 226 items 11 to 15 Directive 2006/112/EN"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "At least one of the following fields %s is required on %s."
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model.fields,field_description:account_edi_ubl_cii.field_account_bank_statement_line__ubl_cii_xml_id
#: model:ir.model.fields,field_description:account_edi_ubl_cii.field_account_move__ubl_cii_xml_id
#: model:ir.model.fields,field_description:account_edi_ubl_cii.field_account_payment__ubl_cii_xml_id
msgid "Attachment"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_de
msgid "BIS3 DE (XRechnung)"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model.fields,field_description:account_edi_ubl_cii.field_account_move_send__checkbox_ubl_cii_label
msgid "Checkbox Ubl Cii Label"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model.fields,field_description:account_edi_ubl_cii.field_account_move_send__checkbox_ubl_cii_xml
msgid "Checkbox Ubl Cii Xml"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model.fields,help:account_edi_ubl_cii.field_res_partner__peppol_eas
#: model:ir.model.fields,help:account_edi_ubl_cii.field_res_users__peppol_eas
msgid ""
"Code used to identify the Endpoint for Peppol BIS Billing 3.0 and its derivatives.\n"
" List available at https://docs.peppol.eu/poacc/billing/3.0/codelist/eas/"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_common
msgid ""
"Common functions for EDI documents: generate the data, the constraints, etc"
msgid "Common functions for EDI documents: generate the data, the constraints, etc"
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "ConformanceLevel"
#: model:ir.model,name:account_edi_ubl_cii.model_res_company
msgid "Companies"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_res_config_settings
msgid "Config Settings"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_res_partner
msgid "Contact"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_cii_facturx.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_20.py:0
#, python-format
msgid ""
"Could not retrieve currency: %s. Did you enable the multicurrency option and"
" activate the currency ?"
msgid "Could not retrieve currency: %s. Did you enable the multicurrency option and activate the currency?"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_cii_facturx.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_20.py:0
#, python-format
msgid "Could not retrieve the tax: %s %% for line '%s'."
msgstr ""
#. module: account_edi_ubl_cii
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_cii_facturx.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_20.py:0
#, python-format
msgid ""
"Could not retrieve the unit of measure for line with label '%s'. Did you "
"install the inventory app and enabled the 'Units of Measure' option ?"
msgstr ""
#. module: account_edi_ubl_cii
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_cii_facturx.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_20.py:0
#, python-format
msgid "Could not retrieve the vendor."
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "DocumentFileName"
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "DocumentType"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
msgid "Could not retrieve the unit of measure for line with label '%s'."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Down Payment"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Down Payments"
msgstr ""
@ -132,45 +546,48 @@ msgstr ""
msgid "E-FFF (BE)"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_format
msgid "EDI format"
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "EN 16931"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "Each invoice line shall have one and only one tax."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Each invoice line should have at least one tax."
msgstr ""
#. module: account_edi_ubl_cii
#: code:addons/account_edi_ubl_cii/models/account_edi_format.py:0
#, python-format
msgid ""
"Errors occured while creating the EDI document (format: %s). The receiver "
"might refuse it."
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.view_partner_property_form
msgid "Electronic Invoicing"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model.fields,field_description:account_edi_ubl_cii.field_account_move_send__enable_ubl_cii_xml
msgid "Enable Ubl Cii Xml"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_move_send.py:0
msgid "Errors occured while creating the EDI document (format: %s):"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Export outside the EU"
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "Factur-X PDFA Extension Schema"
#: model:ir.model.fields.selection,name:account_edi_ubl_cii.selection__res_partner__ubl_cii_format__facturx
msgid "Factur-X (CII)"
msgstr ""
#. module: account_edi_ubl_cii
@ -179,27 +596,37 @@ msgid "Factur-x/XRechnung CII 2.2.0"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid ""
"For intracommunity supply, the actual delivery date or the invoicing period "
"should be included."
msgid "For intracommunity supply, the actual delivery date or the invoicing period should be included."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "For intracommunity supply, the delivery address should be included."
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "INVOICE"
#: model:ir.model.fields,field_description:account_edi_ubl_cii.field_res_partner__ubl_cii_format
#: model:ir.model.fields,field_description:account_edi_ubl_cii.field_res_users__ubl_cii_format
msgid "Format"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
msgid "Format used to import the invoice: %s"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model.fields,field_description:account_edi_ubl_cii.field_res_company__invoice_is_ubl_cii
msgid "Generate Peppol format by default"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Intra-Community supply"
msgstr ""
@ -209,14 +636,18 @@ msgid "Invoice generated by Odoo"
msgstr ""
#. module: account_edi_ubl_cii
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "No Electronic Address Scheme (EAS) could be found for %s."
#: model:ir.model,name:account_edi_ubl_cii.model_account_move
msgid "Journal Entry"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model.fields.selection,name:account_edi_ubl_cii.selection__res_partner__ubl_cii_format__nlcius
msgid "NLCIUS"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "No gross price nor net price found for line in xml"
msgstr ""
@ -226,32 +657,64 @@ msgid "Odoo"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Output VAT, reduced rate, low"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Output VAT, reduced rate, middle"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Output VAT, reduced rate, raw fish"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Output VAT, regular rate"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_ir_actions_report
msgid "Report Action"
#: model:ir.model.fields.selection,name:account_edi_ubl_cii.selection__res_partner__ubl_cii_format__ubl_bis3
msgid "Peppol BIS Billing 3.0"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model.fields.selection,name:account_edi_ubl_cii.selection__res_partner__ubl_cii_format__ubl_a_nz
msgid "Peppol BIS Billing 3.0 A-NZ"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model.fields.selection,name:account_edi_ubl_cii.selection__res_partner__ubl_cii_format__ubl_sg
msgid "Peppol BIS Billing 3.0 SG"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model.fields,field_description:account_edi_ubl_cii.field_res_partner__peppol_endpoint
#: model:ir.model.fields,field_description:account_edi_ubl_cii.field_res_users__peppol_endpoint
msgid "Peppol Endpoint"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model.fields,field_description:account_edi_ubl_cii.field_res_partner__peppol_eas
#: model:ir.model.fields,field_description:account_edi_ubl_cii.field_res_users__peppol_eas
msgid "Peppol e-address (EAS)"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model.fields,field_description:account_edi_ubl_cii.field_res_config_settings__invoice_is_ubl_cii
msgid "Peppol format"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_sg
msgid "SG BIS Billing 3.0"
msgstr ""
#. module: account_edi_ubl_cii
@ -260,83 +723,55 @@ msgid "SI-UBL 2.0 (NLCIUS)"
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "Text"
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
msgid "Tax '%s' is invalid: %s"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid ""
"The VAT number of the supplier does not seem to be valid. It should be of "
"the form: NO179728982MVA."
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "The actual version of the Factur-X XML schema"
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "The conformance level of the embedded Factur-X data"
msgid "The VAT number of the supplier does not seem to be valid. It should be of the form: NO179728982MVA."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_cii_facturx.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_20.py:0
#, python-format
msgid "The currency '%s' is not active."
msgstr ""
#. module: account_edi_ubl_cii
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "The customer %s must have a KVK or OIN number."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "The element %s is required on %s."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "The field %s is required on %s."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_cii_facturx.py:0
#, python-format
msgid ""
"The field 'Sanitized Account Number' is required on the Recipient Bank."
msgid "The field 'Sanitized Account Number' is required on the Recipient Bank."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_cii_facturx.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_20.py:0
#, python-format
msgid ""
"The invoice has been converted into a credit note and the quantities have "
"been reverted."
msgstr ""
"La facture a été convertie en note de crédit et les quantités ont été "
"inversées."
msgid "The invoice has been converted into a credit note and the quantities have been reverted."
msgstr "La facture a été convertie en note de crédit et les quantités ont été inversées."
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "The supplier %s must have a Bronnoysund company registry."
msgstr ""
#. module: account_edi_ubl_cii
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "The supplier %s must have a KVK or OIN number."
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_20
msgid "UBL 2.0"
@ -353,37 +788,33 @@ msgid "UBL BIS Billing 3.0.12"
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_facturx_export_22
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_line_facturx_export_22
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.ubl_20_TaxCategoryType
msgid "VAT"
#: model:ir.model.fields,field_description:account_edi_ubl_cii.field_account_bank_statement_line__ubl_cii_xml_file
#: model:ir.model.fields,field_description:account_edi_ubl_cii.field_account_move__ubl_cii_xml_file
#: model:ir.model.fields,field_description:account_edi_ubl_cii.field_account_payment__ubl_cii_xml_file
msgid "UBL/CII File"
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "Version"
#: model:ir.model.fields,help:account_edi_ubl_cii.field_res_partner__peppol_endpoint
#: model:ir.model.fields,help:account_edi_ubl_cii.field_res_users__peppol_endpoint
msgid "Unique identifier used by the Peppol BIS Billing 3.0 and its derivatives, also known as 'Endpoint ID'."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_cii_facturx.py:0
#, python-format
msgid ""
"When the Canary Island General Indirect Tax (IGIC) applies, the tax rate on "
"each invoice line should be greater than 0."
msgid "When the Canary Island General Indirect Tax (IGIC) applies, the tax rate on each invoice line should be greater than 0."
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model.fields.selection,name:account_edi_ubl_cii.selection__res_partner__ubl_cii_format__xrechnung
msgid "XRechnung CIUS"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_cii_facturx.py:0
#, python-format
msgid ""
"You should include at least one tax per invoice line. [BR-CO-04]-Each "
"Invoice line (BG-25) shall be categorized with an Invoiced item VAT category"
" code (BT-151)."
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "external"
msgid "You should include at least one tax per invoice line. [BR-CO-04]-Each Invoice line (BG-25) shall be categorized with an Invoiced item VAT category code (BT-151)."
msgstr ""
#. module: account_edi_ubl_cii
@ -401,11 +832,6 @@ msgstr ""
msgid "fx"
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "name of the embedded XML invoice file"
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "urn:factur-x:pdfa:CrossIndustryDocument:invoice:1p0#"

View file

@ -1,414 +0,0 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * account_edi_ubl_cii
#
# Translators:
# Qaidjohar Barbhaya, 2023
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-02-10 08:26+0000\n"
"PO-Revision-Date: 2022-09-22 05:44+0000\n"
"Last-Translator: Qaidjohar Barbhaya, 2023\n"
"Language-Team: Gujarati (https://app.transifex.com/odoo/teams/41243/gu/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Language: gu\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "1.0"
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_facturx_export_22
msgid "42"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "<strong>Format used to import the invoice: %s</strong>"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid ""
"<strong>Format used to import the invoice: %s</strong> <p><li> %s </li></p>"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "A payment of %s was detected."
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_a_nz
msgid "A-NZ BIS Billing 3.0"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Articles 226 items 11 to 15 Directive 2006/112/EN"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "At least one of the following fields %s is required on %s."
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_de
msgid "BIS3 DE (XRechnung)"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_common
msgid ""
"Common functions for EDI documents: generate the data, the constraints, etc"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_20.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_20.py:0
#, python-format
msgid "Conditional cash/payment discount"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_cii_facturx.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_20.py:0
#, python-format
msgid ""
"Could not retrieve currency: %s. Did you enable the multicurrency option and"
" activate the currency ?"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Could not retrieve the tax: %s %% for line '%s'."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Could not retrieve the unit of measure for line with label '%s'."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Down Payment"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Down Payments"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_efff
msgid "E-FFF (BE)"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_format
msgid "EDI format"
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "EN 16931"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "Each invoice line shall have one and only one tax."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "Each invoice line should have a product or a label."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Each invoice line should have at least one tax."
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_mail_template
msgid "Email Templates"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_format.py:0
#, python-format
msgid ""
"Errors occured while creating the EDI document (format: %s). The receiver "
"might refuse it."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Export outside the EU"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_cii
msgid "Factur-x/XRechnung CII 2.2.0"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid ""
"For intracommunity supply, the actual delivery date or the invoicing period "
"should be included."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "For intracommunity supply, the delivery address should be included."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Intra-Community supply"
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "Invoice generated by Odoo"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "No Electronic Address Scheme (EAS) could be found for %s."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid ""
"No gross price, net price nor line subtotal amount found for line in xml"
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "Odoo"
msgstr "Odoo"
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_ir_actions_report
msgid "Report Action"
msgstr "Report Action"
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_sg
msgid "SG BIS Billing 3.0"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_nl
msgid "SI-UBL 2.0 (NLCIUS)"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Tax '%s' is invalid: %s"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid ""
"The VAT number of the supplier does not seem to be valid. It should be of "
"the form: NO179728982MVA."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "The VAT of the %s should be prefixed with its country code."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "The country is required for the %s."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_cii_facturx.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_20.py:0
#, python-format
msgid "The currency '%s' is not active."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "The customer %s must have a Bronnoysund company registry."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "The customer %s must have a KVK or OIN number."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "The element %s is required on %s."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "The field %s is required on %s."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_cii_facturx.py:0
#, python-format
msgid ""
"The field 'Sanitized Account Number' is required on the Recipient Bank."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_cii_facturx.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_20.py:0
#, python-format
msgid ""
"The invoice has been converted into a credit note and the quantities have "
"been reverted."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_format.py:0
#, python-format
msgid ""
"The journal in which to upload should either be a sale or a purchase "
"journal."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "The supplier %s must have a Bronnoysund company registry."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "The supplier %s must have a KVK or OIN number."
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_20
msgid "UBL 2.0"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_21
msgid "UBL 2.1"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_bis3
msgid "UBL BIS Billing 3.0.12"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_cii_facturx.py:0
#, python-format
msgid ""
"When the Canary Island General Indirect Tax (IGIC) applies, the tax rate on "
"each invoice line should be greater than 0."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_cii_facturx.py:0
#, python-format
msgid ""
"You should include at least one tax per invoice line. [BR-CO-04]-Each "
"Invoice line (BG-25) shall be categorized with an Invoiced item VAT category"
" code (BT-151)."
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "factur-x.xml"
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "fx"
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "urn:factur-x:pdfa:CrossIndustryDocument:invoice:1p0#"
msgstr ""

View file

@ -1,424 +0,0 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * account_edi_ubl_cii
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-02-06 13:31+0000\n"
"PO-Revision-Date: 2022-09-22 05:44+0000\n"
"Language-Team: Armenian (https://app.transifex.com/odoo/teams/41243/hy/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Language: hy\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "1.0"
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_facturx_export_22
msgid "42"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "<strong>Format used to import the invoice: %s</strong>"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid ""
"<strong>Format used to import the invoice: %s</strong> <p><li> %s </li></p>"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "A payment of %s was detected."
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_a_nz
msgid "A-NZ BIS Billing 3.0"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Articles 226 items 11 to 15 Directive 2006/112/EN"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "At least one of the following fields %s is required on %s."
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_de
msgid "BIS3 DE (XRechnung)"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_common
msgid ""
"Common functions for EDI documents: generate the data, the constraints, etc"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_20.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_20.py:0
#, python-format
msgid "Conditional cash/payment discount"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_cii_facturx.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_20.py:0
#, python-format
msgid ""
"Could not retrieve currency: %s. Did you enable the multicurrency option and"
" activate the currency ?"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Could not retrieve the tax: %s %% for line '%s'."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Could not retrieve the unit of measure for line with label '%s'."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Down Payment"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Down Payments"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_efff
msgid "E-FFF (BE)"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_format
msgid "EDI format"
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "EN 16931"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "Each invoice line shall have one and only one tax."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "Each invoice line should have a product or a label."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Each invoice line should have at least one tax."
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_mail_template
msgid "Email Templates"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_format.py:0
#, python-format
msgid ""
"Errors occured while creating the EDI document (format: %s). The receiver "
"might refuse it."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Export outside the EU"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_cii
msgid "Factur-x/XRechnung CII 2.2.0"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid ""
"For intracommunity supply, the actual delivery date or the invoicing period "
"should be included."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "For intracommunity supply, the delivery address should be included."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Intra-Community supply"
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "Invoice generated by Odoo"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "No Electronic Address Scheme (EAS) could be found for %s."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid ""
"No gross price, net price nor line subtotal amount found for line in xml"
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "Odoo"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_ir_actions_report
msgid "Report Action"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_sg
msgid "SG BIS Billing 3.0"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_nl
msgid "SI-UBL 2.0 (NLCIUS)"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Tax '%s' is invalid: %s"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid ""
"The VAT number of the supplier does not seem to be valid. It should be of "
"the form: NO179728982MVA."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "The VAT of the %s should be prefixed with its country code."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "The country is required for the %s."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_cii_facturx.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_20.py:0
#, python-format
msgid "The currency '%s' is not active."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "The customer %s must have a Bronnoysund company registry."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "The customer %s must have a KVK or OIN number."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "The element %s is required on %s."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "The field %s is required on %s."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_cii_facturx.py:0
#, python-format
msgid ""
"The field 'Sanitized Account Number' is required on the Recipient Bank."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid ""
"The invoice contains line(s) with a negative unit price, which is not "
"allowed. You might need to set a negative quantity instead."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_cii_facturx.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_20.py:0
#, python-format
msgid ""
"The invoice has been converted into a credit note and the quantities have "
"been reverted."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_format.py:0
#, python-format
msgid ""
"The journal in which to upload should either be a sale or a purchase "
"journal."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "The supplier %s must have a Bronnoysund company registry."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "The supplier %s must have a KVK or OIN number."
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_20
msgid "UBL 2.0"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_21
msgid "UBL 2.1"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_bis3
msgid "UBL BIS Billing 3.0.12"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_cii_facturx.py:0
#, python-format
msgid ""
"When the Canary Island General Indirect Tax (IGIC) applies, the tax rate on "
"each invoice line should be greater than 0."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_cii_facturx.py:0
#, python-format
msgid ""
"You should include at least one tax per invoice line. [BR-CO-04]-Each "
"Invoice line (BG-25) shall be categorized with an Invoiced item VAT category"
" code (BT-151)."
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "factur-x.xml"
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_line_facturx_export_22
msgid "false"
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "fx"
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "urn:factur-x:pdfa:CrossIndustryDocument:invoice:1p0#"
msgstr ""

View file

@ -1,426 +0,0 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * account_edi_ubl_cii
#
# Translators:
# Kristófer Arnþórsson, 2024
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-02-10 08:26+0000\n"
"PO-Revision-Date: 2022-09-22 05:44+0000\n"
"Last-Translator: Kristófer Arnþórsson, 2024\n"
"Language-Team: Icelandic (https://app.transifex.com/odoo/teams/41243/is/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Language: is\n"
"Plural-Forms: nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);\n"
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "1.0"
msgstr "1.0"
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_facturx_export_22
msgid "42"
msgstr "42"
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "<strong>Format used to import the invoice: %s</strong>"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid ""
"<strong>Format used to import the invoice: %s</strong> <p><li> %s </li></p>"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "A payment of %s was detected."
msgstr "Greiðsla upp á %s fannst."
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_a_nz
msgid "A-NZ BIS Billing 3.0"
msgstr "A-NZ BIS Billing 3.0"
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Articles 226 items 11 to 15 Directive 2006/112/EN"
msgstr "226. gr. 11. til 15. liður tilskipunar 2006/112/EN"
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "At least one of the following fields %s is required on %s."
msgstr "Að minnsta kosti einn af eftirfarandi reitum %s er áskilinn á %s."
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_de
msgid "BIS3 DE (XRechnung)"
msgstr "BIS3 DE (XRechnung)"
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_common
msgid ""
"Common functions for EDI documents: generate the data, the constraints, etc"
msgstr ""
"Algengar aðgerðir fyrir EDI skjöl: búa til gögnin, takmarkanirnar osfrv"
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_20.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_20.py:0
#, python-format
msgid "Conditional cash/payment discount"
msgstr "Skilyrður staðgreiðslu-/greiðsluafsláttur"
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_cii_facturx.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_20.py:0
#, python-format
msgid ""
"Could not retrieve currency: %s. Did you enable the multicurrency option and"
" activate the currency ?"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Could not retrieve the tax: %s %% for line '%s'."
msgstr "Gat ekki sótt skattinn: %s %% fyrir línu '%s'."
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Could not retrieve the unit of measure for line with label '%s'."
msgstr "Gat ekki sótt mælieiningu fyrir línu með merkimiðanum '%s'."
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Down Payment"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Down Payments"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_efff
msgid "E-FFF (BE)"
msgstr "E-FFF (BE)"
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_format
msgid "EDI format"
msgstr "EDI snið"
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "EN 16931"
msgstr "EN 16931"
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "Each invoice line shall have one and only one tax."
msgstr "Hver reikningslína skal hafa einn og einn skatt."
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "Each invoice line should have a product or a label."
msgstr "Hver reikningslína ætti að hafa vöru eða merkimiða."
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Each invoice line should have at least one tax."
msgstr "Hver reikningslína ætti að hafa að minnsta kosti einn skatt."
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_mail_template
msgid "Email Templates"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_format.py:0
#, python-format
msgid ""
"Errors occured while creating the EDI document (format: %s). The receiver "
"might refuse it."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Export outside the EU"
msgstr "Útflutningur utan EU"
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_cii
msgid "Factur-x/XRechnung CII 2.2.0"
msgstr "Factur-x/XRechnung CII 2.2.0"
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid ""
"For intracommunity supply, the actual delivery date or the invoicing period "
"should be included."
msgstr ""
"Fyrir afhendingu innan samfélags ætti raunverulegur afhendingardagur eða "
"reikningstímabilið að vera með."
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "For intracommunity supply, the delivery address should be included."
msgstr ""
"Fyrir afhendingu innan samfélags ætti afhendingarheimilið að vera með."
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Intra-Community supply"
msgstr "Framboð innan samfélags"
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "Invoice generated by Odoo"
msgstr "Reikningur búinn til af Odoo"
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "No Electronic Address Scheme (EAS) could be found for %s."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid ""
"No gross price, net price nor line subtotal amount found for line in xml"
msgstr ""
"Ekkert brúttóverð, nettóverð né heildarupphæð línu fannst fyrir línu í xml"
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "Odoo"
msgstr "Odoo"
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_ir_actions_report
msgid "Report Action"
msgstr "Tilkynna aðgerð"
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_sg
msgid "SG BIS Billing 3.0"
msgstr "SG BIS Billing 3.0"
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_nl
msgid "SI-UBL 2.0 (NLCIUS)"
msgstr "SI-UBL 2.0 (NLCIUS)"
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Tax '%s' is invalid: %s"
msgstr "Skattur '%s' er ógildur: %s"
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid ""
"The VAT number of the supplier does not seem to be valid. It should be of "
"the form: NO179728982MVA."
msgstr ""
"Virðisaukaskattsnúmer birgis virðist ekki vera gilt. Það ætti að vera á "
"formi: NO179728982MVA."
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "The VAT of the %s should be prefixed with its country code."
msgstr "VSK á %s ætti að vera með landskóða þess."
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "The country is required for the %s."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_cii_facturx.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_20.py:0
#, python-format
msgid "The currency '%s' is not active."
msgstr "Gjaldmiðillinn '%s' er ekki virkur."
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "The customer %s must have a Bronnoysund company registry."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "The customer %s must have a KVK or OIN number."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "The element %s is required on %s."
msgstr "Einingin %s er nauðsynleg á %s."
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "The field %s is required on %s."
msgstr "Reiturinn %s er nauðsynlegur á %s."
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_cii_facturx.py:0
#, python-format
msgid ""
"The field 'Sanitized Account Number' is required on the Recipient Bank."
msgstr "Reiturinn 'Hreinsað reikningsnúmer' er áskilinn á viðtakandabankanum."
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_cii_facturx.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_20.py:0
#, python-format
msgid ""
"The invoice has been converted into a credit note and the quantities have "
"been reverted."
msgstr "Reikningnum hefur verið breytt í kreditnótu og magnið afturkallað."
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_format.py:0
#, python-format
msgid ""
"The journal in which to upload should either be a sale or a purchase "
"journal."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "The supplier %s must have a Bronnoysund company registry."
msgstr "Birgir %s verður að hafa Bronnoysund fyrirtækjaskrá."
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "The supplier %s must have a KVK or OIN number."
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_20
msgid "UBL 2.0"
msgstr "UBL 2.0"
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_21
msgid "UBL 2.1"
msgstr "UBL 2.1"
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_bis3
msgid "UBL BIS Billing 3.0.12"
msgstr "UBL BIS innheimta 3.0.12"
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_cii_facturx.py:0
#, python-format
msgid ""
"When the Canary Island General Indirect Tax (IGIC) applies, the tax rate on "
"each invoice line should be greater than 0."
msgstr ""
"Þegar almennur óbeinn skattur á Kanaríeyjum (IGIC) á við ætti "
"skatthlutfallið á hverri reikningslínu að vera hærra en 0."
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_cii_facturx.py:0
#, python-format
msgid ""
"You should include at least one tax per invoice line. [BR-CO-04]-Each "
"Invoice line (BG-25) shall be categorized with an Invoiced item VAT category"
" code (BT-151)."
msgstr ""
"Þú ættir að velja að minnsta kosti einn skatt á hverja reikningslínu. [BR-"
"CO-04]-Hver reikningslína (BG-25) skal flokkuð með VSK flokkanúmeri "
"reikningsfærðra hluta (BT-151)."
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "factur-x.xml"
msgstr "factur-x.xml"
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "fx"
msgstr "fx"
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "urn:factur-x:pdfa:CrossIndustryDocument:invoice:1p0#"
msgstr "urn:factur-x:pdfa:CrossIndustryDocument:invoice:1p0#"

File diff suppressed because it is too large Load diff

View file

@ -1,414 +0,0 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * account_edi_ubl_cii
#
# Translators:
# Lux Sok <sok.lux@gmail.com>, 2023
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-02-10 08:26+0000\n"
"PO-Revision-Date: 2022-09-22 05:44+0000\n"
"Last-Translator: Lux Sok <sok.lux@gmail.com>, 2023\n"
"Language-Team: Khmer (https://app.transifex.com/odoo/teams/41243/km/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Language: km\n"
"Plural-Forms: nplurals=1; plural=0;\n"
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "1.0"
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_facturx_export_22
msgid "42"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "<strong>Format used to import the invoice: %s</strong>"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid ""
"<strong>Format used to import the invoice: %s</strong> <p><li> %s </li></p>"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "A payment of %s was detected."
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_a_nz
msgid "A-NZ BIS Billing 3.0"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Articles 226 items 11 to 15 Directive 2006/112/EN"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "At least one of the following fields %s is required on %s."
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_de
msgid "BIS3 DE (XRechnung)"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_common
msgid ""
"Common functions for EDI documents: generate the data, the constraints, etc"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_20.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_20.py:0
#, python-format
msgid "Conditional cash/payment discount"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_cii_facturx.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_20.py:0
#, python-format
msgid ""
"Could not retrieve currency: %s. Did you enable the multicurrency option and"
" activate the currency ?"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Could not retrieve the tax: %s %% for line '%s'."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Could not retrieve the unit of measure for line with label '%s'."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Down Payment"
msgstr "លុយ​កក់"
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Down Payments"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_efff
msgid "E-FFF (BE)"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_format
msgid "EDI format"
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "EN 16931"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "Each invoice line shall have one and only one tax."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "Each invoice line should have a product or a label."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Each invoice line should have at least one tax."
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_mail_template
msgid "Email Templates"
msgstr "គំរូសារអេឡិចត្រូនិច"
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_format.py:0
#, python-format
msgid ""
"Errors occured while creating the EDI document (format: %s). The receiver "
"might refuse it."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Export outside the EU"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_cii
msgid "Factur-x/XRechnung CII 2.2.0"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid ""
"For intracommunity supply, the actual delivery date or the invoicing period "
"should be included."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "For intracommunity supply, the delivery address should be included."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Intra-Community supply"
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "Invoice generated by Odoo"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "No Electronic Address Scheme (EAS) could be found for %s."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid ""
"No gross price, net price nor line subtotal amount found for line in xml"
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "Odoo"
msgstr "Odoo"
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_ir_actions_report
msgid "Report Action"
msgstr "ឯកសារសកម្មភាព"
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_sg
msgid "SG BIS Billing 3.0"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_nl
msgid "SI-UBL 2.0 (NLCIUS)"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Tax '%s' is invalid: %s"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid ""
"The VAT number of the supplier does not seem to be valid. It should be of "
"the form: NO179728982MVA."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "The VAT of the %s should be prefixed with its country code."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "The country is required for the %s."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_cii_facturx.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_20.py:0
#, python-format
msgid "The currency '%s' is not active."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "The customer %s must have a Bronnoysund company registry."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "The customer %s must have a KVK or OIN number."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "The element %s is required on %s."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "The field %s is required on %s."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_cii_facturx.py:0
#, python-format
msgid ""
"The field 'Sanitized Account Number' is required on the Recipient Bank."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_cii_facturx.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_20.py:0
#, python-format
msgid ""
"The invoice has been converted into a credit note and the quantities have "
"been reverted."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_format.py:0
#, python-format
msgid ""
"The journal in which to upload should either be a sale or a purchase "
"journal."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "The supplier %s must have a Bronnoysund company registry."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "The supplier %s must have a KVK or OIN number."
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_20
msgid "UBL 2.0"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_21
msgid "UBL 2.1"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_bis3
msgid "UBL BIS Billing 3.0.12"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_cii_facturx.py:0
#, python-format
msgid ""
"When the Canary Island General Indirect Tax (IGIC) applies, the tax rate on "
"each invoice line should be greater than 0."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_cii_facturx.py:0
#, python-format
msgid ""
"You should include at least one tax per invoice line. [BR-CO-04]-Each "
"Invoice line (BG-25) shall be categorized with an Invoiced item VAT category"
" code (BT-151)."
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "factur-x.xml"
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "fx"
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "urn:factur-x:pdfa:CrossIndustryDocument:invoice:1p0#"
msgstr ""

File diff suppressed because it is too large Load diff

View file

@ -1,414 +0,0 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * account_edi_ubl_cii
#
# Translators:
# sackda chanthasombath, 2023
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-02-10 08:26+0000\n"
"PO-Revision-Date: 2022-09-22 05:44+0000\n"
"Last-Translator: sackda chanthasombath, 2023\n"
"Language-Team: Lao (https://app.transifex.com/odoo/teams/41243/lo/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Language: lo\n"
"Plural-Forms: nplurals=1; plural=0;\n"
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "1.0"
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_facturx_export_22
msgid "42"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "<strong>Format used to import the invoice: %s</strong>"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid ""
"<strong>Format used to import the invoice: %s</strong> <p><li> %s </li></p>"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "A payment of %s was detected."
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_a_nz
msgid "A-NZ BIS Billing 3.0"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Articles 226 items 11 to 15 Directive 2006/112/EN"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "At least one of the following fields %s is required on %s."
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_de
msgid "BIS3 DE (XRechnung)"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_common
msgid ""
"Common functions for EDI documents: generate the data, the constraints, etc"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_20.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_20.py:0
#, python-format
msgid "Conditional cash/payment discount"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_cii_facturx.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_20.py:0
#, python-format
msgid ""
"Could not retrieve currency: %s. Did you enable the multicurrency option and"
" activate the currency ?"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Could not retrieve the tax: %s %% for line '%s'."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Could not retrieve the unit of measure for line with label '%s'."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Down Payment"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Down Payments"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_efff
msgid "E-FFF (BE)"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_format
msgid "EDI format"
msgstr "ຮູບແບບ ອີດີໄອ"
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "EN 16931"
msgstr "ອີເອັນ 16931"
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "Each invoice line shall have one and only one tax."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "Each invoice line should have a product or a label."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Each invoice line should have at least one tax."
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_mail_template
msgid "Email Templates"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_format.py:0
#, python-format
msgid ""
"Errors occured while creating the EDI document (format: %s). The receiver "
"might refuse it."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Export outside the EU"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_cii
msgid "Factur-x/XRechnung CII 2.2.0"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid ""
"For intracommunity supply, the actual delivery date or the invoicing period "
"should be included."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "For intracommunity supply, the delivery address should be included."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Intra-Community supply"
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "Invoice generated by Odoo"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "No Electronic Address Scheme (EAS) could be found for %s."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid ""
"No gross price, net price nor line subtotal amount found for line in xml"
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "Odoo"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_ir_actions_report
msgid "Report Action"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_sg
msgid "SG BIS Billing 3.0"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_nl
msgid "SI-UBL 2.0 (NLCIUS)"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Tax '%s' is invalid: %s"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid ""
"The VAT number of the supplier does not seem to be valid. It should be of "
"the form: NO179728982MVA."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "The VAT of the %s should be prefixed with its country code."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "The country is required for the %s."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_cii_facturx.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_20.py:0
#, python-format
msgid "The currency '%s' is not active."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "The customer %s must have a Bronnoysund company registry."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "The customer %s must have a KVK or OIN number."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "The element %s is required on %s."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "The field %s is required on %s."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_cii_facturx.py:0
#, python-format
msgid ""
"The field 'Sanitized Account Number' is required on the Recipient Bank."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_cii_facturx.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_20.py:0
#, python-format
msgid ""
"The invoice has been converted into a credit note and the quantities have "
"been reverted."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_format.py:0
#, python-format
msgid ""
"The journal in which to upload should either be a sale or a purchase "
"journal."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "The supplier %s must have a Bronnoysund company registry."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "The supplier %s must have a KVK or OIN number."
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_20
msgid "UBL 2.0"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_21
msgid "UBL 2.1"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_bis3
msgid "UBL BIS Billing 3.0.12"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_cii_facturx.py:0
#, python-format
msgid ""
"When the Canary Island General Indirect Tax (IGIC) applies, the tax rate on "
"each invoice line should be greater than 0."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_cii_facturx.py:0
#, python-format
msgid ""
"You should include at least one tax per invoice line. [BR-CO-04]-Each "
"Invoice line (BG-25) shall be categorized with an Invoiced item VAT category"
" code (BT-151)."
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "factur-x.xml"
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "fx"
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "urn:factur-x:pdfa:CrossIndustryDocument:invoice:1p0#"
msgstr ""

View file

@ -1,414 +0,0 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * account_edi_ubl_cii
#
# Translators:
# Niyas Raphy, 2023
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-02-10 08:26+0000\n"
"PO-Revision-Date: 2022-09-22 05:44+0000\n"
"Last-Translator: Niyas Raphy, 2023\n"
"Language-Team: Malayalam (https://app.transifex.com/odoo/teams/41243/ml/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Language: ml\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "1.0"
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_facturx_export_22
msgid "42"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "<strong>Format used to import the invoice: %s</strong>"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid ""
"<strong>Format used to import the invoice: %s</strong> <p><li> %s </li></p>"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "A payment of %s was detected."
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_a_nz
msgid "A-NZ BIS Billing 3.0"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Articles 226 items 11 to 15 Directive 2006/112/EN"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "At least one of the following fields %s is required on %s."
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_de
msgid "BIS3 DE (XRechnung)"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_common
msgid ""
"Common functions for EDI documents: generate the data, the constraints, etc"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_20.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_20.py:0
#, python-format
msgid "Conditional cash/payment discount"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_cii_facturx.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_20.py:0
#, python-format
msgid ""
"Could not retrieve currency: %s. Did you enable the multicurrency option and"
" activate the currency ?"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Could not retrieve the tax: %s %% for line '%s'."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Could not retrieve the unit of measure for line with label '%s'."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Down Payment"
msgstr "ഡൌൺ പേയ്മെന്റ് "
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Down Payments"
msgstr "ഡൌൺ പേയ്മെന്റ് "
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_efff
msgid "E-FFF (BE)"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_format
msgid "EDI format"
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "EN 16931"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "Each invoice line shall have one and only one tax."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "Each invoice line should have a product or a label."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Each invoice line should have at least one tax."
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_mail_template
msgid "Email Templates"
msgstr "ഇമെയിൽ ടെംപ്ലേറ്റുകൾ"
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_format.py:0
#, python-format
msgid ""
"Errors occured while creating the EDI document (format: %s). The receiver "
"might refuse it."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Export outside the EU"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_cii
msgid "Factur-x/XRechnung CII 2.2.0"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid ""
"For intracommunity supply, the actual delivery date or the invoicing period "
"should be included."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "For intracommunity supply, the delivery address should be included."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Intra-Community supply"
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "Invoice generated by Odoo"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "No Electronic Address Scheme (EAS) could be found for %s."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid ""
"No gross price, net price nor line subtotal amount found for line in xml"
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "Odoo"
msgstr "ഒഡൂ"
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_ir_actions_report
msgid "Report Action"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_sg
msgid "SG BIS Billing 3.0"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_nl
msgid "SI-UBL 2.0 (NLCIUS)"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Tax '%s' is invalid: %s"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid ""
"The VAT number of the supplier does not seem to be valid. It should be of "
"the form: NO179728982MVA."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "The VAT of the %s should be prefixed with its country code."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "The country is required for the %s."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_cii_facturx.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_20.py:0
#, python-format
msgid "The currency '%s' is not active."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "The customer %s must have a Bronnoysund company registry."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "The customer %s must have a KVK or OIN number."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "The element %s is required on %s."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "The field %s is required on %s."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_cii_facturx.py:0
#, python-format
msgid ""
"The field 'Sanitized Account Number' is required on the Recipient Bank."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_cii_facturx.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_20.py:0
#, python-format
msgid ""
"The invoice has been converted into a credit note and the quantities have "
"been reverted."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_format.py:0
#, python-format
msgid ""
"The journal in which to upload should either be a sale or a purchase "
"journal."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "The supplier %s must have a Bronnoysund company registry."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "The supplier %s must have a KVK or OIN number."
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_20
msgid "UBL 2.0"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_21
msgid "UBL 2.1"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_bis3
msgid "UBL BIS Billing 3.0.12"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_cii_facturx.py:0
#, python-format
msgid ""
"When the Canary Island General Indirect Tax (IGIC) applies, the tax rate on "
"each invoice line should be greater than 0."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_cii_facturx.py:0
#, python-format
msgid ""
"You should include at least one tax per invoice line. [BR-CO-04]-Each "
"Invoice line (BG-25) shall be categorized with an Invoiced item VAT category"
" code (BT-151)."
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "factur-x.xml"
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "fx"
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "urn:factur-x:pdfa:CrossIndustryDocument:invoice:1p0#"
msgstr ""

View file

@ -1,416 +0,0 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * account_edi_ubl_cii
#
# Translators:
# Mehjabin Farsana, 2022
# Imran Pathan, 2024
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-02-10 08:26+0000\n"
"PO-Revision-Date: 2022-09-22 05:44+0000\n"
"Last-Translator: Imran Pathan, 2024\n"
"Language-Team: Malay (https://app.transifex.com/odoo/teams/41243/ms/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Language: ms\n"
"Plural-Forms: nplurals=1; plural=0;\n"
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "1.0"
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_facturx_export_22
msgid "42"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "<strong>Format used to import the invoice: %s</strong>"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid ""
"<strong>Format used to import the invoice: %s</strong> <p><li> %s </li></p>"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "A payment of %s was detected."
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_a_nz
msgid "A-NZ BIS Billing 3.0"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Articles 226 items 11 to 15 Directive 2006/112/EN"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "At least one of the following fields %s is required on %s."
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_de
msgid "BIS3 DE (XRechnung)"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_common
msgid ""
"Common functions for EDI documents: generate the data, the constraints, etc"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_20.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_20.py:0
#, python-format
msgid "Conditional cash/payment discount"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_cii_facturx.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_20.py:0
#, python-format
msgid ""
"Could not retrieve currency: %s. Did you enable the multicurrency option and"
" activate the currency ?"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Could not retrieve the tax: %s %% for line '%s'."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Could not retrieve the unit of measure for line with label '%s'."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Down Payment"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Down Payments"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_efff
msgid "E-FFF (BE)"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_format
msgid "EDI format"
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "EN 16931"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "Each invoice line shall have one and only one tax."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "Each invoice line should have a product or a label."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Each invoice line should have at least one tax."
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_mail_template
msgid "Email Templates"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_format.py:0
#, python-format
msgid ""
"Errors occured while creating the EDI document (format: %s). The receiver "
"might refuse it."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Export outside the EU"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_cii
msgid "Factur-x/XRechnung CII 2.2.0"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid ""
"For intracommunity supply, the actual delivery date or the invoicing period "
"should be included."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "For intracommunity supply, the delivery address should be included."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Intra-Community supply"
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "Invoice generated by Odoo"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "No Electronic Address Scheme (EAS) could be found for %s."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid ""
"No gross price, net price nor line subtotal amount found for line in xml"
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "Odoo"
msgstr "Odoo"
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_ir_actions_report
msgid "Report Action"
msgstr "Report Action"
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_sg
msgid "SG BIS Billing 3.0"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_nl
msgid "SI-UBL 2.0 (NLCIUS)"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Tax '%s' is invalid: %s"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid ""
"The VAT number of the supplier does not seem to be valid. It should be of "
"the form: NO179728982MVA."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "The VAT of the %s should be prefixed with its country code."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "The country is required for the %s."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_cii_facturx.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_20.py:0
#, python-format
msgid "The currency '%s' is not active."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "The customer %s must have a Bronnoysund company registry."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "The customer %s must have a KVK or OIN number."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "The element %s is required on %s."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "The field %s is required on %s."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_cii_facturx.py:0
#, python-format
msgid ""
"The field 'Sanitized Account Number' is required on the Recipient Bank."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_cii_facturx.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_20.py:0
#, python-format
msgid ""
"The invoice has been converted into a credit note and the quantities have "
"been reverted."
msgstr ""
"Invois telah ditukar menjadi nota kredit dan kuantiti telah dikembalikan."
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_format.py:0
#, python-format
msgid ""
"The journal in which to upload should either be a sale or a purchase "
"journal."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "The supplier %s must have a Bronnoysund company registry."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "The supplier %s must have a KVK or OIN number."
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_20
msgid "UBL 2.0"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_21
msgid "UBL 2.1"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_bis3
msgid "UBL BIS Billing 3.0.12"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_cii_facturx.py:0
#, python-format
msgid ""
"When the Canary Island General Indirect Tax (IGIC) applies, the tax rate on "
"each invoice line should be greater than 0."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_cii_facturx.py:0
#, python-format
msgid ""
"You should include at least one tax per invoice line. [BR-CO-04]-Each "
"Invoice line (BG-25) shall be categorized with an Invoiced item VAT category"
" code (BT-151)."
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "factur-x.xml"
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "fx"
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "urn:factur-x:pdfa:CrossIndustryDocument:invoice:1p0#"
msgstr ""

File diff suppressed because it is too large Load diff

View file

@ -1,410 +0,0 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * account_edi_ubl_cii
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-02-10 08:26+0000\n"
"PO-Revision-Date: 2022-09-22 05:44+0000\n"
"Language-Team: Norwegian (https://app.transifex.com/odoo/teams/41243/no/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Language: no\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "1.0"
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_facturx_export_22
msgid "42"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "<strong>Format used to import the invoice: %s</strong>"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid ""
"<strong>Format used to import the invoice: %s</strong> <p><li> %s </li></p>"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "A payment of %s was detected."
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_a_nz
msgid "A-NZ BIS Billing 3.0"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Articles 226 items 11 to 15 Directive 2006/112/EN"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "At least one of the following fields %s is required on %s."
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_de
msgid "BIS3 DE (XRechnung)"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_common
msgid ""
"Common functions for EDI documents: generate the data, the constraints, etc"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_20.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_20.py:0
#, python-format
msgid "Conditional cash/payment discount"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_cii_facturx.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_20.py:0
#, python-format
msgid ""
"Could not retrieve currency: %s. Did you enable the multicurrency option and"
" activate the currency ?"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Could not retrieve the tax: %s %% for line '%s'."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Could not retrieve the unit of measure for line with label '%s'."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Down Payment"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Down Payments"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_efff
msgid "E-FFF (BE)"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_format
msgid "EDI format"
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "EN 16931"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "Each invoice line shall have one and only one tax."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "Each invoice line should have a product or a label."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Each invoice line should have at least one tax."
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_mail_template
msgid "Email Templates"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_format.py:0
#, python-format
msgid ""
"Errors occured while creating the EDI document (format: %s). The receiver "
"might refuse it."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Export outside the EU"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_cii
msgid "Factur-x/XRechnung CII 2.2.0"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid ""
"For intracommunity supply, the actual delivery date or the invoicing period "
"should be included."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "For intracommunity supply, the delivery address should be included."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Intra-Community supply"
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "Invoice generated by Odoo"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "No Electronic Address Scheme (EAS) could be found for %s."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid ""
"No gross price, net price nor line subtotal amount found for line in xml"
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "Odoo"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_ir_actions_report
msgid "Report Action"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_sg
msgid "SG BIS Billing 3.0"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_nl
msgid "SI-UBL 2.0 (NLCIUS)"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Tax '%s' is invalid: %s"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid ""
"The VAT number of the supplier does not seem to be valid. It should be of "
"the form: NO179728982MVA."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "The VAT of the %s should be prefixed with its country code."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "The country is required for the %s."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_cii_facturx.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_20.py:0
#, python-format
msgid "The currency '%s' is not active."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "The customer %s must have a Bronnoysund company registry."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "The customer %s must have a KVK or OIN number."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "The element %s is required on %s."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "The field %s is required on %s."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_cii_facturx.py:0
#, python-format
msgid ""
"The field 'Sanitized Account Number' is required on the Recipient Bank."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_cii_facturx.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_20.py:0
#, python-format
msgid ""
"The invoice has been converted into a credit note and the quantities have "
"been reverted."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_format.py:0
#, python-format
msgid ""
"The journal in which to upload should either be a sale or a purchase "
"journal."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "The supplier %s must have a Bronnoysund company registry."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "The supplier %s must have a KVK or OIN number."
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_20
msgid "UBL 2.0"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_21
msgid "UBL 2.1"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_bis3
msgid "UBL BIS Billing 3.0.12"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_cii_facturx.py:0
#, python-format
msgid ""
"When the Canary Island General Indirect Tax (IGIC) applies, the tax rate on "
"each invoice line should be greater than 0."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_cii_facturx.py:0
#, python-format
msgid ""
"You should include at least one tax per invoice line. [BR-CO-04]-Each "
"Invoice line (BG-25) shall be categorized with an Invoiced item VAT category"
" code (BT-151)."
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "factur-x.xml"
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "fx"
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "urn:factur-x:pdfa:CrossIndustryDocument:invoice:1p0#"
msgstr ""

View file

@ -1,432 +0,0 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * account_edi_ubl_cii
#
# Translators:
# Martin Trigaux, 2022
# Dragan Vukosavljevic <dragan.vukosavljevic@gmail.com>, 2022
# Milan Bojovic <mbojovic@outlook.com>, 2023
# コフスタジオ, 2024
# Geoinfo d.o.o. <geoinfobih@gmail.com>, 2024
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-02-10 08:26+0000\n"
"PO-Revision-Date: 2022-09-22 05:44+0000\n"
"Last-Translator: Geoinfo d.o.o. <geoinfobih@gmail.com>, 2024\n"
"Language-Team: Serbian (https://app.transifex.com/odoo/teams/41243/sr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Language: sr\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "1.0"
msgstr "1.0"
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_facturx_export_22
msgid "42"
msgstr "42"
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "<strong>Format used to import the invoice: %s</strong>"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid ""
"<strong>Format used to import the invoice: %s</strong> <p><li> %s </li></p>"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "A payment of %s was detected."
msgstr "A payment of %s was detected."
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_a_nz
msgid "A-NZ BIS Billing 3.0"
msgstr "A-NZ BIS Billing 3.0"
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Articles 226 items 11 to 15 Directive 2006/112/EN"
msgstr "Articles 226 items 11 to 15 Directive 2006/112/EN"
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "At least one of the following fields %s is required on %s."
msgstr "At least one of the following fields %s is required on %s."
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_de
msgid "BIS3 DE (XRechnung)"
msgstr "BIS3 DE (XRechnung)"
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_common
msgid ""
"Common functions for EDI documents: generate the data, the constraints, etc"
msgstr ""
"Common functions for EDI documents: generate the data, the constraints, etc"
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_20.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_20.py:0
#, python-format
msgid "Conditional cash/payment discount"
msgstr "Conditional cash/payment discount"
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_cii_facturx.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_20.py:0
#, python-format
msgid ""
"Could not retrieve currency: %s. Did you enable the multicurrency option and"
" activate the currency ?"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Could not retrieve the tax: %s %% for line '%s'."
msgstr "Could not retrieve the tax: %s %% for line '%s'."
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Could not retrieve the unit of measure for line with label '%s'."
msgstr "Could not retrieve the unit of measure for line with label '%s'."
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Down Payment"
msgstr "Down Payment"
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Down Payments"
msgstr "Avansa"
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_efff
msgid "E-FFF (BE)"
msgstr "E-FFF (BE)"
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_format
msgid "EDI format"
msgstr "EDI format"
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "EN 16931"
msgstr "EN 16931"
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "Each invoice line shall have one and only one tax."
msgstr "Each invoice line shall have one and only one tax."
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "Each invoice line should have a product or a label."
msgstr "Each invoice line should have a product or a label."
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Each invoice line should have at least one tax."
msgstr "Each invoice line should have at least one tax."
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_mail_template
msgid "Email Templates"
msgstr "Sabloni Poruka"
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_format.py:0
#, python-format
msgid ""
"Errors occured while creating the EDI document (format: %s). The receiver "
"might refuse it."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Export outside the EU"
msgstr "Export outside the EU"
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_cii
msgid "Factur-x/XRechnung CII 2.2.0"
msgstr "Factur-x/XRechnung CII 2.2.0"
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid ""
"For intracommunity supply, the actual delivery date or the invoicing period "
"should be included."
msgstr ""
"For intracommunity supply, the actual delivery date or the invoicing period "
"should be included."
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "For intracommunity supply, the delivery address should be included."
msgstr "For intracommunity supply, the delivery address should be included."
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Intra-Community supply"
msgstr "Intra-Community supply"
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "Invoice generated by Odoo"
msgstr "Invoice generated by Odoo"
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "No Electronic Address Scheme (EAS) could be found for %s."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid ""
"No gross price, net price nor line subtotal amount found for line in xml"
msgstr ""
"No gross price, net price nor line subtotal amount found for line in xml"
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "Odoo"
msgstr "Odoo"
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_ir_actions_report
msgid "Report Action"
msgstr "Izveštaj o akciji"
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_sg
msgid "SG BIS Billing 3.0"
msgstr "SG BIS Billing 3.0"
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_nl
msgid "SI-UBL 2.0 (NLCIUS)"
msgstr "SI-UBL 2.0 (NLCIUS)"
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Tax '%s' is invalid: %s"
msgstr "Tax '%s' is invalid: %s"
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid ""
"The VAT number of the supplier does not seem to be valid. It should be of "
"the form: NO179728982MVA."
msgstr ""
"The VAT number of the supplier does not seem to be valid. It should be of "
"the form: NO179728982MVA."
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "The VAT of the %s should be prefixed with its country code."
msgstr "PDV za %s treba da ima prefiks svoje zemlje."
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "The country is required for the %s."
msgstr "Država je obavezna za %s."
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_cii_facturx.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_20.py:0
#, python-format
msgid "The currency '%s' is not active."
msgstr "The currency '%s' is not active."
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "The customer %s must have a Bronnoysund company registry."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "The customer %s must have a KVK or OIN number."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "The element %s is required on %s."
msgstr "The element %s is required on %s."
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "The field %s is required on %s."
msgstr "The field %s is required on %s."
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_cii_facturx.py:0
#, python-format
msgid ""
"The field 'Sanitized Account Number' is required on the Recipient Bank."
msgstr ""
"The field 'Sanitized Account Number' is required on the Recipient Bank."
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_cii_facturx.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_20.py:0
#, python-format
msgid ""
"The invoice has been converted into a credit note and the quantities have "
"been reverted."
msgstr ""
"The invoice has been converted into a credit note and the quantities have "
"been reverted."
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_format.py:0
#, python-format
msgid ""
"The journal in which to upload should either be a sale or a purchase "
"journal."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "The supplier %s must have a Bronnoysund company registry."
msgstr "The supplier %s must have a Bronnoysund company registry."
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "The supplier %s must have a KVK or OIN number."
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_20
msgid "UBL 2.0"
msgstr "UBL 2.0"
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_21
msgid "UBL 2.1"
msgstr "UBL 2.1"
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_bis3
msgid "UBL BIS Billing 3.0.12"
msgstr "UBL BIS Billing 3.0.12"
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_cii_facturx.py:0
#, python-format
msgid ""
"When the Canary Island General Indirect Tax (IGIC) applies, the tax rate on "
"each invoice line should be greater than 0."
msgstr ""
"When the Canary Island General Indirect Tax (IGIC) applies, the tax rate on "
"each invoice line should be greater than 0."
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_cii_facturx.py:0
#, python-format
msgid ""
"You should include at least one tax per invoice line. [BR-CO-04]-Each "
"Invoice line (BG-25) shall be categorized with an Invoiced item VAT category"
" code (BT-151)."
msgstr ""
"You should include at least one tax per invoice line. [BR-CO-04]-Each "
"Invoice line (BG-25) shall be categorized with an Invoiced item VAT category"
" code (BT-151)."
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "factur-x.xml"
msgstr "factur-x.xml"
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "fx"
msgstr "fx"
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "urn:factur-x:pdfa:CrossIndustryDocument:invoice:1p0#"
msgstr "urn:factur-x:pdfa:CrossIndustryDocument:invoice:1p0#"

File diff suppressed because it is too large Load diff

View file

@ -1,424 +0,0 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * account_edi_ubl_cii
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-02-06 13:31+0000\n"
"PO-Revision-Date: 2022-09-22 05:44+0000\n"
"Language-Team: Swahili (https://app.transifex.com/odoo/teams/41243/sw/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Language: sw\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "1.0"
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_facturx_export_22
msgid "42"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "<strong>Format used to import the invoice: %s</strong>"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid ""
"<strong>Format used to import the invoice: %s</strong> <p><li> %s </li></p>"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "A payment of %s was detected."
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_a_nz
msgid "A-NZ BIS Billing 3.0"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Articles 226 items 11 to 15 Directive 2006/112/EN"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "At least one of the following fields %s is required on %s."
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_de
msgid "BIS3 DE (XRechnung)"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_common
msgid ""
"Common functions for EDI documents: generate the data, the constraints, etc"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_20.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_20.py:0
#, python-format
msgid "Conditional cash/payment discount"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_cii_facturx.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_20.py:0
#, python-format
msgid ""
"Could not retrieve currency: %s. Did you enable the multicurrency option and"
" activate the currency ?"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Could not retrieve the tax: %s %% for line '%s'."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Could not retrieve the unit of measure for line with label '%s'."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Down Payment"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Down Payments"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_efff
msgid "E-FFF (BE)"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_format
msgid "EDI format"
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "EN 16931"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "Each invoice line shall have one and only one tax."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "Each invoice line should have a product or a label."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Each invoice line should have at least one tax."
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_mail_template
msgid "Email Templates"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_format.py:0
#, python-format
msgid ""
"Errors occured while creating the EDI document (format: %s). The receiver "
"might refuse it."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Export outside the EU"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_cii
msgid "Factur-x/XRechnung CII 2.2.0"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid ""
"For intracommunity supply, the actual delivery date or the invoicing period "
"should be included."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "For intracommunity supply, the delivery address should be included."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Intra-Community supply"
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "Invoice generated by Odoo"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "No Electronic Address Scheme (EAS) could be found for %s."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid ""
"No gross price, net price nor line subtotal amount found for line in xml"
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "Odoo"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_ir_actions_report
msgid "Report Action"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_sg
msgid "SG BIS Billing 3.0"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_nl
msgid "SI-UBL 2.0 (NLCIUS)"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Tax '%s' is invalid: %s"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid ""
"The VAT number of the supplier does not seem to be valid. It should be of "
"the form: NO179728982MVA."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "The VAT of the %s should be prefixed with its country code."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "The country is required for the %s."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_cii_facturx.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_20.py:0
#, python-format
msgid "The currency '%s' is not active."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "The customer %s must have a Bronnoysund company registry."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "The customer %s must have a KVK or OIN number."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "The element %s is required on %s."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "The field %s is required on %s."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_cii_facturx.py:0
#, python-format
msgid ""
"The field 'Sanitized Account Number' is required on the Recipient Bank."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid ""
"The invoice contains line(s) with a negative unit price, which is not "
"allowed. You might need to set a negative quantity instead."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_cii_facturx.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_20.py:0
#, python-format
msgid ""
"The invoice has been converted into a credit note and the quantities have "
"been reverted."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_format.py:0
#, python-format
msgid ""
"The journal in which to upload should either be a sale or a purchase "
"journal."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "The supplier %s must have a Bronnoysund company registry."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "The supplier %s must have a KVK or OIN number."
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_20
msgid "UBL 2.0"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_21
msgid "UBL 2.1"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_bis3
msgid "UBL BIS Billing 3.0.12"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_cii_facturx.py:0
#, python-format
msgid ""
"When the Canary Island General Indirect Tax (IGIC) applies, the tax rate on "
"each invoice line should be greater than 0."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_cii_facturx.py:0
#, python-format
msgid ""
"You should include at least one tax per invoice line. [BR-CO-04]-Each "
"Invoice line (BG-25) shall be categorized with an Invoiced item VAT category"
" code (BT-151)."
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "factur-x.xml"
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_line_facturx_export_22
msgid "false"
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "fx"
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "urn:factur-x:pdfa:CrossIndustryDocument:invoice:1p0#"
msgstr ""

View file

@ -1,424 +0,0 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * account_edi_ubl_cii
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-02-06 13:31+0000\n"
"PO-Revision-Date: 2022-09-22 05:44+0000\n"
"Language-Team: Tamil (https://app.transifex.com/odoo/teams/41243/ta/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Language: ta\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "1.0"
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_facturx_export_22
msgid "42"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "<strong>Format used to import the invoice: %s</strong>"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid ""
"<strong>Format used to import the invoice: %s</strong> <p><li> %s </li></p>"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "A payment of %s was detected."
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_a_nz
msgid "A-NZ BIS Billing 3.0"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Articles 226 items 11 to 15 Directive 2006/112/EN"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "At least one of the following fields %s is required on %s."
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_de
msgid "BIS3 DE (XRechnung)"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_common
msgid ""
"Common functions for EDI documents: generate the data, the constraints, etc"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_20.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_20.py:0
#, python-format
msgid "Conditional cash/payment discount"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_cii_facturx.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_20.py:0
#, python-format
msgid ""
"Could not retrieve currency: %s. Did you enable the multicurrency option and"
" activate the currency ?"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Could not retrieve the tax: %s %% for line '%s'."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Could not retrieve the unit of measure for line with label '%s'."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Down Payment"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Down Payments"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_efff
msgid "E-FFF (BE)"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_format
msgid "EDI format"
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "EN 16931"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "Each invoice line shall have one and only one tax."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "Each invoice line should have a product or a label."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Each invoice line should have at least one tax."
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_mail_template
msgid "Email Templates"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_format.py:0
#, python-format
msgid ""
"Errors occured while creating the EDI document (format: %s). The receiver "
"might refuse it."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Export outside the EU"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_cii
msgid "Factur-x/XRechnung CII 2.2.0"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid ""
"For intracommunity supply, the actual delivery date or the invoicing period "
"should be included."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "For intracommunity supply, the delivery address should be included."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Intra-Community supply"
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "Invoice generated by Odoo"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "No Electronic Address Scheme (EAS) could be found for %s."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid ""
"No gross price, net price nor line subtotal amount found for line in xml"
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "Odoo"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_ir_actions_report
msgid "Report Action"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_sg
msgid "SG BIS Billing 3.0"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_nl
msgid "SI-UBL 2.0 (NLCIUS)"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "Tax '%s' is invalid: %s"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid ""
"The VAT number of the supplier does not seem to be valid. It should be of "
"the form: NO179728982MVA."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "The VAT of the %s should be prefixed with its country code."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "The country is required for the %s."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_cii_facturx.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_20.py:0
#, python-format
msgid "The currency '%s' is not active."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "The customer %s must have a Bronnoysund company registry."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "The customer %s must have a KVK or OIN number."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "The element %s is required on %s."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_common.py:0
#, python-format
msgid "The field %s is required on %s."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_cii_facturx.py:0
#, python-format
msgid ""
"The field 'Sanitized Account Number' is required on the Recipient Bank."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid ""
"The invoice contains line(s) with a negative unit price, which is not "
"allowed. You might need to set a negative quantity instead."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_cii_facturx.py:0
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_20.py:0
#, python-format
msgid ""
"The invoice has been converted into a credit note and the quantities have "
"been reverted."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_format.py:0
#, python-format
msgid ""
"The journal in which to upload should either be a sale or a purchase "
"journal."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "The supplier %s must have a Bronnoysund company registry."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py:0
#, python-format
msgid "The supplier %s must have a KVK or OIN number."
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_20
msgid "UBL 2.0"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_21
msgid "UBL 2.1"
msgstr ""
#. module: account_edi_ubl_cii
#: model:ir.model,name:account_edi_ubl_cii.model_account_edi_xml_ubl_bis3
msgid "UBL BIS Billing 3.0.12"
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_cii_facturx.py:0
#, python-format
msgid ""
"When the Canary Island General Indirect Tax (IGIC) applies, the tax rate on "
"each invoice line should be greater than 0."
msgstr ""
#. module: account_edi_ubl_cii
#. odoo-python
#: code:addons/account_edi_ubl_cii/models/account_edi_xml_cii_facturx.py:0
#, python-format
msgid ""
"You should include at least one tax per invoice line. [BR-CO-04]-Each "
"Invoice line (BG-25) shall be categorized with an Invoiced item VAT category"
" code (BT-151)."
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "factur-x.xml"
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_line_facturx_export_22
msgid "false"
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "fx"
msgstr ""
#. module: account_edi_ubl_cii
#: model_terms:ir.ui.view,arch_db:account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata
msgid "urn:factur-x:pdfa:CrossIndustryDocument:invoice:1p0#"
msgstr ""

File diff suppressed because it is too large Load diff

View file

@ -1,7 +1,5 @@
# -*- coding: utf-8 -*-
from . import account_edi_common
from . import account_edi_format
from . import account_edi_ubl
from . import account_edi_xml_cii_facturx
from . import account_edi_xml_ubl_20
from . import account_edi_xml_ubl_21
@ -11,5 +9,8 @@ from . import account_edi_xml_ubl_nlcius
from . import account_edi_xml_ubl_efff
from . import account_edi_xml_ubl_a_nz
from . import account_edi_xml_ubl_sg
from . import account_move
from . import account_move_send
from . import account_tax
from . import ir_actions_report
from . import mail_template
from . import res_partner

View file

@ -1,232 +0,0 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import models, fields, _, SUPERUSER_ID
from odoo.addons.account_edi_ubl_cii.models.account_edi_common import COUNTRY_EAS
from odoo.exceptions import UserError
import logging
_logger = logging.getLogger(__name__)
FORMAT_CODES = [
'facturx_1_0_05',
'ubl_bis3',
'ubl_de',
'nlcius_1',
'efff_1',
'ubl_2_1',
'ubl_a_nz',
'ubl_sg',
]
class AccountEdiFormat(models.Model):
_inherit = 'account.edi.format'
####################################################
# Helpers
####################################################
def _infer_xml_builder_from_tree(self, tree):
self.ensure_one()
ubl_version = tree.find('{*}UBLVersionID')
customization_id = tree.find('{*}CustomizationID')
if tree.tag == '{urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100}CrossIndustryInvoice':
return self.env['account.edi.xml.cii']
if ubl_version is not None:
if ubl_version.text == '2.0':
return self.env['account.edi.xml.ubl_20']
if ubl_version.text in ('2.1', '2.2', '2.3'):
return self.env['account.edi.xml.ubl_21']
if customization_id is not None:
if 'xrechnung' in customization_id.text:
return self.env['account.edi.xml.ubl_de']
if customization_id.text == 'urn:cen.eu:en16931:2017#compliant#urn:fdc:nen.nl:nlcius:v1.0':
return self.env['account.edi.xml.ubl_nl']
if customization_id.text == 'urn:cen.eu:en16931:2017#conformant#urn:fdc:peppol.eu:2017:poacc:billing:international:aunz:3.0':
return self.env['account.edi.xml.ubl_a_nz']
if customization_id.text == 'urn:cen.eu:en16931:2017#conformant#urn:fdc:peppol.eu:2017:poacc:billing:international:sg:3.0':
return self.env['account.edi.xml.ubl_sg']
# Allow to parse any format derived from the european semantic norm EN16931
if 'urn:cen.eu:en16931:2017' in customization_id.text:
return self.env['account.edi.xml.ubl_bis3']
return
def _get_xml_builder(self, company):
# see https://communaute.chorus-pro.gouv.fr/wp-content/uploads/2017/08/20170630_Solution-portail_Dossier_Specifications_Fournisseurs_Chorus_Facture_V.1.pdf
# page 45 -> ubl 2.1 for France seems also supported
# Only show the Factur-X option for DE and FR companies. When generating the PDF, add a Factur-X xml if there
# isn't an existing one. So there's always a Factur-X in the PDF, even without the option.
if self.code == 'facturx_1_0_05' and company.country_id.code in ['DE', 'FR']:
return self.env['account.edi.xml.cii']
# if the company's country is not in the EAS mapping, nothing is generated
# 'NO' has to be present in COUNTRY_EAS
if self.code == 'ubl_bis3' and company.country_id.code in COUNTRY_EAS:
return self.env['account.edi.xml.ubl_bis3']
# the EDI option will only appear on the journal of dutch companies
if self.code == 'nlcius_1' and company.country_id.code == 'NL':
return self.env['account.edi.xml.ubl_nl']
# the EDI option will only appear on the journal of german companies
if self.code == 'ubl_de' and company.country_id.code == 'DE':
return self.env['account.edi.xml.ubl_de']
if self.code == 'efff_1' and company.country_id.code == 'BE':
return self.env['account.edi.xml.ubl_efff']
if self.code == 'ubl_a_nz' and company.country_id.code in ['AU', 'NZ']:
return self.env['account.edi.xml.ubl_a_nz']
if self.code == 'ubl_sg' and company.country_id.code == 'SG':
return self.env['account.edi.xml.ubl_sg']
def _is_ubl_cii_available(self, company):
"""
Returns a boolean indicating whether it is possible to generate an xml file using one of the formats from this
module or not
"""
return self._get_xml_builder(company) is not None
####################################################
# Export: Account.edi.format override
####################################################
def _is_compatible_with_journal(self, journal):
# EXTENDS account_edi
# the formats appear on the journal only if they are compatible (e.g. NLCIUS only appear for dutch companies)
self.ensure_one()
if self.code not in FORMAT_CODES:
return super()._is_compatible_with_journal(journal)
return self._is_ubl_cii_available(journal.company_id) and journal.type == 'sale'
def _is_enabled_by_default_on_journal(self, journal):
# EXTENDS account_edi
self.ensure_one()
if self.code not in FORMAT_CODES:
return super()._is_enabled_by_default_on_journal(journal)
return False
def _ubl_cii_post_invoice(self, invoice):
# EXTENDS account_edi
self.ensure_one()
builder = self._get_xml_builder(invoice.company_id)
# For now, the errors are not displayed anywhere, don't want to annoy the user
xml_content, errors = builder._export_invoice(invoice)
# DEBUG: send directly to the test platform (the one used by ecosio)
#response = self.env['account.edi.common']._check_xml_ecosio(invoice, xml_content, builder._export_invoice_ecosio_schematrons())
attachment_create_vals = {
'name': builder._export_invoice_filename(invoice),
'raw': xml_content,
'mimetype': 'application/xml',
}
# we don't want the Factur-X and E-FFF xml to appear in the attachment of the invoice when confirming it
# E-FFF will appear after the pdf is generated, Factur-X will never appear (it's contained in the PDF)
if self.code not in ['facturx_1_0_05', 'efff_1']:
attachment_create_vals.update({'res_id': invoice.id, 'res_model': 'account.move'})
attachment = self.env['ir.attachment'].with_user(SUPERUSER_ID).create(attachment_create_vals)
res = {invoice: {'attachment': attachment}}
if errors and self.code == 'facturx_1_0_05':
res[invoice].update({
'success': False,
'error': _("Errors occured while creating the EDI document (format: %s). The receiver "
"might refuse it.", builder._description)
+ '<p> <li>' + "</li> <li>".join(errors) + '</li> </p>',
'blocking_level': 'info',
})
else:
res[invoice]['success'] = True
return res
def _get_move_applicability(self, move):
# EXTENDS account_edi
self.ensure_one()
if self.code not in FORMAT_CODES:
return super()._get_move_applicability(move)
if self._is_ubl_cii_available(move.company_id) and move.move_type in ('out_invoice', 'out_refund'):
return {'post': self._ubl_cii_post_invoice}
def _is_embedding_to_invoice_pdf_needed(self):
# EXTENDS account_edi
self.ensure_one()
if self.code == 'facturx_1_0_05':
return True
return super()._is_embedding_to_invoice_pdf_needed()
def _prepare_invoice_report(self, pdf_writer, edi_document):
# EXTENDS account_edi
self.ensure_one()
if self.code != 'facturx_1_0_05':
return super()._prepare_invoice_report(pdf_writer, edi_document)
attachment = edi_document.sudo().attachment_id
if not attachment:
return
pdf_writer.embed_odoo_attachment(attachment, subtype='text/xml')
if not pdf_writer.is_pdfa:
try:
pdf_writer.convert_to_pdfa()
except Exception as e:
_logger.exception("Error while converting to PDF/A: %s", e)
metadata_template = self.env.ref('account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata',
raise_if_not_found=False)
if metadata_template:
content = self.env['ir.qweb']._render('account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata', {
'title': edi_document.move_id.name,
'date': fields.Date.context_today(self),
})
pdf_writer.add_file_metadata(content.encode())
####################################################
# Import: Account.edi.format override
####################################################
def _create_invoice_from_xml_tree(self, filename, tree, journal=None):
# EXTENDS account_edi
self.ensure_one()
if not journal:
journal = self.env['account.journal'].browse(self._context.get("default_journal_id"))
if not journal:
context_move_type = self._context.get("default_move_type", "entry")
if context_move_type in self.env['account.move'].get_sale_types():
journal_type = "sale"
elif context_move_type in self.env['account.move'].get_purchase_types():
journal_type = "purchase"
else:
raise UserError(_("The journal in which to upload should either be a sale or a purchase journal."))
journal = self.env['account.journal'].search([
('company_id', '=', self.env.company.id), ('type', '=', journal_type)
], limit=1)
if not self._is_ubl_cii_available(journal.company_id) and self.code != 'facturx_1_0_05':
return super()._create_invoice_from_xml_tree(filename, tree, journal=journal)
# infer the xml builder
invoice_xml_builder = self._infer_xml_builder_from_tree(tree)
if invoice_xml_builder is not None:
invoice = invoice_xml_builder._import_invoice(journal, filename, tree)
if invoice:
return invoice
return super()._create_invoice_from_xml_tree(filename, tree, journal=journal)
def _update_invoice_from_xml_tree(self, filename, tree, invoice):
# EXTENDS account_edi
self.ensure_one()
if not self._is_ubl_cii_available(invoice.company_id) and self.code != 'facturx_1_0_05':
return super()._update_invoice_from_xml_tree(filename, tree, invoice)
# infer the xml builder
invoice_xml_builder = self._infer_xml_builder_from_tree(tree)
if invoice_xml_builder is not None:
invoice = invoice_xml_builder._import_invoice(invoice.journal_id, filename, tree, invoice)
if invoice:
return invoice
return super()._update_invoice_from_xml_tree(filename, tree, invoice)

View file

@ -1,6 +1,5 @@
# -*- coding: utf-8 -*-
from odoo import models, _
from odoo.tools import DEFAULT_SERVER_DATE_FORMAT, float_repr, is_html_empty, html2plaintext, cleanup_xml_node
from odoo import _, models, Command
from odoo.tools import float_repr, is_html_empty, html2plaintext, cleanup_xml_node
from lxml import etree
from datetime import datetime
@ -10,15 +9,32 @@ import logging
_logger = logging.getLogger(__name__)
DEFAULT_FACTURX_DATE_FORMAT = '%Y%m%d'
CII_NAMESPACES = {
'ram': "urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100",
'rsm': "urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100",
'udt': "urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100",
}
# Imcomplete, full list on https://service.unece.org/trade/untdid/d16b/tred/tred4461.htm
PAYMENT_MEAN_CODES = {
'Payment to bank account': 42,
'SEPA direct debit': 59
}
class AccountEdiXmlCII(models.AbstractModel):
_name = "account.edi.xml.cii"
_inherit = 'account.edi.common'
class AccountEdiXmlCii(models.AbstractModel):
_name = 'account.edi.xml.cii'
_inherit = ['account.edi.common']
_description = "Factur-x/XRechnung CII 2.2.0"
def _find_value(self, xpath, tree, nsmap=False):
# EXTENDS account.edi.common
return super()._find_value(xpath, tree, CII_NAMESPACES)
def _export_invoice_filename(self, invoice):
return "factur-x.xml"
if invoice.commercial_partner_id.country_code == 'DE':
return f"{invoice.name.replace('/', '_')}_zugferd.xml"
return f"{invoice.name.replace('/', '_')}_factur_x.xml"
def _export_invoice_ecosio_schematrons(self):
return {
@ -53,7 +69,7 @@ class AccountEdiXmlCII(models.AbstractModel):
),
# [BR-DE-6] The element "Seller contact telephone number" (BT-42) must be transmitted.
'seller_phone': self._check_required_fields(
vals['record']['company_id']['partner_id']['commercial_partner_id'], ['phone', 'mobile'],
vals['record']['company_id']['partner_id']['commercial_partner_id'], ['phone'],
),
# [BR-DE-7] The element "Seller contact email address" (BT-43) must be transmitted.
'seller_email': self._check_required_fields(
@ -92,7 +108,7 @@ class AccountEdiXmlCII(models.AbstractModel):
def _get_scheduled_delivery_time(self, invoice):
# don't create a bridge only to get line.sale_line_ids.order_id.picking_ids.date_done
# line.sale_line_ids.order_id.picking_ids.scheduled_date or line.sale_line_ids.order_id.commitment_date
return invoice.invoice_date
return invoice.delivery_date or invoice.invoice_date
def _get_invoicing_period(self, invoice):
# get the Invoicing period (BG-14): a list of dates covered by the invoice
@ -108,6 +124,8 @@ class AccountEdiXmlCII(models.AbstractModel):
}
def _export_invoice_vals(self, invoice):
customer = invoice.partner_id
supplier = invoice.company_id.partner_id.commercial_partner_id
def format_date(dt):
# Format the date in the Factur-x standard.
@ -118,10 +136,11 @@ class AccountEdiXmlCII(models.AbstractModel):
# Facturx requires the monetary values to be rounded to 2 decimal values
return float_repr(number, decimal_places)
def grouping_key_generator(base_line, tax_values):
tax = tax_values['tax_repartition_line'].tax_id
def grouping_key_generator(base_line, tax_data):
tax = tax_data['tax']
grouping_key = {
**self._get_tax_unece_codes(invoice, tax),
'tax_category_code': self._get_tax_category_code(customer.commercial_partner_id, supplier, tax),
**self._get_tax_exemption_reason(customer.commercial_partner_id, supplier, tax),
'amount': tax.amount,
'amount_type': tax.amount_type,
}
@ -132,10 +151,10 @@ class AccountEdiXmlCII(models.AbstractModel):
return grouping_key
# Validate the structure of the taxes
self._validate_taxes(invoice)
self._validate_taxes(invoice.invoice_line_ids.tax_ids)
# Create file content.
tax_details = invoice._prepare_edi_tax_details(grouping_key_generator=grouping_key_generator)
tax_details = invoice._prepare_invoice_aggregated_taxes(grouping_key_generator=grouping_key_generator)
# Fixed Taxes: filter them on the document level, and adapt the totals
# Fixed taxes are not supposed to be taxes in real live. However, this is the way in Odoo to manage recupel
@ -149,14 +168,6 @@ class AccountEdiXmlCII(models.AbstractModel):
tax_details['base_amount_currency'] += fixed_tax_details['tax_amount_currency']
tax_details['base_amount'] += fixed_tax_details['tax_amount']
if 'siret' in invoice.company_id._fields and invoice.company_id.siret:
seller_siret = invoice.company_id.siret
else:
seller_siret = invoice.company_id.company_registry
buyer_siret = invoice.commercial_partner_id.company_registry
if 'siret' in invoice.commercial_partner_id._fields and invoice.commercial_partner_id.siret:
buyer_siret = invoice.commercial_partner_id.siret
template_values = {
**invoice._prepare_edi_vals_to_export(),
'tax_details': tax_details,
@ -166,8 +177,8 @@ class AccountEdiXmlCII(models.AbstractModel):
'scheduled_delivery_time': self._get_scheduled_delivery_time(invoice),
'intracom_delivery': False,
'ExchangedDocument_vals': self._get_exchanged_document_vals(invoice),
'seller_specified_legal_organization': seller_siret,
'buyer_specified_legal_organization': buyer_siret,
'seller_specified_legal_organization': invoice.company_id.company_registry,
'buyer_specified_legal_organization': invoice.commercial_partner_id.company_registry,
'ship_to_trade_party': invoice.partner_shipping_id if 'partner_shipping_id' in invoice._fields and invoice.partner_shipping_id
else invoice.commercial_partner_id,
# Chorus Pro fields
@ -176,13 +187,33 @@ class AccountEdiXmlCII(models.AbstractModel):
'purchase_order_reference': invoice.purchase_order_reference if 'purchase_order_reference' in invoice._fields
and invoice.purchase_order_reference else invoice.ref or invoice.name,
'contract_reference': invoice.contract_reference if 'contract_reference' in invoice._fields and invoice.contract_reference else '',
'document_context_id': "urn:cen.eu:en16931:2017#conformant#urn:factur-x.eu:1p0:extended",
}
# Change the document context based on the country of the partner, the default value is France (factur-X)
if invoice.commercial_partner_id.country_code == 'DE':
template_values['document_context_id'] = "urn:cen.eu:en16931:2017#conformant#urn:zugferd.de:2p2:extended"
else:
template_values['document_context_id'] = "urn:cen.eu:en16931:2017#conformant#urn:factur-x.eu:1p0:extended"
# data used for IncludedSupplyChainTradeLineItem / SpecifiedLineTradeSettlement
for line_vals in template_values['invoice_line_vals_list']:
line = line_vals['line']
line_vals['unece_uom_code'] = self._get_uom_unece_code(line)
line_vals['unece_uom_code'] = self._get_uom_unece_code(line.product_uom_id)
if line._fields.get('deferred_start_date') and (line.deferred_start_date or line.deferred_end_date):
line_vals['billing_start'] = line.deferred_start_date
line_vals['billing_end'] = line.deferred_end_date
# [BR - IC - 11] - In an Invoice with a VAT breakdown (BG-23) where the VAT category code (BT-118) is
# "Intra-community supply" the Actual delivery date (BT-72) or the Invoicing period (BG-14) shall not be blank.
billing_start_dates = [invoice.invoice_date] if invoice.invoice_date else []
billing_start_dates += [line_vals['billing_start'] for line_vals in template_values['invoice_line_vals_list'] if line_vals.get('billing_start')]
billing_end_dates = [invoice.invoice_date_due] if invoice.invoice_date_due else []
billing_end_dates += [line_vals['billing_end'] for line_vals in template_values['invoice_line_vals_list'] if line_vals.get('billing_end')]
if billing_start_dates:
template_values['billing_start'] = min(billing_start_dates)
if billing_end_dates:
template_values['billing_end'] = max(billing_end_dates)
# data used for ApplicableHeaderTradeSettlement / ApplicableTradeTax (at the end of the xml)
for tax_detail_vals in template_values['tax_details']['tax_details'].values():
@ -193,12 +224,6 @@ class AccountEdiXmlCII(models.AbstractModel):
if tax_detail_vals.get('tax_category_code') == 'K':
template_values['intracom_delivery'] = True
# [BR - IC - 11] - In an Invoice with a VAT breakdown (BG-23) where the VAT category code (BT-118) is
# "Intra-community supply" the Actual delivery date (BT-72) or the Invoicing period (BG-14) shall not be blank.
if tax_detail_vals.get('tax_category_code') == 'K' and not template_values['scheduled_delivery_time']:
date_range = self._get_invoicing_period(invoice)
template_values['billing_start'] = min(date_range)
template_values['billing_end'] = max(date_range)
# Fixed taxes: add them as charges on the invoice lines
for line_vals in template_values['invoice_line_vals_list']:
@ -214,10 +239,24 @@ class AccountEdiXmlCII(models.AbstractModel):
sum_fixed_taxes = sum(x['amount'] for x in line_vals['allowance_charge_vals_list'])
line_vals['line_total_amount'] = line_vals['line'].price_subtotal + sum_fixed_taxes
# The quantity is the line.quantity since we keep the unece_uom_code!
line_vals['quantity'] = line_vals['line'].quantity
# Invert the quantity and the gross_price_total_unit if a line has a negative price total
if line_vals['line'].currency_id.compare_amounts(line_vals['gross_price_total_unit'], 0) == -1:
line_vals['quantity'] *= -1
line_vals['gross_price_total_unit'] *= -1
line_vals['price_subtotal_unit'] *= -1
# Fixed taxes: set the total adjusted amounts on the document level
template_values['tax_basis_total_amount'] = tax_details['base_amount_currency']
template_values['tax_total_amount'] = tax_details['tax_amount_currency']
if self.env['account.payment']._fields.get('sdd_mandate_id') and invoice.reconciled_payment_ids.sdd_mandate_id:
template_values['payment_means_code'] = PAYMENT_MEAN_CODES['SEPA direct debit']
else:
template_values['payment_means_code'] = PAYMENT_MEAN_CODES['Payment to bank account']
return template_values
def _export_invoice(self, invoice):
@ -230,161 +269,138 @@ class AccountEdiXmlCII(models.AbstractModel):
# IMPORT
# -------------------------------------------------------------------------
def _import_fill_invoice_form(self, journal, tree, invoice, qty_factor):
def _import_retrieve_partner_vals(self, tree, role):
return {
'vat': self._find_value(f".//ram:{role}/ram:SpecifiedTaxRegistration/ram:ID[string-length(text()) > 5]", tree),
'name': self._find_value(f".//ram:{role}/ram:Name", tree),
'phone': self._find_value(f".//ram:{role}/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber", tree),
'email': self._find_value(f".//ram:{role}//ram:EmailURIUniversalCommunication/ram:URIID", tree),
'postal_address': self._get_postal_address(tree, role),
}
def _find_value(xpath, element=tree):
return self.env['account.edi.format']._find_value(xpath, element, tree.nsmap)
def _get_postal_address(self, tree, role):
return {
'country_code': self._find_value(f'.//ram:{role}/ram:PostalTradeAddress//ram:CountryID', tree),
'street': self._find_value(f'.//ram:{role}/ram:PostalTradeAddress//ram:LineOne', tree),
'additional_street': self._find_value(f'.//ram:{role}/ram:PostalTradeAddress//ram:LineTwo', tree),
'city': self._find_value(f'.//ram:{role}/ram:PostalTradeAddress//ram:CityName', tree),
'zip': self._find_value(f'.//ram:{role}/ram:PostalTradeAddress//ram:PostcodeCode', tree),
}
def _import_fill_invoice(self, invoice, tree, qty_factor):
logs = []
invoice_values = {}
if qty_factor == -1:
logs.append(_("The invoice has been converted into a credit note and the quantities have been reverted."))
role = 'SellerTradeParty' if invoice.journal_id.type == 'purchase' else 'BuyerTradeParty'
partner, partner_logs = self._import_partner(invoice.company_id, **self._import_retrieve_partner_vals(tree, role))
# Need to set partner before to compute bank and lines properly
invoice.partner_id = partner.id
invoice_values['currency_id'], currency_logs = self._import_currency(tree, './/{*}InvoiceCurrencyCode')
# ==== partner_id ====
role = invoice.journal_id.type == 'purchase' and 'SellerTradeParty' or 'BuyerTradeParty'
name = self._find_value(f"//ram:{role}/ram:Name", tree)
mail = self._find_value(f"//ram:{role}//ram:URIID[@schemeID='SMTP']", tree)
vat = self._find_value(f"//ram:{role}/ram:SpecifiedTaxRegistration/ram:ID[string-length(text()) > 5]", tree)
phone = self._find_value(f"//ram:{role}/ram:DefinedTradeContact/ram:TelephoneUniversalCommunication/ram:CompleteNumber", tree)
country_code = self._find_value(f'//ram:{role}/ram:PostalTradeAddress//ram:CountryID', tree)
self._import_retrieve_and_fill_partner(invoice, name=name, phone=phone, mail=mail, vat=vat, country_code=country_code)
# ==== currency_id ====
currency_code_node = tree.find('.//{*}InvoiceCurrencyCode')
if currency_code_node is not None:
currency = self.env['res.currency'].with_context(active_test=False).search([
('name', '=', currency_code_node.text),
], limit=1)
if currency:
if not currency.active:
logs.append(_("The currency '%s' is not active.", currency.name))
invoice.currency_id = currency
else:
logs.append(_("Could not retrieve currency: %s. Did you enable the multicurrency option and "
"activate the currency ?", currency_code_node.text))
# ==== Bank Details ====
# ==== partner_bank_id ====
bank_detail_nodes = tree.findall('.//{*}SpecifiedTradeSettlementPaymentMeans')
bank_details = [
bank_detail_node.findtext('{*}PayeePartyCreditorFinancialAccount/{*}IBANID')
or bank_detail_node.findtext('{*}PayeePartyCreditorFinancialAccount/{*}ProprietaryID')
for bank_detail_node in bank_detail_nodes
if bank_detail_node.findtext('{*}PayeePartyCreditorFinancialAccount/{*}IBANID')
or bank_detail_node.findtext('{*}PayeePartyCreditorFinancialAccount/{*}ProprietaryID')
]
if bank_details:
self._import_retrieve_and_fill_partner_bank_details(invoice, bank_details=bank_details)
self._import_partner_bank(invoice, bank_details=bank_details)
# ==== Reference ====
# ==== ref, invoice_origin, narration, payment_reference ====
invoice_values['ref'] = tree.findtext('./{*}ExchangedDocument/{*}ID')
invoice_values['invoice_origin'] = tree.findtext(
'.//{*}BuyerOrderReferencedDocument/{*}IssuerAssignedID'
)
invoice_values['narration'] = self._import_description(tree, xpaths=[
'./{*}ExchangedDocument/{*}IncludedNote/{*}Content',
'.//{*}SpecifiedTradePaymentTerms/{*}Description',
])
invoice_values['payment_reference'] = tree.findtext(
'./{*}SupplyChainTradeTransaction/{*}ApplicableHeaderTradeSettlement/{*}PaymentReference'
)
ref_node = tree.find('./{*}ExchangedDocument/{*}ID')
if ref_node is not None:
invoice.ref = ref_node.text
# ==== invoice_date, invoice_date_due ====
issue_date = tree.findtext('./{*}ExchangedDocument/{*}IssueDateTime/{*}DateTimeString')
if issue_date:
invoice_values['invoice_date'] = datetime.strptime(issue_date.strip(), DEFAULT_FACTURX_DATE_FORMAT)
due_date = tree.findtext('.//{*}SpecifiedTradePaymentTerms/{*}DueDateDateTime/{*}DateTimeString')
if due_date:
invoice_values['invoice_date_due'] = datetime.strptime(due_date.strip(), DEFAULT_FACTURX_DATE_FORMAT)
# ==== Invoice origin ====
invoice_origin_node = tree.find('./{*}OrderReference/{*}ID')
if invoice_origin_node is not None:
invoice.invoice_origin = invoice_origin_node.text
# === Note/narration ====
narration = ""
note_node = tree.find('./{*}ExchangedDocument/{*}IncludedNote/{*}Content')
if note_node is not None and note_node.text:
narration += note_node.text + "\n"
payment_terms_node = tree.find('.//{*}SpecifiedTradePaymentTerms/{*}Description')
if payment_terms_node is not None and payment_terms_node.text:
narration += payment_terms_node.text + "\n"
invoice.narration = narration
# ==== payment_reference ====
payment_reference_node = tree.find('.//{*}BuyerOrderReferencedDocument/{*}IssuerAssignedID')
if payment_reference_node is not None:
invoice.payment_reference = payment_reference_node.text
# ==== invoice_date ====
invoice_date_node = tree.find('./{*}ExchangedDocument/{*}IssueDateTime/{*}DateTimeString')
if invoice_date_node is not None and invoice_date_node.text:
date_str = invoice_date_node.text.strip()
date_obj = datetime.strptime(date_str, DEFAULT_FACTURX_DATE_FORMAT)
invoice.invoice_date = date_obj.strftime(DEFAULT_SERVER_DATE_FORMAT)
# ==== invoice_date_due ====
invoice_date_due_node = tree.find('.//{*}SpecifiedTradePaymentTerms/{*}DueDateDateTime/{*}DateTimeString')
if invoice_date_due_node is not None and invoice_date_due_node.text:
date_str = invoice_date_due_node.text.strip()
date_obj = datetime.strptime(date_str, DEFAULT_FACTURX_DATE_FORMAT)
invoice.invoice_date_due = date_obj.strftime(DEFAULT_SERVER_DATE_FORMAT)
# ==== invoice_line_ids: AllowanceCharge (document level) ====
logs += self._import_fill_invoice_allowance_charge(tree, invoice, journal, qty_factor)
# ==== Prepaid amount ====
prepaid_node = tree.find('.//{*}ApplicableHeaderTradeSettlement/'
'{*}SpecifiedTradeSettlementHeaderMonetarySummation/{*}TotalPrepaidAmount')
logs += self._import_log_prepaid_amount(invoice, prepaid_node, qty_factor)
# ==== invoice_line_ids ====
line_nodes = tree.findall('./{*}SupplyChainTradeTransaction/{*}IncludedSupplyChainTradeLineItem')
if line_nodes is not None:
for invl_el in line_nodes:
invoice_line = invoice.invoice_line_ids.create({'move_id': invoice.id})
invl_logs = self._import_fill_invoice_line_form(journal, invl_el, invoice, invoice_line, qty_factor)
logs += invl_logs
# ==== Document level AllowanceCharge, Prepaid Amounts, Invoice Lines ====
allowance_charges_line_vals, allowance_charges_logs = self._import_document_allowance_charges(
tree, invoice, invoice.journal_id.type, qty_factor,
)
logs += self._import_prepaid_amount(invoice, tree, './/{*}ApplicableHeaderTradeSettlement/{*}SpecifiedTradeSettlementHeaderMonetarySummation/{*}TotalPrepaidAmount', qty_factor)
invoice_line_vals, line_logs = self._import_lines(invoice, tree, './{*}SupplyChainTradeTransaction/{*}IncludedSupplyChainTradeLineItem',
document_type=invoice.move_type, tax_type=invoice.journal_id.type, qty_factor=qty_factor)
line_vals = allowance_charges_line_vals + invoice_line_vals
invoice_values = {
**invoice_values,
'invoice_line_ids': [Command.create(line_value) for line_value in line_vals],
}
invoice.write(invoice_values)
logs += partner_logs + currency_logs + line_logs + allowance_charges_logs
return logs
def _import_fill_invoice_line_form(self, journal, tree, invoice_form, invoice_line, qty_factor):
logs = []
def _get_tax_nodes(self, tree):
return tree.findall('.//{*}ApplicableTradeTax/{*}RateApplicablePercent')
# Product.
name = self._find_value('.//ram:SpecifiedTradeProduct/ram:Name', tree)
invoice_line.product_id = self.env['account.edi.format']._retrieve_product(
default_code=self._find_value('.//ram:SpecifiedTradeProduct/ram:SellerAssignedID', tree),
name=self._find_value('.//ram:SpecifiedTradeProduct/ram:Name', tree),
barcode=self._find_value('.//ram:SpecifiedTradeProduct/ram:GlobalID', tree)
)
# force original line description instead of the one copied from product's Sales Description
if name:
invoice_line.name = name
def _get_document_allowance_charge_xpaths(self):
return {
'root': './{*}SupplyChainTradeTransaction/{*}ApplicableHeaderTradeSettlement/{*}SpecifiedTradeAllowanceCharge',
'charge_indicator': './{*}ChargeIndicator/{*}Indicator',
'base_amount': './{*}BasisAmount',
'amount': './{*}ActualAmount',
'reason': './{*}Reason',
'percentage': './{*}CalculationPercent',
'tax_percentage': './{*}CategoryTradeTax/{*}RateApplicablePercent',
}
xpath_dict = {
'basis_qty': [
'./{*}SpecifiedLineTradeAgreement/{*}GrossPriceProductTradePrice/{*}BasisQuantity',
'./{*}SpecifiedLineTradeAgreement/{*}NetPriceProductTradePrice/{*}BasisQuantity'
],
def _get_invoice_line_xpaths(self, document_type=False, qty_factor=1):
return {
'deferred_start_date': './{*}SpecifiedLineTradeSettlement/{*}BillingSpecifiedPeriod/{*}StartDateTime/{*}DateTimeString',
'deferred_end_date': './{*}SpecifiedLineTradeSettlement/{*}BillingSpecifiedPeriod/{*}EndDateTime/{*}DateTimeString',
'date_format': DEFAULT_FACTURX_DATE_FORMAT,
}
def _get_line_xpaths(self, document_type=False, qty_factor=1):
return {
'basis_qty': (
'./ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:BasisQuantity',
'./ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:BasisQuantity',
),
'gross_price_unit': './{*}SpecifiedLineTradeAgreement/{*}GrossPriceProductTradePrice/{*}ChargeAmount',
'rebate': './{*}SpecifiedLineTradeAgreement/{*}GrossPriceProductTradePrice/{*}AppliedTradeAllowanceCharge/{*}ActualAmount',
'net_price_unit': './{*}SpecifiedLineTradeAgreement/{*}NetPriceProductTradePrice/{*}ChargeAmount',
'billed_qty': './{*}SpecifiedLineTradeDelivery/{*}BilledQuantity',
'delivered_qty': './{*}SpecifiedLineTradeDelivery/{*}BilledQuantity',
'allowance_charge': './/{*}SpecifiedLineTradeSettlement/{*}SpecifiedTradeAllowanceCharge',
'allowance_charge_indicator': './{*}ChargeIndicator/{*}Indicator',
'allowance_charge_amount': './{*}ActualAmount',
'allowance_charge_reason': './{*}Reason',
'allowance_charge_reason_code': './{*}ReasonCode',
'line_total_amount': './{*}SpecifiedLineTradeSettlement/{*}SpecifiedTradeSettlementLineMonetarySummation/{*}LineTotalAmount',
'name': [
'./ram:SpecifiedTradeProduct/ram:Description',
'./ram:SpecifiedTradeProduct/ram:Name',
],
'product': {
'default_code': './ram:SpecifiedTradeProduct/ram:SellerAssignedID',
'name': './ram:SpecifiedTradeProduct/ram:Name',
'barcode': './ram:SpecifiedTradeProduct/ram:GlobalID',
},
}
inv_line_vals = self._import_fill_invoice_line_values(tree, xpath_dict, invoice_line, qty_factor)
# retrieve tax nodes
tax_nodes = tree.findall('.//{*}ApplicableTradeTax/{*}RateApplicablePercent')
return self._import_fill_invoice_line_taxes(journal, tax_nodes, invoice_line, inv_line_vals, logs)
# -------------------------------------------------------------------------
# IMPORT : helpers
# -------------------------------------------------------------------------
def _get_import_document_amount_sign(self, filename, tree):
def _get_import_document_amount_sign(self, tree):
"""
In factur-x, an invoice has code 380 and a credit note has code 381. However, a credit note can be expressed
as an invoice with negative amounts. For this case, we need a factor to take the opposite of each quantity
@ -394,10 +410,10 @@ class AccountEdiXmlCII(models.AbstractModel):
if move_type_code is None:
return None, None
if move_type_code.text == '381':
return ('in_refund', 'out_refund'), 1
return 'refund', 1
if move_type_code.text == '380':
amount_node = tree.find('.//{*}SpecifiedTradeSettlementHeaderMonetarySummation/{*}TaxBasisTotalAmount')
if amount_node is not None and float(amount_node.text) < 0:
return ('in_refund', 'out_refund'), -1
return ('in_invoice', 'out_invoice'), 1
return 'refund', -1
return 'invoice', 1
return None, None

View file

@ -1,10 +1,9 @@
# -*- coding: utf-8 -*-
from odoo import models
class AccountEdiXmlUBL21(models.AbstractModel):
_name = "account.edi.xml.ubl_21"
_inherit = 'account.edi.xml.ubl_20'
class AccountEdiXmlUbl_21(models.AbstractModel):
_name = 'account.edi.xml.ubl_21'
_inherit = ['account.edi.xml.ubl_20']
_description = "UBL 2.1"
# -------------------------------------------------------------------------
@ -14,24 +13,63 @@ class AccountEdiXmlUBL21(models.AbstractModel):
def _export_invoice_filename(self, invoice):
return f"{invoice.name.replace('/', '_')}_ubl_21.xml"
def _export_invoice_ecosio_schematrons(self):
return {
'invoice': 'org.oasis-open:invoice:2.1',
'credit_note': 'org.oasis-open:creditnote:2.1',
}
# -------------------------------------------------------------------------
# EXPORT: Templates
# -------------------------------------------------------------------------
def _export_invoice_vals(self, invoice):
# EXTENDS account.edi.xml.ubl_20
vals = super()._export_invoice_vals(invoice)
def _get_invoice_node(self, vals):
document_node = super()._get_invoice_node(vals)
vals.update({
'InvoiceType_template': 'account_edi_ubl_cii.ubl_21_InvoiceType',
'InvoiceLineType_template': 'account_edi_ubl_cii.ubl_21_InvoiceLineType',
if vals['document_type'] != 'invoice':
# In UBL 2.1, Delivery, PaymentMeans, PaymentTerms exist also in DebitNote and CreditNote
self._add_invoice_delivery_nodes(document_node, vals)
self._add_invoice_payment_means_nodes(document_node, vals)
self._add_invoice_payment_terms_nodes(document_node, vals)
return document_node
def _add_invoice_header_nodes(self, document_node, vals):
super()._add_invoice_header_nodes(document_node, vals)
invoice = vals['invoice']
document_node.update({
'cbc:UBLVersionID': {'_text': '2.1'},
'cbc:DueDate': {'_text': invoice.invoice_date_due} if vals['document_type'] == 'invoice' else None,
'cbc:CreditNoteTypeCode': {'_text': 261 if vals['process_type'] == 'selfbilling' else 381} if vals['document_type'] == 'credit_note' else None,
'cbc:BuyerReference': {'_text': invoice.commercial_partner_id.ref},
})
vals['vals'].update({
'ubl_version_id': 2.1,
'buyer_reference': invoice.commercial_partner_id.ref,
})
def _add_document_allowance_charge_nodes(self, document_node, vals):
super()._add_document_allowance_charge_nodes(document_node, vals)
return vals
# AllowanceCharge exists in debit notes only in UBL 2.1
if vals['document_type'] == 'debit_note':
document_node['cac:AllowanceCharge'] = []
for base_line in vals['base_lines']:
if self._is_document_allowance_charge(base_line):
document_node['cac:AllowanceCharge'].append(
self._get_document_allowance_charge_node({
**vals,
'base_line': base_line,
})
)
def _add_invoice_line_period_nodes(self, line_node, vals):
base_line = vals['base_line']
# deferred_start_date & deferred_end_date are enterprise-only fields
if (
vals['document_type'] in {'invoice', 'credit_note'}
and (base_line.get('deferred_start_date') or base_line.get('deferred_end_date'))
):
line_node['cac:InvoicePeriod'] = {
'cbc:StartDate': {'_text': base_line['deferred_start_date']},
'cbc:EndDate': {'_text': base_line['deferred_end_date']},
}
def _add_document_line_allowance_charge_nodes(self, line_node, vals):
line_node['cac:AllowanceCharge'] = []
if node := self._get_line_discount_allowance_charge_node(vals):
line_node['cac:AllowanceCharge'].append(node)
if vals['fixed_taxes_as_allowance_charges']:
line_node['cac:AllowanceCharge'].extend(self._get_line_fixed_tax_allowance_charge_nodes(vals))

View file

@ -3,9 +3,9 @@
from odoo import models
class AccountEdiXmlUBLANZ(models.AbstractModel):
_inherit = "account.edi.xml.ubl_bis3"
class AccountEdiXmlUbl_A_Nz(models.AbstractModel):
_name = 'account.edi.xml.ubl_a_nz'
_inherit = ["account.edi.xml.ubl_bis3"]
_description = "A-NZ BIS Billing 3.0"
"""
@ -19,66 +19,91 @@ class AccountEdiXmlUBLANZ(models.AbstractModel):
def _export_invoice_filename(self, invoice):
return f"{invoice.name.replace('/', '_')}_a_nz.xml"
def _export_invoice_ecosio_schematrons(self):
return {
'invoice': 'eu.peppol.bis3.aunz.ubl:invoice:1.0.8',
'credit_note': 'eu.peppol.bis3.aunz.ubl:creditnote:1.0.8',
}
# -------------------------------------------------------------------------
# EXPORT: Templates
# -------------------------------------------------------------------------
def _get_partner_party_tax_scheme_vals_list(self, partner, role):
def _get_customization_id(self, process_type='billing'):
if process_type == 'billing':
return 'urn:cen.eu:en16931:2017#conformant#urn:fdc:peppol.eu:2017:poacc:billing:international:aunz:3.0'
def _ubl_get_line_allowance_charge_discount_node(self, vals, discount_values):
# EXTENDS account.edi.xml.ubl_bis3
vals_list = super()._get_partner_party_tax_scheme_vals_list(partner, role)
discount_node = super()._ubl_get_line_allowance_charge_discount_node(vals, discount_values)
discount_node['cbc:AllowanceChargeReason'] = None
discount_node['cbc:MultiplierFactorNumeric'] = None
discount_node['cbc:BaseAmount'] = None
return discount_node
for vals in vals_list:
if partner.country_id.code == "AU" and partner.vat:
vals['company_id'] = partner.vat.replace(" ", "")
def _ubl_add_values_tax_currency_code(self, vals):
# OVERRIDE account.edi.xml.ubl_bis3
self._ubl_add_values_tax_currency_code_empty(vals)
return vals_list
def _get_partner_party_vals(self, partner, role):
def _ubl_tax_totals_node_grouping_key(self, base_line, tax_data, vals, currency):
# EXTENDS account.edi.xml.ubl_bis3
vals = super()._get_partner_party_vals(partner, role)
tax_total_keys = super()._ubl_tax_totals_node_grouping_key(base_line, tax_data, vals, currency)
if partner.country_code == 'AU' and partner.vat:
vals['endpoint_id'] = partner.vat.replace(" ", "")
if partner.country_code == 'NZ':
vals['endpoint_id'] = partner.company_registry
company_currency = vals['company'].currency_id
if (
tax_total_keys['tax_total_key']
and company_currency != vals['currency']
and tax_total_keys['tax_total_key']['currency'] == company_currency
):
tax_total_keys['tax_total_key'] = None
for party_tax_scheme in vals['party_tax_scheme_vals']:
party_tax_scheme['tax_scheme_id'] = 'GST'
return tax_total_keys
return vals
def _ubl_add_party_endpoint_id_node(self, vals):
# EXTENDS
super()._ubl_add_party_endpoint_id_node(vals)
partner = vals['party_vals']['partner']
commercial_partner = partner.commercial_partner_id
def _get_partner_party_legal_entity_vals_list(self, partner):
# EXTENDS account.edi.xml.ubl_bis3
vals_list = super()._get_partner_party_legal_entity_vals_list(partner)
if commercial_partner.country_code == 'AU' and commercial_partner.vat:
vat = commercial_partner.vat.replace(" ", "")
vals['party_node']['cbc:EndpointID']['_text'] = vat
elif commercial_partner.country_code == 'NZ' and commercial_partner.company_registry:
vals['party_node']['cbc:EndpointID']['_text'] = commercial_partner.company_registry
for vals in vals_list:
if partner.country_code == 'AU' and partner.vat:
vals.update({
'company_id': partner.vat.replace(" ", ""),
'company_id_attrs': {'schemeID': '0151'},
})
if partner.country_code == 'NZ':
vals.update({
'company_id': partner.company_registry,
'company_id_attrs': {'schemeID': '0088'},
})
return vals_list
def _ubl_add_party_tax_scheme_nodes(self, vals):
# EXTENDS
super()._ubl_add_party_tax_scheme_nodes(vals)
partner = vals['party_vals']['partner']
commercial_partner = partner.commercial_partner_id
def _get_tax_category_list(self, invoice, taxes):
# EXTENDS account.edi.xml.ubl_bis3
vals_list = super()._get_tax_category_list(invoice, taxes)
for vals in vals_list:
vals['tax_scheme_id'] = 'GST'
return vals_list
if (
(commercial_partner.country_code == 'AU' and commercial_partner.vat)
or (commercial_partner.country_code == 'NZ' and commercial_partner.company_registry)
):
vals['party_node']['cac:PartyTaxScheme'] = [{
'cbc:CompanyID': {
'_text': vals['party_node']['cbc:EndpointID']['_text'],
'schemeID': None,
},
'cac:TaxScheme': {
'cbc:ID': {'_text': 'GST'},
},
}]
def _export_invoice_vals(self, invoice):
# EXTENDS account.edi.xml.ubl_21
vals = super()._export_invoice_vals(invoice)
def _ubl_add_party_legal_entity_nodes(self, vals):
# EXTENDS
super()._ubl_add_party_legal_entity_nodes(vals)
partner = vals['party_vals']['partner']
commercial_partner = partner.commercial_partner_id
vals['vals'].update({
'customization_id': 'urn:cen.eu:en16931:2017#conformant#urn:fdc:peppol.eu:2017:poacc:billing:international:aunz:3.0',
})
return vals
if commercial_partner.country_code == 'AU' and commercial_partner.vat:
vals['party_node']['cac:PartyLegalEntity'] = [{
'cbc:RegistrationName': {'_text': commercial_partner.name},
'cbc:CompanyID': {
'_text': vals['party_node']['cbc:EndpointID']['_text'],
'schemeID': '0151',
},
}]
elif commercial_partner.country_code == 'NZ' and commercial_partner.company_registry:
vals['party_node']['cac:PartyLegalEntity'] = [{
'cbc:RegistrationName': {'_text': commercial_partner.name},
'cbc:CompanyID': {
'_text': vals['party_node']['cbc:EndpointID']['_text'],
'schemeID': '0088',
},
}]

View file

@ -5,9 +5,9 @@ from odoo import models
import re
class AccountEdiXmlUBLEFFF(models.AbstractModel):
_inherit = "account.edi.xml.ubl_20"
class AccountEdiXmlUbl_Efff(models.AbstractModel):
_name = 'account.edi.xml.ubl_efff'
_inherit = ["account.edi.xml.ubl_20"]
_description = "E-FFF (BE)"
# -------------------------------------------------------------------------
@ -18,6 +18,3 @@ class AccountEdiXmlUBLEFFF(models.AbstractModel):
# official naming convention
vat = invoice.company_id.partner_id.commercial_partner_id.vat
return 'efff_%s%s%s.xml' % (vat or '', '_' if vat else '', re.sub(r'[\W_]', '', invoice.name))
def _export_invoice_ecosio_schematrons(self):
return None

View file

@ -3,9 +3,9 @@
from odoo import models
class AccountEdiXmlUBLNL(models.AbstractModel):
_inherit = "account.edi.xml.ubl_bis3"
class AccountEdiXmlUbl_Nl(models.AbstractModel):
_name = 'account.edi.xml.ubl_nl'
_inherit = ["account.edi.xml.ubl_bis3"]
_description = "SI-UBL 2.0 (NLCIUS)"
"""
@ -32,58 +32,87 @@ class AccountEdiXmlUBLNL(models.AbstractModel):
def _export_invoice_filename(self, invoice):
return f"{invoice.name.replace('/', '_')}_nlcius.xml"
def _export_invoice_ecosio_schematrons(self):
return {
'invoice': 'org.simplerinvoicing:invoice:2.0.3.3',
'credit_note': 'org.simplerinvoicing:creditnote:2.0.3.3',
}
# -------------------------------------------------------------------------
# EXPORT: Templates
# -------------------------------------------------------------------------
def _get_tax_category_list(self, invoice, taxes):
# EXTENDS account.edi.xml.ubl_bis3
vals_list = super()._get_tax_category_list(invoice, taxes)
for tax in vals_list:
# [BR-NL-35] The use of a tax exemption reason code (cac:TaxTotal/cac:TaxSubtotal/cac:TaxCategory
# /cbc:TaxExemptionReasonCode) is not recommended
tax.pop('tax_exemption_reason_code', None)
return vals_list
def _get_customization_id(self, process_type='billing'):
if process_type == 'billing':
return 'urn:cen.eu:en16931:2017#compliant#urn:fdc:nen.nl:nlcius:v1.0'
def _get_partner_address_vals(self, partner):
def _ubl_default_tax_category_grouping_key(self, base_line, tax_data, vals, currency):
# EXTENDS account.edi.xml.ubl_bis3
vals = super()._get_partner_address_vals(partner)
# [BR-NL-28] The use of a country subdivision (cac:AccountingCustomerParty/cac:Party/cac:PostalAddress
# /cbc:CountrySubentity) is not recommended
vals.pop('country_subentity', None)
return vals
grouping_key = super()._ubl_default_tax_category_grouping_key(base_line, tax_data, vals, currency)
if not grouping_key:
return
def _get_invoice_line_allowance_vals_list(self, line, tax_values_list=None):
# EXTENDS account.edi.xml.ubl_bis3
vals_list = super()._get_invoice_line_allowance_vals_list(line, tax_values_list=tax_values_list)
# [BR-NL-32] Use of Discount reason code ( AllowanceChargeReasonCode ) is not recommended.
# [BR-EN-34] Use of Charge reason code ( AllowanceChargeReasonCode ) is not recommended.
# Careful ! [BR-42]-Each Invoice line allowance (BG-27) shall have an Invoice line allowance reason (BT-139)
# or an Invoice line allowance reason code (BT-140).
for vals in vals_list:
if vals['allowance_charge_reason_code'] == 95:
vals['allowance_charge_reason'] = 'Discount'
if vals.get('allowance_charge_reason'):
vals.pop('allowance_charge_reason_code')
return vals_list
grouping_key['tax_exemption_reason_code'] = None
return grouping_key
def _get_invoice_payment_means_vals_list(self, invoice):
def _ubl_add_values_tax_currency_code(self, vals):
# OVERRIDE account.edi.xml.ubl_bis3
self._ubl_add_values_tax_currency_code_empty(vals)
def _ubl_tax_totals_node_grouping_key(self, base_line, tax_data, vals, currency):
# EXTENDS account.edi.xml.ubl_bis3
vals_list = super()._get_invoice_payment_means_vals_list(invoice)
tax_total_keys = super()._ubl_tax_totals_node_grouping_key(base_line, tax_data, vals, currency)
company_currency = vals['company'].currency_id
if (
tax_total_keys['tax_total_key']
and company_currency != vals['currency']
and tax_total_keys['tax_total_key']['currency'] == company_currency
):
tax_total_keys['tax_total_key'] = None
return tax_total_keys
def _ubl_get_line_allowance_charge_discount_node(self, vals, discount_values):
# EXTENDS account.edi.xml.ubl_bis3
discount_node = super()._ubl_get_line_allowance_charge_discount_node(vals, discount_values)
discount_node['cbc:AllowanceChargeReasonCode'] = None
discount_node['cbc:MultiplierFactorNumeric'] = None
discount_node['cbc:BaseAmount'] = None
return discount_node
def _ubl_add_accounting_supplier_party_identification_nodes(self, vals):
# EXTENDS account.edi.xml.ubl_bis3
super()._ubl_add_accounting_supplier_party_identification_nodes(vals)
nodes = vals['party_node']['cac:PartyIdentification']
partner = vals['party_vals']['partner']
commercial_partner = partner.commercial_partner_id
if commercial_partner.peppol_endpoint:
nodes.append({
'cbc:ID': {
'_text': commercial_partner.peppol_endpoint,
'schemeID': None,
},
})
def _ubl_add_accounting_customer_party_identification_nodes(self, vals):
# EXTENDS account.edi.xml.ubl_bis3
super()._ubl_add_accounting_customer_party_identification_nodes(vals)
partner = vals['party_vals']['partner']
commercial_partner = partner.commercial_partner_id
if (
commercial_partner.country_code == 'NL'
and commercial_partner.peppol_endpoint
):
vals['party_node']['cac:PartyIdentification'] = [{
'cbc:ID': {
'_text': commercial_partner.peppol_endpoint,
'schemeID': commercial_partner.peppol_eas if commercial_partner.peppol_eas in ('0106', '0190') else None,
},
}]
def _add_invoice_payment_means_nodes(self, document_node, vals):
# EXTENDS account.edi.xml.ubl_bis3
super()._add_invoice_payment_means_nodes(document_node, vals)
# [BR-NL-29] The use of a payment means text (cac:PaymentMeans/cbc:PaymentMeansCode/@name) is not recommended
for vals in vals_list:
vals.pop('payment_means_code_attrs', None)
return vals_list
def _export_invoice_vals(self, invoice):
# EXTENDS account.edi.xml.ubl_bis3
vals = super()._export_invoice_vals(invoice)
vals['vals']['customization_id'] = 'urn:cen.eu:en16931:2017#compliant#urn:fdc:nen.nl:nlcius:v1.0'
# [BR-NL-24] Use of previous invoice date ( IssueDate ) is not recommended.
# vals['vals'].pop('issue_date') # careful, this causes other errors from the validator...
return vals
payment_means_node = document_node['cac:PaymentMeans']
if 'name' in payment_means_node['cbc:PaymentMeansCode']:
payment_means_node['cbc:PaymentMeansCode']['name'] = None
if 'listID' in payment_means_node['cbc:PaymentMeansCode']:
payment_means_node['cbc:PaymentMeansCode']['listID'] = None

View file

@ -2,9 +2,9 @@
from odoo import models
class AccountEdiXmlUBLSG(models.AbstractModel):
_inherit = "account.edi.xml.ubl_bis3"
_name = "account.edi.xml.ubl_sg"
class AccountEdiXmlUbl_Sg(models.AbstractModel):
_name = 'account.edi.xml.ubl_sg'
_inherit = ["account.edi.xml.ubl_bis3"]
_description = "SG BIS Billing 3.0"
"""
@ -18,58 +18,61 @@ class AccountEdiXmlUBLSG(models.AbstractModel):
def _export_invoice_filename(self, invoice):
return f"{invoice.name.replace('/', '_')}_sg.xml"
def _export_invoice_ecosio_schematrons(self):
return {
'invoice': 'eu.peppol.bis3.sg.ubl:invoice:1.0.3',
'credit_note': 'eu.peppol.bis3.sg.ubl:creditnote:1.0.3',
# -------------------------------------------------------------------------
# EXPORT: Templates
# -------------------------------------------------------------------------
def _get_customization_id(self, process_type='billing'):
if process_type == 'billing':
return 'urn:cen.eu:en16931:2017#conformant#urn:fdc:peppol.eu:2017:poacc:billing:international:sg:3.0'
def _ubl_default_tax_category_grouping_key(self, base_line, tax_data, vals, currency):
# EXTENDS account.edi.xml.ubl_bis3
grouping_key = super()._ubl_default_tax_category_grouping_key(base_line, tax_data, vals, currency)
if not grouping_key:
return
grouping_key['tax_exemption_reason'] = None
grouping_key['tax_exemption_reason_code'] = None
# For reference: https://www.peppolguide.sg/billing/bis/#_gst_category_codes
if not tax_data or tax_data['tax'].amount == 0.0:
grouping_key['tax_category_code'] = 'ZR'
else:
grouping_key['tax_category_code'] = 'SR'
return grouping_key
def _ubl_get_line_allowance_charge_discount_node(self, vals, discount_values):
# EXTENDS account.edi.xml.ubl_bis3
discount_node = super()._ubl_get_line_allowance_charge_discount_node(vals, discount_values)
discount_node['cbc:AllowanceChargeReason'] = None
discount_node['cbc:MultiplierFactorNumeric'] = None
discount_node['cbc:BaseAmount'] = None
return discount_node
def _ubl_add_values_tax_currency_code(self, vals):
# OVERRIDE account.edi.xml.ubl_bis3
self._ubl_add_values_tax_currency_code_empty(vals)
def _ubl_tax_totals_node_grouping_key(self, base_line, tax_data, vals, currency):
# EXTENDS account.edi.xml.ubl_bis3
tax_total_keys = super()._ubl_tax_totals_node_grouping_key(base_line, tax_data, vals, currency)
company_currency = vals['company'].currency_id
if (
tax_total_keys['tax_total_key']
and company_currency != vals['currency']
and tax_total_keys['tax_total_key']['currency'] == company_currency
):
tax_total_keys['tax_total_key'] = None
return tax_total_keys
def _add_invoice_payment_means_nodes(self, document_node, vals):
""" https://www.peppolguide.sg/billing/bis/#_payment_means_information """
super()._add_invoice_payment_means_nodes(document_node, vals)
document_node['cac:PaymentMeans']['cbc:PaymentMeansCode'] = {
'_text': 54,
'name': 'Credit Card',
}
def _get_partner_party_vals(self, partner, role):
# EXTENDS account.edi.xml.ubl_bis3
vals = super()._get_partner_party_vals(partner, role)
for party_tax_scheme in vals['party_tax_scheme_vals']:
party_tax_scheme['tax_scheme_id'] = 'GST'
return vals
def _get_invoice_payment_means_vals_list(self, invoice):
""" https://www.peppolguide.sg/billing/bis/#_payment_means_information
"""
vals_list = super()._get_invoice_payment_means_vals_list(invoice)
for vals in vals_list:
vals.update({
'payment_means_code': 54,
'payment_means_code_attrs': {'name': 'Credit Card'},
})
return vals_list
def _get_tax_sg_codes(self, invoice, tax):
""" https://www.peppolguide.sg/billing/bis/#_gst_category_codes
"""
tax_category_code = 'SR'
if tax.amount == 0:
tax_category_code = 'ZR'
return tax_category_code
def _get_tax_category_list(self, invoice, taxes):
# OVERRIDE
res = []
for tax in taxes:
res.append({
'id': self._get_tax_sg_codes(invoice, tax),
'percent': tax.amount if tax.amount_type == 'percent' else False,
'tax_scheme_id': 'GST',
})
return res
def _export_invoice_vals(self, invoice):
# EXTENDS account.edi.xml.ubl_bis3
vals = super()._export_invoice_vals(invoice)
vals['vals'].update({
'customization_id': 'urn:cen.eu:en16931:2017#conformant#urn:fdc:peppol.eu:2017:poacc:billing:international:sg:3.0',
})
return vals

View file

@ -2,9 +2,9 @@
from odoo import models
class AccountEdiXmlUBLDE(models.AbstractModel):
_inherit = "account.edi.xml.ubl_bis3"
class AccountEdiXmlUbl_De(models.AbstractModel):
_name = 'account.edi.xml.ubl_de'
_inherit = ["account.edi.xml.ubl_bis3"]
_description = "BIS3 DE (XRechnung)"
# -------------------------------------------------------------------------
@ -12,41 +12,103 @@ class AccountEdiXmlUBLDE(models.AbstractModel):
# -------------------------------------------------------------------------
def _export_invoice_filename(self, invoice):
return f"{invoice.name.replace('/', '_')}_ubl_de.xml"
def _export_invoice_ecosio_schematrons(self):
return {
'invoice': 'de.xrechnung:ubl-invoice:2.2.0',
'credit_note': 'de.xrechnung:ubl-creditnote:2.2.0',
}
def _export_invoice_vals(self, invoice):
# EXTENDS account.edi.xml.ubl_bis3
vals = super()._export_invoice_vals(invoice)
vals['vals']['customization_id'] = 'urn:cen.eu:en16931:2017#compliant#urn:xeinkauf.de:kosit:xrechnung_3.0'
if not vals['vals'].get('buyer_reference'):
vals['vals']['buyer_reference'] = 'N/A'
return vals
return f"{invoice.name.replace('/', '_')}_xrechnung.xml"
def _export_invoice_constraints(self, invoice, vals):
# EXTENDS account.edi.xml.ubl_bis3
constraints = super()._export_invoice_constraints(invoice, vals)
constraints.update({
'bis3_de_supplier_telephone_required': self._check_required_fields(vals['supplier'], ['phone', 'mobile']),
'bis3_de_supplier_telephone_required': self._check_required_fields(vals['supplier'], ['phone']),
'bis3_de_supplier_electronic_mail_required': self._check_required_fields(vals['supplier'], 'email'),
})
return constraints
def _get_partner_party_vals(self, partner, role):
# EXTENDS account.edi.xml.ubl_bis3
vals = super()._get_partner_party_vals(partner, role)
# -------------------------------------------------------------------------
# EXPORT: Templates
# -------------------------------------------------------------------------
if not vals.get('endpoint_id') and partner.email:
vals.update({
'endpoint_id': partner.email,
'endpoint_id_attrs': {'schemeID': 'EM'},
def _get_customization_id(self, process_type='billing'):
if process_type == 'billing':
return 'urn:cen.eu:en16931:2017#compliant#urn:xeinkauf.de:kosit:xrechnung_3.0'
def _ubl_add_values_tax_currency_code(self, vals):
# OVERRIDE account.edi.xml.ubl_bis3
self._ubl_add_values_tax_currency_code_empty(vals)
def _ubl_tax_totals_node_grouping_key(self, base_line, tax_data, vals, currency):
# EXTENDS account.edi.xml.ubl_bis3
tax_total_keys = super()._ubl_tax_totals_node_grouping_key(base_line, tax_data, vals, currency)
company_currency = vals['company'].currency_id
if (
tax_total_keys['tax_total_key']
and company_currency != vals['currency']
and tax_total_keys['tax_total_key']['currency'] == company_currency
):
tax_total_keys['tax_total_key'] = None
return tax_total_keys
def _add_invoice_header_nodes(self, document_node, vals):
# EXTENDS account.edi.xml.ubl_bis3
super()._add_invoice_header_nodes(document_node, vals)
if not document_node['cbc:BuyerReference']['_text']:
document_node['cbc:BuyerReference']['_text'] = 'N/A'
def _ubl_add_party_endpoint_id_node(self, vals):
# EXTENDS account.edi.xml.ubl_bis3
super()._ubl_add_party_endpoint_id_node(vals)
partner = vals['party_vals']['partner']
if not vals['party_node']['cbc:EndpointID']['_text'] and partner.email:
vals['party_node']['cbc:EndpointID'] = {
'_text': partner.email,
'schemeID': 'EM'
}
def _ubl_add_party_tax_scheme_nodes(self, vals):
# EXTENDS account.edi.xml.ubl_bis3
super()._ubl_add_party_tax_scheme_nodes(vals)
nodes = vals['party_node']['cac:PartyTaxScheme']
partner = vals['party_vals']['partner']
commercial_partner = partner.commercial_partner_id
if (
not nodes
and commercial_partner.peppol_eas
):
nodes.append({
'cbc:CompanyID': {'_text': None},
'cac:TaxScheme': {
'cbc:ID': {'_text': commercial_partner.peppol_eas},
},
})
return vals
def _ubl_add_party_legal_entity_nodes(self, vals):
# EXTENDS account.edi.xml.ubl_bis3
super()._ubl_add_party_legal_entity_nodes(vals)
nodes = vals['party_node']['cac:PartyLegalEntity']
partner = vals['party_vals']['partner']
commercial_partner = partner.commercial_partner_id
if (
not nodes
and commercial_partner.name
):
nodes.append({
'cbc:RegistrationName': {'_text': commercial_partner.name},
'cbc:CompanyID': {
'_text': None,
'schemeID': None,
},
})
def _ubl_get_line_allowance_charge_discount_node(self, vals, discount_values):
# EXTENDS account.edi.xml.ubl_bis3
discount_node = super()._ubl_get_line_allowance_charge_discount_node(vals, discount_values)
discount_node['cbc:AllowanceChargeReason'] = None
discount_node['cbc:MultiplierFactorNumeric'] = None
discount_node['cbc:BaseAmount'] = None
return discount_node

View file

@ -0,0 +1,356 @@
from base64 import b64decode
from contextlib import suppress
import binascii
import re
from lxml import etree
from odoo import _, api, fields, models, Command
from odoo.tools.mimetypes import guess_mimetype
from odoo.exceptions import UserError
from odoo.tools import frozendict
class AccountMove(models.Model):
_inherit = 'account.move'
ubl_cii_xml_id = fields.Many2one(
comodel_name='ir.attachment',
string="Attachment",
compute=lambda self: self._compute_linked_attachment_id('ubl_cii_xml_id', 'ubl_cii_xml_file'),
depends=['ubl_cii_xml_file']
)
ubl_cii_xml_file = fields.Binary(
attachment=True,
string="UBL/CII File",
copy=False,
)
ubl_cii_xml_filename = fields.Char(
string="UBL/CII Filename",
compute='_compute_filename',
)
# -------------------------------------------------------------------------
# COMPUTE
# -------------------------------------------------------------------------
@api.depends('ubl_cii_xml_file')
def _compute_filename(self):
""" Compute the filename based on the uploaded file. """
for record in self:
record.ubl_cii_xml_filename = record.ubl_cii_xml_id.name
# -------------------------------------------------------------------------
# ACTIONS
# -------------------------------------------------------------------------
def action_invoice_download_ubl(self):
return {
'type': 'ir.actions.act_url',
'url': f'/account/download_invoice_documents/{",".join(map(str, self.ids))}/ubl?allow_fallback=true',
'target': 'download',
}
# -------------------------------------------------------------------------
# BUSINESS
# -------------------------------------------------------------------------
def _get_fields_to_detach(self):
# EXTENDS account
fields_list = super()._get_fields_to_detach()
fields_list.append("ubl_cii_xml_file")
return fields_list
def _get_invoice_legal_documents(self, filetype, allow_fallback=False):
# EXTENDS account
self.ensure_one()
if filetype == 'ubl':
if ubl_attachment := self.ubl_cii_xml_id:
return {
'filename': ubl_attachment.name,
'filetype': 'xml',
'content': ubl_attachment.raw,
}
elif allow_fallback:
if self.partner_id and (suggested_edi_format := self.commercial_partner_id._get_suggested_ubl_cii_edi_format()):
builder = self.env['res.partner']._get_edi_builder(suggested_edi_format)
xml_content, errors = builder._export_invoice(self)
filename = builder._export_invoice_filename(self)
return {
'filename': filename,
'filetype': 'xml',
'content': xml_content,
'errors': errors,
}
return super()._get_invoice_legal_documents(filetype, allow_fallback=allow_fallback)
def get_extra_print_items(self):
print_items = super().get_extra_print_items()
posted_moves = self.filtered(lambda move: move.state == 'posted')
suggested_edi_formats = {
suggested_format
for partner in posted_moves.commercial_partner_id
if (suggested_format := partner ._get_suggested_ubl_cii_edi_format())
}
if posted_moves.ubl_cii_xml_id or suggested_edi_formats:
print_items.append({
'key': 'download_ubl',
'description': _('Export XML'),
**posted_moves.action_invoice_download_ubl(),
})
return print_items
def action_group_ungroup_lines_by_tax(self):
"""
This action allows the user to reload an imported move, grouping or not lines by tax
"""
self.ensure_one()
self._check_move_for_group_ungroup_lines_by_tax()
# Check if lines look like they're grouped
lines_grouped = any(
re.match(re.escape(self.partner_id.name or self.env._("Unknown partner")) + r' - \d+ - .*', line.name)
for line in self.line_ids.filtered(lambda x: x.display_type == 'product')
)
if lines_grouped:
self._ungroup_lines()
else:
self._group_lines_by_tax()
def _ungroup_lines(self):
"""
Ungroup lines using the original file, used to import the move
"""
error_message = self.env._("Cannot find the origin file, try by importing it again")
attachments = self.env['ir.attachment'].search([
('res_model', '=', 'account.move'),
('res_id', '=', self.id),
], order='create_date')
if not attachments:
raise UserError(error_message)
files_data = self._to_files_data(attachments)
files_data.extend(self._unwrap_attachments(files_data))
file_data_groups = self._group_files_data_into_groups_of_mixed_types(files_data)
success = False
for file_data_group in file_data_groups:
self.invoice_line_ids = [Command.clear()]
res = self._extend_with_attachments(file_data_group)
if res:
success = True
self._message_log(body=self.env._("Ungrouped lines from origin file"))
break
if not success:
raise UserError(error_message)
def _group_lines_by_tax(self):
"""
Group lines by tax, based on the invoice lines
"""
line_vals = self._get_line_vals_group_by_tax(self.partner_id)
self.invoice_line_ids = [Command.clear()]
self.invoice_line_ids = line_vals
self._message_log(body=self.env._("Grouped lines by tax"))
def _get_line_vals_group_by_tax(self, partner):
"""
Create a collection of dicts containing the values to create invoice lines, grouped by
tax and deferred date if present.
:param partner: partner linked to the move
"""
AccountTax = self.env['account.tax']
base_lines, _tax_lines = self._get_rounded_base_and_tax_lines()
def aggregate_function(target_base_line, base_line):
target_base_line.setdefault('_aggregated_quantity', 0.0)
target_base_line['_aggregated_quantity'] += base_line['quantity']
def grouping_function(base_line):
return {
'_grouping_key': frozendict(AccountTax._prepare_base_line_grouping_key(base_line)),
}
base_lines = AccountTax._reduce_base_lines_with_grouping_function(
base_lines,
grouping_function=grouping_function,
aggregate_function=aggregate_function,
)
to_create = []
for base_line in base_lines:
taxes = base_line['tax_ids']
account = base_line['account_id']
to_create.append(Command.create({
'name': " - ".join([partner.name or self.env._("Unknown partner"), account.code, " / ".join(taxes.mapped('name')) or self.env._("Untaxed")]),
'quantity': base_line['quantity'],
'price_unit': base_line['price_unit'],
**base_line['_grouping_key'],
}))
return to_create
def _check_move_for_group_ungroup_lines_by_tax(self):
"""
Perform checks to evaluate if a move is eligible to grouping/ungrouping
"""
if not self.is_purchase_document(include_receipts=True):
raise UserError(self.env._("You can only (un)group lines of a incoming invoice (vendor bill)"))
if self.state != 'draft':
raise UserError(self.env._("You can only (un)group lines of a draft invoice"))
# -------------------------------------------------------------------------
# EDI
# -------------------------------------------------------------------------
def _get_import_file_type(self, file_data):
""" Identify UBL files. """
# EXTENDS 'account'
if (tree := file_data['xml_tree']) is not None:
if etree.QName(tree).localname == 'AttachedDocument':
return 'account.edi.xml.ubl.attached_document'
if tree.tag == '{urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100}CrossIndustryInvoice':
return 'account.edi.xml.cii'
if ubl_version := tree.findtext('{*}UBLVersionID'):
if ubl_version == '2.0':
return 'account.edi.xml.ubl_20'
if ubl_version in ('2.1', '2.2', '2.3'):
return 'account.edi.xml.ubl_21'
if customization_id := tree.findtext('{*}CustomizationID'):
if 'xrechnung' in customization_id:
return 'account.edi.xml.ubl_de'
if customization_id == 'urn:cen.eu:en16931:2017#compliant#urn:fdc:nen.nl:nlcius:v1.0':
return 'account.edi.xml.ubl_nl'
if customization_id == 'urn:cen.eu:en16931:2017#conformant#urn:fdc:peppol.eu:2017:poacc:billing:international:aunz:3.0':
return 'account.edi.xml.ubl_a_nz'
if customization_id == 'urn:cen.eu:en16931:2017#conformant#urn:fdc:peppol.eu:2017:poacc:billing:international:sg:3.0':
return 'account.edi.xml.ubl_sg'
if 'urn:cen.eu:en16931:2017' in customization_id:
return 'account.edi.xml.ubl_bis3'
return super()._get_import_file_type(file_data)
def _unwrap_attachment(self, file_data, recurse=True):
""" Unwrap UBL AttachedDocument files, which are wrappers around an inner file. """
if file_data['import_file_type'] != 'account.edi.xml.ubl.attached_document':
return super()._unwrap_attachment(file_data, recurse)
content, tree = self._ubl_parse_attached_document(file_data['xml_tree'])
if not content:
return []
embedded_file_data = {
'name': file_data['name'],
'raw': content,
'xml_tree': tree,
'mimetype': guess_mimetype(content),
'attachment': None,
'origin_attachment': file_data['origin_attachment'],
'origin_import_file_type': file_data['origin_import_file_type'],
}
embedded_file_data['import_file_type'] = self._get_import_file_type(embedded_file_data)
embedded = [embedded_file_data]
if recurse:
embedded.extend(self._unwrap_attachments(embedded, recurse=True))
return embedded
@api.model
def _ubl_parse_attached_document(self, tree):
"""
In UBL, an AttachedDocument file is a wrapper around multiple different UBL files.
According to the specifications the original document is stored within the top most
Attachment node either as an Attachment/EmbeddedDocumentBinaryObject or (in special cases)
a CDATA string stored in Attachment/ExternalReference/Description.
We must parse this before passing the original file to the decoder to figure out how best
to handle it.
"""
attachment_node = tree.find('{*}Attachment')
if attachment_node is None:
return '', None
attachment_binary_data = attachment_node.find('./{*}EmbeddedDocumentBinaryObject')
if attachment_binary_data is not None \
and attachment_binary_data.attrib.get('mimeCode') in ('application/xml', 'text/xml'):
with suppress(etree.XMLSyntaxError, binascii.Error):
content_1 = b64decode(attachment_binary_data.text)
return content_1, etree.fromstring(content_1)
external_reference = attachment_node.find('./{*}ExternalReference')
if external_reference is not None:
description = external_reference.findtext('./{*}Description')
mime_code = external_reference.findtext('./{*}MimeCode')
if description and mime_code in ('application/xml', 'text/xml'):
content_2 = description.encode('utf-8')
with suppress(etree.XMLSyntaxError):
return content_2, etree.fromstring(content_2)
# If neither EmbeddedDocumentBinaryObject nor ExternalReference/Description can be decoded as an XML,
# fall back on the contents of EmbeddedDocumentBinaryObject.
return content_1, None
def _get_edi_decoder(self, file_data, new=False):
def _get_child_models(model):
child_models = {model}
for child in self.env.registry[model]._inherit_children:
child_models.update(_get_child_models(child))
return child_models
importable_models = [
*_get_child_models('account.edi.xml.ubl_20'),
*_get_child_models('account.edi.xml.cii'),
]
if file_data['import_file_type'] in importable_models:
return {
'priority': 20,
'decoder': self.env[file_data['import_file_type']]._import_invoice_ubl_cii,
}
return super()._get_edi_decoder(file_data, new)
def _need_ubl_cii_xml(self, ubl_cii_format):
self.ensure_one()
return not self.ubl_cii_xml_id \
and (self.is_sale_document() or self._is_exportable_as_self_invoice()) \
and ubl_cii_format in self.env['res.partner']._get_ubl_cii_formats()
def _is_exportable_as_self_invoice(self):
return (
self.state == 'posted'
and self.is_purchase_document()
and self.journal_id.is_self_billing
and (invoice_edi_format := self.commercial_partner_id._get_peppol_edi_format())
and (edi_builder := self.partner_id._get_edi_builder(invoice_edi_format)) is not None
and edi_builder._can_export_selfbilling()
)
@api.model
def _get_line_vals_list(self, lines_vals):
""" Get invoice line values list.
:param list[tuple] lines_vals: List of values ``[(name, qty, price, tax), ...]``.
:returns: List of invoice line values.
"""
return [{
'sequence': 0, # be sure to put these lines above the 'real' invoice lines
'name': name,
'quantity': quantity,
'price_unit': price_unit,
'tax_ids': [Command.set(tax_ids)],
} for name, quantity, price_unit, tax_ids in lines_vals]
def _get_specific_tax(self, name, amount_type, amount, tax_type):
AccountMoveLine = self.env['account.move.line']
if hasattr(AccountMoveLine, '_predict_specific_tax'):
# company check is already done in the prediction query
predicted_tax_id = AccountMoveLine._predict_specific_tax(
self, name, self.partner_id, amount_type, amount, tax_type,
)
return self.env['account.tax'].browse(predicted_tax_id)
return self.env['account.tax']

View file

@ -0,0 +1,316 @@
import base64
import logging
import io
from lxml import etree
from odoo import _, api, fields, models, tools, SUPERUSER_ID
from odoo.addons.account_edi_ubl_cii.models.account_edi_common import SUPPORTED_FILE_TYPES
from odoo.tools import cleanup_xml_node
from odoo.tools.pdf import OdooPdfFileReader, OdooPdfFileWriter
from odoo.addons.account.tools import dict_to_xml
_logger = logging.getLogger(__name__)
class AccountMoveSend(models.AbstractModel):
_inherit = 'account.move.send'
# -------------------------------------------------------------------------
# CONSTRAINTS
# -------------------------------------------------------------------------
@api.model
def _get_move_constraints(self, move):
constraints = super()._get_move_constraints(move)
if move._is_exportable_as_self_invoice():
constraints.pop('not_sale_document', None)
return constraints
# -------------------------------------------------------------------------
# ALERTS
# -------------------------------------------------------------------------
def _get_alerts(self, moves, moves_data):
# EXTENDS 'account'
alerts = super()._get_alerts(moves, moves_data)
peppol_formats = set(self.env['res.partner']._get_peppol_formats())
if peppol_format_moves := moves.filtered(lambda m: moves_data[m]['invoice_edi_format'] in peppol_formats):
not_configured_company_partners = peppol_format_moves.company_id.partner_id.filtered(
lambda partner: not (partner.peppol_eas and partner.peppol_endpoint)
)
if not_configured_company_partners:
alerts['account_edi_ubl_cii_configure_company'] = {
'message': _("Please fill in your company's VAT or Peppol Address to generate a complete XML file."),
'level': 'info',
'action_text': _("Configure"),
'action': not_configured_company_partners._get_records_action(),
}
not_configured_partners = peppol_format_moves.partner_id.commercial_partner_id.filtered(
lambda partner: not (partner.peppol_eas and partner.peppol_endpoint)
)
if not_configured_partners:
alerts['account_edi_ubl_cii_configure_partner'] = {
'message': _("Please fill in partner's VAT or Peppol Address."),
'level': 'info',
'action_text': _("View Partner(s)"),
'action': not_configured_partners._get_records_action(name=_("Check Partner(s)"))
}
if any(
self.env['account.edi.xml.ubl_bis3']._is_customer_behind_chorus_pro(partner)
for partner in peppol_format_moves.partner_id.commercial_partner_id
):
chorus_pro = self.env['ir.module.module'].sudo().search([('name', '=', 'l10n_fr_facturx_chorus_pro')], limit=1)
if chorus_pro and chorus_pro.state != 'installed':
alerts['account_edi_ubl_cii_chorus_pro_install'] = {
'message': _("Please install the french Chorus pro module to have all the specific rules."),
'level': 'info',
'action': chorus_pro._get_records_action(),
'action_text': _("Install Chorus Pro"),
}
return alerts
# -------------------------------------------------------------------------
# ATTACHMENTS
# -------------------------------------------------------------------------
def _get_invoice_extra_attachments(self, move):
# EXTENDS 'account'
return super()._get_invoice_extra_attachments(move) + move.ubl_cii_xml_id
def _get_placeholder_mail_attachments_data(self, move, invoice_edi_format=None, extra_edis=None, pdf_report=None):
# EXTENDS 'account'
results = super()._get_placeholder_mail_attachments_data(move, invoice_edi_format=invoice_edi_format, extra_edis=extra_edis, pdf_report=pdf_report)
if move._need_ubl_cii_xml(invoice_edi_format):
builder = move.partner_id.commercial_partner_id._get_edi_builder(invoice_edi_format)
filename = builder._export_invoice_filename(move)
results.append({
'id': f'placeholder_{filename}',
'name': filename,
'mimetype': 'application/xml',
'placeholder': True,
})
return results
@api.model
def _display_attachments_widget(self, edi_format, sending_methods):
ubl_format_info = self.env['res.partner']._get_ubl_cii_formats_info()
return (
super()._display_attachments_widget(edi_format, sending_methods)
or ubl_format_info.get(edi_format, {}).get('embed_attachments')
)
@api.model
def _get_ubl_available_attachments(self, mail_attachments_widget, invoice_edi_format):
if not invoice_edi_format or not mail_attachments_widget:
return self.env['ir.attachment'], self.env['ir.attachment']
attachment_ids = [values['id'] for values in mail_attachments_widget if values.get('manual')]
attachments = self.env['ir.attachment'].browse(attachment_ids)
ubl_format_info = self.env['res.partner']._get_ubl_cii_formats_info().get(invoice_edi_format, {})
if not ubl_format_info.get('embed_attachments'):
return self.env['ir.attachment'], attachments
accepted_attachments = attachments.filtered(lambda attachment: attachment.mimetype in SUPPORTED_FILE_TYPES)
return accepted_attachments, attachments - accepted_attachments
# -------------------------------------------------------------------------
# BUSINESS ACTIONS
# -------------------------------------------------------------------------
def _hook_invoice_document_before_pdf_report_render(self, invoice, invoice_data):
# EXTENDS 'account'
super()._hook_invoice_document_before_pdf_report_render(invoice, invoice_data)
if invoice._need_ubl_cii_xml(invoice_data['invoice_edi_format']):
builder = invoice.partner_id.commercial_partner_id._get_edi_builder(invoice_data['invoice_edi_format'])
xml_content, errors = (
builder
.with_context(from_peppol='peppol' in invoice_data['sending_methods'])
._export_invoice(invoice)
)
filename = builder._export_invoice_filename(invoice)
# Failed.
if errors:
invoice_data['error'] = {
'error_title': _("Errors occurred while creating the EDI document (format: %s):", builder._description),
'errors': errors,
}
invoice_data['error_but_continue'] = True
else:
invoice_data['ubl_cii_xml_attachment_values'] = {
'name': filename,
'raw': xml_content,
'mimetype': 'application/xml',
'res_model': invoice._name,
'res_id': invoice.id,
'res_field': 'ubl_cii_xml_file', # Binary field
}
invoice_data['ubl_cii_xml_options'] = {
'ubl_cii_format': invoice_data['invoice_edi_format'],
'builder': builder,
}
def _hook_invoice_document_after_pdf_report_render(self, invoice, invoice_data):
# EXTENDS 'account'
super()._hook_invoice_document_after_pdf_report_render(invoice, invoice_data)
# Add PDF to XML
if self._needs_ubl_postprocessing(invoice_data):
self._postprocess_invoice_ubl_xml(invoice, invoice_data)
# Always silently generate a Factur-X and embed it inside the PDF for inter-portability
if invoice_data.get('ubl_cii_xml_options', {}).get('ubl_cii_format') in ('facturx', 'zugferd'):
xml_facturx = invoice_data['ubl_cii_xml_attachment_values']['raw']
else:
xml_facturx = self.env['account.edi.xml.cii']._export_invoice(invoice)[0]
# during tests, no wkhtmltopdf, create the attachment for test purposes
if tools.config['test_enable']:
self.env['ir.attachment'].sudo().create({
'name': 'factur-x.xml',
'raw': xml_facturx,
'res_id': invoice.id,
'res_model': 'account.move',
})
return
# Read pdf content.
pdf_values = (not self.env.context.get('custom_template_facturx') and invoice.invoice_pdf_report_id) or \
invoice_data.get('pdf_attachment_values') or invoice_data['proforma_pdf_attachment_values']
reader_buffer = io.BytesIO(pdf_values['raw'])
reader = OdooPdfFileReader(reader_buffer, strict=False)
# Post-process.
writer = OdooPdfFileWriter()
writer.cloneReaderDocumentRoot(reader)
attachment_name = 'factur-x.xml'
if invoice.commercial_partner_id.country_code == 'DE' and invoice.commercial_partner_id.peppol_eas != '0204':
attachment_name = 'zugferd.xml'
writer.addAttachment(attachment_name, xml_facturx, subtype='text/xml')
# PDF-A.
if ((invoice_data.get('ubl_cii_xml_options', {}).get('ubl_cii_format') in ('facturx', 'zugferd')
or (invoice.commercial_partner_id.country_code in ('FR', 'DE') and invoice.commercial_partner_id.peppol_eas != '0204'))
and invoice.country_code in ('FR', 'DE')
and not writer.is_pdfa
):
try:
writer.convert_to_pdfa()
except Exception:
_logger.exception("Error while converting to PDF/A")
# Extra metadata to be Factur-x PDF-A compliant.
content = self.env['ir.qweb']._render(
'account_edi_ubl_cii.account_invoice_pdfa_3_facturx_metadata',
{
'title': invoice.name,
'date': fields.Date.context_today(self),
},
)
if "<pdfaid:conformance>B</pdfaid:conformance>" in content:
content.replace("<pdfaid:conformance>B</pdfaid:conformance>", "<pdfaid:conformance>A</pdfaid:conformance>")
writer.add_file_metadata(content.encode())
# Replace the current content.
writer_buffer = io.BytesIO()
writer.write(writer_buffer)
pdf_values['raw'] = writer_buffer.getvalue()
reader_buffer.close()
writer_buffer.close()
@api.model
def _needs_ubl_postprocessing(self, invoice_data):
return 'ubl_cii_xml_options' in invoice_data and invoice_data['ubl_cii_xml_options']['ubl_cii_format'] not in ('facturx', 'zugferd')
@api.model
def _postprocess_invoice_ubl_xml(self, invoice, invoice_data):
"""
Include the PDF in the UBL as an AdditionalDocumentReference element.
According to UBL 2.1 standard, the AdditionalDocumentReference element should be
placed above ProjectReference which isn't usually in xml files.
So usually it's set above AccountingSupplierParty. Here, we try to find a suitable anchor point among
the available element to insert our PDF attachment. If none of these are found, we
skip adding the attachment to avoid breaking the XML structure.
Inside CreditNote, the ProjectReference element is not used in xml.
So we look for OriginatorDocumentReference instead.
"""
tree = etree.fromstring(invoice_data['ubl_cii_xml_attachment_values']['raw'])
localname = etree.QName(tree).localname
anchor_xpath = {
'Invoice': "//*[local-name()='ProjectReference' or local-name()='Signature' or local-name()='AccountingSupplierParty']",
'CreditNote': "//*[local-name()='StatementDocumentReference' or local-name()='OriginatorDocumentReference' or local-name()='Signature' or local-name()='AccountingSupplierParty']",
'DebitNote': "//*[local-name()='Signature' or local-name()='AccountingSupplierParty']",
}.get(localname)
anchor_elements = tree.xpath(anchor_xpath)
if not anchor_elements:
return
anchor_index = tree.index(anchor_elements[0])
pdf_values = invoice.invoice_pdf_report_id or invoice_data.get('pdf_attachment_values') or invoice_data['proforma_pdf_attachment_values']
edi_model = invoice_data["ubl_cii_xml_options"]["builder"]
doc_type_code_node = edi_model._get_document_type_code_node(invoice, invoice_data)
vals = {'invoice': invoice}
edi_model._add_invoice_config_vals(vals)
nsmap = edi_model._get_document_nsmap(vals)
attachments_to_embed = [
{
'filename': attachment.name,
'raw': attachment.raw,
'mimetype': attachment.mimetype,
}
for attachment in self._get_ubl_available_attachments(
invoice_data['mail_attachments_widget'],
invoice_data['invoice_edi_format']
)[0]
] if invoice_data.get('mail_attachments_widget') else []
attachments_to_embed.append({
'filename': pdf_values['name'],
'raw': pdf_values['raw'],
'mimetype': pdf_values['mimetype'],
'document_type_node': doc_type_code_node,
})
for attachment_values in attachments_to_embed:
additional_document_reference_node = {
'_tag': 'cac:AdditionalDocumentReference',
'cbc:ID': {'_text': attachment_values['filename']},
'cbc:DocumentTypeCode': attachment_values.get('document_type_node'),
'cac:Attachment': {
'cbc:EmbeddedDocumentBinaryObject': {
'_text': base64.b64encode(attachment_values['raw']).decode(),
'mimeCode': attachment_values['mimetype'],
'filename': attachment_values['filename']
}
}
}
tree.insert(anchor_index, dict_to_xml(additional_document_reference_node, nsmap=nsmap))
invoice_data['ubl_cii_xml_attachment_values']['raw'] = etree.tostring(
cleanup_xml_node(tree), xml_declaration=True, encoding='UTF-8'
)
def _link_invoice_documents(self, invoices_data):
# EXTENDS 'account'
super()._link_invoice_documents(invoices_data)
attachments_vals = [
invoice_data.get('ubl_cii_xml_attachment_values')
for invoice_data in invoices_data.values()
if invoice_data.get('ubl_cii_xml_attachment_values')
]
if attachments_vals:
attachments = self.env['ir.attachment'].with_user(SUPERUSER_ID).create(attachments_vals)
res_ids = attachments.mapped('res_id')
self.env['account.move'].browse(res_ids).invalidate_recordset(fnames=['ubl_cii_xml_id', 'ubl_cii_xml_file'])

View file

@ -0,0 +1,127 @@
from odoo import api, fields, models
class AccountTax(models.Model):
_inherit = 'account.tax'
ubl_cii_tax_category_code = fields.Selection(
help="The VAT category code used for electronic invoicing purposes.",
string="Tax Category Code",
selection=[
('AE', 'AE - Vat Reverse Charge'),
('E', 'E - Exempt from Tax'),
('S', 'S - Standard rate'),
('Z', 'Z - Zero rated goods'),
('G', 'G - Free export item, VAT not charged'),
('O', 'O - Services outside scope of tax'),
('K', 'K - VAT exempt for EEA intra-community supply of goods and services'),
('L', 'L - Canary Islands general indirect tax'),
('M', 'M - Tax for production, services and importation in Ceuta and Melilla'),
('B', 'B - Transferred (VAT), In Italy')
]
)
ubl_cii_tax_exemption_reason_code = fields.Selection(
help="The reason why the amount is exempted from VAT or why no VAT is being charged, used for electronic invoicing purposes.",
string="Tax Exemption Reason Code",
selection=[
('VATEX-EU-79-C', 'VATEX-EU-79-C - Exempt based on article 79, point c of Council Directive 2006/112/EC'),
('VATEX-EU-132', 'VATEX-EU-132 - Exempt based on article 132 of Council Directive 2006/112/EC'),
('VATEX-EU-132-1A', 'VATEX-EU-132-1A - Exempt based on article 132, section 1 (a) of Council Directive 2006/112/EC'),
('VATEX-EU-132-1B', 'VATEX-EU-132-1B - Exempt based on article 132, section 1 (b) of Council Directive 2006/112/EC'),
('VATEX-EU-132-1C', 'VATEX-EU-132-1C - Exempt based on article 132, section 1 (c) of Council Directive 2006/112/EC'),
('VATEX-EU-132-1D', 'VATEX-EU-132-1D - Exempt based on article 132, section 1 (d) of Council Directive 2006/112/EC'),
('VATEX-EU-132-1E', 'VATEX-EU-132-1E - Exempt based on article 132, section 1 (e) of Council Directive 2006/112/EC'),
('VATEX-EU-132-1F', 'VATEX-EU-132-1F - Exempt based on article 132, section 1 (f) of Council Directive 2006/112/EC'),
('VATEX-EU-132-1G', 'VATEX-EU-132-1G - Exempt based on article 132, section 1 (g) of Council Directive 2006/112/EC'),
('VATEX-EU-132-1H', 'VATEX-EU-132-1H - Exempt based on article 132, section 1 (h) of Council Directive 2006/112/EC'),
('VATEX-EU-132-1I', 'VATEX-EU-132-1I - Exempt based on article 132, section 1 (i) of Council Directive 2006/112/EC'),
('VATEX-EU-132-1J', 'VATEX-EU-132-1J - Exempt based on article 132, section 1 (j) of Council Directive 2006/112/EC'),
('VATEX-EU-132-1K', 'VATEX-EU-132-1K - Exempt based on article 132, section 1 (k) of Council Directive 2006/112/EC'),
('VATEX-EU-132-1L', 'VATEX-EU-132-1L - Exempt based on article 132, section 1 (l) of Council Directive 2006/112/EC'),
('VATEX-EU-132-1M', 'VATEX-EU-132-1M - Exempt based on article 132, section 1 (m) of Council Directive 2006/112/EC'),
('VATEX-EU-132-1N', 'VATEX-EU-132-1N - Exempt based on article 132, section 1 (n) of Council Directive 2006/112/EC'),
('VATEX-EU-132-1O', 'VATEX-EU-132-1O - Exempt based on article 132, section 1 (o) of Council Directive 2006/112/EC'),
('VATEX-EU-132-1P', 'VATEX-EU-132-1P - Exempt based on article 132, section 1 (p) of Council Directive 2006/112/EC'),
('VATEX-EU-132-1Q', 'VATEX-EU-132-1Q - Exempt based on article 132, section 1 (q) of Council Directive 2006/112/EC'),
('VATEX-EU-143', 'VATEX-EU-143 - Exempt based on article 143 of Council Directive 2006/112/EC'),
('VATEX-EU-143-1A', 'VATEX-EU-143-1A - Exempt based on article 143, section 1 (a) of Council Directive 2006/112/EC'),
('VATEX-EU-143-1B', 'VATEX-EU-143-1B - Exempt based on article 143, section 1 (b) of Council Directive 2006/112/EC'),
('VATEX-EU-143-1C', 'VATEX-EU-143-1C - Exempt based on article 143, section 1 (c) of Council Directive 2006/112/EC'),
('VATEX-EU-143-1D', 'VATEX-EU-143-1D - Exempt based on article 143, section 1 (d) of Council Directive 2006/112/EC'),
('VATEX-EU-143-1E', 'VATEX-EU-143-1E - Exempt based on article 143, section 1 (e) of Council Directive 2006/112/EC'),
('VATEX-EU-143-1F', 'VATEX-EU-143-1F - Exempt based on article 143, section 1 (f) of Council Directive 2006/112/EC'),
('VATEX-EU-143-1FA', 'VATEX-EU-143-1FA - Exempt based on article 143, section 1 (fa) of Council Directive 2006/112/EC'),
('VATEX-EU-143-1G', 'VATEX-EU-143-1G - Exempt based on article 143, section 1 (g) of Council Directive 2006/112/EC'),
('VATEX-EU-143-1H', 'VATEX-EU-143-1H - Exempt based on article 143, section 1 (h) of Council Directive 2006/112/EC'),
('VATEX-EU-143-1I', 'VATEX-EU-143-1I - Exempt based on article 143, section 1 (i) of Council Directive 2006/112/EC'),
('VATEX-EU-143-1J', 'VATEX-EU-143-1J - Exempt based on article 143, section 1 (j) of Council Directive 2006/112/EC'),
('VATEX-EU-143-1K', 'VATEX-EU-143-1K - Exempt based on article 143, section 1 (k) of Council Directive 2006/112/EC'),
('VATEX-EU-143-1L', 'VATEX-EU-143-1L - Exempt based on article 143, section 1 (l) of Council Directive 2006/112/EC'),
('VATEX-EU-144', 'VATEX-EU-144 - Exempt based on article 144 of Council Directive 2006/112/EC'),
('VATEX-EU-146-1E', 'VATEX-EU-146-1E - Exempt based on article 146 section 1 (e) of Council Directive 2006/112/EC'),
('VATEX-EU-148', 'VATEX-EU-148 - Exempt based on article 148 of Council Directive 2006/112/EC'),
('VATEX-EU-148-A', 'VATEX-EU-148-A - Exempt based on article 148, section (a) of Council Directive 2006/112/EC'),
('VATEX-EU-148-B', 'VATEX-EU-148-B - Exempt based on article 148, section (b) of Council Directive 2006/112/EC'),
('VATEX-EU-148-C', 'VATEX-EU-148-C - Exempt based on article 148, section (c) of Council Directive 2006/112/EC'),
('VATEX-EU-148-D', 'VATEX-EU-148-D - Exempt based on article 148, section (d) of Council Directive 2006/112/EC'),
('VATEX-EU-148-E', 'VATEX-EU-148-E - Exempt based on article 148, section (e) of Council Directive 2006/112/EC'),
('VATEX-EU-148-F', 'VATEX-EU-148-F - Exempt based on article 148, section (f) of Council Directive 2006/112/EC'),
('VATEX-EU-148-G', 'VATEX-EU-148-G - Exempt based on article 148, section (g) of Council Directive 2006/112/EC'),
('VATEX-EU-151', 'VATEX-EU-151 - Exempt based on article 151 of Council Directive 2006/112/EC'),
('VATEX-EU-151-1A', 'VATEX-EU-151-1A - Exempt based on article 151, section 1 (a) of Council Directive 2006/112/EC'),
('VATEX-EU-151-1AA', 'VATEX-EU-151-1AA - Exempt based on article 151, section 1 (aa) of Council Directive 2006/112/EC'),
('VATEX-EU-151-1B', 'VATEX-EU-151-1B - Exempt based on article 151, section 1 (b) of Council Directive 2006/112/EC'),
('VATEX-EU-151-1C', 'VATEX-EU-151-1C - Exempt based on article 151, section 1 (c) of Council Directive 2006/112/EC'),
('VATEX-EU-151-1D', 'VATEX-EU-151-1D - Exempt based on article 151, section 1 (d) of Council Directive 2006/112/EC'),
('VATEX-EU-151-1E', 'VATEX-EU-151-1E - Exempt based on article 151, section 1 (e) of Council Directive 2006/112/EC'),
('VATEX-EU-153', 'VATEX-EU-153 - Exempt based on article 153 of Council Directive 2006/112/EC'),
('VATEX-EU-159', 'VATEX-EU-159 - Exempt based on article 159 of Council Directive 2006/112/EC'),
('VATEX-EU-309', 'VATEX-EU-309 - Exempt based on article 309 of Council Directive 2006/112/EC'),
('VATEX-EU-AE', 'VATEX-EU-AE - Reverse charge'),
('VATEX-EU-D', 'VATEX-EU-D - Intra-Community acquisition from second hand means of transport'),
('VATEX-EU-F', 'VATEX-EU-F - Intra-Community acquisition of second hand goods'),
('VATEX-EU-G', 'VATEX-EU-G - Export outside the EU'),
('VATEX-EU-I', 'VATEX-EU-I - Intra-Community acquisition of works of art'),
('VATEX-EU-IC', 'VATEX-EU-IC - Intra-Community supply'),
('VATEX-EU-O', 'VATEX-EU-O - Not subject to VAT'),
('VATEX-EU-J', 'VATEX-EU-J - Intra-Community acquisition of collectors items and antiques'),
('VATEX-FR-FRANCHISE', 'VATEX-FR-FRANCHISE - France domestic VAT franchise in base'),
('VATEX-FR-CNWVAT', 'VATEX-FR-CNWVAT - France domestic Credit Notes without VAT, due to supplier forfeit of VAT for discount'),
('VATEX-FR-CGI261-1', 'VATEX-FR-CGI261-1 - Exempt based on 1 of article 261 of the Code Général des Impôts (CGI ; General tax code)'),
('VATEX-FR-CGI261-2', 'VATEX-FR-CGI261-2 - Exempt based on 2 of article 261 of the Code Général des Impôts (CGI ; General tax code)'),
('VATEX-FR-CGI261-3', 'VATEX-FR-CGI261-3 - Exempt based on 3 of article 261 of the Code Général des Impôts (CGI ; General tax code)'),
('VATEX-FR-CGI261-4', 'VATEX-FR-CGI261-4 - Exempt based on 4 of article 261 of the Code Général des Impôts (CGI ; General tax code)'),
('VATEX-FR-CGI261-5', 'VATEX-FR-CGI261-5 - Exempt based on 5 of article 261 of the Code Général des Impôts (CGI ; General tax code)'),
('VATEX-FR-CGI261-7', 'VATEX-FR-CGI261-7 - Exempt based on 7 of article 261 of the Code Général des Impôts (CGI ; General tax code)'),
('VATEX-FR-CGI261-8', 'VATEX-FR-CGI261-8 - Exempt based on 8 of article 261 of the Code Général des Impôts (CGI ; General tax code)'),
('VATEX-FR-CGI261A', 'VATEX-FR-CGI261A - Exempt based on article 261 A of the Code Général des Impôts (CGI ; General tax code)'),
('VATEX-FR-CGI261B', 'VATEX-FR-CGI261B - Exempt based on article 261 B of the Code Général des Impôts (CGI ; General tax code)'),
('VATEX-FR-CGI261C-1', 'VATEX-FR-CGI261C-1 - Exempt based on 1° of article 261 C of the Code Général des Impôts (CGI ; General tax code)'),
('VATEX-FR-CGI261C-2', 'VATEX-FR-CGI261C-2 - Exempt based on 2° of article 261 C of the Code Général des Impôts (CGI ; General tax code)'),
('VATEX-FR-CGI261C-3', 'VATEX-FR-CGI261C-3 - Exempt based on 3° of article 261 C of the Code Général des Impôts (CGI ; General tax code)'),
('VATEX-FR-CGI261D-1', 'VATEX-FR-CGI261D-1 - Exempt based on 1° of article 261 D of the Code Général des Impôts (CGI ; General tax code)'),
('VATEX-FR-CGI261D-1BIS', 'VATEX-FR-CGI261D-1BIS - Exempt based on 1°bis of article 261 D of the Code Général des Impôts (CGI ; General tax code)'),
('VATEX-FR-CGI261D-2', 'VATEX-FR-CGI261D-2 - Exempt based on 2° of article 261 D of the Code Général des Impôts (CGI ; General tax code)'),
('VATEX-FR-CGI261D-3', 'VATEX-FR-CGI261D-3 - Exempt based on 3° of article 261 D of the Code Général des Impôts (CGI ; General tax code)'),
('VATEX-FR-CGI261D-4', 'VATEX-FR-CGI261D-4 - Exempt based on 4° of article 261 D of the Code Général des Impôts (CGI ; General tax code)'),
('VATEX-FR-CGI261E-1', 'VATEX-FR-CGI261E-1 - Exempt based on 1° of article 261 E of the Code Général des Impôts (CGI ; General tax code)'),
('VATEX-FR-CGI261E-2', 'VATEX-FR-CGI261E-2 - Exempt based on 2° of article 261 E of the Code Général des Impôts (CGI ; General tax code)'),
('VATEX-FR-CGI277A', 'VATEX-FR-CGI277A - Exempt based on article 277 A of the Code Général des Impôts (CGI ; General tax code)'),
('VATEX-FR-CGI275', 'VATEX-FR-CGI275 - Exempt based on article 275 of the Code Général des Impôts (CGI ; General tax code)'),
('VATEX-FR-298SEXDECIESA', 'VATEX-FR-298SEXDECIESA - Exempt based on article 298 sexdecies A of the Code Général des Impôts (CGI ; General tax code)'),
('VATEX-FR-CGI295', 'VATEX-FR-CGI295 - Exempt based on article 295 of the Code Général des Impôts (CGI ; General tax code)'),
('VATEX-FR-AE', 'VATEX-FR-AE - Exempt based on 2 of article 283 of the Code Général des Impôts (CGI ; General tax code)'),
]
)
ubl_cii_requires_exemption_reason = fields.Boolean(compute='_compute_ubl_cii_requires_exemption_reason')
@api.depends('ubl_cii_tax_category_code')
def _compute_ubl_cii_requires_exemption_reason(self):
for tax in self:
tax.ubl_cii_requires_exemption_reason = tax.ubl_cii_tax_category_code in ['AE', 'E', 'G', 'O', 'K']
@api.onchange('ubl_cii_requires_exemption_reason')
def _onchange_ubl_cii_tax_category_code(self):
for tax in self:
if not tax.ubl_cii_requires_exemption_reason:
tax.ubl_cii_tax_exemption_reason_code = False

View file

@ -1,113 +1,30 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
import io
from odoo import models
from odoo.tools import cleanup_xml_node
from odoo.tools.pdf import OdooPdfFileReader, OdooPdfFileWriter
from lxml import etree
import base64
from xml.sax.saxutils import escape, quoteattr
import io
class IrActionsReport(models.Model):
_inherit = 'ir.actions.report'
def _is_invoice_report(self, report_ref):
# EXTENDS account
def _render_qweb_pdf_prepare_streams(self, report_ref, data, res_ids=None):
# EXTENDS base
collected_streams = super()._render_qweb_pdf_prepare_streams(report_ref, data, res_ids)
# allows to add factur-x.xml to custom PDF templates (comma separated list of template names)
custom_templates = self.env['ir.config_parameter'].sudo().get_param('account.custom_templates_facturx_list', '')
custom_templates = [report.strip() for report in custom_templates.split(',')]
return super()._is_invoice_report(report_ref) or self._get_report(report_ref).report_name in custom_templates
def _add_pdf_into_invoice_xml(self, invoice, stream_data):
format_codes = ['ubl_bis3', 'ubl_de', 'nlcius_1', 'efff_1']
edi_attachments = invoice.edi_document_ids.filtered(lambda d: d.edi_format_id.code in format_codes).sudo().attachment_id
for edi_attachment in edi_attachments:
old_xml = base64.b64decode(edi_attachment.with_context(bin_size=False).datas, validate=True)
tree = etree.fromstring(old_xml)
anchor_elements = tree.xpath("//*[local-name()='AccountingSupplierParty']")
additional_document_elements = tree.xpath("//*[local-name()='AdditionalDocumentReference']")
# with this clause, we ensure the xml are only postprocessed once (even when the invoice is reset to
# draft then validated again)
if anchor_elements and not additional_document_elements:
pdf_stream = stream_data['stream']
pdf_content_b64 = base64.b64encode(pdf_stream.getvalue()).decode()
pdf_name = '%s.pdf' % invoice.name.replace('/', '_')
to_inject = '''
<cac:AdditionalDocumentReference
xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2"
xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2"
xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2">
<cbc:ID>%s</cbc:ID>
<cac:Attachment>
<cbc:EmbeddedDocumentBinaryObject mimeCode="application/pdf" filename=%s>
%s
</cbc:EmbeddedDocumentBinaryObject>
</cac:Attachment>
</cac:AdditionalDocumentReference>
''' % (escape(pdf_name), quoteattr(pdf_name), pdf_content_b64)
anchor_index = tree.index(anchor_elements[0])
tree.insert(anchor_index, etree.fromstring(to_inject))
new_xml = etree.tostring(cleanup_xml_node(tree), xml_declaration=True, encoding='UTF-8')
edi_attachment.sudo().write({
'res_model': 'account.move',
'res_id': invoice.id,
'datas': base64.b64encode(new_xml),
'mimetype': 'application/xml',
})
def _render_qweb_pdf_prepare_streams(self, report_ref, data, res_ids=None):
# EXTENDS base
# Add the pdf report in the XML as base64 string.
collected_streams = super()._render_qweb_pdf_prepare_streams(report_ref, data, res_ids=res_ids)
if collected_streams \
and res_ids \
and self._is_invoice_report(report_ref):
for res_id, stream_data in collected_streams.items():
invoice = self.env['account.move'].browse(res_id)
self._add_pdf_into_invoice_xml(invoice, stream_data)
# If Factur-X isn't already generated, generate and embed it inside the PDF
if len(res_ids) == 1:
invoice = self.env['account.move'].browse(res_ids)
edi_doc_codes = invoice.edi_document_ids.edi_format_id.mapped('code')
# If Factur-X hasn't been generated, generate and embed it anyway
if invoice.is_sale_document() \
and invoice.state == 'posted' \
and 'facturx_1_0_05' not in edi_doc_codes \
and self.env.ref('account_edi_ubl_cii.edi_facturx_1_0_05', raise_if_not_found=False):
# Add the attachments to the pdf file
pdf_stream = collected_streams[invoice.id]['stream']
# Read pdf content.
pdf_content = pdf_stream.getvalue()
reader_buffer = io.BytesIO(pdf_content)
reader = OdooPdfFileReader(reader_buffer, strict=False)
# Post-process and embed the additional files.
writer = OdooPdfFileWriter()
writer.cloneReaderDocumentRoot(reader)
# Copy all pages from the reader to the writer (required for PyPDF2 3.x)
for page_num in range(reader.getNumPages()):
page = reader.getPage(page_num)
writer.addPage(page)
# Generate and embed Factur-X
xml_content, _errors = self.env['account.edi.xml.cii']._export_invoice(invoice)
writer.addAttachment(
name=self.env['account.edi.xml.cii']._export_invoice_filename(invoice),
data=xml_content,
subtype='text/xml',
)
# Replace the current content.
pdf_stream.close()
new_pdf_stream = io.BytesIO()
writer.write(new_pdf_stream)
collected_streams[invoice.id]['stream'] = new_pdf_stream
if (
collected_streams
and res_ids
and len(res_ids) == 1
and self._get_report(report_ref).report_name in custom_templates
):
# Generate and embed Factur-X
invoice = self.env['account.move'].browse(res_ids)
if invoice.is_sale_document() and invoice.state == 'posted':
pdf_stream = collected_streams[invoice.id]['stream']
invoice_data = {'pdf_attachment_values': {'raw': pdf_stream.getvalue()}}
self.env['account.move.send'].with_context(custom_template_facturx=True)._hook_invoice_document_after_pdf_report_render(invoice, invoice_data)
collected_streams[invoice.id]['stream'] = io.BytesIO(invoice_data['pdf_attachment_values']['raw'])
return collected_streams

View file

@ -1,109 +0,0 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import models
from odoo.tools import cleanup_xml_node
from odoo.tools.pdf import OdooPdfFileReader, OdooPdfFileWriter
from lxml import etree
import base64
from xml.sax.saxutils import escape, quoteattr
import io
class IrActionsReport(models.Model):
_inherit = 'ir.actions.report'
def _is_invoice_report(self, report_ref):
# EXTENDS account
# allows to add factur-x.xml to custom PDF templates (comma separated list of template names)
custom_templates = self.env['ir.config_parameter'].sudo().get_param('account.custom_templates_facturx_list', '')
custom_templates = [report.strip() for report in custom_templates.split(',')]
return super()._is_invoice_report(report_ref) or self._get_report(report_ref).report_name in custom_templates
def _add_pdf_into_invoice_xml(self, invoice, stream_data):
format_codes = ['ubl_bis3', 'ubl_de', 'nlcius_1', 'efff_1']
edi_attachments = invoice.edi_document_ids.filtered(lambda d: d.edi_format_id.code in format_codes).sudo().attachment_id
for edi_attachment in edi_attachments:
old_xml = base64.b64decode(edi_attachment.with_context(bin_size=False).datas, validate=True)
tree = etree.fromstring(old_xml)
anchor_elements = tree.xpath("//*[local-name()='AccountingSupplierParty']")
additional_document_elements = tree.xpath("//*[local-name()='AdditionalDocumentReference']")
# with this clause, we ensure the xml are only postprocessed once (even when the invoice is reset to
# draft then validated again)
if anchor_elements and not additional_document_elements:
pdf_stream = stream_data['stream']
pdf_content_b64 = base64.b64encode(pdf_stream.getvalue()).decode()
pdf_name = '%s.pdf' % invoice.name.replace('/', '_')
to_inject = '''
<cac:AdditionalDocumentReference
xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2"
xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2"
xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2">
<cbc:ID>%s</cbc:ID>
<cac:Attachment>
<cbc:EmbeddedDocumentBinaryObject mimeCode="application/pdf" filename=%s>
%s
</cbc:EmbeddedDocumentBinaryObject>
</cac:Attachment>
</cac:AdditionalDocumentReference>
''' % (escape(pdf_name), quoteattr(pdf_name), pdf_content_b64)
anchor_index = tree.index(anchor_elements[0])
tree.insert(anchor_index, etree.fromstring(to_inject))
new_xml = etree.tostring(cleanup_xml_node(tree), xml_declaration=True, encoding='UTF-8')
edi_attachment.sudo().write({
'res_model': 'account.move',
'res_id': invoice.id,
'datas': base64.b64encode(new_xml),
'mimetype': 'application/xml',
})
def _render_qweb_pdf_prepare_streams(self, report_ref, data, res_ids=None):
# EXTENDS base
# Add the pdf report in the XML as base64 string.
collected_streams = super()._render_qweb_pdf_prepare_streams(report_ref, data, res_ids=res_ids)
if collected_streams \
and res_ids \
and self._is_invoice_report(report_ref):
for res_id, stream_data in collected_streams.items():
invoice = self.env['account.move'].browse(res_id)
self._add_pdf_into_invoice_xml(invoice, stream_data)
# If Factur-X isn't already generated, generate and embed it inside the PDF
if len(res_ids) == 1:
invoice = self.env['account.move'].browse(res_ids)
edi_doc_codes = invoice.edi_document_ids.edi_format_id.mapped('code')
# If Factur-X hasn't been generated, generate and embed it anyway
if invoice.is_sale_document() \
and invoice.state == 'posted' \
and 'facturx_1_0_05' not in edi_doc_codes \
and self.env.ref('account_edi_ubl_cii.edi_facturx_1_0_05', raise_if_not_found=False):
# Add the attachments to the pdf file
pdf_stream = collected_streams[invoice.id]['stream']
# Read pdf content.
pdf_content = pdf_stream.getvalue()
reader_buffer = io.BytesIO(pdf_content)
reader = OdooPdfFileReader(reader_buffer, strict=False)
# Post-process and embed the additional files.
writer = OdooPdfFileWriter()
writer.cloneReaderDocumentRoot(reader)
# Generate and embed Factur-X
xml_content, _errors = self.env['account.edi.xml.cii']._export_invoice(invoice)
writer.addAttachment(
name=self.env['account.edi.xml.cii']._export_invoice_filename(invoice),
data=xml_content,
subtype='text/xml',
)
# Replace the current content.
pdf_stream.close()
new_pdf_stream = io.BytesIO()
writer.write(new_pdf_stream)
collected_streams[invoice.id]['stream'] = new_pdf_stream
return collected_streams

View file

@ -1,14 +0,0 @@
# -*- coding: utf-8 -*-
from odoo import models
class MailTemplate(models.Model):
_inherit = "mail.template"
def _get_edi_attachments(self, document):
# EXTENDS account_edi
# Avoid having factur-x.xml in the 'send & print' wizard
if document.edi_format_id.code == 'facturx_1_0_05':
return {}
return super()._get_edi_attachments(document)

View file

@ -0,0 +1,320 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
import re
from stdnum.fr import siret
from odoo import models, fields, api, _
from odoo.exceptions import ValidationError
from odoo.addons.account_edi_ubl_cii.models.account_edi_common import EAS_MAPPING
from odoo.addons.account.models.company import PEPPOL_DEFAULT_COUNTRIES
PEPPOL_ENDPOINT_INVALIDCHARS_RE = re.compile(r'[^a-zA-Z\d\-._~]')
PEPPOL_ENDPOINT_INVALID_CHARS_RE_BY_EAS = {
'0208': re.compile(r'[^0-9]'),
'9925': re.compile(r'[^beBE0-9]'),
}
def sanitize_peppol_endpoint(peppol_endpoint, eas=None):
if not peppol_endpoint:
return peppol_endpoint
sanitizer = PEPPOL_ENDPOINT_INVALID_CHARS_RE_BY_EAS.get(eas, PEPPOL_ENDPOINT_INVALIDCHARS_RE)
return sanitizer.sub('', peppol_endpoint)
class ResPartner(models.Model):
_inherit = 'res.partner'
invoice_edi_format = fields.Selection(
selection_add=[
('facturx', "France (FacturX)"),
('ubl_bis3', "EU Standard (Peppol Bis 3.0)"),
('zugferd', "Germany (ZUGFeRD)"),
('xrechnung', "Germany (XRechnung)"),
('nlcius', "Netherlands (NLCIUS)"),
('ubl_a_nz', "Australia (BIS Billing 3.0 A-NZ)"),
('ubl_sg', "Singapore (BIS Billing 3.0 SG)"),
],
)
is_ubl_format = fields.Boolean(compute='_compute_is_ubl_format')
is_peppol_edi_format = fields.Boolean(compute='_compute_is_peppol_edi_format') # TODO remove in master
peppol_endpoint = fields.Char(
string="Peppol Endpoint",
help="Unique identifier used by the BIS Billing 3.0 and its derivatives, also known as 'Endpoint ID'.",
compute="_compute_peppol_endpoint",
store=True,
readonly=False,
tracking=True,
)
peppol_eas = fields.Selection(
string="Peppol e-address (EAS)",
help="""Code used to identify the Endpoint for BIS Billing 3.0 and its derivatives.
List available at https://docs.peppol.eu/poacc/billing/3.0/codelist/eas/""",
compute="_compute_peppol_eas",
store=True,
readonly=False,
tracking=True,
selection=[
('9923', "Albania VAT"),
('9922', "Andorra VAT"),
('0151', "Australia ABN"),
('9914', "Austria UID"),
('9915', "Austria VOKZ"),
('0208', "Belgian Company Registry"),
('9925', "Belgian VAT"),
('9924', "Bosnia and Herzegovina VAT"),
('9926', "Bulgaria VAT"),
('9934', "Croatia VAT"),
('9928', "Cyprus VAT"),
('9929', "Czech Republic VAT"),
('0096', "Denmark P"),
('0184', "Denmark CVR"),
('0198', "Denmark SE"),
('0191', "Estonia Company code"),
('9931', "Estonia VAT"),
('0037', "Finland LY-tunnus"),
('0216', "Finland OVT code"),
('0213', "Finland VAT"),
('0002', "France SIRENE"),
('0009', "France SIRET"),
('9957', "France VAT"),
('0225', "France FRCTC Electronic Address"),
('0240', "France Register of legal persons"),
('0204', "Germany Leitweg-ID"),
('9930', "Germany VAT"),
('9933', "Greece VAT"),
('9910', "Hungary VAT"),
('0196', "Iceland Kennitala"),
('9935', "Ireland VAT"),
('0211', "Italia Partita IVA"),
('0097', "Italia FTI"),
('0188', "Japan SST"),
('0221', "Japan IIN"),
('0218', "Latvia Unified registration number"),
('9939', "Latvia VAT"),
('9936', "Liechtenstein VAT"),
('0200', "Lithuania JAK"),
('9937', "Lithuania VAT"),
('9938', "Luxembourg VAT"),
('9942', "Macedonia VAT"),
('0230', "Malaysia"),
('9943', "Malta VAT"),
('9940', "Monaco VAT"),
('9941', "Montenegro VAT"),
('0106', "Netherlands KvK"),
('0190', "Netherlands OIN"),
('9944', "Netherlands VAT"),
('0192', "Norway Org.nr."),
('9945', "Poland VAT"),
('9946', "Portugal VAT"),
('9947', "Romania VAT"),
('9948', "Serbia VAT"),
('0195', "Singapore UEN"),
('9949', "Slovenia VAT"),
('9950', "Slovakia VAT"),
('9920', "Spain VAT"),
('0007', "Sweden Org.nr."),
('9955', "Sweden VAT"),
('9927', "Swiss VAT"),
('0183', "Swiss UIDB"),
('9952', "Turkey VAT"),
('0235', "UAE Tax Identification Number (TIN)"),
('9932', "United Kingdom VAT"),
('9959', "USA EIN"),
('0060', "DUNS Number"),
('0088', "EAN Location Code"),
('0130', "Directorates of the European Commission"),
('0135', "SIA Object Identifiers"),
('0142', "SECETI Object Identifiers"),
('0193', "UBL.BE party identifier"),
('0199', "Legal Entity Identifier (LEI)"),
('0201', "Codice Univoco Unità Organizzativa iPA"),
('0202', "Indirizzo di Posta Elettronica Certificata"),
('0209', "GS1 identification keys"),
('0210', "Codice Fiscale"),
('9913', "Business Registers Network"),
('9918', "S.W.I.F.T"),
('9919', "Kennziffer des Unternehmensregisters"),
('9951', "San Marino VAT"),
('9953', "Vatican VAT"),
('AN', "O.F.T.P. (ODETTE File Transfer Protocol)"),
('AQ', "X.400 address for mail text"),
('AS', "AS2 exchange"),
('AU', "File Transfer Protocol"),
('EM', "Electronic mail"),
]
)
available_peppol_eas = fields.Json(compute='_compute_available_peppol_eas')
@api.constrains('peppol_endpoint')
def _check_peppol_fields(self):
for partner in self:
if partner.peppol_endpoint and partner.peppol_eas:
error = self._build_error_peppol_endpoint(partner.peppol_eas, partner.peppol_endpoint)
if error:
raise ValidationError(error)
@api.model
def _get_ubl_cii_formats(self):
return list(self._get_ubl_cii_formats_info().keys())
@api.model
def _get_ubl_cii_formats_info(self):
return {
'ubl_bis3': {
'countries': list(PEPPOL_DEFAULT_COUNTRIES),
'on_peppol': True,
'sequence': 200,
'embed_attachments': True,
},
'xrechnung': {'countries': ['DE'], 'sequence': 200, 'on_peppol': True},
'ubl_a_nz': {'countries': ['NZ', 'AU'], 'on_peppol': False}, # Not yet available through Odoo's Access Point, although it's a Peppol valid format
'nlcius': {'countries': ['NL'], 'on_peppol': True},
'ubl_sg': {'countries': ['SG'], 'on_peppol': False}, # Same.
'facturx': {'countries': ['FR'], 'on_peppol': False},
'zugferd': {'countries': ['DE'], 'on_peppol': False},
}
@api.model
def _get_ubl_cii_formats_by_country(self):
formats_info = self._get_ubl_cii_formats_info()
countries = {country for format_val in formats_info.values() for country in (format_val.get('countries') or [])}
return {
country_code: [
format_key
for format_key, format_val in formats_info.items() if country_code in (format_val.get('countries') or [])
]
for country_code in countries
}
def _get_suggested_ubl_cii_edi_format(self):
self.ensure_one()
format_mapping = self._get_ubl_cii_formats_by_country()
country_code = self.commercial_partner_id._deduce_country_code()
if country_code in format_mapping:
formats_by_country = format_mapping[country_code]
# return the format with the smallest sequence
if len(formats_by_country) == 1:
return formats_by_country[0]
else:
if self.peppol_eas == '0204':
return 'xrechnung'
formats_info = self._get_ubl_cii_formats_info()
return min(formats_by_country, key=lambda e: formats_info[e].get('sequence', 100)) # we use a sequence of 100 by default
return False
def _get_suggested_peppol_edi_format(self):
self.ensure_one()
suggested_format = self.commercial_partner_id._get_suggested_ubl_cii_edi_format()
return suggested_format if suggested_format in self.env['res.partner']._get_peppol_formats() else 'ubl_bis3'
def _get_peppol_edi_format(self):
self.ensure_one()
return self.invoice_edi_format or self._get_suggested_peppol_edi_format()
@api.model
def _get_peppol_formats(self):
formats_info = self._get_ubl_cii_formats_info()
return [format_key for format_key, format_vals in formats_info.items() if format_vals.get('on_peppol')]
def _peppol_eas_endpoint_depends(self):
# field dependencies of methods _compute_peppol_endpoint() and _compute_peppol_eas()
# because we need to extend depends in l10n modules
return ['country_code', 'vat', 'company_registry']
@api.depends_context('company')
@api.depends('invoice_edi_format')
def _compute_is_ubl_format(self):
for partner in self:
partner.is_ubl_format = partner.invoice_edi_format in self._get_ubl_cii_formats()
@api.depends_context('company')
@api.depends('invoice_edi_format')
def _compute_is_peppol_edi_format(self):
for partner in self:
partner.is_peppol_edi_format = partner.invoice_edi_format in self._get_peppol_formats()
def _get_peppol_endpoint_value(self, country_code, field, eas):
self.ensure_one()
value = field in self._fields and self[field]
if (
country_code == 'BE'
and field == 'company_registry'
and not value
and self.vat
):
value = self.vat
if value.isalnum():
value = value.removeprefix(country_code)
return sanitize_peppol_endpoint(value, eas)
@api.depends('peppol_eas')
def _compute_peppol_endpoint(self):
""" If the EAS changes and a valid endpoint is available, set it. Otherwise, keep the existing value."""
for partner in self:
partner.peppol_endpoint = sanitize_peppol_endpoint(partner.peppol_endpoint, partner.peppol_eas)
country_code = partner._deduce_country_code()
if country_code in EAS_MAPPING:
field = EAS_MAPPING[country_code].get(partner.peppol_eas)
value = partner._get_peppol_endpoint_value(country_code, field, partner.peppol_eas)
if field and value and not partner._build_error_peppol_endpoint(partner.peppol_eas, value):
partner.peppol_endpoint = value
@api.depends(lambda self: self._peppol_eas_endpoint_depends())
def _compute_peppol_eas(self):
"""
If the country_code changes, recompute the EAS only if there is a country_code, it exists in the
EAS_MAPPING, and the current EAS is not consistent with the new country_code.
"""
for partner in self:
partner.peppol_eas = partner.peppol_eas
country_code = partner._deduce_country_code()
if country_code in EAS_MAPPING:
eas_to_field = EAS_MAPPING[country_code]
if partner.peppol_eas not in eas_to_field.keys():
new_eas = next(iter(EAS_MAPPING[country_code].keys()))
# Iterate on the possible EAS until a valid one is found
for eas, field in eas_to_field.items():
if field and field in partner._fields:
value = partner._get_peppol_endpoint_value(country_code, field, eas)
if value and not partner._build_error_peppol_endpoint(eas, value):
new_eas = eas
break
partner.peppol_eas = new_eas
@api.depends_context('company')
@api.depends('company_id')
def _compute_available_peppol_eas(self):
# TO OVERRIDE
self.available_peppol_eas = list(dict(self._fields['peppol_eas'].selection))
def _build_error_peppol_endpoint(self, eas, endpoint):
""" This function contains all the rules regarding the peppol_endpoint."""
if eas == '0208' and not re.match(r"^\d{10}$", endpoint):
return _("The Peppol endpoint is not valid. The expected format is: 0239843188")
if eas == '0009' and not siret.is_valid(endpoint):
return _("The Peppol endpoint is not valid. The expected format is: 73282932000074")
if eas == '0007' and not re.match(r"^\d{10}$", endpoint):
return _("The Peppol endpoint is not valid. "
"It should contain exactly 10 digits (Company Registry number)."
"The expected format is: 1234567890")
if PEPPOL_ENDPOINT_INVALIDCHARS_RE.search(endpoint) or not 1 <= len(endpoint) <= 50:
return _("The Peppol endpoint (%s) is not valid. It should contain only letters and digit.", endpoint)
@api.model
def _get_edi_builder(self, invoice_edi_format):
if invoice_edi_format == 'xrechnung':
return self.env['account.edi.xml.ubl_de']
# Same template for the two formats (France and Germany)
if invoice_edi_format in ('facturx', 'zugferd'):
return self.env['account.edi.xml.cii']
if invoice_edi_format == 'ubl_a_nz':
return self.env['account.edi.xml.ubl_a_nz']
if invoice_edi_format == 'nlcius':
return self.env['account.edi.xml.ubl_nl']
if invoice_edi_format == 'ubl_bis3':
return self.env['account.edi.xml.ubl_bis3']
if invoice_edi_format == 'ubl_sg':
return self.env['account.edi.xml.ubl_sg']

View file

@ -0,0 +1,34 @@
<?xml version="1.0" encoding="UTF-8"?>
<odoo>
<template id="account_invoices_generated_by_odoo">
<t t-call="web.html_container">
<t t-foreach="docs" t-as="o">
<t t-set="lang" t-value="o.partner_id.lang"/>
<t t-call="account_edi_ubl_cii.report_invoice_document"/>
</t>
</t>
</template>
<template id="report_invoice_document" inherit_id="account.report_invoice_document" primary="True">
<xpath expr="//t[@t-call='web.external_layout']" position="attributes">
<attribute name="t-call">account_edi_ubl_cii.external_layout_with_context</attribute>
</xpath>
</template>
<template id="external_layout_with_context" inherit_id="web.external_layout" primary="True">
<xpath expr="//t[@t-if='company.external_report_layout_id']" position="replace">
<t t-set="chosen_layout" t-value="env.context.get('force_report_layout')"/>
<t t-if="chosen_layout" t-call="{{ chosen_layout }}">
<t t-out="0"/>
</t>
</xpath>
</template>
<record id="action_report_account_invoices_generated_by_odoo" model="ir.actions.report">
<field name="name">Invoice report generated by Odoo</field>
<field name="model">account.move</field>
<field name="report_type">qweb-pdf</field>
<field name="report_name">account_edi_ubl_cii.account_invoices_generated_by_odoo</field>
<field name="report_file">account_edi_ubl_cii.account_invoices_generated_by_odoo</field>
</record>
</odoo>

View file

@ -0,0 +1,7 @@
.o_field_peppol_eas_selection > select {
color: $headings-color;
font-weight: $font-weight-bold;
}
.o_field_peppol_eas_selection {
min-width: 200px;
}

View file

@ -1,3 +1,9 @@
# -*- encoding: utf-8 -*-
# -*- coding: utf-8 -*-
from . import common
from . import test_autopost_bills
from . import test_partner_peppol_fields
from . import test_ubl_cii
from . import test_download_docs
from . import test_ubl_export_bis3_be
from . import test_ubl_export_bis3_selfbilling_be

View file

@ -0,0 +1,204 @@
from odoo import Command
from odoo.addons.account.tests.common import AccountTestInvoicingCommon
class TestUblCiiCommon(AccountTestInvoicingCommon):
@classmethod
def setUpClass(cls):
super().setUpClass()
cls.partner_be = cls._create_partner_be()
cls.partner_lu_dig = cls._create_partner_lu_dig()
cls.partner_nl = cls._create_partner_nl()
cls.partner_au = cls._create_partner_au()
@classmethod
def _create_company(cls, **create_values):
# EXTENDS 'account'
create_values.setdefault('currency_id', cls.env.ref('base.EUR').id)
company = super()._create_company(**create_values)
company.tax_calculation_rounding_method = 'round_globally'
return company
@classmethod
def _create_partner_default_values(cls):
return {
'invoice_sending_method': 'manual',
'property_account_receivable_id': cls.company_data['default_account_receivable'].id,
'property_account_payable_id': cls.company_data['default_account_payable'].id,
'company_id': cls.company_data['company'].id,
}
@classmethod
def _create_partner_be(cls, **kwargs):
return cls.env['res.partner'].create({
**cls._create_partner_default_values(),
'name': 'partner_be',
'street': "Rue des Bourlottes 9",
'zip': "1367",
'city': "Ramillies",
'vat': 'BE0477472701',
'company_registry': '0477472701',
'bank_ids': [Command.create({'acc_number': 'BE90735788866632', 'allow_out_payment': True})],
'country_id': cls.env.ref('base.be').id,
**kwargs,
})
@classmethod
def _create_partner_lu_dig(cls, **kwargs):
return cls.env['res.partner'].create({
**cls._create_partner_default_values(),
'name': "Division informatique et gestion",
'street': "bd de la Foire",
'zip': "L-1528",
'city': "Luxembourg",
'vat': None,
'company_registry': None,
'country_id': cls.env.ref('base.lu').id,
'peppol_eas': '9938',
'peppol_endpoint': '00005000041',
**kwargs,
})
@classmethod
def _create_partner_nl(cls, **kwargs):
return cls.env['res.partner'].create({
**cls._create_partner_default_values(),
'name': "partner_nl",
'street': "Kunststraat, 3",
'zip': "1000",
'city': "Amsterdam",
'vat': 'NL000099998B57',
'company_registry': None,
'country_id': cls.env.ref('base.nl').id,
'peppol_eas': '0106',
'peppol_endpoint': '77777677',
**kwargs,
})
@classmethod
def _create_partner_au(cls, **kwargs):
return cls.env['res.partner'].create({
**cls._create_partner_default_values(),
'name': "partner_au",
'street': "Parliament Dr",
'zip': "2600",
'city': "Canberra",
'vat': '53 930 548 027',
'country_id': cls.env.ref('base.au').id,
'bank_ids': [Command.create({'acc_number': '93999574162167', 'allow_out_payment': True})],
**kwargs,
})
@classmethod
def _create_mixed_early_payment_term(cls, **kwargs):
return cls.env['account.payment.term'].create({
'name': "2/7 Net 30",
'note': "Payment terms: 30 Days, 2% Early Payment Discount under 7 days",
'early_discount': True,
'discount_percentage': 2,
'discount_days': 7,
'early_pay_discount_computation': 'mixed',
'line_ids': [Command.create({'value': 'percent', 'value_amount': 100.0, 'nb_days': 30})],
**kwargs,
})
@classmethod
def _create_add_invoice_line_cash_rounding(cls, **kwargs):
return cls.env['account.cash.rounding'].create({
'name': "Rounding 0.05",
'rounding': 0.05,
'strategy': 'add_invoice_line',
'profit_account_id': cls.company_data['default_account_revenue'].copy().id,
'loss_account_id': cls.company_data['default_account_expense'].copy().id,
'rounding_method': 'HALF-UP',
**kwargs,
})
@classmethod
def _create_biggest_tax_cash_rounding(cls, **kwargs):
return cls.env['account.cash.rounding'].create({
'name': "Rounding 0.05",
'rounding': 0.05,
'strategy': 'biggest_tax',
'rounding_method': 'HALF-UP',
**kwargs,
})
# -------------------------------------------------------------------------
# EXPORT HELPERS
# -------------------------------------------------------------------------
def subfolder(self):
return 'export'
@classmethod
def _generate_invoice_ubl_file(cls, invoice, **kwargs):
cls.env['account.move.send']._generate_and_send_invoices(invoice, **{'sending_methods': ['manual'], **kwargs})
def _assert_invoice_ubl_file(self, invoice, filename):
self.assertTrue(invoice.ubl_cii_xml_id)
self.assert_xml(invoice.ubl_cii_xml_id.raw, filename, subfolder=self.subfolder())
# -------------------------------------------------------------------------
# IMPORT HELPERS
# -------------------------------------------------------------------------
@classmethod
def _import_as_attachment_on(cls, file_path=None, attachment=None, journal=None):
assert file_path or attachment
assert not file_path or not attachment
journal = journal or cls.company_data["default_journal_purchase"]
if file_path:
attachment = cls._import_as_attachment(file_path)
return journal._create_document_from_attachment(attachment.id)
class TestUblCiiBECommon(TestUblCiiCommon):
@classmethod
def _create_company(cls, **create_values):
company = super()._create_company(**create_values)
company.partner_id.write({
'street': "Chaussée de Namur 40",
'zip': "1367",
'city': "Ramillies",
'vat': 'BE0202239951',
'company_registry': '0202239951',
'country_id': cls.env.ref('base.be').id,
'bank_ids': [Command.create({'acc_number': 'BE15001559627230', 'allow_out_payment': True})],
})
return company
def subfolder(self):
return f'{super().subfolder()}/be'
class TestUblCiiFRCommon(TestUblCiiCommon):
@classmethod
def _create_company(cls, **create_values):
company = super()._create_company(**create_values)
company.partner_id.write({
'street': "Rue Grand Port 1",
'zip': "35400",
'city': "Saint-Malo",
'vat': 'FR23334175221',
'company_registry': '40678483500521',
'country_id': cls.env.ref('base.fr').id,
})
return company
def subfolder(self):
return f'{super().subfolder()}/fr'
class TestUblBis3Common(TestUblCiiCommon):
@classmethod
def _create_partner_default_values(cls):
values = super()._create_partner_default_values()
values['invoice_edi_format'] = 'ubl_bis3'
return values

View file

@ -0,0 +1,147 @@
import base64
from datetime import datetime, date, timedelta
from xml.etree import ElementTree as et
from odoo import fields
from odoo.tests import tagged
from odoo.tools import file_open
from odoo.addons.account.tests.common import AccountTestInvoicingCommon
@tagged('post_install', '-at_install')
class TestAutoPostBills(AccountTestInvoicingCommon):
def import_facturx(self, filename='facturx_out_invoice.xml', ref=None, date=None):
self.env.cr._now = datetime.now() # reset transaction's NOW, otherwise all move will have the same create_date
with (file_open(f"account_edi_ubl_cii/tests/test_files/{filename}", 'rb', filter_ext=('.xml',)) as file):
file_read = file.read()
tree = et.ElementTree(et.fromstring(file_read.decode()))
if ref:
tree.find('./{*}ExchangedDocument/{*}ID').text = ref
if date:
tree.find('./{*}ExchangedDocument/{*}IssueDateTime/{*}DateTimeString').text = date
attachment = self.env['ir.attachment'].create({
'name': 'test_file.xml',
'datas': base64.encodebytes(et.tostring(tree.getroot())),
})
return self.company_data['default_journal_purchase'].with_context(disable_abnormal_invoice_detection=False)._create_document_from_attachment(attachment.id)
def assert_wizard(self, post_result, expected_nb_bills):
self.assertEqual(post_result.get('res_model'), 'account.autopost.bills.wizard')
wizard = self.env[post_result.get('res_model')].browse(post_result.get('res_id'))
self.assertEqual(wizard.nb_unmodified_bills, expected_nb_bills)
return wizard
def test_autopost_bills(self):
"""
When invoices from a same vendor are input thrice in a row without changing anything,
so for invoice coming from OCR or e-Invoicing, we should show a banner to the user
and allow him to automatically post future invoices from this vendor.
- If there is a significant difference (see abnormal_amount), don't autopost and show the banner !
- Not applicable to hashed journals
"""
# Create 1st bill ever for this partner, should NOT show popup
move = self.import_facturx()
autopost_bills_wizard = move.action_post()
self.assertFalse(autopost_bills_wizard)
self.assertFalse(move.is_manually_modified)
# Create 2nd bill without changes for this partner, should NOT show popup
move = self.import_facturx()
autopost_bills_wizard = move.action_post()
self.assertFalse(autopost_bills_wizard)
self.assertFalse(move.is_manually_modified)
# Create 3rd bill without changes for this partner, should show popup on posting
move = self.import_facturx()
autopost_bills_wizard = move.action_post()
self.assertFalse(move.is_manually_modified)
wizard = self.assert_wizard(autopost_bills_wizard, 3)
wizard.action_ask_later() # Nothing changes, we should still show the popup
# Create 4th bill without changes for this partner, should show popup on posting
move = self.import_facturx()
autopost_bills_wizard = move.action_post()
self.assertFalse(move.is_manually_modified)
wizard = self.assert_wizard(autopost_bills_wizard, 4)
wizard.action_ask_later() # Nothing changes, we should still show the popup
# Create 5th bill with changes, should NOT show popup on posting
move = self.import_facturx().with_context(skip_is_manually_modified=False)
move.invoice_date_due = fields.Date.today()
autopost_bills_wizard = move.action_post()
self.assertFalse(autopost_bills_wizard)
self.assertTrue(move.is_manually_modified)
# Create again 3 bills without any changes
for _ in range(3):
move = self.import_facturx()
autopost_bills_wizard = move.action_post()
wizard = self.assert_wizard(autopost_bills_wizard, 3)
wizard.action_automate_partner()
# Create 4th bill without changes with automation enabled => should automatically post, no popup
move = self.import_facturx(ref="refbill4", date='20170102') # new ref and date to avoid duplicates
self.assertEqual(move.state, 'posted')
# Reset
move.partner_id.autopost_bills = 'ask'
# Create 5th bill without changes, should show popup on posting
move = self.import_facturx()
autopost_bills_wizard = move.action_post()
wizard = self.assert_wizard(autopost_bills_wizard, 5)
wizard.action_never_automate_partner()
# Create 6th bill without changes, should not show popup, and move should stay in draft
move = self.import_facturx()
self.assertEqual(move.state, 'draft')
autopost_bills_wizard = move.action_post()
self.assertFalse(autopost_bills_wizard)
# Reset
move.partner_id.autopost_bills = 'ask'
# Create 7th bill without changes, should show popup on posting
move = self.import_facturx()
autopost_bills_wizard = move.action_post()
wizard = self.assert_wizard(autopost_bills_wizard, 7)
wizard.action_ask_later()
# Deactivate the feature fully from the settings
# => Should never show popup, nor autopost (even if partner is on 'always')
move.company_id.autopost_bills = False
move.partner_id.autopost_bills = 'always'
move = self.import_facturx()
self.assertEqual(move.state, 'draft')
autopost_bills_wizard = move.action_post()
self.assertFalse(autopost_bills_wizard)
# Reset
move.company_id.autopost_bills = True
move.partner_id.autopost_bills = 'always'
# If the bill has a duplicate, don't autopost it
move = self.import_facturx(ref="refbill4") # same ref as previous
self.assertEqual(move.state, "draft")
# If there is a significant difference (see abnormal_amount), don't autopost even if 'always' is set
base_date = date(2018, 1, 1)
for i in range(10): # See test_unexpected_invoice
move = self.import_facturx(ref=f"ref{i}", date=(base_date + timedelta(days=i)).strftime('%Y%m%d')) # automatically posted
self.assertEqual(move.state, "posted")
move = self.import_facturx(filename='facturx_out_invoice_abnormal.xml') # amounts * 100 here, a bit abnormal...
self.assertEqual(move.state, "draft") # even if partner's autopost is always
res = move.action_post()
self.assertEqual(res.get('res_model'), 'validate.account.move')
wizard = self.env[res.get('res_model')].browse(res.get('res_id'))
self.assertEqual(wizard.move_ids, move)
# Not applicable to hashed journals
self.company_data['default_journal_purchase'].restrict_mode_hash_table = True
move = self.import_facturx()
self.assertEqual(move.state, "draft")
res = move.action_post()
self.assertFalse(res)

View file

@ -0,0 +1,65 @@
from io import BytesIO
from zipfile import ZipFile
from odoo.fields import Command
from odoo.tests.common import tagged
from odoo.addons.account_edi_ubl_cii.tests.common import TestUblBis3Common, TestUblCiiBECommon
from odoo.addons.account.tests.common import AccountTestInvoicingHttpCommon
@tagged('post_install', '-at_install')
class TestDownloadDocs(TestUblBis3Common, TestUblCiiBECommon, AccountTestInvoicingHttpCommon):
@classmethod
def setUpClass(cls):
super().setUpClass()
invoice_1 = cls.env['account.move'].create({
'move_type': 'out_invoice',
'partner_id': cls.partner_be.id,
'invoice_line_ids': [
Command.create({
'price_unit': 100,
'product_id': cls.product_a.id,
'tax_ids': cls.tax_sale_a.ids,
})
]
})
invoice_2 = cls.env['account.move'].create({
'move_type': 'out_invoice',
'partner_id': cls.partner_be.id,
'invoice_line_ids': [
Command.create({
'price_unit': 20,
'product_id': cls.product_a.id,
'tax_ids': cls.tax_sale_a.ids,
})
]
})
invoice_3 = cls.env['account.move'].create({
'move_type': 'out_invoice',
'partner_id': cls.partner_be.id,
'invoice_line_ids': [
Command.create({
'price_unit': 300,
'product_id': cls.product_a.id,
'tax_ids': cls.tax_sale_a.ids,
})
]
})
cls.invoices = invoice_1 + invoice_2
cls.invoices.action_post()
cls._generate_invoice_ubl_file(cls.invoices)
cls.invoices += invoice_3
assert invoice_1.invoice_pdf_report_id and invoice_2.invoice_pdf_report_id and not invoice_3.invoice_pdf_report_id
assert invoice_1.ubl_cii_xml_id and invoice_2.ubl_cii_xml_id and not invoice_3.ubl_cii_xml_id
def test_download_invoice_documents_filetype_all(self):
self.authenticate(self.env.user.login, self.env.user.login)
url = f'/account/download_invoice_documents/{",".join(map(str, self.invoices.ids))}/all'
res = self.url_open(url)
self.assertEqual(res.status_code, 200)
with ZipFile(BytesIO(res.content)) as zip_file:
files = zip_file.namelist()
self.assertEqual(len(files), 5)
xml_files = sum(file.endswith('.xml') for file in files)
self.assertEqual(xml_files, 2)

View file

@ -0,0 +1,150 @@
<?xml version='1.0' encoding='UTF-8'?>
<Invoice xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2"
xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2"
xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2">
<cbc:CustomizationID>urn:cen.eu:en16931:2017#compliant#urn:fdc:peppol.eu:2017:poacc:billing:3.0
</cbc:CustomizationID>
<cbc:ProfileID>urn:fdc:peppol.eu:2017:poacc:billing:01:1.0</cbc:ProfileID>
<cbc:ID>___ignore___</cbc:ID>
<cbc:IssueDate>2017-01-01</cbc:IssueDate>
<cbc:DueDate>2017-01-01</cbc:DueDate>
<cbc:InvoiceTypeCode>380</cbc:InvoiceTypeCode>
<cbc:DocumentCurrencyCode>USD</cbc:DocumentCurrencyCode>
<cac:OrderReference>
<cbc:ID>___ignore___</cbc:ID>
</cac:OrderReference>
<cac:AdditionalDocumentReference>
<cbc:ID>___ignore___</cbc:ID>
<cac:Attachment>
<cbc:EmbeddedDocumentBinaryObject mimeCode="___ignore___" filename="___ignore___">
___ignore___
</cbc:EmbeddedDocumentBinaryObject>
</cac:Attachment>
</cac:AdditionalDocumentReference>
<cac:AccountingSupplierParty>
<cac:Party>
<cbc:EndpointID schemeID="0208">0202239951</cbc:EndpointID>
<cac:PartyName>
<cbc:Name>company_1_data</cbc:Name>
</cac:PartyName>
<cac:PostalAddress>
<cbc:StreetName>Chauss&#233;e de Namur 40</cbc:StreetName>
<cbc:CityName>Ramillies</cbc:CityName>
<cbc:PostalZone>1367</cbc:PostalZone>
<cac:Country>
<cbc:IdentificationCode>BE</cbc:IdentificationCode>
</cac:Country>
</cac:PostalAddress>
<cac:PartyTaxScheme>
<cbc:CompanyID>BE0202239951</cbc:CompanyID>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:PartyTaxScheme>
<cac:PartyLegalEntity>
<cbc:RegistrationName>company_1_data</cbc:RegistrationName>
<cbc:CompanyID>BE0202239951</cbc:CompanyID>
</cac:PartyLegalEntity>
<cac:Contact>
<cbc:Name>company_1_data</cbc:Name>
</cac:Contact>
</cac:Party>
</cac:AccountingSupplierParty>
<cac:AccountingCustomerParty>
<cac:Party>
<cbc:EndpointID schemeID="0208">0477472701</cbc:EndpointID>
<cac:PartyName>
<cbc:Name>partner_a</cbc:Name>
</cac:PartyName>
<cac:PostalAddress>
<cbc:StreetName>Rue des Bourlottes 9</cbc:StreetName>
<cbc:CityName>Ramillies</cbc:CityName>
<cbc:PostalZone>1367</cbc:PostalZone>
<cac:Country>
<cbc:IdentificationCode>BE</cbc:IdentificationCode>
</cac:Country>
</cac:PostalAddress>
<cac:PartyTaxScheme>
<cbc:CompanyID>BE0477472701</cbc:CompanyID>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:PartyTaxScheme>
<cac:PartyLegalEntity>
<cbc:RegistrationName>partner_a</cbc:RegistrationName>
<cbc:CompanyID>BE0477472701</cbc:CompanyID>
</cac:PartyLegalEntity>
<cac:Contact>
<cbc:Name>partner_a</cbc:Name>
</cac:Contact>
</cac:Party>
</cac:AccountingCustomerParty>
<cac:Delivery>
<cac:DeliveryLocation>
<cac:Address>
<cbc:StreetName>Rue des Bourlottes 9</cbc:StreetName>
<cbc:CityName>Ramillies</cbc:CityName>
<cbc:PostalZone>1367</cbc:PostalZone>
<cac:Country>
<cbc:IdentificationCode>BE</cbc:IdentificationCode>
</cac:Country>
</cac:Address>
</cac:DeliveryLocation>
<cac:DeliveryParty>
<cac:PartyName>
<cbc:Name>partner_a</cbc:Name>
</cac:PartyName>
</cac:DeliveryParty>
</cac:Delivery>
<cac:PaymentMeans>
<cbc:PaymentMeansCode name="credit transfer">30</cbc:PaymentMeansCode>
<cbc:PaymentID>___ignore___</cbc:PaymentID>
<cac:PayeeFinancialAccount>
<cbc:ID>BE15001559627230</cbc:ID>
</cac:PayeeFinancialAccount>
</cac:PaymentMeans>
<cac:PaymentTerms>
<cbc:Note>Payment terms: Immediate Payment</cbc:Note>
</cac:PaymentTerms>
<cac:TaxTotal>
<cbc:TaxAmount currencyID="USD">14.70</cbc:TaxAmount>
<cac:TaxSubtotal>
<cbc:TaxableAmount currencyID="USD">70.00</cbc:TaxableAmount>
<cbc:TaxAmount currencyID="USD">14.70</cbc:TaxAmount>
<cac:TaxCategory>
<cbc:ID>S</cbc:ID>
<cbc:Percent>21.0</cbc:Percent>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:TaxCategory>
</cac:TaxSubtotal>
</cac:TaxTotal>
<cac:LegalMonetaryTotal>
<cbc:LineExtensionAmount currencyID="USD">70.00</cbc:LineExtensionAmount>
<cbc:TaxExclusiveAmount currencyID="USD">70.00</cbc:TaxExclusiveAmount>
<cbc:TaxInclusiveAmount currencyID="USD">84.70</cbc:TaxInclusiveAmount>
<cbc:PrepaidAmount currencyID="USD">0.00</cbc:PrepaidAmount>
<cbc:PayableRoundingAmount currencyID="USD">0.30</cbc:PayableRoundingAmount>
<cbc:PayableAmount currencyID="USD">85.00</cbc:PayableAmount>
</cac:LegalMonetaryTotal>
<cac:InvoiceLine>
<cbc:ID>___ignore___</cbc:ID>
<cbc:InvoicedQuantity unitCode="C62">1.0</cbc:InvoicedQuantity>
<cbc:LineExtensionAmount currencyID="USD">70.00</cbc:LineExtensionAmount>
<cac:Item>
<cbc:Description>product_a</cbc:Description>
<cbc:Name>product_a</cbc:Name>
<cac:ClassifiedTaxCategory>
<cbc:ID>S</cbc:ID>
<cbc:Percent>21.0</cbc:Percent>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:ClassifiedTaxCategory>
</cac:Item>
<cac:Price>
<cbc:PriceAmount currencyID="USD">70.0</cbc:PriceAmount>
</cac:Price>
</cac:InvoiceLine>
</Invoice>

View file

@ -0,0 +1,149 @@
<?xml version='1.0' encoding='UTF-8'?>
<Invoice xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2"
xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2"
xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2">
<cbc:CustomizationID>urn:cen.eu:en16931:2017#compliant#urn:fdc:peppol.eu:2017:poacc:billing:3.0
</cbc:CustomizationID>
<cbc:ProfileID>urn:fdc:peppol.eu:2017:poacc:billing:01:1.0</cbc:ProfileID>
<cbc:ID>___ignore___</cbc:ID>
<cbc:IssueDate>2017-01-01</cbc:IssueDate>
<cbc:DueDate>2017-01-01</cbc:DueDate>
<cbc:InvoiceTypeCode>380</cbc:InvoiceTypeCode>
<cbc:DocumentCurrencyCode>USD</cbc:DocumentCurrencyCode>
<cac:OrderReference>
<cbc:ID>___ignore___</cbc:ID>
</cac:OrderReference>
<cac:AdditionalDocumentReference>
<cbc:ID>___ignore___</cbc:ID>
<cac:Attachment>
<cbc:EmbeddedDocumentBinaryObject mimeCode="___ignore___" filename="___ignore___">
___ignore___
</cbc:EmbeddedDocumentBinaryObject>
</cac:Attachment>
</cac:AdditionalDocumentReference>
<cac:AccountingSupplierParty>
<cac:Party>
<cbc:EndpointID schemeID="0208">0202239951</cbc:EndpointID>
<cac:PartyName>
<cbc:Name>company_1_data</cbc:Name>
</cac:PartyName>
<cac:PostalAddress>
<cbc:StreetName>Chauss&#233;e de Namur 40</cbc:StreetName>
<cbc:CityName>Ramillies</cbc:CityName>
<cbc:PostalZone>1367</cbc:PostalZone>
<cac:Country>
<cbc:IdentificationCode>BE</cbc:IdentificationCode>
</cac:Country>
</cac:PostalAddress>
<cac:PartyTaxScheme>
<cbc:CompanyID>BE0202239951</cbc:CompanyID>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:PartyTaxScheme>
<cac:PartyLegalEntity>
<cbc:RegistrationName>company_1_data</cbc:RegistrationName>
<cbc:CompanyID>BE0202239951</cbc:CompanyID>
</cac:PartyLegalEntity>
<cac:Contact>
<cbc:Name>company_1_data</cbc:Name>
</cac:Contact>
</cac:Party>
</cac:AccountingSupplierParty>
<cac:AccountingCustomerParty>
<cac:Party>
<cbc:EndpointID schemeID="0208">0477472701</cbc:EndpointID>
<cac:PartyName>
<cbc:Name>partner_a</cbc:Name>
</cac:PartyName>
<cac:PostalAddress>
<cbc:StreetName>Rue des Bourlottes 9</cbc:StreetName>
<cbc:CityName>Ramillies</cbc:CityName>
<cbc:PostalZone>1367</cbc:PostalZone>
<cac:Country>
<cbc:IdentificationCode>BE</cbc:IdentificationCode>
</cac:Country>
</cac:PostalAddress>
<cac:PartyTaxScheme>
<cbc:CompanyID>BE0477472701</cbc:CompanyID>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:PartyTaxScheme>
<cac:PartyLegalEntity>
<cbc:RegistrationName>partner_a</cbc:RegistrationName>
<cbc:CompanyID>BE0477472701</cbc:CompanyID>
</cac:PartyLegalEntity>
<cac:Contact>
<cbc:Name>partner_a</cbc:Name>
</cac:Contact>
</cac:Party>
</cac:AccountingCustomerParty>
<cac:Delivery>
<cac:DeliveryLocation>
<cac:Address>
<cbc:StreetName>Rue des Bourlottes 9</cbc:StreetName>
<cbc:CityName>Ramillies</cbc:CityName>
<cbc:PostalZone>1367</cbc:PostalZone>
<cac:Country>
<cbc:IdentificationCode>BE</cbc:IdentificationCode>
</cac:Country>
</cac:Address>
</cac:DeliveryLocation>
<cac:DeliveryParty>
<cac:PartyName>
<cbc:Name>partner_a</cbc:Name>
</cac:PartyName>
</cac:DeliveryParty>
</cac:Delivery>
<cac:PaymentMeans>
<cbc:PaymentMeansCode name="credit transfer">30</cbc:PaymentMeansCode>
<cbc:PaymentID>___ignore___</cbc:PaymentID>
<cac:PayeeFinancialAccount>
<cbc:ID>BE15001559627230</cbc:ID>
</cac:PayeeFinancialAccount>
</cac:PaymentMeans>
<cac:PaymentTerms>
<cbc:Note>Payment terms: Immediate Payment</cbc:Note>
</cac:PaymentTerms>
<cac:TaxTotal>
<cbc:TaxAmount currencyID="USD">15.00</cbc:TaxAmount>
<cac:TaxSubtotal>
<cbc:TaxableAmount currencyID="USD">70.00</cbc:TaxableAmount>
<cbc:TaxAmount currencyID="USD">15.00</cbc:TaxAmount>
<cac:TaxCategory>
<cbc:ID>S</cbc:ID>
<cbc:Percent>21.0</cbc:Percent>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:TaxCategory>
</cac:TaxSubtotal>
</cac:TaxTotal>
<cac:LegalMonetaryTotal>
<cbc:LineExtensionAmount currencyID="USD">70.00</cbc:LineExtensionAmount>
<cbc:TaxExclusiveAmount currencyID="USD">70.00</cbc:TaxExclusiveAmount>
<cbc:TaxInclusiveAmount currencyID="USD">85.00</cbc:TaxInclusiveAmount>
<cbc:PrepaidAmount currencyID="USD">0.00</cbc:PrepaidAmount>
<cbc:PayableAmount currencyID="USD">85.00</cbc:PayableAmount>
</cac:LegalMonetaryTotal>
<cac:InvoiceLine>
<cbc:ID>___ignore___</cbc:ID>
<cbc:InvoicedQuantity unitCode="C62">1.0</cbc:InvoicedQuantity>
<cbc:LineExtensionAmount currencyID="USD">70.00</cbc:LineExtensionAmount>
<cac:Item>
<cbc:Description>product_a</cbc:Description>
<cbc:Name>product_a</cbc:Name>
<cac:ClassifiedTaxCategory>
<cbc:ID>S</cbc:ID>
<cbc:Percent>21.0</cbc:Percent>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:ClassifiedTaxCategory>
</cac:Item>
<cac:Price>
<cbc:PriceAmount currencyID="USD">70.0</cbc:PriceAmount>
</cac:Price>
</cac:InvoiceLine>
</Invoice>

Some files were not shown because too many files have changed in this diff Show more