summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Beguin <dbe@odoo.com>2019-11-04 12:25:31 +0000
committerThibault Delavallée <tde@odoo.com>2019-11-22 14:46:00 +0000
commit21cdbd82e90dfb48c5a6711f40b0751e444d20f0 (patch)
tree10316e34bed9ccde380c3a2be6d4008e09c6a708
parentbe3f074a910a76275ebaa576dc57f9b72f5ad4ae (diff)
[IMP] website_slides_survey: keep challenge category updated
Purpose of this commit is to ensure challenge linked to surveys linked to slides have ``slides`` category, while challenge linked to surveys not linked to slides (if changing survey_id for example) have ``certification`` category. With this patch challenges are correctly categorized, allowing to accurately filter them based on their category. Task ID : 1961053 PR #32594
-rw-r--r--addons/survey/models/survey_survey.py4
-rw-r--r--addons/website_slides_survey/models/slide_slide.py26
-rw-r--r--addons/website_slides_survey/models/survey_survey.py4
3 files changed, 33 insertions, 1 deletions
diff --git a/addons/survey/models/survey_survey.py b/addons/survey/models/survey_survey.py
index d11a83fd663..92030be9cf8 100644
--- a/addons/survey/models/survey_survey.py
+++ b/addons/survey/models/survey_survey.py
@@ -705,6 +705,8 @@ class Survey(models.Model):
# ------------------------------------------------------------
# GAMIFICATION / BADGES
# ------------------------------------------------------------
+ def _prepare_challenge_category(self):
+ return 'certification'
def _create_certification_badge_trigger(self):
self.ensure_one()
@@ -725,7 +727,7 @@ class Survey(models.Model):
'reward_id': self.certification_badge_id.id,
'state': 'inprogress',
'period': 'once',
- 'challenge_category': 'certification',
+ 'challenge_category': self._prepare_challenge_category(),
'reward_realtime': True,
'report_message_frequency': 'never',
'user_domain': [('karma', '>', 0)],
diff --git a/addons/website_slides_survey/models/slide_slide.py b/addons/website_slides_survey/models/slide_slide.py
index 6bc157b1ac6..3b3ceadefa7 100644
--- a/addons/website_slides_survey/models/slide_slide.py
+++ b/addons/website_slides_survey/models/slide_slide.py
@@ -57,8 +57,34 @@ class Slide(models.Model):
rec = super(Slide, self).create(values)
if rec.survey_id:
rec.slide_type = 'certification'
+ if 'survey_id' in values:
+ rec._ensure_challenge_category()
return rec
+ def write(self, values):
+ old_surveys = self.mapped('survey_id')
+ result = super(Slide, self).write(values)
+ if 'survey_id' in values:
+ self._ensure_challenge_category(old_surveys=old_surveys - self.mapped('survey_id'))
+ return result
+
+ def unlink(self):
+ old_surveys = self.mapped('survey_id')
+ result = super(Slide, self).unlink()
+ self._ensure_challenge_category(old_surveys=old_surveys, unlink=True)
+ return result
+
+ def _ensure_challenge_category(self, old_surveys=None, unlink=False):
+ """ If a slide is linked to a survey that gives a badge, the challenge category of this badge must be
+ set to 'slides' in order to appear under the certification badge list on ranks_badges page.
+ If the survey is unlinked from the slide, the challenge category must be reset to 'certification'"""
+ if old_surveys:
+ old_certification_challenges = old_surveys.mapped('certification_badge_id').challenge_ids
+ old_certification_challenges.write({'challenge_category': 'certification'})
+ if not unlink:
+ certification_challenges = self.mapped('survey_id').mapped('certification_badge_id').challenge_ids
+ certification_challenges.write({'challenge_category': 'slides'})
+
def _generate_certification_url(self):
""" get a map of certification url for certification slide from `self`. The url will come from the survey user input:
1/ existing and not done user_input for member of the course
diff --git a/addons/website_slides_survey/models/survey_survey.py b/addons/website_slides_survey/models/survey_survey.py
index dc8c91e1599..7f4e0c48bce 100644
--- a/addons/website_slides_survey/models/survey_survey.py
+++ b/addons/website_slides_survey/models/survey_survey.py
@@ -14,3 +14,7 @@ class Survey(models.Model):
return True
return super(Survey, self)._check_answer_creation(user, partner, email, test_entry=test_entry, check_attempts=check_attempts, invite_token=invite_token)
+
+ def _prepare_challenge_category(self):
+ slide_survey = self.env['slide.slide'].search([('survey_id', '=', self.id)])
+ return 'slides' if slide_survey else 'certification'