From c86ab0d45cd00c807616fb9117b95292b4c8057e Mon Sep 17 00:00:00 2001 From: Graeme Gellatly Date: Tue, 28 Jul 2026 01:23:37 +0000 Subject: [PATCH] [FIX] agreement_rebate: always return a Domain from _target_line_domain In 19.0 `_target_line_domain` returned a mix of types: a plain list in the common case, but a `Domain` object when the agreement had `rebate_line_ids`. Callers (and modules overriding this method) that treat the result as a list then break, e.g. `AttributeError: 'DomainAnd' object has no attribute 'append'`. Compose the domain natively with `Domain` and the `&` operator so the method consistently returns a `Domain`. Behaviour is unchanged: the extra leaves are still AND-ed together, and the `Domain` round-trips through the `target_domain` Char field via its list-style repr. Co-authored-by: Cursor --- agreement_rebate/wizards/settlement_create.py | 23 ++++++------------- 1 file changed, 7 insertions(+), 16 deletions(-) diff --git a/agreement_rebate/wizards/settlement_create.py b/agreement_rebate/wizards/settlement_create.py index 3936820c2..5a62033a0 100644 --- a/agreement_rebate/wizards/settlement_create.py +++ b/agreement_rebate/wizards/settlement_create.py @@ -116,30 +116,21 @@ def _prepare_target_domain(self): return domain def _target_line_domain(self, agreement_domain, agreement, line=False): - domain = agreement_domain.copy() + domain = Domain(agreement_domain) if agreement.start_date: - domain.append( - ( - "invoice_date", - ">=", - fields.Date.to_string(agreement.start_date), - ) + domain &= Domain( + "invoice_date", ">=", fields.Date.to_string(agreement.start_date) ) if agreement.end_date: - domain.append( - ( - "invoice_date", - "<=", - fields.Date.to_string(agreement.end_date), - ) + domain &= Domain( + "invoice_date", "<=", fields.Date.to_string(agreement.end_date) ) if line: - domain += safe_eval(line.rebate_domain) + domain &= Domain(safe_eval(line.rebate_domain)) elif agreement.rebate_line_ids: - line_domains = Domain.OR( + domain &= Domain.OR( [Domain(safe_eval(x.rebate_domain)) for x in agreement.rebate_line_ids] ) - domain = Domain(domain) & line_domains return domain def get_agregate_fields(self):