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

Revision 362, 14.8 KB checked in by frank.jaeger, 8 years ago (diff)

Anpassung der ALKIS-Buchauskunft an die Datenbank-Struktur des norGIS-ALKIS-Importer.

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*/
10
11function footer($gmlid, $link, $append) {
12        // Einen Seitenfuss ausgeben.
13        // Die Parameter &gkz= und &gmlid= kommen in allen Modulen einheitlich vor
14        // Den URL-Parameter "&showkey=j/n" umschalten lassen.
15        // $append wird angehaengt wenn gefuellt. Anwendung: &eig=j bei FS-NW, &ltyp=m/p/o bei Lage
16        global $gkz, $showkey, $hilfeurl;
17
18        $customer=$_SESSION["mb_user_name"];
19        echo "\n<div class='confbereich noprint'>"
20        ."\n<table class='outer'>\n<tr>";
21
22        // Spalte 1: Info Benutzerkennung
23        echo "\n\t<td title='Info'><i>Benutzer:&nbsp;".$customer."</i></td>";
24
25        // Spalte 2: Umschalter
26        echo "\n\t<td title='Konfiguration'>";
27                $mylink ="\n\t\t<a class='gmlid' href='".$link."gkz=".$gkz."&amp;gmlid=".$gmlid.$append;
28
29                if ($showkey) { // Umschalten SchlÃŒssel ein/aus
30                        echo $mylink."&amp;showkey=n' title='Verschl&uuml;sselungen ausblenden'>Schl&uuml;ssel aus</a>";
31                } else {
32                        echo $mylink."&amp;showkey=j' title='Verschl&uuml;sselungen anzeigen'>Schl&uuml;ssel ein</a>";
33                }
34        echo "\n\t</td>";
35
36        // Spalte 3
37        echo "\n\t<td title='Hilfe'>"
38        ."\n\t\t<p class='nwlink'>\n\t\t\t<a target='_blank' href='".$hilfeurl."' title='Dokumentation'>Hilfe zur ALKIS-Auskunft</a>\n\t\t</p>\n\t</td>"
39        ."\n</tr>\n</table>\n</div>\n";
40        return 0;
41}
42
43function ber_bs_hinw($gmls) {
44        // Unter einem Grundbuch-Link den Hinweis auf "berechtigte Buchungssstellen" anzeigen
45        // In FS-Nachweis wird nur der EigentÃŒmer des direkt gebuchten GrundstÃŒcks angezeigt.
46        // Den Erbbauberechtigten sieht man erst in der Grundbuch-Auskunft.
47        global $debug, $showkey;
48
49        // Buchungstelle dien. >an> Buchungstelle herr.
50        $sql ="SELECT count(sh.gml_id) AS anz, sh.buchungsart, a.v "
51        ."FROM ax_buchungsstelle sd JOIN ax_buchungsstelle sh ON sd.gml_id=ANY(sh.an) "
52        ."LEFT JOIN alkis_wertearten a ON sh.buchungsart=cast(a.k AS integer) "
53        ."WHERE sd.gml_id= $1 AND sh.endet IS NULL AND sd.endet IS NULL AND a.element='ax_buchungsstelle' and a.bezeichnung='buchungsart' "
54        ."GROUP BY sh.buchungsart, a.v;";
55
56        $v = array($gmls); // id dienende BS
57        $resan = pg_prepare("", $sql);
58        $resan = pg_execute("", $v);
59        if (!$resan) {
60                echo "\n<p class='err'>Fehler bei 'berechtigte Buchungsstellen'.</p>\n";
61                if ($debug > 2) {echo "<p class='dbg'>SQL=<br>".$sql."<br>$1 = gml_id = '".$gmls."'</p>";}
62        }
63        $an=0;
64        while($rowan = pg_fetch_array($resan)) {
65                $an++;
66                if ($an == 1) {echo "\n\t<br>\n\t<p class='nwlink' title='Andere Grundst&uuml;cke mit Rechten an diesem.'>Berechtigte Buchungen:<br><b>";}
67                if ($an > 1) {echo",<br>";} // kann es gemischste Buchungsarten geben?
68                echo $rowan["anz"]." ".htmlentities($rowan["v"], ENT_QUOTES, "UTF-8");
69                if ($showkey) {echo " <span class='key'>(".$rowan["buchungsart"].")</span>";}
70        }
71        if ($an == 0) {
72                echo "<br><p class='nwlink' title='Kein anderes Grundst&uuml;ck hat ein Recht an diesem.'>Keine berechtigte Buchung</p>";
73        } else {
74                echo "</b></p>";
75        }
76        pg_free_result($resan);
77}
78
79function kurz_namnr($lang) {
80        // Namensnummer kÃŒrzen. Nicht benötigte Stufen der Dezimalklassifikation abschneiden
81        $kurz=str_replace(".00","",$lang); // leere Stufen (nur am Ende)
82        $kurz=str_replace("0000","",$kurz); // ganz leer (am Anfang)
83        $kurz=ltrim($kurz, "0"); // fuehrende Nullen am Anfang
84        $kurz=str_replace(".0",".",$kurz); // fuehrende Null jeder Stufe
85        return $kurz;
86}
87
88function bnw_fsdaten($con, $lfdnr, $gml_bs, $ba, $anteil, $bvnraus, $bartkey, $bartstory) {
89/*      Bestandsnachweis - Flurstuecksdaten
90        Die Tabellenzeilen mit den Flurstuecksdaten zu einer Buchungsstelle im Bestandsnachweis ausgeben.
91        Die Funktion wird je einmal aufgerufen fÃŒr die Buchungen direkt auf dem GB (Normalfall).
92        Weiterere Aufrufe ggf. bei Erbbaurecht fÃŒr die mit "an" verknuepften Buchungsstellen.
93        Table-Tag und Kopfzeile im aufrufenden Programm. */
94        global $debug, $gkz, $showkey;
95
96        // F L U R S T U E C K
97        $sql="SELECT g.gemarkungsnummer, g.bezeichnung, f.gml_id, f.flurnummer, f.zaehler, f.nenner, f.regierungsbezirk, f.kreis, f.gemeinde, f.amtlicheflaeche
98        FROM ax_flurstueck f JOIN ax_buchungsstelle s ON f.istgebucht=s.gml_id
99        LEFT JOIN ax_gemarkung g ON f.land=g.land AND f.gemarkungsnummer=g.gemarkungsnummer
100        WHERE s.gml_id= $1 AND f.endet IS NULL AND s.endet IS NULL AND g.endet IS NULL ORDER BY f.gemarkungsnummer, f.flurnummer, f.zaehler, f.nenner;";
101
102        $v = array($gml_bs);
103        $resf = pg_prepare("", $sql);
104        $resf = pg_execute("", $v);
105        if (!$resf) {echo "<p class='err'>Fehler bei Flurst&uuml;ck</p>\n";}
106
107        if($bvnraus) { // nur bei direkten Buchungen die lfdNr ausgeben
108                $bvnr=str_pad($lfdnr, 4, "0", STR_PAD_LEFT);
109        }
110        $altlfdnr="";
111        $j=0;
112        while($rowf = pg_fetch_array($resf)) {
113                $flur=str_pad($rowf["flurnummer"], 3, "0", STR_PAD_LEFT);
114                // ohne fuehrende Nullen?
115                $fskenn=$rowf["zaehler"];
116                if ($rowf["nenner"] != "") { // Bruchnummer
117                        $fskenn.="/".$rowf["nenner"];
118                }
119                $flae=number_format($rowf["amtlicheflaeche"],0,",",".") . " m&#178;";
120
121                echo "\n<tr>"; // eine Zeile je Flurstueck
122                        // Sp. 1-3 der Tab. aus Buchungsstelle, nicht aus FS
123                        if($lfdnr == $altlfdnr) { // gleiches Grundstueck
124                                echo "\n\t<td>&nbsp;</td>"
125                                ."\n\t<td>&nbsp;</td>"
126                                ."\n\t<td>&nbsp;</td>";
127                        } else { // Sprungmarke, BVNR
128                                echo "\n\t<td>"
129                                        ."<a name='bvnr".$lfdnr."'></a>"
130                                        ."<span class='wichtig'>".$bvnr."</span>"
131                                ."</td>";
132
133                                echo "\n\t<td title ='".$bartstory."'>"; // Buchungsart
134                                        if ($showkey) {echo "<span class='key'>".$bartkey."</span>&nbsp;";} // Schluessel
135                                        echo $ba; // entschluesselt
136                                echo "</td>"
137                                ."\n\t<td>&nbsp;</td>"; // Anteil
138                                $altlfdnr=$lfdnr;
139                        }
140                        //Sp. 4-7 aus Flurstueck
141                        echo "\n\t<td>";
142                        if ($showkey) {echo "<span class='key'>".$rowf["gemarkungsnummer"]."</span> ";}
143                        echo $rowf["bezeichnung"]."</td>"
144                        ."\n\t<td>".$flur."</td>"
145                        ."\n\t<td class='fsnr'><span class='wichtig'>".$fskenn."</span>"
146                        ."</td>"
147                        ."\n\t<td class='fla'>".$flae."</td>";
148
149                        echo "\n\t<td><p class='nwlink noprint'>"
150                                ."<a href='alkisfsnw.php?gkz=".$gkz."&amp;gmlid=".$rowf["gml_id"]."&amp;eig=n";
151                                        if ($showkey)   {echo "&amp;showkey=j";}
152                                        echo "' title='Flurst&uuml;cksnachweis'>Flurst&uuml;ck "
153                                        ."<img src='ico/Flurstueck_Link.png' width='16' height='16' alt=''>"
154                                ."</a>"
155                        ."</p></td>"
156                ."\n</tr>";
157
158                $j++;
159        } // Ende Flurstueck
160
161/*      if ($j == 0 ) { // nur Entw.
162                if ($debug > 1) {echo "<p class='dbg'>Keine FS gefunden</p>";}
163                if ($debug > 2) {echo "<p class='dbg'>SQL='".$sql."'<br>$1 = '".$gml_bs."'</p>";}
164        } */
165        pg_free_result($resf);
166        return $j;
167}
168
169function eigentuemer($con, $gmlid, $mitadresse, $lnkclass) {
170        // Tabelle mit Eigentuemerdaten zu einem Grundbuchblatt ausgeben
171        // Sp.1 = Namennummer, Sp. 2 = Name / Adresse, Sp. 3 = Link
172        // Parameter:
173        //      $gmlid = ID GB-Blattes
174        //      $mitadresse = Option (true/false) ob die Adresszeile ausgegeben werden soll
175        // Return = Anzahl Namensnummern
176
177        // Schleife 1: N a m e n s n u m m e r
178        // Beziehung: ax_namensnummer >istBestandteilVon> ax_buchungsblatt
179        global $debug, $gkz, $showkey;
180
181        // Link ÃŒber Java-Class? (Ja in alkisinlayausk.php, sonst normal)
182        if ($lnkclass == "") {
183                $lnkvor = "";
184                $lnknach = "";
185        } else {
186                $lnkvor  = "javascript:".$lnkclass."(\"";
187                $lnknach = "\")";
188        } // Beispiel-Link href='javascript:imFenster(\"alkislage.php?gkz= ... ."\")'>xxx ";
189
190        $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, wn.v AS adrv, we.v AS eiartv
191FROM ax_namensnummer n
192LEFT JOIN alkis_wertearten wn ON cast(n.artderrechtsgemeinschaft AS character varying)=wn.k AND wn.element='ax_namensnummer' AND wn.bezeichnung='artderrechtsgemeinschaft'
193LEFT JOIN alkis_wertearten we ON cast(n.eigentuemerart AS character varying)=we.k AND we.element='ax_namensnummer' AND we.bezeichnung='eigentuemerart'
194WHERE n.istbestandteilvon= $1 AND n.endet IS NULL ORDER BY n.laufendenummernachdin1421;";
195
196        $v = array($gmlid); // 16 Stellen bei Relationen
197        $resn = pg_prepare("", $sqln);
198        $resn = pg_execute("", $v);
199
200        if (!$resn) {
201                echo "<p class='err'>Fehler bei Eigent&uuml;mer</p>\n";
202                if ($debug > 2) {echo "<p class='err'>SQL=<br>".$sqln."<br>$1=gml= '".$gmlid."'</p>";}
203        }
204
205        echo "\n\n<table class='eig'>";
206        $n=0; // Z.NamNum.
207
208        while($rown = pg_fetch_array($resn)) {
209                $gmlnn=$rown["gml_id"];
210                echo "\n<tr>";
211                        echo "\n\t<td class='nanu' title='Namens-Nummer'>\n\t\t<p>"; // Sp. 1
212                                // VOR die Tabelle: "EigentÃŒmer"
213                                $namnum=kurz_namnr($rown["lfd"]);
214                                echo $namnum."&nbsp;";
215                        echo "</p>\n\t</td>";
216
217                        echo "\n\t<td>"; // Sp. 2
218                        $rechtsg=$rown["adr"];
219                        if ($rechtsg != "" ) {
220                                if ($rechtsg == 9999) { // sonstiges
221                                        echo "\n\t\t<p class='zus' title='Beschrieb der Rechtsgemeinschaft'>".htmlentities($rown["beschr"], ENT_QUOTES, "UTF-8")."</p>";
222                                } else {
223                                        echo "\n\t\t<p class='zus' title='Art der Rechtsgemeinschaft'>".htmlentities($rown["adrv"], ENT_QUOTES, "UTF-8")."</p>";
224                                }
225                        }
226                        //if ($rown["anlass"] > 0 ) {echo "<p>Anlass=".$rown["anlass"]."</p>";} // TEST:
227
228                        // Schleife Ebene 2: andere Namensnummern
229                        // Beziehung   ax_namensnummer >bestehtAusRechtsverhaeltnissenZu>  ax_namensnummer
230
231                        // Die Relation 'Namensnummer' besteht aus RechtsverhÀltnissen zu 'Namensnummer' sagt aus,
232                        // dass mehrere Namensnummern zu einer Rechtsgemeinschaft gehören können.
233                        // Die Rechtsgemeinschaft selbst steht unter einer eigenen AX_Namensnummer,
234                        // die zu allen Namensnummern der Rechtsgemeinschaft eine Relation besitzt.
235
236                // Schleife 2: P e r s o n
237                // Beziehung: ax_person  <benennt<  ax_namensnummer
238                $sqlp="SELECT p.gml_id, p.nachnameoderfirma, p.vorname, p.geburtsname, p.geburtsdatum, p.namensbestandteil, p.akademischergrad "
239                ."FROM ax_person p JOIN ax_namensnummer nn ON nn.benennt=p.gml_id WHERE nn.gml_id= $1 AND p.endet IS NULL AND nn.endet IS NULL;";
240
241                $v = array($gmlnn);
242                $resp = pg_prepare("", $sqlp);
243                $resp = pg_execute("", $v);
244
245                if (!$resp) {
246                        echo "\n\t<p class='err'>Fehler bei Person</p>\n";
247                        if ($debug > 2) {echo "<p class='err'>SQL=<br>".$sqlp."<br>$1=gml= '".$gmlnn."'</p>";}
248                }
249
250                $i=0; // cnt Person
251                while($rowp = pg_fetch_array($resp)) { // Schleife notwendig? nn >benennt> Person ist kein Array!
252                        $diePerson="";
253                //      +++ Anrede?
254                        if ($rowp["akademischergrad"] <> "") {$diePerson=$rowp["akademischergrad"]." ";}
255                        $diePerson.=$rowp["nachnameoderfirma"];
256                        if ($rowp["vorname"] <> "") {$diePerson.=", ".$rowp["vorname"];}
257                        if ($rowp["namensbestandteil"] <> "") {$diePerson.=". ".$rowp["namensbestandteil"];}
258                        if ($rowp["geburtsdatum"] <> "") {$diePerson.=", geb. ".$rowp["geburtsdatum"];}
259                        if ($rowp["geburtsname"] <> "") {$diePerson.=", geb. ".$rowp["geburtsname"];}
260                        $diePerson=htmlentities($diePerson, ENT_QUOTES, "UTF-8"); // Umlaute
261
262                        // Spalte 1 enthÀlt die Namensnummer, nur in Zeile 0
263                        if ($i > 0) {
264                                echo "\n<tr>\n\t<td>&nbsp;</td>\n\t<td>";
265                        }
266                        // Spalte 2 = Angaben
267                        $eiartkey=$rown["eigentuemerart"]; // Key
268                        $eiart=$rown["eiartv"]; // Value
269                        echo "\n\t\t<p class='geig' title='Eigent&uuml;merart: ".$eiart."'>".$diePerson."</p>\n\t</td>";
270
271                        // Spalte 3 = Link
272                        echo "\n\t<td>\n\t\t<p class='nwlink noprint'>";
273                                if ($showkey AND $eiartkey != '') { // oft leer
274                                                echo "<span class='key'>(".$eiartkey.")</span> ";
275                                }
276                                echo "\n\t\t<a href='".$lnkvor."alkisnamstruk.php?gkz=".$gkz."&amp;gmlid=".$rowp[0];
277                                if ($showkey)   {echo "&amp;showkey=j";}
278                                echo $lnknach."' title='vollst&auml;ndiger Name und Adresse eines Eigent&uuml;mers'>".$eiart;
279                                echo " <img src='ico/Eigentuemer.png' width='16' height='16' alt=''></a>\n\t\t</p>";
280                        echo "\n\t</td>\n</tr>";
281
282                        if ($mitadresse) {
283                                // Schleife 3:  A d r e s s e  (OPTIONAL)
284                                $sqla ="SELECT a.gml_id, a.ort_post, a.postleitzahlpostzustellung AS plz, a.strasse, a.hausnummer, a.bestimmungsland "
285                                ."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 LIMIT 2;";
286                                $gmlp=$rowp["gml_id"]; // Person
287                                $v = array($gmlp);
288                                $resa = pg_prepare("", $sqla);
289                                $resa = pg_execute("", $v);
290
291                                if (!$resa) {
292                                        echo "\n\t<p class='err'>Fehler bei Adressen</p>\n";
293                                        if ($debug > 2) {echo "<p class='err'>SQL=<br>".$sqla."<br>$1=gml= '".$gmlp."'</p>";}
294                                }
295                                $j=0;
296                                while($rowa = pg_fetch_array($resa)) {
297                                        $j++;
298                                        if ($j == 1) { // erste Adresse anzeigen
299                                                $gmla=$rowa["gml_id"];
300                                                $plz=$rowa["plz"]; // integer
301                                                if($plz == 0) {
302                                                        $plz="";
303                                                } else {
304                                                        $plz=str_pad($plz, 5, "0", STR_PAD_LEFT);
305                                                }
306                                                $ort=htmlentities($rowa["ort_post"], ENT_QUOTES, "UTF-8");
307                                                $str=htmlentities($rowa["strasse"], ENT_QUOTES, "UTF-8");
308                                                $hsnr=$rowa["hausnummer"];
309                                                $land=htmlentities($rowa["bestimmungsland"], ENT_QUOTES, "UTF-8");
310
311                                                echo "\n<tr>\n\t<td>&nbsp;</td>"; //Sp. 1
312                                                echo "\n\t<td><p class='gadr'>"; //Sp. 2
313                                                if ($str.$hsnr != "") {echo $str." ".$hsnr."<br>";}
314                                                if ($plz.$ort != "") {echo $plz." ".$ort;}
315                                                if ($land != "" and $land != "DEUTSCHLAND") {echo ", ".$land;}
316                                                echo "</p></td>\n\t<td>"; // Sp. 3
317                                                echo "&nbsp;</td>\n</tr>";
318                                        } else { // manchmal dopplete Angaben (_straße / _str.)
319                                                echo "\n<tr>\n\t<td>&nbsp;</td>\n\t<td><p class='dbg' title='Siehe Auskunft zur Person'>weitere Adresse</p></td>\n\t<td>&nbsp;</td>\n</tr>";
320                                        }
321                                }
322                                pg_free_result($resa);
323                        }
324                        // 'keine Adresse' kann vorkommen, z.B. "Deutsche Telekom AG"
325
326                        $i++; // cnt Person
327
328                        // Anteil als eigene Tab-Zeile:
329                        $zaehler=$rown["zaehler"];
330                        if ($zaehler != "") {
331                                $zaehler=str_replace(".", ",", $zaehler); // Dezimal-KOMMA wenn dem Notar der Bruch nicht reicht
332                                $nenner=str_replace(".", ",", $rown["nenner"]);
333                                $comnt="Anteil der Berechtigten in Bruchteilen (Par. 47 GBO) an einem gemeinschaftlichen Eigentum (Grundst&uuml;ck oder Recht).";
334                                echo "\n<tr>\n\t<td>&nbsp;</td>"; // Sp. 1
335                                echo "\n\t<td><p class='avh' title='".$comnt."'>".$zaehler."/".$nenner." Anteil</p></td>";
336                                echo "\n\t<td>&nbsp;</td>\n</tr>"; // Sp. 3
337                        }
338                } // End Loop Person
339                if ($i == 0) { // kommt vor hinter Zeile Erbengemeinschaft, ist dann KEIN Fehler
340                        if ($debug > 1) { // nur bei Entwicklung
341                                echo "\n<p class='dbg'>Rechtsgemeinschaft = '".$rechtsg."'</p>";
342                                if ($rechtsg != 9999) {
343                                        echo "\n<p class='dbg'>Fehler: Keine Person zur Namensnummer ".$namnum."</p>";
344                                //      if ($debug > 2) {echo "\n<p class='dbg'>SQL=<br>".$sqlp."<br>$1 = gml(NamNum) = '".$gmlnn."'</p>";}
345                                }
346                        }
347                        echo "</td>\n\t<td>&nbsp;</td>\n<tr>";
348                }
349                $n++; // cnt NamNum
350        } // End Loop NamNum
351        echo "\n</table>\n";
352        if ($n == 0) { // bei "Fiktives Blatt" KEIN Fehler
353                if ($debug > 1) {
354                        echo "<p class='dbg'>keine Namensnummern zum Blatt</p>";
355                        if ($debug > 2) {echo "<p class='dbg'>SQL=<br>".$sqln."<br>$1=gml(Blatt)= '".$gmlid."'</p>";}
356                }
357        }
358        pg_free_result($resn);
359        return $n;
360} // End Function eigentuemer
361
362?>
Note: See TracBrowser for help on using the repository browser.