Changes to improve performance.

This commit refs #22072.
This commit is contained in:
José Antonio Díaz Miralles 2022-02-11 10:25:09 +01:00
parent 64c66552a8
commit a3862ad782
2 changed files with 39 additions and 43 deletions

80
aeat.py
View File

@ -425,8 +425,6 @@ class SIIReport(Workflow, ModelSQL, ModelView):
@ModelView.button
@Workflow.transition('sent')
def send(cls, reports):
pool = Pool()
Invoice = pool.get('account.invoice')
for report in reports:
if report.state != 'confirmed':
@ -453,19 +451,6 @@ class SIIReport(Workflow, ModelSQL, ModelView):
else:
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, {
'send_date': datetime.now(),
})
@ -477,7 +462,7 @@ class SIIReport(Workflow, ModelSQL, ModelView):
def process_response(cls, reports):
for report in reports:
if report.response:
cls._save_response(report.response)
report._save_response(report.response)
report.save()
def check_invoice_state(self):
@ -761,9 +746,12 @@ class SIIReport(Workflow, ModelSQL, ModelView):
self._save_response(self.response)
def _save_response(self, res):
ReportLine = Pool().get('aeat.sii.report.lines')
if res:
response = json.loads(res, object_hook=lambda d: namedtuple(
'SII', d.keys())(*d.values()))
lines2save = []
for (report_line, response_line) in zip(
self.lines, response.RespuestaLinea):
if not report_line.communication_code:
@ -772,7 +760,9 @@ class SIIReport(Workflow, ModelSQL, ModelView):
response_line.CodigoErrorRegistro)
report_line.communication_msg = (
response_line.DescripcionErrorRegistro)
report_line.save()
lines2save.append(report_line)
if lines2save:
ReportLine.save(lines2save)
if not self.communication_state:
self.communication_state = response.EstadoEnvio
if not self.csv:
@ -1284,34 +1274,40 @@ class SIIReportLine(ModelSQL, ModelView):
actions = iter(args)
to_write = []
to_check = []
for lines, values in zip(actions, actions):
invoice_values = {
'sii_pending_sending': False,
}
if values.get('state', None) == 'Correcto':
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))
if ('state' in values
or 'communication_code' in values
or 'invoice' in values):
to_check.extend(lines)
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
def delete(cls, lines):

View File

@ -143,7 +143,7 @@ class Invoice(metaclass=PoolMeta):
def reset_sii_keys(cls, invoices):
to_write = []
for invoice in invoices:
if invoice.state != 'draft':
if invoice.sii_state in ('Correcto', 'Correcta'):
continue
for field in _SII_INVOICE_KEYS:
setattr(invoice, field, None)