source: trunk/info/info/alkisn/alkisbestnw.php @ 427

Revision 427, 26.2 KB checked in by frank.jaeger, 2 years ago (diff)

Überarbeitung der Auskunft: Durch Functions den Code verdichtet. Drei neue Arten von Bauwerken.

Line 
1<?php
2/*      alkisbestnw.php
3
4        ALKIS-Auskunft
5        Author: Frank JÀger, Kommunales Rechenzentrum Minden-Ravensberg/Lippe (Lemgo)
6
7        Bestandsnachweis fÃŒr ein Grundbuch (-Blatt) aus ALKIS PostNAS
8
9        Version:
10        2016-02-24 Version fÃŒr norGIS-ALKIS-Import
11        ....
12        2020-02-20 Authentifizierung ausgelagert in Function darf_ich()
13        2020-12-03 function selbstverlinkung() statt $_SERVER['PHP_SELF']
14        2020-12-15 Input-Validation und Strict Comparisation (===)
15        2021-12-09 Neue Parameter: $katAmtMix (Kataster-Amt-Mix), $PrntBtn (Drucken-SchaltflÀche)
16                           Tabellenstruktur verbessert und Title bei "Recht an".
17        2021-12-30 Bestandsnachweis recursiv ÃŒber alle Buchungs-Ebenen
18        2022-01-13 Functions aus alkisfkt.php in dies Modul verschoben, wenn nur hier verwendet. Neue Functions LnkStf(), DsKy()
19*/
20
21function bnw_bsdaten($gml_h, $ebene) {
22/*      Bestandsnachweis - Buchungsstellen-Daten
23        "dienende" Buchungsstellen suchen. Miteigentumsanteil, Erbbaurecht usw.
24        Return: gml_id der dienenden Buchungsstelle wenn gefunden? Sonst Leerstring */
25        global $dbg, $bartkey, $bart, $bartstory, $anteil;
26
27//      dann "dienende" Buchungsstellen
28//  sh=herrschend          sd=dienend
29//  ax_buchungsstelle >zu> ax_buchungsstelle (des gleichen Blattes)
30//  ax_buchungsstelle >an> ax_buchungsstelle (anderes Blatt, z.B Erbbaurecht an)
31//      - "zu" kommt in der Praxis (NRW) nicht vor, wird hier nicht berÃŒcksichtigt
32
33        if ($ebene > 5) {echo "\n<p class='err'>Ungewöhnlich tiefe Schachtelung ".$ebene." der Buchungs-Stellen.</p>";}
34
35        $sql ="SELECT sd.gml_id, sd.buchungsart, sd.zaehler, sd.nenner, sd.laufendenummer AS lfd, sd.beschreibungdesumfangsderbuchung AS udb, "
36        ."sd.nummerimaufteilungsplan AS nrap, sd.beschreibungdessondereigentums AS sond, "
37        ."wb.beschreibung AS bart, wb.dokumentation, "
38        ."b.gml_id as gbgml, b.bezirk, b.buchungsblattnummermitbuchstabenerweiterung AS blatt, b.blattart, "
39        ."bb.beschreibung AS blattartv, z.bezeichnung AS beznam "
40        ."FROM ax_buchungsstelle sh "
41        ."JOIN ax_buchungsstelle sd ON sd.gml_id=ANY(sh.an) "
42        ."JOIN ax_buchungsblatt b ON b.gml_id=sd.istbestandteilvon "   
43        ."LEFT JOIN ax_buchungsart_buchungsstelle wb ON sd.buchungsart = wb.wert "
44        ."LEFT JOIN ax_buchungsblattbezirk z ON b.land=z.land AND b.bezirk=z.bezirk ".UnqKatAmt("b","z")
45        ."LEFT JOIN ax_blattart_buchungsblatt bb ON b.blattart = bb.wert "
46        ."WHERE sh.gml_id= $1 AND sh.endet IS NULL AND sd.endet IS NULL AND b.endet IS NULL AND z.endet IS NULL "
47        ."ORDER BY sd.laufendenummer;";
48        $v=array($gml_h); // gml_id "herrschende" B-Stelle
49        $resan=pg_prepare("", $sql);
50        $resan=pg_execute("", $v);
51        if (!$resan) {
52                echo "\n<p class='err'>Fehler bei 'dienende Buchungsstelle'.</p>";
53                if ($dbg > 2) {echo "\n<p class='dbg'>SQL=<br>".htmlentities(str_replace("$1", "'".$gml_bs."'", $sql), ENT_QUOTES, "UTF-8")."</p>";}
54        }
55        $zeianz=pg_num_rows($resan); // Zeilen-Anzahl = Returnwert
56        $und = false; // mehrfaches "Recht an" auf gleicher Ebene
57        while($row= pg_fetch_assoc($resan)) {
58                $gml_bsan=$row["gml_id"];       // id der dien. BS
59                $blatt=ltrim($row["blatt"], "0");               
60
61                // als Global-Var zur Sub-Function:
62                $bartkey=$row["buchungsart"];   
63                $bart=$row["bart"]; // Buchungsart, entschlÃŒsselt
64                $bartstory=htmlentities($row["dokumentation"], ENT_QUOTES, "UTF-8");
65                if ($row["zaehler"] == "") {$anteil = "";}
66                else {$anteil = $row["zaehler"]."/".$row["nenner"];}
67
68                // Zeile ausgeben Buchungsstelle dienend
69                bnw_bszeile_d($row["bezirk"], $row["beznam"], $blatt, $row["blattart"], $row["blattartv"], $row["lfd"], $row["gbgml"], $gml_bsan, $ebene, $und);
70                $und = true;
71                if ($row["nrap"] != "") { // Nr im Auft.Plan
72                        echo "\n<tr>\n\t<td colspan=3></td><td class='nrap' colspan=4>Nummer <span class='wichtig'>".$row["nrap"]."</span> im Aufteilungsplan.</td><td></td>\n</tr>";
73                }
74                if ($row["sond"] != "") { // Sondereigentumsbeschreibung
75                        echo "\n<tr>\n\t<td></td><td class='sond' colspan=6 title='Sondereigentums-Beschreibung'>Verbunden mit dem Sondereigentum an: ".$row["sond"]."</td><td></td>\n</tr>";
76                }
77
78                // Rekursiver Aufruf der gleichen Function, weitere Ebene dienend?
79                $tiefer = bnw_bsdaten($gml_bsan, ($ebene + 1));
80                If ($tiefer == 0) {  // Wenn nicht, dann kann es FlurstÃŒcke dazu geben
81                        $fscnt= bnw_fsdaten($gml_bsan, false); // FlurstÃŒcksdaten
82                }
83        }
84        pg_free_result($resan);
85        return $zeianz;
86}
87
88function bnw_fsdaten($gml_bs, $mit_buchung_link) {
89/*      Bestandsnachweis - FlurstÃŒcksdaten
90        Die Tabellenzeilen mit den FlurstÃŒcksdaten zu EINER Buchungsstelle im Bestandsnachweis ausgeben.
91        Die Funktion wird entweder aufgerufen fÃŒr die Buchungen direkt auf dem GB (Normalfall)
92        oder bei Erbbaurecht fÃŒr die mit "an" verknÃŒpften Buchungsstellen der untersten Ebene (dienende Buchung).
93        Der Tabellenkopf wird im aufrufenden Programm ausgegeben.
94        Return: Anzahl der ausgegebenen FlurstÃŒcke */
95        global $dbg, $gkz, $showkey, $filtkreis, $filtgem, $trclass, $katAmtMix, $lfdnr, $altlfdnr, $bartkey, $bart, $bartstory, $anteil;
96
97        $sql="SELECT g.gemarkungsnummer, g.bezeichnung, f.gml_id, f.flurnummer, f.zaehler, f.nenner, f.amtlicheflaeche "
98        ."FROM ax_flurstueck f LEFT JOIN ax_gemarkung g ON f.land=g.land AND f.gemarkungsnummer=g.gemarkungsnummer ".UnqKatAmt("f","g")
99        ."WHERE f.endet IS NULL AND g.endet IS NULL AND f.istgebucht = $1 ";
100        if ($filtgem === '') { // ungefiltert
101                $v=array($gml_bs);
102        } else {
103                $sql.="AND f.gemeindezugehoerigkeit_kreis = $2 AND f.gemeindezugehoerigkeit_gemeinde = $3 "; // ZustÀndiges Gebiet
104                $v=array($gml_bs, $filtkreis, $filtgem);
105        }
106        $sql.="ORDER BY f.gemarkungsnummer, f.flurnummer, f.zaehler, f.nenner;";
107        $resf = pg_prepare("", $sql);
108        $resf = pg_execute("", $v);
109        if (!$resf) {echo "\n<p class='err'>Fehler bei Flurst&uuml;ck</p>";}
110        $zeianz=pg_num_rows($resf);
111        while($rowf = pg_fetch_assoc($resf)) {
112                $fskenn=$rowf["zaehler"];
113                if ($rowf["nenner"] != "") { // Bruch
114                        $fskenn.="/".$rowf["nenner"];
115                }
116                $flae=number_format($rowf["amtlicheflaeche"],0,",",".") . " m&#178;";
117
118                echo "\n<tr class='".$trclass."'>"; // eine Zeile je Flurstueck
119               
120                // Sp. 1-3 der Tab. Daten aus Buchungsstelle, nicht aus FS
121                if($lfdnr === $altlfdnr) { // gleiches GrundstÃŒck, leer lassen
122                        echo "\n\t<td>&nbsp;</td>"
123                        ."\n\t<td>&nbsp;</td>"
124                        ."\n\t<td>&nbsp;</td>";
125                } else { // Sprungmarke, BVNR
126                        $bvnr=str_pad($lfdnr, 4, "0", STR_PAD_LEFT);
127                        echo "\n\t<td id='bvnr".$bvnr."'><span class='wichtig'>".$bvnr."</span>\n\t</td>"
128                        ."\n\t<td title ='".$bartstory."'>".DsKy($bartkey, 'Buchungsart-*').$bart."</td>"
129                        ."\n\t<td>&nbsp;</td>";
130                        $altlfdnr=$lfdnr;
131                }
132
133                // Sp. 4-7 aus FlurstÃŒck
134                echo "\n\t<td>".DsKy($rowf["gemarkungsnummer"], 'Gemarkungsnummer').$rowf["bezeichnung"]."</td>"
135                ."\n\t<td>".$rowf["flurnummer"]."</td>\n\t<td class='fsnr'><span class='wichtig'>".$fskenn."</span></td>"
136                ."\n\t<td class='fla'>".$flae."</td>"
137                ."\n\t<td>\n\t\t<p class='nwlink noprint'>";
138
139                // Buchung BVNR
140                If ($mit_buchung_link == true) { // nur bei GrundstÃŒck
141                        echo "\n\t\t\t<a href='alkisgsnw.php?gkz=".$gkz."&amp;gmlid=".$gml_bs.LnkStf()
142                        ."' title='Grundst&uuml;cksnachweis'>Buchung <img src='ico/Grundstueck_Link.png' width='16' height='16' alt=''></a>&nbsp;";                     
143                        $mit_buchung_link = false; // nur in erster Zeile
144                }
145                // Flurstk.
146                echo "\n\t\t\t<a href='alkisfsnw.php?gkz=".$gkz."&amp;gmlid=".$rowf["gml_id"]."&amp;eig=n".LnkStf()."' title='Flurst&uuml;cksnachweis'>Flurst&uuml;ck "
147                ."<img src='ico/Flurstueck_Link.png' width='16' height='16' alt=''></a>"
148                ."\n\t\t</p>\n\t</td>\n</tr>";
149        }
150        pg_free_result($resf);
151        return $zeianz;
152}
153
154function bnw_bszeile_h() {
155/*      Bestandsnachweis - Buchungs-Stellen-Zeile ausgeben - herrschend.
156        Die GB-Daten hierzu stehen bereits im Kopf und bleiben in der Tab. leer */
157        global $dbg, $gkz, $trclass, $lfdnr, $bartkey, $bart, $bartstory, $anteil;
158
159        $bvnr=str_pad($lfdnr, 4, "0", STR_PAD_LEFT);
160        echo "\n<tr class='".$trclass."'>"
161        ."\n\t<td id='bvnr".$bvnr."'><span class='wichtig'>".$bvnr."</span></td>" // Sprungmarke=BVNR auf dem GB-Blatt
162        ."\n\t<td class='dien' title='".$bartstory."'>".DsKy($bartkey, 'Buchungsart-*').$bart."</td>"
163        ."\n\t<td class='dien'>".$anteil."</td>"
164        ."\n\t<td colspan=5>&nbsp;</td>\n</tr>";
165}
166
167function bnw_bszeile_d($bezkey, $beznam, $blatt, $blattartkey, $blattart, $lfdnran, $gbgml, $gml_bsan, $ebene, $und) {
168/*      Bestandsnachweis - Buchungsstellen-Zeile ausgeben - dienend
169        Eine Folge-Zeile fÃŒr eine dienende Buchung ausgeben. */
170        global $gkz, $trclass, $bartkey, $bart, $bartstory, $anteil;
171
172        $bvnr=str_pad($lfdnran, 4, "0", STR_PAD_LEFT);
173        $filler=str_repeat("&nbsp;", $ebene - 2); // 3 und 4 EinrÃŒcken
174        if ($und){$filler.="und ";}; // Unterscheidung Hierarchie (Ebene wechselt) von Liste (gleiche Ebene)
175        echo "\n<tr class='".$trclass."'>"
176        ."\n\t<td title='Ebene ".$ebene."'>".$filler."an</td>"
177        ."\n\t<td class='dien' title='".$bartstory."'>".DsKy($bartkey, 'Buchungsart-*').$bart."</td>"
178        ."\n\t<td class='dien'>".$anteil."</td>";
179
180        // Sp.4 GB-Bezirk
181        echo "\n\t<td class='dien' title='Grundbuch-Bezirk'>".DsKy($bezkey, 'Grundbuch-Bezirk-*').htmlentities($beznam, ENT_QUOTES, "UTF-8")."</td>"
182        ."\n\t<td class='dien' title='".$blattart."'>".$blatt."</td>"
183        ."\n\t<td class='dien' title='Bestandsverzeichnis-Nummer'>".$bvnr."</td>"
184        ."\n\t<td class='dien'></td>";
185
186        echo "\n\t<td>\n\t\t<p class='nwlink noprint'>";
187
188        // Link Bestand Blatt
189        echo "\n\t\t\t".DsKy($blattartkey, 'Blatt-Art-*')."<a href='alkisbestnw.php?gkz=".$gkz."&amp;gmlid=".$gbgml.LnkStf()
190        ."#bvnr".$lfdnran."' title='Zum Grundbuchnachweis des dienenden Blattes'>".$blattart
191        ." <img src='ico/GBBlatt_link.png' width='16' height='16' alt=''></a>";
192
193        if ($bartkey < 2000){
194                // Link Buchung BVNR nur fÃŒr GrundstÃŒck usw.
195                echo "<br>\n\t\t\t<a href='alkisgsnw.php?gkz=".$gkz."&amp;gmlid=".$gml_bsan.LnkStf()
196                ."' title='Grundst&uuml;cksnachweis'>Buchung <img src='ico/Grundstueck_Link.png' width='16' height='16' alt=''></a>";   
197        }
198        echo "\n\t\t</p>"
199        ."\n\t</td>\n</tr>";
200}
201
202// Start
203ini_set("session.cookie_httponly", 1);
204session_start();
205$showkey="n"; $nodebug=""; // Var. initalisieren
206$cntget = extract($_GET); // Parameter in Variable umwandeln
207
208// strikte Validierung aller Parameter
209if (isset($gmlid)) {
210        if (!preg_match('#^[0-9A-Za-z]{16}$#', $gmlid)) {die("Eingabefehler gmlid");}
211} else {
212        die("Fehlender Parameter");
213}
214if (isset($gkz)) {
215        if (!preg_match('#^[0-9]{3}$#', $gkz)) {die("Eingabefehler gkz");}
216} else {
217        die("Fehlender Parameter");
218}
219if (!preg_match('#^[j|n]{0,1}$#', $showkey)) {die ("Eingabefehler showkey");}
220if ($showkey === "j") {$showkey=true;} else {$showkey=false;}
221if (!preg_match('#^j{0,1}$#', $nodebug)) {die("Eingabefehler nodebug");}
222
223include "alkis_conf_location.php";
224include "alkisfkt.php";
225
226?>
227<!doctype html>
228<html lang="de">
229<head>
230        <meta charset="utf-8">
231        <meta name="viewport" content="width=device-width, initial-scale=1.0">
232        <title>ALKIS Bestandsnachweis</title>
233        <link rel="stylesheet" type="text/css" href="alkisauszug.css">
234        <link rel="shortcut icon" type="image/x-icon" href="ico/Grundbuch.ico">
235        <script type="text/javascript">
236                function ALKISexport(gmlid) {
237                        window.open('alkisexport.php?gkz=<?php echo $gkz;?>&tabtyp=grundbuch&gmlid=' + gmlid);
238                }
239        </script>
240</head>
241<body>
242<?php
243
244$erlaubnis = darf_ich(); if ($erlaubnis === 0) { die('<p class="stop1">Abbruch</p></body>'); }
245$dbg=$debug;
246if ($nodebug === "j") {$dbg=0;}
247
248$con = pg_connect($dbconn." options='--application_name=ALKIS-Auskunft_alkisbestnw.php'");
249if (!$con) echo "\n<p class='err'>Fehler beim Verbinden der DB</p>";
250
251// G R U N D B U C H
252$sql="SELECT g.gml_id, g.bezirk, g.buchungsblattnummermitbuchstabenerweiterung AS blatt, g.blattart, wb.beschreibung AS blattartv, wb.dokumentation AS blattartd,
253b.gml_id, b.bezirk, b.bezeichnung AS beznam, d.gml_id, d.land, d.bezeichnung, d.stelle, d.stellenart, wd.beschreibung AS stellev
254FROM ax_buchungsblatt g
255LEFT JOIN ax_buchungsblattbezirk b ON g.land=b.land AND g.bezirk=b.bezirk ".UnqKatAmt("g","b")
256."LEFT JOIN ax_dienststelle d ON b.land=d.land AND b.gehoertzu_stelle=d.stelle ".UnqKatAmt("b","d")
257."LEFT JOIN ax_blattart_buchungsblatt wb ON g.blattart = wb.wert
258LEFT JOIN ax_behoerde wd ON d.stellenart = wd.wert
259WHERE g.gml_id= $1 AND g.endet IS NULL AND b.endet IS NULL AND d.endet IS NULL;";
260// .. AND d.stellenart=1000
261
262$v = array($gmlid);
263$res = pg_prepare("", $sql);
264$res = pg_execute("", $v);
265if (!$res) {
266        echo "\n<p class='err'>Fehler bei Grundbuchdaten.</p>";
267        if ($dbg > 2) {echo "\n<p class='dbg'>SQL=<br>".htmlentities(str_replace("$1", "'".$gmlid."'", $sql), ENT_QUOTES, "UTF-8")."</p>";}
268}
269$zeianz=pg_num_rows($res);
270if ($dbg > 0) {
271        if ($zeianz > 1){
272                echo "\n<p class='err'>Die Abfrage liefert mehr als ein (".$zeianz.") Grundbuch-Objekt!</p>";
273                if ($dbg > 2) {echo "\n<p class='dbg'>SQL=<br>".htmlentities(str_replace("$1","'".$gmlid."'",$sql), ENT_QUOTES, "UTF-8")."</p>";}
274        }
275}
276if ($zeianz == 0){
277        echo "\n<p class='err'>Fehler! Kein Treffer f&uuml;r ein Grundbuch-Blatt mit gml_id=".$gmlid."</p>";
278        if ($dbg > 2) {echo "\n<p class='dbg'>SQL=<br>".htmlentities(str_replace("$1","'".$gmlid."'",$sql), ENT_QUOTES, "UTF-8")."</p>";}
279        echo "\n</body>\n</html>";
280        return;
281}
282if ($row = pg_fetch_assoc($res)) {
283        $blattkey=$row["blattart"];
284        $blattart=$row["blattartv"];
285        $blatt=ltrim($row["blatt"], "0");
286
287        echo "<p class='balken gbkennz'>ALKIS Bestand ".$row["bezirk"]." - ".$blatt."&nbsp;</p>"; // Balken
288        echo "\n<h2>Grundbuch</h2>";
289        echo "\n<table class='outer'>" // Blatt UND Eigent.
290                ."\n\t<tr>\n\t\t<td class='ll'><img src='ico/Grundbuch.png' width='16' height='16' alt=''> Blatt:</td>"
291                ."\n\t\t<td colspan='2'>"; // Outer Mitte, Kennz. im Rahmen
292                        if ($blattkey === "1000") {
293                                echo "\n\t\t\t<table class='kennzgb' title='Bestandskennzeichen'>";
294                        } else {
295                                echo "\n\t\t\t<table class='kennzgbf' title='Bestandskennzeichen'>"; // dotted
296                        }
297                        echo "\n\t\t\t<tr>"
298                                ."\n\t\t\t\t<td class='head'>".DsKy($row["stellenart"], 'Stellenart-*').$row["stellev"]."</td>"
299                                ."\n\t\t\t\t<td class='head'>Bezirk</td>"
300                                ."\n\t\t\t\t<td class='head' title='".htmlentities($row["blattartd"], ENT_QUOTES, "UTF-8")."'>".DsKy($blattkey, 'Blattart-*').$blattart."</td>"
301                        ."\n\t\t\t</tr>\n\t\t\t<tr>"
302                                ."\n\t\t\t\t<td title='Amtsgerichtsbezirk'>".DsKy($row["stelle"], 'Stelle-*').htmlentities($row["bezeichnung"], ENT_QUOTES, "UTF-8")."</td>"
303                                ."\n\t\t\t\t<td title='Grundbuchbezirk'>".DsKy($row["bezirk"], 'Grundbuchbezirk-*').htmlentities($row["beznam"], ENT_QUOTES, "UTF-8")."</td>"
304                                ."\n\t\t\t\t<td title='Grundbuch-Blatt'><span class='wichtig'>".$blatt."</span></td>"
305                        ."\n\t\t\t</tr>"
306                ."\n\t\t\t</table>"
307                ."\n\t\t</td>\n\t\t<td>&nbsp;</td>\n\t</tr>";
308}
309pg_free_result($res);
310
311if ($blattkey === "5000") { // fikt. Blatt
312        echo "\n<p>Keine Angaben zum Eigentum bei fiktivem Blatt.</p>";
313} else { // E I G E N T Ü M E R
314        $n = eigentuemer($gmlid, true, false); // MIT Adressen.
315        if ($n === 0) { // keine NamensNr, kein Eigentuemer
316                echo "\n<p class='err'>Keine Namensnummer gefunden.</p>"
317                ."\n<p>Bezirk: ".$row["bezirk"].", Blatt: ".$blatt.", Blattart ".$blattkey." (".$blattart.")</p>";
318        }
319}
320echo "\n</table>";
321
322// Vorab eine Tiefbohrung zur Sondierung von (potentiell) herrschend bis dienend ÃŒber max. 4 Buchungs-Stellen.
323// Diese ZÀhlung sagt nur aus, ob es "generell" solche FÀlle auf diesem Grundbuch gibt (ist selten).
324// In jedem einzelnen Zweig der Buchungen muss aber individuell danach gesucht werden.
325// Die Relation "zu" ist hier einbezogen, wird aber spÀter nicht ausgewertet. Hier könnte man die Differenz erkennen falls "zu" doch mal auftaucht.
326$sql ="SELECT count(s2.laufendenummer) AS anz2";
327if ($dbg > 1) {$sql.=", count(s3.laufendenummer) AS anz3, count(s4.laufendenummer) AS anz4";}
328$sql.=" FROM ax_buchungsstelle sh " // herrschend
329        ."LEFT JOIN ax_buchungsstelle s2 ON (s2.gml_id=ANY(sh.an) OR s2.gml_id=ANY(sh.zu)) ";
330if ($dbg > 1) {
331        $sql.="LEFT JOIN ax_buchungsstelle s3 ON (s3.gml_id=ANY(s2.an) OR s3.gml_id=ANY(s2.zu)) "
332                ."LEFT JOIN ax_buchungsstelle s4 ON (s4.gml_id=ANY(s3.an) OR s4.gml_id=ANY(s3.zu)) ";
333}
334$sql.="WHERE sh.istbestandteilvon= $1 AND sh.endet IS NULL AND s2.endet IS NULL ";
335if ($dbg > 1) {$sql.="AND s3.endet IS NULL AND s4.endet IS NULL";}
336$v=array($gmlid); // GB-Blatt
337$res=pg_prepare("", $sql);
338$res=pg_execute("", $v);
339if (!$res) {
340        echo "\n<p class='err'>Fehler bei tiefer Suche nach Buchungen.</p>";
341        if ($dbg > 2) {echo "\n<p class='dbg'>SQL=<br>".htmlentities(str_replace("$1", "'".$gmlid."'", $sql), ENT_QUOTES, "UTF-8")."</p>";}
342}
343$row=pg_fetch_assoc($res);
344$anz2=$row["anz2"]; // steuert Tabellenform und Überschrift
345if ($dbg > 1) {
346        $anz3=$row["anz3"];
347        $anz4=$row["anz4"];
348        echo "\n<p class='dbg'>Anzahl dienende Buchungen Ebene 2: '".$anz2."', Ebene 3: '".$anz3."', Ebene 4: '".$anz4."'</p>";
349}
350echo "\n<hr>\n\n<h3><img src='ico/Flurstueck.png' width='16' height='16' alt=''>";
351if ($anz2 > 0) { // auch "Rechte an", also dienende B.
352        echo " Rechte und Flurst&uuml;cke</h3>\n<table class='fs'>";
353        echo "\n<tr>" // zus. Kopfz. "Rechte" vor FS
354                ."\n\t<td class='heads' title='laufende Nummer Bestandsverzeichnis (BVNR) = Grundst&uuml;ck'>\n\t\t<span class='wichtig'>BVNR</span>"
355                        ."\n\t\t<img src='ico/sort.png' width='10' height='10' alt='' title='prim&auml;re Sortierung'>\n\t</td>"
356                ."\n\t<td class='head dien' title='herrschendes Grundst&uuml;ck'>Buchungsart</td>"
357                ."\n\t<td class='head dien'>Anteil</td>"
358                ."\n\t<td class='head dien'>Bezirk</td>"
359                ."\n\t<td class='head dien'>Blatt</td>"
360                ."\n\t<td class='head dien'>BVNR</td>"
361                ."\n\t<td class='head dien'>&nbsp;</td>"
362                ."\n\t<td class='head dien'>&nbsp;</td>"
363        ."\n</tr>";
364} else { // keine Rechte an, nur FS
365        echo " Flurst&uuml;cke</h3>\n<table class='fs'>";
366}
367echo "\n<tr>"; // Kopfzeile "FlurstÃŒck"
368        if ($anz2 > 0) { // BS und FS
369                echo "\n\t<td class='head'>&nbsp;</td>"
370                ."\n\t<td class='head'>&nbsp;</td>";
371        } else { // nur FS
372                echo "\n\t<td class='heads' title='laufende Nummer Bestandsverzeichnis (BVNR) = Grundst&uuml;ck'>\n\t\t<span class='wichtig'>BVNR</span>"
373                        ."\n\t\t<img src='ico/sort.png' width='10' height='10' alt='' title='prim&auml;re Sortierung'>"
374                ."\n\t</td>"
375                ."\n\t<td class='head'>Buchungsart</td>";
376        }
377        echo "\n\t<td class='head'>&nbsp;</td>"
378        ."\n\t<td class='heads'>Gemarkung</td>"
379        ."\n\t<td class='heads'>Flur</td>"
380        ."\n\t<td class='heads fsnr' title='Flurst&uuml;cksnummer (Z&auml;hler / Nenner)'><span class='wichtig'>Flurst.</span></td>"
381        ."\n\t<td class='head fla'>Fl&auml;che</td>"
382        ."\n\t<td class='head nwlink noprint' title='Verlinkung zu anderen Nachweis-Arten und verbundenen Objekten'>weitere Auskunft</td>"
383."\n</tr>";
384
385// Blatt ->  B u c h u n g s s t e l l e (oberste Ebene 1, GrundstÃŒck oder herrschend). Relation istBestandteilVon
386// aktuelles ax_buchungsblatt <istBestandteilVon< ax_buchungsstelle
387$sql ="SELECT s.gml_id, s.buchungsart, s.laufendenummer AS lfd, s.beschreibungdesumfangsderbuchung AS udb, s.zaehler, s.nenner,
388s.nummerimaufteilungsplan AS nrap, s.beschreibungdessondereigentums AS sond, b.beschreibung as bart, b.dokumentation
389FROM ax_buchungsstelle s
390LEFT JOIN ax_buchungsart_buchungsstelle b ON s.buchungsart = b.wert
391WHERE s.istbestandteilvon= $1 AND s.endet IS NULL ORDER BY cast(s.laufendenummer AS integer);";
392$v=array($gmlid);
393$res=pg_prepare("", $sql);
394$res=pg_execute("", $v);
395if (!$res) {
396        echo "\n<p class='err'>Fehler bei Buchung.</p>";
397        if ($dbg > 2) {echo "\n<p class='dbg'>SQL=<br>".htmlentities(str_replace("$1", "'".$gmlid."'", $sql), ENT_QUOTES, "UTF-8")."</p>";}
398}
399$i=0;  // ZÀhler Buchungs-Stellen auf oberer Ebene
400$zpaar=false;
401$altlfdnr=''; // GW
402
403while($row = pg_fetch_assoc($res)) { // Loop Buchungsstellen der 1. Ebene (herrschend oder nur FS)
404        $i++;
405        $gml_bs=$row["gml_id"]; // gml der Buchungsstelle
406        $lfdnr=$row["lfd"];
407        $bartkey=$row["buchungsart"]; // Key
408        $bart=$row["bart"]; // BuchungsART Text dazu
409        $bartstory=htmlentities($row["dokumentation"], ENT_QUOTES, "UTF-8"); // .. fÃŒr Anzeige aufbereitet     
410        if ($row["zaehler"] == "") {$anteil = "";}
411        else {$anteil = $row["zaehler"]."/".$row["nenner"];}
412        if ($zpaar) {$trclass='paa';} else {$trclass='unp';} // Farbwechsel je Buchung auf Ebene 1
413        $zpaar=!$zpaar;
414
415        if ($bartkey <= 1102) { // (aufgeteiltes) GrundstÃŒck
416
417                $zeianz = bnw_fsdaten($gml_bs, true); // FlurstÃŒcksdaten zur direkten Buchungsstelle
418                if ($zeianz === 0) {
419                        echo "\n<tr class='".$trclass."'>\n\t<td><span class='wichtig'>".$lfdnr."</span></td>"
420                        ."\n\t<td colspan='7'><p class='warn'>Keine Flurst&uuml;cke im berechtigten Bereich.</p></td>\n\t<td></td>\n</tr>";
421                }
422
423        } else { // herrschende Buchung
424
425                bnw_bszeile_h(); // Die herrschende Buchung, aus Global
426
427                $altlfdnr=$lfdnr;
428
429                if ($row["nrap"] != "") { // Nr im Auft.Plan
430                        echo "\n<tr>\n\t<td colspan=3></td><td class='nrap' colspan=4>Nummer <span class='wichtig'>".$row["nrap"]."</span> im Aufteilungsplan.</td><td></td>\n</tr>";
431                }
432
433                if ($row["sond"] != "") { // Sondereigentumsbeschreibung
434                        echo "\n<tr>\n\t<td></td><td class='sond' colspan=6 title='Sondereigentums-Beschreibung'>Verbunden mit dem Sondereigentum an: ".$row["sond"]."</td><td></td>\n</tr>";
435                }
436
437                $tiefer = bnw_bsdaten($gml_bs, 2);  // dienend, recursiv Ebenen 2,3,4
438
439        }
440}
441echo "\n</table>";
442if ($i === 0) {echo "\n<p class='err'>Keine Buchung gefunden.</p>";}
443pg_free_result($res);
444
445// B e r e c h t i g t e  BuchungsblÀtter mit Recht an dem aktuellen (fiktiven?) Blatt
446
447// bf                          sf            sb                               bb
448// Blatt   <istBestandteilVon< Stelle  <an<  Stelle      >istBestandteilVon>  Blatt
449// Fiktiv                      Fiktiv  <zu<  Berechtigt                       Berechtigt
450$sql="SELECT sf.laufendenummer AS anlfdnr, bb.gml_id, bb.land, bb.bezirk, bb.buchungsblattnummermitbuchstabenerweiterung AS blatt, bb.blattart, wa.beschreibung AS blattartv,
451sb.gml_id AS gml_s, sb.laufendenummer AS lfdnr, sb.buchungsart, wb.beschreibung AS bart, wb.dokumentation AS bartd, bz.bezeichnung AS beznam, d.bezeichnung, d.stelle, d.stellenart, wd.beschreibung AS stellev
452FROM ax_buchungsstelle sf JOIN ax_buchungsstelle sb ON (sf.gml_id=ANY(sb.an) OR sf.gml_id=ANY(sb.zu))
453JOIN ax_buchungsblatt bb ON bb.gml_id=sb.istbestandteilvon
454LEFT JOIN ax_buchungsblattbezirk bz ON bb.land=bz.land AND bb.bezirk=bz.bezirk ".UnqKatAmt("bb","bz")
455."LEFT JOIN ax_dienststelle d ON bz.land=d.land AND bz.gehoertzu_stelle=d.stelle ".UnqKatAmt("bz","d")
456."LEFT JOIN ax_blattart_buchungsblatt wa ON bb.blattart = wa.wert
457LEFT JOIN ax_buchungsart_buchungsstelle wb ON sb.buchungsart = wb.wert
458LEFT JOIN ax_behoerde wd ON d.stellenart = wd.wert
459WHERE sf.istbestandteilvon = $1 AND sf.endet IS NULL AND sb.endet IS NULL AND bb.endet IS NULL AND bz.endet IS NULL AND d.endet IS NULL
460ORDER BY cast(sf.laufendenummer AS integer), bz.bezeichnung, bb.buchungsblattnummermitbuchstabenerweiterung, cast(sb.laufendenummer AS integer);";
461
462$v = array($gmlid);
463$resb = pg_prepare("", $sql);
464$resb = pg_execute("", $v);
465if (!$resb) {
466        echo "\n<p class='err'>Fehler bei 'Berechtigte Bl&auml;tter.</p>";
467        if ($dbg > 2) {echo "\n<p class='dbg'>SQL=<br>".htmlentities(str_replace("$1", "'".$gmlid."'", $sql), ENT_QUOTES, "UTF-8")."</p>";}
468}
469$b=0; // count: Buchungen / BlÀtter
470$zpaar=false;
471while($rowb = pg_fetch_assoc($resb)) {
472        if ($b === 0) { // Überschrift und Tabelle nur ausgeben, wenn etwas gefunden wurde
473                echo "\n\n<h3><img src='ico/Grundbuch_zu.png' width='16' height='16' alt=''> Berechtigte Grundb&uuml;cher</h3>"
474                ."\n<table class='outer'>\n<tr>"
475                ."\n\t<td class='heads' title='lfd. Nr. auf diesem Blatt, wie im Teil Flurst&uuml;cke'><span class='wichtig'>an BVNR</span><img src='ico/sort.png' width='10' height='10' alt='' title='prim&auml;re Sortierung'></td>"
476                ."\n\t<td class='head'>Dienststelle</td>"
477                ."\n\t<td class='heads'>Bezirk</td>"
478                ."\n\t<td class='heads'><span class='wichtig'>Blatt</span></td>"
479                ."\n\t<td class='heads'>BVNR</td>"
480                ."\n\t<td class='head'>Buchungsart</td>"
481                ."\n\t<td class='head nwlink noprint'>Weitere Auskunft</td>\n</tr>";
482        }
483
484        $anlfdnr=$rowb["anlfdnr"];      // an BVNR
485        $anlfdnr0=str_pad($anlfdnr, 4, "0", STR_PAD_LEFT); // mit fÃŒhr.0
486        $gml_b=$rowb["gml_id"];         // id des ber. Blattes
487        $gml_s=$rowb["gml_s"];          // id der ber. B-Stelle
488        $blart=$rowb["blattart"];
489
490        $buch=$rowb["buchungsart"];     // Buchungsart Stelle berechtigt
491        $bart=$rowb["bart"];            // BA entschl.
492        $lfdnr=$rowb["lfdnr"];          // BVNR ber.
493        $blatt=ltrim($rowb["blatt"], "0");
494        $bvnr=str_pad($lfdnr, 4, "0", STR_PAD_LEFT);
495
496        if ($zpaar) {$trclass='paa';} else {$trclass='unp';} // Farbwechsel je Zeile = GrundstÃŒck
497        $zpaar=!$zpaar;
498
499        echo "\n<tr class='".$trclass."'>"; // Der Teil "berechtigte GrundbÃŒcher" ist nach BVNR sortiert wie oberer Teil "FlurstÃŒcke"
500                echo "\n\t<td><span class='wichtig'>".$anlfdnr0."</span></td>"
501                ."\n\t<td>"; // Amtsgericht,Grundbuchamt
502                        echo htmlentities($rowb["stellev"], ENT_QUOTES, "UTF-8")." ";
503                        echo DsKy($rowb["stelle"], 'Stelle-*').htmlentities($rowb["bezeichnung"], ENT_QUOTES, "UTF-8")
504                ."</td>"
505                ."\n\t<td>".DsKy($rowb["bezirk"], 'Grundbuch-Bezirk-*').htmlentities($rowb["beznam"], ENT_QUOTES, "UTF-8")."</td>"
506                ."\n\t<td><span class='wichtig'>".$blatt."</span></td>"
507                ."\n\t<td>".$bvnr."</td>"
508                ."\n\t<td title='".htmlentities($rowb["bartd"], ENT_QUOTES, "UTF-8")."'>".DsKy($buch, 'Buchungsart-*').$bart."</td>"
509                ."\n\t<td>"
510                        ."\n\t\t<p class='nwlink noprint'>";
511                        // Bestand
512                        echo "\n\t\t\t".DsKy($blart, 'Blattart-*')."<a href='alkisbestnw.php?gkz=".$gkz."&amp;gmlid=".$gml_b.LnkStf()
513                        ."#bvnr".$lfdnr."' title='Nachweis des berechtigten Blattes an einer Buchung auf ".$blattart."'>".$rowb["blattartv"]
514                        ." \n\t\t\t<img src='ico/GBBlatt_link.png' width='16' height='16' alt=''></a>"
515                        ."\n\t\t</p>"
516                ."</td>"
517        ."\n</tr>";
518        $b++;
519}
520if ($b === 0) {
521        if ($blattkey > 2000 ) { // Warnung nicht bei Grundbuchblatt 1000 und Katasterblatt 2000
522                echo "\n<p class='err'>Keine berechtigten Bl&auml;tter zu ".$blattart." (".$blattkey.") gefunden.</p>";
523        }
524} else {
525        echo "\n</table>";
526        if ($i > 1) {
527                echo "\n<p class='cnt'>Rechte anderer Buchungsstellen an ".$b." der ".$i." Buchungen</p>";
528        }
529}
530pg_free_result($resb);
531
532echo "\n<div class='buttonbereich noprint'>\n<hr>"
533        ."\n\t<a title='zur&uuml;ck' href='javascript:history.back()'><img src='ico/zurueck.png' width='16' height='16' alt='zur&uuml;ck'></a>&nbsp;";
534if ($PrntBtn==true){echo "\n\t<a title='Drucken' href='javascript:window.print()'><img src='ico/print.png' width='16' height='16' alt='Drucken'></a>&nbsp;";}
535if ($blattkey == 5000) { // Nicht bei "fiktives Blatt"
536        echo "\n\t<img src='ico/download_gb_no.png' width='32' height='16' alt='Export' title='F&uuml;r ein fiktives Blatt ohne Eigent&uuml;mer ist ein CSV-Export nicht sinnvoll.'>";
537} else {
538        echo "\n\t<a title='Export als CSV' href='javascript:ALKISexport(\"".$gmlid."\")'><img src='ico/download_gb.png' width='32' height='16' alt='Export'></a>";
539}
540echo "&nbsp;\n</div>";
541footer($gmlid, selbstverlinkung()."?", "");
542?>
543</body>
544</html>
Note: See TracBrowser for help on using the repository browser.