odoo-addon-l10n-es-verifactu-oca 16.0.1.0.4__py3-none-any.whl → 17.0.1.0.0.2__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.

Files changed (47) hide show
  1. odoo/addons/l10n_es_verifactu_oca/README.rst +99 -60
  2. odoo/addons/l10n_es_verifactu_oca/__manifest__.py +4 -4
  3. odoo/addons/l10n_es_verifactu_oca/data/l10n.es.aeat.map.tax.line.tax.csv +50 -0
  4. odoo/addons/l10n_es_verifactu_oca/data/template/account.fiscal.position-es_common.csv +27 -0
  5. odoo/addons/l10n_es_verifactu_oca/data/verifactu.map.csv +2 -0
  6. odoo/addons/l10n_es_verifactu_oca/data/verifactu.map.line.csv +8 -0
  7. odoo/addons/l10n_es_verifactu_oca/hooks.py +5 -5
  8. odoo/addons/l10n_es_verifactu_oca/i18n/es.po +2 -2
  9. odoo/addons/l10n_es_verifactu_oca/i18n/l10n_es_verifactu_oca.pot +8 -30
  10. odoo/addons/l10n_es_verifactu_oca/models/__init__.py +1 -1
  11. odoo/addons/l10n_es_verifactu_oca/models/account_chart_template.py +15 -0
  12. odoo/addons/l10n_es_verifactu_oca/models/account_move.py +10 -6
  13. odoo/addons/l10n_es_verifactu_oca/models/verifactu_invoice_entry.py +4 -2
  14. odoo/addons/l10n_es_verifactu_oca/models/verifactu_map.py +3 -1
  15. odoo/addons/l10n_es_verifactu_oca/models/verifactu_mixin.py +8 -4
  16. odoo/addons/l10n_es_verifactu_oca/models/verifactu_registration_key.py +4 -2
  17. odoo/addons/l10n_es_verifactu_oca/readme/CONFIGURE.md +27 -0
  18. odoo/addons/l10n_es_verifactu_oca/readme/CONTRIBUTORS.md +16 -0
  19. odoo/addons/l10n_es_verifactu_oca/readme/INSTALL.md +6 -0
  20. odoo/addons/l10n_es_verifactu_oca/readme/ROADMAP.md +30 -0
  21. odoo/addons/l10n_es_verifactu_oca/readme/USAGE.md +3 -0
  22. odoo/addons/l10n_es_verifactu_oca/static/description/index.html +88 -47
  23. odoo/addons/l10n_es_verifactu_oca/tests/common.py +9 -8
  24. odoo/addons/l10n_es_verifactu_oca/tests/test_10n_es_verifactu.py +9 -11
  25. odoo/addons/l10n_es_verifactu_oca/views/account_fiscal_position_view.xml +1 -1
  26. odoo/addons/l10n_es_verifactu_oca/views/account_journal_view.xml +2 -4
  27. odoo/addons/l10n_es_verifactu_oca/views/account_move_view.xml +14 -10
  28. odoo/addons/l10n_es_verifactu_oca/views/report_invoice.xml +2 -5
  29. odoo/addons/l10n_es_verifactu_oca/views/res_company_view.xml +5 -5
  30. odoo/addons/l10n_es_verifactu_oca/views/verifactu_map_lines_view.xml +4 -7
  31. odoo_addon_l10n_es_verifactu_oca-17.0.1.0.0.2.dist-info/METADATA +208 -0
  32. {odoo_addon_l10n_es_verifactu_oca-16.0.1.0.4.dist-info → odoo_addon_l10n_es_verifactu_oca-17.0.1.0.0.2.dist-info}/RECORD +35 -35
  33. {odoo_addon_l10n_es_verifactu_oca-16.0.1.0.4.dist-info → odoo_addon_l10n_es_verifactu_oca-17.0.1.0.0.2.dist-info}/WHEEL +1 -1
  34. odoo_addon_l10n_es_verifactu_oca-17.0.1.0.0.2.dist-info/top_level.txt +1 -0
  35. odoo/addons/l10n_es_verifactu_oca/data/account_fiscal_position_template_data.xml +0 -149
  36. odoo/addons/l10n_es_verifactu_oca/data/verifactu_map_data.xml +0 -128
  37. odoo/addons/l10n_es_verifactu_oca/i18n/ca.po +0 -1632
  38. odoo/addons/l10n_es_verifactu_oca/i18n/ca_ES.po +0 -1600
  39. odoo/addons/l10n_es_verifactu_oca/models/account_fiscal_position_template.py +0 -18
  40. odoo/addons/l10n_es_verifactu_oca/readme/CONFIGURE.rst +0 -18
  41. odoo/addons/l10n_es_verifactu_oca/readme/CONTRIBUTORS.rst +0 -16
  42. odoo/addons/l10n_es_verifactu_oca/readme/INSTALL.rst +0 -4
  43. odoo/addons/l10n_es_verifactu_oca/readme/ROADMAP.rst +0 -15
  44. odoo/addons/l10n_es_verifactu_oca/readme/USAGE.rst +0 -1
  45. odoo_addon_l10n_es_verifactu_oca-16.0.1.0.4.dist-info/METADATA +0 -168
  46. odoo_addon_l10n_es_verifactu_oca-16.0.1.0.4.dist-info/top_level.txt +0 -1
  47. /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:6f6e5993677f649553405dd1eea25c40e52c5d716ba99ae00af616351b9b8db5
14
+ !! source digest: sha256:795eac0db1a85a0c23494d68389dc639f450d16693e6640ee5b9659bd0387183
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/16.0/l10n_es_verifactu_oca
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-16-0/l10n-spain-16-0-l10n_es_verifactu_oca
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=16.0
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
- #. Libreria Python Zeep, se puede instalar con el comando 'pip install zeep'
48
- #. Libreria Python Requests, se puede instalar con el comando 'pip install requests'
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
- #. Acceder a Facturación/Contabilidad -> Configuración -> AEAT -> Agencia Tributaria, podrás consultar las URLs del servicio SOAP de Hacienda.
56
- Estas URLs pueden cambiar según comunidades
57
- #. El certificado enviado por la FMNT es en formato p12, este certificado no se puede usar directamente con Zeep.
58
- Accede a Facturación/Contabilidad -> Configuración -> AEAT -> Certificados AEAT, y allí podrás:
59
- Subir el certificado p12 y extraer las claves públicas y privadas con el botón "Obtener claves"
60
- #. Debes tener en cuenta que los certificados se alojan en una carpeta accesible por la instalación de Odoo.
61
- #. Completar los datos de desarrollador y del encadenamiento a nivel de compañía en la pestaña de VERI*FACTU.
62
-
63
- En caso de que la obtención de claves no funcione y uses Linux, cuentas con los siguientes comandos para tratar de solucionarlo:
64
-
65
- - Clave pública: "openssl pkcs12 -in Certificado.p12 -nokeys -out publicCert.crt -nodes"
66
- - Clave privada: "openssl pkcs12 -in Certificado.p12 -nocerts -out privateKey.pem -nodes"
67
-
68
- #. Establecer en las posiciones fiscales la clave de impuestos y la clave de registro VERI*FACTU.
69
- #. Para aplicar las claves ejecute el asistente de actualización del módulo account_chart_update.
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 envío para verifactu. Cada minuto se enviarán todos aquellos registros pendientes de enviar mediante un cron.
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
- * Refactorización SII-VERI*FACTU en l10n_es_aeat de los métodos que sean comunes.
81
- * Envío separado de la confirmación de la factura (cron.trigger/queque.job)
82
- * Control de errores del sistema, generar avisos. (caída de aeat, errores de conexión, etc.)
83
- * Declaración responsable. https://sede.agenciatributaria.gob.es/Sede/iva/sistemas-informaticos-facturacion-verifactu/preguntas-frecuentes/certificacion-sistemas-informaticos-declaracion-responsable.html?faqId=a15d77fe52572910VgnVCM100000dc381e0aRCRD
84
- * Posibilidad de consultar el estado de las facturas enviadas.
85
- * Operaciones exentas y causas de exención.
86
- * Crear un selection con todos los valores posibles de codigos de error, para poder guardarlo y agrupar las facturas por ese código.
87
- * Contemplar el tiempo de espera entre envíos de registros cuando AEAT devuelve un tiempo superior a 60 segundos.
88
-
89
- CASOS NO CUBIERTOS:
90
- 1 - Modificación de facturas enviadas (AEAT recomienda generar rectificativa).
91
- Según AEAT: Si los errores detectados tras la emisión NO están contemplados en el ROF, pero afectan a campos del registro de facturación (RF) generado al emitir la factura (que, digamos, “no se ven” en la factura impresa, es decir, son campos “internos”, como ciertas codificaciones tributarias), se debe corregir la factura original (esos datos “internos” de la misma) y se debe generar un RF de alta de
92
- subsanación de esa factura donde conste ya la nueva información que proceda. Estos casos deberían ser MUY POCO FRECUENTES.
93
- 2 - Anulación de facturas enviadas (AEAT recomienda generar rectificativa).
94
- Según AEAT: "Si se considera que "toda la factura" en sí misma está mal o no debería haberse emitido, siempre que para solucionarlo no deba emplearse algún procedimiento (de rectificativa u otro) previsto en el ROF, se podrá "anular" generando para ello un RF de anulación. Estos casos deberían ser MUY POCO FRECUENTES."
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:%2016.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
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
- * Aures TIC:
120
- * Jose Zambudio
121
- * Almudena de La Puente
122
- * Anna Martínez
123
- * ForgeFlow S.L.:
124
- * Laura Cazorla
125
- * Andreu Orensanz
126
- * Jordi Ballester
127
- * Ozono multimedia:
128
- * Iván Antón
129
- * SDi:
130
- * Fernando La Chica
131
- * Process control:
132
- * Jorge Luis López
133
- * Tecnativa:
134
- * Pedro M. Baeza
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/16.0/l10n_es_verifactu_oca>`_ project on GitHub.
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": "16.0.1.0.4",
10
+ "version": "17.0.1.0.0",
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/account_fiscal_position_template_data.xml",
21
- "data/verifactu_map_data.xml",
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",
@@ -36,7 +37,6 @@
36
37
  "views/verifactu_invoice_entry_view.xml",
37
38
  "views/verifactu_chaining_view.xml",
38
39
  "views/verifactu_developer_view.xml",
39
- "views/account_move_view.xml",
40
40
  "views/report_invoice.xml",
41
41
  "views/verifactu_invoice_entry_response_view.xml",
42
42
  ],
@@ -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,2 @@
1
+ id,name
2
+ "verifactu_map","VERI*FACTU 1.0"
@@ -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 SUPERUSER_ID, api, tools
3
+ from odoo import tools
4
4
 
5
5
 
6
- def pre_init_hook(cr):
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(cr, registry):
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.address_layout
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 16.0\n"
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.field_verifactu_map_line__taxes
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": prev_entry.document._get_verifactu_issuer(),
279
- "NumSerieFactura": prev_entry.document._get_document_serial_number(),
280
- "FechaExpedicionFactura": prev_entry.document._get_verifactu_date(
281
- prev_entry.document._get_document_date()
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.taxes
509
- mapped_taxes = self.company_id.get_taxes_from_templates(tax_templates)
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 < threshold_time
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 AceptadoConErrores...
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
- taxes = fields.Many2many(comodel_name="account.tax.template")
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: B950
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 exceptions control when sending VERI*FACTU invoices."""
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
- ).taxes
422
- return self.company_id.get_taxes_from_templates(tax_templates)
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(