From 9a2128ae35d2c7670369d2aa5698af1dba701c64 Mon Sep 17 00:00:00 2001 From: "Abdelouahab (abla)" Date: Fri, 7 Jul 2023 11:48:43 +0000 Subject: [PATCH] [FIX] analytic: group by with domain including `analytic_distribution` MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit To reproduce ============ on journal items add filter (Analytic contains something) and group by Account, no lines will be shown. Problem ======= `analytic_distribution` is a Json field stored as string in database as follows: `{"id" : "percentage"}`, which explains why no result is returned as there is no trace for Analytics name. Solution ======== following same [fix](https://github.com/odoo/odoo/commit/bc5b72937a1c79688f7f6dc1c8aeaa7eb4cb6744), we replace `analytic_distribution` by `analytic_distribution_search` in the domain of `read_group`. opw-3391182 closes odoo/odoo#129263 X-original-commit: 05209fd295727cbbb5bf6a316f3c8873de6b2bed Signed-off-by: William André (wan) Signed-off-by: Abdelouahab Laaroussi (abla) --- addons/analytic/models/analytic_mixin.py | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) 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 + ]