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

Revision 404, 26.3 KB checked in by frank.jaeger, 6 years ago (diff)

Nachkorrektur Web-Auskunft

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