from core.models import Task, ProgressReport class SheetMapper: @staticmethod def map_rows_to_report(rows: list[list]) -> ProgressReport: tasks = [] current_phase = "General" for row in rows: if not row or len(row) < 2: continue # Detect Phase row (e.g. Row 1: ['', 'Phase 1: ...']) # Phase rows usually have few columns or column 2/3 is empty if len(row) <= 2 or (len(row) > 2 and row[2] == ""): if row[1] and "Phase" in row[1]: current_phase = row[1].strip() continue # Detect Task row (e.g. Row 2: ['', '1.1', 'Task Name', ...]) if len(row) >= 10: task = Task( phase=current_phase, task_id=row[1], task_name=row[2], assignee=row[3], start_date=row[4], end_date=row[5], progress_val=row[8], status=row[9] ) tasks.append(task) return ProgressReport(tasks=tasks)