diff options
Diffstat (limited to 'overlays/worktime')
-rwxr-xr-x | overlays/worktime/worktime/__main__.py | 24 |
1 files changed, 17 insertions, 7 deletions
diff --git a/overlays/worktime/worktime/__main__.py b/overlays/worktime/worktime/__main__.py index 8ee67c6d..fa357d09 100755 --- a/overlays/worktime/worktime/__main__.py +++ b/overlays/worktime/worktime/__main__.py | |||
@@ -597,7 +597,14 @@ def leave(year, table, **args): | |||
597 | for year, offset in leave_budget.items(): | 597 | for year, offset in leave_budget.items(): |
598 | leave_days = sorted([day for day in worktime.leave_days if day.year == year]) | 598 | leave_days = sorted([day for day in worktime.leave_days if day.year == year]) |
599 | would_be_workdays = [day for day in days if day.year == year and worktime.would_be_workday(day)] | 599 | would_be_workdays = [day for day in days if day.year == year and worktime.would_be_workday(day)] |
600 | table_data += [[year, offset, f"{len(leave_days)}/{len(list(would_be_workdays))}", ','.join(map(lambda d: d.strftime('%m-%d'), leave_days))]] | 600 | groups = [] |
601 | for _, group in groupby(enumerate(leave_days), lambda kv: kv[0] - worktime.ordinal_workday(kv[1])): | ||
602 | group = list(map(lambda kv: kv[1], group)) | ||
603 | if len(group) > 1: | ||
604 | groups.append(group[0].strftime('%m-%d') + '--' + group[-1].strftime('%m-%d')) | ||
605 | else: | ||
606 | groups.append(group[0].strftime('%m-%d')) | ||
607 | table_data += [[year, offset, f"{len(leave_days)}/{len(list(would_be_workdays))}", ','.join(groups)]] | ||
601 | print(tabulate(table_data, tablefmt="plain")) | 608 | print(tabulate(table_data, tablefmt="plain")) |
602 | else: | 609 | else: |
603 | print(leave_budget[year if year else def_year]) | 610 | print(leave_budget[year if year else def_year]) |
@@ -674,15 +681,18 @@ def classification(classification_name, table, **args): | |||
674 | else: | 681 | else: |
675 | table_data = [] | 682 | table_data = [] |
676 | for year in sorted(year_classification.keys()): | 683 | for year in sorted(year_classification.keys()): |
677 | row_data = [year] | 684 | row_data = [year, year_offset[year]] |
678 | count_classified = len([1 for day, classified in year_classification[year].items() if classified]) | 685 | |
686 | classified = [day for day, classified in year_classification[year].items() if classified] | ||
679 | count_would_be_workdays = len([1 for day in days if day.year == year and worktime.would_be_workday(day) and day not in worktime.leave_days]) | 687 | count_would_be_workdays = len([1 for day in days if day.year == year and worktime.would_be_workday(day) and day not in worktime.leave_days]) |
680 | row_data.append(year_offset[year]) | ||
681 | if len(year_classification[year]) != count_would_be_workdays: | 688 | if len(year_classification[year]) != count_would_be_workdays: |
682 | row_data.append(f"{count_classified}/{len(year_classification[year])}/{count_would_be_workdays}") | 689 | row_data.append(f"{len(classified)}/{len(year_classification[year])}/{count_would_be_workdays}") |
683 | else: | 690 | else: |
684 | row_data.append(f"{count_classified}/{len(year_classification[year])}") | 691 | row_data.append(f"{len(classified)}/{len(year_classification[year])}") |
685 | row_data.append(','.join(sorted([day.strftime('%m-%d') for day, classified in year_classification[year].items() if classified]))) | 692 | |
693 | groups = map(lambda kv: kv[1], groupby(classified, lambda v: (v.isocalendar().year, v.isocalendar().week))) | ||
694 | row_data.append(', '.join(map(lambda group: ','.join(map(lambda day: day.strftime('%m-%d'), sorted(group))), groups))) | ||
695 | |||
686 | table_data.append(row_data) | 696 | table_data.append(row_data) |
687 | print(tabulate(table_data, tablefmt="plain")) | 697 | print(tabulate(table_data, tablefmt="plain")) |
688 | 698 | ||