from odoo import api, fields, models from datetime import date class ResConfigSettings(models.TransientModel): _inherit = 'res.config.settings' appraisal_reminder_days = fields.Integer( string="Appraisal Reminder Before (Days)", config_parameter='hrms_employee_appraisal.appraisal_reminder_days', default=7 ) appraisal_reminder_enabled = fields.Boolean( string="Enable Appraisal Reminders", config_parameter='hrms_employee_appraisal.appraisal_reminder_enabled', default=True ) class EmployeeAppraisal(models.Model): _inherit = 'employee.appraisal.template.config' def cron_send_appraisal_reminder(self): enabled = self.env['ir.config_parameter'].sudo().get_param( 'hrms_employee_appraisal.appraisal_reminder_enabled' ) if not enabled: return reminder_days = int( self.env['ir.config_parameter'].sudo().get_param( 'hrms_employee_appraisal.appraisal_reminder_days', 7 ) ) today = date.today() records = self.search([ ('end_date', '!=', False) ]) for rec in records: days_left = (rec.end_date - today).days if days_left == reminder_days: if rec.employee_appraisal_id.work_email: self.env['mail.mail'].sudo().create({ 'subject': 'Performance Appraisal Reminder', 'email_to': rec.employee_appraisal_id.work_email, 'body_html': f"""
Dear {rec.employee_appraisal_id.name},
Your appraisal period is ending in {reminder_days} days.
Please complete your self appraisal.
Regards,
HR Team