Merge pull request 'Nur-laden-Option bei ALKIS-Laden durch Stop-Abfrage ersetzt' (#43) from alkis-nur-laden-stop into unstable
Reviewed-on: #43
This commit was merged in pull request #43.
This commit is contained in:
@@ -261,12 +261,12 @@ def _baue_layer_aus_landkreis_auswahl(tab_widget, kombinationen: dict, crs: str,
|
||||
"""Auswahl + Bau für den Landkreis-Fallback.
|
||||
|
||||
Zeigt :func:`~sn_verfahrensgebiet.functions.verfahrensgebiet_dialoge.ask_landkreis_objekte`
|
||||
(Mehrfachauswahl inkl. "Alle auswählen" und "Nur laden"-Checkbox). Die
|
||||
ausgewählten Kombinationen werden anhand der ersten 5 Zeichen von
|
||||
``bezeichnung`` (= die eigentliche VKZ) gruppiert; je Gruppe wird EIN
|
||||
Feature erzeugt (Geometrien der Gruppe verschmolzen). Damit entsteht bei
|
||||
Auswahl mehrerer/aller Objekte eines Landkreises ein Layer mit mehreren
|
||||
Features – einem je tatsächlichem Verfahren, nicht ein Gesamt-Blob.
|
||||
(Mehrfachauswahl inkl. "Alle auswählen"). Die ausgewählten Kombinationen
|
||||
werden anhand der ersten 5 Zeichen von ``bezeichnung`` (= die eigentliche
|
||||
VKZ) gruppiert; je Gruppe wird EIN Feature erzeugt (Geometrien der
|
||||
Gruppe verschmolzen). Damit entsteht bei Auswahl mehrerer/aller Objekte
|
||||
eines Landkreises ein Layer mit mehreren Features – einem je
|
||||
tatsächlichem Verfahren, nicht ein Gesamt-Blob.
|
||||
|
||||
Args:
|
||||
tab_widget: Parent-Widget für Dialoge und Meldungen
|
||||
@@ -275,13 +275,12 @@ def _baue_layer_aus_landkreis_auswahl(tab_widget, kombinationen: dict, crs: str,
|
||||
status: Lade-Status aus Phase 1 (FIRST/RELOAD), wird durchgereicht
|
||||
|
||||
Returns:
|
||||
Tuple[Optional[QgsVectorLayer], LoadStatus, bool]:
|
||||
``(layer, status, nur_laden)``.
|
||||
Tuple[Optional[QgsVectorLayer], LoadStatus]: ``(layer, status)``.
|
||||
"""
|
||||
key_list = sorted(kombinationen.keys())
|
||||
selected_keys, nur_laden = ask_landkreis_objekte(tab_widget, key_list)
|
||||
selected_keys = ask_landkreis_objekte(tab_widget, key_list)
|
||||
if not selected_keys:
|
||||
return None, LoadStatus.NONE, False
|
||||
return None, LoadStatus.NONE
|
||||
|
||||
# Nach VKZ (erste 5 Zeichen der bezeichnung) gruppieren
|
||||
vkz_gruppen: dict[str, list] = {}
|
||||
@@ -322,12 +321,12 @@ def _baue_layer_aus_landkreis_auswahl(tab_widget, kombinationen: dict, crs: str,
|
||||
|
||||
if not neue_features:
|
||||
QMessageBox.critical(tab_widget, "Fehler", "Keine Geometrien zum Verschmelzen gefunden.")
|
||||
return None, LoadStatus.NONE, False
|
||||
return None, LoadStatus.NONE
|
||||
|
||||
pr.addFeatures(neue_features)
|
||||
memory_layer.updateExtents()
|
||||
|
||||
return memory_layer, status, nur_laden
|
||||
return memory_layer, status
|
||||
|
||||
|
||||
def verfahrensgebiet_alkis(tab_widget, skip_existing_check: bool = False):
|
||||
|
||||
@@ -51,6 +51,7 @@ from sn_basis.functions.dialog_wrapper import (
|
||||
create_progress_dialog,
|
||||
show_info_dialog,
|
||||
ask_detailpruefung_oder_vg_laden,
|
||||
ask_yes_no,
|
||||
)
|
||||
from sn_basis.functions.landkreise import LANDKREISE, ALLE_LANDKREISE
|
||||
from sn_basis.functions.ly_style_wrapper import apply_style
|
||||
@@ -273,9 +274,13 @@ def verfahrensgebiet_alkis_komplett(
|
||||
durchsuchen) und wird danach immer geschlossen – auch wenn anschließend
|
||||
der BROR-Auswahldialog erscheint (kein Fortschrittsdialog läuft
|
||||
währenddessen parallel zum Auswahldialog).
|
||||
- **STOP** (Zwischenabfrage "Weiter?"): erscheint nach dem Laden/Übernehmen
|
||||
des BROR-Objekts, bevor Dialog 2 startet. Bei "Nein" bricht der Ablauf
|
||||
ab, das BROR-Objekt bleibt aber im Projekt (ersetzt die frühere
|
||||
"Nur Objekte laden"-Option des Landkreis-Auswahldialogs).
|
||||
- **Dialog 2** (eigentlicher Workflow, 6 Schritte): startet erst, nachdem
|
||||
das Verfahrensgebiet feststeht (direkt nach Dialog 1 bei eindeutigem
|
||||
Treffer/KEEP, oder erst nach Bestätigung des Auswahldialogs mit OK).
|
||||
das Verfahrensgebiet feststeht und die Stop-Abfrage mit "Ja" bestätigt
|
||||
wurde.
|
||||
|
||||
Schrittfolge in Dialog 2:
|
||||
|
||||
@@ -351,8 +356,6 @@ def verfahrensgebiet_alkis_komplett(
|
||||
# Dialog 1 schließt hier immer – egal ob eine Auswahl folgt oder nicht.
|
||||
progress_suche.close()
|
||||
|
||||
nur_laden = False
|
||||
|
||||
try:
|
||||
if vorab_layer is not None or not kombinationen:
|
||||
# KEEP oder Fehler/Abbruch bereits in Phase 1 entschieden
|
||||
@@ -364,7 +367,7 @@ def verfahrensgebiet_alkis_komplett(
|
||||
# Objekt(e) des Landkreises auswählen – kein eigener Fortschritts-
|
||||
# dialog währenddessen, nur der Auswahldialog selbst.
|
||||
# ------------------------------------------------------------------
|
||||
alkis_vg_layer, vg_status, nur_laden = _baue_layer_aus_landkreis_auswahl(
|
||||
alkis_vg_layer, vg_status = _baue_layer_aus_landkreis_auswahl(
|
||||
tab_widget, kombinationen, crs, vg_status
|
||||
)
|
||||
if vg_status == LoadStatus.NONE or not alkis_vg_layer:
|
||||
@@ -387,12 +390,21 @@ def verfahrensgebiet_alkis_komplett(
|
||||
project.addMapLayer(alkis_vg_layer)
|
||||
bror_was_added_by_us = True
|
||||
# Style direkt nach dem Laden anwenden – unabhängig vom weiteren
|
||||
# Ablauf, damit auch "Nur Objekte laden" den Style erhält.
|
||||
# Ablauf, damit auch bei "Nein" auf die Stop-Abfrage der Style
|
||||
# gesetzt ist.
|
||||
apply_style(alkis_vg_layer, BROR_STYLE_QML)
|
||||
|
||||
if nur_laden:
|
||||
# Nutzer hat "Nur laden" angehakt – kein Dialog 2, kein weiterer
|
||||
# Workflow (Gemarkung/Flurstücke/Vergleich).
|
||||
# ------------------------------------------------------------------
|
||||
# STOP: Zwischenabfrage nach dem Laden des BROR-Objekts, bevor mit
|
||||
# Gemarkung/Flurstücke/Flächenvergleich fortgefahren wird (ersetzt
|
||||
# die frühere "Nur Objekte laden"-Option).
|
||||
# ------------------------------------------------------------------
|
||||
if not ask_yes_no(
|
||||
"Verfahrensgebiet laden",
|
||||
f"Layer '{alkis_vg_layer.name()}' wurde geladen. Weiter?",
|
||||
default=True,
|
||||
parent=tab_widget,
|
||||
):
|
||||
abgeschlossen = True
|
||||
return alkis_vg_layer, None, None, vg_status
|
||||
|
||||
|
||||
@@ -101,15 +101,15 @@ def ask_bror_kombinationen(
|
||||
def ask_landkreis_objekte(
|
||||
parent: Any,
|
||||
kombinationen: list[tuple[str, str]],
|
||||
) -> tuple[list[tuple[str, str]], bool]:
|
||||
) -> list[tuple[str, str]]:
|
||||
"""Zeigt Dialog zur Auswahl eines, mehrerer oder aller BROR-Objekte eines
|
||||
Landkreises (Fallback, wenn keine Verfahrensnummer gesetzt ist).
|
||||
|
||||
Wie :func:`ask_bror_kombinationen`, zusätzlich mit einer "Alle
|
||||
auswählen"-Checkbox (da hier potenziell deutlich mehr Treffer als bei der
|
||||
VKZ-Suche auftreten) und einer "Nur laden"-Checkbox, mit der gesteuert
|
||||
wird, ob nach dem Laden der weitere Workflow (Gemarkung/Flurstücke/
|
||||
Flächenvergleich) fortgesetzt werden soll.
|
||||
VKZ-Suche auftreten). Ob nach dem Laden der weitere Workflow
|
||||
(Gemarkung/Flurstücke/Flächenvergleich) fortgesetzt wird, klärt eine
|
||||
separate Stop-Abfrage nach dem Laden – nicht mehr dieser Dialog.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
@@ -120,16 +120,16 @@ def ask_landkreis_objekte(
|
||||
|
||||
Returns
|
||||
-------
|
||||
tuple[list[tuple[str, str]], bool]
|
||||
``(ausgewaehlte_kombinationen, nur_laden)``. ``([], False)`` bei
|
||||
list[tuple[str, str]]
|
||||
Die gewählten ``(adv_name, bezeichnung)``-Tupel. Leere Liste bei
|
||||
Abbruch oder wenn nichts ausgewählt wurde.
|
||||
"""
|
||||
if not kombinationen:
|
||||
return [], False
|
||||
return []
|
||||
|
||||
if QT_VERSION == 0: # Mock-Modus
|
||||
print(f"Mock-Modus: ask_landkreis_objekte → {kombinationen[:1]}")
|
||||
return kombinationen[:1], False
|
||||
return kombinationen[:1]
|
||||
|
||||
dialog = QDialog(parent)
|
||||
dialog.setWindowTitle("Verfahrensgebiete aus Landkreis laden")
|
||||
@@ -204,9 +204,6 @@ def ask_landkreis_objekte(
|
||||
mehrfachauswahl_hinweis = QLabel("<small>Mehrfachauswahl mit Strg + Umschalt</small>")
|
||||
layout.addWidget(mehrfachauswahl_hinweis)
|
||||
|
||||
nur_laden_checkbox = QCheckBox("Nur Objekte laden (ohne weitere Prüfungen)")
|
||||
layout.addWidget(nur_laden_checkbox)
|
||||
|
||||
buttons = QDialogButtonBox(QDialogButtonBox.StandardButton.Ok | QDialogButtonBox.StandardButton.Cancel)
|
||||
buttons.accepted.connect(dialog.accept)
|
||||
buttons.rejected.connect(dialog.reject)
|
||||
@@ -235,11 +232,11 @@ def ask_landkreis_objekte(
|
||||
dialog.resize(breite, dialog.sizeHint().height())
|
||||
|
||||
if exec_dialog(dialog) != DialogAccepted:
|
||||
return [], False
|
||||
return []
|
||||
|
||||
ausgewaehlte_zeilen = sorted(set(item.row() for item in table.selectedItems()))
|
||||
ausgewaehlt = [(table.item(row, 1).text(), table.item(row, 0).text()) for row in ausgewaehlte_zeilen]
|
||||
return ausgewaehlt, nur_laden_checkbox.isChecked()
|
||||
return ausgewaehlt
|
||||
|
||||
|
||||
def ask_landkreis_auswahl(
|
||||
|
||||
Reference in New Issue
Block a user