source: trunk/info/info/alkisn/alkisfkt.php @ 425

Revision 425, 40.0 KB checked in by frank.jaeger, 2 years ago (diff)

Web-GIS-Auskunft und Mapbender2-Navigation: neue Konfigurations-Parameter und verbessertes Grundbuch-Modul

Line 
1<?php
2/*      Modul: alkisfkt.php
3
4        ALKIS-Buchauskunft, Kommunales Rechenzentrum Minden-Ravensberg/Lippe (Lemgo).
5        F u n c t i o n s
6
7        Version:
8        2016-02-24 Version fÃŒr norGIS-ALKIS-Import, "function linkgml" raus. Case-EntschlÃŒsselung raus.
9        ....
10        2020-12-03 function selbstverlinkung() statt $_SERVER['PHP_SELF'] fÃŒr Einsatz hinter Gateway mit Änderung des Pfades (Docker/QWC2)
11        2020-12-09 Entschl. BodenschÀtzung korrigiert in function werteliste()
12        2020-12-15 Input-Validation und Strict Comparisation (===)
13        2020-12-16 Sonderfall QWC2 API-Gateway-Umleitung bei Selbstverlinkung
14        2021-12-09 Neue Parameter: $katAmtMix (Kataster-Amt-Mix), $PrntBtn (Drucken-SchaltflÀche)
15                           Footer: Umschalter fÃŒr SchlÃŒssel und Debug unabhÀngig benutzbar. Authentifizierung aus QWC2 nicht hier behandeln.
16        2021-12-30 Bestandsnachweis recursiv ÃŒber alle Buchungs-Ebenen
17
18++ ToDo:
19        - Parameter $lnkclass in eigentuemer() und $jfenster in buchung_anzg() vereinheitlichen
20*/
21
22function selbstverlinkung() {
23//      Aus der Server-Variable den Pfad entfernen.
24        global $pfadlos_selbstlink;
25        If ($pfadlos_selbstlink === 1) { // Selbstverlinkung ohne Pfad z.B. hinter QWC2 API-Gateway (Umleitung)
26                $mod=strrchr($_SERVER['PHP_SELF'], '/');
27                $mod=substr($mod, 1);
28        } else { // normaler Webserver, die Systemvariable ist korrekt
29                $mod=$_SERVER['PHP_SELF'];
30        }
31        return $mod;
32}
33
34function darf_ich() {
35//      Am Anfang jedes Moduls aufrufen um $customer zu fÃŒllen.       
36//      Der automatisch einloggende anonyme Gast-Benutzers muss bei der Authentifizierung ausgeschlossen werden.
37        global $auth, $customer, $mb_guest_user, $dbg;
38
39        if ($auth === "") {             // nicht prÃŒfen
40                $customer = "";         // dann anonym
41                return 1;                       // alles erlaubt
42        } elseif ($auth === "mapbender") {
43                $customer = "";
44                include '/opt/gdi/mapbender/http/php/mb_validateSession.php';
45
46                if (!isset($_SESSION)) { // keine (passende) Session
47                        if ($dbg > 1) {echo "\n<p class='dbg'>Session nicht gesetzt</p>";}
48                } elseif ( !isset($_SESSION["mb_user_name"]) )  {
49                        if ($dbg > 1) {echo "\n<p class='dbg'>username nicht gesetzt</p>";}
50                } else {
51                        $customer = $_SESSION["mb_user_name"]; // angemeldeter Benutzer
52                }
53                if ($customer == "") {  // Wer bin ich?
54                        echo "<p class='stop2'>Aufruf nur aus Mapbender erlaubt.</p>";
55                        return 0;
56                } elseif ($customer == $mb_guest_user) { // in conf festgelegt
57                        echo "<p class='stop2'>Eine Anmeldung im Mapbender ist notwendig.</p>";
58                        return 0;       // gast-User darf nix
59                } else {
60                        return 1;       // echter User, ist erlaubt
61                }
62        } else {
63                echo "\n<p class='stop2'>Die Berechtigungs-Pr&uuml;fung ist falsch konfiguriert</p>";
64                return 0;       // verboten
65        }
66}
67
68function footer($gmlid, $link, $append) {
69        // Einen Seitenfuß ausgeben.
70        // Die Parameter &gkz= und &gmlid= kommen in allen Modulen einheitlich vor
71        // Den URL-Parameter "&showkey=j/n" umschalten lassen.
72        // $append wird angehÀngt wenn gefÃŒllt. Anwendung: &eig=j bei FSNW, &ltyp=m/p/o bei Lage
73        global $gkz, $showkey, $hilfeurl, $debug, $dbg, $customer;
74
75        echo "\n<footer>";
76        // S c r e e n - F o o t
77        echo "\n\t<div class='confbereich noprint'>"
78        ."\n\t\t<table class='outer'>\n\t\t<tr>";
79
80        // Spalte 1: Info Benutzerkennung
81        if (isset($customer) and $customer != '') { // ÃŒber global von fkt. darf_ich()
82                echo "\n\t\t\t<td title='Info'><i>Benutzer:&nbsp;".$customer."</i></td>";
83        } else {
84                echo "\n\t\t\t<td>&nbsp;</td>";
85        }
86
87        // Spalte 2: Umschalter
88        echo "\n\t\t\t<td title='Konfiguration'>";
89                $mylink ="\n\t\t\t\t<a class='keyswitch' href='".$link."gkz=".$gkz."&amp;gmlid=".$gmlid.$append;
90
91                if ($showkey) { // Umschalten SchlÃŒssel ein/aus
92                        echo $mylink."&amp;showkey=n";
93                        if ($debug > 0 and $dbg == 0) {echo "&amp;nodebug=j";}
94                        echo "' title='Verschl&uuml;sselungen ausblenden'>Schl&uuml;ssel aus</a>";
95                        $mylink.="&amp;showkey=j";
96                } else {
97                        echo $mylink."&amp;showkey=j";
98                        if ($debug > 0 and $dbg == 0) {echo "&amp;nodebug=j";}
99                        echo "' title='Verschl&uuml;sselungen anzeigen'>Schl&uuml;ssel ein</a>";
100                        $mylink.="&amp;showkey=n";
101                }
102
103                if ($debug > 0) {       // nur fÃŒr Entwicklung
104                        if ($dbg > 0) { // temporÀr eine Ansicht OHNE debug
105                                echo "<br>".$mylink."&amp;nodebug=j' title='Debug-Ausgaben tempor&auml;r abschalten'>Testausgaben aus</a>";
106                        } else {                // Abschaltung beenden
107                                echo "<br>".$mylink."' title='Debug-Ausgaben wie konfiguriert'>Testausgaben ein</a>";
108                        }
109                }
110
111        echo "\n\t\t\t</td>";
112
113        // Spalte 3: Dokumentation
114        echo "\n\t\t\t<td title='Hilfe'>"
115                ."\n\t\t\t\t<p class='nwlink'>\n\t\t\t\t\t<a target='_blank' href='".$hilfeurl."' title='Dokumentation'>Hilfe zur ALKIS-Auskunft</a>\n\t\t\t\t</p>\n\t\t\t</td>"
116                ."\n\t\t</tr>\n\t\t</table>"
117        ."\n\t</div>";
118
119        // P r i n t - F o o t
120        if (isset($customer) and $customer != '') {
121                echo "\n\t<p class='onlyprint'><i>Benutzer:&nbsp;".$customer."</i></p>";
122        }
123
124        echo "\n</footer>\n";
125        return 0;
126}
127
128function UnqKatAmt($t1, $t2){
129// Wenn der Datenbestand aus NBA-Verfahren mehrerer KatasterÀmter gemixt wurde, dann muss beim SQL-JOIN auf einige SchlÌsseltabellen
130// zusÀtzlich dafÌr gesort werden, dass nur die SchlÌssel des gleichen Katasteramtes verwendet werden. Sont bekommt man redundante Treffer.
131// Benötigt den Alias der zu verbindenden Tabellen.
132// Liefert einen String zum EinfÃŒgen hinter "JOIN .. ON".
133        global $katAmtMix; // aus Conf
134        if ($katAmtMix){
135                return "AND substr(".$t1.".gml_id,1,6) = substr(".$t2.".gml_id,1,6) ";
136        } else {
137                return "";
138        }
139}
140
141function ber_bs_zaehl($gmls) {
142        // Berechtigte Buchungs-Stellen zaehlen.
143
144        // Buchungstelle dienend <(Recht)an< Buchungstelle herrschend
145        $sql ="SELECT count(sh.gml_id) AS anz FROM ax_buchungsstelle sd JOIN ax_buchungsstelle sh ON sd.gml_id=ANY(sh.an) "
146        ."WHERE sd.gml_id= $1 AND sh.endet IS NULL AND sd.endet IS NULL;";
147        $v = array($gmls); // GML dienende Buchungs-Stelle
148        $resan = pg_prepare("", $sql);
149        $resan = pg_execute("", $v);
150        if (!$resan) {echo "\n<p class='err'>Fehler bei 'berechtigte Buchungsstellen zaehlen'.</p>";}
151        $rowan = pg_fetch_assoc($resan);
152        $anz=$rowan["anz"];
153        pg_free_result($resan);
154        return $anz; // Funktionswert = Anzahl der berechtigten Buchungen
155}
156
157function buchung_anzg($gmlbs, $eig, $jsfenster, $gml_fs, $trtyp) {
158        // In einem FS-Nachw. EINE Buchungsstelle anzeigen.
159        // Parameter:
160        //  $gmlbs: GML-ID der anzuzeigenden Buchungs-Stelle
161        //  $eig: EigentÃŒmer ausgeben j/n
162        //  $jsfenster: Javascript-Funktion zum Verlassen des Feature-Info-Fensters verwenden (bool)
163        //  $gml_fs: GML-ID des FlurstÃŒcke (nur bei erstem Aufruf in einem FS-Nachweis notwendig)
164        //      $trtyp: Tabellen-Zeilen-Typ. Werte: 1="mit GS-Link", 2="ohne GS-Link", 3="ohne GS-Link +Zeile einfÀrben"
165        global $gkz, $dbg, $showkey, $bartgrp, $barttypgrp, $stufe, $katAmtMix;
166
167        $sqlbs="SELECT sh.gml_id AS hgml, sh.buchungsart, sh.laufendenummer as lfd, sh.zaehler, sh.nenner, sh.nummerimaufteilungsplan as nrpl, sh.beschreibungdessondereigentums as sond, " // Buchungs-Stelle herrschend
168        ."b.gml_id AS g_gml, b.bezirk, b.buchungsblattnummermitbuchstabenerweiterung as blatt, b.blattart, z.bezeichnung, a.beschreibung AS bart, a.dokumentation AS barttitle, w.beschreibung AS blattartv "
169        ."FROM ax_buchungsstelle sh "
170        ."JOIN ax_buchungsblatt b ON b.gml_id=sh.istbestandteilvon "
171        ."LEFT JOIN ax_buchungsblattbezirk z ON z.land=b.land AND z.bezirk=b.bezirk ".UnqKatAmt("z","b")
172        ."LEFT JOIN ax_buchungsart_buchungsstelle a ON sh.buchungsart = a.wert " // entschl. Buchungsart
173        ."LEFT JOIN ax_blattart_buchungsblatt w ON b.blattart = w.wert " // entschl. Blatt-Art
174        ."WHERE sh.gml_id= $1 AND sh.endet IS NULL AND b.endet IS NULL AND z.endet IS NULL;";
175
176        $v = array($gmlbs); // ID dienende Buchungs-Stelle
177        $resbs = pg_prepare("", $sqlbs);
178        $resbs = pg_execute("", $v);
179        if (!$resbs) {
180                echo "\n<p class='err'>Fehler bei 'Buchungsstelle ausgeben'.</p>";
181                if ($dbg > 2) {echo "\n<p class='dbg'>SQL=<br>".htmlentities(str_replace("$1", "'".$gmlbs."'", $sqlbs), ENT_QUOTES, "UTF-8")."</p>";}
182        }
183        $gezeigt = 0; // Funktionswert default
184        if ($dbg > 0) {
185                $zeianz=pg_num_rows($resbs);
186                if ($zeianz > 1){
187                        echo "\n<p class='err'>Die Abfrage liefert mehr als eine (".$zeianz.") Buchung!</p>";
188                        if ($dbg > 2) {echo "\n<p class='dbg'>SQL=<br>".htmlentities(str_replace("$1","'".$gmlid."'",$sqlbs), ENT_QUOTES, "UTF-8")."</p>";}
189                }
190        }
191        if ($rowbs = pg_fetch_assoc($resbs)) { // EIN Treffer
192                $blattkeyber=$rowbs["blattart"]; // Schluessel von Blatt-Art des GB
193                if ($blattkeyber != '5000' or $dbg > 1) { // "Fiktives Blatt" nur bei Entwicklung anzeigen
194                        $gezeigt = 1; // Funktionswert nach Treffer
195                        $hgml=$rowbs["hgml"]; // GML-ID der (herrschenden) BuchungsStelle
196                        $bartkey=$rowbs["buchungsart"]; // Buchungsart SchlÃŒssel
197                        $bart=$rowbs["bart"]; // Buchungsart Text
198                        $beznam=$rowbs["bezeichnung"]; // Bezirk
199                        $blattartber=$rowbs["blattartv"]; // Wert von Blatt-Art des GB
200                        $nrpl=$rowbs["nrpl"]; // Nr im Auft.plan
201                        $sond=$rowbs["sond"]; // Beschr. d.Sondereigentums
202                        $gbgml=$rowbs["g_gml"]; // GML-ID des Grundbuch-Blattes
203                        $blatt=ltrim($rowbs["blatt"], "0");
204                        $lfd=ltrim($rowbs["lfd"], "0");
205                        if ($bartkey != $bartgrp) { // Wechsel der Buchungsart
206                                $barttitle=$rowbs["barttitle"]; // Buchungsart ErklÀrung
207                                switch (true) { // Die Buchungsart einem Typ (Gruppierung) zuweisen
208                                        case ($bartkey <= 1999): $barttyp = "E"; break; // Eigentum/GrundstÃŒck
209                                        case ($bartkey >= 2000): $barttyp = "R"; break; // GrundstÃŒcksgleiches Recht, z.B. 2101 "Erbbaurecht"
210                                        default: $barttyp = "E"; break;
211                                }
212                                if ($barttypgrp != $barttyp) { // Wenn der Typ wechselt, neue Überschrift in Tabelle
213                                        switch ($barttyp) { // Text der Überschrift
214                                                case "E":
215                                                        if ($eig === 'j') {$h3txt = "Buchung und Eigentum";}
216                                                        else {$h3txt = "Buchung";}
217                                                break;
218                                                case "R": $h3txt = "Grundst&uuml;cksgleiche Rechte"; break;
219                                        }
220                                        if ($barttypgrp === "" and $gml_fs != "") { // die erste Überschrift mit ID und Umschalter
221                                                echo "\n\t<tr>\n\t\t<td colspan='3'>\n\t\t\t<h3 id='gb'>".$h3txt."</h3>\n\t\t</td>"; // 1-3
222                                                echo "\n\t\t<td>\n\t\t\t<p class='nwlink noprint'>" // 4
223                                                        ."\n\t\t\t\t<a href='".selbstverlinkung()."?gkz=".$gkz."&amp;gmlid=".$gml_fs;
224                                                        if ($showkey) {echo "&amp;showkey=j";}
225                                                        if ($eig=="j") { // Umschalter: FS-Nachweis ruft sich selbst mit geaendertem Parameter auf. Positionierung auf Marke "#gb"
226                                                                echo "&amp;eig=n#gb' title='Umschalter: Flurst&uuml;cksnachweis'>ohne Eigent&uuml;mer</a>";
227                                                        } else {
228                                                                echo "&amp;eig=j#gb' title='Umschalter: Flurst&uuml;cks- und Eigent&uuml;mernachweis'>mit Eigent&uuml;mer "
229                                                                ."<img src='ico/EigentuemerGBzeile.png' width='16' height='16' alt=''></a>";
230                                                        }
231                                                echo "\n\t\t\t</p>\n\t\t</td>";
232                                        } else {
233                                                echo "\n\t<tr>\n\t\t<td colspan='3'>\n\t\t\t<h3>".$h3txt."</h3>\n\t\t</td>\n\t\t<td>&nbsp;</td>"; // 1-4
234                                        }
235                                        echo "\n\t</tr>";
236                                        $barttypgrp = $barttyp;
237                                }
238
239                                // ++ mehr Abstand oben zur Zeile in .css?
240                                echo "\n\t<tr>" // Buchungsart als Zwischenzeile
241                                        ."\n\t\t<td class='ll'><img src='ico/Grundbuch.png' width='16' height='16' alt=''> Buchungsart:</td>" // 1
242                                        ."\n\t\t<td colspan='2' title='".$barttitle."'>"; // 2-3
243                                                if ($showkey) {echo "<span class='key' title='Buchungsart'>(".$bartkey.")</span> ";}
244                                                echo "<span class='wichtig'>".$bart."</span>"
245                                        ."</td>"
246                                        ."\n\t\t<td></td>" // 4
247                                ."\n\t</tr>";
248                                $bartgrp=$bartkey; // Gruppe merken
249                        } // Ende Wechsel der Buchungsart
250
251                        echo "\n\t<tr>" // Zeile mit 4 Spalten fÃŒr Buchung und EigentÃŒmer
252                                ."\n\t\t<td class='ll'><img src='ico/Grundbuch_zu.png' width='16' height='16' alt=''> Buchung:"; // 1
253                        if ($showkey and $dbg > 2) {echo "<br><span class='key'>Stufe ".$stufe."<br>".$hgml."</span> ";}
254                        echo "</td>\n\t\t<td colspan='2'>"; // 2-3
255
256                                        // innere Tabelle: Rahmen mit GB-Kennz.
257                                        if ($blattkeyber == 1000) {
258                                                echo "\n\t\t\t<table class='kennzgb' title='Bestandskennzeichen'>";
259                                        } else {
260                                                echo "\n\t\t\t<table class='kennzgbf' title='Bestandskennzeichen'>"; // dotted
261                                        }
262                                        echo "\n\t\t\t<tr>"
263                                                ."\n\t\t\t\t<td class='head'>Bezirk</td>"
264                                                ."\n\t\t\t\t<td class='head'>";
265                                                if ($showkey) {echo "<span class='key' title='Blattart'>(".$blattkeyber.")</span> ";}
266                                                echo $blattartber."</td>"
267                                                ."\n\t\t\t\t<td class='head'>Lfd-Nr</td>"
268                                        ."\n\t\t\t</tr>";
269
270                                        if ($trtyp === 3) { // Treffer-Grundst. einfÀrben
271                                                echo "\n\t\t\t<tr class='paa'>";
272                                        } else {
273                                                echo "\n\t\t\t<tr>";
274                                        }
275                                        echo "\n\t\t\t\t<td title='Grundbuchbezirk'>";
276                                                if ($showkey) {echo "<span class='key' title='GB-Bezirk-Schl&uuml;ssel'>".$rowbs["bezirk"]."</span><br>";}
277                                                echo $beznam."</td>"
278                                                ."\n\t\t\t\t<td title='Grundbuch-Blatt'><span class='wichtig'>".$blatt."</span></td>"
279                                                ."\n\t\t\t\t<td title='Bestandsverzeichnis-Nummer (BVNR, Grundst&uuml;ck)'>".$lfd."</td>"
280                                        ."\n\t\t\t</tr>"
281                                        ."\n\t\t\t</table>";
282
283                                        if ($rowbs["zaehler"] != "") {
284                                                echo "\n\t\t\t<p class='ant'>".$rowbs["zaehler"]."/".$rowbs["nenner"]."&nbsp;Anteil am Flurst&uuml;ck</p>";
285                                        }
286                                        if ($nrpl != "") {
287                                                echo "\n\t\t\t<p class='nrap' title='Nummer im Aufteilungsplan'>Nummer <span class='wichtig'>".$nrpl."</span> im Aufteilungsplan.</p>";
288                                        }
289                                        if ($sond != "") {
290                                                echo "\n\t\t\t<p class='sond' title='Sondereigentum'>Verbunden mit dem Sondereigentum: ".$sond."</p>";
291                                        }
292                                echo "\n\t\t</td>"; // 2-3
293
294                                echo "\n\t\t<td>"; // 4
295                                        echo "\n\t\t\t<p class='nwlink noprint'>";
296                                        //      Bestand
297                                                if ($showkey) {echo "<span class='key' title='Blattart'>(".$blattkeyber.")</span> ";}
298                                                $url="alkisbestnw.php?gkz=".$gkz."&amp;gmlid=".$gbgml;
299                                                if ($showkey) {$url.="&amp;showkey=j";}
300                                                if ($jsfenster) {$url="javascript:imFenster(\"".$url."\")";} // Sonderfall "Inlay" aus Feature-Info
301                                                echo "\n\t\t\t\t<a href='".$url."' title='Grundbuchnachweis'>".$blattartber
302                                                        ." <img src='ico/GBBlatt_link.png' width='16' height='16' alt=''>"
303                                                ."</a>";
304                                        //      Buchung
305                                                if ($trtyp === 1) {
306                                                        echo "<br>";
307                                                        if ($showkey) {echo "<span class='key' title='Buchungsart'>(".$bartkey.")</span> ";}
308                                                        $url="alkisgsnw.php?gkz=".$gkz."&amp;gmlid=".$hgml;
309                                                        if ($showkey) {$url.="&amp;showkey=j";}
310                                                        if ($jsfenster) {$url="javascript:imFenster(\"".$url."\")";}
311                                                        echo "\n\t\t\t\t<a href='".$url."' title='GrundstÃŒcksnachweis: ".$bart."'>Buchung"
312                                                                ." <img src='ico/Grundstueck_Link.png' width='16' height='16' alt=''>"
313                                                        ."</a>";
314                                                }
315                                        echo "\n\t\t\t</p>"
316                                ."\n\t\t</td>" // 4
317                        ."\n\t</tr>";
318                        if ($eig === "j") {
319                                if ($jsfenster) {$lnkclass = "imFenster";} else {$lnkclass = "";}
320                                $n = eigentuemer($gbgml, true, $lnkclass); // mit Adresse
321                        }
322                }
323        }
324        pg_free_result($resbs);
325       
326        //if ($dbg > 1) {echo "\n<p class='dbg'>Ende function buchung_anzg(), Return = ". $gezeigt ."</p>";}
327       
328        return $gezeigt; // 1 wenn eine Buchung ausgegeben wurde
329}
330
331function ber_bs_anzg($gmls, $eig, $jsfenster, $gml_fs, $gsanfrd) {
332        // In einem FS-Nachw. die berechtigten (herrschenden) Buchungsstellen anzeigen z.B. "Wohnungs-/Teileigentum".
333        // Parameter:
334        //  $gmls: GML-ID der dienenden Buchungs-Stelle. Im ersten Durchlauf also, die BS auf der das FS gebucht ist.
335        //  $eig: EigentÃŒmer ausgeben j/n
336        //  $jsfenster: Javascript-Funktion zum Verlassen des Feature-Info-Fensters verwenden (bool)
337        //  $gml_fs: GML-ID des FlurstÃŒcke (nur bei erstem Aufruf in einem FS-Nachweis notwendig)
338        //      $gsanfrd: In einem GS-Nachw. die GML-ID der in de URL angeforderten Buchungsstelle (-> Hervorhebung)
339        global $dbg, $gezeigt;
340
341        // sh=Buchungstelle herrschend >(Recht)an> sd=Buchungstelle dienend >istBestandteilVon> BLATT -> Bezirk
342        $sql="SELECT sh.gml_id AS hgml, sh.buchungsart, sh.laufendenummer as lfd, sh.zaehler, sh.nenner, sh.nummerimaufteilungsplan as nrpl, sh.beschreibungdessondereigentums as sond, "
343        ."b.gml_id AS g_gml, b.bezirk, b.buchungsblattnummermitbuchstabenerweiterung as blatt, b.blattart "
344        ."FROM ax_buchungsstelle sh JOIN ax_buchungsblatt b ON b.gml_id=sh.istbestandteilvon "
345        ."WHERE $1 = ANY(sh.an) AND sh.endet IS NULL AND b.endet IS NULL "
346        ."ORDER BY b.bezirk, b.buchungsblattnummermitbuchstabenerweiterung, sh.laufendenummer;";
347
348        $v = array($gmls); // ID dienende BuchungsStelle
349        $resber = pg_prepare("", $sql);
350        $resber = pg_execute("", $v);
351        if (!$resber) {
352                echo "\n<p class='err'>Fehler bei 'berechtigte Buchungsstellen'.</p>";
353                if ($dbg > 2) {echo "\n<p class='dbg'>SQL=<br>".htmlentities(str_replace("$1", "'".$gmls."'", $sql), ENT_QUOTES, "UTF-8")."</p>";}
354        }
355        $an=0;
356        $verfolg=array(); // Ein (zunÀchst leeres) Array fÃŒr weitere GML-IDs anlegen
357        while($rowan = pg_fetch_assoc($resber)) { // Loop durch Result von berechtigte BS
358                $hgml=$rowan["hgml"]; // GML-ID der berechtigten Buchungs-Stelle
359
360                if ($hgml === $gsanfrd) {
361                        $trtyp=3; // einfÀrben, o. Lnk.
362                } else {
363                        if ($gezeigt) {
364                                $trtyp=2; // ohne Link auf GS
365                        } else { // Wenn Stufe 1 "Fiktives Blatt" war, welches ausgeblendet wurde, dann auf Stufe 2 einen GS-Link ausgeben
366                                $trtyp=1; // mit Link auf GS
367                        }
368                }
369                $gezeigt2=buchung_anzg($hgml, $eig, $jsfenster, $gml_fs, $trtyp); // Die herrschende Buchung anzeigen wenn nicht fiktiv
370                $an++;
371                $weitere=ber_bs_zaehl($hgml);
372                if ($weitere > 0) { // gibt es WEITERE berechtigte Buchungen dazu?
373                        $verfolg[] = $hgml; // neuen Wert fÃŒr weitere Verfolgung in Array anfÃŒgen
374                }
375        }
376        pg_free_result($resber);
377        return $verfolg; // weitere zu verfolgende GML-ID zurÃŒck geben
378}
379
380function kurz_namnr($lang) {
381        // Namensnummer kÃŒrzen. Nicht benötigte Stufen der Dezimalklassifikation abschneiden
382        $kurz=str_replace(".00","",$lang); // leere Stufen (nur am Ende)
383        $kurz=str_replace("0000","",$kurz); // ganz leer (am Anfang)
384        $kurz=ltrim($kurz, "0"); // fuehr. Nullen
385        $kurz=str_replace(".0",".",$kurz); // fuehr. Null jeder Stufe
386        $kurz=rtrim($kurz); // Leerzeichen hinten
387        // echo "/n<p class='dbg'> lang='".$lang."'</p>/n<p class='dbg'> kurz='".$kurz."'</p>";
388        return $kurz;
389}
390
391function bnw_bszeile_h() {
392/*      Bestandsnachweis - Buchungs-Stellen-Zeile ausgeben - herrschend.
393        Die GB-Daten hierzu stehen bereits im Kopf und bleiben in der Tab. leer */
394        global $dbg, $gkz, $showkey, $trclass, $lfdnr, $bartkey, $bart, $bartstory, $anteil;
395
396        $bvnr=str_pad($lfdnr, 4, "0", STR_PAD_LEFT);
397        echo "\n<tr class='".$trclass."'>"
398        ."\n\t<td id='bvnr".$bvnr."'><span class='wichtig'>".$bvnr."</span></td>" // Sprungmarke=BVNR auf dem GB-Blatt
399        ."\n\t<td class='dien' title='".$bartstory."'>";
400        if ($showkey) {echo "<span class='key'>".$bartkey."</span> ";}
401        echo $bart."</td>"
402        ."\n\t<td class='dien'>".$anteil."</td>"
403        ."\n\t<td>&nbsp;</td>"
404        ."\n\t<td>&nbsp;</td>"
405        ."\n\t<td>&nbsp;</td>"
406        ."\n\t<td>&nbsp;</td>"
407        ."\n\t<td>&nbsp;</td>\n</tr>";
408}
409
410function bnw_bszeile_d($bezkey, $beznam, $blatt, $blattartkey, $blattart, $lfdnran, $gbgml, $gml_bsan, $ebene, $und) {
411/*      Bestandsnachweis - Buchungsstellen-Zeile ausgeben - dienend
412        Eine Folge-Zeile fÃŒr eine dienende Buchung ausgeben. */
413        global $gkz, $showkey, $trclass, $bartkey, $bart, $bartstory, $anteil;
414
415        $bvnr=str_pad($lfdnran, 4, "0", STR_PAD_LEFT);
416        $filler=str_repeat("&nbsp;", $ebene - 2); // 3 und 4 EinrÃŒcken
417        if ($und){$filler.="und ";}; // Unterscheidung Hierarchie (Ebene wechselt) von Liste (gleiche Ebene)
418        echo "\n<tr class='".$trclass."'>"
419        ."\n\t<td title='Ebene ".$ebene."'>".$filler."an</td>"
420        ."\n\t<td class='dien' title='".$bartstory."'>"; // Sp.2 Buchungsart
421        if ($showkey) {echo "<span class='key'>".$bartkey."</span> ";}
422        echo $bart."</td>"
423        ."\n\t<td class='dien'>".$anteil."</td>"; // Sp.3 Anteil
424
425        // Sp.4 GB-Bezirk
426        echo "\n\t<td class='dien' title='Grundbuch-Bezirk'>";
427                if ($showkey) {echo "<span class='key'>".$bezkey."</span> ";}
428                echo htmlentities($beznam, ENT_QUOTES, "UTF-8")
429        ."</td>"
430        ."\n\t<td class='dien' title='".$blattart."'>".$blatt."</td>" // Sp.5
431        ."\n\t<td class='dien' title='Bestandsverzeichnis-Nummer'>".$bvnr."</td>" // Sp.6
432        ."\n\t<td class='dien'></td>";
433
434        echo "\n\t<td>\n\t\t<p class='nwlink noprint'>"; // Sp.8 Link
435
436        // Link Bestand Blatt
437        if ($showkey) {echo "<span class='key'>".$blattartkey."</span>";} // Blatt-Art
438        echo "\n\t\t\t<a href='alkisbestnw.php?gkz=".$gkz."&amp;gmlid=".$gbgml;
439                if ($showkey) {echo "&amp;showkey=j";}
440                echo "#bvnr".$lfdnran."' title='Zum Grundbuchnachweis des dienenden Blattes'>".$blattart
441        ." <img src='ico/GBBlatt_link.png' width='16' height='16' alt=''></a>";
442
443        if ($bartkey < 2000){
444                // Link Buchung BVNR nur fÃŒr GrundstÃŒck usw.
445                echo "<br>\n\t\t\t<a href='alkisgsnw.php?gkz=".$gkz."&amp;gmlid=".$gml_bsan;
446                if ($showkey) {echo "&amp;showkey=j";}
447                echo "' title='Grundst&uuml;cksnachweis'>Buchung <img src='ico/Grundstueck_Link.png' width='16' height='16' alt=''></a>";       
448        }
449
450        echo "\n\t\t</p>"
451        ."\n\t</td>\n</tr>";
452}
453
454function bnw_bsdaten($gml_h, $ebene) {
455/*      Bestandsnachweis - Buchungsstellen-Daten
456        "dienende" Buchungsstellen suchen. Miteigentumsanteil, Erbbaurecht usw.
457        Return: gml_id der dienenden Buchungsstelle wenn gefunden? Sonst Leerstring */
458        global $dbg, $bartkey, $bart, $bartstory, $anteil;
459
460//      dann "dienende" Buchungsstellen
461//  sh=herrschend          sd=dienend
462//  ax_buchungsstelle >zu> ax_buchungsstelle (des gleichen Blattes)
463//  ax_buchungsstelle >an> ax_buchungsstelle (anderes Blatt, z.B Erbbaurecht an)
464//      - "zu" kommt in der Praxis (NRW) nicht vor, wird hier nicht berÃŒcksichtigt
465
466        if ($ebene > 5) {echo "\n<p class='err'>Ungewöhnlich tiefe Schachtelung ".$ebene." der Buchungs-Stellen.</p>";}
467
468        $sql ="SELECT sd.gml_id, sd.buchungsart, sd.zaehler, sd.nenner, sd.laufendenummer AS lfd, sd.beschreibungdesumfangsderbuchung AS udb, "
469        ."sd.nummerimaufteilungsplan AS nrap, sd.beschreibungdessondereigentums AS sond, "
470        ."wb.beschreibung AS bart, wb.dokumentation, "
471        ."b.gml_id as gbgml, b.bezirk, b.buchungsblattnummermitbuchstabenerweiterung AS blatt, b.blattart, "
472        ."bb.beschreibung AS blattartv, z.bezeichnung AS beznam "
473        ."FROM ax_buchungsstelle sh "
474        ."JOIN ax_buchungsstelle sd ON sd.gml_id=ANY(sh.an) "
475        ."JOIN ax_buchungsblatt b ON b.gml_id=sd.istbestandteilvon "   
476        ."LEFT JOIN ax_buchungsart_buchungsstelle wb ON sd.buchungsart = wb.wert "
477        ."LEFT JOIN ax_buchungsblattbezirk z ON b.land=z.land AND b.bezirk=z.bezirk ".UnqKatAmt("b","z")
478        ."LEFT JOIN ax_blattart_buchungsblatt bb ON b.blattart = bb.wert "
479        ."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 "
480        ."ORDER BY sd.laufendenummer;";
481        $v=array($gml_h); // gml_id "herrschende" B-Stelle
482        $resan=pg_prepare("", $sql);
483        $resan=pg_execute("", $v);
484        if (!$resan) {
485                echo "\n<p class='err'>Fehler bei 'dienende Buchungsstelle'.</p>";
486                if ($dbg > 2) {echo "\n<p class='dbg'>SQL=<br>".htmlentities(str_replace("$1", "'".$gml_bs."'", $sql), ENT_QUOTES, "UTF-8")."</p>";}
487        }
488        $zeianz=pg_num_rows($resan); // Zeilen-Anzahl = Returnwert
489        //if ($dbg > 0) {echo "\n<p class='dbg'>Auf Ebene ".$ebene.": Anzahl diennende Buchungs-Stellen = ".$zeianz.".</p>";}
490        $und = false; // mehrfaches "Recht an" auf gleicher Ebene
491        while($row= pg_fetch_assoc($resan)) {
492                $gml_bsan=$row["gml_id"];       // id der dien. BS
493                $blatt=ltrim($row["blatt"], "0");               
494
495                // als Global-Var zur Sub-Function:
496                $bartkey=$row["buchungsart"];   
497                $bart=$row["bart"]; // Buchungsart, entschlÃŒsselt
498                $bartstory=htmlentities($row["dokumentation"], ENT_QUOTES, "UTF-8");
499                if ($row["zaehler"] == "") {$anteil = "";}
500                else {$anteil = $row["zaehler"]."/".$row["nenner"];}
501
502                // Zeile ausgeben Buchungsstelle dienend
503                bnw_bszeile_d($row["bezirk"], $row["beznam"], $blatt, $row["blattart"], $row["blattartv"], $row["lfd"], $row["gbgml"], $gml_bsan, $ebene, $und);
504                $und = true;
505                if ($row["nrap"] != "") { // Nr im Auft.Plan
506                        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>";
507                }
508                if ($row["sond"] != "") { // Sondereigentumsbeschreibung
509                        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>";
510                }
511
512                // Rekursiver Aufruf der gleichen Function, weitere Ebene dienend?
513                $tiefer = bnw_bsdaten($gml_bsan, ($ebene + 1));
514                If ($tiefer == 0) {  // Wenn nicht, dann kann es FlurstÃŒcke dazu geben
515                        $fscnt= bnw_fsdaten($gml_bsan, false); // FlurstÃŒcksdaten
516                }
517        }
518        pg_free_result($resan);
519        return $zeianz;
520}
521
522function bnw_fsdaten($gml_bs, $mit_buchung_link) {
523/*      Bestandsnachweis - FlurstÃŒcksdaten
524        Die Tabellenzeilen mit den FlurstÃŒcksdaten zu EINER Buchungsstelle im Bestandsnachweis ausgeben.
525        Die Funktion wird entweder aufgerufen fÃŒr die Buchungen direkt auf dem GB (Normalfall)
526        oder bei Erbbaurecht fÃŒr die mit "an" verknÃŒpften Buchungsstellen der untersten Ebene (dienende Buchung).
527        Der Tabellenkopf wird im aufrufenden Programm ausgegeben.
528        Return: Anzahl der ausgegebenen FlurstÃŒcke */
529        global $dbg, $gkz, $showkey, $filtkreis, $filtgem, $trclass, $katAmtMix, $lfdnr, $altlfdnr, $bartkey, $bart, $bartstory, $anteil;
530
531        $sql="SELECT g.gemarkungsnummer, g.bezeichnung, f.gml_id, f.flurnummer, f.zaehler, f.nenner, f.amtlicheflaeche "
532        ."FROM ax_flurstueck f LEFT JOIN ax_gemarkung g ON f.land=g.land AND f.gemarkungsnummer=g.gemarkungsnummer ".UnqKatAmt("f","g")
533        ."WHERE f.endet IS NULL AND g.endet IS NULL AND f.istgebucht = $1 ";
534        if ($filtgem === '') { // ungefiltert
535                $v=array($gml_bs);
536        } else {
537                $sql.="AND f.gemeindezugehoerigkeit_kreis = $2 AND f.gemeindezugehoerigkeit_gemeinde = $3 "; // ZustÀndiges Gebiet
538                $v=array($gml_bs, $filtkreis, $filtgem);
539        }
540        $sql.="ORDER BY f.gemarkungsnummer, f.flurnummer, f.zaehler, f.nenner;";
541        $resf = pg_prepare("", $sql);
542        $resf = pg_execute("", $v);
543        if (!$resf) {echo "\n<p class='err'>Fehler bei Flurst&uuml;ck</p>";}
544        $zeianz=pg_num_rows($resf);
545        while($rowf = pg_fetch_assoc($resf)) {
546                $fskenn=$rowf["zaehler"];
547                if ($rowf["nenner"] != "") { // Bruch
548                        $fskenn.="/".$rowf["nenner"];
549                }
550                $flae=number_format($rowf["amtlicheflaeche"],0,",",".") . " m&#178;";
551
552                echo "\n<tr class='".$trclass."'>"; // eine Zeile je Flurstueck
553               
554                // Sp. 1-3 der Tab. Daten aus Buchungsstelle, nicht aus FS
555                if($lfdnr === $altlfdnr) { // gleiches GrundstÃŒck, leer lassen
556                        echo "\n\t<td>&nbsp;</td>"
557                        ."\n\t<td>&nbsp;</td>"
558                        ."\n\t<td>&nbsp;</td>";
559                } else { // Sprungmarke, BVNR
560                        $bvnr=str_pad($lfdnr, 4, "0", STR_PAD_LEFT);
561                        echo "\n\t<td id='bvnr".$bvnr."'>"; // Sprungmarke
562                                echo "<span class='wichtig'>".$bvnr."</span>"
563                        ."\n\t</td>";
564                        echo "\n\t<td title ='".$bartstory."'>"; // Buchungsart
565                                if ($showkey) {echo "<span class='key'>".$bartkey."</span>&nbsp;";}
566                                echo $bart;
567                        echo "</td>"
568                        ."\n\t<td>&nbsp;</td>"; // Anteil
569                        $altlfdnr=$lfdnr;
570                }
571
572                // Sp. 4-7 aus FlurstÃŒck
573                echo "\n\t<td>";
574                if ($showkey) {echo "<span class='key'>".$rowf["gemarkungsnummer"]."</span> ";}
575                echo $rowf["bezeichnung"]."</td>"
576                ."\n\t<td>".$rowf["flurnummer"]."</td>\n\t<td class='fsnr'><span class='wichtig'>".$fskenn."</span></td>"
577                ."\n\t<td class='fla'>".$flae."</td>";
578                echo "\n\t<td>\n\t\t<p class='nwlink noprint'>";
579
580                // Buchung BVNR
581                If ($mit_buchung_link == true) { // nur bei GrundstÃŒck
582                        echo "\n\t\t\t<a href='alkisgsnw.php?gkz=".$gkz."&amp;gmlid=".$gml_bs;
583                        if ($showkey) {echo "&amp;showkey=j";}
584                        echo "' title='Grundst&uuml;cksnachweis'>Buchung <img src='ico/Grundstueck_Link.png' width='16' height='16' alt=''></a>&nbsp;";                 
585                        $mit_buchung_link = false; // nur in erster Zeile
586                }
587                // Flurstk.
588                echo "\n\t\t\t<a href='alkisfsnw.php?gkz=".$gkz."&amp;gmlid=".$rowf["gml_id"]."&amp;eig=n";
589                        if ($showkey)   {echo "&amp;showkey=j";}
590                        echo "' title='Flurst&uuml;cksnachweis'>Flurst&uuml;ck "
591                        ."<img src='ico/Flurstueck_Link.png' width='16' height='16' alt=''></a>"
592                ."\n\t\t</p>\n\t</td>\n</tr>";
593        }
594        pg_free_result($resf);
595        return $zeianz;
596}
597
598function eigentuemer($gmlid, $mitadresse, $lnkclass) {
599        // Tabelle mit Eigentuemerdaten zu einem Grundbuchblatt ausgeben
600        //  Sp.1="EigentÃŒmer" Sp.2=NamNr, Sp.3=Name/Adresse, Sp.4=Link
601        // Parameter:
602        //      $gmlid = ID GB-Blattes
603        //      $mitadresse = Option (true/false) ob die Adresszeile ausgegeben werden soll
604        // Return = Anzahl Namensnummern
605
606        // Schleife 1: N a m e n s n u m m e r
607        // Beziehung: ax_namensnummer >istBestandteilVon> ax_buchungsblatt
608        global $dbg, $gkz, $showkey;
609
610        if ($lnkclass == "") {
611                $lnkvor = "";
612                $lnknach = "";
613        } else { // Link ÃŒber Java-Class "imFenster" aus alkisinlayausk.php
614                $lnkvor  = "javascript:".$lnkclass."(\"";
615                $lnknach = "\")";
616        }
617
618        $sqln="SELECT n.gml_id, n.laufendenummernachdin1421 AS lfd, n.zaehler, n.nenner, n.artderrechtsgemeinschaft AS adr, n.beschriebderrechtsgemeinschaft as beschr, n.eigentuemerart, n.anlass, n.benennt, wn.beschreibung AS adrv, we.beschreibung AS eiartv "
619        ."FROM ax_namensnummer n "
620        ."LEFT JOIN ax_artderrechtsgemeinschaft_namensnummer wn ON n.artderrechtsgemeinschaft = wn.wert "
621        ."LEFT JOIN ax_eigentuemerart_namensnummer we ON n.eigentuemerart = we.wert "
622        ."WHERE n.istbestandteilvon= $1 AND n.endet IS NULL ORDER BY n.laufendenummernachdin1421;";
623        // VerknÃŒpfungsfeld "benennt" ist leer bei "Beschrieb der Rechtsgemeinschaft".
624
625        $v = array($gmlid); // GB-Blatt
626        $resn = pg_prepare("", $sqln);
627        $resn = pg_execute("", $v);
628
629        if (!$resn) {
630                echo "\n<p class='err'>Fehler bei Eigent&uuml;mer</p>"; // kein Fehler bei Blattarten > 1000
631                //if ($dbg > 2) {echo "\n<p class='dbg'>SQL=<br>".str_replace("$1", "'".$gmlid."'", $sqln )."</p>";}
632        }
633
634        $n=0; // Z.NamNum.
635        while($rown = pg_fetch_assoc($resn)) {
636                $gmlnn=$rown["gml_id"];
637                $namnum=kurz_namnr($rown["lfd"]);
638                $rechtsg=$rown["adr"];
639                $eiartkey=$rown["eigentuemerart"]; // Key
640                $eiart=$rown["eiartv"]; // Value
641        //      if ($dbg > 1) {echo "\n<p class='dbg'>Eigent&uuml:merart = '".$eiartkey."' = '".$eiart."'</p>";}
642
643                echo "\n\t<tr>";
644                        if($n === 0) { // erste EigentÃŒmer-Zeile zu einer Buchung
645                                echo "\n\t\t<td class='ll'><img src='ico/Eigentuemer_2.png' width='16' height='16' alt=''> Eigent&uuml;mer:</td>"; // 1
646                        } else { // Folgezeile
647                                echo "\n\t\t<td class='ll'>&nbsp;</td>"; // 1
648                        }
649
650                        if ($rechtsg != "" ) { // Erbengemeinschaft usw.
651                                echo "\n\t\t<td colspan='2'>"; // 2-3
652                                if ($rechtsg == 9999) { // sonstiges
653                                        echo "\n\t\t\t<p class='zus' title='Beschrieb der Rechtsgemeinschaft'>".htmlentities($rown["beschr"], ENT_QUOTES, "UTF-8")."</p>";
654                                } else {
655                                        echo "\n\t\t\t<p class='zus' title='Art der Rechtsgemeinschaft'>".htmlentities($rown["adrv"], ENT_QUOTES, "UTF-8")."</p>";
656                                }
657                        } else { // Namensnummer
658                                echo "\n\t\t<td class='nanu' title='Namens-Nummer'>\n\t\t\t<p>".$namnum."&nbsp;</p>\n\t\t</td>" // 2
659                                . "\n\t\t<td>"; // 3
660
661                        }
662                        //if ($rown["anlass"] > 0 ) {echo "<p>Anlass=".$rown["anlass"]."</p>";}
663
664                        // Andere Namensnummern?  Relation:  ax_namensnummer >bestehtAusRechtsverhaeltnissenZu>  ax_namensnummer
665                        // Die Relation 'Namensnummer' besteht aus RechtsverhÀltnissen zu 'Namensnummer' sagt aus, dass mehrere Namensnummern zu einer Rechtsgemeinschaft gehören können.
666                        // Die Rechtsgemeinschaft selbst steht unter einer eigenen AX_Namensnummer, die zu allen Namensnummern der Rechtsgemeinschaft eine Relation besitzt.
667
668                // Schleife 2: P e r s o n
669                // Beziehung: ax_person  <benennt<  ax_namensnummer
670                $sqlp="SELECT nachnameoderfirma, vorname, geburtsname, to_char(cast(geburtsdatum AS date),'DD.MM.YYYY') AS geburtsdatum, namensbestandteil, akademischergrad "
671                ."FROM ax_person WHERE gml_id= $1 AND endet IS NULL;";
672                $gmlpers=$rown["benennt"]; // leer bei RechtsverhÀltnis
673                $v = array($gmlpers); // gml_id von ax_person
674                $resp = pg_prepare("", $sqlp);
675                $resp = pg_execute("", $v);
676                if (!$resp) {
677                        echo "\n\t<p class='err'>Fehler bei Person</p>";
678                        if ($dbg > 2) {echo "\n<p class='err'>SQL=<br>".str_replace("$1", "'".$gmlpers."'", $sqlp)."</p>";}
679                }
680
681                $i=0; // cnt Person
682                while($rowp = pg_fetch_assoc($resp)) { // Schleife weglassen: "benennt" ist KEIN Array!
683                        $diePerson=""; //++ Anrede?
684                        if ($rowp["akademischergrad"] != "") {$diePerson=$rowp["akademischergrad"]." ";}
685                        $diePerson.=$rowp["nachnameoderfirma"];
686                        if ($rowp["vorname"] != "") {$diePerson.=", ".$rowp["vorname"];}
687                        if ($rowp["namensbestandteil"] != "") {$diePerson.=". ".$rowp["namensbestandteil"];}
688                        if ($rowp["geburtsdatum"] != "") {$diePerson.=", geb. ".$rowp["geburtsdatum"];}
689                        if ($rowp["geburtsname"] != "") {$diePerson.=", geb. ".$rowp["geburtsname"];}
690                        $diePerson=htmlentities($diePerson, ENT_QUOTES, "UTF-8"); // Umlaute
691
692                        echo "\n\t\t\t<p class='geig' title='Eigent&uuml;merart: ".$eiart."'>".$diePerson."</p>\n\t\t</td>"; // 3 - Person in Sp.3 hinter NamNum (Sp.2)
693                        echo "\n\t\t<td>\n\t\t\t<p class='nwlink noprint'>"; // 4
694                                if ($showkey AND $eiartkey != '') {echo "<span class='key' title='Eigent&uuml;merart'>(".$eiartkey.")</span> ";}
695                                echo "\n\t\t\t\t<a href='".$lnkvor."alkisnamstruk.php?gkz=".$gkz."&amp;gmlid=".$gmlpers;
696                                if ($showkey) {echo "&amp;showkey=j";}
697                                if ($eiartkey == "") {$eiart="Eigent&uuml;mer" ;} // Default. Ersatz-Text, wenn nicht gefÃŒllt
698                                echo $lnknach."' title='vollst&auml;ndiger Name und Adresse eines Eigent&uuml;mers'>".$eiart
699                                ." \n\t\t\t\t\t<img src='ico/Eigentuemer.png' width='16' height='16' alt=''>\n\t\t\t\t</a>\n\t\t\t</p>"
700                        ."\n\t\t</td>" // 4
701                        ."\n\t</tr>";
702
703                        if ($mitadresse) {
704                                // Schleife 3: optional  A d r e s s e  zur Person
705                                $sqla ="SELECT a.gml_id, a.ort_post, a.postleitzahlpostzustellung AS plz, a.strasse, a.hausnummer, a.bestimmungsland "
706                                ."FROM ax_anschrift a JOIN ax_person p ON a.gml_id=ANY(p.hat) WHERE p.gml_id= $1 AND a.endet IS NULL AND p.endet IS NULL ORDER BY a.beginnt DESC LIMIT 2;";
707                                $v = array($gmlpers);
708                                $resa = pg_prepare("", $sqla);
709                                $resa = pg_execute("", $v);
710                                if (!$resa) {
711                                        echo "\n\t<p class='err'>Fehler bei Adressen</p>";
712                                        if ($dbg > 2) {echo "\n<p class='err'>SQL=<br>".str_replace("$1", "'".$gmlpers."'", $sqla)."</p>";}
713                                }
714                                $j=0;
715                                while($rowa = pg_fetch_assoc($resa)) {
716                                        $j++;
717                                        if ($j === 1) { // erste ("jÃŒngste") Adresse anzeigen
718                                                $gmla=$rowa["gml_id"];
719                                                $plz=$rowa["plz"]; // integer
720                                                if($plz === 0) {
721                                                        $plz="";
722                                                } else {
723                                                        $plz=str_pad($plz, 5, "0", STR_PAD_LEFT);
724                                                }
725                                                $ort=htmlentities($rowa["ort_post"], ENT_QUOTES, "UTF-8");
726                                                $str=htmlentities($rowa["strasse"], ENT_QUOTES, "UTF-8");
727                                                $hsnr=$rowa["hausnummer"];
728                                                $land=htmlentities($rowa["bestimmungsland"], ENT_QUOTES, "UTF-8");
729
730                                                echo "\n\t<tr>"
731                                                        ."\n\t\t<td class='ll'>&nbsp;</td>" // 1
732                                                        ."\n\t\t<td>&nbsp;</td>" // 2
733                                                        ."\n\t\t<td><p class='gadr'>"; // 3
734                                                        if ($str.$hsnr != "") {echo $str." ".$hsnr."<br>";}
735                                                        if ($plz.$ort != "") {echo $plz." ".$ort;}
736                                                        if ($land != "" and $land != "DEUTSCHLAND") {echo ", ".$land;}
737                                                echo "</p></td>" // 3
738                                                        ."\n\t\t<td>&nbsp;</td>\n\t</tr>"; // 4
739                                        } else { // manchmal doppelte Angaben
740                                                echo "\n\t<tr>"
741                                                        ."\n\t\t<td class='ll'>&nbsp;</td>" // 1
742                                                        ."\n\t\t<td>&nbsp;</td>" // 2
743                                                        ."\n\t\t<td><p class='dbg' title='Siehe Auskunft zur Person'>weitere Adresse</p></td>" // 3
744                                                        ."\n\t\t<td>&nbsp;</td>\n\t</tr>"; // 4
745                                        }
746                                } // Ende Loop Adresse zur Person
747                                pg_free_result($resa);
748                        }
749                        // 'keine Adresse' kann vorkommen, z.B. "Deutsche Telekom AG"
750                        $i++; // cnt Person
751
752                        $zaehler=$rown["zaehler"];
753                        if ($zaehler != "") { // Anteil als eigene Tab-Zeile
754                                $zaehler=str_replace(".", ",", $zaehler); // Dezimal-KOMMA wenn dem Notar der Bruch nicht reicht
755                                $nenner=str_replace(".", ",", $rown["nenner"]);
756                                $comnt="Anteil der Berechtigten in Bruchteilen (Par. 47 GBO) an einem gemeinschaftlichen Eigentum (Grundst&uuml;ck oder Recht).";
757                                echo "\n\t<tr>"
758                                ."\n\t\t<td class='ll'>&nbsp;</td>" // 1
759                                ."\n\t\t<td>&nbsp;</td>" // 2
760                                ."\n\t\t<td><p class='avh' title='".$comnt."'>".$zaehler."/".$nenner." Anteil</p></td>" // 3
761                                ."\n\t\t<td>&nbsp;</td>\n\t</tr>"; // 4
762                        }
763                } // End Loop Person
764                pg_free_result($resp);
765
766                if ($i === 0) { // KEINE Person. benennt ist leer. Das kommt vor hinter der Zeile "Erbengemeinschaft" und ist dann KEIN Fehler
767                        if ($dbg > 1) {echo "\n\t\t\t<p class='dbg'>Rechtsgemeinschaft = '".$rechtsg."'</p>";}
768                        if ($rechtsg !== '9999') {
769                                echo "\n<p class='err'>(Die Person mit der ID '".$gmlpers."' fehlt im Datenbestand)</p>";
770                        }
771                        echo "</td>\n\t\t<td>&nbsp;</td>\n\t</tr>";
772                }
773                $n++; // cnt NamNum
774        } // End Loop NamNum
775
776        pg_free_result($resn);
777        return $n;
778}
779
780function werteliste ($bez ,$sqlin) {
781        // Eine oder mehrere EntschlÃŒsselungen in eine Zeile ausgeben.
782        // Dient dazu, SchlÃŒssel-ARRAYs auflösen ohne die Zeile im JOIN mehrfach aufzulisten
783        // Anwendung: FS-Nachweis BodenschÀtzung
784        global $dbg;
785
786        if ($bez === 'e') {$tabelle = 'ax_entstehungsartoderklimastufewasserverhaeltnisse_bodensc';}
787        elseif ($bez === 's') {$tabelle = 'ax_sonstigeangaben_bodenschaetzung';}
788
789        $sql="SELECT wert, beschreibung FROM ".$tabelle." WHERE wert IN (".$sqlin.") ORDER BY wert LIMIT $1 ;";
790        $v = array('9');
791        $res = pg_prepare("", $sql);
792        $res = pg_execute("", $v);
793        if (!$res) {
794                echo "\n<p class='err'>Fehler bei Werteliste.</p>";
795                if ($dbg > 2) {echo "\n<p class='dbg'>SQL=<br>".htmlentities($sql, ENT_QUOTES, "UTF-8")."</p>";}
796                return;
797        }
798        $i=0;
799        while($row = pg_fetch_assoc($res)) {
800                echo " ".$row["beschreibung"];
801                $i++;   
802        }
803        pg_free_result($res);
804        if ($i === 0) {
805                echo "(kein Treffer)";
806                if ($dbg > 2) {echo "\n<p class='dbg'>SQL=<br>".htmlentities($sql, ENT_QUOTES, "UTF-8")."</p>";}
807        }
808        return;
809}
810
811function fortfuehrungen($entsteh, $dbzeart, $dbzename) {
812// Tabelle im Kopf von FlurstÃŒck und FS-Historie. 2 Z./Sp. Entstehung/FortfÃŒhrung
813// Parameter: Die DB-Spalten "zeitpunktderentstehung", "zeigtaufexternes_art" und "zeigtaufexternes_name"
814        global $dbg, $showkey;
815
816//      if ($dbg > 2) {echo "<p class='dbg'>function fortfuehrungen<br>1: ".$dbzeart."<br>2: ".$dbzename."</p>";}
817 
818        echo "\n\t<table class='fsd'>" // FS-Daten 2 Spalten
819                ."\n\t\t<tr>\n\t\t\t<td>Entstehung</td>"
820                ."\n\t\t\t<td title='Zeitpunkt der Enstehung'>".$entsteh."</td>\n\t\t</tr>";
821        echo "\n\t<tr>"
822                ."\n\t\t\t<td>";
823        $arrart=explode(",", trim($dbzeart, "{}"));
824        foreach($arrart AS $artval) { // Zeile fÃŒr jedes Element
825                $artval=trim($artval, '"');
826// ibR: {"Entstehung des FlurstÃŒcks/5200","Letzte FortfÃŒhrung des FlurstÃŒcks/5300",urn:adv:fachdatenverbindung:AA_Antrag}
827// AED: {http://geoportal.kreis-herford.de/alkis/alkis.html#5200,http://geoportal.kreis-herford.de/alkis/alkis.html#5300,urn:adv:fachdatenverbindung:AA_Antrag}
828
829                $artpos=strpos($artval, '#');
830                if ($artpos > 0) { // AED
831                        $artkey=substr($artval, $artpos + 1);
832                        switch ($artkey) { // keine SchlÃŒsseltabelle?
833                                case '5100': $arttxt="Grundst&uuml;ckshinweis (aus ALB-Historie)"; break;
834                                case '5200': $arttxt="Entstehung des Flurst&uuml;cks"; break;
835                                case '5300': $arttxt="Letzte Fortf&uuml;hrung des Flurst&uuml;cks"; break;
836                                default: $arttxt=$artval;
837                        }
838                        if ($showkey) {echo "<span class='key'><a target='_blank' href='".$artval."'>".$artkey."</a></span> ";}
839                        echo $arttxt."<br>";
840                } else {
841                        $artpos=strpos($artval, '/');
842                        if ($artpos > 0) { // ibR
843                                $artkey=substr($artval, $artpos + 1);
844                                $arttxt=substr($artval, 0, $artpos);
845                                if ($showkey) {echo "<span class='key'>".$artkey."</span> ";}
846                                echo $arttxt."<br>";
847                        }
848                }
849        }
850        echo "</td>"
851        ."\n\t\t\t<td title='Jahrgang / Fortf&uuml;hrungsnummer - Fortf&uuml;hrungsart'>";
852        $arrname=explode(",", trim($dbzename, "{}"));
853        foreach($arrname AS $val) {
854                echo trim($val, '"')."<br>";
855        }
856        echo "</td>"
857        ."\n\t\t</tr>"
858        ."\n\t</table>";
859}
860
861function fskenn_dbformat ($fskennz) {
862        // Erzeugt, wenn notwendig, aus dem Bindetrich-getrennten FlurstÃŒckskennzeichen "llgggg-fff-nnnn/zz.nn" oder "gggg-ff-nnn/zz"
863        // das ALKIS-DB-interne Format des FlurstÃŒckskennzeichens.
864        global $defland;
865        $arr=explode("-", $fskennz, 4); // zerlegen
866        $zgemkg=trim($arr[0]);
867        if (strlen($zgemkg) === 20 and !isset($arr[1])) {
868                $fskzdb=$zgemkg; // ist schon Datenbank-Feldformat
869        } else { // Das Kennzeichen auseinander nehmen.
870                if (strlen($zgemkg) === 6) {
871                        $land=substr($zgemkg, 0, 2);
872                        $zgemkg=substr($zgemkg, 2, 4);
873                } else { // kein schöner Land ..
874                        $land=$defland; // Default-Land aus config
875                }
876                $zflur=str_pad($arr[1], 3 , "0", STR_PAD_LEFT); // Flur-Nr
877                $zfsnr=trim($arr[2]); // FlurstÃŒcke-Nr
878                $zn=explode("/", $zfsnr, 2); // Bruch?
879                $zzaehler=str_pad(trim($zn[0]), 5 , "0", STR_PAD_LEFT);
880                if (isset($zn[1])) {
881                        $znenner=trim($zn[1]);
882                } else {
883                        $znenner="";
884                }
885                if (trim($znenner, " 0.") === "") { // kein Bruch oder nur Nullen
886                        $znenner="____"; // in DB-Spalte mit Tiefstrich aufgefÃŒllt
887                } else {
888                        $zn=explode(".", $znenner, 2); // .00 wegwerfen
889                        $znenner=str_pad($zn[0], 4 , "0", STR_PAD_LEFT);
890                }
891                // die Teile stellengerecht wieder zusammen setzen             
892                $fskzdb=$land.$zgemkg.$zflur.$zzaehler.$znenner.'__'; // FS-Kennz. Format Datenbank
893        }
894        return $fskzdb;
895}
896
897?>
Note: See TracBrowser for help on using the repository browser.