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

Revision 405, 27.5 KB checked in by frank.jaeger, 6 years ago (diff)

Die Buchauskunft bekommt ein neues Modul Grundstücksnachweis (Buchung). Andere Module verlinken darauf.

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