From 6f5dadf4c1c36d7ff26f1d1533d08399ccee79bf Mon Sep 17 00:00:00 2001 From: Gregor Kleen Date: Wed, 20 Aug 2025 12:22:43 +0200 Subject: ... --- overlays/worktime/worktime/__main__.py | 57 ++++++++++++++++++---------------- 1 file changed, 30 insertions(+), 27 deletions(-) (limited to 'overlays/worktime') diff --git a/overlays/worktime/worktime/__main__.py b/overlays/worktime/worktime/__main__.py index bf24bbec..6ce1331a 100755 --- a/overlays/worktime/worktime/__main__.py +++ b/overlays/worktime/worktime/__main__.py @@ -393,9 +393,29 @@ class Worktime(object): start_day = self.start_date.date() end_day = self.end_date.date() + self.extra_days_to_work = dict() + try: - with open(Path(config_dir) / "pull-forward", 'r') as excused: - for line in excused: + with open(Path(config_dir) / "days-to-work", 'r') as extra_days_to_work_file: + for line in extra_days_to_work_file: + stripped_line = line.strip() + if stripped_line: + splitLine = stripped_line.split(' ') + if len(splitLine) == 2: + [hours, datestr] = splitLine + day = datetime.strptime(datestr, date_format).replace(tzinfo=tzlocal()).date() + self.extra_days_to_work[day] = timedelta(hours = float(hours)) + else: + day = datetime.strptime(stripped_line, date_format).replace(tzinfo=tzlocal()).date() + self.extra_days_to_work[day] = self.time_per_day(day) + except IOError as e: + if e.errno != 2: + raise e + + + try: + with open(Path(config_dir) / "pull-forward", 'r') as pull_forward: + for line in pull_forward: stripped_line = line.strip() if stripped_line: [hours, datestr] = stripped_line.split(' ') @@ -416,15 +436,18 @@ class Worktime(object): if not d == datetime.strptime(c, date_format).replace(tzinfo=tzlocal()).date(): break else: if d >= self.end_date.date(): - self.pull_forward[d] = min(timedelta(hours = float(hours)), self.time_per_day(d) - (holidays[d] if d in holidays else timedelta())) + time_for_day = self.time_per_day(d) if d.isoweekday() in self.workdays else timedelta() + if d in self.extra_days_to_work: + time_for_day += self.extra_days_to_work[d] + self.pull_forward[d] = min(timedelta(hours = float(hours)), time_for_day) except IOError as e: if e.errno != 2: raise e self.days_to_work = dict() - if self.pull_forward: - end_day = max(end_day, max(list(self.pull_forward))) + # if self.pull_forward: + # end_day = max(end_day, max(self.pull_forward.keys())) for day in [start_day + timedelta(days = x) for x in range(0, (end_day - start_day).days + 1)]: if day.isoweekday() in self.workdays: @@ -432,26 +455,6 @@ class Worktime(object): if time_to_work > timedelta(): self.days_to_work[day] = time_to_work - self.extra_days_to_work = dict() - - try: - with open(Path(config_dir) / "days-to-work", 'r') as extra_days_to_work_file: - for line in extra_days_to_work_file: - stripped_line = line.strip() - if stripped_line: - splitLine = stripped_line.split(' ') - if len(splitLine) == 2: - [hours, datestr] = splitLine - day = datetime.strptime(datestr, date_format).replace(tzinfo=tzlocal()).date() - self.extra_days_to_work[day] = timedelta(hours = float(hours)) - else: - day = datetime.strptime(stripped_line, date_format).replace(tzinfo=tzlocal()).date() - self.extra_days_to_work[day] = self.time_per_day(day) - except IOError as e: - if e.errno != 2: - raise e - - self.now_is_workday = self.is_workday(self.now.date()) self.time_worked = timedelta() @@ -467,7 +470,7 @@ class Worktime(object): self.time_to_work = sum([self.days_to_work[day] for day in self.days_to_work.keys() if day <= self.end_date.date()], timedelta()) for day in [d for d in list(self.pull_forward) if d > self.end_date.date()]: - days_forward = set([d for d in self.days_to_work.keys() if d >= self.end_date.date() and d < day and (not d in self.pull_forward or d == self.end_date.date())]) + days_forward = set([d for d in [start_day + timedelta(days = x) for x in range(0, (max(end_day, max(self.pull_forward.keys())) - start_day).days + 1)] if d >= self.end_date.date() and d < day and (not d in self.pull_forward or d == self.end_date.date())]) extra_days_forward = set([d for d in self.extra_days_to_work.keys() if d >= self.end_date.date() and d < day and (not d in self.pull_forward or d == self.end_date.date())]) days_forward = days_forward.union(extra_days_forward) @@ -483,7 +486,7 @@ class Worktime(object): self.extra_days_to_work[extra_day] += extra_day_time * (day_time / extra_day_time_left) hours_per_day_forward = time_forward / len(days_forward) if len(days_forward) > 0 else timedelta() - days_forward.discard(self.end_date.date()) + # days_forward.discard(self.end_date.date()) self.time_pulled_forward += time_forward - hours_per_day_forward * len(days_forward) -- cgit v1.2.3