diff --git a/addons/analytic/models/analytic_mixin.py b/addons/analytic/models/analytic_mixin.py index 1cf4154bcb0..c8f011516ef 100644 --- a/addons/analytic/models/analytic_mixin.py +++ b/addons/analytic/models/analytic_mixin.py @@ -64,11 +64,14 @@ class AnalyticMixin(models.AbstractModel): @api.model def _search(self, domain, offset=0, limit=None, order=None, access_rights_uid=None): - for arg in domain: - if isinstance(arg, (list, tuple)) and arg[0] == 'analytic_distribution' and isinstance(arg[2], str): - arg[0] = 'analytic_distribution_search' + domain = self._apply_analytic_distribution_domain(domain) return super()._search(domain, offset, limit, order, access_rights_uid) + @api.model + def read_group(self, domain, fields, groupby, offset=0, limit=None, orderby=False, lazy=True): + domain = self._apply_analytic_distribution_domain(domain) + return super().read_group(domain, fields, groupby, offset, limit, orderby, lazy) + def write(self, vals): """ Format the analytic_distribution float value, so equality on analytic_distribution can be done """ decimal_precision = self.env['decimal.precision'].precision_get('Percentage Analytic') @@ -103,3 +106,9 @@ class AnalyticMixin(models.AbstractModel): vals['analytic_distribution'] = vals.get('analytic_distribution') and { account_id: float_round(distribution, decimal_precision) for account_id, distribution in vals['analytic_distribution'].items()} return vals + + def _apply_analytic_distribution_domain(self, domain): + return [ + ('analytic_distribution_search', leaf[1], leaf[2]) if len(leaf) == 3 and leaf[0] == 'analytic_distribution' else leaf + for leaf in domain + ]