diff options
| author | Kevin Baptiste <kba@odoo.com> | 2019-10-17 09:38:38 +0000 |
|---|---|---|
| committer | Yannick Tivisse <yti@odoo.com> | 2019-11-13 10:55:43 +0000 |
| commit | eb02e9b3e00243bcf8a41b0f42273e59875ab968 (patch) | |
| tree | 86ee79671c256f60db0be65c91c7629f94693b7a | |
| parent | db8904b03d80de6be2464b66b75048c189781822 (diff) | |
[IMP] hr_holidays: compute leave description based on user group
The leave description is now replaced with a compute method in order to
obfuscate the description based on the user's group.
closes odoo/odoo#38995
Taskid: 2088559
Signed-off-by: Yannick Tivisse (yti) <yti@odoo.com>
| -rw-r--r-- | addons/hr_holidays/models/hr_leave.py | 54 | ||||
| -rw-r--r-- | addons/hr_holidays/report/hr_leave_report.py | 2 | ||||
| -rw-r--r-- | addons/hr_holidays/views/hr_leave_views.xml | 1 |
3 files changed, 35 insertions, 22 deletions
diff --git a/addons/hr_holidays/models/hr_leave.py b/addons/hr_holidays/models/hr_leave.py index f05b932bd5a..16e3e551cc5 100644 --- a/addons/hr_holidays/models/hr_leave.py +++ b/addons/hr_holidays/models/hr_leave.py @@ -18,6 +18,7 @@ from odoo.exceptions import AccessError, UserError, ValidationError from odoo.tools import float_compare from odoo.tools.float_utils import float_round from odoo.tools.translate import _ +from odoo.osv import expression _logger = logging.getLogger(__name__) @@ -101,7 +102,8 @@ class HolidaysRequest(models.Model): return new_values # description - name = fields.Char('Description') + name = fields.Char('Description', compute='_compute_description', inverse='_inverse_description', search='_search_description', compute_sudo=False) + private_name = fields.Char('Time Off Description', groups='hr_holidays.group_hr_holidays_user') state = fields.Selection([ ('draft', 'To Submit'), ('cancel', 'Cancelled'), @@ -261,6 +263,36 @@ class HolidaysRequest(models.Model): self._table, ['date_to', 'date_from']) return res + @api.depends_context('uid') + def _compute_description(self): + self.check_access_rights('read') + self.check_access_rule('read') + + is_officer = self.user_has_groups('hr_holidays.group_hr_holidays_user') + + for leave in self: + if is_officer or leave.user_id == self.env.user or leave.manager_id == self.env.user: + leave.name = leave.sudo().private_name + else: + leave.name = '*****' + + def _inverse_description(self): + is_officer = self.user_has_groups('hr_holidays.group_hr_holidays_user') + + for leave in self: + if is_officer or leave.user_id == self.env.user or leave.manager_id == self.env.user: + leave.sudo().private_name = leave.name + + def _search_description(self, operator, value): + is_officer = self.user_has_groups('hr_holidays.group_hr_holidays_user') + domain = [('private_name', operator, value)] + + if not is_officer: + domain = expression.AND([domain, [('user_id', '=', self.env.user.id)]]) + + leaves = self.search(domain) + return [('id', 'in', leaves.ids)] + @api.onchange('holiday_status_id') def _onchange_holiday_status_id(self): self.request_unit_half = False @@ -618,26 +650,8 @@ class HolidaysRequest(models.Model): holiday_sudo.activity_update() return holiday - def _read(self, fields): - if 'name' in fields and 'employee_id' not in fields: - fields.add('employee_id') - super(HolidaysRequest, self)._read(fields) - if 'name' in fields: - if self.user_has_groups('hr_holidays.group_hr_holidays_user'): - return - current_employee = self.env['hr.employee'].sudo().search([('user_id', '=', self.env.uid)], limit=1) - for record in self: - emp_id = record._cache.get('employee_id') or False - if emp_id != current_employee.id: - try: - record._cache['name'] - record._cache['name'] = '*****' - except Exception: - # skip SpecialValue (e.g. for missing record or access right) - pass - def write(self, values): - is_officer = self.env.user.has_group('hr_holidays.group_hr_holidays_user') + is_officer = self.env.user.has_group('hr_holidays.group_hr_holidays_user') or self.env.is_superuser() if not is_officer: if any(hol.date_from.date() < fields.Date.today() for hol in self): diff --git a/addons/hr_holidays/report/hr_leave_report.py b/addons/hr_holidays/report/hr_leave_report.py index f89d1a6eba3..ab30fddf1eb 100644 --- a/addons/hr_holidays/report/hr_leave_report.py +++ b/addons/hr_holidays/report/hr_leave_report.py @@ -65,7 +65,7 @@ class LeaveReport(models.Model): from hr_leave_allocation as allocation union all select request.employee_id as employee_id, - request.name as name, + request.private_name as name, (request.number_of_days * -1) as number_of_days, request.category_id as category_id, request.department_id as department_id, diff --git a/addons/hr_holidays/views/hr_leave_views.xml b/addons/hr_holidays/views/hr_leave_views.xml index fc82b31aa57..f0c14a38995 100644 --- a/addons/hr_holidays/views/hr_leave_views.xml +++ b/addons/hr_holidays/views/hr_leave_views.xml @@ -78,7 +78,6 @@ domain="[('activity_ids.date_deadline', '>', context_today().strftime('%Y-%m-%d')) ]"/> <group expand="0" string="Group By"> - <filter name="group_name" string="Description" context="{'group_by':'name'}"/> <filter name="group_employee" string="Employee" context="{'group_by':'employee_id'}"/> <filter name="group_category" string="Category" context="{'group_by':'category_id'}"/> <filter name="group_second_approver_id" string="Validator" context="{'group_by':'second_approver_id'}"/> |
