Skip to content
Extraits de code Groupes Projets
Sélectionner une révision Git
  • 6fee01f6ce44dcdb0efa6ef4b2e7f44a54487d51
  • 14.0 par défaut protégée
  • carto_fastapi
  • carto
4 résultats

endpoint.py

Blame
  • survey.py NaN Gio
    # Copyright 2024 Le Filament (<https://le-filament.com>)
    # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
    
    import logging
    from datetime import date
    
    from odoo import http
    from odoo.http import request
    
    from odoo.addons.survey.controllers.main import Survey
    
    _logger = logging.getLogger(__name__)
    
    
    class TrainingSurvey(Survey):
    
        # ------------------------------------------------------------
        # Inherit parent
        # ------------------------------------------------------------
        @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):
            """
            Hérite la fonction parente pour relier la réponse à la formation si elle est
            contenue dans l'URL
            """
            page = super().survey_start(
                survey_token=survey_token, answer_token=answer_token, email=email, **post
            )
    
            last_answer_token = answer_token or page.location.split("/")[-1]
            answer_sudo = (
                request.env["survey.user_input"]
                .sudo()
                .search([("access_token", "=", last_answer_token)])
            )
            survey_sudo = (
                request.env["survey.survey"]
                .sudo()
                .search([("access_token", "=", survey_token)])
            )
    
            training_id = post.get("training_id")
            if training_id:
                training = request.env["training.training"].sudo().browse(int(training_id))
                if training.date_limit and date.today() > training.date_limit:
                    return request.env["ir.qweb"]._render(
                        "training_survey.survey_closed",
                        {
                            "title": survey_sudo.title,
                            "training": training,
                            "website": training.website_id,
                            "main_object": training,
                        },
                    )
                if (
                    training.nb_student_max > 0
                    and (
                        training.students_waiting_count + training.students_confirmed_count
                    )
                    >= training.nb_student_max
                ):
                    return request.env["ir.qweb"]._render(
                        "training_survey.survey_max_student",
                        {
                            "title": survey_sudo.title,
                            "training": training,
                            "website": training.website_id,
                            "main_object": training,
                        },
                    )
                if training and training.registration_survey_id == survey_sudo:
                    answer_sudo.training_id = training
    
            return page
    
        # ------------------------------------------------------
        # Inherit Business methods
        # ------------------------------------------------------
        def _prepare_question_html(self, survey_sudo, answer_sudo, **post):
            """
            Annule la réponse en cours et renvoie vers la page de duplication de réponse si
            l'option est activée
            """
            response = super()._prepare_question_html(survey_sudo, answer_sudo, **post)
    
            if survey_sudo.is_one_answer and answer_sudo.is_duplicate_answer:
                request.env.cr.rollback()
                answer_sudo.unlink()
                response["survey_content"] = request.env["ir.qweb"]._render(
                    "training_survey.survey_duplicated_answer",
                    {"survey": survey_sudo, "title": survey_sudo.title},
                )
                _logger.error("Survey answer duplication not allowed")
    
            return response