Ignore:
Timestamp:
12/30/21 17:49:00 (2 years ago)
Author:
frank.jaeger
Message:

Web-GIS-Auskunft und Mapbender2-Navigation: neue Konfigurations-Parameter und verbessertes Grundbuch-Modul

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/info/info/alkisn/alkisbestnw.php

    r422 r425  
    66 
    77        Version: 
    8         2016-02-24 Version fuer norGIS-ALKIS-Import 
     8        2016-02-24 Version fÃŒr norGIS-ALKIS-Import 
    99        .... 
    10         2020-02-20 Authentifizierung ausgelegert in Function darf_ich() 
     10        2020-02-20 Authentifizierung ausgelagert in Function darf_ich() 
    1111        2020-12-03 function selbstverlinkung() statt $_SERVER['PHP_SELF'] 
    1212        2020-12-15 Input-Validation und Strict Comparisation (===) 
     13        2021-12-09 Neue Parameter: $katAmtMix (Kataster-Amt-Mix), $PrntBtn (Drucken-SchaltflÀche) 
     14                           Tabellenstruktur verbessert und Title bei "Recht an". 
     15        2021-12-30 Bestandsnachweis recursiv ÃŒber alle Buchungs-Ebenen 
    1316*/ 
    1417ini_set("session.cookie_httponly", 1); 
     
    5457 
    5558$erlaubnis = darf_ich(); if ($erlaubnis === 0) { die('<p class="stop1">Abbruch</p></body>'); } 
    56  
    57 // Mit URL-Parameter "&nodebug=j" kann man die Entwicklungsumgebung (in Conf definiert) ausschalten. 
    58 // Manuell an die URL anfÃŒgen, wirkt nur temporÀr und wird nicht in Links weiter gereicht. 
    59 if ($nodebug === "j") {$debug=0;}  
     59$dbg=$debug; // CONF in Arbeits-Variable 
     60 
     61// Entwicklungsumgebung (in Conf definiert) ausschalten. 
     62if ($nodebug === "j") {$dbg=0;}  
    6063 
    6164$con = pg_connect($dbconn." options='--application_name=ALKIS-Auskunft_alkisbestnw.php'"); 
     
    6467// G R U N D B U C H 
    6568$sql="SELECT g.gml_id, g.bezirk, g.buchungsblattnummermitbuchstabenerweiterung AS blatt, g.blattart, wb.beschreibung AS blattartv, wb.dokumentation AS blattartd,  
    66 b.gml_id, b.bezirk, b.bezeichnung AS beznam, d.gml_id, d.land, d.bezeichnung, d.stelle, d.stellenart, wd.beschreibung AS stellev FROM ax_buchungsblatt g  
    67 LEFT JOIN ax_buchungsblattbezirk b ON g.land=b.land AND g.bezirk=b.bezirk  
    68 LEFT JOIN ax_dienststelle d ON b.land=d.land AND b.gehoertzu_stelle=d.stelle  
    69 LEFT JOIN ax_blattart_buchungsblatt wb ON g.blattart = wb.wert 
    70 LEFT JOIN ax_behoerde wd ON d.stellenart = wd.wert 
     69b.gml_id, b.bezirk, b.bezeichnung AS beznam, d.gml_id, d.land, d.bezeichnung, d.stelle, d.stellenart, wd.beschreibung AS stellev  
     70FROM ax_buchungsblatt g  
     71LEFT JOIN ax_buchungsblattbezirk b ON g.land=b.land AND g.bezirk=b.bezirk ".UnqKatAmt("g","b") 
     72."LEFT JOIN ax_dienststelle d ON b.land=d.land AND b.gehoertzu_stelle=d.stelle ".UnqKatAmt("b","d") 
     73."LEFT JOIN ax_blattart_buchungsblatt wb ON g.blattart = wb.wert 
     74LEFT JOIN ax_behoerde wd ON d.stellenart = wd.wert  
    7175WHERE g.gml_id= $1 AND g.endet IS NULL AND b.endet IS NULL AND d.endet IS NULL;"; 
    7276// .. AND d.stellenart=1000  
     
    7781if (!$res) { 
    7882        echo "\n<p class='err'>Fehler bei Grundbuchdaten.</p>"; 
    79         if ($debug > 2) {echo "\n<p class='dbg'>SQL=<br>".htmlentities(str_replace("$1", "'".$gmlid."'", $sql), ENT_QUOTES, "UTF-8")."</p>";} 
     83        if ($dbg > 2) {echo "\n<p class='dbg'>SQL=<br>".htmlentities(str_replace("$1", "'".$gmlid."'", $sql), ENT_QUOTES, "UTF-8")."</p>";} 
     84} 
     85$zeianz=pg_num_rows($res); 
     86if ($dbg > 0) { 
     87        if ($zeianz > 1){ 
     88                echo "\n<p class='err'>Die Abfrage liefert mehr als ein (".$zeianz.") Grundbuch-Objekt!</p>"; 
     89                if ($dbg > 2) {echo "\n<p class='dbg'>SQL=<br>".htmlentities(str_replace("$1","'".$gmlid."'",$sql), ENT_QUOTES, "UTF-8")."</p>";} 
     90        } 
     91} 
     92if ($zeianz == 0){ 
     93        echo "\n<p class='err'>Fehler! Kein Treffer f&uuml;r ein Grundbuch-Blatt mit gml_id=".$gmlid."</p>"; 
     94        if ($dbg > 2) {echo "\n<p class='dbg'>SQL=<br>".htmlentities(str_replace("$1","'".$gmlid."'",$sql), ENT_QUOTES, "UTF-8")."</p>";} 
     95        echo "\n</body>\n</html>"; 
     96        return; 
    8097} 
    8198if ($row = pg_fetch_assoc($res)) { 
     
    87104        echo "\n<h2>Grundbuch</h2>"; 
    88105        echo "\n<table class='outer'>" // Blatt UND Eigent. 
    89                 ."\n<tr>\n\t<td class='ll'><img src='ico/Grundbuch.png' width='16' height='16' alt=''> Blatt:</td>"  // outer Links 
    90                 ."\n\t<td colspan='2'>"; // Outer Mitte, Kennz. im Rahmen 
    91                 if ($blattkey == 1000) { 
    92                         echo "\n\t\t<table class='kennzgb' title='Bestandskennzeichen'>"; 
    93                 } else { 
    94                         echo "\n\t\t<table class='kennzgbf' title='Bestandskennzeichen'>"; // dotted 
    95                 } 
    96                         echo "\n\t\t<tr>" 
    97                                 ."\n\t\t\t<td class='head'>"; // .d nicht gefÃŒllt 
     106                ."\n\t<tr>\n\t\t<td class='ll'><img src='ico/Grundbuch.png' width='16' height='16' alt=''> Blatt:</td>" 
     107                ."\n\t\t<td colspan='2'>"; // Outer Mitte, Kennz. im Rahmen 
     108                        if ($blattkey === "1000") { 
     109                                echo "\n\t\t\t<table class='kennzgb' title='Bestandskennzeichen'>"; 
     110                        } else { 
     111                                echo "\n\t\t\t<table class='kennzgbf' title='Bestandskennzeichen'>"; // dotted 
     112                        } 
     113                        echo "\n\t\t\t<tr>" 
     114                                ."\n\t\t\t<td class='head'>"; 
    98115                                if ($showkey) {echo "<span class='key'>".$row["stellenart"]."&nbsp;</span>";} 
    99116                                echo $row["stellev"]."</td>"; 
    100117                                echo "\n\t\t\t<td class='head'>Bezirk</td>" 
    101                                 ."\n\t\t\t<td class='head' title='".htmlentities($row["blattartd"], ENT_QUOTES, "UTF-8")."'>"; 
     118                                ."\n\t\t\t\t<td class='head' title='".htmlentities($row["blattartd"], ENT_QUOTES, "UTF-8")."'>"; 
    102119                                if ($showkey) {echo "<span class='key'>".$blattkey."&nbsp;</span>";} 
    103120                                echo $blattart."</td>" 
    104                         ."\n\t\t</tr>\n\t\t<tr>" 
    105                                 ."\n\t\t\t<td title='Amtsgerichtsbezirk'>"; 
     121                        ."\n\t\t\t</tr>\n\t\t\t<tr>" 
     122                                ."\n\t\t\t\t<td title='Amtsgerichtsbezirk'>"; 
    106123                                if ($showkey) {echo "<span class='key'>".$row["stelle"]."</span><br>";} 
    107124                                echo htmlentities($row["bezeichnung"], ENT_QUOTES, "UTF-8")."</td>" 
    108                                 ."\n\t\t\t<td title='Grundbuchbezirk'>"; 
     125                                ."\n\t\t\t\t<td title='Grundbuchbezirk'>"; 
    109126                                if ($showkey) {echo "<span class='key'>".$row["bezirk"]."</span><br>";} 
    110127                                echo htmlentities($row["beznam"], ENT_QUOTES, "UTF-8")."</td>" 
    111                                 ."\n\t\t\t<td title='Grundbuch-Blatt'><span class='wichtig'>".$blatt."</span></td>" 
    112                         ."\n\t\t</tr>" 
    113                 ."\n\t\t</table>" 
    114                 ."\n\t</td>\n\t<td>&nbsp;" 
    115         ."\n\t</td>\n</tr>"; 
    116 } 
    117  
    118 if ($blattkey == 5000) { // fikt. Blatt 
     128                                ."\n\t\t\t\t<td title='Grundbuch-Blatt'><span class='wichtig'>".$blatt."</span></td>" 
     129                        ."\n\t\t\t</tr>" 
     130                ."\n\t\t\t</table>" 
     131                ."\n\t\t</td>\n\t\t<td>&nbsp;</td>\n\t</tr>"; 
     132} 
     133pg_free_result($res); 
     134 
     135if ($blattkey === "5000") { // fikt. Blatt 
    119136        echo "\n<p>Keine Angaben zum Eigentum bei fiktivem Blatt.</p>"; 
    120 } else { // E I G E N T U E M E R 
     137} else { // E I G E N T Ü M E R 
    121138        $n = eigentuemer($gmlid, true, ""); // MIT Adressen. 
    122139        if ($n === 0) { // keine NamensNr, kein Eigentuemer 
     
    127144echo "\n</table>"; 
    128145 
    129 // Vorab pruefen, ob der Fall "Rechte an .." vorliegt. 
    130 // ToDo: +++ Es gibt auch den Fall, dass auf der nÀchsten Stufe "nur Rechte" angezeigt werden, noch keine FlurstÃŒcke 
    131 // ++ Also 3 Möglichkeiten: 
    132 // - Nur Rechte an  (+++ FEHLT NOCH ++) 
    133 // - Rechte und FlurstÃŒcke 
    134 // - FlurstÃŒcke 
    135  
    136 // GB-Blatt  <istBestandteilVon<  sh=herrschend  >an/zu>  sd=dienend 
    137 $sql="SELECT count(sd.laufendenummer) AS anzahl " 
    138 ."FROM ax_buchungsstelle sh JOIN ax_buchungsstelle sd ON (sd.gml_id=ANY(sh.an) OR sd.gml_id=ANY(sh.zu)) " 
    139 ."WHERE sh.istbestandteilvon= $1 AND sd.endet IS NULL AND sh.endet IS NULL;"; 
    140  
     146// Vorab eine Tiefbohrung zur Sondierung von (potentiell) herrschend bis dienend ÃŒber max. 4 Buchungs-Stellen. 
     147// Diese ZÀhlung sagt nur aus, ob es "generell" solche FÀlle auf diesem Grundbuch gibt (ist selten). 
     148// In jedem einzelnen Zweig der Buchungen muss aber individuell danach gesucht werden.  
     149// Die Relation "zu" ist hier einbezogen, wird aber spÀter nicht ausgewertet. Hier könnte man die Differenz erkennen falls "zu" doch mal auftaucht. 
     150$sql ="SELECT count(s2.laufendenummer) AS anz2"; 
     151if ($dbg > 1) {$sql.=", count(s3.laufendenummer) AS anz3, count(s4.laufendenummer) AS anz4";} 
     152$sql.=" FROM ax_buchungsstelle sh " // herrschend 
     153        ."LEFT JOIN ax_buchungsstelle s2 ON (s2.gml_id=ANY(sh.an) OR s2.gml_id=ANY(sh.zu)) "; 
     154if ($dbg > 1) { 
     155        $sql.="LEFT JOIN ax_buchungsstelle s3 ON (s3.gml_id=ANY(s2.an) OR s3.gml_id=ANY(s2.zu)) " 
     156                ."LEFT JOIN ax_buchungsstelle s4 ON (s4.gml_id=ANY(s3.an) OR s4.gml_id=ANY(s3.zu)) "; 
     157} 
     158$sql.="WHERE sh.istbestandteilvon= $1 AND sh.endet IS NULL AND s2.endet IS NULL "; 
     159if ($dbg > 1) {$sql.="AND s3.endet IS NULL AND s4.endet IS NULL";} 
    141160$v=array($gmlid); // GB-Blatt 
    142161$res=pg_prepare("", $sql); 
    143162$res=pg_execute("", $v); 
    144 if (!$res) echo "\n<p class='err'>Fehler bei Suche nach Buchungen.</p>"; 
     163if (!$res) { 
     164        echo "\n<p class='err'>Fehler bei tiefer Suche nach Buchungen.</p>"; 
     165        if ($dbg > 2) {echo "\n<p class='dbg'>SQL=<br>".htmlentities(str_replace("$1", "'".$gmlid."'", $sql), ENT_QUOTES, "UTF-8")."</p>";} 
     166} 
    145167$row=pg_fetch_assoc($res); 
    146 $anz=$row["anzahl"]; 
    147  
     168$anz2=$row["anz2"]; // steuert Tabellenform und Überschrift 
     169if ($dbg > 1) { 
     170        $anz3=$row["anz3"]; 
     171        $anz4=$row["anz4"]; 
     172        echo "\n<p class='dbg'>Anzahl dienende Buchungen Ebene 2: '".$anz2."', Ebene 3: '".$anz3."', Ebene 4: '".$anz4."'</p>"; 
     173} 
    148174echo "\n<hr>\n\n<h3><img src='ico/Flurstueck.png' width='16' height='16' alt=''>"; 
    149 if ($anz > 0) { // auch "Rechte an" 
     175if ($anz2 > 0) { // auch "Rechte an", also dienende B. 
    150176        echo " Rechte und Flurst&uuml;cke</h3>\n<table class='fs'>"; 
    151         // zusaetzliche Kopfzeile "Rechte" 
    152         echo "\n<tr>"  
    153                 ."\n\t<td>&nbsp;</td>" 
    154                 ."\n\t<td class='dien' title='herrschendes Grundst&uuml;ck'>herrschende Buchungsart</td>" 
    155                 ."\n\t<td class='dien'>Anteil</td>" 
    156                 ."\n\t<td class='dien'>Bezirk</td>" 
    157                 ."\n\t<td class='dien'>Blatt</td>" 
    158                 ."\n\t<td class='dien'>BVNR</td>" 
    159                 ."\n\t<td class='dien' title='dienendes Grundst&uuml;ck'>Buchungsart</td>" 
    160                 ."\n\t<td>&nbsp;</td>" 
     177        echo "\n<tr>" // zus. Kopfz. "Rechte" vor FS 
     178                ."\n\t<td class='heads' title='laufende Nummer Bestandsverzeichnis (BVNR) = Grundst&uuml;ck'>\n\t\t<span class='wichtig'>BVNR</span>" 
     179                        ."\n\t\t<img src='ico/sort.png' width='10' height='10' alt='' title='prim&auml;re Sortierung'>\n\t</td>" 
     180                ."\n\t<td class='head dien' title='herrschendes Grundst&uuml;ck'>Buchungsart</td>" 
     181                ."\n\t<td class='head dien'>Anteil</td>" 
     182                ."\n\t<td class='head dien'>Bezirk</td>" 
     183                ."\n\t<td class='head dien'>Blatt</td>" 
     184                ."\n\t<td class='head dien'>BVNR</td>" 
     185                ."\n\t<td class='head dien'>&nbsp;</td>" 
     186                ."\n\t<td class='head dien'>&nbsp;</td>" 
    161187        ."\n</tr>"; 
    162 } else { // keine Rechte an, nur FlurstÃŒcke gebucht 
     188} else { // keine Rechte an, nur FS 
    163189        echo " Flurst&uuml;cke</h3>\n<table class='fs'>"; 
    164190} 
    165  
    166 // gemeinsame Kopfzeile "Buchung + FlurstÃŒck" 
    167 echo "\n<tr>" 
    168         ."\n\t<td class='heads' title='laufende Nummer Bestandsverzeichnis (BVNR) = Grundst&uuml;ck'><span class='wichtig'>BVNR</span><img src='ico/sort.png' width='10' height='10' alt='' title='prim&auml;re Sortierung'></td>" 
    169         ."\n\t<td class='head'>Buchungsart</td>" 
    170         ."\n\t<td class='head'>&nbsp;</td>" 
     191echo "\n<tr>"; // Kopfzeile "FlurstÃŒck" 
     192        if ($anz2 > 0) { // BS und FS 
     193                echo "\n\t<td class='head'>&nbsp;</td>" 
     194                ."\n\t<td class='head'>&nbsp;</td>"; 
     195        } else { // nur FS 
     196                echo "\n\t<td class='heads' title='laufende Nummer Bestandsverzeichnis (BVNR) = Grundst&uuml;ck'>\n\t\t<span class='wichtig'>BVNR</span>" 
     197                        ."\n\t\t<img src='ico/sort.png' width='10' height='10' alt='' title='prim&auml;re Sortierung'>" 
     198                ."\n\t</td>" 
     199                ."\n\t<td class='head'>Buchungsart</td>"; 
     200        } 
     201        echo "\n\t<td class='head'>&nbsp;</td>" 
    171202        ."\n\t<td class='heads'>Gemarkung</td>" 
    172203        ."\n\t<td class='heads'>Flur</td>" 
    173204        ."\n\t<td class='heads fsnr' title='Flurst&uuml;cksnummer (Z&auml;hler / Nenner)'><span class='wichtig'>Flurst.</span></td>" 
    174         ."\n\t<td class='head flag'>Fl&auml;che</td>" 
     205        ."\n\t<td class='head fla'>Fl&auml;che</td>" 
    175206        ."\n\t<td class='head nwlink noprint' title='Verlinkung zu anderen Nachweis-Arten und verbundenen Objekten'>weitere Auskunft</td>" 
    176207."\n</tr>"; 
    177208 
    178 // Blatt ->  B u c h u n g s s t e l l e 
     209// Blatt ->  B u c h u n g s s t e l l e (oberste Ebene 1, GrundstÃŒck oder herrschend). Relation istBestandteilVon 
    179210// aktuelles ax_buchungsblatt <istBestandteilVon< ax_buchungsstelle  
    180211$sql ="SELECT s.gml_id, s.buchungsart, s.laufendenummer AS lfd, s.beschreibungdesumfangsderbuchung AS udb, s.zaehler, s.nenner,  
    181212s.nummerimaufteilungsplan AS nrap, s.beschreibungdessondereigentums AS sond, b.beschreibung as bart, b.dokumentation 
    182 FROM ax_buchungsstelle s LEFT JOIN ax_buchungsart_buchungsstelle b ON s.buchungsart = b.wert 
     213FROM ax_buchungsstelle s  
     214LEFT JOIN ax_buchungsart_buchungsstelle b ON s.buchungsart = b.wert 
    183215WHERE s.istbestandteilvon= $1 AND s.endet IS NULL ORDER BY cast(s.laufendenummer AS integer);"; 
    184 $v=array($gmlid); // Rel. istBestandteilVon 
     216$v=array($gmlid); 
    185217$res=pg_prepare("", $sql); 
    186218$res=pg_execute("", $v); 
    187219if (!$res) { 
    188220        echo "\n<p class='err'>Fehler bei Buchung.</p>"; 
    189         if ($debug > 2) {echo "\n<p class='dbg'>SQL=<br>".htmlentities(str_replace("$1", "'".$gmlid."'", $sql), ENT_QUOTES, "UTF-8")."</p>";} 
    190 } 
    191 $i=0; 
    192 $fscnt=0; 
     221        if ($dbg > 2) {echo "\n<p class='dbg'>SQL=<br>".htmlentities(str_replace("$1", "'".$gmlid."'", $sql), ENT_QUOTES, "UTF-8")."</p>";} 
     222} 
     223$i=0;  // ZÀhler Buchungs-Stellen auf oberer Ebene 
    193224$zpaar=false; 
    194 while($row = pg_fetch_assoc($res)) { // Loop Buchungsstelle (GrundstÃŒck) 
     225$altlfdnr=''; // GW 
     226 
     227while($row = pg_fetch_assoc($res)) { // Loop Buchungsstellen der 1. Ebene (herrschend oder nur FS) 
     228        $i++; 
     229        $gml_bs=$row["gml_id"]; // gml der Buchungsstelle 
    195230        $lfdnr=$row["lfd"]; 
    196         $bvnr=str_pad($lfdnr, 4, "0", STR_PAD_LEFT); 
    197         $gml_bs=$row["gml_id"]; // id der buchungsstelle 
    198         $bartkey=$row["buchungsart"]; // SchlÃŒsselwert 
     231        $bartkey=$row["buchungsart"]; // Key 
    199232        $bart=$row["bart"]; // BuchungsART Text dazu 
    200         $bartstory=htmlentities($row["dokumentation"], ENT_QUOTES, "UTF-8"); // .. fÃŒr Anzeige aufbereitet 
    201         if ($row["zaehler"] == "") { 
    202                 $anteil = ""; 
    203         } else { 
    204                 $anteil = $row["zaehler"]."/".$row["nenner"]; 
    205         } 
    206         if ($zpaar) {$trclass='paa';} else {$trclass='unp';} // Farbwechsel je GrundstÃŒck 
     233        $bartstory=htmlentities($row["dokumentation"], ENT_QUOTES, "UTF-8"); // .. fÃŒr Anzeige aufbereitet      
     234        if ($row["zaehler"] == "") {$anteil = "";}  
     235        else {$anteil = $row["zaehler"]."/".$row["nenner"];} 
     236        if ($zpaar) {$trclass='paa';} else {$trclass='unp';} // Farbwechsel je Buchung auf Ebene 1 
    207237        $zpaar=!$zpaar; 
    208238 
    209         // F l u r s t u e c k s d a t e n  zur direkten Buchungsstelle 
    210         $j = bnw_fsdaten($lfdnr, $gml_bs, $bart, $anteil, true, $bartkey, $bartstory); // return=Anzahl der FS 
    211         $fscnt=$fscnt + $j; 
    212         if ($j === 0) { //  k e i n e  Flurstuecke gefunden (Miteigentumsnteil usw.) 
    213                 // Bei "normalen" Grundstuecken wurden hier Flurstuecksdaten gefunden und ausgegeben. 
    214                 // Bei Miteigentumsanteil, Erbbaurecht usw. muss nach den "dienenden" Buchungsstellen gesucht werden, darauf sind die FS gebucht. 
    215                 //  Buchungsstelle >an/zu> (andere)Buchungsstelle >istBestandTeilVon> "FiktivesBlatt (ohne) Eigentuemer" 
    216  
    217                 // dann andere "dienende" Buchungsstellen 
    218                 //  sh=herrschend          sd=dienend 
    219                 //  ax_buchungsstelle >zu> ax_buchungsstelle (des gleichen Blattes) 
    220                 //  ax_buchungsstelle >an> ax_buchungsstelle (anderes Blatt, z.B Erbbaurecht an) 
    221  
    222                 // Mit "UNION" um die FÀlle mit JOIN ÃŒber die Arrays "an" und "zu" unterscheiden zu können 
    223                 $sql="SELECT uni.*, wb.beschreibung AS bart FROM " 
    224                 ."(SELECT sda.gml_id, sda.buchungsart, sda.laufendenummer AS lfd, sda.beschreibungdesumfangsderbuchung AS udb, sda.nummerimaufteilungsplan AS nrap, sda.beschreibungdessondereigentums AS sond, 'an' as anzu " 
    225                 ."FROM ax_buchungsstelle sha JOIN ax_buchungsstelle sda ON sda.gml_id=ANY(sha.an) " 
    226                 ."WHERE sha.gml_id= $1 AND sha.endet IS NULL AND sda.endet IS NULL " 
    227                 ."UNION SELECT sdz.gml_id, sdz.buchungsart, sdz.laufendenummer AS lfd, sdz.beschreibungdesumfangsderbuchung AS udb, sdz.nummerimaufteilungsplan AS nrap, sdz.beschreibungdessondereigentums AS sond, 'zu' as anzu " 
    228                 ."FROM ax_buchungsstelle shz JOIN ax_buchungsstelle sdz ON sdz.gml_id=ANY(shz.zu) " 
    229                 ."WHERE shz.gml_id= $1 AND shz.endet IS NULL AND sdz.endet IS NULL " 
    230                 .") AS uni LEFT JOIN ax_buchungsart_buchungsstelle wb ON uni.buchungsart = wb.wert " 
    231                 ."ORDER BY uni.lfd;"; 
    232         //      Testfall suchen: SELECT gml_id, zu, durch FROM ax_buchungsstelle WHERE NOT zu IS NULL OR NOT durch IS NULL; 
    233         //      Die Relationen "zu" und "durch" kommen in der Praxis nicht vor. 
    234  
    235                 $v=array($gml_bs); // gml_id der "herrschenden" Buchungs-Stelle 
    236                 $resan=pg_prepare("", $sql); // Suche nach "dienender" Buchungsstelle 
    237                 $resan=pg_execute("", $v); 
    238                 if (!$resan) { 
    239                         echo "\n<p class='err'>Fehler bei 'andere Buchungsstelle'.</p>"; 
    240                         if ($debug > 2) {echo "\n<p class='dbg'>SQL=<br>".htmlentities(str_replace("$1", "'".$gml_bs."'", $sql), ENT_QUOTES, "UTF-8")."</p>";} 
     239        if ($bartkey <= 1102) { // (aufgeteiltes) GrundstÃŒck 
     240 
     241                $zeianz = bnw_fsdaten($gml_bs, true); // FlurstÃŒcksdaten zur direkten Buchungsstelle 
     242                if ($zeianz === 0) {echo "\n<tr class='".$trclass."'>\n\t<td></td>\n\t<td colspan='7'><p class='warn'>Keine Flurst&uuml;cke im berechtigten Bereich.</p></td>\n\t<td></td>\n</tr>";} 
     243 
     244        } else { // herrschende Buchung 
     245 
     246                bnw_bszeile_h(); // Die herrschende Buchung, aus Global 
     247 
     248                $altlfdnr=$lfdnr; 
     249 
     250                if ($row["nrap"] != "") { // Nr im Auft.Plan 
     251                        echo "\n<tr>\n\t<td colspan=3></td><td class='nrap' colspan=4>Nummer <span class='wichtig'>".$row["nrap"]."</span> im Aufteilungsplan.</td><td></td>\n</tr>"; 
    241252                } 
    242253 
    243                 $a=0; // count 
    244                 $altbvnr=""; // Gruppenwechsel 
    245                 while($rowan= pg_fetch_assoc($resan)) { 
    246                         $lfdnran=$rowan["lfd"]; // BVNR an 
    247                         $gml_bsan=$rowan["gml_id"];     // id der buchungsstelle an 
    248                         $baan=$rowan["bart"];   // Buchungsart an, entschluesselt 
    249                         $anzu=$rowan["anzu"];   // Welche Relation? Recht an oder Recht zu ? 
    250  
    251                         // dienende Buchungsstelle 
    252                         $sql ="SELECT b.gml_id, b.land, b.bezirk, b.buchungsblattnummermitbuchstabenerweiterung AS blatt, b.blattart, wb.beschreibung AS blattartv, z.bezeichnung AS beznam " 
    253                         ."FROM ax_buchungsblatt b JOIN ax_buchungsstelle s ON b.gml_id=s.istbestandteilvon " 
    254                         ."LEFT JOIN ax_buchungsblattbezirk z ON b.land=z.land AND b.bezirk=z.bezirk " 
    255                         ."LEFT JOIN ax_blattart_buchungsblatt wb ON b.blattart = wb.wert " 
    256                         ."WHERE s.gml_id= $1 AND b.endet IS NULL AND s.endet IS NULL AND z.endet IS NULL ORDER BY b.land, b.bezirk, b.buchungsblattnummermitbuchstabenerweiterung;"; 
    257                         $v=array($gml_bsan); 
    258                         $fbres=pg_prepare("", $sql); 
    259                         $fbres=pg_execute("", $v); 
    260                         if (!$fbres) { 
    261                                 echo "\n<p class='err'>Fehler bei fiktivem Blatt.</p>"; 
    262                                 if ($debug > 2) {echo "\n<p class='dbg'>SQL=<br>".htmlentities( str_replace("$1", "'".$gml_bsan."'", $sql), ENT_QUOTES, "UTF-8")."</p>";}                        
    263                         } 
    264                         $b=0; 
    265                         while($fbrow = pg_fetch_assoc($fbres)) { // genau 1 
    266                                 $fbgml=$fbrow["gml_id"]; 
    267                                 $fbland=$fbrow["land"]; 
    268                                 $fbbez=$fbrow["bezirk"]; 
    269                                 $beznam=$fbrow["beznam"]; 
    270                                 $fbblatt=ltrim($fbrow["blatt"], "0"); 
    271                                 $fbbartkey=$fbrow["blattart"]; // Key 
    272                                 $fbbart=$fbrow["blattartv"];  // Value 
    273                                 $b++; 
    274                         } 
    275                         if ($b != 1) { // Überwachen: genau 1? 
    276                                 echo "\n<p class='err'>Anzahl fiktive Bl&auml;tter zu anderer Buchungstelle = ".$b."</p>"; 
    277                         } 
    278                         // Grundbuchdaten zur dienenden Buchungsstelle 
    279                         echo "\n<tr class='".$trclass."'>" 
    280                                 ."\n\t<td id='bvnr".$lfdnr."'>"; // Sp.1 Erbbau BVNR, Sprungmarke 
    281                                         if($bvnr === $altbvnr) {        // gleiches Grundstueck 
    282                                                 echo "&nbsp;"; // dann Anzeige unterdruecken 
    283                                         } else { 
    284                                         //      echo "<a id='bvnr".$lfdnr."'></a>" // Sprungmarke 
    285                                                 echo "<span class='wichtig'>".$bvnr."</span>";  
    286                                                 $altbvnr = $bvnr; // Gruppenwechsel merken 
    287                                         } 
    288                                 echo "</td>" 
    289                                 ."\n\t<td class='dien'>"; // Sp.2 Buchung 
    290                                         if ($showkey) {echo "<span class='key'>".$row["buchungsart"]."</span> ";} 
    291                                 echo $bart." an</td>" 
    292                                 ."\n\t<td class='dien'>".$anteil."</td>" // Sp.3 Anteil 
    293                                 ."\n\t<td class='dien' title='Grundbuch-Bezirk'>"; // Sp.4 Gemarkg., hier Bezirk 
    294                                         if ($showkey) {echo "<span class='key'>".$fbbez."</span> ";} 
    295                                         echo htmlentities($beznam, ENT_QUOTES, "UTF-8") 
    296                                 ."</td>"; 
    297                                 echo "\n\t<td class='dien' title='".$fbbart."'>".$fbblatt."</td>" // Sp. 5 Blatt 
    298                                         ."\n\t<td class='dien' title='Bestandsverzeichnis-Nummer'>".str_pad($lfdnran, 4, "0", STR_PAD_LEFT)."</td>" // Sp.6 BVNR 
    299                                         ."\n\t<td class='dien' title='Buchungsart'>"; // Sp.7 Buchungsart 
    300                                         if ($showkey) {echo "<span class='key'>".$rowan["buchungsart"]."</span> ";} 
    301                                         echo $baan." " 
    302                                 ."</td>" 
    303                                 ."\n\t<td>" // Sp.8 Link ("an" oder "zu"?) 
    304                                         ."\n\t\t<p class='nwlink noprint'>".$anzu; // Recht "an" oder "zu" 
    305  
    306                                         // Buchung 
    307                                         // +++ <a  gsnachw  
    308  
    309                                         // Bestand 
    310                                         if ($showkey) {echo " <span class='key'>".$fbbartkey."</span>";} // Blatt-Art SchlÃŒssel 
    311                                         echo "\n\t\t\t<a href='alkisbestnw.php?gkz=".$gkz."&amp;gmlid=".$fbgml; 
    312                                                 if ($showkey) {echo "&amp;showkey=j";} 
    313                                                 echo "#bvnr".$lfdnran // Sprungmarke auf der Seite 
    314                                                 ."' title='Zum Grundbuchnachweis des dienenden Blattes'>"; 
    315                                                 echo $fbbart // Blatt-Art entschlÃŒsselt 
    316                                         ." <img src='ico/GBBlatt_link.png' width='16' height='16' alt=''></a>"; 
    317  
    318                                         echo "\n\t\t</p>" 
    319                                 ."\n\t</td>" 
    320                         ."\n</tr>";  
    321  
    322                         // Flurstuecksdaten zur dienenden Buchungsstelle 
    323                         // Buchungsart wird nur in erster Zeile ausgegeben, hier leer 
    324                         $aj = bnw_fsdaten($lfdnran, $gml_bsan, "", $anteil, false, "", ""); // return=Anz.FS 
    325                         $fscnt=$fscnt + $aj; 
    326                         if ($rowan["nrap"] != "") { 
    327                                 echo "\n<tr>" 
    328                                         ."\n\t<td class='sond' colspan=8>Nr. im Aufteilungsplan: ".$rowan["nrap"]."</td>" 
    329                                 ."\n</tr>"; 
    330                         } 
    331                         if ($rowan["sond"] != "") { 
    332                                 echo "\n<tr>" 
    333                                         ."\n\t<td class='sond' colspan=8>Verbunden mit dem Sondereigentum an: ".htmlentities($rowan["sond"], ENT_QUOTES, "UTF-8")."</td>" 
    334                                 ."\n</tr>"; 
    335                         } 
    336                         $a++; 
     254                if ($row["sond"] != "") { // Sondereigentumsbeschreibung 
     255                        echo "\n<tr>\n\t<td></td><td class='sond' colspan=6 title='Sondereigentums-Beschreibung'>Verbunden mit dem Sondereigentum an: ".$row["sond"]."</td><td></td>\n</tr>"; 
    337256                } 
    338                 if ($a === 0) { 
    339                         echo "\n<tr class='".$trclass."'>" 
    340                                 ."\n\t<td><span class='wichtig'>".$bvnr."</span></td>" 
    341                                 ."\n\t<td colspan=7><p class='warn'>Keine Flurst&uuml;cke zu Buchung ".$bvnr." im berechtigten Bereich.</p></td>" 
    342                         ."\n</tr>"; 
    343                 } 
    344         } 
    345         $i++;  
    346         if ($row["nrap"] != "") { // Nr im Auft.Plan 
    347                 echo "\n<tr>" 
    348                         ."\n\t<td class='nrap' colspan=8>Nummer <span class='wichtig'>".$row["nrap"]."</span> im Aufteilungsplan.</td>" 
    349                 ."\n</tr>"; 
    350         } 
    351         if ($row["sond"] != "") { // Sondereigentumsbeschreibung 
    352                 echo "\n<tr>" 
    353                         ."\n\t<td class='sond' colspan=8>Verbunden mit dem Sondereigentum an: ".$row["sond"]."</td>" 
    354                 ."\n</tr>"; 
    355         } // Ende Buchungsstelle/BVNR 
    356 } // Ende Loop 
     257 
     258                $tiefer = bnw_bsdaten($gml_bs, 2);  // dienend, recursiv Ebenen 2,3,4 
     259 
     260        } 
     261} 
    357262echo "\n</table>"; 
    358  
    359 if ($i === 0) { 
    360         echo "\n<p class='err'>Keine Buchung gefunden.</p>"; 
    361 } else { 
    362         if ($i > 5 and $fscnt > 5) { // nur wenn nicht auf einen Blick zu erkennen 
    363                 echo "\n<p class='cnt'>".$i." Buchungen mit ".$fscnt." Flurst&uuml;cken</p>"; 
    364         } 
    365 } 
    366  
    367 // B e r e c h t i g t e  Buchungsblaetter  mit Recht an/zu dem aktuellen (fiktiven?) Blatt 
     263if ($i === 0) {echo "\n<p class='err'>Keine Buchung gefunden.</p>";} 
     264pg_free_result($res); 
     265 
     266// B e r e c h t i g t e  BuchungsblÀtter mit Recht an dem aktuellen (fiktiven?) Blatt 
    368267 
    369268// bf                          sf            sb                               bb 
     
    374273FROM ax_buchungsstelle sf JOIN ax_buchungsstelle sb ON (sf.gml_id=ANY(sb.an) OR sf.gml_id=ANY(sb.zu))  
    375274JOIN ax_buchungsblatt bb ON bb.gml_id=sb.istbestandteilvon  
    376 LEFT JOIN ax_buchungsblattbezirk bz ON bb.land=bz.land AND bb.bezirk=bz.bezirk  
    377 LEFT JOIN ax_dienststelle d ON bz.land=d.land AND bz.gehoertzu_stelle=d.stelle  
    378 LEFT JOIN ax_blattart_buchungsblatt wa ON bb.blattart = wa.wert 
     275LEFT JOIN ax_buchungsblattbezirk bz ON bb.land=bz.land AND bb.bezirk=bz.bezirk ".UnqKatAmt("bb","bz") 
     276."LEFT JOIN ax_dienststelle d ON bz.land=d.land AND bz.gehoertzu_stelle=d.stelle ".UnqKatAmt("bz","d") 
     277."LEFT JOIN ax_blattart_buchungsblatt wa ON bb.blattart = wa.wert 
    379278LEFT JOIN ax_buchungsart_buchungsstelle wb ON sb.buchungsart = wb.wert 
    380279LEFT JOIN ax_behoerde wd ON d.stellenart = wd.wert 
     
    387286if (!$resb) { 
    388287        echo "\n<p class='err'>Fehler bei 'Berechtigte Bl&auml;tter.</p>"; 
    389         if ($debug > 2) {echo "\n<p class='dbg'>SQL=<br>".htmlentities(str_replace("$1", "'".$gmlid."'", $sql), ENT_QUOTES, "UTF-8")."</p>";} 
     288        if ($dbg > 2) {echo "\n<p class='dbg'>SQL=<br>".htmlentities(str_replace("$1", "'".$gmlid."'", $sql), ENT_QUOTES, "UTF-8")."</p>";} 
    390289} 
    391290$b=0; // count: Buchungen / BlÀtter 
     
    421320        $zpaar=!$zpaar; 
    422321 
    423         echo "\n<tr class='".$trclass."'>"; // Der Teil "berechtigte GrundbÃŒcher" ist sortiert wie oberer Teil "FlurstÃŒcke" 
     322        echo "\n<tr class='".$trclass."'>"; // Der Teil "berechtigte GrundbÃŒcher" ist nach BVNR sortiert wie oberer Teil "FlurstÃŒcke" 
    424323                echo "\n\t<td><span class='wichtig'>".$anlfdnr0."</span></td>" 
    425324                ."\n\t<td>"; // Amtsgericht,Grundbuchamt 
     
    440339                ."\n\t<td>" 
    441340                        ."\n\t\t<p class='nwlink noprint'>"; 
     341 
    442342                        // Bestand 
    443343                        if ($showkey) {echo "<span class='key'>".$blart."</span> ";} 
    444344                        echo "\n\t\t\t<a href='alkisbestnw.php?gkz=".$gkz."&amp;gmlid=".$gml_b; 
    445345                                if ($showkey) {echo "&amp;showkey=j";} 
    446                                 echo "#bvnr".$lfdnr."' title='Nachweis des berechtigten Blattes an einer Buchung auf ".$blattart."'>".$rowb["blattartv"]; // "an" ggf. durch "zu" ersetzen? 
     346                                echo "#bvnr".$lfdnr."' title='Nachweis des berechtigten Blattes an einer Buchung auf ".$blattart."'>".$rowb["blattartv"]; 
    447347                                echo " \n\t\t\t<img src='ico/GBBlatt_link.png' width='16' height='16' alt=''></a>"; 
    448348                        echo "\n\t\t</p>" 
     
    461361        } 
    462362} 
    463  
    464 echo "\n<div class='buttonbereich noprint'><hr>" 
    465         ."\n\t<a title='zur&uuml;ck' href='javascript:history.back()'><img src='ico/zurueck.png' width='16' height='16' alt='zur&uuml;ck'></a>&nbsp;" 
    466         ."\n\t<a title='Drucken' href='javascript:window.print()'><img src='ico/print.png' width='16' height='16' alt='Drucken'></a>&nbsp;"; 
     363pg_free_result($resb); 
     364 
     365echo "\n<div class='buttonbereich noprint'>\n<hr>" 
     366        ."\n\t<a title='zur&uuml;ck' href='javascript:history.back()'><img src='ico/zurueck.png' width='16' height='16' alt='zur&uuml;ck'></a>&nbsp;"; 
     367if ($PrntBtn==true){echo "\n\t<a title='Drucken' href='javascript:window.print()'><img src='ico/print.png' width='16' height='16' alt='Drucken'></a>&nbsp;";} 
    467368if ($blattkey == 5000) { // Nicht bei "fiktives Blatt" 
    468369        echo "\n\t<img src='ico/download_gb_no.png' width='32' height='16' alt='Export' title='F&uuml;r ein fiktives Blatt ohne Eigent&uuml;mer ist ein CSV-Export nicht sinnvoll.'>";  
Note: See TracChangeset for help on using the changeset viewer.