Improve searcher of invoice sii_state field.

This commit refs #19616
This commit is contained in:
Sergio Morillo 2021-07-12 18:33:05 +02:00
parent 94ed2d7d48
commit 862fd6e846
1 changed files with 18 additions and 9 deletions

View File

@ -87,6 +87,8 @@ class Invoice(metaclass=PoolMeta):
pool = Pool() pool = Pool()
SIILines = pool.get('aeat.sii.report.lines') SIILines = pool.get('aeat.sii.report.lines')
assert clause[1] in ('=', 'in')
table = SIILines.__table__() table = SIILines.__table__()
cursor = Transaction().connection.cursor() cursor = Transaction().connection.cursor()
@ -99,25 +101,32 @@ class Invoice(metaclass=PoolMeta):
invoices.append(invoice) invoices.append(invoice)
lines.append(id_) lines.append(id_)
values = clause[-1]
is_none = False is_none = False
c = clause[-1] if isinstance(clause[-1], (list, tuple, set)):
if isinstance(clause[-1], list):
if None in clause[-1]: if None in clause[-1]:
is_none = True is_none = True
c.remove(None) values.remove(None)
else:
is_none = bool(clause[-1] is None)
c0 = [] c0 = []
if clause[-1] is None or is_none: if is_none:
c0 = [('id', 'not in', invoices)] c0 = [('sii_records', '=', None)]
clause2 = [tuple(('state',)) + tuple(clause[1:]), clause2 = [
('id', 'in', lines)] ('state', ) + tuple(clause[1:2]) + (values, ),
('id', 'in', lines)
]
res_lines = SIILines.search(clause2) res_lines = SIILines.search(clause2)
if is_none: if is_none:
return ['OR', c0, [ return [
('id', 'in', [x.invoice.id for x in res_lines])]] 'OR',
c0,
[('id', 'in', [x.invoice.id for x in res_lines])]
]
else: else:
return [('id', 'in', [x.invoice.id for x in res_lines])] return [('id', 'in', [x.invoice.id for x in res_lines])]