37 lines
1.3 KiB
Python
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.")
|