open-synergy/opnsynid-hr

View on GitHub
hr_employee_training_evaluation/models/hr_training_participant_evaluation.py

Summary

Maintainability
B
4 hrs
Test Coverage
# -*- coding: utf-8 -*-
# Copyright 2018 OpenSynergy Indonesia
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).

from openerp import api, fields, models
from openerp.exceptions import Warning as UserError
from openerp.tools.translate import _


class HrTrainingParticipantEvaluation(models.Model):
    _name = "hr.training_participant_evaluation"
    _description = "Employee Training Participant Evaluation"
    _order = "sequence, id"
    _inherit = ["mail.thread"]

    participant_id = fields.Many2one(
        string="Participant",
        comodel_name="hr.training_partisipant",
        required=True,
        ondelete="cascade",
    )
    training_id = fields.Many2one(
        string="Training",
        comodel_name="hr.training",
        related="participant_id.training_id",
        store=True,
    )
    pre_post_test = fields.Selection(
        string="Pre/Post Evaluation",
        selection=[
            ("pre", "Pre Evaluation"),
            ("post", "Post Evaluation"),
        ],
        required=False,
        related="training_evaluation_id.pre_post_test",
        store=True,
    )
    training_evaluation_id = fields.Many2one(
        string="Training Evaluation",
        comodel_name="hr.training_evaluation",
        required=True,
        ondelete="cascade",
    )
    survey_id = fields.Many2one(
        string="Survey",
        comodel_name="survey.survey",
        related="training_evaluation_id.survey_id",
        required=False,
    )
    respon_id = fields.Many2one(
        string="Respon",
        comodel_name="survey.user_input",
        ondelete="set null",
    )
    sequence = fields.Integer(
        string="Sequence",
        required=True,
        default=5,
    )
    note = fields.Text(
        string="Note",
    )
    state = fields.Selection(
        string="State",
        selection=[
            ("draft", "Draft"),
            ("waiting", "In Progress"),
            ("done", "Done"),
            ("cancel", "Cancel"),
        ],
        required=True,
        default="draft",
    )

    @api.multi
    def action_start(self):
        for evaluation in self:
            evaluation.write(self._prepare_start_data())
            evaluation.respon_id.action_survey_resent()

    @api.multi
    def action_done(self):
        for evaluation in self:
            evaluation.write(self._prepare_done_data())

    @api.multi
    def action_cancel(self):
        for evaluation in self:
            evaluation.write(self._prepare_cancel_data())

    @api.multi
    def action_restart(self):
        for evaluation in self:
            evaluation.write(self._prepare_restart_data())

    @api.multi
    def action_start_survey(self):
        self.ensure_one()
        context = {
            "survey_token": self.respon_id.token,
        }
        return self.survey_id.with_context(context).action_start_survey()

    @api.multi
    def _prepare_start_data(self):
        self.ensure_one()
        respon = self._create_survey_request()
        return {
            "state": "waiting",
            "respon_id": respon.id,
        }

    @api.multi
    def _prepare_done_data(self):
        self.ensure_one()
        return {
            "state": "done",
        }

    @api.multi
    def _prepare_cancel_data(self):
        self.ensure_one()
        return {
            "state": "cancel",
        }

    @api.multi
    def _prepare_restart_data(self):
        self.ensure_one()
        return {
            "state": "draft",
        }

    @api.multi
    def _create_survey_request(self):
        self.ensure_one()
        obj_request = self.env["survey.user_input"]
        return obj_request.create(self._prepare_survey_request())

    @api.multi
    def _prepare_survey_request(self):
        self.ensure_one()
        return {
            "survey_id": self.survey_id.id,
            "type": "link",
            "partner_id": self._get_partner().id,
        }

    @api.multi
    def _get_partner(self):
        self.ensure_one()
        employee = self.participant_id.partisipant_id
        user = employee.user_id
        if not user:
            warning_msg = _("Please link employee to user")
            raise UserError(warning_msg)
        return user.partner_id

    @api.constrains("state", "respon_id")
    def _check_survey_respon_ok(self):
        if self.state == "done" and self.respon_id.state != "done":
            warning_msg = _("Evaluation is not finish!")
            raise UserError(warning_msg)