35 lines
1006 B
Python
35 lines
1006 B
Python
from typing import List
|
|
from .client import RedmineClient
|
|
from .models import IssueRecord
|
|
|
|
|
|
def fetch_issues_for_period(
|
|
client: RedmineClient,
|
|
from_date: str,
|
|
to_date: str
|
|
) -> List[IssueRecord]:
|
|
user_id = client.get_current_user_id()
|
|
time_entries = client.get_time_entries(user_id, from_date, to_date)
|
|
|
|
if not time_entries:
|
|
return []
|
|
|
|
issue_ids = list({str(e.issue.id) for e in time_entries if hasattr(e, 'issue') and e.issue})
|
|
issues = client.get_issues_by_ids(issue_ids)
|
|
|
|
records = []
|
|
for issue in issues:
|
|
project = str(getattr(issue, 'project', 'Unknown'))
|
|
version = str(getattr(issue, 'version', '<N/A>'))
|
|
status = str(getattr(issue, 'status', 'Unknown'))
|
|
records.append(IssueRecord(
|
|
project=project,
|
|
version=version,
|
|
issue_id=issue.id,
|
|
subject=issue.subject,
|
|
status=status
|
|
))
|
|
|
|
records.sort(key=lambda r: (r.project, r.version))
|
|
return records
|