Die Funktion showprice() aus der Datei functions.inc.php erwartet zwei Parameter:

1.) INT itemID - die ID (nicht Artikelnummer!) des Artikels, dessen Preis angezeigt werden soll. In den meisten Fllen steht
diese ID in der Variablen $item_row[0]. Ansonsten ist sie in der ersten Spalte der Tabelle item zu finden.

2.) STRING sess - Die session-ID des Users. Anhand dieser Session (Tabelle online Spalte session; Variable $sess) wird aus
der Tabelle online die aktuelle Whrung und Sprache ausgelesen. Die Whrung fr das zugehrige Symbol, die Sprache fr
die Formatierung, da das nun mal nicht einheitlich ist.

Rckgabewert der Funktion ist eine Zeichnkette.


function showprice($itemID, $sess) {
    include("lib.inc.php");

Mit der Datei lib.inc.php, werden zum einen die Sprache $lang (die Kurzbezeichnung) und Whrung $curID aus der Tabelle online ausgelesen, zum anderen
die Benutzerdaten wie Rabatt $user_disc und Preistype $user_pt. Auerdem wird die Sprachdatei (Verzeichnis lang/;
$lang.inc.php)eingelesen, um den Variablen $gratis und $null_text einen sprachspezifischen Wert zuzuweisen.
Die eigentliche Abfrage des Preises aus der Tabelle price anhand des bergebenen Parameters $itemID:

    $price_res = db_query("select price.value,currency.rate,currency.keysign from price,currency
                             where price.itemID='$itemID' AND price.curID=currency.ID AND curID='$curID'") or db_die();
    $price_row = db_fetch_row($price_res);

$price_row[0] = Betrag in der aktuellen Whrung
$price_row[1] = Umrechnungsfaktor
$price_row[2] = Symbol der Whrung

Der nchste Schritt ist die automatische Umrechnung $auto_convert aus dem Konfigurationsmen.
Wenn die aktuelle Whrung $curID nicht die Basiswhrung (ID=1) ist und die Option $auto_convert eingeschaltet, wird
der Betrag der Basiswhrung fr diesen Artikel ermittelt und umgerechnet.
    if ($curID>1 && $auto_convert=="1") {
      $basis_res = db_query("select price.value from price
                             where price.itemID='$itemID' AND price.curID='1'") or db_die();
      $basis_row = db_fetch_row($basis_res);
      $price_row[0] = $price_row[1] * $basis_row[0];
    }

In $disprice wird der Betrag, der nach Bercksichtigung des Rabattes und des Preistypes brig bleibt.
Hinweis zum Preistyp: In Deutschland ist es finanzrechtlich vorgeschrieben, das Privatkunden immer Preise
mit Mehrwertsteuer (brutto) angezeigt bekommen, Geschftskunden Nettopreise. Ich wei nicht, ob das in anderen Lndern auch so ist.
Weiterhin unterscheidet sich die Anordnung der Summen am Ende einer Rechnung.
Privatkunden:
 - Bruttosumme
 Die Summe enthlt soundosviel Mehrwertsteuer.

Geschftkunden:
 - Nettosumme
 - zuzglich Mehrwertsteuer
 - Bruttosumme
Die zweite Zeile ist dann die sogenannte 'ausgewiesene Mehrwertsteuer' (liebe Finanzbeamter und Steuerfachleute ist das richtig soweit?)

    $disprice = ($price_row[0]-($price_row[0]*$user_disc))*$user_pt ;

In der Variablen $disprice steht nun endlich der anzuzeigene Preis, der jetzt noch formatiert wird. Falls andere Sprachgebiete
auch wie die Deutschen mit Komma formatieren, wre die if-Bedingung entsprechend mit ' || $lang=="xy"' zu ergnzen.

    if ($lang=="de") {$price= number_format($disprice, 2 , "," , ".");}
    else {$price = number_format($disprice , 2 , "." , ",");}

Letzte Aufgabe der Funktion ist die Prfung, ob statt der Zahl ein Text angezeigt werden soll.
Wenn der Preis kleiner als 0 (null) ist, wird der Wert der Variablen $gratis aus der Sprachdatei (Verzeichnis lang/;
$lang.inc.php).
Wenn der ermittelte Betrag in $disprice gleich 0 (null) ist, wird anhand der Option $show_null aus dem Konfigurationsmen
entschieden, ob der Betrag durch den Text $null_text ersetzt wird oder nicht.
Der dritte Fall ist, das der Betrag grer als 0 (null) ist. Dann wird ein Leerzeichen &nbsp; und das
Symbol der Whrung an den Betrag gehngt.

    if (($price_row[0] == 0) AND ($show_null == 0)) {$price = $null_text;}
    elseif ($price_row[0] < 0) { $price = $gratis;}
    else { $price = $price."&nbsp;".$price_row[2];}
    return $price;
}

Wann kann der Preis 0 werden:
a) $price_row[0]=0 - Kein Preis in der Tabelle price angegeben oder er wird nicht gefunden, weil ein falsche itemID bergeben wird.
b) $price_row[1]=0 - Der Umrechnungsfaktor (currency.rate) stimmt nicht.
c) $basis_row[0]=0 - Bei der Umrechnung mit $basis_row[0] geht was schief.
d) $user_pt=0 - Tabelle pricetype.vat bzw. user.prictypeID kontrollieren.



