From 9c87db3c6201d0ea3ce012fc8baa28509dc92099 Mon Sep 17 00:00:00 2001 From: Victor Feyens Date: Fri, 23 Oct 2020 14:56:47 +0000 Subject: [PATCH] [IMP] gamification: support batch creation See merge commit for more details. Task ID-2330149 COM PR odoo/odoo#61246 ENT PR odoo/enterprise#14561 --- addons/gamification/models/badge.py | 9 +++++---- addons/gamification/models/challenge.py | 18 +++++++++--------- addons/gamification/models/goal.py | 24 +++++++++++++----------- 3 files changed, 27 insertions(+), 24 deletions(-) diff --git a/addons/gamification/models/badge.py b/addons/gamification/models/badge.py index 81a9d0564e8..9dd276096da 100644 --- a/addons/gamification/models/badge.py +++ b/addons/gamification/models/badge.py @@ -52,10 +52,11 @@ class BadgeUser(models.Model): return True - @api.model - def create(self, vals): - self.env['gamification.badge'].browse(vals['badge_id']).check_granting() - return super(BadgeUser, self).create(vals) + @api.model_create_multi + def create(self, vals_list): + for vals in vals_list: + self.env['gamification.badge'].browse(vals['badge_id']).check_granting() + return super().create(vals_list) class GamificationBadge(models.Model): diff --git a/addons/gamification/models/challenge.py b/addons/gamification/models/challenge.py index 2a1be3c6b88..02b13f1ba89 100644 --- a/addons/gamification/models/challenge.py +++ b/addons/gamification/models/challenge.py @@ -154,18 +154,18 @@ class Challenge(models.Model): return template.id if template else False - @api.model - def create(self, vals): + @api.model_create_multi + def create(self, vals_list): """Overwrite the create method to add the user of groups""" + for vals in vals_list: + if vals.get('user_domain'): + users = self._get_challenger_users(ustr(vals.get('user_domain'))) - if vals.get('user_domain'): - users = self._get_challenger_users(ustr(vals.get('user_domain'))) + if not vals.get('user_ids'): + vals['user_ids'] = [] + vals['user_ids'].extend((4, user.id) for user in users) - if not vals.get('user_ids'): - vals['user_ids'] = [] - vals['user_ids'].extend((4, user.id) for user in users) - - return super(Challenge, self).create(vals) + return super().create(vals_list) def write(self, vals): if vals.get('user_domain'): diff --git a/addons/gamification/models/goal.py b/addons/gamification/models/goal.py index ef48542a067..dad5b3b04fe 100644 --- a/addons/gamification/models/goal.py +++ b/addons/gamification/models/goal.py @@ -122,14 +122,16 @@ class GoalDefinition(models.Model): error=e )) - @api.model - def create(self, vals): - definition = super(GoalDefinition, self).create(vals) - if definition.computation_mode in ('count', 'sum'): - definition._check_domain_validity() - if vals.get('field_id'): - definition._check_model_validity() - return definition + @api.model_create_multi + def create(self, vals_list): + definitions = super(GoalDefinition, self).create(vals_list) + definitions.filtered_domain([ + ('computation_mode', 'in', ['count', 'sum']), + ])._check_domain_validity() + definitions.filtered_domain([ + ('field_id', '=', 'True'), + ])._check_model_validity() + return definitions def write(self, vals): res = super(GoalDefinition, self).write(vals) @@ -386,9 +388,9 @@ class Goal(models.Model): next goal update.""" return self.write({'state': 'inprogress'}) - @api.model - def create(self, vals): - return super(Goal, self.with_context(no_remind_goal=True)).create(vals) + @api.model_create_multi + def create(self, vals_list): + return super(Goal, self.with_context(no_remind_goal=True)).create(vals_list) def write(self, vals): """Overwrite the write method to update the last_update field to today