Skip to content

Commit 81d919c

Browse files
committed
generate_timesheet: period interval
1 parent f2c1eed commit 81d919c

File tree

3 files changed

+18
-7
lines changed

3 files changed

+18
-7
lines changed

tests/test_invoice.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ def test_generate_invoice(
5252
timesheet = timetracking.generate_timesheet(
5353
source=demo_calendar_timetracking,
5454
project=project,
55-
period=period,
55+
period_start=period,
5656
item_description=project.title,
5757
)
5858
if not timesheet.empty:

tests/test_timetracking.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ def test_generate_timesheet(
3030
timesheet = timetracking.generate_timesheet(
3131
source=demo_calendar_timetracking,
3232
project=project,
33-
period=period,
33+
period_start=period,
3434
item_description=project.title,
3535
)
3636
assert (timesheet.empty) or (timesheet.total >= pandas.Timedelta("0 hours"))

tuttle/timetracking.py

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,20 @@
2424
def 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

Comments
 (0)