summaryrefslogtreecommitdiff
path: root/addons/website_slides_survey/models/survey_user.py
diff options
context:
space:
mode:
authorstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
committerstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
commit3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch)
treea44932296ef4a9b71d5f010906253d8c53727726 /addons/website_slides_survey/models/survey_user.py
parent0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff)
initial commit 2
Diffstat (limited to 'addons/website_slides_survey/models/survey_user.py')
-rw-r--r--addons/website_slides_survey/models/survey_user.py64
1 files changed, 64 insertions, 0 deletions
diff --git a/addons/website_slides_survey/models/survey_user.py b/addons/website_slides_survey/models/survey_user.py
new file mode 100644
index 00000000..f19aaa4d
--- /dev/null
+++ b/addons/website_slides_survey/models/survey_user.py
@@ -0,0 +1,64 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from odoo import fields, models, api
+from odoo.osv import expression
+
+
+class SurveyUserInput(models.Model):
+ _inherit = 'survey.user_input'
+
+ slide_id = fields.Many2one('slide.slide', 'Related course slide',
+ help="The related course slide when there is no membership information")
+ slide_partner_id = fields.Many2one('slide.slide.partner', 'Subscriber information',
+ help="Slide membership information for the logged in user")
+
+ @api.model_create_multi
+ def create(self, vals_list):
+ records = super(SurveyUserInput, self).create(vals_list)
+ records._check_for_failed_attempt()
+ return records
+
+ def write(self, vals):
+ res = super(SurveyUserInput, self).write(vals)
+ if 'state' in vals:
+ self._check_for_failed_attempt()
+ return res
+
+ def _check_for_failed_attempt(self):
+ """ If the user fails his last attempt at a course certification,
+ we remove him from the members of the course (and he has to enroll again).
+ He receives an email in the process notifying him of his failure and suggesting
+ he enrolls to the course again.
+
+ The purpose is to have a 'certification flow' where the user can re-purchase the
+ certification when they have failed it."""
+
+ if self:
+ user_inputs = self.search([
+ ('id', 'in', self.ids),
+ ('state', '=', 'done'),
+ ('scoring_success', '=', False),
+ ('slide_partner_id', '!=', False)
+ ])
+
+ if user_inputs:
+ for user_input in user_inputs:
+ removed_memberships_per_partner = {}
+ if user_input.survey_id._has_attempts_left(user_input.partner_id, user_input.email, user_input.invite_token):
+ # skip if user still has attempts left
+ continue
+
+ self.env.ref('website_slides_survey.mail_template_user_input_certification_failed').send_mail(
+ user_input.id, notif_layout="mail.mail_notification_light"
+ )
+
+ removed_memberships = removed_memberships_per_partner.get(
+ user_input.partner_id,
+ self.env['slide.channel']
+ )
+ removed_memberships |= user_input.slide_partner_id.channel_id
+ removed_memberships_per_partner[user_input.partner_id] = removed_memberships
+
+ for partner_id, removed_memberships in removed_memberships_per_partner.items():
+ removed_memberships._remove_membership(partner_id.ids)