24
24
def generate_timesheet (
25
25
source ,
26
26
project : Project ,
27
- period : str ,
27
+ period_start : str ,
28
+ period_end : str = None ,
28
29
date : datetime .date = datetime .date .today (),
29
30
comment : str = "" ,
30
31
group_by : str = None ,
31
32
item_description : str = None ,
32
33
as_dataframe : bool = False ,
33
34
) -> Timesheet :
35
+ if period_end :
36
+ period = (period_start , period_end )
37
+ period_str = f"{ period_start } - { period_end } "
38
+ else :
39
+ period = period_start
40
+ period_str = f"{ period_start } "
34
41
# convert cal to data
35
42
timetracking_data = None
36
43
if issubclass (type (source ), Calendar ):
@@ -41,9 +48,13 @@ def generate_timesheet(
41
48
schema .time_tracking .validate (timetracking_data )
42
49
else :
43
50
raise ValueError (f"unknown source: { source } " )
44
- ts_table = (
45
- timetracking_data .loc [period ].query (f"tag == '{ project .tag } '" ).sort_index ()
46
- )
51
+ tag_query = f"tag == '{ project .tag } '"
52
+ if period_end :
53
+ ts_table = (
54
+ timetracking_data .loc [period_start :period_end ].query (tag_query ).sort_index ()
55
+ )
56
+ else :
57
+ ts_table = timetracking_data .loc [period_start ].query (tag_query ).sort_index ()
47
58
# convert all-day entries
48
59
ts_table .loc [ts_table ["all_day" ], "duration" ] = (
49
60
project .contract .unit .to_timedelta () * project .contract .units_per_workday
@@ -58,7 +69,7 @@ def generate_timesheet(
58
69
# TODO: grouping
59
70
60
71
ts = Timesheet (
61
- title = f"{ project .title } - { period } " ,
72
+ title = f"{ project .title } - { period_str } " ,
62
73
period = period ,
63
74
project = project ,
64
75
comment = comment ,
0 commit comments