mirror of
https://gitlab.com/datalifeit/trytond-aeat_sii
synced 2023-12-13 20:30:37 +01:00
Changes to improve performance.
This commit is contained in:
parent
903f7f5885
commit
9321d57967
2 changed files with 39 additions and 44 deletions
81
aeat.py
81
aeat.py
|
@ -462,9 +462,6 @@ class SIIReport(Workflow, ModelSQL, ModelView):
|
||||||
@ModelView.button
|
@ModelView.button
|
||||||
@Workflow.transition('sent')
|
@Workflow.transition('sent')
|
||||||
def send(cls, reports):
|
def send(cls, reports):
|
||||||
pool = Pool()
|
|
||||||
Invoice = pool.get('account.invoice')
|
|
||||||
|
|
||||||
for report in reports:
|
for report in reports:
|
||||||
if report.state != 'confirmed':
|
if report.state != 'confirmed':
|
||||||
continue
|
continue
|
||||||
|
@ -489,19 +486,6 @@ class SIIReport(Workflow, ModelSQL, ModelView):
|
||||||
else:
|
else:
|
||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
|
|
||||||
to_save = []
|
|
||||||
for report in reports:
|
|
||||||
if report.operation_type == 'C0':
|
|
||||||
continue
|
|
||||||
for line in report.lines:
|
|
||||||
invoice = line.invoice
|
|
||||||
if invoice:
|
|
||||||
invoice.sii_communication_type = report.operation_type
|
|
||||||
invoice.sii_state = line.state
|
|
||||||
|
|
||||||
to_save.append(invoice)
|
|
||||||
|
|
||||||
Invoice.save(to_save)
|
|
||||||
cls.write(reports, {
|
cls.write(reports, {
|
||||||
'send_date': datetime.now(),
|
'send_date': datetime.now(),
|
||||||
})
|
})
|
||||||
|
@ -513,7 +497,7 @@ class SIIReport(Workflow, ModelSQL, ModelView):
|
||||||
def process_response(cls, reports):
|
def process_response(cls, reports):
|
||||||
for report in reports:
|
for report in reports:
|
||||||
if report.response:
|
if report.response:
|
||||||
cls._save_response(report.response)
|
report._save_response(report.response)
|
||||||
report.save()
|
report.save()
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
|
@ -802,9 +786,12 @@ class SIIReport(Workflow, ModelSQL, ModelView):
|
||||||
self._save_response(self.response)
|
self._save_response(self.response)
|
||||||
|
|
||||||
def _save_response(self, res):
|
def _save_response(self, res):
|
||||||
|
ReportLine = Pool().get('aeat.sii.report.lines')
|
||||||
|
|
||||||
if res:
|
if res:
|
||||||
response = json.loads(res, object_hook=lambda d: namedtuple(
|
response = json.loads(res, object_hook=lambda d: namedtuple(
|
||||||
'SII', d.keys())(*d.values()))
|
'SII', d.keys())(*d.values()))
|
||||||
|
lines2save = []
|
||||||
for (report_line, response_line) in zip(
|
for (report_line, response_line) in zip(
|
||||||
self.lines, response.RespuestaLinea):
|
self.lines, response.RespuestaLinea):
|
||||||
if not report_line.communication_code:
|
if not report_line.communication_code:
|
||||||
|
@ -812,7 +799,9 @@ class SIIReport(Workflow, ModelSQL, ModelView):
|
||||||
report_line.communication_code = response_line.CodigoErrorRegistro
|
report_line.communication_code = response_line.CodigoErrorRegistro
|
||||||
report_line.communication_msg = (
|
report_line.communication_msg = (
|
||||||
response_line.DescripcionErrorRegistro)
|
response_line.DescripcionErrorRegistro)
|
||||||
report_line.save()
|
lines2save.append(report_line)
|
||||||
|
if lines2save:
|
||||||
|
ReportLine.save(lines2save)
|
||||||
if not self.communication_state:
|
if not self.communication_state:
|
||||||
self.communication_state = response.EstadoEnvio
|
self.communication_state = response.EstadoEnvio
|
||||||
if not self.csv:
|
if not self.csv:
|
||||||
|
@ -1069,34 +1058,40 @@ class SIIReportLine(ModelSQL, ModelView):
|
||||||
|
|
||||||
actions = iter(args)
|
actions = iter(args)
|
||||||
|
|
||||||
to_write = []
|
to_check = []
|
||||||
for lines, values in zip(actions, actions):
|
for lines, values in zip(actions, actions):
|
||||||
invoice_values = {
|
if ('state' in values
|
||||||
'sii_pending_sending': False,
|
or 'communication_code' in values
|
||||||
}
|
or 'invoice' in values):
|
||||||
if values.get('state', None) == 'Correcto':
|
to_check.extend(lines)
|
||||||
invoices = [x.invoice for x in lines]
|
|
||||||
else:
|
|
||||||
invoices = [x.invoice for x in lines
|
|
||||||
if x.state == 'Correcto']
|
|
||||||
if invoices:
|
|
||||||
to_write.extend((invoices, invoice_values))
|
|
||||||
|
|
||||||
invoice_vals = {
|
|
||||||
'sii_pending_sending': False,
|
|
||||||
'sii_state': 'duplicated_unsubscribed',
|
|
||||||
}
|
|
||||||
if values.get('communication_code', None) in (3000, 3001):
|
|
||||||
invoices = [x.invoice for x in lines]
|
|
||||||
else:
|
|
||||||
invoices = [x.invoice for x in lines
|
|
||||||
if x.communication_code in (3000, 3001)]
|
|
||||||
if invoices:
|
|
||||||
to_write.extend((invoices, invoice_vals))
|
|
||||||
|
|
||||||
super(SIIReportLine, cls).write(*args)
|
super(SIIReportLine, cls).write(*args)
|
||||||
if to_write:
|
|
||||||
Invoice.write(*to_write)
|
if to_check:
|
||||||
|
to_check = cls.browse(to_check)
|
||||||
|
to_write = {}
|
||||||
|
for line in to_check:
|
||||||
|
invoice = line.invoice
|
||||||
|
if not invoice:
|
||||||
|
continue
|
||||||
|
key_changes = {}
|
||||||
|
if invoice.sii_state != line.state:
|
||||||
|
key_changes['sii_state'] = line.state
|
||||||
|
if line.report.operation_type != 'C0':
|
||||||
|
key_changes['sii_communication_type'] = \
|
||||||
|
line.report.operation_type
|
||||||
|
if line.state in ('Correcto', 'Correcta'):
|
||||||
|
key_changes['sii_pending_sending'] = False
|
||||||
|
if line.communication_code in (3000, 3001):
|
||||||
|
key_changes['sii_pending_sending'] = False
|
||||||
|
key_changes['sii_state'] = 'duplicated_unsubscribed'
|
||||||
|
if key_changes:
|
||||||
|
to_write.setdefault(
|
||||||
|
tuple((k, v) for k, v in key_changes.items()),
|
||||||
|
[]).append(invoice)
|
||||||
|
|
||||||
|
for changes, invoices in to_write.items():
|
||||||
|
Invoice.write(*[invoices, dict(changes)])
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def delete(cls, lines):
|
def delete(cls, lines):
|
||||||
|
|
|
@ -407,7 +407,7 @@ class Invoice(metaclass=PoolMeta):
|
||||||
def reset_sii_keys(cls, invoices):
|
def reset_sii_keys(cls, invoices):
|
||||||
to_write = []
|
to_write = []
|
||||||
for invoice in invoices:
|
for invoice in invoices:
|
||||||
if invoice.state != 'draft':
|
if invoice.sii_state in ('Correcto', 'Correcta'):
|
||||||
continue
|
continue
|
||||||
for field in _SII_INVOICE_KEYS:
|
for field in _SII_INVOICE_KEYS:
|
||||||
setattr(invoice, field, None)
|
setattr(invoice, field, None)
|
||||||
|
|
Loading…
Reference in a new issue