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

Revision 417, 29.8 KB checked in by frank.jaeger, 2 years ago (diff)

Korrektur der Auskunft: Vorgängerflurstücke und Fortführungen bei Flurstücks-Historie.

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