from html import escape from typing import Dict, List from ..types import ReportRow from .base import Formatter class HTMLFormatter(Formatter): """Форматтер для экспорта отчёта в HTML.""" def __init__(self, **_kwargs): super().__init__() def format(self, rows: List[ReportRow]) -> str: # Сгруппируем данные projects: Dict[str, Dict[str, List[ReportRow]]] = {} for r in rows: proj = r["project"] ver = r["version"] if proj not in projects: projects[proj] = {} if ver not in projects[proj]: projects[proj][ver] = [] projects[proj][ver].append(r) lines = [ '
| Наименование Проекта | ", "Номер версии* | ", "Задача | ", "Статус Готовность* | ", "Затрачено за отчетный период | ", "
|---|---|---|---|---|
| {project_text} | ' ) # Ячейка "Версия" - только в первой строке версии if first_row_in_version: lines.append( f'{version_text} | ' ) first_row_in_version = False # Остальные колонки lines.append(f"{task_cell} | ") lines.append(f"{status_text} | ") lines.append(f"{time_text} | ") lines.append("