2424def generate_timesheet (
2525 source ,
2626 project : Project ,
27- period : str ,
27+ period_start : str ,
28+ period_end : str = None ,
2829 date : datetime .date = datetime .date .today (),
2930 comment : str = "" ,
3031 group_by : str = None ,
3132 item_description : str = None ,
3233 as_dataframe : bool = False ,
3334) -> 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 } "
3441 # convert cal to data
3542 timetracking_data = None
3643 if issubclass (type (source ), Calendar ):
@@ -41,9 +48,13 @@ def generate_timesheet(
4148 schema .time_tracking .validate (timetracking_data )
4249 else :
4350 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 ()
4758 # convert all-day entries
4859 ts_table .loc [ts_table ["all_day" ], "duration" ] = (
4960 project .contract .unit .to_timedelta () * project .contract .units_per_workday
@@ -58,7 +69,7 @@ def generate_timesheet(
5869 # TODO: grouping
5970
6071 ts = Timesheet (
61- title = f"{ project .title } - { period } " ,
72+ title = f"{ project .title } - { period_str } " ,
6273 period = period ,
6374 project = project ,
6475 comment = comment ,
0 commit comments