Files
ACORE/apps/reports/engine/context.py
T
lokses 0da9c13192 it_manager+reports: иерархия договоров, биллинг и месячные отчёты
Иерархия рамочных/дочерних договоров и платежей, интернет-биллинг,
месячные IT-отчёты (импорт, DOCX/PDF, шаблоны выводов).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-09 18:03:44 +03:00

65 lines
2.4 KiB
Python

"""Контекст для шаблонов IT-месячного отчёта.
Доступные переменные в Django-шаблоне:
report, company, month, stats, month_title, prepared_date, labels,
employees, conclusions
"""
from __future__ import annotations
from apps.it_manager.report_import import default_report_tool_root, load_company
from apps.reports.it_monthly.docx import (
default_prepared_date,
month_title,
report_as_month,
stats_from_report,
)
DEFAULT_LABELS = {
'main_title': 'ОТЧЁТ О ВЫПОЛНЕННЫХ РАБОТАХ',
'summary_heading': 'Сводка по направлениям',
'objects_heading': 'Объекты',
'staff_heading': 'Состав IT-отдела',
'employees_heading': 'Выполненные работы по сотрудникам',
'conclusions_heading': 'Основные выводы и рекомендации',
'period_label': 'Отчётный период',
'staff_label': 'Состав отдела',
'objects_label': 'Охвачено объектов',
'work_mode_label': 'Режим работы',
'tasks_label': 'Всего задач',
'pharmacies_label': 'Аптеки',
'other_label': 'Другие объекты',
'extra_label': 'Прочее',
}
def load_default_company() -> dict:
root = default_report_tool_root()
if (root / 'company.json').exists():
return load_company(root)
return {
'company': 'АКС-Аптека',
'department': 'Отдел информационных технологий',
'prepared_by': {'name': '', 'role': ''},
'work_mode': 'Ежедневно (включая выходные)',
'staff': [],
}
def build_template_context(report: dict, *, company: dict | None = None, labels: dict | None = None) -> dict:
company = company or load_default_company()
month = report_as_month(report, company)
stats = stats_from_report(report, month)
merged_labels = {**DEFAULT_LABELS, **(labels or {})}
return {
'report': report,
'company': company,
'month': month,
'stats': stats,
'month_title': month_title(report['year'], report['month']),
'prepared_date': default_prepared_date(report['year'], report['month']),
'labels': merged_labels,
'employees': report.get('employees') or [],
'conclusions': report.get('conclusions') or [],
}