This commit is contained in:
Àngel Àlvarez 2017-06-22 15:32:12 +02:00
commit 73e359f0b0
5 changed files with 1822 additions and 27 deletions

36
aeat.py
View File

@ -15,12 +15,15 @@ from datetime import datetime
from pyAEATsii import service
from pyAEATsii import mapping
from pyAEATsii import callback_utils
from trytond.model import ModelSQL, ModelView, fields, Workflow
from trytond.model import ModelSQL, ModelView, Model, fields, Workflow
from trytond.pyson import Eval
from trytond.pool import Pool
from trytond.transaction import Transaction
__all__ = ['SIIReport', 'SIIReportLine',
'IssuedTrytonInvoiceMapper', 'RecievedTrytonInvoiceMapper']
_logger = getLogger(__name__)
_ZERO = Decimal('0.0')
@ -41,7 +44,7 @@ def _datetime(x):
COMMUNICATION_TYPE = [ # L0
('A0', 'New Invoices'),
('A1', 'Modify Invoices'),
# ('A4', 'Modify (Travelers)'), # Not suported
# ('A4', 'Modify (Travelers)'), Not suported
('C0', 'Query Invoices'), # Not in L0
('D0', 'Delete Invoices'), # Not In L0
]
@ -262,24 +265,20 @@ class SIIReport(Workflow, ModelSQL, ModelView):
'required': Eval('state').in_(['confirmed', 'done']),
'readonly': ~Eval('state').in_(['draft', 'confirmed']),
}, depends=['state'])
period = fields.Many2One('account.period', 'Period', required=True,
domain=[('fiscalyear', '=', Eval('fiscalyear'))],
states={
'readonly': Eval('state') != 'draft',
}, depends=['state', 'fiscalyear'])
operation_type = fields.Selection(COMMUNICATION_TYPE, 'Operation Type',
required=True,
states={
'readonly': ~Eval('state').in_(['draft', 'confirmed']),
}, depends=['state'])
book = fields.Selection(BOOK_KEY, 'Book', required=True,
states={
'readonly': ~Eval('state').in_(['draft', 'confirmed']),
}, depends=['state'])
state = fields.Selection([
('draft', 'Draft'),
('confirmed', 'Confirmed'),
@ -290,21 +289,18 @@ class SIIReport(Workflow, ModelSQL, ModelView):
communication_state = fields.Selection(AEAT_COMMUNICATION_STATE,
'Communication State', readonly=True)
csv = fields.Char(
'CSV', readonly=True
)
csv = fields.Char('CSV', readonly=True)
version = fields.Selection([
('0.7', '0.7'),
], 'Version', required=True, states={
}, depends=['state'])
lines = fields.One2Many('aeat.sii.report.lines', 'report',
'Lines', states={
'readonly': Eval('state') != 'draft',
}, depends=['state'])
send_date = fields.DateTime('Send date', readonly=True,
states={'invisible': Eval('state') != 'sent'},
depends=['state'])
@classmethod
def __setup__(cls):
@ -332,7 +328,6 @@ class SIIReport(Workflow, ModelSQL, ModelView):
Eval('operation_type').in_(['A0', 'A1'])),
}
})
cls._transitions |= set((
('draft', 'confirmed'),
('draft', 'cancelled'),
@ -342,10 +337,8 @@ class SIIReport(Workflow, ModelSQL, ModelView):
('cancelled', 'draft'),
))
@staticmethod
def default_company():
return Transaction().context.get('company')
@fields.depends('company')
@ -379,6 +372,8 @@ class SIIReport(Workflow, ModelSQL, ModelView):
else:
default = default.copy()
default['communication_state'] = None
default['csv'] = None
default['send_date'] = None
return super(SIIReport, cls).copy(records, default=default)
@classmethod
@ -418,6 +413,9 @@ class SIIReport(Workflow, ModelSQL, ModelView):
raise NotImplementedError
else:
raise NotImplementedError
cls.write(reports, {
'send_date': datetime.now()})
_logger.debug('Done sending reports to AEAT SII')
@classmethod
@ -588,7 +586,7 @@ class SIIReport(Workflow, ModelSQL, ModelView):
_logger.info('Sending report %s to AEAT SII', self.id)
headers = mapping.get_headers(
name=self.company.party.name,
vat=self.company.party.sii_vat_code,
vat=self.company_vat,
comm_kind=self.operation_type)
pool = Pool()
mapper = pool.get('aeat.sii.recieved.invoice.mapper')(pool=pool)
@ -615,7 +613,7 @@ class SIIReport(Workflow, ModelSQL, ModelView):
def delete_recieved_invoices(self):
headers = mapping.get_headers(
name=self.company.party.name,
vat=self.company.party.sii_vat_code,
vat=self.company_vat,
comm_kind=self.operation_type)
pool = Pool()
mapper = pool.get('aeat.sii.recieved.invoice.mapper')(pool=pool)
@ -765,6 +763,8 @@ class SIIReportLine(ModelSQL, ModelView):
def get_identifier_type(self, name):
return self.invoice.party.identifier_type
@staticmethod
def default_company():
return Transaction().context.get('company')

File diff suppressed because it is too large Load Diff

View File

@ -122,6 +122,10 @@ msgctxt "field:aeat.sii.report,period:"
msgid "Period"
msgstr "Período"
msgctxt "field:aeat.sii.report,send_date:"
msgid "Send date"
msgstr "Fecha de envío"
msgctxt "field:aeat.sii.report,rec_name:"
msgid "Name"
msgstr "Nombre"

View File

@ -20,6 +20,8 @@
<field name="fiscalyear"/>
<label name="period"/>
<field name="period"/>
<label name="send_date"/>
<field name="send_date"/>
<button string="Load Invoices" name="load_invoices" colspan="2"/>
<field name="lines" colspan="6"

View File

@ -11,5 +11,6 @@
<field name="operation_type"/>
<field name="version"/>
<field name="state"/>
<field name="send_date" widget="date"/>
<field name="communication_state"/>
</tree>