<<   END; function ListAG($liste_ag, $aktuell) { // Amtsgerichte (Grundbuchamt) auflisten, dazu als Filter die AG-Liste aus Conf-Datei verwenden. global $debug; $linelimit=40; $sql="SELECT stelle, bezeichnung AS ag FROM ax_dienststelle " ."WHERE stelle IN (".$liste_ag.") AND stellenart = 1000 AND endet IS NULL ORDER BY bezeichnung LIMIT $1 ;"; $res = pg_prepare("", $sql); $res = pg_execute("", array($linelimit)); if (!$res) { echo "\n

Fehler bei Amtsgerichte

"; if ($debug >= 3) {echo "\n

".$sql."

";} return 0; } $cnt = 0; while($row = pg_fetch_array($res)) { // Loop AG $anr=$row["stelle"]; $ag=$row["ag"]; zeile_ag ($ag, $anr, $aktuell); $cnt++; } // Foot if($cnt == 0){ echo "\n

Kein Amtsgericht aus Liste ".$$liste_ag.".

"; } elseif ($cnt >= $linelimit) { echo "\n

".$cnt." Amtsgerichte ... und weitere

"; } elseif ($cnt > 1) { echo "\n

".$cnt." Amtsgerichte

"; } return 0; } function ListGBBez($agkey) { // Grundbuch-Bezirke zu einem Amtsgericht auflisten. // Auch wenn Blätter vorhanden sind, kann es eine "Sackgasse" sein. // Manchmal haben die Blätter keine Flurstücke im Filter-Bereich (Gemeinde). global $debug; $linelimit=100; // Bezirke/AG // Head ListAG("'".$agkey."'", true); // hier nur für 1 // Body // Die Subquery stellt sicher, dass nur Bezirke aufgelistet werden, die auch Blätter enthalten $sql ="SELECT g.bezirk, g.bezeichnung FROM ax_buchungsblattbezirk g JOIN ax_dienststelle a ON g.stelle=a.stelle " ."WHERE a.stelle = $1 AND a.stellenart = 1000 AND a.endet IS NULL AND g.endet IS NULL " ."AND NOT (SELECT gml_id FROM ax_buchungsblatt b WHERE b.land=g.land AND b.bezirk=g.bezirk AND b.endet IS NULL LIMIT 1) IS NULL " ."ORDER BY g.bezeichnung LIMIT $2 ;"; $v = array($agkey, $linelimit); $res = pg_prepare("", $sql); $res = pg_execute("", $v); if (!$res) { echo "\n

Fehler bei Grundbuch-Bezirk

"; #if ($debug >= 3) {echo "\n

".$sql."

";} return 0; } $cnt = 0; while($row = pg_fetch_array($res)) { // Loop BEZIRK $gnam=$row["bezeichnung"]; $gnr=$row["bezirk"]; zeile_gbbez($gnam, $gnr, false); $cnt++; } // Foot if($cnt == 0){ echo "\n

Kein Bezirk mit Blättern.

"; } elseif ($cnt >= $linelimit) { echo "\n

".$cnt." Bezirke ... und weitere

"; } elseif($cnt > 1) { echo "\n

".$cnt." Bezirke

"; // im Limit } return; } function ag_bez_head($gbbez, $bezaktuell) { // Zu einem Grundbuchbezirks-Schlüssel die Zeilen "AG" und "Bezirk" ausgeben // Parameter = Schlüssel des Bezirks #global $debug; $sql ="SELECT a.stelle, a.bezeichnung AS ag, g.bezeichnung FROM ax_buchungsblattbezirk g " ."JOIN ax_dienststelle a ON g.stelle=a.stelle WHERE g.bezirk= $1 AND g.endet IS NULL AND a.endet IS NULL LIMIT 1;"; $v=array($gbbez); $res=pg_prepare("", $sql); $res=pg_execute("", $v); if (!$res) { echo "\n

Fehler bei Amtsgericht und Grundbuchbezirk.

"; #if ($debug >= 3) {echo "\n

".$sql."

";} } $row = pg_fetch_array($res); if ($row) { $gnam=$row["bezeichnung"]; // GB-Bezirk Bezeichnung $ag=$row["ag"]; // AG Bezeichnung $anr=$row["stelle"]; // AG Key zeile_ag($ag, $anr, false); // Amtsgericht zeile_gbbez($gnam, $gbbez, $bezaktuell); // Bezirk } else { echo "\n
"; echo "\n\t\t

Bez."; echo " Bezirk '".$gbbez."' ist unbekannt.

"; echo "\n
"; return; } return; } function SuchGBBezName() { // Grundbuch-Bezirk suchen nach Name(-nsanfang) global $gkz, $gemeinde, $debug, $gbkennz; $linelimit=80; $sql ="SELECT a.stelle, a.bezeichnung AS ag, g.bezirk, g.bezeichnung FROM ax_buchungsblattbezirk g " ."JOIN ax_dienststelle a ON g.stelle=a.stelle " ."WHERE g.bezeichnung ILIKE $1 AND g.endet IS NULL AND a.endet IS NULL " ."ORDER BY a.bezeichnung, g.bezeichnung LIMIT $2 ;"; // "AND a.stellenart=1000 " Amtsgericht if ( $gbkennz == "") { $match = "%"; } else { if(preg_match("/\*/",$gbkennz)){ $match = trim(preg_replace("/\*/i","%", strtoupper($gbkennz))); if (substr($match, strlen($match), 1) != "%") {$match.="%";} // Wildcard am Ende obligatorisch } else { $match = trim($gbkennz)."%"; } } $v = array($match, $linelimit); $res = pg_prepare("", $sql); $res = pg_execute("", $v); if (!$res) { echo "\n

Fehler bei Grundbuch-Bezirk

"; return 1; } $cnt=0; $gwag=""; while($row = pg_fetch_array($res)) { // Loop BEZIRK $anr=$row["stelle"]; // Gruppierung AG if ($gwag != $anr) { $gwag = $anr; $ag=$row["ag"]; zeile_ag($ag, $anr, false); } $gnam=$row["bezeichnung"]; $gnr=$row["bezirk"]; zeile_gbbez ($gnam, $gnr, false); $cnt++; } // Foot if($cnt == 0){ echo "\n

Kein Grundbuchbezirk.

"; } elseif ($cnt >= $linelimit) { echo "\n

".$cnt." Bezirke ... und weitere

"; } elseif ($cnt == 1) { return $gnr; // Wenn eindeutig, gleich weiter } elseif ($cnt > 1) { echo "\n

".$cnt." Bezirke

"; // im Limit } return; } function EinBezirk($showParent) { // Kennzeichen bestehend nur aus GB-Bezirk-Schlüssel wurde eingegeben global $gemeinde, $debug, $zgbbez, $auskpath; $linelimit=300; // max. Blatt je Bezirk // Dies Limit ist nicht ausreichend für alle Blätter eines Bezirks, aber ... // Wenn man die Blatt-Nr nicht kennt, kommt man hier sowieso nicht weiter. // Es nutzt also nichts, hier tausende Nummern aufzulisten. // +++ Blätter-Funktion einführen analog Modul _eig // Head if ($showParent) { ag_bez_head($zgbbez, true); // AG und BEZ ausgeben } // Body $sql ="SELECT b.gml_id, b.buchungsblattnummermitbuchstabenerweiterung AS blatt FROM ax_buchungsblatt b " ."WHERE b.bezirk= $1 AND b.endet IS NULL ORDER BY b.buchungsblattnummermitbuchstabenerweiterung LIMIT $2 ;"; $v=array($zgbbez, $linelimit); $res=pg_prepare("", $sql); $res=pg_execute("", $v); if (!$res) { echo "\n

Fehler bei Bezirk.

"; #if ($debug >= 3) {echo "\n

".$sql."

";} } $cntbl=0; // Counter Blatt/Bezirk while($row = pg_fetch_array($res)) { // Loop BLATT $blatt=$row["blatt"]; $blattgml=$row["gml_id"]; zeile_blatt($zgbbez, "", $blattgml, $blatt, false, "", false); $cntbl++; } // Foot if($cntbl == 0) { echo "\n

Kein Blatt im Bezirk.

"; } elseif($cntbl >= $linelimit) { echo "\n

".$cntbl." Blätter ... und weitere

"; // +++ Hier oft überschritten! Blätter-Funktion einführen echo "\n

Geben sie ein: '".$zgbbez."-999A'
wobei '999A' = gesuchtes GB-Blatt

"; // Vorbelegen des Eingabefeldes für neue Suche echo ""; } elseif ($cntbl > 1) { echo "\n

".$cntbl." Blätter

"; // im Limit } return; } function gml_blatt() { // Kennzeichen "Bezirk + Blatt" eingegeben. Dazu die gml_id des Blattes ermitteln. // 2018-10: Sonderfall Buchstabe: Auch finden wenn der nicht eingegeben wurde. global $debug, $zgbbez, $zblatt, $zblattn, $zblattz; $sql ="SELECT b.gml_id, b.buchungsblattnummermitbuchstabenerweiterung AS blatt FROM ax_buchungsblatt b " ."WHERE b.bezirk= $1 AND b.endet IS NULL AND b.buchungsblattnummermitbuchstabenerweiterung "; if ($zblattz == "") { // kein Buchstabe angegeben // $sql.="IN ('".$zblattn."','".str_pad($zblattn, 6, "0", STR_PAD_LEFT)." ','".str_pad($zblattn, 7, "0", STR_PAD_LEFT)."');"; // früher uneinheitlich gefüllt $sql.="LIKE '".str_pad($zblattn, 6, "0", STR_PAD_LEFT)."_';"; // Buchstabe wird trotzdem gefunden } else { // Buchstaben-Erweiterung wurde angegeben: '000123A' $sql.="='".str_pad($zblattn, 6, "0", STR_PAD_LEFT).$zblattz."';"; } $v=array($zgbbez); $res=pg_prepare("", $sql); $res=pg_execute("", $v); if (!$res) { echo "\n

Fehler bei Blatt (Kennzeichen).

"; return; } $cntbl=0; // Counter Blatt while($row = pg_fetch_array($res)) { $bl_gml=$row["gml_id"]; $zblatt=$row["blatt"]; // das tatsaechliche Format (mit/ohne fuehrende 0) $cntbl++; } if($cntbl == 0) { echo "\n

Grundbuchblatt '".$zgbbez."-".$zblatt."' nicht gefunden.

"; } elseif ($cntbl == 1) { return $bl_gml; } return; } function EinBlatt($showParent) { // Kennzeichen Bezirk + Blatt wurde eingegeben oder verlinkt global $debug, $gemeinde, $zgbbez, $zblatt, $blattgml, $gbbeznam; // Head if ($showParent) { ag_bez_head($zgbbez, false); // AG + BEZ zeile_blatt ($zgbbez, "", $blattgml, $zblatt, false, "", true); } // Body GB_Buchung_FS(1000, $zgbbez."-".$zblatt); // Blatt -> Buchung -> Flurstueck (Limitiert) // ++ besser Limit runter und "Blättern"-Funktion einführen return; } function gml_buchungsstelle() { // Kennzeichen "Bezirk + Blatt + BVNR" wurde eingegeben. // Dazu die gml_id der Buchungsstelle ermitteln, um "function EinGrundstueck" benutzen zu können. global $debug, $zgbbez, $zblatt, $zblattn, $zblattz, $zbvnr; // Blatt -> B u c h u n g s s t e l l e $sql ="SELECT s.gml_id, b.buchungsblattnummermitbuchstabenerweiterung AS blatt FROM ax_buchungsstelle s JOIN ax_buchungsblatt b ON s.istbestandteilvon=b.gml_id " ."WHERE b.bezirk= $1 AND s.endet IS NULL AND b.endet IS NULL AND b.buchungsblattnummermitbuchstabenerweiterung "; if ($zblattz == "") { // Eingabe ohne Buchstabenerweiterung $sql.="LIKE '".str_pad($zblattn, 6, "0", STR_PAD_LEFT)."_'"; } else { // Mit Buchstabenerweiterung: '000123A' $sql.="='".str_pad($zblattn, 6, "0", STR_PAD_LEFT).$zblattz."'"; } $sql.=" AND s.laufendenummer= $2 ;"; $v=array($zgbbez, str_pad($zbvnr, 4, "0", STR_PAD_LEFT)); $res=pg_prepare("", $sql); $res=pg_execute("", $v); if (!$res) { echo "\n

Fehler bei Buchungsstelle (Kennzeichen).

"; return; } $zbs=0; while($row = pg_fetch_array($res)) { $bs_gml=$row["gml_id"]; $gef_blatt=$row["blatt"]; // gefunden ggf. mit Buchstabe (Wildcard) if ($zblatt != $gef_blatt) { echo "\n

Blatt mit Buchstabenerweiterung gefunden.

"; $zblatt=$gef_blatt; $zblattz=substr($zblatt,$len-1,1); } $zbs++; } if($zbs == 0) { echo "\n

Buchung ".$zgbbez."-".$zblattn.$zblattz."-".$zbvnr." nicht gefunden.

"; return; } else { return $bs_gml; } } function EinGrundstueck($showParent) { // Die gml_id der Buchungsstelle (BVNR, Grundstück) ist bekannt = $buchunggml // Die gebuchten Flurstücke und dienende/herrschenden Buchungen werden ausgegeben. global $debug, $gemeinde, $epsg, $buchunggml, $zgbbez, $zblatt, $zblattn, $zblattz, $zbvnr, $gfilter; // NoLimit? // Head if ($showParent) { // wenn Kennzeichen bekannt ist, dann auch Blatt ausgeben if ($zgbbez.$zblatt != "") { ag_bez_head($zgbbez, false); // AG + BEZ zeile_blatt ($zgbbez, "", "", $zblatt, false, "", false); // Parameter 2 ($gnam) leer lassen Knoten "Bezirk" steht drüber } else { echo "

Kennzeichen Bezirk und Blatt nicht gesetzt

"; } // ++ suchen! // zeile_buchung($buchunggml, $zbvnr, $zgbbez."-".$zblattn.$zblattz, false, true); zeile_buchung($buchunggml, $zbvnr, $zgbbez."-".$zblatt, false, true); // $zblatt wird aktualisiert, wenn Buchstabe gefunden wurde } // dienend $1 gml_id von // Buchungsstelle > Gemarkung // Recht $1 gml_id von // Buchungsstelle >an> Buchungsstelle sd > Gemarkung // (herrschend) (dienend) sd >istBestandteilVon> bd >> gd // Body // Anfang (Select-Liste) gleich $sqlanf ="SELECT g.bezeichnung, f.gml_id, f.flurnummer, f.zaehler, f.nenner, "; if($epsg == "25832") { // Transform nicht notwendig $sqlanf.="st_x(st_Centroid(f.wkb_geometry)) AS x, "; $sqlanf.="st_y(st_Centroid(f.wkb_geometry)) AS y "; } else { $sqlanf.="st_x(st_transform(st_Centroid(f.wkb_geometry),".$epsg.")) AS x, "; $sqlanf.="st_y(st_transform(st_Centroid(f.wkb_geometry),".$epsg.")) AS y "; } // Filter gleich $sqlfilter=""; switch ($gfilter) { // Filter Gemeinde case 1: // Einzel $sqlfitler="AND f.gemeinde='".$gemeinde."' "; break; case 2: // Liste $sqlfilter="AND f.gemeinde in ('".str_replace(",", "','", $gemeinde)."') "; break; } // Direkte Buchungen (Flurst.) $sql =$sqlanf."FROM ax_flurstueck f JOIN ax_gemarkung g ON f.land=g.land AND f.gemarkungsnummer=g.gemarkungsnummer "; $sql.="WHERE f.istgebucht = $1 AND f.endet IS NULL ".$sqlfilter."ORDER BY f.gemarkungsnummer, f.flurnummer, f.zaehler, f.nenner;"; $v=array($buchunggml); $res=pg_prepare("", $sql); $res=pg_execute("", $v); if (!$res) { echo "\n

Fehler bei Buchungsstelle (gml, direkt).

"; if ($debug >= 3) { echo "\n

'".$sql."'
\nmit $1 ='".$buchunggml."'

"; } } $zfs1=0; while($row = pg_fetch_array($res)) { $fs_gml=$row["gml_id"]; $gmkg=$row["bezeichnung"]; $flur=$row["flurnummer"]; $fskenn=$row["zaehler"]; if ($row["nenner"] != "") {$fskenn.="/".$row["nenner"];} // BruchNr zeile_flurstueck ($fs_gml, $fskenn, $row["x"], $row["y"], $gmkg, $flur, false); $zfs1++; } // Zwischen-Foot if($zfs1 == 0) { echo "\n

Kein Flurstück zu dieser Buchung

"; } elseif($zfs1 > 1) { echo "\n

".$zfs1." Flurstücke

"; } if($zfs1 > 0) { // wenn's was zu trennen gibt echo "
"; // Trennen } // Recht "an" (dienende Buchungen und ihre Flurst.) $sql =$sqlanf.", sd.gml_id AS diengml, sd.laufendenummer AS dienlfd, bd.gml_id AS dienbltgml, bd.buchungsblattnummermitbuchstabenerweiterung AS dienblatt, " ."gd.stelle, gd.gml_id AS dienbezgml, gd.bezirk, gd.bezeichnung AS diengbbez " ."FROM ax_buchungsstelle sh JOIN ax_buchungsstelle sd ON sd.gml_id=ANY(sh.an) " ."JOIN ax_flurstueck f ON f.istgebucht=sd.gml_id " ."JOIN ax_gemarkung g ON f.land=g.land AND f.gemarkungsnummer=g.gemarkungsnummer " ."JOIN ax_buchungsblatt bd ON sd.istbestandteilvon=bd.gml_id " ."JOIN ax_buchungsblattbezirk gd ON bd.land=gd.land AND bd.bezirk=gd.bezirk " ."WHERE sh.gml_id = $1 AND sh.endet IS NULL AND sd.endet IS NULL AND f.endet IS NULL AND bd.endet IS NULL AND gd.endet IS NULL " .$sqlfilter."ORDER BY gd.bezeichnung, bd.buchungsblattnummermitbuchstabenerweiterung, cast(sd.laufendenummer AS integer), f.gemarkungsnummer, f.flurnummer, f.zaehler, f.nenner;"; $v=array($buchunggml); $res=pg_prepare("", $sql); $res=pg_execute("", $v); if (!$res) { echo "\n

Fehler bei Buchungsstelle (gml, Recht an).

"; if ($debug >= 3) { echo "\n

'".$sql."'
\nmit $1 ='".$buchunggml."'

"; } } $zfs2=0; $gwblatt=""; while($row = pg_fetch_array($res)) { $dienstelle=$row["stelle"]; // Stelle (AG) des dien. Grdst. $dienbezgml=$row["dienbezgml"]; // Bezirk des dien. GS: gml, Nr. und Bezeichnung $diengbbez=$row["diengbbez"]; // Bezeichnung $dienbezirk=$row["bezirk"]; // Key $dienbltgml=$row["dienbltgml"]; // dien. Blatt, gml und Nr $dienblatt=$row["dienblatt"]; $diengml=$row["diengml"]; // gml_id des dien. Grdst. $dienlfd=$row["dienlfd"]; // BVNR (laufendNr) des dien. GS if ($gwblatt != $dienblatt) { // Grupp. Blatt - dien. if ($gwblatt == "") { // der erste "dienende": Einleitungs-Zeile $aber=""; if($zfs1 == 0) {$aber="Aber ein ";} echo "\n

".$aber."Recht an ..

"; } $gwblatt = $dienblatt; // Steuerg GW Blatt zeile_blatt($dienbezirk, $diengbbez, $dienbltgml, $dienblatt, true, "", false); $gwbvnr=""; } if ($gwbvnr != $dienlfd) { // Gruppierung Buchung (BVNR) - dienend $gwbvnr = $dienlfd; // Steuerg GW BVNR zeile_buchung($diengml, $dienlfd, $dienbezirk."-".$dienblatt, true, false); } // ++ Buchungsart? Welches Recht? $fs_gml=$row["gml_id"]; $gmkg=$row["bezeichnung"]; $flur=$row["flurnummer"]; $fskenn=$row["zaehler"]; if ($row["nenner"] != "") {$fskenn.="/".$row["nenner"];} // BruchNr zeile_flurstueck ($fs_gml, $fskenn, $row["x"],$row["y"], $gmkg, $flur, false); $zfs2++; } // Teil 3 - noch nicht umgesetzt // ToDo: Wenn nur 1 Grundstück untersucht wird, dann dazu auch die berechtigten (herrschenden) Grundbücher anzeigen und verlinken (ohne FS) // Foot if($zfs2 == 0 AND $zfs1 == 0) { echo "\n

Kein Recht an Flst.

"; } elseif($zfs2 > 1) { echo "\n

".$zfs2." Rechte an Flurst.

"; } return; } // =========== // Start hier! // =========== // Validation: Eingabefeld aus Formular. // Suchbegriff (Bezirksname) oder Grundbuch-Kennzeichen gggg-999999z-BVNR (17). // Hier formatierte Meldung und html-Foot. if (isset($gbkennz) and $gbkennz != "" ) { if (!preg_match('#^[0-9a-zA-ZäöüÄÖÜß* -]{1,25}$#', $gbkennz)) { echo "

Eingabe unzulässig!

"; $gbkennz=""; } } else { $gbkennz=""; } // Das eingegebene Kennzeichen für "Anzeige" und "weitere Links" zerlegen, // auch wenn über einen ein Self-Link mit gml_id aufgerufen. $kennztyp=ZerlegungGBKennz($gbkennz); // Wurde eine gml_id (internes Kennzeichen) aus einem Self-Link verwendet? // Dann hat DAS Priorität, dann also *nicht* nach $gbkennz suchen. if ($buchunggml != "") { // gml der Buchungsstelle $trans="Flurstücke zur Buchungsstelle"; // Link EinGrundstueck(true); } elseif($blattgml != "") { // gml des GB-Blattes $trans="GB-Blatt mit Buchungen und Flst."; EinBlatt(true); } elseif($ag != "") { // Key des Amtsgerichtes $trans="GB-Bezirke zum Amtsgericht"; ListGBBez($ag); } else { // kein Self-Link sondern manuelle Eingabe im Formular switch ($kennztyp) { // wurde oben bereits analysiert und zerlegt case 0: // keine Eingabe $trans="Liste der Amtsgerichte"; ListAG($ag_liste, false); break; case 1: // Eingabe Bezirk-Name (-Teil) -> gefilterte Liste der Bezirke $trans="Bezirke suchen \"".$gbkennz."\""; $beznr=SuchGBBezName(); if ($beznr > 0) { // wenn der Suchbegriff eindeutig war, .. $zgbbez=$beznr; $trans="Bezirk gefunden, Blätter dazu"; EinBezirk(false); // .. dann gleich weiter }; break; case 2: // Eingabe Bezirk-Nummer -> Liste der Blätter im Bezirk $trans="Blätter im GB-Bezirk"; EinBezirk(true); break; case 3: // Eingabe GB-Blatt -> Liste der Buchungen auf dem Blatt $trans="Buchungen auf GB-Blatt"; $blattgml=gml_blatt(); // gml_id zum Blatt suchen if ($blattgml != "") { // gefunden if (EinBlatt(true) == 1) { // wenn darauf genau eine Buchung ist $trans="GB-Blatt und 1 Buchung"; // dann gleich tiefer rein $buchunggml=gml_buchungsstelle(); // gml_id der Buchung EinGrundstueck(false); } } break; case 4: // Eingabe Buchung (Grundstück) -> Liste der Flurstücke $buchunggml=gml_buchungsstelle(); // gml_id zum Kennzeichen if ($buchunggml != "") { // .. wurde geliefert $trans="Flurstücke zur Buchungsstelle"; // Eingabe EinGrundstueck(true); // mit Backlink } else{ $trans="Suche Buchungsstelle"; } break; case 9: // Fehler $trans="fehlerhafte Eingabe"; echo "\n

Bitte ein gültiges Grundbuchkennzeichen eingegeben, Format 'gggg-999999A-llll

"; break; } } // Nach Durchlaufen des PHP-Scriptes die zuletzt ausgeführte Transaktion // im Kopf des Ergebnisrahmens anzeigen. // Dazu die im HTML-Header definierte Javascript-Function benutzen. // Alternativ wird auch aus dem Javascript "positionieren Karte" dieser Titel gesetzt. echo " "; ?>