From f99cea5f69d233c9ff6cfc98627f6abee9efde87 Mon Sep 17 00:00:00 2001 From: Goffin Simon Date: Wed, 25 Feb 2015 13:48:53 +0100 Subject: [PATCH] [FIX] versioning: override read_group in Experiment to always display all Experiment states. --- addons/website_version/models/experiment.py | 29 ++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/addons/website_version/models/experiment.py b/addons/website_version/models/experiment.py index e5cf5f11e6b..cfed7fd5af1 100644 --- a/addons/website_version/models/experiment.py +++ b/addons/website_version/models/experiment.py @@ -62,9 +62,31 @@ class Experiment(models.Model): if not exp_ver.version_id.website_id.id == exp.website_id.id: raise ValidationError('This experiment must have versions which are in the same website') - _group_by_full = { - 'state': lambda *args, **kwargs: ([('running', 'Running'), ('paused', 'Paused'), ('ended', 'Ended')], dict()) - } + def read_group(self, cr, uid, domain, fields, groupby, offset=0, limit=None, context=None, orderby=False, lazy=True): + """ Override read_group to always display all states. """ + if groupby and groupby[0] == "state": + # Default result structure + # states = self._get_state_list(cr, uid, context=context) + states = [('running', 'Running'), ('paused', 'Paused'), ('ended', 'Ended')] + read_group_all_states = [{ + '__context': {'group_by': groupby[1:]}, + '__domain': domain + [('state', '=', state_value)], + 'state': state_value, + 'state_count': 0, + } for state_value, state_name in states] + # Get standard results + read_group_res = super(Experiment, self).read_group(cr, uid, domain, fields, groupby, offset=offset, limit=limit, context=context, orderby=orderby) + # Update standard results with default results + result = [] + for state_value, state_name in states: + res = filter(lambda x: x['state'] == state_value, read_group_res) + if not res: + res = filter(lambda x: x['state'] == state_value, read_group_all_states) + res[0]['state'] = [state_value, state_name] + result.append(res[0]) + return result + else: + return super(Experiment, self).read_group(cr, uid, domain, fields, groupby, offset=offset, limit=limit, context=context, orderby=orderby) @api.one def _get_version_number(self): @@ -127,6 +149,7 @@ class Experiment(models.Model): self.env['google.management'].delete_an_experiment(exp.google_id, exp.website_id.id) return super(Experiment, self).unlink() + @api.multi def update_goals(self): gm_obj = self.env['google.management'] goals_obj = self.env['website_version.goals']