Files
Plugin_SN_Verfahrensgebiet/ui/eigentuemer_treffer.py
T

84 lines
3.2 KiB
Python
Raw Normal View History

"""sn_verfahrensgebiet/ui/eigentuemer_treffer.py – Trefferliste der Eigentümersuche (#56).
Nicht modales Fenster für den Bearbeiter. Es zeigt die zusammengefassten
Treffer mit dem Wert von ``PER_RECHTSPERSON`` (noch nicht entschlüsselt) und dem
Kennzeichen „verstorben“ und erlaubt die Mehrfachauswahl. „Daten anzeigen“
übergibt die Auswahl an das Anzeigefenster für den Eigentümer. Die Tabelle kommt aus
:func:`~sn_verfahrensgebiet.functions.verfahrensgebiet_dialoge.baue_auswahltabelle`,
dieselbe wie bei „Verfahrensgebiete aus Landkreis laden“.
"""
from typing import Callable, List, Optional, Sequence, Tuple
from sn_basis.functions.qt_wrapper import QDialog, QVBoxLayout, QHBoxLayout, QLabel, QPushButton
from sn_verfahrensgebiet.functions.eigentuemer_suche import Eigentuemer
from sn_verfahrensgebiet.functions.verfahrensgebiet_dialoge import (
baue_auswahltabelle,
ausgewaehlte_indizes,
)
SPALTENKOEPFE = ["Name", "Anschrift", "E-Mail", "Rechtsperson", "Hinweis"]
def trefferzeile(eigentuemer: Eigentuemer) -> Tuple[str, str, str, str, str]:
"""Spaltentexte eines Treffers in der Reihenfolge von :data:`SPALTENKOEPFE`."""
return (
eigentuemer.name,
eigentuemer.anschrift,
", ".join(eigentuemer.emails),
eigentuemer.rechtsperson_text,
eigentuemer.hinweise,
)
class EigentuemerTrefferFenster(QDialog):
"""Trefferliste der Eigentümersuche; bleibt offen, während weitergesucht wird."""
def __init__(
self,
treffer: Sequence[Eigentuemer],
parent=None,
beim_anzeigen: Optional[Callable[[List[Eigentuemer]], None]] = None,
):
super().__init__(parent)
self.treffer: List[Eigentuemer] = list(treffer)
self.beim_anzeigen = beim_anzeigen
self.setWindowTitle("Eigentümersuche – Treffer")
self.setModal(False)
layout = QVBoxLayout(self)
anzahl = len(self.treffer)
layout.addWidget(QLabel("1 Eintrag gefunden." if anzahl == 1 else f"{anzahl} Einträge gefunden."))
self.tabelle = baue_auswahltabelle(
layout,
SPALTENKOEPFE,
[trefferzeile(e) for e in self.treffer],
platzhalter="Name, Ort oder Hinweis …",
)
self.tabelle.resizeColumnsToContents()
if anzahl == 1:
self.tabelle.selectRow(0)
knoepfe = QHBoxLayout()
self.btn_anzeigen = QPushButton("Daten anzeigen")
self.btn_anzeigen.setToolTip("Zeigt die ausgewählten Einträge im Fenster für den Eigentümer.")
self.btn_anzeigen.clicked.connect(self._on_anzeigen)
knoepfe.addWidget(self.btn_anzeigen)
knoepfe.addStretch()
self.btn_schliessen = QPushButton("Schließen")
self.btn_schliessen.clicked.connect(self.close)
knoepfe.addWidget(self.btn_schliessen)
layout.addLayout(knoepfe)
self.resize(760, 420)
def ausgewaehlte_eigentuemer(self) -> List[Eigentuemer]:
"""Die in der Tabelle ausgewählten Treffer, in der Reihenfolge der Trefferliste."""
return [self.treffer[i] for i in ausgewaehlte_indizes(self.tabelle)]
def _on_anzeigen(self) -> None:
if self.beim_anzeigen is not None:
self.beim_anzeigen(self.ausgewaehlte_eigentuemer())