feat(activity): add --by-activity flag to break down spent time by activity type

- Load time entry activity names from Redmine enumeration.
- Aggregate hours per issue and per activity in fetch_issues_with_spent_time.
- Add --by-activity CLI flag and propagate it through report builder,
  summary, and all formatters (console, CSV, HTML, JSON, ODT).
- Keep backward-compatible 2-tuple input in build_grouped_report.
- Bump version to 1.8.0.

Closes #41
This commit is contained in:
Кокос Артем Николаевич
2026-06-29 16:44:52 +07:00
parent f6861382e6
commit 59af7ce464
12 changed files with 142 additions and 32 deletions

View File

@@ -12,8 +12,9 @@ class JSONFormatter(Formatter):
super().__init__()
def format(self, rows: List[ReportRow]) -> str:
data = [
{
data = []
for r in rows:
item = {
"project": r["project"],
"version": r["version"],
"issue_id": r["issue_id"],
@@ -21,8 +22,10 @@ class JSONFormatter(Formatter):
"status": r["status_ru"],
"time": r["time_text"],
}
for r in rows
]
activities = r.get("activities")
if activities:
item["activities"] = activities
data.append(item)
return json.dumps(data, ensure_ascii=False, indent=2)
def save(self, rows: List[ReportRow], output_path: str) -> None: