Skip to content

Commit

Permalink
Envío de facturas a verifactu (#61)
Browse files Browse the repository at this point in the history
* Primera versión funcional de envío de facturas a verifactu
  • Loading branch information
almumu authored Nov 7, 2024
1 parent 91fd8d5 commit 92bd439
Show file tree
Hide file tree
Showing 38 changed files with 1,837 additions and 108 deletions.
71 changes: 66 additions & 5 deletions l10n_es_aeat_verifactu/README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -35,14 +35,74 @@ Módulo para la presentación inmediata de la facturación.
.. contents::
:local:

Installation
============

Para instalar esté módulo necesita:

#. Libreria Python Zeep, se puede instalar con el comando 'pip install zeep'
#. Libreria Python Requests, se puede instalar con el comando 'pip install requests'

y el módulo `queue_job` que se encuentra en:

https://github.com/OCA/queue

Configuration
=============

Para configurar este módulo es necesario:

#. En la compañia se almacenan las URLs del servicio SOAP de hacienda.
Estas URLs pueden cambiar según comunidades
#. Los certificados deben alojarse en una carpeta accesible por la instalación
de Odoo.
#. Preparar el certificado. El certificado enviado por la FMNT es en formato
p12, este certificado no se puede usar directamente con Zeep. Se tiene que
extraer la clave pública y la clave privada.

En Linux se pueden usar los siguientes comandos:

- Clave pública: "openssl pkcs12 -in Certificado.p12 -nokeys -out publicCert.crt -nodes"
- Clave privada: "openssl pkcs12 -in Certifcado.p12 -nocerts -out privateKey.pem -nodes"

Además, el módulo `queue_job` necesita estar configurado de una de estas formas:

#. Ajustando variables de entorno:

ODOO_QUEUE_JOB_CHANNELS=root:4

u otro canal de configuración. Por defecto es root:1

Si xmlrpc_port no está definido: ODOO_QUEUE_JOB_PORT=8069

#. Otra alternativa es usuando un fichero de configuración:

[options]
(...)
workers = 4
server_wide_modules = web,base_sparse_field,queue_job

(...)
[queue_job]
channels = root:4

#. Por último, arrancando Odoo con --load=web,base_sparse_field,queue_job y --workers más grande que 1.

Más información http://odoo-connector.com

#. Establecer en las posiciones fiscales la clave de impuestos y la clave de registro verifactu.

Known issues / Roadmap
======================

* Refactorización SII en l10n_es_aeat
* Creación documento a enviar a Veri*FACTU
* Creación cabecera Veri*FACTU
* Conexión WSDL
* Queue + Encadenamiento
* Refactorización SII-Verifactu en l10n_es_aeat cuando estén todos los procesos claros
* Envío de Facturas simplificadas, exentas, a terceros..
* Encadenamiento, obtener factura anterior y almacenamiento del hash inalterable.
* Datas de mapeos de impuestos, ya hay algunos.
* Datos reales del desarrollador del sistema informático.
* Envío con Queue.
* Modificación de facturas enviadas.
* Anulación de facturas enviadas.

Bug Tracker
===========
Expand All @@ -67,6 +127,7 @@ Contributors
~~~~~~~~~~~~

* Jose Zambudio <[email protected]>
* Almudena de La Puente <[email protected]>
* Laura Cazorla <[email protected]>
* Andreu Orensanz <[email protected]>

Expand Down
1 change: 1 addition & 0 deletions l10n_es_aeat_verifactu/__init__.py
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
from . import models
from . import wizards
15 changes: 11 additions & 4 deletions l10n_es_aeat_verifactu/__manifest__.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,19 +11,26 @@
"license": "AGPL-3",
"application": False,
"installable": True,
# "external_dependencies": {"python": ["zeep", "requests"]},
"external_dependencies": {"python": ["zeep", "requests"]},
"depends": [
"l10n_es",
"l10n_es_aeat",
# "queue_job",
"account_invoice_refund_link",
"queue_job",
],
"data": [
"data/aeat_sii_tax_agency_data.xml",
"data/aeat_verifactu_tax_agency_data.xml",
"data/aeat_verifactu_registration_keys.xml",
"data/aeat_verifactu_map_data.xml",
"security/ir.model.access.csv",
"views/aeat_tax_agency_view.xml",
"views/account_move_view.xml",
"views/account_fiscal_position_view.xml",
"views/res_company_view.xml",
"views/res_partner_view.xml",
"views/account_journal_views.xml",
"views/account_journal_view.xml",
"views/aeat_verifactu_map_view.xml",
"views/aeat_verifactu_map_lines_view.xml",
"views/aeat_verifactu_registration_keys_view.xml",
],
}
79 changes: 79 additions & 0 deletions l10n_es_aeat_verifactu/data/aeat_verifactu_map_data.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!-- Copyright 2024 Almudena de La Puente <[email protected]>
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -->
<odoo>
<record id="aeat_verifactu_map" model="aeat.verifactu.map">
<field name="name">Verifactu</field>
</record>
<record id="aeat_verifactu_map_line_S1" model="aeat.verifactu.map.lines">
<field name="code">S1</field>
<field
name="taxes"
eval="[(6, 0, [
ref('l10n_es.account_tax_template_s_iva21b'),
ref('l10n_es.account_tax_template_s_iva0b'),
ref('l10n_es.account_tax_template_s_iva2b'),
ref('l10n_es.account_tax_template_s_iva4b'),
ref('l10n_es.account_tax_template_s_iva5b'),
ref('l10n_es.account_tax_template_s_iva7-5b'),
ref('l10n_es.account_tax_template_s_iva10b'),
ref('l10n_es.account_tax_template_s_iva21s'),
ref('l10n_es.account_tax_template_s_iva10s'),
ref('l10n_es.account_tax_template_s_iva0s'),
ref('l10n_es.account_tax_template_s_iva2s'),
ref('l10n_es.account_tax_template_s_iva4s'),
ref('l10n_es.account_tax_template_s_iva5s'),
ref('l10n_es.account_tax_template_s_iva7-5s'),
])]"
/>
<field name="verifactu_map_id" ref="aeat_verifactu_map" />
<field
name="name"
>Operación Sujeta y No exenta - Sin inversión del sujeto pasivo.</field>
</record>
<record id="aeat_verifactu_map_line_S2" model="aeat.verifactu.map.lines">
<field name="code">S2</field>
<field
name="taxes"
eval="[(6, 0, [
ref('l10n_es.account_tax_template_s_iva0_isp'),
])]"
/>
<field name="verifactu_map_id" ref="aeat_verifactu_map" />
<field
name="name"
>Operación Sujeta y No exenta - Con Inversión del sujeto pasivo</field>
</record>
<record id="aeat_verifactu_map_line_N1" model="aeat.verifactu.map.lines">
<field name="code">N1</field>
<field name="taxes" eval="[(6, 0, [])]" />
<field name="verifactu_map_id" ref="aeat_verifactu_map" />
<field name="name">Operación No Sujeta artículo 7, 14, otros.</field>
</record>

<record id="aeat_verifactu_map_line_N2" model="aeat.verifactu.map.lines">
<field name="code">N2</field>
<field name="taxes" eval="[(6, 0, [])]" />
<field name="verifactu_map_id" ref="aeat_verifactu_map" />
<field name="name">Operación No Sujeta por Reglas de localización.</field>
</record>

<record id="aeat_verifactu_map_line_RE" model="aeat.verifactu.map.lines">
<field name="code">RE</field>
<field
name="taxes"
eval="[(6, 0, [
ref('l10n_es.account_tax_template_s_req52'),
ref('l10n_es.account_tax_template_s_req014'),
ref('l10n_es.account_tax_template_s_req062'),
ref('l10n_es.account_tax_template_s_req1'),
ref('l10n_es.account_tax_template_s_req05'),
ref('l10n_es.account_tax_template_s_req026'),
ref('l10n_es.account_tax_template_s_req0'),
])]"
/>
<field name="verifactu_map_id" ref="aeat_verifactu_map" />
<field name="name">Recargo Equivalencia</field>
</record>

</odoo>
Loading

0 comments on commit 92bd439

Please sign in to comment.