diff --git a/__init__.py b/__init__.py
index 7674bf4..7c2a839 100644
--- a/__init__.py
+++ b/__init__.py
@@ -15,6 +15,7 @@ from . import contract
def register():
Pool.register(
account.Configuration,
+ account.ConfigurationDefaultSII,
account.TemplateTax,
account.Tax,
cron.Cron,
diff --git a/account.py b/account.py
index 2e254a7..441a256 100644
--- a/account.py
+++ b/account.py
@@ -1,18 +1,64 @@
# The COPYRIGHT file at the top level of this repository contains the full
# copyright notices and license terms.
-from trytond.model import fields
-from trytond.pool import PoolMeta
+from trytond.model import fields, ModelSQL
+from trytond.pool import Pool, PoolMeta
from trytond.pyson import Eval
from trytond.transaction import Transaction
+from trytond.modules.company.model import CompanyValueMixin
from .aeat import (BOOK_KEY, OPERATION_KEY, SEND_SPECIAL_REGIME_KEY,
RECEIVE_SPECIAL_REGIME_KEY, IVA_SUBJECTED, EXEMPTION_CAUSE)
-__all__ = ['Configuration', 'TemplateTax', 'Tax']
-
-
class Configuration(metaclass=PoolMeta):
__name__ = 'account.configuration'
+
+ aeat_certificate_sii = fields.MultiValue(fields.Many2One('certificate',
+ 'AEAT Certificate SII'))
+ aeat_pending_sii = fields.MultiValue(fields.Boolean('AEAT Pending SII',
+ help='Automatically generate AEAT Pending SII reports by cron'))
+ aeat_pending_sii_send = fields.MultiValue(fields.Boolean('AEAT Pending SII Send',
+ states={
+ 'invisible': ~Eval('aeat_pending_sii', False),
+ }, depends=['aeat_pending_sii'],
+ help='Automatically send AEAT Pending SII reports by cron'))
+ aeat_received_sii = fields.MultiValue(fields.Boolean('AEAT Received SII',
+ help='Automatically generate AEAT Received SII reports by cron'))
+ aeat_received_sii_send = fields.MultiValue(fields.Boolean('AEAT Received SII Send',
+ states={
+ 'invisible': ~Eval('aeat_received_sii', False),
+ }, depends=['aeat_received_sii'],
+ help='Automatically send AEAT Received SII reports by cron'))
+
+ @classmethod
+ def multivalue_model(cls, field):
+ pool = Pool()
+ if field in {'aeat_certificate_sii', 'aeat_pending_sii',
+ 'aeat_pending_sii_send', 'aeat_received_sii',
+ 'aeat_received_sii_send'}:
+ return pool.get('account.configuration.default_sii')
+ return super().multivalue_model(field)
+
+ @classmethod
+ def default_aeat_pending_sii(cls, **pattern):
+ return False
+
+ @classmethod
+ def default_aeat_received_sii(cls, **pattern):
+ return False
+
+ @classmethod
+ def default_aeat_pending_sii_send(cls, **pattern):
+ return False
+
+ @classmethod
+ def default_aeat_received_sii_send(cls, **pattern):
+ return False
+
+
+class ConfigurationDefaultSII(ModelSQL, CompanyValueMixin):
+ "Account Configuration Default SII Values"
+ __name__ = 'account.configuration.default_sii'
+
aeat_certificate_sii = fields.Many2One('certificate',
'AEAT Certificate SII')
aeat_pending_sii = fields.Boolean('AEAT Pending SII',
@@ -30,22 +76,6 @@ class Configuration(metaclass=PoolMeta):
}, depends=['aeat_received_sii'],
help='Automatically send AEAT Received SII reports by cron')
- @staticmethod
- def default_aeat_pending_sii():
- return False
-
- @staticmethod
- def default_aeat_received_sii():
- return False
-
- @staticmethod
- def default_aeat_pending_sii_send():
- return False
-
- @staticmethod
- def default_aeat_received_sii_send():
- return False
-
class TemplateTax(metaclass=PoolMeta):
__name__ = 'account.tax.template'
diff --git a/aeat.py b/aeat.py
index 818044a..b205d95 100644
--- a/aeat.py
+++ b/aeat.py
@@ -566,13 +566,12 @@ class SIIReport(Workflow, ModelSQL, ModelView):
certificate = config.aeat_certificate_sii
if not certificate:
_logger.info('Missing AEAT Certificate SII configuration')
+ raise UserError(gettext('aeat_sii.msg_missing_certificate'))
return certificate
def submit_issued_invoices(self):
# get certificate from company
certificate = self._get_certificate()
- if not certificate:
- return
if self.state != 'confirmed':
_logger.info('This report %s has already been sended', self.id)
@@ -617,8 +616,6 @@ class SIIReport(Workflow, ModelSQL, ModelView):
def delete_issued_invoices(self):
# get certificate from company
certificate = self._get_certificate()
- if not certificate:
- return
if self.state != 'confirmed':
_logger.info('This report %s has already been sended', self.id)
@@ -655,8 +652,6 @@ class SIIReport(Workflow, ModelSQL, ModelView):
# get certificate from company
certificate = self._get_certificate()
- if not certificate:
- return
headers = tools.get_headers(
name=tools.unaccent(self.company.party.name),
@@ -781,8 +776,6 @@ class SIIReport(Workflow, ModelSQL, ModelView):
def submit_recieved_invoices(self):
# get certificate from company
certificate = self._get_certificate()
- if not certificate:
- return
if self.state != 'confirmed':
_logger.info('This report %s has already been sended', self.id)
@@ -826,8 +819,6 @@ class SIIReport(Workflow, ModelSQL, ModelView):
def delete_recieved_invoices(self):
# get certificate from company
certificate = self._get_certificate()
- if not certificate:
- return
if self.state != 'confirmed':
_logger.info('This report %s has already been sended', self.id)
@@ -884,8 +875,6 @@ class SIIReport(Workflow, ModelSQL, ModelView):
# get certificate from company
certificate = self._get_certificate()
- if not certificate:
- return
headers = tools.get_headers(
name=tools.unaccent(self.company.party.name),
diff --git a/invoice.py b/invoice.py
index 7f0b383..1797f5b 100644
--- a/invoice.py
+++ b/invoice.py
@@ -133,7 +133,7 @@ class Invoice(metaclass=PoolMeta):
if not invoice.sii_operation_key:
invoice.sii_operation_key = invoice._get_sii_operation_key()
values = invoice._save_values
- if invoice == 'posted':
+ if invoice.state in ('posted', 'paid'):
values['sii_sending_pending'] = True
to_write.extend(([invoice], values))
diff --git a/locale/ca.po b/locale/ca.po
index ed03775..0585288 100644
--- a/locale/ca.po
+++ b/locale/ca.po
@@ -564,6 +564,13 @@ msgctxt "model:ir.message,text:msg_report_wrong_invoice_state"
msgid "Invoice \"%(invoice)s\" must be posted, paid or refunded."
msgstr "La factura \"%(invoice)s\" ha d'estar comptabilitzada, pagada o abonada."
+msgctxt "model:ir.message,text:msg_missing_certificate"
+msgid ""
+"There isn't a certificate deffined in the account configuration for the SII."
+msgstr ""
+"No exiteix cap certificat definit a la configuració comptable per "
+"l'enviament del SII."
+
msgctxt "model:ir.model.button,string:cancel_button"
msgid "Cancel"
msgstr "Cancel·la"
diff --git a/locale/es.po b/locale/es.po
index 04ba041..6d31f32 100644
--- a/locale/es.po
+++ b/locale/es.po
@@ -566,6 +566,13 @@ msgctxt "model:ir.message,text:msg_report_wrong_invoice_state"
msgid "Invoice \"%(invoice)s\" must be posted, paid or refunded."
msgstr "La factura \"%(invoice)s\" debe estar contabilizada, pagada o abonada."
+msgctxt "model:ir.message,text:msg_missing_certificate"
+msgid ""
+"There isn't a certificate deffined in the account configuration for the SII."
+msgstr ""
+"No exite ningún certificado definido en la configuración contable para el "
+"envío del SII."
+
msgctxt "model:ir.model.button,string:cancel_button"
msgid "Cancel"
msgstr "Cancelar"
diff --git a/message.xml b/message.xml
index 56f7ff9..3f4c2b7 100644
--- a/message.xml
+++ b/message.xml
@@ -38,5 +38,8 @@ If you edit them take care if you need to update again to SII
The invoice "%(invoices)s" has not VAT and SII operation key is Simplified Invoice (ticket) and Invoices without destination identification.
+
+ There isn't a certificate deffined in the account configuration for the SII.
+
diff --git a/tryton.cfg b/tryton.cfg
index a2f032b..f5a2a96 100644
--- a/tryton.cfg
+++ b/tryton.cfg
@@ -5,6 +5,7 @@ depends:
account_invoice_company_currency
account_es
certificate_manager
+ company
extras_depend:
account_invoice_intercompany
contract