From aee95705d2f51750d0b701620ca277f7ff482bec Mon Sep 17 00:00:00 2001 From: jem-odoo Date: Thu, 26 Apr 2018 13:33:55 +0200 Subject: [PATCH] [FIX] sale: normalize domain is smart When manipulating domain, this is always better to normalize them, otherwise we can have strange behavior when handleing them with `expression.OR` and `expression.AND`. For instance: domain = [('so_line', 'in', [91]), ('amount', '<=', 0.0)] timesheet_domain = ['&', ('so_line', 'in', []), ('project_id', '!=', False)] `expresion.OR(domain, timesheet_domain)` will give ['|', ('so_line', 'in', [91]), ('amount', '<=', 0.0), '&', ('so_line', 'in', []), ('project_id', '!=', False)] And this is not what we attempt. Closes #24038 --- addons/sale/models/sale.py | 2 +- addons/sale_timesheet/models/sale_order.py | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/addons/sale/models/sale.py b/addons/sale/models/sale.py index 4858afdaa19..a37ee94e411 100644 --- a/addons/sale/models/sale.py +++ b/addons/sale/models/sale.py @@ -1183,7 +1183,7 @@ class SaleOrderLine(models.Model): on SO lines. This method is a hook: since analytic line are used for timesheet, expense, ... each use case should provide its part of the domain. """ - return [('so_line', 'in', self.ids), ('amount', '<=', 0.0)] + return ['&', ('so_line', 'in', self.ids), ('amount', '<=', 0.0)] @api.multi def _analytic_compute_delivered_quantity(self): diff --git a/addons/sale_timesheet/models/sale_order.py b/addons/sale_timesheet/models/sale_order.py index fb1fd232ed8..9e8fd178a74 100644 --- a/addons/sale_timesheet/models/sale_order.py +++ b/addons/sale_timesheet/models/sale_order.py @@ -175,6 +175,7 @@ class SaleOrderLine(models.Model): @api.multi def _analytic_compute_delivered_quantity_domain(self): domain = super(SaleOrderLine, self)._analytic_compute_delivered_quantity_domain() + domain = expression.AND([domain, [('project_id', '=', False)]]) timesheet_domain = self._timesheet_compute_delivered_quantity_domain() return expression.OR([domain, timesheet_domain])