diff options
| author | stephanchrst <stephanchrst@gmail.com> | 2022-05-10 21:51:50 +0700 |
|---|---|---|
| committer | stephanchrst <stephanchrst@gmail.com> | 2022-05-10 21:51:50 +0700 |
| commit | 3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch) | |
| tree | a44932296ef4a9b71d5f010906253d8c53727726 /addons/hr_gamification/models | |
| parent | 0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff) | |
initial commit 2
Diffstat (limited to 'addons/hr_gamification/models')
| -rw-r--r-- | addons/hr_gamification/models/__init__.py | 6 | ||||
| -rw-r--r-- | addons/hr_gamification/models/gamification.py | 42 | ||||
| -rw-r--r-- | addons/hr_gamification/models/hr_employee.py | 38 | ||||
| -rw-r--r-- | addons/hr_gamification/models/res_users.py | 11 |
4 files changed, 97 insertions, 0 deletions
diff --git a/addons/hr_gamification/models/__init__.py b/addons/hr_gamification/models/__init__.py new file mode 100644 index 00000000..002facd9 --- /dev/null +++ b/addons/hr_gamification/models/__init__.py @@ -0,0 +1,6 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from . import gamification +from . import hr_employee +from . import res_users diff --git a/addons/hr_gamification/models/gamification.py b/addons/hr_gamification/models/gamification.py new file mode 100644 index 00000000..6f9dba17 --- /dev/null +++ b/addons/hr_gamification/models/gamification.py @@ -0,0 +1,42 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo import api, fields, models, _ +from odoo.exceptions import ValidationError + + +class GamificationBadgeUser(models.Model): + """User having received a badge""" + _inherit = 'gamification.badge.user' + + employee_id = fields.Many2one('hr.employee', string='Employee') + + @api.constrains('employee_id') + def _check_employee_related_user(self): + for badge_user in self: + if badge_user.employee_id not in badge_user.user_id.employee_ids: + raise ValidationError(_('The selected employee does not correspond to the selected user.')) + + +class GamificationBadge(models.Model): + _inherit = 'gamification.badge' + + granted_employees_count = fields.Integer(compute="_compute_granted_employees_count") + + @api.depends('owner_ids.employee_id') + def _compute_granted_employees_count(self): + for badge in self: + badge.granted_employees_count = self.env['gamification.badge.user'].search_count([ + ('badge_id', '=', badge.id), + ('employee_id', '!=', False) + ]) + + def get_granted_employees(self): + employee_ids = self.mapped('owner_ids.employee_id').ids + return { + 'type': 'ir.actions.act_window', + 'name': 'Granted Employees', + 'view_mode': 'kanban,tree,form', + 'res_model': 'hr.employee.public', + 'domain': [('id', 'in', employee_ids)] + } diff --git a/addons/hr_gamification/models/hr_employee.py b/addons/hr_gamification/models/hr_employee.py new file mode 100644 index 00000000..441c104c --- /dev/null +++ b/addons/hr_gamification/models/hr_employee.py @@ -0,0 +1,38 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo import api, fields, models + + +class HrEmployeeBase(models.AbstractModel): + _inherit = "hr.employee.base" + + goal_ids = fields.One2many('gamification.goal', string='Employee HR Goals', compute='_compute_employee_goals') + badge_ids = fields.One2many( + 'gamification.badge.user', string='Employee Badges', compute='_compute_employee_badges', + help="All employee badges, linked to the employee either directly or through the user" + ) + has_badges = fields.Boolean(compute='_compute_employee_badges') + # necessary for correct dependencies of badge_ids and has_badges + direct_badge_ids = fields.One2many( + 'gamification.badge.user', 'employee_id', + help="Badges directly linked to the employee") + + @api.depends('user_id.goal_ids.challenge_id.challenge_category') + def _compute_employee_goals(self): + for employee in self: + employee.goal_ids = self.env['gamification.goal'].search([ + ('user_id', '=', employee.user_id.id), + ('challenge_id.challenge_category', '=', 'hr'), + ]) + + @api.depends('direct_badge_ids', 'user_id.badge_ids.employee_id') + def _compute_employee_badges(self): + for employee in self: + badge_ids = self.env['gamification.badge.user'].search([ + '|', ('employee_id', '=', employee.id), + '&', ('employee_id', '=', False), + ('user_id', '=', employee.user_id.id) + ]) + employee.has_badges = bool(badge_ids) + employee.badge_ids = badge_ids diff --git a/addons/hr_gamification/models/res_users.py b/addons/hr_gamification/models/res_users.py new file mode 100644 index 00000000..f5a301f7 --- /dev/null +++ b/addons/hr_gamification/models/res_users.py @@ -0,0 +1,11 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo import fields, models + + +class ResUsers(models.Model): + _inherit = 'res.users' + + goal_ids = fields.One2many('gamification.goal', 'user_id') + badge_ids = fields.One2many('gamification.badge.user', 'user_id') |
