Subversion-Projekte lars-tiefland.content-management

Revision

Revision 1 | Blame | Vergleich mit vorheriger | Letzte Änderung | Log anzeigen | RSS feed

<?php
    /**
     * Lagerwirtschaft mit warenwirtschaftlichen Zügen.
     * Diese Datei enthält den gesamten PHP-Quelltext des Backendmoduls „Lagerwirtschaft mit warenwirtschaftlichen Zügen“.
     * Nach Abarbeitung des Quelltexts wird das jeweilige Smarty-Template aufgerufen und diesen benötigte Variabeln übergeben.
     * 
     * @author Patrick Lautsch <lautsch@weban.de>
     * @copyright 2009 Webagentur Niewerth
     * @package Content-management
     * @version
     * @license propietary
     * @filesource
     */

    /**
     * Deutsche Umgebung.
     */
    setlocale( LC_ALL, "de_DE" );

    /**
     * Setzte "CET" als Zeitzone.
     */
    date_default_timezone_set( 'CET' );

    /**
     * Gibt die Backendmodulgruppe an, in welchem sich das Backendmodul befindet.
     */
    define( "modul_name", "Warenwirtschaft" );

    /**
     * Gibt den Modulnamen an.
     */
    define( "tool_name", "lagerwirtschaft" );

    /**
     * Gibt den Namen dieser Datei aus.
     */
    define( "F_NAME", basename( $_SERVER["PHP_SELF"] ) );

    /**
     * Connect-Datei einbinden.
     */
    require_once "../Online-Shop/connect2.php";

    /**
     * Zusätzliche Funktionen.
     */
    require_once '../includes/system/functions.lagerwirtschaft.php';

    /**
     * Start der Session.
     */
    session_start();

    /**
     * Smarty Initialisierung.
     */
    require_once "Weban_Smarty.class.php";
    $GLOBALS["ui"] = new Weban_Smarty();
    $GLOBALS["ui"]->conifg_dir = SMARTY_DIR;
    $GLOBALS["ui"]->template_dir = "templates/";
    $GLOBALS["ui"]->compile_dir = "templates_c";
    $GLOBALS["ui"]->compile_check = true;
    $GLOBALS["ui"]->assign( "eingabefelder", $eingabefelder );
    $GLOBALS["ui"]->assign( "webs", $webs );

    /**
     * Übergebe den GET-Parameter 'artikelId' an Smarty, falls dieser gesetzt ist.
     */
    if ( !empty( $_GET['artikelId'] ) )
    {
        $GLOBALS["ui"]->assign( "artikelId", $_GET['artikelId'] );
    }

    /**
     * Wenn <var>$_GET['buchungEingetragen']</var> gleich eins ist, dann trage die Buchung in die Datenbank ein
     */
    if ( $_GET['action'] == "buchungEingetragen" )
    {
        /**
         * Speichere die vom Eingangsbuchungsformular abgeschickten POST-Daten in Variabeln.
         */

        /**
         * Lieferant
         */
        $eingangsbuchungLieferantenNummer = $_POST['lieferant'];

        /**
         * Datum: Tag
         */
        $eingangsbuchungDatum = $_POST['datum'];

        /**
         * Erstelle aus den POST-Arrays <var>$_POST['menge']</var>, <var>$_POST['artikelID']</var> und <var>$_POST['warenwert']</var>
         * ein einziges LOOP-Array.
         */
        for ( $i = 0; $i < sizeof( $_POST['menge'] ); $i++ )
        {
            /**
             * Wenn im Buchungsformular "Ausgangsbuchung(-)" gewählt wurde, wird vor die Menge ein Minus gehängt.
             */
            if ( $_POST['buchungsart'][$i] == 'ausgangsbuchung' )
            {
                $eingangsbuchungArtikel[$i]['menge'] = -$_POST['menge'][$i];
            }
            else
            {
                $eingangsbuchungArtikel[$i]['menge'] = $_POST['menge'][$i];
            }

            $eingangsbuchungArtikel[$i]['artikelID'] = $_POST['artikelID'][$i];
            $eingangsbuchungArtikel[$i]['warenwert'] = $_POST['warenwert'][$i];
        }

        /**
         * QUERY: Trage die Buchung in die Datenbank ein.
         */
        $sql = "
            INSERT INTO
                buchungen
            (
                eintragsdatum
            )
            VALUES
            (
                NOW()
            )
        ;";

        /**
         * QUERY ausführen.
         */
        $result = mysql_query( $sql ) or die( mysql_errno() . ': ' . mysql_error
            () . '<hr />' . $sql );

        /**
         * Die ID der eingetragenen Buchung in der Tabelle "buchungen".
         */
        $eingangsbuchungBuchungenID = mysql_insert_id();

        /**
         * Trage die Artikel der Buchung in die Tabelle "lagerbewegungen" ein.
         */
        for ( $i = 0; $i < sizeof( $eingangsbuchungArtikel ); $i++ )
        {
            /**
             * QUERY
             */
            $sql = "
                INSERT INTO
                    lagerbewegungen
                (
                    artikel,
                    buchungen,
                    menge
                )
                VALUES
                (
                    " . $eingangsbuchungArtikel[$i]['artikelID'] . ",
                    " . $eingangsbuchungBuchungenID . ",
                    " . $eingangsbuchungArtikel[$i]['menge'] . "
                )
           ;";

            /**
             * QUERY ausführen
             */
            $result = mysql_query( $sql ) or die( mysql_errno() . ': ' .
                mysql_error() . '<hr />' . $sql );
        }
        unset( $_GET['action'] );
?>
        <script type="text/javascript">
                location.href="javascript:history.go(-2);";
        </script>
        <?php
    }

    /**
     * Wenn die Übersichtsseite angezeigt werden soll (<var>$_GET['action']</var> nicht gesetzt oder <var>$_GET['action']</var> = "uebersicht"),
     * dann führe diesen Codeblock aus.
     */
    if ( $_GET['action'] == "uebersicht" || empty( $_GET['action'] ) )
    {
        /**
         * Setzte die Standardparameter für die Artikelsuche.
         */

        /**
         * Bestimmt den Artikelnamen nach dem gesucht werden soll.
         */
        $sucheArtikelname = "";

        /**
         * Bestimmt den Bestand nach dem gesucht werden soll.
         */
        $sucheBestand = null;

        /**
         * Bestimmt in Verbindung mit dem Bestandsoperator nach welchen Beständen gesucht wird.
         */
        $sucheBestand = 0;

        /**
         * Bestimmt den Bestandsoperator, welcher angibt ob der gesuchte Bestand größer, kleiner oder gleich dem angegebenen ist.
         * "0" entspricht "="
         * "1" entspricht ">"
         * "2" entspricht "<"
         * "3" bedeutet: keine Bestandssuche
         */
        $sucheBestandsoperator = 3;

        /**
         * Bestimmt ob die Suche Absteigend oder Aufsteigend die Suchergebnisse anzeigt.
         * "0" entspricht "Absteigend"
         * "1" entspricht "Aufsteigend"
         */
        $sucheSortierung = "DESC";

        /**
         * Bestimmt wie viele Artikel pro Seite angezeigt werden sollen.
         */
        $sucheArtikelProSeite = 50;

        /**
         * Bestimmt welche Artikelseite angezeit werden soll.
         */
        $sucheArtikelseite = 1;

        /**
         * Bestimmt welche Artikelseite angezeit werden soll.
         */
        $sucheArtikelanzahl['start'] = 0;

        /**
         * Wenn "Suche ausführen" geklickt wurde, ersetzte die Standardsuchparameter durch die, die der Benutzer eingegeben hat.
         */
        if ( $_POST['sucheSubmit'] || $_POST['sucheWeiter'] || $_POST['sucheZurueck'] ||
            $_POST['sucheNeueSeite'] )
        {
            $sucheArtikelname = $_POST['sucheArtikelname'];
            $sucheBestand = $_POST['sucheBestand'];
            $sucheBestandsoperator = $_POST['sucheBestandsoperator'];
            $sucheMeldebestandGroesserBestand = $_POST['sucheMeldebestandGroesserBestand'];
            $sucheSortierung = ( $_POST['sucheSortierung'] ) ? "ASC" : "DESC";

            /**
             * Sollte <var>$sucheBestand</var> keinen Wert haben, dann setzte diesen auf "0".
             */
            if ( empty( $sucheBestand ) )
            {
                $sucheBestand = 0;
            }

            /**
             * Sollte sich der Suchbegriff geändert haben, dann setzte die Artikelseite auf eins,
             * ansonsten setzte <var>$sucheArtikelseite</var> gleich eins, wenn <var>$sucheArtikelseite</var> gleich false ist,
             * ausßerdem addiere <var>$sucheArtikelseite</var> um den Wert von <var>$_POST['sucheWeiter']</var> und subtrahiere
             * <var>$sucheArtikelseite</var> um den Wert von <var>$_POST['sucheZurueck']</var>.
             */
            if ( $_POST['sucheAlterArtikelname'] != $sucheArtikelname )
            {
                $sucheArtikelseite = 1;
            }
            else
            {
                $sucheArtikelseite = ( $_POST['sucheArtikelseite'] ) ? $_POST['sucheArtikelseite'] :
                    1;
                $sucheArtikelseite += $_POST['sucheWeiter'];
                $sucheArtikelseite -= $_POST['sucheZurueck'];
            }

            /**
             * Bestimmt den Startpunkt der Datenbanksuche und somit auch welche Seite angezeigt wird.
             * Dazu wird die Anzahl der Artikel pro Seite (<var>$sucheArtikelProSeite</var>) durch die aktuelle Seitennummer
             * (<var>$sucheArtikelseite</var>) dividiert und der Wert des Quotionenten mit Anzahl der Artikel pro Seite subtrahiert.
             */
            $sucheArtikelanzahl['start'] = ( $sucheArtikelProSeite * $sucheArtikelseite ) -
                $sucheArtikelProSeite;
        }

        /**
         * Bestandsoperator bestimmen.
         */
        if ( $sucheBestandsoperator == 0 )
        {
            $sucheBestandsoperatorZeichen = "=";
        } elseif ( $sucheBestandsoperator == 1 )
        {
            $sucheBestandsoperatorZeichen = ">";
        } elseif ( $sucheBestandsoperator == 2 )
        {
            $sucheBestandsoperatorZeichen = "<";
        } elseif ( $sucheBestandsoperator == 3 )
        {
            $sucheBestandsoperatorZeichen = false;
        }
        else
        {
            die( "<strong>Fehler:</strong> Der Bestandsoperator konnte nicht ermittelt werden!" );
        }

        /**
         * HAVING-Bedingung, welche nur in die nachfolgende Query übernommen wird, wenn ein Bestandsoperatorzeichen
         * ausgewählt wurde, also <var>$sucheBestandsoperatorZeichen</var> nicht den Wert FALSE hat.
         */
        if ( $sucheBestandsoperatorZeichen != false )
        {
            $havingBedingung = "HAVING bestand $sucheBestandsoperatorZeichen $sucheBestand";
        }

        /**
         * QUERY: Hole aus der Datenbank alle Artikel, die den angegebenen Parametern entsprechen.
         */
        $sql = "
            SELECT
                SQL_CALC_FOUND_ROWS
                a.ID as id,
                a.kurzbezeichnung,
                a.durchschnittliche_lieferzeit,
                a.jahreszinssatz,
                a.mindestbestand,
                SUM(b.menge) AS bestand
            FROM
                artikel AS a LEFT JOIN lagerbewegungen as b
                    ON a.ID = b.artikel
            WHERE
            (
                (a.kurzbezeichnung LIKE '%$sucheArtikelname%')
                OR
                (a.ID = '$sucheArtikelname')
            )
            AND
                a.language='" . $_SESSION["language"] . "'
            GROUP BY
                a.ID
            $havingBedingung
            ORDER BY 
                a.kurzbezeichnung $sucheSortierung
            LIMIT
                " . $sucheArtikelanzahl['start'] . ", " . $sucheArtikelProSeite .
            "
        ;";

        /**
         * QUERY ausführen.
         */
        $result = mysql_query( $sql ) or die( mysql_errno() . ': ' . mysql_error
            () . '<hr />' . $sql );

        /**
         * Speichere alle zurückgegebenen Artikeldaten in einem Loop-Array mit den Sub-Arrays: id, kurzbezeichnung, durchschnittliche_lieferzeit,
         * jahreszinssatz und mindestbestand.
         */
        for ( $i = 0; $row = mysql_fetch_assoc( $result ); $i++ )
        {
            $sucheArtikel[$i]['id'] = $row['id'];
            $sucheArtikel[$i]['kurzbezeichnung'] = $row['kurzbezeichnung'];
            $sucheArtikel[$i]['mindestbestand'] = $row['mindestbestand'];
        }

        /**
         * Hole die Anzahl der Artikel, die den Suchparametern entsprechen.
         */
        $sql = "SELECT FOUND_ROWS() AS sucheAnzahlArtikel";

        /**
         * QUERY ausführen.
         */
        $result = mysql_query( $sql ) or die( mysql_errno() . ': ' . mysql_error
            () . '<hr />' . $sql );

        /**
         * QUERY in ein Assoziatives Array speichern.
         */
        $row = mysql_fetch_assoc( $result );

        /**
         * Die Anzahl der Artikel, die den Suchparametern entsprechen.
         */
        $sucheAnzahlArtikel = $row['sucheAnzahlArtikel'];

        /**
         * Prüfe, ob die Anzahl der Artikel ohne Rest durch die Anzahl der Artikel pro Seite teilbar ist.
         */
        $rest = $sucheAnzahlArtikel % $sucheArtikelProSeite;

        /**
         * Sollte <var>$rest</var> größer als 0 sein, rechne die Anzahl der Artikel durch die Artikel pro Seite + 1.
         */
        if ( $rest > 0 )
        {
            $sucheAnzahlSeiten = ( int )( $sucheAnzahlArtikel / $sucheArtikelProSeite ) +
                1;
        }
        else
        {
            $sucheAnzahlSeiten = ( $sucheAnzahlArtikel / $sucheArtikelProSeite );
        }

        /**
         * Sollte die aktuelle Seitennummer (<var>$sucheArtikelseite</var>) größer sein als die Gesamtseitenzahl (<var>$sucheAnzahlSeiten</var>),
         * dann dekrementiere die aktuelle Seitennummer um eins.
         */
        if ( $sucheArtikelseite > $sucheAnzahlSeiten )
        {
            $sucheArtikelseite--;
        }

        /**
         * Sollte die aktuelle Seitennummer (<var>$sucheArtikelseite</var>) kleiner sein als eins,
         * dann inkrementiere die aktuelle Seitennummer um eins.
         */
        if ( $sucheArtikelseite < 1 )
        {
            $sucheArtikelseite++;
        }

        /**
         * Berechnung aller Bestände der Artikel der aktuellen Seite.
         */
        for ( $i = 0; $i < sizeof( $sucheArtikel ); $i++ )
        {
            /**
             * QUERY: Berechnung des aktuellen Bestands für den <var>$sucheArtikel[$i]['id']</var>.
             */
            $sql = "
                SELECT
                    SUM(menge) as bestand
                FROM
                    lagerbewegungen
                WHERE
                    artikel = " . $sucheArtikel[$i]['id'] . "
            ;";

            /**
             * QUERY ausführen.
             */
            $result = mysql_query( $sql ) or die( mysql_errno() . ': ' .
                mysql_error() . '<hr />' . $sql );

            /**
             * Das Ergebnis der QUERY in einem assoziativen Array speichern.
             */
            $row = mysql_fetch_assoc( $result );

            /**
             * Speicherung des Bestands in <var>$sucheArtikel[$i]['bestand']</var>
             */
            $sucheArtikel[$i]['bestand'] = $row['bestand'];
        }

        /**
         * Übergabe der Artikel- und Formulardaten an Smarty.
         */
        /**
         * Übergabe Artikelname
         */
        $GLOBALS["ui"]->assign( "sucheArtikelname", $sucheArtikelname );

        /**
         * Übergabe Bestand
         */
        $GLOBALS["ui"]->assign( "sucheBestand", $sucheBestand );

        /**
         * Übergabe Bestandsoperatorennummer
         */
        $GLOBALS["ui"]->assign( "sucheBestandsoperator", $sucheBestandsoperator );

        /**
         * Übergabe Meldebestand-größer-als-Bestand-Option
         */
        $GLOBALS["ui"]->assign( "sucheMeldebestandGroesserBestand", $sucheMeldebestandGroesserBestand );

        /**
         * Übergabe Sortierung
         */
        $GLOBALS["ui"]->assign( "sucheSortierung", $sucheSortierung );

        /**
         * Übergabe Nummer der aktuellen Seite
         */
        $GLOBALS["ui"]->assign( "sucheArtikelseite", $sucheArtikelseite );

        /**
         * Übergabe der Anzahl der Seiten
         */
        $GLOBALS["ui"]->assign( "sucheAnzahlSeiten", $sucheAnzahlSeiten );

        /**
         * Übergabe des Artikel-Arrays
         */
        $GLOBALS["ui"]->assign( "artikelLoop", $sucheArtikel );
    }

    /**
     * Wenn <var>$_GET['action']</var> gleich "buchung" ist, dann führe diesen Codeblock aus.
     */
    if ( $_GET['action'] == "buchung" )
    {
        /**
         * QUERY: Hole alle Lieferanten des Kunden, die nicht gesperrt sind.
         */
        $sql = "
            SELECT
                ID as id,
                Name as name
            FROM
                Firma
            WHERE
                gesperrt = 'nein'
        ";
        /**
         * QUERY ausführen.
         */
        $result = mysql_query( $sql ) or die( mysql_errno() . ': ' . mysql_error
            () . '<hr />' . $sql );

        /**
         * QUERY in ein Assoziatives Array speichern.
         */
        for ( $i = 0; $row = mysql_fetch_assoc( $result ); $i++ )
        {
            $eingangsbuchungLieferanten[$i]['id'] = $row['id'];
            $eingangsbuchungLieferanten[$i]['name'] = $row['name'];
        }

        /**
         * Übergabe der Lieferanten an Smarty.
         */
        $GLOBALS["ui"]->assign( "lieferantenLoop", $eingangsbuchungLieferanten );
    }

    /**
     * Wenn <var>$_GET['action']</var> gleich "artikel" ist, dann führe diesen Codeblock aus.
     */
    if ( $_GET['action'] == "artikel" )
    {
        /**
         * Prüfe ob eine <var>$_GET['id']</var> korrekt übergeben wurde.
         */
        if ( empty( $_GET['id'] ) )
        {
            /**
             * Abbruch des Skripts.
             */
            die( "<strong>Fehler:</strong> Sie haben diese Seite ohne id-Parameter aufgerufen!" );
        }

        /**
         * Wenn "Artikeldaten aktualisieren" geklickt wurde updatete in der Datenbank folgende Attribute des Artikels:
         * mindestbestand, durchschnittliche_lieferzeit und jahreszinssatz.
         */
        if ( $_POST['artikeldaten_eintragen'] )
        {
            /**
             * QUERY: UPDATE der Artikeltabelle.
             */
            $sql = "
                UPDATE
                    artikel
                SET
                    mindestbestand                  = '" . $_POST['mindestbestand'] .
                "',
                    durchschnittliche_lieferzeit    = '" . $_POST['durchschnittlicheLieferzeit'] .
                "',
                    jahreszinssatz                  = '" . $_POST['jahreszinssatz'] .
                "'
                WHERE
                    ID = " . $_GET['id'] . "
           ;";

            /**
             * QUERY ausführen.
             */
            mysql_query( $sql ) or die( mysql_errno() . ': ' . mysql_error() .
                '<hr />' . $sql );
        }

        /**
         * QUERY: Hole folgende Daten des Artikel: ID (Artikelnummer), kurzbezeichnung (Artikelbezeichnung),
         * durschnittliche_lieferzeit (durchschnittliche Lieferzeit), jahreszinssatz (Jahreszinssatz), mindestbestand (Mindestbestand).
         */
        $sql = "
            SELECT
                a.ID AS id,
                a.kurzbezeichnung AS artikelbezeichnung,
                a.durchschnittliche_lieferzeit AS durchschnittlicheLieferzeit,
                a.jahreszinssatz,
                a.mindestbestand,
                SUM(b.menge) AS bestand
            FROM
                artikel AS a LEFT JOIN lagerbewegungen AS b
                    ON a.ID = b.artikel
            WHERE
                a.ID = " . $_GET['id'] . "
            AND
                a.language='" . $_SESSION["language"] . "'
            GROUP BY
                id
        ;";

        /**
         * QUERY ausführen.
         */
        $result = mysql_query( $sql ) or die( mysql_errno() . ': ' . mysql_error
            () . '<hr />' . $sql );

        /**
         * Prüfe ob keine Artikeldaten zurückgegeben wurden indem ein assoziatives Array mit den Rückgabewerten gefüllt wird.
         */
        if ( !$artikelArtikeldaten = mysql_fetch_assoc( $result ) )
        {
            /**
             * Abbruch des Skripts.
             */
            die( "<strong>Fehler:</strong> Der Artikel (ID=" . $_GET['id'] .
                ") konnte nicht gefunden werden!" );
        }

        /**
         * Berechnung des durchschnittlichen Lagerbestand.
         */
        /**
         * QUERY: Hole alle Lagerbewegungen des Artikels der letzten 360 Tage aus der Datenbank.
         */
        $sql = "
            SELECT
                b.eintragsdatum AS datum,
                a.menge
            FROM
                lagerbewegungen AS a INNER JOIN buchungen AS b
                    ON a.buchungen = b.ID
            WHERE
                a.artikel = " . $_GET['id'] . "
            ORDER BY
                datum DESC
        ;";

        /**
         * QUERY ausführen.
         */
        $result = mysql_query( $sql ) or die( mysql_errno() . ': ' . mysql_error
            () . '<hr />' . $sql );

        /**
         * Speicherung aller Lagerbewegungen als LOOP-Array mit Datum und Menge.
         */
        for ( $i = 0; $row = mysql_fetch_assoc( $result ); $i++ )
        {
            $lagerbewegungen[$i]['datum'] = date( "d.m.Y H:i:s", strtotime( $row['datum'] ) );
            $lagerbewegungen[$i]['menge'] = $row['menge'];
        }

        /**
         * Die Lagerbewegungen werden zusätzlich in eine zweite Variable gespeichert,
         * damit diese unverändert an Smarty übergeben werden können, da die Lagerbewegungen durch die Berechnung
         * des durchschnittlichen Lagerbestands verfälscht werden würden.
         */
        $lagerbewegungenArtikel = $lagerbewegungen;

        /**
         * Addition aller Bestände eines <b>jeden</b> Tages von Beginn bis Ende der Buchungen.
         * Gespeichert wird dies in der Variable <var>$zwischenspeicher</var>.
         */
        for ( $i = 0; $i < sizeof( $lagerbewegungen ); $i++ )
        {
            /**
             * Letzter Lagerbewegungseintrag noch nicht erreicht?
             */
            if ( $i + 1 != sizeof( $lagerbewegungen ) )
            {
                /**
                 * Zwischenspeichern des i. Datums im Format "YYYY-MM-TT", vorher "YYYY-MM-TT HH:ii:ss".
                 */
                $temp = explode( " ", $lagerbewegungen[$i]['datum'] );

                /**
                 * <var>$tempDatum[0]</var> enthält den Timestamp der i. Lagerbewegung.
                 */
                $tempDatum[0] = strtotime( $temp[0] );

                /**
                 * Zwischenspeichern des i+1. Datums im Format "YYYY-MM-TT", vorher "YYYY-MM-TT HH:ii:ss".
                 */
                $temp = explode( " ", $lagerbewegungen[$i + 1]['datum'] );

                /**
                 * <var>$tempDatum[0]</var> enthält den Timestamp der i+1. Lagerbewegung.
                 */
                $tempDatum[1] = strtotime( $temp[0] );

                /**
                 * Ist das i. Datum gleich dem i+1. Datum?
                 */
                if ( $tempDatum[0] == $tempDatum[1] )
                {
                    /**
                     * Addition der Menge der i. Lagerbewegungen mit der i+1 und Überschreibung der i+1. Menge.
                     */
                    $lagerbewegungen[$i + 1]['menge'] += $lagerbewegungen[$i]['menge'];

                    /**
                     * Setzte die Menge der i. Lagerbewegung auf 0.
                     */
                    $lagerbewegungen[$i]['menge'] = 0;

                    /**
                     * Setzte ein Flag für die i+1. Lagerbewegung.
                     */
                    $lagerbewegungen[$i + 1]['flag'] = 1;
                }
                else
                {
                    /**
                     * Addiere auf die Variable <var>aktuellerBestand</var> den Wert von <var>$lagerbewegungen[$i]['menge']</var>.
                     */
                    $aktuellerBestand += $lagerbewegungen[$i]['menge'];

                    /**
                     * Ist das Flag <var>$lagerbewegungen[$i]['flag']</var> gesetzt?
                     */
                    if ( $lagerbewegungen[$i]['flag'] )
                    {
                        /**
                         * Ziehe vom Datum der i+1. Lagerbewegung das der i. ab und speichere dies in <var>$temp</var>.
                         */
                        $temp = $tempDatum[1] - $tempDatum[0];

                        /**
                         * Wandle <var>$temp</var> von Timestamp auf Tage um.
                         */
                        $temp = ( ( ( $temp / 60 ) / 60 ) / 24 );

                        /**
                         * Speichere in der Variable <var>$zwischenspeicher</var> das Ergebnis der Multiplikation
                         * von <var>$temp</var> (Anzahl der Tage) und <var>$aktuellerBestand</var>.
                         */
                        $zwischenspeicher += $aktuellerBestand * $temp;
                    }
                    else
                    {
                        /**
                         * Ist <var>$i</var> gleich 0?
                         */
                        if ( $i == 0 )
                        {
                            /**
                             * Ziehe vom Datum der i+1. Lagerbewegung das der i. ab und speichere dies in <var>$temp</var>.
                             */
                            $temp = $tempDatum[1] - $tempDatum[0];

                            /**
                             * Wandle <var>$temp</var> von Timestamp auf Tage um.
                             */
                            $temp = ( ( ( $temp / 60 ) / 60 ) / 24 );

                            /**
                             * Setzte die Variable <var>$zwischenspeicher</var> auf die Menge der i. Lagerbewegung x die Anzahl an Tagen
                             * bis zur i+1 Lagerbewegung.
                             */
                            $zwischenspeicher = $lagerbewegungen[$i]['menge'] *
                                $temp;
                        }
                        else
                        {
                            /**
                             * Überschreibe den Wert von <var>$zwischenspeicher</var> mit dem Ergebnis der Addtion
                             * von <var>$zwischenspeicher</var> und <var>$aktuellerBestand</var>.
                             */
                            $zwischenspeicher += $aktuellerBestand;
                        }
                    }
                }
            }
            else
            {
                /**
                 * Addiere zum Wert von <var>$aktuellerBestand</var> den Wert von <var>$lagerbewegungen[$i]['menge']</var>.
                 */
                $aktuellerBestand += $lagerbewegungen[$i]['menge'];

                /**
                 * Addiere zum Wert von <var>$zwischenspeicher</var> den Wert von <var>$aktuellerBestand</var>.
                 */
                $zwischenspeicher += $aktuellerBestand;
            }
        }

        /**
         * Zwischenspeichern des 1. Datums im Format "YYYY-MM-TT", vorher "YYYY-MM-TT HH:ii:ss".
         */
        $temp = explode( " ", $lagerbewegungen[0]['datum'] );

        /**
         * <var>$tempDatum[0]</var> enthält den Timestamp der 1. Lagerbewegung.
         */
        $tempDatum[0] = strtotime( $temp[0] );

        /**
         * Zwischenspeichern des 1. Datums im Format "YYYY-MM-TT", vorher "YYYY-MM-TT HH:ii:ss".
         */
        $temp = explode( " ", $lagerbewegungen[sizeof( $lagerbewegungen ) - 1]['datum'] );

        /**
         * <var>$tempDatum[1]</var> enthält den Timestamp der letzten Lagerbewegung.
         */
        $tempDatum[1] = strtotime( $temp[0] );

        /**
         * Berechne den Zeitraum in Sek. zwischen der ersten und der letzten Lagerbewegung.
         */
        $temp = $tempDatum[1] - $tempDatum[0];

        /**
         * Wandle den Zeitraum zwischen der ersten und der letzten Lagerbewegung in Tage um.
         */
        $temp = ( ( ( $temp / 60 ) / 60 ) / 24 );

        /**
         * Berechne den durchschnittlichen Lagerbestand.
         */
        @$durschnittlicherBestand = $zwischenspeicher / ( $temp + 1 );

        /**
         * Berechnung des Wareneinsatz.
         * Für die Berechnung des Wareneinsatzes werden alle Warenausgänge der letzten 360 Tage miteinander addiert. 
         */
        /**
         * QUERY: Hole alle Ausgänge des Artikels mit der ID <var>$_GET['id']</var>.
         */
        $sql = "
            SELECT
                SUM(a.menge) as wareneinsatz
            FROM
                lagerbewegungen as a INNER JOIN buchungen as b
                    ON a.buchungen = b.ID
            WHERE
                a.artikel = " . $_GET['id'] . "
            AND
                a.menge < 0
            AND
                b.eintragsdatum > NOW() - INTERVAL 360 DAY  
        ;";

        /**
         * QUERY ausführen.
         */
        $result = mysql_query( $sql ) or die( mysql_errno() . ': ' . mysql_error
            () . '<hr />' . $sql );

        /**
         * Speichere das Ergebnis der QUERY in einem assoziativen Array.
         */
        $row = mysql_fetch_assoc( $result );

        /**
         * Der Wareneinsatz der letzten 360 Tage des Artikels mit der ID <var>$_GET['id']</var>.
         */
        $wareneinsatz = abs( $row['wareneinsatz'] );

        /**
         * Berechnung der Umschlagshäufigkeit.
         */
        /**
         * QUERY: Hole das höchste und das niedrigste Datum des letzten Jahres der Lagerbewegungen des Artikels mit der ID <var>$_GET['id']</var>.
         */
        $sql = "
            SELECT
                MIN(b.eintragsdatum) AS minEintragsdatum,
                MAX(b.eintragsdatum) AS maxEintragsdatum
            FROM
                lagerbewegungen AS a INNER JOIN buchungen AS b
                    ON a.buchungen = b.ID
            WHERE
                artikel = " . $_GET['id'] . "
            AND
                b.eintragsdatum > NOW() - INTERVAL 360 DAY
        ;";

        /**
         * QUERY ausführen
         */
        $result = mysql_query( $sql ) or die( mysql_errno() . ': ' . mysql_error
            () . '<hr />' . $sql );

        /**
         * Speichere das Ergebnis der QUERY in einem assoziativen Array.
         */
        $row = mysql_fetch_assoc( $result );

        /**
         * Berechne den Zeitraum zwischen <var>$row['minEintragsdatum']</var> und <var>$row['maxEintragsdatum']</var> in Tagen.
         */
        $temp = explode( " ", $row['minEintragsdatum'] );
        $minEintragsdatum = strtotime( $temp[0] );

        $temp = explode( " ", $row['maxEintragsdatum'] );
        $maxEintragsdatum = strtotime( $temp[0] );

        $zeitraumEintragsdatum = ( ( ( ( $maxEintragsdatum - $minEintragsdatum ) /
            60 ) / 60 ) / 24 ) + 1;

        /**
         * Rechne den Wareneinsatz auf das Jahr hoch.
         */
        $wareneinsatz *= ( 360 / $zeitraumEintragsdatum );

        /**
         * Berechne die Umschlagshäufigkeit.
         */
        @$umschlagshaeufigkeit = $wareneinsatz / $durschnittlicherBestand;

        /**
         * Berechne die durchschnittliche Lagerdauer.
         */
        @$durchschnittlicheLagerdauer = 360 / $umschlagshaeufigkeit;

        /**
         * Berechne den Lagerzinssatz.
         */
        $lagerzinssatz = $artikelArtikeldaten['jahreszinssatz'] * $umschlagshaeufigkeit /
            360;

        /**
         * Berechne die Lagerzinskosten.
         */
        $lagerzinskosten = $lagerzinssatz * $durschnittlicherBestand / 100;

        /**
         * Berechne den Meldebestand.
         */
        $meldebestand = $artikelArtikeldaten['mindestbestand'] * ( $wareneinsatz /
            360 );

        /**
         * Berechnung des verfügbaren Bestands.
         */
        $bestandsInfo = getArtikelbestandsInfo( $artikelArtikeldaten['id'] );
        $verfuegbarerBestand = $bestandsInfo['verfuegbareMenge'];

        /**
         * Übergabe Artikeldaten an Smarty.
         */
        $GLOBALS["ui"]->assign( "artikelArtikeldaten", $artikelArtikeldaten );

        /**
         * Übergabe Lagerbewegungsdaten an Smarty.
         */
        $GLOBALS["ui"]->assign( "lagerbewegungenArtikel", $lagerbewegungenArtikel );

        /**
         * Übergabe des durchschnittlichen Bestands an Smarty.
         */
        $GLOBALS["ui"]->assign( "durschnittlicherBestand", number_format( $durschnittlicherBestand,
            2, ",", "." ) );

        /**
         * Übergabe des Wareneinsatz an Smarty.
         */
        $GLOBALS["ui"]->assign( "wareneinsatz", $wareneinsatz );

        /**
         * Übergabe der durchschnittlichen Lagerdauer an Smarty.
         */
        $GLOBALS["ui"]->assign( "durchschnittlicheLagerdauer", number_format( $durchschnittlicheLagerdauer,
            2, ",", "." ) );

        /**
         * Übergabe der Umschlagshäufigkeit an Smarty.
         */
        $GLOBALS["ui"]->assign( "umschlagshaeufigkeit", number_format( $umschlagshaeufigkeit,
            2, ",", "." ) );

        /**
         * Übergabe des Lagerzinssatz an Smarty.
         */
        $GLOBALS["ui"]->assign( "lagerzinssatz", number_format( $lagerzinssatz,
            2, ",", "." ) );

        /**
         * Übergabe der Lagerzinskosten an Smarty.
         */
        $GLOBALS["ui"]->assign( "lagerzinskosten", number_format( $lagerzinskosten,
            2, ",", "." ) );

        /**
         * Übergabe des Meldebestand an Smarty.
         */
        $GLOBALS["ui"]->assign( "meldebestand", $meldebestand );

        /**
         * Übergabe des verfügbaren Bestands.
         */
        $GLOBALS["ui"]->assign( 'verfuegbarerBestand', $verfuegbarerBestand );

    }
    /**
     * Auswahl des Smarty-Templates.
     */
    switch ( $_REQUEST['action'] )
    {
        case 'uebersicht':
            $GLOBALS["ui"]->display( "lagerwirtschaft/uebersicht.tpl" );
            break;

        case 'buchung':
            $GLOBALS["ui"]->display( "lagerwirtschaft/buchung.tpl" );
            break;

        case 'artikel':
            $GLOBALS["ui"]->display( "lagerwirtschaft/artikel.tpl" );
            break;

        default:
            unset( $_SESSION[F_NAME] );
            $GLOBALS["ui"]->display( "lagerwirtschaft/uebersicht.tpl" );
    }
?>