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

Revision 419, 31.1 KB checked in by frank.jaeger, 5 years ago (diff)

Auskunft Modul Flurstückshistorie nun auch mit Flurstückskennzeichen aufzurufen alternativ zu gmlid.

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