open-synergy/opnsynid-hr

View on GitHub
hr_employee_training_evaluation/models/hr_training.py

Summary

Maintainability
A
3 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


class HrTraining(models.Model):
    _inherit = "hr.training"

    @api.multi
    @api.depends(
        "category_id",
    )
    def _compute_survey(self):
        for training in self:
            if training.category_id:
                training.pre_survey_ids = [
                    (6, 0, training.category_id.pre_survey_ids.ids)
                ]
                training.post_survey_ids = [
                    (6, 0, training.category_id.post_survey_ids.ids)
                ]

    pre_survey_ids = fields.Many2many(
        string="Pre-Evaluation Survey",
        comodel_name="survey.survey",
        compute="_compute_survey",
    )
    post_survey_ids = fields.Many2many(
        string="Post-Evaluation Survey",
        comodel_name="survey.survey",
        compute="_compute_survey",
    )
    evaluation_ids = fields.One2many(
        string="Evaluations",
        comodel_name="hr.training_evaluation",
        inverse_name="training_id",
        readonly=True,
        states={
            "draft": [
                ("readonly", False),
            ],
        },
    )
    pre_evaluation_ids = fields.One2many(
        string="Pre-Evaluations",
        comodel_name="hr.training_evaluation",
        inverse_name="training_id",
        domain=[
            ("pre_post_test", "=", "pre"),
        ],
        readonly=True,
        states={
            "draft": [
                ("readonly", False),
            ],
        },
    )
    post_evaluation_ids = fields.One2many(
        string="Post-Evaluations",
        comodel_name="hr.training_evaluation",
        inverse_name="training_id",
        domain=[
            ("pre_post_test", "=", "post"),
        ],
        readonly=True,
        states={
            "draft": [
                ("readonly", False),
            ],
        },
    )

    @api.multi
    def action_create_participant_evaluation(self):
        for training in self:
            training._create_participant_evaluation()

    @api.multi
    def _create_participant_evaluation(self):
        self.ensure_one()
        obj_evaluation = self.env["hr.training_participant_evaluation"]
        for participant in self.partisipant_ids:
            for evaluation in self.evaluation_ids:
                criteria = [
                    ("participant_id", "=", participant.id),
                    ("training_evaluation_id", "=", evaluation.id),
                ]
                num = obj_evaluation.search_count(criteria)
                if num == 0:
                    evaluation._create_participant_evaluation(participant)