try1-fix: direkte Prüfung ohne ALKIS-Pipeline
This commit is contained in:
@@ -221,15 +221,26 @@ def baue_flurstueck_csv_liste(zeilen: List[dict], laenderkennung: str) -> List[s
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
def _hole_verfahrensgebiet_layer(tab_widget) -> Optional[object]:
|
||||
"""Liefert den aktuell relevanten Verfahrensgebiet-Layer, falls vorhanden."""
|
||||
"""Liefert den Verfahrensgebiet-Layer, falls vorhanden.
|
||||
|
||||
Der per Name (``VERF_LAYER_NAME``) identifizierte Layer hat Vorrang vor
|
||||
der Dropdown-Auswahl im Tab: try1/try2/try3 orientieren sich am
|
||||
tatsächlichen "Verfahrensgebiet"-Bestand im Projekt, nicht an einer
|
||||
ggf. anderweitig belegten Nutzerauswahl (z.B. für Grenzpunkte/
|
||||
Umringstatistik). Die Dropdown-Auswahl dient nur als Fallback, falls
|
||||
kein so benannter Layer existiert.
|
||||
"""
|
||||
treffer = QgsProject.instance().mapLayersByName(VERF_LAYER_NAME)
|
||||
if treffer:
|
||||
return treffer[0]
|
||||
|
||||
combo = getattr(tab_widget, "verf_layer_combo", None)
|
||||
if combo is not None:
|
||||
layer = combo.currentLayer()
|
||||
if layer is not None and layer.isValid():
|
||||
return layer
|
||||
|
||||
treffer = QgsProject.instance().mapLayersByName(VERF_LAYER_NAME)
|
||||
return treffer[0] if treffer else None
|
||||
return None
|
||||
|
||||
|
||||
def _hat_verwendbare_kennzeichen(verf_layer) -> bool:
|
||||
@@ -272,6 +283,10 @@ def _try1_listenabgleich(
|
||||
3, "Beteiligung prüfen", "Verfahrensgebiet-Kennzeichen einlesen …"
|
||||
)
|
||||
progress.set_value(0)
|
||||
# Ohne eine dazwischenliegende Nutzerinteraktion (z.B. nach der silent
|
||||
# durchlaufenen ALKIS-Pipeline in try2/try3) holt sich kein anderer
|
||||
# Dialog den Fokus zurück – Dialog daher explizit in den Vordergrund holen.
|
||||
progress.raise_to_front()
|
||||
|
||||
verf_menge = get_kennzeichen_menge(verf_layer)
|
||||
csv_menge = set(flurstueck_csv_liste)
|
||||
|
||||
@@ -496,6 +496,10 @@ def verfahrensgebiet_alkis_komplett(
|
||||
"Schritt 1: Grenzpunkte laden …",
|
||||
)
|
||||
detail_progress.set_value(0)
|
||||
# Ohne die (im silent-Modus übersprungene) Nachfrage vor diesem Punkt
|
||||
# holt sich kein anderer Dialog mehr den Fokus zurück – Dialog daher
|
||||
# explizit in den Vordergrund holen, sonst bleibt er unsichtbar.
|
||||
detail_progress.raise_to_front()
|
||||
|
||||
# Schritt 1: PunktortTA gemarkungsweise laden (Hits + 5000er-Batches)
|
||||
punktort_layer = lade_punktort_ta(
|
||||
|
||||
@@ -55,6 +55,7 @@ from sn_verfahrensgebiet.functions.beteiligung_pruefung import (
|
||||
CSV_SPALTE_VEF_VKZF,
|
||||
_lade_via_alkis_pipeline_und_vergleiche,
|
||||
_try3_bootstrap_und_try2,
|
||||
_hole_verfahrensgebiet_layer,
|
||||
)
|
||||
|
||||
_MOD = "sn_verfahrensgebiet.functions.beteiligung_pruefung"
|
||||
@@ -125,6 +126,50 @@ class TestBaueFlurstueckCsvListe(unittest.TestCase):
|
||||
self.assertEqual(zeilen[2][FELD_FLURSTUECK_CSV], "145678___00001____01")
|
||||
|
||||
|
||||
class TestHoleVerfahrensgebietLayer(unittest.TestCase):
|
||||
@patch(f"{_MOD}.QgsProject")
|
||||
def test_layer_per_name_hat_vorrang_vor_combo_auswahl(self, mock_project_cls):
|
||||
namens_layer = MagicMock(name="verfahrensgebiet_layer")
|
||||
mock_project = MagicMock()
|
||||
mock_project.mapLayersByName.return_value = [namens_layer]
|
||||
mock_project_cls.instance.return_value = mock_project
|
||||
|
||||
andere_auswahl = MagicMock(name="andere_layer_in_combo")
|
||||
andere_auswahl.isValid.return_value = True
|
||||
tab_widget = MagicMock()
|
||||
tab_widget.verf_layer_combo.currentLayer.return_value = andere_auswahl
|
||||
|
||||
ergebnis = _hole_verfahrensgebiet_layer(tab_widget)
|
||||
|
||||
self.assertIs(ergebnis, namens_layer)
|
||||
|
||||
@patch(f"{_MOD}.QgsProject")
|
||||
def test_combo_auswahl_als_fallback_ohne_namens_layer(self, mock_project_cls):
|
||||
mock_project = MagicMock()
|
||||
mock_project.mapLayersByName.return_value = []
|
||||
mock_project_cls.instance.return_value = mock_project
|
||||
|
||||
combo_layer = MagicMock(name="combo_layer")
|
||||
combo_layer.isValid.return_value = True
|
||||
tab_widget = MagicMock()
|
||||
tab_widget.verf_layer_combo.currentLayer.return_value = combo_layer
|
||||
|
||||
ergebnis = _hole_verfahrensgebiet_layer(tab_widget)
|
||||
|
||||
self.assertIs(ergebnis, combo_layer)
|
||||
|
||||
@patch(f"{_MOD}.QgsProject")
|
||||
def test_kein_layer_gibt_none(self, mock_project_cls):
|
||||
mock_project = MagicMock()
|
||||
mock_project.mapLayersByName.return_value = []
|
||||
mock_project_cls.instance.return_value = mock_project
|
||||
|
||||
tab_widget = MagicMock()
|
||||
tab_widget.verf_layer_combo.currentLayer.return_value = None
|
||||
|
||||
self.assertIsNone(_hole_verfahrensgebiet_layer(tab_widget))
|
||||
|
||||
|
||||
class TestLadeViaAlkisPipelineUndVergleiche(unittest.TestCase):
|
||||
@patch(f"{_MOD}._try1_listenabgleich")
|
||||
@patch(f"{_MOD}.apply_style")
|
||||
|
||||
Reference in New Issue
Block a user