diff options
Diffstat (limited to 'overlays')
-rwxr-xr-x | overlays/worktime/worktime/__main__.py | 24 |
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()] |