From 351bcdbb417930ec8a3cd5d97e9833fb20af1b5e Mon Sep 17 00:00:00 2001 From: Rob Coekaerts Date: Thu, 14 Apr 2022 14:47:11 +0200 Subject: [PATCH] [REF] hr: Split hr_icon_display into two separate fields. The icon that is displayed in the employee kanban view is determined by the field hr_icon_display, computed in the method _compute_hr_icon_display. This method is overridden in multiple modules such as hr_holidays, hr_attendance and hr_homeworking. Currently this field has a state to show no icon (presence_undetermined). In this change this state is extracted into the a separate field show_hr_icon_display with the default state of hr_icon_display being presence_to_define. In this way a module such as hr_attendance, which only overrides _compute_hr_icon_display to show the default icon for everyone as a default, now only needs to change this separate field and does not need any knowledge of what other states exist. This reduces coupling between modules. --- addons/hr/models/hr_employee_base.py | 12 ++-- addons/hr/views/hr_employee_public_views.xml | 63 ++++++++-------- addons/hr/views/hr_employee_views.xml | 75 ++++++++++---------- addons/hr_attendance/models/hr_employee.py | 3 +- addons/hr_holidays/models/hr_employee.py | 4 +- addons/hr_holidays/views/hr_views.xml | 6 +- 6 files changed, 86 insertions(+), 77 deletions(-) diff --git a/addons/hr/models/hr_employee_base.py b/addons/hr/models/hr_employee_base.py index 85c31c3751a..6c36418d652 100644 --- a/addons/hr/models/hr_employee_base.py +++ b/addons/hr/models/hr_employee_base.py @@ -57,6 +57,7 @@ class HrEmployeeBase(models.AbstractModel): ('presence_absent', 'Absent'), ('presence_to_define', 'To define'), ('presence_undetermined', 'Undetermined')], compute='_compute_presence_icon') + show_hr_icon_display = fields.Boolean(compute='_compute_presence_icon') employee_type = fields.Selection([ ('employee', 'Employee'), ('student', 'Student'), @@ -174,6 +175,7 @@ class HrEmployeeBase(models.AbstractModel): """ working_now_list = self.filtered(lambda e: e.hr_presence_state == 'present')._get_employee_working_now() for employee in self: + show_icon = True if employee.hr_presence_state == 'present': if employee.id in working_now_list: icon = 'presence_present' @@ -185,13 +187,13 @@ class HrEmployeeBase(models.AbstractModel): else: # without attendance, default employee state is 'to_define' without confirmed presence/absence # we need to check why they are not there - if employee.user_id: - # Display an orange icon on internal users. - icon = 'presence_to_define' - else: + # Display an orange icon on internal users. + icon = 'presence_to_define' + if not employee.user_id: # We don't want non-user employee to have icon. - icon = 'presence_undetermined' + show_icon = False employee.hr_icon_display = icon + employee.show_hr_icon_display = show_icon @api.depends('address_id') def _compute_work_location_id(self): diff --git a/addons/hr/views/hr_employee_public_views.xml b/addons/hr/views/hr_employee_public_views.xml index 0d4459bdc3c..adc59f9edaf 100644 --- a/addons/hr/views/hr_employee_public_views.xml +++ b/addons/hr/views/hr_employee_public_views.xml @@ -124,6 +124,7 @@ + @@ -135,36 +136,38 @@
-
- - - -
-
- - - -
-
- - - -
- -
- - -
+ +
+ + + +
+
+ + + +
+
+ + + +
+ +
+ + +
+
diff --git a/addons/hr/views/hr_employee_views.xml b/addons/hr/views/hr_employee_views.xml index 5aa89fa0735..06fde12676d 100644 --- a/addons/hr/views/hr_employee_views.xml +++ b/addons/hr/views/hr_employee_views.xml @@ -265,6 +265,7 @@ + @@ -276,42 +277,44 @@
-
- - - -
-
- - - -
-
- - - -
-
- - - -
+ +
+ + + +
+
+ + + +
+
+ + + +
+
+ + + +
+
diff --git a/addons/hr_attendance/models/hr_employee.py b/addons/hr_attendance/models/hr_employee.py index b6cda81db99..fb425e7e84c 100644 --- a/addons/hr_attendance/models/hr_employee.py +++ b/addons/hr_attendance/models/hr_employee.py @@ -205,6 +205,5 @@ class HrEmployee(models.Model): def _compute_presence_icon(self): res = super()._compute_presence_icon() # All employee must chek in or check out. Everybody must have an icon - employee_to_define = self.filtered(lambda e: e.hr_icon_display == 'presence_undetermined') - employee_to_define.hr_icon_display = 'presence_to_define' + self.filtered(lambda employee: not employee.show_hr_icon_display).show_hr_icon_display = True return res diff --git a/addons/hr_holidays/models/hr_employee.py b/addons/hr_holidays/models/hr_employee.py index 30ca3b6ad18..9e37af20df4 100644 --- a/addons/hr_holidays/models/hr_employee.py +++ b/addons/hr_holidays/models/hr_employee.py @@ -121,11 +121,11 @@ class HrEmployeeBase(models.AbstractModel): def _compute_presence_icon(self): super()._compute_presence_icon() employees_absent = self.filtered(lambda employee: - employee.hr_icon_display not in ['presence_present', 'presence_absent_active'] + employee.hr_presence_state != 'present' and employee.is_absent) employees_absent.update({'hr_icon_display': 'presence_holiday_absent'}) employees_present = self.filtered(lambda employee: - employee.hr_icon_display in ['presence_present', 'presence_absent_active'] + employee.hr_presence_state == 'present' and employee.is_absent) employees_present.update({'hr_icon_display': 'presence_holiday_present'}) diff --git a/addons/hr_holidays/views/hr_views.xml b/addons/hr_holidays/views/hr_views.xml index 9c3364495ef..69f84380d2f 100644 --- a/addons/hr_holidays/views/hr_views.xml +++ b/addons/hr_holidays/views/hr_views.xml @@ -91,7 +91,8 @@ - +
@@ -121,7 +122,8 @@ - +