from pydantic import ValidationError from PySide6.QtWidgets import QMessageBox, QWidget from wce_crm.data_models import translate_pydantic_errors def get_user_confirmation( parent_widget: QWidget, title: str, message: str, ) -> bool: response = QMessageBox.question( parent_widget, title, message, buttons=(QMessageBox.StandardButton.Yes | QMessageBox.StandardButton.No), defaultButton=QMessageBox.StandardButton.No, ) if response == QMessageBox.StandardButton.Yes: return True else: return False def get_message_box( msg_type: QMessageBox.Icon, title: str, message: str, detailed_text: str | None = None, ) -> QMessageBox: msg_box = QMessageBox() msg_box.setIcon(msg_type) msg_box.setWindowTitle(title) msg_box.setText(message) if detailed_text is not None: msg_box.setDetailedText(detailed_text) return msg_box def pydantic_validation_error_handling( val_error: ValidationError, ) -> None: error_texts: list[str] = [] translated_errors = translate_pydantic_errors(val_error.errors()) for error in translated_errors: error_field = str(error["loc"][0]) reason = error["msg"] path = " → ".join(error["loc"][:-1]) # type: ignore error_texts.append(f"- {error_field}: {reason}, (Pfad: {path})") msg_box = get_message_box( QMessageBox.Icon.Warning, "Fehler bei der Validierung der Eingabedaten", ( "Bei der Validierung der Eingaben ist ein Fehler aufgetreten. Details " "sind unten angefügt." ), "\n".join(error_texts), ) msg_box.exec() def GUI_validation_error_handling( errors: list[str], ) -> None: error_text = "Bitte füllen Sie die folgenden Pflichtfelder aus:\n\n▸ " + "\n▸ ".join( errors ) msg_box = get_message_box( QMessageBox.Icon.Warning, "Fehlende oder fehlerhafte Angaben", error_text, ) msg_box.exec()