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