Nach dem Laden aus ALKIS oder Shape wurde mit layer.extent() im
Layer-KBS gezoomt; bei anderem Projekt-KBS sprang die Karte an die
falsche Stelle. Beide Stellen nutzen jetzt zoom_auf_layer aus sn_basis.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
grenzpunkte_gemarkungsweise() ruft nach project.addMapLayer(joined_layer)
jetzt apply_style(joined_layer, "alkis_grenzpunkte.qml") auf - analog zum
bereits etablierten Muster bei Flurstücken/Verfahrensgebiet/BROR in
working_tab.py bzw. verfahrensgebiet_alkis_komplett.py.
Neuer Test test_stil_wird_nach_dem_laden_auf_den_ergebnis_layer_angewendet
mockt die komplette interne WFS-Kette (Extents, Hits, GML-Parsing,
Grenzpunkt-Batch, Join) und prüft, dass apply_style() mit dem Ergebnis-
Layer und dem richtigen Dateinamen aufgerufen wird.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
apply_style(gem_layer, "gemarkungen_beschriftet.qml") in working_tab.py
ruft die Datei klein geschrieben auf, im Repo lag sie als
Gemarkungen_beschriftet.qml. Auf Windows (case-insensitive) unsichtbar,
auf einem case-sensitiven Dateisystem (Linux/OSGeo4W) hätte das die
Datei nie gefunden - zusätzlich zum Pfadfehler in get_plugin_root()
(siehe Kommentar zu #50).
Umbenennung über zwei git mv-Schritte, da Windows/core.ignorecase eine
reine Case-Änderung sonst nicht als Rename erkennt.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Test-Audit (Projektwissen #16) deckte auf: tests/test_flurstueck_alkis.py
wurde im selben Commit (f8bdcde) angelegt, in dem flurstueck_alkis() von
einer einzelnen QgsVectorLayer-Abfrage auf lade_flurstuecke_per_gemarkung()
(eine WFS-Anfrage je Gemarkung, Merge in Memory-Layer) umgestellt wurde -
die Tests mockten aber weiterhin die alte Ein-Query-Variante und liefen
seither ins Leere (8 von 12 Testfaellen rot in der Baseline).
- Tests mocken jetzt lade_flurstuecke_per_gemarkung()/_check_existing_
flurstueck_layer() statt QgsVectorLayer direkt, passend zum seit #47
bzw. 944fc82 aktuellen Drei-Knopf-Dialog (Ueberschreiben/Anhaengen/
Abbrechen) und dem Pro-Gemarkung-Ladevorgang.
- test_existing_layer_keep_no -> test_existing_layer_abbrechen_returns_none:
LoadStatus.KEEP wird von _check_existing_flurstueck_layer() nicht mehr
zurueckgegeben, der verbleibende Nicht-Aendern-Pfad ist "Abbrechen".
- test_bbox_embedded_in_wfs_uri entfernt: bbox wird von keinem Aufrufer
mehr uebergeben und im Code nicht mehr ausgewertet; die vermeintliche
URI-Einbettung gab es schon lange nicht mehr.
- Modul-Docstring in flurstueck_alkis.py korrigiert: bbox ist reine
Rueckwaertskompatibilitaet in der Signatur (Flurstueck-Geometrie kommt
aus dem WFS je Gemarkung, keine BBox-Filterung), Memory-Layer statt
Direktladung dokumentiert.
- Alle Docstrings von TestFlurstueckAlkis auf "Prueft, dass ..." gebracht
(Vorgabe docs/leitfaden/06_tests.md) und inhaltlich an die tatsaechlich
getestete Logik angepasst; Datei-Docstring ebenfalls korrigiert.
- Totes _DummyLayer.extent() entfernt (wird von keiner Aufrufkette mehr
erreicht).
Kein Verhaltensunterschied in flurstueck_alkis() selbst - nur Tests und
Dokumentation an eine bereits bestehende Implementierung angeglichen.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
handle_flurst_aus_gemarkungen() hatte eine eigene Kopie des
"Layer bereits vorhanden"-Dialogs und rief lade_flurstuecke_per_gemarkung
direkt auf, statt die bereits vorhandene, getestete Logik in
flurstueck_alkis() wiederzuverwenden. Grund war, dass ohne_dialog=True
zwei unabhaengige Dinge zugleich abschaltete: die Schluessel-Abfrage per
ask_text UND den Existenz-Dialog samt Anhaengen-Dedup.
Neuer Parameter ohne_schluessel_abfrage trennt beides: er ueberspringt
nur die Schluessel-Abfrage (Schluessel kommen bereits aus der
Gemarkungen-Layer-Auswahl), der Existenz-Dialog mit Dedup bleibt aktiv.
ohne_dialog bleibt fuer die automatischen Pipelines unveraendert.
handle_flurst_alkis() und handle_flurst_aus_gemarkungen() teilen sich
jetzt zusaetzlich die Nachbehandlung des Ladeergebnisses
(_uebernimm_flurstuecke_ergebnis). lade_flurstuecke_per_gemarkung() wird
wieder nur noch von einer Stelle aus aufgerufen.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
handle_flurst_aus_gemarkungen in working_tab.py hatte eine eigene,
von flurstueck_alkis() unabhaengige Anhaengen-Logik, die
lade_flurstuecke_per_gemarkung direkt aufrief und ungefiltert
anhaengte. Nutzt jetzt dieselbe flurstueckskennzeichen-Pruefung wie
der Fix im vorigen Commit; dafuer vorhandene_kennzeichen() in
flurstueck_alkis.py oeffentlich gemacht.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Beim Anhaengen an einen bestehenden Flurstueck-Layer wurden alle neu
geladenen Objekte unabhaengig davon hinzugefuegt, ob sie ueber
flurstueckskennzeichen bereits im Layer vorhanden waren. Jetzt werden
nur noch neue Kennzeichen angehaengt; fehlt das Feld, bleibt das
bisherige Verhalten als Rueckfall erhalten.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Manche Shape-Exporte liefern das Feld "FBSchl" mit angehängtem Punkt
(z.B. "FBSchl.") oder abweichender Groß-/Kleinschreibung. Der bisherige
exakte Namensvergleich (fields().indexFromName) erkannte das Feld dann
nicht und meldete fälschlich "Feld fehlt", die Datei wurde nicht
eingelesen.
- _normalisiere_feldname(): entfernt alle Nicht-alphanumerischen Zeichen
und normalisiert auf Kleinbuchstaben
- _finde_fbschl_index(): exakter Namensabgleich zuerst, sonst Fallback auf
normalisierten Vergleich über alle Felder
Fixes#44
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
- Checkbox "Nur Objekte laden (ohne weitere Prüfungen)" im
Landkreis-Auswahldialog entfernt
- Stattdessen nach dem Laden/Übernehmen des BROR-Objekts eine einheitliche
Ja/Nein-Stop-Abfrage ("Weiter?") vor Dialog 2 (Gemarkung/Flurstücke/
Flächenvergleich) - analog zum Ablauf bei "Aus Shape laden"
- Gilt jetzt für Verfahrensnummer- und Landkreis-Zweig gleichermaßen,
vorher gab es die Option nur im Landkreis-Zweig
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
- Dateidialog erlaubt Mehrfachauswahl von .zip/.shp; ZIPs werden in ein
temporäres Verzeichnis entpackt statt dauerhaft neben der ZIP-Datei
(Cleanup nach dem Einlesen)
- Je Shapefile wird das Feld FBSchl geprüft und in Neuordnungs- bzw.
Neuvermessungsgebiet unterschieden; Geometrien gleichen Typs werden über
alle Dateien hinweg zu je einem Layer verschmolzen und entsprechend
benannt ("Neuordnungsgebiet (NoBIS)" / "Neuvermessungsgebiet (NoBIS)")
- Fehler einzelner Dateien/Shapefiles brechen den Vorgang nicht mehr ab,
sondern werden gesammelt und am Ende in einer Meldung ausgegeben
- Fortschrittsdialog erscheint erst nach dem Stop nach dem Laden, nicht
mehr schon vor dem Dateidialog
- Vorprüfung auf gesetzte Verfahrensnummer vorerst auskommentiert
- Ablauf-Dokumentation aufgeteilt in aus_alkis_laden.md und
aus_shape_laden.md (+ technische Ergänzung aus_shape_laden_technisch.md)
Löst #36, #37, #38
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
- verfahrensgebiet_shape_komplett.py: TEMPORÄRER STOPP (wieder entfernen)
zur Zwischenkontrolle nach dem ZIP-Import. Layer wird dafür schon an
dieser Stelle sichtbar ins Projekt eingefügt statt erst nach Schritt 2;
bei "Nein" bleibt der Layer zur Inspektion erhalten (abgeschlossen=True),
der spätere reguläre addMapLayer-Aufruf prüft auf Duplikat.
- docs/ablauf_verfahrensgebiet_laden.md: Mermaid-Diagramm der Lade-Abläufe
(ALKIS/Shape) bis zu den jeweiligen frühen Stopps.
Lokaler Debug-Branch, bewusst nicht für unstable vorgesehen.
Konflikte aufgelöst wie mit Daniel abgestimmt:
- functions/beteiligung_pruefung.py, tests/test_beteiligung_pruefung.py:
unsere Version behalten (ohne silent-Parameter, Aufforderung statt
automatischem Hintergrund-Laden bei try2/try3).
- functions/verfahrensgebiet_alkis.py, functions/verfahrensgebiet_alkis_komplett.py:
unsere Version behalten (Zwei-Dialog-Split, Landkreis-Fallback; Daniels
silent-Parameter dadurch nicht mehr benötigt).
- ui/tabs/working_tab.py: Docstring-Konflikt trivial aufgelöst, unsere
Fassung behalten (beschreibt das tatsächliche Verhalten ohne silent).
- changelog.txt: beide Versionsblöcke zusammengeführt.
Portiert aus origin/unstable (Feature "Beteiligung prüfen": Abgleich einer
BI-Server-CSV-Exportliste mit dem ALKIS-Flurstücksbestand des
Verfahrensgebiets), bewusst OHNE den dortigen silent-Modus für
verfahrensgebiet_alkis()/verfahrensgebiet_alkis_komplett():
- try1 (Verfahrensgebiet-Layer mit Kennzeichen vorhanden) bleibt unverändert
– schneller Mengenvergleich ohne WFS-Zugriff.
- try2 (Layer vorhanden, aber ohne verwertbare Kennzeichen) und try3 (kein
Layer vorhanden) laden nicht mehr automatisch/silent über die komplette
ALKIS-Pipeline, sondern fordern den Nutzer per Meldung auf, das
Verfahrensgebiet zunächst regulär über "Aus ALKIS laden" zu laden und die
Beteiligungsprüfung danach erneut zu starten (landet dann automatisch bei
try1). Grund: ein automatischer Durchlauf ohne Nutzerinteraktion
(mehrdeutige BROR-Treffer, Flächenabweichungen) hat sich in der Praxis
nicht als zuverlässig genug erwiesen.
- verfahrensgebiet_alkis.py/verfahrensgebiet_alkis_komplett.py bleiben dadurch
unangetastet – kein silent-Parameter, kein Konflikt mit dem heutigen
Zwei-Dialog-Split und dem Landkreis-Fallback.
- Neuer Button "Beteiligung prüfen" in working_tab.py, delegiert an
beteiligung_pruefen().
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Abbruch des Dialogs ist eine bewusste Nutzerentscheidung, kein Fehlerzustand
– verfahrensgebiet_alkis_komplett() bricht jetzt still ab statt eine
QMessageBox.critical zu zeigen. Test entsprechend angepasst/umbenannt.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
- Ist weder Verfahrensnummer noch Landkreis in den Projekteigenschaften
gesetzt, wird jetzt per Dialog ein Landkreis abgefragt (inkl. "Alle
Landkreise") statt direkt abzubrechen.
- Verfahrensgebiet-spezifische ALKIS-Dialoge aus sn_basis hierher verschoben:
neue Datei functions/verfahrensgebiet_dialoge.py
(ask_bror_kombinationen, ask_landkreis_objekte, ask_landkreis_auswahl).
- Bugfix: BROR-Layer bekommt seinen Style (BauRaumOderBodenordnungsrecht.qml)
jetzt direkt beim Laden in verfahrensgebiet_alkis_komplett(), unabhängig
vom weiteren Ablauf. working_tab.py überspringt bei "Nur Objekte laden"
jetzt den gesamten VG-Nachbehandlungsblock (Style/Extent/Haken/Combobox/
Erfolgsmeldung), da dort kein echter VG-Layer entsteht. Detailprüfung/
Verifikation im echten QGIS (nicht nur per Unittest) steht noch aus.
- Bugfix: Erfolgsmeldung "Layer wurde ... geladen (inkl.
Flurstücksverschneidung)" erscheint nicht mehr bei "Nur Objekte laden".
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
- Fortschrittsdialog beim Laden aus ALKIS schließt jetzt zuverlässig bei
jedem Abbruch (progress.close() zentral im finally-Block).
- Fortschrittsanzeige in zwei Dialoge aufgeteilt: Suche (1 Schritt) läuft
und schließt separat, bevor der eigentliche Workflow (Gemarkung/
Flurstücke/Vergleich, 6 Schritte) startet – auch während des BROR-
Auswahldialogs läuft kein störender Hintergrund-Fortschrittsbalken mehr.
- verfahrensgebiet_alkis() in Suche-/Auswahl-Phasen aufgeteilt, damit
mehrere gefundene BauRaumOderBodenordnungsrecht-Objekte gemeinsam
ausgewählt und verschmolzen werden können (öffentliche Signatur
unverändert).
- Neu: Landkreis-weite Suche als Fallback, wenn keine Verfahrensnummer
gesetzt ist (Landkreiskennzahl aus Projektvariable), mit Mehrfach-
auswahl/"Alle auswählen" und "Nur laden"-Option (überspringt den
restlichen Workflow). Gruppierung der Auswahl nach VKZ, damit je
Verfahren ein eigenes Feature entsteht statt eines Gesamt-Blobs.
- Tests entsprechend angepasst/ergänzt (29 Tests in
test_verfahrensgebiet_alkis_komplett.py, davon 3 neu für den
Landkreis-Fallback).