Added restrictions when modifiying sent invoices.
This commit is contained in:
parent
22b930b613
commit
1d3384523e
|
@ -48,3 +48,7 @@ def register():
|
|||
aeat.CreateSiiReceivedPending,
|
||||
load_pkcs12.LoadPKCS12,
|
||||
module='aeat_sii', type_='wizard')
|
||||
Pool.register(
|
||||
invoice.Invoice2,
|
||||
module='aeat_sii', type_='model',
|
||||
depends=['account_invoice_posted2draft'])
|
||||
|
|
|
@ -201,6 +201,7 @@ class BaseInvoiceMapper(Model):
|
|||
description = tools.unaccent(invoice.description)
|
||||
if invoice.lines and invoice.lines[0].description:
|
||||
description = tools.unaccent(invoice.lines[0].description)
|
||||
|
||||
description = self.serial_number(invoice)
|
||||
|
||||
return (description if not self._is_first_semester(invoice)
|
||||
|
|
102
invoice.py
102
invoice.py
|
@ -2,7 +2,7 @@
|
|||
# copyright notices and license terms.
|
||||
import hashlib
|
||||
from decimal import Decimal
|
||||
from trytond.model import ModelView, fields
|
||||
from trytond.model import ModelView, fields, Workflow
|
||||
from trytond.pool import Pool, PoolMeta
|
||||
from trytond.pyson import Eval
|
||||
from trytond.transaction import Transaction
|
||||
|
@ -23,8 +23,14 @@ _SII_INVOICE_KEYS = ['sii_book_key', 'sii_operation_key', 'sii_issued_key',
|
|||
class Invoice(metaclass=PoolMeta):
|
||||
__name__ = 'account.invoice'
|
||||
|
||||
sii_book_key = fields.Selection(BOOK_KEY, 'SII Book Key')
|
||||
sii_operation_key = fields.Selection(OPERATION_KEY, 'SII Operation Key')
|
||||
sii_book_key = fields.Selection(BOOK_KEY, 'SII Book Key',
|
||||
states={
|
||||
'required': Eval('state').in_(['posted', 'paid'])
|
||||
}, depends=['state'])
|
||||
sii_operation_key = fields.Selection(OPERATION_KEY, 'SII Operation Key',
|
||||
states={
|
||||
'required': Eval('state').in_(['posted', 'paid'])
|
||||
}, depends=['state'])
|
||||
sii_issued_key = fields.Selection(SEND_SPECIAL_REGIME_KEY,
|
||||
'SII Issued Key',
|
||||
states={
|
||||
|
@ -273,3 +279,93 @@ class ResetSIIKeys(Wizard):
|
|||
invoices = Invoice.browse(Transaction().context['active_ids'])
|
||||
Invoice.reset_sii_keys(invoices)
|
||||
return 'done'
|
||||
|
||||
|
||||
class Invoice2(metaclass=PoolMeta):
|
||||
__name__ = 'account.invoice'
|
||||
|
||||
@classmethod
|
||||
def __setup__(cls):
|
||||
super().__setup__()
|
||||
cls._sii_state_deny_draft = {
|
||||
'Correcto', 'Correcta', 'AceptadoConErrores', 'AceptadaConErrores'
|
||||
}
|
||||
cls._deny_modify_sii_fields = {
|
||||
'reference', 'party', 'invoice_date', 'party_tax_identifier'
|
||||
}
|
||||
|
||||
@classmethod
|
||||
@ModelView.button
|
||||
@Workflow.transition('draft')
|
||||
def draft(cls, invoices):
|
||||
for invoice in invoices:
|
||||
invoice.check_sent_sii()
|
||||
super().draft(invoices)
|
||||
|
||||
@classmethod
|
||||
@ModelView.button
|
||||
@Workflow.transition('posted')
|
||||
def post(cls, invoices):
|
||||
for invoice in invoices:
|
||||
if invoice.state in ('draft', 'validated'):
|
||||
invoice.check_sent_sii()
|
||||
super().post(invoices)
|
||||
|
||||
@classmethod
|
||||
def write(cls, *args):
|
||||
actions = iter(args)
|
||||
args = []
|
||||
for records, values in zip(actions, actions):
|
||||
sii_vals = set(values) & cls._deny_modify_sii_fields
|
||||
if sii_vals:
|
||||
for record in records:
|
||||
if record.type == 'in':
|
||||
record.check_sent_sii(list(sii_vals))
|
||||
args.extend((records, values))
|
||||
super().write(*args)
|
||||
|
||||
def check_sent_sii(self, fields=[]):
|
||||
pool = Pool()
|
||||
ModelData = pool.get('ir.model.data')
|
||||
User = pool.get('res.user')
|
||||
Group = pool.get('res.group')
|
||||
Warning = pool.get('res.user.warning')
|
||||
|
||||
if self.sii_state in self._sii_state_deny_draft and \
|
||||
self.sii_communication_type != 'D0':
|
||||
|
||||
# check group
|
||||
def in_group():
|
||||
group = Group(ModelData.get_id(
|
||||
'aeat_sii',
|
||||
'group_invoice_sent_sii_posted2draft'))
|
||||
transaction = Transaction()
|
||||
user_id = transaction.user
|
||||
if user_id == 0:
|
||||
user_id = transaction.context.get('user', user_id)
|
||||
if user_id == 0:
|
||||
return True
|
||||
user = User(user_id)
|
||||
return group in user.groups
|
||||
|
||||
if fields:
|
||||
raise UserError(gettext(
|
||||
'aeat_sii.msg_invoice_deny_modify_sii_pk',
|
||||
fields=', '.join(
|
||||
[f['string'] for f in self.__class__.fields_get(
|
||||
fields_names=fields).values()]),
|
||||
invoice=self.rec_name,
|
||||
sii_state=self.sii_state))
|
||||
elif not in_group():
|
||||
raise UserError(gettext(
|
||||
'aeat_sii.msg_invoice_deny_draft_invalid_sii_state',
|
||||
invoice=self.rec_name,
|
||||
sii_state=self.sii_state))
|
||||
else:
|
||||
warning_key = ('aeat_sii.'
|
||||
'msg_invoice_modify_invalid_sii_state_%s' % self.id)
|
||||
if Warning.check(warning_key):
|
||||
raise UserWarning(warning_key, gettext(
|
||||
'aeat_sii.msg_invoice_modify_invalid_sii_state',
|
||||
invoice=self.rec_name,
|
||||
sii_state=self.sii_state))
|
||||
|
|
11
invoice.xml
11
invoice.xml
|
@ -40,6 +40,15 @@
|
|||
<field name="action" ref="act_aeat_sii_reset_keys"/>
|
||||
<field name="group" ref="group_aeat_sii_admin"/>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
<data depends="account_invoice_posted2draft">
|
||||
<record model="res.group" id="group_invoice_sent_sii_posted2draft">
|
||||
<field name="name">Force Draft Account Invoice sent to SII</field>
|
||||
</record>
|
||||
<record model="res.user-res.group"
|
||||
id="user_admin_group_invoice_sent_sii_posted2draft">
|
||||
<field name="user" ref="res.user_admin"/>
|
||||
<field name="group" ref="group_invoice_sent_sii_posted2draft"/>
|
||||
</record>
|
||||
</data>
|
||||
</tryton>
|
||||
|
|
22
locale/es.po
22
locale/es.po
|
@ -1764,3 +1764,25 @@ msgstr "Cancel·lar"
|
|||
msgctxt "wizard_button:aeat.sii.reset.keys,start,reset:"
|
||||
msgid "Reset"
|
||||
msgstr "Reiniciar"
|
||||
|
||||
msgctxt "model:ir.message,text:msg_invoice_deny_draft_invalid_sii_state"
|
||||
msgid ""
|
||||
"You can not set to draft invoice \"%(invoice)s\" because the SII state is \"%(sii_state)s\". Please first include the invoice in a Delete Invoice SII Book and send to AEAT."
|
||||
msgstr ""
|
||||
"No puede pasar a borrador la factura \"%(invoice)s\" porque su estado SII es \"%(sii_state)s\". Por favor incluya la factura en un libro SII de anulación de facturas y envíelo a la AEAT."
|
||||
|
||||
msgctxt "model:ir.message,text:msg_invoice_modify_invalid_sii_state"
|
||||
msgid ""
|
||||
"Invoice \"%(invoice)s\" was sent to SII and the state is \"%(sii_state)s\". Please remember after posting to send it again with a Modify SII Book."
|
||||
msgstr ""
|
||||
"La factura \"%(invoice)s\" fue enviada al SII y su estado es \"%(sii_state)s\". Por favor recuerde enviarla de nuevo a la AEAT en un libro SII de modificación de facturas tras contabilizarla."
|
||||
|
||||
msgctxt "model:ir.message,text:msg_invoice_deny_modify_sii_pk"
|
||||
msgid ""
|
||||
"Cannot modify \"%(fields)s\" on invoice \"%(invoice)s\" because its SII state is \"%(sii_state)s\". Please first include the invoice in a Delete Invoice SII Book and send to AEAT."
|
||||
msgstr ""
|
||||
"No puede modificar \"%(fields)s\" en la factura \"%(invoice)s\" porque su estado SII es \"%(sii_state)s\". Por favor incluya la fact
|
||||
|
||||
msgctxt "model:res.group,name:group_invoice_sent_sii_posted2draft"
|
||||
msgid "Force Draft Account Invoice sent to SII"
|
||||
msgstr "Forzar borrador factura enviada a SII"
|
|
@ -38,5 +38,14 @@ If you edit them take care if you need to update again to SII</field>
|
|||
<record model="ir.message" id="msg_wrong_identifier_type">
|
||||
<field name="text">The party [%(party)s] of the invoice %(invoice)s must has a valid SII Identifier [VAT (only for intracommunity operators)].</field>
|
||||
</record>
|
||||
<record model="ir.message" id="msg_invoice_deny_draft_invalid_sii_state">
|
||||
<field name="text">You can not set to draft invoice "%(invoice)s" because the SII state is "%(sii_state)s". Please first include the invoice in a Delete Invoice SII Book and send to AEAT.</field>
|
||||
</record>
|
||||
<record model="ir.message" id="msg_invoice_modify_invalid_sii_state">
|
||||
<field name="text">Invoice "%(invoice)s" was sent to SII and the state is "%(sii_state)s". Please remember after posting to send it again with a Modify SII Book.</field>
|
||||
</record>
|
||||
<record model="ir.message" id="msg_invoice_deny_modify_sii_pk">
|
||||
<field name="text">Cannot modify "%(fields)s" on invoice "%(invoice)s" because its SII state is "%(sii_state)s". Please first include the invoice in a Delete Invoice SII Book and send to AEAT.</field>
|
||||
</record>
|
||||
</data>
|
||||
</tryton>
|
||||
|
|
|
@ -10,6 +10,8 @@ extras_depend:
|
|||
sale
|
||||
purchase
|
||||
aeat_303
|
||||
account_invoice_posted2draft
|
||||
|
||||
xml:
|
||||
account.xml
|
||||
aeat.xml
|
||||
|
|
Loading…
Reference in New Issue