Sélectionner une révision Git
scop_deces_wizard.py
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