diff --git a/invoice.py b/invoice.py index 5661d4f..547d7dd 100644 --- a/invoice.py +++ b/invoice.py @@ -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])]