Add Dispatch_V0.1.1
This commit is contained in:
135
Dispatch_V0.1.1/ui/details/task_details_actions.py
Normal file
135
Dispatch_V0.1.1/ui/details/task_details_actions.py
Normal file
@@ -0,0 +1,135 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# hub/ticket/ui/details/task_details_actions.py
|
||||
|
||||
"""Отдельный модуль действий экрана деталей Ticket."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from application.ticket_application_api import TicketApplicationApi
|
||||
from domain import TicketDocumentSnapshot, TicketTaskSnapshot
|
||||
from ui.dialogs import (
|
||||
AcceptanceDialog,
|
||||
DiagnosticReportDialog,
|
||||
RepairReportDialog,
|
||||
SpecialistDialog,
|
||||
TaskRefusalDialog,
|
||||
)
|
||||
from ui.ticket_message_dialog import TicketMessageDialog
|
||||
|
||||
|
||||
class TaskDetailsActions:
|
||||
"""Обёртка над application-командами для details-экрана."""
|
||||
|
||||
def __init__(self, application: TicketApplicationApi):
|
||||
self._application = application
|
||||
|
||||
def assign_specialist(
|
||||
self,
|
||||
task: TicketTaskSnapshot,
|
||||
parent=None,
|
||||
) -> TicketTaskSnapshot | None:
|
||||
dialog = SpecialistDialog(
|
||||
specialists=self._application.list_specialists(),
|
||||
parent=parent,
|
||||
)
|
||||
if dialog.exec() != dialog.DialogCode.Accepted:
|
||||
return None
|
||||
specialist_name = dialog.selected_specialist.strip()
|
||||
if not specialist_name:
|
||||
self._show_warning(parent, "Имя специалиста не указано.")
|
||||
return None
|
||||
snapshot = self._application.assign_specialist(task.task_id, specialist_name)
|
||||
if snapshot is None:
|
||||
self._show_warning(parent, "Не удалось назначить специалиста.")
|
||||
return snapshot
|
||||
|
||||
def sign_diagnostic(
|
||||
self,
|
||||
task: TicketTaskSnapshot,
|
||||
parent=None,
|
||||
) -> TicketDocumentSnapshot | None:
|
||||
dialog = DiagnosticReportDialog(task, parent=parent)
|
||||
if dialog.exec() != dialog.DialogCode.Accepted:
|
||||
return None
|
||||
try:
|
||||
return self._application.create_diagnostic_report(
|
||||
task.task_id,
|
||||
**dialog.build_payload(),
|
||||
)
|
||||
except ValueError as exc:
|
||||
self._show_warning(parent, str(exc))
|
||||
return None
|
||||
|
||||
def sign_repair(
|
||||
self,
|
||||
task: TicketTaskSnapshot,
|
||||
parent=None,
|
||||
) -> TicketDocumentSnapshot | None:
|
||||
dialog = RepairReportDialog(task, parent=parent)
|
||||
if dialog.exec() != dialog.DialogCode.Accepted:
|
||||
return None
|
||||
try:
|
||||
return self._application.create_repair_report(
|
||||
task.task_id,
|
||||
**dialog.build_payload(),
|
||||
)
|
||||
except ValueError as exc:
|
||||
self._show_warning(parent, str(exc))
|
||||
return None
|
||||
|
||||
def sign_acceptance(
|
||||
self,
|
||||
task: TicketTaskSnapshot,
|
||||
parent=None,
|
||||
) -> TicketDocumentSnapshot | None:
|
||||
dialog = AcceptanceDialog(task, parent=parent)
|
||||
if dialog.exec() != dialog.DialogCode.Accepted:
|
||||
return None
|
||||
try:
|
||||
return self._application.create_acceptance_report(
|
||||
task.task_id,
|
||||
**dialog.build_payload(),
|
||||
)
|
||||
except ValueError as exc:
|
||||
self._show_warning(parent, str(exc))
|
||||
return None
|
||||
|
||||
def archive_task(
|
||||
self,
|
||||
task: TicketTaskSnapshot,
|
||||
parent=None,
|
||||
) -> TicketTaskSnapshot | None:
|
||||
answer = TicketMessageDialog.ask_confirmation(
|
||||
parent=parent,
|
||||
title="Архивация задачи",
|
||||
message=f"Переместить задачу #{task.sequence_number or task.task_id} в архив?",
|
||||
accept_text="В архив",
|
||||
reject_text="Отмена",
|
||||
)
|
||||
if not answer:
|
||||
return None
|
||||
snapshot = self._application.archive_task(task.task_id)
|
||||
if snapshot is None:
|
||||
self._show_warning(parent, "Не удалось переместить задачу в архив.")
|
||||
return snapshot
|
||||
|
||||
def refuse_task(
|
||||
self,
|
||||
task: TicketTaskSnapshot,
|
||||
parent=None,
|
||||
) -> TicketTaskSnapshot | None:
|
||||
dialog = TaskRefusalDialog(task, parent=parent)
|
||||
if dialog.exec() != dialog.DialogCode.Accepted:
|
||||
return None
|
||||
refusal_reason = dialog.refusal_reason
|
||||
if not refusal_reason:
|
||||
self._show_warning(parent, "Причина отказа не указана.")
|
||||
return None
|
||||
snapshot = self._application.refuse_task(task.task_id, refusal_reason)
|
||||
if snapshot is None:
|
||||
self._show_warning(parent, "Не удалось перевести задачу в отказ.")
|
||||
return snapshot
|
||||
|
||||
@staticmethod
|
||||
def _show_warning(parent, text: str) -> None:
|
||||
TicketMessageDialog.show_warning(parent, "Ticket", text)
|
||||
Reference in New Issue
Block a user