53 lines
2.1 KiB
Python
53 lines
2.1 KiB
Python
from odoo import models, fields, api
|
|
|
|
class KpiKpi(models.Model):
|
|
_name = 'kpi.kpi'
|
|
_description = 'Employee KPI'
|
|
_inherit = ['portal.mixin', 'mail.thread', 'mail.activity.mixin']
|
|
|
|
name = fields.Char(string='Reference', required=True, copy=False, readonly=True, default='New')
|
|
employee_id = fields.Many2one('hr.employee', string='Employee', required=True, tracking=True)
|
|
manager_id = fields.Many2one('hr.employee', string='Manager', tracking=True)
|
|
job_id = fields.Many2one('hr.job', string='Job Position', related='employee_id.job_id', store=True, readonly=True)
|
|
department_id = fields.Many2one('hr.department', string='Department', related='employee_id.department_id', store=True, readonly=True)
|
|
|
|
period = fields.Selection([
|
|
('2024', '2024'),
|
|
('2025', '2025'),
|
|
('2026', '2026'),
|
|
('2027', '2027'),
|
|
], string='Period (Year)', required=True, default=lambda self: str(fields.Date.today().year), tracking=True)
|
|
|
|
state = fields.Selection([
|
|
('draft', 'Draft'),
|
|
('confirmed', 'Confirmed'),
|
|
('done', 'Done'),
|
|
('cancel', 'Cancelled'),
|
|
], string='Status', default='draft', tracking=True)
|
|
|
|
line_ids = fields.One2many('kpi.kpi.line', 'kpi_id', string='KPI Lines')
|
|
total_score = fields.Float(string='Total Score', compute='_compute_total_score', store=True)
|
|
|
|
@api.model_create_multi
|
|
def create(self, vals_list):
|
|
for vals in vals_list:
|
|
if vals.get('name', 'New') == 'New':
|
|
employee = self.env['hr.employee'].browse(vals.get('employee_id'))
|
|
year = vals.get('period')
|
|
vals['name'] = f"KPI - {employee.name} - {year}"
|
|
return super(KpiKpi, self).create(vals_list)
|
|
|
|
@api.depends('line_ids.final_score')
|
|
def _compute_total_score(self):
|
|
for record in self:
|
|
record.total_score = sum(line.final_score for line in record.line_ids)
|
|
|
|
def action_confirm(self):
|
|
self.write({'state': 'confirmed'})
|
|
|
|
def action_done(self):
|
|
self.write({'state': 'done'})
|
|
|
|
def action_draft(self):
|
|
self.write({'state': 'draft'})
|