[FIX] hr_effective_attendance_period: fix timezone consideration

This commit is contained in:
Stéphan Sainléger
2023-02-27 16:02:24 +01:00
parent b08119cf4e
commit 070bdaca52
2 changed files with 13 additions and 5 deletions

View File

@@ -3,7 +3,7 @@
{ {
"name": "hr_effective_attendance_period", "name": "hr_effective_attendance_period",
"version": "14.0.2.0.0", "version": "14.0.2.0.1",
"author": "Elabore", "author": "Elabore",
"website": "https://elabore.coop", "website": "https://elabore.coop",
"maintainer": "Stéphan Sainléger", "maintainer": "Stéphan Sainléger",

View File

@@ -1,5 +1,7 @@
import math import math
from datetime import timedelta import pytz
from datetime import datetime, timedelta
from pytz import timezone
from odoo import models, fields from odoo import models, fields
@@ -40,15 +42,21 @@ class ResourceCalendar(models.Model):
afternoon_worked = len(day_attendances.filtered(lambda x: x.day_period == "afternoon")) > 0 afternoon_worked = len(day_attendances.filtered(lambda x: x.day_period == "afternoon")) > 0
return morning_worked and afternoon_worked return morning_worked and afternoon_worked
def _compute_datetime_in_utc_tz(self, date):
dt_now = datetime.now(pytz.timezone(self.env.context.get('tz', 'utc') or 'utc'))
utc_date = date - dt_now.utcoffset()
return utc_date
def _is_worked_attendance(self, resource, day, attendance): def _is_worked_attendance(self, resource, day, attendance):
attendance_start = fields.Datetime.to_datetime(day.date()) + timedelta(hours=attendance.hour_from) attendance_start = fields.Datetime.to_datetime(day.date()) + timedelta(hours=attendance.hour_from)
attendance_end = fields.Datetime.to_datetime(day.date()) + timedelta(hours=attendance.hour_to) attendance_end = fields.Datetime.to_datetime(day.date()) + timedelta(hours=attendance.hour_to)
resource_leaves = self.env["resource.calendar.leaves"].search( utc_start = self._compute_datetime_in_utc_tz(attendance_start)
utc_end = self._compute_datetime_in_utc_tz(attendance_end)
resource_leaves = self.env["resource.calendar.leaves"].sudo().search(
[ [
("company_id", "=", resource.company_id.id), ("company_id", "=", resource.company_id.id),
("date_from", "<=", attendance_start), ("date_from", "<=", utc_start),
("date_to", ">=", attendance_end), ("date_to", ">=", utc_end),
"|", "|",
("resource_id", "=", resource.id), ("resource_id", "=", resource.id),
("resource_id", "=", None), ("resource_id", "=", None),