Generierung List Of Costs / UBR / Stand: 14.07.2010 OPC4 / LBS3Port Analog zu den bereits genutzen php-Scripts für die Anzeige von Mail-Adresse, Gruppenzugehörigkeit und Anzahl der Verlängerungen wird ein pph-Script zur Anzeige der Gebührenübersicht eingebunden. Damit werden: a) die Gebühren aller Abteilungsgruppen angezeigt b) zu auswählbaren Kostenarten, wenn vorhanden, weitere Informationen angezeigt (Barcode, Autor, Titel), womit die Gebühren durch die Benutzer besser zugeordnet werden können Bsp.: Anzeige ohne vorhandene Forderungen: Bsp.: Anzeige mit vorhandenen Forderungen: 1 Bsp.: Übersicht der Kostenarten ILN=62 / WINIBW: 2 Dazu sind folgende Modifikationen/Ergänzungen am OPC4 vorgenommen worden: FILEMAP ... # password for loan / list of cost HM_PHP_PW=abcdefg ... classprf.asc [HERMES#CLASSPRF##] ... \BNLOC_ADR=/ubscript-php/bnloc.php ... \\ zzgbv_2_2_14_3.asc ... ! 26-05-10 : js : Texte geaendert fuer Anzeige Kosten Benutzerdaten HEADER_LISTOFCOSTS, TEXT_LISTOFCOSTS, ERROR_HML_NODEBS, LABEL_LISTOFCOSTS ! 27-05-10 : js : [HERMES#LOANSERVER#HTML#CNT_BORROWER_LISTOFCOSTS#] angepasst, ListOfCosts jetzt ueber php-Script BNLOC_ADR [HERMES##HTML_TEXT##DU] ... \HEADER_LISTOFCOSTS=Geb&uuml;hren&uuml;bersicht ... \TEXT_LISTOFCOSTS= ... \ERROR_HML_NODEBS= ... \LABEL_LISTOFCOSTS=Geb&uuml;hren&uuml;bersicht ... \\ [HERMES#LOANSERVER#HTML#CNT_BORROWER_LISTOFCOSTS#] \TEXT= <input type="hidden" name="ACT" value="<%variable(ACT)>"> <!-- input type="hidden" name="ACT" value="UI_DATA" --> <input type="hidden" name="BOR_U" value="<%variable(BOR_U)>"> <input type="hidden" name="BOR_PW_ENC" value="<%variable(BOR_PW_ENC)>"> <input type="hidden" name="STATUS" value="<%variable(STATUS)>"> <input type="hidden" name="MESSAGE" value="<%variable(MESSAGE)>"> <input type="hidden" name="LOC_REQUISITIONS" value="<%variable(LOC_REQUISITIONS)>"> <input type="hidden" name="NUMBER_OF_REQUISITIONS" value="<%variable(NUMBER_OF_REQUISITIONS)>"> <%include(LISTOFCOSTS_HEADER)> <!-- loc inserted - js - start --> <%if not(%empty(%classoption(BNLOC_ADR)))> <hr style="color:#CCCCCC; height:1px; border-style:none; background-color:#CCCCCC;"> <table> <tr> <td><%include(HTML_SPACER,"W=10")></td> <td class="presvalue"> <iframe src="<%classoption(BNLOC_ADR)>?ACT=<%variable(ACT)>&U=<%variable(BOR_U)>&DB=<%cvtourl(%variabl e(DB))>&LNG=<%cvtourl(%variable(LNG))>&EDOC=<%crc32(%variable(BOR_U), %environ("HM_PHP_PW"))>" id="locFrame" width="650" height="1500" name="ListOfCosts_in_a_box" align="left" frameborder="0" marginheight="4" marginwidth="4" scrolling="auto"> </iframe> </td> </tr> <%end> <!-- loc inserted - js - end --> \\ 3 bnloc.php <?php /* Datei Zweck : bnloc.php : Gebuehrenanzeige in OPC4 fuer alle Abteilungsgruppen Historie: 27-05-10 : 18-06-10 : 19-06-10 : Beschreibung 25-06-10 : js ag js in textlines an js : Datei angelegt nach Vorlage VZG-Scripts : Verbesserte Sicherheit durch EDOC-Check : and r.costs_code *= t.number / zeigt auch Gebuehren ohne : Aenderungen nach Hinweisen ag - function sz Anführungszeichen unterdruecken und case 3 entfernt - fno, iln, minchar, maxchar ueber array $lbspar festgelegt - Tabelle Kostenarten: $tbl_costs_txt : - c.author: Jahreszahl in Klammern entfernen mit STUFF - Anzeige Titeldaten nur fuer bestimmte Kostenarten: $cost_code_show_title - Tabelle Abteilungsgruppen: $tbl_dep_groups */ 14-07-10 : js // Parameter hier setzen: // *************************************************** // Database Connection $dbhost = 'host'; $dbuser = 'ro-user'; $dbpwd = 'passwd'; // hier DB-Host eintragen // hier ReadOnly-Nutzer fuer DB eintragen // Passwort fuer ReadOnly-Nutzer // Hier allen Datenbanken ("01","02" etc.) fno, iln und min./max. Stellenzahl der Nutzernummer zuordnen $lbspar["01"] = array(1, 62, 9, 11); $lbspar["02"] = array(2, 186, 9, 10); // Tabellen OUS $tbl_costs_txt = 113; // Texte Kostenart $tbl_dep_groups = 114; // Texte Abteilungsgruppen // Password fuer Security-Check aus OPC4: FILEMAP:HM_PHP_PW (rueckwaerts!) $HM_PHP_PW='gfedcba'; // Mit Anzeige der Titeldaten aus ous_copycache $show_titles_fromcopycache = true; // true or false $cost_code_show_title = '3'; // Kostenarten, fuer die Titeldaten angezeigt werden sollen, mehrere mit Komma getrennt, z.B. '3,4,5' // TEXTE DEUTSCH / ENGLISCH $txt_department['DU'] = 'Bibliothek'; $txt_department['EN'] = 'Library'; $txt_description['DU'] = 'Beschreibung'; $txt_description['EN'] = 'Description'; if($show_titles_fromcopycache) { $txt_shelf_mark['DU'] = 'Barcode / Autor / Titel'; $txt_shelf_mark['EN'] = 'Shelf mark / Author / Title'; } else { $txt_shelf_mark['DU'] = 'Barcode'; $txt_shelf_mark['EN'] = 'Shelf mark'; } $txt_date['DU'] = 'Datum'; $txt_date['EN'] = 'Date'; $txt_fee['DU'] = 'Betrag'; $txt_fee['EN'] = 'Fee'; $txt_total['DU'] = 'Summe der Geb&uuml;hren: '; $txt_total['EN'] = 'Amount due: '; // Array fuer Zeichensatzkonvertierung in HTML-Entitäten mit strtr $trans = array( // ae "\xD1" => "&auml;", "\xE4" => "&auml;", // oe "\xD2" => "&ouml;", "\xF6" => "&ouml;", // ue 4 "\xD3" "\xFC" // AE "\xC1" "\xC4" // OE "\xC2" "\xD6" // UE "\xC3" "\xDC" // SS "\xBE" "\xDF" => "&uuml;", => "&uuml;", => "&Auml;", => "&Auml;", => "&Ouml;", => "&Ouml;", => "&Uuml;", => "&Uuml;", => "&szlig;", => "&szlig;" ); // Funktionen: // *************************************************** function sz ($text, $tabelle) { switch ($tabelle) { case 1: $suchen = ",;.:@<>|^°!§$%&/()=?´`²³{[]}\+*~#'\""; $ersetz = "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"; $ergebnis = str_replace("!", "", strtr($text, $suchen, $ersetz)); break; case 2: $suchen = ",;.:@<>|^°!§$%&/()=?´`²³{[]}\+*~#'\""; $ersetz = "!!.!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"; $ergebnis = str_replace("!", "", strtr($text, $suchen, $ersetz)); break; default: $ergebnis = $text; } // switch return $ergebnis; } // Nutzernummer ggf. fuehrende Nullen ergaenzen - min.8, max.11 Stellen function leadingzero1($zk) { while ((strlen($zk)<11) and (strlen($zk)>8)) { $zk = "0" . $zk; } return $zk; } // Nutzernummer fuehrende Nullen bearbeiten - nicht fuer X-Barcodes function leadingzero($zk, $minchar, $maxchar) { if (substr(strtoupper($zk), 0, 1) != 'X'){ // zuerst alle fuehrenden Nullen entfernen, weil evt. auch zuviele $zk = ltrim($zk, "0"); // Dann zu $maxchar ergaenzen while ((strlen($zk)<$maxchar) and (strlen($zk)>($minchar-1))) { $zk = "0" . $zk; } } return $zk; } // Security-Check ueber EDOC function check_EDOC($edoc, $u, $pwd) { $request_edoc = sz($edoc, 1); // echo 'EDOC: ' . $request_edoc . "<br>"; $request_u = sz($u, 1); $unspwcode = sprintf("%u", crc32($pwd)); $len = strlen(stripslashes($request_u)); $i = (($len - ( $len % 2)) / 2); if ($i - 3 > 0) { $i = $i - 3; } $crcstr = substr(stripslashes($request_u), $i) . $unspwcode . stripslashes($request_u); $unsqucode = sprintf("%u", crc32($crcstr)); // echo 'UNSQUCODE: ' . $unsqucode . "<br>"; return ($unsqucode == $request_edoc); } 5 // Hier beginnt das Hauptprogramm: // *************************************************** // echo "+++ start main ... <br>"; // Security-Check ueber EDOC if (check_edoc($_REQUEST['EDOC'], $_REQUEST['U'], $HM_PHP_PW)) { // -- connect sybase host -if ($db = @sybase_connect($dbhost, $dbuser, $dbpwd)) { // echo "+++ database connected... <br>"; if (@sybase_select_db ( 'lbsdb' , $db)) { // -- language -$lang = (isset($_REQUEST['LNG'])) ? $_REQUEST['LNG'] : 'DU'; // -- lbsdatabase -$lbsdb=substr("0" . str_replace('"', '', substr(sz($_REQUEST['DB'], 2) . ".", 0, strpos(sz($_REQUEST['DB'], 2) . ".","."))), -2); // echo "lbsdb: " . $lbsdb . "<br>"; // -- fno -$fno = $lbspar[$lbsdb][0]; // -- iln -// Ermitteln per Abfrage - fuer beide Schreibweisen in content1, etwa "01%" oder "1 %" /* $sql='select soort from param where paramcode="OUS" and vlgnr=1 and ' . '(' . 'substring(content1,1,2)="' . substr("0" . substr(sz($_REQUEST['DB'], 2) . ".", 0, strpos(sz($_REQUEST['DB'], 2) . ".",".")), -2) . '"' . ' or ' . 'substring(content1,1,2)="' . substr(substr(sz($_REQUEST['DB'], 2) . ".", 0, strpos(sz($_REQUEST['DB'], 2) . ".",".")), -2) . '"' . ')'; // echo $sql; $result = sybase_query($sql, $db); $i_row = sybase_fetch_row($result); $iln = $i_row[0]; */ // ODER // per Auslesen aus dem Array $iln = $lbspar[$lbsdb][1]; // echo "iln: -" . $iln . "-<br>"; // -- address_id_nr -$result = sybase_query('select address_id_nr from borrower where borrower_bar="' . leadingzero(strtoupper(sz($_REQUEST['U'], 1)), $lbspar[$lbsdb][2], $lbspar[$lbsdb][3]) . '" and iln=' . $iln, $db); $a_row = sybase_fetch_row($result); $address_id_nr = $a_row[0]; // echo "address_id_nr: " . $address_id_nr . "<br>"; // -- Generiere ListOfCosts -// SQL-Statement Gebuehren $sql = 'SELECT ' . // Abteilung = Spalte 0 'r.department_group_nr, ' . // Benutzer - nicht anzeigen // 'CONVERT(char(11), b.borrower_bar), ' . // 'CONVERT(char(20), b.name + \',\' + b.first_name_initials_prefix), ' . // Kostenart = Spalte 1 // 'CONVERT(char(15), CONVERT(varchar(2), r.costs_code) + \'=\' + t.textline), ' . 't.textline, '; if($show_titles_fromcopycache) { $sql = $sql . ' CASE WHEN r.costs_code in (' . $cost_code_show_title . ') THEN ' . // Bandbarcode, wenn existiert - Spalte 2 'CONVERT(char(12), ISNULL(v.volume_bar, \'\')) ' . // c.author: Jahreszahl in Klammern entfernen mit STUFF ' + \'<br>\' + CONVERT(char(30), ISNULL(STUFF(c.author, CHARINDEX(\'(\', c.author), CHARINDEX(\')\', c.author) - CHARINDEX(\'(\', c.author) + 1, \'\'), \'\'))' . ' + \'<br>\' + CONVERT(char(30), ISNULL(c.shorttitle, \'\')) ' . ' END, '; } 6 $sql = $sql . // Datum: Aufnahme, Aenderung, Rückgabe - Spalte 3 ' CONVERT(char(8), r.date_of_creation,5), ' . // 'CONVERT(char(8), r.edit_date,5), ' . // 'CASE DATENAME(yy,r.date_of_discharge) WHEN "1800" THEN " - - " ELSE CONVERT(char(8), r.date_of_discharge,5) END, ' . // Kosten - Spalte - 4 'CONVERT(CHAR(8), CONVERT(money,r.costs, 0), 1) ' . 'FROM requisition r, borrower b, textlines t, volume v '; if($show_titles_fromcopycache) { $sql = $sql . ', ous_copy_cache c '; } $sql = $sql . 'WHERE ' . 'r.iln = ' . $iln . ' and b.iln = ' . $iln . ' and v.iln = ' . $iln; if($show_titles_fromcopycache) { $sql = $sql . ' and c.iln = ' . $iln; } $sql = $sql . ' and r.address_id_nr = ' . $address_id_nr . ' and r.address_id_nr = b.address_id_nr ' . ' and r.id_number *= v.volume_number '; if($show_titles_fromcopycache) { $sql = $sql . ' and c.epn =* v.epn'; } $sql = $sql . ' and t.typ = ' . $tbl_costs_txt . ' and t.language = "DU" ' . ' and t.line_count = 1 ' . ' and t.fno = ' . $fno . ' and r.costs_code *= t.number ' . 'ORDER BY ' . 'r.department_group_nr, b.query_name, b.borrower_bar'; // echo "<br>" . $sql . "<br>"; $result = sybase_query($sql, $db); // Summe Gebuehren $summe=0; // Gebuehrentabelle if($result) { print "<table id=\"listofcosts_table\" border=\"2\" cellspacing=\"0\" cellpadding=\"4\" style=\"margin:1em 1em 1em 0; border:solid 1px #AAAAAA; bordercollapse:collapse; background-color:#F9F9F9;\">"; print "<tr style=\"FONT-FAMILY: verdana,arial,helvetica,sans-serif; FONT-SIZE: 10pt;\">"; print "<td><b>$txt_department[$lang]</b></td>"; print "<td><b>$txt_description[$lang]</b></td>"; print "<td><b>$txt_shelf_mark[$lang]</b></td>"; print "<td><b>$txt_date[$lang]</b></td>"; print "<td><b>$txt_fee[$lang]</b></td>"; print "</tr>"; while ($row = sybase_fetch_array($result)) { print"<tr>"; // Anzeige 5 ausgewaehlte Spalten $anzahl = 5; for($i=0;$i<$anzahl;$i++) { $txt=$row[$i]; // Zeichenkonvertierung generiert html-Entitaeten $txt = strtr( $txt, $trans); // Spaltenformatierung switch($i) { case 0: case 3: print "<td align=\"center\">"; break; case 4: print "<td align=\"right\">"; break; default: print "<td>"; } // switch print "<span style=\"FONT-FAMILY: verdana,arial,helvetica,sans-serif; FONT-SIZE: 8pt;\">". $txt; if($i==4) { $summe=$summe+floatval($txt); print "&nbsp;&euro;"; } print "</span></td>"; } // for print"</tr>"; } // while // Summe in letzter Zeile ausgeben 7 print "<tr><td colspan=\"4\" height=\"40\" align=\"right\">"; print "<span style=\"FONT-FAMILY: verdana,arial,helvetica,sans-serif; FONTSIZE: 11pt; FONT-WEIGHT: bold;\">"; print $txt_total[$lang] . "&nbsp;</td>"; print "<td height=\"40\">"; print "<span style=\"FONT-FAMILY: verdana,arial,helvetica,sans-serif; FONTSIZE: 11pt; FONT-WEIGHT: bold;\">"; print number_format($summe, 2, '.', '') . "&nbsp;&euro;</td></tr>"; print "</table>"; print "<br>"; // Legende Abteilungsgruppen - Anzeige nur wenn Gebuehren if($summe > 0) { $sql= ' SELECT CONVERT(varchar(3), t.number) + " = " + t.textline FROM textlines t ' . 'WHERE t.typ = ' . $tbl_dep_groups . ' and t.language = "DU" and t.line_count = 1 and t.fno = ' . $fno . ' and t.number <> 0 and t.number <> 2' . 'ORDER BY t.number'; $result = sybase_query($sql, $db); if($result) { print "<table id=\"listofdepartments_table\" border=\"2\" cellspacing=\"0\" cellpadding=\"4\" style=\"margin:1em 1em 1em 0; border:solid 1px #AAAAAA; border-collapse:collapse; background-color:#F9F9F9;\">"; print "<tr style=\"FONT-FAMILY: verdana,arial,helvetica,sansserif; FONT-SIZE: 10pt;\">"; print "<td><b>$txt_department[$lang]</b></td>"; print "</tr>"; while ($row = sybase_fetch_array($result)) { print"<tr>"; $txt=$row[0]; // Zeichenkonvertierung generiert html-Entitaeten $txt = strtr( $txt, $trans); print "<td><span style=\"FONT-FAMILY: verdana,arial,helvetica,sans-serif; FONT-SIZE: 8pt;\">". $txt; print "</span></td>"; print"</tr>"; } // while print "</table>"; } // if result } // if summe } // if result // var_dump($_REQUEST); } else { echo "<font color=red>cannot selected database</font>"; } // sybase_select_db } else { echo "<font color=red>cannot connect database</font>"; } // sybase_connect sybase_free_result($result); sybase_close($db); } // check_edoc //echo "<br>+++ end main ... <br>"; ?> 8