@@ -728,7 +726,8 @@ class EmployeeAppraisal(models.Model):
'default_model': 'employee.appraisal.template.config',
'default_res_ids': [self.id],
'default_composition_mode': 'comment',
- 'default_email_to': email_to,
+ 'default_email_to': ",".join(email_list),
+ 'default_partner_ids': [(6, 0, list(set(partner_ids)))],
'default_subject': f'Finance Head Approval - {self.employee_appraisal_id.name}',
'default_body': body_html,
'move_next_stage': True,
@@ -809,6 +808,20 @@ class EmployeeAppraisal(models.Model):
def action_sent_employee_appraisal(self):
self.ensure_one()
+ missing = []
+
+ for kra in self.kra_line_ids:
+ for kpi in kra.kpi_line_ids:
+
+ if self.template_empl_rating_bool and not kpi.manager_rating_star:
+ missing.append(_("Please give the Star rating for KPI '%s'.") % (kpi.question or ''))
+
+ if self.template_empl_point_bool and kpi.manager_score <= 0:
+ missing.append(_("Please enter the score for KPI '%s'.") % (kpi.question or ''))
+
+ if missing:
+ raise ValidationError("\n".join(missing))
+
if not self.manager_remarks:
raise ValidationError("Please give the Manager Remarks")
@@ -823,6 +836,22 @@ class EmployeeAppraisal(models.Model):
creator_email
])
)
+ partner_ids = []
+ # if self.managerapp_id.user_id.partner_id:
+ # partner_ids.append(self.managerapp_id.user_id.partner_id.id)
+
+ # if self.employee_appraisal_id.user_id.partner_id:
+ # partner_ids.append(self.employee_appraisal_id.user_id.partner_id.id)
+
+ if self.hr_apprai_id.user_id.partner_id:
+ partner_ids.append(self.hr_apprai_id.user_id.partner_id.id)
+
+ # creator = self.env['res.users'].search(
+ # [('email', '=', self.creator_email)],
+ # limit=1
+ # )
+ # if creator.partner_id:
+ # partner_ids.append(creator.partner_id.id)
body_html = f"""
@@ -881,6 +910,7 @@ class EmployeeAppraisal(models.Model):
'default_res_ids': [self.id],
'default_composition_mode': 'comment',
'default_email_to': emails,
+ 'default_partner_ids': [(6, 0, list(set(partner_ids)))],
'default_subject': 'Employee Appraisal Notification',
'default_body': body_html,
'mark_appraisal_sent': True,
@@ -896,12 +926,29 @@ class EmployeeAppraisal(models.Model):
def action_confirm_hr(self):
self.ensure_one()
+ missing = []
+
+ for kra in self.kra_line_ids:
+ for kpi in kra.kpi_line_ids:
+
+ if self.template_empl_rating_bool and not kpi.hr_rating_star:
+ missing.append(_("Please give the Star rating for KPI '%s'.") % (kpi.question or ''))
+
+ if self.template_empl_point_bool and kpi.hr_score <= 0:
+ missing.append(_("Please enter the score for KPI '%s'.") % (kpi.question or ''))
+
+ if missing:
+ raise ValidationError("\n".join(missing))
if not self.hr_remarks:
raise ValidationError ('Please Provide the Remarks')
email_to = self.managerapp_id.work_email or ''
+ partner_ids = []
+ if self.hr_head_apprai_id.user_id.partner_id:
+ partner_ids.append(self.hr_head_apprai_id.user_id.partner_id.id)
+
body_html = f"""
Hello,
@@ -945,6 +992,7 @@ class EmployeeAppraisal(models.Model):
'default_res_ids': [self.id],
'default_composition_mode': 'comment',
'default_email_to': email_to,
+ 'default_partner_ids': [(6, 0, list(set(partner_ids)))],
'default_subject': f'HR Evaluation Completed - {self.employee_appraisal_id.name}',
'default_body': body_html,
'move_hr_next_stage': True,
@@ -966,7 +1014,18 @@ class EmployeeAppraisal(models.Model):
_('Please provide HR Head Remarks.')
)
- email_to = self.created_by_id.work_email or ''
+ # email_to = self.created_by_id.work_email or ''
+ # partner_ids = []
+ # if self.created_by_id.user_id.partner_id:
+ # partner_ids.append(self.created_by_id.user_id.partner_id.id)
+ finance_group = self.env.ref('hrms_employee_appraisal.group_appraisal_finance')
+ email_list = []
+ partner_ids = []
+ for user in finance_group.users:
+ if user.partner_id.email:
+ email_list.append(user.partner_id.email)
+ if user.partner_id:
+ partner_ids.append(user.partner_id.id)
body_html = f"""
@@ -1007,7 +1066,8 @@ class EmployeeAppraisal(models.Model):
'default_model': 'employee.appraisal.template.config',
'default_res_ids': [self.id],
'default_composition_mode': 'comment',
- 'default_email_to': email_to,
+ 'default_email_to': ",".join(email_list),
+ 'default_partner_ids': [(6, 0, list(set(partner_ids)))],
'default_subject': f'HR Head Approval - {self.employee_appraisal_id.name}',
'default_body': body_html,
'move_hr_head_next_stage': True,
@@ -1023,12 +1083,35 @@ class EmployeeAppraisal(models.Model):
def action_send_colleague_feedback(self):
for rec in self:
+ # for kra in rec.kra_line_ids:
+ # for kpi in kra.kpi_line_ids:
+ # if rec.template_empl_rating_bool and not kpi.rating_star:
+ # raise ValidationError(_(
+ # "Please give the self rating for the KPI '%s' before sending the colleague feedback."
+ # ) % (kpi.question or ''))
+ # if rec.template_empl_point_bool and not kpi.employee_score <= 0:
+ # raise ValidationError(_("Please enter the self score for the KPI '%s' before sending the colleague feedback."
+ # ) % (kpi.question or ''))
+ missing = []
+
+ for kra in rec.kra_line_ids:
+ for kpi in kra.kpi_line_ids:
+
+ if rec.template_empl_rating_bool and not kpi.rating_star:
+ missing.append(_("Please give the self rating for KPI '%s'.") % (kpi.question or ''))
+
+ if rec.template_empl_point_bool and kpi.employee_score <= 0:
+ missing.append(_("Please enter the self score for KPI '%s'.") % (kpi.question or ''))
+
+ if missing:
+ raise ValidationError("\n".join(missing))
+
employees = self.env['hr.employee'].search([
('department_id', '=', rec.department_appraisal_id.id),
('id', '!=', rec.employee_appraisal_id.id)
])
vals = []
- email_list = []
+
for emp in employees:
already_exists = self.env['colleague.feedback'].search([
('employee_appraisal_feed_id', '=', rec.id),
@@ -1039,9 +1122,13 @@ class EmployeeAppraisal(models.Model):
'colleague_feed_id': emp.id,
}))
rec.colleague_feed_ids = vals
- if self.managerapp_id and self.managerapp_id.work_email:
- email_list.append(self.managerapp_id.work_email)
- email_to = ",".join(filter(None, email_list))
+ email_list = []
+ partner_ids = []
+ if rec.managerapp_id:
+ if rec.managerapp_id.work_email:
+ email_list.append(rec.managerapp_id.work_email)
+ if rec.managerapp_id.user_id.partner_id:
+ partner_ids.append(rec.managerapp_id.user_id.partner_id.id)
body_html = f"""
@@ -1067,7 +1154,8 @@ class EmployeeAppraisal(models.Model):
'default_model': 'employee.appraisal.template.config',
'default_res_ids': [self.id],
'default_composition_mode': 'comment',
- 'default_email_to': email_to,
+ 'default_email_to': ",".join(email_list),
+ 'default_partner_ids': [(6, 0, partner_ids)],
'default_subject': f'Colleague Feedback Request - {self.employee_appraisal_id.name}',
'default_body': body_html,
'mark_colleague_feedback_sent': True,
diff --git a/addons_extensions/hrms_employee_appraisal/models/hr_head_nofication.py b/addons_extensions/hrms_employee_appraisal/models/hr_head_nofication.py
index 67c2c2712..2308235da 100644
--- a/addons_extensions/hrms_employee_appraisal/models/hr_head_nofication.py
+++ b/addons_extensions/hrms_employee_appraisal/models/hr_head_nofication.py
@@ -1,4 +1,5 @@
from odoo import api, fields, models
+from odoo.exceptions import ValidationError
class HrHeadNofication(models.Model):
@@ -37,6 +38,13 @@ class HrHeadNofication(models.Model):
hr_users_ids = fields.Many2many('res.users', string="HR Team", copy=False, domain=_get_hr_users_domain)
+ @api.constrains('start_date','end_date')
+ def check_dates(self):
+ for rec in self:
+ if rec.start_date and rec.end_date and rec.end_date <= rec.start_date:
+ raise ValidationError("End date must be before start date.")
+
+
@api.model
def create(self, vals):
if vals.get('seq', 'New') == 'New':
@@ -68,6 +76,9 @@ class HrHeadNofication(models.Model):
hr_emails = self.hr_users_ids.mapped('email')
email_to = ",".join(filter(None, hr_emails))
+ partner_ids = []
+ if self.hr_users_ids.partner_id:
+ partner_ids = self.hr_users_ids.partner_id.ids
body_html = f"""