0da9c13192
Иерархия рамочных/дочерних договоров и платежей, интернет-биллинг, месячные IT-отчёты (импорт, DOCX/PDF, шаблоны выводов). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
65 lines
2.4 KiB
Python
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 [],
|
|
}
|