45 lines
1.2 KiB
Python
45 lines
1.2 KiB
Python
|
|
"""Статус проекта (порт themes/merakomis/project/structure/eStatus.php)."""
|
|||
|
|
|
|||
|
|
from __future__ import annotations
|
|||
|
|
|
|||
|
|
from datetime import date
|
|||
|
|
from typing import Any
|
|||
|
|
|
|||
|
|
# tMerakomisProject_status → подпись в UI Merakomis
|
|||
|
|
PROJECT_STATUS_NAMES: dict[int, str] = {
|
|||
|
|
0: "Не определён",
|
|||
|
|
1: "В работе",
|
|||
|
|
2: "Завершён",
|
|||
|
|
3: "Пауза",
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
def project_status_name(status: Any) -> str:
|
|||
|
|
if status is None:
|
|||
|
|
return ""
|
|||
|
|
try:
|
|||
|
|
return PROJECT_STATUS_NAMES.get(int(status), "")
|
|||
|
|
except (TypeError, ValueError):
|
|||
|
|
return ""
|
|||
|
|
|
|||
|
|
|
|||
|
|
def _json_date(v: Any) -> Any:
|
|||
|
|
if v is None:
|
|||
|
|
return None
|
|||
|
|
if isinstance(v, date):
|
|||
|
|
return v.isoformat()
|
|||
|
|
s = str(v).strip()
|
|||
|
|
if not s or s.startswith("0000"):
|
|||
|
|
return None
|
|||
|
|
return s[:10]
|
|||
|
|
|
|||
|
|
|
|||
|
|
def enrich_project_status_fields(item: dict[str, Any]) -> dict[str, Any]:
|
|||
|
|
"""Добавляет status_name; нормализует archive_date."""
|
|||
|
|
if "status" in item:
|
|||
|
|
name = project_status_name(item.get("status"))
|
|||
|
|
item["status_name"] = name or None
|
|||
|
|
if "archive_date" in item:
|
|||
|
|
item["archive_date"] = _json_date(item.get("archive_date"))
|
|||
|
|
return item
|