odex30_standard/exp_hr_appraisal_kpi/models/kpi_period.py

63 lines
2.9 KiB
Python

from odoo import fields, models, api,_
from odoo.exceptions import ValidationError
from odoo import models, api, exceptions
from datetime import timedelta
class KPIPeriod(models.Model):
_inherit = 'kpi.period'
kpi_periods_ids = fields.One2many(
comodel_name='kpi.period.notes',
inverse_name='kpi_period_id',
ondelete='cascade') # Add this line to enable cascade deletion
kpi_goals_periods_ids = fields.One2many(
comodel_name='kpi.period.notes',
inverse_name='kpi_goal_period_id',
ondelete='cascade' ) # Add this line to enable cascade deletion
class KIPSkills (models.Model):
_name = 'kpi.period.notes'
name = fields.Char(string='Name',)
sequence = fields.Char(string='Sequence',)
date_start_k = fields.Date(string='Star Date',)
date_end_k = fields.Date(string='End Date',)
kpi_period_id = fields.Many2one(comodel_name='kpi.period',ondelete='cascade')
kpi_goal_period_id = fields.Many2one(comodel_name='kpi.period',ondelete='cascade')
def create_apprisal_goals_employee(self):
employee_objs = self.env['hr.employee'].search([('state','=','open')])
employee_id = self.env['hr.employee'].search([('user_id', '=', self.env.uid)], limit=1)
for item in self:
# Fill employee appraisal
for element in employee_objs:
appraisal_line = {
'employee_id': element.id,
'year_id': item.kpi_goal_period_id.id,
'department_id': element.department_id.id,
'job_id': element.job_id.id,
'manager_id': employee_id.id,
'date_apprisal': fields.Date.today(),
'period_goals_id': item.id,
}
line_id = self.env['employee.performance.evaluation'].create(appraisal_line)
line_id.onchange_emp_goal_ids()
@api.constrains('date_start_k','kpi_goal_period_id','date_end_k')
def _check_period_overlap(self):
for record in self:
if record.kpi_goal_period_id:
periods = record.kpi_goal_period_id.kpi_goals_periods_ids.sorted(key=lambda r: r.date_start_k)
for i in range(1, len(periods)):
if periods[i-1].date_end_k >= periods[i].date_start_k:
raise ValidationError(_("Overlap detected between periods!"))
@api.constrains('date_start_k','kpi_period_id','date_end_k')
def _check_period_overlap2(self):
for record in self:
if record.kpi_period_id:
periods = record.kpi_period_id.kpi_periods_ids.sorted(key=lambda r: r.date_start_k)
for i in range(1, len(periods)):
if periods[i-1].date_end_k >= periods[i].date_start_k:
raise ValidationError(_("Overlap detected between periods!"))