100714_GenerierungLi..

Werbung
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ührenübersicht
...
\TEXT_LISTOFCOSTS=
...
\ERROR_HML_NODEBS=
...
\LABEL_LISTOFCOSTS=Gebührenü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ühren: ';
$txt_total['EN'] = 'Amount due: ';
// Array fuer Zeichensatzkonvertierung in HTML-Entitäten mit strtr
$trans = array(
// ae
"\xD1" => "ä",
"\xE4" => "ä",
// oe
"\xD2" => "ö",
"\xF6" => "ö",
// ue
4
"\xD3"
"\xFC"
// AE
"\xC1"
"\xC4"
// OE
"\xC2"
"\xD6"
// UE
"\xC3"
"\xDC"
// SS
"\xBE"
"\xDF"
=> "ü",
=> "ü",
=> "Ä",
=> "Ä",
=> "Ö",
=> "Ö",
=> "Ü",
=> "Ü",
=> "ß",
=> "ß" );
// 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 " €"; }
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] . " </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, '.', '') . " €</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
Herunterladen