Zur aktuellen Revision | 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 INTObuchungen(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 INTOlagerbewegungen(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 = "SELECTSQL_CALC_FOUND_ROWSa.ID as id,a.kurzbezeichnung,a.durchschnittliche_lieferzeit,a.jahreszinssatz,a.mindestbestand,SUM(b.menge) AS bestandFROMartikel AS a LEFT JOIN lagerbewegungen as bON a.ID = b.artikelWHEREa.kurzbezeichnung LIKE '%$sucheArtikelname%'OR a.ID = '$sucheArtikelname'GROUP BYa.ID$havingBedingungORDER BYa.kurzbezeichnung $sucheSortierungLIMIT".$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 = "SELECTSUM(menge) as bestandFROMlagerbewegungenWHEREartikel = ".$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 = "SELECTID as id,Name as nameFROMFirmaWHEREgesperrt = '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 = "UPDATEartikelSETmindestbestand = '".$_POST['mindestbestand']."',durchschnittliche_lieferzeit = '".$_POST['durchschnittlicheLieferzeit']."',jahreszinssatz = '".$_POST['jahreszinssatz']."'WHEREID = ".$_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 = "SELECTa.ID AS id,a.kurzbezeichnung AS artikelbezeichnung,a.durchschnittliche_lieferzeit AS durchschnittlicheLieferzeit,a.jahreszinssatz,a.mindestbestand,SUM(b.menge) AS bestandFROMartikel AS a LEFT JOIN lagerbewegungen AS bON a.ID = b.artikelWHEREa.ID = ".$_GET['id']."GROUP BYid;";/*** 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 = "SELECTb.eintragsdatum AS datum,a.mengeFROMlagerbewegungen AS a INNER JOIN buchungen AS bON a.buchungen = b.IDWHEREa.artikel = ".$_GET['id']."ORDER BYdatum 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 = "SELECTSUM(a.menge) as wareneinsatzFROMlagerbewegungen as a INNER JOIN buchungen as bON a.buchungen = b.IDWHEREa.artikel = ".$_GET['id']."AND a.menge < 0AND 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 = "SELECTMIN(b.eintragsdatum) AS minEintragsdatum,MAX(b.eintragsdatum) AS maxEintragsdatumFROMlagerbewegungen AS a INNER JOIN buchungen AS bON a.buchungen = b.IDWHEREartikel = ".$_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" );}?>