89 lines
2.8 KiB
Python
89 lines
2.8 KiB
Python
from odoo import api, fields, models, _
|
|
from odoo.exceptions import ValidationError
|
|
|
|
|
|
class EmployeePIP(models.Model):
|
|
_name = 'employee.pip'
|
|
_description = 'Performance Improvement Plan'
|
|
_inherit = ['mail.thread', 'mail.activity.mixin']
|
|
_rec_name = 'employee_id'
|
|
|
|
name = fields.Char(string="PIP Reference",default=lambda self: _('New'),readonly=True )
|
|
employee_id = fields.Many2one( 'hr.employee',required=True)
|
|
manager_id = fields.Many2one('hr.employee',string="Manager")
|
|
appraisal_id = fields.Many2one('employee.appraisal.template.config',string="Appraisal")
|
|
objective = fields.Text(string="Improvement Objective",required=True)
|
|
timeline = fields.Selection([
|
|
('30', '30 Days'),
|
|
('60', '60 Days'),
|
|
('90', '90 Days')
|
|
], default='30', required=True)
|
|
start_date = fields.Date(default=fields.Date.today)
|
|
end_date = fields.Date()
|
|
review_date = fields.Date()
|
|
employee_acknowledged = fields.Boolean(string="Employee Acknowledged")
|
|
state = fields.Selection([
|
|
('draft', 'Draft'),
|
|
('running', 'In Progress'),
|
|
('review', 'Under Review'),
|
|
('completed', 'Completed'),
|
|
('failed', 'Failed')
|
|
], default='draft', tracking=True)
|
|
task_ids = fields.One2many('employee.pip.task','pip_id',string='Improvement Tasks')
|
|
progress_percentage = fields.Float(compute='_compute_progress',store=True)
|
|
remarks = fields.Text()
|
|
|
|
@api.depends('task_ids.state')
|
|
def _compute_progress(self):
|
|
for rec in self:
|
|
|
|
total = len(rec.task_ids)
|
|
|
|
completed = len(
|
|
rec.task_ids.filtered(
|
|
lambda l: l.state == 'done'
|
|
)
|
|
)
|
|
|
|
rec.progress_percentage = (
|
|
(completed / total) * 100
|
|
) if total else 0
|
|
|
|
@api.onchange('timeline', 'start_date')
|
|
def _onchange_timeline(self):
|
|
for rec in self:
|
|
if rec.start_date and rec.timeline:
|
|
rec.end_date = fields.Date.add(
|
|
rec.start_date,
|
|
days=int(rec.timeline)
|
|
)
|
|
|
|
def action_start(self):
|
|
self.state = 'running'
|
|
|
|
def action_review(self):
|
|
self.state = 'review'
|
|
|
|
def action_complete(self):
|
|
self.state = 'completed'
|
|
|
|
def action_fail(self):
|
|
self.state = 'failed'
|
|
|
|
|
|
|
|
|
|
class EmployeePIPTask(models.Model):
|
|
_name = 'employee.pip.task'
|
|
_description = 'PIP Task'
|
|
|
|
pip_id = fields.Many2one('employee.pip',ondelete='cascade')
|
|
name = fields.Char(required=True)
|
|
description = fields.Text()
|
|
target_date = fields.Date()
|
|
training_course = fields.Char(string="Suggested Training")
|
|
state = fields.Selection([
|
|
('pending', 'Pending'),
|
|
('progress', 'In Progress'),
|
|
('done', 'Completed')
|
|
], default='pending') |