from odoo import fields, models, api class ProjectKudosBadge(models.Model): _name = 'project.kudos.badge' _description = 'Kudos Achievement Badges' name = fields.Char(required=True) level = fields.Selection([ ('bronze', 'Bronze'), ('silver', 'Silver'), ('gold', 'Gold'), ('platinum', 'Platinum'), ], required=True) threshold = fields.Integer(string="Points Required", required=True) employee_ids = fields.Many2many( 'hr.employee', 'project_kudos_badge_employee_rel', # <-- add this line 'badge_id', 'employee_id', string="Awarded Employees" ) @api.model def _cron_assign_badges(self): employees = self.env['hr.employee'].search([]) for emp in employees: total_points = sum(self.env['project.kudos'].search([ ('employee_id', '=', emp.id) ]).mapped('points_awarded')) badge = self.search([('threshold', '<=', total_points)], order='threshold desc', limit=1) if badge and emp not in badge.employee_ids: badge.employee_ids = [(4, emp.id)] emp.message_post(body=f"🏅 Congratulations {emp.name}! You earned the {badge.level.title()} Badge.")