From 0cddb58f0604147cb05c96d86bae243865acac12 Mon Sep 17 00:00:00 2001 From: foefl Date: Mon, 13 Jul 2026 11:59:42 +0200 Subject: [PATCH] info banners for linking --- src/wce_crm/gui.py | 103 ++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 96 insertions(+), 7 deletions(-) diff --git a/src/wce_crm/gui.py b/src/wce_crm/gui.py index 4f9cdd9..0cc4698 100644 --- a/src/wce_crm/gui.py +++ b/src/wce_crm/gui.py @@ -3634,13 +3634,6 @@ class Page_Consulting(QWidget): db_index_layout.addWidget(db_index_set_button) container_layout.addLayout(db_index_layout) - test_flex_datetime = FlexibleDateTimeInput() - test_flex_datetime.setSizePolicy( - QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Fixed - ) - - container_layout.addWidget(test_flex_datetime) - separator2 = QFrame() separator2.setFrameShape(QFrame.Shape.HLine) separator2.setFrameShadow(QFrame.Shadow.Sunken) @@ -3648,6 +3641,14 @@ class Page_Consulting(QWidget): container_layout.addSpacing(30) + # --- BANNER --- + self.link_banner_container = QWidget() + self.link_banners: list[InfoBanner] = [] + self.link_banner_layout = QVBoxLayout(self.link_banner_container) + self.link_banner_layout.setContentsMargins(0, 0, 0, 0) + self.link_banner_layout.setSpacing(6) + container_layout.addWidget(self.link_banner_container) + # --- BUTTONS --- self.edit_buttons = EditButtons(add_reset_btn=False) # reset_btn = self.edit_buttons.reset_btn @@ -3753,6 +3754,7 @@ class Page_Consulting(QWidget): logger_page_consulting.debug("[Consulting Page] Selected cons_type: %s", cons_type) self.STATE.beratungs_typ = cons_type + self._sync_state_to_GUI() def _debug_get_state(self) -> None: logger_page_consulting.debug("[Consulting Page] Call get state on table...") @@ -3781,6 +3783,29 @@ class Page_Consulting(QWidget): self.load_database(db_index) + def _open_linking_dialogue(self) -> None: + logger_page_consulting.info("[Consulting Page] Linking dialogue triggered") + + def _clear_linking_banners(self) -> None: + while self.link_banners: + banner = self.link_banners[0] + self.link_banner_layout.removeWidget(banner) + self.link_banners.remove(banner) + banner.deleteLater() + + def _add_linking_banner( + self, + text: str, + button_text: str, + ) -> None: + banner = InfoBanner( + text=text, + button_text=button_text, + ) + self.link_banners.append(banner) + banner.link_clicked.connect(self._open_linking_dialogue) + self.link_banner_layout.addWidget(banner) + def _sync_state_to_GUI(self) -> None: match self.STATE.beratungs_typ: case ConsultingType.PAUSCHAL: @@ -3797,6 +3822,26 @@ class Page_Consulting(QWidget): self.type_pauschal_btn.setEnabled(True) self.type_individual_btn.setEnabled(True) + # info banners needed + self._clear_linking_banners() + if self.STATE.un_id is None and self.STATE.pers_id is None: + # link missing + self._add_linking_banner( + text="⚠️ Dieser Eintrag ist noch nicht mit einer Entität verknüpft.", + button_text="Jetzt verknüpfen", + ) + elif ( + self.STATE.beratungs_typ is ConsultingType.INDIVIDUAL + and self.STATE.pers_id is None + ): + self._add_linking_banner( + text=( + "⚠️ Dies ist eine Individualberatung, aber die Verknüpfgung zu " + "einer Person fehlt." + ), + button_text="Jetzt verknüpfen", + ) + # child modules # call to child modules' syncing method not needed because these are initialised by # their own "load_state" method which again calls the modules sync method @@ -4501,6 +4546,50 @@ class Page_Consulting_Table(QWidget): pass +class InfoBanner(QFrame): + link_clicked = Signal() + + def __init__( + self, + text: str, + button_text: str, + parent: QWidget | None = None, + ): + super().__init__(parent) + + self.setStyleSheet(""" + InfoBanner { + background-color: #FFF3CD; + border: 1px solid #FFEBAA; + border-radius: 6px; + } + QLabel { + color: #856404; + font-size: 13px; + } + QPushButton { + background-color: #856404; + color: white; + border-radius: 4px; + padding: 4px 10px; + font-weight: bold; + } + QPushButton:hover { + background-color: #6C5204; + } + """) + layout = QHBoxLayout(self) + layout.setContentsMargins(15, 10, 15, 10) + + self.label = QLabel(text) + self.button = QPushButton(button_text) + layout.addWidget(self.label) + layout.addStretch() + layout.addWidget(self.button) + + self.button.clicked.connect(self.link_clicked.emit) + + ####################################################################