From 2101cfcc46d1aad4f6e73b64f6dffff92ef6b548 Mon Sep 17 00:00:00 2001 From: prye-odoo Date: Fri, 1 Sep 2023 10:38:01 +0000 Subject: [PATCH] [FIX] hr_holidays: handle tz attribute error if user timezone empty MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When a user tries to create a leave request without linking an employee with the user and without a configured login user timezone, a traceback will be generated. Steps to reproduce: - Install the "hr_holidays" module. - Create a new user, e.g., "Test user", and login with another browser. - Login as an admin user and go to Settings > Users & Companies. - Search for "Test user" and set Timzone as empty. - Go to the Time Off menu and create a leave request; after that, a traceback will be generated. Error: AttributeError: 'bool' object has no attribute 'upper'  When a user tries to create a leave request without linking an employee with the user and without a configured login user timezone, the _get_start_or_end_from_attendance() function of the "hr.leave" object will call at that time timzone not getting. Code reference: https://github.com/odoo/odoo/blob/15.0/addons/hr_holidays/models/hr_leave.py#L111 Sentry-4441512696 closes odoo/odoo#134434 X-original-commit: 904edbdbbc5e11608d7e3f3f7d2d3001b6247ed2 Signed-off-by: Sofie Gvaladze (sgv) Signed-off-by: Pradip Yenpure (prye) --- addons/hr_holidays/models/hr_employee.py | 2 +- addons/hr_holidays/models/hr_leave.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/hr_holidays/models/hr_employee.py b/addons/hr_holidays/models/hr_employee.py index ff236d8749e..e58d534ed5d 100644 --- a/addons/hr_holidays/models/hr_employee.py +++ b/addons/hr_holidays/models/hr_employee.py @@ -308,7 +308,7 @@ class HrEmployee(models.Model): @api.model def get_public_holidays_data(self, date_start, date_end): self = self._get_contextual_employee() - employee_tz = pytz.timezone(self._get_tz() if self else self.env.user.tz) + employee_tz = pytz.timezone(self._get_tz() if self else self.env.user.tz or 'utc') public_holidays = self._get_public_holidays(date_start, date_end).sorted('date_from') return list(map(lambda bh: { 'id': -bh.id, diff --git a/addons/hr_holidays/models/hr_leave.py b/addons/hr_holidays/models/hr_leave.py index a62173d7dd8..99bb1ccd7e7 100644 --- a/addons/hr_holidays/models/hr_leave.py +++ b/addons/hr_holidays/models/hr_leave.py @@ -1565,7 +1565,7 @@ class HolidaysRequest(models.Model): def _to_utc(self, date, hour, resource): hour = float_to_time(float(hour)) - holiday_tz = timezone(resource.tz or self.env.user.tz) + holiday_tz = timezone(resource.tz or self.env.user.tz or 'UTC') return holiday_tz.localize(datetime.combine(date, hour)).astimezone(UTC).replace(tzinfo=None) def _get_attendances(self, request_date_from, request_date_to):