Skip to content

Commit

Permalink
[MIG]l10n_es_aeat_sii_oca: continuacion
Browse files Browse the repository at this point in the history
  • Loading branch information
manuelregidor committed Sep 16, 2024
1 parent 8719472 commit d68b363
Show file tree
Hide file tree
Showing 15 changed files with 110 additions and 180 deletions.
24 changes: 1 addition & 23 deletions l10n_es_aeat_sii_oca/README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -70,29 +70,6 @@ En Linux se pueden usar los siguientes comandos:
- 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:

1. 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

2. 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

3. 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

Usage
=====

Expand Down Expand Up @@ -159,6 +136,7 @@ Contributors
- `Sygel <https://www.sygel.es>`__:

- Valentin Vinagre
- Manuel Regidor

- `Tecnativa <https://www.tecnativa.com>`__:

Expand Down
3 changes: 1 addition & 2 deletions l10n_es_aeat_sii_oca/__manifest__.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,6 @@
"external_dependencies": {"python": ["zeep", "requests"]},
"depends": [
"account_invoice_refund_link",
"l10n_es",
"l10n_es_aeat",
],
"data": [
Expand All @@ -59,7 +58,7 @@
"security/ir.model.access.csv",
"security/aeat_sii.xml",
"views/product_view.xml",
"views/ir_cron_tigger_views.xml",
"views/ir_cron_trigger_views.xml",
"views/account_fiscal_position_view.xml",
"views/res_partner_views.xml",
"views/aeat_tax_agency_view.xml",
Expand Down
12 changes: 5 additions & 7 deletions l10n_es_aeat_sii_oca/data/ir_config_parameter_data.xml
Original file line number Diff line number Diff line change
@@ -1,11 +1,9 @@
<?xml version="1.0" encoding="utf-8" ?>
<!-- Copyright 2024 Manuel Regidor <manuel.regidor@sygel.es>
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -->
<odoo>
<data noupdate="1">
<record id="sii_batch" model="ir.config_parameter">
<field name="key">l10n_es_aeat_sii_oca.sii_batch</field>
<field name="value">50</field>
</record>
</data>
<odoo noupdate="1">
<record id="sii_batch" model="ir.config_parameter">
<field name="key">l10n_es_aeat_sii_oca.sii_batch</field>
<field name="value">50</field>
</record>
</odoo>
25 changes: 0 additions & 25 deletions l10n_es_aeat_sii_oca/data/l10n.es.aeat.map.tax.line.tax.csv
Original file line number Diff line number Diff line change
Expand Up @@ -64,15 +64,6 @@ p_iva10_sp_ex,account_tax_template_p_iva10_sp_ex
p_iva5_isc,account_tax_template_p_iva5_isc
p_iva4_sp_ex,account_tax_template_p_iva4_sp_ex
p_iva0_isc,account_tax_template_p_iva0_isc
p_iva4_bi,account_tax_template_p_iva4_bi
p_iva10_bi,account_tax_template_p_iva10_bi
p_iva21_bi,account_tax_template_p_iva21_bi
p_iva21_isp_bi,account_tax_template_p_iva21_isp_bi
p_iva10_isp_bi,account_tax_template_p_iva10_isp_bi
p_iva4_isp_bi,account_tax_template_p_iva4_isp_bi
p_iva4_ic_bi,account_tax_template_p_iva4_ic_bi
p_iva10_ic_bi,account_tax_template_p_iva10_ic_bi
p_iva21_ic_bi,account_tax_template_p_iva21_ic_bi
p_iva0_ns,account_tax_template_p_iva0_ns
p_iva0_ns_b,account_tax_template_p_iva0_ns_b
p_req52,account_tax_template_p_req52
Expand Down Expand Up @@ -121,20 +112,4 @@ p_irpf21td,account_tax_template_p_irpf21td
p_irpf21te,account_tax_template_p_irpf21te
s_irpf24,account_tax_template_s_irpf24
p_irpf24,account_tax_template_p_irpf24
p_iva21_sp_ex,account_tax_template_p_iva21_sp_ex
p_iva10_sp_ex,account_tax_template_p_iva10_sp_ex
p_iva5_isc,account_tax_template_p_iva5_isc
p_iva4_sp_ex,account_tax_template_p_iva4_sp_ex
p_iva0_isc,account_tax_template_p_iva0_isc
p_iva4_sp_in,account_tax_template_p_iva4_sp_in
p_iva10_sp_in,account_tax_template_p_iva10_sp_in
p_iva21_sp_in,account_tax_template_p_iva21_sp_in
p_iva0_ic_bc,account_tax_template_p_iva0_ic_bc
p_iva4_ic_bc,account_tax_template_p_iva4_ic_bc
p_iva5_ic_bc,account_tax_template_p_iva5_ic_bc
p_iva10_ic_bc,account_tax_template_p_iva10_ic_bc
p_iva21_ic_bc,account_tax_template_p_iva21_ic_bc
p_iva4_ic_bi,account_tax_template_p_iva4_ic_bi
p_iva10_ic_bi,account_tax_template_p_iva10_ic_bi
p_iva21_ic_bi,account_tax_template_p_iva21_ic_bi
s_iva0_ns,account_tax_template_s_iva0_ns
39 changes: 22 additions & 17 deletions l10n_es_aeat_sii_oca/models/account_move.py
Original file line number Diff line number Diff line change
Expand Up @@ -678,7 +678,7 @@ def cancel_sii(self):
raise exceptions.UserError(
_(
"You can not communicate the cancellation of this invoice "
"at this moment because there is a cron running!"
"at this moment. Please, try again later."
)
)
for invoice in invoices:
Expand All @@ -697,7 +697,7 @@ def cancel_sii(self):
def button_cancel(self):
if not self._cancel_sii_triggers():
raise exceptions.UserError(
_("You can not cancel this invoice because there is a cron running!")
_("You cannot cancel this invoice. Please, try again later.")
)
res = super().button_cancel()
for invoice in self.filtered(lambda x: x.sii_enabled):
Expand All @@ -714,7 +714,7 @@ def button_draft(self):
raise exceptions.UserError(
_(
"You can not set to draft this invoice because"
" there is a cron running!"
" the SII cron could not be cancelled."
)
)
return super().button_draft()
Expand Down Expand Up @@ -794,7 +794,7 @@ def _reverse_moves(self, default_values_list=None, cancel=False):
# OVERRIDE
if not default_values_list:
default_values_list = [{} for move in self]
for move, default_values in zip(self, default_values_list):
for move, default_values in zip(self, default_values_list, strict=False):
if move.sii_enabled:
extra_dict = {}
sii_refund_type = self.env.context.get("sii_refund_type", False)
Expand All @@ -818,20 +818,13 @@ def cancel_one_invoice(self):

@api.model
def _send_to_sii(self):
batch = (
self.env["ir.config_parameter"]
.sudo()
.get_param("l10n_es_aeat_sii_oca.sii_batch")
)
if batch:
batch = int(batch)
documents = all_documents = self.search(
[
("state", "in", self._get_valid_document_states()),
(
"sii_state",
"in",
["not_sent", "sent_modified", "cancelled_modified"],
"not in",
["sent", "cancelled"],
),
("sii_send_date", "<=", fields.Datetime.now()),
]
Expand All @@ -840,14 +833,26 @@ def _send_to_sii(self):
cron_trigger_obj = self.env["ir.cron.trigger"].sudo()
sii_send_cron = self.env.ref("l10n_es_aeat_sii_oca.invoice_send_to_sii")
remaining_documents = False
batch = (
self.env["ir.config_parameter"]
.sudo()
.get_param("l10n_es_aeat_sii_oca.sii_batch")
)
if batch:
try:
batch = int(batch)
except ValueError as e:
raise exceptions.UserError(
_(
"The value in l10n_es_aeat_sii_oca.sii_batch system"
" parameter must be an integer. Please, check the "
"value of the parameter."
)
) from e
if batch:
documents = all_documents[:batch]
remaining_documents = all_documents - documents
documents.confirm_one_document()
logging.warning("documents")
logging.warning(documents)
logging.warning("remaining_documents")
logging.warning(remaining_documents)
for document in remaining_documents:
trigger = cron_trigger_obj.create(
{"cron_id": sii_send_cron.id, "call_at": datetime.now()}
Expand Down
11 changes: 8 additions & 3 deletions l10n_es_aeat_sii_oca/models/ir_cron_trigger.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,11 @@ def cancel_now(self):
documents.write({"sii_send_date": False})
self.sudo().unlink()

# ESTO NO PARECE EXISTIR EN queue.job
def requeue_sudo(self):
self.sudo().requeue()
def reschedule_sudo(self):
documents = self.env["account.move"].search(
[("invoice_cron_trigger_ids", "in", self.ids)]
)
for document in documents:
document.write(
{"sii_send_date": document.company_id._get_sii_sending_time()}
)
2 changes: 0 additions & 2 deletions l10n_es_aeat_sii_oca/models/res_company.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
# Copyright 2018 Javi Melendez <javimelex@gmail.com>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).

import logging
from datetime import datetime, timedelta

import pytz
Expand Down Expand Up @@ -85,7 +84,6 @@ def _get_sii_sending_time(self):
if now.hour > hour or (now.hour == hour and now.minute > minute):
now += timedelta(days=1)
now = now.replace(hour=hour, minute=minute)
logging.warning(now)
return now
elif self.send_mode == "delayed":
return datetime.now() + timedelta(seconds=self.delay_time * 3600)
Expand Down
21 changes: 13 additions & 8 deletions l10n_es_aeat_sii_oca/models/sii_mixin.py
Original file line number Diff line number Diff line change
Expand Up @@ -192,11 +192,12 @@ def _compute_sii_registration_key(self):
@api.depends("sii_registration_key")
def _compute_sii_registration_key_code(self):
"""
Para evitar tiempos de instalación largos en BBDD grandes, es necesario que
sólo dependa de sii_registration_key, ya que en caso de añadirlo odoo buscará
todos los movimientos y cuando escribamos el key, aunque sea un campo no almacenado
A partir de v16.0 este cambio ya no es necesario, ya que el sistema ya revisa que el
campo sea almacenado o que este visualizandose (en caché)
Para evitar tiempos de instalación largos en BBDD grandes, es necesario
que sólo dependa de sii_registration_key, ya que en caso de añadirlo
odoo buscará todos los movimientos y cuando escribamos el key, aunque
sea un campo no almacenado
A partir de v16.0 este cambio ya no es necesario, ya que el sistema ya
revisa que el campo sea almacenado o que este visualizandose (en caché)
"""
for record in self:
record.sii_registration_key_code = record.sii_registration_key.code
Expand Down Expand Up @@ -297,7 +298,11 @@ def _get_sii_triggers_field_name(self):
raise NotImplementedError()

def _cancel_sii_triggers(self):
self.sudo().mapped(self._get_sii_triggers_field_name()).unlink()
try:
self.sudo().write({"sii_send_date": False})
self.sudo().mapped(self._get_sii_triggers_field_name()).unlink()
except Exception:
return False
return True

def _get_valid_document_states(self):
Expand All @@ -314,8 +319,8 @@ def send_sii(self):
if not documents._cancel_sii_triggers():
raise UserError(
_(
"You can not communicate this document at this moment "
"because there is a cron running!"
"You can not communicate this document at this moment. "
"Please, try again later."
)
)
documents._process_sii_send()
Expand Down
23 changes: 0 additions & 23 deletions l10n_es_aeat_sii_oca/readme/CONFIGURE.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,26 +14,3 @@ En Linux se pueden usar los siguientes comandos:
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:

1. 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

2. 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
3. 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>
1 change: 1 addition & 0 deletions l10n_es_aeat_sii_oca/readme/CONTRIBUTORS.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
- Eric Antonés - NuoBiT Solutions, S.L. \<<eantones@nuobit.com>\>
- [Sygel](https://www.sygel.es):
- Valentin Vinagre
- Manuel Regidor
- [Tecnativa](https://www.tecnativa.com):
- Pedro M. Baeza
- João Marques
Expand Down
23 changes: 1 addition & 22 deletions l10n_es_aeat_sii_oca/static/description/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -418,28 +418,6 @@ <h1><a class="toc-backref" href="#toc-entry-2">Configuration</a></h1>
<li>Clave privada: “openssl pkcs12 -in Certifcado.p12 -nocerts -out
privateKey.pem -nodes”</li>
</ul>
<p>Además, el módulo queue_job necesita estar configurado de una de estas
formas:</p>
<ol class="arabic">
<li><p class="first">Ajustando variables de entorno:</p>
<blockquote>
<p>ODOO_QUEUE_JOB_CHANNELS=root:4</p>
</blockquote>
<p>u otro canal de configuración. Por defecto es root:1</p>
<p>Si xmlrpc_port no está definido: ODOO_QUEUE_JOB_PORT=8069</p>
</li>
<li><p class="first">Otra alternativa es usuando un fichero de configuración:</p>
<blockquote>
<p>[options] (…) workers = 4 server_wide_modules =
web,base_sparse_field,queue_job</p>
<p>(…) [queue_job] channels = root:4</p>
</blockquote>
</li>
<li><p class="first">Por último, arrancando Odoo con
–load=web,base_sparse_field,queue_job y –workers más grande que 1.</p>
</li>
</ol>
<p>Más información <a class="reference external" href="http://odoo-connector.com">http://odoo-connector.com</a></p>
</div>
<div class="section" id="usage">
<h1><a class="toc-backref" href="#toc-entry-3">Usage</a></h1>
Expand Down Expand Up @@ -504,6 +482,7 @@ <h2><a class="toc-backref" href="#toc-entry-8">Contributors</a></h2>
<li>Eric Antonés - NuoBiT Solutions, S.L. &lt;<a class="reference external" href="mailto:eantones&#64;nuobit.com">eantones&#64;nuobit.com</a>&gt;</li>
<li><a class="reference external" href="https://www.sygel.es">Sygel</a>:<ul>
<li>Valentin Vinagre</li>
<li>Manuel Regidor</li>
</ul>
</li>
<li><a class="reference external" href="https://www.tecnativa.com">Tecnativa</a>:<ul>
Expand Down
24 changes: 0 additions & 24 deletions l10n_es_aeat_sii_oca/tests/test_l10n_es_aeat_sii.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)

import json
import logging

from odoo import exceptions
from odoo.tools.misc import file_path
Expand Down Expand Up @@ -56,7 +55,6 @@ def _create_and_test_invoice_sii_dict(
xml_id = f"account_tax_template_{tax}"
tax_id = self.company._get_tax_id_from_xmlid(xml_id)
taxes += self.env["account.tax"].browse(tax_id)
logging.warning(taxes.mapped("name"))
tax_names.append(tax)
vals.append({"price_unit": line[0], "taxes": taxes})
return self._compare_sii_dict(
Expand Down Expand Up @@ -376,28 +374,6 @@ def _check_tax_agencies(self, invoice):
invoice.company_id.tax_agency_id = False
self._check_binding_address(invoice)

# No parece que en v17 se puedan hacer tests con conexión
# Blocking un-mocked external HTTP request
# _request_handler
# def test_tax_agencies_sandbox(self):
# self.sii_cert.company_id = self.invoice.company_id.id
# self._activate_certificate()
# self.invoice.company_id.sii_test = True
# self._check_tax_agencies(self.invoice)
# in_invoice = self._create_invoice("in_invoice")
# self._check_tax_agencies(in_invoice)

# No parece que en v17 se puedan hacer tests con conexión
# Blocking un-mocked external HTTP request
# _request_handler
# def test_tax_agencies_production(self):
# self.sii_cert.company_id = self.invoice.company_id.id
# self._activate_certificate()
# self.invoice.company_id.sii_test = False
# self._check_tax_agencies(self.invoice)
# in_invoice = self._create_invoice("in_invoice")
# self._check_tax_agencies(in_invoice)

def test_refund_sii_refund_type(self):
invoice = self.env["account.move"].create(
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@
<field name="call_at" />
<button
type="object"
name="requeue_sudo"
string="Requeue"
name="reschedule_sudo"
string="Reschedule"
class="oe_highlight"
/>
<button
Expand Down
Loading

0 comments on commit d68b363

Please sign in to comment.