mirror of
https://github.com/bringout/oca-ocb-l10n_europe.git
synced 2026-04-27 06:02:04 +02:00
19.0 vanilla
This commit is contained in:
parent
ff721d030e
commit
7721452493
1826 changed files with 124775 additions and 274114 deletions
|
|
@ -1,20 +1,20 @@
|
|||
# Spain - SII EDI Suministro de Libros
|
||||
|
||||
|
||||
This module sends the taxes information (mostly VAT) of the
|
||||
vendor bills and customer invoices to the SII. It is called
|
||||
Procedimiento G417 - IVA. Llevanza de libros registro. It is
|
||||
required for every company with a turnover of +6M€ and others can
|
||||
already make use of it. The invoices are automatically
|
||||
sent after validation.
|
||||
|
||||
How the information is sent to the SII depends on the
|
||||
configuration that is put in the taxes. The taxes
|
||||
that were in the chart template (l10n_es) are automatically
|
||||
configured to have the right type. It is possible however
|
||||
that extra taxes need to be created for certain exempt/no sujeta reasons.
|
||||
|
||||
You need to configure your certificate and the tax agency.
|
||||
This module sends the taxes information (mostly VAT) of the
|
||||
vendor bills and customer invoices to the SII. It is called
|
||||
Procedimiento G417 - IVA. Llevanza de libros registro. It is
|
||||
required for every company with a turnover of +6M€ and others can
|
||||
already make use of it. The invoices are automatically
|
||||
sent after validation.
|
||||
|
||||
How the information is sent to the SII depends on the
|
||||
configuration that is put in the taxes. The taxes
|
||||
that were in the chart template (l10n_es) are automatically
|
||||
configured to have the right type. It is possible however
|
||||
that extra taxes need to be created for certain exempt/no sujeta reasons.
|
||||
|
||||
You need to configure your certificate and the tax agency.
|
||||
|
||||
|
||||
## Installation
|
||||
|
|
@ -25,36 +25,16 @@ pip install odoo-bringout-oca-ocb-l10n_es_edi_sii
|
|||
|
||||
## Dependencies
|
||||
|
||||
This addon depends on:
|
||||
- certificate
|
||||
- l10n_es
|
||||
- account_edi
|
||||
|
||||
## Manifest Information
|
||||
|
||||
- **Name**: Spain - SII EDI Suministro de Libros
|
||||
- **Version**: 1.0
|
||||
- **Category**: Accounting/Localizations/EDI
|
||||
- **License**: LGPL-3
|
||||
- **Installable**: False
|
||||
|
||||
## Source
|
||||
|
||||
Based on [OCA/OCB](https://github.com/OCA/OCB) branch 16.0, addon `l10n_es_edi_sii`.
|
||||
- Repository: https://github.com/OCA/OCB
|
||||
- Branch: 19.0
|
||||
- Path: addons/l10n_es_edi_sii
|
||||
|
||||
## 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.
|
||||
|
|
|
|||
|
|
@ -2,37 +2,3 @@
|
|||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
from . import models
|
||||
from . import wizards
|
||||
from odoo import api, SUPERUSER_ID
|
||||
|
||||
|
||||
def _l10n_es_edi_post_init(cr, registry):
|
||||
env = api.Environment(cr, SUPERUSER_ID, {})
|
||||
companies = env['res.company'].search([('partner_id.country_id.code', '=', 'ES')])
|
||||
|
||||
all_chart_templates = companies.chart_template_id
|
||||
current_chart_template = all_chart_templates
|
||||
while current_chart_template.parent_id:
|
||||
all_chart_templates |= current_chart_template.parent_id
|
||||
current_chart_template = current_chart_template.parent_id
|
||||
|
||||
if all_chart_templates:
|
||||
tax_templates = env['account.tax.template'].search([
|
||||
('chart_template_id', 'in', all_chart_templates.ids),
|
||||
'|', '|', '|',
|
||||
('l10n_es_type', '!=', False),
|
||||
('l10n_es_exempt_reason', '!=', False),
|
||||
('tax_scope', '!=', False),
|
||||
('l10n_es_bien_inversion', '!=', False),
|
||||
])
|
||||
xml_ids = tax_templates.get_external_id()
|
||||
for company in companies:
|
||||
for tax_template in tax_templates:
|
||||
module, xml_id = xml_ids.get(tax_template.id).split('.')
|
||||
tax = env.ref('%s.%s_%s' % (module, company.id, xml_id), raise_if_not_found=False)
|
||||
if tax:
|
||||
tax.write({
|
||||
'l10n_es_exempt_reason': tax_template.l10n_es_exempt_reason,
|
||||
'tax_scope': tax_template.tax_scope,
|
||||
'l10n_es_type': tax_template.l10n_es_type,
|
||||
'l10n_es_bien_inversion': tax_template.l10n_es_bien_inversion,
|
||||
})
|
||||
|
|
|
|||
|
|
@ -6,45 +6,41 @@
|
|||
|
||||
{
|
||||
'name': "Spain - SII EDI Suministro de Libros",
|
||||
'version': '1.0',
|
||||
'countries': ['es'],
|
||||
'version': '1.1',
|
||||
'category': 'Accounting/Localizations/EDI',
|
||||
'description': """
|
||||
This module sends the taxes information (mostly VAT) of the
|
||||
vendor bills and customer invoices to the SII. It is called
|
||||
Procedimiento G417 - IVA. Llevanza de libros registro. It is
|
||||
required for every company with a turnover of +6M€ and others can
|
||||
already make use of it. The invoices are automatically
|
||||
sent after validation.
|
||||
|
||||
How the information is sent to the SII depends on the
|
||||
configuration that is put in the taxes. The taxes
|
||||
that were in the chart template (l10n_es) are automatically
|
||||
configured to have the right type. It is possible however
|
||||
that extra taxes need to be created for certain exempt/no sujeta reasons.
|
||||
|
||||
You need to configure your certificate and the tax agency.
|
||||
This module sends the taxes information (mostly VAT) of the
|
||||
vendor bills and customer invoices to the SII. It is called
|
||||
Procedimiento G417 - IVA. Llevanza de libros registro. It is
|
||||
required for every company with a turnover of +6M€ and others can
|
||||
already make use of it. The invoices are automatically
|
||||
sent after validation.
|
||||
|
||||
How the information is sent to the SII depends on the
|
||||
configuration that is put in the taxes. The taxes
|
||||
that were in the chart template (l10n_es) are automatically
|
||||
configured to have the right type. It is possible however
|
||||
that extra taxes need to be created for certain exempt/no sujeta reasons.
|
||||
|
||||
You need to configure your certificate and the tax agency.
|
||||
""",
|
||||
'depends': [
|
||||
'certificate',
|
||||
'l10n_es',
|
||||
'account_edi',
|
||||
],
|
||||
'data': [
|
||||
'data/account_tax_data.xml',
|
||||
'data/account_edi_data.xml',
|
||||
'data/res_partner_data.xml',
|
||||
|
||||
'security/ir.model.access.csv',
|
||||
'security/l10n_es_edi_certificate.xml',
|
||||
|
||||
'views/account_tax_views.xml',
|
||||
'views/l10n_es_edi_certificate_views.xml',
|
||||
'views/res_config_settings_views.xml',
|
||||
'views/account_move_views.xml',
|
||||
'views/l10n_es_edi_sii_certificate_views.xml',
|
||||
'views/res_config_settings_views.xml',
|
||||
],
|
||||
'demo': ['demo/demo_certificate.xml'],
|
||||
'external_dependencies': {
|
||||
'python': ['pyOpenSSL'],
|
||||
},
|
||||
'post_init_hook': '_l10n_es_edi_post_init',
|
||||
'demo': [
|
||||
'demo/demo_certificate.xml',
|
||||
'demo/demo_company.xml',
|
||||
],
|
||||
'author': 'Odoo S.A.',
|
||||
'license': 'LGPL-3',
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,446 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<record id="l10n_es.account_tax_template_s_iva21b" model="account.tax.template">
|
||||
<field name="l10n_es_type">sujeto</field>
|
||||
<field name="tax_scope">consu</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_s_iva21s" model="account.tax.template">
|
||||
<field name="l10n_es_type">sujeto</field>
|
||||
<field name="tax_scope">service</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_s_iva21isp" model="account.tax.template">
|
||||
<field name="l10n_es_type">sujeto</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_p_iva21_bc" model="account.tax.template">
|
||||
<field name="name">21% IVA soportado (bienes corrientes)</field>
|
||||
<field name="l10n_es_type">sujeto</field>
|
||||
<field name="tax_scope">consu</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_p_iva21_sc" model="account.tax.template">
|
||||
<field name="name">21% IVA soportado (servicios corrientes)</field>
|
||||
<field name="l10n_es_type">sujeto</field>
|
||||
<field name="tax_scope">service</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_p_iva21_sp_in" model="account.tax.template">
|
||||
<field name="name">IVA 21% Adquisición de servicios intracomunitarios</field>
|
||||
<field name="l10n_es_type">sujeto</field>
|
||||
<field name="tax_scope">service</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_p_iva21_ic_bc" model="account.tax.template">
|
||||
<field name="name">IVA 21% Adquisición Intracomunitaria. Bienes corrientes</field>
|
||||
<field name="l10n_es_type">sujeto</field>
|
||||
<field name="tax_scope">consu</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_p_iva21_ic_bi" model="account.tax.template">
|
||||
<field name="name">IVA 21% Adquisición Intracomunitaria. Bienes de inversión</field>
|
||||
<field name="l10n_es_type">sujeto</field>
|
||||
<field name="tax_scope">consu</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_p_iva21_ibc" model="account.tax.template">
|
||||
<field name="name">IVA 21% Importaciones bienes corrientes</field>
|
||||
<field name="l10n_es_type">sujeto</field>
|
||||
<field name="tax_scope">consu</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_p_iva21_ibi" model="account.tax.template">
|
||||
<field name="name">IVA 21% Importaciones bienes de inversión</field>
|
||||
<field name="l10n_es_type">sujeto</field>
|
||||
<field name="tax_scope">consu</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_p_irpf21td" model="account.tax.template">
|
||||
<field name="name">Retenciones IRPF (Trabajadores) dinerarios</field>
|
||||
<field name="l10n_es_type">retencion</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_p_iva4_sp_ex" model="account.tax.template">
|
||||
<field name="name">IVA 4% Adquisición de servicios extracomunitarios</field>
|
||||
<field name="l10n_es_type">sujeto_isp</field>
|
||||
<field name="tax_scope">consu</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_p_iva10_sp_ex" model="account.tax.template">
|
||||
<field name="name">IVA 10% Adquisición de servicios extracomunitarios</field>
|
||||
<field name="l10n_es_type">sujeto_isp</field>
|
||||
<field name="tax_scope">consu</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_p_iva21_sp_ex" model="account.tax.template">
|
||||
<field name="name">IVA 21% Adquisición de servicios extracomunitarios</field>
|
||||
<field name="l10n_es_type">sujeto_isp</field>
|
||||
<field name="tax_scope">service</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_p_iva4_ic_bc" model="account.tax.template">
|
||||
<field name="name">IVA 4% Adquisición Intracomunitario. Bienes corrientes</field>
|
||||
<field name="l10n_es_type">sujeto</field>
|
||||
<field name="tax_scope">consu</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_p_iva4_ic_bi" model="account.tax.template">
|
||||
<field name="name">IVA 4% Adquisición Intracomunitario. Bienes de inversión</field>
|
||||
<field name="l10n_es_type">sujeto</field>
|
||||
<field name="tax_scope">consu</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_p_iva10_ic_bc" model="account.tax.template">
|
||||
<field name="name">IVA 10% Adquisición Intracomunitario. Bienes corrientes</field>
|
||||
<field name="l10n_es_type">sujeto</field>
|
||||
<field name="tax_scope">consu</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_p_iva10_ic_bi" model="account.tax.template">
|
||||
<field name="name">IVA 10% Adquisición Intracomunitario. Bienes de inversión</field>
|
||||
<field name="l10n_es_type">sujeto</field>
|
||||
<field name="tax_scope">consu</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_s_iva0_sp_i" model="account.tax.template">
|
||||
<field name="name">IVA 0% Prestación de servicios intracomunitario</field>
|
||||
<field name="l10n_es_type">no_sujeto_loc</field>
|
||||
<field name="tax_scope">service</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_s_iva_ns" model="account.tax.template">
|
||||
<field name="name">No sujeto Repercutido (Servicios)</field>
|
||||
<field name="l10n_es_type">no_sujeto</field>
|
||||
<field name="tax_scope">service</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_s_iva_ns_b" model="account.tax.template">
|
||||
<field name="name">No sujeto Repercutido (Bienes)</field>
|
||||
<field name="l10n_es_type">no_sujeto</field>
|
||||
<field name="tax_scope">consu</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_s_iva_e" model="account.tax.template">
|
||||
<field name="name">IVA 0% Prestación de servicios extracomunitaria</field>
|
||||
<field name="l10n_es_type">no_sujeto_loc</field>
|
||||
<field name="tax_scope">service</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_p_iva4_ibc" model="account.tax.template">
|
||||
<field name="name">IVA 4% Importaciones bienes corrientes</field>
|
||||
<field name="l10n_es_type">sujeto</field>
|
||||
<field name="tax_scope">consu</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_p_iva4_ibi" model="account.tax.template">
|
||||
<field name="name">IVA 4% Importaciones bienes de inversión</field>
|
||||
<field name="l10n_es_type">sujeto</field>
|
||||
<field name="tax_scope">consu</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_p_iva10_ibc" model="account.tax.template">
|
||||
<field name="name">IVA 10% Importaciones bienes corrientes</field>
|
||||
<field name="l10n_es_type">sujeto</field>
|
||||
<field name="tax_scope">consu</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_p_iva10_ibi" model="account.tax.template">
|
||||
<field name="name">IVA 10% Importaciones bienes de inversión</field>
|
||||
<field name="l10n_es_type">sujeto</field>
|
||||
<field name="tax_scope">consu</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_p_iva4_bi" model="account.tax.template">
|
||||
<field name="name">4% IVA Soportado (bienes de inversión)</field>
|
||||
<field name="l10n_es_type">sujeto</field>
|
||||
<field name="tax_scope">consu</field>
|
||||
<field name="l10n_es_bien_inversion">True</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_p_iva4_sc" model="account.tax.template">
|
||||
<field name="name">4% IVA soportado (servicios corrientes)</field>
|
||||
<field name="l10n_es_type">sujeto</field>
|
||||
<field name="tax_scope">consu</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_p_iva10_bi" model="account.tax.template">
|
||||
<field name="name">10% IVA Soportado (bienes de inversión)</field>
|
||||
<field name="l10n_es_type">sujeto</field>
|
||||
<field name="tax_scope">consu</field>
|
||||
<field name="l10n_es_bien_inversion">True</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_p_iva21_bi" model="account.tax.template">
|
||||
<field name="name">21% IVA Soportado (bienes de inversión)</field>
|
||||
<field name="l10n_es_type">sujeto</field>
|
||||
<field name="tax_scope">consu</field>
|
||||
<field name="l10n_es_bien_inversion">True</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_p_iva10_bc" model="account.tax.template">
|
||||
<field name="name">10% IVA soportado (bienes corrientes)</field>
|
||||
<field name="l10n_es_type">sujeto</field>
|
||||
<field name="tax_scope">consu</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_p_iva4_bc" model="account.tax.template">
|
||||
<field name="name">4% IVA soportado (bienes corrientes)</field>
|
||||
<field name="l10n_es_type">sujeto</field>
|
||||
<field name="tax_scope">consu</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_p_iva10_sc" model="account.tax.template">
|
||||
<field name="name">10% IVA soportado (servicios corrientes)</field>
|
||||
<field name="l10n_es_type">sujeto</field>
|
||||
<field name="tax_scope">consu</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_s_iva0" model="account.tax.template">
|
||||
<field name="name">IVA Exento Repercutido Sujeto</field>
|
||||
<field name="l10n_es_type">exento</field>
|
||||
<field name="l10n_es_exempt_reason">E1</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_s_iva0_ns" model="account.tax.template">
|
||||
<field name="name">IVA Exento Repercutido No Sujeto</field>
|
||||
<field name="l10n_es_type">ignore</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_s_req0" model="account.tax.template">
|
||||
<field name="l10n_es_type">recargo</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_p_req0" model="account.tax.template">
|
||||
<field name="l10n_es_type">recargo</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_s_req05" model="account.tax.template">
|
||||
<field name="name">0.50% Recargo Equivalencia Ventas</field>
|
||||
<field name="l10n_es_type">recargo</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_s_req062" model="account.tax.template">
|
||||
<field name="l10n_es_type">recargo</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_p_req062" model="account.tax.template">
|
||||
<field name="l10n_es_type">recargo</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_s_iva4b" model="account.tax.template">
|
||||
<field name="name">IVA 4% (Bienes)</field>
|
||||
<field name="l10n_es_type">sujeto</field>
|
||||
<field name="tax_scope">consu</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_s_iva10b" model="account.tax.template">
|
||||
<field name="name">IVA 10% (Bienes)</field>
|
||||
<field name="l10n_es_type">sujeto</field>
|
||||
<field name="tax_scope">consu</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_p_iva0_nd" model="account.tax.template">
|
||||
<field name="name">21% IVA Soportado no deducible</field>
|
||||
<field name="l10n_es_type">no_deducible</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_p_iva10_nd" model="account.tax.template">
|
||||
<field name="name">10% IVA Soportado no deducible</field>
|
||||
<field name="l10n_es_type">no_deducible</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_p_iva5_nd" model="account.tax.template">
|
||||
<field name="name">5% IVA Soportado no deducible</field>
|
||||
<field name="l10n_es_type">no_deducible</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_p_iva4_nd" model="account.tax.template">
|
||||
<field name="name">4% IVA Soportado no deducible</field>
|
||||
<field name="l10n_es_type">no_deducible</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_s_iva4s" model="account.tax.template">
|
||||
<field name="name">IVA 4% (Servicios)</field>
|
||||
<field name="l10n_es_type">sujeto</field>
|
||||
<field name="tax_scope">service</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_s_iva10s" model="account.tax.template">
|
||||
<field name="name">IVA 10% (Servicios)</field>
|
||||
<field name="l10n_es_type">sujeto</field>
|
||||
<field name="tax_scope">service</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_s_req014" model="account.tax.template">
|
||||
<field name="name">1.4% Recargo Equivalencia Ventas</field>
|
||||
<field name="l10n_es_type">recargo</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_s_req52" model="account.tax.template">
|
||||
<field name="name">5.2% Recargo Equivalencia Ventas</field>
|
||||
<field name="l10n_es_type">recargo</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_p_iva0_bc" model="account.tax.template">
|
||||
<field name="name">IVA Soportado exento (operaciones corrientes)</field>
|
||||
<field name="l10n_es_type">sujeto</field>
|
||||
<field name="tax_scope">consu</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_p_iva0_ns" model="account.tax.template">
|
||||
<field name="name">IVA Soportado no sujeto (Servicios)</field>
|
||||
<field name="l10n_es_type">no_sujeto</field>
|
||||
<field name="tax_scope">service</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_p_iva0_ns_b" model="account.tax.template">
|
||||
<field name="name">IVA Soportado no sujeto (Bienes)</field>
|
||||
<field name="l10n_es_type">no_sujeto</field>
|
||||
<field name="tax_scope">consu</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_s_irpf9" model="account.tax.template">
|
||||
<field name="name">Retenciones a cuenta IRPF 9%</field>
|
||||
<field name="l10n_es_type">retencion</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_s_irpf18" model="account.tax.template">
|
||||
<field name="name">Retenciones a cuenta IRPF 18%</field>
|
||||
<field name="l10n_es_type">retencion</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_s_irpf19" model="account.tax.template">
|
||||
<field name="name">Retenciones a cuenta IRPF 19%</field>
|
||||
<field name="l10n_es_type">retencion</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_s_irpf19a" model="account.tax.template">
|
||||
<field name="name">Retenciones a cuenta 19% (Arrendamientos)</field>
|
||||
<field name="l10n_es_type">retencion</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_s_irpf195a" model="account.tax.template">
|
||||
<field name="name">Retenciones a cuenta 19,5% (Arrendamientos)</field>
|
||||
<field name="l10n_es_type">retencion</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_p_irpf19" model="account.tax.template">
|
||||
<field name="name">Retenciones IRPF 19%</field>
|
||||
<field name="l10n_es_type">retencion</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_p_irpf20a" model="account.tax.template">
|
||||
<field name="name">Retenciones 20% (Arrendamientos)</field>
|
||||
<field name="l10n_es_type">retencion</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_p_irpf18" model="account.tax.template">
|
||||
<field name="name">Retenciones IRPF 18%</field>
|
||||
<field name="l10n_es_type">retencion</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_p_irpf19a" model="account.tax.template">
|
||||
<field name="name">Retenciones 19% (Arrendamientos)</field>
|
||||
<field name="l10n_es_type">retencion</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_p_irpf195a" model="account.tax.template">
|
||||
<field name="name">Retenciones 19,5% (Arrendamientos)</field>
|
||||
<field name="l10n_es_type">retencion</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_p_irpf7" model="account.tax.template">
|
||||
<field name="name">Retenciones IRPF 7%</field>
|
||||
<field name="l10n_es_type">retencion</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_p_irpf9" model="account.tax.template">
|
||||
<field name="name">Retenciones IRPF 9%</field>
|
||||
<field name="l10n_es_type">retencion</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_p_irpf24" model="account.tax.template">
|
||||
<field name="name">Retenciones IRPF 24%</field>
|
||||
<field name="l10n_es_type">retencion</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_s_irpf20" model="account.tax.template">
|
||||
<field name="name">Retenciones a cuenta IRPF 20%</field>
|
||||
<field name="l10n_es_type">retencion</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_s_irpf20a" model="account.tax.template">
|
||||
<field name="name">Retenciones a cuenta 20% (Arrendamientos)</field>
|
||||
<field name="l10n_es_type">retencion</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_s_irpf24" model="account.tax.template">
|
||||
<field name="name">Retenciones a cuenta IRPF 24%</field>
|
||||
<field name="l10n_es_type">retencion</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_p_iva12_agr" model="account.tax.template">
|
||||
<field name="name">12% IVA Soportado régimen agricultura</field>
|
||||
<field name="l10n_es_type">sujeto_agricultura</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_p_iva105_gan" model="account.tax.template">
|
||||
<field name="name">10,5% IVA Soportado régimen ganadero o pesca</field>
|
||||
<field name="l10n_es_type">sujeto_agricultura</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_s_iva0_e" model="account.tax.template">
|
||||
<field name="name">IVA 0% Exportaciones</field>
|
||||
<field name="l10n_es_type">exento</field>
|
||||
<field name="l10n_es_exempt_reason">E2</field> <!--E2 for exportation-->
|
||||
<field name="tax_scope">consu</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_s_iva0_ic" model="account.tax.template">
|
||||
<field name="name">IVA 0% Entregas Intracomunitarias exentas</field>
|
||||
<field name="l10n_es_type">exento</field>
|
||||
<field name="l10n_es_exempt_reason">E5</field> <!--E5 for intra-community-->
|
||||
<field name="tax_scope">consu</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_p_req014" model="account.tax.template">
|
||||
<field name="name">1.4% Recargo Equivalencia Compras</field>
|
||||
<field name="l10n_es_type">recargo</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_p_req05" model="account.tax.template">
|
||||
<field name="name">0.50% Recargo Equivalencia Compras</field>
|
||||
<field name="l10n_es_type">recargo</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_p_req52" model="account.tax.template">
|
||||
<field name="name">5.2% Recargo Equivalencia Compras</field>
|
||||
<field name="l10n_es_type">recargo</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_s_irpf1" model="account.tax.template">
|
||||
<field name="name">Retenciones a cuenta IRPF 1%</field>
|
||||
<field name="l10n_es_type">retencion</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_s_irpf2" model="account.tax.template">
|
||||
<field name="name">Retenciones a cuenta IRPF 2%</field>
|
||||
<field name="l10n_es_type">retencion</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_s_irpf21" model="account.tax.template">
|
||||
<field name="name">Retenciones a cuenta IRPF 21%</field>
|
||||
<field name="l10n_es_type">retencion</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_s_irpf21a" model="account.tax.template">
|
||||
<field name="name">Retenciones a cuenta 21% (Arrendamientos)</field>
|
||||
<field name="l10n_es_type">retencion</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_s_irpf7" model="account.tax.template">
|
||||
<field name="name">Retenciones a cuenta IRPF 7%</field>
|
||||
<field name="l10n_es_type">retencion</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_s_irpf15" model="account.tax.template">
|
||||
<field name="name">Retenciones a cuenta IRPF 15%</field>
|
||||
<field name="l10n_es_type">retencion</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_p_irpf1" model="account.tax.template">
|
||||
<field name="name">Retenciones IRPF 1%</field>
|
||||
<field name="l10n_es_type">retencion</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_p_irpf15" model="account.tax.template">
|
||||
<field name="name">Retenciones IRPF 15%</field>
|
||||
<field name="l10n_es_type">retencion</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_p_irpf21t" model="account.tax.template">
|
||||
<field name="name">Retenciones IRPF (Trabajadores)</field>
|
||||
<field name="l10n_es_type">retencion</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_p_iva10_sp_in" model="account.tax.template">
|
||||
<field name="name">IVA 10% Adquisición de servicios intracomunitarios</field>
|
||||
<field name="l10n_es_type">retencion</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_p_iva4_sp_in" model="account.tax.template">
|
||||
<field name="name">IVA 4% Adquisición de servicios intracomunitarios</field>
|
||||
<field name="l10n_es_type">retencion</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_p_irpf21te" model="account.tax.template">
|
||||
<field name="name">Retenciones IRPF (Trabajadores) en especie</field>
|
||||
<field name="l10n_es_type">retencion</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_p_irpf20" model="account.tax.template">
|
||||
<field name="name">Retenciones IRPF 20%</field>
|
||||
<field name="l10n_es_type">retencion</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_p_irpf21a" model="account.tax.template">
|
||||
<field name="name">Retenciones 21% (Arrendamientos)</field>
|
||||
<field name="l10n_es_type">retencion</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_p_irpf21p" model="account.tax.template">
|
||||
<field name="name">Retenciones IRPF 21%</field>
|
||||
<field name="l10n_es_type">retencion</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_p_irpf2" model="account.tax.template">
|
||||
<field name="name">Retenciones IRPF 2%</field>
|
||||
<field name="l10n_es_type">retencion</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_s_iva0_isp" model="account.tax.template">
|
||||
<field name="name">IVA 0% Venta con Inversión del Sujeto Pasivo</field>
|
||||
<field name="l10n_es_type">sujeto_isp</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_p_iva4_isp" model="account.tax.template">
|
||||
<field name="name">IVA 4% Compra con Inversión del Sujeto Pasivo Nacional</field>
|
||||
<field name="l10n_es_type">sujeto_isp</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_p_iva10_isp" model="account.tax.template">
|
||||
<field name="name">IVA 10% Compra con Inversión del Sujeto Pasivo Nacional</field>
|
||||
<field name="l10n_es_type">sujeto_isp</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_p_iva21_isp" model="account.tax.template">
|
||||
<field name="name">IVA 21% Compra con Inversión del Sujeto Pasivo Nacional</field>
|
||||
<field name="l10n_es_type">sujeto_isp</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_p_rp19" model="account.tax.template">
|
||||
<field name="name">Retenciones 19% (préstamos)</field>
|
||||
<field name="l10n_es_type">retencion</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_p_rrD19" model="account.tax.template">
|
||||
<field name="name">Retenciones 19% (reparto de dividendos)</field>
|
||||
<field name="l10n_es_type">retencion</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_s_irpfnrnue24" model="account.tax.template">
|
||||
<field name="l10n_es_type">retencion</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_p_irpfnrnue24p" model="account.tax.template">
|
||||
<field name="l10n_es_type">retencion</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_s_irpfnrue19" model="account.tax.template">
|
||||
<field name="l10n_es_type">retencion</field>
|
||||
</record>
|
||||
<record id="l10n_es.account_tax_template_p_irpfnrue19p" model="account.tax.template">
|
||||
<field name="l10n_es_type">retencion</field>
|
||||
</record>
|
||||
</odoo>
|
||||
|
|
@ -1,3 +1,3 @@
|
|||
-- disable_l10n_es_edi_integration
|
||||
UPDATE res_company
|
||||
SET l10n_es_edi_test_env = true;
|
||||
SET l10n_es_sii_test_env = true;
|
||||
|
|
|
|||
|
|
@ -1,6 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<odoo>
|
||||
<record id="partner_simplified" model="res.partner">
|
||||
<field name="name">Simplified Invoice Partner (ES)</field>
|
||||
</record>
|
||||
</odoo>
|
||||
|
|
@ -1,8 +1,12 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<record id="demo_certificate" model="l10n_es_edi.certificate">
|
||||
<field name="content" type="base64" file="l10n_es_edi_sii/demo/certificates/aeat_1234.p12"/>
|
||||
<field name="password">1234</field>
|
||||
<field name="company_id" ref="l10n_es.demo_company_es"/>
|
||||
</record>
|
||||
<data noupdate="1">
|
||||
<record id="demo_certificate" model="certificate.certificate">
|
||||
<field name="name">ES SII Demo Certificate</field>
|
||||
<field name="content" type="base64" file="l10n_es_edi_sii/demo/certificates/aeat_1234.p12"/>
|
||||
<field name="pkcs12_password">1234</field>
|
||||
<field name="scope">sii</field>
|
||||
<field name="company_id" ref="base.demo_company_es"/>
|
||||
</record>
|
||||
</data>
|
||||
</odoo>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<record id="base.demo_company_es" model="res.company">
|
||||
<field name="l10n_es_sii_tax_agency">gipuzkoa</field>
|
||||
</record>
|
||||
</odoo>
|
||||
|
|
@ -4,138 +4,82 @@
|
|||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Odoo Server 16.0\n"
|
||||
"Project-Id-Version: Odoo Server 17.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-02-13 13:24+0000\n"
|
||||
"PO-Revision-Date: 2025-02-13 13:24+0000\n"
|
||||
"POT-Creation-Date: 2025-12-30 19:06+0000\n"
|
||||
"PO-Revision-Date: 2025-02-13 13:18+0000\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
"Language: es\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: \n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model_terms:ir.ui.view,arch_db:l10n_es_edi_sii.res_config_settings_view_form
|
||||
msgid ""
|
||||
"<span class=\"o_form_label\">Registro de Libros connection SII</span>\n"
|
||||
" <span class=\"fa fa-lg fa-building-o\" title=\"Values set here are company-specific.\" groups=\"base.group_multi_company\"/>"
|
||||
msgstr ""
|
||||
"<span class=\"o_form_label\">Connexión con el Registro de Libros mediante SII</span>\n"
|
||||
" <span class=\"fa fa-lg fa-building-o\" title=\"Los valores establecidos aquí son específicos de la compañía.\" groups=\"base.group_multi_company\"/>"
|
||||
#: model:ir.model,name:l10n_es_edi_sii.model_account_move_send
|
||||
msgid "Account Move Send"
|
||||
msgstr "Envío de movimiento de cuenta"
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__res_company__l10n_es_edi_tax_agency__aeat
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__res_company__l10n_es_sii_tax_agency__aeat
|
||||
msgid "Agencia Tributaria española"
|
||||
msgstr "Agencia Tributaria española"
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__account_tax__l10n_es_exempt_reason__e1
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__account_tax_template__l10n_es_exempt_reason__e1
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__l10n_es_sii_account_tax_mixin__l10n_es_exempt_reason__e1
|
||||
msgid "Art. 20"
|
||||
msgstr "Art. 20"
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__account_tax__l10n_es_exempt_reason__e2
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__account_tax_template__l10n_es_exempt_reason__e2
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__l10n_es_sii_account_tax_mixin__l10n_es_exempt_reason__e2
|
||||
msgid "Art. 21"
|
||||
msgstr "Art. 21"
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__account_tax__l10n_es_exempt_reason__e3
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__account_tax_template__l10n_es_exempt_reason__e3
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__l10n_es_sii_account_tax_mixin__l10n_es_exempt_reason__e3
|
||||
msgid "Art. 22"
|
||||
msgstr "Art. 22"
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__account_tax__l10n_es_exempt_reason__e4
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__account_tax_template__l10n_es_exempt_reason__e4
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__l10n_es_sii_account_tax_mixin__l10n_es_exempt_reason__e4
|
||||
msgid "Art. 23 y 24"
|
||||
msgstr "Art. 23 y 24"
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__account_tax__l10n_es_exempt_reason__e5
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__account_tax_template__l10n_es_exempt_reason__e5
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__l10n_es_sii_account_tax_mixin__l10n_es_exempt_reason__e5
|
||||
msgid "Art. 25"
|
||||
msgstr "Art. 25"
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_account_tax__l10n_es_bien_inversion
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_account_tax_template__l10n_es_bien_inversion
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_l10n_es_sii_account_tax_mixin__l10n_es_bien_inversion
|
||||
msgid "Bien de Inversion"
|
||||
msgstr "Bien de inversión"
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_account_bank_statement_line__l10n_es_edi_csv
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_account_move__l10n_es_edi_csv
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_account_payment__l10n_es_edi_csv
|
||||
msgid "CSV return code"
|
||||
msgstr "Código de devolución CSV"
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_res_company__l10n_es_edi_certificate_id
|
||||
msgid "Certificate (ES)"
|
||||
msgstr "Certificado (ES)"
|
||||
#: model:ir.model,name:l10n_es_edi_sii.model_certificate_certificate
|
||||
msgid "Certificate"
|
||||
msgstr "Certificado"
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.ui.menu,name:l10n_es_edi_sii.menu_l10n_es_edi_certificates
|
||||
msgid "Certificates (ES)"
|
||||
msgstr "Certificados (ES)"
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_res_company__l10n_es_sii_certificate_id
|
||||
msgid "Certificate (SII)"
|
||||
msgstr "Certificado (SII)"
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.actions.act_window,name:l10n_es_edi_sii.l10n_es_edi_certificate_action
|
||||
msgid "Certificates for EDI invoices on Spain"
|
||||
msgstr "Certificados para las facturas EDI en España"
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_certificate_certificate__scope
|
||||
msgid "Certificate scope"
|
||||
msgstr "Alcance del certificado"
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.ui.menu,name:l10n_es_edi_sii.menu_l10n_es_edi_sii_certificates
|
||||
msgid "Certificates"
|
||||
msgstr "Certificados"
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.actions.act_window,name:l10n_es_edi_sii.l10n_es_edi_sii_certificate_action
|
||||
msgid "Certificates for SII EDI invoices on Spain"
|
||||
msgstr "Certificados para facturas SII EDI de España"
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model,name:l10n_es_edi_sii.model_res_company
|
||||
msgid "Companies"
|
||||
msgstr "Compañías"
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_l10n_es_edi_certificate__company_id
|
||||
msgid "Company"
|
||||
msgstr "Compañía"
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model,name:l10n_es_edi_sii.model_res_config_settings
|
||||
msgid "Config Settings"
|
||||
msgstr "Ajustes de configuración"
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model_terms:ir.actions.act_window,help:l10n_es_edi_sii.l10n_es_edi_certificate_action
|
||||
#: model_terms:ir.actions.act_window,help:l10n_es_edi_sii.l10n_es_edi_sii_certificate_action
|
||||
msgid "Create the first certificate"
|
||||
msgstr "Crear el primer certificado"
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_l10n_es_edi_certificate__create_uid
|
||||
msgid "Created by"
|
||||
msgstr "Creado por"
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_l10n_es_edi_certificate__create_date
|
||||
msgid "Created on"
|
||||
msgstr "Creado el"
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_l10n_es_edi_certificate__date_end
|
||||
msgid "Date End"
|
||||
msgstr "Fecha de finalización"
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_l10n_es_edi_certificate__date_start
|
||||
msgid "Date Start"
|
||||
msgstr "Fecha de inicio"
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_l10n_es_edi_certificate__display_name
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_account_edi_format__display_name
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_account_move__display_name
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_account_move_send__display_name
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_account_resequence_wizard__display_name
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_certificate_certificate__display_name
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_res_company__display_name
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_res_config_settings__display_name
|
||||
msgid "Display Name"
|
||||
msgstr "Nombre mostrado"
|
||||
|
||||
|
|
@ -145,55 +89,41 @@ msgid "EDI format"
|
|||
msgstr "Formato EDI"
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model,name:l10n_es_edi_sii.model_mail_template
|
||||
msgid "Email Templates"
|
||||
msgstr "Plantillas de correo electrónico"
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_account_tax__l10n_es_exempt_reason
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_account_tax_template__l10n_es_exempt_reason
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_l10n_es_sii_account_tax_mixin__l10n_es_exempt_reason
|
||||
msgid "Exempt Reason (Spain)"
|
||||
msgstr "Motivo de exención (España)"
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__account_tax__l10n_es_type__exento
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__account_tax_template__l10n_es_type__exento
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__l10n_es_sii_account_tax_mixin__l10n_es_type__exento
|
||||
msgid "Exento"
|
||||
msgstr "Exento"
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_l10n_es_edi_certificate__content
|
||||
msgid "File"
|
||||
msgstr "Archivo"
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__res_company__l10n_es_edi_tax_agency__bizkaia
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__res_company__l10n_es_sii_tax_agency__bizkaia
|
||||
msgid "Hacienda Foral de Bizkaia"
|
||||
msgstr "Hacienda Foral de Bizkaia"
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__res_company__l10n_es_edi_tax_agency__gipuzkoa
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__res_company__l10n_es_sii_tax_agency__gipuzkoa
|
||||
msgid "Hacienda Foral de Gipuzkoa"
|
||||
msgstr "Hacienda Foral de Gipuzkoa"
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_l10n_es_edi_certificate__id
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_account_edi_format__id
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_account_move__id
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_account_move_send__id
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_account_resequence_wizard__id
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_certificate_certificate__id
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_res_company__id
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_res_config_settings__id
|
||||
msgid "ID"
|
||||
msgstr "ID"
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__account_tax__l10n_es_type__ignore
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__account_tax_template__l10n_es_type__ignore
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__l10n_es_sii_account_tax_mixin__l10n_es_type__ignore
|
||||
msgid "Ignore even the base amount"
|
||||
msgstr "Ignorar incluso el importe base"
|
||||
#. odoo-python
|
||||
#: code:addons/l10n_es_edi_sii/models/account_edi_format.py:0
|
||||
msgid ""
|
||||
"In case of a foreign customer, you need to configure the tax scope on "
|
||||
"taxes:\n"
|
||||
"%s"
|
||||
msgstr ""
|
||||
"En el caso de un cliente extranjero, es necesario configurar el ámbito "
|
||||
"fiscal en impuestos:\n"
|
||||
"%s"
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_account_bank_statement_line__l10n_es_edi_is_required
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_account_move__l10n_es_edi_is_required
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_account_payment__l10n_es_edi_is_required
|
||||
msgid "Is the Spanish EDI needed"
|
||||
msgstr "¿Se necesita el EDI español?"
|
||||
|
||||
|
|
@ -203,77 +133,55 @@ msgid "Journal Entry"
|
|||
msgstr "Asiento contable"
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_res_company__l10n_es_edi_certificate_ids
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_res_config_settings__l10n_es_edi_certificate_ids
|
||||
msgid "L10N Es Edi Certificate"
|
||||
msgstr "L10N Es Certificado EDI"
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_l10n_es_edi_certificate____last_update
|
||||
msgid "Last Modified on"
|
||||
msgstr "Última modificación el"
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_l10n_es_edi_certificate__write_uid
|
||||
msgid "Last Updated by"
|
||||
msgstr "Última actualización por"
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_l10n_es_edi_certificate__write_date
|
||||
msgid "Last Updated on"
|
||||
msgstr "Última actualización el"
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_res_company__l10n_es_sii_certificate_ids
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_res_config_settings__l10n_es_sii_certificate_ids
|
||||
msgid "L10N Es Sii Certificate"
|
||||
msgstr "L10N ES Certificado SII"
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#. odoo-python
|
||||
#: code:addons/l10n_es_edi_sii/models/account_edi_format.py:0
|
||||
#, python-format
|
||||
msgid "Line %s should only have one main tax."
|
||||
msgstr "La línea %s solo debe tener un impuesto principal."
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#. odoo-python
|
||||
#: code:addons/l10n_es_edi_sii/models/account_edi_format.py:0
|
||||
#, python-format
|
||||
msgid "Line %s should only have one no sujeto (localizations) tax."
|
||||
msgstr "La línea %s solo debe tener un impuesto no sujeto (localizaciones)."
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#. odoo-python
|
||||
#: code:addons/l10n_es_edi_sii/models/account_edi_format.py:0
|
||||
#, python-format
|
||||
msgid "Line %s should only have one no sujeto tax."
|
||||
msgstr "La línea %s solo debe tener un impuesto no sujeto."
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#. odoo-python
|
||||
#: code:addons/l10n_es_edi_sii/models/account_edi_format.py:0
|
||||
#, python-format
|
||||
msgid "Line %s should only have one recargo tax."
|
||||
msgstr "La línea %s solo debe tener un impuesto de recargo."
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#. odoo-python
|
||||
#: code:addons/l10n_es_edi_sii/models/account_edi_format.py:0
|
||||
#, python-format
|
||||
msgid "Line %s should only have one retention tax."
|
||||
msgstr "La línea %s solo debe tener un impuesto de retención."
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#. odoo-python
|
||||
#: code:addons/l10n_es_edi_sii/models/account_edi_format.py:0
|
||||
#, python-format
|
||||
msgid "Line %s should only have one sujeto tax."
|
||||
msgstr "La línea %s solo debe tener un impuesto sujeto."
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model_terms:ir.ui.view,arch_db:l10n_es_edi_sii.res_config_settings_view_form
|
||||
msgid "Manage certificates (SII/TicketBAI)"
|
||||
msgstr "Gestionar certificados (SII/TicketBAI)"
|
||||
msgid "Manage certificates (SII)"
|
||||
msgstr "Gestionar certificados (SII)"
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#. odoo-python
|
||||
#: code:addons/l10n_es_edi_sii/models/account_edi_format.py:0
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Networking error:\n"
|
||||
"%s"
|
||||
|
|
@ -281,70 +189,20 @@ msgstr ""
|
|||
"Error de red:\n"
|
||||
"%s"
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__account_tax__l10n_es_type__no_deducible
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__account_tax_template__l10n_es_type__no_deducible
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__l10n_es_sii_account_tax_mixin__l10n_es_type__no_deducible
|
||||
msgid "No Deducible"
|
||||
msgstr "No deducible"
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__account_tax__l10n_es_type__no_sujeto
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__account_tax_template__l10n_es_type__no_sujeto
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__l10n_es_sii_account_tax_mixin__l10n_es_type__no_sujeto
|
||||
msgid "No Sujeto"
|
||||
msgstr "No sujeto"
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__account_tax__l10n_es_type__no_sujeto_loc
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__account_tax_template__l10n_es_type__no_sujeto_loc
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__l10n_es_sii_account_tax_mixin__l10n_es_type__no_sujeto_loc
|
||||
msgid "No Sujeto por reglas de Localization"
|
||||
msgstr "No sujeto por reglas de localización"
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model_terms:ir.ui.view,arch_db:l10n_es_edi_sii.res_config_settings_view_form
|
||||
msgid "No tax agency selected: SII not activated."
|
||||
msgstr "No se ha seleccionado ninguna agencia tributaria: SII no activado."
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__account_tax__l10n_es_exempt_reason__e6
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__account_tax_template__l10n_es_exempt_reason__e6
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__l10n_es_sii_account_tax_mixin__l10n_es_exempt_reason__e6
|
||||
msgid "Otros"
|
||||
msgstr "Otros"
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model.fields,help:l10n_es_edi_sii.field_l10n_es_edi_certificate__content
|
||||
msgid "PFX Certificate"
|
||||
msgstr "Certificado PFX"
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model.fields,help:l10n_es_edi_sii.field_l10n_es_edi_certificate__password
|
||||
msgid "Passphrase for the PFX certificate"
|
||||
msgstr "Frase de contraseña para el certificado PFX"
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_l10n_es_edi_certificate__password
|
||||
msgid "Password"
|
||||
msgstr "Contraseña"
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model,name:l10n_es_edi_sii.model_l10n_es_edi_certificate
|
||||
msgid "Personal Digital Certificate"
|
||||
msgstr "Certificado personal de persona física"
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#. odoo-python
|
||||
#: code:addons/l10n_es_edi_sii/models/account_edi_format.py:0
|
||||
#, python-format
|
||||
msgid "Please configure the certificate for SII."
|
||||
msgstr "Configure el certificado para el SII."
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#. odoo-python
|
||||
#: code:addons/l10n_es_edi_sii/models/account_edi_format.py:0
|
||||
#, python-format
|
||||
msgid "Please specify a tax agency on your company for SII."
|
||||
msgstr "Especifique una agencia tributaria en su compañía para el SII"
|
||||
|
||||
|
|
@ -355,105 +213,55 @@ msgstr ""
|
|||
"Modo de producción: los datos EDI se envían a los servidores de la agencia "
|
||||
"oficial."
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__account_tax__l10n_es_type__recargo
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__account_tax_template__l10n_es_type__recargo
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__l10n_es_sii_account_tax_mixin__l10n_es_type__recargo
|
||||
msgid "Recargo de Equivalencia"
|
||||
msgstr "Recargo de equivalencia"
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_account_bank_statement_line__l10n_es_registration_date
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_account_move__l10n_es_registration_date
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_account_payment__l10n_es_registration_date
|
||||
msgid "Registration Date"
|
||||
msgstr "Fecha de registro"
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model_terms:ir.ui.view,arch_db:l10n_es_edi_sii.res_config_settings_view_form
|
||||
msgid "Registro de Libros connection SII"
|
||||
msgstr "Connexión con el Registro de Libros mediante SII"
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model,name:l10n_es_edi_sii.model_account_resequence_wizard
|
||||
msgid "Remake the sequence of Journal Entries."
|
||||
msgstr "Remake the sequence of Journal Entries."
|
||||
msgstr "Haga de nuevo la secuencia de asientos contables."
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__account_tax__l10n_es_type__retencion
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__account_tax_template__l10n_es_type__retencion
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__l10n_es_sii_account_tax_mixin__l10n_es_type__retencion
|
||||
msgid "Retencion"
|
||||
msgstr "Retención"
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__certificate_certificate__scope__sii
|
||||
#: model_terms:ir.ui.view,arch_db:l10n_es_edi_sii.certificate_certificate_view_search
|
||||
msgid "SII"
|
||||
msgstr "SII"
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model,name:l10n_es_edi_sii.model_l10n_es_sii_account_tax_mixin
|
||||
msgid "SII Fields"
|
||||
msgstr "Campos SII"
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_res_company__l10n_es_sii_test_env
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_res_config_settings__l10n_es_sii_test_env
|
||||
msgid "SII Test Mode"
|
||||
msgstr "Modo de prueba SII"
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.ui.menu,name:l10n_es_edi_sii.menu_l10n_es_edi_root
|
||||
msgid "Spain"
|
||||
msgstr "España"
|
||||
#: model_terms:ir.ui.view,arch_db:l10n_es_edi_sii.certificate_certificate_view_search
|
||||
msgid "SII certificates"
|
||||
msgstr "Certificados SII"
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model_terms:ir.ui.view,arch_db:l10n_es_edi_sii.res_config_settings_view_form
|
||||
msgid "Spain Localization"
|
||||
msgstr "Localización de España"
|
||||
#: model:ir.ui.menu,name:l10n_es_edi_sii.menu_l10n_es_edi_sii_root
|
||||
msgid "Spain SII"
|
||||
msgstr "SII España"
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__account_tax__l10n_es_type__sujeto
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__account_tax_template__l10n_es_type__sujeto
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__l10n_es_sii_account_tax_mixin__l10n_es_type__sujeto
|
||||
msgid "Sujeto"
|
||||
msgstr "Sujeto"
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__account_tax__l10n_es_type__sujeto_agricultura
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__account_tax_template__l10n_es_type__sujeto_agricultura
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__l10n_es_sii_account_tax_mixin__l10n_es_type__sujeto_agricultura
|
||||
msgid "Sujeto Agricultura"
|
||||
msgstr "Sujeto Agricultura"
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__account_tax__l10n_es_type__sujeto_isp
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__account_tax_template__l10n_es_type__sujeto_isp
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__l10n_es_sii_account_tax_mixin__l10n_es_type__sujeto_isp
|
||||
msgid "Sujeto ISP"
|
||||
msgstr "Sujeto ISP"
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model,name:l10n_es_edi_sii.model_account_tax
|
||||
msgid "Tax"
|
||||
msgstr "Impuesto"
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_res_company__l10n_es_edi_tax_agency
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_res_config_settings__l10n_es_edi_tax_agency
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_res_company__l10n_es_sii_tax_agency
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_res_config_settings__l10n_es_sii_tax_agency
|
||||
msgid "Tax Agency for SII"
|
||||
msgstr "Agencia Tributaria para SII"
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_account_tax__l10n_es_type
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_account_tax_template__l10n_es_type
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_l10n_es_sii_account_tax_mixin__l10n_es_type
|
||||
msgid "Tax Type (Spain)"
|
||||
msgstr "Tipo de impuesto (España)"
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model_terms:ir.ui.view,arch_db:l10n_es_edi_sii.res_config_settings_view_form
|
||||
msgid ""
|
||||
"Tax agency selected: invoices will be sent by SII for journals where it is "
|
||||
"activated."
|
||||
msgid "Tax agency selected: invoices will be sent by SII."
|
||||
msgstr ""
|
||||
"Agencia tributaria seleccionada: las facturas serán enviadas por el SII para"
|
||||
" los diarios en los que esté activado."
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model,name:l10n_es_edi_sii.model_account_tax_template
|
||||
msgid "Templates for Taxes"
|
||||
msgstr "Plantillas para impuestos"
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_res_company__l10n_es_edi_test_env
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_res_config_settings__l10n_es_edi_test_env
|
||||
msgid "Test Mode"
|
||||
msgstr "Modo de prueba"
|
||||
"Agencia tributaria seleccionada: las facturas serán enviadas por el SII."
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model_terms:ir.ui.view,arch_db:l10n_es_edi_sii.res_config_settings_view_form
|
||||
|
|
@ -467,79 +275,39 @@ msgstr ""
|
|||
#. module: l10n_es_edi_sii
|
||||
#. odoo-python
|
||||
#: code:addons/l10n_es_edi_sii/models/account_edi_format.py:0
|
||||
#, python-format
|
||||
msgid "The SSL certificate could not be validated."
|
||||
msgstr "No se ha podido validar el certificado SSL"
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#. odoo-python
|
||||
#: code:addons/l10n_es_edi_sii/models/l10n_es_edi_certificate.py:0
|
||||
#, python-format
|
||||
msgid "The certificate is expired since %s"
|
||||
msgstr "El certificado ha caducado desde %s"
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model.fields,help:l10n_es_edi_sii.field_l10n_es_edi_certificate__date_end
|
||||
msgid "The date on which the certificate expires"
|
||||
msgstr "La fecha en la que el certificado caduca."
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model.fields,help:l10n_es_edi_sii.field_l10n_es_edi_certificate__date_start
|
||||
msgid "The date on which the certificate starts to be valid"
|
||||
msgstr "La fecha en la que el certificado comienza a ser válido"
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#. odoo-python
|
||||
#: code:addons/l10n_es_edi_sii/models/account_edi_format.py:0
|
||||
#, python-format
|
||||
msgid "The web service is not responding"
|
||||
msgstr "El servicio web no responde"
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#. odoo-python
|
||||
#: code:addons/l10n_es_edi_sii/models/l10n_es_edi_certificate.py:0
|
||||
#, python-format
|
||||
msgid ""
|
||||
"There has been a problem with the certificate, some usual problems can be:\n"
|
||||
"- The password given or the certificate are not valid.\n"
|
||||
"- The certificate content is invalid."
|
||||
msgstr ""
|
||||
"Había un problema con el certificado, algunos problemas habituales pueden ser:\n"
|
||||
"La contraseña proporcionada o el certificado no son válidos.\n"
|
||||
"El contenido del certificado no es válido"
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#. odoo-python
|
||||
#: code:addons/l10n_es_edi_sii/models/account_edi_format.py:0
|
||||
#, python-format
|
||||
msgid "This was accepted with errors: "
|
||||
msgstr "Esto se ha aceptado con errores:"
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model.fields,help:l10n_es_edi_sii.field_res_company__l10n_es_edi_test_env
|
||||
#: model:ir.model.fields,help:l10n_es_edi_sii.field_res_config_settings__l10n_es_edi_test_env
|
||||
msgid "Use the test environment"
|
||||
msgstr "Utilizar el entorno de prueba"
|
||||
#: model:ir.model.fields,help:l10n_es_edi_sii.field_res_company__l10n_es_sii_test_env
|
||||
#: model:ir.model.fields,help:l10n_es_edi_sii.field_res_config_settings__l10n_es_sii_test_env
|
||||
msgid "Use the test environment for SII"
|
||||
msgstr "Utilizar el entorno de prueba para SII"
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#. odoo-python
|
||||
#: code:addons/l10n_es_edi_sii/models/account_edi_format.py:0
|
||||
#, python-format
|
||||
msgid "VAT number is missing on company %s"
|
||||
msgstr "Falta el NIF de la compañía %s"
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model_terms:ir.ui.view,arch_db:l10n_es_edi_sii.l10n_es_edi_certificate_form
|
||||
msgid "Validity"
|
||||
msgstr "Validez"
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#. odoo-python
|
||||
#: code:addons/l10n_es_edi_sii/models/account_edi_format.py:0
|
||||
#, python-format
|
||||
msgid ""
|
||||
"We saw that this invoice was sent correctly before, but we did not treat the"
|
||||
" response. Make sure it is not because of a wrong configuration."
|
||||
"We saw that this invoice was sent correctly before, but we did not treat the "
|
||||
"response. Make sure it is not because of a wrong configuration."
|
||||
msgstr ""
|
||||
"Esta factura se ha enviada correctamente antes, pero no procesamos la "
|
||||
"respuesta. Asegúrese de que no se deba a una configuración incorrecta."
|
||||
|
|
@ -547,14 +315,11 @@ msgstr ""
|
|||
#. module: l10n_es_edi_sii
|
||||
#. odoo-python
|
||||
#: code:addons/l10n_es_edi_sii/models/account_edi_format.py:0
|
||||
#, python-format
|
||||
msgid "You should put a vendor reference on this vendor bill. "
|
||||
msgstr ""
|
||||
"Debe poner una referencia del proveedor en esta factura del proveedor."
|
||||
msgstr "Debe poner una referencia del proveedor en esta factura del proveedor."
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#. odoo-python
|
||||
#: code:addons/l10n_es_edi_sii/models/account_edi_format.py:0
|
||||
#, python-format
|
||||
msgid "[%s] %s"
|
||||
msgstr "[%s] %s"
|
||||
msgid "[%(error_code)s] %(error_message)s"
|
||||
msgstr "[%(error_code)s] %(error_message)s"
|
||||
|
|
|
|||
|
|
@ -4,10 +4,10 @@
|
|||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Odoo Server 16.0\n"
|
||||
"Project-Id-Version: Odoo Server 19.0+e\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-05-20 09:26+0000\n"
|
||||
"PO-Revision-Date: 2025-05-20 09:26+0000\n"
|
||||
"POT-Creation-Date: 2025-12-30 19:06+0000\n"
|
||||
"PO-Revision-Date: 2025-12-30 19:06+0000\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
|
|
@ -16,79 +16,44 @@ msgstr ""
|
|||
"Plural-Forms: \n"
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model_terms:ir.ui.view,arch_db:l10n_es_edi_sii.res_config_settings_view_form
|
||||
msgid ""
|
||||
"<span class=\"o_form_label\">Registro de Libros connection SII</span>\n"
|
||||
" <span class=\"fa fa-lg fa-building-o\" title=\"Values set here are company-specific.\" groups=\"base.group_multi_company\"/>"
|
||||
#: model:ir.model,name:l10n_es_edi_sii.model_account_move_send
|
||||
msgid "Account Move Send"
|
||||
msgstr ""
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__res_company__l10n_es_edi_tax_agency__aeat
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__res_company__l10n_es_sii_tax_agency__aeat
|
||||
msgid "Agencia Tributaria española"
|
||||
msgstr ""
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__account_tax__l10n_es_exempt_reason__e1
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__account_tax_template__l10n_es_exempt_reason__e1
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__l10n_es_sii_account_tax_mixin__l10n_es_exempt_reason__e1
|
||||
msgid "Art. 20"
|
||||
msgstr ""
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__account_tax__l10n_es_exempt_reason__e2
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__account_tax_template__l10n_es_exempt_reason__e2
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__l10n_es_sii_account_tax_mixin__l10n_es_exempt_reason__e2
|
||||
msgid "Art. 21"
|
||||
msgstr ""
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__account_tax__l10n_es_exempt_reason__e3
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__account_tax_template__l10n_es_exempt_reason__e3
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__l10n_es_sii_account_tax_mixin__l10n_es_exempt_reason__e3
|
||||
msgid "Art. 22"
|
||||
msgstr ""
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__account_tax__l10n_es_exempt_reason__e4
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__account_tax_template__l10n_es_exempt_reason__e4
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__l10n_es_sii_account_tax_mixin__l10n_es_exempt_reason__e4
|
||||
msgid "Art. 23 y 24"
|
||||
msgstr ""
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__account_tax__l10n_es_exempt_reason__e5
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__account_tax_template__l10n_es_exempt_reason__e5
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__l10n_es_sii_account_tax_mixin__l10n_es_exempt_reason__e5
|
||||
msgid "Art. 25"
|
||||
msgstr ""
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_account_tax__l10n_es_bien_inversion
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_account_tax_template__l10n_es_bien_inversion
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_l10n_es_sii_account_tax_mixin__l10n_es_bien_inversion
|
||||
msgid "Bien de Inversion"
|
||||
msgstr ""
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_account_bank_statement_line__l10n_es_edi_csv
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_account_move__l10n_es_edi_csv
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_account_payment__l10n_es_edi_csv
|
||||
msgid "CSV return code"
|
||||
msgstr ""
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_res_company__l10n_es_edi_certificate_id
|
||||
msgid "Certificate (ES)"
|
||||
#: model:ir.model,name:l10n_es_edi_sii.model_certificate_certificate
|
||||
msgid "Certificate"
|
||||
msgstr ""
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.ui.menu,name:l10n_es_edi_sii.menu_l10n_es_edi_certificates
|
||||
msgid "Certificates (ES)"
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_res_company__l10n_es_sii_certificate_id
|
||||
msgid "Certificate (SII)"
|
||||
msgstr ""
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.actions.act_window,name:l10n_es_edi_sii.l10n_es_edi_certificate_action
|
||||
msgid "Certificates for EDI invoices on Spain"
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_certificate_certificate__scope
|
||||
msgid "Certificate scope"
|
||||
msgstr ""
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.ui.menu,name:l10n_es_edi_sii.menu_l10n_es_edi_sii_certificates
|
||||
msgid "Certificates"
|
||||
msgstr ""
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.actions.act_window,name:l10n_es_edi_sii.l10n_es_edi_sii_certificate_action
|
||||
msgid "Certificates for SII EDI invoices on Spain"
|
||||
msgstr ""
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
|
|
@ -96,43 +61,24 @@ msgstr ""
|
|||
msgid "Companies"
|
||||
msgstr ""
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_l10n_es_edi_certificate__company_id
|
||||
msgid "Company"
|
||||
msgstr ""
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model,name:l10n_es_edi_sii.model_res_config_settings
|
||||
msgid "Config Settings"
|
||||
msgstr ""
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model_terms:ir.actions.act_window,help:l10n_es_edi_sii.l10n_es_edi_certificate_action
|
||||
#: model_terms:ir.actions.act_window,help:l10n_es_edi_sii.l10n_es_edi_sii_certificate_action
|
||||
msgid "Create the first certificate"
|
||||
msgstr ""
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_l10n_es_edi_certificate__create_uid
|
||||
msgid "Created by"
|
||||
msgstr ""
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_l10n_es_edi_certificate__create_date
|
||||
msgid "Created on"
|
||||
msgstr ""
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_l10n_es_edi_certificate__date_end
|
||||
msgid "Date End"
|
||||
msgstr ""
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_l10n_es_edi_certificate__date_start
|
||||
msgid "Date Start"
|
||||
msgstr ""
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_l10n_es_edi_certificate__display_name
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_account_edi_format__display_name
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_account_move__display_name
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_account_move_send__display_name
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_account_resequence_wizard__display_name
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_certificate_certificate__display_name
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_res_company__display_name
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_res_config_settings__display_name
|
||||
msgid "Display Name"
|
||||
msgstr ""
|
||||
|
||||
|
|
@ -142,55 +88,37 @@ msgid "EDI format"
|
|||
msgstr ""
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model,name:l10n_es_edi_sii.model_mail_template
|
||||
msgid "Email Templates"
|
||||
msgstr ""
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_account_tax__l10n_es_exempt_reason
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_account_tax_template__l10n_es_exempt_reason
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_l10n_es_sii_account_tax_mixin__l10n_es_exempt_reason
|
||||
msgid "Exempt Reason (Spain)"
|
||||
msgstr ""
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__account_tax__l10n_es_type__exento
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__account_tax_template__l10n_es_type__exento
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__l10n_es_sii_account_tax_mixin__l10n_es_type__exento
|
||||
msgid "Exento"
|
||||
msgstr ""
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_l10n_es_edi_certificate__content
|
||||
msgid "File"
|
||||
msgstr ""
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__res_company__l10n_es_edi_tax_agency__bizkaia
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__res_company__l10n_es_sii_tax_agency__bizkaia
|
||||
msgid "Hacienda Foral de Bizkaia"
|
||||
msgstr ""
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__res_company__l10n_es_edi_tax_agency__gipuzkoa
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__res_company__l10n_es_sii_tax_agency__gipuzkoa
|
||||
msgid "Hacienda Foral de Gipuzkoa"
|
||||
msgstr ""
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_l10n_es_edi_certificate__id
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_account_edi_format__id
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_account_move__id
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_account_move_send__id
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_account_resequence_wizard__id
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_certificate_certificate__id
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_res_company__id
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_res_config_settings__id
|
||||
msgid "ID"
|
||||
msgstr ""
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__account_tax__l10n_es_type__ignore
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__account_tax_template__l10n_es_type__ignore
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__l10n_es_sii_account_tax_mixin__l10n_es_type__ignore
|
||||
msgid "Ignore even the base amount"
|
||||
#. odoo-python
|
||||
#: code:addons/l10n_es_edi_sii/models/account_edi_format.py:0
|
||||
msgid ""
|
||||
"In case of a foreign customer, you need to configure the tax scope on taxes:\n"
|
||||
"%s"
|
||||
msgstr ""
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_account_bank_statement_line__l10n_es_edi_is_required
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_account_move__l10n_es_edi_is_required
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_account_payment__l10n_es_edi_is_required
|
||||
msgid "Is the Spanish EDI needed"
|
||||
msgstr ""
|
||||
|
||||
|
|
@ -200,146 +128,74 @@ msgid "Journal Entry"
|
|||
msgstr ""
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_res_company__l10n_es_edi_certificate_ids
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_res_config_settings__l10n_es_edi_certificate_ids
|
||||
msgid "L10N Es Edi Certificate"
|
||||
msgstr ""
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_l10n_es_edi_certificate____last_update
|
||||
msgid "Last Modified on"
|
||||
msgstr ""
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_l10n_es_edi_certificate__write_uid
|
||||
msgid "Last Updated by"
|
||||
msgstr ""
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_l10n_es_edi_certificate__write_date
|
||||
msgid "Last Updated on"
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_res_company__l10n_es_sii_certificate_ids
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_res_config_settings__l10n_es_sii_certificate_ids
|
||||
msgid "L10N Es Sii Certificate"
|
||||
msgstr ""
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#. odoo-python
|
||||
#: code:addons/l10n_es_edi_sii/models/account_edi_format.py:0
|
||||
#, python-format
|
||||
msgid "Line %s should only have one main tax."
|
||||
msgstr ""
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#. odoo-python
|
||||
#: code:addons/l10n_es_edi_sii/models/account_edi_format.py:0
|
||||
#, python-format
|
||||
msgid "Line %s should only have one no sujeto (localizations) tax."
|
||||
msgstr ""
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#. odoo-python
|
||||
#: code:addons/l10n_es_edi_sii/models/account_edi_format.py:0
|
||||
#, python-format
|
||||
msgid "Line %s should only have one no sujeto tax."
|
||||
msgstr ""
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#. odoo-python
|
||||
#: code:addons/l10n_es_edi_sii/models/account_edi_format.py:0
|
||||
#, python-format
|
||||
msgid "Line %s should only have one recargo tax."
|
||||
msgstr ""
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#. odoo-python
|
||||
#: code:addons/l10n_es_edi_sii/models/account_edi_format.py:0
|
||||
#, python-format
|
||||
msgid "Line %s should only have one retention tax."
|
||||
msgstr ""
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#. odoo-python
|
||||
#: code:addons/l10n_es_edi_sii/models/account_edi_format.py:0
|
||||
#, python-format
|
||||
msgid "Line %s should only have one sujeto tax."
|
||||
msgstr ""
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model_terms:ir.ui.view,arch_db:l10n_es_edi_sii.res_config_settings_view_form
|
||||
msgid "Manage certificates (SII/TicketBAI)"
|
||||
msgid "Manage certificates (SII)"
|
||||
msgstr ""
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#. odoo-python
|
||||
#: code:addons/l10n_es_edi_sii/models/account_edi_format.py:0
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Networking error:\n"
|
||||
"%s"
|
||||
msgstr ""
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__account_tax__l10n_es_type__no_deducible
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__account_tax_template__l10n_es_type__no_deducible
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__l10n_es_sii_account_tax_mixin__l10n_es_type__no_deducible
|
||||
msgid "No Deducible"
|
||||
msgstr ""
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__account_tax__l10n_es_type__no_sujeto
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__account_tax_template__l10n_es_type__no_sujeto
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__l10n_es_sii_account_tax_mixin__l10n_es_type__no_sujeto
|
||||
msgid "No Sujeto"
|
||||
msgstr ""
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__account_tax__l10n_es_type__no_sujeto_loc
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__account_tax_template__l10n_es_type__no_sujeto_loc
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__l10n_es_sii_account_tax_mixin__l10n_es_type__no_sujeto_loc
|
||||
msgid "No Sujeto por reglas de Localization"
|
||||
msgstr ""
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model_terms:ir.ui.view,arch_db:l10n_es_edi_sii.res_config_settings_view_form
|
||||
msgid "No tax agency selected: SII not activated."
|
||||
msgstr ""
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__account_tax__l10n_es_exempt_reason__e6
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__account_tax_template__l10n_es_exempt_reason__e6
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__l10n_es_sii_account_tax_mixin__l10n_es_exempt_reason__e6
|
||||
msgid "Otros"
|
||||
msgstr ""
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model.fields,help:l10n_es_edi_sii.field_l10n_es_edi_certificate__content
|
||||
msgid "PFX Certificate"
|
||||
msgstr ""
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model.fields,help:l10n_es_edi_sii.field_l10n_es_edi_certificate__password
|
||||
msgid "Passphrase for the PFX certificate"
|
||||
msgstr ""
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_l10n_es_edi_certificate__password
|
||||
msgid "Password"
|
||||
msgstr ""
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model,name:l10n_es_edi_sii.model_l10n_es_edi_certificate
|
||||
msgid "Personal Digital Certificate"
|
||||
msgstr ""
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#. odoo-python
|
||||
#: code:addons/l10n_es_edi_sii/models/account_edi_format.py:0
|
||||
#, python-format
|
||||
msgid "Please configure the certificate for SII."
|
||||
msgstr ""
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#. odoo-python
|
||||
#: code:addons/l10n_es_edi_sii/models/account_edi_format.py:0
|
||||
#, python-format
|
||||
msgid "Please specify a tax agency on your company for SII."
|
||||
msgstr ""
|
||||
|
||||
|
|
@ -349,17 +205,14 @@ msgid "Production mode: EDI data is sent to the official agency servers."
|
|||
msgstr ""
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__account_tax__l10n_es_type__recargo
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__account_tax_template__l10n_es_type__recargo
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__l10n_es_sii_account_tax_mixin__l10n_es_type__recargo
|
||||
msgid "Recargo de Equivalencia"
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_account_bank_statement_line__l10n_es_registration_date
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_account_move__l10n_es_registration_date
|
||||
msgid "Registration Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_account_bank_statement_line__l10n_es_registration_date
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_account_move__l10n_es_registration_date
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_account_payment__l10n_es_registration_date
|
||||
msgid "Registration Date"
|
||||
#: model_terms:ir.ui.view,arch_db:l10n_es_edi_sii.res_config_settings_view_form
|
||||
msgid "Registro de Libros connection SII"
|
||||
msgstr ""
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
|
|
@ -368,82 +221,36 @@ msgid "Remake the sequence of Journal Entries."
|
|||
msgstr ""
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__account_tax__l10n_es_type__retencion
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__account_tax_template__l10n_es_type__retencion
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__l10n_es_sii_account_tax_mixin__l10n_es_type__retencion
|
||||
msgid "Retencion"
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__certificate_certificate__scope__sii
|
||||
#: model_terms:ir.ui.view,arch_db:l10n_es_edi_sii.certificate_certificate_view_search
|
||||
msgid "SII"
|
||||
msgstr ""
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model,name:l10n_es_edi_sii.model_l10n_es_sii_account_tax_mixin
|
||||
msgid "SII Fields"
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_res_company__l10n_es_sii_test_env
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_res_config_settings__l10n_es_sii_test_env
|
||||
msgid "SII Test Mode"
|
||||
msgstr ""
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.ui.menu,name:l10n_es_edi_sii.menu_l10n_es_edi_root
|
||||
msgid "Spain"
|
||||
#: model_terms:ir.ui.view,arch_db:l10n_es_edi_sii.certificate_certificate_view_search
|
||||
msgid "SII certificates"
|
||||
msgstr ""
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model_terms:ir.ui.view,arch_db:l10n_es_edi_sii.res_config_settings_view_form
|
||||
msgid "Spain Localization"
|
||||
#: model:ir.ui.menu,name:l10n_es_edi_sii.menu_l10n_es_edi_sii_root
|
||||
msgid "Spain SII"
|
||||
msgstr ""
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__account_tax__l10n_es_type__sujeto
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__account_tax_template__l10n_es_type__sujeto
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__l10n_es_sii_account_tax_mixin__l10n_es_type__sujeto
|
||||
msgid "Sujeto"
|
||||
msgstr ""
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__account_tax__l10n_es_type__sujeto_agricultura
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__account_tax_template__l10n_es_type__sujeto_agricultura
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__l10n_es_sii_account_tax_mixin__l10n_es_type__sujeto_agricultura
|
||||
msgid "Sujeto Agricultura"
|
||||
msgstr ""
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__account_tax__l10n_es_type__sujeto_isp
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__account_tax_template__l10n_es_type__sujeto_isp
|
||||
#: model:ir.model.fields.selection,name:l10n_es_edi_sii.selection__l10n_es_sii_account_tax_mixin__l10n_es_type__sujeto_isp
|
||||
msgid "Sujeto ISP"
|
||||
msgstr ""
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model,name:l10n_es_edi_sii.model_account_tax
|
||||
msgid "Tax"
|
||||
msgstr ""
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_res_company__l10n_es_edi_tax_agency
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_res_config_settings__l10n_es_edi_tax_agency
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_res_company__l10n_es_sii_tax_agency
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_res_config_settings__l10n_es_sii_tax_agency
|
||||
msgid "Tax Agency for SII"
|
||||
msgstr ""
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_account_tax__l10n_es_type
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_account_tax_template__l10n_es_type
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_l10n_es_sii_account_tax_mixin__l10n_es_type
|
||||
msgid "Tax Type (Spain)"
|
||||
msgstr ""
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model_terms:ir.ui.view,arch_db:l10n_es_edi_sii.res_config_settings_view_form
|
||||
msgid ""
|
||||
"Tax agency selected: invoices will be sent by SII for journals where it is "
|
||||
"activated."
|
||||
msgstr ""
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model,name:l10n_es_edi_sii.model_account_tax_template
|
||||
msgid "Templates for Taxes"
|
||||
msgstr ""
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_res_company__l10n_es_edi_test_env
|
||||
#: model:ir.model.fields,field_description:l10n_es_edi_sii.field_res_config_settings__l10n_es_edi_test_env
|
||||
msgid "Test Mode"
|
||||
msgid "Tax agency selected: invoices will be sent by SII."
|
||||
msgstr ""
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
|
|
@ -456,73 +263,36 @@ msgstr ""
|
|||
#. module: l10n_es_edi_sii
|
||||
#. odoo-python
|
||||
#: code:addons/l10n_es_edi_sii/models/account_edi_format.py:0
|
||||
#, python-format
|
||||
msgid "The SSL certificate could not be validated."
|
||||
msgstr ""
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#. odoo-python
|
||||
#: code:addons/l10n_es_edi_sii/models/l10n_es_edi_certificate.py:0
|
||||
#, python-format
|
||||
msgid "The certificate is expired since %s"
|
||||
msgstr ""
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model.fields,help:l10n_es_edi_sii.field_l10n_es_edi_certificate__date_end
|
||||
msgid "The date on which the certificate expires"
|
||||
msgstr ""
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model.fields,help:l10n_es_edi_sii.field_l10n_es_edi_certificate__date_start
|
||||
msgid "The date on which the certificate starts to be valid"
|
||||
msgstr ""
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#. odoo-python
|
||||
#: code:addons/l10n_es_edi_sii/models/account_edi_format.py:0
|
||||
#, python-format
|
||||
msgid "The web service is not responding"
|
||||
msgstr ""
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#. odoo-python
|
||||
#: code:addons/l10n_es_edi_sii/models/l10n_es_edi_certificate.py:0
|
||||
#, python-format
|
||||
msgid ""
|
||||
"There has been a problem with the certificate, some usual problems can be:\n"
|
||||
"- The password given or the certificate are not valid.\n"
|
||||
"- The certificate content is invalid."
|
||||
msgstr ""
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#. odoo-python
|
||||
#: code:addons/l10n_es_edi_sii/models/account_edi_format.py:0
|
||||
#, python-format
|
||||
msgid "This was accepted with errors: "
|
||||
msgstr ""
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model:ir.model.fields,help:l10n_es_edi_sii.field_res_company__l10n_es_edi_test_env
|
||||
#: model:ir.model.fields,help:l10n_es_edi_sii.field_res_config_settings__l10n_es_edi_test_env
|
||||
msgid "Use the test environment"
|
||||
#: model:ir.model.fields,help:l10n_es_edi_sii.field_res_company__l10n_es_sii_test_env
|
||||
#: model:ir.model.fields,help:l10n_es_edi_sii.field_res_config_settings__l10n_es_sii_test_env
|
||||
msgid "Use the test environment for SII"
|
||||
msgstr ""
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#. odoo-python
|
||||
#: code:addons/l10n_es_edi_sii/models/account_edi_format.py:0
|
||||
#, python-format
|
||||
msgid "VAT number is missing on company %s"
|
||||
msgstr ""
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#: model_terms:ir.ui.view,arch_db:l10n_es_edi_sii.l10n_es_edi_certificate_form
|
||||
msgid "Validity"
|
||||
msgstr ""
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#. odoo-python
|
||||
#: code:addons/l10n_es_edi_sii/models/account_edi_format.py:0
|
||||
#, python-format
|
||||
msgid ""
|
||||
"We saw that this invoice was sent correctly before, but we did not treat the"
|
||||
" response. Make sure it is not because of a wrong configuration."
|
||||
|
|
@ -531,13 +301,11 @@ msgstr ""
|
|||
#. module: l10n_es_edi_sii
|
||||
#. odoo-python
|
||||
#: code:addons/l10n_es_edi_sii/models/account_edi_format.py:0
|
||||
#, python-format
|
||||
msgid "You should put a vendor reference on this vendor bill. "
|
||||
msgstr ""
|
||||
|
||||
#. module: l10n_es_edi_sii
|
||||
#. odoo-python
|
||||
#: code:addons/l10n_es_edi_sii/models/account_edi_format.py:0
|
||||
#, python-format
|
||||
msgid "[%s] %s"
|
||||
msgid "[%(error_code)s] %(error_message)s"
|
||||
msgstr ""
|
||||
|
|
|
|||
|
|
@ -1,9 +1,8 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
from . import account_edi_format
|
||||
from . import account_move_send
|
||||
from . import account_move
|
||||
from . import account_tax
|
||||
from . import l10n_es_edi_certificate
|
||||
from . import mail_template
|
||||
from . import certificate
|
||||
from . import res_company
|
||||
from . import res_config_settings
|
||||
|
|
|
|||
|
|
@ -1,58 +1,18 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
from collections import defaultdict
|
||||
from urllib3.util.ssl_ import create_urllib3_context, DEFAULT_CIPHERS
|
||||
from urllib3.contrib.pyopenssl import inject_into_urllib3
|
||||
from OpenSSL.crypto import load_certificate, load_privatekey, FILETYPE_PEM
|
||||
|
||||
from odoo import fields, models, _
|
||||
from odoo.tools import html_escape, zeep
|
||||
|
||||
import math
|
||||
import json
|
||||
import math
|
||||
from collections import defaultdict
|
||||
|
||||
import requests
|
||||
|
||||
from odoo import _, fields, models
|
||||
from odoo.tools import html_escape, zeep
|
||||
from odoo.tools.float_utils import float_round
|
||||
|
||||
from odoo.addons.certificate.tools import CertificateAdapter
|
||||
|
||||
# Custom patches to perform the WSDL requests.
|
||||
EUSKADI_CIPHERS = f"{DEFAULT_CIPHERS}:!DH"
|
||||
|
||||
|
||||
class PatchedHTTPAdapter(requests.adapters.HTTPAdapter):
|
||||
""" An adapter to block DH ciphers which may not work for the tax agencies called"""
|
||||
|
||||
def init_poolmanager(self, *args, **kwargs):
|
||||
# OVERRIDE
|
||||
inject_into_urllib3()
|
||||
kwargs['ssl_context'] = create_urllib3_context(ciphers=EUSKADI_CIPHERS)
|
||||
return super().init_poolmanager(*args, **kwargs)
|
||||
|
||||
def cert_verify(self, conn, url, verify, cert):
|
||||
# OVERRIDE
|
||||
# The last parameter is only used by the super method to check if the file exists.
|
||||
# In our case, cert is an odoo record 'l10n_es_edi.certificate' so not a path to a file.
|
||||
# By putting 'None' as last parameter, we ensure the check about TLS configuration is
|
||||
# still made without checking temporary files exist.
|
||||
super().cert_verify(conn, url, verify, None)
|
||||
conn.cert_file = cert
|
||||
conn.key_file = None
|
||||
|
||||
def get_connection(self, url, proxies=None):
|
||||
# OVERRIDE
|
||||
# Patch the OpenSSLContext to decode the certificate in-memory.
|
||||
conn = super().get_connection(url, proxies=proxies)
|
||||
context = conn.conn_kw['ssl_context']
|
||||
|
||||
def patched_load_cert_chain(l10n_es_odoo_certificate, keyfile=None, password=None):
|
||||
cert_file, key_file, _certificate = l10n_es_odoo_certificate.sudo()._decode_certificate()
|
||||
cert_obj = load_certificate(FILETYPE_PEM, cert_file)
|
||||
pkey_obj = load_privatekey(FILETYPE_PEM, key_file)
|
||||
|
||||
context._ctx.use_certificate(cert_obj)
|
||||
context._ctx.use_privatekey(pkey_obj)
|
||||
|
||||
context.load_cert_chain = patched_load_cert_chain
|
||||
|
||||
return conn
|
||||
# Avoid failure on servers where the DH key is too small
|
||||
EUSKADI_CIPHERS = "DEFAULT:!DH"
|
||||
|
||||
|
||||
class AccountEdiFormat(models.Model):
|
||||
|
|
@ -64,8 +24,8 @@ class AccountEdiFormat(models.Model):
|
|||
|
||||
def _l10n_es_edi_get_invoices_tax_details_info(self, invoice, filter_invl_to_apply=None):
|
||||
|
||||
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']
|
||||
return {
|
||||
'applied_tax_amount': tax.amount,
|
||||
'l10n_es_type': tax.l10n_es_type,
|
||||
|
|
@ -73,12 +33,16 @@ class AccountEdiFormat(models.Model):
|
|||
'l10n_es_bien_inversion': tax.l10n_es_bien_inversion,
|
||||
}
|
||||
|
||||
def filter_to_apply(base_line, tax_values):
|
||||
def filter_to_apply(base_line, tax_data):
|
||||
# For intra-community, we do not take into account the negative repartition line
|
||||
return tax_values['tax_repartition_line'].factor_percent > 0.0
|
||||
return (
|
||||
not tax_data['is_reverse_charge']
|
||||
and tax_data['tax'].amount != -100.0
|
||||
and tax_data['tax'].l10n_es_type != 'ignore'
|
||||
)
|
||||
|
||||
def full_filter_invl_to_apply(invoice_line):
|
||||
if 'ignore' in invoice_line.tax_ids.flatten_taxes_hierarchy().mapped('l10n_es_type'):
|
||||
if all(t == 'ignore' for t in invoice_line.tax_ids.flatten_taxes_hierarchy().mapped('l10n_es_type')):
|
||||
return False
|
||||
return filter_invl_to_apply(invoice_line) if filter_invl_to_apply else True
|
||||
|
||||
|
|
@ -94,31 +58,38 @@ class AccountEdiFormat(models.Model):
|
|||
# Detect for which is the main tax for 'recargo'. Since only a single combination tax + recargo is allowed
|
||||
# on the same invoice, this can be deduced globally.
|
||||
|
||||
recargo_tax_details = {} # Mapping between main tax and recargo tax details
|
||||
invoice_lines = invoice.invoice_line_ids.filtered(lambda x: x.display_type not in ('line_note', 'line_section'))
|
||||
if filter_invl_to_apply:
|
||||
invoice_lines = invoice_lines.filtered(filter_invl_to_apply)
|
||||
for line in invoice_lines:
|
||||
# Mapping between main tax and recargo tax details
|
||||
# structure: {("l10n_es_type" of the main tax, amount of the main tax): {'tax_amount': float, 'applied_tax_amount': float}}
|
||||
# dict of keys: tuple ("l10n_es_type" of the main tax, amount of the main tax)
|
||||
# values: dict of float
|
||||
recargo_tax_details = defaultdict(lambda: defaultdict(float))
|
||||
for base_line in tax_details['base_lines']:
|
||||
line = base_line['record']
|
||||
taxes = line.tax_ids.flatten_taxes_hierarchy()
|
||||
recargo_tax = [t for t in taxes if t.l10n_es_type == 'recargo']
|
||||
recargo_tax = taxes.filtered(lambda t: t.l10n_es_type == 'recargo')[:1]
|
||||
if recargo_tax and taxes:
|
||||
recargo_main_tax = taxes.filtered(lambda x: x.l10n_es_type in ('sujeto', 'sujeto_isp'))[:1]
|
||||
if not recargo_tax_details.get(recargo_main_tax):
|
||||
recargo_tax_details[recargo_main_tax] = [
|
||||
x for x in tax_details['tax_details'].values()
|
||||
if x['group_tax_details'][0]['tax_repartition_line'].tax_id == recargo_tax[0]
|
||||
][0]
|
||||
aggregated_values = tax_details['tax_details_per_record'][line]
|
||||
recargo_values = next(iter(
|
||||
values
|
||||
for values in aggregated_values['tax_details'].values()
|
||||
if (
|
||||
values['grouping_key']
|
||||
and values['grouping_key']['l10n_es_type'] == recargo_tax.l10n_es_type
|
||||
and values['grouping_key']['applied_tax_amount'] == recargo_tax.amount
|
||||
)
|
||||
))
|
||||
recargo_tax_details[recargo_main_tax.l10n_es_type, recargo_main_tax.amount]['tax_amount'] += recargo_values['tax_amount']
|
||||
recargo_tax_details[recargo_main_tax.l10n_es_type, recargo_main_tax.amount]['applied_tax_amount'] = recargo_values['applied_tax_amount']
|
||||
|
||||
tax_amount_deductible = 0.0
|
||||
tax_amount_retention = 0.0
|
||||
base_amount_not_subject = 0.0
|
||||
base_amount_not_subject_loc = 0.0
|
||||
has_not_subject = False
|
||||
has_not_subject_loc = False
|
||||
tax_subject_info_list = []
|
||||
tax_subject_isp_info_list = []
|
||||
for tax_values in tax_details['tax_details'].values():
|
||||
|
||||
recargo = recargo_tax_details.get((tax_values['l10n_es_type'], tax_values['applied_tax_amount']))
|
||||
if invoice.is_sale_document():
|
||||
# Customer invoices
|
||||
|
||||
|
|
@ -128,13 +99,12 @@ class AccountEdiFormat(models.Model):
|
|||
base_amount = sign * tax_values['base_amount']
|
||||
tax_info = {
|
||||
'TipoImpositivo': tax_values['applied_tax_amount'],
|
||||
'BaseImponible': round(base_amount, 2),
|
||||
'CuotaRepercutida': round(math.copysign(tax_values['tax_amount'], base_amount), 2),
|
||||
'BaseImponible': float_round(base_amount, 2),
|
||||
'CuotaRepercutida': float_round(math.copysign(tax_values['tax_amount'], base_amount), 2),
|
||||
}
|
||||
|
||||
recargo = recargo_tax_details.get(tax_values['group_tax_details'][0]['tax_repartition_line'].tax_id)
|
||||
if recargo:
|
||||
tax_info['CuotaRecargoEquivalencia'] = round(sign * recargo['tax_amount'], 2)
|
||||
tax_info['CuotaRecargoEquivalencia'] = float_round(sign * recargo['tax_amount'], 2)
|
||||
tax_info['TipoRecargoEquivalencia'] = recargo['applied_tax_amount']
|
||||
|
||||
if tax_values['l10n_es_type'] == 'sujeto':
|
||||
|
|
@ -145,31 +115,27 @@ class AccountEdiFormat(models.Model):
|
|||
elif tax_values['l10n_es_type'] == 'exento':
|
||||
tax_details_info['Sujeta'].setdefault('Exenta', {'DetalleExenta': []})
|
||||
tax_details_info['Sujeta']['Exenta']['DetalleExenta'].append({
|
||||
'BaseImponible': round(sign * tax_values['base_amount'], 2),
|
||||
'BaseImponible': float_round(sign * tax_values['base_amount'], 2),
|
||||
'CausaExencion': tax_values['l10n_es_exempt_reason'],
|
||||
})
|
||||
elif tax_values['l10n_es_type'] == 'retencion':
|
||||
tax_amount_retention += tax_values['tax_amount']
|
||||
elif tax_values['l10n_es_type'] == 'no_sujeto':
|
||||
has_not_subject = True
|
||||
base_amount_not_subject += tax_values['base_amount']
|
||||
elif tax_values['l10n_es_type'] == 'no_sujeto_loc':
|
||||
has_not_subject_loc = True
|
||||
base_amount_not_subject_loc += tax_values['base_amount']
|
||||
elif tax_values['l10n_es_type'] == 'ignore':
|
||||
continue
|
||||
|
||||
else:
|
||||
# Vendor bills
|
||||
if tax_values['l10n_es_type'] in ('sujeto', 'sujeto_isp', 'no_sujeto', 'no_sujeto_loc'):
|
||||
if tax_values['l10n_es_type'] in ('sujeto', 'sujeto_isp', 'no_sujeto', 'no_sujeto_loc', 'dua'):
|
||||
tax_amount_deductible += tax_values['tax_amount']
|
||||
elif tax_values['l10n_es_type'] == 'retencion':
|
||||
tax_amount_retention += tax_values['tax_amount']
|
||||
elif tax_values['l10n_es_type'] == 'no_sujeto':
|
||||
has_not_subject = True
|
||||
base_amount_not_subject += tax_values['base_amount']
|
||||
elif tax_values['l10n_es_type'] == 'no_sujeto_loc':
|
||||
has_not_subject_loc = True
|
||||
base_amount_not_subject_loc += tax_values['base_amount']
|
||||
elif tax_values['l10n_es_type'] == 'ignore':
|
||||
continue
|
||||
|
|
@ -178,7 +144,7 @@ class AccountEdiFormat(models.Model):
|
|||
base_amount = sign * tax_values['base_amount']
|
||||
tax_details_info.setdefault('DetalleIVA', [])
|
||||
tax_info = {
|
||||
'BaseImponible': round(base_amount, 2),
|
||||
'BaseImponible': float_round(base_amount, 2),
|
||||
}
|
||||
if tax_values['l10n_es_type'] == 'sujeto_agricultura':
|
||||
tax_info.update({
|
||||
|
|
@ -188,13 +154,12 @@ class AccountEdiFormat(models.Model):
|
|||
elif tax_values['applied_tax_amount'] > 0.0:
|
||||
tax_info.update({
|
||||
'TipoImpositivo': tax_values['applied_tax_amount'],
|
||||
'CuotaSoportada': round(math.copysign(tax_values['tax_amount'], base_amount), 2),
|
||||
'CuotaSoportada': float_round(math.copysign(tax_values['tax_amount'], base_amount), 2),
|
||||
})
|
||||
if tax_values['l10n_es_bien_inversion']:
|
||||
tax_info['BienInversion'] = 'S'
|
||||
recargo = recargo_tax_details.get(tax_values['group_tax_details'][0]['tax_repartition_line'].tax_id)
|
||||
if recargo:
|
||||
tax_info['CuotaRecargoEquivalencia'] = round(sign * recargo['tax_amount'], 2)
|
||||
tax_info['CuotaRecargoEquivalencia'] = float_round(sign * recargo['tax_amount'], 2)
|
||||
tax_info['TipoRecargoEquivalencia'] = recargo['applied_tax_amount']
|
||||
tax_details_info['DetalleIVA'].append(tax_info)
|
||||
|
||||
|
|
@ -214,10 +179,15 @@ class AccountEdiFormat(models.Model):
|
|||
tax_details_info['Sujeta']['NoExenta']['DesgloseIVA'].setdefault('DetalleIVA', [])
|
||||
tax_details_info['Sujeta']['NoExenta']['DesgloseIVA']['DetalleIVA'] += tax_subject_isp_info_list
|
||||
|
||||
if has_not_subject and invoice.is_sale_document():
|
||||
tax_details_info['NoSujeta']['ImportePorArticulos7_14_Otros'] = round(sign * base_amount_not_subject, 2)
|
||||
if has_not_subject_loc and invoice.is_sale_document():
|
||||
tax_details_info['NoSujeta']['ImporteTAIReglasLocalizacion'] = round(sign * base_amount_not_subject_loc, 2)
|
||||
if not invoice.company_id.currency_id.is_zero(base_amount_not_subject) and invoice.is_sale_document():
|
||||
tax_details_info['NoSujeta']['ImportePorArticulos7_14_Otros'] = float_round(sign * base_amount_not_subject, 2)
|
||||
if not invoice.company_id.currency_id.is_zero(base_amount_not_subject_loc) and invoice.is_sale_document():
|
||||
tax_details_info['NoSujeta']['ImporteTAIReglasLocalizacion'] = float_round(sign * base_amount_not_subject_loc, 2)
|
||||
if not tax_details_info and invoice.is_sale_document():
|
||||
if any(t['l10n_es_type'] == 'no_sujeto' for t in tax_details['tax_details'].values()):
|
||||
tax_details_info['NoSujeta']['ImportePorArticulos7_14_Otros'] = 0
|
||||
if any(t['l10n_es_type'] == 'no_sujeto_loc' for t in tax_details['tax_details'].values()):
|
||||
tax_details_info['NoSujeta']['ImporteTAIReglasLocalizacion'] = 0
|
||||
|
||||
return {
|
||||
'tax_details_info': tax_details_info,
|
||||
|
|
@ -230,39 +200,15 @@ class AccountEdiFormat(models.Model):
|
|||
}
|
||||
|
||||
def _l10n_es_edi_get_partner_info(self, partner):
|
||||
eu_country_codes = set(self.env.ref('base.europe').country_ids.mapped('code'))
|
||||
|
||||
partner_info = {}
|
||||
IDOtro_ID = partner.vat or 'NO_DISPONIBLE'
|
||||
|
||||
if (not partner.country_id or partner.country_id.code == 'ES') and partner.vat:
|
||||
# ES partner with VAT.
|
||||
partner_info['NIF'] = partner.vat[2:] if partner.vat.startswith('ES') else partner.vat
|
||||
if self.env.context.get('error_1117'):
|
||||
partner_info['IDOtro'] = {'IDType': '07', 'ID': IDOtro_ID}
|
||||
|
||||
elif partner.country_id.code in eu_country_codes and partner.vat:
|
||||
# European partner.
|
||||
partner_info['IDOtro'] = {'IDType': '02', 'ID': IDOtro_ID}
|
||||
else:
|
||||
partner_info['IDOtro'] = {'ID': IDOtro_ID}
|
||||
if partner.vat:
|
||||
partner_info['IDOtro']['IDType'] = '04'
|
||||
else:
|
||||
partner_info['IDOtro']['IDType'] = '06'
|
||||
if partner.country_id:
|
||||
partner_info['IDOtro']['CodigoPais'] = partner.country_id.code
|
||||
return partner_info
|
||||
return partner._l10n_es_edi_get_partner_info()
|
||||
|
||||
def _l10n_es_edi_get_invoices_info(self, invoices):
|
||||
eu_country_codes = set(self.env.ref('base.europe').country_ids.mapped('code'))
|
||||
|
||||
simplified_partner = self.env.ref("l10n_es_edi_sii.partner_simplified")
|
||||
|
||||
info_list = []
|
||||
for invoice in invoices:
|
||||
com_partner = invoice.commercial_partner_id
|
||||
is_simplified = invoice.partner_id == simplified_partner
|
||||
is_simplified = invoice.l10n_es_is_simplified
|
||||
|
||||
info = {
|
||||
'PeriodoLiquidacion': {
|
||||
|
|
@ -285,6 +231,8 @@ class AccountEdiFormat(models.Model):
|
|||
|
||||
# === Invoice ===
|
||||
|
||||
if invoice.delivery_date and invoice.delivery_date != invoice.invoice_date:
|
||||
invoice_node['FechaOperacion'] = invoice.delivery_date.strftime('%d-%m-%Y')
|
||||
invoice_node['DescripcionOperacion'] = invoice.invoice_origin[:500] if invoice.invoice_origin else 'manual'
|
||||
reagyp = invoice.invoice_line_ids.tax_ids.filtered(lambda t: t.l10n_es_type == 'sujeto_agricultura')
|
||||
if invoice.is_sale_document():
|
||||
|
|
@ -296,17 +244,10 @@ class AccountEdiFormat(models.Model):
|
|||
**partner_info,
|
||||
'NombreRazon': com_partner.name[:120],
|
||||
}
|
||||
export_exempts = invoice.invoice_line_ids.tax_ids.filtered(lambda t: t.l10n_es_exempt_reason == 'E2')
|
||||
# If an invoice line contains an OSS tax, the invoice is considered as an OSS operation
|
||||
is_oss = self._has_oss_taxes(invoice)
|
||||
|
||||
if is_oss:
|
||||
invoice_node['ClaveRegimenEspecialOTrascendencia'] = '17'
|
||||
elif export_exempts:
|
||||
invoice_node['ClaveRegimenEspecialOTrascendencia'] = '02'
|
||||
else:
|
||||
invoice_node['ClaveRegimenEspecialOTrascendencia'] = '01'
|
||||
invoice_node['ClaveRegimenEspecialOTrascendencia'] = invoice.invoice_line_ids.tax_ids._l10n_es_get_regime_code()
|
||||
else:
|
||||
if invoice._l10n_es_is_dua():
|
||||
partner_info = self._l10n_es_edi_get_partner_info(invoice.company_id.partner_id)
|
||||
info['IDFactura']['IDEmisorFactura'] = partner_info
|
||||
# In case of cancel
|
||||
info["IDFactura"]["IDEmisorFactura"].update(
|
||||
|
|
@ -324,9 +265,9 @@ class AccountEdiFormat(models.Model):
|
|||
else:
|
||||
invoice_node['FechaRegContable'] = fields.Date.context_today(self).strftime('%d-%m-%Y')
|
||||
|
||||
mod_303_10 = self.env.ref('l10n_es.mod_303_10')
|
||||
mod_303_11 = self.env.ref('l10n_es.mod_303_11')
|
||||
tax_tags = invoice.invoice_line_ids.tax_ids.invoice_repartition_line_ids.tag_ids
|
||||
mod_303_10 = self.env.ref('l10n_es.mod_303_casilla_10_balance')._get_matching_tags()
|
||||
mod_303_11 = self.env.ref('l10n_es.mod_303_casilla_11_balance')._get_matching_tags()
|
||||
tax_tags = invoice.invoice_line_ids.tax_ids.repartition_line_ids.tag_ids
|
||||
intracom = bool(tax_tags & (mod_303_10 + mod_303_11))
|
||||
if intracom:
|
||||
invoice_node['ClaveRegimenEspecialOTrascendencia'] = '09'
|
||||
|
|
@ -343,6 +284,8 @@ class AccountEdiFormat(models.Model):
|
|||
elif invoice.move_type == 'in_invoice':
|
||||
if reagyp:
|
||||
invoice_node['TipoFactura'] = 'F6'
|
||||
elif invoice._l10n_es_is_dua():
|
||||
invoice_node['TipoFactura'] = 'F5'
|
||||
else:
|
||||
invoice_node['TipoFactura'] = 'F1'
|
||||
elif invoice.move_type == 'in_refund':
|
||||
|
|
@ -355,12 +298,11 @@ class AccountEdiFormat(models.Model):
|
|||
|
||||
if invoice.is_sale_document():
|
||||
# Customer invoices
|
||||
|
||||
if (com_partner.country_id.code in ('ES', False) and not (com_partner.vat or '').startswith("ESN")) or is_simplified:
|
||||
if not com_partner._l10n_es_is_foreign() or is_simplified:
|
||||
tax_details_info_vals = self._l10n_es_edi_get_invoices_tax_details_info(invoice)
|
||||
invoice_node['TipoDesglose'] = {'DesgloseFactura': tax_details_info_vals['tax_details_info']}
|
||||
|
||||
invoice_node['ImporteTotal'] = round(sign * (
|
||||
invoice_node['ImporteTotal'] = float_round(sign * (
|
||||
tax_details_info_vals['tax_details']['base_amount']
|
||||
+ tax_details_info_vals['tax_details']['tax_amount']
|
||||
- tax_details_info_vals['tax_amount_retention']
|
||||
|
|
@ -384,7 +326,7 @@ class AccountEdiFormat(models.Model):
|
|||
invoice_node['TipoDesglose'].setdefault('DesgloseTipoOperacion', {})
|
||||
invoice_node['TipoDesglose']['DesgloseTipoOperacion']['Entrega'] = tax_details_info_consu_vals['tax_details_info']
|
||||
|
||||
invoice_node['ImporteTotal'] = round(sign * (
|
||||
invoice_node['ImporteTotal'] = float_round(sign * (
|
||||
tax_details_info_service_vals['tax_details']['base_amount']
|
||||
+ tax_details_info_service_vals['tax_details']['tax_amount']
|
||||
- tax_details_info_service_vals['tax_amount_retention']
|
||||
|
|
@ -411,19 +353,19 @@ class AccountEdiFormat(models.Model):
|
|||
if tax_details_info_other_vals['tax_details_info']:
|
||||
invoice_node['DesgloseFactura']['DesgloseIVA'] = tax_details_info_other_vals['tax_details_info']
|
||||
|
||||
if any(t.l10n_es_type == 'ignore' for t in invoice.invoice_line_ids.tax_ids):
|
||||
invoice_node['ImporteTotal'] = round(sign * (
|
||||
if invoice._l10n_es_is_dua() or any(t.l10n_es_type == 'ignore' for t in invoice.invoice_line_ids.tax_ids):
|
||||
invoice_node['ImporteTotal'] = float_round(sign * (
|
||||
tax_details_info_isp_vals['tax_details']['base_amount']
|
||||
+ tax_details_info_isp_vals['tax_details']['tax_amount']
|
||||
+ tax_details_info_other_vals['tax_details']['base_amount']
|
||||
+ tax_details_info_other_vals['tax_details']['tax_amount']
|
||||
), 2)
|
||||
else: # Intra-community -100 repartition line needs to be taken into account
|
||||
invoice_node['ImporteTotal'] = round(-invoice.amount_total_signed
|
||||
invoice_node['ImporteTotal'] = float_round(-invoice.amount_total_signed
|
||||
- sign * tax_details_info_isp_vals['tax_amount_retention']
|
||||
- sign * tax_details_info_other_vals['tax_amount_retention'], 2)
|
||||
|
||||
invoice_node['CuotaDeducible'] = round(sign * (
|
||||
invoice_node['CuotaDeducible'] = float_round(sign * (
|
||||
tax_details_info_isp_vals['tax_amount_deductible']
|
||||
+ tax_details_info_other_vals['tax_amount_deductible']
|
||||
), 2)
|
||||
|
|
@ -484,8 +426,8 @@ class AccountEdiFormat(models.Model):
|
|||
# === Call the web service ===
|
||||
|
||||
# Get connection data.
|
||||
l10n_es_edi_tax_agency = company.mapped('l10n_es_edi_tax_agency')[0]
|
||||
connection_vals = getattr(self, f'_l10n_es_edi_web_service_{l10n_es_edi_tax_agency}_vals')(invoices)
|
||||
l10n_es_sii_tax_agency = company.mapped('l10n_es_sii_tax_agency')[0]
|
||||
connection_vals = getattr(self, f'_l10n_es_edi_web_service_{l10n_es_sii_tax_agency}_vals')(invoices)
|
||||
|
||||
header = {
|
||||
'IDVersionSii': '1.1',
|
||||
|
|
@ -497,8 +439,8 @@ class AccountEdiFormat(models.Model):
|
|||
}
|
||||
|
||||
session = requests.Session()
|
||||
session.cert = company.l10n_es_edi_certificate_id
|
||||
session.mount('https://', PatchedHTTPAdapter())
|
||||
session.cert = company.l10n_es_sii_certificate_id
|
||||
session.mount('https://', CertificateAdapter(ciphers=EUSKADI_CIPHERS))
|
||||
|
||||
client = zeep.Client(connection_vals['url'], operation_timeout=60, timeout=60, session=session)
|
||||
|
||||
|
|
@ -506,12 +448,12 @@ class AccountEdiFormat(models.Model):
|
|||
service_name = 'SuministroFactEmitidas'
|
||||
else:
|
||||
service_name = 'SuministroFactRecibidas'
|
||||
if company.l10n_es_edi_test_env and not connection_vals.get('test_url'):
|
||||
if company.l10n_es_sii_test_env and not connection_vals.get('test_url'):
|
||||
service_name += 'Pruebas'
|
||||
|
||||
# Establish the connection.
|
||||
serv = client.bind('siiService', service_name)
|
||||
if company.l10n_es_edi_test_env and connection_vals.get('test_url'):
|
||||
if company.l10n_es_sii_test_env and connection_vals.get('test_url'):
|
||||
serv._binding_options['address'] = connection_vals['test_url']
|
||||
|
||||
error_msg = None
|
||||
|
|
@ -568,11 +510,14 @@ class AccountEdiFormat(models.Model):
|
|||
else:
|
||||
# 'ref' can be the same for different partners.
|
||||
candidates = invoices.filtered(lambda x: x.ref[:60] == invoice_number)
|
||||
if len(candidates) >= 1:
|
||||
if len(candidates) > 1:
|
||||
respl_partner_info = respl.IDFactura.IDEmisorFactura
|
||||
inv = None
|
||||
for candidate in candidates:
|
||||
partner_info = self._l10n_es_edi_get_partner_info(candidate.commercial_partner_id)
|
||||
partner = candidate.commercial_partner_id
|
||||
if candidate._l10n_es_is_dua():
|
||||
partner = candidate.company_id.partner_id
|
||||
partner_info = self._l10n_es_edi_get_partner_info(partner)
|
||||
if partner_info.get('NIF') and partner_info['NIF'] == respl_partner_info.NIF:
|
||||
inv = candidate
|
||||
break
|
||||
|
|
@ -614,18 +559,12 @@ class AccountEdiFormat(models.Model):
|
|||
|
||||
else:
|
||||
results[inv] = {
|
||||
'error': _("[%s] %s", respl.CodigoErrorRegistro, respl.DescripcionErrorRegistro),
|
||||
'error': _("[%(error_code)s] %(error_message)s", error_code=respl.CodigoErrorRegistro, error_message=respl.DescripcionErrorRegistro),
|
||||
'blocking_level': 'error',
|
||||
}
|
||||
|
||||
return results
|
||||
|
||||
def _has_oss_taxes(self, invoice):
|
||||
oss_tag = self.env.ref('l10n_eu_oss.tag_oss', raise_if_not_found=False)
|
||||
lines = invoice.invoice_line_ids.filtered(lambda line: line.display_type not in ('line_section', 'line_note'))
|
||||
tags = (lines.tax_ids.invoice_repartition_line_ids | lines.tax_ids.refund_repartition_line_ids).tag_ids
|
||||
return bool(oss_tag and oss_tag in tags)
|
||||
|
||||
# -------------------------------------------------------------------------
|
||||
# EDI OVERRIDDEN METHODS
|
||||
# -------------------------------------------------------------------------
|
||||
|
|
@ -659,8 +598,10 @@ class AccountEdiFormat(models.Model):
|
|||
|
||||
if not move.company_id.vat:
|
||||
res.append(_("VAT number is missing on company %s", move.company_id.display_name))
|
||||
for line in move.invoice_line_ids.filtered(lambda line: line.display_type not in ('line_note', 'line_section')):
|
||||
total_taxes = self.env['account.tax']
|
||||
for line in move.invoice_line_ids.filtered(lambda line: line.display_type not in ('line_section', 'line_subsection', 'line_note')):
|
||||
taxes = line.tax_ids.flatten_taxes_hierarchy()
|
||||
total_taxes |= taxes
|
||||
recargo_count = taxes.mapped('l10n_es_type').count('recargo')
|
||||
retention_count = taxes.mapped('l10n_es_type').count('retencion')
|
||||
sujeto_count = taxes.mapped('l10n_es_type').count('sujeto')
|
||||
|
|
@ -678,6 +619,11 @@ class AccountEdiFormat(models.Model):
|
|||
res.append(_("Line %s should only have one no sujeto (localizations) tax.", line.display_name))
|
||||
if sujeto_count + no_sujeto_loc_count + no_sujeto_count > 1:
|
||||
res.append(_("Line %s should only have one main tax.", line.display_name))
|
||||
if move.is_inbound() and move.commercial_partner_id._l10n_es_is_foreign() and not any(t.tax_scope for t in total_taxes):
|
||||
res.append(
|
||||
_("In case of a foreign customer, you need to configure the tax scope on taxes:\n%s",
|
||||
"\n".join(total_taxes.mapped('name')))
|
||||
)
|
||||
if move.move_type in ('in_invoice', 'in_refund'):
|
||||
if not move.ref:
|
||||
res.append(_("You should put a vendor reference on this vendor bill. "))
|
||||
|
|
@ -692,7 +638,7 @@ class AccountEdiFormat(models.Model):
|
|||
|
||||
def _l10n_es_edi_sii_send(self, invoices, cancel=False):
|
||||
# Ensure a certificate is available.
|
||||
certificate = invoices.company_id.l10n_es_edi_certificate_id
|
||||
certificate = invoices.company_id.l10n_es_sii_certificate_id
|
||||
if not certificate:
|
||||
return {inv: {
|
||||
'error': _("Please configure the certificate for SII."),
|
||||
|
|
@ -700,8 +646,8 @@ class AccountEdiFormat(models.Model):
|
|||
} for inv in invoices}
|
||||
|
||||
# Ensure a tax agency is available.
|
||||
l10n_es_edi_tax_agency = invoices.company_id.mapped('l10n_es_edi_tax_agency')[0]
|
||||
if not l10n_es_edi_tax_agency:
|
||||
l10n_es_sii_tax_agency = invoices.company_id.mapped('l10n_es_sii_tax_agency')[0]
|
||||
if not l10n_es_sii_tax_agency:
|
||||
return {inv: {
|
||||
'error': _("Please specify a tax agency on your company for SII."),
|
||||
'blocking_level': 'error',
|
||||
|
|
|
|||
|
|
@ -22,12 +22,22 @@ class AccountMove(models.Model):
|
|||
# COMPUTE METHODS
|
||||
# -------------------------------------------------------------------------
|
||||
|
||||
@api.depends('move_type', 'company_id')
|
||||
@api.depends('move_type', 'company_id', 'invoice_line_ids.tax_ids')
|
||||
def _compute_l10n_es_edi_is_required(self):
|
||||
for move in self:
|
||||
has_tax = True
|
||||
# Check it is not an importation invoice (which will be report through the DUA invoice)
|
||||
if move.is_purchase_document():
|
||||
taxes = move.invoice_line_ids.tax_ids
|
||||
has_tax = any(t.l10n_es_type and t.l10n_es_type != 'ignore' for t in taxes)
|
||||
move.l10n_es_edi_is_required = move.is_invoice() \
|
||||
and move.country_code == 'ES' \
|
||||
and move.company_id.l10n_es_edi_tax_agency
|
||||
and move.company_id.l10n_es_sii_tax_agency \
|
||||
and has_tax
|
||||
|
||||
def _l10n_es_is_dua(self):
|
||||
self.ensure_one()
|
||||
return any(t.l10n_es_type == 'dua' for t in self.invoice_line_ids.tax_ids.flatten_taxes_hierarchy())
|
||||
|
||||
def _check_edi_documents_for_reset_to_draft(self):
|
||||
docs = self.edi_document_ids.filtered(lambda d: d.edi_format_id._needs_web_services())
|
||||
|
|
|
|||
|
|
@ -0,0 +1,10 @@
|
|||
from odoo import models
|
||||
|
||||
|
||||
class AccountMoveSend(models.AbstractModel):
|
||||
_inherit = 'account.move.send'
|
||||
|
||||
def _get_mail_attachment_from_doc(self, doc):
|
||||
if doc.name == 'jsondump.json' and doc.edi_format_id.code == 'es_sii':
|
||||
return self.env['ir.attachment']
|
||||
return super()._get_mail_attachment_from_doc(doc)
|
||||
|
|
@ -1,55 +0,0 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
from odoo import fields, models
|
||||
|
||||
|
||||
class SIIAccountTaxMixin(models.AbstractModel):
|
||||
_name = 'l10n_es.sii.account.tax.mixin'
|
||||
_description = 'SII Fields'
|
||||
|
||||
l10n_es_exempt_reason = fields.Selection(
|
||||
selection=[
|
||||
('E1', 'Art. 20'),
|
||||
('E2', 'Art. 21'),
|
||||
('E3', 'Art. 22'),
|
||||
('E4', 'Art. 23 y 24'),
|
||||
('E5', 'Art. 25'),
|
||||
('E6', 'Otros'),
|
||||
],
|
||||
string="Exempt Reason (Spain)",
|
||||
)
|
||||
l10n_es_type = fields.Selection(
|
||||
selection=[
|
||||
('exento', 'Exento'),
|
||||
('sujeto', 'Sujeto'),
|
||||
('sujeto_agricultura', 'Sujeto Agricultura'),
|
||||
('sujeto_isp', 'Sujeto ISP'),
|
||||
('no_sujeto', 'No Sujeto'),
|
||||
('no_sujeto_loc', 'No Sujeto por reglas de Localization'),
|
||||
('no_deducible', 'No Deducible'),
|
||||
('retencion', 'Retencion'),
|
||||
('recargo', 'Recargo de Equivalencia'),
|
||||
('ignore', 'Ignore even the base amount'),
|
||||
],
|
||||
string="Tax Type (Spain)", default='sujeto'
|
||||
)
|
||||
l10n_es_bien_inversion = fields.Boolean('Bien de Inversion', default=False)
|
||||
|
||||
|
||||
class AccountTax(models.Model):
|
||||
_inherit = ['account.tax', 'l10n_es.sii.account.tax.mixin']
|
||||
_name = 'account.tax'
|
||||
|
||||
|
||||
class AccountTaxTemplate(models.Model):
|
||||
_inherit = ['account.tax.template', 'l10n_es.sii.account.tax.mixin']
|
||||
_name = 'account.tax.template'
|
||||
|
||||
def _get_tax_vals(self, company, tax_template_to_tax):
|
||||
# OVERRIDE
|
||||
# Copy values from 'account.tax.template' to vals will be used to create a new 'account.tax'.
|
||||
vals = super()._get_tax_vals(company, tax_template_to_tax)
|
||||
vals['l10n_es_exempt_reason'] = self.l10n_es_exempt_reason
|
||||
vals['l10n_es_type'] = self.l10n_es_type
|
||||
vals['l10n_es_bien_inversion'] = self.l10n_es_bien_inversion
|
||||
return vals
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
from odoo import fields, models
|
||||
|
||||
|
||||
class CertificateCertificate(models.Model):
|
||||
_inherit = 'certificate.certificate'
|
||||
|
||||
scope = fields.Selection(
|
||||
selection_add=[
|
||||
('sii', 'SII')
|
||||
],
|
||||
)
|
||||
|
|
@ -1,87 +0,0 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from base64 import b64decode
|
||||
from pytz import timezone
|
||||
from datetime import datetime
|
||||
from cryptography.hazmat.primitives.serialization import Encoding, NoEncryption, PrivateFormat
|
||||
|
||||
|
||||
from odoo import _, api, fields, models, tools
|
||||
from odoo.exceptions import ValidationError
|
||||
from odoo.addons.account.tools.certificate import load_key_and_certificates
|
||||
|
||||
|
||||
class Certificate(models.Model):
|
||||
_name = 'l10n_es_edi.certificate'
|
||||
_description = 'Personal Digital Certificate'
|
||||
_order = 'date_start desc, id desc'
|
||||
_rec_name = 'date_start'
|
||||
|
||||
content = fields.Binary(string="File", required=True, help="PFX Certificate")
|
||||
password = fields.Char(help="Passphrase for the PFX certificate", groups="base.group_system")
|
||||
date_start = fields.Datetime(readonly=True, help="The date on which the certificate starts to be valid")
|
||||
date_end = fields.Datetime(readonly=True, help="The date on which the certificate expires")
|
||||
company_id = fields.Many2one(comodel_name='res.company', required=True, default=lambda self: self.env.company)
|
||||
|
||||
# -------------------------------------------------------------------------
|
||||
# HELPERS
|
||||
# -------------------------------------------------------------------------
|
||||
|
||||
@api.model
|
||||
def _get_es_current_datetime(self):
|
||||
"""Get the current datetime with the Peruvian timezone. """
|
||||
return datetime.now(timezone('Europe/Madrid'))
|
||||
|
||||
@tools.ormcache('self.content', 'self.password')
|
||||
def _decode_certificate(self):
|
||||
"""Return the content (DER encoded) and the certificate decrypted based in the point 3.1 from the RS 097-2012
|
||||
http://www.vauxoo.com/r/manualdeautorizacion#page=21
|
||||
"""
|
||||
self.ensure_one()
|
||||
|
||||
if not self.password:
|
||||
return None, None, None
|
||||
|
||||
private_key, certificate = load_key_and_certificates(
|
||||
b64decode(self.content),
|
||||
self.password.encode(),
|
||||
)
|
||||
|
||||
pem_certificate = certificate.public_bytes(Encoding.PEM)
|
||||
pem_private_key = private_key.private_bytes(
|
||||
Encoding.PEM,
|
||||
format=PrivateFormat.TraditionalOpenSSL,
|
||||
encryption_algorithm=NoEncryption(),
|
||||
)
|
||||
return pem_certificate, pem_private_key, certificate
|
||||
|
||||
# -------------------------------------------------------------------------
|
||||
# LOW-LEVEL METHODS
|
||||
# -------------------------------------------------------------------------
|
||||
|
||||
@api.model_create_multi
|
||||
def create(self, vals_list):
|
||||
certificates = super().create(vals_list)
|
||||
|
||||
spain_tz = timezone('Europe/Madrid')
|
||||
spain_dt = self._get_es_current_datetime()
|
||||
for certificate in certificates:
|
||||
try:
|
||||
_pem_certificate, _pem_private_key, certif = certificate._decode_certificate()
|
||||
cert_date_start = spain_tz.localize(certif.not_valid_before)
|
||||
cert_date_end = spain_tz.localize(certif.not_valid_after)
|
||||
except Exception:
|
||||
raise ValidationError(_(
|
||||
"There has been a problem with the certificate, some usual problems can be:\n"
|
||||
"- The password given or the certificate are not valid.\n"
|
||||
"- The certificate content is invalid."
|
||||
))
|
||||
# Assign extracted values from the certificate
|
||||
certificate.write({
|
||||
'date_start': fields.Datetime.to_string(cert_date_start),
|
||||
'date_end': fields.Datetime.to_string(cert_date_end),
|
||||
})
|
||||
if spain_dt > cert_date_end:
|
||||
raise ValidationError(_("The certificate is expired since %s", certificate.date_end))
|
||||
return certificates
|
||||
|
|
@ -1,12 +0,0 @@
|
|||
from odoo import models
|
||||
|
||||
|
||||
class MailTemplate(models.Model):
|
||||
_inherit = "mail.template"
|
||||
|
||||
def _get_edi_attachments(self, document):
|
||||
# When an invoice is signed, an electronic document is created (i.e. jsondump.json)
|
||||
# Prevent this document to be added in "SEND & PRINT" wizard
|
||||
if document.name == 'jsondump.json' and document.edi_format_id.code == 'es_sii':
|
||||
return {}
|
||||
return super()._get_edi_attachments(document)
|
||||
|
|
@ -6,18 +6,19 @@ from odoo import api, fields, models
|
|||
class ResCompany(models.Model):
|
||||
_inherit = 'res.company'
|
||||
|
||||
l10n_es_edi_certificate_id = fields.Many2one(
|
||||
string="Certificate (ES)",
|
||||
l10n_es_sii_certificate_id = fields.Many2one(
|
||||
string="Certificate (SII)",
|
||||
store=True,
|
||||
readonly=False,
|
||||
comodel_name='l10n_es_edi.certificate',
|
||||
compute="_compute_l10n_es_edi_certificate",
|
||||
comodel_name='certificate.certificate',
|
||||
compute="_compute_l10n_es_sii_certificate",
|
||||
)
|
||||
l10n_es_edi_certificate_ids = fields.One2many(
|
||||
comodel_name='l10n_es_edi.certificate',
|
||||
l10n_es_sii_certificate_ids = fields.One2many(
|
||||
comodel_name='certificate.certificate',
|
||||
inverse_name='company_id',
|
||||
domain=[('scope', '=', 'sii')],
|
||||
)
|
||||
l10n_es_edi_tax_agency = fields.Selection(
|
||||
l10n_es_sii_tax_agency = fields.Selection(
|
||||
string="Tax Agency for SII",
|
||||
selection=[
|
||||
('aeat', "Agencia Tributaria española"),
|
||||
|
|
@ -26,20 +27,20 @@ class ResCompany(models.Model):
|
|||
],
|
||||
default=False,
|
||||
)
|
||||
l10n_es_edi_test_env = fields.Boolean(
|
||||
string="Test Mode",
|
||||
help="Use the test environment",
|
||||
l10n_es_sii_test_env = fields.Boolean(
|
||||
string="SII Test Mode",
|
||||
help="Use the test environment for SII",
|
||||
default=True,
|
||||
)
|
||||
|
||||
@api.depends('country_id', 'l10n_es_edi_certificate_ids')
|
||||
def _compute_l10n_es_edi_certificate(self):
|
||||
@api.depends('country_id', 'l10n_es_sii_certificate_ids')
|
||||
def _compute_l10n_es_sii_certificate(self):
|
||||
for company in self:
|
||||
if company.country_code == 'ES':
|
||||
company.l10n_es_edi_certificate_id = self.env['l10n_es_edi.certificate'].search(
|
||||
[('company_id', '=', company.id)],
|
||||
company.l10n_es_sii_certificate_id = self.env['certificate.certificate'].search(
|
||||
[('company_id', '=', company.id), ('is_valid', '=', True), ('scope', '=', 'sii')],
|
||||
order='date_end desc',
|
||||
limit=1,
|
||||
)
|
||||
else:
|
||||
company.l10n_es_edi_certificate_id = False
|
||||
company.l10n_es_sii_certificate_id = False
|
||||
|
|
|
|||
|
|
@ -6,6 +6,6 @@ from odoo import fields, models
|
|||
class ResConfigSettings(models.TransientModel):
|
||||
_inherit = 'res.config.settings'
|
||||
|
||||
l10n_es_edi_certificate_ids = fields.One2many(related='company_id.l10n_es_edi_certificate_ids', readonly=False)
|
||||
l10n_es_edi_tax_agency = fields.Selection(related='company_id.l10n_es_edi_tax_agency', readonly=False)
|
||||
l10n_es_edi_test_env = fields.Boolean(related='company_id.l10n_es_edi_test_env', readonly=False)
|
||||
l10n_es_sii_certificate_ids = fields.One2many(related='company_id.l10n_es_sii_certificate_ids', readonly=False)
|
||||
l10n_es_sii_tax_agency = fields.Selection(related='company_id.l10n_es_sii_tax_agency', readonly=False)
|
||||
l10n_es_sii_test_env = fields.Boolean(related='company_id.l10n_es_sii_test_env', readonly=False)
|
||||
|
|
|
|||
|
|
@ -1,2 +0,0 @@
|
|||
id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink
|
||||
access_l10n_es_edi_certificate,access_l10n_es_edi_certificate,model_l10n_es_edi_certificate,base.group_system,1,1,1,1
|
||||
|
|
|
@ -1,9 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo noupdate="1">
|
||||
<!-- Allow access to certificates of current company/companies -->
|
||||
<record id="l10n_ec_digital_certificate" model="ir.rule">
|
||||
<field name="name">Spanish Digital Certificate</field>
|
||||
<field name="model_id" ref="l10n_es_edi_sii.model_l10n_es_edi_certificate"/>
|
||||
<field name="domain_force">[('company_id', 'in', company_ids)]</field>
|
||||
</record>
|
||||
</odoo>
|
||||
|
|
@ -14,8 +14,10 @@ def mocked_l10n_es_edi_call_web_service_sign(edi_format, invoices, info_list):
|
|||
class TestEsEdiCommon(AccountEdiTestCommon):
|
||||
|
||||
@classmethod
|
||||
def setUpClass(cls, chart_template_ref='l10n_es.account_chart_template_full', edi_format_ref='l10n_es_edi_sii.edi_es_sii'):
|
||||
super().setUpClass(chart_template_ref=chart_template_ref, edi_format_ref=edi_format_ref)
|
||||
@AccountEdiTestCommon.setup_edi_format('l10n_es_edi_sii.edi_es_sii')
|
||||
@AccountEdiTestCommon.setup_country('es')
|
||||
def setUpClass(cls):
|
||||
super().setUpClass()
|
||||
|
||||
cls.frozen_today = datetime(year=2019, month=1, day=1, hour=0, minute=0, second=0, tzinfo=timezone('utc'))
|
||||
|
||||
|
|
@ -24,19 +26,21 @@ class TestEsEdiCommon(AccountEdiTestCommon):
|
|||
|
||||
# ==== Config ====
|
||||
|
||||
cls.certificate = cls.env['l10n_es_edi.certificate'].create({
|
||||
'content': base64.encodebytes(
|
||||
cls.certificate = cls.env['certificate.certificate'].create({
|
||||
'name': 'Test ES certificate',
|
||||
'content': base64.b64encode(
|
||||
misc.file_open("l10n_es_edi_sii/demo/certificates/aeat_1234.p12", 'rb').read()),
|
||||
'password': '1234',
|
||||
'pkcs12_password': '1234',
|
||||
'scope': 'sii',
|
||||
'company_id': cls.company_data['company'].id,
|
||||
})
|
||||
|
||||
cls.company_data['company'].write({
|
||||
'country_id': cls.env.ref('base.es').id,
|
||||
'state_id': cls.env.ref('base.state_es_z').id,
|
||||
'l10n_es_edi_certificate_id': cls.certificate.id,
|
||||
'l10n_es_sii_certificate_id': cls.certificate.id,
|
||||
'vat': 'ES59962470K',
|
||||
'l10n_es_edi_test_env': True,
|
||||
'l10n_es_edi_tax_agency': 'bizkaia',
|
||||
'l10n_es_sii_test_env': True,
|
||||
'l10n_es_sii_tax_agency': 'bizkaia',
|
||||
})
|
||||
|
||||
# To be sure it is put by default on purchase journals as well (tbai module)
|
||||
|
|
@ -65,7 +69,7 @@ class TestEsEdiCommon(AccountEdiTestCommon):
|
|||
:param trailing_xml_id: The trailing tax's xml id.
|
||||
:return: An account.tax record
|
||||
"""
|
||||
return cls.env.ref(f'l10n_es.{cls.env.company.id}_account_tax_template_{trailing_xml_id}')
|
||||
return cls.env.ref(f'account.{cls.env.company.id}_account_tax_template_{trailing_xml_id}')
|
||||
|
||||
@classmethod
|
||||
def create_invoice(cls, **kwargs):
|
||||
|
|
|
|||
|
|
@ -10,8 +10,8 @@ from .common import TestEsEdiCommon
|
|||
class TestEdiWebServices(TestEsEdiCommon):
|
||||
|
||||
@classmethod
|
||||
def setUpClass(cls, chart_template_ref='l10n_es.account_chart_template_full', edi_format_ref='l10n_es_edi_sii.edi_es_sii'):
|
||||
super().setUpClass(chart_template_ref=chart_template_ref, edi_format_ref=edi_format_ref)
|
||||
def setUpClass(cls):
|
||||
super().setUpClass()
|
||||
|
||||
# Invoice name are tracked by the web-services so this constant tries to get a new unique invoice name at each
|
||||
# execution.
|
||||
|
|
@ -51,7 +51,7 @@ class TestEdiWebServices(TestEsEdiCommon):
|
|||
cls.moves = cls.out_invoice + cls.in_invoice
|
||||
|
||||
def test_edi_gipuzkoa(self):
|
||||
self.env.company.l10n_es_edi_tax_agency = 'gipuzkoa'
|
||||
self.env.company.l10n_es_sii_tax_agency = 'gipuzkoa'
|
||||
|
||||
self.moves.action_process_edi_web_services(with_commit=False)
|
||||
generated_files = self._process_documents_web_services(self.moves, {'es_sii'})
|
||||
|
|
@ -60,7 +60,7 @@ class TestEdiWebServices(TestEsEdiCommon):
|
|||
self.assertRecordValues(self.in_invoice, [{'edi_state': 'sent'}])
|
||||
|
||||
def test_edi_bizkaia(self):
|
||||
self.env.company.l10n_es_edi_tax_agency = 'bizkaia'
|
||||
self.env.company.l10n_es_sii_tax_agency = 'bizkaia'
|
||||
|
||||
self.moves.action_process_edi_web_services(with_commit=False)
|
||||
generated_files = self._process_documents_web_services(self.moves, {'es_sii'})
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ import json
|
|||
from freezegun import freeze_time
|
||||
from unittest.mock import patch
|
||||
|
||||
from odoo import Command
|
||||
from odoo.tests import tagged
|
||||
|
||||
|
||||
|
|
@ -15,6 +16,8 @@ class TestEdiXmls(TestEsEdiCommon):
|
|||
@classmethod
|
||||
def setUpClass(cls):
|
||||
super().setUpClass()
|
||||
cls.other_currency = cls.setup_other_currency('USD')
|
||||
|
||||
cls.certificate.write({
|
||||
'date_start': '2019-01-01 01:00:00',
|
||||
'date_end': '2021-01-01 01:00:00',
|
||||
|
|
@ -155,11 +158,15 @@ class TestEdiXmls(TestEsEdiCommon):
|
|||
invoice_line_ids=[
|
||||
{
|
||||
'price_unit': 100.0,
|
||||
'tax_ids': [(6, 0, (self._get_tax_by_xml_id('s_iva10b') + self._get_tax_by_xml_id('s_req014')).ids)],
|
||||
'tax_ids': [Command.set((self._get_tax_by_xml_id('s_iva10b') + self._get_tax_by_xml_id('s_req014')).ids)],
|
||||
},
|
||||
{
|
||||
'price_unit': 50.0,
|
||||
'tax_ids': [Command.set((self._get_tax_by_xml_id('s_iva10b') + self._get_tax_by_xml_id('s_req014')).ids)],
|
||||
},
|
||||
{
|
||||
'price_unit': 200.0,
|
||||
'tax_ids': [(6, 0, (self._get_tax_by_xml_id('s_iva21s') + self._get_tax_by_xml_id('s_req52')).ids)],
|
||||
'tax_ids': [Command.set((self._get_tax_by_xml_id('s_iva21s') + self._get_tax_by_xml_id('s_req52')).ids)],
|
||||
},
|
||||
],
|
||||
)
|
||||
|
|
@ -208,9 +215,9 @@ class TestEdiXmls(TestEsEdiCommon):
|
|||
'DetalleIVA': [
|
||||
{
|
||||
'TipoImpositivo': 10.0,
|
||||
'BaseImponible': 100.0,
|
||||
'CuotaRepercutida': 10.0,
|
||||
'CuotaRecargoEquivalencia': 1.4,
|
||||
'BaseImponible': 150.0,
|
||||
'CuotaRepercutida': 15.0,
|
||||
'CuotaRecargoEquivalencia': 2.1,
|
||||
'TipoRecargoEquivalencia': 1.4
|
||||
}
|
||||
]
|
||||
|
|
@ -220,7 +227,7 @@ class TestEdiXmls(TestEsEdiCommon):
|
|||
}
|
||||
}
|
||||
},
|
||||
'ImporteTotal': 363.8,
|
||||
'ImporteTotal': 419.5,
|
||||
'Contraparte': {
|
||||
'IDOtro': {'ID': 'BE0477472701', 'IDType': '02'},
|
||||
'NombreRazon': 'partner_a',
|
||||
|
|
@ -304,7 +311,7 @@ class TestEdiXmls(TestEsEdiCommon):
|
|||
},
|
||||
})
|
||||
|
||||
def test_050_out_invoice_s_iva0_sp_i_s_iva0_ic(self):
|
||||
def test_050_out_invoice_s_iva0_sp_i_s_iva0_g_i(self):
|
||||
"""An intra-community sale needs to be reported as exempt and intra-community services as no sujeto por reglas de localizacion (no_sujeto_loc)"""
|
||||
with freeze_time(self.frozen_today), \
|
||||
patch('odoo.addons.l10n_es_edi_sii.models.account_edi_format.AccountEdiFormat._l10n_es_edi_call_web_service_sign',
|
||||
|
|
@ -313,7 +320,7 @@ class TestEdiXmls(TestEsEdiCommon):
|
|||
partner_id=self.partner_a.id,
|
||||
invoice_line_ids=[
|
||||
{'price_unit': 100.0, 'tax_ids': [(6, 0, self._get_tax_by_xml_id('s_iva0_sp_i').ids)]},
|
||||
{'price_unit': 200.0, 'tax_ids': [(6, 0, self._get_tax_by_xml_id('s_iva0_ic').ids)]},
|
||||
{'price_unit': 200.0, 'tax_ids': [(6, 0, self._get_tax_by_xml_id('s_iva0_g_i').ids)]},
|
||||
],
|
||||
)
|
||||
invoice.action_post()
|
||||
|
|
@ -362,7 +369,7 @@ class TestEdiXmls(TestEsEdiCommon):
|
|||
},
|
||||
})
|
||||
|
||||
def test_060_out_refund_s_iva0_sp_i_s_iva0_ic(self):
|
||||
def test_060_out_refund_s_iva0_sp_i_s_iva0_g_i(self):
|
||||
""" Intra-community refund of service and good"""
|
||||
with freeze_time(self.frozen_today), \
|
||||
patch('odoo.addons.l10n_es_edi_sii.models.account_edi_format.AccountEdiFormat._l10n_es_edi_call_web_service_sign',
|
||||
|
|
@ -372,7 +379,7 @@ class TestEdiXmls(TestEsEdiCommon):
|
|||
partner_id=self.partner_a.id,
|
||||
invoice_line_ids=[
|
||||
{'price_unit': 100.0, 'tax_ids': [(6, 0, self._get_tax_by_xml_id('s_iva0_sp_i').ids)]},
|
||||
{'price_unit': 200.0, 'tax_ids': [(6, 0, self._get_tax_by_xml_id('s_iva0_ic').ids)]},
|
||||
{'price_unit': 200.0, 'tax_ids': [(6, 0, self._get_tax_by_xml_id('s_iva0_g_i').ids)]},
|
||||
],
|
||||
)
|
||||
invoice.action_post()
|
||||
|
|
@ -422,7 +429,7 @@ class TestEdiXmls(TestEsEdiCommon):
|
|||
},
|
||||
})
|
||||
|
||||
def test_070_out_invoice_s_iva_e_s_iva0_e(self):
|
||||
def test_070_out_invoice_s_iva_e_s_iva0_g_e(self):
|
||||
""" Export of service (no sujeto por reglas de localization) and export of goods (exempt)"""
|
||||
with freeze_time(self.frozen_today), \
|
||||
patch('odoo.addons.l10n_es_edi_sii.models.account_edi_format.AccountEdiFormat._l10n_es_edi_call_web_service_sign',
|
||||
|
|
@ -431,7 +438,7 @@ class TestEdiXmls(TestEsEdiCommon):
|
|||
partner_id=self.partner_a.id,
|
||||
invoice_line_ids=[
|
||||
{'price_unit': 100.0, 'tax_ids': [(6, 0, self._get_tax_by_xml_id('s_iva_e').ids)]},
|
||||
{'price_unit': 200.0, 'tax_ids': [(6, 0, self._get_tax_by_xml_id('s_iva0_e').ids)]},
|
||||
{'price_unit': 200.0, 'tax_ids': [(6, 0, self._get_tax_by_xml_id('s_iva0_g_e').ids)]},
|
||||
],
|
||||
)
|
||||
invoice.action_post()
|
||||
|
|
@ -480,7 +487,7 @@ class TestEdiXmls(TestEsEdiCommon):
|
|||
},
|
||||
})
|
||||
|
||||
def test_080_out_refund_s_iva0_sp_i_s_iva0_ic(self):
|
||||
def test_080_out_refund_s_iva0_sp_i_s_iva0_g_i(self):
|
||||
"""Customer refund of an intracom good and service"""
|
||||
with freeze_time(self.frozen_today), \
|
||||
patch('odoo.addons.l10n_es_edi_sii.models.account_edi_format.AccountEdiFormat._l10n_es_edi_call_web_service_sign',
|
||||
|
|
@ -490,7 +497,7 @@ class TestEdiXmls(TestEsEdiCommon):
|
|||
partner_id=self.partner_a.id,
|
||||
invoice_line_ids=[
|
||||
{'price_unit': 100.0, 'tax_ids': [(6, 0, self._get_tax_by_xml_id('s_iva0_sp_i').ids)]},
|
||||
{'price_unit': 200.0, 'tax_ids': [(6, 0, self._get_tax_by_xml_id('s_iva0_ic').ids)]},
|
||||
{'price_unit': 200.0, 'tax_ids': [(6, 0, self._get_tax_by_xml_id('s_iva0_g_i').ids)]},
|
||||
],
|
||||
)
|
||||
invoice.action_post()
|
||||
|
|
@ -540,7 +547,7 @@ class TestEdiXmls(TestEsEdiCommon):
|
|||
},
|
||||
})
|
||||
|
||||
def test_085_out_refund_s_iva0_sp_i_s_iva0_ic_multi_currency(self):
|
||||
def test_085_out_refund_s_iva0_sp_i_s_iva0_g_i_multi_currency(self):
|
||||
""" Same as test_080 but in multi-currency"""
|
||||
with freeze_time(self.frozen_today), \
|
||||
patch('odoo.addons.l10n_es_edi_sii.models.account_edi_format.AccountEdiFormat._l10n_es_edi_call_web_service_sign',
|
||||
|
|
@ -548,10 +555,10 @@ class TestEdiXmls(TestEsEdiCommon):
|
|||
invoice = self.create_invoice(
|
||||
move_type='out_refund',
|
||||
partner_id=self.partner_a.id,
|
||||
currency_id=self.currency_data['currency'].id,
|
||||
currency_id=self.other_currency.id,
|
||||
invoice_line_ids=[
|
||||
{'price_unit': 200.0, 'tax_ids': [(6, 0, self._get_tax_by_xml_id('s_iva0_sp_i').ids)]},
|
||||
{'price_unit': 400.0, 'tax_ids': [(6, 0, self._get_tax_by_xml_id('s_iva0_ic').ids)]},
|
||||
{'price_unit': 400.0, 'tax_ids': [(6, 0, self._get_tax_by_xml_id('s_iva0_g_i').ids)]},
|
||||
],
|
||||
)
|
||||
invoice.action_post()
|
||||
|
|
@ -1026,7 +1033,7 @@ class TestEdiXmls(TestEsEdiCommon):
|
|||
move_type='in_refund',
|
||||
ref='sup0001',
|
||||
partner_id=self.partner_b.id,
|
||||
currency_id=self.currency_data['currency'].id,
|
||||
currency_id=self.other_currency.id,
|
||||
l10n_es_registration_date='2019-01-02',
|
||||
invoice_line_ids=[
|
||||
{
|
||||
|
|
@ -1071,6 +1078,53 @@ class TestEdiXmls(TestEsEdiCommon):
|
|||
'PeriodoLiquidacion': {'Periodo': '01', 'Ejercicio': '2019'},
|
||||
})
|
||||
|
||||
def test_170_in_invoice_dua(self):
|
||||
"""DUA invoice. The TipoFactura needs to change as well as the importetotal needs to include the base. """
|
||||
with freeze_time(self.frozen_today), patch(
|
||||
'odoo.addons.l10n_es_edi_sii.models.account_edi_format.AccountEdiFormat._l10n_es_edi_call_web_service_sign',
|
||||
new=mocked_l10n_es_edi_call_web_service_sign
|
||||
):
|
||||
invoice = self.create_invoice(
|
||||
move_type='in_invoice',
|
||||
ref='fakedua',
|
||||
partner_id=self.partner_b.id,
|
||||
currency_id=self.other_currency.id,
|
||||
l10n_es_registration_date='2019-01-02',
|
||||
invoice_line_ids=[
|
||||
{
|
||||
'tax_ids': [(6, 0, (self._get_tax_by_xml_id('p_iva21_ibc_group').ids))],
|
||||
},
|
||||
],
|
||||
)
|
||||
invoice.action_post()
|
||||
|
||||
generated_files = self._process_documents_web_services(invoice, {'es_sii'})
|
||||
self.assertTrue(generated_files)
|
||||
|
||||
json_file = json.loads(generated_files[0].decode())[0]
|
||||
self.assertEqual(json_file, {
|
||||
'PeriodoLiquidacion': {'Ejercicio': '2019', 'Periodo': '01'},
|
||||
'IDFactura': {
|
||||
'FechaExpedicionFacturaEmisor': '01-01-2019',
|
||||
'IDEmisorFactura': {'NIF': '59962470K',
|
||||
'NombreRazon': 'partner_b'},
|
||||
'NumSerieFacturaEmisor': 'fakedua'
|
||||
},
|
||||
'FacturaRecibida': {
|
||||
'DescripcionOperacion': 'manual',
|
||||
'Contraparte': {'NIF': '59962470K', 'NombreRazon': 'partner_b'},
|
||||
'FechaRegContable': '02-01-2019',
|
||||
'ClaveRegimenEspecialOTrascendencia': '01',
|
||||
'TipoFactura': 'F5',
|
||||
'DesgloseFactura': {
|
||||
'DesgloseIVA': {
|
||||
'DetalleIVA': [{'BaseImponible': 500.0, 'TipoImpositivo': 21.0, 'CuotaSoportada': 105.0}]
|
||||
}
|
||||
},
|
||||
'ImporteTotal': 605.0,
|
||||
'CuotaDeducible': 105.0
|
||||
}})
|
||||
|
||||
def test_180_in_invoice_iva21_sp_in_iva21_ic_bc(self):
|
||||
""" For intra-community purchase of services and goods, the -100 needs to be taken into account in the importe total.
|
||||
The clave should also change to 09. """
|
||||
|
|
|
|||
|
|
@ -11,15 +11,9 @@ from .common import TestEsEdiCommon, mocked_l10n_es_edi_call_web_service_sign
|
|||
@tagged("post_install_l10n", "post_install", "-at_install")
|
||||
class TestResequenceSII(TestEsEdiCommon):
|
||||
@classmethod
|
||||
def setUpClass(
|
||||
cls,
|
||||
chart_template_ref="l10n_es.account_chart_template_full",
|
||||
edi_format_ref="l10n_es_edi_sii.edi_es_sii",
|
||||
):
|
||||
def setUpClass(cls):
|
||||
cls.startClassPatcher(freeze_time("2019-06-01", tick=True))
|
||||
super().setUpClass(
|
||||
chart_template_ref=chart_template_ref, edi_format_ref=edi_format_ref
|
||||
)
|
||||
super().setUpClass()
|
||||
cls.classPatch(
|
||||
cls.registry["account.edi.format"],
|
||||
"_l10n_es_edi_call_web_service_sign",
|
||||
|
|
|
|||
|
|
@ -7,11 +7,11 @@
|
|||
<field name="inherit_id" ref="account.view_move_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//group[@id='other_tab_group']//group[@name='accounting_info_group']" position="inside">
|
||||
<field name="l10n_es_registration_date" attrs="{'readonly': [('state', '=', 'posted')], 'invisible': [('country_code', '!=', 'ES')]}"/>
|
||||
<field name="l10n_es_registration_date" readonly="state == 'posted'" invisible="country_code != 'ES'"/>
|
||||
<field name="l10n_es_edi_csv" invisible="1"/>
|
||||
</xpath>
|
||||
<field name="ref" position="attributes">
|
||||
<attribute name="attrs">{'readonly': [('l10n_es_edi_csv', '!=', False)]}</attribute>
|
||||
<attribute name="readonly">l10n_es_edi_csv</attribute>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
|
|
|
|||
|
|
@ -1,20 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<data>
|
||||
<record id="account_tax_form_inherit_l10n_es_edi" model="ir.ui.view">
|
||||
<field name="name">account.tax.form.inherit.l10n_es_edi</field>
|
||||
<field name="model">account.tax</field>
|
||||
<field name="inherit_id" ref="account.view_tax_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//field[@name='tax_scope']" position="after">
|
||||
<field name="l10n_es_type"
|
||||
attrs="{'invisible': [('country_code', '!=', 'ES')]}"/>
|
||||
<field name="l10n_es_exempt_reason"
|
||||
attrs="{'invisible': [('country_code', '!=', 'ES'), ('l10n_es_type', '!=', 'exento')], 'required': [('l10n_es_type', '=', 'exento'), ('type_tax_use', '=', 'sale')]}"/>
|
||||
<field name="l10n_es_bien_inversion"
|
||||
attrs="{'invisible': [('country_code', '!=', 'ES'), ('l10n_es_type', '!=', 'exento')], 'required': [('l10n_es_type', '=', 'exento'), ('type_tax_use', '=', 'sale')]}"/>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
</data>
|
||||
</odoo>
|
||||
|
|
@ -1,60 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<odoo>
|
||||
<data>
|
||||
|
||||
<record id="l10n_es_edi_certificate_form" model="ir.ui.view">
|
||||
<field name="name">l10n_es_edi.certificate.form</field>
|
||||
<field name="model">l10n_es_edi.certificate</field>
|
||||
<field name="arch" type="xml">
|
||||
<form>
|
||||
<sheet>
|
||||
<group>
|
||||
<field name="content"/>
|
||||
<field name="password" password="True"/>
|
||||
<label for="date_start" string="Validity"/>
|
||||
<div>
|
||||
<field name="date_start"/> -
|
||||
<field name="date_end"/>
|
||||
</div>
|
||||
<field name="company_id" groups="base.group_multi_company"/>
|
||||
</group>
|
||||
</sheet>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="l10n_es_edi_certificate_tree" model="ir.ui.view">
|
||||
<field name="name">l10n_es_edi.certificate.tree</field>
|
||||
<field name="model">l10n_es_edi.certificate</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree>
|
||||
<field name="date_start"/>
|
||||
<field name="date_end"/>
|
||||
<field name="company_id" groups="base.group_multi_company"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="l10n_es_edi_certificate_action" model="ir.actions.act_window">
|
||||
<field name="name">Certificates for EDI invoices on Spain</field>
|
||||
<field name="res_model">l10n_es_edi.certificate</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="help" type="html">
|
||||
<p class="oe_view_nocontent_create">Create the first certificate</p>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<menuitem id="menu_l10n_es_edi_root"
|
||||
name="Spain"
|
||||
sequence="110"
|
||||
groups="account.group_account_manager"
|
||||
parent="account.menu_finance_configuration">
|
||||
<menuitem id="menu_l10n_es_edi_certificates"
|
||||
name="Certificates (ES)"
|
||||
action="l10n_es_edi_certificate_action"
|
||||
sequence="100"
|
||||
groups="account.group_account_manager"/>
|
||||
</menuitem>
|
||||
|
||||
</data>
|
||||
</odoo>
|
||||
|
|
@ -0,0 +1,47 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<odoo>
|
||||
<record id="certificate_certificate_view_search" model="ir.ui.view">
|
||||
<field name="name">certificate_certificate_view_search.inherit.l10n_es_edi_sii</field>
|
||||
<field name="model">certificate.certificate</field>
|
||||
<field name="inherit_id" ref="certificate.certificate_certificate_view_search"/>
|
||||
<field name="arch" type="xml">
|
||||
<filter name="scope_general" position="after">
|
||||
<filter string="SII" name="scope_sii" domain="[('scope','=','sii')]" help="SII certificates"/>
|
||||
</filter>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="l10n_es_edi_sii_certificate_action" model="ir.actions.act_window">
|
||||
<field name="name">Certificates for SII EDI invoices on Spain</field>
|
||||
<field name="res_model">certificate.certificate</field>
|
||||
<field name="view_mode">list,form</field>
|
||||
<field name="context">{'scope': 'sii', 'search_default_scope_sii': 1}</field>
|
||||
<field name="help" type="html">
|
||||
<p class="oe_view_nocontent_create">Create the first certificate</p>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="certificate_certificate_view_form" model="ir.ui.view">
|
||||
<field name="name">certificate_certificate_view_form.inherit.l10n_es_edi_sii</field>
|
||||
<field name="model">certificate.certificate</field>
|
||||
<field name="inherit_id" ref="certificate.certificate_certificate_view_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<field name="scope" position="attributes">
|
||||
<attribute name="invisible" add="not (country_code == 'ES')" separator="or"/>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<menuitem id="menu_l10n_es_edi_sii_root"
|
||||
name="Spain SII"
|
||||
sequence="110"
|
||||
groups="account.group_account_manager"
|
||||
parent="account.menu_finance_configuration">
|
||||
<menuitem id="menu_l10n_es_edi_sii_certificates"
|
||||
name="Certificates"
|
||||
action="l10n_es_edi_sii_certificate_action"
|
||||
sequence="100"
|
||||
groups="account.group_account_manager"/>
|
||||
</menuitem>
|
||||
</odoo>
|
||||
|
|
@ -3,57 +3,44 @@
|
|||
<record id="res_config_settings_view_form" model="ir.ui.view">
|
||||
<field name="name">res.config.settings.view.form.inherit.l10n.es</field>
|
||||
<field name="model">res.config.settings</field>
|
||||
<field name="inherit_id" ref="account.res_config_settings_view_form"/>
|
||||
<field name="inherit_id" ref="l10n_es.res_config_settings_view_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//div[@data-key='account']/div" position="after">
|
||||
<h2 attrs="{'invisible': [('country_code', '!=', 'ES')]}">Spain Localization</h2>
|
||||
<div class="row mt16 o_settings_container"
|
||||
name="spain_localization"
|
||||
attrs="{'invisible': [('country_code', '!=', 'ES')]}">
|
||||
<div class="col-xs-12 col-md-6 o_setting_box">
|
||||
|
||||
<!-- Invisible fields -->
|
||||
<field name="l10n_es_edi_certificate_ids" invisible="1"/>
|
||||
|
||||
<div class="o_setting_left_pane"/>
|
||||
|
||||
<div class="o_setting_right_pane">
|
||||
<span class="o_form_label">Registro de Libros connection SII</span>
|
||||
<span class="fa fa-lg fa-building-o"
|
||||
title="Values set here are company-specific."
|
||||
groups="base.group_multi_company"/>
|
||||
<div class="content-group">
|
||||
<div class="mt16">
|
||||
<label for="l10n_es_edi_tax_agency" class="o_light_label"/>
|
||||
<field name="l10n_es_edi_tax_agency"/>
|
||||
<div class="text-muted" attrs="{'invisible': [('l10n_es_edi_tax_agency', '!=', False)]}">
|
||||
No tax agency selected: SII not activated.
|
||||
</div>
|
||||
<div class="text-muted" attrs="{'invisible': [('l10n_es_edi_tax_agency', '=', False)]}">
|
||||
Tax agency selected: invoices will be sent by SII for journals where it is activated.
|
||||
</div>
|
||||
<br/>
|
||||
<div class="o_row">
|
||||
<label for="l10n_es_edi_test_env" class="o_light_label"/>
|
||||
<field name="l10n_es_edi_test_env"/>
|
||||
</div>
|
||||
<div class="text-muted" attrs="{'invisible': [('l10n_es_edi_test_env', '=', False)]}">
|
||||
Test mode: EDI data is sent to separate test servers and is not considered official.
|
||||
</div>
|
||||
<div class="text-muted" attrs="{'invisible': [('l10n_es_edi_test_env', '!=', False)]}">
|
||||
Production mode: EDI data is sent to the official agency servers.
|
||||
</div>
|
||||
<br/>
|
||||
<div>
|
||||
<button name="%(l10n_es_edi_certificate_action)d" type="action" class="oe_link">Manage certificates (SII/TicketBAI)</button>
|
||||
</div>
|
||||
</div>
|
||||
<xpath expr="//block[@name='spain_localization']" position="attributes">
|
||||
<attribute name="invisible">country_code != 'ES'</attribute>
|
||||
</xpath>
|
||||
<xpath expr="//block[@name='spain_localization']" position="inside">
|
||||
<!-- Invisible fields -->
|
||||
<field name="l10n_es_sii_certificate_ids" invisible="1"/>
|
||||
<setting string="Registro de Libros connection SII" company_dependent="1">
|
||||
<div class="content-group">
|
||||
<div class="mt16">
|
||||
<label for="l10n_es_sii_tax_agency" class="o_light_label"/>
|
||||
<field name="l10n_es_sii_tax_agency"/>
|
||||
<div class="text-muted" invisible="l10n_es_sii_tax_agency">
|
||||
No tax agency selected: SII not activated.
|
||||
</div>
|
||||
<div class="text-muted" invisible="not l10n_es_sii_tax_agency">
|
||||
Tax agency selected: invoices will be sent by SII.
|
||||
</div>
|
||||
<br/>
|
||||
<div class="o_row">
|
||||
<label for="l10n_es_sii_test_env" class="o_light_label"/>
|
||||
<field name="l10n_es_sii_test_env"/>
|
||||
</div>
|
||||
<div class="text-muted" invisible="not l10n_es_sii_test_env">
|
||||
Test mode: EDI data is sent to separate test servers and is not considered official.
|
||||
</div>
|
||||
<div class="text-muted" invisible="l10n_es_sii_test_env">
|
||||
Production mode: EDI data is sent to the official agency servers.
|
||||
</div>
|
||||
<br/>
|
||||
<div>
|
||||
<button name="%(l10n_es_edi_sii_certificate_action)d" type="action" class="oe_link">Manage certificates (SII)</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</setting>
|
||||
</xpath>
|
||||
|
||||
</field>
|
||||
</record>
|
||||
</odoo>
|
||||
|
|
|
|||
|
|
@ -1,13 +1,16 @@
|
|||
[project]
|
||||
name = "odoo-bringout-oca-ocb-l10n_es_edi_sii"
|
||||
version = "16.0.0"
|
||||
description = "Spain - SII EDI Suministro de Libros - Odoo addon"
|
||||
description = "Spain - SII EDI Suministro de Libros -
|
||||
Odoo addon
|
||||
"
|
||||
authors = [
|
||||
{ name = "Ernad Husremovic", email = "hernad@bring.out.ba" }
|
||||
]
|
||||
dependencies = [
|
||||
"odoo-bringout-oca-ocb-l10n_es>=16.0.0",
|
||||
"odoo-bringout-oca-ocb-account_edi>=16.0.0",
|
||||
"TODO_MAP-certificate>=19.0.0",
|
||||
"odoo-bringout-oca-ocb-l10n_es>=19.0.0",
|
||||
"odoo-bringout-oca-ocb-account_edi>=19.0.0",
|
||||
"requests>=2.25.1"
|
||||
]
|
||||
readme = "README.md"
|
||||
|
|
@ -17,7 +20,7 @@ classifiers = [
|
|||
"Intended Audience :: Developers",
|
||||
"License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3)",
|
||||
"Programming Language :: Python :: 3",
|
||||
"Programming Language :: Python :: 3.11",
|
||||
"Programming Language :: Python :: 3.11",
|
||||
"Programming Language :: Python :: 3.12",
|
||||
"Topic :: Office/Business",
|
||||
]
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue