summaryrefslogtreecommitdiff
path: root/overlays
diff options
context:
space:
mode:
Diffstat (limited to 'overlays')
-rwxr-xr-xoverlays/worktime/worktime/__main__.py24
1 files changed, 20 insertions, 4 deletions
diff --git a/overlays/worktime/worktime/__main__.py b/overlays/worktime/worktime/__main__.py
index e4daf6d9..3e7aeb9f 100755
--- a/overlays/worktime/worktime/__main__.py
+++ b/overlays/worktime/worktime/__main__.py
@@ -375,8 +375,8 @@ class Worktime(object):
375 parse_datestr(stripped_line) 375 parse_datestr(stripped_line)
376 376
377 for day in [fromDay + timedelta(days = x) for x in range(0, (toDay - fromDay).days + 1)]: 377 for day in [fromDay + timedelta(days = x) for x in range(0, (toDay - fromDay).days + 1)]:
378 if self.end_date.date() < day or day < self.start_date.date(): 378 # if self.end_date.date() < day or day < self.start_date.date():
379 continue 379 # continue
380 380
381 if self.would_be_workday(day): 381 if self.would_be_workday(day):
382 if excused_kind == 'leave': 382 if excused_kind == 'leave':
@@ -444,6 +444,9 @@ class Worktime(object):
444 if e.errno != 2: 444 if e.errno != 2:
445 raise e 445 raise e
446 446
447 for year in range(self.end_date.year + 1, max(self.pull_forward.keys()).year + 1):
448 holidays |= {k: v * timedelta(hours = hours_per_week(k)) / len(self.workdays) for k, v in Worktime.holidays(year).items()}
449
447 self.days_to_work = dict() 450 self.days_to_work = dict()
448 451
449 # if self.pull_forward: 452 # if self.pull_forward:
@@ -485,10 +488,23 @@ class Worktime(object):
485 day_time = max(timedelta(), self.time_per_day(extra_day) - self.extra_days_to_work[extra_day]) 488 day_time = max(timedelta(), self.time_per_day(extra_day) - self.extra_days_to_work[extra_day])
486 self.extra_days_to_work[extra_day] += extra_day_time * (day_time / extra_day_time_left) 489 self.extra_days_to_work[extra_day] += extra_day_time * (day_time / extra_day_time_left)
487 490
488 hours_per_day_forward = time_forward / len(days_forward) if len(days_forward) > 0 else timedelta() 491 def days_count(days_forward):
492 r = 0
493 for day in sorted(days_forward):
494 day_time = timedelta()
495 if day in self.extra_days_to_work:
496 day_time += self.extra_days_to_work
497 if day in holidays and not day in self.extra_days_to_work:
498 day_time -= holidays[day]
499 if day.isoweekday() in self.workdays:
500 day_time += timedelta(hours = hours_per_week(day)) / len(self.workdays)
501 r += max(timedelta(), day_time) / (timedelta(hours = hours_per_week(day)) / len(self.workdays))
502 return r
503
504 hours_per_day_forward = time_forward / days_count(days_forward) if days_count(days_forward) > 0 else timedelta()
489 days_forward.discard(self.end_date.date()) 505 days_forward.discard(self.end_date.date())
490 506
491 self.time_pulled_forward += time_forward - hours_per_day_forward * len(days_forward) 507 self.time_pulled_forward += time_forward - hours_per_day_forward * days_count(days_forward)
492 508
493 if self.end_date.date() in self.extra_days_to_work: 509 if self.end_date.date() in self.extra_days_to_work:
494 self.time_pulled_forward += self.extra_days_to_work[self.end_date.date()] 510 self.time_pulled_forward += self.extra_days_to_work[self.end_date.date()]