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

Revision 402, 26.5 KB checked in by frank.jaeger, 3 years ago (diff)

ALKIS-Buchauskunft überarbeitet. z.B. Flurstücksnachweis mit allen Buchungen.

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, oder farbig hinterlegen?
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, $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        global $debug, $stufe;
238
239        // sh=Buchungstelle herrschend >(Recht)an> sd=Buchungstelle dienend >istBestandteilVon> BLATT -> Bezirk
240        $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, "
241        ."b.gml_id AS g_gml, b.bezirk, b.buchungsblattnummermitbuchstabenerweiterung as blatt, b.blattart "
242        ."FROM ax_buchungsstelle sh JOIN ax_buchungsblatt b ON b.gml_id=sh.istbestandteilvon "
243        ."WHERE $1 = ANY(sh.an) AND sh.endet IS NULL AND b.endet IS NULL "
244        ."ORDER BY b.bezirk, b.buchungsblattnummermitbuchstabenerweiterung, sh.laufendenummer;";
245
246        $v = array($gmls); // ID dienende BuchungsStelle
247        $resber = pg_prepare("", $sql);
248        $resber = pg_execute("", $v);
249        if (!$resber) {
250                echo "\n<p class='err'>Fehler bei 'berechtigte Buchungsstellen'.</p>";
251                if ($debug > 2) {echo "\n<p class='dbg'>SQL=<br>".htmlentities($sql, ENT_QUOTES, "UTF-8")."<br>$1 = gml_id = '".$gmls."'</p>";}
252        }
253        $an=0;
254        $verfolg=array(); // Ein (zunÀchst leeres) Array fÃŒr weitere GML-IDs anlegen
255        while($rowan = pg_fetch_assoc($resber)) { // Loop durch Result von berechtigte BS
256                $hgml=$rowan["hgml"]; // GML-ID der berechtigten Buchungs-Stelle
257                $gezeigt = buchung_anzg($hgml, $eig, false, $gml_fs); // Die herrschende Buchung anzeigen wenn nicht fiktiv
258                $an++;
259
260                $weitere=ber_bs_zaehl($hgml);
261                if ($weitere > 0) { // gibt es WEITERE berechtigte Buchungen dazu?
262                //      if ($debug > 2) {echo "<p class='dbg'>Weitere ".$weitere." zu verfolgende Buchungen gefunden. F&uuml;ge an:<br>Vorher ".count($verfolg)."</p>";}
263
264                        $verfolg[] = $hgml; // neuen Wert fÃŒr weitere Verfolgung in Array anfÃŒgen
265
266                //      if ($debug > 2) {echo "<p class='dbg'>Nachher ".count($verfolg)."</p>";}
267
268        //      } else {
269        //              if ($debug > 2) {echo "<p class='dbg'>Auf Stufe ".$stufe." untersucht. Keine weitere abhÀngigen Buchungen zu ".$hgml.".</p>";}
270                }
271        }
272        pg_free_result($resber);
273        return $verfolg; // weitere zu verfolgende GML-ID zurÃŒck geben
274}
275
276function kurz_namnr($lang) {
277        // Namensnummer kÃŒrzen. Nicht benötigte Stufen der Dezimalklassifikation abschneiden
278        $kurz=str_replace(".00","",$lang); // leere Stufen (nur am Ende)
279        $kurz=str_replace("0000","",$kurz); // ganz leer (am Anfang)
280        $kurz=ltrim($kurz, "0"); // fuehr. Nullen
281        $kurz=str_replace(".0",".",$kurz); // fuehr. Null jeder Stufe
282        $kurz=rtrim($kurz); // Leerzeichen hinten
283        // echo "/n<p class='dbg'> lang='".$lang."'</p>/n<p class='dbg'> kurz='".$kurz."'</p>";
284        return $kurz;
285}
286
287function bnw_fsdaten($con, $lfdnr, $gml_bs, $ba, $anteil, $bvnraus, $bartkey, $bartstory) {
288/*      Bestandsnachweis - Flurstuecksdaten
289        Die Tabellenzeilen mit den Flurstuecksdaten zu einer Buchungsstelle im Bestandsnachweis ausgeben.
290        Die Funktion wird je einmal aufgerufen fÃŒr die Buchungen direkt auf dem GB (Normalfall).
291        Weiterere Aufrufe ggf. bei Erbbaurecht fÃŒr die mit "an" verknuepften Buchungsstellen.
292        Table-Tag und Tabellenkopf werden im aufrufenden Programm ausgegeben. */
293        global $debug, $gkz, $showkey, $filtkreis, $filtgem, $trclass; // $zpaar
294
295        // F L U R S T U E C K
296        $sql="SELECT g.gemarkungsnummer, g.bezeichnung, f.gml_id, f.flurnummer, f.zaehler, f.nenner, f.regierungsbezirk, f.kreis, f.gemeinde, f.amtlicheflaeche
297        FROM ax_flurstueck f JOIN ax_buchungsstelle s ON f.istgebucht=s.gml_id
298        LEFT JOIN ax_gemarkung g ON f.land=g.land AND f.gemarkungsnummer=g.gemarkungsnummer
299        WHERE f.endet IS NULL AND s.endet IS NULL AND g.endet IS NULL AND s.gml_id= $1 ";
300        if ($filtgem == '' ) { // ungefiltert
301                $v=array($gml_bs);
302        } else {
303                $sql.="AND f.kreis = $2 AND f.gemeinde = $3 "; // ZustÀndiges Gebiet
304                $v=array($gml_bs, $filtkreis, $filtgem);
305        }
306        $sql.="ORDER BY f.gemarkungsnummer, f.flurnummer, f.zaehler, f.nenner;";
307        $resf = pg_prepare("", $sql);
308        $resf = pg_execute("", $v);
309        if (!$resf) {echo "\n<p class='err'>Fehler bei Flurst&uuml;ck</p>";}
310
311        if($bvnraus) { // nur bei direkten Buchungen die lfdNr ausgeben
312                $bvnr=str_pad($lfdnr, 4, "0", STR_PAD_LEFT);
313        } else {
314                $bvnr="";
315        }
316        $altbvnr="";
317        $j=0;
318        while($rowf = pg_fetch_assoc($resf)) {
319        //      $flur=str_pad($rowf["flurnummer"], 3, "0", STR_PAD_LEFT);
320                $flur= $rowf["flurnummer"];
321                $fskenn=$rowf["zaehler"];
322                if ($rowf["nenner"] != "") { // Bruch
323                        $fskenn.="/".$rowf["nenner"];
324                }
325                $flae=number_format($rowf["amtlicheflaeche"],0,",",".") . " m&#178;";
326
327                echo "\n<tr class='".$trclass."'>"; // eine Zeile je Flurstueck
328                        // Sp. 1-3 der Tab. aus Buchungsstelle, nicht aus FS
329                        if($bvnr == $altbvnr) { // gleiches Grundstueck, leer lassen
330                                echo "\n\t<td>&nbsp;</td>"
331                                ."\n\t<td>&nbsp;</td>"
332                                ."\n\t<td>&nbsp;</td>";
333                        } else { // Sprungmarke, BVNR
334                                echo "\n\t<td id='bvnr".$bvnr."'>"; // Sprungmarke
335                                //      echo "\n\t\t<a id='bvnr".$bvnr."'></a>";
336                                        echo "<span class='wichtig'>".$bvnr."</span>"
337                                ."\n\t</td>";
338
339                                echo "\n\t<td title ='".$bartstory."'>"; // Buchungsart
340                                        if ($showkey) {echo "<span class='key'>".$bartkey."</span>&nbsp;";} // Schluessel
341                                        echo $ba; // entschluesselt
342                                echo "</td>"
343                                ."\n\t<td>&nbsp;</td>"; // Anteil
344                                $altbvnr=$bvnr;
345                        }
346
347                        // Sp. 4-7 aus Flurstueck
348                        echo "\n\t<td>";
349                        if ($showkey) {echo "<span class='key'>".$rowf["gemarkungsnummer"]."</span> ";}
350                        echo $rowf["bezeichnung"]."</td>"
351                        ."\n\t<td>".$flur."</td>"
352                        ."\n\t<td class='fsnr'><span class='wichtig'>".$fskenn."</span>"
353                        ."</td>"
354                        ."\n\t<td class='flag'>".$flae."</td>"; // "width" hier (flaG) erweiterbar, weil in andere Zeile die Buchungsart steht
355
356                        echo "\n\t<td>\n\t\t<p class='nwlink noprint'>"
357                                ."\n\t\t\t<a href='alkisfsnw.php?gkz=".$gkz."&amp;gmlid=".$rowf["gml_id"]."&amp;eig=n";
358                                        if ($showkey)   {echo "&amp;showkey=j";}
359                                        echo "' title='Flurst&uuml;cksnachweis'>Flurst&uuml;ck "
360                                        ."<img src='ico/Flurstueck_Link.png' width='16' height='16' alt=''>"
361                                ."</a>"
362                        ."\n\t\t</p>"
363                ."\n\t</td>"
364                ."\n</tr>";
365
366                $j++;
367        } // Ende Loop Flurstueck
368        pg_free_result($resf);
369        return $j;
370}
371
372function eigentuemer($gmlid, $mitadresse, $lnkclass) {
373        // Tabelle mit Eigentuemerdaten zu einem Grundbuchblatt ausgeben
374        //  Sp.1="EigentÃŒmer" Sp.2=NamNr, Sp.3=Name/Adresse, Sp.4=Link
375        // Parameter:
376        //      $gmlid = ID GB-Blattes
377        //      $mitadresse = Option (true/false) ob die Adresszeile ausgegeben werden soll
378        // Return = Anzahl Namensnummern
379
380        // Schleife 1: N a m e n s n u m m e r
381        // Beziehung: ax_namensnummer >istBestandteilVon> ax_buchungsblatt
382        global $debug, $gkz, $showkey;
383
384        if ($lnkclass == "") {
385                $lnkvor = "";
386                $lnknach = "";
387        } else { // Link ÃŒber Java-Class "imFenster" aus alkisinlayausk.php
388                $lnkvor  = "javascript:".$lnkclass."(\"";
389                $lnknach = "\")";
390        }
391
392        $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 "
393        ."FROM ax_namensnummer n "
394        ."LEFT JOIN alkis_wertearten wn ON cast(n.artderrechtsgemeinschaft AS character varying)=wn.k AND wn.element='ax_namensnummer' AND wn.bezeichnung='artderrechtsgemeinschaft' "
395        ."LEFT JOIN alkis_wertearten we ON cast(n.eigentuemerart AS character varying)=we.k AND we.element='ax_namensnummer' AND we.bezeichnung='eigentuemerart' "
396        ."WHERE n.istbestandteilvon= $1 AND n.endet IS NULL ORDER BY n.laufendenummernachdin1421;";
397        // +++  LEFT JOIN bis ax_Person statt Person als Schleife zu holen,
398        //              VerknÃŒpfungsfeld "benennt" ist leer bei "Beschrieb der Rechtsgemeinschaft".
399
400        $v = array($gmlid); // GB-Blatt
401        $resn = pg_prepare("", $sqln);
402        $resn = pg_execute("", $v);
403
404        if (!$resn) {
405                echo "\n<p class='err'>Fehler bei Eigent&uuml;mer</p>"; // kein Fehler bei Blattarten > 1000
406                //if ($debug > 2) {echo "\n<p class='dbg'>SQL=<br>".$sqln."<br>$1=gml= '".$gmlid."'</p>";}
407        }
408
409        $n=0; // Z.NamNum.
410        while($rown = pg_fetch_assoc($resn)) {
411                $gmlnn=$rown["gml_id"];
412                $namnum=kurz_namnr($rown["lfd"]);
413                $rechtsg=$rown["adr"];
414                echo "\n\t<tr>";
415                        if($n == 0) { // erste EigentÃŒmer-Zeile zu einer Buchung
416                                echo "\n\t\t<td class='ll'><img src='ico/Eigentuemer_2.png' width='16' height='16' alt=''> Eigent&uuml;mer:</td>"; // 1
417                        } else { // Folgezeile
418                                echo "\n\t\t<td class='ll'>&nbsp;</td>"; // 1
419                        }
420
421                        if ($rechtsg != "" ) { // Erbengemeinschaft usw.
422                                echo "\n\t\t<td colspan='2'>"; // 2-3
423                                if ($rechtsg == 9999) { // sonstiges
424                                        echo "\n\t\t\t<p class='zus' title='Beschrieb der Rechtsgemeinschaft'>".htmlentities($rown["beschr"], ENT_QUOTES, "UTF-8")."</p>";
425                                } else {
426                                        echo "\n\t\t\t<p class='zus' title='Art der Rechtsgemeinschaft'>".htmlentities($rown["adrv"], ENT_QUOTES, "UTF-8")."</p>";
427                                }
428                        } else { // Namensnummer
429                                echo "\n\t\t<td class='nanu' title='Namens-Nummer'>\n\t\t\t<p>".$namnum."&nbsp;</p>\n\t\t</td>" // 2
430                                . "\n\t\t<td>"; // 3
431
432                        }
433                        //if ($rown["anlass"] > 0 ) {echo "<p>Anlass=".$rown["anlass"]."</p>";}
434
435                        // Andere Namensnummern?  Relation:  ax_namensnummer >bestehtAusRechtsverhaeltnissenZu>  ax_namensnummer
436                        // Die Relation 'Namensnummer' besteht aus RechtsverhÀltnissen zu 'Namensnummer' sagt aus, dass mehrere Namensnummern zu einer Rechtsgemeinschaft gehören können.
437                        // Die Rechtsgemeinschaft selbst steht unter einer eigenen AX_Namensnummer, die zu allen Namensnummern der Rechtsgemeinschaft eine Relation besitzt.
438
439                // Schleife 2: P e r s o n
440                // +++ bei SQL Namensnummer oben gleich mit JOIN dazu holen, statt dieser Schleife
441                // Beziehung: ax_person  <benennt<  ax_namensnummer
442                $sqlp="SELECT nachnameoderfirma, vorname, geburtsname, to_char(cast(geburtsdatum AS date),'DD.MM.YYYY') AS geburtsdatum, namensbestandteil, akademischergrad "
443                ."FROM ax_person WHERE gml_id= $1 AND endet IS NULL;";
444                $gmlpers=$rown["benennt"]; // leer bei RechtsverhÀltnis
445                $v = array($gmlpers); // gml_id von ax_person
446                $resp = pg_prepare("", $sqlp);
447                $resp = pg_execute("", $v);
448                if (!$resp) {
449                        echo "\n\t<p class='err'>Fehler bei Person</p>";
450                        if ($debug > 2) {echo "\n<p class='err'>SQL=<br>".$sqlp."<br>$1=gml= '".$gmlpers."'</p>";}
451                }
452
453                $i=0; // cnt Person
454                while($rowp = pg_fetch_assoc($resp)) { // Schleife weglassen: "benennt" ist KEIN Array!
455                        $diePerson=""; //++ Anrede?
456                        if ($rowp["akademischergrad"] <> "") {$diePerson=$rowp["akademischergrad"]." ";}
457                        $diePerson.=$rowp["nachnameoderfirma"];
458                        if ($rowp["vorname"] <> "") {$diePerson.=", ".$rowp["vorname"];}
459                        if ($rowp["namensbestandteil"] <> "") {$diePerson.=". ".$rowp["namensbestandteil"];}
460                        if ($rowp["geburtsdatum"] <> "") {$diePerson.=", geb. ".$rowp["geburtsdatum"];}
461                        if ($rowp["geburtsname"] <> "") {$diePerson.=", geb. ".$rowp["geburtsname"];}
462                        $diePerson=htmlentities($diePerson, ENT_QUOTES, "UTF-8"); // Umlaute
463                        $eiartkey=$rown["eigentuemerart"]; // Key
464                        $eiart=$rown["eiartv"]; // Value
465
466                        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)
467                        echo "\n\t\t<td>\n\t\t\t<p class='nwlink noprint'>"; // 4
468                                if ($showkey AND $eiartkey != '') {echo "<span class='key' title='Eigent&uuml;merart'>".$eiartkey."</span> ";}
469                                echo "\n\t\t\t\t<a href='".$lnkvor."alkisnamstruk.php?gkz=".$gkz."&amp;gmlid=".$gmlpers;
470                                if ($showkey) {echo "&amp;showkey=j";}
471                                if ($eiartkey == "") {$eiart="Eigent&uuml;mer" ;} // Default. Ersatz-Text, wenn nicht gefÃŒllt
472                                echo $lnknach."' title='vollst&auml;ndiger Name und Adresse eines Eigent&uuml;mers'>".$eiart
473                                ." <img src='ico/Eigentuemer.png' width='16' height='16' alt=''></a>\n\t\t\t</p>"
474                        ."\n\t\t</td>" // 4
475                        ."\n\t</tr>";
476
477                        if ($mitadresse) {
478                                // Schleife 3: optional  A d r e s s e  zur Person
479                                $sqla ="SELECT a.gml_id, a.ort_post, a.postleitzahlpostzustellung AS plz, a.strasse, a.hausnummer, a.bestimmungsland "
480                                ."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;";
481                                $v = array($gmlpers);
482                                $resa = pg_prepare("", $sqla);
483                                $resa = pg_execute("", $v);
484                                if (!$resa) {
485                                        echo "\n\t<p class='err'>Fehler bei Adressen</p>";
486                                        if ($debug > 2) {echo "\n<p class='err'>SQL=<br>".$sqla."<br>$1=gml= '".$gmlpers."'</p>";}
487                                }
488                                $j=0;
489                                while($rowa = pg_fetch_assoc($resa)) {
490                                        $j++;
491                                        if ($j == 1) { // erste ("jÃŒngste") Adresse anzeigen
492                                                $gmla=$rowa["gml_id"];
493                                                $plz=$rowa["plz"]; // integer
494                                                if($plz == 0) {
495                                                        $plz="";
496                                                } else {
497                                                        $plz=str_pad($plz, 5, "0", STR_PAD_LEFT);
498                                                }
499                                                $ort=htmlentities($rowa["ort_post"], ENT_QUOTES, "UTF-8");
500                                                $str=htmlentities($rowa["strasse"], ENT_QUOTES, "UTF-8");
501                                                $hsnr=$rowa["hausnummer"];
502                                                $land=htmlentities($rowa["bestimmungsland"], ENT_QUOTES, "UTF-8");
503
504                                                echo "\n\t<tr>"
505                                                        ."\n\t\t<td class='ll'>&nbsp;</td>" // 1
506                                                        ."\n\t\t<td>&nbsp;</td>" // 2
507                                                        ."\n\t\t<td><p class='gadr'>"; // 3
508                                                        if ($str.$hsnr != "") {echo $str." ".$hsnr."<br>";}
509                                                        if ($plz.$ort != "") {echo $plz." ".$ort;}
510                                                        if ($land != "" and $land != "DEUTSCHLAND") {echo ", ".$land;}
511                                                echo "</p></td>" // 3
512                                                        ."\n\t\t<td>&nbsp;</td>\n\t</tr>"; // 4
513                                        } else { // manchmal doppelte Angaben
514                                                echo "\n\t<tr>"
515                                                        ."\n\t\t<td class='ll'>&nbsp;</td>" // 1
516                                                        ."\n\t\t<td>&nbsp;</td>" // 2
517                                                        ."\n\t\t<td><p class='dbg' title='Siehe Auskunft zur Person'>weitere Adresse</p></td>" // 3
518                                                        ."\n\t\t<td>&nbsp;</td>\n\t</tr>"; // 4
519                                        }
520                                } // Ende Loop Adresse zur Person
521                                pg_free_result($resa);
522                        }
523                        // 'keine Adresse' kann vorkommen, z.B. "Deutsche Telekom AG"
524                        $i++; // cnt Person
525
526                        $zaehler=$rown["zaehler"];
527                        if ($zaehler != "") { // Anteil als eigene Tab-Zeile
528                                $zaehler=str_replace(".", ",", $zaehler); // Dezimal-KOMMA wenn dem Notar der Bruch nicht reicht
529                                $nenner=str_replace(".", ",", $rown["nenner"]);
530                                $comnt="Anteil der Berechtigten in Bruchteilen (Par. 47 GBO) an einem gemeinschaftlichen Eigentum (Grundst&uuml;ck oder Recht).";
531                                echo "\n\t<tr>"
532                                ."\n\t\t<td class='ll'>&nbsp;</td>" // 1
533                                ."\n\t\t<td>&nbsp;</td>" // 2
534                                ."\n\t\t<td><p class='avh' title='".$comnt."'>".$zaehler."/".$nenner." Anteil</p></td>" // 3
535                                ."\n\t\t<td>&nbsp;</td>\n\t</tr>"; // 4
536                        }
537                } // End Loop Person
538                pg_free_result($resp);
539
540                if ($i == 0) { // KEINE Person. benennt ist leer. Das kommt vor hinter der Zeile "Erbengemeinschaft" und ist dann KEIN Fehler
541                        if ($rechtsg == 9999) {
542                                if ($debug > 1) {echo "\n\t\t\t<p class='dbg'>Rechtsgemeinschaft = '".$rechtsg."'</p>";}
543                        } else {
544                                echo "\n<p class='err'>(Die Person mit der ID '".$gmlpers."' fehlt im Datenbestand)</p>";
545                        }
546                        echo "</td>\n\t\t<td>&nbsp;</td>\n\t</tr>";
547                }
548                $n++; // cnt NamNum
549        } // End Loop NamNum
550
551        pg_free_result($resn);
552        return $n;
553} // End function eigentuemer
554
555function werteliste ($element, $bezeichnung ,$sqlin) {
556        // Eine oder mehrere EntschlÃŒsselungen aus "alkis_wertearten" in eine Zeile ausgeben.
557        // Dient dazu, SchlÃŒssel-ARRAYs auflösen ohne die Zeile mehrfach aufzulisten (JOIN)
558        // Anwendung: FS-Nachweis BodenschÀtzung "Klimastufe + WasserverhÀltnisse"
559        global $debug;
560        $sql="SELECT k, v FROM alkis_wertearten WHERE element = $1 AND bezeichnung = $2 AND k IN (".$sqlin.") ORDER BY k;";
561        $v = array($element, $bezeichnung);
562        $res = pg_prepare("", $sql);
563        $res = pg_execute("", $v);
564        if (!$res) {
565                echo "\n<p class='err'>Fehler bei Werteliste aus alkis_wertearten.</p>";
566                if ($debug > 2) {echo "\n<p class='dbg'>SQL=<br>".htmlentities($sql, ENT_QUOTES, "UTF-8")."<br>$1 = '".$sqlin."'</p>";}
567                return;
568        }
569        $i=0;
570        while($row = pg_fetch_assoc($res)) {
571                echo " ".$row["v"];
572                $i++;   
573        }
574        pg_free_result($res);
575        if ($i == 0 ) {echo "(kein Treffer)";}
576        return;
577}
578
579?>
Note: See TracBrowser for help on using the repository browser.