diff options
| author | Gregor Kleen <gkleen@yggdrasil.li> | 2025-08-20 15:05:36 +0200 |
|---|---|---|
| committer | Gregor Kleen <gkleen@yggdrasil.li> | 2025-08-20 15:05:36 +0200 |
| commit | 13000ec4703d1dd49fd12f8c2cb427130e4899b7 (patch) | |
| tree | 687d83f891eaf3a6c3254f9b5ace9d81e28832ed /overlays | |
| parent | 26d3c6abdbcbeb74e7d8bcd667630fbd47fb7365 (diff) | |
| download | nixos-13000ec4703d1dd49fd12f8c2cb427130e4899b7.tar nixos-13000ec4703d1dd49fd12f8c2cb427130e4899b7.tar.gz nixos-13000ec4703d1dd49fd12f8c2cb427130e4899b7.tar.bz2 nixos-13000ec4703d1dd49fd12f8c2cb427130e4899b7.tar.xz nixos-13000ec4703d1dd49fd12f8c2cb427130e4899b7.zip | |
...
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()] |
