From 2961513141685f4eae095f04e961996d7d956fc5 Mon Sep 17 00:00:00 2001 From: Kevin Baptiste Date: Tue, 26 Jan 2021 11:05:38 +0100 Subject: [PATCH] [ADD] hr_holidays_attendance: convert overtime to holidays This module allows an employee to create leave requests or allocation requests from their overtime. Depending on the configuration of the leave type, the request can be made from: - "My Profile" for allocation which allows employee requests; - Time Off dashboard for leave type with no allocations; - The employee profile for the time off manager. TaskID: 1904850 [IMP] hr_holidays{,_attendance}: leave allocation multi create Change leave allocation create function to a multi create one. Task ID: 1904850 --- .../hr_holidays/models/hr_leave_allocation.py | 31 ++- .../views/hr_leave_allocation_views.xml | 2 +- addons/hr_holidays/views/hr_leave_views.xml | 2 +- addons/hr_holidays_attendance/__init__.py | 5 + addons/hr_holidays_attendance/__manifest__.py | 19 +- .../data/hr_holidays_attendance_data.xml | 14 ++ .../data/hr_holidays_attendance_demo.xml | 9 + .../hr_holidays_attendance/models/__init__.py | 8 + .../hr_holidays_attendance/models/hr_leave.py | 81 +++++++ .../models/hr_leave_allocation.py | 83 +++++++ .../models/hr_leave_type.py | 32 +++ .../models/res_company.py | 24 ++ .../models/res_users.py | 32 +++ .../hr_holidays_attendance_security.xml | 6 + .../static/src/xml/time_off_calendar.xml | 30 +++ .../hr_holidays_attendance/tests/__init__.py | 4 + .../tests/test_holidays_overtime.py | 216 ++++++++++++++++++ .../views/hr_employee_views.xml | 17 ++ .../views/hr_leave_allocation_views.xml | 73 ++++++ .../views/hr_leave_type_views.xml | 14 ++ .../views/hr_leave_views.xml | 16 ++ .../views/res_users_views.xml | 19 ++ .../tests/test_performance.py | 4 +- 23 files changed, 723 insertions(+), 18 deletions(-) create mode 100644 addons/hr_holidays_attendance/data/hr_holidays_attendance_data.xml create mode 100644 addons/hr_holidays_attendance/data/hr_holidays_attendance_demo.xml create mode 100644 addons/hr_holidays_attendance/models/__init__.py create mode 100644 addons/hr_holidays_attendance/models/hr_leave.py create mode 100644 addons/hr_holidays_attendance/models/hr_leave_allocation.py create mode 100644 addons/hr_holidays_attendance/models/hr_leave_type.py create mode 100644 addons/hr_holidays_attendance/models/res_company.py create mode 100644 addons/hr_holidays_attendance/models/res_users.py create mode 100644 addons/hr_holidays_attendance/security/hr_holidays_attendance_security.xml create mode 100644 addons/hr_holidays_attendance/static/src/xml/time_off_calendar.xml create mode 100644 addons/hr_holidays_attendance/tests/__init__.py create mode 100644 addons/hr_holidays_attendance/tests/test_holidays_overtime.py create mode 100644 addons/hr_holidays_attendance/views/hr_leave_allocation_views.xml create mode 100644 addons/hr_holidays_attendance/views/hr_leave_type_views.xml create mode 100644 addons/hr_holidays_attendance/views/hr_leave_views.xml create mode 100644 addons/hr_holidays_attendance/views/res_users_views.xml diff --git a/addons/hr_holidays/models/hr_leave_allocation.py b/addons/hr_holidays/models/hr_leave_allocation.py index ba646a589dd..995272f80c6 100644 --- a/addons/hr_holidays/models/hr_leave_allocation.py +++ b/addons/hr_holidays/models/hr_leave_allocation.py @@ -66,6 +66,7 @@ class HolidaysAllocation(models.Model): employee_id = fields.Many2one( 'hr.employee', compute='_compute_from_holiday_type', store=True, string='Employee', index=True, readonly=False, ondelete="restrict", tracking=True, states={'cancel': [('readonly', True)], 'refuse': [('readonly', True)], 'validate1': [('readonly', True)], 'validate': [('readonly', True)]}) + employee_company_id = fields.Many2one(related='employee_id.company_id', readonly=True) active_employee = fields.Boolean('Active Employee', related='employee_id.active', readonly=True) manager_id = fields.Many2one('hr.employee', compute='_compute_from_employee_id', store=True, string='Manager') notes = fields.Html('Reasons', readonly=True, states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}) @@ -429,19 +430,25 @@ class HolidaysAllocation(models.Model): date=allocation.holiday_status_id.validity_stop )) - @api.model - def create(self, values): + @api.model_create_multi + def create(self, vals_list): """ Override to avoid automatic logging of creation """ - employee_id = values.get('employee_id', False) - if not values.get('department_id'): - values.update({'department_id': self.env['hr.employee'].browse(employee_id).department_id.id}) - holiday = super(HolidaysAllocation, self.with_context(mail_create_nosubscribe=True)).create(values) - holiday.add_follower(employee_id) - if holiday.validation_type == 'hr': - holiday.message_subscribe(partner_ids=(holiday.employee_id.parent_id.user_id.partner_id | holiday.employee_id.leave_manager_id.partner_id).ids) - if not self._context.get('import_file'): - holiday.activity_update() - return holiday + for values in vals_list: + employee_id = values.get('employee_id', False) + if not values.get('department_id'): + values.update({'department_id': self.env['hr.employee'].browse(employee_id).department_id.id}) + holidays = super(HolidaysAllocation, self.with_context(mail_create_nosubscribe=True)).create(vals_list) + for holiday in holidays: + partners_to_subscribe = set() + if holiday.employee_id.user_id: + partners_to_subscribe.add(holiday.employee_id.user_id.partner_id.id) + if holiday.validation_type == 'hr': + partners_to_subscribe.add(holiday.employee_id.parent_id.user_id.partner_id.id) + partners_to_subscribe.add(holiday.employee_id.leave_manager_id.partner_id.id) + holiday.message_subscribe(partner_ids=tuple(partners_to_subscribe)) + if not self._context.get('import_file'): + holiday.activity_update() + return holidays def write(self, values): employee_id = values.get('employee_id', False) diff --git a/addons/hr_holidays/views/hr_leave_allocation_views.xml b/addons/hr_holidays/views/hr_leave_allocation_views.xml index 192f4a70321..aec55755dc9 100644 --- a/addons/hr_holidays/views/hr_leave_allocation_views.xml +++ b/addons/hr_holidays/views/hr_leave_allocation_views.xml @@ -100,7 +100,7 @@