source: trunk/mapbender/http/nav/alkisnav_eig.php @ 333

Revision 333, 25.3 KB checked in by frank.jaeger, 10 years ago (diff)

Anpassung der Programme und Views an verschieden lange gm_id und Datenbanken mit historischen Objekten.

RevLine 
[134]1<?php
[278]2/* Version vom
[276]3        2013-04-16 "import_request_variables" entfÀllt in PHP 5.4
[278]4        2013-04-26      Ersetzen View "gemeinde_gemarkung" durch Tabelle "pp_gemarkung".
[315]5                                Stufe 2: GB *und* FS mit einem Klick anzeigen.
6                                BlÀtterfunktion (Folgeseiten) fÃŒr lange Listen.
7                                Function extern gemeinsam genutzt in _eig und _grd.
8                                Dazu Var-Namen harmonisieren: $gb wird $blattgml.
9                                ZurÃŒck-Link, Titel der Transaktion anzeigen.
[282]10        2013-04-29      Darstellung mit IE
11        2013-05-07  Strukturierung des Programms, redundanten Code in Functions zusammen fassen
[284]12        2013-05-14  Hervorhebung aktuelles Objekt, Parameter "gbkennz" auswerten,
[315]13                                Title auch auf Icon, IE zeigt sonst alt= als Title dar.
[330]14        2014-09-09  PostNAS 0.8: ohne Tab. "alkis_beziehungen", mehr "endet IS NULL", Spalten varchar statt integer
[333]15        2014-09-15  Bei Relationen den Timestamp abschneiden
[134]16*/
[276]17$cntget = extract($_GET);
[278]18include("../../conf/alkisnav_conf.php"); // Konfigurations-Einstellungen
19include("alkisnav_fkt.php"); // Funktionen
[134]20$con_string = "host=".$host." port=".$port." dbname=".$dbname.$dbvers.$gkz." user=".$user." password=".$password;
21$con = pg_connect ($con_string) or die ("<p class='err'>Fehler bei der Verbindung zur Datenbank</p>".$dbname.$dbvers.$gkz);
[278]22echo <<<END
[134]23<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
24<html>
25<head>
26        <meta http-equiv="cache-control" content="no-cache">
27        <meta http-equiv="pragma" content="no-cache">
28        <meta http-equiv="expires" content="0">
29        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
30        <title>ALKIS-Suche Eigent&uuml;mer</title>
[129]31        <link rel="stylesheet" type="text/css" href="alkisnav.css">
32        <script type="text/javascript">
33                function imFenster(dieURL) {
34                        var link = encodeURI(dieURL);
35                        window.open(link,'','left=10,top=10,width=620,height=800,resizable=yes,menubar=no,toolbar=no,location=no,status=no,scrollbars=yes');
36                }
[278]37                function transtitle(trans) {
38                        document.getElementById('transaktiontitle').innerHTML = trans;
39                }
[134]40        </script>
41</head>
[66]42<body>
[280]43<a href='javascript:history.back()'>
[282]44        <img src="ico/zurueck.ico" width="16" height="16" alt="&lt;&lt;" title="zur&uuml;ck">
[278]45</a>
46<dfn class='title' id='transaktiontitle'></dfn>
[66]47
[278]48END;
[134]49
[278]50// Einen Link generieren, um nach anderen Personen mit gleichem Familiennamen zu suchen
51function familiensuche() {
[282]52        global $gkz, $gemeinde, $epsg, $name;
[278]53        if(isset($name)) { // Familiensuche
54                echo "\n<div class='back' title='Andere Personen mit diesem Nachnamen'>";
[284]55                        echo "\n\t\t<img class='nwlink' src='ico/Eigentuemer_2.ico' width='16' height='16' alt='FAM' title='Andere Personen mit diesem Nachnamen'> ";
[278]56                        echo "\n<a class='back' href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;name=".$name."'>\"".$name."\"</a>";
57                echo "\n</div>\n<br>"; 
58        }
59        return;
60}
61
[282]62function personendaten() { // Adresse und Geburtsdatum der aktuellen Person ausgeben
[278]63        global $gkz, $gemeinde, $epsg, $name, $person, $blattgml, $auskpath; // $debug
[330]64
[333]65        $sql ="SELECT p.nachnameoderfirma, p.vorname, p.geburtsdatum, p.namensbestandteil,
66        a.ort_post, a.postleitzahlpostzustellung AS plz, a.strasse, a.hausnummer
67        FROM ax_person p LEFT JOIN ax_anschrift a ON substring(a.gml_id,1,16)=ANY(p.hat)
68        WHERE p.gml_id= $1 AND p.endet IS NULL AND a.endet IS NULL LIMIT 1;";   
[330]69        // Es wird nur eine Zeile ausgewertet
70
[278]71        $v=array($person);
72        $res=pg_prepare("", $sql);
73        $res=pg_execute("", $v);
[282]74        if (!$res) {echo "\n<p class='err'>Fehler bei Name</p>\n";}
[283]75        $row = pg_fetch_array($res);
76        $zeil1=$row["nachnameoderfirma"].", ".$row["vorname"];
77        $gebdat=$row["geburtsdatum"];
78        if ($gebdat != "") {$zeil1.= ", geb. ".$gebdat;}
79        $best=$row["namensbestandteil"];
80        if ($best != "") {$zeil1.= ", ".$best;}
81        $zeil1=htmlentities($zeil1, ENT_QUOTES, "UTF-8");
82
83        $zeil2=trim($row["plz"]." ".$row["ort_post"]);
84        if ($zeil2 != "") {
85                $zeil2="\n\t<br>".htmlentities($zeil2, ENT_QUOTES, "UTF-8");
86        }
87
88        $zeil3= trim($row["strasse"]." ".$row["hausnummer"]);
89        if ($zeil3 != "") {
90                $zeil3= "\n\t<br>".htmlentities($zeil3, ENT_QUOTES, "UTF-8");
91        }
92
93// Tabelle: Sp.1=Icon, Link zur Auskunft Person, Sp.2=Rahmen
94echo "
95<div class='pe aktuell'>
96<table>
97<tr>
98        <td valign='top'>
99                <a title='Nachweis' href='javascript:imFenster(\"".$auskpath."alkisnamstruk.php?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;gmlid=".$person."\")'>
[284]100                        <img class='nwlink' src='ico/Eigentuemer.ico' width='16' height='16' alt='EIG' title='Nachweis'>
[283]101                </a>
102        </td>
103        <td>
104                <p class='nam'>".$zeil1.$zeil2.$zeil3."</p>
105        </td>
106</tr>
107</table>
108</div>";
109return;
[278]110}
111
[66]112function getEigByName() {
[282]113        // 1 // Eigentuemer nach Name(-nsanfang)
114        global $gkz, $gemeinde, $epsg, $name, $person, $gfilter;
[278]115        $linelimit=150;
[135]116        $arr = explode(",", $name);
[134]117        $name0 = trim($arr[0]);
118        $name1 = trim($arr[1]);
119        if(preg_match("/\*/",$name0)){
120                $match = trim(preg_replace("/\*/i","%", strtoupper($name0)));
121        } else {
122                $match = trim($name0)."%";
[66]123        }       
[134]124        if(preg_match("/\*/",$name1)){
125                $match1 = trim(preg_replace("/\*/i","%", strtoupper($name1)));
126        } else {
127                $match1 = trim($name1)."%";
[135]128        }               
[140]129        $sql ="SELECT p.nachnameoderfirma, p.vorname, p.gml_id FROM ax_person p ";
[278]130        if ($gfilter > 0) {
[333]131        //      $sql.="JOIN gemeinde_person g ON substring(p.gml_id,1,16) = substring(g.person,1,16) WHERE ";
132                $sql.="JOIN gemeinde_person g ON p.gml_id=g.person WHERE ";
[140]133                switch ($gfilter) {
[330]134                        case 1: // Einzel
135                                $sql.="g.gemeinde='".$gemeinde."' AND "; break;
[140]136                        case 2: // Liste
[330]137                                $sql.="g.gemeinde in ('".str_replace(",", "','", $gemeinde)."') AND "; break;
[140]138                }
139        } else {
140                $sql.="WHERE ";
141        }
[134]142        if($match1 != '%'){
[140]143                $sql.="nachnameoderfirma ILIKE $1 AND p.vorname ILIKE $2 ";             
[134]144                $sql.="ORDER BY p.nachnameoderfirma, p.vorname LIMIT $3 ;";
145                $v=array($match, $match1, $linelimit);
146        }else{
[140]147                $sql.="nachnameoderfirma ILIKE $1 ";           
[134]148                $sql.="ORDER BY p.nachnameoderfirma, p.vorname LIMIT $2 ;";
149                $v=array($match, $linelimit);
150        }
[66]151        $res=pg_prepare("", $sql);
152        $res=pg_execute("", $v);
153        if (!$res) {
154                echo "\n<p class='err'>Fehler bei Eigent&uuml;mer</p>";
155                return;
156        }
[134]157        $cnt = 0;
[66]158        while($row = pg_fetch_array($res)) {
[282]159                $nachname=$row["nachnameoderfirma"];
160                $vorname=$row["vorname"];
161                $persongml=$row["gml_id"];
[283]162                zeile_person($persongml, $nachname, $vorname);
[134]163                $cnt++;
164        }
[66]165        if($cnt == 0){
[278]166                echo "\n<p class='anz'>Kein Eigent&uuml;mer gefunden.</p>";
167        } elseif($cnt >= $linelimit) { // das Limit war zu knapp
168                echo "\n<p class='anz' title='Bitte den Namen eindeutiger qualifizieren'>... und weitere</p>";
[66]169        } elseif($cnt == 1){ // Eindeutig!
[282]170                $person = $persongml;
[278]171        } else {
172                echo "\n<p class='anz'>".$cnt." Eigent&uuml;mer mit '".$name."'</p>";   // im Limit
[66]173        }
[134]174        return;
[66]175}
176
177function getGBbyPerson() {
[282]178        // 2 // GrundbÃŒcher zur gewÀhlten Person
[278]179// Es wird in dieser Function nicht geprÃŒft, ob die gefundenen GrundbÃŒcher auch FlurstÃŒcke
180// haben, die im gefilterten Bereich (Gemeinde) liegen. Es können daher Sackgassen entstehen,
181// also GrundbÌcher, die in der nÀchsten Stufe bei Filterung nicht zu Treffern fÌhren.
182// Das Joinen bis zum FS unter BerÌcksichtigung von speziellen Buchungen ist zu aufwÀndig.
183// Dann kann entweder das FS gleich mit ausgegeben werden -> getGBuFSbyPerson.
184// Alternativ wÌrde eine Hilfstabelle benötigt, in der im PostProcessing
185// das GB-zu-Gemeinde-VerhÀltnis vorbereitet wird.
[284]186        global $gkz, $gemeinde, $epsg, $name, $person, $blattgml, $debug, $bltbez, $bltblatt, $bltseite, $kennztyp, $zgbbez;
187        # $zblatt, $zblattn, $zblattz, $zbvnr;
[278]188        $linelimit=150;
[284]189
190        // Head
[278]191        familiensuche();
192        personendaten();
[284]193
194        // Body
[66]195        // Suche nach GrundbÃŒchern der Person
[333]196        $sql ="SELECT gb.gml_id AS gml_g, gb.buchungsblattnummermitbuchstabenerweiterung as blatt, b.bezirk, b.bezeichnung AS beznam
197        FROM ax_namensnummer n JOIN ax_buchungsblatt gb ON n.istbestandteilvon=substring(gb.gml_id,1,16)
198        JOIN ax_buchungsblattbezirk b ON gb.land=b.land AND gb.bezirk=b.bezirk
199        WHERE n.bennennt = $1 AND n.endet IS NULL AND gb.endet IS NULL AND b.endet IS NULL;";
[284]200
201        // Parameter $gbkennz, z.B. nach Klick auf Zeile "Bezirk"
[330]202        if ($kennztyp > 1) { // 2=Such Bezirk-Nummer, 3=Such Blatt, 4=Such Buchung BVNR
[284]203                #if ($debug > 0) {echo "<p class='dbg'>Filter Bezirk '".$zgbbez."'<p>";}
[330]204                $sql.="AND b.bezirk='".$zgbbez."' ";
[284]205                $bezirkaktuell = true;
206        } else {
207                $bezirkaktuell = false;
208        }
209
[278]210        if ($bltbez.$bltblatt != "") { // BlÀttern, Fortsetzen bei ...
211                $sql.="AND ((b.bezeichnung > '".$bltbez."') ";
212                $sql.="OR (b.bezeichnung = '".$bltbez."' AND gb.buchungsblattnummermitbuchstabenerweiterung > '".$bltblatt."')) ";
213        }
[284]214
[278]215        $sql.="ORDER BY b.bezeichnung, gb.buchungsblattnummermitbuchstabenerweiterung LIMIT $2 ;";
216
217        if ($bltseite == "") { // Seite 1
218                $bltseite = 1;
219        } else { // Folgeseite
220                echo "\n<p class='ein'>Teil ".$bltseite;
221        }
[333]222        $v=array(substr($person,0,16), $linelimit); // nur 16 Stellen in Relation "benennt"
[66]223        $res=pg_prepare("", $sql);
224        $res=pg_execute("", $v);
225        if (!$res) {
226                echo "\n<p class='err'>Fehler bei Grundbuch</p>";
227                return;
228        }
229        $cnt = 0;
[284]230        $gwbez="";
[66]231        while($row = pg_fetch_array($res)) {
[284]232                $beznr=$row["bezirk"];
233                if ($gwbez != $beznr) { // Gruppenwechsel Bezirk
234                        $beznam=$row["beznam"];
235                        $gwbez=$beznr;
236                        zeile_gbbez ($beznam, $beznr, $bezirkaktuell);
237                }
[66]238                $gml=$row["gml_g"];
[278]239                $blatt=$row["blatt"];
[283]240                zeile_blatt($zgbbez, $beznam, $gml, $blatt, false, $person, false);
[134]241                $cnt++;
242        }
[333]243/*
244        if ($cnt == 0) { // Nur Entwicklg.
245                if ($debug > 1) {
246                        echo "\n<p class='err'>keine Buchung</p>";
247                }
248                if ($debug > 2) {
249                        echo "<p class='dbg'>SQL = '".$sql."',<br>$1 = '".substr($person,0,16)."'<p>";
250                }
251        }
252*/
[284]253        // Foot
[278]254        if($cnt == 0) {
255                echo "\n<p class='anz'>Kein Grundbuch zum Eigent&uuml;mer</p>";
[66]256        } elseif($cnt >= $linelimit) {
[278]257                echo "\n<p class='blt'>".$cnt." Grundb. zum Eigent.";
[284]258
259                // BlÀttern
[278]260                $nxtbltbez=urlencode($beznam);
261                $nxtbltblatt=urlencode($blatt);
262                $nxtbltseite=$bltseite + 1;
263                echo "\n - <a class='blt' href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;person=".$person."&amp;bltbez=".$nxtbltbez."&amp;bltblatt=".$nxtbltblatt."&amp;bltseite=".$nxtbltseite."' ";
264                echo "title='Bl&auml;ttern ab ".htmlentities($beznam)." Blatt ".$blatt."'>weitere</a>";
265                echo "</p>";
266        } elseif($cnt == 1) { // Eindeutig!
267                $blattgml=$gml; // dann Stufe 3 gleich nachschieben
268        } else {
269                echo "\n<p class='anz'>".$cnt." Grundb&uuml;cher zum Eigent&uuml;mer</p>";
[66]270        }
271        return;
272}
[278]273
[66]274function getFSbyGB($backlink) {
[282]275        // 3 // FlurstÃŒcke zum Grundbuch
[278]276// Zu einem Grundbuch (gml_id als Parameter) werden alle darauf gebuchten FlurstÃŒcke gesucht.
277// Im ersten Schritt sind das direkt gebuchten FlurstÃŒcke.
278// Im zweiten Schritt wird gesucht nach Rechten einer Buchungstelle des durchsuchten Blattes an anderen
[282]279// Buchungstellen.
280        global $gkz, $gemeinde, $name, $person, $blattgml, $epsg, $gfilter, $debug;
[278]281        if($backlink) { // Erneuter Ansatz bei Person oder GB möglich.
[284]282
[278]283                // Namen ermitteln
284                $sql ="SELECT nachnameoderfirma, vorname FROM ax_person WHERE gml_id = $1 ";
285                $v=array($person);
286                $res=pg_prepare("", $sql);
287                $res=pg_execute("", $v);
[282]288                if (!$res) {echo "\n<p class='err'>Fehler bei Eigent&uuml;mer</p>";}
[278]289                $row = pg_fetch_array($res); // nur eine Zeile
[284]290                zeile_person($person, $row["nachnameoderfirma"], $row["vorname"]);
[282]291
[278]292                // Grundbuch-Daten ermitteln
[282]293                $sql ="SELECT gb.gml_id AS gml_g, gb.buchungsblattnummermitbuchstabenerweiterung as blatt, b.bezirk, b.bezeichnung AS beznam ";
294                $sql.="FROM ax_buchungsblatt gb JOIN ax_buchungsblattbezirk b ON gb.land=b.land AND gb.bezirk=b.bezirk ";
[284]295                $sql.="WHERE gb.gml_id= $1 LIMIT 1 ;";
[278]296                $v=array($blattgml);
297                $res=pg_prepare("", $sql);
298                $res=pg_execute("", $v);
[282]299                if (!$res) {echo "\n<p class='err'>Fehler bei Grundbuch</p>";}
300                $row = pg_fetch_array($res); // eine Zeile
[278]301                $gml=$row["gml_g"];
[282]302                $bezirk=$row["bezirk"];
[278]303                $beznam=$row["beznam"];
304                $blatt=$row["blatt"];
[284]305                zeile_gbbez ($beznam, $bezirk, false);
[283]306                zeile_blatt($bezirk, $beznam, $blattgml, $blatt, false, $person, true);
[66]307        }
[284]308        GB_Buchung_FS(250, ""); // Blatt > Grundst. > FS, max. 250, ohne Link "Buchung"
[278]309        return;
310}
311
312function getGBuFSbyPerson() {
[282]313        // 2 + 3 // GrundbÃŒcher UND FlurstÃŒcke zur gewÀhlten Person
[278]314// Dies ist die Kombination von Stufe 2 (GrundbÃŒcher zur Person) und 3 (FlurstÃŒcke zum Grundbuch)
315// in einem einzelnen Schritt. Wenn auf Gemeinde gefiltert wird, dann können in Stufe 2 (noch ohne Filter)
316// auch GrundbÃŒcher gefunden werden, die dann auf Stufe 3 (mit Filter) keine FS liefern ("Sackgasse"!).
317// Wenn aber per JOIN "GB -> FS -> Gemarkung -> Gemeinde" geprÌft wird, dann können
318// die Daten ja auch gleich ausgegeben werden.
319// FÌr FÀlle in denen nicht nach Gemeinde gefiltert wird (z.B. ganzer Kreis) kann weiter
320// Stufe 2 und 3 nacheinander verwendet werden. Dies ist wahrscheinlich ÃŒbersichtlicher,
321// weil "ungefiltert" in "2+3" zu lange Listen entstehen wÌrden, die durchblÀttert werden mÌssen.
[330]322
[284]323        global $gkz, $gemeinde, $epsg, $name, $person, $blattgml, $gfilter, $debug, $bltbez, $bltblatt, $bltbvnr, $bltseite, $bltrecht, $kennztyp, $zgbbez;
[278]324        $linelimit=80; // als Limit "Anzahl FlurstÃŒcke" in den beiden folgenden Abfragen
325        // darf nun etwas knapper sein, weil man jetzt blÀttern kann
326        familiensuche();
327        personendaten();
328
[330]329        // Wenn das Limit ÃŒberschritten wurde: zusÀtzliche Parameter "blt"=BlÀttern:
330        // - $bltbez   = Bezirk-Name 
331        // - $bltblatt = BlattMitBuchstabe
332        // - $bltbvnr  = lfd.Nr der Buchungsstelle
333        // - $bltseite = fortlaufende Seiten-Nr
334        // - $bltrecht = "nur"/"ohne" liefert nur den abgebrochene Teil der Auflistung
[278]335
[140]336        // SQL-Bausteine vorbereiten
[330]337        //  Direkte Buchungen suchen mit:  $sql1 + $sqla1 + $sql2
338        //  SonderfÀlle suchen mit:        $sql1 + $sqla2 + $sql2
[278]339
[330]340        // Baustein 1: SQL-Anfang fuer beide Varianten
[333]341        $sql1 ="SELECT gb.gml_id AS gml_g, gb.buchungsblattnummermitbuchstabenerweiterung as blatt, b.bezirk, b.bezeichnung AS beznam,
342        s1.gml_id as bsgml, s1.laufendenummer AS lfd, f.gml_id, f.flurnummer, f.zaehler, f.nenner, f.gemeinde, ot.gemarkung, ot.gemarkungsname, ";
[86]343        if($epsg == "25832") { // Transform nicht notwendig
[189]344                $sql1.="st_x(st_centroid(f.wkb_geometry)) AS x, ";
[278]345                $sql1.="st_y(st_centroid(f.wkb_geometry)) AS y ";
[86]346        } else { 
[189]347                $sql1.="st_x(st_transform(st_centroid(f.wkb_geometry), ".$epsg.")) AS x, ";
[278]348                $sql1.="st_y(st_transform(st_centroid(f.wkb_geometry), ".$epsg.")) AS y ";                     
[86]349        }
[66]350
[330]351        // NamenNummer >istbestandteilvon> buchungsblatt <istbestandteilvon< buchungsstelle-1
[333]352        $sql1.="FROM ax_namensnummer nn
353        JOIN ax_buchungsblatt gb ON substring(gb.gml_id,1,16)=nn.istbestandteilvon
354        JOIN ax_buchungsblattbezirk b ON gb.land=b.land AND gb.bezirk=b.bezirk
355        JOIN ax_buchungsstelle s1 ON substring(gb.gml_id,1,16)=s1.istbestandteilvon ";
[140]356
[330]357        // Baustein A: Auswahl 1 oder 2
358        // buchungsstelle-1 <istGebucht< FS
[333]359        $sqla1 ="JOIN ax_flurstueck f ON substring(s1.gml_id,1,16)=f.istgebucht ";
[140]360
[330]361        // buchungsStelle1 (herr.) >an> buchungsStelle2 (dien.) <istGebucht< FS
[333]362        $sqla2 ="JOIN ax_buchungsstelle s2 ON substring(s2.gml_id,1,16)=ANY(s1.an) ";
363        $sqla2.="JOIN ax_flurstueck f ON substring(s2.gml_id,1,16)=f.istgebucht ";
[284]364
[330]365        // Baustein 2: SQL-Ende fuer beide Varianten
366        $sql2 ="JOIN pp_gemarkung ot ON f.land=ot.land AND f.gemarkungsnummer=ot.gemarkung "; // Ortsteil
367        $sql2.="WHERE nn.benennt = $1 AND nn.endet IS NULL AND gb.endet IS NULL AND s1.endet IS NULL AND f.endet IS NULL ";
368        // AND s2.endet IS NULL
369
[284]370        // Parameter $gbkennz nach Klick auf Zeile "Bezirk"
[330]371        if ($kennztyp > 1) { // 2=Such Bezirk-Nummer, 3=Such Blatt, 4=Such Buchung BVNR
[284]372                #if ($debug > 0) {echo "<p class='dbg'>Filter Bezirk '".$zgbbez."'<p>";}
[333]373                $sql2.="AND b.bezirk = '".$zgbbez."' ";
[284]374                $bezirkaktuell = true;
375        } else {
376                $bezirkaktuell = false;
377        }
378
[278]379        switch ($gfilter) { // Gemeinde-Filter
380                case 1: // Einzelwert
[330]381                        $sql2.="AND ot.gemeinde='".$gemeinde."' "; break;
[278]382                case 2: // Liste
[330]383                        $sql2.="AND ot.gemeinde in ('".str_replace(",", "','", $gemeinde)."') "; break;
[140]384        }
[283]385        $sql3 ="ORDER BY b.bezirk, gb.buchungsblattnummermitbuchstabenerweiterung, cast(s1.laufendenummer AS integer), f.gemarkungsnummer, f.flurnummer, f.zaehler, f.nenner LIMIT $2 ;";
[278]386        // Sortier-Problem: laufendenummer in varchar linksbÃŒndig
[140]387
[278]388        // Die Bausteine in 2 Varianten kombinieren
[140]389
[278]390        // BlÀttern mit folgenden Parametern: $bltbez, $bltblatt, $bltbvnr, $bltseite, $bltrecht
391        if ($bltbez.$bltblatt.$bltbvnr != "") { // BlÀttern, Fortsetzen bei ...
392                $bltwhere ="AND ((b.bezeichnung > '".$bltbez."') ";
393                $bltwhere.="OR (b.bezeichnung = '".$bltbez."' AND gb.buchungsblattnummermitbuchstabenerweiterung > '".$bltblatt."') ";
394                $bltwhere.="OR (b.bezeichnung = '".$bltbez."' AND gb.buchungsblattnummermitbuchstabenerweiterung = '".$bltblatt."' AND cast(s1.laufendenummer AS integer) >= ".$bltbvnr." )) ";
[282]395        } // FlurstÃŒcke in der angeblÀtterten BVNR werden ggf. wiederholt
[278]396
397        if ($bltseite == "") { // auf Seite 1 beide Teile ausgegeben
398                $bltseite = 1;
399        } else { // Folgegeseite: nur Teil 1 *oder* 2
400                echo "\n<p class='ein'>Teil ".$bltseite." - ";
401                switch ($bltrecht) {
402                        case "nur":
403                                echo "nur Rechte an .. Buchungen</p>"; break;
404                        case "ohne":
405                                echo "nur direkte Buchungen</p>"; break;
406                        default:
407                                echo "</p>"; break;
[140]408                }
409        }
410
[278]411        // FÀlle ohne "Rechte an"
412        if ($bltrecht != "nur") { // "nur"/"ohne" liefert nur den abgebrochene Teil der Auflistung
[330]413                // Blatt <istBestandteilVon<  Buchungsstelle <istGebucht< Flurstck.
[278]414                $sql=$sql1.$sqla1.$sql2.$bltwhere.$sql3; // Direkte Buchungen
[333]415
416                $v=array(substr($person,0,16), $linelimit); // Rel. "benennt" nur 16 Zeichen
[278]417                $res=pg_prepare("", $sql);
418                $res=pg_execute("", $v);
419                if (!$res) {
420                        echo "\n<p class='err'>Fehler bei Buchung und Flurst&uuml;ck.</p>";
[333]421                        if ($debug > 2) {echo "<p class='dbg'>SQL = '".$sql."', $1 = '".substr($person,0,16)."'<p>";}
[278]422                        return;
423                }
[330]424
[278]425                $zfs1=0;
[283]426                $gwbez="";
427                while($row = pg_fetch_array($res)) {
428                        $bezirk=$row["bezirk"];
429                        if ($gwbez != $bezirk) { // Gruppierung Bezirk
430                                $gwbez=$bezirk;
431                                $beznam=$row["beznam"];
432                                $gwgb="";
[284]433                                zeile_gbbez($beznam, $gwbez, $bezirkaktuell);
[283]434                        }
[278]435                        $gb_gml=$row["gml_g"];
[282]436                        if ($gwgb != $gb_gml) { // Gruppierung Blatt (Grundbuch)
[278]437                                $blatt=$row["blatt"];
[283]438                                zeile_blatt($bezirk, $beznam, $gb_gml, $blatt, false, $person, false);
[278]439                                $gwgb = $gb_gml;        // Steuerg GW GB
440                                $gwbv = "";             // Steuerg GW BVNR
441                        }
442                        $bvnr=$row["lfd"];
[282]443                        if ($gwbv != $bvnr) { // Gruppierung Buchung (BVNR)
444                                $gwbv = $bvnr;
[283]445                                $bsgml=$row["bsgml"];
[284]446                                zeile_buchung($bsgml, $bvnr, "", false, false); //ohne Link
[278]447                        }
448                        $fs_gml=$row["gml_id"];
449                        $gmkg=$row["gemarkungsname"];
450                        $flur=$row["flurnummer"];
451                        $fskenn=$row["zaehler"];
452                        if ($row["nenner"] != "") {$fskenn.="/".$row["nenner"];} // BruchNr
[283]453                        zeile_flurstueck($fs_gml, $fskenn, $row["x"], $row["y"], $gmkg, $flur, false);
[278]454                        $zfs1++;
455                }
456                if($zfs1 == 0) {
[282]457                        if ($bltrecht == "ohne") {echo "\n<p class='anz'>Keine direkte Buchung gefunden.</p>";}
[284]458                } elseif($zfs1 >= $linelimit) { // das Limit war zu knapp
459                        echo "\n<p class='blt'>";
460                        if ($bltseite > 1) {echo "weitere ";}
461                        echo $zfs1." Flurst&uuml;cke";
[330]462
[284]463                        // B l À t t e r n  (eine Folgeseite anbieten)
[278]464                        $nxtbltbez=urlencode($beznam);
465                        $nxtbltblatt=urlencode($blatt);
466                        $nxtbltseite=$bltseite + 1;
[284]467                        echo "\n - <a class='blt' href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;person=".$person;
468                        echo "&amp;gbkennz=".$zgbbez; // Filter Bezirk
469                        echo "&amp;bltbez=".$nxtbltbez."&amp;bltblatt=".$nxtbltblatt."&amp;bltbvnr=".$bvnr."&amp;bltseite=".$nxtbltseite."&amp;bltrecht=ohne' ";
[278]470                        echo "title='Bl&auml;ttern ab ".htmlentities($beznam)." Blatt ".$blatt." BVNR ".$bvnr."'>weitere</a>";
471                        echo "</p>";
[284]472                } elseif($zfs1 > 1) { // Meldung (Plural) ab 2, im Limit
473                        echo "\n<p class='anz'>";
474                        if ($bltseite > 1) {echo "weitere ";}
475                        echo $zfs1;
476                        if ($kennztyp > 1) {
477                                echo " Flurst. zum Eigent. im GB-Bezirk</p>";
478                        } else {
479                                echo " Flurst&uuml;cke zum Eigent&uuml;mer</p>";
480                        }
[278]481                }
482        }       
483        if ($bltrecht == "" and $zfs1 > 0) { // beides
484                echo "<hr>"; // dann Trenner
[66]485        }
[140]486
[333]487/*      if ($zfs1 == 0) { // Nur Entw. - Start
488                if ($debug > 1) {
489                        echo "\n<p class='dbg'>Keine Buchung</p>";
490                }
491                if ($debug > 2) {
492                        echo "<p class='dbg'>SQL = '".$sql."'<p>";
493                }
494        } // Nur Entw. - Ende */
495
[278]496        // FÀlle mit "Rechte an"
497        if ($bltrecht != "ohne") { // "nur"/"ohne" liefert nur den abgebrochene Teil der Auflistung
498                // Zweite Abfrage (Variante) aus den Bausteinen zusammen bauen
[330]499                // buchungsStelle2 <an< buchungsStelle1
500                $sql=$sql1.$sqla2.$sql2.$bltwhere."AND s2.endet IS NULL ".$sql3; // Rechte an
[333]501                $v=array(substr($person,0,16), $linelimit);
[278]502                $res=pg_prepare("", $sql);
503                $res=pg_execute("", $v);
504                if (!$res) {
505                        echo "\n<p class='err'>Fehler bei Recht an Buchung.</p>";
506                        return;
507                }
508                $zfs2=0;
[284]509                $gwbez="";
[278]510                while($row = pg_fetch_array($res)) {   
[284]511                        $bezirk=$row["bezirk"];
512                        if ($gwbez != $bezirk) { // Gruppierung Bezirk
513                                $gwbez=$bezirk;
514                                $beznam=$row["beznam"];
515                                $gwgb="";
516                                zeile_gbbez($beznam, $gwbez, $bezirkaktuell);
517                        }
[278]518                        $gb_gml=$row["gml_g"];
[282]519                        if ($gwgb != $gb_gml) {  // Gruppierung Blatt (Grundbuch)
[278]520                                $beznam=$row["beznam"];
521                                $blatt=$row["blatt"];
[283]522                                zeile_blatt ($bezirk, $beznam, $gb_gml, $blatt, false, $person, false);
[278]523                                $gwgb = $gb_gml;        // Steuerg GW GB
524                                $gwbv = "";             // Steuerg GW BVNR
525                        }
526                        $bvnr=$row["lfd"];
[282]527                        if ($gwbv != $bvnr) { // Gruppierung Buchungs (BVNR)
528                                $gwbv = $bvnr;
[283]529                                $bsgml=$row["bsgml"];
[330]530                                zeile_buchung($bsgml, $bvnr, "", true, false); // Recht an ... // ohne Link!
[283]531                        #       zeile_buchung($bsgml, $bvnr, $bezirk."-".$blatt, true, false); // Recht an ...
[278]532                        }
533                        $fs_gml=$row["gml_id"];
534                        $gmkg=$row["gemarkungsname"];
535                        $flur=$row["flurnummer"];
536                        $fskenn=$row["zaehler"];
[282]537                        if ($row["nenner"] != "") {$fskenn.="/".$row["nenner"];}
[278]538                        $x=$row["x"];
539                        $y=$row["y"];
[283]540                        zeile_flurstueck ($fs_gml, $fskenn, $x, $y, $gmkg, $flur, false);
[278]541                        $zfs2++;
542                }
543                if($zfs2 == 0) {
544                        if ($zfs1 == 0 or $bltrecht == "nur") { // keine Meldung wenn schon in Teil 1 eine Ausgabe
545                                echo "\n<p class='anz'>Keine Rechte an Buchungen.</p>";
546                        }
547                } elseif($zfs2 >= $linelimit) { // das Limit war zu knapp, das  B l À t t e r n  anbieten
[284]548                        echo "\n<p class='blt'>";
549                        if ($bltseite > 1) {echo "weitere ";}
550                        echo $zfs2." Rechte an Flurst.";
[278]551                        $nxtbltbez=urlencode($beznam);
552                        $nxtbltblatt=urlencode($blatt);
553                        $nxtbltseite=$bltseite + 1;
[284]554                        echo "\n - <a class='blt' href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;person=".$person;
555                        echo "&amp;gbkennz=".$zgbbez; // Filter Bezirk
556                        echo "&amp;bltbez=".$nxtbltbez."&amp;bltblatt=".$nxtbltblatt."&amp;bltbvnr=".$bvnr."&amp;bltseite=".$nxtbltseite."&amp;bltrecht=nur' ";
[278]557                        echo "title='Bl&auml;ttern ab ".htmlentities($beznam)." Blatt ".$blatt." BVNR ".$bvnr."'>weitere</a>";
558                        echo "</p>";
559                } elseif($zfs2 > 1) { // ab 2
[284]560                        echo "\n<p class='anz'>";
561                        if ($bltseite > 1) {echo "weitere ";}
562                        echo $zfs2." Rechte an Flurst.</p>"; // im Limit               
[278]563                }
564        } // ENDE FÀlle mit "Rechte an"
[66]565        return;
566}
567
568// ===========
569// Start hier!
570// ===========
571// Parameter: 
572// 1. name   = Suche nach Namensanfang oder -bestandteil.
573// 2. person = gml_id der Person      -> Suche nach GrundbÃŒchern
574// 3. gb     = gml_id des Grundbuches -> Suche nach FlurstÃŒcken
[278]575
[66]576if(isset($epsg)) {
[86]577        $epsg = str_replace("EPSG:", "" , $_REQUEST["epsg"]);   
[66]578} else {
579        $epsg=$gui_epsg; // aus Conf
580}
[140]581if ($gemeinde == "") {
[278]582        $gfilter = 0; // Gemeinde ungefiltert
[140]583} elseif(strpos($gemeinde, ",") === false) {
[278]584        $gfilter = 1; // Gemeinde Einzelwert
[140]585} else {
[278]586        $gfilter = 2; // Gemeinde Filter-Liste
[140]587}
[330]588
[284]589$kennztyp=ZerlegungGBKennz($gbkennz); // Grundbuch-Kennzeichen aus Parameter zerlegen: $z__
590// 2=Such Bezirk-Nummer, 3=Such Blatt, 4=Such Buchung BVNR
[66]591
[278]592// Quo Vadis?
[315]593if($blattgml != "") { // FlurstÃŒcke zum Grundbuch
[278]594
[66]595        // Das Programm hat sich selbst verlinkt aus einer Liste der GB zu einem EigentÃŒmer.
596        // Wenn Parameter mitgegeben wurden, können diese fÃŒr einen "Link zurÃŒck" verwendet werden.
[278]597        $trans="Flurst&uuml;cke zum Grundbuch";
[315]598        getFSbyGB(true); // mit BackLink
[278]599
[315]600} elseif($person != "") { // GrundbÃŒcher zur Person
[66]601        // Das Programm hat sich selbst verlinkt aus einer Liste der Personen zu einer Suchmaske.
[330]602        //if ($debug >= 2) {echo "\n<p class='dbg'>Gemeinde-Filter-Steuerung = '".$gfilter."'</p>";}
[278]603
604        // Die Filtereinstellung beeinflusst die Such-Strategie:
[315]605        if ($gfilter == 0) { // Keine Filterung auf "Gemeinde": große Datenmenge
[284]606                if ($kennztyp > 1) {
607                        $trans = "Grundb&uuml;cher in ".$zgbbez." von .."; // Filter GB-Bez
608                } else {
609                        $trans = "Grundb&uuml;cher von .."; // Name steht darunter
610                }
[278]611                getGBbyPerson();
612                // Also schrittweise erst mal Stufe 2 = GrundbÃŒcher zur Person suchen.
613                if(isset($blattgml) ) { // Es wurde nur EIN Grundbuch zu der Person gefunden.
[284]614                        $trans = "1 Blatt zum Eigent&uuml;mer";
[278]615                        getFSbyGB(false);       // Dann dazu auch gleich die Stufe 3 hinterher, aber ohne Backlink.
[284]616                }
[315]617        } else { // mit Filter auf Gemeinde: weniger Daten?
[284]618                if ($kennztyp > 1) {
619                        #trans="Grundb. und Flurst. in ".$zgbbez." von .. "; // zu lang
620                        $trans="Grdb. und Flst. von .. in .."; // Filter GB-Bez,
621                        // darunter sind dann Name und Bezirk farblich markiert
622                } else {
623                        $trans="Grundb. und Flurst. von .."; // der EigentÃŒmer steht darunter
624                }
[315]625                getGBuFSbyPerson(); // Schritte 2+3 gleichzeitig, dabei Gemeinde-Filter auf Stufe 3
[278]626        }
627
[315]628} elseif(isset($name)) { // Suchbegriff aus Form: Suche nach Name
[278]629
630        $trans="Namensuche \"".$name."\"";
[315]631        getEigByName(); // Suchen nach Namensanfang
[278]632
[315]633        if($person != "") { // genau EIN Treffer zum Namen
[282]634                if ($gfilter == 0) {
635                        $trans="Grundb&uuml;cher zum Namen";
[315]636                        getGBbyPerson(); // Dann gleich das Grundbuch hinterher
[282]637                } else {
638                        $trans="Grdb. und Flst. zum Namen";
639                        getGBuFSbyPerson();     // .. oder auch GB + FS
640                }
[278]641        }
642
[283]643} elseif ($debug >= 1) {
644        $trans="falscher Aufruf";
645        echo "\n<p class='dbg'>Parameter?</p>"; // sollte nicht vorkommen
[66]646}
[278]647// Titel im Kopf anzeigen
[283]648echo "
649<script type='text/javascript'>
650        transtitle('".$trans."');
651</script>";
[278]652
[66]653?>
[134]654
655</body>
[66]656</html>
Note: See TracBrowser for help on using the repository browser.