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

Revision 364, 15.0 KB checked in by frank.jaeger, 8 years ago (diff)

Verbesserungen an NAV und Buchauskunft

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