Befund aus dem QGIS-Test: Die Bildschirmwahl wirkte nicht, das Fenster
erschien immer auf dem Hauptbildschirm. Im Vollbild ließ es sich weder
verschieben noch schließen und verdeckte QGIS; nur ein hartes Beenden
von QGIS half.
Bildschirmwahl und Vollbild entfallen. Das Anzeigefenster öffnet als
normales Fenster mit Rahmen; der Bearbeiter schiebt es auf den Bildschirm
des Eigentümers und kann es dort maximieren. Größe und Lage werden beim
Beenden gemerkt und in der nächsten Sitzung wiederhergestellt (bis zum
Neustart von QGIS).
Unter den Knöpfen steht jetzt Pfad und Name der Korrektur-Datei, mit
Hinweis, solange sie noch nicht angelegt ist oder erst abgefragt wird.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
„Daten anzeigen“ in der Trefferliste zeigt Name, Anschrift und E-Mail der
gewählten Einträge in einem eigenen Fenster: auf einem zweiten Bildschirm
im Vollbild, auf dem QGIS-Bildschirm als normales Fenster. Die Sitzung
wird von Hand begonnen und beendet; „Anzeige leeren“ entfernt die Daten,
ohne das Fenster zu schließen. Konten, IDs und Kennzeichen erscheinen dort
nicht, alle Werte werden maskiert.
„Korrigieren …“ ändert angezeigte Daten. Die Eigentümerdatei bleibt
unverändert; jede Änderung wird mit Zeitpunkt, Konto, Personen-ID, altem
und neuem Wert an <Eigentümerdatei>_korrekturen.csv angehängt und sofort
angezeigt. Ohne beschreibbaren Ordner wird nach dem Speicherort gefragt.
In test_eigentuemer_tab.py sind die beim letzten Mal zusammengezogenen
with-Zeilen wieder umbrochen; die Trefferliste bekommt jetzt den
Anzeige-Rückruf, der Test dazu ist angepasst.
Dritter und letzter Schritt von #56.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
PER_RECHTSPERSON kennt die Werte 0, 1, 5 und 9 und ist kein Ja/Nein-Feld.
Die Trefferliste bekommt dafür eine eigene Spalte mit dem unveränderten
Wert; abweichende Werte einer Person werden gesammelt. Die Entschlüsselung
folgt später. „verstorben“ (PER_VERSTORBEN 0/1) bleibt als Hinweis.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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>
Gemarkung (Name oder Nummer) und Flurstücksnummer eingeben, die Treffer
werden im Layer „Flurstücke“ ausgewählt, angezoomt und kurz hervorgehoben.
Verglichen wird das flurstueckskennzeichen, Gemarkungsnamen werden über
den Layer „Gemarkungen“ aufgelöst. Ohne Layer „Flurstücke“ weist ein
Dialog darauf hin, zuerst Verfahrensgebiet und Flurstücke zu laden.
Erster Schritt von #56; Eigentümersuche und Anzeigefenster folgen.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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>