odoo-addon-l10n-es-verifactu-oca 16.0.1.0.6__py3-none-any.whl → 17.0.1.0.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of odoo-addon-l10n-es-verifactu-oca might be problematic. Click here for more details.
- odoo/addons/l10n_es_verifactu_oca/README.rst +99 -60
- odoo/addons/l10n_es_verifactu_oca/__manifest__.py +4 -3
- odoo/addons/l10n_es_verifactu_oca/data/l10n.es.aeat.map.tax.line.tax.csv +50 -0
- odoo/addons/l10n_es_verifactu_oca/data/template/account.fiscal.position-es_common.csv +27 -0
- odoo/addons/l10n_es_verifactu_oca/data/verifactu.map.csv +2 -0
- odoo/addons/l10n_es_verifactu_oca/data/verifactu.map.line.csv +8 -0
- odoo/addons/l10n_es_verifactu_oca/hooks.py +5 -5
- odoo/addons/l10n_es_verifactu_oca/i18n/es.po +2 -2
- odoo/addons/l10n_es_verifactu_oca/i18n/l10n_es_verifactu_oca.pot +8 -30
- odoo/addons/l10n_es_verifactu_oca/models/__init__.py +1 -1
- odoo/addons/l10n_es_verifactu_oca/models/account_chart_template.py +15 -0
- odoo/addons/l10n_es_verifactu_oca/models/account_move.py +10 -6
- odoo/addons/l10n_es_verifactu_oca/models/verifactu_invoice_entry.py +4 -2
- odoo/addons/l10n_es_verifactu_oca/models/verifactu_map.py +3 -1
- odoo/addons/l10n_es_verifactu_oca/models/verifactu_mixin.py +8 -4
- odoo/addons/l10n_es_verifactu_oca/models/verifactu_registration_key.py +4 -2
- odoo/addons/l10n_es_verifactu_oca/readme/CONFIGURE.md +27 -0
- odoo/addons/l10n_es_verifactu_oca/readme/CONTRIBUTORS.md +16 -0
- odoo/addons/l10n_es_verifactu_oca/readme/INSTALL.md +6 -0
- odoo/addons/l10n_es_verifactu_oca/readme/ROADMAP.md +30 -0
- odoo/addons/l10n_es_verifactu_oca/readme/USAGE.md +3 -0
- odoo/addons/l10n_es_verifactu_oca/static/description/index.html +88 -47
- odoo/addons/l10n_es_verifactu_oca/tests/common.py +9 -8
- odoo/addons/l10n_es_verifactu_oca/tests/test_10n_es_verifactu.py +9 -11
- odoo/addons/l10n_es_verifactu_oca/views/account_fiscal_position_view.xml +1 -1
- odoo/addons/l10n_es_verifactu_oca/views/account_journal_view.xml +2 -4
- odoo/addons/l10n_es_verifactu_oca/views/account_move_view.xml +14 -10
- odoo/addons/l10n_es_verifactu_oca/views/report_invoice.xml +2 -5
- odoo/addons/l10n_es_verifactu_oca/views/res_company_view.xml +5 -5
- odoo/addons/l10n_es_verifactu_oca/views/verifactu_map_lines_view.xml +4 -7
- odoo_addon_l10n_es_verifactu_oca-17.0.1.0.1.dist-info/METADATA +208 -0
- {odoo_addon_l10n_es_verifactu_oca-16.0.1.0.6.dist-info → odoo_addon_l10n_es_verifactu_oca-17.0.1.0.1.dist-info}/RECORD +35 -35
- {odoo_addon_l10n_es_verifactu_oca-16.0.1.0.6.dist-info → odoo_addon_l10n_es_verifactu_oca-17.0.1.0.1.dist-info}/WHEEL +1 -1
- odoo_addon_l10n_es_verifactu_oca-17.0.1.0.1.dist-info/top_level.txt +1 -0
- odoo/addons/l10n_es_verifactu_oca/data/account_fiscal_position_template_data.xml +0 -149
- odoo/addons/l10n_es_verifactu_oca/data/verifactu_map_data.xml +0 -128
- odoo/addons/l10n_es_verifactu_oca/i18n/ca.po +0 -1632
- odoo/addons/l10n_es_verifactu_oca/i18n/ca_ES.po +0 -1600
- odoo/addons/l10n_es_verifactu_oca/models/account_fiscal_position_template.py +0 -18
- odoo/addons/l10n_es_verifactu_oca/readme/CONFIGURE.rst +0 -18
- odoo/addons/l10n_es_verifactu_oca/readme/CONTRIBUTORS.rst +0 -16
- odoo/addons/l10n_es_verifactu_oca/readme/INSTALL.rst +0 -4
- odoo/addons/l10n_es_verifactu_oca/readme/ROADMAP.rst +0 -15
- odoo/addons/l10n_es_verifactu_oca/readme/USAGE.rst +0 -1
- odoo_addon_l10n_es_verifactu_oca-16.0.1.0.6.dist-info/METADATA +0 -168
- odoo_addon_l10n_es_verifactu_oca-16.0.1.0.6.dist-info/top_level.txt +0 -1
- /odoo/addons/l10n_es_verifactu_oca/readme/{DESCRIPTION.rst → DESCRIPTION.md} +0 -0
|
@@ -11,7 +11,7 @@ Comunicación VERI*FACTU
|
|
|
11
11
|
!! This file is generated by oca-gen-addon-readme !!
|
|
12
12
|
!! changes will be overwritten. !!
|
|
13
13
|
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
14
|
-
!! source digest: sha256:
|
|
14
|
+
!! source digest: sha256:c2e9aea5056ccc5810ccc0dc40cc3df9b3c666a307d7ccc72413131769ad749f
|
|
15
15
|
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
16
16
|
|
|
17
17
|
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
|
|
@@ -21,13 +21,13 @@ Comunicación VERI*FACTU
|
|
|
21
21
|
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
|
|
22
22
|
:alt: License: AGPL-3
|
|
23
23
|
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fl10n--spain-lightgray.png?logo=github
|
|
24
|
-
:target: https://github.com/OCA/l10n-spain/tree/
|
|
24
|
+
:target: https://github.com/OCA/l10n-spain/tree/17.0/l10n_es_verifactu_oca
|
|
25
25
|
:alt: OCA/l10n-spain
|
|
26
26
|
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
|
|
27
|
-
:target: https://translation.odoo-community.org/projects/l10n-spain-
|
|
27
|
+
:target: https://translation.odoo-community.org/projects/l10n-spain-17-0/l10n-spain-17-0-l10n_es_verifactu_oca
|
|
28
28
|
:alt: Translate me on Weblate
|
|
29
29
|
.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
|
|
30
|
-
:target: https://runboat.odoo-community.org/builds?repo=OCA/l10n-spain&target_branch=
|
|
30
|
+
:target: https://runboat.odoo-community.org/builds?repo=OCA/l10n-spain&target_branch=17.0
|
|
31
31
|
:alt: Try me on Runboat
|
|
32
32
|
|
|
33
33
|
|badge1| |badge2| |badge3| |badge4| |badge5|
|
|
@@ -44,54 +44,82 @@ Installation
|
|
|
44
44
|
|
|
45
45
|
Para instalar esté módulo necesita:
|
|
46
46
|
|
|
47
|
-
|
|
48
|
-
|
|
47
|
+
1. Libreria Python Zeep, se puede instalar con el comando 'pip install
|
|
48
|
+
zeep'
|
|
49
|
+
2. Libreria Python Requests, se puede instalar con el comando 'pip
|
|
50
|
+
install requests'
|
|
49
51
|
|
|
50
52
|
Configuration
|
|
51
53
|
=============
|
|
52
54
|
|
|
53
55
|
Para configurar este módulo es necesario:
|
|
54
56
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
57
|
+
1. Acceder a Facturación/Contabilidad -> Configuración -> AEAT ->
|
|
58
|
+
Agencia Tributaria, podrás consultar las URLs del servicio SOAP de
|
|
59
|
+
Hacienda. Estas URLs pueden cambiar según comunidades
|
|
60
|
+
2. El certificado enviado por la FMNT es en formato p12, este
|
|
61
|
+
certificado no se puede usar directamente con Zeep. Accede a
|
|
62
|
+
Facturación/Contabilidad -> Configuración -> AEAT -> Certificados
|
|
63
|
+
AEAT, y allí podrás: Subir el certificado p12 y extraer las claves
|
|
64
|
+
públicas y privadas con el botón "Obtener claves"
|
|
65
|
+
3. Debes tener en cuenta que los certificados se alojan en una carpeta
|
|
66
|
+
accesible por la instalación de Odoo.
|
|
67
|
+
4. Completar los datos de desarrollador y del encadenamiento a nivel de
|
|
68
|
+
compañía en la pestaña de VERI*FACTU.
|
|
69
|
+
|
|
70
|
+
En caso de que la obtención de claves no funcione y uses Linux, cuentas
|
|
71
|
+
con los siguientes comandos para tratar de solucionarlo:
|
|
72
|
+
|
|
73
|
+
- Clave pública: "openssl pkcs12 -in Certificado.p12 -nokeys -out
|
|
74
|
+
publicCert.crt -nodes"
|
|
75
|
+
- Clave privada: "openssl pkcs12 -in Certificado.p12 -nocerts -out
|
|
76
|
+
privateKey.pem -nodes"
|
|
77
|
+
|
|
78
|
+
1. Establecer en las posiciones fiscales la clave de impuestos y la
|
|
79
|
+
clave de registro VERI*FACTU.
|
|
80
|
+
2. Para aplicar las claves ejecute el asistente de actualización del
|
|
81
|
+
módulo accountchart_update.
|
|
71
82
|
|
|
72
83
|
Usage
|
|
73
84
|
=====
|
|
74
85
|
|
|
75
|
-
Cuando se valida una factura, automáticamente genera el registro de
|
|
86
|
+
Cuando se valida una factura, automáticamente genera el registro de
|
|
87
|
+
envío para verifactu. Cada minuto se enviarán todos aquellos registros
|
|
88
|
+
pendientes de enviar mediante un cron.
|
|
76
89
|
|
|
77
90
|
Known issues / Roadmap
|
|
78
91
|
======================
|
|
79
92
|
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
93
|
+
- Refactorización SII-VERI*FACTU en l10nes_aeat de los métodos que
|
|
94
|
+
sean comunes.
|
|
95
|
+
- Envío separado de la confirmación de la factura
|
|
96
|
+
(cron.trigger/queque.job)
|
|
97
|
+
- Control de errores del sistema, generar avisos. (caída de aeat,
|
|
98
|
+
errores de conexión, etc.)
|
|
99
|
+
- Declaración responsable.
|
|
100
|
+
https://sede.agenciatributaria.gob.es/Sede/iva/sistemas-informaticos-facturacion-verifactu/preguntas-frecuentes/certificacion-sistemas-informaticos-declaracion-responsable.html?faqId=a15d77fe52572910VgnVCM100000dc381e0aRCRD
|
|
101
|
+
- Posibilidad de consultar el estado de las facturas enviadas.
|
|
102
|
+
- Operaciones exentas y causas de exención.
|
|
103
|
+
- Crear un selection con todos los valores posibles de codigos de
|
|
104
|
+
error, para poder guardarlo y agrupar las facturas por ese código.
|
|
105
|
+
- Contemplar el tiempo de espera entre envíos de registros cuando
|
|
106
|
+
AEAT devuelve un tiempo superior a 60 segundos.
|
|
107
|
+
|
|
108
|
+
CASOS NO CUBIERTOS: 1 - Modificación de facturas enviadas (AEAT
|
|
109
|
+
recomienda generar rectificativa). Según AEAT: Si los errores detectados
|
|
110
|
+
tras la emisión NO están contemplados en el ROF, pero afectan a campos
|
|
111
|
+
del registro de facturación (RF) generado al emitir la factura (que,
|
|
112
|
+
digamos, “no se ven” en la factura impresa, es decir, son campos
|
|
113
|
+
“internos”, como ciertas codificaciones tributarias), se debe corregir
|
|
114
|
+
la factura original (esos datos “internos” de la misma) y se debe
|
|
115
|
+
generar un RF de alta de subsanación de esa factura donde conste ya la
|
|
116
|
+
nueva información que proceda. Estos casos deberían ser MUY POCO
|
|
117
|
+
FRECUENTES. 2 - Anulación de facturas enviadas (AEAT recomienda generar
|
|
118
|
+
rectificativa). Según AEAT: "Si se considera que "toda la factura" en sí
|
|
119
|
+
misma está mal o no debería haberse emitido, siempre que para
|
|
120
|
+
solucionarlo no deba emplearse algún procedimiento (de rectificativa u
|
|
121
|
+
otro) previsto en el ROF, se podrá "anular" generando para ello un RF de
|
|
122
|
+
anulación. Estos casos deberían ser MUY POCO FRECUENTES."
|
|
95
123
|
|
|
96
124
|
Bug Tracker
|
|
97
125
|
===========
|
|
@@ -99,7 +127,7 @@ Bug Tracker
|
|
|
99
127
|
Bugs are tracked on `GitHub Issues <https://github.com/OCA/l10n-spain/issues>`_.
|
|
100
128
|
In case of trouble, please check there if your issue has already been reported.
|
|
101
129
|
If you spotted it first, help us to smash it by providing a detailed and welcomed
|
|
102
|
-
`feedback <https://github.com/OCA/l10n-spain/issues/new?body=module:%20l10n_es_verifactu_oca%0Aversion:%
|
|
130
|
+
`feedback <https://github.com/OCA/l10n-spain/issues/new?body=module:%20l10n_es_verifactu_oca%0Aversion:%2017.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
|
|
103
131
|
|
|
104
132
|
Do not contact contributors directly about support or help with technical issues.
|
|
105
133
|
|
|
@@ -107,34 +135,45 @@ Credits
|
|
|
107
135
|
=======
|
|
108
136
|
|
|
109
137
|
Authors
|
|
110
|
-
|
|
138
|
+
-------
|
|
111
139
|
|
|
112
140
|
* Aures Tic
|
|
113
141
|
* ForgeFlow
|
|
114
142
|
* Tecnativa
|
|
115
143
|
|
|
116
144
|
Contributors
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
145
|
+
------------
|
|
146
|
+
|
|
147
|
+
- Aures TIC:
|
|
148
|
+
|
|
149
|
+
- Jose Zambudio
|
|
150
|
+
- Almudena de La Puente
|
|
151
|
+
- Anna Martínez
|
|
152
|
+
|
|
153
|
+
- ForgeFlow S.L.:
|
|
154
|
+
|
|
155
|
+
- Laura Cazorla
|
|
156
|
+
- Andreu Orensanz
|
|
157
|
+
- Jordi Ballester
|
|
158
|
+
|
|
159
|
+
- Ozono multimedia:
|
|
160
|
+
|
|
161
|
+
- Iván Antón
|
|
162
|
+
|
|
163
|
+
- SDi:
|
|
164
|
+
|
|
165
|
+
- Fernando La Chica
|
|
166
|
+
|
|
167
|
+
- Process control:
|
|
168
|
+
|
|
169
|
+
- Jorge Luis López
|
|
170
|
+
|
|
171
|
+
- Tecnativa:
|
|
172
|
+
|
|
173
|
+
- Pedro M. Baeza
|
|
135
174
|
|
|
136
175
|
Maintainers
|
|
137
|
-
|
|
176
|
+
-----------
|
|
138
177
|
|
|
139
178
|
This module is maintained by the OCA.
|
|
140
179
|
|
|
@@ -146,6 +185,6 @@ OCA, or the Odoo Community Association, is a nonprofit organization whose
|
|
|
146
185
|
mission is to support the collaborative development of Odoo features and
|
|
147
186
|
promote its widespread use.
|
|
148
187
|
|
|
149
|
-
This module is part of the `OCA/l10n-spain <https://github.com/OCA/l10n-spain/tree/
|
|
188
|
+
This module is part of the `OCA/l10n-spain <https://github.com/OCA/l10n-spain/tree/17.0/l10n_es_verifactu_oca>`_ project on GitHub.
|
|
150
189
|
|
|
151
190
|
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
|
|
8
8
|
{
|
|
9
9
|
"name": "Comunicación VERI*FACTU",
|
|
10
|
-
"version": "
|
|
10
|
+
"version": "17.0.1.0.1",
|
|
11
11
|
"category": "Accounting/Localizations/EDI",
|
|
12
12
|
"website": "https://github.com/OCA/l10n-spain",
|
|
13
13
|
"author": "Aures Tic,ForgeFlow,Tecnativa,Odoo Community Association (OCA)",
|
|
@@ -17,8 +17,9 @@
|
|
|
17
17
|
"data": [
|
|
18
18
|
"data/verifactu_tax_agency_data.xml",
|
|
19
19
|
"data/verifactu_registration_key_data.xml",
|
|
20
|
-
"data/
|
|
21
|
-
"data/
|
|
20
|
+
"data/l10n.es.aeat.map.tax.line.tax.csv", # should be before verifactu.map*
|
|
21
|
+
"data/verifactu.map.csv",
|
|
22
|
+
"data/verifactu.map.line.csv",
|
|
22
23
|
"data/ir_config_parameter.xml",
|
|
23
24
|
"data/ir_cron.xml",
|
|
24
25
|
"data/mail_activity_data.xml",
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
id,name
|
|
2
|
+
s_iva21b,account_tax_template_s_iva21b
|
|
3
|
+
s_iva0b,account_tax_template_s_iva0b
|
|
4
|
+
s_iva2b,account_tax_template_s_iva2b
|
|
5
|
+
s_iva4b,account_tax_template_s_iva4b
|
|
6
|
+
s_iva5b,account_tax_template_s_iva5b
|
|
7
|
+
s_iva7-5b,account_tax_template_s_iva7-5b
|
|
8
|
+
s_iva10b,account_tax_template_s_iva10b
|
|
9
|
+
s_iva0_isp,account_tax_template_s_iva0_isp
|
|
10
|
+
s_iva_ns_b,account_tax_template_s_iva_ns_b
|
|
11
|
+
s_iva_e,account_tax_template_s_iva_e
|
|
12
|
+
s_iva0_sp_i,account_tax_template_s_iva0_sp_i
|
|
13
|
+
s_iva_ns,account_tax_template_s_iva_ns
|
|
14
|
+
s_iva21s,account_tax_template_s_iva21s
|
|
15
|
+
s_iva10s,account_tax_template_s_iva10s
|
|
16
|
+
s_iva0s,account_tax_template_s_iva0s
|
|
17
|
+
s_iva2s,account_tax_template_s_iva2s
|
|
18
|
+
s_iva4s,account_tax_template_s_iva4s
|
|
19
|
+
s_iva5s,account_tax_template_s_iva5s
|
|
20
|
+
s_iva7-5s,account_tax_template_s_iva7-5s
|
|
21
|
+
s_iva0_g_i,account_tax_template_s_iva0_g_i
|
|
22
|
+
s_iva0_g_e,account_tax_template_s_iva0_g_e
|
|
23
|
+
s_iva0_art22,account_tax_template_s_iva0_art22
|
|
24
|
+
s_iva0_art23,account_tax_template_s_iva0_art23
|
|
25
|
+
s_iva0_e,account_tax_template_s_iva0_e
|
|
26
|
+
s_iva0_nsd,account_tax_template_s_iva0_nsd
|
|
27
|
+
s_req52,account_tax_template_s_req52
|
|
28
|
+
s_req014,account_tax_template_s_req014
|
|
29
|
+
s_req062,account_tax_template_s_req062
|
|
30
|
+
s_req1,account_tax_template_s_req1
|
|
31
|
+
s_req05,account_tax_template_s_req05
|
|
32
|
+
s_req026,account_tax_template_s_req026
|
|
33
|
+
s_req0,account_tax_template_s_req0
|
|
34
|
+
s_irpf1,account_tax_template_s_irpf1
|
|
35
|
+
s_irpf2,account_tax_template_s_irpf2
|
|
36
|
+
s_irpf7,account_tax_template_s_irpf7
|
|
37
|
+
s_irpf9,account_tax_template_s_irpf9
|
|
38
|
+
s_irpf15,account_tax_template_s_irpf15
|
|
39
|
+
s_irpf18,account_tax_template_s_irpf18
|
|
40
|
+
s_irpf19,account_tax_template_s_irpf19
|
|
41
|
+
s_irpfnrue19,account_tax_template_s_irpf19
|
|
42
|
+
s_irpf19a,account_tax_template_s_irpf19a
|
|
43
|
+
s_irpf195a,account_tax_template_s_irpf195a
|
|
44
|
+
s_irpf20,account_tax_template_s_irpf20
|
|
45
|
+
s_irpf20a,account_tax_template_s_irpf20a
|
|
46
|
+
s_irpf21,account_tax_template_s_irpf21
|
|
47
|
+
s_irpf21a,account_tax_template_s_irpf21a
|
|
48
|
+
s_irpf24,account_tax_template_s_irpf24
|
|
49
|
+
s_irpfnrnue24,account_tax_template_s_irpf24
|
|
50
|
+
s_iva0_ns,account_tax_template_s_iva0_ns
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
id,verifactu_registration_key:id,verifactu_tax_key
|
|
2
|
+
"fp_nacional","verifactu_registration_keys_01","01"
|
|
3
|
+
"fp_intra","verifactu_registration_keys_01","01"
|
|
4
|
+
"fp_extra","verifactu_registration_keys_02","01"
|
|
5
|
+
"fp_not_subject_tai","verifactu_registration_keys_08","01"
|
|
6
|
+
"fp_recargo","verifactu_registration_keys_18","01"
|
|
7
|
+
"fp_recargo_isp","verifactu_registration_keys_18","01"
|
|
8
|
+
"fp_irpf1","verifactu_registration_keys_01","01"
|
|
9
|
+
"fp_irpf2","verifactu_registration_keys_01","01"
|
|
10
|
+
"fp_irpf7","verifactu_registration_keys_01","01"
|
|
11
|
+
"fp_irpf9","verifactu_registration_keys_01","01"
|
|
12
|
+
"fp_irpf15","verifactu_registration_keys_01","01"
|
|
13
|
+
"fp_irpf18","verifactu_registration_keys_01","01"
|
|
14
|
+
"fp_irpf19","verifactu_registration_keys_01","01"
|
|
15
|
+
"fp_irpf19a","verifactu_registration_keys_01","01"
|
|
16
|
+
"fp_irpf195a","verifactu_registration_keys_01","01"
|
|
17
|
+
"fp_irpf20","verifactu_registration_keys_01","01"
|
|
18
|
+
"fp_irpf24","verifactu_registration_keys_01","01"
|
|
19
|
+
"fp_irpf20a","verifactu_registration_keys_01","01"
|
|
20
|
+
"fp_irpf21","verifactu_registration_keys_01","01"
|
|
21
|
+
"fp_irpf21a","verifactu_registration_keys_01","01"
|
|
22
|
+
"fp_irpfnrnue24","verifactu_registration_keys_01","01"
|
|
23
|
+
"fp_irpfnrue19","verifactu_registration_keys_01","01"
|
|
24
|
+
"fp_irpfnrnue0",,"05"
|
|
25
|
+
"fp_ispn","verifactu_registration_keys_01","01"
|
|
26
|
+
"fp_reagyp_a","verifactu_registration_keys_19","01"
|
|
27
|
+
"fp_reagyp_gp","verifactu_registration_keys_19","01"
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
id,code,name,tax_xmlid_ids:id,verifactu_map_id:id
|
|
2
|
+
"verifactu_map_line_S1","S1","Operación Sujeta y No exenta - Sin inversión del sujeto pasivo.","s_iva21b,s_iva0b,s_iva2b,s_iva4b,s_iva5b,s_iva7-5b,s_iva10b,s_iva21s,s_iva10s,s_iva0s,s_iva2s,s_iva4s,s_iva5s,s_iva7-5s,s_iva0_g_i,s_iva0_sp_i,s_iva0_g_e,s_iva_e,s_iva0_e","verifactu_map"
|
|
3
|
+
"verifactu_map_line_S2","S2","Operación Sujeta y No exenta - Con Inversión del sujeto pasivo","s_iva0_isp","verifactu_map"
|
|
4
|
+
"verifactu_map_line_N1","N1","Operación No Sujeta artículo 7, 14, otros.",,"verifactu_map"
|
|
5
|
+
"verifactu_map_line_N2","N2","Operación No Sujeta por Reglas de localización.","s_iva_ns_b,s_iva_ns","verifactu_map"
|
|
6
|
+
"verifactu_map_line_RE","RE","Recargo Equivalencia","s_req52,s_req014,s_req062,s_req1,s_req05,s_req026,s_req0","verifactu_map"
|
|
7
|
+
"verifactu_map_line_tax_not_included","TaxNotIncludedInTotal","Impuestos no incluidos en ImporteTotal","s_irpf1,s_irpf2,s_irpf7,s_irpf9,s_irpf15,s_irpf18,s_irpf19,s_irpf19a,s_irpf195a,s_irpf20,s_irpf20a,s_irpf21,s_irpf21a,s_irpf24,s_irpfnrnue24,s_irpfnrue19","verifactu_map"
|
|
8
|
+
"verifactu_map_line_base_not_included","BaseNotIncludedInTotal","Bases no incluidas en ImporteTotal","s_iva0_art22,s_iva0_art23,s_iva0_g_e,s_iva0_g_i,s_iva0_nsd,s_iva0_ns","verifactu_map"
|
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
# Copyright 2025 Tecnativa - Pedro M. Baeza
|
|
2
2
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
|
3
|
-
from odoo import
|
|
3
|
+
from odoo import tools
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
def pre_init_hook(
|
|
6
|
+
def pre_init_hook(env):
|
|
7
7
|
"""Avoid the heavy compute methods, specially when account.move table is very
|
|
8
8
|
populated, pre-creating the columns and filling them with sane defaultes. Some of it
|
|
9
9
|
is done on post-init hook.
|
|
10
10
|
WARNING: For special cases like IGIC or other, the default value doesn't serve.
|
|
11
11
|
"""
|
|
12
|
+
cr = env.cr
|
|
12
13
|
column_exists = tools.sql.column_exists
|
|
13
14
|
create_column = tools.sql.create_column
|
|
14
15
|
if not column_exists(cr, "account_move", "verifactu_refund_type"):
|
|
@@ -28,15 +29,14 @@ def pre_init_hook(cr):
|
|
|
28
29
|
)
|
|
29
30
|
|
|
30
31
|
|
|
31
|
-
def post_init_hook(
|
|
32
|
+
def post_init_hook(env):
|
|
32
33
|
"""Perform the initialization of this column once the registration keys have been
|
|
33
34
|
loaded.
|
|
34
35
|
WARNING: Only 01 case is covered here, so existing export/intra-community/other
|
|
35
36
|
invoices should be changed later.
|
|
36
37
|
"""
|
|
37
|
-
env = api.Environment(cr, SUPERUSER_ID, {})
|
|
38
38
|
key = env.ref("l10n_es_verifactu_oca.verifactu_registration_keys_01")
|
|
39
|
-
cr.execute(
|
|
39
|
+
env.cr.execute(
|
|
40
40
|
"UPDATE account_move SET verifactu_registration_key = %s "
|
|
41
41
|
"WHERE move_type = 'out_refund' AND verifactu_registration_key IS NULL",
|
|
42
42
|
(key.id,),
|
|
@@ -895,7 +895,7 @@ msgid "Previous Invoice Entry"
|
|
|
895
895
|
msgstr "Entrada de factura previa"
|
|
896
896
|
|
|
897
897
|
#. module: l10n_es_verifactu_oca
|
|
898
|
-
#: model_terms:ir.ui.view,arch_db:l10n_es_verifactu_oca.
|
|
898
|
+
#: model_terms:ir.ui.view,arch_db:l10n_es_verifactu_oca.report_invoice_document
|
|
899
899
|
msgid "QR Tributario"
|
|
900
900
|
msgstr "QR Tributario"
|
|
901
901
|
|
|
@@ -1193,8 +1193,8 @@ msgid "Unsupported search operator"
|
|
|
1193
1193
|
msgstr "Operador de búsqueda no soportado"
|
|
1194
1194
|
|
|
1195
1195
|
#. module: l10n_es_verifactu_oca
|
|
1196
|
-
#: model_terms:ir.ui.view,arch_db:l10n_es_verifactu_oca.address_layout
|
|
1197
1196
|
#: model_terms:ir.ui.view,arch_db:l10n_es_verifactu_oca.invoice_verifactu_form
|
|
1197
|
+
#: model_terms:ir.ui.view,arch_db:l10n_es_verifactu_oca.report_invoice_document
|
|
1198
1198
|
#: model_terms:ir.ui.view,arch_db:l10n_es_verifactu_oca.verifactu_tax_agency_form_view
|
|
1199
1199
|
#: model_terms:ir.ui.view,arch_db:l10n_es_verifactu_oca.view_account_position_form
|
|
1200
1200
|
#: model_terms:ir.ui.view,arch_db:l10n_es_verifactu_oca.view_company_verifactu_form
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
#
|
|
5
5
|
msgid ""
|
|
6
6
|
msgstr ""
|
|
7
|
-
"Project-Id-Version: Odoo Server
|
|
7
|
+
"Project-Id-Version: Odoo Server 17.0\n"
|
|
8
8
|
"Report-Msgid-Bugs-To: \n"
|
|
9
9
|
"Last-Translator: \n"
|
|
10
10
|
"Language-Team: \n"
|
|
@@ -125,6 +125,11 @@ msgstr ""
|
|
|
125
125
|
msgid "AEAT send state"
|
|
126
126
|
msgstr ""
|
|
127
127
|
|
|
128
|
+
#. module: l10n_es_verifactu_oca
|
|
129
|
+
#: model:ir.model,name:l10n_es_verifactu_oca.model_account_chart_template
|
|
130
|
+
msgid "Account Chart Template"
|
|
131
|
+
msgstr ""
|
|
132
|
+
|
|
128
133
|
#. module: l10n_es_verifactu_oca
|
|
129
134
|
#: model:ir.model,name:l10n_es_verifactu_oca.model_account_move_reversal
|
|
130
135
|
msgid "Account Move Reversal"
|
|
@@ -659,18 +664,6 @@ msgstr ""
|
|
|
659
664
|
msgid "Last Error Code"
|
|
660
665
|
msgstr ""
|
|
661
666
|
|
|
662
|
-
#. module: l10n_es_verifactu_oca
|
|
663
|
-
#: model:ir.model.fields,field_description:l10n_es_verifactu_oca.field_verifactu_chaining____last_update
|
|
664
|
-
#: model:ir.model.fields,field_description:l10n_es_verifactu_oca.field_verifactu_developer____last_update
|
|
665
|
-
#: model:ir.model.fields,field_description:l10n_es_verifactu_oca.field_verifactu_invoice_entry____last_update
|
|
666
|
-
#: model:ir.model.fields,field_description:l10n_es_verifactu_oca.field_verifactu_invoice_entry_response____last_update
|
|
667
|
-
#: model:ir.model.fields,field_description:l10n_es_verifactu_oca.field_verifactu_invoice_entry_response_line____last_update
|
|
668
|
-
#: model:ir.model.fields,field_description:l10n_es_verifactu_oca.field_verifactu_map____last_update
|
|
669
|
-
#: model:ir.model.fields,field_description:l10n_es_verifactu_oca.field_verifactu_map_line____last_update
|
|
670
|
-
#: model:ir.model.fields,field_description:l10n_es_verifactu_oca.field_verifactu_registration_key____last_update
|
|
671
|
-
msgid "Last Modified on"
|
|
672
|
-
msgstr ""
|
|
673
|
-
|
|
674
667
|
#. module: l10n_es_verifactu_oca
|
|
675
668
|
#: model:ir.model.fields,field_description:l10n_es_verifactu_oca.field_verifactu_invoice_entry__last_response_line_id
|
|
676
669
|
msgid "Last Response Line"
|
|
@@ -715,13 +708,6 @@ msgstr ""
|
|
|
715
708
|
msgid "Lock Posted Entries with Hash"
|
|
716
709
|
msgstr ""
|
|
717
710
|
|
|
718
|
-
#. module: l10n_es_verifactu_oca
|
|
719
|
-
#: model:ir.model.fields,field_description:l10n_es_verifactu_oca.field_verifactu_chaining__message_main_attachment_id
|
|
720
|
-
#: model:ir.model.fields,field_description:l10n_es_verifactu_oca.field_verifactu_developer__message_main_attachment_id
|
|
721
|
-
#: model:ir.model.fields,field_description:l10n_es_verifactu_oca.field_verifactu_invoice_entry_response__message_main_attachment_id
|
|
722
|
-
msgid "Main Attachment"
|
|
723
|
-
msgstr ""
|
|
724
|
-
|
|
725
711
|
#. module: l10n_es_verifactu_oca
|
|
726
712
|
#: model_terms:ir.ui.view,arch_db:l10n_es_verifactu_oca.verifactu_map_view_form
|
|
727
713
|
msgid "Mapping Lines"
|
|
@@ -999,7 +985,6 @@ msgstr ""
|
|
|
999
985
|
|
|
1000
986
|
#. module: l10n_es_verifactu_oca
|
|
1001
987
|
#: model:ir.actions.server,name:l10n_es_verifactu_oca.invoice_entry_send_to_verifactu_ir_actions_server
|
|
1002
|
-
#: model:ir.cron,cron_name:l10n_es_verifactu_oca.invoice_entry_send_to_verifactu
|
|
1003
988
|
msgid "Send invoices to VERI*FACTU"
|
|
1004
989
|
msgstr ""
|
|
1005
990
|
|
|
@@ -1062,8 +1047,8 @@ msgid "Tax key"
|
|
|
1062
1047
|
msgstr ""
|
|
1063
1048
|
|
|
1064
1049
|
#. module: l10n_es_verifactu_oca
|
|
1065
|
-
#: model:ir.model.fields,field_description:l10n_es_verifactu_oca.
|
|
1066
|
-
msgid "Taxes"
|
|
1050
|
+
#: model:ir.model.fields,field_description:l10n_es_verifactu_oca.field_verifactu_map_line__tax_xmlid_ids
|
|
1051
|
+
msgid "Taxes templates"
|
|
1067
1052
|
msgstr ""
|
|
1068
1053
|
|
|
1069
1054
|
#. module: l10n_es_verifactu_oca
|
|
@@ -1071,11 +1056,6 @@ msgstr ""
|
|
|
1071
1056
|
msgid "Technical"
|
|
1072
1057
|
msgstr ""
|
|
1073
1058
|
|
|
1074
|
-
#. module: l10n_es_verifactu_oca
|
|
1075
|
-
#: model:ir.model,name:l10n_es_verifactu_oca.model_account_fiscal_position_template
|
|
1076
|
-
msgid "Template for Fiscal Position"
|
|
1077
|
-
msgstr ""
|
|
1078
|
-
|
|
1079
1059
|
#. module: l10n_es_verifactu_oca
|
|
1080
1060
|
#: model_terms:ir.ui.view,arch_db:l10n_es_verifactu_oca.verifactu_tax_agency_form_view
|
|
1081
1061
|
msgid "Test Address"
|
|
@@ -1409,7 +1389,6 @@ msgstr ""
|
|
|
1409
1389
|
#: model:ir.model,name:l10n_es_verifactu_oca.model_verifactu_registration_key
|
|
1410
1390
|
#: model:ir.model.fields,field_description:l10n_es_verifactu_oca.field_account_bank_statement_line__verifactu_registration_key
|
|
1411
1391
|
#: model:ir.model.fields,field_description:l10n_es_verifactu_oca.field_account_fiscal_position__verifactu_registration_key
|
|
1412
|
-
#: model:ir.model.fields,field_description:l10n_es_verifactu_oca.field_account_fiscal_position_template__verifactu_registration_key
|
|
1413
1392
|
#: model:ir.model.fields,field_description:l10n_es_verifactu_oca.field_account_move__verifactu_registration_key
|
|
1414
1393
|
#: model:ir.model.fields,field_description:l10n_es_verifactu_oca.field_account_payment__verifactu_registration_key
|
|
1415
1394
|
#: model:ir.model.fields,field_description:l10n_es_verifactu_oca.field_verifactu_mixin__verifactu_registration_key
|
|
@@ -1490,7 +1469,6 @@ msgstr ""
|
|
|
1490
1469
|
#. module: l10n_es_verifactu_oca
|
|
1491
1470
|
#: model:ir.model.fields,field_description:l10n_es_verifactu_oca.field_account_bank_statement_line__verifactu_tax_key
|
|
1492
1471
|
#: model:ir.model.fields,field_description:l10n_es_verifactu_oca.field_account_fiscal_position__verifactu_tax_key
|
|
1493
|
-
#: model:ir.model.fields,field_description:l10n_es_verifactu_oca.field_account_fiscal_position_template__verifactu_tax_key
|
|
1494
1472
|
#: model:ir.model.fields,field_description:l10n_es_verifactu_oca.field_account_move__verifactu_tax_key
|
|
1495
1473
|
#: model:ir.model.fields,field_description:l10n_es_verifactu_oca.field_account_payment__verifactu_tax_key
|
|
1496
1474
|
#: model:ir.model.fields,field_description:l10n_es_verifactu_oca.field_verifactu_mixin__verifactu_tax_key
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
from . import account_chart_template
|
|
1
2
|
from . import account_journal
|
|
2
3
|
from . import res_company
|
|
3
4
|
from . import verifactu_mixin
|
|
@@ -5,7 +6,6 @@ from . import verifactu_invoice_entry
|
|
|
5
6
|
from . import account_move
|
|
6
7
|
from . import aeat_tax_agency
|
|
7
8
|
from . import account_fiscal_position
|
|
8
|
-
from . import account_fiscal_position_template
|
|
9
9
|
from . import res_partner
|
|
10
10
|
from . import verifactu_map
|
|
11
11
|
from . import verifactu_registration_key
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# Copyright 20254 Tecnativa - Pedro M. Baeza
|
|
2
|
+
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
|
3
|
+
from odoo import models
|
|
4
|
+
|
|
5
|
+
from odoo.addons.account.models.chart_template import template
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class AccountChartTemplate(models.AbstractModel):
|
|
9
|
+
_inherit = "account.chart.template"
|
|
10
|
+
|
|
11
|
+
@template("es_common", "account.fiscal.position")
|
|
12
|
+
def _get_es_facturae_account_tax(self):
|
|
13
|
+
return self._parse_csv(
|
|
14
|
+
"es_common", "account.fiscal.position", module="l10n_es_verifactu_oca"
|
|
15
|
+
)
|
|
@@ -273,12 +273,13 @@ class AccountMove(models.Model):
|
|
|
273
273
|
if self.last_verifactu_invoice_entry_id:
|
|
274
274
|
prev_entry = self.last_verifactu_invoice_entry_id.previous_invoice_entry_id
|
|
275
275
|
if prev_entry:
|
|
276
|
+
doc = prev_entry.document
|
|
276
277
|
return {
|
|
277
278
|
"RegistroAnterior": {
|
|
278
|
-
"IDEmisorFactura":
|
|
279
|
-
"NumSerieFactura":
|
|
280
|
-
"FechaExpedicionFactura":
|
|
281
|
-
|
|
279
|
+
"IDEmisorFactura": doc._get_verifactu_issuer(),
|
|
280
|
+
"NumSerieFactura": doc._get_document_serial_number(),
|
|
281
|
+
"FechaExpedicionFactura": doc._get_verifactu_date(
|
|
282
|
+
doc._get_document_date()
|
|
282
283
|
),
|
|
283
284
|
"Huella": prev_entry.document_hash,
|
|
284
285
|
}
|
|
@@ -505,8 +506,11 @@ class AccountMove(models.Model):
|
|
|
505
506
|
if not (tax_lines := self._get_aeat_tax_info()):
|
|
506
507
|
return False
|
|
507
508
|
verifactu_map = self._get_verifactu_map(self._get_document_date())
|
|
508
|
-
tax_templates = verifactu_map.map_lines.
|
|
509
|
-
mapped_taxes = self.
|
|
509
|
+
tax_templates = verifactu_map.map_lines.tax_xmlid_ids
|
|
510
|
+
mapped_taxes = self.env["account.tax"]
|
|
511
|
+
for template in tax_templates:
|
|
512
|
+
tax_id = self.company_id._get_tax_id_from_xmlid(template.name)
|
|
513
|
+
mapped_taxes |= self.env["account.tax"].browse(tax_id)
|
|
510
514
|
for tax_line in tax_lines.values():
|
|
511
515
|
if tax_line["tax"] not in mapped_taxes:
|
|
512
516
|
return False
|
|
@@ -135,7 +135,8 @@ class VerifactuInvoiceEntry(models.Model):
|
|
|
135
135
|
threshold_time = send_date - datetime.timedelta(seconds=240)
|
|
136
136
|
# Look for documents where we have to send as an incident
|
|
137
137
|
outdated_records = records_to_send.filtered(
|
|
138
|
-
lambda r: r.document.verifactu_registration_date
|
|
138
|
+
lambda r, t=threshold_time: r.document.verifactu_registration_date
|
|
139
|
+
< t
|
|
139
140
|
)
|
|
140
141
|
current_records = records_to_send - outdated_records
|
|
141
142
|
outdated_records.with_context(
|
|
@@ -247,7 +248,8 @@ class VerifactuInvoiceEntry(models.Model):
|
|
|
247
248
|
estado_registro = "Correcto"
|
|
248
249
|
response_line.send_state = "correct"
|
|
249
250
|
elif registroDuplicado["CodigoErrorRegistro"]:
|
|
250
|
-
# en duplicados devuelve AceptadaConErrores en vez de
|
|
251
|
+
# en duplicados devuelve AceptadaConErrores en vez de
|
|
252
|
+
# AceptadoConErrores...
|
|
251
253
|
if estado_registro == "AceptadaConErrores":
|
|
252
254
|
estado_registro = "AceptadoConErrores"
|
|
253
255
|
response_line.send_state = "accepted_with_errors"
|
|
@@ -60,7 +60,9 @@ class AeatVerifactuMapLines(models.Model):
|
|
|
60
60
|
|
|
61
61
|
code = fields.Char(required=True)
|
|
62
62
|
name = fields.Char()
|
|
63
|
-
|
|
63
|
+
tax_xmlid_ids = fields.Many2many(
|
|
64
|
+
comodel_name="l10n.es.aeat.map.tax.line.tax", string="Taxes templates"
|
|
65
|
+
)
|
|
64
66
|
verifactu_map_id = fields.Many2one(
|
|
65
67
|
comodel_name="verifactu.map", string="Parent mapping", ondelete="cascade"
|
|
66
68
|
)
|
|
@@ -140,7 +140,7 @@ class VerifactuMixin(models.AbstractModel):
|
|
|
140
140
|
def _compute_verifactu_qr_url(self):
|
|
141
141
|
"""Returns the URL to be used in the QR code. A sample URL would be (urlencoded):
|
|
142
142
|
https://prewww2.aeat.es/wlpl/TIKECONT/ValidarQR?nif=89890001K&numserie=12345678%26G33&fecha=01-01-2024&importe=241.4
|
|
143
|
-
""" # noqa:
|
|
143
|
+
""" # noqa: E501
|
|
144
144
|
for record in self:
|
|
145
145
|
# FIXME: Not be hard-coded
|
|
146
146
|
agency = self.env.ref("l10n_es_aeat.aeat_tax_agency_spain")
|
|
@@ -269,7 +269,7 @@ class VerifactuMixin(models.AbstractModel):
|
|
|
269
269
|
raise NotImplementedError
|
|
270
270
|
|
|
271
271
|
def _aeat_check_exceptions(self):
|
|
272
|
-
"""Inheritable method for
|
|
272
|
+
"""Inheritable method for exception control when sending VERI*FACTU invoices."""
|
|
273
273
|
res = super()._aeat_check_exceptions()
|
|
274
274
|
if self.company_id.verifactu_enabled and not self.verifactu_enabled:
|
|
275
275
|
raise UserError(_("This invoice is not VERI*FACTU enabled."))
|
|
@@ -418,8 +418,12 @@ class VerifactuMixin(models.AbstractModel):
|
|
|
418
418
|
verifactu_map = self._get_verifactu_map(date)
|
|
419
419
|
tax_templates = verifactu_map.map_lines.filtered(
|
|
420
420
|
lambda x: x.code in codes
|
|
421
|
-
).
|
|
422
|
-
|
|
421
|
+
).tax_xmlid_ids
|
|
422
|
+
mapped_taxes = self.env["account.tax"]
|
|
423
|
+
for template in tax_templates:
|
|
424
|
+
tax_id = self.company_id._get_tax_id_from_xmlid(template.name)
|
|
425
|
+
mapped_taxes |= self.env["account.tax"].browse(tax_id)
|
|
426
|
+
return mapped_taxes
|
|
423
427
|
|
|
424
428
|
def _raise_exception_verifactu(self, field_name):
|
|
425
429
|
raise UserError(
|
|
@@ -16,8 +16,10 @@ class AeatVerifactuMappingRegistrationKeys(models.Model):
|
|
|
16
16
|
required=True,
|
|
17
17
|
)
|
|
18
18
|
|
|
19
|
-
|
|
20
|
-
|
|
19
|
+
@api.depends("name", "code")
|
|
20
|
+
def _compute_display_name(self):
|
|
21
|
+
for record in self:
|
|
22
|
+
record.display_name = f"[{record.code}]-{record.name}"
|
|
21
23
|
|
|
22
24
|
@api.model
|
|
23
25
|
def _get_verifactu_tax_keys(self):
|