summaryrefslogtreecommitdiff
path: root/addons/hr_gamification/models
diff options
context:
space:
mode:
authorstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
committerstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
commit3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch)
treea44932296ef4a9b71d5f010906253d8c53727726 /addons/hr_gamification/models
parent0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff)
initial commit 2
Diffstat (limited to 'addons/hr_gamification/models')
-rw-r--r--addons/hr_gamification/models/__init__.py6
-rw-r--r--addons/hr_gamification/models/gamification.py42
-rw-r--r--addons/hr_gamification/models/hr_employee.py38
-rw-r--r--addons/hr_gamification/models/res_users.py11
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')