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

Revision 412, 27.7 KB checked in by frank.jaeger, 5 years ago (diff)

Anpassung der ALKIS-Auskunft (PHP) an die Full-Schema-Version des ALKIS-Importers 3.0

Line 
1<?php
2/*      Modul: alkisfkt.php
3
4        ALKIS-Buchauskunft, Kommunales Rechenzentrum Minden-Ravensberg/Lippe (Lemgo).
5        Functions
6
7        Version:
8        2016-02-24 Version fuer norGIS-ALKIS-Import, "function linkgml" raus. Case-EntschlÃŒsselung raus.
9        2016-03-03 Hinweis auf Datenfehler wenn "ax_person" fehlt in function "eigentuemer"
10        2016-03-14 Kleine Korrekturen
11        2016-11-29 Gemeinsam genutzte Datenbanken ermöglichen (Filter Gemeinde)
12        2017-06-08 gestreifte Tabelle, Feinkorrekturen
13        2017-10-17 Deutsches Datumsformat fÃŒr Geburtsdatum der Person
14        2017-11-03 neue function werteliste()
15        2017-12-20 Default Anzeigewert "EigentÃŒmer" im Link fÃŒr leere EigentÃŒmerart, JÃŒngste Adresse zur Person verwenden.
16        2018-04-23 Berechtigte Buchungen im FS-Nachw. verbessern. Neue Spalte statt Überschriften fÃŒr "EigentÃŒmer" und "Berechtigte Buchungen".
17        2018-05-03 GrundstÃŒcksnachweis
18        2018-11-09 Umstellung Full-Schema
19
20        ++ ToDo: Parameter $lnkclass in eigentuemer() und $jfenster in buchung_anzg() vereinheitlichen
21*/
22
23function footer($gmlid, $link, $append) {
24        // Einen Seitenfuss ausgeben.
25        // Die Parameter &gkz= und &gmlid= kommen in allen Modulen einheitlich vor
26        // Den URL-Parameter "&showkey=j/n" umschalten lassen.
27        // $append wird angehaengt wenn gefuellt. Anwendung: &eig=j bei FS-NW, &ltyp=m/p/o bei Lage
28        global $gkz, $showkey, $hilfeurl, $auth, $debug;
29
30        // S c r e e n - Foot
31        echo "\n<div class='confbereich noprint'>"
32        ."\n\t<table class='outer'>\n\t<tr>";
33
34        // Spalte 1: Info Benutzerkennung
35        if ($auth == "mapbender") {
36                $customer=$_SESSION["mb_user_name"];
37                echo "\n\t\t<td title='Info'><i>Benutzer:&nbsp;".$customer."</i></td>";
38        } else {
39                echo "\n\t\t<td>&nbsp;</td>";
40        }
41
42        // Spalte 2: Umschalter
43        echo "\n\t\t<td title='Konfiguration'>";
44                $mylink ="\n\t\t\t<a class='keyswitch' href='".$link."gkz=".$gkz."&amp;gmlid=".$gmlid.$append;
45                if ($showkey) { // Umschalten SchlÃŒssel ein/aus
46                        echo $mylink."&amp;showkey=n' title='Verschl&uuml;sselungen ausblenden'>Schl&uuml;ssel aus</a>";
47                } else {
48                        echo $mylink."&amp;showkey=j' title='Verschl&uuml;sselungen anzeigen'>Schl&uuml;ssel ein</a>";
49                }
50                // TemporÀr eine Ansicht ohne Entwicklungsumgebung
51                if ($debug > 0) {
52                        echo "&nbsp;|&nbsp;".$mylink."&amp;nodebug=j' title='Debug-Ausgaben tempor&auml;r abschalten'>Ansicht ohne Testausgaben</a>";
53                }
54        echo "\n\t\t</td>";
55
56        // Spalte 3
57        echo "\n\t\t<td title='Hilfe'>"
58                ."\n\t\t\t<p class='nwlink'>\n\t\t\t\t<a target='_blank' href='".$hilfeurl."' title='Dokumentation'>Hilfe zur ALKIS-Auskunft</a>\n\t\t\t</p>\n\t\t</td>"
59                ."\n\t</tr>\n\t</table>"
60        ."\n</div>\n";
61
62        // P r i n t - Foot
63        if ($auth == "mapbender") {
64        //      $customer=$_SESSION["mb_user_name"];
65                echo "\n<p class='onlyprint'><i>Mapbender-Benutzer:&nbsp;".$customer."</i></p>";
66        }
67        return 0;
68}
69
70function ber_bs_zaehl($gmls) {
71        // Berechtigte Buchungs-Stellen zaehlen.
72
73        // Buchungstelle dienend <(Recht)an< Buchungstelle herrschend
74        $sql ="SELECT count(sh.gml_id) AS anz FROM ax_buchungsstelle sd JOIN ax_buchungsstelle sh ON sd.gml_id=ANY(sh.an) "
75        ."WHERE sd.gml_id= $1 AND sh.endet IS NULL AND sd.endet IS NULL;";
76        $v = array($gmls); // GML dienende Buchungs-Stelle
77        $resan = pg_prepare("", $sql);
78        $resan = pg_execute("", $v);
79        if (!$resan) {echo "\n<p class='err'>Fehler bei 'berechtigte Buchungsstellen zaehlen'.</p>";}
80        $rowan = pg_fetch_assoc($resan);
81        $anz=$rowan["anz"];
82        pg_free_result($resan);
83        return $anz; // Funktionswert = Anzahl der berechtigten Buchungen
84}
85
86function buchung_anzg($gmlbs, $eig, $jsfenster, $gml_fs, $trtyp) {
87        // In einem FS-Nachw. EINE Buchungsstelle anzeigen.
88        // Parameter:
89        //  $gmlbs: GML-ID der anzuzeigenden Buchungs-Stelle
90        //  $eig: EigentÃŒmer ausgeben j/n
91        //  $jsfenster: Javascript-Funktion zum Verlassen des Feature-Info-Fensters verwenden (bool)
92        //  $gml_fs: GML-ID des FlurstÃŒcke (nur bei erstem Aufruf in einem FS-Nachweis notwendig)
93        //      $trtyp: Tabellen-Zeilen-Typ. Werte: 1="mit GS-Link", 2="ohne GS-Link", 3="ohne GS-Link +Zeile einfÀrben"
94        global $gkz, $debug, $showkey, $bartgrp, $barttypgrp, $stufe;
95
96        $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
97        ."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 "
98        ."FROM ax_buchungsstelle sh "
99        ."JOIN ax_buchungsblatt b ON b.gml_id=sh.istbestandteilvon "
100        ."LEFT JOIN ax_buchungsblattbezirk z ON z.land=b.land AND z.bezirk=b.bezirk "
101        ."LEFT JOIN ax_buchungsart_buchungsstelle a ON sh.buchungsart = a.wert " // entschl. Buchungsart
102        ."LEFT JOIN ax_blattart_buchungsblatt w ON b.blattart = w.wert " // entschl. Blatt-Art
103        ."WHERE sh.gml_id= $1 AND sh.endet IS NULL AND b.endet IS NULL AND z.endet IS NULL;";
104
105        $v = array($gmlbs); // ID dienende Buchungs-Stelle
106        $resbs = pg_prepare("", $sqlbs);
107        $resbs = pg_execute("", $v);
108        if (!$resbs) {
109                echo "\n<p class='err'>Fehler bei 'Buchungsstelle ausgeben'.</p>";
110                if ($debug > 2) {echo "\n<p class='dbg'>SQL=<br>".htmlentities($sqlbs, ENT_QUOTES, "UTF-8")."<br>$1 = gml_id = '".$gmlbs."'</p>";}
111        }
112        $gezeigt=false; // Funktionswert
113        if ($rowbs = pg_fetch_assoc($resbs)) { // ein Treffer
114                $blattkeyber=$rowbs["blattart"]; // Schluessel von Blatt-Art des GB
115                if ($blattkeyber != '5000' or $debug > 1) { // "Fiktives Blatt" nur bei Entwicklung anzeigen
116                        $gezeigt=true; // Funktionswert
117                        $hgml=$rowbs["hgml"]; // GML-ID der (herrschenden) BuchungsStelle
118                        $bartkey=$rowbs["buchungsart"]; // Buchungsart SchlÃŒssel
119                        $bart=$rowbs["bart"]; // Buchungsart Text
120                        $beznam=$rowbs["bezeichnung"]; // Bezirk
121                        $blattartber=$rowbs["blattartv"]; // Wert von Blatt-Art des GB
122                        $nrpl=$rowbs["nrpl"]; // Nr im Auft.plan
123                        $sond=$rowbs["sond"]; // Beschr. d.Sondereigentums
124                        $gbgml=$rowbs["g_gml"]; // GML-ID des Grundbuch-Blattes
125                        $blatt=ltrim($rowbs["blatt"], "0");
126                        $lfd=ltrim($rowbs["lfd"], "0");
127                        if ($bartkey != $bartgrp) { // Wechsel der Buchungsart
128                                $barttitle=$rowbs["barttitle"]; // Buchungsart ErklÀrung
129                                switch (true) { // Die Buchungsart einem Typ (Gruppierung) zuweisen
130                                        case ($bartkey <= 1999): $barttyp = "E"; break; // Eigentum/GrundstÃŒck
131                                        case ($bartkey >= 2000): $barttyp = "R"; break; // GrundstÃŒcksgleiches Recht, z.B. 2101 "Erbbaurecht"
132                                        default: $barttyp = "E"; break;
133                                }
134                                if ($barttypgrp != $barttyp) { // Wenn der Typ wechselt, neue Überschrift in Tabelle
135                                        switch ($barttyp) { // Text der Überschrift
136                                                case "E":
137                                                        if ($eig == 'j') {$h3txt = "Buchung und Eigentum";}
138                                                        else {$h3txt = "Buchung";}
139                                                break;
140                                                case "R": $h3txt = "Grundst&uuml;cksgleiche Rechte"; break;
141                                        }
142                                        if ($barttypgrp == "" and $gml_fs != "") { // die erste Überschrift mit ID und Umschalter
143                                                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
144                                                echo "\n\t\t<td>\n\t\t\t<p class='nwlink noprint'>" // 4
145                                                        ."\n\t\t\t\t<a href='".$_SERVER['PHP_SELF']. "?gkz=".$gkz."&amp;gmlid=".$gml_fs;
146                                                        if ($showkey) {echo "&amp;showkey=j";}
147                                                        if ($eig=="j") { // Umschalter: FS-Nachweis ruft sich selbst mit geaendertem Parameter auf. Positionierung auf Marke "#gb"
148                                                                echo "&amp;eig=n#gb' title='Umschalter: Flurst&uuml;cksnachweis'>ohne Eigent&uuml;mer</a>";
149                                                        } else {
150                                                                echo "&amp;eig=j#gb' title='Umschalter: Flurst&uuml;cks- und Eigent&uuml;mernachweis'>mit Eigent&uuml;mer "
151                                                                ."<img src='ico/EigentuemerGBzeile.png' width='16' height='16' alt=''></a>";
152                                                        }
153                                                echo "\n\t\t\t</p>\n\t\t</td>";
154                                        } else {
155                                                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
156                                        }
157                                        echo "\n\t</tr>";
158                                        $barttypgrp = $barttyp;
159                                }
160
161                                // +++ mehr Abstand oben zur Zeile in .css?
162                                echo "\n\t<tr>" // Buchungsart als Zwischenzeile
163                                        ."\n\t\t<td class='ll'><img src='ico/Grundbuch.png' width='16' height='16' alt=''> Buchungsart:</td>" // 1
164                                        ."\n\t\t<td colspan='2' title='".$barttitle."'>"; // 2-3
165                                                if ($showkey) {echo "<span class='key'>(".$bartkey.")</span> ";}
166                                                echo "<span class='wichtig'>".$bart."</span>"
167                                        ."</td>"
168                                        ."\n\t\t<td></td>" // 4
169                                ."\n\t</tr>";
170                                $bartgrp=$bartkey; // Gruppe merken
171                        } // Ende Wechsel der Buchungsart
172
173                        echo "\n\t<tr>" // Zeile mit 4 Spalten fÃŒr Buchung und EigentÃŒmer
174                                ."\n\t\t<td class='ll'><img src='ico/Grundbuch_zu.png' width='16' height='16' alt=''> Buchung:"; // 1
175                        if ($showkey and $debug > 2) {echo "<br><span class='key'>Stufe ".$stufe."<br>".$hgml."</span> ";}
176                        echo "</td>\n\t\t<td colspan='2'>"; // 2-3
177
178                                        // innere Tabelle: Rahmen mit GB-Kennz.
179                                        if ($blattkeyber == 1000) {
180                                                echo "\n\t\t\t<table class='kennzgb' title='Bestandskennzeichen'>";
181                                        } else {
182                                                echo "\n\t\t\t<table class='kennzgbf' title='Bestandskennzeichen'>"; // dotted
183                                        }
184                                        echo "\n\t\t\t<tr>"
185                                                ."\n\t\t\t\t<td class='head'>Bezirk</td>"
186                                                ."\n\t\t\t\t<td class='head'>";
187                                                if ($showkey) {echo "<span class='key'>".$blattkeyber."</span> ";}
188                                                echo $blattartber."</td>"
189                                                ."\n\t\t\t\t<td class='head'>Lfd-Nr</td>"
190                                        ."\n\t\t\t</tr>";
191
192                                        if ($trtyp == 3) { // Treffer-Grundst. einfÀrben
193                                                echo "\n\t\t\t<tr class='paa'>";
194                                        } else {
195                                                echo "\n\t\t\t<tr>";
196                                        }
197                                        echo "\n\t\t\t\t<td title='Grundbuchbezirk'>";
198                                                if ($showkey) {echo "<span class='key'>".$rowbs["bezirk"]."</span><br>";}
199                                                echo $beznam."</td>"
200                                                ."\n\t\t\t\t<td title='Grundbuch-Blatt'><span class='wichtig'>".$blatt."</span></td>"
201                                                ."\n\t\t\t\t<td title='Bestandsverzeichnis-Nummer (BVNR, Grundst&uuml;ck)'>".$lfd."</td>"
202                                        ."\n\t\t\t</tr>"
203                                        ."\n\t\t\t</table>";
204
205                                        if ($rowbs["zaehler"] <> "") {
206                                                echo "\n\t\t\t<p class='ant'>".$rowbs["zaehler"]."/".$rowbs["nenner"]."&nbsp;Anteil am Flurst&uuml;ck</p>";
207                                        }
208                                        if ($nrpl != "") {
209                                                echo "\n\t\t\t<p class='nrap' title='Nummer im Aufteilungsplan'>Nummer <span class='wichtig'>".$nrpl."</span> im Aufteilungsplan.</p>";
210                                        }
211                                        if ($sond != "") {
212                                                echo "\n\t\t\t<p class='sond' title='Sondereigentum'>Verbunden mit dem Sondereigentum: ".$sond."</p>";
213                                        }
214                                echo "\n\t\t</td>"; // 2-3
215
216                                echo "\n\t\t<td>"; // 4
217                                        echo "\n\t\t\t<p class='nwlink noprint'>";
218                                        // Bestand
219                                                if ($showkey) {echo "<span class='key'>".$blattkeyber."</span> ";}
220                                                $url="alkisbestnw.php?gkz=".$gkz."&amp;gmlid=".$gbgml;
221                                                if ($showkey) {$url.="&amp;showkey=j";}
222                                                if ($jsfenster) {$url="javascript:imFenster(\"".$url."\")";} // Sonderfall "Inlay" aus Feature-Info
223                                                echo "\n\t\t\t\t<a href='".$url."' title='Grundbuchnachweis'>".$blattartber
224                                                        ." <img src='ico/GBBlatt_link.png' width='16' height='16' alt=''>"
225                                                ."</a>";
226                                        // Buchung
227                                                if ($trtyp == 1) {
228                                                        echo "<br>";
229                                                        if ($showkey) {echo "<span class='key'>".$bartkey."</span> ";}
230                                                        $url="alkisgsnw.php?gkz=".$gkz."&amp;gmlid=".$hgml;
231                                                        if ($showkey) {$url.="&amp;showkey=j";}
232                                                        if ($jsfenster) {$url="javascript:imFenster(\"".$url."\")";}
233                                                        echo "\n\t\t\t\t<a href='".$url."' title='GrundstÃŒcksnachweis: ".$bart."'>Buchung"
234                                                                ." <img src='ico/Grundstueck_Link.png' width='16' height='16' alt=''>"
235                                                        ."</a>";
236                                                }
237                                        echo "\n\t\t\t</p>"
238                                ."\n\t\t</td>" // 4
239                        ."\n\t</tr>";
240                        if ($eig == "j") {
241                                if ($jsfenster) {$lnkclass = "imFenster";} else {$lnkclass = "";}
242                                $n = eigentuemer($gbgml, true, $lnkclass); // mit Adresse
243                        }
244                }
245        }
246        pg_free_result($resbs);
247        return $gezeigt; // true wenn eine Buchung ausgegeben wurde
248}
249
250function ber_bs_anzg($gmls, $eig, $jsfenster, $gml_fs, $gsanfrd) {
251        // In einem FS-Nachw. die berechtigten (herrschenden) Buchungsstellen anzeigen z.B. "Wohnungs-/Teileigentum".
252        // Parameter:
253        //  $gmls: GML-ID der dienenden Buchungs-Stelle. Im ersten Durchlauf also, die BS auf der das FS gebucht ist.
254        //  $eig: EigentÃŒmer ausgeben j/n
255        //  $jsfenster: Javascript-Funktion zum Verlassen des Feature-Info-Fensters verwenden (bool)
256        //  $gml_fs: GML-ID des FlurstÃŒcke (nur bei erstem Aufruf in einem FS-Nachweis notwendig)
257        //      $gsanfrd: In einem GS-Nachw. die GML-ID der in de URL angeforderten Buchungsstelle (-> Hervorhebung)
258        global $debug, $gezeigt;
259
260        // sh=Buchungstelle herrschend >(Recht)an> sd=Buchungstelle dienend >istBestandteilVon> BLATT -> Bezirk
261        $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, "
262        ."b.gml_id AS g_gml, b.bezirk, b.buchungsblattnummermitbuchstabenerweiterung as blatt, b.blattart "
263        ."FROM ax_buchungsstelle sh JOIN ax_buchungsblatt b ON b.gml_id=sh.istbestandteilvon "
264        ."WHERE $1 = ANY(sh.an) AND sh.endet IS NULL AND b.endet IS NULL "
265        ."ORDER BY b.bezirk, b.buchungsblattnummermitbuchstabenerweiterung, sh.laufendenummer;";
266
267        $v = array($gmls); // ID dienende BuchungsStelle
268        $resber = pg_prepare("", $sql);
269        $resber = pg_execute("", $v);
270        if (!$resber) {
271                echo "\n<p class='err'>Fehler bei 'berechtigte Buchungsstellen'.</p>";
272                if ($debug > 2) {echo "\n<p class='dbg'>SQL=<br>".htmlentities($sql, ENT_QUOTES, "UTF-8")."<br>$1 = gml_id = '".$gmls."'</p>";}
273        }
274        $an=0;
275        $verfolg=array(); // Ein (zunÀchst leeres) Array fÃŒr weitere GML-IDs anlegen
276        while($rowan = pg_fetch_assoc($resber)) { // Loop durch Result von berechtigte BS
277                $hgml=$rowan["hgml"]; // GML-ID der berechtigten Buchungs-Stelle
278
279                if ($hgml == $gsanfrd) {
280                        $trtyp=3; // einfÀrben, o. Lnk.
281                } else {
282                        if ($gezeigt) {
283                                $trtyp=2; // ohne Link auf GS
284                        } else { // Wenn Stufe 1 "Fiktives Blatt" war, welches ausgeblendet wurde, dann auf Stufe 2 einen GS-Link ausgeben
285                                $trtyp=1; // mit Link auf GS
286                        }
287                }
288                $gezeigt2=buchung_anzg($hgml, $eig, $jsfenster, $gml_fs, $trtyp); // Die herrschende Buchung anzeigen wenn nicht fiktiv
289                $an++;
290                $weitere=ber_bs_zaehl($hgml);
291                if ($weitere > 0) { // gibt es WEITERE berechtigte Buchungen dazu?
292                        $verfolg[] = $hgml; // neuen Wert fÃŒr weitere Verfolgung in Array anfÃŒgen
293                }
294        }
295        pg_free_result($resber);
296        return $verfolg; // weitere zu verfolgende GML-ID zurÃŒck geben
297}
298
299function kurz_namnr($lang) {
300        // Namensnummer kÃŒrzen. Nicht benötigte Stufen der Dezimalklassifikation abschneiden
301        $kurz=str_replace(".00","",$lang); // leere Stufen (nur am Ende)
302        $kurz=str_replace("0000","",$kurz); // ganz leer (am Anfang)
303        $kurz=ltrim($kurz, "0"); // fuehr. Nullen
304        $kurz=str_replace(".0",".",$kurz); // fuehr. Null jeder Stufe
305        $kurz=rtrim($kurz); // Leerzeichen hinten
306        // echo "/n<p class='dbg'> lang='".$lang."'</p>/n<p class='dbg'> kurz='".$kurz."'</p>";
307        return $kurz;
308}
309
310function bnw_fsdaten($lfdnr, $gml_bs, $ba, $anteil, $bvnraus, $bartkey, $bartstory) {
311/*      Bestandsnachweis - Flurstuecksdaten
312        Die Tabellenzeilen mit den Flurstuecksdaten zu EINER Buchungsstelle im Bestandsnachweis ausgeben.
313        Die Funktion wird je einmal aufgerufen fÃŒr die Buchungen direkt auf dem GB (Normalfall).
314        Weiterere Aufrufe ggf. bei Erbbaurecht fÃŒr die mit "an" verknuepften Buchungsstellen.
315        Tabellenkopf wird im aufrufenden Programm ausgegeben. */
316        global $debug, $gkz, $showkey, $filtkreis, $filtgem, $trclass;
317
318        // F L U R S T U E C K
319        $sql="SELECT g.gemarkungsnummer, g.bezeichnung, f.gml_id, f.flurnummer, f.zaehler, f.nenner, f.amtlicheflaeche "
320        ."FROM ax_flurstueck f LEFT JOIN ax_gemarkung g ON f.land=g.land AND f.gemarkungsnummer=g.gemarkungsnummer "
321        ."WHERE f.endet IS NULL AND g.endet IS NULL AND f.istgebucht = $1 ";
322        if ($filtgem == '' ) { // ungefiltert
323                $v=array($gml_bs);
324        } else {
325                $sql.="AND f.gemeindezugehoerigkeit_kreis = $2 AND f.gemeindezugehoerigkeit_gemeinde = $3 "; // ZustÀndiges Gebiet
326                $v=array($gml_bs, $filtkreis, $filtgem);
327        }
328        $sql.="ORDER BY f.gemarkungsnummer, f.flurnummer, f.zaehler, f.nenner;";
329        $resf = pg_prepare("", $sql);
330        $resf = pg_execute("", $v);
331        if (!$resf) {echo "\n<p class='err'>Fehler bei Flurst&uuml;ck</p>";}
332
333        if($bvnraus) { // nur bei direkten Buchungen die lfdNr ausgeben
334                $bvnr=str_pad($lfdnr, 4, "0", STR_PAD_LEFT);
335        } else {
336                $bvnr="";
337        }
338        $altbvnr=""; // ++ besser mit "$j == 0" steuern?
339        $j=0;
340        while($rowf = pg_fetch_assoc($resf)) {
341                $flur= $rowf["flurnummer"];
342                $fskenn=$rowf["zaehler"];
343                if ($rowf["nenner"] != "") { // Bruch
344                        $fskenn.="/".$rowf["nenner"];
345                }
346                $flae=number_format($rowf["amtlicheflaeche"],0,",",".") . " m&#178;";
347
348                echo "\n<tr class='".$trclass."'>"; // eine Zeile je Flurstueck
349                        // Sp. 1-3 der Tab. aus Buchungsstelle, nicht aus FS
350                        if($bvnr == $altbvnr) { // gleiches Grundstueck, leer lassen
351                                echo "\n\t<td>&nbsp;</td>"
352                                ."\n\t<td>&nbsp;</td>"
353                                ."\n\t<td>&nbsp;</td>";
354                        } else { // Sprungmarke, BVNR
355                                echo "\n\t<td id='bvnr".$bvnr."'>"; // Sprungmarke
356                                //      echo "\n\t\t<a id='bvnr".$bvnr."'></a>";
357                                        echo "<span class='wichtig'>".$bvnr."</span>"
358                                ."\n\t</td>";
359
360                                echo "\n\t<td title ='".$bartstory."'>"; // Buchungsart
361                                        if ($showkey) {echo "<span class='key'>".$bartkey."</span>&nbsp;";} // Schluessel
362                                        echo $ba; // entschluesselt
363                                echo "</td>"
364                                ."\n\t<td>&nbsp;</td>"; // Anteil
365                        }
366
367                        // Sp. 4-7 aus Flurstueck
368                        echo "\n\t<td>";
369                        if ($showkey) {echo "<span class='key'>".$rowf["gemarkungsnummer"]."</span> ";}
370                        echo $rowf["bezeichnung"]."</td>"
371                        ."\n\t<td>".$flur."</td>"
372                        ."\n\t<td class='fsnr'><span class='wichtig'>".$fskenn."</span>"
373                        ."</td>"
374                        ."\n\t<td class='flag'>".$flae."</td>"; // "width" hier (flaG) erweiterbar, weil in andere Zeile die Buchungsart steht
375                        echo "\n\t<td>\n\t\t<p class='nwlink noprint'>";
376                //      if($bvnr != $altbvnr) {
377                        if($j == 0) {
378                                echo "\n\t\t\t<a href='alkisgsnw.php?gkz=".$gkz."&amp;gmlid=".$gml_bs;
379                                        if ($showkey) {echo "&amp;showkey=j";}
380                                        echo "' title='Grundst&uuml;cksnachweis'>Buchung "
381                                        ."<img src='ico/Grundstueck_Link.png' width='16' height='16' alt=''>"
382                                ."</a>";
383
384                        }
385                                echo "\n\t\t\t<a href='alkisfsnw.php?gkz=".$gkz."&amp;gmlid=".$rowf["gml_id"]."&amp;eig=n";
386                                        if ($showkey)   {echo "&amp;showkey=j";}
387                                        echo "' title='Flurst&uuml;cksnachweis'>Flurst&uuml;ck "
388                                        ."<img src='ico/Flurstueck_Link.png' width='16' height='16' alt=''>"
389                                ."</a>"
390                        ."\n\t\t</p>\n\t</td>"
391                ."\n</tr>";
392                $altbvnr=$bvnr;
393                $j++;
394        } // Ende Loop Flurstueck
395        pg_free_result($resf);
396        return $j;
397}
398
399function eigentuemer($gmlid, $mitadresse, $lnkclass) {
400        // Tabelle mit Eigentuemerdaten zu einem Grundbuchblatt ausgeben
401        //  Sp.1="EigentÃŒmer" Sp.2=NamNr, Sp.3=Name/Adresse, Sp.4=Link
402        // Parameter:
403        //      $gmlid = ID GB-Blattes
404        //      $mitadresse = Option (true/false) ob die Adresszeile ausgegeben werden soll
405        // Return = Anzahl Namensnummern
406
407        // Schleife 1: N a m e n s n u m m e r
408        // Beziehung: ax_namensnummer >istBestandteilVon> ax_buchungsblatt
409        global $debug, $gkz, $showkey;
410
411        if ($lnkclass == "") {
412                $lnkvor = "";
413                $lnknach = "";
414        } else { // Link ÃŒber Java-Class "imFenster" aus alkisinlayausk.php
415                $lnkvor  = "javascript:".$lnkclass."(\"";
416                $lnknach = "\")";
417        }
418
419        $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 "
420        ."FROM ax_namensnummer n "
421        ."LEFT JOIN ax_artderrechtsgemeinschaft_namensnummer wn ON n.artderrechtsgemeinschaft = wn.wert "
422        ."LEFT JOIN ax_eigentuemerart_namensnummer we ON n.eigentuemerart = we.wert "
423        ."WHERE n.istbestandteilvon= $1 AND n.endet IS NULL ORDER BY n.laufendenummernachdin1421;";
424        // +++  LEFT JOIN bis ax_Person statt Person als Schleife zu holen,
425        //              VerknÃŒpfungsfeld "benennt" ist leer bei "Beschrieb der Rechtsgemeinschaft".
426
427        $v = array($gmlid); // GB-Blatt
428        $resn = pg_prepare("", $sqln);
429        $resn = pg_execute("", $v);
430
431        if (!$resn) {
432                echo "\n<p class='err'>Fehler bei Eigent&uuml;mer</p>"; // kein Fehler bei Blattarten > 1000
433                //if ($debug > 2) {echo "\n<p class='dbg'>SQL=<br>".$sqln."<br>$1=gml= '".$gmlid."'</p>";}
434        }
435
436        $n=0; // Z.NamNum.
437        while($rown = pg_fetch_assoc($resn)) {
438                $gmlnn=$rown["gml_id"];
439                $namnum=kurz_namnr($rown["lfd"]);
440                $rechtsg=$rown["adr"];
441                echo "\n\t<tr>";
442                        if($n == 0) { // erste EigentÃŒmer-Zeile zu einer Buchung
443                                echo "\n\t\t<td class='ll'><img src='ico/Eigentuemer_2.png' width='16' height='16' alt=''> Eigent&uuml;mer:</td>"; // 1
444                        } else { // Folgezeile
445                                echo "\n\t\t<td class='ll'>&nbsp;</td>"; // 1
446                        }
447
448                        if ($rechtsg != "" ) { // Erbengemeinschaft usw.
449                                echo "\n\t\t<td colspan='2'>"; // 2-3
450                                if ($rechtsg == 9999) { // sonstiges
451                                        echo "\n\t\t\t<p class='zus' title='Beschrieb der Rechtsgemeinschaft'>".htmlentities($rown["beschr"], ENT_QUOTES, "UTF-8")."</p>";
452                                } else {
453                                        echo "\n\t\t\t<p class='zus' title='Art der Rechtsgemeinschaft'>".htmlentities($rown["adrv"], ENT_QUOTES, "UTF-8")."</p>";
454                                }
455                        } else { // Namensnummer
456                                echo "\n\t\t<td class='nanu' title='Namens-Nummer'>\n\t\t\t<p>".$namnum."&nbsp;</p>\n\t\t</td>" // 2
457                                . "\n\t\t<td>"; // 3
458
459                        }
460                        //if ($rown["anlass"] > 0 ) {echo "<p>Anlass=".$rown["anlass"]."</p>";}
461
462                        // Andere Namensnummern?  Relation:  ax_namensnummer >bestehtAusRechtsverhaeltnissenZu>  ax_namensnummer
463                        // Die Relation 'Namensnummer' besteht aus RechtsverhÀltnissen zu 'Namensnummer' sagt aus, dass mehrere Namensnummern zu einer Rechtsgemeinschaft gehören können.
464                        // Die Rechtsgemeinschaft selbst steht unter einer eigenen AX_Namensnummer, die zu allen Namensnummern der Rechtsgemeinschaft eine Relation besitzt.
465
466                // Schleife 2: P e r s o n
467                // +++ bei SQL Namensnummer oben gleich mit JOIN dazu holen, statt dieser Schleife
468                // Beziehung: ax_person  <benennt<  ax_namensnummer
469                $sqlp="SELECT nachnameoderfirma, vorname, geburtsname, to_char(cast(geburtsdatum AS date),'DD.MM.YYYY') AS geburtsdatum, namensbestandteil, akademischergrad "
470                ."FROM ax_person WHERE gml_id= $1 AND endet IS NULL;";
471                $gmlpers=$rown["benennt"]; // leer bei RechtsverhÀltnis
472                $v = array($gmlpers); // gml_id von ax_person
473                $resp = pg_prepare("", $sqlp);
474                $resp = pg_execute("", $v);
475                if (!$resp) {
476                        echo "\n\t<p class='err'>Fehler bei Person</p>";
477                        if ($debug > 2) {echo "\n<p class='err'>SQL=<br>".$sqlp."<br>$1=gml= '".$gmlpers."'</p>";}
478                }
479
480                $i=0; // cnt Person
481                while($rowp = pg_fetch_assoc($resp)) { // Schleife weglassen: "benennt" ist KEIN Array!
482                        $diePerson=""; //++ Anrede?
483                        if ($rowp["akademischergrad"] <> "") {$diePerson=$rowp["akademischergrad"]." ";}
484                        $diePerson.=$rowp["nachnameoderfirma"];
485                        if ($rowp["vorname"] <> "") {$diePerson.=", ".$rowp["vorname"];}
486                        if ($rowp["namensbestandteil"] <> "") {$diePerson.=". ".$rowp["namensbestandteil"];}
487                        if ($rowp["geburtsdatum"] <> "") {$diePerson.=", geb. ".$rowp["geburtsdatum"];}
488                        if ($rowp["geburtsname"] <> "") {$diePerson.=", geb. ".$rowp["geburtsname"];}
489                        $diePerson=htmlentities($diePerson, ENT_QUOTES, "UTF-8"); // Umlaute
490                        $eiartkey=$rown["eigentuemerart"]; // Key
491                        $eiart=$rown["eiartv"]; // Value
492
493                        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)
494                        echo "\n\t\t<td>\n\t\t\t<p class='nwlink noprint'>"; // 4
495                                if ($showkey AND $eiartkey != '') {echo "<span class='key' title='Eigent&uuml;merart'>".$eiartkey."</span> ";}
496                                echo "\n\t\t\t\t<a href='".$lnkvor."alkisnamstruk.php?gkz=".$gkz."&amp;gmlid=".$gmlpers;
497                                if ($showkey) {echo "&amp;showkey=j";}
498                                if ($eiartkey == "") {$eiart="Eigent&uuml;mer" ;} // Default. Ersatz-Text, wenn nicht gefÃŒllt
499                                echo $lnknach."' title='vollst&auml;ndiger Name und Adresse eines Eigent&uuml;mers'>".$eiart
500                                ." <img src='ico/Eigentuemer.png' width='16' height='16' alt=''></a>\n\t\t\t</p>"
501                        ."\n\t\t</td>" // 4
502                        ."\n\t</tr>";
503
504                        if ($mitadresse) {
505                                // Schleife 3: optional  A d r e s s e  zur Person
506                                $sqla ="SELECT a.gml_id, a.ort_post, a.postleitzahlpostzustellung AS plz, a.strasse, a.hausnummer, a.bestimmungsland "
507                                ."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;";
508                                $v = array($gmlpers);
509                                $resa = pg_prepare("", $sqla);
510                                $resa = pg_execute("", $v);
511                                if (!$resa) {
512                                        echo "\n\t<p class='err'>Fehler bei Adressen</p>";
513                                        if ($debug > 2) {echo "\n<p class='err'>SQL=<br>".$sqla."<br>$1=gml= '".$gmlpers."'</p>";}
514                                }
515                                $j=0;
516                                while($rowa = pg_fetch_assoc($resa)) {
517                                        $j++;
518                                        if ($j == 1) { // erste ("jÃŒngste") Adresse anzeigen
519                                                $gmla=$rowa["gml_id"];
520                                                $plz=$rowa["plz"]; // integer
521                                                if($plz == 0) {
522                                                        $plz="";
523                                                } else {
524                                                        $plz=str_pad($plz, 5, "0", STR_PAD_LEFT);
525                                                }
526                                                $ort=htmlentities($rowa["ort_post"], ENT_QUOTES, "UTF-8");
527                                                $str=htmlentities($rowa["strasse"], ENT_QUOTES, "UTF-8");
528                                                $hsnr=$rowa["hausnummer"];
529                                                $land=htmlentities($rowa["bestimmungsland"], ENT_QUOTES, "UTF-8");
530
531                                                echo "\n\t<tr>"
532                                                        ."\n\t\t<td class='ll'>&nbsp;</td>" // 1
533                                                        ."\n\t\t<td>&nbsp;</td>" // 2
534                                                        ."\n\t\t<td><p class='gadr'>"; // 3
535                                                        if ($str.$hsnr != "") {echo $str." ".$hsnr."<br>";}
536                                                        if ($plz.$ort != "") {echo $plz." ".$ort;}
537                                                        if ($land != "" and $land != "DEUTSCHLAND") {echo ", ".$land;}
538                                                echo "</p></td>" // 3
539                                                        ."\n\t\t<td>&nbsp;</td>\n\t</tr>"; // 4
540                                        } else { // manchmal doppelte Angaben
541                                                echo "\n\t<tr>"
542                                                        ."\n\t\t<td class='ll'>&nbsp;</td>" // 1
543                                                        ."\n\t\t<td>&nbsp;</td>" // 2
544                                                        ."\n\t\t<td><p class='dbg' title='Siehe Auskunft zur Person'>weitere Adresse</p></td>" // 3
545                                                        ."\n\t\t<td>&nbsp;</td>\n\t</tr>"; // 4
546                                        }
547                                } // Ende Loop Adresse zur Person
548                                pg_free_result($resa);
549                        }
550                        // 'keine Adresse' kann vorkommen, z.B. "Deutsche Telekom AG"
551                        $i++; // cnt Person
552
553                        $zaehler=$rown["zaehler"];
554                        if ($zaehler != "") { // Anteil als eigene Tab-Zeile
555                                $zaehler=str_replace(".", ",", $zaehler); // Dezimal-KOMMA wenn dem Notar der Bruch nicht reicht
556                                $nenner=str_replace(".", ",", $rown["nenner"]);
557                                $comnt="Anteil der Berechtigten in Bruchteilen (Par. 47 GBO) an einem gemeinschaftlichen Eigentum (Grundst&uuml;ck oder Recht).";
558                                echo "\n\t<tr>"
559                                ."\n\t\t<td class='ll'>&nbsp;</td>" // 1
560                                ."\n\t\t<td>&nbsp;</td>" // 2
561                                ."\n\t\t<td><p class='avh' title='".$comnt."'>".$zaehler."/".$nenner." Anteil</p></td>" // 3
562                                ."\n\t\t<td>&nbsp;</td>\n\t</tr>"; // 4
563                        }
564                } // End Loop Person
565                pg_free_result($resp);
566
567                if ($i == 0) { // KEINE Person. benennt ist leer. Das kommt vor hinter der Zeile "Erbengemeinschaft" und ist dann KEIN Fehler
568                        if ($rechtsg == 9999) {
569                                if ($debug > 1) {echo "\n\t\t\t<p class='dbg'>Rechtsgemeinschaft = '".$rechtsg."'</p>";}
570                        } else {
571                                echo "\n<p class='err'>(Die Person mit der ID '".$gmlpers."' fehlt im Datenbestand)</p>";
572                        }
573                        echo "</td>\n\t\t<td>&nbsp;</td>\n\t</tr>";
574                }
575                $n++; // cnt NamNum
576        } // End Loop NamNum
577
578        pg_free_result($resn);
579        return $n;
580} // End function eigentuemer
581
582function werteliste ($element, $bezeichnung ,$sqlin) {
583        // Eine oder mehrere EntschlÃŒsselungen in eine Zeile ausgeben.
584        // Dient dazu, SchlÃŒssel-ARRAYs auflösen ohne die Zeile mehrfach aufzulisten (JOIN)
585        // Anwendung: FS-Nachweis BodenschÀtzung "Klimastufe + WasserverhÀltnisse"
586        // 2018-11-09: Umstellung von "alkis_wertearten" auf individuelle Tabellen
587
588        global $debug;
589        if ($element == 'ax_bodenschaetzung' AND $bezeichnung = 'entstehungsartoderklimastufewasserverhaeltnisse' ) {
590                $tabelle = 'ax_entstehungsartoderklimastufewasserverhaeltnisse_bodensc';
591        } elseif ($element == 'ax_bodenschaetzung' AND $bezeichnung = 'sonstigeangaben' ) {
592                $tabelle = 'ax_sonstigeangaben_bodenschaetzung';
593        }
594        $sql="SELECT wert, beschreibung FROM ".$tabelle." WHERE wert IN (".$sqlin.") ORDER BY wert LIMIT $1 ;";
595        $v = array(100);
596        $res = pg_prepare("", $sql);
597        $res = pg_execute("", $v);
598        if (!$res) {
599                echo "\n<p class='err'>Fehler bei Werteliste.</p>";
600                if ($debug > 2) {echo "\n<p class='dbg'>SQL=<br>".htmlentities($sql, ENT_QUOTES, "UTF-8")."<br>$1 = '".$sqlin."'</p>";}
601                return;
602        }
603        $i=0;
604        while($row = pg_fetch_assoc($res)) {
605                echo " ".$row["beschreibung"];
606                $i++;   
607        }
608        pg_free_result($res);
609        if ($i == 0) {echo "(kein Treffer)";}
610        return;
611}
612
613?>
Note: See TracBrowser for help on using the repository browser.