handOver2/ui/dialogs/team_confirmation_dialog.py

73 lines
2.2 KiB
Python

# -*- coding: utf-8 -*-
"""
팀확인 다이얼로그 모듈
레코드의 팀 확인 상태를 관리하는 다이얼로그입니다.
"""
from typing import Dict
from PySide6.QtWidgets import QVBoxLayout, QDialogButtonBox
from PySide6.QtCore import Qt
from ui.base.base_dialog import BaseDialog
from ui.components.team_confirmation_widget import TeamConfirmationWidget
from database.models import SectionBase
from core.logger import get_logger
import json
logger = get_logger(__name__)
class TeamConfirmationDialog(BaseDialog):
"""
팀확인 다이얼로그
레코드의 팀 확인 상태를 토글 방식으로 관리합니다.
"""
def __init__(self, parent=None, record: SectionBase = None):
super().__init__(parent, title="팀 확인")
self.record = record
self.confirmations = {}
if record:
try:
self.confirmations = json.loads(record.team_confirmations) if isinstance(record.team_confirmations, str) else record.team_confirmations
if not isinstance(self.confirmations, dict):
self.confirmations = {}
except (json.JSONDecodeError, TypeError):
self.confirmations = {}
self._setup_ui()
def _setup_ui(self):
"""UI 설정"""
# 팀확인 위젯
self.confirmation_widget = TeamConfirmationWidget(self.confirmations, self)
self.confirmation_widget.confirmation_changed.connect(self._on_confirmation_changed)
self.content_layout.addWidget(self.confirmation_widget)
# 버튼
button_box = QDialogButtonBox(
QDialogButtonBox.Ok | QDialogButtonBox.Cancel,
Qt.Horizontal,
self
)
button_box.accepted.connect(self.accept)
button_box.rejected.connect(self.reject)
self.content_layout.addWidget(button_box)
def _on_confirmation_changed(self, team: str, confirmed: bool):
"""확인 상태 변경"""
self.confirmations[team] = confirmed
logger.debug(f"팀 확인 상태 변경: {team} = {confirmed}")
def get_confirmations(self) -> Dict[str, bool]:
"""확인 상태 반환"""
return self.confirmations.copy()