diff --git a/__init__.py b/__init__.py index 0650744f6bc69b9f0b865e8c7174c813a5f5995e..f7209b17100218a42c80c8e984c08597d630b188 100644 --- a/__init__.py +++ b/__init__.py @@ -1 +1,2 @@ from . import models +from . import controllers diff --git a/controllers/__init__.py b/controllers/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e425c18c14ba72b12d8086c870cdcd5f615f23f4 --- /dev/null +++ b/controllers/__init__.py @@ -0,0 +1,4 @@ +# -*- encoding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from . import main diff --git a/controllers/main.py b/controllers/main.py new file mode 100644 index 0000000000000000000000000000000000000000..ffbbae975814cc7e93b394f1c127b3f7d6bb1ffc --- /dev/null +++ b/controllers/main.py @@ -0,0 +1,51 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +import logging + +from odoo.addons.survey.controllers.main import Survey +from odoo import http +from odoo.exceptions import UserError +from odoo.http import request + + +_logger = logging.getLogger(__name__) + + +class TrainingSurvey(Survey): + # + # ------------------------------------------------------------ + # TAKING SURVEY ROUTES + # ------------------------------------------------------------ + + @http.route( + "/survey/start/<string:survey_token>", type="http", auth="public", website=True + ) + def survey_start(self, survey_token, answer_token=None, email=False, **post): + """Start a survey by providing + * a token linked to a survey; + * a token linked to an answer or generate a new token if access is allowed; + """ + + page = super().survey_start( + survey_token=survey_token, answer_token=None, email=False, **post + ) + + answer_sudo = ( + request.env["survey.user_input"] + .sudo() + .search([("access_token", "=", page.location.split("/")[-1])]) + ) + survey_sudo = ( + request.env["survey.survey"] + .sudo() + .search([("access_token", "=", page.location.split("/")[-2])]) + ) + + training_id = post.get("training_id") + if training_id: + training = request.env["training.training"].browse(int(training_id)) + if training and training.registration_survey_id == survey_sudo: + answer_sudo.training_id = training + + return page diff --git a/models/survey_user_input.py b/models/survey_user_input.py index dd6b6adc541e42b7b95fc46206c5d2c11ac95edf..bbf109ea971d0ad4336cbf7707390929765f7eff 100644 --- a/models/survey_user_input.py +++ b/models/survey_user_input.py @@ -1,7 +1,7 @@ # Copyright 2019-2022 Le Filament (<https://le-filament.com>) # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from odoo import fields, models +from odoo import fields, models, api class SurveyUserInput(models.Model): @@ -17,6 +17,7 @@ class SurveyUserInput(models.Model): string="Formation", ondelete="cascade", ) + training_survey_type = fields.Selection( string="Type de questionnaire formation", related="survey_id.training_survey_type", @@ -29,6 +30,36 @@ class SurveyUserInput(models.Model): # ------------------------------------------------------ # Override ORM # ------------------------------------------------------ + def _mark_done(self): + """ + Hérite la fonction parente pour gérer les inscriptions aux formations au moment + de la validation du questionnaire + """ + super()._mark_done() + + student_model = self.env["training.student"].sudo() + + student_id = student_model.create( + { + "partner_id": self.partner_id.id, + "training_id": self.training_id.id, + "student_company": self.company, + } + ) + # Création de la réponse au sondage et inscription + self.create( + { + "partner_id": self.partner_id.id, + "email": self.partner_id.email, + "nickname": self.partner_id.lastname, + "firstname": self.partner_id.firstname, + "company": self.company, + "survey_id": self.training_id.registration_survey_id.id, + "student_id": student_id.id, + "training_id": self.training_id.id, + } + ) + # ------------------------------------------------------ # Compute diff --git a/models/training.py b/models/training.py index bf64ddd12a32753fefd023f479d6aecd60532df3..95c3651bfa20a6ed8dce912977fc19e2d988ff19 100644 --- a/models/training.py +++ b/models/training.py @@ -138,3 +138,8 @@ class Training(models.Model): # ------------------------------------------------------ def _get_survey_xlsx(self, survey_id): return self.env.ref("survey_xlsx.report_survey_xlsx").report_action(survey_id) + + def get_registration_survey_start_url(self): + + url = self.registration_survey_id.get_start_url() + return f"{url}?training_id={self.id}"