Delete recieved invoices from SII

This commit is contained in:
Daniel Möller 2017-05-24 18:12:38 +02:00
parent 42b6c84423
commit 407dde3bae
2 changed files with 46 additions and 4 deletions

27
aeat.py
View File

@ -368,6 +368,8 @@ class SIIReport(Workflow, ModelSQL, ModelView):
report.submit_recieved_invoices()
elif report.operation_type == 'C0':
report.query_recieved_invoices()
elif report.operation_type == 'D0':
report.delete_recieved_invoices()
else:
raise NotImplementedError
else:
@ -543,6 +545,31 @@ class SIIReport(Workflow, ModelSQL, ModelView):
'csv': res.CSV,
})
def delete_recieved_invoices(self):
headers = mapping.get_headers(
name=self.company.party.name,
vat=self.company.party.vat_number,
comm_kind=self.operation_type)
invoices = map(
RecievedTrytonInvoiceMapper.build_delete_request,
(line.invoice for line in self.lines))
res = None
with self.company.tmp_ssl_credentials() as (crt, key):
srv = service.bind_recieved_invoices_service(crt, key, test=True)
res = srv.AnulacionLRFacturasRecibidas(headers, invoices)
# TODO: assert response order matches report order
for (report_line, response_line) in zip(
self.lines, res.RespuestaLinea):
report_line.write([report_line], {
'state': response_line.EstadoRegistro,
'communication_code': response_line.CodigoErrorRegistro,
'communication_msg': response_line.DescripcionErrorRegistro,
})
self.write([self], {
'communication_state': res.EstadoEnvio,
'csv': res.CSV,
})
def query_recieved_invoices(self):
res = None
pool = Pool()

View File

@ -119,14 +119,16 @@ class RecievedInvoiceMapper(object):
def build_delete_request(cls, invoice):
return {
'PeriodoImpositivo': cls.build_period(invoice),
'IDFactura': cls.build_invoice_id(invoice),
'IDFactura': cls.build_named_invoice_id(invoice),
}
@classmethod
def build_submit_request(cls, invoice):
request = cls.build_delete_request(invoice)
request['FacturaRecibida'] = cls.build_invoice(invoice)
return request
return {
'PeriodoImpositivo': cls.build_period(invoice),
'IDFactura': cls.build_invoice_id(invoice),
'FacturaRecibida': cls.build_invoice(invoice),
}
@classmethod
def build_period(cls, invoice):
@ -142,6 +144,19 @@ class RecievedInvoiceMapper(object):
'NIF': cls.counterpart_nif(invoice),
},
'NumSerieFacturaEmisor': cls.serial_number(invoice),
# TODO: NumSerieFacturaEmisorResumenFin
'FechaExpedicionFacturaEmisor':
cls.issue_date(invoice).strftime(_DATE_FMT),
}
@classmethod
def build_named_invoice_id(cls, invoice):
return {
'IDEmisorFactura': {
'NombreRazon': cls.counterpart_name(invoice),
'NIF': cls.counterpart_nif(invoice),
},
'NumSerieFacturaEmisor': cls.serial_number(invoice),
'FechaExpedicionFacturaEmisor':
cls.issue_date(invoice).strftime(_DATE_FMT),
}