mirror of
https://gitlab.com/datalifeit/trytond-aeat_sii
synced 2023-12-13 20:30:37 +01:00
Grow report line model to store SII responses
This commit is contained in:
parent
c0a74283d5
commit
67facca5ac
2 changed files with 122 additions and 39 deletions
132
aeat.py
132
aeat.py
|
@ -287,7 +287,7 @@ class SIIReport(Workflow, ModelSQL, ModelView):
|
|||
|
||||
lines = fields.One2Many('aeat.sii.report.lines', 'report',
|
||||
'Lines', states={
|
||||
'readonly': ~Eval('state').in_(['draft']),
|
||||
'readonly': Eval('state') != 'draft',
|
||||
}, depends=['state'])
|
||||
|
||||
|
||||
|
@ -524,24 +524,38 @@ class SIIReport(Workflow, ModelSQL, ModelView):
|
|||
invoice.number: invoice.id
|
||||
for invoice in invoices_list
|
||||
}
|
||||
lines_to_create = [
|
||||
{
|
||||
'invoice':
|
||||
invoices_ids.get(
|
||||
reg.IDFactura.NumSerieFacturaEmisor),
|
||||
'state':
|
||||
reg.EstadoFactura.EstadoRegistro,
|
||||
'communication_code':
|
||||
reg.EstadoFactura.CodigoErrorRegistro,
|
||||
'communication_msg':
|
||||
reg.EstadoFactura.DescripcionErrorRegistro,
|
||||
# FIXME: store any other info from the response
|
||||
}
|
||||
for reg in registers
|
||||
]
|
||||
self.write([self], {
|
||||
'lines': [('create', lines_to_create)]
|
||||
})
|
||||
|
||||
self.lines = tuple(
|
||||
SIIReportLine(
|
||||
invoice=invoices_ids.get(reg.IDFactura.NumSerieFacturaEmisor),
|
||||
state=reg.EstadoFactura.EstadoRegistro,
|
||||
communication_code=reg.EstadoFactura.CodigoErrorRegistro,
|
||||
communication_msg=reg.EstadoFactura.DescripcionErrorRegistro,
|
||||
issuer_vat_number=(
|
||||
reg.IDFactura.IDEmisorFactura.NIF or
|
||||
reg.IDFactura.IDEmisorFactura.IDOtro.ID),
|
||||
serial_number=reg.IDFactura.NumSerieFacturaEmisor,
|
||||
final_serial_number=(
|
||||
reg.IDFactura.NumSerieFacturaEmisorResumenFin),
|
||||
issue_date=reg.IDFactura.FechaExpedicionFacturaEmisor,
|
||||
invoice_kind=reg.DatosFacturaEmitida.TipoFactura,
|
||||
special_key=(
|
||||
reg.DatosFacturaEmitida.
|
||||
ClaveRegimenEspecialOTrascendencia),
|
||||
total_amount=reg.DatosFacturaEmitida.ImporteTotal,
|
||||
counterpart_name=(
|
||||
reg.DatosFacturaEmitida.Contraparte.NombreRazon),
|
||||
counterpart_id=(
|
||||
reg.DatosFacturaEmitida.Contraparte.NIF or
|
||||
reg.DatosFacturaEmitida.Contraparte.IDOtro.ID),
|
||||
presenter=reg.DatosPresentacion.NIFPresentador,
|
||||
presentation_date=reg.DatosPresentacion.TimestampPresentacion,
|
||||
csv=reg.DatosPresentacion.CSV,
|
||||
balance_state=reg.DatosPresentacion.CSV,
|
||||
)
|
||||
for reg in registers)
|
||||
|
||||
self.save()
|
||||
|
||||
def submit_recieved_invoices(self):
|
||||
_logger.info('Sending report %s to AEAT SII', self.id)
|
||||
|
@ -602,6 +616,7 @@ class SIIReport(Workflow, ModelSQL, ModelView):
|
|||
res = None
|
||||
pool = Pool()
|
||||
Invoice = pool.get('account.invoice')
|
||||
SIIReportLine = pool.get('aeat.sii.report.lines')
|
||||
headers = mapping.get_headers(
|
||||
name=self.company.party.name,
|
||||
vat=self.company.party.vat_number,
|
||||
|
@ -616,8 +631,7 @@ class SIIReport(Workflow, ModelSQL, ModelView):
|
|||
period=self.period.start_date.month)
|
||||
|
||||
_logger.debug(res)
|
||||
registers = \
|
||||
res.RegistroRespuestaConsultaLRFacturasRecibidas
|
||||
registers = res.RegistroRespuestaConsultaLRFacturasRecibidas
|
||||
# FIXME: the reference is not forced to be unique
|
||||
invoices_list = Invoice.search([
|
||||
('reference', 'in', [
|
||||
|
@ -629,24 +643,38 @@ class SIIReport(Workflow, ModelSQL, ModelView):
|
|||
invoice.reference: invoice.id
|
||||
for invoice in invoices_list
|
||||
}
|
||||
lines_to_create = [
|
||||
{
|
||||
'invoice':
|
||||
invoices_ids.get(
|
||||
reg.IDFactura.NumSerieFacturaEmisor),
|
||||
'state':
|
||||
reg.EstadoFactura.EstadoRegistro,
|
||||
'communication_code':
|
||||
reg.EstadoFactura.CodigoErrorRegistro,
|
||||
'communication_msg':
|
||||
reg.EstadoFactura.DescripcionErrorRegistro,
|
||||
# FIXME: store any other info from the response
|
||||
}
|
||||
|
||||
self.lines = tuple(
|
||||
SIIReportLine(
|
||||
invoice=invoices_ids.get(reg.IDFactura.NumSerieFacturaEmisor),
|
||||
state=reg.EstadoFactura.EstadoRegistro,
|
||||
communication_code=reg.EstadoFactura.CodigoErrorRegistro,
|
||||
communication_msg=reg.EstadoFactura.DescripcionErrorRegistro,
|
||||
issuer_vat_number=(
|
||||
reg.IDFactura.IDEmisorFactura.NIF or
|
||||
reg.IDFactura.IDEmisorFactura.IDOtro.ID),
|
||||
serial_number=reg.IDFactura.NumSerieFacturaEmisor,
|
||||
final_serial_number=(
|
||||
reg.IDFactura.NumSerieFacturaEmisorResumenFin),
|
||||
issue_date=reg.IDFactura.FechaExpedicionFacturaEmisor,
|
||||
invoice_kind=reg.DatosFacturaRecibida.TipoFactura,
|
||||
special_key=(
|
||||
reg.DatosFacturaRecibida.
|
||||
ClaveRegimenEspecialOTrascendencia),
|
||||
total_amount=reg.DatosFacturaRecibida.ImporteTotal,
|
||||
counterpart_name=(
|
||||
reg.DatosFacturaRecibida.Contraparte.NombreRazon),
|
||||
counterpart_id=(
|
||||
reg.DatosFacturaRecibida.Contraparte.NIF or
|
||||
reg.DatosFacturaRecibida.Contraparte.IDOtro.ID),
|
||||
presenter=reg.DatosPresentacion.NIFPresentador,
|
||||
resentation_date=reg.DatosPresentacion.TimestampPresentacion,
|
||||
csv=reg.DatosPresentacion.CSV,
|
||||
balance_state=reg.DatosPresentacion.CSV,
|
||||
)
|
||||
for reg in registers
|
||||
]
|
||||
self.write([self], {
|
||||
'lines': [('create', lines_to_create)]
|
||||
})
|
||||
)
|
||||
self.save()
|
||||
|
||||
|
||||
class SIIReportLine(ModelSQL, ModelView):
|
||||
|
@ -665,6 +693,21 @@ class SIIReportLine(ModelSQL, ModelView):
|
|||
'Communication Message', readonly=True)
|
||||
company = fields.Many2One(
|
||||
'company.company', 'Company', required=True, select=True)
|
||||
issuer_vat_number = fields.Char('Issuer VAT Number', readonly=True)
|
||||
serial_number = fields.Char('Serial Number', readonly=True)
|
||||
final_serial_number = fields.Char('Final Serial Number', readonly=True)
|
||||
issue_date = fields.Char('Issue Date', readonly=True)
|
||||
invoice_kind = fields.Char('Invoice Kind', readonly=True)
|
||||
special_key = fields.Char('Special Key', readonly=True)
|
||||
total_amount = fields.Numeric('Total Amount', readonly=True)
|
||||
counterpart_name = fields.Char('Counterpart Name', readonly=True)
|
||||
counterpart_id = fields.Char('Counterpart ID', readonly=True)
|
||||
# TODO: tax lines
|
||||
presenter = fields.Char('Presenter', readonly=True)
|
||||
presentation_date = fields.Char('Presentation Date', readonly=True)
|
||||
csv = fields.Char('CSV', readonly=True)
|
||||
balance_state = fields.Char('Balance State', readonly=True)
|
||||
# TODO counterpart balance data
|
||||
|
||||
vat_code = fields.Function(fields.Char('VAT Code'), 'get_vat_code')
|
||||
identifier_type = fields.Function(
|
||||
|
@ -692,4 +735,17 @@ class SIIReportLine(ModelSQL, ModelView):
|
|||
default['state'] = None
|
||||
default['communication_code'] = None
|
||||
default['communication_msg'] = None
|
||||
default['issuer_vat_number'] = None
|
||||
default['serial_number'] = None
|
||||
default['final_serial_number'] = None
|
||||
default['issue_date'] = None
|
||||
default['invoice_kind'] = None
|
||||
default['special_key'] = None
|
||||
default['total_amount'] = None
|
||||
default['counterpart_name'] = None
|
||||
default['counterpart_id'] = None
|
||||
default['presenter'] = None
|
||||
default['presentation_date'] = None
|
||||
default['csv'] = None
|
||||
default['balance_state'] = None
|
||||
return super(SIIReportLine, cls).copy(records, default=default)
|
||||
|
|
|
@ -8,5 +8,32 @@
|
|||
<field name="invoice"/>
|
||||
<label name="state"/>
|
||||
<field name="state"/>
|
||||
<field name="communication_msg" colspan="4"/>
|
||||
<label name="communication_msg"/>
|
||||
<field name="communication_msg"/>
|
||||
<label name="issuer_vat_number"/>
|
||||
<field name="issuer_vat_number"/>
|
||||
<label name="serial_number"/>
|
||||
<field name="serial_number"/>
|
||||
<label name="final_serial_number"/>
|
||||
<field name="final_serial_number"/>
|
||||
<label name="issue_date"/>
|
||||
<field name="issue_date"/>
|
||||
<label name="invoice_kind"/>
|
||||
<field name="invoice_kind"/>
|
||||
<label name="special_key"/>
|
||||
<field name="special_key"/>
|
||||
<label name="total_amount"/>
|
||||
<field name="total_amount"/>
|
||||
<label name="counterpart_name"/>
|
||||
<field name="counterpart_name"/>
|
||||
<label name="counterpart_id"/>
|
||||
<field name="counterpart_id"/>
|
||||
<label name="presenter"/>
|
||||
<field name="presenter"/>
|
||||
<label name="presentation_date"/>
|
||||
<field name="presentation_date"/>
|
||||
<label name="csv"/>
|
||||
<field name="csv"/>
|
||||
<label name="balance_state"/>
|
||||
<field name="balance_state"/>
|
||||
</form>
|
||||
|
|
Loading…
Reference in a new issue