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

Revision 422, 22.0 KB checked in by frank.jaeger, 3 years ago (diff)

Aktualisierungen der ALKIS-Buchauskunft, neues Modul für Bauwerke, Härtung

Line 
1<?php
2/*      Modul: alkisbestnw.php
3
4        ALKIS-Buchauskunft, Kommunales Rechenzentrum Minden-Ravensberg/Lippe (Lemgo).
5        Bestandsnachweis fÃŒr ein Grundbuch aus ALKIS PostNAS
6
7        Version:
8        2016-02-24 Version fuer norGIS-ALKIS-Import
9        ....
10        2020-02-20 Authentifizierung ausgelegert in Function darf_ich()
11        2020-12-03 function selbstverlinkung() statt $_SERVER['PHP_SELF']
12        2020-12-15 Input-Validation und Strict Comparisation (===)
13*/
14ini_set("session.cookie_httponly", 1);
15session_start();
16$showkey="n"; $nodebug=""; // Var. initalisieren
17$cntget = extract($_GET); // Parameter in Variable umwandeln
18
19// strikte Validierung aller Parameter
20if (isset($gmlid)) {
21        if (!preg_match('#^[0-9A-Za-z]{16}$#', $gmlid)) {die("Eingabefehler gmlid");}
22} else {
23        die("Fehlender Parameter");
24}
25if (isset($gkz)) {
26        if (!preg_match('#^[0-9]{3}$#', $gkz)) {die("Eingabefehler gkz");}
27} else {
28        die("Fehlender Parameter");
29}
30if (!preg_match('#^[j|n]{0,1}$#', $showkey)) {die ("Eingabefehler showkey");}
31if ($showkey === "j") {$showkey=true;} else {$showkey=false;}
32if (!preg_match('#^j{0,1}$#', $nodebug)) {die("Eingabefehler nodebug");}
33
34include "alkis_conf_location.php";
35include "alkisfkt.php";
36
37?>
38<!doctype html>
39<html lang="de">
40<head>
41        <meta charset="utf-8">
42        <meta name="viewport" content="width=device-width, initial-scale=1.0">
43        <title>ALKIS Bestandsnachweis</title>
44        <link rel="stylesheet" type="text/css" href="alkisauszug.css">
45        <link rel="shortcut icon" type="image/x-icon" href="ico/Grundbuch.ico">
46        <script type="text/javascript">
47                function ALKISexport(gmlid) {
48                        window.open('alkisexport.php?gkz=<?php echo $gkz;?>&tabtyp=grundbuch&gmlid=' + gmlid);
49                }
50        </script>
51</head>
52<body>
53<?php
54
55$erlaubnis = darf_ich(); if ($erlaubnis === 0) { die('<p class="stop1">Abbruch</p></body>'); }
56
57// Mit URL-Parameter "&nodebug=j" kann man die Entwicklungsumgebung (in Conf definiert) ausschalten.
58// Manuell an die URL anfÌgen, wirkt nur temporÀr und wird nicht in Links weiter gereicht.
59if ($nodebug === "j") {$debug=0;}
60
61$con = pg_connect($dbconn." options='--application_name=ALKIS-Auskunft_alkisbestnw.php'");
62if (!$con) echo "\n<p class='err'>Fehler beim Verbinden der DB</p>";
63
64// G R U N D B U C H
65$sql="SELECT g.gml_id, g.bezirk, g.buchungsblattnummermitbuchstabenerweiterung AS blatt, g.blattart, wb.beschreibung AS blattartv, wb.dokumentation AS blattartd,
66b.gml_id, b.bezirk, b.bezeichnung AS beznam, d.gml_id, d.land, d.bezeichnung, d.stelle, d.stellenart, wd.beschreibung AS stellev FROM ax_buchungsblatt g
67LEFT JOIN ax_buchungsblattbezirk b ON g.land=b.land AND g.bezirk=b.bezirk
68LEFT JOIN ax_dienststelle d ON b.land=d.land AND b.gehoertzu_stelle=d.stelle
69LEFT JOIN ax_blattart_buchungsblatt wb ON g.blattart = wb.wert
70LEFT JOIN ax_behoerde wd ON d.stellenart = wd.wert
71WHERE g.gml_id= $1 AND g.endet IS NULL AND b.endet IS NULL AND d.endet IS NULL;";
72// .. AND d.stellenart=1000
73
74$v = array($gmlid);
75$res = pg_prepare("", $sql);
76$res = pg_execute("", $v);
77if (!$res) {
78        echo "\n<p class='err'>Fehler bei Grundbuchdaten.</p>";
79        if ($debug > 2) {echo "\n<p class='dbg'>SQL=<br>".htmlentities(str_replace("$1", "'".$gmlid."'", $sql), ENT_QUOTES, "UTF-8")."</p>";}
80}
81if ($row = pg_fetch_assoc($res)) {
82        $blattkey=$row["blattart"];
83        $blattart=$row["blattartv"];
84        $blatt=ltrim($row["blatt"], "0");
85
86        echo "<p class='balken gbkennz'>ALKIS Bestand ".$row["bezirk"]." - ".$blatt."&nbsp;</p>"; // Balken
87        echo "\n<h2>Grundbuch</h2>";
88        echo "\n<table class='outer'>" // Blatt UND Eigent.
89                ."\n<tr>\n\t<td class='ll'><img src='ico/Grundbuch.png' width='16' height='16' alt=''> Blatt:</td>"  // outer Links
90                ."\n\t<td colspan='2'>"; // Outer Mitte, Kennz. im Rahmen
91                if ($blattkey == 1000) {
92                        echo "\n\t\t<table class='kennzgb' title='Bestandskennzeichen'>";
93                } else {
94                        echo "\n\t\t<table class='kennzgbf' title='Bestandskennzeichen'>"; // dotted
95                }
96                        echo "\n\t\t<tr>"
97                                ."\n\t\t\t<td class='head'>"; // .d nicht gefÃŒllt
98                                if ($showkey) {echo "<span class='key'>".$row["stellenart"]."&nbsp;</span>";}
99                                echo $row["stellev"]."</td>";
100                                echo "\n\t\t\t<td class='head'>Bezirk</td>"
101                                ."\n\t\t\t<td class='head' title='".htmlentities($row["blattartd"], ENT_QUOTES, "UTF-8")."'>";
102                                if ($showkey) {echo "<span class='key'>".$blattkey."&nbsp;</span>";}
103                                echo $blattart."</td>"
104                        ."\n\t\t</tr>\n\t\t<tr>"
105                                ."\n\t\t\t<td title='Amtsgerichtsbezirk'>";
106                                if ($showkey) {echo "<span class='key'>".$row["stelle"]."</span><br>";}
107                                echo htmlentities($row["bezeichnung"], ENT_QUOTES, "UTF-8")."</td>"
108                                ."\n\t\t\t<td title='Grundbuchbezirk'>";
109                                if ($showkey) {echo "<span class='key'>".$row["bezirk"]."</span><br>";}
110                                echo htmlentities($row["beznam"], ENT_QUOTES, "UTF-8")."</td>"
111                                ."\n\t\t\t<td title='Grundbuch-Blatt'><span class='wichtig'>".$blatt."</span></td>"
112                        ."\n\t\t</tr>"
113                ."\n\t\t</table>"
114                ."\n\t</td>\n\t<td>&nbsp;"
115        ."\n\t</td>\n</tr>";
116}
117
118if ($blattkey == 5000) { // fikt. Blatt
119        echo "\n<p>Keine Angaben zum Eigentum bei fiktivem Blatt.</p>";
120} else { // E I G E N T U E M E R
121        $n = eigentuemer($gmlid, true, ""); // MIT Adressen.
122        if ($n === 0) { // keine NamensNr, kein Eigentuemer
123                echo "\n<p class='err'>Keine Namensnummer gefunden.</p>"
124                ."\n<p>Bezirk: ".$row["bezirk"].", Blatt: ".$blatt.", Blattart ".$blattkey." (".$blattart.")</p>";
125        }
126}
127echo "\n</table>";
128
129// Vorab pruefen, ob der Fall "Rechte an .." vorliegt.
130// ToDo: +++ Es gibt auch den Fall, dass auf der nÀchsten Stufe "nur Rechte" angezeigt werden, noch keine FlurstÌcke
131// ++ Also 3 Möglichkeiten:
132// - Nur Rechte an  (+++ FEHLT NOCH ++)
133// - Rechte und FlurstÃŒcke
134// - FlurstÃŒcke
135
136// GB-Blatt  <istBestandteilVon<  sh=herrschend  >an/zu>  sd=dienend
137$sql="SELECT count(sd.laufendenummer) AS anzahl "
138."FROM ax_buchungsstelle sh JOIN ax_buchungsstelle sd ON (sd.gml_id=ANY(sh.an) OR sd.gml_id=ANY(sh.zu)) "
139."WHERE sh.istbestandteilvon= $1 AND sd.endet IS NULL AND sh.endet IS NULL;";
140
141$v=array($gmlid); // GB-Blatt
142$res=pg_prepare("", $sql);
143$res=pg_execute("", $v);
144if (!$res) echo "\n<p class='err'>Fehler bei Suche nach Buchungen.</p>";
145$row=pg_fetch_assoc($res);
146$anz=$row["anzahl"];
147
148echo "\n<hr>\n\n<h3><img src='ico/Flurstueck.png' width='16' height='16' alt=''>";
149if ($anz > 0) { // auch "Rechte an"
150        echo " Rechte und Flurst&uuml;cke</h3>\n<table class='fs'>";
151        // zusaetzliche Kopfzeile "Rechte"
152        echo "\n<tr>"
153                ."\n\t<td>&nbsp;</td>"
154                ."\n\t<td class='dien' title='herrschendes Grundst&uuml;ck'>herrschende Buchungsart</td>"
155                ."\n\t<td class='dien'>Anteil</td>"
156                ."\n\t<td class='dien'>Bezirk</td>"
157                ."\n\t<td class='dien'>Blatt</td>"
158                ."\n\t<td class='dien'>BVNR</td>"
159                ."\n\t<td class='dien' title='dienendes Grundst&uuml;ck'>Buchungsart</td>"
160                ."\n\t<td>&nbsp;</td>"
161        ."\n</tr>";
162} else { // keine Rechte an, nur FlurstÃŒcke gebucht
163        echo " Flurst&uuml;cke</h3>\n<table class='fs'>";
164}
165
166// gemeinsame Kopfzeile "Buchung + FlurstÃŒck"
167echo "\n<tr>"
168        ."\n\t<td class='heads' title='laufende Nummer Bestandsverzeichnis (BVNR) = Grundst&uuml;ck'><span class='wichtig'>BVNR</span><img src='ico/sort.png' width='10' height='10' alt='' title='prim&auml;re Sortierung'></td>"
169        ."\n\t<td class='head'>Buchungsart</td>"
170        ."\n\t<td class='head'>&nbsp;</td>"
171        ."\n\t<td class='heads'>Gemarkung</td>"
172        ."\n\t<td class='heads'>Flur</td>"
173        ."\n\t<td class='heads fsnr' title='Flurst&uuml;cksnummer (Z&auml;hler / Nenner)'><span class='wichtig'>Flurst.</span></td>"
174        ."\n\t<td class='head flag'>Fl&auml;che</td>"
175        ."\n\t<td class='head nwlink noprint' title='Verlinkung zu anderen Nachweis-Arten und verbundenen Objekten'>weitere Auskunft</td>"
176."\n</tr>";
177
178// Blatt ->  B u c h u n g s s t e l l e
179// aktuelles ax_buchungsblatt <istBestandteilVon< ax_buchungsstelle
180$sql ="SELECT s.gml_id, s.buchungsart, s.laufendenummer AS lfd, s.beschreibungdesumfangsderbuchung AS udb, s.zaehler, s.nenner,
181s.nummerimaufteilungsplan AS nrap, s.beschreibungdessondereigentums AS sond, b.beschreibung as bart, b.dokumentation
182FROM ax_buchungsstelle s LEFT JOIN ax_buchungsart_buchungsstelle b ON s.buchungsart = b.wert
183WHERE s.istbestandteilvon= $1 AND s.endet IS NULL ORDER BY cast(s.laufendenummer AS integer);";
184$v=array($gmlid); // Rel. istBestandteilVon
185$res=pg_prepare("", $sql);
186$res=pg_execute("", $v);
187if (!$res) {
188        echo "\n<p class='err'>Fehler bei Buchung.</p>";
189        if ($debug > 2) {echo "\n<p class='dbg'>SQL=<br>".htmlentities(str_replace("$1", "'".$gmlid."'", $sql), ENT_QUOTES, "UTF-8")."</p>";}
190}
191$i=0;
192$fscnt=0;
193$zpaar=false;
194while($row = pg_fetch_assoc($res)) { // Loop Buchungsstelle (GrundstÃŒck)
195        $lfdnr=$row["lfd"];
196        $bvnr=str_pad($lfdnr, 4, "0", STR_PAD_LEFT);
197        $gml_bs=$row["gml_id"]; // id der buchungsstelle
198        $bartkey=$row["buchungsart"]; // SchlÃŒsselwert
199        $bart=$row["bart"]; // BuchungsART Text dazu
200        $bartstory=htmlentities($row["dokumentation"], ENT_QUOTES, "UTF-8"); // .. fÃŒr Anzeige aufbereitet
201        if ($row["zaehler"] == "") {
202                $anteil = "";
203        } else {
204                $anteil = $row["zaehler"]."/".$row["nenner"];
205        }
206        if ($zpaar) {$trclass='paa';} else {$trclass='unp';} // Farbwechsel je GrundstÃŒck
207        $zpaar=!$zpaar;
208
209        // F l u r s t u e c k s d a t e n  zur direkten Buchungsstelle
210        $j = bnw_fsdaten($lfdnr, $gml_bs, $bart, $anteil, true, $bartkey, $bartstory); // return=Anzahl der FS
211        $fscnt=$fscnt + $j;
212        if ($j === 0) { //  k e i n e  Flurstuecke gefunden (Miteigentumsnteil usw.)
213                // Bei "normalen" Grundstuecken wurden hier Flurstuecksdaten gefunden und ausgegeben.
214                // Bei Miteigentumsanteil, Erbbaurecht usw. muss nach den "dienenden" Buchungsstellen gesucht werden, darauf sind die FS gebucht.
215                //  Buchungsstelle >an/zu> (andere)Buchungsstelle >istBestandTeilVon> "FiktivesBlatt (ohne) Eigentuemer"
216
217                // dann andere "dienende" Buchungsstellen
218                //  sh=herrschend          sd=dienend
219                //  ax_buchungsstelle >zu> ax_buchungsstelle (des gleichen Blattes)
220                //  ax_buchungsstelle >an> ax_buchungsstelle (anderes Blatt, z.B Erbbaurecht an)
221
222                // Mit "UNION" um die FÀlle mit JOIN ÃŒber die Arrays "an" und "zu" unterscheiden zu können
223                $sql="SELECT uni.*, wb.beschreibung AS bart FROM "
224                ."(SELECT sda.gml_id, sda.buchungsart, sda.laufendenummer AS lfd, sda.beschreibungdesumfangsderbuchung AS udb, sda.nummerimaufteilungsplan AS nrap, sda.beschreibungdessondereigentums AS sond, 'an' as anzu "
225                ."FROM ax_buchungsstelle sha JOIN ax_buchungsstelle sda ON sda.gml_id=ANY(sha.an) "
226                ."WHERE sha.gml_id= $1 AND sha.endet IS NULL AND sda.endet IS NULL "
227                ."UNION SELECT sdz.gml_id, sdz.buchungsart, sdz.laufendenummer AS lfd, sdz.beschreibungdesumfangsderbuchung AS udb, sdz.nummerimaufteilungsplan AS nrap, sdz.beschreibungdessondereigentums AS sond, 'zu' as anzu "
228                ."FROM ax_buchungsstelle shz JOIN ax_buchungsstelle sdz ON sdz.gml_id=ANY(shz.zu) "
229                ."WHERE shz.gml_id= $1 AND shz.endet IS NULL AND sdz.endet IS NULL "
230                .") AS uni LEFT JOIN ax_buchungsart_buchungsstelle wb ON uni.buchungsart = wb.wert "
231                ."ORDER BY uni.lfd;";
232        //      Testfall suchen: SELECT gml_id, zu, durch FROM ax_buchungsstelle WHERE NOT zu IS NULL OR NOT durch IS NULL;
233        //      Die Relationen "zu" und "durch" kommen in der Praxis nicht vor.
234
235                $v=array($gml_bs); // gml_id der "herrschenden" Buchungs-Stelle
236                $resan=pg_prepare("", $sql); // Suche nach "dienender" Buchungsstelle
237                $resan=pg_execute("", $v);
238                if (!$resan) {
239                        echo "\n<p class='err'>Fehler bei 'andere Buchungsstelle'.</p>";
240                        if ($debug > 2) {echo "\n<p class='dbg'>SQL=<br>".htmlentities(str_replace("$1", "'".$gml_bs."'", $sql), ENT_QUOTES, "UTF-8")."</p>";}
241                }
242
243                $a=0; // count
244                $altbvnr=""; // Gruppenwechsel
245                while($rowan= pg_fetch_assoc($resan)) {
246                        $lfdnran=$rowan["lfd"]; // BVNR an
247                        $gml_bsan=$rowan["gml_id"];     // id der buchungsstelle an
248                        $baan=$rowan["bart"];   // Buchungsart an, entschluesselt
249                        $anzu=$rowan["anzu"];   // Welche Relation? Recht an oder Recht zu ?
250
251                        // dienende Buchungsstelle
252                        $sql ="SELECT b.gml_id, b.land, b.bezirk, b.buchungsblattnummermitbuchstabenerweiterung AS blatt, b.blattart, wb.beschreibung AS blattartv, z.bezeichnung AS beznam "
253                        ."FROM ax_buchungsblatt b JOIN ax_buchungsstelle s ON b.gml_id=s.istbestandteilvon "
254                        ."LEFT JOIN ax_buchungsblattbezirk z ON b.land=z.land AND b.bezirk=z.bezirk "
255                        ."LEFT JOIN ax_blattart_buchungsblatt wb ON b.blattart = wb.wert "
256                        ."WHERE s.gml_id= $1 AND b.endet IS NULL AND s.endet IS NULL AND z.endet IS NULL ORDER BY b.land, b.bezirk, b.buchungsblattnummermitbuchstabenerweiterung;";
257                        $v=array($gml_bsan);
258                        $fbres=pg_prepare("", $sql);
259                        $fbres=pg_execute("", $v);
260                        if (!$fbres) {
261                                echo "\n<p class='err'>Fehler bei fiktivem Blatt.</p>";
262                                if ($debug > 2) {echo "\n<p class='dbg'>SQL=<br>".htmlentities( str_replace("$1", "'".$gml_bsan."'", $sql), ENT_QUOTES, "UTF-8")."</p>";}                       
263                        }
264                        $b=0;
265                        while($fbrow = pg_fetch_assoc($fbres)) { // genau 1
266                                $fbgml=$fbrow["gml_id"];
267                                $fbland=$fbrow["land"];
268                                $fbbez=$fbrow["bezirk"];
269                                $beznam=$fbrow["beznam"];
270                                $fbblatt=ltrim($fbrow["blatt"], "0");
271                                $fbbartkey=$fbrow["blattart"]; // Key
272                                $fbbart=$fbrow["blattartv"];  // Value
273                                $b++;
274                        }
275                        if ($b != 1) { // Überwachen: genau 1?
276                                echo "\n<p class='err'>Anzahl fiktive Bl&auml;tter zu anderer Buchungstelle = ".$b."</p>";
277                        }
278                        // Grundbuchdaten zur dienenden Buchungsstelle
279                        echo "\n<tr class='".$trclass."'>"
280                                ."\n\t<td id='bvnr".$lfdnr."'>"; // Sp.1 Erbbau BVNR, Sprungmarke
281                                        if($bvnr === $altbvnr) {        // gleiches Grundstueck
282                                                echo "&nbsp;"; // dann Anzeige unterdruecken
283                                        } else {
284                                        //      echo "<a id='bvnr".$lfdnr."'></a>" // Sprungmarke
285                                                echo "<span class='wichtig'>".$bvnr."</span>";
286                                                $altbvnr = $bvnr; // Gruppenwechsel merken
287                                        }
288                                echo "</td>"
289                                ."\n\t<td class='dien'>"; // Sp.2 Buchung
290                                        if ($showkey) {echo "<span class='key'>".$row["buchungsart"]."</span> ";}
291                                echo $bart." an</td>"
292                                ."\n\t<td class='dien'>".$anteil."</td>" // Sp.3 Anteil
293                                ."\n\t<td class='dien' title='Grundbuch-Bezirk'>"; // Sp.4 Gemarkg., hier Bezirk
294                                        if ($showkey) {echo "<span class='key'>".$fbbez."</span> ";}
295                                        echo htmlentities($beznam, ENT_QUOTES, "UTF-8")
296                                ."</td>";
297                                echo "\n\t<td class='dien' title='".$fbbart."'>".$fbblatt."</td>" // Sp. 5 Blatt
298                                        ."\n\t<td class='dien' title='Bestandsverzeichnis-Nummer'>".str_pad($lfdnran, 4, "0", STR_PAD_LEFT)."</td>" // Sp.6 BVNR
299                                        ."\n\t<td class='dien' title='Buchungsart'>"; // Sp.7 Buchungsart
300                                        if ($showkey) {echo "<span class='key'>".$rowan["buchungsart"]."</span> ";}
301                                        echo $baan." "
302                                ."</td>"
303                                ."\n\t<td>" // Sp.8 Link ("an" oder "zu"?)
304                                        ."\n\t\t<p class='nwlink noprint'>".$anzu; // Recht "an" oder "zu"
305
306                                        // Buchung
307                                        // +++ <a  gsnachw
308
309                                        // Bestand
310                                        if ($showkey) {echo " <span class='key'>".$fbbartkey."</span>";} // Blatt-Art SchlÃŒssel
311                                        echo "\n\t\t\t<a href='alkisbestnw.php?gkz=".$gkz."&amp;gmlid=".$fbgml;
312                                                if ($showkey) {echo "&amp;showkey=j";}
313                                                echo "#bvnr".$lfdnran // Sprungmarke auf der Seite
314                                                ."' title='Zum Grundbuchnachweis des dienenden Blattes'>";
315                                                echo $fbbart // Blatt-Art entschlÃŒsselt
316                                        ." <img src='ico/GBBlatt_link.png' width='16' height='16' alt=''></a>";
317
318                                        echo "\n\t\t</p>"
319                                ."\n\t</td>"
320                        ."\n</tr>";
321
322                        // Flurstuecksdaten zur dienenden Buchungsstelle
323                        // Buchungsart wird nur in erster Zeile ausgegeben, hier leer
324                        $aj = bnw_fsdaten($lfdnran, $gml_bsan, "", $anteil, false, "", ""); // return=Anz.FS
325                        $fscnt=$fscnt + $aj;
326                        if ($rowan["nrap"] != "") {
327                                echo "\n<tr>"
328                                        ."\n\t<td class='sond' colspan=8>Nr. im Aufteilungsplan: ".$rowan["nrap"]."</td>"
329                                ."\n</tr>";
330                        }
331                        if ($rowan["sond"] != "") {
332                                echo "\n<tr>"
333                                        ."\n\t<td class='sond' colspan=8>Verbunden mit dem Sondereigentum an: ".htmlentities($rowan["sond"], ENT_QUOTES, "UTF-8")."</td>"
334                                ."\n</tr>";
335                        }
336                        $a++;
337                }
338                if ($a === 0) {
339                        echo "\n<tr class='".$trclass."'>"
340                                ."\n\t<td><span class='wichtig'>".$bvnr."</span></td>"
341                                ."\n\t<td colspan=7><p class='warn'>Keine Flurst&uuml;cke zu Buchung ".$bvnr." im berechtigten Bereich.</p></td>"
342                        ."\n</tr>";
343                }
344        }
345        $i++;
346        if ($row["nrap"] != "") { // Nr im Auft.Plan
347                echo "\n<tr>"
348                        ."\n\t<td class='nrap' colspan=8>Nummer <span class='wichtig'>".$row["nrap"]."</span> im Aufteilungsplan.</td>"
349                ."\n</tr>";
350        }
351        if ($row["sond"] != "") { // Sondereigentumsbeschreibung
352                echo "\n<tr>"
353                        ."\n\t<td class='sond' colspan=8>Verbunden mit dem Sondereigentum an: ".$row["sond"]."</td>"
354                ."\n</tr>";
355        } // Ende Buchungsstelle/BVNR
356} // Ende Loop
357echo "\n</table>";
358
359if ($i === 0) {
360        echo "\n<p class='err'>Keine Buchung gefunden.</p>";
361} else {
362        if ($i > 5 and $fscnt > 5) { // nur wenn nicht auf einen Blick zu erkennen
363                echo "\n<p class='cnt'>".$i." Buchungen mit ".$fscnt." Flurst&uuml;cken</p>";
364        }
365}
366
367// B e r e c h t i g t e  Buchungsblaetter  mit Recht an/zu dem aktuellen (fiktiven?) Blatt
368
369// bf                          sf            sb                               bb
370// Blatt   <istBestandteilVon< Stelle  <an<  Stelle      >istBestandteilVon>  Blatt
371// Fiktiv                      Fiktiv  <zu<  Berechtigt                       Berechtigt
372$sql="SELECT sf.laufendenummer AS anlfdnr, bb.gml_id, bb.land, bb.bezirk, bb.buchungsblattnummermitbuchstabenerweiterung AS blatt, bb.blattart, wa.beschreibung AS blattartv,
373sb.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
374FROM ax_buchungsstelle sf JOIN ax_buchungsstelle sb ON (sf.gml_id=ANY(sb.an) OR sf.gml_id=ANY(sb.zu))
375JOIN ax_buchungsblatt bb ON bb.gml_id=sb.istbestandteilvon
376LEFT JOIN ax_buchungsblattbezirk bz ON bb.land=bz.land AND bb.bezirk=bz.bezirk
377LEFT JOIN ax_dienststelle d ON bz.land=d.land AND bz.gehoertzu_stelle=d.stelle
378LEFT JOIN ax_blattart_buchungsblatt wa ON bb.blattart = wa.wert
379LEFT JOIN ax_buchungsart_buchungsstelle wb ON sb.buchungsart = wb.wert
380LEFT JOIN ax_behoerde wd ON d.stellenart = wd.wert
381WHERE 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
382ORDER BY cast(sf.laufendenummer AS integer), bz.bezeichnung, bb.buchungsblattnummermitbuchstabenerweiterung, cast(sb.laufendenummer AS integer);";
383
384$v = array($gmlid);
385$resb = pg_prepare("", $sql);
386$resb = pg_execute("", $v);
387if (!$resb) {
388        echo "\n<p class='err'>Fehler bei 'Berechtigte Bl&auml;tter.</p>";
389        if ($debug > 2) {echo "\n<p class='dbg'>SQL=<br>".htmlentities(str_replace("$1", "'".$gmlid."'", $sql), ENT_QUOTES, "UTF-8")."</p>";}
390}
391$b=0; // count: Buchungen / BlÀtter
392$zpaar=false;
393while($rowb = pg_fetch_assoc($resb)) {
394        if ($b === 0) { // Ueberschrift und Tabelle nur ausgeben, wenn etwas gefunden wurde
395                echo "\n\n<h3><img src='ico/Grundbuch_zu.png' width='16' height='16' alt=''> Berechtigte Grundb&uuml;cher</h3>"
396                ."\n<table class='outer'>"
397                ."\n<tr>"
398                        ."\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>"
399                        ."\n\t<td class='head'>Dienststelle</td>"
400                        ."\n\t<td class='heads'>Bezirk</td>"
401                        ."\n\t<td class='heads'><span class='wichtig'>Blatt</span></td>"
402                        ."\n\t<td class='heads'>BVNR</td>"
403                        ."\n\t<td class='head'>Buchungsart</td>"
404                        ."\n\t<td class='head nwlink noprint'>Weitere Auskunft</td>"
405                ."\n</tr>";
406        }
407
408        $anlfdnr=$rowb["anlfdnr"];      // an BVNR
409        $anlfdnr0=str_pad($anlfdnr, 4, "0", STR_PAD_LEFT); // mit fÃŒhr.0
410        $gml_b=$rowb["gml_id"];         // id des ber. Blattes
411        $gml_s=$rowb["gml_s"];          // id der ber. B-Stelle
412        $blart=$rowb["blattart"];
413
414        $buch=$rowb["buchungsart"];     // Buchungsart Stelle berechtigt
415        $bart=$rowb["bart"];            // BA entschl.
416        $lfdnr=$rowb["lfdnr"];          // BVNR ber.
417        $blatt=ltrim($rowb["blatt"], "0");
418        $bvnr=str_pad($lfdnr, 4, "0", STR_PAD_LEFT);
419
420        if ($zpaar) {$trclass='paa';} else {$trclass='unp';} // Farbwechsel je Zeile = GrundstÃŒck
421        $zpaar=!$zpaar;
422
423        echo "\n<tr class='".$trclass."'>"; // Der Teil "berechtigte GrundbÃŒcher" ist sortiert wie oberer Teil "FlurstÃŒcke"
424                echo "\n\t<td><span class='wichtig'>".$anlfdnr0."</span></td>"
425                ."\n\t<td>"; // Amtsgericht,Grundbuchamt
426                        echo htmlentities($rowb["stellev"], ENT_QUOTES, "UTF-8")." ";
427                        if ($showkey) {echo "<span class='key'>".$rowb["stelle"]."</span> ";}
428                        echo htmlentities($rowb["bezeichnung"], ENT_QUOTES, "UTF-8")
429                ."</td>"
430                ."\n\t<td>";
431                        if ($showkey) {echo "<span class='key'>".$rowb["bezirk"]."</span> ";}
432                        echo htmlentities($rowb["beznam"], ENT_QUOTES, "UTF-8")
433                ."</td>"
434                ."\n\t<td><span class='wichtig'>".$blatt."</span></td>"
435                ."\n\t<td>".$bvnr."</td>"
436                ."\n\t<td title='".htmlentities($rowb["bartd"], ENT_QUOTES, "UTF-8")."'>";
437                        if ($showkey) {echo "<span class='key'>".$buch."</span> ";}
438                        echo $bart
439                ."</td>"
440                ."\n\t<td>"
441                        ."\n\t\t<p class='nwlink noprint'>";
442                        // Bestand
443                        if ($showkey) {echo "<span class='key'>".$blart."</span> ";}
444                        echo "\n\t\t\t<a href='alkisbestnw.php?gkz=".$gkz."&amp;gmlid=".$gml_b;
445                                if ($showkey) {echo "&amp;showkey=j";}
446                                echo "#bvnr".$lfdnr."' title='Nachweis des berechtigten Blattes an einer Buchung auf ".$blattart."'>".$rowb["blattartv"]; // "an" ggf. durch "zu" ersetzen?
447                                echo " \n\t\t\t<img src='ico/GBBlatt_link.png' width='16' height='16' alt=''></a>";
448                        echo "\n\t\t</p>"
449                ."</td>"
450        ."\n</tr>";
451        $b++;
452}
453if ($b === 0) {
454        if ($blattkey > 2000 ) { // Warnung nicht bei Grundbuchblatt 1000 und Katasterblatt 2000
455                echo "\n<p class='err'>Keine berechtigten Bl&auml;tter zu ".$blattart." (".$blattkey.") gefunden.</p>";
456        }
457} else {
458        echo "\n</table>";
459        if ($i > 1) {
460                echo "\n<p class='cnt'>Rechte anderer Buchungsstellen an ".$b." der ".$i." Buchungen</p>";
461        }
462}
463
464echo "\n<div class='buttonbereich noprint'><hr>"
465        ."\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;"
466        ."\n\t<a title='Drucken' href='javascript:window.print()'><img src='ico/print.png' width='16' height='16' alt='Drucken'></a>&nbsp;";
467if ($blattkey == 5000) { // Nicht bei "fiktives Blatt"
468        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.'>";
469} else {
470        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>";
471}
472echo "&nbsp;\n</div>";
473footer($gmlid, selbstverlinkung()."?", "");
474?>
475</body>
476</html>
Note: See TracBrowser for help on using the repository browser.