Skip to content
Extraits de code Groupes Projets
Sélectionner une révision Git
  • 030fb41717120c4f51a814ef5a9b339871e35805
  • 14.0 par défaut
  • 12.0 protégée
  • 13.0
4 résultats

scop_deces_wizard.py

Blame
  • training_student.py 4,30 Kio
    # Copyright 2024 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.exceptions import UserError
    
    
    class TrainingStudent(models.Model):
        _inherit = "training.student"
    
        student_survey_ids = fields.One2many(
            comodel_name="survey.user_input",
            inverse_name="student_id",
            string="Questionnaires",
        )
        survey_count = fields.Integer(compute="_compute_survey_count")
        aeci_sent = fields.Boolean(compute="_compute_aeci_sent")
    
        # ------------------------------------------------------
        # Compute
        # ------------------------------------------------------
        def _compute_survey_count(self):
            for student in self:
                student.survey_count = student.student_survey_ids.__len__()
    
        def _compute_aeci_sent(self):
            for student in self:
                aeci = student.student_survey_ids.filtered(
                    lambda ui: ui.survey_id.training_survey_type == "aeci"
                )
                student.aeci_sent = True if aeci else False
    
        # ------------------------------------------------------
        # Action buttons
        # ------------------------------------------------------
        def action_view_survey(self):
            self.ensure_one()
            return {
                "name": f"Questionnaires {self.partner_id.name}",
                "type": "ir.actions.act_window",
                "view_mode": "kanban,tree,form,activity",
                "res_model": "survey.user_input",
                "domain": [
                    ("student_id", "=", self.id),
                ],
                "context": {"create": 0, "delete": 0},
            }
    
        def action_create_aeci(self):
            aeci_template_id = self.env.ref("training_survey.mail_template_training_aeci")
            self._create_and_send_survey(
                self.training_id.program_id.aeci_survey_id, aeci_template_id
            )
    
        # ------------------------------------------------------
        # Business methods
        # ------------------------------------------------------
        def get_certification_name(self):
            self.ensure_one()
            if self.training_id.training_type_id == self.env.ref("training.training_type_present"):
                return "Attestation de fin de formation"
            else:
                return "Certificat de réalisation"
    
        def _create_and_send_survey(self, survey_id, template_id):
            """
            Crée la réponse de l'utilisateur et envoie un email sur le template défini:
            :param survey_id: survey.survey
            :param template_id: email template
            """
            for student in self:
                answer_id = student._create_answer(survey_id)
                # Envoie le mail de confirmation d'inscription à l'UP
                template_id.with_context(survey_user_input=answer_id).send_mail(
                    student.id,
                    email_layout_xmlid="training.mail_training_layout",
                )
    
        def _create_answer(self, survey_id):
            self.ensure_one()
            student_answer = survey_id.user_input_ids.filtered(
                lambda ui: ui.student_id == self and ui.training_id == self.training_id
            )
            if not student_answer:
                return self._init_answer(survey_id)
            else:
                raise UserError(
                    _(
                        f"La réponse pour le questionnaire {survey_id.title} de la formation "
                        f"{self.training_id.program_id.name} a déjà été initialisée pour "
                        f"{self.partner_id.name}"
                    )
                )
    
        def _init_answer(self, survey_id):
            """
            Initialise la réponse pour un stagiaire et un questionnaire donné
            """
            answer_id = self.student_survey_ids.create(
                {
                    "partner_id": self.partner_id.id,
                    "email": self.partner_id.email,
                    "nickname": self.partner_id.lastname,
                    "firstname": self.partner_id.firstname,
                    "company": self.student_company,
                    "survey_id": survey_id.id,
                    "student_id": self.id,
                    "training_id": self.training_id.id,
                }
            )
    
            answer_id._create_input_line("email")
            answer_id._create_input_line("firstname")
            answer_id._create_input_line("nickname")
            answer_id._create_input_line("company")
    
            return answer_id