# -*- coding: utf-8 -*- # hub/ticket/application/report_signing_service.py """Application-сервис подписания отчётов Ticket.""" from __future__ import annotations from domain.task import TicketTask from domain.ticket_constants import STATE_CONFIRMATION from state import TicketStateApi class ReportSigningService: """Команды подписания отчётов поверх канонического state API.""" def __init__(self, state: TicketStateApi): self._state = state def sign_report(self, task_id: int, report_type: str): """Подписать диагностический или ремонтный отчёт.""" snapshot = self._state.get_task(task_id) if snapshot is None: return None if report_type not in {"diagnostic", "repair"}: return None self._state.sign_report(task_id, report_type) return self._state.get_task(task_id) def sign_acceptance_report(self, task_id: int): """Подписать акт приёмки без смены доменного состояния.""" snapshot = self._state.get_task(task_id) if snapshot is None: return None task_data = TicketTask.from_snapshot(snapshot).to_record() task_data["acceptance_report_signed"] = True return self._state.update_task(task_data) def can_advance_to_confirmation(self, task_id: int) -> bool: """Проверить готовность задачи к переходу в подтверждение.""" return self._state.can_advance_to_confirmation(task_id) def can_advance_to_completed(self, task_id: int) -> bool: """Проверить готовность задачи к переходу в выполненные.""" snapshot = self._state.get_task(task_id) if snapshot is None: return False return ( snapshot.state_code == STATE_CONFIRMATION and snapshot.acceptance_report_signed )