Eigentümerdatei (CSV-Layer mit Nachname/Vorname) wählen, Name und/oder Vorname eingeben: Eine nicht modale Trefferliste zeigt Name, Anschrift, E-Mail und die Kennzeichen „verstorben“/„Rechtsperson“. Gleiche Personen mit gleicher Anschrift werden zusammengefasst; Groß-/Kleinschreibung und Umlautschreibweise spielen keine Rolle. Von QGIS als Zahl gelesene PLZ bekommen ihre führende Null zurück. Meldungen enthalten keine Namen. Die Auswahltabelle aus „Verfahrensgebiete aus Landkreis laden“ ist als baue_auswahltabelle herausgelöst und wird von der Trefferliste mitgenutzt. Zweiter Schritt von #56; Anzeigefenster und Korrekturen folgen. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
68 lines
2.5 KiB
Python
68 lines
2.5 KiB
Python
"""sn_verfahrensgebiet/ui/eigentuemer_treffer.py – Trefferliste der Eigentümersuche (#56).
|
||
|
||
Nicht modales Fenster für den Bearbeiter. Es zeigt die zusammengefassten
|
||
Treffer mit den Kennzeichen „verstorben“ und „Rechtsperson“ und erlaubt die
|
||
Mehrfachauswahl. Die Tabelle kommt aus
|
||
:func:`~sn_verfahrensgebiet.functions.verfahrensgebiet_dialoge.baue_auswahltabelle`,
|
||
dieselbe wie bei „Verfahrensgebiete aus Landkreis laden“.
|
||
"""
|
||
|
||
from typing import List, 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", "Hinweis"]
|
||
|
||
|
||
def trefferzeile(eigentuemer: Eigentuemer) -> Tuple[str, str, str, str]:
|
||
"""Spaltentexte eines Treffers in der Reihenfolge von :data:`SPALTENKOEPFE`."""
|
||
return (
|
||
eigentuemer.name,
|
||
eigentuemer.anschrift,
|
||
", ".join(eigentuemer.emails),
|
||
eigentuemer.hinweise,
|
||
)
|
||
|
||
|
||
class EigentuemerTrefferFenster(QDialog):
|
||
"""Trefferliste der Eigentümersuche; bleibt offen, während weitergesucht wird."""
|
||
|
||
def __init__(self, treffer: Sequence[Eigentuemer], parent=None):
|
||
super().__init__(parent)
|
||
self.treffer: List[Eigentuemer] = list(treffer)
|
||
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()
|
||
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)]
|