misc: compute time slots using tz-aware datetimes (#42146)
This commit is contained in:
parent
cf030d8e4d
commit
4fac2c3cd1
|
@ -437,34 +437,35 @@ class TimePeriod(models.Model):
|
|||
def get_time_slots(self, min_datetime, max_datetime, meeting_type):
|
||||
meeting_duration = datetime.timedelta(minutes=meeting_type.duration)
|
||||
duration = datetime.timedelta(minutes=self.desk.agenda.get_base_meeting_duration())
|
||||
min_datetime = make_naive(min_datetime)
|
||||
max_datetime = make_naive(max_datetime)
|
||||
|
||||
real_min_datetime = min_datetime + datetime.timedelta(days=self.weekday - min_datetime.weekday())
|
||||
if real_min_datetime < min_datetime:
|
||||
real_min_datetime += datetime.timedelta(days=7)
|
||||
|
||||
event_datetime = real_min_datetime.replace(
|
||||
# make sure datetime is aligned on timezone
|
||||
event_datetime = make_aware(make_naive(real_min_datetime)).replace(
|
||||
hour=self.start_time.hour, minute=self.start_time.minute, second=0, microsecond=0
|
||||
)
|
||||
while event_datetime < max_datetime:
|
||||
end_time = event_datetime + meeting_duration
|
||||
next_time = event_datetime + duration
|
||||
if end_time.time() > self.end_time or event_datetime.date() != next_time.date():
|
||||
# switch to naive time for day/week changes
|
||||
event_datetime = make_naive(event_datetime)
|
||||
# back to morning
|
||||
event_datetime = event_datetime.replace(
|
||||
hour=self.start_time.hour, minute=self.start_time.minute
|
||||
)
|
||||
# but next week
|
||||
event_datetime += datetime.timedelta(days=7)
|
||||
# and re-align to timezone afterwards
|
||||
event_datetime = make_aware(event_datetime)
|
||||
next_time = event_datetime + duration
|
||||
|
||||
if event_datetime > max_datetime:
|
||||
break
|
||||
|
||||
yield TimeSlot(
|
||||
start_datetime=make_aware(event_datetime), meeting_type=meeting_type, desk=self.desk
|
||||
)
|
||||
yield TimeSlot(start_datetime=event_datetime, meeting_type=meeting_type, desk=self.desk)
|
||||
event_datetime = next_time
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue