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 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.artikelWHERE((a.kurzbezeichnung LIKE '%$sucheArtikelname%')OR(a.ID = '$sucheArtikelname'))ANDa.language='" . $_SESSION["language"] . "'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'] . "ANDa.language='" . $_SESSION["language"] . "'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'] . "ANDa.menge < 0ANDb.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'] . "ANDb.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" );}?>