Timesheet report tweaks
All checks were successful
CI / test (push) Successful in 5m55s
Lint / test (push) Successful in 33s
Trivy / test (push) Successful in 23s

* Allow 'this week', 'this month', 'this year' granularity in Timesheet reports.
 * Default date range to start from this month.
 * Allow 'All Projects' for timesheet reports.
This commit is contained in:
Miguel Jacq 2025-12-04 13:40:04 +11:00
parent 1e12cae78e
commit 9dc0a620be
Signed by: mig5
GPG key ID: 59B3F0C24135C6A9
5 changed files with 193 additions and 34 deletions

View file

@ -1190,7 +1190,7 @@ def test_time_report_dialog_creation(qtbot, fresh_db):
dialog = TimeReportDialog(fresh_db)
qtbot.addWidget(dialog)
assert dialog.project_combo.count() == 0
assert dialog.project_combo.count() == 1
assert dialog.granularity.count() == 3 # day, week, month
@ -1202,18 +1202,18 @@ def test_time_report_dialog_loads_projects(qtbot, fresh_db):
dialog = TimeReportDialog(fresh_db)
qtbot.addWidget(dialog)
assert dialog.project_combo.count() == 2
assert dialog.project_combo.count() == 3
def test_time_report_dialog_default_date_range(qtbot, fresh_db):
"""Dialog defaults to last 7 days."""
"""Dialog defaults to start of month."""
dialog = TimeReportDialog(fresh_db)
qtbot.addWidget(dialog)
today = QDate.currentDate()
week_ago = today.addDays(-7)
start_of_month = QDate(today.year(), today.month(), 1)
assert dialog.from_date.date() == week_ago
assert dialog.from_date.date() == start_of_month
assert dialog.to_date.date() == today
@ -1235,7 +1235,7 @@ def test_time_report_dialog_run_report(qtbot, fresh_db):
dialog._run_report()
assert dialog.table.rowCount() == 1
assert "Activity" in dialog.table.item(0, 1).text()
assert "Activity" in dialog.table.item(0, 2).text()
assert "1.5" in dialog.total_label.text() or "1.50" in dialog.total_label.text()
@ -1423,7 +1423,7 @@ def test_time_report_dialog_granularity_week(qtbot, fresh_db):
# Should aggregate to single week
assert dialog.table.rowCount() == 1
hours_text = dialog.table.item(0, 3).text()
hours_text = dialog.table.item(0, 4).text()
assert "2.5" in hours_text or "2.50" in hours_text
@ -1451,7 +1451,7 @@ def test_time_report_dialog_granularity_month(qtbot, fresh_db):
# Should aggregate to single month
assert dialog.table.rowCount() == 1
hours_text = dialog.table.item(0, 3).text()
hours_text = dialog.table.item(0, 4).text()
assert "2.5" in hours_text or "2.50" in hours_text
@ -1937,7 +1937,7 @@ def test_time_report_dialog_stores_report_state(qtbot, fresh_db):
dialog = TimeReportDialog(fresh_db)
qtbot.addWidget(dialog)
dialog.project_combo.setCurrentIndex(0)
dialog.project_combo.setCurrentIndex(1)
dialog.from_date.setDate(QDate.fromString(_today(), "yyyy-MM-dd"))
dialog.to_date.setDate(QDate.fromString(_today(), "yyyy-MM-dd"))
dialog.granularity.setCurrentIndex(1) # week
@ -2154,10 +2154,10 @@ def test_full_workflow_add_project_activity_log_report(
# Verify report
assert report_dialog.table.rowCount() == 1
assert "Test Activity" in report_dialog.table.item(0, 1).text()
assert "Test Activity" in report_dialog.table.item(0, 2).text()
assert (
"2.5" in report_dialog.table.item(0, 3).text()
or "2.50" in report_dialog.table.item(0, 3).text()
"2.5" in report_dialog.table.item(0, 4).text()
or "2.50" in report_dialog.table.item(0, 4).text()
)
# 5. Export CSV