Files
Dispatch/Dispatch_V0.1.1/application/report_signing_service.py
2026-04-29 08:18:54 +04:00

51 lines
2.0 KiB
Python

# -*- 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
)