summaryrefslogtreecommitdiff
path: root/addons/hr_holidays/models/res_users.py
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_holidays/models/res_users.py
parent0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff)
initial commit 2
Diffstat (limited to 'addons/hr_holidays/models/res_users.py')
-rw-r--r--addons/hr_holidays/models/res_users.py77
1 files changed, 77 insertions, 0 deletions
diff --git a/addons/hr_holidays/models/res_users.py b/addons/hr_holidays/models/res_users.py
new file mode 100644
index 00000000..24f70cde
--- /dev/null
+++ b/addons/hr_holidays/models/res_users.py
@@ -0,0 +1,77 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from odoo import api, fields, models
+
+
+class User(models.Model):
+ _inherit = "res.users"
+
+ leave_manager_id = fields.Many2one(related='employee_id.leave_manager_id')
+ show_leaves = fields.Boolean(related='employee_id.show_leaves')
+ allocation_used_count = fields.Float(related='employee_id.allocation_used_count')
+ allocation_count = fields.Float(related='employee_id.allocation_count')
+ leave_date_to = fields.Date(related='employee_id.leave_date_to')
+ is_absent = fields.Boolean(related='employee_id.is_absent')
+ allocation_used_display = fields.Char(related='employee_id.allocation_used_display')
+ allocation_display = fields.Char(related='employee_id.allocation_display')
+ hr_icon_display = fields.Selection(related='employee_id.hr_icon_display')
+
+ def __init__(self, pool, cr):
+ """ Override of __init__ to add access rights.
+ Access rights are disabled by default, but allowed
+ on some specific fields defined in self.SELF_{READ/WRITE}ABLE_FIELDS.
+ """
+
+ readable_fields = [
+ 'leave_manager_id',
+ 'show_leaves',
+ 'allocation_used_count',
+ 'allocation_count',
+ 'leave_date_to',
+ 'is_absent',
+ 'allocation_used_display',
+ 'allocation_display',
+ 'hr_icon_display',
+ ]
+ init_res = super(User, self).__init__(pool, cr)
+ # duplicate list to avoid modifying the original reference
+ type(self).SELF_READABLE_FIELDS = type(self).SELF_READABLE_FIELDS + readable_fields
+ return init_res
+
+ def _compute_im_status(self):
+ super(User, self)._compute_im_status()
+ on_leave_user_ids = self._get_on_leave_ids()
+ for user in self:
+ if user.id in on_leave_user_ids:
+ if user.im_status == 'online':
+ user.im_status = 'leave_online'
+ else:
+ user.im_status = 'leave_offline'
+
+ @api.model
+ def _get_on_leave_ids(self, partner=False):
+ now = fields.Datetime.now()
+ field = 'partner_id' if partner else 'id'
+ self.env.cr.execute('''SELECT res_users.%s FROM res_users
+ JOIN hr_leave ON hr_leave.user_id = res_users.id
+ AND state not in ('cancel', 'refuse')
+ AND res_users.active = 't'
+ AND date_from <= %%s AND date_to >= %%s''' % field, (now, now))
+ return [r[0] for r in self.env.cr.fetchall()]
+
+ def _clean_leave_responsible_users(self):
+ # self = old bunch of leave responsibles
+ # This method compares the current leave managers
+ # and remove the access rights to those who don't
+ # need them anymore
+ approver_group = self.env.ref('hr_holidays.group_hr_holidays_responsible', raise_if_not_found=False)
+ if not self or not approver_group:
+ return
+ res = self.env['hr.employee'].read_group(
+ [('leave_manager_id', 'in', self.ids)],
+ ['leave_manager_id'],
+ ['leave_manager_id'])
+ responsibles_to_remove_ids = set(self.ids) - {x['leave_manager_id'][0] for x in res}
+ approver_group.sudo().write({
+ 'users': [(3, manager_id) for manager_id in responsibles_to_remove_ids]})