odoo18/addons_extensions/project_kudos_plus/models/project_badge.py

37 lines
1.3 KiB
Python

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.")