diff --git a/www/pages/ajax.php b/www/pages/ajax.php index 33234a83..258b8527 100644 --- a/www/pages/ajax.php +++ b/www/pages/ajax.php @@ -1538,7 +1538,7 @@ select a.kundennummer, (SELECT name FROM adresse a2 WHERE a2.kundennummer = a.ku } break; - case 'alleartikelkategorien': + case "alleartikelkategorien": $anz = $this->app->DB->Select("SELECT count(*) FROM artikelkategorien"); $subwhere = $this->app->erp->ProjektRechte('ar.projekt'); if($anz) @@ -1553,7 +1553,7 @@ select a.kundennummer, (SELECT name FROM adresse a2 WHERE a2.kundennummer = a.ku $newarr[] = $arr[$i]['typ']; } break; - case 'xcs_tables': + case "xcs_tables": $felder = array('name'); $subwhere = $this->AjaxFilterWhere($termorig,$felder); @@ -2038,14 +2038,14 @@ select a.kundennummer, (SELECT name FROM adresse a2 WHERE a2.kundennummer = a.ku $newarr[] = $arr[$i]['name']; break; - case 'rechnung': + case "rechnung": $arr = $this->app->DB->SelectArr("SELECT CONCAT(belegnr,' ',name,' ',DATE_FORMAT(datum,'%d.%m.%Y')) as name FROM rechnung WHERE belegnr!='0' AND belegnr!='' AND (name LIKE '%$term%' OR belegnr LIKE '%$term%' OR DATE_FORMAT(datum,'%Y-%m-%d') LIKE '%$term%') ORDER by belegnr DESC LIMIT 20"); $carr = !empty($arr)?count($arr):0; for($i = 0; $i < $carr; $i++) $newarr[] = $arr[$i]['name']; break; - case 'retoure': + case "retoure": $arr = $this->app->DB->SelectArr("SELECT CONCAT(belegnr,' ',name,' ',DATE_FORMAT(datum,'%d.%m.%Y')) as name FROM retoure WHERE belegnr!='0' AND belegnr!='' AND (name LIKE '%$term%' OR belegnr LIKE '%$term%' OR DATE_FORMAT(datum,'%Y-%m-%d') LIKE '%$term%') ORDER by belegnr DESC LIMIT 20"); $carr = !empty($arr)?count($arr):0; @@ -2080,8 +2080,15 @@ select a.kundennummer, (SELECT name FROM adresse a2 WHERE a2.kundennummer = a.ku break; - case 'lagerplatz': - case 'lagerplatzstandardlager': + case "lagerplatz": + case "lagerplatzstandardlager": + + $lager = $this->app->Secure->GetGET('lager'); + $lagerwhere = ""; + if (!empty($lager)) { + $lagerwhere = "AND lager = '".$lager."'"; + } + $onlyStdLager = $filtername === 'lagerplatzstandardlager'; $stdLager = 0; if($rmodule === 'produktionszentrum' || $rmodule==='produktion') { @@ -2100,7 +2107,7 @@ select a.kundennummer, (SELECT name FROM adresse a2 WHERE a2.kundennummer = a.ku FROM lager_platz AS lp LEFT JOIN lager AS l ON l.id=lp.lager WHERE lp.geloescht=0 AND ('$stdLager' = '0' OR l.id = '$stdLager') - AND lp.kurzbezeichnung LIKE '%$term%' ". + AND lp.kurzbezeichnung LIKE '%$term%' ".$lagerwhere. $this->app->erp->ProjektRechte('l.projekt').' ORDER BY lp.kurzbezeichnung'; $arr = $this->app->DB->SelectArr($sql); @@ -2131,7 +2138,7 @@ select a.kundennummer, (SELECT name FROM adresse a2 WHERE a2.kundennummer = a.ku $newarr[] = $arr[$i]['kurzbezeichnung']; } break; - case 'artikelfremdnummern': + case "artikelfremdnummern": $article = explode(' ', $this->app->Secure->GetGET('artikel')); $article = reset($article); $articleId = (int)$this->app->Secure->GetGET('artikelid'); @@ -2193,7 +2200,7 @@ select a.kundennummer, (SELECT name FROM adresse a2 WHERE a2.kundennummer = a.ku for($i = 0; $i < $carr; $i++) $newarr[] = $arr[$i]['kurzbezeichnung']; break; - case 'lagerplatzartikel': + case "lagerplatzartikel": $artikel = (int)$this->app->Secure->GetGET('artikel'); $pos = (int)$this->app->Secure->GetGET('pos'); $doctype = strtolower($this->app->Secure->GetGET('doctype')); @@ -2259,7 +2266,7 @@ select a.kundennummer, (SELECT name FROM adresse a2 WHERE a2.kundennummer = a.ku $newarr[] = $arr[$i]['bezeichnung']; break; - case 'lager_produktion': + case "lager_produktion": $arr = $this->app->DB->SelectArr("SELECT l.bezeichnung FROM lager l JOIN lager_platz lp ON l.id = lp.lager WHERE l.geloescht=0 AND l.bezeichnung LIKE '%$term%' ".$this->app->erp->ProjektRechte("l.projekt")." AND lp.allowproduction = 1 ORDER BY 1"); if(empty($arr)){ @@ -2476,8 +2483,8 @@ select a.kundennummer, (SELECT name FROM adresse a2 WHERE a2.kundennummer = a.ku break; // Suche nach einzelner Artikelnummer - case 'artikelnummer': - case 'artikelnummerseriennummer': + case "artikelnummer": + case "artikelnummerseriennummer": $isSeriennummer = $filtername === 'artikelnummerseriennummer'; $tmp_where = ''; if($isSeriennummer) { @@ -3464,7 +3471,7 @@ select a.kundennummer, (SELECT name FROM adresse a2 WHERE a2.kundennummer = a.ku $newarr[] = $arr[$i]['name']; } break; - case 'kundepos': + case "kundepos": $aktprojekt = $this->app->User->GetParameter('pos_list_projekt'); $felder = array("CONCAT(ifnull(a.kundennummer,''),' ',a.name,if(a.projekt > 0,CONCAT(' (',p.abkuerzung,')'),''),if(ifnull(a.freifeld1,'')!='',CONCAT(' (',a.freifeld1,')'),''))"); @@ -3479,7 +3486,7 @@ select a.kundennummer, (SELECT name FROM adresse a2 WHERE a2.kundennummer = a.ku $newarr[] = $arr[$i]['name']; } break; - case 'kunde': + case "kunde": $felder = array("CONCAT(a.kundennummer, ' ',a.name,if(ifnull(a.freifeld1,'')!='',CONCAT(' (',ifnull(a.freifeld1,''),')'),''),' ',a.plz,' ',a.ort)"); if($term2 === $term){ @@ -3878,7 +3885,7 @@ select a.kundennummer, (SELECT name FROM adresse a2 WHERE a2.kundennummer = a.ku } break; - case 'steuersatz': + case "steuersatz": $newarr[] = $this->app->erp->Firmendaten('steuersatz_normal').' normal'; $newarr[] = $this->app->erp->Firmendaten('steuersatz_ermaessigt').' ermaessigt'; $newarr = array_merge($newarr, $this->app->DB->SelectFirstCols( @@ -3979,7 +3986,7 @@ select a.kundennummer, (SELECT name FROM adresse a2 WHERE a2.kundennummer = a.ku $newarr[] = $arr[$i]['gegenkonto']; } break; - case 'gegenkonto': + case "gegenkonto": $kontorahmenArr = $this->app->DB->SelectPairs( "SELECT concat(kr.sachkonto, ' ',kr.beschriftung) as a, kr.sachkonto @@ -4068,7 +4075,7 @@ select a.kundennummer, (SELECT name FROM adresse a2 WHERE a2.kundennummer = a.ku break; break; - case 'versand_klaergrund': + case "versand_klaergrund": $arr = $this->app->DB->SelectArr("SELECT DISTINCT problemcase FROM delivery_problemcase WHERE problemcase LIKE '%$term%' ORDER BY sort, problemcase"); $carr = !empty($arr)?count($arr):0; @@ -4076,7 +4083,7 @@ select a.kundennummer, (SELECT name FROM adresse a2 WHERE a2.kundennummer = a.ku $newarr[] = $arr[$i]['problemcase']; } break; - case 'label_type': + case "label_type": $felder = array('type'); $subwhere = $this->AjaxFilterWhere($termorig,$felder); $arr = $this->app->DB->SelectArr("SELECT DISTINCT lt.type FROM label_type AS lt WHERE ($subwhere) ORDER BY type LIMIT 20"); @@ -4085,7 +4092,7 @@ select a.kundennummer, (SELECT name FROM adresse a2 WHERE a2.kundennummer = a.ku $newarr[] = $arr[$i]['type']; } break; - case 'versandartentype': + case "versandartentype": $felder = array('va.type'); $subwhere = $this->AjaxFilterWhere($termorig,$felder); $arr = $this->app->DB->SelectArr( @@ -4100,7 +4107,7 @@ select a.kundennummer, (SELECT name FROM adresse a2 WHERE a2.kundennummer = a.ku $newarr[] = $arr[$i]['type']; } break; - case 'zahlungsweisetype': + case "zahlungsweisetype": $felder = array('va.type'); $subwhere = $this->AjaxFilterWhere($termorig,$felder); $arr = $this->app->DB->SelectArr( @@ -4115,7 +4122,7 @@ select a.kundennummer, (SELECT name FROM adresse a2 WHERE a2.kundennummer = a.ku $newarr[] = $arr[$i]['type']; } break; - case 'ticketcategory': + case "ticketcategory": $newarr = $this->app->DB->SelectFirstCols( sprintf( "SELECT CONCAT(`id`,' ',`name`) FROM `ticket_category` WHERE (`name` LIKE '%%%s%%' OR `name` LIKE '%%%s%%') %s", @@ -4123,7 +4130,7 @@ select a.kundennummer, (SELECT name FROM adresse a2 WHERE a2.kundennummer = a.ku ) ); break; - case 'shopimport_auftraege': + case "shopimport_auftraege": $shopId = $this->app->Secure->GetGET('id'); $newarr = $this->app->DB->SelectFirstCols( sprintf( diff --git a/www/pages/lager.php b/www/pages/lager.php index 4b29ee7d..406f70f8 100644 --- a/www/pages/lager.php +++ b/www/pages/lager.php @@ -1,4761 +1,4762 @@ -= CURDATE( ) - ) - GROUP BY artikel) ".$tab1." - INNER JOIN einkaufspreise ".$tab2." ON $tab1.id = $tab2.id - ) - "; - } - - /** - * @param string $typ - * @param bool $live - * - * @return string - */ - static function Waehrung($typ = 'letzterek', $live = true) - { - if(!$live) - { - switch($typ) - { - case 'letzterek': - return "if(ifnull(lw.preis_letzterek,0) <> 0,if(lw.waehrungletzt<>'',lw.waehrungletzt,'EUR'),if(ifnull(ek.waehrung,'')<>'',ek.waehrung,'EUR'))"; - break; - case 'letzerekarchiv': - return "if(ifnull(lw.preis_letzterek,0) <> 0,if(lw.waehrungletzt<>'',lw.waehrungletzt,'EUR'),'EUR')"; - break; - case 'inventurwertarchiv': - return "if(ifnull(lw.inventurwert,0) <> 0,'EUR', - - if(ifnull(lw.preis_letzterek,0) <> 0, - if(lw.waehrungletzt <> '',lw.waehrungletzt,'EUR'), - 'EUR' - ) - )"; - break; - case 'inventurwert': - return "if(ifnull(lw.inventurwert,0) <> 0,'EUR', - if(ifnull(art.inventurekaktiv,0) <> 0 - , 'EUR', - if(ifnull(lw.preis_letzterek,0) <> 0, - if(lw.waehrungletzt <> '',lw.waehrungletzt,'EUR'), - if(ifnull(ek.waehrung,'')<>'',ek.waehrung,'EUR') - ) - ) - )"; - break; - case 'kalkulierterekarchiv': - return " - if( - ifnull(lw.preis_kalkulierterek,0) <> 0 - , - if(lw.waehrungkalk<>'',lw.waehrungkalk,'EUR') - , - if(ifnull(lw.preis_letzterek,0) <> 0, - if(lw.waehrungletzt<>'',lw.waehrungletzt,'EUR') - ,'EUR' - ) - )"; - break; - default: - return " - if(ifnull(lw.preis_kalkulierterek,0) <> 0,if(lw.waehrungkalk<>'',lw.waehrungkalk,'EUR'), - if(ifnull(art.verwendeberechneterek,0) <> 0, if(ifnull(art.berechneterekwaehrung,'')<>'',art.berechneterekwaehrung,'EUR') - , - if(ifnull(lw.preis_letzterek,0) <> 0,if(lw.waehrungletzt<>'',lw.waehrungletzt,'EUR'),if(ifnull(ek.waehrung,'')<>'',ek.waehrung,'EUR')) - ) - )"; - break; - } - }else{ - switch($typ) - { - case 'letzterek': - case 'letzterekarchiv': - return "if(ifnull(ek.waehrung,'')<>'',ek.waehrung,'EUR')"; - break; - case 'inventurwert': - case 'inventurwertarchiv': - return "if(ifnull(art.inventurekaktiv,0) <> 0,'EUR',if(ifnull(ek.waehrung,'')<>'',ek.waehrung,'EUR'))"; - break; - default: - return " - if(ifnull(art.verwendeberechneterek,0) <> 0,if(ifnull(art.berechneterekwaehrung,'')<>'',art.berechneterekwaehrung,'EUR') - , - if(ifnull(ek.waehrung,'')<>'',ek.waehrung,'EUR') - ) - "; - break; - } - } - } - - /** - * @param string $typ - * @param bool $live - * - * @return string - */ - public static function EinzelPreis($typ = 'letzterek', $live = true) - { - if(!$live) - { - switch($typ) - { - case 'letzterekarchiv': - return "if(ifnull(lw.preis_letzterek,0) <> 0,lw.preis_letzterek,0)"; - break; - case 'letzterek': - return "if(ifnull(lw.preis_letzterek,0) <> 0,lw.preis_letzterek,ifnull(ek.preis,0))"; - break; - case 'inventurwertarchiv': - return "if(ifnull(lw.inventurwert,0) <> 0,lw.inventurwert, - ifnull(lw.preis_letzterek,0) - )"; - break; - case 'inventurwert': - return "if(ifnull(lw.inventurwert,0) <> 0,lw.inventurwert, - if(ifnull(art.inventurekaktiv,0) <> 0 - , art.inventurek, - if(ifnull(lw.preis_letzterek,0) <> 0,lw.preis_letzterek,ifnull(ek.preis,0)) - ) - )"; - break; - case 'kalkulierterekarchiv': - return " - if( - ifnull(lw.preis_kalkulierterek,0) <> 0, - lw.preis_kalkulierterek, - ifnull(lw.preis_letzterek,0) - )"; - break; - default: - return " - if(ifnull(lw.preis_kalkulierterek,0) <> 0,lw.preis_kalkulierterek, - if(ifnull(art.verwendeberechneterek,0) <> 0,art.berechneterek - ,if(ifnull(lw.preis_letzterek,0) <> 0, - lw.preis_letzterek, - ifnull(ek.preis,0) - ) - ) - )"; - break; - } - }else{ - switch($typ) - { - case 'letzterek': - case 'letzterekarchiv': - return "ifnull(ek.preis,0)"; - break; - case 'inventurwertarchiv': - case 'inventurwert': - return "if(ifnull(art.inventurekaktiv,0) <> 0,art.inventurek,ifnull(ek.preis,0))"; - break; - default: - return " - if(ifnull(art.verwendeberechneterek,0) <> 0,art.berechneterek - , - ifnull(ek.preis,0) - ) - "; - break; - } - } - } - - /** - * @param string $typ - * @param bool $live - * - * @return string - */ - public static function KursJoin($typ, $live = true) - { - return " LEFT JOIN ( - SELECT max(kurs) as kurs, waehrung_von, waehrung_nach FROM waehrung_umrechnung WHERE (isnull(gueltig_bis) OR gueltig_bis >= now() OR gueltig_bis = '0000-00-00') AND (waehrung_von LIKE 'EUR' OR waehrung_nach LIKE 'EUR') GROUP BY waehrung_von,waehrung_nach - ) wt ON wt.waehrung_nach <> 'EUR' AND wt.waehrung_nach = ".self::Waehrung($typ, $live)." OR wt.waehrung_von <> 'EUR' AND wt.waehrung_von = ".self::Waehrung($typ, $live)." "; - - } - - /** - * @param Application $app - * @param string $typ - * @param null|bool $live - * - * @return string - */ - public static function PreisUmrechnung($app, $typ, $live = null) - { - $kursusd = $app->erp->GetWaehrungUmrechnungskurs('EUR','USD'); - $kurschf = $app->erp->GetWaehrungUmrechnungskurs('EUR','CHF'); - - if(!$live) - { - return ' - if( - ifnull(lw.kursletzt,0)<> 0 - , - 1 / lw.kursletzt - , - if( - ifnull(wt.kurs,0) <> 0 - , - if( - wt.waehrung_nach = '.self::Waehrung($typ, $live).', - (1/wt.kurs), - wt.kurs - ) - , - if('.self::Waehrung($typ, $live).' = \'USD\', - 1.0 / '.$kursusd.', - if('.self::Waehrung($typ, $live).' = \'CHF\', - 1.0 / '.$kurschf.', - 1) - ) - ) - ) - * - '.self::EinzelPreis($typ, $live); - - } - return ' - - if( - ifnull(wt.kurs,0) <> 0 - , - if( - wt.waehrung_nach = '.self::Waehrung($typ, $live).', - (1/wt.kurs), - wt.kurs - ) - , - if('.self::Waehrung($typ, $live).' = \'USD\', - 1.0 / '.$kursusd.', - if('.self::Waehrung($typ, $live).' = \'CHF\', - 1.0 / '.$kurschf.', - 1) - ) - ) - * - '.self::EinzelPreis($typ, $live); - - - /* - - if(!$live) - {//aus Cronjob - if($typ == 'letzterek') - { - return ' - if( - ifnull(lw.kursletzt,0)<> 0 - , - 1 / lw.kursletzt - , - if( - ifnull(wt.kurs,0) <> 0 - , - if( - wt.waehrung_nach = lw.waehrungletzt, - (1/wt.kurs), - wt.kurs - ) - , - if(lw.waehrungletzt = \'USD\', - 1.0 / '.$kursusd.', - if(lw.waehrungletzt = \'CHF\', - 1.0 / '.$kurschf.', - 1) - ) - ) - ) - * ifnull(lw.preis_letzterek,0) - '; - }else{ - return ' - if( - if(ifnull(lw.preis_kalkulierterek,0) <> 0,ifnull(lw.kurskalk,0),ifnull(lw.kursletzt,0))<> 0 - , - 1 / if(ifnull(lw.preis_kalkulierterek,0) <> 0,ifnull(lw.kurskalk,0),ifnull(lw.kursletzt,0)) - , - if( - ifnull(wt.kurs,0) <> 0 - , - if( - wt.waehrung_nach = if(ifnull(lw.preis_kalkulierterek,0) <> 0,lw.kurskalk,lw.kursletzt), - (1/wt.kurs), - wt.kurs - ) - , - if(if(ifnull(lw.preis_kalkulierterek,0) <> 0,lw.kurskalk,lw.kursletzt) = \'USD\', - 1.0 / '.$kursusd.', - if(if(ifnull(lw.preis_kalkulierterek,0) <> 0,lw.kurskalk,lw.kursletzt) = \'CHF\', - 1.0 / '.$kurschf.', - 1) - ) - ) - ) - * if(ifnull(lw.preis_kalkulierterek,0) <> 0,lw.preis_kalkulierterek,ifnull(lw.preis_letzterek,0)) - '; - } - }else{ - if($typ == 'letzterek') - { - return ' - if( - ifnull(wt.kurs,0) <> 0 - , - if( - wt.waehrung_nach = ek.waehrung, - (1/wt.kurs), - wt.kurs - ) - , - if(ifnull(ek.waehrung,\'\') = \'USD\', - 1.0 / '.$kursusd.', - if(ifnull(ek.waehrung,\'\') = \'CHF\', - 1.0 / '.$kurschf.', - 1) - ) - ) - - * ifnull(ek.preis,0) - '; - }else{ - return ' - if( - ifnull(wt.kurs,0) <> 0 - , - if( - wt.waehrung_nach = if(ifnull(art.berechneterek,0) <> 0,art.berechneterekwaehrung,ifnull(ek.waehrung,\'\')), - (1/wt.kurs), - wt.kurs - ) - , - if(if(ifnull(art.berechneterek,0) <> 0,art.berechneterekwaehrung,ifnull(ek.waehrung,\'\')) = \'USD\', - 1.0 / '.$kursusd.', - if(if(ifnull(art.berechneterek,0) <> 0,art.berechneterekwaehrung,ifnull(ek.waehrung,\'\')) = \'CHF\', - 1.0 / '.$kurschf.', - 1) - ) - ) - - * if(ifnull(art.berechneterek,0) <> 0,art.berechneterek,ifnull(ek.preis,0)) - '; - } - - } - */ - } - - /** - * @param Application $app - * @param string $name - * @param array $erlaubtevars - * - * @return array - */ - public static function TableSearch($app, $name, $erlaubtevars) - { - $extended_mysql55 = ",'de_DE'"; - switch($name) - { - case 'lagerbestandsberechnung': - $allowed['lager'] = array('wert'); - // headings - $heading = array('Artikel-Nr.', 'Bezeichnung','Projekt', 'Lager','Menge','Letzter Preis', 'Gesamt','Inventurwert','Inv. Gesamt' ,'Menü'); - $width = array('10%', '50%','5%', '20%', '10%', '10%','10%', '10%', '1%'); - $findcols = array('a.nummer', 'a.name_de', 'p.abkuerzung',"CONCAT(la.bezeichnung,' / ',lp.kurzbezeichnung)", 'l.menge', "IFNULL(k.minpreis,0)", "IFNULL(k.minpreis,0)*l.menge",'IFNULL(a.inventurek,0)','IFNULL(a.inventurek,0)*l.menge', 'l.id'); - $searchsql = array('a.nummer', 'a.name_de','p.abkuerzung','la.bezeichnung','lp.kurzbezeichnung'); - $menu = "
" . "" . "Conf->WFconf['defaulttheme']}/images/forward.svg\" border=\"0\">" . "
"; - $sumcol = array(7,9); - $alignright = array(5,6,7,8,9); - // SQL statement - //$sql = "SELECT SQL_CALC_FOUND_ROWS l.id, a.nummer, a.name_de, CONCAT(la.bezeichnung,' / ',lp.kurzbezeichnung) , ".$this->app->erp->FormatMenge('l.menge').",FORMAT(IFNULL((SELECT e.preis FROM einkaufspreise e WHERE e.geloescht!=1 AND (e.gueltig_bis='0000-00-00' OR e.gueltig_bis <=NOW()) AND e.artikel=l.artikel ORDER by e.id DESC LIMIT 1),0),2{$extended_mysql55}) as preis, FORMAT(IFNULL((SELECT e.preis FROM einkaufspreise e WHERE e.geloescht!=1 AND (e.gueltig_bis='0000-00-00' OR e.gueltig_bis <=NOW()) AND e.artikel=l.artikel ORDER by e.id DESC LIMIT 1),0)*l.menge,2{$extended_mysql55}) as wert, a.id FROM lager_platz_inhalt l LEFT JOIN artikel a ON a.id=l.artikel LEFT JOIN lager_platz lp ON lp.id=l.lager_platz LEFT JOIN lager la ON la.id=lp.lager"; - - $sql = "SELECT SQL_CALC_FOUND_ROWS l.id, a.nummer, a.name_de, p.abkuerzung, CONCAT(la.bezeichnung,' / ',lp.kurzbezeichnung) ,".$app->erp->FormatMenge('l.menge').", - FORMAT(IFNULL(k.minpreis,0),2{$extended_mysql55}) as preis, - FORMAT(IFNULL(k.minpreis,0)*l.menge,2{$extended_mysql55}) as wert,FORMAT(IFNULL(a.inventurek,0),2{$extended_mysql55}) as inv,FORMAT(IFNULL(a.inventurek,0)*l.menge,2{$extended_mysql55}) as invges, a.id - FROM lager_platz_inhalt l LEFT JOIN artikel a ON a.id=l.artikel - LEFT JOIN (SELECT max( e.id ) AS maxid, artikel - FROM einkaufspreise e - WHERE e.geloescht !=1 - AND ( - e.gueltig_bis = '0000-00-00' - OR e.gueltig_bis >= NOW( ) - ) - GROUP BY artikel) k1 ON k1.artikel = a.id - LEFT JOIN (SELECT id, preis as minpreis FROM einkaufspreise ) k ON k1.maxid = k.id - LEFT JOIN projekt p ON p.id=a.projekt - LEFT JOIN lager_platz lp ON lp.id=l.lager_platz - LEFT JOIN lager la ON la.id=lp.lager"; - - - $where = " a.id > 0 AND a.geloescht!=1 "; - - //$groupby=" GROUP by z.adresse_abrechnung "; - - // gesamt anzahl - - $count = "SELECT COUNT(l.id) FROM lager_platz_inhalt l LEFT JOIN artikel a ON a.id=l.artikel WHERE a.id > 0 AND a.geloescht!=1"; - - break; - case 'lagerplatztabelle': - $allowed['lager'] = array('platz'); - - // headings - - $heading = array('Bezeichnung', 'Nachschublager', 'Verbrauchslager','POS Lager', 'kein Auto-Versand','Volumen','Regalart','Kategorie','Kommissions- / Produktionslager','Sortierung','Menü'); - $width = array('15%', '10%', '10%','5%','5%','10%','10%','5%','10%','8%','1%'); - $findcols = array('l.kurzbezeichnung', "IF(l.autolagersperre,'kein Versand aus diesem Lager','')", "IF(l.verbrauchslager,'ja','')","IF(l.poslager,'ja','')","IF(l.sperrlager,'ja','')",'breite','regalart','abckategorie','a.name','l.rownumber','id'); - $searchsql = array('l.kurzbezeichnung','regalart','abckategorie','a.name'); - $defaultorder = 4; - $defaultorderdesc = 1; - $alignright = [10]; - $menu = "
Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\">" . " Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\">" . " Conf->WFconf['defaulttheme']}/images/labelprinter.png\" border=\"0\">
"; - - // SQL statement - $sql = "SELECT SQL_CALC_FOUND_ROWS l.id, - l.kurzbezeichnung, if(l.autolagersperre,'kein Versand aus diesem Lager','') as autolagersperre, - if(l.verbrauchslager,'ja','') as verbrauchslager, - if(l.poslager,'ja','') as poslager, - if(l.sperrlager,'ja','') as sperrlager, - if(l.laenge!=0.0,CONCAT(l.laenge,'/',l.breite,'/',l.hoehe),'-') as volumen, - l.regalart,l.abckategorie, a.name, l.rownumber, - l.id as menu FROM lager_platz l LEFT JOIN adresse a ON a.id=l.adresse "; - - $id = $app->Secure->GetGET('id'); - - // fester filter - $where = " l.geloescht=0 AND l.id!=0 AND l.lager='$id' "; - $count = "SELECT COUNT(id) FROM lager_platz WHERE geloescht=0 AND lager='$id' "; - break; - case 'lagerletztebewegungen': - $allowed['lager'] = array('letztebewegungen'); - - // headings - - // headings - - $heading = array('Datum', 'Lager', 'Menge', 'Nummer', 'Artikel', 'Richtung', 'Referenz', 'Bearbeiter', 'Projekt', 'Menü'); - $width = array('1%', '5%', '5%', '5%', '5%', '5%', '40%', '20%', '5%', '1%'); - $findcols = array('zeit', 'lager', 'menge', 'nummer', 'name_de', 'Richtung', 'referenz', 'bearbeiter', 'projekt', 'id'); - $searchsql = array('lpi.referenz', 'lpi.bearbeiter', 'p.abkuerzung', 'DATE_FORMAT(lpi.zeit,\'%d.%m.%Y\')', 'lp.kurzbezeichnung', 'a.name_de', 'a.nummer'); - $defaultorder = 10; //Optional wenn andere Reihenfolge gewuenscht - $alignright = array(3); - $defaultorderdesc = 1; - $menu = "-"; - - $sql = "SELECT SQL_CALC_FOUND_ROWS lpi.id, - DATE_FORMAT(lpi.zeit,'%d.%m.%Y') as datum, lp.kurzbezeichnung as lager, trim(lpi.menge)+0 as menge, - a.nummer, a.name_de, if(lpi.eingang,'Eingang','Ausgang') as Richtung, substring(lpi.referenz,1,60) as referenz, lpi.bearbeiter as bearbeiter, p.abkuerzung as projekt, - lpi.id FROM lager_bewegung lpi LEFT JOIN lager_platz as lp ON lpi.lager_platz=lp.id LEFT JOIN projekt p ON lpi.projekt=p.id LEFT JOIN artikel a ON a.id=lpi.artikel"; - - - $count = "SELECT COUNT(lpi.id) FROM lager_bewegung lpi LEFT JOIN lager_platz as lp ON lpi.lager_platz=lp.id LEFT JOIN projekt p ON lpi.projekt=p.id "; - break; - case 'lagertabelle': - $allowed['lager'] = array('list'); - $defaultCountry = $app->erp->Firmendaten('land'); - if(empty($defaultCountry)) { - $defaultCountry = 'DE'; - } - // headings - $heading = array('Bezeichnung', 'Projekt','Kommissions- / Produktionslager','Land','Menü'); - $width = array('60%', '10%','20%','5%', '8%'); - $findcols = array('l.bezeichnung', 'p.abkuerzung','a.name',"IF(a.land IS NULL OR a.land = '', '$defaultCountry', a.land)", 'l.id'); - $searchsql = array('l.bezeichnung', 'p.abkuerzung','a.name',"IF(a.land IS NULL OR a.land = '', '$defaultCountry', a.land)",'p.name'); - $defaultorder = 4; - $defaultorderdesc = 1; - $menu = "
Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\">" . " Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\">" . " Conf->WFconf['defaulttheme']}/images/labelprinter.png\" border=\"0\">
"; - - // SQL statement - $sql = "SELECT SQL_CALC_FOUND_ROWS l.id, l.bezeichnung, p.abkuerzung, a.name, - IF(a.land IS NULL OR a.land = '', '$defaultCountry', a.land), - l.id as menu - FROM `lager` AS `l` - LEFT JOIN `projekt` AS `p` ON p.id=l.projekt - LEFT JOIN `adresse` AS `a` ON a.id=l.adresse "; - - // fester filter - $where = " l.geloescht=0 AND l.id!=0 ".$app->erp->ProjektRechte(); // heute mal wieder projekt rein - $count = "SELECT COUNT(l.id) - FROM `lager` AS `l` - LEFT JOIN `projekt` AS `p` ON p.id=l.projekt - WHERE l.geloescht=0 ".$app->erp->ProjektRechte(); // heute mal wieder projekt rein - break; - case "lagerdifferenzenlagerplatz": - $allowed['lager'] = array('differenzenlagerplatz'); - - // headings - $heading = array('Artikel-Nr.', 'Artikel', 'Projekt', 'Eingang', 'Ausgang', 'Berechnet', 'Bestand', 'Differenz','Lagerplatz', 'Menü'); - $width = array('10%', '40%', '10%', '10%', '5%', '5%', '5%', '5%', '5%', '10%'); - $findcols = array('a.nummer', 'a.name_de', 'p.abkuerzung', 'l.eingang', 'l.ausgang', 'l.berechnet', 'l.bestand', 'l.differenz', 'l.lager_platz', 'a.id'); - $searchsql = array('a.nummer', 'a.name_de', 'p.abkuerzung', 'l.eingang', 'l.ausgang', 'l.berechnet', 'l.bestand', 'l.differenz', 'lp.kurzbezeichnung'); - $defaultorder = 6; - $defaultorderdesc = 1; - $alignright = array(4,5,6,7,8); - $menu = "Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\">" . " Conf->WFconf['defaulttheme']}/images/forward.svg\" border=\"0\">"; - - /* - ifnull((SELECT SUM(l.menge) FROM lager_bewegung l WHERE l.artikel=a.id AND l.eingang=1),0)- - ifnull((SELECT SUM(l.menge) FROM lager_bewegung l WHERE l.artikel=a.id AND l.eingang=0),0)- - ifnull((SELECT SUM(l.menge) FROM lager_platz_inhalt l WHERE l.artikel=a.id),0) as differenz, - */ - - // SQL statement - $sql = " - SELECT - SQL_CALC_FOUND_ROWS a.id, - a.nummer, - a.name_de, - p.abkuerzung, - ".$app->erp->FormatMenge('l.eingang').", - ".$app->erp->FormatMenge('l.ausgang').", - ".$app->erp->FormatMenge('l.berechnet').", - ".$app->erp->FormatMenge('l.bestand').", - if(l.bestand > l.berechnet, CONCAT('',".$app->erp->FormatMenge('l.berechnet').",''), - ".$app->erp->FormatMenge('l.differenz')."), - lp.kurzbezeichnung, - CONCAT(a.id,'_',lp.id) - FROM - lager_differenzen l - LEFT JOIN artikel a ON a.id=l.artikel - LEFT JOIN lager_platz lp ON lp.id = l.lager_platz - LEFT JOIN projekt p ON a.projekt = p.id - "; - - // fester filter - $where = " l.user='" . $app->User->GetID() . "' AND l.lager_platz != 0 "; - $count = "SELECT COUNT(l.id) FROM lager_differenzen l WHERE l.user='" . $app->User->GetID() . "' AND l.lager_platz != 0 "; - break; - case 'lagerdifferenzen': - $allowed['lager'] = array('differenzen'); - - // headings - $heading = array('Artikel-Nr.', 'Artikel', 'Eingang', 'Ausgang', 'Berechnet', 'Bestand', 'Differenz', 'Menü'); - $width = array('10%', '40%', '10%', '10%', '10%', '10%', '10%', '10%'); - $findcols = array('a.nummer', 'a.name_de', 'l.eingang', 'l.ausgang', 'l.berechnet', 'l.bestand', 'l.differenz', 'a.id'); - $searchsql = array('kurzbezeichnung'); - $defaultorder = 6; - $defaultorderdesc = 1; - $alignright = array(3,4,5,6,7); - $menu = "Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\">" . " "; - - /* - ifnull((SELECT SUM(l.menge) FROM lager_bewegung l WHERE l.artikel=a.id AND l.eingang=1),0)- - ifnull((SELECT SUM(l.menge) FROM lager_bewegung l WHERE l.artikel=a.id AND l.eingang=0),0)- - ifnull((SELECT SUM(l.menge) FROM lager_platz_inhalt l WHERE l.artikel=a.id),0) as differenz, - */ - - // SQL statement - $sql = "SELECT SQL_CALC_FOUND_ROWS a.id, a.nummer, a.name_de, ".$app->erp->FormatMenge('l.eingang').",".$app->erp->FormatMenge('l.ausgang').", - ".$app->erp->FormatMenge('l.berechnet')." ,".$app->erp->FormatMenge('l.bestand')." , - if(l.bestand > l.berechnet, CONCAT('',".$app->erp->FormatMenge('l.differenz').",''),".$app->erp->FormatMenge('l.differenz')."), a.id FROM lager_differenzen l - LEFT JOIN artikel a ON a.id=l.artikel"; - - // fester filter - $where = " l.user='" . $app->User->GetID() . "' AND l.lager_platz = 0 "; - $count = "SELECT COUNT(l.id) FROM lager_differenzen l WHERE l.user='" . $app->User->GetID() . "' AND l.lager_platz = 0 "; - break; - case "lager_wert": - $allowed['lager'] = array('wert'); - $app->DB->Select("SELECT waehrungkalk,waehrungletzt,kurskalk,kursletzt FROM lagerwert LIMIT 1"); - if($app->DB->error()) - { - $app->erp->CheckColumn("waehrungkalk", "VARCHAR(16)", "lagerwert", "NOT NULL DEFAULT ''"); - $app->erp->CheckColumn("waehrungletzt", "VARCHAR(16)", "lagerwert", "NOT NULL DEFAULT ''"); - $app->erp->CheckColumn("kurskalk","DECIMAL(19,8)", "lagerwert", "NOT NULL DEFAULT '0'"); - $app->erp->CheckColumn("kursletzt","DECIMAL(19,8)", "lagerwert", "NOT NULL DEFAULT '0'"); - } - $preisart = (String)$app->YUI->TableSearchFilter($name, 1, 'preisart', $app->User->GetParameter("lager_wert_preisart")); - if($preisart == '') - { - $preisart = 'letzterek'; - } - - $artikel = (String)$app->YUI->TableSearchFilter($name, 2, 'artikel', $app->User->GetParameter("lager_wert_artikel")); - if($artikel) - { - $artikel = explode(' ', $artikel); - $artikel = $app->DB->Select("SELECT id FROM artikel WHERE nummer = '".reset($artikel)."' AND (geloescht = 0 OR isnull(geloescht)) LIMIT 1"); - } - - $datum = (String)$app->YUI->TableSearchFilter($name, 3, 'datum', $app->User->GetParameter("lager_wert_datum")); - if($datum) - { - $datum = $app->String->Convert($datum, '%1.%2.%3', '%3-%2-%1'); - }else{ - $datum = date('Y-m-d'); - } - $colmenge = 'lw.menge'; - if($datum == date('Y-m-d')) - { - $live = true; - $colmenge = 'lpi.menge'; - }else{ - $live = false; - $_datum = $app->DB->Select("SELECT max(datum) FROM lagerwert WHERE datum <= '$datum' AND '$datum' < curdate() "); - if($_datum) - { - $datum = $_datum; - } - } - - $lager = (String)$app->YUI->TableSearchFilter($name, 4, 'lager', $app->User->GetParameter("lager_lager")); - if($lager) - { - $lager = $app->DB->Select("SELECT id FROM lager WHERE bezeichnung = '$lager' AND (geloescht = 0 OR isnull(geloescht)) LIMIT 1"); - } - $lagerplatz = (String)$app->YUI->TableSearchFilter($name, 5, 'lagerplatz', $app->User->GetParameter("lager_lagerplatz")); - if($lagerplatz) - { - $lagerplatz = explode(' ', $lagerplatz); - $lagerplatz = $app->DB->Select("SELECT id FROM lager_platz WHERE kurzbezeichnung = '".reset($lagerplatz)."' AND (geloescht = 0 OR isnull(geloescht)) LIMIT 1"); - } - $gruppierenlager = (int)$app->YUI->TableSearchFilter($name, 6, 'gruppierenlager', $app->User->GetParameter("lager_wert_gruppierenlager"),0,'checkbox'); - $preiseineuro = (int)$app->YUI->TableSearchFilter($name, 7, 'preiseineuro', $app->User->GetParameter("lager_wert_preiseineuro"),0,'checkbox'); - if($preiseineuro) - { - $kursusd = $app->erp->GetWaehrungUmrechnungskurs('EUR','USD'); - $kurschf = $app->erp->GetWaehrungUmrechnungskurs('EUR','CHF'); - } - $artikelkategorie = (String)$app->YUI->TableSearchFilter($name, 8, 'artikelkategorie', $app->User->GetParameter("lager_wert_artikelkategorie")); - $artikelkategorie = explode(" ", $artikelkategorie); - $artikelkategorieid = $artikelkategorie[0]; - $artikelkategorieid = $app->DB->Select("SELECT id FROM artikelkategorien WHERE id = '$artikelkategorieid' LIMIT 1"); - if($artikelkategorieid != ''){ - $artikelkategorie = $artikelkategorieid; - }else{ - $artikelkategorie = 0; - } - //if($artikelkategorie)$artikelkategorie = $app->DB->Select("SELECT id FROM artikelkategorien WHERE bezeichnung LIKE '%$artikelkategorie%' LIMIT 1"); - $colgewicht ="if(lw.gewicht = 0,ifnull(art.gewicht,'0') ,lw.gewicht) *lw.menge"; - $colvolumen = "if(lw.volumen=0,ifnull(art.laenge,'0')*ifnull(art.breite,'0')*ifnull(art.hoehe,'0'),lw.volumen)*lw.menge"; - $colkurzbezeichnung = 'lp.kurzbezeichnung'; - $colbezeichnung = 'lag.bezeichnung'; - if($live) - { - $colgewicht = "ifnull(art.gewicht,'0') * ifnull(lpi.menge,0)"; - $colvolumen = "ifnull(art.laenge,'0')*ifnull(art.breite,'0')*ifnull(art.hoehe,'0')* ifnull(lpi.menge,0)"; - $colkurzbezeichnung = 'lpi.kurzbezeichnung'; - $colbezeichnung = 'lpi.bezeichnung'; - } - $heading = array('Datum','Artikel-Nr.','Artikel','Artikelkategorie','Lager','Lagerplatz','Menge','Gewicht','Volumen','EK-Preis','Gesamt','Währung','letzte Bewegung', ''); - $width = array('5%','10%','20%','10%','10%','10%','5%','5%','5%','5%','5%','5%','8%', '1%'); - $findcols = array('lw.datum','art.nummer','art.name_de','(select bezeichnung from artikelkategorien where id=(select SUBSTRING_INDEX(SUBSTRING_INDEX(art.typ, \'kat\', 1), \'_\', 1) as type from artikel where id=art.id))', $colbezeichnung,$colkurzbezeichnung,$colmenge,$colgewicht,$colvolumen); - $kursjoin = ""; - - $numbercols = array(9, 10); - $datecols = array(0); - - - if($preisart == 'letzterek') - { - if($preiseineuro){ - $kursjoin = self::KursJoin($preisart, $datum); - $dummy = self::PreisUmrechnung($app, $preisart, $live); - /*$dummy = ' - if( - ifnull(lw.kursletzt,0)<> 0 - , - 1 / lw.kursletzt - , - if( - ifnull(wt.kurs,0) <> 0 - , - if( - wt.waehrung_nach = lw.waehrungletzt, - (1/wt.kurs), - wt.kurs - ) - , - if(lw.waehrungletzt = \'USD\', - 1.0 / '.$kursusd.', - if(lw.waehrungletzt = \'CHF\', - 1.0 / '.$kurschf.', - 1) - ) - ) - ) - * ifnull(lw.preis_letzterek,0) - ';*/ - }else{ - //$dummy = 'ifnull(lw.preis_letzterek,0)'; - $dummy = self::EinzelPreis($preisart,$live); - } - $findcols[] = $dummy; - $preiscol = $app->erp->FormatPreis($dummy,2); - $gesamtcol = "(".$dummy.'*'.$colmenge.")"; - $findcols[] = $gesamtcol; - //$waehrungcol = 'lw.waehrungletzt'; - $waehrungcol = self::Waehrung($preisart,$live); - $findcols[] = $waehrungcol; - }elseif($preisart == 'inventurwert'){ - - if($preiseineuro){ - $dummy = self::PreisUmrechnung($app, $preisart, $live); - $kursjoin = self::KursJoin($preisart, $datum); - }else{ - $dummy = 'if(ifnull(lw.inventurwert,0) = 0 AND art.inventurekaktiv = 1, ifnull(art.inventurek,0), ifnull(lw.inventurwert,0))'; - $dummy = $dummy = self::EinzelPreis($preisart,$live); - } - - - $findcols[] = $dummy; - $preiscol = $app->erp->FormatPreis($dummy,2); - $findcols[] = $dummy.'*'.$colmenge; - //$gesamtcol = $app->erp->FormatPreis($dummy.'*'.$colmenge,2); - $gesamtcol = "(".$dummy.'*'.$colmenge.")"; - //$waehrungcol = "'EUR'"; - $waehrungcol = self::Waehrung($preisart,$live); - $findcols[] = $waehrungcol; - }else{ - if($preiseineuro){ - $kursjoin = self::KursJoin($preisart, $datum); - - /*$dummy = ' - if( - if(ifnull(lw.preis_kalkulierterek,0) <> 0,ifnull(lw.kurskalk,0),ifnull(lw.kursletzt,0))<> 0 - , - 1 / if(ifnull(lw.preis_kalkulierterek,0) <> 0,ifnull(lw.kurskalk,0),ifnull(lw.kursletzt,0)) - , - if( - ifnull(wt.kurs,0) <> 0 - , - if( - wt.waehrung_nach = if(ifnull(lw.preis_kalkulierterek,0) <> 0,lw.kurskalk,lw.kursletzt), - (1/wt.kurs), - wt.kurs - ) - , - if(if(ifnull(lw.preis_kalkulierterek,0) <> 0,lw.kurskalk,lw.kursletzt) = \'USD\', - 1.0 / '.$kursusd.', - if(if(ifnull(lw.preis_kalkulierterek,0) <> 0,lw.kurskalk,lw.kursletzt) = \'CHF\', - 1.0 / '.$kurschf.', - 1) - ) - ) - ) - * if(ifnull(lw.preis_kalkulierterek,0) <> 0,lw.preis_kalkulierterek,ifnull(lw.preis_letzterek,0)) - ';*/ - $dummy = self::PreisUmrechnung($app, $preisart, $live); - //$dummy = 'if(ifnull(lw.preis_kalkulierterek,0) <> 0,lw.preis_kalkulierterek,ifnull(lw.preis_letzterek,0))'; - }else{ - //$dummy = 'if(ifnull(lw.preis_kalkulierterek,0) <> 0,lw.preis_kalkulierterek,ifnull(lw.preis_letzterek,0))'; - $dummy = self::EinzelPreis($preisart,$live); - } - $findcols[] = $dummy; - $preiscol = $app->erp->FormatPreis($dummy,2); - $findcols[] = '('.$dummy.'*'.$colmenge.')'; - //$gesamtcol = $app->erp->FormatPreis('('.$dummy.'*'.$colmenge.')',2); - $gesamtcol = '('.$dummy.'*'.$colmenge.')'; - //$waehrungcol = 'if(ifnull(lw.preis_kalkulierterek,0) <> 0,lw.waehrungkalk,lw.waehrungletzt)'; - $waehrungcol = self::Waehrung($preisart,$live); - $findcols[] = $waehrungcol; - } - - $findcols[] = 'lw.letzte_bewegung'; - $findcols[] = 'art.id'; - - //$searchsql = array('art.nummer','art.name_de','lag.bezeichnung','lp.kurzbezeichnung'); - $searchsql = $findcols; - $searchsql[0] = "date_format(lw.datum,'%d.%m.%Y')"; - $searchsql[11] = "date_format(lw.letzte_bewegung,'%d.%m.%Y %H:%i:%s')"; - - //$columnfilter = true; - $defaultorder = 1; - $defaultorderdesc = 0; - $alignright = array(7,8,9,10,11); - $sumcol = array(8,9,11); - $onequeryperuser = true; - $joinek = ' LEFT JOIN '.self::LetzterEK('art', 'e1','e2').' ek ON art.id = ek.artikel'; - - if($artikelkategorie > 0){ - $joinartikelbaum = ' LEFT JOIN artikelbaum_artikel aba ON art.id = aba.artikel'; - } - - $waehrungcolanz = $waehrungcol; - if($preiseineuro){ - $waehrungcolanz = "'EUR'"; - } - - if(!$live) - { - $sql = "SELECT DISTINCT SQL_CALC_FOUND_ROWS art.id, date_format(lw.datum,'%d.%m.%Y'), art.nummer, art.name_de, (select bezeichnung from artikelkategorien where id=(select SUBSTRING_INDEX(SUBSTRING_INDEX(art.typ, 'kat', 1), '_', 1) as type from artikel where id=art.id)) as artikelkategorie, lag.bezeichnung, lp.kurzbezeichnung, - ".$app->erp->FormatMenge('lw.menge',2).",".$app->erp->FormatPreis($colgewicht,2).",".$app->erp->FormatPreis($colvolumen,2)." - , $preiscol, ".$app->erp->FormatPreis($gesamtcol,2).", $waehrungcolanz ,ifnull(date_format(lw.letzte_bewegung,'%d.%m.%Y %H:%i:%s'), ''), art.id - FROM artikel art - INNER JOIN lagerwert lw ON lw.artikel = art.id AND (isnull(art.geloescht) OR art.geloescht = 0) AND art.lagerartikel = 1 - $joinek - $kursjoin - $joinartikelbaum - - "; - $where = " lw.datum = '$datum' "; - if($gruppierenlager) - { - $sql .= "INNER JOIN (SELECT '' as kurzbezeichnung ) lp ON lp.kurzbezeichnung = '' - INNER JOIN lager lag ON lw.lager = lag.id - "; - - $where .= " AND lw.lager <> 0"; - if($lager) - { - $where .= " AND lw.lager = '$lager' "; - } - if($lagerplatz) - { - $where .= " AND lw.lager_platz = '$lagerplatz' "; - } - }else{ - $sql .= "INNER JOIN lager_platz lp ON lp.id = lw.lager_platz - INNER JOIN lager lag ON lag.id = lp.lager - "; - $where .= " AND lw.lager = 0"; - if($lager) - { - $where .= " AND lw.lager = '$lager' "; - } - if($lagerplatz) - { - $where .= " AND lw.lager_platz = '$lagerplatz' "; - } - } - }else{ - - $findcols[0] = 'curdate()'; - - $sql = "SELECT DISTINCT SQL_CALC_FOUND_ROWS art.id, date_format(curdate(),'%d.%m.%Y'), art.nummer, art.name_de, (select bezeichnung from artikelkategorien where id=(select SUBSTRING_INDEX(SUBSTRING_INDEX(art.typ, 'kat', 1), '_', 1) as type from artikel where id=art.id)) as artikelkategorie, lpi.bezeichnung, lpi.kurzbezeichnung, - ".$app->erp->FormatMenge($colmenge,2).",".$app->erp->FormatPreis($colgewicht,2).",".$app->erp->FormatPreis($colvolumen,2)." - , $preiscol, ".$app->erp->FormatPreis($gesamtcol,2).", $waehrungcolanz ,ifnull(date_format(lbew.zeit,'%d.%m.%Y %H:%i:%s'), ''), art.id - FROM artikel art - $joinek - $joinartikelbaum - LEFT JOIN lagerwert lw ON lw.artikel = art.id AND lw.datum = '$datum' AND lw.datum < curdate() - $kursjoin - "; - $where = " (isnull(art.geloescht) OR art.geloescht = 0) AND art.lagerartikel = 1 "; - if($gruppierenlager) - { - $sql .= "INNER JOIN ( - SELECT lager_platz_inhalt.artikel, sum(lager_platz_inhalt.menge) as menge, '' as kurzbezeichnung,lager.bezeichnung, lager.id as lager - FROM lager_platz_inhalt - INNER JOIN lager_platz ON lager_platz_inhalt.lager_platz = lager_platz.id - INNER JOIN lager ON lager_platz.lager = lager.id - GROUP BY lager_platz_inhalt.artikel, lager.id - ) lpi ON lpi.artikel = art.id AND (isnull(art.geloescht) OR art.geloescht = 0) AND art.lagerartikel = 1 - LEFT JOIN ( - SELECT max(lb1.logdatei) as zeit, lb1.artikel, lp1.lager as lager - FROM lager_bewegung lb1 - INNER JOIN lager_platz lp1 ON lb1.lager_platz = lp1.id AND ifnull(lp1.geloescht, 0) = 0 - INNER JOIN lager l1 ON lp1.lager = l1.id AND ifnull(l1.geloescht,0) = 0 - GROUP BY lb1.artikel,lp1.lager - ) lbew ON lpi.artikel = lbew.artikel AND lpi.lager = lbew.lager - "; - - $where .= " AND lpi.lager <> 0"; - if($lager) - { - $where .= " AND lpi.lager = '$lager' "; - } - //if($lagerplatz)$where .= " AND lpi.lager_platz = '$lagerplatz' "; - }else{ - $sql .= "INNER JOIN ( - SELECT lager_platz_inhalt.artikel, sum(lager_platz_inhalt.menge) as menge, lager_platz.kurzbezeichnung,lager.bezeichnung, lager.id as lager,lager_platz.id as lager_platz - FROM lager_platz_inhalt - INNER JOIN lager_platz ON lager_platz_inhalt.lager_platz = lager_platz.id - INNER JOIN lager ON lager_platz.lager = lager.id - GROUP BY lager_platz_inhalt.artikel, lager.id, lager_platz.id - ) lpi ON lpi.artikel = art.id - LEFT JOIN ( - SELECT max(lb1.logdatei) as zeit, lb1.artikel, lp1.id as lager_platz - FROM lager_bewegung lb1 - INNER JOIN lager_platz lp1 ON lb1.lager_platz = lp1.id AND ifnull(lp1.geloescht, 0) = 0 - INNER JOIN lager l1 ON lp1.lager = l1.id AND ifnull(l1.geloescht,0) = 0 - GROUP BY lb1.artikel,lp1.id - ) lbew ON lpi.artikel = lbew.artikel AND lpi.lager_platz = lbew.lager_platz - "; - - $where .= " AND lpi.lager <> 0"; - if($lager) - { - $where .= " AND lpi.lager = '$lager' "; - } - } - - $findcols[10] = "CAST($gesamtcol as DECIMAL(10,2))"; - $findcols[11] = $waehrungcol; - $findcols[12] = "ifnull(lbew.zeit, '')"; - $searchsql[12] = "date_format(lbew.zeit,'%d.%m.%Y %H:%i:%s')"; - - } - - if($artikel) - { - $where .= " AND art.id = '$artikel' "; - } - if($artikelkategorie > 0){ - $where .= " AND (aba.kategorie = '$artikelkategorie' OR art.typ = '".$artikelkategorie."_kat') "; - //$where .= " AND art.typ = '".$artikelkategorie."_kat' "; - } - $sql = $app->YUI->CodiereSQLForOneQuery($sql, $name); - - $groupby = ""; - $count = ""; - - break; - case "lager_zwischenlager_eingang": - $allowed['lager'] = array('buchenzwischenlager'); - $heading = array('Artikel','Nummer','EAN','Lager','Menge','VPE','Grund','Projekt','Menü'); - $width = array('20%','10%','10%','10%','5%','5%','20%','10%','1%'); - $findcols = array('a.name_de','a.nummer','a.ean','lp.kurzbezeichnung','z.menge','z.vpe','z.grund','p.abkuerzung', 'z.id'); - $searchsql = array('a.name_de','a.nummer','a.ean','lp.kurzbezeichnung'); - $alignright = array(4); - $hide767 = array(5,6,7); - $sql = "SELECT SQL_CALC_FOUND_ROWS z.id,a.name_de,a.nummer,a.ean,lp.kurzbezeichnung,trim(z.menge)+0,z.vpe,z.grund, p.abkuerzung as projekt, z.id FROM zwischenlager z - LEFT JOIN artikel a ON a.id=z.artikel - LEFT JOIN lager_platz lp ON a.lager_platz = lp.id - LEFT JOIN projekt p ON p.id=z.projekt - "; - - $delete = ""; - if($app->erp->RechteVorhanden("lager", "buchenzwischenlagerdelete")){ - $delete = "Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\">"; - } - - $menu = "
Conf->WFconf['defaulttheme']}/images/forward.svg\"> Conf->WFconf['defaulttheme']}/images/add.png\" border=\"0\"> $delete
"; - - $where = "z.richtung='eingang'"; - $count = "SELECT count(z.id) FROM zwischenlager z WHERE $where"; - - break; - case "lager_zwischenlager_ausgang": - $allowed['lager'] = array('buchenzwischenlager'); - $heading = array('Artikel','Nummer','EAN','Lager','Menge','VPE','Grund','Projekt','Menü'); - $width = array('20%','10%','10%','10%','5%','5%','20%','10%','1%'); - $findcols = array('a.name_de','a.nummer','a.ean','lp.kurzbezeichnung','z.menge','z.vpe','z.grund','p.abkuerzung', 'z.id'); - $searchsql = array('a.name_de','a.nummer','a.ean','lp.kurzbezeichnung'); - $alignright = array(4); - $hide767 = array(5,6,7); - $sql = "SELECT SQL_CALC_FOUND_ROWS z.id,a.name_de,a.nummer,a.ean,lp.kurzbezeichnung,trim(z.menge)+0,z.vpe,z.grund, p.abkuerzung as projekt, z.id FROM zwischenlager z - LEFT JOIN artikel a ON a.id=z.artikel - LEFT JOIN lager_platz lp ON a.lager_platz = lp.id - LEFT JOIN projekt p ON p.id=z.projekt - "; - - $delete = ''; - if($app->User->GetType()=="admin"){ - $delete = "Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\">"; - } - $menu = "
Conf->WFconf['defaulttheme']}/images/forward.svg\"> $delete
"; - $where = "z.richtung='ausgang'"; - $count = "SELECT count(z.id) FROM zwischenlager z WHERE $where"; - break; - - case "lager_bestand": - $allowed['lager'] = array('bestand'); - $app->Tpl->Add('JQUERYREADY', "$('#ohnebestand').click( function() { fnFilterColumn1( 0 ); } );"); - $app->Tpl->Add('JQUERYREADY', "$('#chargengruppierung').click( function() { fnFilterColumn2( 0 ); } );"); - for ($r = 1;$r <= 2;$r++) { - $app->Tpl->Add('JAVASCRIPT', ' - function fnFilterColumn' . $r . ' ( i ) { - if(oMoreData' . $r . $name . '==1) oMoreData' . $r . $name . ' = 0; - else - oMoreData' . $r . $name . ' = 1; - - $(\'#' . $name . '\').dataTable().fnFilter( - \'\', - i, - 0,0 - ); - } - '); - } - //$defaultorder = 1; //Optional wenn andere Reihenfolge gewuenscht - - //$defaultorderdesc = 1; - //$sumcol = 4; - $alignright = array(4); - $menu = "
Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\">
"; - $more_data1 = $app->Secure->GetGET("more_data1"); - $more_data2 = 0; - $menucol = 6; - $heading = array('Artikel-Nr.','Artikel'); - $findcols = array('a.nummer','a.name_de'); - $searchsql = array('a.nummer','a.name_de'); - $width = array('10%','30%'); - $heading[] = 'Lagerplatz'; - - $width[] = '10%'; - - $findcols[] = 'lp.kurzbezeichnung'; - $searchsql[] = 'lp.kurzbezeichnung'; - - $heading[] = 'Projekt'; - - $width[] = '10%'; - - $findcols[] = 'p.abkuerzung'; - $searchsql[] = 'p.abkuerzung'; - - - $heading[] = 'Menge'; - if($more_data2) - { - $findcols[] = 'menge'; - }else{ - $findcols[] = 'menge'; - } - if($more_data2) - { - $findcols[] = 'verkaufbare'; - $findcols[] = 'reserviert'; - }else{ - $findcols[] = 'verkaufbare'; - $findcols[] = 'reserviert'; - } - $heading[] = 'Verkaufbare *'; - $heading[] = 'Reserviert *'; - $heading[] = 'Menü'; - - $width[] = '10%'; - $width[] = '10%'; - $width[] = '1%'; - - $findcols[] = 'a.id'; - - //$moreinfo = true; - if($more_data2) - { - $sql = "SELECT SQL_CALC_FOUND_ROWS a.id, CONCAT('',a.nummer,''),a.name_de,"; - }else{ - $sql = "SELECT SQL_CALC_FOUND_ROWS lpi.id, CONCAT('',a.nummer,''),a.name_de,"; - } - - - if($more_data2) - { - $sql .= "lp.kurzbezeichnung,p.abkuerzung, - - ".$app->erp->FormatMenge("ifnull(lpi.menge,0)")." as fmenge , - ".$app->erp->FormatMenge("IFNULL(mengemhd, ifnull(mengecharge,0))")." as fmengecharge , - ".$app->erp->FormatMenge("IFNULL(lpi2.gmenge,0) - IFNULL(r.reserviert,0)")." as verkaufbare, - ".$app->erp->FormatMenge("IFNULL(r.reserviert,0)")." as reserviert, - a.id "; - $sql .= " - FROM artikel a - INNER JOIN ( - SELECT artikel, sum(menge) as menge,lager_platz - FROM lager_platz_inhalt - GROUP BY artikel, lager_platz - ) AS lpi ON lpi.artikel = a.id - INNER JOIN ( - SELECT artikel, sum(menge) as gmenge - FROM lager_platz_inhalt - GROUP BY artikel - ) AS lpi2 ON a.id = lpi2.artikel - INNER JOIN lager_platz lp ON lp.id = lpi.lager_platz - LEFT JOIN ( - SELECT artikel, lager_platz, charge, sum(menge) as mengecharge , NULL as mhddatum - FROM lager_charge GROUP BY artikel, lager_platz, charge - ) c ON c.lager_platz = lpi.lager_platz AND c.artikel = a.id - LEFT JOIN ( - SELECT artikel, lager_platz, IFNULL(charge,'') as charge2, mhddatum, SUM(menge) as mengemhd - FROM `lager_mindesthaltbarkeitsdatum` - GROUP BY artikel, lager_platz, IFNULL(charge,''), mhddatum - ) AS m ON m.lager_platz = lpi.lager_platz AND m.artikel = a.id - LEFT JOIN ( - SELECT artikel, SUM(menge) as reserviert - FROM lager_reserviert - GROUP BY artikel - ) r ON r.artikel=a.id - LEFT JOIN lager l ON l.id=lp.lager - LEFT JOIN projekt p ON p.id=l.projekt - "; - - }else{ - $sql .= "lp.kurzbezeichnung,p.abkuerzung, - ".$app->erp->FormatMenge("ifnull(lpi.menge,0)")." as fmenge , - '' as mengecharge, - ".$app->erp->FormatMenge("IFNULL(lpi2.gmenge,0) - IFNULL(r.reserviert,0)")." as verkaufbare, ".$app->erp->FormatMenge("IFNULL(r.reserviert,0)")." as reserviert, a.id "; - - $sql .= " - FROM lager_platz_inhalt lpi - LEFT JOIN lager_platz lp ON lp.id=lpi.lager_platz - LEFT JOIN lager l ON l.id=lp.lager - LEFT JOIN projekt p ON p.id=l.projekt - INNER JOIN artikel a ON a.id=lpi.artikel - INNER JOIN ( - SELECT artikel, SUM(menge) as gmenge - FROM lager_platz_inhalt - GROUP BY artikel - ) AS lpi2 ON lpi.artikel = lpi2.artikel - LEFT JOIN (SELECT artikel, SUM(menge) as reserviert FROM lager_reserviert GROUP BY artikel) r ON r.artikel=a.id"; - } - $subwhere = ""; - if($more_data1) { - $sql = "SELECT SQL_CALC_FOUND_ROWS a.id, a.nummer,a.name_de,"; - - $sql .= "'-',p.abkuerzung,'0' as menge,'0' as mengecharge, '0' as verkaufbare, ".$app->erp->FormatMenge("IFNULL(r.reserviert,0)")." as reserviert, a.id - FROM artikel AS `a` - LEFT JOIN (SELECT lpi.artikel, lp.kurzbezeichnung FROM `lager_platz_inhalt` AS `lpi` LEFT JOIN `lager_platz` AS `lp` ON lp.id=lpi.lager_platz GROUP BY lpi.artikel) AS `lp` ON lp.artikel=a.id - LEFT JOIN (SELECT lr.artikel, SUM(lr.menge) AS `reserviert` FROM `lager_reserviert` AS `lr` GROUP BY lr.artikel) r ON r.artikel=a.id - LEFT JOIN `projekt` AS `p` ON p.id=a.projekt"; - $subwhere = " AND a.lagerartikel=1 AND ((SELECT SUM(lpi.menge) FROM lager_platz_inhalt lpi WHERE lpi.artikel=a.id) <=0 OR ISNULL((SELECT SUM(lpi.menge) FROM lager_platz_inhalt lpi WHERE lpi.artikel=a.id))) "; - - } - if($more_data2) { - $subwhere .= ' AND (NOT ISNULL(m.artikel) OR NOT ISNULL(c.artikel)) '; - } - - $where = " a.geloescht!=1 ".$subwhere." ".$app->erp->ProjektRechte(); - //$count = "select count(distinct ms.datum) FROM mitarbeiterzeiterfassung_sollstunden ms where ms.adresse = '$adresse' AND ms.datum >= '$von' AND ms.datum <= '$bis'"; - /*if($more_data1){ - $count = "SELECT count(a.id) FROM artikel a WHERE " . $where; - } - else{ - if($more_data2) - { - $count = "SELECT count(c.id) FROM lager_charge c INNER JOIN artikel a ON a.id=c.artikel WHERE ".$where; - }else{ - $count = "SELECT count(lpi.id) FROM lager_platz_inhalt lpi LEFT JOIN artikel a ON a.id=lpi.artikel LEFT JOIN lager_platz lp ON lp.id=lpi.lager_platz WHERE ".$where; - } - }*/ - - - break; - - case "lager_bewegunglist": - $allowed['lager'] = array('bewegunglist'); - - $heading = array('Regal', 'Nummer', 'Name', 'Ein-/Ausgang','Menge', 'Datum', 'Referenz', ''); - $width = array('10%', '8%', '25%', '8%', '8%', '8%', '27%', '1%'); - - $findcols = array('p.kurzbezeichnung', 'a.nummer', 'a.name_de', "IF(i.eingang, 'Eingang', 'Ausgang')", "CAST(if(i.eingang, CONCAT('+',trim(i.menge)+0), CONCAT('-',trim(i.menge)+0)) AS decimal(10,2))", 'i.zeit', 'i.referenz', 'i.id'); - $searchsql = array('p.kurzbezeichnung', 'a.nummer', 'a.name_de', "IF(i.eingang, 'Eingang', 'Ausgang')", "if(i.eingang, CONCAT('+',' ',".$app->erp->FormatMenge('i.menge')."), CONCAT('-',' ',".$app->erp->FormatMenge('i.menge')."))", "DATE_FORMAT(i.zeit,'%d.%m.%Y')", 'i.referenz'); - - $defaultorder = 1; - $defaultorderdesc = 0; - - $alignright = array(5); - - $datecols = array(5); - $numbercols = array(4); - - $id = $app->Secure->GetGET("id"); - $sql = "SELECT SQL_CALC_FOUND_ROWS i.id, p.kurzbezeichnung as regal, a.nummer, a.name_de, IF(i.eingang, 'Eingang', 'Ausgang'), if(i.eingang, CONCAT('+',' ',".$app->erp->FormatMenge('i.menge')."), CONCAT('-',' ',".$app->erp->FormatMenge('i.menge').")) as menge, DATE_FORMAT(i.zeit,'%d.%m.%Y') as datum, i.referenz, i.id FROM lager_bewegung i LEFT JOIN lager_platz p ON p.id=i.lager_platz LEFT JOIN artikel a ON i.artikel=a.id"; - - - $lagerplatz = $app->User->GetParameter("lager_bewegung_lagerplatz"); - $lagerplatzid = $app->DB->Select("SELECT id FROM lager_platz WHERE kurzbezeichnung = '$lagerplatz' AND kurzbezeichnung != '' LIMIT 1"); - - $artikel = $app->User->GetParameter("lager_bewegung_artikel"); - $artikeldaten = explode(" ", $artikel, 2); - $artikelnr = $artikeldaten[0]; - $artikelname = $artikeldaten[1]; - $artikelid = $app->DB->Select("SELECT id FROM artikel WHERE name_de = '$artikelname' AND name_de != '' AND nummer = '$artikelnr' AND nummer != '' LIMIT 1"); - - - /*if($lagerplatzid != "" && $artikelid != ""){ - $where = " i.id > 0 AND i.lager_platz = '$lagerplatzid' AND i.artikel = '$artikelid'"; - }elseif($lagerplatzid != "" && $artikelid == ""){ - $where = " i.id > 0 AND i.lager_platz = '$lagerplatzid'"; - }elseif($lagerplatzid == "" && $artikelid != ""){ - $where = " i.id > 0 AND i.artikel = '$artikelid'"; - }else{ - $where = " i.id > 0"; - }*/ - - if($lagerplatzid != ""){ - $lagerplatzwhere = " AND i.lager_platz = '$lagerplatzid'"; - }else{ - $lagerplatzwhere = ""; - } - - if($artikelid != ""){ - $artikelwhere = " AND i.artikel = '$artikelid'"; - }else{ - $artikelwhere = ""; - } - - $where = " i.id > 0 AND p.lager = '$id'".$lagerplatzwhere.$artikelwhere; - - $count = "SELECT count(i.id) FROM lager_bewegung i LEFT JOIN lager_platz p ON p.id = i.lager_platz WHERE $where"; - - $app->Tpl->Set("LAGER_PLATZ_BEWEGUNG", $lagerplatz); - $app->Tpl->Set("ARTIKEL_BEWEGUNG", $artikel); - - - break; - - case "lager_allebewegungenlist": - $allowed['lager'] = array('allebewegungenlist'); - - $heading = array('Lager', 'Regal', 'Nummer', 'Name', 'Ein-/Ausgang', 'Menge', 'Datum', 'Referenz', 'Bearbeiter', 'Projekt',''); - $width = array('9%', '9%', '8%', '18%', '5%', '5%', '5%', '18%', '10%', '5%','1%'); - - $findcols = array('l.bezeichnung', 'lp.kurzbezeichnung', 'a.nummer', 'a.name_de', "IF(i.eingang, 'Eingang', 'Ausgang')", "CAST(if(i.eingang, CONCAT('+',trim(i.menge)+0), CONCAT('-',trim(i.menge)+0)) AS decimal(10,2))", 'i.zeit', 'i.referenz', 'i.bearbeiter', 'p.abkuerzung', 'i.id'); - $searchsql = array('l.bezeichnung', 'lp.kurzbezeichnung', 'a.nummer', 'a.name_de', "IF(i.eingang, CONCAT('+',' ',".$app->erp->FormatMenge('i.menge')."), CONCAT('-',' ',".$app->erp->FormatMenge('i.menge')."))", 'DATE_FORMAT(i.zeit,\'%d.%m.%Y\')', 'i.referenz', 'i.bearbeiter', 'p.abkuerzung'); - - $defaultorder = 1; - $defaultorderdesc = 0; - - $alignright = array(6); - - $datecols = array(6); - - $sql = "SELECT SQL_CALC_FOUND_ROWS i.id, l.bezeichnung, lp.kurzbezeichnung as regal, a.nummer, a.name_de, IF(i.eingang, 'Eingang', 'Ausgang'), if(i.eingang, CONCAT('+', ' ', trim(i.menge)+0), CONCAT('-', ' ', trim(i.menge)+0)) as menge, DATE_FORMAT(i.zeit,'%d.%m.%Y') as datum, i.referenz, i.bearbeiter, p.abkuerzung AS projektbewegung, i.id FROM lager_bewegung i LEFT JOIN lager_platz lp ON lp.id=i.lager_platz LEFT JOIN lager l ON lp.lager = l.id LEFT JOIN artikel a ON i.artikel=a.id LEFT JOIN projekt p ON l.projekt = p.id"; - - - $lager = $app->User->GetParameter("lager_bewegungalle_lager"); - - $lagerplatz = $app->User->GetParameter("lager_bewegungalle_lagerplatz"); - $lagerplatzid = $app->DB->Select("SELECT id FROM lager_platz WHERE kurzbezeichnung = '$lagerplatz' AND kurzbezeichnung != '' LIMIT 1"); - - $artikel = $app->User->GetParameter("lager_bewegungalle_artikel"); - $artikeldaten = explode(" ", $artikel, 2); - $artikelnr = $artikeldaten[0]; - $artikelname = $artikeldaten[1]; - $artikelid = $app->DB->Select("SELECT id FROM artikel WHERE name_de = '$artikelname' AND name_de != '' AND nummer = '$artikelnr' AND nummer != '' LIMIT 1"); - - if($lager != ""){ - $lagerwhere = " AND l.bezeichnung = '$lager'"; - }else{ - $lagerwhere = ""; - } - - if($lagerplatzid != ""){ - $lagerplatzwhere = " AND i.lager_platz = '$lagerplatzid'"; - }else{ - $lagerplatzwhere = ""; - } - - if($artikelid != ""){ - $artikelwhere = " AND i.artikel = '$artikelid'"; - }else{ - $artikelwhere = ""; - } - - - $where = " i.id > 0".$lagerwhere.$lagerplatzwhere.$artikelwhere.$app->erp->ProjektRechte(); - - $count = "SELECT count(i.id) FROM lager_bewegung i LEFT JOIN lager_platz lp ON lp.id = i.lager_platz LEFT JOIN lager l ON l.id=lp.lager LEFT JOIN projekt p ON l.projekt = p.id WHERE $where"; - - $app->Tpl->Set("LAGER_BEWEGUNG_ALLE", $lager); - $app->Tpl->Set("LAGER_PLATZ_BEWEGUNG_ALLE", $lagerplatz); - $app->Tpl->Set("ARTIKEL_BEWEGUNG_ALLE", $artikel); - - break; - - case "lager_inhaltlist": - $allowed['lager'] = array('lager_inhaltlist'); - - $heading = array('Regal', 'Artikel', 'Nummer', 'Projekt', 'Menge', 'Verkaufbare', 'Reserviert', ''); - $width = array('10%', '30%', '10%', '15%', '15%', '10%', '10%', '1%'); - - $findcols = array('p.kurzbezeichnung', 't.artikelname', 't.nummer', 'pro.abkuerzung', 't.menge', 't.verkaufbare', 't.reserviert', 't.artikel'); - $searchsql = array('p.kurzbezeichnung', 't.artikelname', 't.nummer', 'pro.abkuerzung', $app->erp->FormatMenge('t.menge'), $app->erp->FormatMenge('t.verkaufbare'), $app->erp->FormatMenge('t.reserviert')); - - $defaultorder = 1; - $defaultorderdesc = 0; - - $alignright = array(5,6,7); - $numbercols = array(4,5,6); - - $sql = "SELECT SQL_CALC_FOUND_ROWS t.artikel, IFNULL(p.kurzbezeichnung, ' '), t.artikelname, t.nummer, pro.abkuerzung, ".$app->erp->FormatMenge('t.menge').", ".$app->erp->FormatMenge('t.verkaufbare').", ".$app->erp->FormatMenge('t.reserviert').", t.artikel - FROM lager_platz p - JOIN (SELECT i.lager_platz, a.id as artikel, IFNULL(a.name_de, ' ') as artikelname, IFNULL(a.nummer, ' ') as nummer, a.projekt, IFNULL(SUM(i.menge), 0) as menge, IFNULL(SUM(i.menge),0) - IFNULL(SUM(r.menge),0) as verkaufbare, IFNULL(SUM(r.menge), 0) as reserviert FROM lager_platz_inhalt i - LEFT JOIN artikel a ON i.artikel=a.id - LEFT JOIN (SELECT artikel, SUM(menge) as menge FROM lager_reserviert GROUP BY artikel) r ON r.artikel=a.id - GROUP BY a.id, i.lager_platz) t ON t.lager_platz= p.id LEFT JOIN projekt pro ON pro.id=t.projekt "; - - //$groupby = " GROUP BY p.kurzbezeichnung, a.id"; - - $lagerplatz = $app->User->GetParameter("lager_inhalt_lagerplatz"); - $lagerplatzid = $app->DB->Select("SELECT id FROM lager_platz WHERE kurzbezeichnung = '$lagerplatz' AND kurzbezeichnung != '' LIMIT 1"); - - $artikel = $app->User->GetParameter("lager_inhalt_artikel"); - $artikeldaten = explode(" ", $artikel, 2); - $artikelnr = $artikeldaten[0]; - $artikelname = $artikeldaten[1]; - $artikelid = $app->DB->Select("SELECT id FROM artikel WHERE name_de = '$artikelname' AND name_de != '' AND nummer = '$artikelnr' AND nummer != '' LIMIT 1"); - - $lagerid = $app->Secure->GetGET("id"); - - if($lagerplatzid != ""){ - $lagerplatzwhere = " AND t.lager_platz = '$lagerplatzid'"; - }else{ - $lagerplatzwhere = ""; - } - - if($artikelid != ""){ - $artikelwhere = " AND t.artikel = '$artikelid'"; - }else{ - $artikelwhere = ""; - } - - $where = " p.lager = '$lagerid'".$lagerplatzwhere.$artikelwhere; - - //$count = "SELECT count(p.kurzbezeichnung) FROM lager_platz p LEFT JOIN lager_platz_inhalt i ON p.id=i.lager_platz LEFT JOIN artikel a ON i.artikel=a.id LEFT JOIN lager_reserviert r ON r.artikel=a.id LEFT JOIN projekt pro ON pro.id=a.projekt WHERE $where"; - - $app->Tpl->Set("LAGER_PLATZ_INHALT", $lagerplatz); - $app->Tpl->Set("ARTIKEL_INHALT", $artikel); - - break; - - - case "lager_reservierungen": - $allowed['lager'] = array('reservierungen'); - - $heading = array('Kunde','Belegart','Belegnr','Status','Artikel','Menge','Projekt','Grund','Menü'); - $width = array('20%','20%','5%','10%','20%','1%'); - $findcols = array('t.kunde', 't.typ', 't.belegnr', 't.status', 't.Artikel', 't.menge', 't.projekt', 't.grund', 't.rid'); - $searchsql = array('t.kunde', 't.typ', 't.belegnr', 't.status', 't.Artikel', $app->erp->FormatMenge('t.menge'), 't.projekt', 't.grund'); - - $defaultorder = 1; //Optional wenn andere Reihenfolge gewuenscht - $defaultorderdesc = 1; - //$sumcol = 9; - $menu = "
Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\">
"; - $alignright = array(6); - $numbercols = array(5); - $menucol = 5; - //$moreinfo = true; - $sql = " - SELECT - SQL_CALC_FOUND_ROWS t.rid, - t.kunde, - t.typ, - t.belegnr, - t.status, - t.Artikel, - ".$app->erp->FormatMenge('t.menge').", - t.projekt, - t.grund, - t.rid - - FROM - ( - ( - SELECT r.id as rid, adr.name as kunde,'Auftrag' as typ,if(auf.belegnr = '','ENTWURF',auf.belegnr) as belegnr ,if(auf.status = '','angelegt',auf.status) as status, a.name_de as Artikel,r.menge,p.abkuerzung as projekt,r.grund, r.id FROM lager_reserviert r LEFT JOIN artikel a ON a.id=r.artikel LEFT JOIN projekt p ON - p.id=r.projekt LEFT JOIN adresse adr ON r.adresse=adr.id - INNER JOIN auftrag auf ON auf.id = r.parameter AND r.objekt = 'auftrag' - ) - UNION ALL - ( - SELECT r.id as rid, adr.name as kunde,'Lieferschein' as typ,if(l.belegnr = '','ENTWURF',l.belegnr) as belegnr ,if(l.status = '','angelegt',l.status) as status, a.name_de as Artikel,r.menge,p.abkuerzung as projekt,r.grund, r.id FROM lager_reserviert r LEFT JOIN artikel a ON a.id=r.artikel LEFT JOIN projekt p ON - p.id=r.projekt LEFT JOIN adresse adr ON r.adresse=adr.id - INNER JOIN lieferschein l ON l.id = r.parameter AND r.objekt = 'lieferschein' - ) - UNION ALL - ( - SELECT r.id as rid, adr.name as kunde,'Produktion' as typ,if(l.belegnr = '','ENTWURF',l.belegnr) as belegnr ,if(l.status = '','angelegt',l.status) as status, a.name_de as Artikel,r.menge,p.abkuerzung as projekt,r.grund, r.id FROM lager_reserviert r LEFT JOIN artikel a ON a.id=r.artikel LEFT JOIN projekt p ON - p.id=r.projekt LEFT JOIN adresse adr ON r.adresse=adr.id - INNER JOIN produktion l ON l.id = r.parameter AND r.objekt = 'produktion' - ) - UNION ALL - ( - SELECT r.id as rid, adr.name as kunde,'Auftrag' as typ,'GELÖSCHT' as belegnr ,'GELÖSCHT' as status, a.name_de as Artikel,r.menge,p.abkuerzung as projekt,r.grund, r.id FROM lager_reserviert r LEFT JOIN artikel a ON a.id=r.artikel LEFT JOIN projekt p ON - p.id=r.projekt LEFT JOIN adresse adr ON r.adresse=adr.id - LEFT JOIN auftrag auf ON auf.id = r.parameter AND r.objekt = 'auftrag' WHERE isnull(auf.id) AND r.objekt = 'auftrag' - ) - UNION ALL - ( - SELECT r.id as rid, adr.name as kunde,'Lieferschein' as typ,'GELÖSCHT' as belegnr ,'GELÖSCHT' as status, a.name_de as Artikel,r.menge,p.abkuerzung as projekt,r.grund, r.id FROM lager_reserviert r LEFT JOIN artikel a ON a.id=r.artikel LEFT JOIN projekt p ON - p.id=r.projekt LEFT JOIN adresse adr ON r.adresse=adr.id - LEFT JOIN lieferschein l ON l.id = r.parameter AND r.objekt = 'lieferschein' WHERE isnull(l.id) AND r.objekt = 'lieferschein' - ) - UNION ALL - ( - SELECT r.id as rid, adr.name as kunde,'Produktion' as typ,'GELÖSCHT' as belegnr ,'GELÖSCHT' as status, a.name_de as Artikel,r.menge,p.abkuerzung as projekt,r.grund, r.id FROM lager_reserviert r LEFT JOIN artikel a ON a.id=r.artikel LEFT JOIN projekt p ON - p.id=r.projekt LEFT JOIN adresse adr ON r.adresse=adr.id - LEFT JOIN produktion l ON l.id = r.parameter AND r.objekt = 'produktion' WHERE isnull(l.id) AND r.objekt = 'produktion' - ) - UNION ALL - ( - SELECT r.id as rid, adr.name as kunde,r.objekt as typ,'' as belegnr , '' as status, a.name_de as Artikel,r.menge,p.abkuerzung as projekt,r.grund, r.id FROM lager_reserviert r LEFT JOIN artikel a ON a.id=r.artikel LEFT JOIN projekt p ON - p.id=r.projekt LEFT JOIN adresse adr ON r.adresse=adr.id WHERE r.objekt <> 'auftrag' AND r.objekt <> 'lieferschein' AND r.objekt <> 'produktion' - ) - - ) t - - "; - - - //$count = "select count(distinct ms.datum) FROM mitarbeiterzeiterfassung_sollstunden ms where ms.adresse = '$adresse' AND ms.datum >= '$von' AND ms.datum <= '$bis'"; - $count = "SELECT count(r.id) FROM lager_reserviert r"; - - break; - - - case "lager_nachschublager": - $allowed['lager'] = array('nachschublager'); - - $heading = array('Nummer','Name','Nachschublager','Nachschublagerplatz','Lagerbestand','Menge','Lagervorschlag', 'Lagerbestand','Menge Lager (Min)','Menge Lager (Max)', 'Umzulagernde Menge', ''); - $width = array('10%','20%','5%','5%','10%','10%','10%', '10%', '10%', '10%','10%','1%'); - $findcols = array('a.nummer', 'a.name_de','l.bezeichnung', 'lp.kurzbezeichnung', 's.amount','vorschlag.needed', 'lp2.kurzbezeichnung', 'vorschlag.amount', 's.amount','vorschlag.storage_min_amount','vorschlag.storage_max_amount', 's.id'); - $searchsql = array('a.nummer', 'a.name_de','l.bezeichnung', 'lp.kurzbezeichnung', $app->erp->FormatMenge('s.amount'), - 'lp2.kurzbezeichnung', $app->erp->FormatMenge('vorschlag.amount'), $app->erp->FormatMenge('s.amount_to_relocate')); - - $defaultorder = 1; - $defaultorderdesc = 0; - - - $alignright = array(5,6,7,8,9,10,11); - $numbercols = array(4,5,6,7,8, 9,10); - - - $where = "s.is_replenishment = 1 AND vorschlag.is_replenishment = 0"; - - $sql = "SELECT SQL_CALC_FOUND_ROWS s.id, a.nummer, a.name_de, l.bezeichnung, lp.kurzbezeichnung, - ".$app->erp->FormatMenge('s.amount').", - ".$app->erp->FormatMenge('vorschlag.needed').", - lp2.kurzbezeichnung, - ".$app->erp->FormatMenge('vorschlag.amount').", - IF(vorschlag.storage_min_amount > 0, ".$app->erp->FormatMenge('vorschlag.storage_min_amount').",'-'), - IF(vorschlag.storage_max_amount > 0,".$app->erp->FormatMenge('vorschlag.storage_max_amount').",'-'), - ".$app->erp->FormatMenge( - 'IF( - vorschlag.storage_min_amount > 0 AND vorschlag.storage_min_amount >s.amount_to_relocate, - IF(s.amount > vorschlag.storage_min_amount, vorschlag.storage_min_amount,s.amount), - IF(s.amount >s.amount_to_relocate, s.amount_to_relocate,s.amount) - )').", s.id - FROM stock_replenishment_list s - LEFT JOIN artikel a ON s.article_id = a.id - JOIN lager_platz lp ON lp.id = s.storage_area_id - LEFT JOIN lager l ON l.id=lp.lager - LEFT JOIN stock_replenishment_list vorschlag ON s.article_id = vorschlag.article_id - JOIN lager_platz lp2 ON lp2.id = vorschlag.storage_area_id"; - - break; - } - - $erg = []; - - foreach($erlaubtevars as $k => $v) - { - if(isset($$v)) - { - $erg[$v] = $$v; - } - } - return $erg; - } - - /** - * Lager constructor. - * - * @param Application $app - * @param bool $intern - */ - public function __construct($app, $intern = false) { - - $this->app = $app; - if($intern) { - return; - } - $this->app->ActionHandlerInit($this); - $this->app->ActionHandler("create", "LagerCreate"); - $this->app->ActionHandler("edit", "LagerEdit"); - $this->app->ActionHandler("list", "LagerList"); - $this->app->ActionHandler("platz", "LagerPlatz"); - //$this->app->ActionHandler("bewegung", "LagerBewegung"); - $this->app->ActionHandler("bewegung", "LagerBewegungPopup"); - $this->app->ActionHandler("allebewegungen", "LagerAlleBewegungen"); - $this->app->ActionHandler("inhalt", "LagerInhalt"); - $this->app->ActionHandler("pdf", "LagerPDF"); - $this->app->ActionHandler("bestand", "LagerBestand"); - $this->app->ActionHandler("wert", "LagerWert"); - $this->app->ActionHandler("platzeditpopup", "LagerPlatzEditPopup"); - $this->app->ActionHandler("delete", "LagerDelete"); - $this->app->ActionHandler("deleteplatz", "LagerPlatzDelete"); - $this->app->ActionHandler("etiketten", "LagerEtiketten"); - $this->app->ActionHandler("etikettenlist", "LagerEtikettenlist"); - $this->app->ActionHandler("zwischenlager", "LagerZwischenlager"); - $this->app->ActionHandler("regaletiketten", "LagerRegalEtiketten"); - $this->app->ActionHandler("reservierungen", "LagerReservierungen"); - $this->app->ActionHandler("buchen", "LagerBuchen"); - $this->app->ActionHandler("buchenzwischenlager", "LagerBuchenZwischenlager"); - $this->app->ActionHandler("buchenzwischenlagerdelete", "LagerBuchenZwischenlagerDelete"); - $this->app->ActionHandler("bucheneinlagern", "LagerBuchenEinlagern"); - $this->app->ActionHandler("buchenauslagern", "LagerBuchenAuslagern"); - $this->app->ActionHandler("artikelentfernenreserviert", "LagerArtikelEntfernenReserviert"); - $this->app->ActionHandler("letztebewegungen", "LagerLetzteBewegungen"); - $this->app->ActionHandler("schnelleinlagern", "LagerSchnellEinlagern"); - - $this->app->ActionHandler("schnellumlagern", "LagerSchnellUmlagern"); - $this->app->ActionHandler("schnellauslagern", "LagerSchnellAuslagern"); - - $this->app->ActionHandler("differenzen", "LagerDifferenzen"); - $this->app->ActionHandler("differenzenlagerplatz", "LagerDifferenzenLagerplatz"); - - $this->erstes=0; - - $id = $this->app->Secure->GetGET('id'); - $nummer = $this->app->Secure->GetPOST('nummer'); - if ($nummer == '' && $id > 0) - { - $lager = $this->app->DB->Select("SELECT bezeichnung FROM lager WHERE id='$id' LIMIT 1"); - } - else - { - $lager = $nummer; - } - $woher = $this->app->Secure->GetPOST('woher'); - $action = $this->app->Secure->GetGET('action'); - $cmd = $this->app->Secure->GetGET('cmd'); - $this->app->erp->Headlines('Lager'); - if ($action === 'bucheneinlagern') - { - if ($cmd === 'zwischenlager') - { - $lager = 'Zwischenlager'; - } - else { - $lager = 'Manuelle Lageranpassung'; - } - } - $this->app->Tpl->Set('UEBERSCHRIFT', 'Lager: ' . $lager); - $this->app->ActionHandlerListen($app); - } - - public function Install() - { - $this->cleanUpInvalidStorages(); - } - - public function cleanUpInvalidStorages(): void - { - $hasStorageLocationWithEmptyNameOrStorage = $this->app->DB->Select( - "SELECT COUNT(`id`) FROM `lager_platz` WHERE (`kurzbezeichnung` = '' OR `lager` = 0) LIMIT 1" - ) > 0; - if($hasStorageLocationWithEmptyNameOrStorage) { - $this->app->DB->Delete( - "DELETE `lp` - FROM `lager_platz` AS `lp` - LEFT JOIN `lager_platz_inhalt` AS `lpi` ON lp.id = lpi.lager_platz - WHERE (lp.kurzbezeichnung = '' OR `lager` = 0) AND lpi.id IS NULL" - ); - } - $hasStorageLocationsWithZeroId = $this->app->DB->Select("SELECT COUNT(`id`) FROM `lager_platz` WHERE `id` = 0") > 0; - if($hasStorageLocationsWithZeroId) { - $this->app->DB->Delete("DELETE FROM `lager_platz` WHERE `id` = 0"); - $this->app->erp->CheckAlterTable( - "ALTER TABLE `lager_platz` ADD PRIMARY KEY (`id`)" - ); - $this->app->erp->CheckAlterTable("ALTER TABLE `lager_platz` MODIFY `id` int(11) NOT NULL AUTO_INCREMENT"); - if(!empty($this->app->DB->error())) { - $this->app->erp->repairNullIds('lager_platz', 'kurzbezeichnung'); - } - } - - $hasStoragesWithZeroId = $this->app->DB->Select("SELECT COUNT(`id`) FROM `lager` WHERE `id` = 0") > 0; - if($hasStoragesWithZeroId) { - $this->app->DB->Delete( - "DELETE `l` - FROM `lager` AS `l` - LEFT JOIN `lager_platz` AS `lp` ON l.id = lp.lager AND lp.geloescht = 0 - WHERE l.id = 0 AND lp.id IS NULL" - ); - $hasStoragesWithZeroId = $this->app->DB->Select("SELECT COUNT(`id`) FROM `lager` WHERE `id` = 0") > 0; - if(!$hasStoragesWithZeroId) { - $this->app->erp->CheckAlterTable( - "ALTER TABLE `lager` ADD PRIMARY KEY (`id`)" - ); - $this->app->erp->CheckAlterTable("ALTER TABLE `lager` MODIFY `id` int(11) NOT NULL AUTO_INCREMENT"); - if(empty($this->app->DB->error())) { - return; - } - } - $this->app->erp->repairNullIds('lager', 'bezeichnung'); - } - $this->removeDoubledNamedStorageLocations(); - $this->removeDoubledNamedStorages(); - } - - public function removeDoubledNamedStorages(): void - { - $storageWithSameName = $this->app->DB->SelectFirstCols( - "SELECT `bezeichnung` - FROM `lager` - WHERE `geloescht` = 0 OR `geloescht` IS NULL - GROUP BY `bezeichnung` - HAVING COUNT(`id`) > 1" - ); - if(empty($storageWithSameName)) { - return; - } - $nameString = implode("', '", array_map([$this->app->DB, 'real_escape_string'], $storageWithSameName)); - $storageWithSameName = $this->app->DB->SelectArr( - "SELECT l.id, l.bezeichnung, lp.lager - FROM `lager` AS `l` - LEFT JOIN ( - SELECT `lager` FROM `lager_platz` WHERE `geloescht` = 0 OR `geloescht` IS NULL GROUP BY `lager` - ) AS `lp` ON l.id = lp.lager - WHERE (l.geloescht IS NULL OR l.geloescht = 0) AND l.bezeichnung IN ('{$nameString}') - ORDER BY l.bezeichnung, lp.lager DESC" - ); - if(empty($storageWithSameName)) { - return; - } - $lastStorageName = null; - foreach($storageWithSameName as $storage) { - if($storage['bezeichnung'] !== $lastStorageName) { - $lastStorageName = $storage['bezeichnung']; - continue; - } - if(!empty($storage['lager'])) { - continue; - } - $this->app->DB->Delete("UPDATE `lager` SET `geloescht` = 1 WHERE `id` = {$storage['id']}"); - } - } - - public function removeDoubledNamedStorageLocations(): void - { - $storageLocationsWithSameName = $this->app->DB->SelectFirstCols( - "SELECT `kurzbezeichnung` - FROM `lager_platz` - WHERE `geloescht` = 0 OR `geloescht` IS NULL - GROUP BY `kurzbezeichnung` - HAVING COUNT(`id`) > 1" - ); - if(empty($storageLocationsWithSameName)) { - return; - } - $nameString = implode("', '", array_map([$this->app->DB, 'real_escape_string'], $storageLocationsWithSameName)); - $storageLocationsWithSameName = $this->app->DB->SelectArr( - "SELECT lp.id, lp.kurzbezeichnung, lpi.lager_platz - FROM `lager_platz` AS `lp` - LEFT JOIN ( - SELECT `lager_platz` FROM `lager_platz_inhalt` GROUP BY `lager_platz` - ) AS `lpi` ON lp.id = lpi.lager_platz - WHERE (lp.geloescht IS NULL OR lp.geloescht = 0) AND lp.kurzbezeichnung IN ('{$nameString}') - ORDER BY lp.kurzbezeichnung, lpi.lager_platz DESC" - ); - if(empty($storageLocationsWithSameName)) { - return; - } - $lastStorageName = null; - foreach($storageLocationsWithSameName as $storage) { - if($storage['kurzbezeichnung'] !== $lastStorageName) { - $lastStorageName = $storage['kurzbezeichnung']; - continue; - } - if(!empty($storage['lager_platz'])) { - continue; - } - $this->app->DB->Delete("UPDATE `lager_platz` SET `geloescht` = 1 WHERE `id` = {$storage['id']}"); - } - } - - - - public function LagerSchnellEinlagern() - { - $this->LagerBuchenMenu(); - $submit = $this->app->Secure->GetPOST('submit'); - $nummer = $this->app->Secure->GetPOST('nummer'); - $menge = $this->app->Secure->GetPOST('menge'); - $grundreferenz = $this->app->Secure->GetPOST('grundreferenz'); - - if($submit!="") - { - - } - - $this->app->YUI->AutoComplete('nummer','lagerartikelnummer'); - $this->app->YUI->AutoComplete('grundreferenz','lagergrund'); - $this->app->Tpl->Parse('TAB1',"lager_schnelleinlagern.tpl"); - $this->app->Tpl->Parse('PAGE',"tabview.tpl"); - } - - - function LagerAbsolutInventur($artikel,$lager_platz = false) - { - - if ($lager_platz) { - $query = " - SELECT - menge, - referenz - FROM - lager_bewegung - WHERE - artikel='".$artikel."' - AND - eingang=1 - AND - permanenteinventur<=0 - AND - referenz LIKE 'Inventur%' - "; - - $query .= " AND lager_platz = '" . $lager_platz . "' "; - } else { - $query = " - SELECT - lb.menge, - lb.referenz - FROM - lager_bewegung lb - LEFT JOIN lager_platz l ON l.id=lb.lager_platz - WHERE - lb.artikel='".$artikel."' - AND - lb.eingang=1 - AND - lb.permanenteinventur<=0 - AND - lb.referenz LIKE 'Inventur%' - AND l.verbrauchslager!=1 - "; - } - $eingang = 0; - $ausgang = 0; - $result = $this->app->DB->SelectArr($query); - $cresult = !empty($result)?count($result):0; - for($i=0;$i<$cresult;$i++) - { - $tmp_eingang = trim(str_replace('neu:','',strstr ( $result[$i]['referenz'] , "neu:", false))); - if($tmp_eingang != $result[$i]['menge']) - { - // TODO alte Menge auf korrekte neue setzten! - $eingang += $tmp_eingang; - } else { - $eingang += $result[$i]['menge']; - } - - $pattern = '/alt:(.*?)neu:/'; - preg_match($pattern, $result[$i]['referenz'], $matches); - $tmp_ausgang = trim($matches[1]); - - if(is_numeric($tmp_ausgang)) - { - $ausgang += $tmp_ausgang; - } - } - return $eingang - $ausgang;//$this->app->DB->Select("SELECT SUM(menge) FROM lager_bewegung WHERE artikel='".$artikelarr[$i]."' AND eingang=1"); - } - - /** - * @param int $artikel - * @param bool $lager_platz - * - * @return float|null - */ - function LagerAbsolutEingang($artikel, $lager_platz = false) - { - - if ($lager_platz) { - $query = " - SELECT - SUM(menge) - FROM - lager_bewegung - WHERE - artikel='".$artikel."' - AND - eingang=1 - AND - permanenteinventur<=0 - AND - referenz - NOT LIKE 'Inventur%' - "; - $query .= " AND lager_platz = '" . $lager_platz . "' "; - } else { - $query = " - SELECT - SUM(lb.menge) - FROM - lager_bewegung lb - LEFT JOIN lager_platz l ON l.id=lb.lager_platz - WHERE - lb.artikel='".$artikel."' - AND - lb.eingang=1 - AND - lb.permanenteinventur<=0 - AND - lb.referenz - NOT LIKE 'Inventur%' - AND - l.verbrauchslager!=1 - "; - } - - return $this->app->DB->Select($query); - } - - /** - * @param int $artikel - * @param bool $lager_platz - * - * @return float|null - */ - function LagerAbsolutAusgang($artikel, $lager_platz = false) - { - if ($lager_platz) { - $query = " - SELECT - SUM(menge) - FROM - lager_bewegung - WHERE - artikel='".$artikel."' - AND - eingang=0 - AND - permanenteinventur<=0 - AND - referenz - NOT LIKE 'Inventur%' - "; - - - $query .= " AND lager_platz = '" . $lager_platz . "' "; - } else { - - $query = " - SELECT - SUM(lb.menge) - FROM - lager_bewegung lb - LEFT JOIN lager_platz l ON l.id=lb.lager_platz - WHERE - lb.artikel='".$artikel."' - AND - lb.eingang=0 - AND - lb.permanenteinventur<=0 - AND - lb.referenz - NOT LIKE 'Inventur%' - AND - l.verbrauchslager!=1 - "; - - - } - - return $this->app->DB->Select($query); - } - - public function LagerDifferenzen() - { - $this->LagerHauptmenu(); - $this->app->Tpl->Set('VERS','Enterprise'); - $this->app->Tpl->Set('MODUL','Enterprise'); - $this->app->Tpl->Parse('PAGE', "only_version.tpl"); - } - - public function LagerDifferenzenLagerplatz() { - - $this->LagerHauptmenu(); - $this->app->Tpl->Set('VERS','Enterprise'); - $this->app->Tpl->Set('MODUL','Enterprise'); - $this->app->Tpl->Parse('PAGE', "only_version.tpl"); - - } - - - public function LagerSchnellUmlagern() - { - $this->LagerBuchenMenu(); - $submit = $this->app->Secure->GetPOST('submit'); - $nummer = $this->app->Secure->GetPOST('nummer'); - $get_nummer = $this->app->Secure->GetGET('nummer'); - $menge = $this->app->Secure->GetPOST('menge'); - $grundreferenz = $this->app->Secure->GetPOST('grundreferenz'); - $ziellager = $this->app->Secure->GetPOST('ziellager'); - - if($get_nummer!=''){ - $this->app->Tpl->Set('FOCUS', 'ziellager'); - } - else{ - $this->app->Tpl->Set('FOCUS', 'nummer'); - } - - - $lager_platz = $this->app->DB->Select("SELECT id FROM lager_platz WHERE kurzbezeichnung='$ziellager' AND kurzbezeichnung!='' LIMIT 1"); - if($lager_platz<=0 && $ziellager > 0) - { - $lager_platz = $this->app->DB->Select("SELECT id FROM lager_platz WHERE id='$ziellager' LIMIT 1"); - $ziellager = $this->app->DB->Select("SELECT kurzbezeichnung FROM lager_platz WHERE id='$lager_platz' LIMIT 1"); - } - - if($grundreferenz!='') { - $this->app->User->SetParameter('lager_schnellumlagern_grund',$grundreferenz); - } - if($ziellager!='') { - $this->app->User->SetParameter('lager_schnellumlagern_ziellager',$ziellager); - } - - if($submit!='') - { - $artikelid = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer='$nummer' AND nummer!='' LIMIT 1"); - if($artikelid <=0) - $artikelid = $this->app->DB->Select("SELECT id FROM artikel WHERE ean='$nummer' AND ean!='' AND geloescht <> 1 LIMIT 1"); - if($artikelid <=0) - $artikelid = $this->app->DB->Select("SELECT id FROM artikel WHERE herstellernummer='$nummer' AND herstellernummer!='' AND geloescht <> 1 LIMIT 1"); - - $name_de = $this->app->DB->Select("SELECT CONCAT(nummer,' ',name_de) FROM artikel WHERE id='$artikelid' LIMIT 1"); - //$projekt = $this->app->DB->Select("SELECT projekt FROM artikel WHERE id='$artikelid' LIMIT 1"); - - if($artikelid > 0 && $lager_platz > 0) - { - $anzahl_artikel = $this->app->DB->Select("SELECT SUM(menge) FROM lager_platz_inhalt WHERE artikel='$artikelid'"); - if($anzahl_artikel >= $menge) - { - // auslagern bevorzugt aus lager_platz ansonsten von den anderen - $this->app->erp->LagerAutoAuslagernArtikel($artikelid,$menge,$grundreferenz); - - // einlagern lager_platz - $this->app->erp->LagerEinlagern($artikelid,$menge,$lager_platz,$projekt,$grundreferenz); - - $msg = $this->app->erp->base64_url_encode("
Der Artikel $name_de wurde $menge mal umgelagert!
"); - $this->app->Location->execute('index.php?module=lager&action=schnellumlagern&msg='.$msg); - } - if($anzahl_artikel > 0){ - $msg = $this->app->erp->base64_url_encode("
Der Artikel ist nur maximal $anzahl_artikel im Lager vorhanden! Bitte korrekte Menge angeben!
"); - } - else{ - $msg = $this->app->erp->base64_url_encode("
Der Artikel hat keinen Bestand im Lager!
"); - } - $this->app->Location->execute('index.php?module=lager&action=schnellumlagern&msg='.$msg); - } - if($artikelid<=0) - { - $msg = "
Der Artikel mit der Nummer $nummer wurde nicht gefunden!
"; - $get_nummer = ''; - } - else{ - $get_nummer = $nummer; - } - - if($lager_platz<=0) - { - $msg .= "
Das Ziellager $ziellager wurde nicht gefunden!
"; - $this->app->User->SetParameter("lager_schnellumlagern_ziellager",""); - } - $msg = $this->app->erp->base64_url_encode($msg); - $this->app->Location->execute("index.php?module=lager&action=schnellumlagern&msg=$msg&nummer=$get_nummer"); - } - $msg = $this->app->Secure->GetGET('msg'); - if($msg==''){ - $this->app->Tpl->Set('MESSAGE', '
{|Der Artikel wird wenn vorhanden aus dem Standardlager ausgelagert.|}
'); - } - - if($grundreferenz==''){ - $grundreferenz = $this->app->User->GetParameter('lager_schnellumlagern_grund'); - } - if($ziellager=='') { - $ziellager=$this->app->User->GetParameter('lager_schnellumlagern_ziellager'); - } - $this->app->Tpl->Set('GRUNDREFERENZ',$grundreferenz); - $this->app->Tpl->Set('ZIELLAGER',$ziellager); - - $this->app->Tpl->Set('NUMMER',$get_nummer); - $this->app->YUI->AutoComplete('nummer','lagerartikelnummer',1); - $this->app->YUI->AutoComplete('ziellager','lagerplatz'); - $this->app->YUI->AutoComplete('grundreferenz','lagergrund'); - $this->app->Tpl->Parse('PAGE',"lager_schnellumlagern.tpl"); - } - - - - - public function LagerSchnellAuslagern() - { - $this->LagerBuchenMenu(); - $submit = $this->app->Secure->GetPOST('submit'); - $nummer = $this->app->Secure->GetPOST('nummer'); - $menge = $this->app->Secure->GetPOST('menge'); - $grundreferenz = $this->app->Secure->GetPOST('grundreferenz'); - - if($grundreferenz!='') - { - $this->app->User->SetParameter("lager_schnellauslagern_grund",$grundreferenz); - } - - if($submit!='') - { - $artikelid = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer='$nummer' AND nummer!='' LIMIT 1"); - if($artikelid <=0) - $artikelid = $this->app->DB->Select("SELECT id FROM artikel WHERE ean='$nummer' AND ean!='' AND geloescht <> 1 LIMIT 1"); - if($artikelid <=0) - $artikelid = $this->app->DB->Select("SELECT id FROM artikel WHERE herstellernummer='$nummer' AND herstellernummer!='' AND geloescht <> 1 LIMIT 1"); - - $name_de = $this->app->DB->Select("SELECT CONCAT(nummer,' ',name_de) FROM artikel WHERE id='$artikelid' LIMIT 1"); - - if($artikelid > 0) - { - $anzahl_artikel = $this->app->DB->Select("SELECT SUM(menge) FROM lager_platz_inhalt WHERE artikel='$artikelid'"); - if($anzahl_artikel >= $menge ) - { - // auslagern bevorzugt aus lager_platz ansonsten von den anderen - $this->app->erp->LagerAutoAuslagernArtikel($artikelid,$menge,$grundreferenz); - $msg = $this->app->erp->base64_url_encode("
Der Artikel $name_de wurde $menge mal ausgelagert!
"); - $this->app->Location->execute("index.php?module=lager&action=schnellauslagern&msg=$msg"); - } - $msg = $this->app->erp->base64_url_encode("
Der Artikel ist nur maximal $anzahl_artikel im Lager vorhanden! Bitte korrekte Menge angeben!
"); - $this->app->Location->execute("index.php?module=lager&action=schnellauslagern&msg=$msg"); - } - $msg = $this->app->erp->base64_url_encode("
Der Artikel mit der Nummer $nummer wurde nicht gefunden!
"); - $this->app->Location->execute("index.php?module=lager&action=schnellauslagern&msg=$msg"); - } - $msg = $this->app->Secure->GetGET('msg'); - if($msg==''){ - $this->app->Tpl->Set('MESSAGE', '
Der Artikel wird wenn vorhanden aus dem Standardlager ausgelagert.
'); - } - - if($grundreferenz=='') - { - $grundreferenz=$this->app->User->GetParameter('lager_schnellauslagern_grund'); - } - $this->app->Tpl->Set('GRUNDREFERENZ',$grundreferenz); - - $this->app->YUI->AutoComplete('nummer','lagerartikelnummer',1); - $this->app->YUI->AutoComplete('grundreferenz','lagergrund'); - $this->app->Tpl->Parse('PAGE','lager_schnellauslagern.tpl'); - } - - public function LagerBestand() - { - $this->LagerHauptmenu(); - $this->app->erp->MenuEintrag('index.php?module=lager&action=list','zurück zur Übersicht'); - $this->app->erp->Headlines('','Bestand'); - $this->app->YUI->TableSearch('TAB1', 'lager_bestand', 'show','','',basename(__FILE__), __CLASS__); - $this->app->Tpl->Parse('PAGE','lager_bestand.tpl'); - } - - - public function LagerWert() - { - $this->LagerHauptmenu(); - $this->app->Tpl->Set('VERS','Professional'); - $this->app->Tpl->Set('MODUL','Professional'); - $this->app->Tpl->Parse('PAGE', 'only_version.tpl'); - } - - public function LagerBuchenZwischenlagerDelete() - { - $id = $this->app->Secure->GetGET('id'); - if($id > 0){ - $this->app->DB->Delete("DELETE FROM zwischenlager WHERE id='$id' LIMIT 1"); - } - $this->app->Location->execute('index.php?module=lager&action=buchenzwischenlager&top=TGFnZXI='); - } - - - public function LagerPlatzDelete() - { - $id = $this->app->Secure->GetGET('id'); - //if(is_numeric($id)) - // $this->app->DB->Delete("DELETE FROM lager WHERE id='$id' LIMIT 1"); - - $numberofarticles = $this->app->DB->Select( - sprintf( - 'SELECT id FROM lager_platz_inhalt WHERE lager_platz=%d LIMIT 1', - (int)$id - ) - ); - $lager = 0; - if($numberofarticles > 0) - { - $msg = $this->app->erp->base64_url_encode('
In diesem Lager existieren Artikel. Es können nur leere Lagerplätze bzw. Lager ohne Lagerplätze gelöscht werden!
'); - } - else { - if($id > 0){ - $lager = $this->app->DB->Select( - sprintf('SELECT lager FROM lager_platz WHERE id = %d LIMIT 1',(int)$id) - ); - $this->app->DB->Delete( - sprintf('DELETE FROM lager_platz WHERE id=%d LIMIT 1', (int)$id) - ); - $this->app->DB->Update( - sprintf('UPDATE artikel SET lager_platz=0 WHERE lager_platz = %d', (int)$id) - ); - } - $msg = $this->app->erp->base64_url_encode('
Das Regal wurde gelöscht!
'); - } - - $ref = $_SERVER['HTTP_REFERER']; - if(($pos = strpos($ref,'&msg=')) > 0) - { - $ref = substr($ref, 0, $pos); - } - if(empty($ref)) { - $ref = 'index.php?module=lager&action=platz&id='.$lager; - } - - $this->app->Location->execute($ref.'&msg='.$msg); - } - - - public function LagerDelete() - { - $id = $this->app->Secure->GetGET('id'); - - $numberofarticles = $this->app->DB->Select( - sprintf('SELECT id FROM lager_platz WHERE lager=%d LIMIT 1', (int)$id) - ); - - if($numberofarticles > 0) - { - $msg = $this->app->erp->base64_url_encode('
In diesem Lager existieren noch Lagerplätze. Es können nur leere Lager gelöscht werden!
'); - } - else { - $this->app->DB->Select(sprintf('DELETE FROM lager WHERE id=%d LIMIT 1', (int)$id)); - $msg = $this->app->erp->base64_url_encode('
Das Lager wurde gelöscht!
'); - } - - $ref = $_SERVER['HTTP_REFERER']; - if(($pos = strpos($ref,'&msg=')) > 0) { - $ref = substr($ref, 0, $pos); - } - if(empty($ref)) { - $ref = 'index.php?module=lager&action=list'; - } - $this->app->Location->execute($ref.'&msg='.$msg); - } - - - public function LagerArtikelEntfernenReserviert() { - $reservierung = $this->app->Secure->GetGET('reservierung'); - if (is_numeric($reservierung)) { - $this->app->DB->Delete("DELETE FROM lager_reserviert WHERE id='$reservierung'"); - } - $this->app->Location->execute('index.php?module=lager&action=reservierungen'); - } - - function LagerBuchen() {; - $this->LagerBuchenZwischenlager(); - } - function LagerKalkMenu() { - $this->app->erp->Headlines('Bestellvorschlag'); - if($this->app->erp->RechteVorhanden('schnellproduktion','bestellvorschlag')) { - $this->app->erp->MenuEintrag('index.php?module=schnellproduktion&action=bestellvorschlag','Produktionsartikel Bestellvorschlag'); - } - } - - - function LagerBuchenZwischenlager() { - $this->LagerBuchenMenu(); - //$this->app->Tpl->Set(TABTEXT, "Zwischenlager"); - $this->app->erp->Headlines('Zwischenlager'); - $this->app->Tpl->Set('SUBSUBHEADING', '{|EINGANG Zwischenlager Stand|} ' . date('d.m.Y')); - // easy table mit arbeitspaketen YUI als template - if($this->app->User->GetType()==='admin'){ - $delete = ""; - } - - /*$table = new EasyTable($this->app); - $table->Query("SELECT a.name_de as artikel,a.nummer as nummer,z.menge,z.vpe,z.grund, p.abkuerzung as projekt, z.id FROM zwischenlager z LEFT JOIN artikel a ON a.id=z.artikel LEFT JOIN projekt p ON - p.id=z.projekt WHERE z.richtung='eingang'"); - $table->DisplayNew('INHALT', " $delete"); - */ - $this->app->YUI->TableSearch('INHALT', 'lager_zwischenlager_eingang', 'show','','',basename(__FILE__), __CLASS__); - $this->app->Tpl->Parse('TAB1', 'rahmen70.tpl'); - $this->app->Tpl->Set('INHALT', ''); - $this->app->Tpl->Set('SUBSUBHEADING', '{|AUSGANG Zwischenlager Stand|} ' . date('d.m.Y')); - // easy table mit arbeitspaketen YUI als template - /*$table = new EasyTable($this->app); - $table->Query("SELECT a.name_de as artikel,z.menge,z.vpe,z.grund, p.abkuerzung as projekt, z.id FROM zwischenlager z LEFT JOIN artikel a ON a.id=z.artikel LEFT JOIN projekt p ON - p.id=z.projekt WHERE z.richtung='ausgang' ORDER by z.id DESC"); - $table->DisplayNew('INHALT', " $delete"); - */ - $this->app->YUI->TableSearch('INHALT', 'lager_zwischenlager_ausgang', 'show','','',basename(__FILE__), __CLASS__); - - $this->app->Tpl->Parse('TAB1', 'rahmen70.tpl'); - $this->app->Tpl->Set('AKTIV_TAB1', 'selected'); - $this->app->Tpl->Add('TAB1',''); - $this->app->Tpl->Parse('PAGE', 'tabview.tpl'); - } - - function LagerBuchenEinlagern() { - session_start(); - $this->LagerBuchenMenu(); - $this->app->erp->Headlines('Lager', 'Einlagern'); - $id = $this->app->Secure->GetGET('id'); - $cmd = $this->app->Secure->GetGET('cmd'); // vom zwischen lager! - $menge = str_replace(',','.',$this->app->Secure->GetPOST('menge')); - $submit = $this->app->Secure->GetPOST('submit'); - $back = $this->app->Secure->GetGET('back'); - $vpeid = $this->app->Secure->GetGET('vpeid'); - $chargesnmhdbemerkung = $this->app->Secure->GetPOST('chargesnmhdbemerkung'); - - $grund = $this->app->Secure->GetPOST('grund'); - $artikelid = $this->app->Secure->GetGET('artikelid'); - - $artikelbeschreibung = $this->app->DB->Select("SELECT CONCAT(nummer,' ',name_de) FROM artikel WHERE id='$artikelid' AND lagerartikel=1 LIMIT 1"); - - - if($back==='artikel' && $artikelid!='') - { - $menge_anzeige = $this->app->Secure->GetGET('menge'); - $this->app->Tpl->Set('NEINDOCHNICHTSTART',''); - } - - $this->app->YUI->AutoComplete('projekt','projektname'); - $this->app->YUI->AutoComplete('nummer','lagerartikelnummer',1); - $this->app->YUI->AutoComplete('regal','lagerplatz'); - $this->app->YUI->AutoComplete('grundreferenz','lagergrund'); - - if($cmd==='zwischenlager') - { - $this->app->Tpl->Set('MENGEREADONLY','readonly'); - $this->app->Tpl->Set('WOHERREADONLYSTART',''); - - $mhd = $this->app->DB->SelectArr("SELECT * FROM lager_mindesthaltbarkeitsdatum WHERE zwischenlagerid='$id'"); - $cmhd = !empty($mhd)?count($mhd):0; - for($i=1;$i<=$cmhd;$i++) - { - $this->app->Tpl->Add('SRNINFO',"MHD: ".$mhd[$i-1]['mhddatum'].""); - $this->app->Tpl->Add('MHDVALUE',$this->app->String->Convert($mhd[$i-1]['mhddatum'],"%3-%2-%1","%1.%2.%3")); - } - $charge = $this->app->DB->SelectArr("SELECT * FROM lager_charge WHERE zwischenlagerid='$id'"); - $ccharge = !empty($charge)?count($charge):0; - for($i=1;$i<=$ccharge;$i++) - { - $this->app->Tpl->Add('SRNINFO',"Charge: ".$charge[$i-1]['charge'].""); - } - $srn = $this->app->DB->SelectArr("SELECT * FROM lager_seriennummern WHERE zwischenlagerid='$id'"); - $csrn = !empty($srn)?count($srn):0; - for($i=1;$i<=$csrn;$i++) - { - $this->app->Tpl->Add('SRNINFO',"Seriennummer: ".$srn[$i-1]['seriennummer'].""); - } - - $this->app->Tpl->Set('SHOWCHRSTART',''); - if((!empty($mhd)?count($mhd):0) <=0) - { - $this->app->Tpl->Set('SHOWMHDSTART',''); - } - $this->app->Tpl->Set('SHOWSRNSTART',''); - } else { - $this->app->Tpl->Set('WOHERREADONLYSTART2',''); - } - - // wenn projekt angeben - if ($this->app->Secure->GetPOST('projekt') != '') - { - $projekt = $this->app->Secure->GetPOST('projekt'); - $projekt = explode(' ', $projekt); - $projekt = $projekt[0]; - if(!is_numeric($projekt)) - $projekt = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung='$projekt' LIMIT 1"); - - $_SESSION['projekt'] = $projekt; - } - - $projekt = $_SESSION['projekt']; - $regal = $this->app->Secure->GetPOST('regal'); - $frmRegal = $regal; - - $submitStorageLocationId = $this->app->Secure->GetGET('submitstoragelocationid'); - $storageLocationId = $this->app->Secure->GetGET('storagelocationid'); - $interimonconsumption = $this->app->Secure->GetGET('interimonconsumption'); - $comment = $this->app->Secure->GetGET('comment'); - $suggestedbestbeforebatch = $this->app->Secure->GetPOST('suggestedbestbeforebatch'); - if(empty($suggestedbestbeforebatch)) { - $suggestedbestbeforebatch = $this->app->Secure->GetGET('suggestedbestbeforebatch'); - } - - $this->app->Tpl->Set('SUGGESTEDBATCHBEFORE', $suggestedbestbeforebatch); - $regal_id = 0; - if((!empty($submitStorageLocationId) || !empty($storageLocationId)) && empty($submit) && empty($regal)) { - $submit = !empty($submitStorageLocationId); - $regal_id = !empty($submitStorageLocationId)?$submitStorageLocationId:$storageLocationId; - if(empty($grund)) { - $grund = $comment; - } - $regal = $this->app->DB->Select( - sprintf( - 'SELECT kurzbezeichnung FROM lager_platz WHERE id = %d LIMIT 1', - $regal_id - ) - ); - $frmRegal = $regal; - } - - - if((String)$regal!=='') { - $regal_id = $this->app->DB->Select("SELECT id FROM lager_platz WHERE kurzbezeichnung='$regal' LIMIT 1"); - } - - if(is_numeric($regal_id)){ - $regal = $regal_id; - } - - $nummer = $this->app->Secure->GetPOST('nummer'); - //$nummer = explode(' ', $nummer); - //$nummer = $nummer[0]; - - if ((String)$nummer === '' && $cmd !== 'zwischenlager' && $artikelid=='') { - $this->app->Tpl->Set('MSGARTIKEL', "
{|Jetzt Artikel abscannen!|}"); - $this->app->Tpl->Set('ARTIKELSTYLE', "style=\"border: 2px solid red;width:200px;\""); - } - - $woher = $this->app->Secure->GetPOST('woher'); - $zwischenlagerid = $this->app->Secure->GetPOST('zwischenlager'); - $menge = str_replace(',','.',$this->app->Secure->GetPOST('menge')); - - $grundreferenz = $this->app->Secure->GetPOST('grundreferenz'); - // hier nur rein wenn artikel lager und projekt sinn machen sonst - //message ausgeben und artikel wirklich aus zwischenlager - $alles_komplett = 0; - if ($woher === 'Zwischenlager' && $zwischenlagerid <= 0) { - $grund.= "
  • Artikel kommt nicht aus Zwischenlager!
  • "; - $alles_komplett++; - } - - - $artikel_tmp = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer='$nummer' AND nummer!='' AND geloescht!=1 AND lagerartikel=1 LIMIT 1"); - $ean = $this->app->DB->Select("SELECT id FROM artikel WHERE ean='$nummer' AND ean!='' AND geloescht!=1 AND lagerartikel=1 LIMIT 1"); - if($artikel_tmp <=0 && $ean > 0) - { - $artikel_tmp = $ean; - $nummer = $this->app->DB->Select("SELECT nummer FROM artikel WHERE id='$ean' AND lagerartikel=1 LIMIT 1"); - } - $artikelcheck = $this->app->DB->Select("SELECT id FROM artikel WHERE id='$artikel_tmp' AND lagerartikel=1 LIMIT 1"); - - $artikel_quickcheck = 0; - if ($submit !='' && ($artikelcheck != $artikel_tmp || $artikel_tmp == '' || $artikel_tmp == 0)) { - $grund.= "
  • Artikel-Nummer gibt es nicht!
  • "; - $alles_komplett++; - $artikel_quickcheck = 1; - } - - // gibts regal - $regalcheck = $this->app->DB->Select("SELECT id FROM lager_platz WHERE id='$regal' LIMIT 1"); - if ($regalcheck != $regal || $regal == '' || $regal == 0) { - $grund.= "
  • Regal gibt es nicht!
  • "; - $alles_komplett++; - } - - if ($alles_komplett > 0 && $regal != '') { - $this->app->Tpl->Set('MESSAGELAGER', "
    Artikel wurde nicht gebucht! Grund:
    "); - } else { - if ($artikel_quickcheck == 1 && (String)$nummer !== '') { - $this->app->Tpl->Set('MESSAGELAGER', "
    Achtung! Artikelnummer - gibt es nicht, oder der Artikel ist kein Lagerartikel!
    "); - $nummer =""; - } - } - if ((String)$nummer === '' && $cmd == '' && $woher == '') { - $_SESSION['woher'] = 'Manuelle Lageranpassung'; - } - - $artArr = $this->app->DB->SelectRow( - sprintf( - 'SELECT chargenverwaltung,mindesthaltbarkeitsdatum, seriennummern - FROM artikel - WHERE id=%d LIMIT 1', - (int)$artikel_tmp - ) - ); - $chargenverwaltung= $artArr['chargenverwaltung']; - $mindesthaltbarkeitsdatum = $artArr['mindesthaltbarkeitsdatum']; - $suggestedbatch = ''; - $suggestedbestbefore = ''; - if($mindesthaltbarkeitsdatum && $chargenverwaltung) { - $suggestedbestbefore = substr($suggestedbestbeforebatch,0,10); - if(strpos($suggestedbestbefore,'-')!== false) { - $suggestedbestbefore = $this->app->String->Convert($suggestedbestbefore,'%3-%2-%1','%1.%2.%3'); - } - $suggestedbatch = ltrim(substr($suggestedbestbeforebatch,10),'-'); - } - elseif($mindesthaltbarkeitsdatum) { - $suggestedbestbefore = $suggestedbestbeforebatch; - } - elseif($chargenverwaltung) { - $suggestedbatch = $suggestedbestbeforebatch; - } - - - $seriennummern = $artArr['seriennummern']; - if($seriennummern != '' && $seriennummern !== 'keine') { - $menge = (int)$menge; - } - // pruefen einlagern - - $error = 0; - // Pflichtfelder pruefen - $checkmhd = $this->app->String->Convert($this->app->Secure->GetPOST('mhd'),'%1.%2.%3','%3-%2-%1'); - if($mindesthaltbarkeitsdatum=='1' && !$this->app->erp->CheckDateValidate($checkmhd)) { - $error++; - } - - if(($chargenverwaltung=='2' || $chargenverwaltung=="1") && $this->app->Secure->GetPOST('charge')=='' && $zwischenlagerid <=0) { - $error++; - } - if( ($seriennummern !=='keine' && $seriennummern !=='vomprodukt' && $seriennummern !=='eigene' && $seriennummern!='') && $cmd!=='zwischenlager') { - $tmpcheck = $this->app->Secure->GetPOST("seriennummern"); - for($checkser=0;$checkser < $menge; $checkser++) { - if($tmpcheck[$checkser]==''){ - $error++; - } - } - } - - if($submit!='' && $error > 0) { - $alles_komplett++; - //$this->app->Tpl->Add('MESSAGE',"
    Achtung! Bitte alle Pflichtfelder (Regal, MHD, Charge, Seriennummer) ausfüllen!
    "); - } - - if ($alles_komplett == 0 && $regal != '') { - $artikel = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer='$nummer' AND geloescht!=1 AND lagerartikel=1 LIMIT 1"); - $name = $this->app->DB->Select("SELECT name_de FROM artikel WHERE id='$artikel' AND geloescht!=1 AND lagerartikel=1 LIMIT 1"); - $einheit = $this->app->DB->Select("SELECT einheit FROM artikel WHERE id='$artikel' AND geloescht!=1 AND lagerartikel=1 LIMIT 1"); - // pruefe ob es einen ek fuers projekt gibt sonst meckern!!! - //echo "buchen entweder aus zwischenlager, prpoduktion oder so"; - if ($woher === 'Zwischenlager') { - $this->app->erp->LagerEinlagerVomZwischenlager($zwischenlagerid, $menge, $regal, $projekt,$grundreferenz); - - $gesamt = $this->app->DB->Select("SELECT SUM(menge) FROM lager_platz_inhalt WHERE artikel='$artikel' AND lager_platz='$regal'"); - $gesamt_alle = $this->app->DB->Select("SELECT SUM(menge) FROM lager_platz_inhalt WHERE artikel='$artikel'"); - if(is_float($menge) || is_numeric($menge)) - { - $msg = $this->app->erp->base64_url_encode("
    Der Artikel $name wurde $menge mal eingelagert. Anzahl Regal: ".(float)$gesamt." $einheit Anzahl Komplettbestand alle Regale: ".(float)$gesamt_alle." $einheit
    "); - } else { - $msg = $this->app->erp->base64_url_encode("
    Fehler: Unbekannte oder falsche Menge: $menge bei Artikel \"$name\". Der Artikel wurde nicht eingelagert!
    "); - } - - $this->app->Location->execute('index.php?module=lager&action=buchenzwischenlager&msg='.$msg); - } - if ($woher === 'Manuelle Lageranpassung'){ - $_SESSION['projekt'] = $projekt; - - $this->app->erp->LagerEinlagernDifferenz($artikel, $menge, $regal, $projekt,$grundreferenz,"",(int)$this->app->Secure->GetGET('vpeid')); - - //$this->app->erp->LogFile("ETIKETT1 A $artikel M $menge R $regal"); //BENE - //$data['lager_platz_name'] = $this->app->DB->Select("SELECT kurzbezeichnung FROM lager_platz WHERE id='$regal'"); - //$this->app->erp->EtikettenDrucker("artikel_klein",1,'artikel',$artikel,$data); - - $gesamt = $this->app->DB->Select("SELECT SUM(menge) FROM lager_platz_inhalt WHERE artikel='$artikel' AND lager_platz='$regal'"); - $gesamt_alle = $this->app->DB->Select("SELECT SUM(menge) FROM lager_platz_inhalt WHERE artikel='$artikel'"); - if(is_float($menge) || is_numeric($menge)) - { - $msg = $this->app->erp->base64_url_encode("
    Der Artikel $name wurde $menge mal eingelagert. Anzahl Regal: ".(float)$gesamt." $einheit Anzahl Komplettbestand alle Regale: ".(float)$gesamt_alle." $einheit
    "); - } - else { - $msg = $this->app->erp->base64_url_encode("
    Fehler: Unbekannte oder falsche Menge: $menge bei Artikel \"$name\". Der Artikel wurde nicht eingelagert!
    "); - } - - // Mindesthaltbarkeitsdatum buchen - $chargemindest = $this->app->Secure->GetPOST('charge'); - $isInterim = $interimonconsumption && $this->app->DB->Select( - sprintf( - 'SELECT id FROM lager_platz WHERE id = %d AND verbrauchslager = 1', - (int)$regal - ) - ); - if($mindesthaltbarkeitsdatum > 0) { - $mhd = $this->app->String->Convert($this->app->Secure->GetPOST('mhd'),'%1.%2.%3','%3-%2-%1'); - $this->app->erp->AddMindesthaltbarkeitsdatumLagerOhneBewegung($artikel,$menge,$regal,$mhd,$chargemindest,'','','',trim($chargesnmhdbemerkung.' '.$grundreferenz),0,$isInterim); - } - - if($chargenverwaltung > 0) { - $datum = date('Y-m-d'); - $this->app->erp->AddChargeLagerOhneBewegung($artikel,$menge,$regal,$datum,$chargemindest,$chargesnmhdbemerkung,0,'',0,$isInterim); - } - - //Seriennummern buchen - $tmpcheck = $this->app->Secure->GetPOST('seriennummern'); - - - if($artikelid!=''){ - $this->app->Location->execute('index.php?module=artikel&action=lager&id='.$artikelid.($msg!=""?"&msg=".$msg:"")); - } - - $this->app->Location->execute('index.php?module=lager&action=bucheneinlagern&msg='.$msg); - } - // wenn von zwischenlager dann header location nach zwischenlager - // sonst einlagern - } - - // kommt direkt vom zwischenlager - if ($cmd === 'zwischenlager') { - $_SESSION['woher'] = 'Zwischenlager'; - $zwischenlagerArr = $this->app->DB->SelectRow("SELECT artikel,projekt,menge,vpe FROM zwischenlager WHERE id='$id' LIMIT 1"); - $projekt = $zwischenlagerArr['projekt']; - $menge = $zwischenlagerArr['menge']; - $artikel = $zwischenlagerArr['artikel']; - $artikelArr = $this->app->DB->SelectRow("SELECT nummer,name_de, lager_platz,standardbild FROM artikel WHERE id='$artikel' LIMIT 1"); - $nummer = $artikelArr['nummer']; - $name_de = $artikelArr['name_de']; - $lagerplatz = $artikelArr['lager_platz']; - $lagerbezeichnung = $this->app->DB->Select("SELECT kurzbezeichnung FROM lager_platz WHERE id='$lagerplatz' LIMIT 1"); - $vpe = $zwischenlagerArr['vpe']; - if ($projekt == '' || $projekt == 0) { - $projekt = 1; - } // default projekt - $standardbild = $artikelArr['standardbild']; - if ($standardbild == '') { - $standardbild = $this->app->DB->Select("SELECT datei FROM datei_stichwoerter WHERE subjekt='Shopbild' AND objekt='Artikel' AND parameter='$artikel' LIMIT 1"); - } - $this->app->Tpl->Add('ZWISCHENLAGERINFO', "Bezeichnung:$name_de"); - if ($standardbild > 0) { - $this->app->Tpl->Add('ZWISCHENLAGERINFO', "Bild:"); - } - - if($lagerbezeichnung!='') - { - $this->app->Tpl->Add('ZWISCHENLAGERINFO', "
    Regalvorschlag:$lagerbezeichnung"); - } else { - $lagermeist = $this->app->DB->SelectRow("SELECT lager_platz, SUM(menge) FROM lager_platz_inhalt WHERE artikel='$artikel' GROUP BY lager_platz ORDER by 2 DESC LIMIT 1"); - $lagerplatz = $lagermeist['lager_platz']; - $lagerbezeichnung = $this->app->DB->Select("SELECT kurzbezeichnung FROM lager_platz WHERE id='{$lagermeist['lager_platz']}' LIMIT 1"); - //$lagerplatz = $this->app->DB->Select("SELECT lager_platz FROM artikel WHERE id='$artikel' LIMIT 1"); - //$lagerbezeichnung = $this->app->DB->Select("SELECT kurzbezeichnung FROM lager_platz WHERE id='$lagerplatz' LIMIT 1"); - - if ($lagerplatz == '' || $lagerplatz == 0) { - $lagerbezeichnung = 'Regal frei wählen'; - } - - $this->app->Tpl->Add('ZWISCHENLAGERINFO', "
    Regalvorschlag:$lagerbezeichnung"); - - } - $this->app->Tpl->Add('ZWISCHENLAGERINFO', "

    Regal:


    Jetzt Regal abscannen! - "); - $this->app->Tpl->Add('ZWISCHENLAGERINFO', ''); - - - - } else { - - if (($menge == '' || $menge == 0) && $cmd!=='umlagern') { - $menge = 1; - } - - if ($this->app->Secure->GetPOST('woher') != '') { - $_SESSION['woher'] = $this->app->Secure->GetPOST('woher'); - } - - if ((String)$this->app->Secure->GetPOST('nummer') !== '' || $artikelid > 0) { - $nummer = $this->app->Secure->GetPOST('nummer'); - //$nummer = explode(' ', $nummer); - //$nummer = $nummer[0]; - - if($artikelid > 0){ - $nummer = $this->app->DB->Select("SELECT nummer FROM artikel WHERE id='$artikelid' LIMIT 1"); - $this->app->Tpl->Set('NUMMER', $nummer); - } - - $artikel = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer='$nummer' AND geloescht!=1 AND lagerartikel=1 LIMIT 1"); - - $ean = $this->app->DB->Select("SELECT id FROM artikel WHERE ean='$nummer' AND ean!='' AND geloescht!=1 AND lagerartikel=1 LIMIT 1"); - if($artikel <=0 && $ean > 0) { - $artikel = $ean; - $nummer = $this->app->DB->Select("SELECT nummer FROM artikel WHERE id='$ean' LIMIT 1"); - } - - if($artikel > 0) - { - $articleRow = $this->app->DB->SelectRow( - sprintf( - 'SELECT name_de, lager_platz, einheit FROM artikel WHERE id = %d', - $artikel - ) - ); - $name_de = $articleRow['name_de']; - $lagermeist = $this->app->DB->SelectArr("SELECT lager_platz, SUM(menge) FROM lager_platz_inhalt WHERE artikel='$artikel' GROUP BY lager_platz ORDER by 2 DESC LIMIT 1"); - $lagermeist = $this->app->DB->Select("SELECT kurzbezeichnung FROM lager_platz WHERE id='{$lagermeist[0]['lager_platz']}' LIMIT 1"); - //$name_de = $articleRow['lager_platz']; - $einheit = $articleRow['einheit']; - $lagerplatz = $articleRow['lager_platz'];// $this->app->DB->Select("SELECT lager_platz FROM artikel WHERE id='$artikel' LIMIT 1"); - $lagerbezeichnung = $this->app->DB->Select("SELECT kurzbezeichnung FROM lager_platz WHERE id='$lagerplatz' LIMIT 1"); - if ($lagerplatz == '' || $lagerplatz == 0) { - $lagerbezeichnung = 'Regal frei wählen'; - } - //$vpe = $this->app->DB->Select("SELECT vpe FROM artikel WHERE id='$id' LIMIT 1"); - $vpe = 'einzeln'; - //$projekt = $this->app->DB->Select("SELECT projekt FROM zwischenlager WHERE id='$id' LIMIT 1"); - if ($projekt == '' || $projekt == 0) { - $projekt = 1; // default projekt - } - - - if($chargenverwaltung !='2' && $chargenverwaltung !='1') - { - $this->app->Tpl->Set('SHOWCHRSTART',''); - } else { - // $this->app->YUI->DatePicker("mhd"); - $frmcharge = $this->app->Secure->GetPOST('charge'); - $this->app->Tpl->Set('CHARGEVALUE', !empty($frmcharge)?$frmcharge:$suggestedbatch); - } - - - if($mindesthaltbarkeitsdatum !='1') - { - $this->app->Tpl->Set('SHOWMHDSTART',''); - } else { - $this->app->YUI->DatePicker('mhd'); - $frmmhd = $this->app->Secure->GetPOST('mhd'); - if(empty($frmmhd)) { - $frmmhd = $suggestedbestbefore; - } - $this->app->Tpl->Set('MHDVALUE', $frmmhd); - } - - - if($seriennummern === 'keine' || $seriennummern ==='vomprodukt' || $seriennummern ==='eigene' || $menge <= 0 || $seriennummern=='') - { - $this->app->Tpl->Set('SHOWSRNSTART',''); - } else { - // Generator felder fuer seriennummern - $this->app->Tpl->Add('SERIENNUMMERN',''); - $tmp = $this->app->Secure->GetPOST("seriennummern"); - for($ij=1;$ij<=$menge;$ij++) - { - $value = $tmp[$ij-1]; - $this->app->Tpl->Add('SERIENNUMMERN',""); - $this->app->Tpl->Add('SERIENNUMMERNENTERJUMP', "document.getElementById('seriennummern_$ij').addEventListener('keypress', function(event) {if (event.keyCode == 13) {event.preventDefault();document.getElementById(".($ij < $menge?"'seriennummern_".($ij+1)."'":"'projekt'").").focus()}});"); - } - $this->app->Tpl->Add('SERIENNUMMERN','
    Nr.{|Seriennummer|}
    $ij
    '); - } - - $standardbild = $this->app->erp->GetArtikelStandardbild($artikel,true); - - if ($standardbild > 0) - $this->app->Tpl->Set('STANDARDBILD', "{|Bild|}:"); - - if(trim($einheit) != ''){ - $name_de .= " (Einheit: ".$einheit.")"; - } - - $this->app->Tpl->Set('NAMEDE',$name_de); - if($lagermeist!="" || $lagermeist!=0){ - $this->app->Tpl->Set('LAGERMEIST',"$lagermeist ({|aktuell am meisten im Lager|})"); - if($lagerbezeichnung!='' && $lagerbezeichnung!=='Regal frei wählen') - $this->app->Tpl->Add('LAGERMEIST',"
    $lagerbezeichnung ({|Standardlager|})"); - } else { - $this->app->Tpl->Set('LAGERBEZEICHNUNG',"$lagerbezeichnung"); - - } - - $this->app->Tpl->Set('REGALVALUE',$frmRegal); - - $this->app->Tpl->Parse('ZWISCHENLAGERINFO', 'lager_regal.tpl'); - } else { - - //falsche artikelnummer - $nummer = ''; - $this->app->Tpl->Set('MSGARTIKEL', '
    {|Jetzt Artikel abscannen!|}'); - $this->app->Tpl->Set('ARTIKELSTYLE', 'style="border: 2px solid red"'); - $this->app->Tpl->Set('ZWISCHENLAGERINFO', ''); - $this->app->Tpl->Set('SHOWCHRSTART',''); - - $this->app->Tpl->Set('SHOWMHDSTART',''); - $this->app->Tpl->Set('SHOWSRNSTART',''); - } - } else { - $this->app->Tpl->Set('ZWISCHENLAGERINFO', ''); - if($artikel <=0) - { - $this->app->Tpl->Set('SHOWCHRSTART',''); - $this->app->Tpl->Set('SHOWMHDSTART',''); - $this->app->Tpl->Set('SHOWSRNSTART',''); - } - } - } - $this->app->Tpl->Set('NAME', $name_de); - if (!isset($_SESSION['woher']) || $_SESSION['woher'] == '') { - $_SESSION['woher'] = 'Manuelle Lageranpassung'; - } - if ($_SESSION['woher'] === "Zwischenlager") { - $this->app->Tpl->Set('ZWISCHENLAGER', "selected"); - } - if ($_SESSION['woher'] === "Produktion") { - $this->app->Tpl->Set('PRODUKTION', "selected"); - } - if ($_SESSION['woher'] === "Manuelle Lageranpassung") { - $this->app->Tpl->Set('DIFFERENZ', "selected"); - } - if ($_SESSION['woher'] === "Umlagern") { - $this->app->Tpl->Set('UMLAGERN', "selected"); - } - $projekt = $_SESSION['projekt']; - - if($cmd==='umlagern' && $this->app->Secure->GetPOST('menge')=='') - $menge = (float)str_replace(',','.',$this->app->Secure->GetGET('menge')); - - if($cmd==='umlagern' && $this->app->Secure->GetPOST('grund')=='') - $grundreferenz = $this->app->erp->base64_url_decode($this->app->Secure->GetGET('grund')); - - if(empty($grundreferenz) && !empty($comment)) - { - $grundreferenz = $comment; - } - - // aus zwischenlager - $menge_get = str_replace(',','.',$this->app->Secure->GetGET('menge')); - if($menge_get > 0) { - $menge = $menge_get; - } - - - $this->app->Tpl->Set('MENGE', $this->app->erp->ReplaceMenge(0,(String)$menge,0)); - $this->app->Tpl->Set('GRUNDREFERENZ', $grundreferenz); - $this->app->Tpl->Set('NUMMER', $nummer); - - $this->app->Tpl->Set('VPE', $vpe); - $pr_name = $this->app->DB->Select("SELECT CONCAT(abkuerzung) FROM projekt WHERE id='$projekt' LIMIT 1"); - $this->app->Tpl->Set('PROJEKT', $pr_name);//$this->app->erp->GetProjektSelect($projekt, &$color_selected)); - //$this->app->Tpl->Set(TABTEXT, "Einlagern"); - - $this->app->Tpl->Parse('TAB1', "einlagern.tpl"); - $this->app->Tpl->Parse('PAGE', 'tabview.tpl'); - } - - function LagerBuchenAuslagern() { - $this->LagerBuchenMenu(); - $cmd = $this->app->Secure->GetGET('cmd'); - $action = $this->app->Secure->GetGET('action'); - $error = 0; - - $this->app->Tpl->Set('CMD',$cmd); - $this->app->Tpl->Set('ACTION',$action); - - - if($this->app->erp->Version()==='stock') - { - $this->app->Tpl->Set('STARTDISABLESTOCK', ''); - } - - - session_start(); - if($cmd==='umlagern') { - //$this->app->Tpl->Set(TABTEXT, "Auslagern"); - - $this->app->Tpl->Set('STARTNICHTUMLAGERN', ''); - - } - else { - //$this->app->Tpl->Set(TABTEXT, "Auslagern"); - $this->app->Tpl->Set('STARTUMLAGERN', ''); - } - - $this->app->Tpl->Set('FOCUSFIELD','document.getElementById("nummer").focus();'); - $this->app->erp->Headlines('Lager', 'Auslagern'); - // checken ob die daten passen - $nummer = $this->app->Secure->GetPOST('nummer'); - $grund = $this->app->Secure->GetPOST('grund'); - $grundreferenz = $this->app->Secure->GetPOST('grundreferenz'); - $adresse = $this->app->Secure->GetPOST('adresse'); - $projekt = $this->app->Secure->GetPOST('projekt'); - $menge = str_replace(',','.',$this->app->Secure->GetPOST('menge')); - $submit = $this->app->Secure->GetPOST('submit'); - $artikelid = $this->app->Secure->GetGET('artikelid'); - $regal = $this->app->Secure->GetPOST('regal'); - $regalneu = $this->app->Secure->GetPOST("regalneu"); - $comment = $this->app->Secure->GetGET('comment'); - $amount = $this->app->Secure->GetGET('amount'); - if(empty($amount)) { - $amount = $this->app->Secure->GetGET('menge'); - } - if(empty($grundreferenz)) { - $grundreferenz = $comment; - } - $frmRegal = $regal; - $allowSubmit = true; - $submitStorageLocationId = $this->app->Secure->GetGET('submitstoragelocationid'); - $interimonconsumption = $this->app->Secure->GetGET('interimonconsumption'); - $storageLocationId = $this->app->Secure->GetGET('storagelocationid'); - $regal_id = 0; - if((!empty($submitStorageLocationId) || !empty($storageLocationId)) && empty($submit) && empty($regal)) { - $submit = !empty($submitStorageLocationId)?'1':''; - if(!$submit && empty($this->app->Secure->POST)) { - $allowSubmit = false; - } - $regal_id = !empty($submitStorageLocationId)?$submitStorageLocationId:$storageLocationId; - $regal = $this->app->DB->Select( - sprintf( - 'SELECT kurzbezeichnung FROM lager_platz WHERE id = %d LIMIT 1', - $regal_id - ) - ); - $frmRegal = $regal; - } - - $frmMenge = $menge; - if ($menge == '' || $menge == '0') { - $menge = 1; - } - //session_close(); - - - if($projekt!=''){ - $_SESSION['projekt'] = $projekt; - } - - $projekt= $_SESSION['projekt']; - - // $nummer = explode(' ', $nummer); - // $nummer = $nummer[0]; - - if ($this->app->Secure->GetPOST('nummer') != '' || $artikelid > 0) { - $nummer = $this->app->Secure->GetPOST('nummer'); - //$nummer = explode(' ', $nummer); - //$nummer = $nummer[0]; - - if($artikelid > 0){ - $nummer = $this->app->DB->Select("SELECT nummer FROM artikel WHERE id='$artikelid' AND lagerartikel=1 LIMIT 1"); - $checkartikel = $this->app->DB->Select("SELECT id FROM artikel WHERE id='$artikelid' AND lagerartikel=1 LIMIT 1"); - $artikel = $artikelid; - if($allowSubmit) { - $submit='1'; - } - $this->app->Tpl->Set('NUMMER', $nummer); - } - } - - $projekt = explode(' ', $projekt); - $projekt = $projekt[0]; - - if(empty($regal_id)){ - $regal_id = $this->app->DB->Select("SELECT id FROM lager_platz WHERE kurzbezeichnung='$regal' AND kurzbezeichnung!='' LIMIT 1"); - } - if(is_numeric($regal_id)) - $regal = $regal_id; - - $regalneu_id = $this->app->DB->Select("SELECT id FROM lager_platz WHERE kurzbezeichnung='$regalneu' AND kurzbezeichnung!='' LIMIT 1"); - if(is_numeric($regalneu_id)) - $regalneu = $regalneu_id; - - if ($submit != '') { - //projekt pruefen - - $checkprojekt = $this->app->DB->Select("SELECT abkuerzung FROM projekt WHERE abkuerzung='$projekt' LIMIT 1"); - $projektid = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung='$projekt' LIMIT 1"); - if ($projekt == "" || $checkprojekt != $projekt) { - //$error++; - //$this->app->Tpl->Set(MSGPROJEKT,"Projekt gibt es nicht!"); - $projektid = $this->app->DB->Select("SELECT standardprojekt FROM firma WHERE id='" . $this->app->User->GetFirma() . "' LIMIT 1"); - } - - //adresse pruefen - $adressearray = explode(' ', $adresse); - $checkadresse = $this->app->DB->Select("SELECT id FROM adresse WHERE id='{$adressearray[0]}' LIMIT 1"); - $checkname = $this->app->DB->Select("SELECT name FROM adresse WHERE id='{$adressearray[0]}' LIMIT 1"); - - /* - if (!is_numeric($adressearray[0]) || $adressearray[0] != $checkadresse) { - $error++; - $this->app->Tpl->Set('MESSAGE', "
    Bitte eine gültige Adresse angeben!
    "); - } - */ - - if (!is_numeric($menge) || $menge == 0) { - $error++; - $this->app->Tpl->Set('MSGMENGE', "Wert ist keine Zahl oder Null."); - } - $ean = $this->app->DB->Select("SELECT id FROM artikel WHERE ean='$nummer' AND ean!='' AND geloescht!=1 AND lagerartikel=1 LIMIT 1"); - $artikel_tmp = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer='$nummer' AND geloescht!=1 AND lagerartikel=1 LIMIT 1"); - if($artikel_tmp <=0 && $ean > 0) - { - $artikel_tmp = $ean; - $nummer = $this->app->DB->Select("SELECT nummer FROM artikel WHERE id='$ean' LIMIT 1"); - } - - $checkartikel = $this->app->DB->Select("SELECT nummer FROM artikel WHERE nummer='{$nummer}' AND geloescht!=1 AND lagerartikel=1 LIMIT 1"); - $artikel = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer='{$nummer}' AND geloescht!=1 AND lagerartikel=1 LIMIT 1"); - - $name_de = $this->app->DB->Select("SELECT name_de FROM artikel WHERE nummer='{$nummer}' AND geloescht!=1 AND lagerartikel=1 LIMIT 1"); - $einheit = $this->app->DB->Select("SELECT einheit FROM artikel WHERE nummer='{$nummer}' AND geloescht!=1 AND lagerartikel=1 LIMIT 1"); - $seriennummer = $this->app->DB->Select("SELECT seriennummer FROM artikel WHERE nummer='{$nummer}' AND geloescht!=1 AND lagerartikel=1 LIMIT 1"); - if($seriennummer === 'keine') { - $seriennummer = ''; - } - - if ($nummer != $checkartikel && ($nummer!=''||$nummer!=0)) { - $error++; - $this->app->Tpl->Set('MESSAGE', "
    {|Diese Artikelnummer gibt es nicht, oder der Artikel ist kein Lagerartikel!|}
    "); - $nummer = ''; - - } - //z.B. es liegen 1 1 5 und man will 6 haben - $checkregal = $this->app->DB->Select("SELECT id FROM lager_platz WHERE id='$regal' LIMIT 1"); - $checkregalneu = $this->app->DB->Select("SELECT id FROM lager_platz WHERE id='$regalneu' LIMIT 1"); - if (($regal != '' && $checkregal == $regal) && $error == 0) { - //regal gibt schon mal liegt jetzt der artikel noch in diesem regal? - $summe = $this->app->DB->Select("SELECT SUM(menge) FROM lager_platz_inhalt WHERE lager_platz='$regal' AND artikel='$artikel'"); - if ($summe <= 0) { - $this->app->Tpl->Set('MESSAGELAGER', "
    {|Artikel gibt es in diesem Regal nicht!|}
    "); - } else if ($summe < $menge) { - $this->app->Tpl->Set('MESSAGELAGER', "
    {|Zu wenig Artikel im Regal! Bitte kleinere Menge wählen!|} ({|Summe|}: $summe)
    "); - } else { - // zeige alle in dem Lager an sortiert nach MHD - $tmpsrn = false; - $anzmhd = 0; - $anzchargen = 0; - $anzsrn = 0; - $tmpmhd = $this->app->DB->SelectArr("SELECT *, replace(trim(menge)+0,'.',',') as mhdmenge FROM lager_mindesthaltbarkeitsdatum WHERE - lager_platz='$regal' AND artikel='$artikel' ORDER by mhddatum, id"); - $tmpcharge = $this->app->DB->SelectArr("SELECT *, replace(trim(menge)+0,'.',',') as cmenge FROM lager_charge WHERE - lager_platz='$regal' AND artikel='$artikel' ORDER by charge, id"); - if($tmpmhd) { - foreach($tmpmhd as $v) { - $anzmhd += $v['menge']; - } - } - if($tmpcharge) { - foreach($tmpcharge as $v) { - $anzchargen += $v['menge']; - } - } - - $this->app->Tpl->Set('ANZSRN', $anzsrn); - $this->app->Tpl->Set('ANZMHD', $anzmhd); - $this->app->Tpl->Set('ANZCHARGEN', $anzchargen); - $this->app->Tpl->Set('SUMME', $summe); - if($anzsrn > 0) { - $this->app->Tpl->Add('SRNINFO',"{|MHD|}{|Seriennummer|}{|Charge|}"); - } else if ((!empty($tmpmhd)?count($tmpmhd):0) > 0) { - $this->app->Tpl->Add('SRNINFO',"{|Mindesthalt.|}{|Charge|}"); - } else if ((!empty($tmpcharge)?count($tmpcharge):0) > 0) { - $this->app->Tpl->Add('SRNINFO',"{|Charge|}"); - } - $artikelArr = $this->app->DB->SelectRow( - sprintf( - 'SELECT seriennummern,chargenverwaltung,mindesthaltbarkeitsdatum FROM artikel WHERE id = %d LIMIT 1', - (int)$artikel - ) - ); - $check_seriennummer = $artikelArr['seriennummern']; - if($check_seriennummer !== 'keine' && $check_seriennummer != '') { - $menge = (int)$menge; - } - $check_charge = $artikelArr['chargenverwaltung']; - $check_mhd = $artikelArr['mindesthaltbarkeitsdatum']; - $regaltreffer='1'; - - if($check_seriennummer==='vomprodukteinlagern') - { - $ctmpsrn= !empty($tmpsrn)?count($tmpsrn):0; - for($y=0;$y<$ctmpsrn;$y++) - { - $regaltreffer="1"; - if($y < $menge) { - $checked='checked'; - } else { - $checked=''; - } - - if($tmpsrn[$y]['mhddatum']=='') { - $tmpsrn[$y]['mhddatum'] = ' - '; - } else { - $tmpsrn[$y]['mhddatum'] = $this->app->String->Convert($tmpsrn[$y]['mhddatum'],'%1-%2-%3','%3.%2.%1'); - } - if($tmpsrn[$y]['seriennummer']=='') { - $tmpsrn[$y]['seriennummer'] = ' - '; - } - if($tmpsrn[$y]['charge']=='') { - $tmpsrn[$y]['charge'] = ' - '; - } - - $this->app->Tpl->Add('SRNINFO'," -  $out - ".$tmpsrn[$y]['mhddatum']." - ".$tmpsrn[$y]['seriennummer']." - ".$tmpsrn[$y]['charge'].""); - } - } else if ($check_mhd=="1") - { - - $this->app->Tpl->Add("JQUERYREADY","checklagermengen();"); - $kommamodus = false; - if($menge != round($menge) || $check_seriennummer == '' || $check_seriennummer === 'keine') { - $kommamodus = true; - } - $ctmpmhd = !empty($tmpmhd)?count($tmpmhd):0; - for($y=0;$y<$ctmpmhd;$y++) - { - if($tmpmhd[$y]['menge'] != 1) { - $kommamodus = true; - } - } - if($kommamodus) - { - $tmenge = 0; - for($y=0;$y<$ctmpmhd;$y++) - { - if($tmpmhd[$y]['mhddatum']=='') { - $tmpmhd[$y]['mhddatum'] = ' - '; - } else { - $tmpmhd[$y]['mhddatum'] = $this->app->String->Convert($tmpmhd[$y]['mhddatum'],'%1-%2-%3','%3.%2.%1'); - } - if($tmpmhd[$y]['charge']=='') { - $tmpmhd[$y]['charge'] = ' - '; - } - - if($menge - $tmenge <= 0){ - $tm = 0; - }elseif($menge - $tmenge >= $tmpmhd[$y]['menge']) - { - $tm = $tmpmhd[$y]['menge']; - }elseif($menge - $tmenge < $tmpmhd[$y]['menge']){ - $tm = $menge - $tmenge; - } - $tmenge += $menge; - $this->app->Tpl->Add('SRNINFO'," - / ".$tmpmhd[$y]['mhdmenge']." $out - ".$tmpmhd[$y]['mhddatum']." - ".$tmpmhd[$y]['charge'].""); - if($y == 0)$this->app->Tpl->Set('ONCHANGEMENGE',' onchange="checklagermengen();" '); - } - }else{ - for($y=0;$y<$ctmpmhd;$y++) - { - $regaltreffer="1"; - if($y < $menge) $checked="checked"; else $checked=""; - - if($tmpmhd[$y]['mhddatum']=="") $tmpmhd[$y]['mhddatum'] = " - "; else $tmpmhd[$y]['mhddatum'] = $this->app->String->Convert($tmpmhd[$y]['mhddatum'],'%1-%2-%3','%3.%2.%1'); - if($tmpmhd[$y]['charge']=="") $tmpmhd[$y]['charge'] = " - "; - - $this->app->Tpl->Add('SRNINFO'," -  $out - ".$tmpmhd[$y]['mhddatum']." - ".$tmpmhd[$y]['charge'].""); - } - } - - } else if ($check_charge=="2" || $check_charge == "1") - { - $this->app->Tpl->Add("JQUERYREADY","checklagermengen();"); - - $kommamodus = false; - if($menge != round($menge) || $check_seriennummer == '' || $check_seriennummer === 'keine')$kommamodus = true; - $ctmpcharge = !empty($tmpcharge)?count($tmpcharge):0; - for($y=0;$y<$ctmpcharge;$y++) - { - if($tmpcharge[$y]['menge'] != 1)$kommamodus = true; - } - if($kommamodus) - { - $tmenge = 0; - for($y=0;$y<$ctmpcharge;$y++) - { - $regaltreffer="1"; - if($menge - $tmenge <= 0){ - $tm = 0; - }elseif($menge - $tmenge >= $tmpmhd[$y]['menge']) - { - $tm = $tmpmhd[$y]['menge']; - }elseif($menge - $tmenge < $tmpmhd[$y]['menge']){ - $tm = $menge - $tmenge; - } - $tmenge += $menge; - //if($y < $menge) $checked="checked"; else $checked=""; - - if($tmpcharge[$y]['charge']=="") $tmpcharge[$y]['charge'] = " - "; - - $this->app->Tpl->Add('SRNINFO'," - / ".$this->app->erp->ReplaceMenge(0,$tmpcharge[$y]['cmenge'],0)." $out - ".$tmpcharge[$y]['charge'].""); - if($y == 0)$this->app->Tpl->Set('ONCHANGEMENGE',' onchange="checklagermengen();" '); - } - - }else{ - for($y=0;$y<$ctmpcharge;$y++) - { - $regaltreffer="1"; - $checked = ''; - if($y < $menge) { - $checked='checked'; - } - - if($tmpcharge[$y]['charge']=='') $tmpcharge[$y]['charge'] = ' - '; - - $this->app->Tpl->Add('SRNINFO'," -  $out - ".$tmpcharge[$y]['charge'].""); - } - } - } - - //$regaltreffer="1"; - - $this->app->Tpl->Add('ZWISCHENLAGERINFO',""); - - $allow = 0; - - if($check_seriennummer!=="keine" || $check_charge=="2" || $check_charge=="1" || $check_mhd=="1") - { - if($this->app->Secure->GetPOST("abschluss_auslagern")=="1") - $allow=1; - } else $allow=1; - - if($cmd==='umlagern' && $regal > 0 && $checkregalneu!=$regalneu) { - $allow=0; - } - if($cmd==='umlagern' && $regalneu =='' ) { - $allow=0; - } - $this->app->erp->RunHook('lager_buchenauslagern_display1', 4, $artikel, $cmd, $regal, $regalneu); - - if($allow){ - $lager_srn_id = $this->app->Secure->GetPOST("lager_srn_id"); - - $lager_mhd_id = $this->app->Secure->GetPOST('lager_mhd_id'); - $lager_mhd_menge = $this->app->Secure->GetPOST('lager_mhd_menge'); - $lager_mhd_auswahl = $this->app->Secure->GetPOST('lager_mhd_auswahl'); - if($lager_mhd_menge) - { - $clager_mhd_id = !empty($lager_mhd_id)?count($lager_mhd_id):0; - for($q=0;$q<$clager_mhd_id;$q++){ - if($lager_mhd_auswahl[$q]) - { - $lager_mhd_auswahl[$q] = round((float)str_replace(',','.',$lager_mhd_auswahl[$q]),4); - $lager_mhd_menge[$q] = round((float)str_replace(',','.',$lager_mhd_menge[$q]),4); - if($lager_mhd_auswahl[$q] <= $lager_mhd_menge[$q]) - { - $passendArr = $this->app->DB->SelectRow("SELECT * FROM lager_mindesthaltbarkeitsdatum WHERE id='".$lager_mhd_id[$q]."' LIMIT 1"); - $passende_charge = $passendArr['charge']; - $passende_mhd = $passendArr['mhddatum']; - $passende_lager_platz = $passendArr['lager_platz']; - $isInterim = $interimonconsumption && $this->app->DB->Select( - sprintf( - 'SELECT id FROM lager_platz WHERE id = %d AND verbrauchslager = 1', - (int)$passende_lager_platz - ) - ); - $passende_artikel = $passendArr['artikel']; - $chargenmenge = $lager_mhd_auswahl[$q]; - while($chargenmenge > 0) - { - $checkcharge = $this->app->DB->SelectRow( - "SELECT * - FROM `lager_charge` - WHERE `charge`='".$passende_charge."' - AND `lager_platz`='$passende_lager_platz' AND `artikel`='$passende_artikel' - LIMIT 1" - ); - if(!$checkcharge) { - break; - } - $checkmenge = $checkcharge['menge']; - if($checkmenge <= 0) { - $this->app->DB->Delete( - sprintf( - 'DELETE FROM `lager_charge` WHERE `menge` <= 0 AND `artikel` = %d AND `lager_platz` = %d', - $passende_artikel, $passende_lager_platz - ) - ); - } - if($checkmenge <= $chargenmenge) - { - $this->app->erp->ChargeAuslagernLog($passende_artikel, $passende_lager_platz, $passende_charge, $chargenmenge['menge'],$grundreferenz!=''?$grundreferenz:'Auslagern', '', 0, $chargenmenge['id'],0,$isInterim); - $chargenmenge -= $checkmenge; - }elseif($checkmenge > $chargenmenge) - { - $this->app->erp->ChargeAuslagernLog($passende_artikel, $passende_lager_platz, $passende_charge, $chargenmenge, $grundreferenz!=''?$grundreferenz:'Auslagern', '', 0, $chargenmenge['id'],0,$isInterim); - $chargenmenge = 0; - break; - } - } - if($lager_mhd_auswahl[$q] == $lager_mhd_menge[$q]) - { - $this->app->DB->Delete("DELETE FROM lager_mindesthaltbarkeitsdatum WHERE id = '".$lager_mhd_id[$q]."' LIMIT 1"); - }else{ - $this->app->DB->Update("UPDATE lager_mindesthaltbarkeitsdatum SET menge = menge - ".$lager_mhd_auswahl[$q]." WHERE id = '".$lager_mhd_id[$q]."' LIMIT 1"); - } - - $this->app->erp->MHDLog($passende_artikel, $passende_lager_platz, 0, $passende_mhd, $lager_mhd_auswahl[$q], $grundreferenz!=''?$grundreferenz:'manuell auslagern', '', 0, $passende_charge,0, $isInterim); - if($cmd==='umlagern') { - $_passende_mhd = $passende_mhd; - $_passende_charge = $passende_charge; - $_internebemerkung = ''; - $this->app->erp->RunHook('lager_buchenauslagern_mhdlagerbewegung',7, $passende_artikel,$lager_mhd_auswahl[$q],$regalneu,$passende_mhd,$passende_charge, $regal,$_internebemerkung); - $this->app->erp->AddMindesthaltbarkeitsdatumLagerOhneBewegung($passende_artikel,$lager_mhd_auswahl[$q],$regalneu,$passende_mhd,$passende_charge,"","",0,$_internebemerkung); - $passende_mhd = $_passende_mhd; - $passende_charge = $_passende_charge; - } - } - } - } - }else{ - $clager_mhd_id = !empty($lager_mhd_id)?count($lager_mhd_id):0; - for($q=0;$q<$clager_mhd_id;$q++){ - $passendArr = $this->app->DB->SelectRow("SELECT * FROM lager_mindesthaltbarkeitsdatum WHERE id='".$lager_mhd_id[$q]."' LIMIT 1"); - $passende_charge = $passendArr['charge']; - $passende_mhd = $passendArr['mhddatum']; - $passende_lager_platz = $passendArr['lager_platz']; - $isInterim = $interimonconsumption && $this->app->DB->Select( - sprintf( - 'SELECT id FROM lager_platz WHERE id = %d AND verbrauchslager = 1', - (int)$passende_lager_platz - ) - ); - $passende_artikel = $passendArr['artikel']; - $passende_menge = $passendArr['menge']; - $this->app->DB->Delete("DELETE FROM lager_mindesthaltbarkeitsdatum WHERE id='".$lager_mhd_id[$q]."' LIMIT 1"); - $this->app->DB->Delete("DELETE FROM lager_charge WHERE charge='".$passende_charge."' - AND lager_platz='$passende_lager_platz' AND artikel='$passende_artikel' LIMIT 1"); - $this->app->erp->MHDLog($passende_artikel, $passende_lager_platz, 0, $passende_mhd,$passende_menge, 'manuell auslagern', "", 0, $passende_charge,0, $isInterim); - // umlagern3 - if($cmd==='umlagern') - { - $_passende_mhd = $passende_mhd; - $_passende_charge = $passende_charge; - $_internebemerkung = ''; - $this->app->erp->RunHook('lager_buchenauslagern_mhdlagerbewegung',7, $passende_artikel,$passende_menge,$regalneu,$passende_mhd,$passende_charge, $regal, $_internebemerkung); - $this->app->erp->AddMindesthaltbarkeitsdatumLagerOhneBewegung($passende_artikel,$passende_menge<=0?1:$passende_menge,$regalneu,$passende_mhd,$passende_charge,"","",0,$_internebemerkung); - $passende_mhd = $_passende_mhd; - $passende_charge = $_passende_charge; - } - } - } - - $lager_charge_id = $this->app->Secure->GetPOST('lager_charge_id'); - $lager_charge_menge = $this->app->Secure->GetPOST('lager_charge_menge'); - $lager_charge_auswahl = $this->app->Secure->GetPOST('lager_charge_auswahl'); - if($lager_charge_menge) - { - $clager_charge_id = !empty($lager_charge_id)?count($lager_charge_id):0; - for($q=0;$q<$clager_charge_id;$q++){ - $passende_arr = $this->app->DB->SelectRow("SELECT * FROM lager_charge WHERE id='".$lager_charge_id[$q]."' LIMIT 1"); - if($passende_arr){ - $passende_artikel = $passende_arr['artikel'];//$this->app->DB->Select("SELECT artikel FROM lager_charge WHERE id='".$lager_charge_id[$q]."' LIMIT 1"); - $passende_datum = $passende_arr['datum'];//$this->app->DB->Select("SELECT datum FROM lager_charge WHERE id='".$lager_charge_id[$q]."' LIMIT 1"); - $passende_charge = $passende_arr['charge'];//$this->app->DB->Select("SELECT charge FROM lager_charge WHERE id='".$lager_charge_id[$q]."' LIMIT 1"); - $lager_charge_menge[$q] = $passende_arr['menge']; - if($lager_charge_auswahl[$q]) - { - $lager_charge_auswahl[$q] = round((float)str_replace(',','.',$lager_charge_auswahl[$q]),4); - //$lager_charge_menge[$q] = round((float)str_replace(',','.',$lager_charge_menge[$q]),4); - if($lager_charge_auswahl[$q] <= $lager_charge_menge[$q]) - { - $isInterim = $interimonconsumption && $this->app->DB->Select( - sprintf( - 'SELECT id FROM lager_platz WHERE id = %d AND verbrauchslager = 1', - (int)$passende_arr['lager_platz'] - ) - ); - if($lager_charge_auswahl[$q] == $lager_charge_menge[$q]) - { - $this->app->erp->ChargeAuslagernLog($passende_artikel, $passende_arr['lager_platz'], $passende_charge, $lager_charge_menge[$q], $grundreferenz!=''?$grundreferenz:'Auslagern', '', 0, $passende_arr['id'],0,$isInterim); - //$this->app->DB->Delete("DELETE FROM lager_charge WHERE id='".$lager_charge_id[$q]."' LIMIT 1"); - //umlagern3 - if($cmd==='umlagern') { - $this->app->erp->AddChargeLagerOhneBewegung($passende_artikel,$lager_charge_auswahl[$q],$regalneu,$passende_datum,$passende_charge); - } - }elseif($lager_charge_auswahl[$q] < $lager_charge_menge[$q]) - { - $this->app->erp->ChargeAuslagernLog($passende_artikel, $passende_arr['lager_platz'], $passende_charge, $lager_charge_auswahl[$q], $grundreferenz!=''?$grundreferenz:'Auslagern', '', 0, $passende_arr['id'],0,$isInterim); - //$this->app->DB->Update("UPDATE lager_charge set menge = menge - ".$lager_charge_auswahl[$q]." WHERE id='".$lager_charge_id[$q]."' LIMIT 1"); - if($cmd==='umlagern') { - $this->app->erp->AddChargeLagerOhneBewegung($passende_artikel,$lager_charge_auswahl[$q],$regalneu,$passende_datum,$passende_charge); - } - } - } - } - } - } - }else{ - $clager_charge_id = !empty($lager_charge_id)?count($lager_charge_id):0; - for($q=0;$q<$clager_charge_id;$q++){ - $passende_arr = $this->app->DB->SelectRow("SELECT * FROM lager_charge WHERE id='".$lager_charge_id[$q]."' LIMIT 1"); - if($passende_arr) - { - $passende_artikel = $passende_arr['artikel'];//$this->app->DB->Select("SELECT artikel FROM lager_charge WHERE id='".$lager_charge_id[$q]."' LIMIT 1"); - $passende_datum = $passende_arr['datum'];// $this->app->DB->Select("SELECT datum FROM lager_charge WHERE id='".$lager_charge_id[$q]."' LIMIT 1"); - $passende_charge = $passende_arr['charge'];//$this->app->DB->Select("SELECT charge FROM lager_charge WHERE id='".$lager_charge_id[$q]."' LIMIT 1"); - $passende_menge = $passende_arr['menge'];//$this->app->DB->Select("SELECT menge FROM lager_charge WHERE id='".$lager_charge_id[$q]."' LIMIT 1"); - //$this->app->DB->Delete("DELETE FROM lager_charge WHERE id='".$lager_charge_id[$q]."' LIMIT 1"); - $isInterim = $interimonconsumption && $this->app->DB->Select( - sprintf( - 'SELECT id FROM lager_platz WHERE id = %d AND verbrauchslager = 1', - (int)$passende_arr['lager_platz'] - ) - ); - $this->app->erp->ChargeAuslagernLog($passende_artikel, $passende_arr['lager_platz'], $passende_charge, $passende_menge, $grundreferenz!=''?$grundreferenz:'Auslagern', '', 0, $lager_charge_id[$q],0, $isInterim); - - //umlagern3 - if($cmd==='umlagern') - { - $this->app->erp->AddChargeLagerOhneBewegung($passende_artikel,$passende_menge<=0?1:$passende_menge,$regalneu,$passende_datum,$passende_charge); - } - } - } - } - - if($seriennummer!='') { - $tmp_sn = ' SN:'.$seriennummer; - } else { - $tmp_sn = ''; - } - - $bestand = $this->app->erp->ArtikelImLager($artikel); - - if($grundreferenz!=''){ - $grundtext = "$grund für $checkname: $grundreferenz $tmp_sn"; - } else { - $grundtext = "$grund $checkname $tmp_sn"; - } - - - // umlagern3 lager_bewegung buchen - - // wenn enticklung auf mitarbeiter buchen - if ($grund === 'Entwicklungsmuster') { - $this->app->DB->Insert("INSERT INTO projekt_inventar (id,artikel,menge,bestellung, projekt, - adresse, mitarbeiter, vpe,zeit) VALUES ('','$artikel','$menge','','$projekt','$adresse','" . $this->app->User->GetName() . "', 'einzeln',NOW())"); - } - //ziehe menge ab von lager_platz_inhalt - $tmpcheck = $this->app->DB->Select("SELECT id FROM lager_platz_inhalt WHERE lager_platz='$regal' AND artikel='$artikel' AND menge >='$menge' LIMIT 1"); - $mengeimregel = $this->app->erp->ArtikelImLagerPlatz($artikel,$regal); - // wenn es ein lager mit genug gibt nimm dieses - //if ($tmpcheck > 0) { - if($mengeimregel >= $menge) - { - $summezumcheckenneu = $mengeimregel - $menge; - $this->app->erp->LagerAuslagernRegal($artikel,$regal,$menge,$projektid,$grundtext); - }elseif($mengeimregel > 0) - { - $this->app->erp->LagerAuslagernRegal($artikel,$regal,$mengeimregel,$projektid,$grundtext); - $summezumcheckenneu = 0; - } - // umlagern3 in lager_platz_inhalt buchen - if($cmd==='umlagern') - { - $this->app->erp->LagerEinlagernDifferenz($artikel,$menge,$regalneu,$projektid,"Umlagern"); - //$this->app->erp->LogFile("ETIKETT2 A $artikel M $menge R $regalneu"); //BENE - //$data['lager_platz_name'] = $this->app->DB->Select("SELECT kurzbezeichnung FROM lager_platz WHERE id='$regalneu'"); - //$this->app->erp->EtikettenDrucker("artikel_klein",1,'artikel',$artikel,$data); - } - - $name = $this->app->DB->Select("SELECT CONCAT(nummer,' ',name_de) FROM artikel WHERE id='$artikel' LIMIT 1"); - if($cmd==='umlagern') - $gesamt = $this->app->DB->Select("SELECT replace(trim(SUM(menge))+0,'.',',') FROM lager_platz_inhalt WHERE artikel='$artikel' AND lager_platz='$regalneu'"); - else - $gesamt = $this->app->DB->Select("SELECT replace(trim(SUM(menge))+0,'.',',') FROM lager_platz_inhalt WHERE artikel='$artikel' AND lager_platz='$regal'"); - $gesamt_alle = $this->app->DB->Select("SELECT replace(trim(SUM(menge))+0,'.',',') FROM lager_platz_inhalt WHERE artikel='$artikel'"); - $msg = $this->app->erp->base64_url_encode("
    Der Artikel $name wurde $menge mal ausgelagert. Anzahl Regal: ".floatval($gesamt)." $einheit Anzahl Komplettbestand alle Regale: ".floatval($gesamt_alle)." $einheit
    "); - - if($artikelid > 0) - { - $this->app->Location->execute('index.php?module=artikel&action=lager&id='.$artikelid.'&msg='.$msg); - } - //$msg = $this->app->erp->base64_url_encode("
    Der Artikel $name wurde umgelagert. Der nächste Artikel kann jetzt umgelagert werden.
    "); - if($cmd==='umlagern'){ - $this->app->Location->execute('index.php?module=lager&action=buchenauslagern&cmd=umlagern&msg='.$msg); - } - $this->app->Location->execute('index.php?module=lager&action=buchenauslagern&msg='.$msg); - - } // ende allow - if ($regalneu != '' && $regal > 0 && $cmd==='umlagern') { - $msgregal = "Dieses Regal gibt es nicht!"; - $this->app->Tpl->Set('MESSAGELAGER', "
    $msgregal
    "); - $regalcheck = 0; - } - - // ende auslagern - } - } else { - //$error++; - if ($regal != '') { - $msgregal = "Dieses Regal gibt es nicht!"; - $this->app->Tpl->Set('MESSAGELAGER', "
    $msgregal
    "); - $regalcheck = 0; - } - } - if ($error == 0 && $regalcheck == 0) { - $standardbild = $this->app->DB->Select("SELECT standardbild FROM artikel WHERE id='$artikel' LIMIT 1"); - if ($standardbild == '') { - $standardbild = $this->app->DB->Select("SELECT datei FROM datei_stichwoerter WHERE subjekt='Shopbild' AND objekt='Artikel' AND parameter='$artikel' LIMIT 1"); - } - - if(trim($einheit) != ''){ - $name_de .= " (Einheit: ".$einheit.")"; - } - - $this->app->Tpl->Add('BEZEICHNUNG', "Aktueller Artikel:$name_de"); //BENE - if ($standardbild > 0) { - $this->app->Tpl->Add('BEZEICHNUNG', "Bild:"); - } - - $lagermeist = $this->app->DB->SelectArr("SELECT lager_platz, SUM(menge) FROM lager_platz_inhalt WHERE artikel='$artikel' GROUP BY lager_platz ORDER by 2 DESC LIMIT 1"); - $lagerbezeichnung = $this->app->DB->Select("SELECT kurzbezeichnung FROM lager_platz WHERE id='{$lagermeist[0]['lager_platz']}' LIMIT 1"); - - $standard_lagerplatz = $this->app->DB->Select("SELECT lager_platz FROM artikel WHERE id='$artikel' LIMIT 1"); - $standard_lagerbezeichnung = $this->app->DB->Select("SELECT kurzbezeichnung FROM lager_platz WHERE id='$standard_lagerplatz' LIMIT 1"); - - if($lagerbezeichnung!=$standard_lagerbezeichnung && $standard_lagerbezeichnung!="") - $standardlageranzeigen = "$standard_lagerbezeichnung (Standardlager)"; - - //echo "huhuh $cmd regal $regal regalvalue $regalvalue checkregal $checkregal regaltreffer $regaltreffer"; - if($regaltreffer=="1") { - $regalvalue=$this->app->DB->Select("SELECT kurzbezeichnung FROM lager_platz WHERE id='$regal' LIMIT 1"); - } else { - $regalvalue=''; - } - //if($regal !="" && $regalvalue=="") $regalvalue=$regal; - if($regalvalue!='' && $cmd==='umlagern' && $regal > 0 && $regal==$checkregal) - { - if($this->app->erp->Version()!=="stock") - { - $this->app->Tpl->Add('ZWISCHENLAGERINFO', "Regalvorschlag:"); - } - $this->app->Tpl->Set('FOCUSFIELD','document.getElementById("regal").focus();'); - $this->app->Tpl->Add('ZWISCHENLAGERINFO', "Zielregal:
    Jetzt Regal abscannen! - "); - } else { - if($this->app->erp->Version()==="stock") - { - if($this->app->Secure->GetPOST('regal')=="" && $this->app->Secure->GetGET("regal")=="") //TODO - $regalvalue = $lagerbezeichnung; //TODO - $this->app->Tpl->Add('ZWISCHENLAGERINFO', "Regalvorschlag: (Standardlager)
    $standardlageranzeigen"); - } - else { - - $this->app->Tpl->Add('ZWISCHENLAGERINFO', "Regalvorschlag: (aktuell am meisten im Lager)
    $standardlageranzeigen"); - } - - if($lagerbezeichnung!='' && empty($regalvaluestock) && $regal!='') { - $regalvaluestock=$lagerbezeichnung; - } - if($regal!='') { - $regalvaluestock=$regalvalue; - } - $this->app->Tpl->Add('ZWISCHENLAGERINFO', "Entnahmeregal:
    Jetzt Regal abscannen!"); - $this->app->Tpl->Set('FOCUSFIELD','document.getElementById("regal").focus();'); - } - // letzt einstellung von grad - $this->app->Tpl->Add('ZWISCHENLAGERINFO', ''); - } else if ($error == 0) { - echo "speichern adresse $checkadresse projekt $projekt menge $menge"; - } - } - if ($nummer == '') { - $this->app->Tpl->Set('ARTIKELSTYLE', "style=\"border: 2px solid red\""); - } - if(empty($frmMenge) && !empty($amount)) { - $menge = $amount; - } - $this->app->Tpl->Set('MENGE', $this->app->erp->ReplaceMenge(0,(String)$menge,0)); - $this->app->Tpl->Set('GRUNDREFERENZ', $grundreferenz); - - $art_name = $this->app->DB->Select("SELECT CONCAT(nummer) FROM artikel WHERE nummer='$nummer' AND geloescht!=1 AND lagerartikel=1 LIMIT 1"); - $this->app->Tpl->Set('NUMMER', $art_name); - - $pr_name = $this->app->DB->Select("SELECT CONCAT(abkuerzung) FROM projekt WHERE abkuerzung='$projekt' LIMIT 1"); - $this->app->Tpl->Set('ADRESSE', $adresse); - if ($_SESSION['grund'] === 'Interner Entwicklungsbedarf') $this->app->Tpl->Set('MUSTER', 'selected'); - if ($_SESSION['grund'] === 'RMA / Reparatur / Reklamation') $this->app->Tpl->Set('RMA', 'selected'); - if ($_SESSION['grund'] === 'Alte Bestellung') $this->app->Tpl->Set('ALTE', 'selected'); - if ($_SESSION['grund'] === 'Kundenauftrag / Produktion') $this->app->Tpl->Set('PRODUKTION', 'selected'); - if ($_SESSION['grund'] === 'Manuelle Lageranpassung') $this->app->Tpl->Set('DIFFERENZ', 'selected'); - if ($_SESSION['grund'] === 'Umlagern') $this->app->Tpl->Set('UMLAGERN', 'selected'); - //$this->app->YUI->AutoComplete(PROJEKTAUTO,"projekt",array('name','abkuerzung'),"abkuerzung"); - $this->app->YUI->AutoComplete('projekt', 'projektname', 1); - $this->app->YUI->AutoComplete('adresse', 'adresse'); - $this->app->YUI->AutoComplete('nummer','lagerartikelnummer',1); - $this->app->YUI->AutoComplete('regal','lagerplatz'); - $this->app->YUI->AutoComplete('grundreferenz','lagergrund'); - //$this->app->YUI->AutoComplete(ADRESSEAUTO,"adresse",array('id','name','kundennummer'),"CONCAT(id,' ',name)"); - $this->app->Tpl->Set('PROJEKT', $pr_name); - $this->app->Tpl->Parse('TAB1', 'auslagern.tpl'); - $this->app->Tpl->Parse('PAGE', 'tabview.tpl'); - } - - function LagerLetzteBewegungen() - { - $this->LagerBuchenMenu(); - - $this->app->YUI->TableSearch('TAB1', 'lagerletztebewegungen','show','','',basename(__FILE__), __CLASS__); - - $this->app->Tpl->Parse('PAGE', 'tabview.tpl'); - } - - - function LagerBuchenMenu() { - $id = $this->app->Secure->GetGET('id'); - $this->app->erp->Headlines('Lager'); - if($this->app->erp->Version()!=='stock') { - $this->app->erp->MenuEintrag("index.php?module=lager&action=buchenauslagern&cmd=umlagern&id=$id", 'Umlagern'); - $this->app->erp->MenuEintrag("index.php?module=lager&action=buchenauslagern&id=$id", 'Auslagern'); - $this->app->erp->MenuEintrag("index.php?module=lager&action=bucheneinlagern&id=$id", 'Einlagern'); - $this->app->erp->MenuEintrag("index.php?module=lager&action=buchenzwischenlager&id=$id", 'Zwischenlager'); - $this->app->erp->MenuEintrag('index.php?module=lager&action=buchen', 'Zurück zur Übersicht'); - $this->app->erp->MenuEintrag('index.php?module=lager&action=schnellauslagern', 'Schnell-Auslagern'); - } - - $this->app->erp->MenuEintrag('index.php?module=lager&action=schnellumlagern', 'Schnell-Umlagern'); - $this->app->erp->MenuEintrag('index.php?module=lager&action=letztebewegungen', 'Letzte Bewegungen'); - } - function LagerReservierungen() { - $this->app->erp->MenuEintrag('index.php?module=lager&action=reservierungen','Übersicht'); - $this->app->erp->Headlines('Lager', 'Reservierungen'); - $this->app->Tpl->Set('MESSAGE','
    Reservierungen Stand ' . date('d.m.Y').'
    '); - $this->app->YUI->TableSearch('TAB1', 'lager_reservierungen', 'show','','',basename(__FILE__), __CLASS__); - $this->app->Tpl->Set('AKTIV_TAB1', 'selected'); - $this->app->Tpl->Parse('PAGE', 'lager_reservierungen.tpl'); - } - - - public function LagerRegalEtiketten() { - $id = (int)$this->app->Secure->GetGET('id'); - $cmd = $this->app->Secure->GetGET('cmd'); - - if ($cmd==='all') { - $arr = $this->app->DB->SelectArr(sprintf('SELECT id,kurzbezeichnung FROM lager_platz WHERE lager=%d',$id)); - } - else{ - $arr = $this->app->DB->SelectArr(sprintf('SELECT id,kurzbezeichnung FROM lager_platz WHERE id=%d LIMIT 1',$id)); - } - if(!empty($arr)){ - foreach($arr as $row) { - $this->app->erp->EtikettenDrucker('lagerplatz_klein', 1, 'lager_platz', $row['id']); - } - } - $ref = $_SERVER['HTTP_REFERER']; - if(empty($ref)) { - if ($cmd==='all'){ - $ref = 'index.php?module=lager&action=list'; - } else { - $ref = 'index.php?module=lager&action=edit&id='.$id; - } - } - $this->app->Location->execute($ref); - } - - - - function LagerZweistufigEtikettDrucken($artikelId, $lagerplatzId, $menge){ - - if($artikelId <= 0 || $artikelId == ''){ - return; - } - - $etikettId = $this->app->User->GetParameter('lager_zweistufig_etiketten'); - $druckerId = $this->app->User->GetParameter('lager_zweistufig_etikettendrucker'); - - if($etikettId > 0 && $etikettId != '' && $druckerId > 0 && $druckerId != ''){ - $lagerplatz = ''; - if($lagerplatzId != '' && $lagerplatzId > 0){ - $lagerplatz = $this->app->DB->Select("SELECT kurzbezeichnung FROM lager_platz WHERE id = '$lagerplatzId' LIMIT 1"); - } - - $artikelDaten = $this->app->DB->SelectRow("SELECT name_de, nummer FROM artikel WHERE id = '$artikelId' LIMIT 1"); - - $variablen = null; - $variablen['name_de'] = $artikelDaten['name_de']; - $variablen['artikel_name_de'] = $artikelDaten['name_de']; - $variablen['nummer'] = $artikelDaten['nummer']; - $variablen['artikel_nummer_de'] = $artikelDaten['nummer']; - $variablen['menge'] = $menge; - $variablen['lagerplatz'] = $lagerplatz; - - $etikettProZeile = $this->app->User->GetParameter('lager_zweistufig_etiketten_eins_pro_zeile'); - if($etikettProZeile){ - $menge = 1; - } - - $this->app->erp->EtikettenDrucker($etikettId,$menge,'artikel',$artikelId,$variablen,'',$druckerId); - } - } - - function LagerAuslagernProduktionbasiert() - { - $this->app->Tpl->Set('TABTEXT',''); - $this->app->erp->MenuEintrag("index.php?module=lager&action=artikelfuerlieferungen&cmd=produktion","Übersicht"); - // offene auslagerungen - $result = $this->app->DB->SelectArr("SELECT r.parameter FROM lager_reserviert r LEFT JOIN produktion p ON p.id=r.parameter - WHERE r.objekt='produktion' AND (p.status='abgeschlossen' OR p.status='gestartet') GROUP BY r.parameter"); - - $gesamtanzahlartikel = 0; - - //TODO YUI Start - - $this->app->Tpl->Set('TAB1', " - "); - $cresult = !empty($result)?count($result):0; - for ($w = 0;$w < $cresult;$w++) { - $produktion = $result[$w]['parameter']; - - $bezeichnung = $this->app->erp->ProduktionName($produktion); - - $nummer = $this->app->DB->Select("SELECT belegnr FROM produktion WHERE id='$produktion' LIMIT 1"); - $this->app->Tpl->Add('TAB1', ""); - $artikellistesumm = $this->app->DB->SelectArr("SELECT DISTINCT artikel FROM lager_reserviert WHERE objekt='produktion' AND parameter='$produktion'"); - if ((!empty($artikellistesumm)?count($artikellistesumm):0) == 0) continue; - $artikelliste = $this->app->DB->SelectArr("SELECT DISTINCT artikel FROM lager_reserviert WHERE objekt='produktion' AND parameter='$produktion'"); - - $gesamtanzahlartikel = $gesamtanzahlartikel + (!empty($artikelliste)?count($artikelliste):0); - } - $this->app->Tpl->Add('TAB1', "
    ProduktionBezeichnungAuslagern
    Produktion $nummer$bezeichnung
    "); - - //TODO YUI Ende - - if ($gesamtanzahlartikel <= 0) { - $this->app->Tpl->Set('MESSAGE', "
    {|Aktuell gibt es keine Artikel für Produktionen, da keine Produktionen gestartet wurden.|}
    "); - $this->app->Tpl->Set('TAB1',''); - } - - } - - - function LagerAuslagernProjektbasiert() - { - $projekt = 1; - $projektearr = $this->app->DB->SelectArr("SELECT id FROM projekt WHERE geloescht!=1"); - $projektearr[] = 0; - $gesamtanzahlartikel = 0; - // start projekt schleife - $cprojektarr = !empty($projektearr)?count($projektearr):0; - for ($w = 0;$w < $cprojektarr;$w++) { - $this->app->Tpl->Set('INHALT', ''); - $projekt = $projektearr[$w]['id']; - $projektName = $this->app->DB->Select("SELECT abkuerzung FROM projekt WHERE id='$projekt' LIMIT 1"); - if ($projekt == 0 || $projekt == "") $projektName = "Ohne Projekt"; - $artikellistesumm = $this->app->DB->SelectArr("SELECT DISTINCT artikel FROM lager_reserviert WHERE objekt='lieferschein' AND projekt='$projekt' "); - - if ((!empty($artikellistesumm)?count($artikellistesumm):0) == 0) continue; - $this->app->Tpl->Add('INHALT', "

    $projektName Lieferungen Stand " . date('d.m.Y') . "

    "); - $artikelliste = $this->app->DB->SelectArr("SELECT DISTINCT artikel FROM lager_reserviert WHERE objekt='lieferschein' AND projekt='$projekt' "); - $orderarray = $this->LagerAuslagernArtikelliste($artikelliste,$projekt,true); - $gesamtanzahlartikel = (!empty($orderarray)?count($orderarray):0); - $this->LagerAuslagernArtikellisteRender($orderarray); - } // ende projekt schleife - if ($gesamtanzahlartikel <= 0) { - if($this->app->erp->RechteVorhanden('kommissionierlauf','list') && !$this->app->DB->Select("SELECT id FROM projekt WHERE ifnull(geloescht,0) = 0 AND kommissionierverfahren = 'zweistufig' LIMIT 1")) - { - $this->app->Location->execute('index.php?module=kommissionierlauf&action=list'); - } - $this->app->Tpl->Set('MESSAGE', "
    Aktuell gibt es keine Artikel für Lieferungen.
    "); - } - $this->app->erp->MenuEintrag('index.php?module=kommissionierlauf&action=list','Kommissionierläufe'); - $this->app->erp->MenuEintrag('index.php?module=lager&action=artikelfuerlieferungen','2-stufige Kommissionierung'); - } - - - - /** - * @param array $artikelliste - * @param string $projekt - */ - function LagerReihenfolgeArtikelliste($artikelliste,$projekt='') - { - $cartikelliste = !empty($artikelliste)?count($artikelliste):0; - for ($i = 0;$i < $cartikelliste;$i++) { - $artikel = $artikelliste[$i]['artikel']; - echo $artikel."
    "; - } - } - - function LagerAuslagernReihenfolge($artikelliste,$projekt="") - { - return $artikelliste; - // Reihenfolge abholen - $orderarray = $this->LagerAuslagernArtikelliste($artikelliste,$projekt,true); - $corderarray = !empty($orderarray)?count($orderarray):0; - for($i=0;$i<$corderarray;$i++) - { - $artikel = $orderarray[$i]["artikel"]; - $kurzbezeichnung = $orderarray[$i]["kurzbezeichnung"]; - $tmparray[$artikel]=$kurzbezeichnung; - } - echo "schritt 1
    "; - print_r($orderarray); - echo "
    "; - echo "schritt 2
    "; - print_r($tmparray); - echo "
    "; - echo "schritt 3
    "; - - // neu sortieren - asort($tmparray); - if((!empty($tmparray)?count($tmparray):0)>0) - { - foreach($tmparray as $key=>$value) - { - $newartikelliste[]=array("artikel"=>$key); - } - } - print_r($newartikelliste); - return $newartikelliste; - } - //function LagerAuslagernList($artikelliste,$projekt="",$getorder=false) - function LagerAuslagernArtikelliste($artikelliste,$projekt="",$getorder=false) - { - $cmd = $this->app->Secure->GetGET('cmd'); - - $tmpanzahl = 0;+ - $gesamtanzahlartikel = 0; - $cartikelliste = !empty($artikelliste)?count($artikelliste):0; - for ($i = 0;$i < $cartikelliste;$i++) { - $gesamtanzahlartikel++; - $artikel = $artikelliste[$i]['artikel']; - $nummer = $this->app->DB->Select("SELECT nummer FROM artikel WHERE id='$artikel' AND lagerartikel=1 LIMIT 1"); - $name_de = $this->app->DB->Select("SELECT name_de FROM artikel WHERE id='$artikel' AND lagerartikel=1 LIMIT 1"); - //wieviel stueck braucht man denn von dem artikel? - - if(is_numeric($projekt)) - $gesamtbedarf = $this->app->DB->Select("SELECT SUM(menge) FROM lager_reserviert WHERE objekt='lieferschein' AND projekt='$projekt' AND artikel='$artikel' "); - else - $gesamtbedarf = $this->app->DB->Select("SELECT SUM(menge) FROM lager_reserviert WHERE objekt='lieferschein' AND projekt='0' AND artikel='$artikel' "); - - //$artikel_in_regalen = $this->app->DB->SelectArr("SELECT * FROM lager_platz_inhalt WHERE artikel='$artikel' AND projekt='$projekt'"); - - // standardlager artikel - $standardlagerartikel = $this->app->DB->Select("SELECT lager_platz FROM artikel WHERE id='$artikel'"); - // Zeige nur Artikel an die im Lager sind! - - $tmp_check_standardlager = $this->app->DB->Select("SELECT SUM(lpi.menge) FROM lager_platz_inhalt lpi LEFT JOIN lager_platz l ON l.id=lpi.lager_platz WHERE - lpi.artikel='$artikel' AND lpi.lager_platz='$standardlagerartikel' AND l.autolagersperre!='1' AND l.sperrlager!='1'"); - - // erst standarlager ausraeumen bis zu wenig drin ist - // und dann die lager an denene am wenigsten ist - if($tmp_check_standardlager>=$gesamtbedarf) - $artikel_in_regalen = $this->app->DB->SelectArr("SELECT * FROM lager_platz_inhalt lpi LEFT JOIN lager_platz l ON l.id=lpi.lager_platz WHERE - lpi.artikel='$artikel' AND lager_platz='$standardlagerartikel' AND l.autolagersperre!='1' AND l.sperrlager!='1' ORDER by lpi.menge ASC"); - else - $artikel_in_regalen = $this->app->DB->SelectArr("SELECT * FROM lager_platz_inhalt lpi LEFT JOIN lager_platz l ON l.id=lpi.lager_platz WHERE - lpi.artikel='$artikel' AND l.autolagersperre!='1' AND l.sperrlager!='1' ORDER by lpi.menge ASC"); - - $cartikel_in_regalen = !empty($artikel_in_regalen)?count($artikel_in_regalen):0; - for ($j = 0;$j < $cartikel_in_regalen;$j++) { - $tmpanzahl++; - $menge_im_platz = $artikel_in_regalen[$j]['menge']; - $kurzbezeichnung = $this->app->DB->Select("SELECT kurzbezeichnung FROM lager_platz WHERE id='{$artikel_in_regalen[$j]['lager_platz']}' LIMIT 1"); - $lagerplatzid = $artikel_in_regalen[$j]['lager_platz']; - - if ($menge_im_platz <= $gesamtbedarf) { - $tmpmenge = $menge_im_platz; - } else { - $tmpmenge = $gesamtbedarf; - } - $rest = $menge_im_platz - $tmpmenge; //$this->app->DB->Select("SELECT SUM(menge) FROM lager_platz_inhalt WHERE artikel='$artikel' AND firma='".$this->app->User->GetFirma()."'") - $tmpmenge; - if ($rest == 0) { - $rest = '-'; - } - - $orderarray[]=array('tmpmenge'=>$tmpmenge,'artikel'=>$artikel,'nummer'=>$nummer,'lager_platz'=>$lagerplatzid,"kurzbezeichnung"=>$kurzbezeichnung,"link_lagerplatzid"=>$artikel_in_regalen[$j][id],"link_lager"=>$lagerplatzid,"projekt"=>$projekt,"cmd"=>$cmd,"abkuerzung"=>$this->app->DB->Select("SELECT abkuerzung FROM projekt WHERE id='$projekt' LIMIT 1"),'name_de'=>$name_de,"produktion"=>$produktion); - - $gesamtbedarf = $gesamtbedarf - $tmpmenge; - if ($gesamtbedarf == 0) break; - } - } - return $orderarray; - } - - /** - * @param array $orderarray - */ - function LagerAuslagernArtikellisteRender($orderarray) - { - $array = $orderarray; - $cols = array('kurzbezeichnung'=>SORT_ASC, 'nummer'=>SORT_ASC); - - $colarr = array(); - foreach ($cols as $col => $order) { - $colarr[$col] = array(); - foreach ($array as $k => $row) { - $colarr[$col]['_'.$k] = strtolower($row[$col]); - } - } - //$eval = 'array_multisort('; - //foreach ($cols as $col => $order) { - // $eval .= '$colarr[\''.$col.'\'],'.$order.','; - //} - //$eval = substr($eval,0,-1).');'; - - //eval($eval); - array_multisort($colarr['kurzbezeichnung'], SORT_ASC, $colarr['kurzbezeichnung'], SORT_ASC); - $ret = array(); - foreach ($colarr as $col => $arr) { - foreach ($arr as $k => $v) { - $k = substr($k,1); - if (!isset($ret[$k])) { - $ret[$k] = $array[$k]; - } - $ret[$k][$col] = $array[$k][$col]; - } - } - $orderarray = $ret; - - $htmltable = new HTMLTable(0, '100%', '', 3, 1); - if ($this->app->User->GetType() === 'admin') { - $htmltable->AddRowAsHeading(array('Menge', 'Nummer', 'Artikel', 'Projekt', 'Regal', 'Regal', 'Aktion')); - }//, 'Entfernen')); - else { - $htmltable->AddRowAsHeading(array('Menge', 'Nummer', 'Artikel', 'Projekt', 'Regal', 'Regal', 'Aktion')); - } - $htmltable->ChangingRowColors('#e0e0e0', '#fff'); - - $tmpanzahl=1; - foreach($orderarray as $row) { - if ($tmpanzahl == 1 && $this->erstes!=1) { - $this->erstes=1; - $erstes = 'erstes'; - } - else { - $erstes = ''; - } - - $tmpanzahl++; - - $htmltable->NewRow(); - - $htmltable->AddCol((float)$row['tmpmenge']); - $htmltable->AddCol($row['nummer']); - $htmltable->AddCol($row['name_de']); - $htmltable->AddCol($row['abkuerzung']); - $htmltable->AddCol($row['kurzbezeichnung']); - - $htmltable->AddCol("Regal: "); - - // if ($this->app->User->GetType() == "admin") $htmltable->AddCol(""); - - } - //bestimme regalplaetze fuer artikel - $this->app->Tpl->Add('INHALT', $htmltable->Get()); - // und enter abfangen!!! - $this->app->Tpl->Add('INHALT', ""); - //$table->DisplayNew('INHALT', ""); - $this->app->Tpl->Parse('TAB1', 'rahmen70_ohneform.tpl'); - - } - - function LagerZwischenlager() { - $this->app->Tpl->Add('TABS', '
  • Zwischenlager

  • '); - $id = $this->app->Secure->GetGET('id'); - $this->app->Tpl->Set('TABNAME', 'Inhalt'); - $this->app->Tpl->Set('SUBSUBHEADING', 'Zwischenlager Stand ' . date('d.m.Y')); - // easy table mit arbeitspaketen YUI als template - $table = new EasyTable($this->app); - $table->Query("SELECT a.name_de,z.menge,z.vpe,z.grund,z.richtung, p.abkuerzung, z.id FROM zwischenlager z LEFT JOIN artikel a ON a.id=z.artikel LEFT JOIN projekt p ON - p.id=z.projekt "); - $table->DisplayNew('INHALT', "Info"); - $this->app->Tpl->Parse('TAB1', 'rahmen70.tpl'); - $this->app->Tpl->Set('AKTIV_TAB1', 'selected'); - $this->app->Tpl->Parse('PAGE', 'tabeinzeln.tpl'); - } - /*function LagerBewegung() { - $this->LagerMenu(); - $id = $this->app->Secure->GetGET('id'); - $this->app->Tpl->Set('TABNAME', "Lager Bewegungen"); - $lager = $this->app->DB->Select("SELECT bezeichnung FROM lager WHERE id='$id' "); - $this->app->Tpl->Set('SUBSUBHEADING', "Bewegungen Lager: $lager bis zum " . date('d.m.Y')); - // easy table mit arbeitspaketen YUI als template - $table = new EasyTable($this->app); - $table->Query("SELECT p.kurzbezeichnung as Regal, - p.id FROM lager_platz p - WHERE lager='$id' ORDER by 1"); - $table->DisplayNew('INHALT', "Info"); - $this->app->Tpl->Parse('TAB1', "rahmen70.tpl"); - $this->app->Tpl->Set('AKTIV_TAB1', "selected"); - $this->app->Tpl->Parse('PAGE', "tabeinzeln.tpl"); - }*/ - function LagerBewegungPopup() { - $this->LagerMenu(); - - $this->app->Tpl->Parse('TAB1', 'rahmen70.tpl'); - $this->app->Tpl->Set('AKTIV_TAB1', 'selected'); - - $id = $this->app->Secure->GetGET('id'); - - $lager = $this->app->DB->Select("SELECT bezeichnung FROM lager WHERE id='$id' "); - - $this->app->erp->MenuEintrag('index.php?module=lager&action=list', 'Zurück zur Übersicht'); - - $id = $this->app->Secure->GetGET('id'); - - $this->app->Tpl->Set("MESSAGE", "
    Bewegungen Lager: $lager bis zum " . date('d.m.Y')."
    "); - - - $this->app->YUI->AutoComplete('lager_platz_bewegung', 'lagerplatz'); - $this->app->YUI->AutoComplete('artikel_bewegung', 'artikelnummer'); - $this->app->YUI->AutoSaveUserParameter('lager_platz_bewegung','lager_bewegung_lagerplatz','updateLiveTable();'); - $this->app->YUI->AutoSaveUserParameter('artikel_bewegung','lager_bewegung_artikel','updateLiveTable();'); - - - $this->app->YUI->TableSearch('TAB1','lager_bewegunglist', 'show','','',basename(__FILE__), __CLASS__); - $this->app->Tpl->Parse('PAGE', 'lager_bewegung_list.tpl'); - } - - - function LagerAlleBewegungen() - { - $this->LagerHauptmenu(); - $this->app->Tpl->Set('SUBSUBHEADING', 'Alle Lagerbewegungen bis zum '.date('d.m.Y')); - $this->app->erp->MenuEintrag('index.php?module=lager&action=list', 'Zurück zur Übersicht'); - - $this->app->YUI->AutoComplete('lager_bewegung_alle', 'lager'); - $this->app->YUI->AutoComplete('lager_platz_bewegung_alle', 'lagerplatz'); - $this->app->YUI->AutoComplete('artikel_bewegung_alle', 'artikelnummer'); - - $this->app->YUI->AutoSaveUserParameter('lager_bewegung_alle','lager_bewegungalle_lager','updateLiveTable();'); - $this->app->YUI->AutoSaveUserParameter('artikel_bewegung_alle','lager_bewegungalle_artikel','updateLiveTable();'); - $this->app->YUI->AutoSaveUserParameter('lager_platz_bewegung_alle','lager_bewegungalle_lagerplatz','updateLiveTable();'); - - $this->app->YUI->TableSearch('TAB1','lager_allebewegungenlist', 'show','','',basename(__FILE__), __CLASS__); - $this->app->Tpl->Parse('PAGE', "lager_allebewegungen_list.tpl"); - } - - - function LagerInhalt() { - - $this->LagerMenu(); - - $pdf = $this->app->Secure->GetPOST('pdf'); - $nachartikel = $this->app->Secure->GetPOST('nachartikel'); - - if($pdf != '' && $nachartikel == 1){ - $this->LagerPDFArtikel(); - }elseif($pdf != '' && $nachartikel == 0){ - $this->LagerPDF(); - } - - $this->app->YUI->AutoComplete('lager_platz_inhalt', 'lagerplatz'); - $this->app->YUI->AutoComplete('artikel_inhalt', 'artikelnummer'); - - $this->app->YUI->AutoSaveUserParameter('artikel_inhalt','lager_inhalt_artikel','updateLiveTable();'); - $this->app->YUI->AutoSaveUserParameter('lager_platz_inhalt','lager_inhalt_lagerplatz','updateLiveTable();'); - - $this->app->YUI->TableSearch('TAB1','lager_inhaltlist', 'show','','',basename(__FILE__), __CLASS__); - $this->app->Tpl->Parse('PAGE', 'lager_inhaltneu.tpl'); - } - - function LagerPDFArtikel(){ - $lagerid = $this->app->Secure->GetGET('id'); - - $lagername = $this->app->DB->Select("SELECT bezeichnung FROM lager WHERE id = '$lagerid' LIMIT 1"); - - $lagerplatzuser = $this->app->User->GetParameter('lager_inhalt_lagerplatz'); - $lagerplatziduser = $this->app->DB->Select("SELECT id FROM lager_platz WHERE kurzbezeichnung = '$lagerplatzuser' AND kurzbezeichnung != '' LIMIT 1"); - - $artikeluser = $this->app->User->GetParameter('lager_inhalt_artikel'); - $artikeldaten = explode(' ', $artikeluser, 2); - $artikelnr = $artikeldaten[0]; - $artikelname = $artikeldaten[1]; - $artikeliduser = $this->app->DB->Select("SELECT id FROM artikel WHERE name_de = '$artikelname' AND name_de != '' AND nummer = '$artikelnr' AND nummer != '' LIMIT 1"); - - if($lagerplatziduser != ''){ - $lagerplatzwhere = " AND li.lager_platz = '$lagerplatziduser'"; - }else{ - $lagerplatzwhere = ''; - } - - if($artikeliduser != ''){ - $artikelwhere = "AND li.artikel = '$artikeliduser'"; - }else{ - $artikelwhere = ''; - } - - - $where = "l.lager = '$lagerid'".$lagerplatzwhere.$artikelwhere.' ORDER BY a.nummer'; - - //$artikel = $this->app->DB->SelectArr("SELECT DISTINCT a.id as id, a.name_de as name_de, a.nummer as nummer FROM lager_mindesthaltbarkeitsdatum lm LEFT JOIN lager_platz l ON l.id=lm.lager_platz LEFT JOIN artikel a ON lm.artikel=a.id WHERE $where"); - - $artikel = $this->app->DB->SelectArr("SELECT DISTINCT a.id as id, a.name_de as name_de, a.nummer as nummer FROM lager_platz_inhalt li LEFT JOIN lager_platz l ON l.id=li.lager_platz LEFT JOIN artikel a ON li.artikel = a.id WHERE $where"); - - - //Neue PDF Datei erstellen - $pdf=new SuperFPDF('P','mm','A4',$this->app); - $pdf->AddPage(); - - $pdf->SetFont('Arial', 'B', 15); - $pdf->Cell(100, 8, 'Lagerbestand '.'Lager: '.$lagername, 0, 0, 'L'); - $pdf->SetFont('Arial','',10); - $pdf->Cell(0, 8, date('d.m.Y'), 0, 1, 'R'); - $pdf->Cell(0, 8, 'Bearbeiter: '.$this->app->User->GetName(), 0, 1, 'R'); - $pdf->Ln(); - - foreach($artikel as $key=>$value){ - $pdf->SetFont('Arial','B',10); - $pdf->Cell(80, 8, $value['name_de'], 0, 0, 'L'); - $pdf->Cell(70, 8, ' Artikelnr: '.$value['nummer'], 0, 0, 'L'); - $pdf->Cell(0, 8, $pdf->Code128($pdf->GetX(), $pdf->GetY(), $this->app->erp->UmlauteEntfernen($value['nummer']), 30, 5), 0, 1, "L"); - $pdf->SetFont('Arial','',10); - - - $pdf->Line($pdf->GetX(), $pdf->GetY(), $pdf->GetX()+190, $pdf->GetY()); - - - $artikelid = $value['id']; - $artikelnr = $value['nummer']; - $artikelname = $value['name_de']; - - //$regale = $this->app->DB->SelectArr("SELECT DISTINCT l.id as id, l.kurzbezeichnung as kurzbezeichnung FROM lager_mindesthaltbarkeitsdatum lm LEFT JOIN lager_platz l ON l.id=lm.lager_platz LEFT JOIN artikel a ON lm.artikel=a.id WHERE l.lager = '$lagerid' AND lm.artikel = '".$value['id']."' $lagerplatzwhere ORDER BY l.id"); - - $regale = $this->app->DB->SelectArr("SELECT DISTINCT l.id as id, l.kurzbezeichnung as kurzbezeichnung FROM lager_platz l LEFT JOIN lager_platz_inhalt li ON l.id = li.lager_platz LEFT JOIN artikel a ON a.id = li.artikel WHERE l.lager = '$lagerid' AND li.artikel = '".$value['id']."' $lagerplatzwhere ORDER BY l.id"); - - - foreach($regale as $key2=>$value2){ - $pdf->Ln(4); - $pdf->SetFont('Arial','B',10); - $pdf->Cell(40, 5, $value2['kurzbezeichnung'], 0, 0, 'L'); - - $gesamt = $this->app->DB->Select('SELECT '.$this->app->erp->FormatMenge('SUM(li.menge)')." as menge FROM lager_platz_inhalt li JOIN lager_platz l ON li.lager_platz = l.id WHERE li.artikel = '".$value['id']."' AND li.lager_platz = '".$value2['id']."'"); - - $pdf->Cell(0, 5, 'Gesamtbestand: '.$gesamt, 0, 1, 'L'); - - $pdf->SetFont('Arial','',10); - - $artikelvorhanden = $this->app->DB->Select("SELECT lm.id FROM lager_mindesthaltbarkeitsdatum lm LEFT JOIN lager_platz l ON l.id=lm.lager_platz LEFT JOIN artikel a ON lm.artikel = a.id WHERE l.lager = '$lagerid' AND lm.artikel = '".$value['id']."' AND lm.lager_platz = '".$value2['id']."' LIMIT 1"); - - - if($artikelvorhanden != ''){ - - $chargenmhd = $this->app->DB->SelectArr("SELECT ".$this->app->erp->FormatMenge('lm.menge')." as menge, lm.mhddatum as mhd, lm.charge as charge, lm.internebemerkung as internebemerkung, lm.artikel as artikel FROM lager_mindesthaltbarkeitsdatum lm LEFT JOIN lager_platz l ON l.id=lm.lager_platz LEFT JOIN artikel a ON lm.artikel=a.id WHERE l.lager = '$lagerid' AND lm.artikel = '".$value['id']."' AND lm.lager_platz = '".$value2['id']."'"); - - $gesamtchargen = $this->app->DB->Select("SELECT ".$this->app->erp->FormatMenge('SUM(lm.menge)')." as menge FROM lager_mindesthaltbarkeitsdatum lm LEFT JOIN lager_platz l ON l.id = lm.lager_platz LEFT JOIN artikel a ON lm.artikel = a.id WHERE l.lager = '$lagerid' AND lm.artikel = '".$value['id']."' AND lm.lager_platz = '".$value2['id']."'"); - - $pdf->Cell(40, 5, $pdf->Code128($pdf->GetX(), $pdf->GetY(), $this->app->erp->UmlauteEntfernen($value2['kurzbezeichnung']), 30, 5), 0, 0, "L"); - - $pdf->SetTableWidths(array(40,30,40)); - $pdf->SetFont('Arial','B',10); - $pdf->SetTableFonts(array(array('Arial','B',10),array('Arial','B',10),array('Arial','B',10))); - $pdf->TableRow(array('Menge', 'MHD', 'Charge')); - $pdf->SetFont('Arial','',10); - $pdf->SetTableFonts(array(array('Arial','',10),array('Arial','',10),array('Arial','',10))); - - foreach($chargenmhd as $key3=>$value3){ - $pdf->SetX($pdf->GetX()+40); - $pdf->TableRow(array($value3['menge'], date('d.m.Y', strtotime($value3['mhd'])), $value3['charge'])); - - } - - if($gesamt != $gesamtchargen){ - if($gesamtchargen < $gesamt){ - $zuwenig = $gesamt-$gesamtchargen; - $pdf->Cell(0, 5, "", 0, 1, "L"); - $pdf->SetX($pdf->GetX()+40); - $pdf->SetFont('Arial', 'B', 10); - $pdf->Cell(0, 5, 'Hinweis: Es sind '.$zuwenig.' Chargen-/MHD Einträge zu wenig vorhanden.', 0, 1, 'L'); - $pdf->SetFont('Arial','',10); - } - $zuviel = $gesamtchargen - $gesamt; - $pdf->Cell(0, 5, '', 0, 1, 'L'); - $pdf->SetX($pdf->GetX()+40); - $pdf->SetFont('Arial', 'B', 10); - $pdf->Cell(0, 5, 'Hinweis: Es sind '.$zuviel.' Chargen-/MHD Einträge zu viel vorhanden.', 0, 1, 'L'); - $pdf->SetFont('Arial','',10); - } - - - }else{ - $pdf->Cell(40, 5, $pdf->Code128($pdf->GetX(), $pdf->GetY(), $value2['kurzbezeichnung'], 30, 5), 0, 0, "L"); - $pdf->Ln(); - } - - $pdf->Ln(); - $pdf->Line($pdf->GetX(), $pdf->GetY(), $pdf->GetX()+190, $pdf->GetY()); - //$pdf->Ln(); - } - $pdf->Ln(); - $pdf->Ln(); - } - - $pdf->Output(date('Ymd').'_'.'Artikelbestandsliste_nach_Artikel.pdf','D'); - $this->app->ExitXentral(); - } - - function LagerPDF(){ - $lagerid = $this->app->Secure->GetGET('id'); - - $lagername = $this->app->DB->Select("SELECT bezeichnung FROM lager WHERE id = '$lagerid' LIMIT 1"); - - $lagerplatzuser = $this->app->User->GetParameter('lager_inhalt_lagerplatz'); - $lagerplatziduser = $this->app->DB->Select("SELECT id FROM lager_platz WHERE kurzbezeichnung = '$lagerplatzuser' AND kurzbezeichnung != '' LIMIT 1"); - - $artikeluser = $this->app->User->GetParameter('lager_inhalt_artikel'); - $artikeldaten = explode(" ", $artikeluser, 2); - $artikelnr = $artikeldaten[0]; - $artikelname = $artikeldaten[1]; - $artikeliduser = $this->app->DB->Select("SELECT id FROM artikel WHERE name_de = '$artikelname' AND name_de != '' AND nummer = '$artikelnr' AND nummer != '' LIMIT 1"); - - - if($lagerplatziduser != ''){ - $lagerplatzwhere = " AND li.lager_platz = '$lagerplatziduser'"; - }else{ - $lagerplatzwhere = ''; - } - - if($artikeliduser != ''){ - $artikelwhere = "AND li.artikel = '$artikeliduser'"; - }else{ - $artikelwhere = ''; - } - - $where = "l.lager = '$lagerid'".$lagerplatzwhere.$artikelwhere." ORDER BY a.nummer"; - - //$regale = $this->app->DB->SelectArr("SELECT DISTINCT l.id as id, l.kurzbezeichnung as kurzbezeichnung FROM lager_mindesthaltbarkeitsdatum lm LEFT JOIN lager_platz l ON l.id=lm.lager_platz LEFT JOIN artikel a ON lm.artikel=a.id WHERE l.lager = '$lagerid' $lagerplatzwhere ORDER BY l.id"); - - $regale = $this->app->DB->SelectArr("SELECT DISTINCT l.id as id, l.kurzbezeichnung as kurzbezeichnung FROM lager_platz l LEFT JOIN lager_platz_inhalt li ON l.id = li.lager_platz LEFT JOIN artikel a ON a.id = li.artikel WHERE l.lager = '$lagerid' $lagerplatzwhere $artikelwhere ORDER BY l.kurzbezeichnung"); - - //Neue PDF Datei erstellen - $pdf=new SuperFPDF('P','mm','A4',$this->app); - $pdf->AddPage(); - - $pdf->SetFont('Arial', 'B', 15); - $pdf->Cell(100, 8, 'Lagerbestand '.'Lager: '.$lagername, 0, 0, 'L'); - $pdf->SetFont('Arial','',10); - $pdf->Cell(0, 8, date('d.m.Y'), 0, 1, 'R'); - $pdf->Cell(0, 8, 'Bearbeiter: '.$this->app->User->GetName(), 0, 1, 'R'); - $pdf->Ln(); - - foreach($regale as $key=>$value){ - - $pdf->SetFont('Arial','B',15); - $pdf->Cell(80, 10, $value['kurzbezeichnung'], 0, 0, 'L'); - $pdf->SetFont('Arial','',10); - $pdf->Cell(0, 10, $pdf->Code128($pdf->GetX(), $pdf->GetY(), $this->app->erp->UmlauteEntfernen($value['kurzbezeichnung']), 50, 7), 0, 1, "L"); - - $pdf->SetFont('Arial','B',10); - $pdf->Cell(40, 5, 'Artikelnr', 0, 0, 'L'); - $pdf->Cell(80, 5, 'Artikel', 0, 1, 'L'); - $pdf->SetFont('Arial','',10); - - $pdf->Line($pdf->GetX(), $pdf->GetY(), $pdf->GetX()+190, $pdf->GetY()); - - //$artikel = $this->app->DB->SelectArr("SELECT DISTINCT a.id as id, a.name_de as name_de, a.nummer as nummer FROM lager_mindesthaltbarkeitsdatum lm LEFT JOIN lager_platz l ON l.id=lm.lager_platz LEFT JOIN artikel a ON lm.artikel=a.id WHERE lm.lager_platz = '".$value['id']."' $artikelwhere ORDER BY lm.artikel"); - - $artikel = $this->app->DB->SelectArr("SELECT DISTINCT a.id as id, a.name_de as name_de, a.nummer as nummer FROM lager_platz_inhalt li LEFT JOIN lager_platz l ON l.id=li.lager_platz LEFT JOIN artikel a ON li.artikel = a.id WHERE li.lager_platz = '".$value['id']."' $artikelwhere ORDER BY li.artikel"); - - foreach($artikel as $key2=>$value2){ - $pdf->Ln(4); - - $pdf->SetFont('Arial','B',10); - $pdf->Cell(40, 5, $value2['nummer'], 0, 0, 'L'); - $pdf->Cell(30, 5, $value2['name_de'], 0, 1, 'L'); - $pdf->SetFont('Arial','',10); - - $gesamt = $this->app->DB->Select("SELECT ".$this->app->erp->FormatMenge('SUM(li.menge)')." as menge FROM lager_platz_inhalt li JOIN lager_platz l ON li.lager_platz = l.id WHERE li.artikel = '".$value2['id']."' AND li.lager_platz = '".$value['id']."'"); - - $pdf->SetX($pdf->GetX()+40); - $pdf->SetFont('Arial','B',10); - $pdf->Cell(0, 8, 'Gesamtbestand: '.$gesamt, 0, 1, 'L'); - $pdf->SetFont('Arial','',10); - - $pdf->Cell(40, 5, $pdf->Code128($pdf->GetX(),$pdf->GetY(),$this->app->erp->UmlauteEntfernen($value2['nummer']),30,5), 0, 0, "L"); - - $artikelvorhanden = $this->app->DB->Select("SELECT lm.id FROM lager_mindesthaltbarkeitsdatum lm LEFT JOIN lager_platz l ON l.id=lm.lager_platz LEFT JOIN artikel a ON lm.artikel = a.id WHERE l.lager = '$lagerid' AND lm.artikel = '".$value2['id']."' AND lm.lager_platz = '".$value['id']."' LIMIT 1"); - - if($artikelvorhanden != ''){ - - $chargenmhd = $this->app->DB->SelectArr('SELECT '.$this->app->erp->FormatMenge('lm.menge')." as menge, lm.mhddatum as mhd, lm.charge as charge, lm.internebemerkung as internebemerkung, lm.artikel as artikel FROM lager_mindesthaltbarkeitsdatum lm LEFT JOIN lager_platz l ON l.id=lm.lager_platz LEFT JOIN artikel a ON lm.artikel=a.id WHERE l.lager = '$lagerid' AND lm.artikel = '".$value2['id']."' AND lm.lager_platz = '".$value['id']."'"); - - $gesamtchargen = $this->app->DB->Select('SELECT '.$this->app->erp->FormatMenge('SUM(lm.menge)')." as menge FROM lager_mindesthaltbarkeitsdatum lm LEFT JOIN lager_platz l ON l.id = lm.lager_platz LEFT JOIN artikel a ON lm.artikel = a.id WHERE l.lager = '$lagerid' AND lm.artikel = '".$value2['id']."' AND lm.lager_platz = '".$value['id']."'"); - - //$pdf->SetX($pdf->GetX()+40); - - $pdf->SetTableWidths(array(40,30,40)); - $pdf->SetFont('Arial','B',10); - $pdf->SetTableFonts(array(array('Arial','B',10),array('Arial','B',10),array('Arial','B',10))); - $pdf->TableRow(array('Menge', 'MHD', 'Charge')); - $pdf->SetFont('Arial','',10); - $pdf->SetTableFonts(array(array('Arial','',10),array('Arial','',10),array('Arial','',10))); - - foreach($chargenmhd as $key3=>$value3){ - $pdf->SetX($pdf->GetX()+40); - $pdf->TableRow(array($value3['menge'], date('d.m.Y', strtotime($value3['mhd'])), $value3['charge'])); - - } - - if($gesamt != $gesamtchargen){ - if($gesamtchargen < $gesamt){ - $zuwenig = $gesamt - $gesamtchargen; - $pdf->Cell(0, 5, '', 0, 1, 'L'); - $pdf->SetX($pdf->GetX()+40); - $pdf->SetFont('Arial', 'B', 10); - $pdf->Cell(0, 5, "Hinweis: Es sind ".$zuwenig." Chargen-/MHD Einträge zu wenig vorhanden.", 0, 1, "L"); - $pdf->SetFont('Arial','',10); - }else{ - $zuviel = $gesamtchargen - $gesamt; - $pdf->Cell(0, 5, '', 0, 1, 'L'); - $pdf->SetX($pdf->GetX()+40); - $pdf->SetFont('Arial', 'B', 10); - $pdf->Cell(0, 5, "Hinweis: Es sind ".$zuviel." Chargen-/MHD Einträge zu viel vorhanden.", 0, 1, "L"); - $pdf->SetFont('Arial','',10); - } - } - }else{ - $pdf->Ln(); - } - - $pdf->Ln(); - $pdf->Line($pdf->GetX(), $pdf->GetY(), $pdf->GetX()+190, $pdf->GetY()); - //$pdf->Ln(); - } - $pdf->Ln(); - $pdf->Ln(); - } - - $pdf->Output(date('Ymd').'_'.'Artikelbestandsliste.pdf','D'); - $this->app->ExitXentral(); - } - - public function LagerPlatz() { - $this->LagerMenu(); - $id = $this->app->Secure->GetGET('id'); - // neues arbeitspaket - - - $import = $this->app->Secure->GetPOST('import'); - $importcsv = $this->app->Secure->GetPOST('importcsv'); - if($import!='' || $importcsv!='') - { - if($import!='') - { - $lagerimport = $this->app->Secure->GetPOST('lagerimport'); - $lagerimport = str_replace(['\\r\\n','"', ' '],["\r\n",'',''],$lagerimport); - if (strpos($lagerimport, ',') !== false) { - $tmp = explode(',',$lagerimport); - } else { - $tmp = explode("\r\n",$lagerimport); - } - } else if ($importcsv!='') { - $lagerimport = file_get_contents($_FILES['csv']['tmp_name']); - $lagerimport = str_replace(['\\r\\n','"', ' ',','],["\r\n",'','',';'],$lagerimport); - - if (strpos($lagerimport, ';') !== false) { - $tmp2 = explode("\n",$lagerimport); - foreach($tmp2 as $key=>$row) - { - $rowtmp = explode(";",$row); - if(isset($rowtmp[0]) && $rowtmp[0]!="") - { - $tmp[] = $rowtmp[0]; - $tmpsort[] = $rowtmp[1]; - } - } - } - else { - $tmp = explode("\r\n",$lagerimport); - } - } - - $neue=0; - $neuesort=0; - $ctmp = !empty($tmp)?count($tmp):0; - for($i=0;$i<$ctmp;$i++) - { - $lagerabkuerzung = $tmp[$i]; - $lagersort = $tmpsort[$i]; - // new line + spaces entfernen - $lagerabkuerzung = trim(preg_replace('/\s+/', ' ', $lagerabkuerzung)); - $lagersort = trim(preg_replace('/\s+/', ' ', $lagersort)); - - if(empty($lagerabkuerzung)){ - continue; - } - - $check = $this->app->DB->Select("SELECT id FROM lager_platz WHERE kurzbezeichnung='$lagerabkuerzung' LIMIT 1"); - if($check <= 0) - { - // Anlegen - $check = $this->app->erp->CreateLagerplatz($id,$lagerabkuerzung); - - $neue++; - } - if($check > 0 && $lagersort!="") - { - $neuesort++; - $this->app->DB->Update("UPDATE lager_platz SET rownumber='".$lagersort."' WHERE id='".$check."' LIMIT 1"); - } - } - - - - $this->app->Tpl->Set('IMPORT',$lagerimport); - - if((!empty($tmp)?count($tmp):0) > 0) { - $sorttxt = ($neuesort > 0?" ($neuesort x Reihenfolge angepasst)":""); - if($neue == 1){ - $this->app->Tpl->Set('MESSAGE3', "
    $neue Regal wurde neu angelegt$sorttxt!
    "); - } - else if($neue > 1){ - $this->app->Tpl->Set('MESSAGE3', "
    $neue Lagerplätze wurden neu angelegt$sorttxt!
    "); - } - else{ - $this->app->Tpl->Set('MESSAGE3', "
    Keine neuen Lagerplätze angelegt! Alle bereits gefunden$sorttxt.
    "); - } - } - else{ - $this->app->Tpl->Set('MESSAGE3', "
    Es wurden keine Lagerplätze angegeben!
    "); - } - } - - $speichern = $this->app->Secure->GetPOST('speichern'); - - if($speichern!='') { - $kurzbezeichnung = $this->app->Secure->GetPOST('kurzbezeichnung'); - $autolagersperre=$this->app->Secure->GetPOST('autolagersperre'); - $verbrauchslager=$this->app->Secure->GetPOST('verbrauchslager'); - $breite=$this->app->Secure->GetPOST('breite'); - $laenge=$this->app->Secure->GetPOST('laenge'); - $hoehe=$this->app->Secure->GetPOST('hoehe'); - $sperrlager=$this->app->Secure->GetPOST('sperrlager'); - $poslager=$this->app->Secure->GetPOST('poslager'); - $abckategorie=$this->app->Secure->GetPOST('abckategorie'); - $regalart=$this->app->Secure->GetPOST('regalart'); - $rownumber=(int)$this->app->Secure->GetPOST('rownumber'); - $allowproduction=(int)$this->app->Secure->GetPOST('allowproduction'); - - $allowed = '/[^a-z0-9A-Z\-\_\.]/i'; - $kurzbezeichnung = preg_replace($allowed,'',$kurzbezeichnung); - $kurzbezeichnung = substr($kurzbezeichnung,0,15); - - $adresse=$this->app->Secure->GetPOST('adresse'); - $adresse = trim($adresse); - $rest = explode(' ',$adresse); - $rest = $rest[0]; - $adresseid = $this->app->DB->Select("SELECT id FROM adresse WHERE id='$rest' AND geloescht=0 LIMIT 1"); - - $check = $this->app->DB->Select("SELECT id FROM lager_platz WHERE kurzbezeichnung='$kurzbezeichnung' AND kurzbezeichnung!='' LIMIT 1"); - if($check<=0 && $kurzbezeichnung!='') { - $breite = str_replace(',','.',$breite); - $hoehe = str_replace(',','.',$hoehe); - $laenge = str_replace(',','.',$laenge); - - $this->app->DB->Insert( - sprintf( - "INSERT INTO lager_platz - (lager,kurzbezeichnung,autolagersperre,verbrauchslager,sperrlager, - breite,laenge,hoehe,poslager,adresse,abckategorie,regalart,rownumber,allowproduction) - VALUES - (%d,'%s',%d,%d,%d,%f,%f,%f,%d,%d,'%s','%s', %d, %d)", - $id, $kurzbezeichnung, $autolagersperre,$verbrauchslager,$sperrlager, - $breite, $laenge, $hoehe,$poslager,$adresseid, $abckategorie,$regalart, $rownumber,$allowproduction - ) - ); - - $msg = $this->app->erp->base64_url_encode("
    Das Regal wurde angelegt!
    "); - $this->app->Location->execute("index.php?module=lager&action=platz&id=$id&msg=$msg"); - } - if($kurzbezeichnung==''){ - $this->app->Tpl->Set('MESSAGE', "
    Das Regal wurde nicht angelegt! Bitte geben Sie einen Namen an!
    "); - } - else{ - $this->app->Tpl->Set('MESSAGE', "
    Das Regal wurde nicht angelegt! Der Name existiert bereits in diesem oder einem anderem Lager. - Bitte einen anderen wählen!
    "); - } - } - - $this->app->YUI->AutoComplete('adresse','adresse'); - - $this->app->Tpl->Set('KURZBEZEICHNUNG',$kurzbezeichnung); - $this->app->Tpl->Set('ADRESSE',$adresse); - if($autolagersperre=='1') { - $this->app->Tpl->Set('AUTOLAGERSPERRE','checked'); - } - if($poslager=='1') { - $this->app->Tpl->Set('POSLAGER','checked'); - } - if($verbrauchslager=='1') { - $this->app->Tpl->Set('VERBRAUCHSLAGER','checked'); - } - if($sperrlager=='1') { - $this->app->Tpl->Set('SPERRLAGER','checked'); - } - - if($allowproduction=='1') { - $this->app->Tpl->Set('ALLOWPRODUCTION','checked'); - } - - $this->app->Tpl->Set('ABCKATEGORIE',$this->app->erp->GetLagerABCKategorie($abckategorie)); - $this->app->Tpl->Set('REGALART',$this->app->erp->GetLagerRegalart($regalart)); - $this->app->YUI->HideFormular('sperrlager',['checked'=>'dummy','unchecked'=>'trsperrlager']); - $this->app->Tpl->Parse('TAB2', "lager_platz.tpl"); - - - $this->app->Tpl->Set('SUBSUBHEADING', 'Lagerplätze'); - - $this->app->YUI->TableSearch('TAB1', 'lagerplatztabelle', 'show','','',basename(__FILE__), __CLASS__); - - $this->app->Tpl->Parse('PAGE', 'lagerplatzuebersicht.tpl'); - } - - public function LagerPlatzEditPopup() { - $frame = $this->app->Secure->GetGET('frame'); - $id = $this->app->Secure->GetGET('id'); - // nach page inhalt des dialogs ausgeben - // $widget = new WidgetLager_platz($this->app,TAB1); - $sid = $this->app->DB->Select("SELECT lager FROM lager_platz WHERE id='$id' LIMIT 1"); - - $this->app->erp->MenuEintrag("index.php?module=lager&action=platz&id=$sid","zurück zur Übersicht"); - - $this->app->Tpl->Set('ABBRECHEN',""); - // $widget->form->SpecialActionAfterExecute("close_refresh", "index.php?module=lager&action=platz&id=$sid"); - // $widget->Edit(); - - $speichern = $this->app->Secure->GetPOST('speichern'); - - if($speichern!='') - { - $kurzbezeichnung = $this->app->Secure->GetPOST('kurzbezeichnung'); - $autolagersperre=$this->app->Secure->GetPOST('autolagersperre'); - $verbrauchslager=$this->app->Secure->GetPOST('verbrauchslager'); - $sperrlager=$this->app->Secure->GetPOST('sperrlager'); - $poslager=$this->app->Secure->GetPOST('poslager'); - $breite=$this->app->Secure->GetPOST('breite'); - $laenge=$this->app->Secure->GetPOST('laenge'); - $hoehe=$this->app->Secure->GetPOST('hoehe'); - $adresse=$this->app->Secure->GetPOST('adresse'); - $abckategorie=$this->app->Secure->GetPOST('abckategorie'); - $regalart=$this->app->Secure->GetPOST('regalart'); - $rownumber = $this->app->Secure->GetPOST('rownumber'); - $allowproduction = $this->app->Secure->GetPOST('allowproduction'); - - $allowed = '/[^a-z0-9A-Z\-\_\.]/i'; - $kurzbezeichnung = preg_replace($allowed,'',$kurzbezeichnung); - $kurzbezeichnung = substr($kurzbezeichnung,0,15); - - $adresse=$this->app->Secure->GetPOST('adresse'); - $adresse = trim($adresse); - $rest = explode(' ',$adresse); - $rest = $rest[0]; - $adresseid = $this->app->DB->Select("SELECT id FROM adresse WHERE id='$rest' AND geloescht=0 LIMIT 1"); - - - $check = $this->app->DB->Select("SELECT id FROM lager_platz WHERE kurzbezeichnung='$kurzbezeichnung' AND kurzbezeichnung!='' AND id!='$id' LIMIT 1"); - if($check<=0 && $kurzbezeichnung!='') - { - $breite = str_replace(',','.',$breite); - $hoehe = str_replace(',','.',$hoehe); - $laenge = str_replace(',','.',$laenge); - - $this->app->DB->Update( - sprintf( - "UPDATE lager_platz - SET kurzbezeichnung='%s',autolagersperre=%d,verbrauchslager=%d,sperrlager=%d,poslager=%d, adresse=%d, - breite=%f,laenge=%f,hoehe=%f,abckategorie='%s',regalart='%s', rownumber = %d, allowproduction = %d - WHERE id=%d - LIMIT 1", - $kurzbezeichnung,$autolagersperre, $verbrauchslager,$sperrlager,$poslager,$adresseid, - $breite,$laenge,$hoehe,$abckategorie,$regalart,$rownumber,$allowproduction, - $id - ) - ); - - $msg = $this->app->erp->base64_url_encode('
    Das Regal wurde geändert!
    '); - $this->app->Location->execute("index.php?module=lager&action=platz&id=$sid&msg=$msg"); - } - if($kurzbezeichnung==''){ - $this->app->Tpl->Set('MESSAGE', "
    Das Regal wurde nicht geändert! Bitte geben Sie einen Namen an!
    "); - } - else{ - $this->app->Tpl->Set('MESSAGE', "
    Das Regal wurde nicht geändert! Der Name existiert in diesem oder einen anderem Lager bereits. Bitte einen anderen wählen!
    "); - } - $this->app->Tpl->Set('ADRESSE',$adresse); - $this->app->Tpl->Set('KURZBEZEICHNUNG',$kurzbezeichnung); - if($autolagersperre=='1') { - $this->app->Tpl->Set('AUTOLAGERSPERRE','checked'); - } - if($verbrauchslager=='1') { - $this->app->Tpl->Set('VERBRAUCHSLAGER','checked'); - } - if($sperrlager=='1') { - $this->app->Tpl->Set('SPERRLAGER','checked'); - } - if($poslager=='1') { - $this->app->Tpl->Set('POSLAGER','checked'); - } - if($allowproduction=='1') { - $this->app->Tpl->Set('ALLOWPRODUCTION','checked'); - } - - $this->app->Tpl->Set('ABCKATEGORIE',$this->app->erp->GetLagerABCKategorie($abckategorie)); - $this->app->Tpl->Set('REGALART',$this->app->erp->GetLagerRegalart($regalart)); - - } else { - - $tmp = $this->app->DB->SelectRow( - sprintf( - 'SELECT * FROM lager_platz WHERE id=%d LIMIT 1', - $id - ) - ); - $kurzbezeichnung = $tmp['kurzbezeichnung']; - $autolagersperre = $tmp['autolagersperre']; - $verbrauchslager = $tmp['verbrauchslager']; - $adresse = $tmp['adresse']; - - $breite = $tmp['breite']; - $laenge = $tmp['laenge']; - $hoehe = $tmp['hoehe']; - $rownumber = $tmp['rownumber']; - - $sperrlager = $tmp['sperrlager']; - $poslager = $tmp['poslager']; - $abckategorie = $tmp['abckategorie']; - $regalart = $tmp['regalart']; - $allowproduction = $tmp['allowproduction']; - $this->app->Tpl->Set('KURZBEZEICHNUNG',$kurzbezeichnung); - $adresse = $this->app->DB->Select("SELECT CONCAT(id,' ',name) FROM adresse WHERE id='$adresse' LIMIT 1"); - $this->app->Tpl->Set('ADRESSE',$adresse); - - $this->app->Tpl->Set('LAENGE',$laenge); - $this->app->Tpl->Set('BREITE',$breite); - $this->app->Tpl->Set('HOEHE',$hoehe); - $this->app->Tpl->Set('ROWNUMBER',$rownumber); - - $this->app->Tpl->Set('ABCKATEGORIE',$this->app->erp->GetLagerABCKategorie($abckategorie)); - $this->app->Tpl->Set('REGALART',$this->app->erp->GetLagerRegalart($regalart)); - - if($autolagersperre=='1') { - $this->app->Tpl->Set('AUTOLAGERSPERRE','checked'); - } - if($verbrauchslager=='1') { - $this->app->Tpl->Set('VERBRAUCHSLAGER','checked'); - } - if($sperrlager=='1') { - $this->app->Tpl->Set('SPERRLAGER','checked'); - } - if($poslager=='1') { - $this->app->Tpl->Set('POSLAGER','checked'); - } - - if($allowproduction == '1') { - $this->app->Tpl->Set('ALLOWPRODUCTION','checked'); - } - } - - $this->app->erp->MenuEintrag('index.php?module=lager&action=platzeditpopup&id='.$id,'Details'); - $this->app->YUI->AutoComplete('adresse','adresse'); - $this->app->YUI->HideFormular('sperrlager',['checked'=>'dummy','unchecked'=>'trsperrlager']); - $this->app->Tpl->Parse('TAB1', 'lager_platz.tpl'); - - $this->app->Tpl->Set('TABNAME', 'Regal'); - $this->app->Tpl->Parse('PAGE', 'tabview.tpl'); - } - - public function LagerCreate() { - - $this->app->erp->Headlines('Lager', 'anlegen'); - $this->app->erp->MenuEintrag('index.php?module=lager&action=list', 'Zurück zur Übersicht'); - parent::LagerCreate(); - } - - public function LagerEtikettenlist() - { - $this->app->erp->Headlines('','Etiketten'); - - $this->app->YUI->AutoComplete('von','lagerplatz'); - $this->app->YUI->AutoComplete('bis','lagerplatz'); - - $etikettenauswahl = $this->app->Secure->GetPOST('etikettenauswahl'); - $etikettendrucker = $this->app->Secure->GetPOST('etikettendrucker'); - $von = $this->app->Secure->GetPOST('von'); - $bis = $this->app->Secure->GetPOST('bis'); - - $cmd = $this->app->Secure->GetGET('cmd'); - $data = $this->app->Secure->GetGET('data'); - - if($cmd==='holeanzahl'){ - if($von!='') - { - $error = ''; - $data = $this->app->erp->base64_url_encode(serialize(array('drucker'=>$etikettendrucker,'etiketten'=>$etikettenauswahl,'von'=>$von,'bis'=>$bis))); - $tmp = $this->app->DB->SelectArr("SELECT kurzbezeichnung FROM lager_platz WHERE kurzbezeichnung >='$von' AND kurzbezeichnung<='$bis'"); - - if((!empty($tmp)?count($tmp):0)>0){ - echo json_encode(array('status'=>1, 'anzahl' => (!empty($tmp)?count($tmp):0), 'daten'=>$data)); - $this->app->ExitXentral(); - } - - $error .= 'In diesem Bereich wurden keine Lagerplätze gefunden!'; - echo json_encode(array('status'=>0,'statusText'=>$error)); - $this->app->ExitXentral(); - } - $this->app->ExitXentral(); - } - if($cmd==='print') - { - $data = unserialize($this->app->erp->base64_url_decode($data)); - - $arr = $this->app->DB->SelectArr("SELECT kurzbezeichnung,id FROM lager_platz WHERE kurzbezeichnung >='".$data['von']."' AND kurzbezeichnung<='".$data['bis']."' ORDER by kurzbezeichnung"); - if($data['etiketten']>0){ - $label = $data['etiketten']; - } - else - { - $label = "lagerplatz_klein"; - } - $carr = !empty($arr)?count($arr):0; - for ($i = 0;$i < $carr;$i++) { - $this->app->erp->EtikettenDrucker($label,1,'lager_platz',$arr[$i]['id'],'','',$data['drucker']); - } - - $msg = $this->app->erp->base64_url_encode("
    Die Etiketten wurden gedruckt!
    "); - echo json_encode(array('status'=>1)); - $this->app->ExitXentral(); - } - $this->LagerHauptmenu(); - $etiketten = $this->app->erp->GetSelectEtiketten("lagerplatz_klein",$etikettenauswahl); - if($etiketten=="") $etiketten=""; - - $drucker = $this->app->erp->GetSelectEtikettenDrucker($etikettendrucker); - - $druckbutton = ""; - $this->app->Tpl->Set('FORMULAR',"
    - - - -
    {|Lagerplatz|} ({|von|}):
    {|Lagerplatz|} ({|bis|}): $druckbutton
    {|Etikett|}:
    {|Drucker|}:
    -


    "); - - $this->app->Tpl->Parse('PAGE', 'lager_etikettenlist.tpl'); - } - - public function LagerHauptmenu() { - if($this->app->Secure->GetGET('action')!=='list') { - $this->app->erp->MenuEintrag('index.php?module=lager&action=list','zurück zur Übersicht'); - } - - $this->app->erp->MenuEintrag('index.php?module=lager&action=list', 'Übersicht'); - $this->app->erp->MenuEintrag('index.php?module=lager&action=etikettenlist', 'Lageretiketten'); - $this->app->erp->MenuEintrag('index.php?module=lager&action=create', 'Neues Lager anlegen'); - $this->app->erp->MenuEintrag('index.php?module=lager&action=bestand', 'Lagerbestand'); - $this->app->erp->MenuEintrag('index.php?module=lager&action=wert', 'Lagerbestandsberechnung'); - $this->app->erp->MenuEintrag('index.php?module=lager&action=allebewegungen', 'Bewegungen'); - - if($this->app->erp->Version()!=='stock') - { - } - - if($this->app->erp->RechteVorhanden('lagerinventur','bestand')){ - $this->app->erp->MenuEintrag('index.php?module=lagerinventur&action=bestand', 'Inventur'); - } - - $this->app->erp->Headlines('Lagerverwaltung'); - $this->app->erp->RunMenuHook('lager_hauptmenu'); - } - - - function LagerDoppelteWarnung() - { - $check_double_lager = $this->app->DB->SelectArr("SELECT bezeichnung, COUNT(bezeichnung) AS NumOccurrences FROM lager WHERE geloescht!=1 GROUP BY bezeichnung HAVING ( COUNT(bezeichnung) > 1 )"); - $ccheck_double_lager = !empty($check_double_lager)?count($check_double_lager):0; - if($ccheck_double_lager>0) { - $bezeichnung = ''; - for($icheck=0;$icheck<$ccheck_double_lager;$icheck++) { - $bezeichnung .= ' ' . $check_double_lager[$icheck]['bezeichnung']; - } - /*if(trim($bezeichnung)=='') { - $belege='ohne Bezeichnung'; - }*/ - - //$gesamt_lager= $ccheck_double_lager; - $this->app->Tpl->Set('MESSAGE','
    Achtung! Doppelte Bezeichnungen: '.$bezeichnung.'
    '); - //$this->app->erp->InternesEvent($this->app->User->GetID(),'Achtung! Doppelte Bezeichnungen: '.$bezeichnung,"warning",0); - } - } - - public function LagerList() { - $this->LagerHauptmenu(); - $this->LagerDoppelteWarnung(); - - $this->app->YUI->TableSearch('TAB1', 'lagertabelle', 'show','','',basename(__FILE__), __CLASS__); - $this->app->Tpl->Parse('PAGE', "lageruebersicht.tpl"); - } - - - public function LagerMenu() { - $id = $this->app->Secure->GetGET('id'); - $this->app->erp->Headlines('Lager'); - - $bezeichnung = $this->app->DB->Select("SELECT bezeichnung FROM lager WHERE id='$id' LIMIT 1"); - - $this->app->erp->Headlines('Lagerverwaltung', $bezeichnung); - - $this->app->erp->MenuEintrag("index.php?module=lager&action=edit&id=$id", "Details"); - $this->app->erp->MenuEintrag("index.php?module=lager&action=platz&id=$id", "Regale"); - $this->app->erp->MenuEintrag("index.php?module=lager&action=inhalt&id=$id", "Bestand"); - $this->app->erp->MenuEintrag("index.php?module=lager&action=bewegung&id=$id", "Bewegungen"); - - $this->app->erp->MenuEintrag("index.php?module=lager&action=list", "Zurück zur Übersicht"); - } - - public function LagerEdit() { - $this->app->Tpl->Set('AKTIV_TAB1', "selected"); - $this->app->Tpl->Set('ABBRECHEN',""); - parent::LagerEdit(); - $this->LagerDoppelteWarnung(); - $this->LagerMenu(); - } - - public function LagerEtiketten() { - $this->LagerMenu(); - $this->app->Tpl->Set('PAGE', "


    Etiketten"); - } -} += CURDATE( ) + ) + GROUP BY artikel) ".$tab1." + INNER JOIN einkaufspreise ".$tab2." ON $tab1.id = $tab2.id + ) + "; + } + + /** + * @param string $typ + * @param bool $live + * + * @return string + */ + static function Waehrung($typ = 'letzterek', $live = true) + { + if(!$live) + { + switch($typ) + { + case 'letzterek': + return "if(ifnull(lw.preis_letzterek,0) <> 0,if(lw.waehrungletzt<>'',lw.waehrungletzt,'EUR'),if(ifnull(ek.waehrung,'')<>'',ek.waehrung,'EUR'))"; + break; + case 'letzerekarchiv': + return "if(ifnull(lw.preis_letzterek,0) <> 0,if(lw.waehrungletzt<>'',lw.waehrungletzt,'EUR'),'EUR')"; + break; + case 'inventurwertarchiv': + return "if(ifnull(lw.inventurwert,0) <> 0,'EUR', + + if(ifnull(lw.preis_letzterek,0) <> 0, + if(lw.waehrungletzt <> '',lw.waehrungletzt,'EUR'), + 'EUR' + ) + )"; + break; + case 'inventurwert': + return "if(ifnull(lw.inventurwert,0) <> 0,'EUR', + if(ifnull(art.inventurekaktiv,0) <> 0 + , 'EUR', + if(ifnull(lw.preis_letzterek,0) <> 0, + if(lw.waehrungletzt <> '',lw.waehrungletzt,'EUR'), + if(ifnull(ek.waehrung,'')<>'',ek.waehrung,'EUR') + ) + ) + )"; + break; + case 'kalkulierterekarchiv': + return " + if( + ifnull(lw.preis_kalkulierterek,0) <> 0 + , + if(lw.waehrungkalk<>'',lw.waehrungkalk,'EUR') + , + if(ifnull(lw.preis_letzterek,0) <> 0, + if(lw.waehrungletzt<>'',lw.waehrungletzt,'EUR') + ,'EUR' + ) + )"; + break; + default: + return " + if(ifnull(lw.preis_kalkulierterek,0) <> 0,if(lw.waehrungkalk<>'',lw.waehrungkalk,'EUR'), + if(ifnull(art.verwendeberechneterek,0) <> 0, if(ifnull(art.berechneterekwaehrung,'')<>'',art.berechneterekwaehrung,'EUR') + , + if(ifnull(lw.preis_letzterek,0) <> 0,if(lw.waehrungletzt<>'',lw.waehrungletzt,'EUR'),if(ifnull(ek.waehrung,'')<>'',ek.waehrung,'EUR')) + ) + )"; + break; + } + }else{ + switch($typ) + { + case 'letzterek': + case 'letzterekarchiv': + return "if(ifnull(ek.waehrung,'')<>'',ek.waehrung,'EUR')"; + break; + case 'inventurwert': + case 'inventurwertarchiv': + return "if(ifnull(art.inventurekaktiv,0) <> 0,'EUR',if(ifnull(ek.waehrung,'')<>'',ek.waehrung,'EUR'))"; + break; + default: + return " + if(ifnull(art.verwendeberechneterek,0) <> 0,if(ifnull(art.berechneterekwaehrung,'')<>'',art.berechneterekwaehrung,'EUR') + , + if(ifnull(ek.waehrung,'')<>'',ek.waehrung,'EUR') + ) + "; + break; + } + } + } + + /** + * @param string $typ + * @param bool $live + * + * @return string + */ + public static function EinzelPreis($typ = 'letzterek', $live = true) + { + if(!$live) + { + switch($typ) + { + case 'letzterekarchiv': + return "if(ifnull(lw.preis_letzterek,0) <> 0,lw.preis_letzterek,0)"; + break; + case 'letzterek': + return "if(ifnull(lw.preis_letzterek,0) <> 0,lw.preis_letzterek,ifnull(ek.preis,0))"; + break; + case 'inventurwertarchiv': + return "if(ifnull(lw.inventurwert,0) <> 0,lw.inventurwert, + ifnull(lw.preis_letzterek,0) + )"; + break; + case 'inventurwert': + return "if(ifnull(lw.inventurwert,0) <> 0,lw.inventurwert, + if(ifnull(art.inventurekaktiv,0) <> 0 + , art.inventurek, + if(ifnull(lw.preis_letzterek,0) <> 0,lw.preis_letzterek,ifnull(ek.preis,0)) + ) + )"; + break; + case 'kalkulierterekarchiv': + return " + if( + ifnull(lw.preis_kalkulierterek,0) <> 0, + lw.preis_kalkulierterek, + ifnull(lw.preis_letzterek,0) + )"; + break; + default: + return " + if(ifnull(lw.preis_kalkulierterek,0) <> 0,lw.preis_kalkulierterek, + if(ifnull(art.verwendeberechneterek,0) <> 0,art.berechneterek + ,if(ifnull(lw.preis_letzterek,0) <> 0, + lw.preis_letzterek, + ifnull(ek.preis,0) + ) + ) + )"; + break; + } + }else{ + switch($typ) + { + case 'letzterek': + case 'letzterekarchiv': + return "ifnull(ek.preis,0)"; + break; + case 'inventurwertarchiv': + case 'inventurwert': + return "if(ifnull(art.inventurekaktiv,0) <> 0,art.inventurek,ifnull(ek.preis,0))"; + break; + default: + return " + if(ifnull(art.verwendeberechneterek,0) <> 0,art.berechneterek + , + ifnull(ek.preis,0) + ) + "; + break; + } + } + } + + /** + * @param string $typ + * @param bool $live + * + * @return string + */ + public static function KursJoin($typ, $live = true) + { + return " LEFT JOIN ( + SELECT max(kurs) as kurs, waehrung_von, waehrung_nach FROM waehrung_umrechnung WHERE (isnull(gueltig_bis) OR gueltig_bis >= now() OR gueltig_bis = '0000-00-00') AND (waehrung_von LIKE 'EUR' OR waehrung_nach LIKE 'EUR') GROUP BY waehrung_von,waehrung_nach + ) wt ON wt.waehrung_nach <> 'EUR' AND wt.waehrung_nach = ".self::Waehrung($typ, $live)." OR wt.waehrung_von <> 'EUR' AND wt.waehrung_von = ".self::Waehrung($typ, $live)." "; + + } + + /** + * @param Application $app + * @param string $typ + * @param null|bool $live + * + * @return string + */ + public static function PreisUmrechnung($app, $typ, $live = null) + { + $kursusd = $app->erp->GetWaehrungUmrechnungskurs('EUR','USD'); + $kurschf = $app->erp->GetWaehrungUmrechnungskurs('EUR','CHF'); + + if(!$live) + { + return ' + if( + ifnull(lw.kursletzt,0)<> 0 + , + 1 / lw.kursletzt + , + if( + ifnull(wt.kurs,0) <> 0 + , + if( + wt.waehrung_nach = '.self::Waehrung($typ, $live).', + (1/wt.kurs), + wt.kurs + ) + , + if('.self::Waehrung($typ, $live).' = \'USD\', + 1.0 / '.$kursusd.', + if('.self::Waehrung($typ, $live).' = \'CHF\', + 1.0 / '.$kurschf.', + 1) + ) + ) + ) + * + '.self::EinzelPreis($typ, $live); + + } + return ' + + if( + ifnull(wt.kurs,0) <> 0 + , + if( + wt.waehrung_nach = '.self::Waehrung($typ, $live).', + (1/wt.kurs), + wt.kurs + ) + , + if('.self::Waehrung($typ, $live).' = \'USD\', + 1.0 / '.$kursusd.', + if('.self::Waehrung($typ, $live).' = \'CHF\', + 1.0 / '.$kurschf.', + 1) + ) + ) + * + '.self::EinzelPreis($typ, $live); + + + /* + + if(!$live) + {//aus Cronjob + if($typ == 'letzterek') + { + return ' + if( + ifnull(lw.kursletzt,0)<> 0 + , + 1 / lw.kursletzt + , + if( + ifnull(wt.kurs,0) <> 0 + , + if( + wt.waehrung_nach = lw.waehrungletzt, + (1/wt.kurs), + wt.kurs + ) + , + if(lw.waehrungletzt = \'USD\', + 1.0 / '.$kursusd.', + if(lw.waehrungletzt = \'CHF\', + 1.0 / '.$kurschf.', + 1) + ) + ) + ) + * ifnull(lw.preis_letzterek,0) + '; + }else{ + return ' + if( + if(ifnull(lw.preis_kalkulierterek,0) <> 0,ifnull(lw.kurskalk,0),ifnull(lw.kursletzt,0))<> 0 + , + 1 / if(ifnull(lw.preis_kalkulierterek,0) <> 0,ifnull(lw.kurskalk,0),ifnull(lw.kursletzt,0)) + , + if( + ifnull(wt.kurs,0) <> 0 + , + if( + wt.waehrung_nach = if(ifnull(lw.preis_kalkulierterek,0) <> 0,lw.kurskalk,lw.kursletzt), + (1/wt.kurs), + wt.kurs + ) + , + if(if(ifnull(lw.preis_kalkulierterek,0) <> 0,lw.kurskalk,lw.kursletzt) = \'USD\', + 1.0 / '.$kursusd.', + if(if(ifnull(lw.preis_kalkulierterek,0) <> 0,lw.kurskalk,lw.kursletzt) = \'CHF\', + 1.0 / '.$kurschf.', + 1) + ) + ) + ) + * if(ifnull(lw.preis_kalkulierterek,0) <> 0,lw.preis_kalkulierterek,ifnull(lw.preis_letzterek,0)) + '; + } + }else{ + if($typ == 'letzterek') + { + return ' + if( + ifnull(wt.kurs,0) <> 0 + , + if( + wt.waehrung_nach = ek.waehrung, + (1/wt.kurs), + wt.kurs + ) + , + if(ifnull(ek.waehrung,\'\') = \'USD\', + 1.0 / '.$kursusd.', + if(ifnull(ek.waehrung,\'\') = \'CHF\', + 1.0 / '.$kurschf.', + 1) + ) + ) + + * ifnull(ek.preis,0) + '; + }else{ + return ' + if( + ifnull(wt.kurs,0) <> 0 + , + if( + wt.waehrung_nach = if(ifnull(art.berechneterek,0) <> 0,art.berechneterekwaehrung,ifnull(ek.waehrung,\'\')), + (1/wt.kurs), + wt.kurs + ) + , + if(if(ifnull(art.berechneterek,0) <> 0,art.berechneterekwaehrung,ifnull(ek.waehrung,\'\')) = \'USD\', + 1.0 / '.$kursusd.', + if(if(ifnull(art.berechneterek,0) <> 0,art.berechneterekwaehrung,ifnull(ek.waehrung,\'\')) = \'CHF\', + 1.0 / '.$kurschf.', + 1) + ) + ) + + * if(ifnull(art.berechneterek,0) <> 0,art.berechneterek,ifnull(ek.preis,0)) + '; + } + + } + */ + } + + /** + * @param Application $app + * @param string $name + * @param array $erlaubtevars + * + * @return array + */ + public static function TableSearch($app, $name, $erlaubtevars) + { + $extended_mysql55 = ",'de_DE'"; + switch($name) + { + case 'lagerbestandsberechnung': + $allowed['lager'] = array('wert'); + // headings + $heading = array('Artikel-Nr.', 'Bezeichnung','Projekt', 'Lager','Menge','Letzter Preis', 'Gesamt','Inventurwert','Inv. Gesamt' ,'Menü'); + $width = array('10%', '50%','5%', '20%', '10%', '10%','10%', '10%', '1%'); + $findcols = array('a.nummer', 'a.name_de', 'p.abkuerzung',"CONCAT(la.bezeichnung,' / ',lp.kurzbezeichnung)", 'l.menge', "IFNULL(k.minpreis,0)", "IFNULL(k.minpreis,0)*l.menge",'IFNULL(a.inventurek,0)','IFNULL(a.inventurek,0)*l.menge', 'l.id'); + $searchsql = array('a.nummer', 'a.name_de','p.abkuerzung','la.bezeichnung','lp.kurzbezeichnung'); + $menu = "
    " . "" . "Conf->WFconf['defaulttheme']}/images/forward.svg\" border=\"0\">" . "
    "; + $sumcol = array(7,9); + $alignright = array(5,6,7,8,9); + // SQL statement + //$sql = "SELECT SQL_CALC_FOUND_ROWS l.id, a.nummer, a.name_de, CONCAT(la.bezeichnung,' / ',lp.kurzbezeichnung) , ".$this->app->erp->FormatMenge('l.menge').",FORMAT(IFNULL((SELECT e.preis FROM einkaufspreise e WHERE e.geloescht!=1 AND (e.gueltig_bis='0000-00-00' OR e.gueltig_bis <=NOW()) AND e.artikel=l.artikel ORDER by e.id DESC LIMIT 1),0),2{$extended_mysql55}) as preis, FORMAT(IFNULL((SELECT e.preis FROM einkaufspreise e WHERE e.geloescht!=1 AND (e.gueltig_bis='0000-00-00' OR e.gueltig_bis <=NOW()) AND e.artikel=l.artikel ORDER by e.id DESC LIMIT 1),0)*l.menge,2{$extended_mysql55}) as wert, a.id FROM lager_platz_inhalt l LEFT JOIN artikel a ON a.id=l.artikel LEFT JOIN lager_platz lp ON lp.id=l.lager_platz LEFT JOIN lager la ON la.id=lp.lager"; + + $sql = "SELECT SQL_CALC_FOUND_ROWS l.id, a.nummer, a.name_de, p.abkuerzung, CONCAT(la.bezeichnung,' / ',lp.kurzbezeichnung) ,".$app->erp->FormatMenge('l.menge').", + FORMAT(IFNULL(k.minpreis,0),2{$extended_mysql55}) as preis, + FORMAT(IFNULL(k.minpreis,0)*l.menge,2{$extended_mysql55}) as wert,FORMAT(IFNULL(a.inventurek,0),2{$extended_mysql55}) as inv,FORMAT(IFNULL(a.inventurek,0)*l.menge,2{$extended_mysql55}) as invges, a.id + FROM lager_platz_inhalt l LEFT JOIN artikel a ON a.id=l.artikel + LEFT JOIN (SELECT max( e.id ) AS maxid, artikel + FROM einkaufspreise e + WHERE e.geloescht !=1 + AND ( + e.gueltig_bis = '0000-00-00' + OR e.gueltig_bis >= NOW( ) + ) + GROUP BY artikel) k1 ON k1.artikel = a.id + LEFT JOIN (SELECT id, preis as minpreis FROM einkaufspreise ) k ON k1.maxid = k.id + LEFT JOIN projekt p ON p.id=a.projekt + LEFT JOIN lager_platz lp ON lp.id=l.lager_platz + LEFT JOIN lager la ON la.id=lp.lager"; + + + $where = " a.id > 0 AND a.geloescht!=1 "; + + //$groupby=" GROUP by z.adresse_abrechnung "; + + // gesamt anzahl + + $count = "SELECT COUNT(l.id) FROM lager_platz_inhalt l LEFT JOIN artikel a ON a.id=l.artikel WHERE a.id > 0 AND a.geloescht!=1"; + + break; + case 'lagerplatztabelle': + $allowed['lager'] = array('platz'); + + // headings + + $heading = array('Bezeichnung', 'Nachschublager', 'Verbrauchslager','POS Lager', 'kein Auto-Versand','Volumen','Regalart','Kategorie','Kommissions- / Produktionslager','Sortierung','Menü'); + $width = array('15%', '10%', '10%','5%','5%','10%','10%','5%','10%','8%','1%'); + $findcols = array('l.kurzbezeichnung', "IF(l.autolagersperre,'kein Versand aus diesem Lager','')", "IF(l.verbrauchslager,'ja','')","IF(l.poslager,'ja','')","IF(l.sperrlager,'ja','')",'breite','regalart','abckategorie','a.name','l.rownumber','id'); + $searchsql = array('l.kurzbezeichnung','regalart','abckategorie','a.name'); + $defaultorder = 4; + $defaultorderdesc = 1; + $alignright = [10]; + $menu = "
    Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\">" . " Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\">" . " Conf->WFconf['defaulttheme']}/images/labelprinter.png\" border=\"0\">
    "; + + // SQL statement + $sql = "SELECT SQL_CALC_FOUND_ROWS l.id, + l.kurzbezeichnung, if(l.autolagersperre,'kein Versand aus diesem Lager','') as autolagersperre, + if(l.verbrauchslager,'ja','') as verbrauchslager, + if(l.poslager,'ja','') as poslager, + if(l.sperrlager,'ja','') as sperrlager, + if(l.laenge!=0.0,CONCAT(l.laenge,'/',l.breite,'/',l.hoehe),'-') as volumen, + l.regalart,l.abckategorie, a.name, l.rownumber, + l.id as menu FROM lager_platz l LEFT JOIN adresse a ON a.id=l.adresse "; + + $id = $app->Secure->GetGET('id'); + + // fester filter + $where = " l.geloescht=0 AND l.id!=0 AND l.lager='$id' "; + $count = "SELECT COUNT(id) FROM lager_platz WHERE geloescht=0 AND lager='$id' "; + break; + case 'lagerletztebewegungen': + $allowed['lager'] = array('letztebewegungen'); + + // headings + + // headings + + $heading = array('Datum', 'Lager', 'Menge', 'Nummer', 'Artikel', 'Richtung', 'Referenz', 'Bearbeiter', 'Projekt', 'Menü'); + $width = array('1%', '5%', '5%', '5%', '5%', '5%', '40%', '20%', '5%', '1%'); + $findcols = array('zeit', 'lager', 'menge', 'nummer', 'name_de', 'Richtung', 'referenz', 'bearbeiter', 'projekt', 'id'); + $searchsql = array('lpi.referenz', 'lpi.bearbeiter', 'p.abkuerzung', 'DATE_FORMAT(lpi.zeit,\'%d.%m.%Y\')', 'lp.kurzbezeichnung', 'a.name_de', 'a.nummer'); + $defaultorder = 10; //Optional wenn andere Reihenfolge gewuenscht + $alignright = array(3); + $defaultorderdesc = 1; + $menu = "-"; + + $sql = "SELECT SQL_CALC_FOUND_ROWS lpi.id, + DATE_FORMAT(lpi.zeit,'%d.%m.%Y') as datum, lp.kurzbezeichnung as lager, trim(lpi.menge)+0 as menge, + a.nummer, a.name_de, if(lpi.eingang,'Eingang','Ausgang') as Richtung, substring(lpi.referenz,1,60) as referenz, lpi.bearbeiter as bearbeiter, p.abkuerzung as projekt, + lpi.id FROM lager_bewegung lpi LEFT JOIN lager_platz as lp ON lpi.lager_platz=lp.id LEFT JOIN projekt p ON lpi.projekt=p.id LEFT JOIN artikel a ON a.id=lpi.artikel"; + + + $count = "SELECT COUNT(lpi.id) FROM lager_bewegung lpi LEFT JOIN lager_platz as lp ON lpi.lager_platz=lp.id LEFT JOIN projekt p ON lpi.projekt=p.id "; + break; + case 'lagertabelle': + $allowed['lager'] = array('list'); + $defaultCountry = $app->erp->Firmendaten('land'); + if(empty($defaultCountry)) { + $defaultCountry = 'DE'; + } + // headings + $heading = array('Bezeichnung', 'Projekt','Kommissions- / Produktionslager','Land','Menü'); + $width = array('60%', '10%','20%','5%', '8%'); + $findcols = array('l.bezeichnung', 'p.abkuerzung','a.name',"IF(a.land IS NULL OR a.land = '', '$defaultCountry', a.land)", 'l.id'); + $searchsql = array('l.bezeichnung', 'p.abkuerzung','a.name',"IF(a.land IS NULL OR a.land = '', '$defaultCountry', a.land)",'p.name'); + $defaultorder = 4; + $defaultorderdesc = 1; + $menu = "
    Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\">" . " Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\">" . " Conf->WFconf['defaulttheme']}/images/labelprinter.png\" border=\"0\">
    "; + + // SQL statement + $sql = "SELECT SQL_CALC_FOUND_ROWS l.id, l.bezeichnung, p.abkuerzung, a.name, + IF(a.land IS NULL OR a.land = '', '$defaultCountry', a.land), + l.id as menu + FROM `lager` AS `l` + LEFT JOIN `projekt` AS `p` ON p.id=l.projekt + LEFT JOIN `adresse` AS `a` ON a.id=l.adresse "; + + // fester filter + $where = " l.geloescht=0 AND l.id!=0 ".$app->erp->ProjektRechte(); // heute mal wieder projekt rein + $count = "SELECT COUNT(l.id) + FROM `lager` AS `l` + LEFT JOIN `projekt` AS `p` ON p.id=l.projekt + WHERE l.geloescht=0 ".$app->erp->ProjektRechte(); // heute mal wieder projekt rein + break; + case "lagerdifferenzenlagerplatz": + $allowed['lager'] = array('differenzenlagerplatz'); + + // headings + $heading = array('Artikel-Nr.', 'Artikel', 'Projekt', 'Eingang', 'Ausgang', 'Berechnet', 'Bestand', 'Differenz','Lagerplatz', 'Menü'); + $width = array('10%', '40%', '10%', '10%', '5%', '5%', '5%', '5%', '5%', '10%'); + $findcols = array('a.nummer', 'a.name_de', 'p.abkuerzung', 'l.eingang', 'l.ausgang', 'l.berechnet', 'l.bestand', 'l.differenz', 'l.lager_platz', 'a.id'); + $searchsql = array('a.nummer', 'a.name_de', 'p.abkuerzung', 'l.eingang', 'l.ausgang', 'l.berechnet', 'l.bestand', 'l.differenz', 'lp.kurzbezeichnung'); + $defaultorder = 6; + $defaultorderdesc = 1; + $alignright = array(4,5,6,7,8); + $menu = "Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\">" . " Conf->WFconf['defaulttheme']}/images/forward.svg\" border=\"0\">"; + + /* + ifnull((SELECT SUM(l.menge) FROM lager_bewegung l WHERE l.artikel=a.id AND l.eingang=1),0)- + ifnull((SELECT SUM(l.menge) FROM lager_bewegung l WHERE l.artikel=a.id AND l.eingang=0),0)- + ifnull((SELECT SUM(l.menge) FROM lager_platz_inhalt l WHERE l.artikel=a.id),0) as differenz, + */ + + // SQL statement + $sql = " + SELECT + SQL_CALC_FOUND_ROWS a.id, + a.nummer, + a.name_de, + p.abkuerzung, + ".$app->erp->FormatMenge('l.eingang').", + ".$app->erp->FormatMenge('l.ausgang').", + ".$app->erp->FormatMenge('l.berechnet').", + ".$app->erp->FormatMenge('l.bestand').", + if(l.bestand > l.berechnet, CONCAT('',".$app->erp->FormatMenge('l.berechnet').",''), + ".$app->erp->FormatMenge('l.differenz')."), + lp.kurzbezeichnung, + CONCAT(a.id,'_',lp.id) + FROM + lager_differenzen l + LEFT JOIN artikel a ON a.id=l.artikel + LEFT JOIN lager_platz lp ON lp.id = l.lager_platz + LEFT JOIN projekt p ON a.projekt = p.id + "; + + // fester filter + $where = " l.user='" . $app->User->GetID() . "' AND l.lager_platz != 0 "; + $count = "SELECT COUNT(l.id) FROM lager_differenzen l WHERE l.user='" . $app->User->GetID() . "' AND l.lager_platz != 0 "; + break; + case 'lagerdifferenzen': + $allowed['lager'] = array('differenzen'); + + // headings + $heading = array('Artikel-Nr.', 'Artikel', 'Eingang', 'Ausgang', 'Berechnet', 'Bestand', 'Differenz', 'Menü'); + $width = array('10%', '40%', '10%', '10%', '10%', '10%', '10%', '10%'); + $findcols = array('a.nummer', 'a.name_de', 'l.eingang', 'l.ausgang', 'l.berechnet', 'l.bestand', 'l.differenz', 'a.id'); + $searchsql = array('kurzbezeichnung'); + $defaultorder = 6; + $defaultorderdesc = 1; + $alignright = array(3,4,5,6,7); + $menu = "Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\">" . " "; + + /* + ifnull((SELECT SUM(l.menge) FROM lager_bewegung l WHERE l.artikel=a.id AND l.eingang=1),0)- + ifnull((SELECT SUM(l.menge) FROM lager_bewegung l WHERE l.artikel=a.id AND l.eingang=0),0)- + ifnull((SELECT SUM(l.menge) FROM lager_platz_inhalt l WHERE l.artikel=a.id),0) as differenz, + */ + + // SQL statement + $sql = "SELECT SQL_CALC_FOUND_ROWS a.id, a.nummer, a.name_de, ".$app->erp->FormatMenge('l.eingang').",".$app->erp->FormatMenge('l.ausgang').", + ".$app->erp->FormatMenge('l.berechnet')." ,".$app->erp->FormatMenge('l.bestand')." , + if(l.bestand > l.berechnet, CONCAT('',".$app->erp->FormatMenge('l.differenz').",''),".$app->erp->FormatMenge('l.differenz')."), a.id FROM lager_differenzen l + LEFT JOIN artikel a ON a.id=l.artikel"; + + // fester filter + $where = " l.user='" . $app->User->GetID() . "' AND l.lager_platz = 0 "; + $count = "SELECT COUNT(l.id) FROM lager_differenzen l WHERE l.user='" . $app->User->GetID() . "' AND l.lager_platz = 0 "; + break; + case "lager_wert": + $allowed['lager'] = array('wert'); + $app->DB->Select("SELECT waehrungkalk,waehrungletzt,kurskalk,kursletzt FROM lagerwert LIMIT 1"); + if($app->DB->error()) + { + $app->erp->CheckColumn("waehrungkalk", "VARCHAR(16)", "lagerwert", "NOT NULL DEFAULT ''"); + $app->erp->CheckColumn("waehrungletzt", "VARCHAR(16)", "lagerwert", "NOT NULL DEFAULT ''"); + $app->erp->CheckColumn("kurskalk","DECIMAL(19,8)", "lagerwert", "NOT NULL DEFAULT '0'"); + $app->erp->CheckColumn("kursletzt","DECIMAL(19,8)", "lagerwert", "NOT NULL DEFAULT '0'"); + } + $preisart = (String)$app->YUI->TableSearchFilter($name, 1, 'preisart', $app->User->GetParameter("lager_wert_preisart")); + if($preisart == '') + { + $preisart = 'letzterek'; + } + + $artikel = (String)$app->YUI->TableSearchFilter($name, 2, 'artikel', $app->User->GetParameter("lager_wert_artikel")); + if($artikel) + { + $artikel = explode(' ', $artikel); + $artikel = $app->DB->Select("SELECT id FROM artikel WHERE nummer = '".reset($artikel)."' AND (geloescht = 0 OR isnull(geloescht)) LIMIT 1"); + } + + $datum = (String)$app->YUI->TableSearchFilter($name, 3, 'datum', $app->User->GetParameter("lager_wert_datum")); + if($datum) + { + $datum = $app->String->Convert($datum, '%1.%2.%3', '%3-%2-%1'); + }else{ + $datum = date('Y-m-d'); + } + $colmenge = 'lw.menge'; + if($datum == date('Y-m-d')) + { + $live = true; + $colmenge = 'lpi.menge'; + }else{ + $live = false; + $_datum = $app->DB->Select("SELECT max(datum) FROM lagerwert WHERE datum <= '$datum' AND '$datum' < curdate() "); + if($_datum) + { + $datum = $_datum; + } + } + + $lager = (String)$app->YUI->TableSearchFilter($name, 4, 'lager', $app->User->GetParameter("lager_lager")); + if($lager) + { + $lager = $app->DB->Select("SELECT id FROM lager WHERE bezeichnung = '$lager' AND (geloescht = 0 OR isnull(geloescht)) LIMIT 1"); + } + $lagerplatz = (String)$app->YUI->TableSearchFilter($name, 5, 'lagerplatz', $app->User->GetParameter("lager_lagerplatz")); + if($lagerplatz) + { + $lagerplatz = explode(' ', $lagerplatz); + $lagerplatz = $app->DB->Select("SELECT id FROM lager_platz WHERE kurzbezeichnung = '".reset($lagerplatz)."' AND (geloescht = 0 OR isnull(geloescht)) LIMIT 1"); + } + $gruppierenlager = (int)$app->YUI->TableSearchFilter($name, 6, 'gruppierenlager', $app->User->GetParameter("lager_wert_gruppierenlager"),0,'checkbox'); + $preiseineuro = (int)$app->YUI->TableSearchFilter($name, 7, 'preiseineuro', $app->User->GetParameter("lager_wert_preiseineuro"),0,'checkbox'); + if($preiseineuro) + { + $kursusd = $app->erp->GetWaehrungUmrechnungskurs('EUR','USD'); + $kurschf = $app->erp->GetWaehrungUmrechnungskurs('EUR','CHF'); + } + $artikelkategorie = (String)$app->YUI->TableSearchFilter($name, 8, 'artikelkategorie', $app->User->GetParameter("lager_wert_artikelkategorie")); + $artikelkategorie = explode(" ", $artikelkategorie); + $artikelkategorieid = $artikelkategorie[0]; + $artikelkategorieid = $app->DB->Select("SELECT id FROM artikelkategorien WHERE id = '$artikelkategorieid' LIMIT 1"); + if($artikelkategorieid != ''){ + $artikelkategorie = $artikelkategorieid; + }else{ + $artikelkategorie = 0; + } + //if($artikelkategorie)$artikelkategorie = $app->DB->Select("SELECT id FROM artikelkategorien WHERE bezeichnung LIKE '%$artikelkategorie%' LIMIT 1"); + $colgewicht ="if(lw.gewicht = 0,ifnull(art.gewicht,'0') ,lw.gewicht) *lw.menge"; + $colvolumen = "if(lw.volumen=0,ifnull(art.laenge,'0')*ifnull(art.breite,'0')*ifnull(art.hoehe,'0'),lw.volumen)*lw.menge"; + $colkurzbezeichnung = 'lp.kurzbezeichnung'; + $colbezeichnung = 'lag.bezeichnung'; + if($live) + { + $colgewicht = "ifnull(art.gewicht,'0') * ifnull(lpi.menge,0)"; + $colvolumen = "ifnull(art.laenge,'0')*ifnull(art.breite,'0')*ifnull(art.hoehe,'0')* ifnull(lpi.menge,0)"; + $colkurzbezeichnung = 'lpi.kurzbezeichnung'; + $colbezeichnung = 'lpi.bezeichnung'; + } + $heading = array('Datum','Artikel-Nr.','Artikel','Artikelkategorie','Lager','Lagerplatz','Menge','Gewicht','Volumen','EK-Preis','Gesamt','Währung','letzte Bewegung', ''); + $width = array('5%','10%','20%','10%','10%','10%','5%','5%','5%','5%','5%','5%','8%', '1%'); + $findcols = array('lw.datum','art.nummer','art.name_de','(select bezeichnung from artikelkategorien where id=(select SUBSTRING_INDEX(SUBSTRING_INDEX(art.typ, \'kat\', 1), \'_\', 1) as type from artikel where id=art.id))', $colbezeichnung,$colkurzbezeichnung,$colmenge,$colgewicht,$colvolumen); + $kursjoin = ""; + + $numbercols = array(9, 10); + $datecols = array(0); + + + if($preisart == 'letzterek') + { + if($preiseineuro){ + $kursjoin = self::KursJoin($preisart, $datum); + $dummy = self::PreisUmrechnung($app, $preisart, $live); + /*$dummy = ' + if( + ifnull(lw.kursletzt,0)<> 0 + , + 1 / lw.kursletzt + , + if( + ifnull(wt.kurs,0) <> 0 + , + if( + wt.waehrung_nach = lw.waehrungletzt, + (1/wt.kurs), + wt.kurs + ) + , + if(lw.waehrungletzt = \'USD\', + 1.0 / '.$kursusd.', + if(lw.waehrungletzt = \'CHF\', + 1.0 / '.$kurschf.', + 1) + ) + ) + ) + * ifnull(lw.preis_letzterek,0) + ';*/ + }else{ + //$dummy = 'ifnull(lw.preis_letzterek,0)'; + $dummy = self::EinzelPreis($preisart,$live); + } + $findcols[] = $dummy; + $preiscol = $app->erp->FormatPreis($dummy,2); + $gesamtcol = "(".$dummy.'*'.$colmenge.")"; + $findcols[] = $gesamtcol; + //$waehrungcol = 'lw.waehrungletzt'; + $waehrungcol = self::Waehrung($preisart,$live); + $findcols[] = $waehrungcol; + }elseif($preisart == 'inventurwert'){ + + if($preiseineuro){ + $dummy = self::PreisUmrechnung($app, $preisart, $live); + $kursjoin = self::KursJoin($preisart, $datum); + }else{ + $dummy = 'if(ifnull(lw.inventurwert,0) = 0 AND art.inventurekaktiv = 1, ifnull(art.inventurek,0), ifnull(lw.inventurwert,0))'; + $dummy = $dummy = self::EinzelPreis($preisart,$live); + } + + + $findcols[] = $dummy; + $preiscol = $app->erp->FormatPreis($dummy,2); + $findcols[] = $dummy.'*'.$colmenge; + //$gesamtcol = $app->erp->FormatPreis($dummy.'*'.$colmenge,2); + $gesamtcol = "(".$dummy.'*'.$colmenge.")"; + //$waehrungcol = "'EUR'"; + $waehrungcol = self::Waehrung($preisart,$live); + $findcols[] = $waehrungcol; + }else{ + if($preiseineuro){ + $kursjoin = self::KursJoin($preisart, $datum); + + /*$dummy = ' + if( + if(ifnull(lw.preis_kalkulierterek,0) <> 0,ifnull(lw.kurskalk,0),ifnull(lw.kursletzt,0))<> 0 + , + 1 / if(ifnull(lw.preis_kalkulierterek,0) <> 0,ifnull(lw.kurskalk,0),ifnull(lw.kursletzt,0)) + , + if( + ifnull(wt.kurs,0) <> 0 + , + if( + wt.waehrung_nach = if(ifnull(lw.preis_kalkulierterek,0) <> 0,lw.kurskalk,lw.kursletzt), + (1/wt.kurs), + wt.kurs + ) + , + if(if(ifnull(lw.preis_kalkulierterek,0) <> 0,lw.kurskalk,lw.kursletzt) = \'USD\', + 1.0 / '.$kursusd.', + if(if(ifnull(lw.preis_kalkulierterek,0) <> 0,lw.kurskalk,lw.kursletzt) = \'CHF\', + 1.0 / '.$kurschf.', + 1) + ) + ) + ) + * if(ifnull(lw.preis_kalkulierterek,0) <> 0,lw.preis_kalkulierterek,ifnull(lw.preis_letzterek,0)) + ';*/ + $dummy = self::PreisUmrechnung($app, $preisart, $live); + //$dummy = 'if(ifnull(lw.preis_kalkulierterek,0) <> 0,lw.preis_kalkulierterek,ifnull(lw.preis_letzterek,0))'; + }else{ + //$dummy = 'if(ifnull(lw.preis_kalkulierterek,0) <> 0,lw.preis_kalkulierterek,ifnull(lw.preis_letzterek,0))'; + $dummy = self::EinzelPreis($preisart,$live); + } + $findcols[] = $dummy; + $preiscol = $app->erp->FormatPreis($dummy,2); + $findcols[] = '('.$dummy.'*'.$colmenge.')'; + //$gesamtcol = $app->erp->FormatPreis('('.$dummy.'*'.$colmenge.')',2); + $gesamtcol = '('.$dummy.'*'.$colmenge.')'; + //$waehrungcol = 'if(ifnull(lw.preis_kalkulierterek,0) <> 0,lw.waehrungkalk,lw.waehrungletzt)'; + $waehrungcol = self::Waehrung($preisart,$live); + $findcols[] = $waehrungcol; + } + + $findcols[] = 'lw.letzte_bewegung'; + $findcols[] = 'art.id'; + + //$searchsql = array('art.nummer','art.name_de','lag.bezeichnung','lp.kurzbezeichnung'); + $searchsql = $findcols; + $searchsql[0] = "date_format(lw.datum,'%d.%m.%Y')"; + $searchsql[11] = "date_format(lw.letzte_bewegung,'%d.%m.%Y %H:%i:%s')"; + + //$columnfilter = true; + $defaultorder = 1; + $defaultorderdesc = 0; + $alignright = array(7,8,9,10,11); + $sumcol = array(8,9,11); + $onequeryperuser = true; + $joinek = ' LEFT JOIN '.self::LetzterEK('art', 'e1','e2').' ek ON art.id = ek.artikel'; + + if($artikelkategorie > 0){ + $joinartikelbaum = ' LEFT JOIN artikelbaum_artikel aba ON art.id = aba.artikel'; + } + + $waehrungcolanz = $waehrungcol; + if($preiseineuro){ + $waehrungcolanz = "'EUR'"; + } + + if(!$live) + { + $sql = "SELECT DISTINCT SQL_CALC_FOUND_ROWS art.id, date_format(lw.datum,'%d.%m.%Y'), art.nummer, art.name_de, (select bezeichnung from artikelkategorien where id=(select SUBSTRING_INDEX(SUBSTRING_INDEX(art.typ, 'kat', 1), '_', 1) as type from artikel where id=art.id)) as artikelkategorie, lag.bezeichnung, lp.kurzbezeichnung, + ".$app->erp->FormatMenge('lw.menge',2).",".$app->erp->FormatPreis($colgewicht,2).",".$app->erp->FormatPreis($colvolumen,2)." + , $preiscol, ".$app->erp->FormatPreis($gesamtcol,2).", $waehrungcolanz ,ifnull(date_format(lw.letzte_bewegung,'%d.%m.%Y %H:%i:%s'), ''), art.id + FROM artikel art + INNER JOIN lagerwert lw ON lw.artikel = art.id AND (isnull(art.geloescht) OR art.geloescht = 0) AND art.lagerartikel = 1 + $joinek + $kursjoin + $joinartikelbaum + + "; + $where = " lw.datum = '$datum' "; + if($gruppierenlager) + { + $sql .= "INNER JOIN (SELECT '' as kurzbezeichnung ) lp ON lp.kurzbezeichnung = '' + INNER JOIN lager lag ON lw.lager = lag.id + "; + + $where .= " AND lw.lager <> 0"; + if($lager) + { + $where .= " AND lw.lager = '$lager' "; + } + if($lagerplatz) + { + $where .= " AND lw.lager_platz = '$lagerplatz' "; + } + }else{ + $sql .= "INNER JOIN lager_platz lp ON lp.id = lw.lager_platz + INNER JOIN lager lag ON lag.id = lp.lager + "; + $where .= " AND lw.lager = 0"; + if($lager) + { + $where .= " AND lw.lager = '$lager' "; + } + if($lagerplatz) + { + $where .= " AND lw.lager_platz = '$lagerplatz' "; + } + } + }else{ + + $findcols[0] = 'curdate()'; + + $sql = "SELECT DISTINCT SQL_CALC_FOUND_ROWS art.id, date_format(curdate(),'%d.%m.%Y'), art.nummer, art.name_de, (select bezeichnung from artikelkategorien where id=(select SUBSTRING_INDEX(SUBSTRING_INDEX(art.typ, 'kat', 1), '_', 1) as type from artikel where id=art.id)) as artikelkategorie, lpi.bezeichnung, lpi.kurzbezeichnung, + ".$app->erp->FormatMenge($colmenge,2).",".$app->erp->FormatPreis($colgewicht,2).",".$app->erp->FormatPreis($colvolumen,2)." + , $preiscol, ".$app->erp->FormatPreis($gesamtcol,2).", $waehrungcolanz ,ifnull(date_format(lbew.zeit,'%d.%m.%Y %H:%i:%s'), ''), art.id + FROM artikel art + $joinek + $joinartikelbaum + LEFT JOIN lagerwert lw ON lw.artikel = art.id AND lw.datum = '$datum' AND lw.datum < curdate() + $kursjoin + "; + $where = " (isnull(art.geloescht) OR art.geloescht = 0) AND art.lagerartikel = 1 "; + if($gruppierenlager) + { + $sql .= "INNER JOIN ( + SELECT lager_platz_inhalt.artikel, sum(lager_platz_inhalt.menge) as menge, '' as kurzbezeichnung,lager.bezeichnung, lager.id as lager + FROM lager_platz_inhalt + INNER JOIN lager_platz ON lager_platz_inhalt.lager_platz = lager_platz.id + INNER JOIN lager ON lager_platz.lager = lager.id + GROUP BY lager_platz_inhalt.artikel, lager.id + ) lpi ON lpi.artikel = art.id AND (isnull(art.geloescht) OR art.geloescht = 0) AND art.lagerartikel = 1 + LEFT JOIN ( + SELECT max(lb1.logdatei) as zeit, lb1.artikel, lp1.lager as lager + FROM lager_bewegung lb1 + INNER JOIN lager_platz lp1 ON lb1.lager_platz = lp1.id AND ifnull(lp1.geloescht, 0) = 0 + INNER JOIN lager l1 ON lp1.lager = l1.id AND ifnull(l1.geloescht,0) = 0 + GROUP BY lb1.artikel,lp1.lager + ) lbew ON lpi.artikel = lbew.artikel AND lpi.lager = lbew.lager + "; + + $where .= " AND lpi.lager <> 0"; + if($lager) + { + $where .= " AND lpi.lager = '$lager' "; + } + //if($lagerplatz)$where .= " AND lpi.lager_platz = '$lagerplatz' "; + }else{ + $sql .= "INNER JOIN ( + SELECT lager_platz_inhalt.artikel, sum(lager_platz_inhalt.menge) as menge, lager_platz.kurzbezeichnung,lager.bezeichnung, lager.id as lager,lager_platz.id as lager_platz + FROM lager_platz_inhalt + INNER JOIN lager_platz ON lager_platz_inhalt.lager_platz = lager_platz.id + INNER JOIN lager ON lager_platz.lager = lager.id + GROUP BY lager_platz_inhalt.artikel, lager.id, lager_platz.id + ) lpi ON lpi.artikel = art.id + LEFT JOIN ( + SELECT max(lb1.logdatei) as zeit, lb1.artikel, lp1.id as lager_platz + FROM lager_bewegung lb1 + INNER JOIN lager_platz lp1 ON lb1.lager_platz = lp1.id AND ifnull(lp1.geloescht, 0) = 0 + INNER JOIN lager l1 ON lp1.lager = l1.id AND ifnull(l1.geloescht,0) = 0 + GROUP BY lb1.artikel,lp1.id + ) lbew ON lpi.artikel = lbew.artikel AND lpi.lager_platz = lbew.lager_platz + "; + + $where .= " AND lpi.lager <> 0"; + if($lager) + { + $where .= " AND lpi.lager = '$lager' "; + } + } + + $findcols[10] = "CAST($gesamtcol as DECIMAL(10,2))"; + $findcols[11] = $waehrungcol; + $findcols[12] = "ifnull(lbew.zeit, '')"; + $searchsql[12] = "date_format(lbew.zeit,'%d.%m.%Y %H:%i:%s')"; + + } + + if($artikel) + { + $where .= " AND art.id = '$artikel' "; + } + if($artikelkategorie > 0){ + $where .= " AND (aba.kategorie = '$artikelkategorie' OR art.typ = '".$artikelkategorie."_kat') "; + //$where .= " AND art.typ = '".$artikelkategorie."_kat' "; + } + $sql = $app->YUI->CodiereSQLForOneQuery($sql, $name); + + $groupby = ""; + $count = ""; + + break; + case "lager_zwischenlager_eingang": + $allowed['lager'] = array('buchenzwischenlager'); + $heading = array('Artikel','Nummer','EAN','Lager','Menge','VPE','Grund','Projekt','Menü'); + $width = array('20%','10%','10%','10%','5%','5%','20%','10%','1%'); + $findcols = array('a.name_de','a.nummer','a.ean','lp.kurzbezeichnung','z.menge','z.vpe','z.grund','p.abkuerzung', 'z.id'); + $searchsql = array('a.name_de','a.nummer','a.ean','lp.kurzbezeichnung'); + $alignright = array(4); + $hide767 = array(5,6,7); + $sql = "SELECT SQL_CALC_FOUND_ROWS z.id,a.name_de,a.nummer,a.ean,lp.kurzbezeichnung,trim(z.menge)+0,z.vpe,z.grund, p.abkuerzung as projekt, z.id FROM zwischenlager z + LEFT JOIN artikel a ON a.id=z.artikel + LEFT JOIN lager_platz lp ON a.lager_platz = lp.id + LEFT JOIN projekt p ON p.id=z.projekt + "; + + $delete = ""; + if($app->erp->RechteVorhanden("lager", "buchenzwischenlagerdelete")){ + $delete = "Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\">"; + } + + $menu = "
    Conf->WFconf['defaulttheme']}/images/forward.svg\"> Conf->WFconf['defaulttheme']}/images/add.png\" border=\"0\"> $delete
    "; + + $where = "z.richtung='eingang'"; + $count = "SELECT count(z.id) FROM zwischenlager z WHERE $where"; + + break; + case "lager_zwischenlager_ausgang": + $allowed['lager'] = array('buchenzwischenlager'); + $heading = array('Artikel','Nummer','EAN','Lager','Menge','VPE','Grund','Projekt','Menü'); + $width = array('20%','10%','10%','10%','5%','5%','20%','10%','1%'); + $findcols = array('a.name_de','a.nummer','a.ean','lp.kurzbezeichnung','z.menge','z.vpe','z.grund','p.abkuerzung', 'z.id'); + $searchsql = array('a.name_de','a.nummer','a.ean','lp.kurzbezeichnung'); + $alignright = array(4); + $hide767 = array(5,6,7); + $sql = "SELECT SQL_CALC_FOUND_ROWS z.id,a.name_de,a.nummer,a.ean,lp.kurzbezeichnung,trim(z.menge)+0,z.vpe,z.grund, p.abkuerzung as projekt, z.id FROM zwischenlager z + LEFT JOIN artikel a ON a.id=z.artikel + LEFT JOIN lager_platz lp ON a.lager_platz = lp.id + LEFT JOIN projekt p ON p.id=z.projekt + "; + + $delete = ''; + if($app->User->GetType()=="admin"){ + $delete = "Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\">"; + } + $menu = "
    Conf->WFconf['defaulttheme']}/images/forward.svg\"> $delete
    "; + $where = "z.richtung='ausgang'"; + $count = "SELECT count(z.id) FROM zwischenlager z WHERE $where"; + break; + + case "lager_bestand": + $allowed['lager'] = array('bestand'); + $app->Tpl->Add('JQUERYREADY', "$('#ohnebestand').click( function() { fnFilterColumn1( 0 ); } );"); + $app->Tpl->Add('JQUERYREADY', "$('#chargengruppierung').click( function() { fnFilterColumn2( 0 ); } );"); + for ($r = 1;$r <= 2;$r++) { + $app->Tpl->Add('JAVASCRIPT', ' + function fnFilterColumn' . $r . ' ( i ) { + if(oMoreData' . $r . $name . '==1) oMoreData' . $r . $name . ' = 0; + else + oMoreData' . $r . $name . ' = 1; + + $(\'#' . $name . '\').dataTable().fnFilter( + \'\', + i, + 0,0 + ); + } + '); + } + //$defaultorder = 1; //Optional wenn andere Reihenfolge gewuenscht + + //$defaultorderdesc = 1; + //$sumcol = 4; + $alignright = array(4); + $menu = "
    Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\">
    "; + $more_data1 = $app->Secure->GetGET("more_data1"); + $more_data2 = 0; + $menucol = 6; + $heading = array('Artikel-Nr.','Artikel'); + $findcols = array('a.nummer','a.name_de'); + $searchsql = array('a.nummer','a.name_de'); + $width = array('10%','30%'); + $heading[] = 'Lagerplatz'; + + $width[] = '10%'; + + $findcols[] = 'lp.kurzbezeichnung'; + $searchsql[] = 'lp.kurzbezeichnung'; + + $heading[] = 'Projekt'; + + $width[] = '10%'; + + $findcols[] = 'p.abkuerzung'; + $searchsql[] = 'p.abkuerzung'; + + + $heading[] = 'Menge'; + if($more_data2) + { + $findcols[] = 'menge'; + }else{ + $findcols[] = 'menge'; + } + if($more_data2) + { + $findcols[] = 'verkaufbare'; + $findcols[] = 'reserviert'; + }else{ + $findcols[] = 'verkaufbare'; + $findcols[] = 'reserviert'; + } + $heading[] = 'Verkaufbare *'; + $heading[] = 'Reserviert *'; + $heading[] = 'Menü'; + + $width[] = '10%'; + $width[] = '10%'; + $width[] = '1%'; + + $findcols[] = 'a.id'; + + //$moreinfo = true; + if($more_data2) + { + $sql = "SELECT SQL_CALC_FOUND_ROWS a.id, CONCAT('',a.nummer,''),a.name_de,"; + }else{ + $sql = "SELECT SQL_CALC_FOUND_ROWS lpi.id, CONCAT('',a.nummer,''),a.name_de,"; + } + + + if($more_data2) + { + $sql .= "lp.kurzbezeichnung,p.abkuerzung, + + ".$app->erp->FormatMenge("ifnull(lpi.menge,0)")." as fmenge , + ".$app->erp->FormatMenge("IFNULL(mengemhd, ifnull(mengecharge,0))")." as fmengecharge , + ".$app->erp->FormatMenge("IFNULL(lpi2.gmenge,0) - IFNULL(r.reserviert,0)")." as verkaufbare, + ".$app->erp->FormatMenge("IFNULL(r.reserviert,0)")." as reserviert, + a.id "; + $sql .= " + FROM artikel a + INNER JOIN ( + SELECT artikel, sum(menge) as menge,lager_platz + FROM lager_platz_inhalt + GROUP BY artikel, lager_platz + ) AS lpi ON lpi.artikel = a.id + INNER JOIN ( + SELECT artikel, sum(menge) as gmenge + FROM lager_platz_inhalt + GROUP BY artikel + ) AS lpi2 ON a.id = lpi2.artikel + INNER JOIN lager_platz lp ON lp.id = lpi.lager_platz + LEFT JOIN ( + SELECT artikel, lager_platz, charge, sum(menge) as mengecharge , NULL as mhddatum + FROM lager_charge GROUP BY artikel, lager_platz, charge + ) c ON c.lager_platz = lpi.lager_platz AND c.artikel = a.id + LEFT JOIN ( + SELECT artikel, lager_platz, IFNULL(charge,'') as charge2, mhddatum, SUM(menge) as mengemhd + FROM `lager_mindesthaltbarkeitsdatum` + GROUP BY artikel, lager_platz, IFNULL(charge,''), mhddatum + ) AS m ON m.lager_platz = lpi.lager_platz AND m.artikel = a.id + LEFT JOIN ( + SELECT artikel, SUM(menge) as reserviert + FROM lager_reserviert + GROUP BY artikel + ) r ON r.artikel=a.id + LEFT JOIN lager l ON l.id=lp.lager + LEFT JOIN projekt p ON p.id=l.projekt + "; + + }else{ + $sql .= "lp.kurzbezeichnung,p.abkuerzung, + ".$app->erp->FormatMenge("ifnull(lpi.menge,0)")." as fmenge , + '' as mengecharge, + ".$app->erp->FormatMenge("IFNULL(lpi2.gmenge,0) - IFNULL(r.reserviert,0)")." as verkaufbare, ".$app->erp->FormatMenge("IFNULL(r.reserviert,0)")." as reserviert, a.id "; + + $sql .= " + FROM lager_platz_inhalt lpi + LEFT JOIN lager_platz lp ON lp.id=lpi.lager_platz + LEFT JOIN lager l ON l.id=lp.lager + LEFT JOIN projekt p ON p.id=l.projekt + INNER JOIN artikel a ON a.id=lpi.artikel + INNER JOIN ( + SELECT artikel, SUM(menge) as gmenge + FROM lager_platz_inhalt + GROUP BY artikel + ) AS lpi2 ON lpi.artikel = lpi2.artikel + LEFT JOIN (SELECT artikel, SUM(menge) as reserviert FROM lager_reserviert GROUP BY artikel) r ON r.artikel=a.id"; + } + $subwhere = ""; + if($more_data1) { + $sql = "SELECT SQL_CALC_FOUND_ROWS a.id, a.nummer,a.name_de,"; + + $sql .= "'-',p.abkuerzung,'0' as menge,'0' as mengecharge, '0' as verkaufbare, ".$app->erp->FormatMenge("IFNULL(r.reserviert,0)")." as reserviert, a.id + FROM artikel AS `a` + LEFT JOIN (SELECT lpi.artikel, lp.kurzbezeichnung FROM `lager_platz_inhalt` AS `lpi` LEFT JOIN `lager_platz` AS `lp` ON lp.id=lpi.lager_platz GROUP BY lpi.artikel) AS `lp` ON lp.artikel=a.id + LEFT JOIN (SELECT lr.artikel, SUM(lr.menge) AS `reserviert` FROM `lager_reserviert` AS `lr` GROUP BY lr.artikel) r ON r.artikel=a.id + LEFT JOIN `projekt` AS `p` ON p.id=a.projekt"; + $subwhere = " AND a.lagerartikel=1 AND ((SELECT SUM(lpi.menge) FROM lager_platz_inhalt lpi WHERE lpi.artikel=a.id) <=0 OR ISNULL((SELECT SUM(lpi.menge) FROM lager_platz_inhalt lpi WHERE lpi.artikel=a.id))) "; + + } + if($more_data2) { + $subwhere .= ' AND (NOT ISNULL(m.artikel) OR NOT ISNULL(c.artikel)) '; + } + + $where = " a.geloescht!=1 ".$subwhere." ".$app->erp->ProjektRechte(); + //$count = "select count(distinct ms.datum) FROM mitarbeiterzeiterfassung_sollstunden ms where ms.adresse = '$adresse' AND ms.datum >= '$von' AND ms.datum <= '$bis'"; + /*if($more_data1){ + $count = "SELECT count(a.id) FROM artikel a WHERE " . $where; + } + else{ + if($more_data2) + { + $count = "SELECT count(c.id) FROM lager_charge c INNER JOIN artikel a ON a.id=c.artikel WHERE ".$where; + }else{ + $count = "SELECT count(lpi.id) FROM lager_platz_inhalt lpi LEFT JOIN artikel a ON a.id=lpi.artikel LEFT JOIN lager_platz lp ON lp.id=lpi.lager_platz WHERE ".$where; + } + }*/ + + + break; + + case "lager_bewegunglist": + $allowed['lager'] = array('bewegunglist'); + + $heading = array('Regal', 'Nummer', 'Name', 'Ein-/Ausgang','Menge', 'Datum', 'Referenz', ''); + $width = array('10%', '8%', '25%', '8%', '8%', '8%', '27%', '1%'); + + $findcols = array('p.kurzbezeichnung', 'a.nummer', 'a.name_de', "IF(i.eingang, 'Eingang', 'Ausgang')", "CAST(if(i.eingang, CONCAT('+',trim(i.menge)+0), CONCAT('-',trim(i.menge)+0)) AS decimal(10,2))", 'i.zeit', 'i.referenz', 'i.id'); + $searchsql = array('p.kurzbezeichnung', 'a.nummer', 'a.name_de', "IF(i.eingang, 'Eingang', 'Ausgang')", "if(i.eingang, CONCAT('+',' ',".$app->erp->FormatMenge('i.menge')."), CONCAT('-',' ',".$app->erp->FormatMenge('i.menge')."))", "DATE_FORMAT(i.zeit,'%d.%m.%Y')", 'i.referenz'); + + $defaultorder = 1; + $defaultorderdesc = 0; + + $alignright = array(5); + + $datecols = array(5); + $numbercols = array(4); + + $id = $app->Secure->GetGET("id"); + $sql = "SELECT SQL_CALC_FOUND_ROWS i.id, p.kurzbezeichnung as regal, a.nummer, a.name_de, IF(i.eingang, 'Eingang', 'Ausgang'), if(i.eingang, CONCAT('+',' ',".$app->erp->FormatMenge('i.menge')."), CONCAT('-',' ',".$app->erp->FormatMenge('i.menge').")) as menge, DATE_FORMAT(i.zeit,'%d.%m.%Y') as datum, i.referenz, i.id FROM lager_bewegung i LEFT JOIN lager_platz p ON p.id=i.lager_platz LEFT JOIN artikel a ON i.artikel=a.id"; + + + $lagerplatz = $app->User->GetParameter("lager_bewegung_lagerplatz"); + $lagerplatzid = $app->DB->Select("SELECT id FROM lager_platz WHERE kurzbezeichnung = '$lagerplatz' AND kurzbezeichnung != '' LIMIT 1"); + + $artikel = $app->User->GetParameter("lager_bewegung_artikel"); + $artikeldaten = explode(" ", $artikel, 2); + $artikelnr = $artikeldaten[0]; + $artikelname = $artikeldaten[1]; + $artikelid = $app->DB->Select("SELECT id FROM artikel WHERE name_de = '$artikelname' AND name_de != '' AND nummer = '$artikelnr' AND nummer != '' LIMIT 1"); + + + /*if($lagerplatzid != "" && $artikelid != ""){ + $where = " i.id > 0 AND i.lager_platz = '$lagerplatzid' AND i.artikel = '$artikelid'"; + }elseif($lagerplatzid != "" && $artikelid == ""){ + $where = " i.id > 0 AND i.lager_platz = '$lagerplatzid'"; + }elseif($lagerplatzid == "" && $artikelid != ""){ + $where = " i.id > 0 AND i.artikel = '$artikelid'"; + }else{ + $where = " i.id > 0"; + }*/ + + if($lagerplatzid != ""){ + $lagerplatzwhere = " AND i.lager_platz = '$lagerplatzid'"; + }else{ + $lagerplatzwhere = ""; + } + + if($artikelid != ""){ + $artikelwhere = " AND i.artikel = '$artikelid'"; + }else{ + $artikelwhere = ""; + } + + $where = " i.id > 0 AND p.lager = '$id'".$lagerplatzwhere.$artikelwhere; + + $count = "SELECT count(i.id) FROM lager_bewegung i LEFT JOIN lager_platz p ON p.id = i.lager_platz WHERE $where"; + + $app->Tpl->Set("LAGER_PLATZ_BEWEGUNG", $lagerplatz); + $app->Tpl->Set("ARTIKEL_BEWEGUNG", $artikel); + + + break; + + case "lager_allebewegungenlist": + $allowed['lager'] = array('allebewegungenlist'); + + $heading = array('Lager', 'Regal', 'Nummer', 'Name', 'Ein-/Ausgang', 'Menge', 'Datum', 'Referenz', 'Bearbeiter', 'Projekt',''); + $width = array('9%', '9%', '8%', '18%', '5%', '5%', '5%', '18%', '10%', '5%','1%'); + + $findcols = array('l.bezeichnung', 'lp.kurzbezeichnung', 'a.nummer', 'a.name_de', "IF(i.eingang, 'Eingang', 'Ausgang')", "CAST(if(i.eingang, CONCAT('+',trim(i.menge)+0), CONCAT('-',trim(i.menge)+0)) AS decimal(10,2))", 'i.zeit', 'i.referenz', 'i.bearbeiter', 'p.abkuerzung', 'i.id'); + $searchsql = array('l.bezeichnung', 'lp.kurzbezeichnung', 'a.nummer', 'a.name_de', "IF(i.eingang, CONCAT('+',' ',".$app->erp->FormatMenge('i.menge')."), CONCAT('-',' ',".$app->erp->FormatMenge('i.menge')."))", 'DATE_FORMAT(i.zeit,\'%d.%m.%Y\')', 'i.referenz', 'i.bearbeiter', 'p.abkuerzung'); + + $defaultorder = 1; + $defaultorderdesc = 0; + + $alignright = array(6); + + $datecols = array(6); + + $sql = "SELECT SQL_CALC_FOUND_ROWS i.id, l.bezeichnung, lp.kurzbezeichnung as regal, a.nummer, a.name_de, IF(i.eingang, 'Eingang', 'Ausgang'), if(i.eingang, CONCAT('+', ' ', trim(i.menge)+0), CONCAT('-', ' ', trim(i.menge)+0)) as menge, DATE_FORMAT(i.zeit,'%d.%m.%Y') as datum, i.referenz, i.bearbeiter, p.abkuerzung AS projektbewegung, i.id FROM lager_bewegung i LEFT JOIN lager_platz lp ON lp.id=i.lager_platz LEFT JOIN lager l ON lp.lager = l.id LEFT JOIN artikel a ON i.artikel=a.id LEFT JOIN projekt p ON l.projekt = p.id"; + + + $lager = $app->User->GetParameter("lager_bewegungalle_lager"); + + $lagerplatz = $app->User->GetParameter("lager_bewegungalle_lagerplatz"); + $lagerplatzid = $app->DB->Select("SELECT id FROM lager_platz WHERE kurzbezeichnung = '$lagerplatz' AND kurzbezeichnung != '' LIMIT 1"); + + $artikel = $app->User->GetParameter("lager_bewegungalle_artikel"); + $artikeldaten = explode(" ", $artikel, 2); + $artikelnr = $artikeldaten[0]; + $artikelname = $artikeldaten[1]; + $artikelid = $app->DB->Select("SELECT id FROM artikel WHERE name_de = '$artikelname' AND name_de != '' AND nummer = '$artikelnr' AND nummer != '' LIMIT 1"); + + if($lager != ""){ + $lagerwhere = " AND l.bezeichnung = '$lager'"; + }else{ + $lagerwhere = ""; + } + + if($lagerplatzid != ""){ + $lagerplatzwhere = " AND i.lager_platz = '$lagerplatzid'"; + }else{ + $lagerplatzwhere = ""; + } + + if($artikelid != ""){ + $artikelwhere = " AND i.artikel = '$artikelid'"; + }else{ + $artikelwhere = ""; + } + + + $where = " i.id > 0".$lagerwhere.$lagerplatzwhere.$artikelwhere.$app->erp->ProjektRechte(); + + $count = "SELECT count(i.id) FROM lager_bewegung i LEFT JOIN lager_platz lp ON lp.id = i.lager_platz LEFT JOIN lager l ON l.id=lp.lager LEFT JOIN projekt p ON l.projekt = p.id WHERE $where"; + + $app->Tpl->Set("LAGER_BEWEGUNG_ALLE", $lager); + $app->Tpl->Set("LAGER_PLATZ_BEWEGUNG_ALLE", $lagerplatz); + $app->Tpl->Set("ARTIKEL_BEWEGUNG_ALLE", $artikel); + + break; + + case "lager_inhaltlist": + $allowed['lager'] = array('lager_inhaltlist'); + + $heading = array('Regal', 'Artikel', 'Nummer', 'Projekt', 'Menge', 'Verkaufbare', 'Reserviert', ''); + $width = array('10%', '30%', '10%', '15%', '15%', '10%', '10%', '1%'); + + $findcols = array('p.kurzbezeichnung', 't.artikelname', 't.nummer', 'pro.abkuerzung', 't.menge', 't.verkaufbare', 't.reserviert', 't.artikel'); + $searchsql = array('p.kurzbezeichnung', 't.artikelname', 't.nummer', 'pro.abkuerzung', $app->erp->FormatMenge('t.menge'), $app->erp->FormatMenge('t.verkaufbare'), $app->erp->FormatMenge('t.reserviert')); + + $defaultorder = 1; + $defaultorderdesc = 0; + + $alignright = array(5,6,7); + $numbercols = array(4,5,6); + + $sql = "SELECT SQL_CALC_FOUND_ROWS t.artikel, IFNULL(p.kurzbezeichnung, ' '), t.artikelname, t.nummer, pro.abkuerzung, ".$app->erp->FormatMenge('t.menge').", ".$app->erp->FormatMenge('t.verkaufbare').", ".$app->erp->FormatMenge('t.reserviert').", t.artikel + FROM lager_platz p + JOIN (SELECT i.lager_platz, a.id as artikel, IFNULL(a.name_de, ' ') as artikelname, IFNULL(a.nummer, ' ') as nummer, a.projekt, IFNULL(SUM(i.menge), 0) as menge, IFNULL(SUM(i.menge),0) - IFNULL(SUM(r.menge),0) as verkaufbare, IFNULL(SUM(r.menge), 0) as reserviert FROM lager_platz_inhalt i + LEFT JOIN artikel a ON i.artikel=a.id + LEFT JOIN (SELECT artikel, SUM(menge) as menge FROM lager_reserviert GROUP BY artikel) r ON r.artikel=a.id + GROUP BY a.id, i.lager_platz) t ON t.lager_platz= p.id LEFT JOIN projekt pro ON pro.id=t.projekt "; + + //$groupby = " GROUP BY p.kurzbezeichnung, a.id"; + + $lagerplatz = $app->User->GetParameter("lager_inhalt_lagerplatz"); + $lagerplatzid = $app->DB->Select("SELECT id FROM lager_platz WHERE kurzbezeichnung = '$lagerplatz' AND kurzbezeichnung != '' LIMIT 1"); + + $artikel = $app->User->GetParameter("lager_inhalt_artikel"); + $artikeldaten = explode(" ", $artikel, 2); + $artikelnr = $artikeldaten[0]; + $artikelname = $artikeldaten[1]; + $artikelid = $app->DB->Select("SELECT id FROM artikel WHERE name_de = '$artikelname' AND name_de != '' AND nummer = '$artikelnr' AND nummer != '' LIMIT 1"); + + $lagerid = $app->Secure->GetGET("id"); + + if($lagerplatzid != ""){ + $lagerplatzwhere = " AND t.lager_platz = '$lagerplatzid'"; + }else{ + $lagerplatzwhere = ""; + } + + if($artikelid != ""){ + $artikelwhere = " AND t.artikel = '$artikelid'"; + }else{ + $artikelwhere = ""; + } + + $where = " p.lager = '$lagerid'".$lagerplatzwhere.$artikelwhere; + + //$count = "SELECT count(p.kurzbezeichnung) FROM lager_platz p LEFT JOIN lager_platz_inhalt i ON p.id=i.lager_platz LEFT JOIN artikel a ON i.artikel=a.id LEFT JOIN lager_reserviert r ON r.artikel=a.id LEFT JOIN projekt pro ON pro.id=a.projekt WHERE $where"; + + $app->Tpl->Set("LAGER_PLATZ_INHALT", $lagerplatz); + $app->Tpl->Set("ARTIKEL_INHALT", $artikel); + + break; + + + case "lager_reservierungen": + $allowed['lager'] = array('reservierungen'); + + $heading = array('Kunde','Belegart','Belegnr','Status','Artikel','Menge','Projekt','Grund','Menü'); + $width = array('20%','20%','5%','10%','20%','1%'); + $findcols = array('t.kunde', 't.typ', 't.belegnr', 't.status', 't.Artikel', 't.menge', 't.projekt', 't.grund', 't.rid'); + $searchsql = array('t.kunde', 't.typ', 't.belegnr', 't.status', 't.Artikel', $app->erp->FormatMenge('t.menge'), 't.projekt', 't.grund'); + + $defaultorder = 1; //Optional wenn andere Reihenfolge gewuenscht + $defaultorderdesc = 1; + //$sumcol = 9; + $menu = "
    Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\">
    "; + $alignright = array(6); + $numbercols = array(5); + $menucol = 5; + //$moreinfo = true; + $sql = " + SELECT + SQL_CALC_FOUND_ROWS t.rid, + t.kunde, + t.typ, + t.belegnr, + t.status, + t.Artikel, + ".$app->erp->FormatMenge('t.menge').", + t.projekt, + t.grund, + t.rid + + FROM + ( + ( + SELECT r.id as rid, adr.name as kunde,'Auftrag' as typ,if(auf.belegnr = '','ENTWURF',auf.belegnr) as belegnr ,if(auf.status = '','angelegt',auf.status) as status, a.name_de as Artikel,r.menge,p.abkuerzung as projekt,r.grund, r.id FROM lager_reserviert r LEFT JOIN artikel a ON a.id=r.artikel LEFT JOIN projekt p ON + p.id=r.projekt LEFT JOIN adresse adr ON r.adresse=adr.id + INNER JOIN auftrag auf ON auf.id = r.parameter AND r.objekt = 'auftrag' + ) + UNION ALL + ( + SELECT r.id as rid, adr.name as kunde,'Lieferschein' as typ,if(l.belegnr = '','ENTWURF',l.belegnr) as belegnr ,if(l.status = '','angelegt',l.status) as status, a.name_de as Artikel,r.menge,p.abkuerzung as projekt,r.grund, r.id FROM lager_reserviert r LEFT JOIN artikel a ON a.id=r.artikel LEFT JOIN projekt p ON + p.id=r.projekt LEFT JOIN adresse adr ON r.adresse=adr.id + INNER JOIN lieferschein l ON l.id = r.parameter AND r.objekt = 'lieferschein' + ) + UNION ALL + ( + SELECT r.id as rid, adr.name as kunde,'Produktion' as typ,if(l.belegnr = '','ENTWURF',l.belegnr) as belegnr ,if(l.status = '','angelegt',l.status) as status, a.name_de as Artikel,r.menge,p.abkuerzung as projekt,r.grund, r.id FROM lager_reserviert r LEFT JOIN artikel a ON a.id=r.artikel LEFT JOIN projekt p ON + p.id=r.projekt LEFT JOIN adresse adr ON r.adresse=adr.id + INNER JOIN produktion l ON l.id = r.parameter AND r.objekt = 'produktion' + ) + UNION ALL + ( + SELECT r.id as rid, adr.name as kunde,'Auftrag' as typ,'GELÖSCHT' as belegnr ,'GELÖSCHT' as status, a.name_de as Artikel,r.menge,p.abkuerzung as projekt,r.grund, r.id FROM lager_reserviert r LEFT JOIN artikel a ON a.id=r.artikel LEFT JOIN projekt p ON + p.id=r.projekt LEFT JOIN adresse adr ON r.adresse=adr.id + LEFT JOIN auftrag auf ON auf.id = r.parameter AND r.objekt = 'auftrag' WHERE isnull(auf.id) AND r.objekt = 'auftrag' + ) + UNION ALL + ( + SELECT r.id as rid, adr.name as kunde,'Lieferschein' as typ,'GELÖSCHT' as belegnr ,'GELÖSCHT' as status, a.name_de as Artikel,r.menge,p.abkuerzung as projekt,r.grund, r.id FROM lager_reserviert r LEFT JOIN artikel a ON a.id=r.artikel LEFT JOIN projekt p ON + p.id=r.projekt LEFT JOIN adresse adr ON r.adresse=adr.id + LEFT JOIN lieferschein l ON l.id = r.parameter AND r.objekt = 'lieferschein' WHERE isnull(l.id) AND r.objekt = 'lieferschein' + ) + UNION ALL + ( + SELECT r.id as rid, adr.name as kunde,'Produktion' as typ,'GELÖSCHT' as belegnr ,'GELÖSCHT' as status, a.name_de as Artikel,r.menge,p.abkuerzung as projekt,r.grund, r.id FROM lager_reserviert r LEFT JOIN artikel a ON a.id=r.artikel LEFT JOIN projekt p ON + p.id=r.projekt LEFT JOIN adresse adr ON r.adresse=adr.id + LEFT JOIN produktion l ON l.id = r.parameter AND r.objekt = 'produktion' WHERE isnull(l.id) AND r.objekt = 'produktion' + ) + UNION ALL + ( + SELECT r.id as rid, adr.name as kunde,r.objekt as typ,'' as belegnr , '' as status, a.name_de as Artikel,r.menge,p.abkuerzung as projekt,r.grund, r.id FROM lager_reserviert r LEFT JOIN artikel a ON a.id=r.artikel LEFT JOIN projekt p ON + p.id=r.projekt LEFT JOIN adresse adr ON r.adresse=adr.id WHERE r.objekt <> 'auftrag' AND r.objekt <> 'lieferschein' AND r.objekt <> 'produktion' + ) + + ) t + + "; + + + //$count = "select count(distinct ms.datum) FROM mitarbeiterzeiterfassung_sollstunden ms where ms.adresse = '$adresse' AND ms.datum >= '$von' AND ms.datum <= '$bis'"; + $count = "SELECT count(r.id) FROM lager_reserviert r"; + + break; + + + case "lager_nachschublager": + $allowed['lager'] = array('nachschublager'); + + $heading = array('Nummer','Name','Nachschublager','Nachschublagerplatz','Lagerbestand','Menge','Lagervorschlag', 'Lagerbestand','Menge Lager (Min)','Menge Lager (Max)', 'Umzulagernde Menge', ''); + $width = array('10%','20%','5%','5%','10%','10%','10%', '10%', '10%', '10%','10%','1%'); + $findcols = array('a.nummer', 'a.name_de','l.bezeichnung', 'lp.kurzbezeichnung', 's.amount','vorschlag.needed', 'lp2.kurzbezeichnung', 'vorschlag.amount', 's.amount','vorschlag.storage_min_amount','vorschlag.storage_max_amount', 's.id'); + $searchsql = array('a.nummer', 'a.name_de','l.bezeichnung', 'lp.kurzbezeichnung', $app->erp->FormatMenge('s.amount'), + 'lp2.kurzbezeichnung', $app->erp->FormatMenge('vorschlag.amount'), $app->erp->FormatMenge('s.amount_to_relocate')); + + $defaultorder = 1; + $defaultorderdesc = 0; + + + $alignright = array(5,6,7,8,9,10,11); + $numbercols = array(4,5,6,7,8, 9,10); + + + $where = "s.is_replenishment = 1 AND vorschlag.is_replenishment = 0"; + + $sql = "SELECT SQL_CALC_FOUND_ROWS s.id, a.nummer, a.name_de, l.bezeichnung, lp.kurzbezeichnung, + ".$app->erp->FormatMenge('s.amount').", + ".$app->erp->FormatMenge('vorschlag.needed').", + lp2.kurzbezeichnung, + ".$app->erp->FormatMenge('vorschlag.amount').", + IF(vorschlag.storage_min_amount > 0, ".$app->erp->FormatMenge('vorschlag.storage_min_amount').",'-'), + IF(vorschlag.storage_max_amount > 0,".$app->erp->FormatMenge('vorschlag.storage_max_amount').",'-'), + ".$app->erp->FormatMenge( + 'IF( + vorschlag.storage_min_amount > 0 AND vorschlag.storage_min_amount >s.amount_to_relocate, + IF(s.amount > vorschlag.storage_min_amount, vorschlag.storage_min_amount,s.amount), + IF(s.amount >s.amount_to_relocate, s.amount_to_relocate,s.amount) + )').", s.id + FROM stock_replenishment_list s + LEFT JOIN artikel a ON s.article_id = a.id + JOIN lager_platz lp ON lp.id = s.storage_area_id + LEFT JOIN lager l ON l.id=lp.lager + LEFT JOIN stock_replenishment_list vorschlag ON s.article_id = vorschlag.article_id + JOIN lager_platz lp2 ON lp2.id = vorschlag.storage_area_id"; + + break; + } + + $erg = []; + + foreach($erlaubtevars as $k => $v) + { + if(isset($$v)) + { + $erg[$v] = $$v; + } + } + return $erg; + } + + /** + * Lager constructor. + * + * @param Application $app + * @param bool $intern + */ + public function __construct($app, $intern = false) { + + $this->app = $app; + if($intern) { + return; + } + $this->app->ActionHandlerInit($this); + $this->app->ActionHandler("create", "LagerCreate"); + $this->app->ActionHandler("edit", "LagerEdit"); + $this->app->ActionHandler("list", "LagerList"); + $this->app->ActionHandler("platz", "LagerPlatz"); + //$this->app->ActionHandler("bewegung", "LagerBewegung"); + $this->app->ActionHandler("bewegung", "LagerBewegungPopup"); + $this->app->ActionHandler("allebewegungen", "LagerAlleBewegungen"); + $this->app->ActionHandler("inhalt", "LagerInhalt"); + $this->app->ActionHandler("pdf", "LagerPDF"); + $this->app->ActionHandler("bestand", "LagerBestand"); + $this->app->ActionHandler("wert", "LagerWert"); + $this->app->ActionHandler("platzeditpopup", "LagerPlatzEditPopup"); + $this->app->ActionHandler("delete", "LagerDelete"); + $this->app->ActionHandler("deleteplatz", "LagerPlatzDelete"); + $this->app->ActionHandler("etiketten", "LagerEtiketten"); + $this->app->ActionHandler("etikettenlist", "LagerEtikettenlist"); + $this->app->ActionHandler("zwischenlager", "LagerZwischenlager"); + $this->app->ActionHandler("regaletiketten", "LagerRegalEtiketten"); + $this->app->ActionHandler("reservierungen", "LagerReservierungen"); + $this->app->ActionHandler("buchen", "LagerBuchen"); + $this->app->ActionHandler("buchenzwischenlager", "LagerBuchenZwischenlager"); + $this->app->ActionHandler("buchenzwischenlagerdelete", "LagerBuchenZwischenlagerDelete"); + $this->app->ActionHandler("bucheneinlagern", "LagerBuchenEinlagern"); + $this->app->ActionHandler("buchenauslagern", "LagerBuchenAuslagern"); + $this->app->ActionHandler("artikelentfernenreserviert", "LagerArtikelEntfernenReserviert"); + $this->app->ActionHandler("letztebewegungen", "LagerLetzteBewegungen"); + $this->app->ActionHandler("schnelleinlagern", "LagerSchnellEinlagern"); + + $this->app->ActionHandler("schnellumlagern", "LagerSchnellUmlagern"); + $this->app->ActionHandler("schnellauslagern", "LagerSchnellAuslagern"); + + $this->app->ActionHandler("differenzen", "LagerDifferenzen"); + $this->app->ActionHandler("differenzenlagerplatz", "LagerDifferenzenLagerplatz"); + + $this->erstes=0; + + $id = $this->app->Secure->GetGET('id'); + $nummer = $this->app->Secure->GetPOST('nummer'); + if ($nummer == '' && $id > 0) + { + $lager = $this->app->DB->Select("SELECT bezeichnung FROM lager WHERE id='$id' LIMIT 1"); + } + else + { + $lager = $nummer; + } + $woher = $this->app->Secure->GetPOST('woher'); + $action = $this->app->Secure->GetGET('action'); + $cmd = $this->app->Secure->GetGET('cmd'); + $this->app->erp->Headlines('Lager'); + if ($action === 'bucheneinlagern') + { + if ($cmd === 'zwischenlager') + { + $lager = 'Zwischenlager'; + } + else { + $lager = 'Manuelle Lageranpassung'; + } + } + $this->app->Tpl->Set('UEBERSCHRIFT', 'Lager: ' . $lager); + $this->app->ActionHandlerListen($app); + } + + public function Install() + { + $this->cleanUpInvalidStorages(); + } + + public function cleanUpInvalidStorages(): void + { + $hasStorageLocationWithEmptyNameOrStorage = $this->app->DB->Select( + "SELECT COUNT(`id`) FROM `lager_platz` WHERE (`kurzbezeichnung` = '' OR `lager` = 0) LIMIT 1" + ) > 0; + if($hasStorageLocationWithEmptyNameOrStorage) { + $this->app->DB->Delete( + "DELETE `lp` + FROM `lager_platz` AS `lp` + LEFT JOIN `lager_platz_inhalt` AS `lpi` ON lp.id = lpi.lager_platz + WHERE (lp.kurzbezeichnung = '' OR `lager` = 0) AND lpi.id IS NULL" + ); + } + $hasStorageLocationsWithZeroId = $this->app->DB->Select("SELECT COUNT(`id`) FROM `lager_platz` WHERE `id` = 0") > 0; + if($hasStorageLocationsWithZeroId) { + $this->app->DB->Delete("DELETE FROM `lager_platz` WHERE `id` = 0"); + $this->app->erp->CheckAlterTable( + "ALTER TABLE `lager_platz` ADD PRIMARY KEY (`id`)" + ); + $this->app->erp->CheckAlterTable("ALTER TABLE `lager_platz` MODIFY `id` int(11) NOT NULL AUTO_INCREMENT"); + if(!empty($this->app->DB->error())) { + $this->app->erp->repairNullIds('lager_platz', 'kurzbezeichnung'); + } + } + + $hasStoragesWithZeroId = $this->app->DB->Select("SELECT COUNT(`id`) FROM `lager` WHERE `id` = 0") > 0; + if($hasStoragesWithZeroId) { + $this->app->DB->Delete( + "DELETE `l` + FROM `lager` AS `l` + LEFT JOIN `lager_platz` AS `lp` ON l.id = lp.lager AND lp.geloescht = 0 + WHERE l.id = 0 AND lp.id IS NULL" + ); + $hasStoragesWithZeroId = $this->app->DB->Select("SELECT COUNT(`id`) FROM `lager` WHERE `id` = 0") > 0; + if(!$hasStoragesWithZeroId) { + $this->app->erp->CheckAlterTable( + "ALTER TABLE `lager` ADD PRIMARY KEY (`id`)" + ); + $this->app->erp->CheckAlterTable("ALTER TABLE `lager` MODIFY `id` int(11) NOT NULL AUTO_INCREMENT"); + if(empty($this->app->DB->error())) { + return; + } + } + $this->app->erp->repairNullIds('lager', 'bezeichnung'); + } + $this->removeDoubledNamedStorageLocations(); + $this->removeDoubledNamedStorages(); + } + + public function removeDoubledNamedStorages(): void + { + $storageWithSameName = $this->app->DB->SelectFirstCols( + "SELECT `bezeichnung` + FROM `lager` + WHERE `geloescht` = 0 OR `geloescht` IS NULL + GROUP BY `bezeichnung` + HAVING COUNT(`id`) > 1" + ); + if(empty($storageWithSameName)) { + return; + } + $nameString = implode("', '", array_map([$this->app->DB, 'real_escape_string'], $storageWithSameName)); + $storageWithSameName = $this->app->DB->SelectArr( + "SELECT l.id, l.bezeichnung, lp.lager + FROM `lager` AS `l` + LEFT JOIN ( + SELECT `lager` FROM `lager_platz` WHERE `geloescht` = 0 OR `geloescht` IS NULL GROUP BY `lager` + ) AS `lp` ON l.id = lp.lager + WHERE (l.geloescht IS NULL OR l.geloescht = 0) AND l.bezeichnung IN ('{$nameString}') + ORDER BY l.bezeichnung, lp.lager DESC" + ); + if(empty($storageWithSameName)) { + return; + } + $lastStorageName = null; + foreach($storageWithSameName as $storage) { + if($storage['bezeichnung'] !== $lastStorageName) { + $lastStorageName = $storage['bezeichnung']; + continue; + } + if(!empty($storage['lager'])) { + continue; + } + $this->app->DB->Delete("UPDATE `lager` SET `geloescht` = 1 WHERE `id` = {$storage['id']}"); + } + } + + public function removeDoubledNamedStorageLocations(): void + { + $storageLocationsWithSameName = $this->app->DB->SelectFirstCols( + "SELECT `kurzbezeichnung` + FROM `lager_platz` + WHERE `geloescht` = 0 OR `geloescht` IS NULL + GROUP BY `kurzbezeichnung` + HAVING COUNT(`id`) > 1" + ); + if(empty($storageLocationsWithSameName)) { + return; + } + $nameString = implode("', '", array_map([$this->app->DB, 'real_escape_string'], $storageLocationsWithSameName)); + $storageLocationsWithSameName = $this->app->DB->SelectArr( + "SELECT lp.id, lp.kurzbezeichnung, lpi.lager_platz + FROM `lager_platz` AS `lp` + LEFT JOIN ( + SELECT `lager_platz` FROM `lager_platz_inhalt` GROUP BY `lager_platz` + ) AS `lpi` ON lp.id = lpi.lager_platz + WHERE (lp.geloescht IS NULL OR lp.geloescht = 0) AND lp.kurzbezeichnung IN ('{$nameString}') + ORDER BY lp.kurzbezeichnung, lpi.lager_platz DESC" + ); + if(empty($storageLocationsWithSameName)) { + return; + } + $lastStorageName = null; + foreach($storageLocationsWithSameName as $storage) { + if($storage['kurzbezeichnung'] !== $lastStorageName) { + $lastStorageName = $storage['kurzbezeichnung']; + continue; + } + if(!empty($storage['lager_platz'])) { + continue; + } + $this->app->DB->Delete("UPDATE `lager_platz` SET `geloescht` = 1 WHERE `id` = {$storage['id']}"); + } + } + + + + public function LagerSchnellEinlagern() + { + $this->LagerBuchenMenu(); + $submit = $this->app->Secure->GetPOST('submit'); + $nummer = $this->app->Secure->GetPOST('nummer'); + $menge = $this->app->Secure->GetPOST('menge'); + $grundreferenz = $this->app->Secure->GetPOST('grundreferenz'); + + if($submit!="") + { + + } + + $this->app->YUI->AutoComplete('nummer','lagerartikelnummer'); + $this->app->YUI->AutoComplete('grundreferenz','lagergrund'); + $this->app->Tpl->Parse('TAB1',"lager_schnelleinlagern.tpl"); + $this->app->Tpl->Parse('PAGE',"tabview.tpl"); + } + + + function LagerAbsolutInventur($artikel,$lager_platz = false) + { + + if ($lager_platz) { + $query = " + SELECT + menge, + referenz + FROM + lager_bewegung + WHERE + artikel='".$artikel."' + AND + eingang=1 + AND + permanenteinventur<=0 + AND + referenz LIKE 'Inventur%' + "; + + $query .= " AND lager_platz = '" . $lager_platz . "' "; + } else { + $query = " + SELECT + lb.menge, + lb.referenz + FROM + lager_bewegung lb + LEFT JOIN lager_platz l ON l.id=lb.lager_platz + WHERE + lb.artikel='".$artikel."' + AND + lb.eingang=1 + AND + lb.permanenteinventur<=0 + AND + lb.referenz LIKE 'Inventur%' + AND l.verbrauchslager!=1 + "; + } + $eingang = 0; + $ausgang = 0; + $result = $this->app->DB->SelectArr($query); + $cresult = !empty($result)?count($result):0; + for($i=0;$i<$cresult;$i++) + { + $tmp_eingang = trim(str_replace('neu:','',strstr ( $result[$i]['referenz'] , "neu:", false))); + if($tmp_eingang != $result[$i]['menge']) + { + // TODO alte Menge auf korrekte neue setzten! + $eingang += $tmp_eingang; + } else { + $eingang += $result[$i]['menge']; + } + + $pattern = '/alt:(.*?)neu:/'; + preg_match($pattern, $result[$i]['referenz'], $matches); + $tmp_ausgang = trim($matches[1]); + + if(is_numeric($tmp_ausgang)) + { + $ausgang += $tmp_ausgang; + } + } + return $eingang - $ausgang;//$this->app->DB->Select("SELECT SUM(menge) FROM lager_bewegung WHERE artikel='".$artikelarr[$i]."' AND eingang=1"); + } + + /** + * @param int $artikel + * @param bool $lager_platz + * + * @return float|null + */ + function LagerAbsolutEingang($artikel, $lager_platz = false) + { + + if ($lager_platz) { + $query = " + SELECT + SUM(menge) + FROM + lager_bewegung + WHERE + artikel='".$artikel."' + AND + eingang=1 + AND + permanenteinventur<=0 + AND + referenz + NOT LIKE 'Inventur%' + "; + $query .= " AND lager_platz = '" . $lager_platz . "' "; + } else { + $query = " + SELECT + SUM(lb.menge) + FROM + lager_bewegung lb + LEFT JOIN lager_platz l ON l.id=lb.lager_platz + WHERE + lb.artikel='".$artikel."' + AND + lb.eingang=1 + AND + lb.permanenteinventur<=0 + AND + lb.referenz + NOT LIKE 'Inventur%' + AND + l.verbrauchslager!=1 + "; + } + + return $this->app->DB->Select($query); + } + + /** + * @param int $artikel + * @param bool $lager_platz + * + * @return float|null + */ + function LagerAbsolutAusgang($artikel, $lager_platz = false) + { + if ($lager_platz) { + $query = " + SELECT + SUM(menge) + FROM + lager_bewegung + WHERE + artikel='".$artikel."' + AND + eingang=0 + AND + permanenteinventur<=0 + AND + referenz + NOT LIKE 'Inventur%' + "; + + + $query .= " AND lager_platz = '" . $lager_platz . "' "; + } else { + + $query = " + SELECT + SUM(lb.menge) + FROM + lager_bewegung lb + LEFT JOIN lager_platz l ON l.id=lb.lager_platz + WHERE + lb.artikel='".$artikel."' + AND + lb.eingang=0 + AND + lb.permanenteinventur<=0 + AND + lb.referenz + NOT LIKE 'Inventur%' + AND + l.verbrauchslager!=1 + "; + + + } + + return $this->app->DB->Select($query); + } + + public function LagerDifferenzen() + { + $this->LagerHauptmenu(); + $this->app->Tpl->Set('VERS','Enterprise'); + $this->app->Tpl->Set('MODUL','Enterprise'); + $this->app->Tpl->Parse('PAGE', "only_version.tpl"); + } + + public function LagerDifferenzenLagerplatz() { + + $this->LagerHauptmenu(); + $this->app->Tpl->Set('VERS','Enterprise'); + $this->app->Tpl->Set('MODUL','Enterprise'); + $this->app->Tpl->Parse('PAGE', "only_version.tpl"); + + } + + + public function LagerSchnellUmlagern() + { + $this->LagerBuchenMenu(); + $submit = $this->app->Secure->GetPOST('submit'); + $nummer = $this->app->Secure->GetPOST('nummer'); + $get_nummer = $this->app->Secure->GetGET('nummer'); + $menge = $this->app->Secure->GetPOST('menge'); + $grundreferenz = $this->app->Secure->GetPOST('grundreferenz'); + $ziellager = $this->app->Secure->GetPOST('ziellager'); + + if($get_nummer!=''){ + $this->app->Tpl->Set('FOCUS', 'ziellager'); + } + else{ + $this->app->Tpl->Set('FOCUS', 'nummer'); + } + + + $lager_platz = $this->app->DB->Select("SELECT id FROM lager_platz WHERE kurzbezeichnung='$ziellager' AND kurzbezeichnung!='' LIMIT 1"); + if($lager_platz<=0 && $ziellager > 0) + { + $lager_platz = $this->app->DB->Select("SELECT id FROM lager_platz WHERE id='$ziellager' LIMIT 1"); + $ziellager = $this->app->DB->Select("SELECT kurzbezeichnung FROM lager_platz WHERE id='$lager_platz' LIMIT 1"); + } + + if($grundreferenz!='') { + $this->app->User->SetParameter('lager_schnellumlagern_grund',$grundreferenz); + } + if($ziellager!='') { + $this->app->User->SetParameter('lager_schnellumlagern_ziellager',$ziellager); + } + + if($submit!='') + { + $artikelid = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer='$nummer' AND nummer!='' LIMIT 1"); + if($artikelid <=0) + $artikelid = $this->app->DB->Select("SELECT id FROM artikel WHERE ean='$nummer' AND ean!='' AND geloescht <> 1 LIMIT 1"); + if($artikelid <=0) + $artikelid = $this->app->DB->Select("SELECT id FROM artikel WHERE herstellernummer='$nummer' AND herstellernummer!='' AND geloescht <> 1 LIMIT 1"); + + $name_de = $this->app->DB->Select("SELECT CONCAT(nummer,' ',name_de) FROM artikel WHERE id='$artikelid' LIMIT 1"); + //$projekt = $this->app->DB->Select("SELECT projekt FROM artikel WHERE id='$artikelid' LIMIT 1"); + + if($artikelid > 0 && $lager_platz > 0) + { + $anzahl_artikel = $this->app->DB->Select("SELECT SUM(menge) FROM lager_platz_inhalt WHERE artikel='$artikelid'"); + if($anzahl_artikel >= $menge) + { + // auslagern bevorzugt aus lager_platz ansonsten von den anderen + $this->app->erp->LagerAutoAuslagernArtikel($artikelid,$menge,$grundreferenz); + + // einlagern lager_platz + $this->app->erp->LagerEinlagern($artikelid,$menge,$lager_platz,$projekt,$grundreferenz); + + $msg = $this->app->erp->base64_url_encode("
    Der Artikel $name_de wurde $menge mal umgelagert!
    "); + $this->app->Location->execute('index.php?module=lager&action=schnellumlagern&msg='.$msg); + } + if($anzahl_artikel > 0){ + $msg = $this->app->erp->base64_url_encode("
    Der Artikel ist nur maximal $anzahl_artikel im Lager vorhanden! Bitte korrekte Menge angeben!
    "); + } + else{ + $msg = $this->app->erp->base64_url_encode("
    Der Artikel hat keinen Bestand im Lager!
    "); + } + $this->app->Location->execute('index.php?module=lager&action=schnellumlagern&msg='.$msg); + } + if($artikelid<=0) + { + $msg = "
    Der Artikel mit der Nummer $nummer wurde nicht gefunden!
    "; + $get_nummer = ''; + } + else{ + $get_nummer = $nummer; + } + + if($lager_platz<=0) + { + $msg .= "
    Das Ziellager $ziellager wurde nicht gefunden!
    "; + $this->app->User->SetParameter("lager_schnellumlagern_ziellager",""); + } + $msg = $this->app->erp->base64_url_encode($msg); + $this->app->Location->execute("index.php?module=lager&action=schnellumlagern&msg=$msg&nummer=$get_nummer"); + } + $msg = $this->app->Secure->GetGET('msg'); + if($msg==''){ + $this->app->Tpl->Set('MESSAGE', '
    {|Der Artikel wird wenn vorhanden aus dem Standardlager ausgelagert.|}
    '); + } + + if($grundreferenz==''){ + $grundreferenz = $this->app->User->GetParameter('lager_schnellumlagern_grund'); + } + if($ziellager=='') { + $ziellager=$this->app->User->GetParameter('lager_schnellumlagern_ziellager'); + } + $this->app->Tpl->Set('GRUNDREFERENZ',$grundreferenz); + $this->app->Tpl->Set('ZIELLAGER',$ziellager); + + $this->app->Tpl->Set('NUMMER',$get_nummer); + $this->app->YUI->AutoComplete('nummer','lagerartikelnummer',1); + $this->app->YUI->AutoComplete('ziellager','lagerplatz'); + $this->app->YUI->AutoComplete('grundreferenz','lagergrund'); + $this->app->Tpl->Parse('PAGE',"lager_schnellumlagern.tpl"); + } + + + + + public function LagerSchnellAuslagern() + { + $this->LagerBuchenMenu(); + $submit = $this->app->Secure->GetPOST('submit'); + $nummer = $this->app->Secure->GetPOST('nummer'); + $menge = $this->app->Secure->GetPOST('menge'); + $grundreferenz = $this->app->Secure->GetPOST('grundreferenz'); + + if($grundreferenz!='') + { + $this->app->User->SetParameter("lager_schnellauslagern_grund",$grundreferenz); + } + + if($submit!='') + { + $artikelid = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer='$nummer' AND nummer!='' LIMIT 1"); + if($artikelid <=0) + $artikelid = $this->app->DB->Select("SELECT id FROM artikel WHERE ean='$nummer' AND ean!='' AND geloescht <> 1 LIMIT 1"); + if($artikelid <=0) + $artikelid = $this->app->DB->Select("SELECT id FROM artikel WHERE herstellernummer='$nummer' AND herstellernummer!='' AND geloescht <> 1 LIMIT 1"); + + $name_de = $this->app->DB->Select("SELECT CONCAT(nummer,' ',name_de) FROM artikel WHERE id='$artikelid' LIMIT 1"); + + if($artikelid > 0) + { + $anzahl_artikel = $this->app->DB->Select("SELECT SUM(menge) FROM lager_platz_inhalt WHERE artikel='$artikelid'"); + if($anzahl_artikel >= $menge ) + { + // auslagern bevorzugt aus lager_platz ansonsten von den anderen + $this->app->erp->LagerAutoAuslagernArtikel($artikelid,$menge,$grundreferenz); + $msg = $this->app->erp->base64_url_encode("
    Der Artikel $name_de wurde $menge mal ausgelagert!
    "); + $this->app->Location->execute("index.php?module=lager&action=schnellauslagern&msg=$msg"); + } + $msg = $this->app->erp->base64_url_encode("
    Der Artikel ist nur maximal $anzahl_artikel im Lager vorhanden! Bitte korrekte Menge angeben!
    "); + $this->app->Location->execute("index.php?module=lager&action=schnellauslagern&msg=$msg"); + } + $msg = $this->app->erp->base64_url_encode("
    Der Artikel mit der Nummer $nummer wurde nicht gefunden!
    "); + $this->app->Location->execute("index.php?module=lager&action=schnellauslagern&msg=$msg"); + } + $msg = $this->app->Secure->GetGET('msg'); + if($msg==''){ + $this->app->Tpl->Set('MESSAGE', '
    Der Artikel wird wenn vorhanden aus dem Standardlager ausgelagert.
    '); + } + + if($grundreferenz=='') + { + $grundreferenz=$this->app->User->GetParameter('lager_schnellauslagern_grund'); + } + $this->app->Tpl->Set('GRUNDREFERENZ',$grundreferenz); + + $this->app->YUI->AutoComplete('nummer','lagerartikelnummer',1); + $this->app->YUI->AutoComplete('grundreferenz','lagergrund'); + $this->app->Tpl->Parse('PAGE','lager_schnellauslagern.tpl'); + } + + public function LagerBestand() + { + $this->LagerHauptmenu(); + $this->app->erp->MenuEintrag('index.php?module=lager&action=list','zurück zur Übersicht'); + $this->app->erp->Headlines('','Bestand'); + $this->app->YUI->TableSearch('TAB1', 'lager_bestand', 'show','','',basename(__FILE__), __CLASS__); + $this->app->Tpl->Parse('PAGE','lager_bestand.tpl'); + } + + + public function LagerWert() + { + $this->LagerHauptmenu(); + $this->app->Tpl->Set('VERS','Professional'); + $this->app->Tpl->Set('MODUL','Professional'); + $this->app->Tpl->Parse('PAGE', 'only_version.tpl'); + } + + public function LagerBuchenZwischenlagerDelete() + { + $id = $this->app->Secure->GetGET('id'); + if($id > 0){ + $this->app->DB->Delete("DELETE FROM zwischenlager WHERE id='$id' LIMIT 1"); + } + $this->app->Location->execute('index.php?module=lager&action=buchenzwischenlager&top=TGFnZXI='); + } + + + public function LagerPlatzDelete() + { + $id = $this->app->Secure->GetGET('id'); + //if(is_numeric($id)) + // $this->app->DB->Delete("DELETE FROM lager WHERE id='$id' LIMIT 1"); + + $numberofarticles = $this->app->DB->Select( + sprintf( + 'SELECT id FROM lager_platz_inhalt WHERE lager_platz=%d LIMIT 1', + (int)$id + ) + ); + $lager = 0; + if($numberofarticles > 0) + { + $msg = $this->app->erp->base64_url_encode('
    In diesem Lager existieren Artikel. Es können nur leere Lagerplätze bzw. Lager ohne Lagerplätze gelöscht werden!
    '); + } + else { + if($id > 0){ + $lager = $this->app->DB->Select( + sprintf('SELECT lager FROM lager_platz WHERE id = %d LIMIT 1',(int)$id) + ); + $this->app->DB->Delete( + sprintf('DELETE FROM lager_platz WHERE id=%d LIMIT 1', (int)$id) + ); + $this->app->DB->Update( + sprintf('UPDATE artikel SET lager_platz=0 WHERE lager_platz = %d', (int)$id) + ); + } + $msg = $this->app->erp->base64_url_encode('
    Das Regal wurde gelöscht!
    '); + } + + $ref = $_SERVER['HTTP_REFERER']; + if(($pos = strpos($ref,'&msg=')) > 0) + { + $ref = substr($ref, 0, $pos); + } + if(empty($ref)) { + $ref = 'index.php?module=lager&action=platz&id='.$lager; + } + + $this->app->Location->execute($ref.'&msg='.$msg); + } + + + public function LagerDelete() + { + $id = $this->app->Secure->GetGET('id'); + + $numberofarticles = $this->app->DB->Select( + sprintf('SELECT id FROM lager_platz WHERE lager=%d LIMIT 1', (int)$id) + ); + + if($numberofarticles > 0) + { + $msg = $this->app->erp->base64_url_encode('
    In diesem Lager existieren noch Lagerplätze. Es können nur leere Lager gelöscht werden!
    '); + } + else { + $this->app->DB->Select(sprintf('DELETE FROM lager WHERE id=%d LIMIT 1', (int)$id)); + $msg = $this->app->erp->base64_url_encode('
    Das Lager wurde gelöscht!
    '); + } + + $ref = $_SERVER['HTTP_REFERER']; + if(($pos = strpos($ref,'&msg=')) > 0) { + $ref = substr($ref, 0, $pos); + } + if(empty($ref)) { + $ref = 'index.php?module=lager&action=list'; + } + $this->app->Location->execute($ref.'&msg='.$msg); + } + + + public function LagerArtikelEntfernenReserviert() { + $reservierung = $this->app->Secure->GetGET('reservierung'); + if (is_numeric($reservierung)) { + $this->app->DB->Delete("DELETE FROM lager_reserviert WHERE id='$reservierung'"); + } + $this->app->Location->execute('index.php?module=lager&action=reservierungen'); + } + + function LagerBuchen() {; + $this->LagerBuchenZwischenlager(); + } + function LagerKalkMenu() { + $this->app->erp->Headlines('Bestellvorschlag'); + if($this->app->erp->RechteVorhanden('schnellproduktion','bestellvorschlag')) { + $this->app->erp->MenuEintrag('index.php?module=schnellproduktion&action=bestellvorschlag','Produktionsartikel Bestellvorschlag'); + } + } + + + function LagerBuchenZwischenlager() { + $this->LagerBuchenMenu(); + //$this->app->Tpl->Set(TABTEXT, "Zwischenlager"); + $this->app->erp->Headlines('Zwischenlager'); + $this->app->Tpl->Set('SUBSUBHEADING', '{|EINGANG Zwischenlager Stand|} ' . date('d.m.Y')); + // easy table mit arbeitspaketen YUI als template + if($this->app->User->GetType()==='admin'){ + $delete = ""; + } + + /*$table = new EasyTable($this->app); + $table->Query("SELECT a.name_de as artikel,a.nummer as nummer,z.menge,z.vpe,z.grund, p.abkuerzung as projekt, z.id FROM zwischenlager z LEFT JOIN artikel a ON a.id=z.artikel LEFT JOIN projekt p ON + p.id=z.projekt WHERE z.richtung='eingang'"); + $table->DisplayNew('INHALT', " $delete"); + */ + $this->app->YUI->TableSearch('INHALT', 'lager_zwischenlager_eingang', 'show','','',basename(__FILE__), __CLASS__); + $this->app->Tpl->Parse('TAB1', 'rahmen70.tpl'); + $this->app->Tpl->Set('INHALT', ''); + $this->app->Tpl->Set('SUBSUBHEADING', '{|AUSGANG Zwischenlager Stand|} ' . date('d.m.Y')); + // easy table mit arbeitspaketen YUI als template + /*$table = new EasyTable($this->app); + $table->Query("SELECT a.name_de as artikel,z.menge,z.vpe,z.grund, p.abkuerzung as projekt, z.id FROM zwischenlager z LEFT JOIN artikel a ON a.id=z.artikel LEFT JOIN projekt p ON + p.id=z.projekt WHERE z.richtung='ausgang' ORDER by z.id DESC"); + $table->DisplayNew('INHALT', " $delete"); + */ + $this->app->YUI->TableSearch('INHALT', 'lager_zwischenlager_ausgang', 'show','','',basename(__FILE__), __CLASS__); + + $this->app->Tpl->Parse('TAB1', 'rahmen70.tpl'); + $this->app->Tpl->Set('AKTIV_TAB1', 'selected'); + $this->app->Tpl->Add('TAB1',''); + $this->app->Tpl->Parse('PAGE', 'tabview.tpl'); + } + + function LagerBuchenEinlagern() { + session_start(); + $this->LagerBuchenMenu(); + $this->app->erp->Headlines('Lager', 'Einlagern'); + $id = $this->app->Secure->GetGET('id'); + $cmd = $this->app->Secure->GetGET('cmd'); // vom zwischen lager! + $menge = str_replace(',','.',$this->app->Secure->GetPOST('menge')); + $submit = $this->app->Secure->GetPOST('submit'); + $back = $this->app->Secure->GetGET('back'); + $vpeid = $this->app->Secure->GetGET('vpeid'); + $chargesnmhdbemerkung = $this->app->Secure->GetPOST('chargesnmhdbemerkung'); + + $grund = $this->app->Secure->GetPOST('grund'); + $artikelid = $this->app->Secure->GetGET('artikelid'); + + $artikelbeschreibung = $this->app->DB->Select("SELECT CONCAT(nummer,' ',name_de) FROM artikel WHERE id='$artikelid' AND lagerartikel=1 LIMIT 1"); + + + if($back==='artikel' && $artikelid!='') + { + $menge_anzeige = $this->app->Secure->GetGET('menge'); + $this->app->Tpl->Set('NEINDOCHNICHTSTART',''); + } + + $this->app->YUI->AutoComplete('projekt','projektname'); + $this->app->YUI->AutoComplete('nummer','lagerartikelnummer',1); + $this->app->YUI->AutoComplete('regal','lagerplatz'); + $this->app->YUI->AutoComplete('grundreferenz','lagergrund'); + + if($cmd==='zwischenlager') + { + $this->app->Tpl->Set('MENGEREADONLY','readonly'); + $this->app->Tpl->Set('WOHERREADONLYSTART',''); + + $mhd = $this->app->DB->SelectArr("SELECT * FROM lager_mindesthaltbarkeitsdatum WHERE zwischenlagerid='$id'"); + $cmhd = !empty($mhd)?count($mhd):0; + for($i=1;$i<=$cmhd;$i++) + { + $this->app->Tpl->Add('SRNINFO',"MHD: ".$mhd[$i-1]['mhddatum'].""); + $this->app->Tpl->Add('MHDVALUE',$this->app->String->Convert($mhd[$i-1]['mhddatum'],"%3-%2-%1","%1.%2.%3")); + } + $charge = $this->app->DB->SelectArr("SELECT * FROM lager_charge WHERE zwischenlagerid='$id'"); + $ccharge = !empty($charge)?count($charge):0; + for($i=1;$i<=$ccharge;$i++) + { + $this->app->Tpl->Add('SRNINFO',"Charge: ".$charge[$i-1]['charge'].""); + } + $srn = $this->app->DB->SelectArr("SELECT * FROM lager_seriennummern WHERE zwischenlagerid='$id'"); + $csrn = !empty($srn)?count($srn):0; + for($i=1;$i<=$csrn;$i++) + { + $this->app->Tpl->Add('SRNINFO',"Seriennummer: ".$srn[$i-1]['seriennummer'].""); + } + + $this->app->Tpl->Set('SHOWCHRSTART',''); + if((!empty($mhd)?count($mhd):0) <=0) + { + $this->app->Tpl->Set('SHOWMHDSTART',''); + } + $this->app->Tpl->Set('SHOWSRNSTART',''); + } else { + $this->app->Tpl->Set('WOHERREADONLYSTART2',''); + } + + // wenn projekt angeben + if ($this->app->Secure->GetPOST('projekt') != '') + { + $projekt = $this->app->Secure->GetPOST('projekt'); + $projekt = explode(' ', $projekt); + $projekt = $projekt[0]; + if(!is_numeric($projekt)) + $projekt = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung='$projekt' LIMIT 1"); + + $_SESSION['projekt'] = $projekt; + } + + $projekt = $_SESSION['projekt']; + $regal = $this->app->Secure->GetPOST('regal'); + $frmRegal = $regal; + + $submitStorageLocationId = $this->app->Secure->GetGET('submitstoragelocationid'); + $storageLocationId = $this->app->Secure->GetGET('storagelocationid'); + $interimonconsumption = $this->app->Secure->GetGET('interimonconsumption'); + $comment = $this->app->Secure->GetGET('comment'); + $suggestedbestbeforebatch = $this->app->Secure->GetPOST('suggestedbestbeforebatch'); + if(empty($suggestedbestbeforebatch)) { + $suggestedbestbeforebatch = $this->app->Secure->GetGET('suggestedbestbeforebatch'); + } + + $this->app->Tpl->Set('SUGGESTEDBATCHBEFORE', $suggestedbestbeforebatch); + $regal_id = 0; + if((!empty($submitStorageLocationId) || !empty($storageLocationId)) && empty($submit) && empty($regal)) { + $submit = !empty($submitStorageLocationId); + $regal_id = !empty($submitStorageLocationId)?$submitStorageLocationId:$storageLocationId; + if(empty($grund)) { + $grund = $comment; + } + $regal = $this->app->DB->Select( + sprintf( + 'SELECT kurzbezeichnung FROM lager_platz WHERE id = %d LIMIT 1', + $regal_id + ) + ); + $frmRegal = $regal; + } + + + if((String)$regal!=='') { + $regal_id = $this->app->DB->Select("SELECT id FROM lager_platz WHERE kurzbezeichnung='$regal' LIMIT 1"); + } + + if(is_numeric($regal_id)){ + $regal = $regal_id; + } + + $nummer = $this->app->Secure->GetPOST('nummer'); + //$nummer = explode(' ', $nummer); + //$nummer = $nummer[0]; + + if ((String)$nummer === '' && $cmd !== 'zwischenlager' && $artikelid=='') { + $this->app->Tpl->Set('MSGARTIKEL', "
    {|Jetzt Artikel abscannen!|}"); + $this->app->Tpl->Set('ARTIKELSTYLE', "style=\"border: 2px solid red;width:200px;\""); + } + + $woher = $this->app->Secure->GetPOST('woher'); + $zwischenlagerid = $this->app->Secure->GetPOST('zwischenlager'); + $menge = str_replace(',','.',$this->app->Secure->GetPOST('menge')); + + $grundreferenz = $this->app->Secure->GetPOST('grundreferenz'); + // hier nur rein wenn artikel lager und projekt sinn machen sonst + //message ausgeben und artikel wirklich aus zwischenlager + $alles_komplett = 0; + if ($woher === 'Zwischenlager' && $zwischenlagerid <= 0) { + $grund.= "
  • Artikel kommt nicht aus Zwischenlager!
  • "; + $alles_komplett++; + } + + + $artikel_tmp = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer='$nummer' AND nummer!='' AND geloescht!=1 AND lagerartikel=1 LIMIT 1"); + $ean = $this->app->DB->Select("SELECT id FROM artikel WHERE ean='$nummer' AND ean!='' AND geloescht!=1 AND lagerartikel=1 LIMIT 1"); + if($artikel_tmp <=0 && $ean > 0) + { + $artikel_tmp = $ean; + $nummer = $this->app->DB->Select("SELECT nummer FROM artikel WHERE id='$ean' AND lagerartikel=1 LIMIT 1"); + } + $artikelcheck = $this->app->DB->Select("SELECT id FROM artikel WHERE id='$artikel_tmp' AND lagerartikel=1 LIMIT 1"); + + $artikel_quickcheck = 0; + if ($submit !='' && ($artikelcheck != $artikel_tmp || $artikel_tmp == '' || $artikel_tmp == 0)) { + $grund.= "
  • Artikel-Nummer gibt es nicht!
  • "; + $alles_komplett++; + $artikel_quickcheck = 1; + } + + // gibts regal + $regalcheck = $this->app->DB->Select("SELECT id FROM lager_platz WHERE id='$regal' LIMIT 1"); + if ($regalcheck != $regal || $regal == '' || $regal == 0) { + $grund.= "
  • Regal gibt es nicht!
  • "; + $alles_komplett++; + } + + if ($alles_komplett > 0 && $regal != '') { + $this->app->Tpl->Set('MESSAGELAGER', "
    Artikel wurde nicht gebucht! Grund:
    "); + } else { + if ($artikel_quickcheck == 1 && (String)$nummer !== '') { + $this->app->Tpl->Set('MESSAGELAGER', "
    Achtung! Artikelnummer + gibt es nicht, oder der Artikel ist kein Lagerartikel!
    "); + $nummer =""; + } + } + if ((String)$nummer === '' && $cmd == '' && $woher == '') { + $_SESSION['woher'] = 'Manuelle Lageranpassung'; + } + + $artArr = $this->app->DB->SelectRow( + sprintf( + 'SELECT chargenverwaltung,mindesthaltbarkeitsdatum, seriennummern + FROM artikel + WHERE id=%d LIMIT 1', + (int)$artikel_tmp + ) + ); + $chargenverwaltung= $artArr['chargenverwaltung']; + $mindesthaltbarkeitsdatum = $artArr['mindesthaltbarkeitsdatum']; + $suggestedbatch = ''; + $suggestedbestbefore = ''; + if($mindesthaltbarkeitsdatum && $chargenverwaltung) { + $suggestedbestbefore = substr($suggestedbestbeforebatch,0,10); + if(strpos($suggestedbestbefore,'-')!== false) { + $suggestedbestbefore = $this->app->String->Convert($suggestedbestbefore,'%3-%2-%1','%1.%2.%3'); + } + $suggestedbatch = ltrim(substr($suggestedbestbeforebatch,10),'-'); + } + elseif($mindesthaltbarkeitsdatum) { + $suggestedbestbefore = $suggestedbestbeforebatch; + } + elseif($chargenverwaltung) { + $suggestedbatch = $suggestedbestbeforebatch; + } + + + $seriennummern = $artArr['seriennummern']; + if($seriennummern != '' && $seriennummern !== 'keine') { + $menge = (int)$menge; + } + // pruefen einlagern + + $error = 0; + // Pflichtfelder pruefen + $checkmhd = $this->app->String->Convert($this->app->Secure->GetPOST('mhd'),'%1.%2.%3','%3-%2-%1'); + if($mindesthaltbarkeitsdatum=='1' && !$this->app->erp->CheckDateValidate($checkmhd)) { + $error++; + } + + if(($chargenverwaltung=='2' || $chargenverwaltung=="1") && $this->app->Secure->GetPOST('charge')=='' && $zwischenlagerid <=0) { + $error++; + } + if( ($seriennummern !=='keine' && $seriennummern !=='vomprodukt' && $seriennummern !=='eigene' && $seriennummern!='') && $cmd!=='zwischenlager') { + $tmpcheck = $this->app->Secure->GetPOST("seriennummern"); + for($checkser=0;$checkser < $menge; $checkser++) { + if($tmpcheck[$checkser]==''){ + $error++; + } + } + } + + if($submit!='' && $error > 0) { + $alles_komplett++; + //$this->app->Tpl->Add('MESSAGE',"
    Achtung! Bitte alle Pflichtfelder (Regal, MHD, Charge, Seriennummer) ausfüllen!
    "); + } + + if ($alles_komplett == 0 && $regal != '') { + $artikel = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer='$nummer' AND geloescht!=1 AND lagerartikel=1 LIMIT 1"); + $name = $this->app->DB->Select("SELECT name_de FROM artikel WHERE id='$artikel' AND geloescht!=1 AND lagerartikel=1 LIMIT 1"); + $einheit = $this->app->DB->Select("SELECT einheit FROM artikel WHERE id='$artikel' AND geloescht!=1 AND lagerartikel=1 LIMIT 1"); + // pruefe ob es einen ek fuers projekt gibt sonst meckern!!! + //echo "buchen entweder aus zwischenlager, prpoduktion oder so"; + if ($woher === 'Zwischenlager') { + $this->app->erp->LagerEinlagerVomZwischenlager($zwischenlagerid, $menge, $regal, $projekt,$grundreferenz); + + $gesamt = $this->app->DB->Select("SELECT SUM(menge) FROM lager_platz_inhalt WHERE artikel='$artikel' AND lager_platz='$regal'"); + $gesamt_alle = $this->app->DB->Select("SELECT SUM(menge) FROM lager_platz_inhalt WHERE artikel='$artikel'"); + if(is_float($menge) || is_numeric($menge)) + { + $msg = $this->app->erp->base64_url_encode("
    Der Artikel $name wurde $menge mal eingelagert. Anzahl Regal: ".(float)$gesamt." $einheit Anzahl Komplettbestand alle Regale: ".(float)$gesamt_alle." $einheit
    "); + } else { + $msg = $this->app->erp->base64_url_encode("
    Fehler: Unbekannte oder falsche Menge: $menge bei Artikel \"$name\". Der Artikel wurde nicht eingelagert!
    "); + } + + $this->app->Location->execute('index.php?module=lager&action=buchenzwischenlager&msg='.$msg); + } + if ($woher === 'Manuelle Lageranpassung'){ + $_SESSION['projekt'] = $projekt; + + $this->app->erp->LagerEinlagernDifferenz($artikel, $menge, $regal, $projekt,$grundreferenz,"",(int)$this->app->Secure->GetGET('vpeid')); + + //$this->app->erp->LogFile("ETIKETT1 A $artikel M $menge R $regal"); //BENE + //$data['lager_platz_name'] = $this->app->DB->Select("SELECT kurzbezeichnung FROM lager_platz WHERE id='$regal'"); + //$this->app->erp->EtikettenDrucker("artikel_klein",1,'artikel',$artikel,$data); + + $gesamt = $this->app->DB->Select("SELECT SUM(menge) FROM lager_platz_inhalt WHERE artikel='$artikel' AND lager_platz='$regal'"); + $gesamt_alle = $this->app->DB->Select("SELECT SUM(menge) FROM lager_platz_inhalt WHERE artikel='$artikel'"); + if(is_float($menge) || is_numeric($menge)) + { + $msg = $this->app->erp->base64_url_encode("
    Der Artikel $name wurde $menge mal eingelagert. Anzahl Regal: ".(float)$gesamt." $einheit Anzahl Komplettbestand alle Regale: ".(float)$gesamt_alle." $einheit
    "); + } + else { + $msg = $this->app->erp->base64_url_encode("
    Fehler: Unbekannte oder falsche Menge: $menge bei Artikel \"$name\". Der Artikel wurde nicht eingelagert!
    "); + } + + // Mindesthaltbarkeitsdatum buchen + $chargemindest = $this->app->Secure->GetPOST('charge'); + $isInterim = $interimonconsumption && $this->app->DB->Select( + sprintf( + 'SELECT id FROM lager_platz WHERE id = %d AND verbrauchslager = 1', + (int)$regal + ) + ); + if($mindesthaltbarkeitsdatum > 0) { + $mhd = $this->app->String->Convert($this->app->Secure->GetPOST('mhd'),'%1.%2.%3','%3-%2-%1'); + $this->app->erp->AddMindesthaltbarkeitsdatumLagerOhneBewegung($artikel,$menge,$regal,$mhd,$chargemindest,'','','',trim($chargesnmhdbemerkung.' '.$grundreferenz),0,$isInterim); + } + + if($chargenverwaltung > 0) { + $datum = date('Y-m-d'); + $this->app->erp->AddChargeLagerOhneBewegung($artikel,$menge,$regal,$datum,$chargemindest,$chargesnmhdbemerkung,0,'',0,$isInterim); + } + + //Seriennummern buchen + $tmpcheck = $this->app->Secure->GetPOST('seriennummern'); + + + if($artikelid!=''){ + $this->app->Location->execute('index.php?module=artikel&action=lager&id='.$artikelid.($msg!=""?"&msg=".$msg:"")); + } + + $this->app->Location->execute('index.php?module=lager&action=bucheneinlagern&msg='.$msg); + } + // wenn von zwischenlager dann header location nach zwischenlager + // sonst einlagern + } + + // kommt direkt vom zwischenlager + if ($cmd === 'zwischenlager') { + $_SESSION['woher'] = 'Zwischenlager'; + $zwischenlagerArr = $this->app->DB->SelectRow("SELECT artikel,projekt,menge,vpe FROM zwischenlager WHERE id='$id' LIMIT 1"); + $projekt = $zwischenlagerArr['projekt']; + $menge = $zwischenlagerArr['menge']; + $artikel = $zwischenlagerArr['artikel']; + $artikelArr = $this->app->DB->SelectRow("SELECT nummer,name_de, lager_platz,standardbild FROM artikel WHERE id='$artikel' LIMIT 1"); + $nummer = $artikelArr['nummer']; + $name_de = $artikelArr['name_de']; + $lagerplatz = $artikelArr['lager_platz']; + $lagerbezeichnung = $this->app->DB->Select("SELECT kurzbezeichnung FROM lager_platz WHERE id='$lagerplatz' LIMIT 1"); + $vpe = $zwischenlagerArr['vpe']; + if ($projekt == '' || $projekt == 0) { + $projekt = 1; + } // default projekt + $standardbild = $artikelArr['standardbild']; + if ($standardbild == '') { + $standardbild = $this->app->DB->Select("SELECT datei FROM datei_stichwoerter WHERE subjekt='Shopbild' AND objekt='Artikel' AND parameter='$artikel' LIMIT 1"); + } + $this->app->Tpl->Add('ZWISCHENLAGERINFO', "Bezeichnung:$name_de"); + if ($standardbild > 0) { + $this->app->Tpl->Add('ZWISCHENLAGERINFO', "Bild:"); + } + + if($lagerbezeichnung!='') + { + $this->app->Tpl->Add('ZWISCHENLAGERINFO', "
    Regalvorschlag:$lagerbezeichnung"); + } else { + $lagermeist = $this->app->DB->SelectRow("SELECT lager_platz, SUM(menge) FROM lager_platz_inhalt WHERE artikel='$artikel' GROUP BY lager_platz ORDER by 2 DESC LIMIT 1"); + $lagerplatz = $lagermeist['lager_platz']; + $lagerbezeichnung = $this->app->DB->Select("SELECT kurzbezeichnung FROM lager_platz WHERE id='{$lagermeist['lager_platz']}' LIMIT 1"); + //$lagerplatz = $this->app->DB->Select("SELECT lager_platz FROM artikel WHERE id='$artikel' LIMIT 1"); + //$lagerbezeichnung = $this->app->DB->Select("SELECT kurzbezeichnung FROM lager_platz WHERE id='$lagerplatz' LIMIT 1"); + + if ($lagerplatz == '' || $lagerplatz == 0) { + $lagerbezeichnung = 'Regal frei wählen'; + } + + $this->app->Tpl->Add('ZWISCHENLAGERINFO', "
    Regalvorschlag:$lagerbezeichnung"); + + } + $this->app->Tpl->Add('ZWISCHENLAGERINFO', "

    Regal:


    Jetzt Regal abscannen! + "); + $this->app->Tpl->Add('ZWISCHENLAGERINFO', ''); + + + + } else { + + if (($menge == '' || $menge == 0) && $cmd!=='umlagern') { + $menge = 1; + } + + if ($this->app->Secure->GetPOST('woher') != '') { + $_SESSION['woher'] = $this->app->Secure->GetPOST('woher'); + } + + if ((String)$this->app->Secure->GetPOST('nummer') !== '' || $artikelid > 0) { + $nummer = $this->app->Secure->GetPOST('nummer'); + //$nummer = explode(' ', $nummer); + //$nummer = $nummer[0]; + + if($artikelid > 0){ + $nummer = $this->app->DB->Select("SELECT nummer FROM artikel WHERE id='$artikelid' LIMIT 1"); + $this->app->Tpl->Set('NUMMER', $nummer); + } + + $artikel = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer='$nummer' AND geloescht!=1 AND lagerartikel=1 LIMIT 1"); + + $ean = $this->app->DB->Select("SELECT id FROM artikel WHERE ean='$nummer' AND ean!='' AND geloescht!=1 AND lagerartikel=1 LIMIT 1"); + if($artikel <=0 && $ean > 0) { + $artikel = $ean; + $nummer = $this->app->DB->Select("SELECT nummer FROM artikel WHERE id='$ean' LIMIT 1"); + } + + if($artikel > 0) + { + $articleRow = $this->app->DB->SelectRow( + sprintf( + 'SELECT name_de, lager_platz, einheit FROM artikel WHERE id = %d', + $artikel + ) + ); + $name_de = $articleRow['name_de']; + $lagermeist = $this->app->DB->SelectArr("SELECT lager_platz, SUM(menge) FROM lager_platz_inhalt WHERE artikel='$artikel' GROUP BY lager_platz ORDER by 2 DESC LIMIT 1"); + $lagermeist = $this->app->DB->Select("SELECT kurzbezeichnung FROM lager_platz WHERE id='{$lagermeist[0]['lager_platz']}' LIMIT 1"); + //$name_de = $articleRow['lager_platz']; + $einheit = $articleRow['einheit']; + $lagerplatz = $articleRow['lager_platz'];// $this->app->DB->Select("SELECT lager_platz FROM artikel WHERE id='$artikel' LIMIT 1"); + $lagerbezeichnung = $this->app->DB->Select("SELECT kurzbezeichnung FROM lager_platz WHERE id='$lagerplatz' LIMIT 1"); + if ($lagerplatz == '' || $lagerplatz == 0) { + $lagerbezeichnung = 'Regal frei wählen'; + } + //$vpe = $this->app->DB->Select("SELECT vpe FROM artikel WHERE id='$id' LIMIT 1"); + $vpe = 'einzeln'; + //$projekt = $this->app->DB->Select("SELECT projekt FROM zwischenlager WHERE id='$id' LIMIT 1"); + if ($projekt == '' || $projekt == 0) { + $projekt = 1; // default projekt + } + + + if($chargenverwaltung !='2' && $chargenverwaltung !='1') + { + $this->app->Tpl->Set('SHOWCHRSTART',''); + } else { + // $this->app->YUI->DatePicker("mhd"); + $frmcharge = $this->app->Secure->GetPOST('charge'); + $this->app->Tpl->Set('CHARGEVALUE', !empty($frmcharge)?$frmcharge:$suggestedbatch); + } + + + if($mindesthaltbarkeitsdatum !='1') + { + $this->app->Tpl->Set('SHOWMHDSTART',''); + } else { + $this->app->YUI->DatePicker('mhd'); + $frmmhd = $this->app->Secure->GetPOST('mhd'); + if(empty($frmmhd)) { + $frmmhd = $suggestedbestbefore; + } + $this->app->Tpl->Set('MHDVALUE', $frmmhd); + } + + + if($seriennummern === 'keine' || $seriennummern ==='vomprodukt' || $seriennummern ==='eigene' || $menge <= 0 || $seriennummern=='') + { + $this->app->Tpl->Set('SHOWSRNSTART',''); + } else { + // Generator felder fuer seriennummern + $this->app->Tpl->Add('SERIENNUMMERN',''); + $tmp = $this->app->Secure->GetPOST("seriennummern"); + for($ij=1;$ij<=$menge;$ij++) + { + $value = $tmp[$ij-1]; + $this->app->Tpl->Add('SERIENNUMMERN',""); + $this->app->Tpl->Add('SERIENNUMMERNENTERJUMP', "document.getElementById('seriennummern_$ij').addEventListener('keypress', function(event) {if (event.keyCode == 13) {event.preventDefault();document.getElementById(".($ij < $menge?"'seriennummern_".($ij+1)."'":"'projekt'").").focus()}});"); + } + $this->app->Tpl->Add('SERIENNUMMERN','
    Nr.{|Seriennummer|}
    $ij
    '); + } + + $standardbild = $this->app->erp->GetArtikelStandardbild($artikel,true); + + if ($standardbild > 0) + $this->app->Tpl->Set('STANDARDBILD', "{|Bild|}:"); + + if(trim($einheit) != ''){ + $name_de .= " (Einheit: ".$einheit.")"; + } + + $this->app->Tpl->Set('NAMEDE',$name_de); + if($lagermeist!="" || $lagermeist!=0){ + $this->app->Tpl->Set('LAGERMEIST',"$lagermeist ({|aktuell am meisten im Lager|})"); + if($lagerbezeichnung!='' && $lagerbezeichnung!=='Regal frei wählen') + $this->app->Tpl->Add('LAGERMEIST',"
    $lagerbezeichnung ({|Standardlager|})"); + } else { + $this->app->Tpl->Set('LAGERBEZEICHNUNG',"$lagerbezeichnung"); + + } + + $this->app->Tpl->Set('REGALVALUE',$frmRegal); + + $this->app->Tpl->Parse('ZWISCHENLAGERINFO', 'lager_regal.tpl'); + } else { + + //falsche artikelnummer + $nummer = ''; + $this->app->Tpl->Set('MSGARTIKEL', '
    {|Jetzt Artikel abscannen!|}'); + $this->app->Tpl->Set('ARTIKELSTYLE', 'style="border: 2px solid red"'); + $this->app->Tpl->Set('ZWISCHENLAGERINFO', ''); + $this->app->Tpl->Set('SHOWCHRSTART',''); + + $this->app->Tpl->Set('SHOWMHDSTART',''); + $this->app->Tpl->Set('SHOWSRNSTART',''); + } + } else { + $this->app->Tpl->Set('ZWISCHENLAGERINFO', ''); + if($artikel <=0) + { + $this->app->Tpl->Set('SHOWCHRSTART',''); + $this->app->Tpl->Set('SHOWMHDSTART',''); + $this->app->Tpl->Set('SHOWSRNSTART',''); + } + } + } + $this->app->Tpl->Set('NAME', $name_de); + if (!isset($_SESSION['woher']) || $_SESSION['woher'] == '') { + $_SESSION['woher'] = 'Manuelle Lageranpassung'; + } + if ($_SESSION['woher'] === "Zwischenlager") { + $this->app->Tpl->Set('ZWISCHENLAGER', "selected"); + } + if ($_SESSION['woher'] === "Produktion") { + $this->app->Tpl->Set('PRODUKTION', "selected"); + } + if ($_SESSION['woher'] === "Manuelle Lageranpassung") { + $this->app->Tpl->Set('DIFFERENZ', "selected"); + } + if ($_SESSION['woher'] === "Umlagern") { + $this->app->Tpl->Set('UMLAGERN', "selected"); + } + $projekt = $_SESSION['projekt']; + + if($cmd==='umlagern' && $this->app->Secure->GetPOST('menge')=='') + $menge = (float)str_replace(',','.',$this->app->Secure->GetGET('menge')); + + if($cmd==='umlagern' && $this->app->Secure->GetPOST('grund')=='') + $grundreferenz = $this->app->erp->base64_url_decode($this->app->Secure->GetGET('grund')); + + if(empty($grundreferenz) && !empty($comment)) + { + $grundreferenz = $comment; + } + + // aus zwischenlager + $menge_get = str_replace(',','.',$this->app->Secure->GetGET('menge')); + if($menge_get > 0) { + $menge = $menge_get; + } + + + $this->app->Tpl->Set('MENGE', $this->app->erp->ReplaceMenge(0,(String)$menge,0)); + $this->app->Tpl->Set('GRUNDREFERENZ', $grundreferenz); + $this->app->Tpl->Set('NUMMER', $nummer); + + $this->app->Tpl->Set('VPE', $vpe); + $pr_name = $this->app->DB->Select("SELECT CONCAT(abkuerzung) FROM projekt WHERE id='$projekt' LIMIT 1"); + $this->app->Tpl->Set('PROJEKT', $pr_name);//$this->app->erp->GetProjektSelect($projekt, &$color_selected)); + //$this->app->Tpl->Set(TABTEXT, "Einlagern"); + + $this->app->Tpl->Parse('TAB1', "einlagern.tpl"); + $this->app->Tpl->Parse('PAGE', 'tabview.tpl'); + } + + function LagerBuchenAuslagern() { + $this->LagerBuchenMenu(); + $cmd = $this->app->Secure->GetGET('cmd'); + $action = $this->app->Secure->GetGET('action'); + $error = 0; + + $this->app->Tpl->Set('CMD',$cmd); + $this->app->Tpl->Set('ACTION',$action); + + + if($this->app->erp->Version()==='stock') + { + $this->app->Tpl->Set('STARTDISABLESTOCK', ''); + } + + + session_start(); + if($cmd==='umlagern') { + //$this->app->Tpl->Set(TABTEXT, "Auslagern"); + + $this->app->Tpl->Set('STARTNICHTUMLAGERN', ''); + + } + else { + //$this->app->Tpl->Set(TABTEXT, "Auslagern"); + $this->app->Tpl->Set('STARTUMLAGERN', ''); + } + + $this->app->Tpl->Set('FOCUSFIELD','document.getElementById("nummer").focus();'); + $this->app->erp->Headlines('Lager', 'Auslagern'); + // checken ob die daten passen + $nummer = $this->app->Secure->GetPOST('nummer'); + $grund = $this->app->Secure->GetPOST('grund'); + $grundreferenz = $this->app->Secure->GetPOST('grundreferenz'); + $adresse = $this->app->Secure->GetPOST('adresse'); + $projekt = $this->app->Secure->GetPOST('projekt'); + $menge = str_replace(',','.',$this->app->Secure->GetPOST('menge')); + $submit = $this->app->Secure->GetPOST('submit'); + $artikelid = $this->app->Secure->GetGET('artikelid'); + $regal = $this->app->Secure->GetPOST('regal'); + $regalneu = $this->app->Secure->GetPOST("regalneu"); + $comment = $this->app->Secure->GetGET('comment'); + $amount = $this->app->Secure->GetGET('amount'); + if(empty($amount)) { + $amount = $this->app->Secure->GetGET('menge'); + } + if(empty($grundreferenz)) { + $grundreferenz = $comment; + } + $frmRegal = $regal; + $allowSubmit = true; + $submitStorageLocationId = $this->app->Secure->GetGET('submitstoragelocationid'); + $interimonconsumption = $this->app->Secure->GetGET('interimonconsumption'); + $storageLocationId = $this->app->Secure->GetGET('storagelocationid'); + $regal_id = 0; + if((!empty($submitStorageLocationId) || !empty($storageLocationId)) && empty($submit) && empty($regal)) { + $submit = !empty($submitStorageLocationId)?'1':''; + if(!$submit && empty($this->app->Secure->POST)) { + $allowSubmit = false; + } + $regal_id = !empty($submitStorageLocationId)?$submitStorageLocationId:$storageLocationId; + $regal = $this->app->DB->Select( + sprintf( + 'SELECT kurzbezeichnung FROM lager_platz WHERE id = %d LIMIT 1', + $regal_id + ) + ); + $frmRegal = $regal; + } + + $frmMenge = $menge; + if ($menge == '' || $menge == '0') { + $menge = 1; + } + //session_close(); + + + if($projekt!=''){ + $_SESSION['projekt'] = $projekt; + } + + $projekt= $_SESSION['projekt']; + + // $nummer = explode(' ', $nummer); + // $nummer = $nummer[0]; + + if ($this->app->Secure->GetPOST('nummer') != '' || $artikelid > 0) { + $nummer = $this->app->Secure->GetPOST('nummer'); + //$nummer = explode(' ', $nummer); + //$nummer = $nummer[0]; + + if($artikelid > 0){ + $nummer = $this->app->DB->Select("SELECT nummer FROM artikel WHERE id='$artikelid' AND lagerartikel=1 LIMIT 1"); + $checkartikel = $this->app->DB->Select("SELECT id FROM artikel WHERE id='$artikelid' AND lagerartikel=1 LIMIT 1"); + $artikel = $artikelid; + if($allowSubmit) { + $submit='1'; + } + $this->app->Tpl->Set('NUMMER', $nummer); + } + } + + $projekt = explode(' ', $projekt); + $projekt = $projekt[0]; + + if(empty($regal_id)){ + $regal_id = $this->app->DB->Select("SELECT id FROM lager_platz WHERE kurzbezeichnung='$regal' AND kurzbezeichnung!='' LIMIT 1"); + } + if(is_numeric($regal_id)) + $regal = $regal_id; + + $regalneu_id = $this->app->DB->Select("SELECT id FROM lager_platz WHERE kurzbezeichnung='$regalneu' AND kurzbezeichnung!='' LIMIT 1"); + if(is_numeric($regalneu_id)) + $regalneu = $regalneu_id; + + if ($submit != '') { + //projekt pruefen + + $checkprojekt = $this->app->DB->Select("SELECT abkuerzung FROM projekt WHERE abkuerzung='$projekt' LIMIT 1"); + $projektid = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung='$projekt' LIMIT 1"); + if ($projekt == "" || $checkprojekt != $projekt) { + //$error++; + //$this->app->Tpl->Set(MSGPROJEKT,"Projekt gibt es nicht!"); + $projektid = $this->app->DB->Select("SELECT standardprojekt FROM firma WHERE id='" . $this->app->User->GetFirma() . "' LIMIT 1"); + } + + //adresse pruefen + $adressearray = explode(' ', $adresse); + $checkadresse = $this->app->DB->Select("SELECT id FROM adresse WHERE id='{$adressearray[0]}' LIMIT 1"); + $checkname = $this->app->DB->Select("SELECT name FROM adresse WHERE id='{$adressearray[0]}' LIMIT 1"); + + /* + if (!is_numeric($adressearray[0]) || $adressearray[0] != $checkadresse) { + $error++; + $this->app->Tpl->Set('MESSAGE', "
    Bitte eine gültige Adresse angeben!
    "); + } + */ + + if (!is_numeric($menge) || $menge == 0) { + $error++; + $this->app->Tpl->Set('MSGMENGE', "Wert ist keine Zahl oder Null."); + } + $ean = $this->app->DB->Select("SELECT id FROM artikel WHERE ean='$nummer' AND ean!='' AND geloescht!=1 AND lagerartikel=1 LIMIT 1"); + $artikel_tmp = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer='$nummer' AND geloescht!=1 AND lagerartikel=1 LIMIT 1"); + if($artikel_tmp <=0 && $ean > 0) + { + $artikel_tmp = $ean; + $nummer = $this->app->DB->Select("SELECT nummer FROM artikel WHERE id='$ean' LIMIT 1"); + } + + $checkartikel = $this->app->DB->Select("SELECT nummer FROM artikel WHERE nummer='{$nummer}' AND geloescht!=1 AND lagerartikel=1 LIMIT 1"); + $artikel = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer='{$nummer}' AND geloescht!=1 AND lagerartikel=1 LIMIT 1"); + + $name_de = $this->app->DB->Select("SELECT name_de FROM artikel WHERE nummer='{$nummer}' AND geloescht!=1 AND lagerartikel=1 LIMIT 1"); + $einheit = $this->app->DB->Select("SELECT einheit FROM artikel WHERE nummer='{$nummer}' AND geloescht!=1 AND lagerartikel=1 LIMIT 1"); + $seriennummer = $this->app->DB->Select("SELECT seriennummer FROM artikel WHERE nummer='{$nummer}' AND geloescht!=1 AND lagerartikel=1 LIMIT 1"); + if($seriennummer === 'keine') { + $seriennummer = ''; + } + + if ($nummer != $checkartikel && ($nummer!=''||$nummer!=0)) { + $error++; + $this->app->Tpl->Set('MESSAGE', "
    {|Diese Artikelnummer gibt es nicht, oder der Artikel ist kein Lagerartikel!|}
    "); + $nummer = ''; + + } + //z.B. es liegen 1 1 5 und man will 6 haben + $checkregal = $this->app->DB->Select("SELECT id FROM lager_platz WHERE id='$regal' LIMIT 1"); + $checkregalneu = $this->app->DB->Select("SELECT id FROM lager_platz WHERE id='$regalneu' LIMIT 1"); + if (($regal != '' && $checkregal == $regal) && $error == 0) { + //regal gibt schon mal liegt jetzt der artikel noch in diesem regal? + $summe = $this->app->DB->Select("SELECT SUM(menge) FROM lager_platz_inhalt WHERE lager_platz='$regal' AND artikel='$artikel'"); + if ($summe <= 0) { + $this->app->Tpl->Set('MESSAGELAGER', "
    {|Artikel gibt es in diesem Regal nicht!|}
    "); + } else if ($summe < $menge) { + $this->app->Tpl->Set('MESSAGELAGER', "
    {|Zu wenig Artikel im Regal! Bitte kleinere Menge wählen!|} ({|Summe|}: $summe)
    "); + } else { + // zeige alle in dem Lager an sortiert nach MHD + $tmpsrn = false; + $anzmhd = 0; + $anzchargen = 0; + $anzsrn = 0; + $tmpmhd = $this->app->DB->SelectArr("SELECT *, replace(trim(menge)+0,'.',',') as mhdmenge FROM lager_mindesthaltbarkeitsdatum WHERE + lager_platz='$regal' AND artikel='$artikel' ORDER by mhddatum, id"); + $tmpcharge = $this->app->DB->SelectArr("SELECT *, replace(trim(menge)+0,'.',',') as cmenge FROM lager_charge WHERE + lager_platz='$regal' AND artikel='$artikel' ORDER by charge, id"); + if($tmpmhd) { + foreach($tmpmhd as $v) { + $anzmhd += $v['menge']; + } + } + if($tmpcharge) { + foreach($tmpcharge as $v) { + $anzchargen += $v['menge']; + } + } + + $this->app->Tpl->Set('ANZSRN', $anzsrn); + $this->app->Tpl->Set('ANZMHD', $anzmhd); + $this->app->Tpl->Set('ANZCHARGEN', $anzchargen); + $this->app->Tpl->Set('SUMME', $summe); + if($anzsrn > 0) { + $this->app->Tpl->Add('SRNINFO',"{|MHD|}{|Seriennummer|}{|Charge|}"); + } else if ((!empty($tmpmhd)?count($tmpmhd):0) > 0) { + $this->app->Tpl->Add('SRNINFO',"{|Mindesthalt.|}{|Charge|}"); + } else if ((!empty($tmpcharge)?count($tmpcharge):0) > 0) { + $this->app->Tpl->Add('SRNINFO',"{|Charge|}"); + } + $artikelArr = $this->app->DB->SelectRow( + sprintf( + 'SELECT seriennummern,chargenverwaltung,mindesthaltbarkeitsdatum FROM artikel WHERE id = %d LIMIT 1', + (int)$artikel + ) + ); + $check_seriennummer = $artikelArr['seriennummern']; + if($check_seriennummer !== 'keine' && $check_seriennummer != '') { + $menge = (int)$menge; + } + $check_charge = $artikelArr['chargenverwaltung']; + $check_mhd = $artikelArr['mindesthaltbarkeitsdatum']; + $regaltreffer='1'; + + if($check_seriennummer==='vomprodukteinlagern') + { + $ctmpsrn= !empty($tmpsrn)?count($tmpsrn):0; + for($y=0;$y<$ctmpsrn;$y++) + { + $regaltreffer="1"; + if($y < $menge) { + $checked='checked'; + } else { + $checked=''; + } + + if($tmpsrn[$y]['mhddatum']=='') { + $tmpsrn[$y]['mhddatum'] = ' - '; + } else { + $tmpsrn[$y]['mhddatum'] = $this->app->String->Convert($tmpsrn[$y]['mhddatum'],'%1-%2-%3','%3.%2.%1'); + } + if($tmpsrn[$y]['seriennummer']=='') { + $tmpsrn[$y]['seriennummer'] = ' - '; + } + if($tmpsrn[$y]['charge']=='') { + $tmpsrn[$y]['charge'] = ' - '; + } + + $this->app->Tpl->Add('SRNINFO'," +  $out + ".$tmpsrn[$y]['mhddatum']." + ".$tmpsrn[$y]['seriennummer']." + ".$tmpsrn[$y]['charge'].""); + } + } else if ($check_mhd=="1") + { + + $this->app->Tpl->Add("JQUERYREADY","checklagermengen();"); + $kommamodus = false; + if($menge != round($menge) || $check_seriennummer == '' || $check_seriennummer === 'keine') { + $kommamodus = true; + } + $ctmpmhd = !empty($tmpmhd)?count($tmpmhd):0; + for($y=0;$y<$ctmpmhd;$y++) + { + if($tmpmhd[$y]['menge'] != 1) { + $kommamodus = true; + } + } + if($kommamodus) + { + $tmenge = 0; + for($y=0;$y<$ctmpmhd;$y++) + { + if($tmpmhd[$y]['mhddatum']=='') { + $tmpmhd[$y]['mhddatum'] = ' - '; + } else { + $tmpmhd[$y]['mhddatum'] = $this->app->String->Convert($tmpmhd[$y]['mhddatum'],'%1-%2-%3','%3.%2.%1'); + } + if($tmpmhd[$y]['charge']=='') { + $tmpmhd[$y]['charge'] = ' - '; + } + + if($menge - $tmenge <= 0){ + $tm = 0; + }elseif($menge - $tmenge >= $tmpmhd[$y]['menge']) + { + $tm = $tmpmhd[$y]['menge']; + }elseif($menge - $tmenge < $tmpmhd[$y]['menge']){ + $tm = $menge - $tmenge; + } + $tmenge += $menge; + $this->app->Tpl->Add('SRNINFO'," + / ".$tmpmhd[$y]['mhdmenge']." $out + ".$tmpmhd[$y]['mhddatum']." + ".$tmpmhd[$y]['charge'].""); + if($y == 0)$this->app->Tpl->Set('ONCHANGEMENGE',' onchange="checklagermengen();" '); + } + }else{ + for($y=0;$y<$ctmpmhd;$y++) + { + $regaltreffer="1"; + if($y < $menge) $checked="checked"; else $checked=""; + + if($tmpmhd[$y]['mhddatum']=="") $tmpmhd[$y]['mhddatum'] = " - "; else $tmpmhd[$y]['mhddatum'] = $this->app->String->Convert($tmpmhd[$y]['mhddatum'],'%1-%2-%3','%3.%2.%1'); + if($tmpmhd[$y]['charge']=="") $tmpmhd[$y]['charge'] = " - "; + + $this->app->Tpl->Add('SRNINFO'," +  $out + ".$tmpmhd[$y]['mhddatum']." + ".$tmpmhd[$y]['charge'].""); + } + } + + } else if ($check_charge=="2" || $check_charge == "1") + { + $this->app->Tpl->Add("JQUERYREADY","checklagermengen();"); + + $kommamodus = false; + if($menge != round($menge) || $check_seriennummer == '' || $check_seriennummer === 'keine')$kommamodus = true; + $ctmpcharge = !empty($tmpcharge)?count($tmpcharge):0; + for($y=0;$y<$ctmpcharge;$y++) + { + if($tmpcharge[$y]['menge'] != 1)$kommamodus = true; + } + if($kommamodus) + { + $tmenge = 0; + for($y=0;$y<$ctmpcharge;$y++) + { + $regaltreffer="1"; + if($menge - $tmenge <= 0){ + $tm = 0; + }elseif($menge - $tmenge >= $tmpmhd[$y]['menge']) + { + $tm = $tmpmhd[$y]['menge']; + }elseif($menge - $tmenge < $tmpmhd[$y]['menge']){ + $tm = $menge - $tmenge; + } + $tmenge += $menge; + //if($y < $menge) $checked="checked"; else $checked=""; + + if($tmpcharge[$y]['charge']=="") $tmpcharge[$y]['charge'] = " - "; + + $this->app->Tpl->Add('SRNINFO'," + / ".$this->app->erp->ReplaceMenge(0,$tmpcharge[$y]['cmenge'],0)." $out + ".$tmpcharge[$y]['charge'].""); + if($y == 0)$this->app->Tpl->Set('ONCHANGEMENGE',' onchange="checklagermengen();" '); + } + + }else{ + for($y=0;$y<$ctmpcharge;$y++) + { + $regaltreffer="1"; + $checked = ''; + if($y < $menge) { + $checked='checked'; + } + + if($tmpcharge[$y]['charge']=='') $tmpcharge[$y]['charge'] = ' - '; + + $this->app->Tpl->Add('SRNINFO'," +  $out + ".$tmpcharge[$y]['charge'].""); + } + } + } + + //$regaltreffer="1"; + + $this->app->Tpl->Add('ZWISCHENLAGERINFO',""); + + $allow = 0; + + if($check_seriennummer!=="keine" || $check_charge=="2" || $check_charge=="1" || $check_mhd=="1") + { + if($this->app->Secure->GetPOST("abschluss_auslagern")=="1") + $allow=1; + } else $allow=1; + + if($cmd==='umlagern' && $regal > 0 && $checkregalneu!=$regalneu) { + $allow=0; + } + if($cmd==='umlagern' && $regalneu =='' ) { + $allow=0; + } + $this->app->erp->RunHook('lager_buchenauslagern_display1', 4, $artikel, $cmd, $regal, $regalneu); + + if($allow){ + $lager_srn_id = $this->app->Secure->GetPOST("lager_srn_id"); + + $lager_mhd_id = $this->app->Secure->GetPOST('lager_mhd_id'); + $lager_mhd_menge = $this->app->Secure->GetPOST('lager_mhd_menge'); + $lager_mhd_auswahl = $this->app->Secure->GetPOST('lager_mhd_auswahl'); + if($lager_mhd_menge) + { + $clager_mhd_id = !empty($lager_mhd_id)?count($lager_mhd_id):0; + for($q=0;$q<$clager_mhd_id;$q++){ + if($lager_mhd_auswahl[$q]) + { + $lager_mhd_auswahl[$q] = round((float)str_replace(',','.',$lager_mhd_auswahl[$q]),4); + $lager_mhd_menge[$q] = round((float)str_replace(',','.',$lager_mhd_menge[$q]),4); + if($lager_mhd_auswahl[$q] <= $lager_mhd_menge[$q]) + { + $passendArr = $this->app->DB->SelectRow("SELECT * FROM lager_mindesthaltbarkeitsdatum WHERE id='".$lager_mhd_id[$q]."' LIMIT 1"); + $passende_charge = $passendArr['charge']; + $passende_mhd = $passendArr['mhddatum']; + $passende_lager_platz = $passendArr['lager_platz']; + $isInterim = $interimonconsumption && $this->app->DB->Select( + sprintf( + 'SELECT id FROM lager_platz WHERE id = %d AND verbrauchslager = 1', + (int)$passende_lager_platz + ) + ); + $passende_artikel = $passendArr['artikel']; + $chargenmenge = $lager_mhd_auswahl[$q]; + while($chargenmenge > 0) + { + $checkcharge = $this->app->DB->SelectRow( + "SELECT * + FROM `lager_charge` + WHERE `charge`='".$passende_charge."' + AND `lager_platz`='$passende_lager_platz' AND `artikel`='$passende_artikel' + LIMIT 1" + ); + if(!$checkcharge) { + break; + } + $checkmenge = $checkcharge['menge']; + if($checkmenge <= 0) { + $this->app->DB->Delete( + sprintf( + 'DELETE FROM `lager_charge` WHERE `menge` <= 0 AND `artikel` = %d AND `lager_platz` = %d', + $passende_artikel, $passende_lager_platz + ) + ); + } + if($checkmenge <= $chargenmenge) + { + $this->app->erp->ChargeAuslagernLog($passende_artikel, $passende_lager_platz, $passende_charge, $chargenmenge['menge'],$grundreferenz!=''?$grundreferenz:'Auslagern', '', 0, $chargenmenge['id'],0,$isInterim); + $chargenmenge -= $checkmenge; + }elseif($checkmenge > $chargenmenge) + { + $this->app->erp->ChargeAuslagernLog($passende_artikel, $passende_lager_platz, $passende_charge, $chargenmenge, $grundreferenz!=''?$grundreferenz:'Auslagern', '', 0, $chargenmenge['id'],0,$isInterim); + $chargenmenge = 0; + break; + } + } + if($lager_mhd_auswahl[$q] == $lager_mhd_menge[$q]) + { + $this->app->DB->Delete("DELETE FROM lager_mindesthaltbarkeitsdatum WHERE id = '".$lager_mhd_id[$q]."' LIMIT 1"); + }else{ + $this->app->DB->Update("UPDATE lager_mindesthaltbarkeitsdatum SET menge = menge - ".$lager_mhd_auswahl[$q]." WHERE id = '".$lager_mhd_id[$q]."' LIMIT 1"); + } + + $this->app->erp->MHDLog($passende_artikel, $passende_lager_platz, 0, $passende_mhd, $lager_mhd_auswahl[$q], $grundreferenz!=''?$grundreferenz:'manuell auslagern', '', 0, $passende_charge,0, $isInterim); + if($cmd==='umlagern') { + $_passende_mhd = $passende_mhd; + $_passende_charge = $passende_charge; + $_internebemerkung = ''; + $this->app->erp->RunHook('lager_buchenauslagern_mhdlagerbewegung',7, $passende_artikel,$lager_mhd_auswahl[$q],$regalneu,$passende_mhd,$passende_charge, $regal,$_internebemerkung); + $this->app->erp->AddMindesthaltbarkeitsdatumLagerOhneBewegung($passende_artikel,$lager_mhd_auswahl[$q],$regalneu,$passende_mhd,$passende_charge,"","",0,$_internebemerkung); + $passende_mhd = $_passende_mhd; + $passende_charge = $_passende_charge; + } + } + } + } + }else{ + $clager_mhd_id = !empty($lager_mhd_id)?count($lager_mhd_id):0; + for($q=0;$q<$clager_mhd_id;$q++){ + $passendArr = $this->app->DB->SelectRow("SELECT * FROM lager_mindesthaltbarkeitsdatum WHERE id='".$lager_mhd_id[$q]."' LIMIT 1"); + $passende_charge = $passendArr['charge']; + $passende_mhd = $passendArr['mhddatum']; + $passende_lager_platz = $passendArr['lager_platz']; + $isInterim = $interimonconsumption && $this->app->DB->Select( + sprintf( + 'SELECT id FROM lager_platz WHERE id = %d AND verbrauchslager = 1', + (int)$passende_lager_platz + ) + ); + $passende_artikel = $passendArr['artikel']; + $passende_menge = $passendArr['menge']; + $this->app->DB->Delete("DELETE FROM lager_mindesthaltbarkeitsdatum WHERE id='".$lager_mhd_id[$q]."' LIMIT 1"); + $this->app->DB->Delete("DELETE FROM lager_charge WHERE charge='".$passende_charge."' + AND lager_platz='$passende_lager_platz' AND artikel='$passende_artikel' LIMIT 1"); + $this->app->erp->MHDLog($passende_artikel, $passende_lager_platz, 0, $passende_mhd,$passende_menge, 'manuell auslagern', "", 0, $passende_charge,0, $isInterim); + // umlagern3 + if($cmd==='umlagern') + { + $_passende_mhd = $passende_mhd; + $_passende_charge = $passende_charge; + $_internebemerkung = ''; + $this->app->erp->RunHook('lager_buchenauslagern_mhdlagerbewegung',7, $passende_artikel,$passende_menge,$regalneu,$passende_mhd,$passende_charge, $regal, $_internebemerkung); + $this->app->erp->AddMindesthaltbarkeitsdatumLagerOhneBewegung($passende_artikel,$passende_menge<=0?1:$passende_menge,$regalneu,$passende_mhd,$passende_charge,"","",0,$_internebemerkung); + $passende_mhd = $_passende_mhd; + $passende_charge = $_passende_charge; + } + } + } + + $lager_charge_id = $this->app->Secure->GetPOST('lager_charge_id'); + $lager_charge_menge = $this->app->Secure->GetPOST('lager_charge_menge'); + $lager_charge_auswahl = $this->app->Secure->GetPOST('lager_charge_auswahl'); + if($lager_charge_menge) + { + $clager_charge_id = !empty($lager_charge_id)?count($lager_charge_id):0; + for($q=0;$q<$clager_charge_id;$q++){ + $passende_arr = $this->app->DB->SelectRow("SELECT * FROM lager_charge WHERE id='".$lager_charge_id[$q]."' LIMIT 1"); + if($passende_arr){ + $passende_artikel = $passende_arr['artikel'];//$this->app->DB->Select("SELECT artikel FROM lager_charge WHERE id='".$lager_charge_id[$q]."' LIMIT 1"); + $passende_datum = $passende_arr['datum'];//$this->app->DB->Select("SELECT datum FROM lager_charge WHERE id='".$lager_charge_id[$q]."' LIMIT 1"); + $passende_charge = $passende_arr['charge'];//$this->app->DB->Select("SELECT charge FROM lager_charge WHERE id='".$lager_charge_id[$q]."' LIMIT 1"); + $lager_charge_menge[$q] = $passende_arr['menge']; + if($lager_charge_auswahl[$q]) + { + $lager_charge_auswahl[$q] = round((float)str_replace(',','.',$lager_charge_auswahl[$q]),4); + //$lager_charge_menge[$q] = round((float)str_replace(',','.',$lager_charge_menge[$q]),4); + if($lager_charge_auswahl[$q] <= $lager_charge_menge[$q]) + { + $isInterim = $interimonconsumption && $this->app->DB->Select( + sprintf( + 'SELECT id FROM lager_platz WHERE id = %d AND verbrauchslager = 1', + (int)$passende_arr['lager_platz'] + ) + ); + if($lager_charge_auswahl[$q] == $lager_charge_menge[$q]) + { + $this->app->erp->ChargeAuslagernLog($passende_artikel, $passende_arr['lager_platz'], $passende_charge, $lager_charge_menge[$q], $grundreferenz!=''?$grundreferenz:'Auslagern', '', 0, $passende_arr['id'],0,$isInterim); + //$this->app->DB->Delete("DELETE FROM lager_charge WHERE id='".$lager_charge_id[$q]."' LIMIT 1"); + //umlagern3 + if($cmd==='umlagern') { + $this->app->erp->AddChargeLagerOhneBewegung($passende_artikel,$lager_charge_auswahl[$q],$regalneu,$passende_datum,$passende_charge); + } + }elseif($lager_charge_auswahl[$q] < $lager_charge_menge[$q]) + { + $this->app->erp->ChargeAuslagernLog($passende_artikel, $passende_arr['lager_platz'], $passende_charge, $lager_charge_auswahl[$q], $grundreferenz!=''?$grundreferenz:'Auslagern', '', 0, $passende_arr['id'],0,$isInterim); + //$this->app->DB->Update("UPDATE lager_charge set menge = menge - ".$lager_charge_auswahl[$q]." WHERE id='".$lager_charge_id[$q]."' LIMIT 1"); + if($cmd==='umlagern') { + $this->app->erp->AddChargeLagerOhneBewegung($passende_artikel,$lager_charge_auswahl[$q],$regalneu,$passende_datum,$passende_charge); + } + } + } + } + } + } + }else{ + $clager_charge_id = !empty($lager_charge_id)?count($lager_charge_id):0; + for($q=0;$q<$clager_charge_id;$q++){ + $passende_arr = $this->app->DB->SelectRow("SELECT * FROM lager_charge WHERE id='".$lager_charge_id[$q]."' LIMIT 1"); + if($passende_arr) + { + $passende_artikel = $passende_arr['artikel'];//$this->app->DB->Select("SELECT artikel FROM lager_charge WHERE id='".$lager_charge_id[$q]."' LIMIT 1"); + $passende_datum = $passende_arr['datum'];// $this->app->DB->Select("SELECT datum FROM lager_charge WHERE id='".$lager_charge_id[$q]."' LIMIT 1"); + $passende_charge = $passende_arr['charge'];//$this->app->DB->Select("SELECT charge FROM lager_charge WHERE id='".$lager_charge_id[$q]."' LIMIT 1"); + $passende_menge = $passende_arr['menge'];//$this->app->DB->Select("SELECT menge FROM lager_charge WHERE id='".$lager_charge_id[$q]."' LIMIT 1"); + //$this->app->DB->Delete("DELETE FROM lager_charge WHERE id='".$lager_charge_id[$q]."' LIMIT 1"); + $isInterim = $interimonconsumption && $this->app->DB->Select( + sprintf( + 'SELECT id FROM lager_platz WHERE id = %d AND verbrauchslager = 1', + (int)$passende_arr['lager_platz'] + ) + ); + $this->app->erp->ChargeAuslagernLog($passende_artikel, $passende_arr['lager_platz'], $passende_charge, $passende_menge, $grundreferenz!=''?$grundreferenz:'Auslagern', '', 0, $lager_charge_id[$q],0, $isInterim); + + //umlagern3 + if($cmd==='umlagern') + { + $this->app->erp->AddChargeLagerOhneBewegung($passende_artikel,$passende_menge<=0?1:$passende_menge,$regalneu,$passende_datum,$passende_charge); + } + } + } + } + + if($seriennummer!='') { + $tmp_sn = ' SN:'.$seriennummer; + } else { + $tmp_sn = ''; + } + + $bestand = $this->app->erp->ArtikelImLager($artikel); + + if($grundreferenz!=''){ + $grundtext = "$grund für $checkname: $grundreferenz $tmp_sn"; + } else { + $grundtext = "$grund $checkname $tmp_sn"; + } + + + // umlagern3 lager_bewegung buchen + + // wenn enticklung auf mitarbeiter buchen + if ($grund === 'Entwicklungsmuster') { + $this->app->DB->Insert("INSERT INTO projekt_inventar (id,artikel,menge,bestellung, projekt, + adresse, mitarbeiter, vpe,zeit) VALUES ('','$artikel','$menge','','$projekt','$adresse','" . $this->app->User->GetName() . "', 'einzeln',NOW())"); + } + //ziehe menge ab von lager_platz_inhalt + $tmpcheck = $this->app->DB->Select("SELECT id FROM lager_platz_inhalt WHERE lager_platz='$regal' AND artikel='$artikel' AND menge >='$menge' LIMIT 1"); + $mengeimregel = $this->app->erp->ArtikelImLagerPlatz($artikel,$regal); + // wenn es ein lager mit genug gibt nimm dieses + //if ($tmpcheck > 0) { + if($mengeimregel >= $menge) + { + $summezumcheckenneu = $mengeimregel - $menge; + $this->app->erp->LagerAuslagernRegal($artikel,$regal,$menge,$projektid,$grundtext); + }elseif($mengeimregel > 0) + { + $this->app->erp->LagerAuslagernRegal($artikel,$regal,$mengeimregel,$projektid,$grundtext); + $summezumcheckenneu = 0; + } + // umlagern3 in lager_platz_inhalt buchen + if($cmd==='umlagern') + { + $this->app->erp->LagerEinlagernDifferenz($artikel,$menge,$regalneu,$projektid,"Umlagern"); + //$this->app->erp->LogFile("ETIKETT2 A $artikel M $menge R $regalneu"); //BENE + //$data['lager_platz_name'] = $this->app->DB->Select("SELECT kurzbezeichnung FROM lager_platz WHERE id='$regalneu'"); + //$this->app->erp->EtikettenDrucker("artikel_klein",1,'artikel',$artikel,$data); + } + + $name = $this->app->DB->Select("SELECT CONCAT(nummer,' ',name_de) FROM artikel WHERE id='$artikel' LIMIT 1"); + if($cmd==='umlagern') + $gesamt = $this->app->DB->Select("SELECT replace(trim(SUM(menge))+0,'.',',') FROM lager_platz_inhalt WHERE artikel='$artikel' AND lager_platz='$regalneu'"); + else + $gesamt = $this->app->DB->Select("SELECT replace(trim(SUM(menge))+0,'.',',') FROM lager_platz_inhalt WHERE artikel='$artikel' AND lager_platz='$regal'"); + $gesamt_alle = $this->app->DB->Select("SELECT replace(trim(SUM(menge))+0,'.',',') FROM lager_platz_inhalt WHERE artikel='$artikel'"); + $msg = $this->app->erp->base64_url_encode("
    Der Artikel $name wurde $menge mal ausgelagert. Anzahl Regal: ".floatval($gesamt)." $einheit Anzahl Komplettbestand alle Regale: ".floatval($gesamt_alle)." $einheit
    "); + + if($artikelid > 0) + { + $this->app->Location->execute('index.php?module=artikel&action=lager&id='.$artikelid.'&msg='.$msg); + } + //$msg = $this->app->erp->base64_url_encode("
    Der Artikel $name wurde umgelagert. Der nächste Artikel kann jetzt umgelagert werden.
    "); + if($cmd==='umlagern'){ + $this->app->Location->execute('index.php?module=lager&action=buchenauslagern&cmd=umlagern&msg='.$msg); + } + $this->app->Location->execute('index.php?module=lager&action=buchenauslagern&msg='.$msg); + + } // ende allow + if ($regalneu != '' && $regal > 0 && $cmd==='umlagern') { + $msgregal = "Dieses Regal gibt es nicht!"; + $this->app->Tpl->Set('MESSAGELAGER', "
    $msgregal
    "); + $regalcheck = 0; + } + + // ende auslagern + } + } else { + //$error++; + if ($regal != '') { + $msgregal = "Dieses Regal gibt es nicht!"; + $this->app->Tpl->Set('MESSAGELAGER', "
    $msgregal
    "); + $regalcheck = 0; + } + } + if ($error == 0 && $regalcheck == 0) { + $standardbild = $this->app->DB->Select("SELECT standardbild FROM artikel WHERE id='$artikel' LIMIT 1"); + if ($standardbild == '') { + $standardbild = $this->app->DB->Select("SELECT datei FROM datei_stichwoerter WHERE subjekt='Shopbild' AND objekt='Artikel' AND parameter='$artikel' LIMIT 1"); + } + + if(trim($einheit) != ''){ + $name_de .= " (Einheit: ".$einheit.")"; + } + + $this->app->Tpl->Add('BEZEICHNUNG', "Aktueller Artikel:$name_de"); //BENE + if ($standardbild > 0) { + $this->app->Tpl->Add('BEZEICHNUNG', "Bild:"); + } + + $lagermeist = $this->app->DB->SelectArr("SELECT lager_platz, SUM(menge) FROM lager_platz_inhalt WHERE artikel='$artikel' GROUP BY lager_platz ORDER by 2 DESC LIMIT 1"); + $lagerbezeichnung = $this->app->DB->Select("SELECT kurzbezeichnung FROM lager_platz WHERE id='{$lagermeist[0]['lager_platz']}' LIMIT 1"); + + $standard_lagerplatz = $this->app->DB->Select("SELECT lager_platz FROM artikel WHERE id='$artikel' LIMIT 1"); + $standard_lagerbezeichnung = $this->app->DB->Select("SELECT kurzbezeichnung FROM lager_platz WHERE id='$standard_lagerplatz' LIMIT 1"); + + if($lagerbezeichnung!=$standard_lagerbezeichnung && $standard_lagerbezeichnung!="") + $standardlageranzeigen = "$standard_lagerbezeichnung (Standardlager)"; + + //echo "huhuh $cmd regal $regal regalvalue $regalvalue checkregal $checkregal regaltreffer $regaltreffer"; + if($regaltreffer=="1") { + $regalvalue=$this->app->DB->Select("SELECT kurzbezeichnung FROM lager_platz WHERE id='$regal' LIMIT 1"); + } else { + $regalvalue=''; + } + //if($regal !="" && $regalvalue=="") $regalvalue=$regal; + if($regalvalue!='' && $cmd==='umlagern' && $regal > 0 && $regal==$checkregal) + { + if($this->app->erp->Version()!=="stock") + { + $this->app->Tpl->Add('ZWISCHENLAGERINFO', "Regalvorschlag:"); + } + $this->app->Tpl->Set('FOCUSFIELD','document.getElementById("regal").focus();'); + $this->app->Tpl->Add('ZWISCHENLAGERINFO', "Zielregal:
    Jetzt Regal abscannen! + "); + } else { + if($this->app->erp->Version()==="stock") + { + if($this->app->Secure->GetPOST('regal')=="" && $this->app->Secure->GetGET("regal")=="") //TODO + $regalvalue = $lagerbezeichnung; //TODO + $this->app->Tpl->Add('ZWISCHENLAGERINFO', "Regalvorschlag: (Standardlager)
    $standardlageranzeigen"); + } + else { + + $this->app->Tpl->Add('ZWISCHENLAGERINFO', "Regalvorschlag: (aktuell am meisten im Lager)
    $standardlageranzeigen"); + } + + if($lagerbezeichnung!='' && empty($regalvaluestock) && $regal!='') { + $regalvaluestock=$lagerbezeichnung; + } + if($regal!='') { + $regalvaluestock=$regalvalue; + } + $this->app->Tpl->Add('ZWISCHENLAGERINFO', "Entnahmeregal:
    Jetzt Regal abscannen!"); + $this->app->Tpl->Set('FOCUSFIELD','document.getElementById("regal").focus();'); + } + // letzt einstellung von grad + $this->app->Tpl->Add('ZWISCHENLAGERINFO', ''); + } else if ($error == 0) { + echo "speichern adresse $checkadresse projekt $projekt menge $menge"; + } + } + if ($nummer == '') { + $this->app->Tpl->Set('ARTIKELSTYLE', "style=\"border: 2px solid red\""); + } + if(empty($frmMenge) && !empty($amount)) { + $menge = $amount; + } + $this->app->Tpl->Set('MENGE', $this->app->erp->ReplaceMenge(0,(String)$menge,0)); + $this->app->Tpl->Set('GRUNDREFERENZ', $grundreferenz); + + $art_name = $this->app->DB->Select("SELECT CONCAT(nummer) FROM artikel WHERE nummer='$nummer' AND geloescht!=1 AND lagerartikel=1 LIMIT 1"); + $this->app->Tpl->Set('NUMMER', $art_name); + + $pr_name = $this->app->DB->Select("SELECT CONCAT(abkuerzung) FROM projekt WHERE abkuerzung='$projekt' LIMIT 1"); + $this->app->Tpl->Set('ADRESSE', $adresse); + if ($_SESSION['grund'] === 'Interner Entwicklungsbedarf') $this->app->Tpl->Set('MUSTER', 'selected'); + if ($_SESSION['grund'] === 'RMA / Reparatur / Reklamation') $this->app->Tpl->Set('RMA', 'selected'); + if ($_SESSION['grund'] === 'Alte Bestellung') $this->app->Tpl->Set('ALTE', 'selected'); + if ($_SESSION['grund'] === 'Kundenauftrag / Produktion') $this->app->Tpl->Set('PRODUKTION', 'selected'); + if ($_SESSION['grund'] === 'Manuelle Lageranpassung') $this->app->Tpl->Set('DIFFERENZ', 'selected'); + if ($_SESSION['grund'] === 'Umlagern') $this->app->Tpl->Set('UMLAGERN', 'selected'); + //$this->app->YUI->AutoComplete(PROJEKTAUTO,"projekt",array('name','abkuerzung'),"abkuerzung"); + $this->app->YUI->AutoComplete('projekt', 'projektname', 1); + $this->app->YUI->AutoComplete('adresse', 'adresse'); + $this->app->YUI->AutoComplete('nummer','lagerartikelnummer',1); + $this->app->YUI->AutoComplete('regal','lagerplatz'); + $this->app->YUI->AutoComplete('grundreferenz','lagergrund'); + //$this->app->YUI->AutoComplete(ADRESSEAUTO,"adresse",array('id','name','kundennummer'),"CONCAT(id,' ',name)"); + $this->app->Tpl->Set('PROJEKT', $pr_name); + $this->app->Tpl->Parse('TAB1', 'auslagern.tpl'); + $this->app->Tpl->Parse('PAGE', 'tabview.tpl'); + } + + function LagerLetzteBewegungen() + { + $this->LagerBuchenMenu(); + + $this->app->YUI->TableSearch('TAB1', 'lagerletztebewegungen','show','','',basename(__FILE__), __CLASS__); + + $this->app->Tpl->Parse('PAGE', 'tabview.tpl'); + } + + + function LagerBuchenMenu() { + $id = $this->app->Secure->GetGET('id'); + $this->app->erp->Headlines('Lager'); + if($this->app->erp->Version()!=='stock') { + $this->app->erp->MenuEintrag("index.php?module=lager&action=buchenauslagern&cmd=umlagern&id=$id", 'Umlagern'); + $this->app->erp->MenuEintrag("index.php?module=lager&action=buchenauslagern&id=$id", 'Auslagern'); + $this->app->erp->MenuEintrag("index.php?module=lager&action=bucheneinlagern&id=$id", 'Einlagern'); + $this->app->erp->MenuEintrag("index.php?module=lager&action=buchenzwischenlager&id=$id", 'Zwischenlager'); + $this->app->erp->MenuEintrag('index.php?module=lager&action=buchen', 'Zurück zur Übersicht'); + $this->app->erp->MenuEintrag('index.php?module=lager&action=schnellauslagern', 'Schnell-Auslagern'); + } + + $this->app->erp->MenuEintrag('index.php?module=lager&action=schnellumlagern', 'Schnell-Umlagern'); + $this->app->erp->MenuEintrag('index.php?module=lager&action=letztebewegungen', 'Letzte Bewegungen'); + } + function LagerReservierungen() { + $this->app->erp->MenuEintrag('index.php?module=lager&action=reservierungen','Übersicht'); + $this->app->erp->Headlines('Lager', 'Reservierungen'); + $this->app->Tpl->Set('MESSAGE','
    Reservierungen Stand ' . date('d.m.Y').'
    '); + $this->app->YUI->TableSearch('TAB1', 'lager_reservierungen', 'show','','',basename(__FILE__), __CLASS__); + $this->app->Tpl->Set('AKTIV_TAB1', 'selected'); + $this->app->Tpl->Parse('PAGE', 'lager_reservierungen.tpl'); + } + + + public function LagerRegalEtiketten() { + $id = (int)$this->app->Secure->GetGET('id'); + $cmd = $this->app->Secure->GetGET('cmd'); + + if ($cmd==='all') { + $arr = $this->app->DB->SelectArr(sprintf('SELECT id,kurzbezeichnung FROM lager_platz WHERE lager=%d',$id)); + } + else{ + $arr = $this->app->DB->SelectArr(sprintf('SELECT id,kurzbezeichnung FROM lager_platz WHERE id=%d LIMIT 1',$id)); + } + if(!empty($arr)){ + foreach($arr as $row) { + $this->app->erp->EtikettenDrucker('lagerplatz_klein', 1, 'lager_platz', $row['id']); + } + } + $ref = $_SERVER['HTTP_REFERER']; + if(empty($ref)) { + if ($cmd==='all'){ + $ref = 'index.php?module=lager&action=list'; + } else { + $ref = 'index.php?module=lager&action=edit&id='.$id; + } + } + $this->app->Location->execute($ref); + } + + + + function LagerZweistufigEtikettDrucken($artikelId, $lagerplatzId, $menge){ + + if($artikelId <= 0 || $artikelId == ''){ + return; + } + + $etikettId = $this->app->User->GetParameter('lager_zweistufig_etiketten'); + $druckerId = $this->app->User->GetParameter('lager_zweistufig_etikettendrucker'); + + if($etikettId > 0 && $etikettId != '' && $druckerId > 0 && $druckerId != ''){ + $lagerplatz = ''; + if($lagerplatzId != '' && $lagerplatzId > 0){ + $lagerplatz = $this->app->DB->Select("SELECT kurzbezeichnung FROM lager_platz WHERE id = '$lagerplatzId' LIMIT 1"); + } + + $artikelDaten = $this->app->DB->SelectRow("SELECT name_de, nummer FROM artikel WHERE id = '$artikelId' LIMIT 1"); + + $variablen = null; + $variablen['name_de'] = $artikelDaten['name_de']; + $variablen['artikel_name_de'] = $artikelDaten['name_de']; + $variablen['nummer'] = $artikelDaten['nummer']; + $variablen['artikel_nummer_de'] = $artikelDaten['nummer']; + $variablen['menge'] = $menge; + $variablen['lagerplatz'] = $lagerplatz; + + $etikettProZeile = $this->app->User->GetParameter('lager_zweistufig_etiketten_eins_pro_zeile'); + if($etikettProZeile){ + $menge = 1; + } + + $this->app->erp->EtikettenDrucker($etikettId,$menge,'artikel',$artikelId,$variablen,'',$druckerId); + } + } + + function LagerAuslagernProduktionbasiert() + { + $this->app->Tpl->Set('TABTEXT',''); + $this->app->erp->MenuEintrag("index.php?module=lager&action=artikelfuerlieferungen&cmd=produktion","Übersicht"); + // offene auslagerungen + $result = $this->app->DB->SelectArr("SELECT r.parameter FROM lager_reserviert r LEFT JOIN produktion p ON p.id=r.parameter + WHERE r.objekt='produktion' AND (p.status='abgeschlossen' OR p.status='gestartet') GROUP BY r.parameter"); + + $gesamtanzahlartikel = 0; + + //TODO YUI Start + + $this->app->Tpl->Set('TAB1', " + "); + $cresult = !empty($result)?count($result):0; + for ($w = 0;$w < $cresult;$w++) { + $produktion = $result[$w]['parameter']; + + $bezeichnung = $this->app->erp->ProduktionName($produktion); + + $nummer = $this->app->DB->Select("SELECT belegnr FROM produktion WHERE id='$produktion' LIMIT 1"); + $this->app->Tpl->Add('TAB1', ""); + $artikellistesumm = $this->app->DB->SelectArr("SELECT DISTINCT artikel FROM lager_reserviert WHERE objekt='produktion' AND parameter='$produktion'"); + if ((!empty($artikellistesumm)?count($artikellistesumm):0) == 0) continue; + $artikelliste = $this->app->DB->SelectArr("SELECT DISTINCT artikel FROM lager_reserviert WHERE objekt='produktion' AND parameter='$produktion'"); + + $gesamtanzahlartikel = $gesamtanzahlartikel + (!empty($artikelliste)?count($artikelliste):0); + } + $this->app->Tpl->Add('TAB1', "
    ProduktionBezeichnungAuslagern
    Produktion $nummer$bezeichnung
    "); + + //TODO YUI Ende + + if ($gesamtanzahlartikel <= 0) { + $this->app->Tpl->Set('MESSAGE', "
    {|Aktuell gibt es keine Artikel für Produktionen, da keine Produktionen gestartet wurden.|}
    "); + $this->app->Tpl->Set('TAB1',''); + } + + } + + + function LagerAuslagernProjektbasiert() + { + $projekt = 1; + $projektearr = $this->app->DB->SelectArr("SELECT id FROM projekt WHERE geloescht!=1"); + $projektearr[] = 0; + $gesamtanzahlartikel = 0; + // start projekt schleife + $cprojektarr = !empty($projektearr)?count($projektearr):0; + for ($w = 0;$w < $cprojektarr;$w++) { + $this->app->Tpl->Set('INHALT', ''); + $projekt = $projektearr[$w]['id']; + $projektName = $this->app->DB->Select("SELECT abkuerzung FROM projekt WHERE id='$projekt' LIMIT 1"); + if ($projekt == 0 || $projekt == "") $projektName = "Ohne Projekt"; + $artikellistesumm = $this->app->DB->SelectArr("SELECT DISTINCT artikel FROM lager_reserviert WHERE objekt='lieferschein' AND projekt='$projekt' "); + + if ((!empty($artikellistesumm)?count($artikellistesumm):0) == 0) continue; + $this->app->Tpl->Add('INHALT', "

    $projektName Lieferungen Stand " . date('d.m.Y') . "

    "); + $artikelliste = $this->app->DB->SelectArr("SELECT DISTINCT artikel FROM lager_reserviert WHERE objekt='lieferschein' AND projekt='$projekt' "); + $orderarray = $this->LagerAuslagernArtikelliste($artikelliste,$projekt,true); + $gesamtanzahlartikel = (!empty($orderarray)?count($orderarray):0); + $this->LagerAuslagernArtikellisteRender($orderarray); + } // ende projekt schleife + if ($gesamtanzahlartikel <= 0) { + if($this->app->erp->RechteVorhanden('kommissionierlauf','list') && !$this->app->DB->Select("SELECT id FROM projekt WHERE ifnull(geloescht,0) = 0 AND kommissionierverfahren = 'zweistufig' LIMIT 1")) + { + $this->app->Location->execute('index.php?module=kommissionierlauf&action=list'); + } + $this->app->Tpl->Set('MESSAGE', "
    Aktuell gibt es keine Artikel für Lieferungen.
    "); + } + $this->app->erp->MenuEintrag('index.php?module=kommissionierlauf&action=list','Kommissionierläufe'); + $this->app->erp->MenuEintrag('index.php?module=lager&action=artikelfuerlieferungen','2-stufige Kommissionierung'); + } + + + + /** + * @param array $artikelliste + * @param string $projekt + */ + function LagerReihenfolgeArtikelliste($artikelliste,$projekt='') + { + $cartikelliste = !empty($artikelliste)?count($artikelliste):0; + for ($i = 0;$i < $cartikelliste;$i++) { + $artikel = $artikelliste[$i]['artikel']; + echo $artikel."
    "; + } + } + + function LagerAuslagernReihenfolge($artikelliste,$projekt="") + { + return $artikelliste; + // Reihenfolge abholen + $orderarray = $this->LagerAuslagernArtikelliste($artikelliste,$projekt,true); + $corderarray = !empty($orderarray)?count($orderarray):0; + for($i=0;$i<$corderarray;$i++) + { + $artikel = $orderarray[$i]["artikel"]; + $kurzbezeichnung = $orderarray[$i]["kurzbezeichnung"]; + $tmparray[$artikel]=$kurzbezeichnung; + } + echo "schritt 1
    "; + print_r($orderarray); + echo "
    "; + echo "schritt 2
    "; + print_r($tmparray); + echo "
    "; + echo "schritt 3
    "; + + // neu sortieren + asort($tmparray); + if((!empty($tmparray)?count($tmparray):0)>0) + { + foreach($tmparray as $key=>$value) + { + $newartikelliste[]=array("artikel"=>$key); + } + } + print_r($newartikelliste); + return $newartikelliste; + } + //function LagerAuslagernList($artikelliste,$projekt="",$getorder=false) + function LagerAuslagernArtikelliste($artikelliste,$projekt="",$getorder=false) + { + $cmd = $this->app->Secure->GetGET('cmd'); + + $tmpanzahl = 0;+ + $gesamtanzahlartikel = 0; + $cartikelliste = !empty($artikelliste)?count($artikelliste):0; + for ($i = 0;$i < $cartikelliste;$i++) { + $gesamtanzahlartikel++; + $artikel = $artikelliste[$i]['artikel']; + $nummer = $this->app->DB->Select("SELECT nummer FROM artikel WHERE id='$artikel' AND lagerartikel=1 LIMIT 1"); + $name_de = $this->app->DB->Select("SELECT name_de FROM artikel WHERE id='$artikel' AND lagerartikel=1 LIMIT 1"); + //wieviel stueck braucht man denn von dem artikel? + + if(is_numeric($projekt)) + $gesamtbedarf = $this->app->DB->Select("SELECT SUM(menge) FROM lager_reserviert WHERE objekt='lieferschein' AND projekt='$projekt' AND artikel='$artikel' "); + else + $gesamtbedarf = $this->app->DB->Select("SELECT SUM(menge) FROM lager_reserviert WHERE objekt='lieferschein' AND projekt='0' AND artikel='$artikel' "); + + //$artikel_in_regalen = $this->app->DB->SelectArr("SELECT * FROM lager_platz_inhalt WHERE artikel='$artikel' AND projekt='$projekt'"); + + // standardlager artikel + $standardlagerartikel = $this->app->DB->Select("SELECT lager_platz FROM artikel WHERE id='$artikel'"); + // Zeige nur Artikel an die im Lager sind! + + $tmp_check_standardlager = $this->app->DB->Select("SELECT SUM(lpi.menge) FROM lager_platz_inhalt lpi LEFT JOIN lager_platz l ON l.id=lpi.lager_platz WHERE + lpi.artikel='$artikel' AND lpi.lager_platz='$standardlagerartikel' AND l.autolagersperre!='1' AND l.sperrlager!='1'"); + + // erst standarlager ausraeumen bis zu wenig drin ist + // und dann die lager an denene am wenigsten ist + if($tmp_check_standardlager>=$gesamtbedarf) + $artikel_in_regalen = $this->app->DB->SelectArr("SELECT * FROM lager_platz_inhalt lpi LEFT JOIN lager_platz l ON l.id=lpi.lager_platz WHERE + lpi.artikel='$artikel' AND lager_platz='$standardlagerartikel' AND l.autolagersperre!='1' AND l.sperrlager!='1' ORDER by lpi.menge ASC"); + else + $artikel_in_regalen = $this->app->DB->SelectArr("SELECT * FROM lager_platz_inhalt lpi LEFT JOIN lager_platz l ON l.id=lpi.lager_platz WHERE + lpi.artikel='$artikel' AND l.autolagersperre!='1' AND l.sperrlager!='1' ORDER by lpi.menge ASC"); + + $cartikel_in_regalen = !empty($artikel_in_regalen)?count($artikel_in_regalen):0; + for ($j = 0;$j < $cartikel_in_regalen;$j++) { + $tmpanzahl++; + $menge_im_platz = $artikel_in_regalen[$j]['menge']; + $kurzbezeichnung = $this->app->DB->Select("SELECT kurzbezeichnung FROM lager_platz WHERE id='{$artikel_in_regalen[$j]['lager_platz']}' LIMIT 1"); + $lagerplatzid = $artikel_in_regalen[$j]['lager_platz']; + + if ($menge_im_platz <= $gesamtbedarf) { + $tmpmenge = $menge_im_platz; + } else { + $tmpmenge = $gesamtbedarf; + } + $rest = $menge_im_platz - $tmpmenge; //$this->app->DB->Select("SELECT SUM(menge) FROM lager_platz_inhalt WHERE artikel='$artikel' AND firma='".$this->app->User->GetFirma()."'") - $tmpmenge; + if ($rest == 0) { + $rest = '-'; + } + + $orderarray[]=array('tmpmenge'=>$tmpmenge,'artikel'=>$artikel,'nummer'=>$nummer,'lager_platz'=>$lagerplatzid,"kurzbezeichnung"=>$kurzbezeichnung,"link_lagerplatzid"=>$artikel_in_regalen[$j][id],"link_lager"=>$lagerplatzid,"projekt"=>$projekt,"cmd"=>$cmd,"abkuerzung"=>$this->app->DB->Select("SELECT abkuerzung FROM projekt WHERE id='$projekt' LIMIT 1"),'name_de'=>$name_de,"produktion"=>$produktion); + + $gesamtbedarf = $gesamtbedarf - $tmpmenge; + if ($gesamtbedarf == 0) break; + } + } + return $orderarray; + } + + /** + * @param array $orderarray + */ + function LagerAuslagernArtikellisteRender($orderarray) + { + $array = $orderarray; + $cols = array('kurzbezeichnung'=>SORT_ASC, 'nummer'=>SORT_ASC); + + $colarr = array(); + foreach ($cols as $col => $order) { + $colarr[$col] = array(); + foreach ($array as $k => $row) { + $colarr[$col]['_'.$k] = strtolower($row[$col]); + } + } + //$eval = 'array_multisort('; + //foreach ($cols as $col => $order) { + // $eval .= '$colarr[\''.$col.'\'],'.$order.','; + //} + //$eval = substr($eval,0,-1).');'; + + //eval($eval); + array_multisort($colarr['kurzbezeichnung'], SORT_ASC, $colarr['kurzbezeichnung'], SORT_ASC); + $ret = array(); + foreach ($colarr as $col => $arr) { + foreach ($arr as $k => $v) { + $k = substr($k,1); + if (!isset($ret[$k])) { + $ret[$k] = $array[$k]; + } + $ret[$k][$col] = $array[$k][$col]; + } + } + $orderarray = $ret; + + $htmltable = new HTMLTable(0, '100%', '', 3, 1); + if ($this->app->User->GetType() === 'admin') { + $htmltable->AddRowAsHeading(array('Menge', 'Nummer', 'Artikel', 'Projekt', 'Regal', 'Regal', 'Aktion')); + }//, 'Entfernen')); + else { + $htmltable->AddRowAsHeading(array('Menge', 'Nummer', 'Artikel', 'Projekt', 'Regal', 'Regal', 'Aktion')); + } + $htmltable->ChangingRowColors('#e0e0e0', '#fff'); + + $tmpanzahl=1; + foreach($orderarray as $row) { + if ($tmpanzahl == 1 && $this->erstes!=1) { + $this->erstes=1; + $erstes = 'erstes'; + } + else { + $erstes = ''; + } + + $tmpanzahl++; + + $htmltable->NewRow(); + + $htmltable->AddCol((float)$row['tmpmenge']); + $htmltable->AddCol($row['nummer']); + $htmltable->AddCol($row['name_de']); + $htmltable->AddCol($row['abkuerzung']); + $htmltable->AddCol($row['kurzbezeichnung']); + + $htmltable->AddCol("Regal: "); + + // if ($this->app->User->GetType() == "admin") $htmltable->AddCol(""); + + } + //bestimme regalplaetze fuer artikel + $this->app->Tpl->Add('INHALT', $htmltable->Get()); + // und enter abfangen!!! + $this->app->Tpl->Add('INHALT', ""); + //$table->DisplayNew('INHALT', ""); + $this->app->Tpl->Parse('TAB1', 'rahmen70_ohneform.tpl'); + + } + + function LagerZwischenlager() { + $this->app->Tpl->Add('TABS', '
  • Zwischenlager

  • '); + $id = $this->app->Secure->GetGET('id'); + $this->app->Tpl->Set('TABNAME', 'Inhalt'); + $this->app->Tpl->Set('SUBSUBHEADING', 'Zwischenlager Stand ' . date('d.m.Y')); + // easy table mit arbeitspaketen YUI als template + $table = new EasyTable($this->app); + $table->Query("SELECT a.name_de,z.menge,z.vpe,z.grund,z.richtung, p.abkuerzung, z.id FROM zwischenlager z LEFT JOIN artikel a ON a.id=z.artikel LEFT JOIN projekt p ON + p.id=z.projekt "); + $table->DisplayNew('INHALT', "Info"); + $this->app->Tpl->Parse('TAB1', 'rahmen70.tpl'); + $this->app->Tpl->Set('AKTIV_TAB1', 'selected'); + $this->app->Tpl->Parse('PAGE', 'tabeinzeln.tpl'); + } + /*function LagerBewegung() { + $this->LagerMenu(); + $id = $this->app->Secure->GetGET('id'); + $this->app->Tpl->Set('TABNAME', "Lager Bewegungen"); + $lager = $this->app->DB->Select("SELECT bezeichnung FROM lager WHERE id='$id' "); + $this->app->Tpl->Set('SUBSUBHEADING', "Bewegungen Lager: $lager bis zum " . date('d.m.Y')); + // easy table mit arbeitspaketen YUI als template + $table = new EasyTable($this->app); + $table->Query("SELECT p.kurzbezeichnung as Regal, + p.id FROM lager_platz p + WHERE lager='$id' ORDER by 1"); + $table->DisplayNew('INHALT', "Info"); + $this->app->Tpl->Parse('TAB1', "rahmen70.tpl"); + $this->app->Tpl->Set('AKTIV_TAB1', "selected"); + $this->app->Tpl->Parse('PAGE', "tabeinzeln.tpl"); + }*/ + function LagerBewegungPopup() { + $this->LagerMenu(); + + $this->app->Tpl->Parse('TAB1', 'rahmen70.tpl'); + $this->app->Tpl->Set('AKTIV_TAB1', 'selected'); + + $id = $this->app->Secure->GetGET('id'); + + $lager = $this->app->DB->Select("SELECT bezeichnung FROM lager WHERE id='$id' "); + + $this->app->erp->MenuEintrag('index.php?module=lager&action=list', 'Zurück zur Übersicht'); + + $id = $this->app->Secure->GetGET('id'); + + $this->app->Tpl->Set("MESSAGE", "
    Bewegungen Lager: $lager bis zum " . date('d.m.Y')."
    "); + + + $this->app->YUI->AutoComplete('lager_platz_bewegung', 'lagerplatz'); + $this->app->YUI->AutoComplete('artikel_bewegung', 'artikelnummer'); + $this->app->YUI->AutoSaveUserParameter('lager_platz_bewegung','lager_bewegung_lagerplatz','updateLiveTable();'); + $this->app->YUI->AutoSaveUserParameter('artikel_bewegung','lager_bewegung_artikel','updateLiveTable();'); + + + $this->app->YUI->TableSearch('TAB1','lager_bewegunglist', 'show','','',basename(__FILE__), __CLASS__); + $this->app->Tpl->Parse('PAGE', 'lager_bewegung_list.tpl'); + } + + + function LagerAlleBewegungen() + { + $this->LagerHauptmenu(); + $this->app->Tpl->Set('SUBSUBHEADING', 'Alle Lagerbewegungen bis zum '.date('d.m.Y')); + $this->app->erp->MenuEintrag('index.php?module=lager&action=list', 'Zurück zur Übersicht'); + + $this->app->YUI->AutoComplete('lager_bewegung_alle', 'lager'); + $this->app->YUI->AutoComplete('lager_platz_bewegung_alle', 'lagerplatz'); + $this->app->YUI->AutoComplete('artikel_bewegung_alle', 'artikelnummer'); + + $this->app->YUI->AutoSaveUserParameter('lager_bewegung_alle','lager_bewegungalle_lager','updateLiveTable();'); + $this->app->YUI->AutoSaveUserParameter('artikel_bewegung_alle','lager_bewegungalle_artikel','updateLiveTable();'); + $this->app->YUI->AutoSaveUserParameter('lager_platz_bewegung_alle','lager_bewegungalle_lagerplatz','updateLiveTable();'); + + $this->app->YUI->TableSearch('TAB1','lager_allebewegungenlist', 'show','','',basename(__FILE__), __CLASS__); + $this->app->Tpl->Parse('PAGE', "lager_allebewegungen_list.tpl"); + } + + + function LagerInhalt() { + + $this->LagerMenu(); + + $pdf = $this->app->Secure->GetPOST('pdf'); + $nachartikel = $this->app->Secure->GetPOST('nachartikel'); + + if($pdf != '' && $nachartikel == 1){ + $this->LagerPDFArtikel(); + }elseif($pdf != '' && $nachartikel == 0){ + $this->LagerPDF(); + } + + $lager = $this->app->Secure->GetGET('id'); + $this->app->YUI->AutoComplete('lager_platz_inhalt', 'lagerplatz',0,'&lager='.$lager); + $this->app->YUI->AutoComplete('artikel_inhalt', 'artikelnummer'); + + $this->app->YUI->AutoSaveUserParameter('artikel_inhalt','lager_inhalt_artikel','updateLiveTable();'); + $this->app->YUI->AutoSaveUserParameter('lager_platz_inhalt','lager_inhalt_lagerplatz','updateLiveTable();'); + + $this->app->YUI->TableSearch('TAB1','lager_inhaltlist', 'show','','',basename(__FILE__), __CLASS__); + $this->app->Tpl->Parse('PAGE', 'lager_inhaltneu.tpl'); + } + + function LagerPDFArtikel(){ + $lagerid = $this->app->Secure->GetGET('id'); + + $lagername = $this->app->DB->Select("SELECT bezeichnung FROM lager WHERE id = '$lagerid' LIMIT 1"); + + $lagerplatzuser = $this->app->User->GetParameter('lager_inhalt_lagerplatz'); + $lagerplatziduser = $this->app->DB->Select("SELECT id FROM lager_platz WHERE kurzbezeichnung = '$lagerplatzuser' AND kurzbezeichnung != '' LIMIT 1"); + + $artikeluser = $this->app->User->GetParameter('lager_inhalt_artikel'); + $artikeldaten = explode(' ', $artikeluser, 2); + $artikelnr = $artikeldaten[0]; + $artikelname = $artikeldaten[1]; + $artikeliduser = $this->app->DB->Select("SELECT id FROM artikel WHERE name_de = '$artikelname' AND name_de != '' AND nummer = '$artikelnr' AND nummer != '' LIMIT 1"); + + if($lagerplatziduser != ''){ + $lagerplatzwhere = " AND li.lager_platz = '$lagerplatziduser'"; + }else{ + $lagerplatzwhere = ''; + } + + if($artikeliduser != ''){ + $artikelwhere = "AND li.artikel = '$artikeliduser'"; + }else{ + $artikelwhere = ''; + } + + + $where = "l.lager = '$lagerid'".$lagerplatzwhere.$artikelwhere.' ORDER BY a.nummer'; + + //$artikel = $this->app->DB->SelectArr("SELECT DISTINCT a.id as id, a.name_de as name_de, a.nummer as nummer FROM lager_mindesthaltbarkeitsdatum lm LEFT JOIN lager_platz l ON l.id=lm.lager_platz LEFT JOIN artikel a ON lm.artikel=a.id WHERE $where"); + + $artikel = $this->app->DB->SelectArr("SELECT DISTINCT a.id as id, a.name_de as name_de, a.nummer as nummer FROM lager_platz_inhalt li LEFT JOIN lager_platz l ON l.id=li.lager_platz LEFT JOIN artikel a ON li.artikel = a.id WHERE $where"); + + + //Neue PDF Datei erstellen + $pdf=new SuperFPDF('P','mm','A4',$this->app); + $pdf->AddPage(); + + $pdf->SetFont('Arial', 'B', 15); + $pdf->Cell(100, 8, 'Lagerbestand '.'Lager: '.$lagername, 0, 0, 'L'); + $pdf->SetFont('Arial','',10); + $pdf->Cell(0, 8, date('d.m.Y'), 0, 1, 'R'); + $pdf->Cell(0, 8, 'Bearbeiter: '.$this->app->User->GetName(), 0, 1, 'R'); + $pdf->Ln(); + + foreach($artikel as $key=>$value){ + $pdf->SetFont('Arial','B',10); + $pdf->Cell(80, 8, $value['name_de'], 0, 0, 'L'); + $pdf->Cell(70, 8, ' Artikelnr: '.$value['nummer'], 0, 0, 'L'); + $pdf->Cell(0, 8, $pdf->Code128($pdf->GetX(), $pdf->GetY(), $this->app->erp->UmlauteEntfernen($value['nummer']), 30, 5), 0, 1, "L"); + $pdf->SetFont('Arial','',10); + + + $pdf->Line($pdf->GetX(), $pdf->GetY(), $pdf->GetX()+190, $pdf->GetY()); + + + $artikelid = $value['id']; + $artikelnr = $value['nummer']; + $artikelname = $value['name_de']; + + //$regale = $this->app->DB->SelectArr("SELECT DISTINCT l.id as id, l.kurzbezeichnung as kurzbezeichnung FROM lager_mindesthaltbarkeitsdatum lm LEFT JOIN lager_platz l ON l.id=lm.lager_platz LEFT JOIN artikel a ON lm.artikel=a.id WHERE l.lager = '$lagerid' AND lm.artikel = '".$value['id']."' $lagerplatzwhere ORDER BY l.id"); + + $regale = $this->app->DB->SelectArr("SELECT DISTINCT l.id as id, l.kurzbezeichnung as kurzbezeichnung FROM lager_platz l LEFT JOIN lager_platz_inhalt li ON l.id = li.lager_platz LEFT JOIN artikel a ON a.id = li.artikel WHERE l.lager = '$lagerid' AND li.artikel = '".$value['id']."' $lagerplatzwhere ORDER BY l.id"); + + + foreach($regale as $key2=>$value2){ + $pdf->Ln(4); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(40, 5, $value2['kurzbezeichnung'], 0, 0, 'L'); + + $gesamt = $this->app->DB->Select('SELECT '.$this->app->erp->FormatMenge('SUM(li.menge)')." as menge FROM lager_platz_inhalt li JOIN lager_platz l ON li.lager_platz = l.id WHERE li.artikel = '".$value['id']."' AND li.lager_platz = '".$value2['id']."'"); + + $pdf->Cell(0, 5, 'Gesamtbestand: '.$gesamt, 0, 1, 'L'); + + $pdf->SetFont('Arial','',10); + + $artikelvorhanden = $this->app->DB->Select("SELECT lm.id FROM lager_mindesthaltbarkeitsdatum lm LEFT JOIN lager_platz l ON l.id=lm.lager_platz LEFT JOIN artikel a ON lm.artikel = a.id WHERE l.lager = '$lagerid' AND lm.artikel = '".$value['id']."' AND lm.lager_platz = '".$value2['id']."' LIMIT 1"); + + + if($artikelvorhanden != ''){ + + $chargenmhd = $this->app->DB->SelectArr("SELECT ".$this->app->erp->FormatMenge('lm.menge')." as menge, lm.mhddatum as mhd, lm.charge as charge, lm.internebemerkung as internebemerkung, lm.artikel as artikel FROM lager_mindesthaltbarkeitsdatum lm LEFT JOIN lager_platz l ON l.id=lm.lager_platz LEFT JOIN artikel a ON lm.artikel=a.id WHERE l.lager = '$lagerid' AND lm.artikel = '".$value['id']."' AND lm.lager_platz = '".$value2['id']."'"); + + $gesamtchargen = $this->app->DB->Select("SELECT ".$this->app->erp->FormatMenge('SUM(lm.menge)')." as menge FROM lager_mindesthaltbarkeitsdatum lm LEFT JOIN lager_platz l ON l.id = lm.lager_platz LEFT JOIN artikel a ON lm.artikel = a.id WHERE l.lager = '$lagerid' AND lm.artikel = '".$value['id']."' AND lm.lager_platz = '".$value2['id']."'"); + + $pdf->Cell(40, 5, $pdf->Code128($pdf->GetX(), $pdf->GetY(), $this->app->erp->UmlauteEntfernen($value2['kurzbezeichnung']), 30, 5), 0, 0, "L"); + + $pdf->SetTableWidths(array(40,30,40)); + $pdf->SetFont('Arial','B',10); + $pdf->SetTableFonts(array(array('Arial','B',10),array('Arial','B',10),array('Arial','B',10))); + $pdf->TableRow(array('Menge', 'MHD', 'Charge')); + $pdf->SetFont('Arial','',10); + $pdf->SetTableFonts(array(array('Arial','',10),array('Arial','',10),array('Arial','',10))); + + foreach($chargenmhd as $key3=>$value3){ + $pdf->SetX($pdf->GetX()+40); + $pdf->TableRow(array($value3['menge'], date('d.m.Y', strtotime($value3['mhd'])), $value3['charge'])); + + } + + if($gesamt != $gesamtchargen){ + if($gesamtchargen < $gesamt){ + $zuwenig = $gesamt-$gesamtchargen; + $pdf->Cell(0, 5, "", 0, 1, "L"); + $pdf->SetX($pdf->GetX()+40); + $pdf->SetFont('Arial', 'B', 10); + $pdf->Cell(0, 5, 'Hinweis: Es sind '.$zuwenig.' Chargen-/MHD Einträge zu wenig vorhanden.', 0, 1, 'L'); + $pdf->SetFont('Arial','',10); + } + $zuviel = $gesamtchargen - $gesamt; + $pdf->Cell(0, 5, '', 0, 1, 'L'); + $pdf->SetX($pdf->GetX()+40); + $pdf->SetFont('Arial', 'B', 10); + $pdf->Cell(0, 5, 'Hinweis: Es sind '.$zuviel.' Chargen-/MHD Einträge zu viel vorhanden.', 0, 1, 'L'); + $pdf->SetFont('Arial','',10); + } + + + }else{ + $pdf->Cell(40, 5, $pdf->Code128($pdf->GetX(), $pdf->GetY(), $value2['kurzbezeichnung'], 30, 5), 0, 0, "L"); + $pdf->Ln(); + } + + $pdf->Ln(); + $pdf->Line($pdf->GetX(), $pdf->GetY(), $pdf->GetX()+190, $pdf->GetY()); + //$pdf->Ln(); + } + $pdf->Ln(); + $pdf->Ln(); + } + + $pdf->Output(date('Ymd').'_'.'Artikelbestandsliste_nach_Artikel.pdf','D'); + $this->app->ExitXentral(); + } + + function LagerPDF(){ + $lagerid = $this->app->Secure->GetGET('id'); + + $lagername = $this->app->DB->Select("SELECT bezeichnung FROM lager WHERE id = '$lagerid' LIMIT 1"); + + $lagerplatzuser = $this->app->User->GetParameter('lager_inhalt_lagerplatz'); + $lagerplatziduser = $this->app->DB->Select("SELECT id FROM lager_platz WHERE kurzbezeichnung = '$lagerplatzuser' AND kurzbezeichnung != '' LIMIT 1"); + + $artikeluser = $this->app->User->GetParameter('lager_inhalt_artikel'); + $artikeldaten = explode(" ", $artikeluser, 2); + $artikelnr = $artikeldaten[0]; + $artikelname = $artikeldaten[1]; + $artikeliduser = $this->app->DB->Select("SELECT id FROM artikel WHERE name_de = '$artikelname' AND name_de != '' AND nummer = '$artikelnr' AND nummer != '' LIMIT 1"); + + + if($lagerplatziduser != ''){ + $lagerplatzwhere = " AND li.lager_platz = '$lagerplatziduser'"; + }else{ + $lagerplatzwhere = ''; + } + + if($artikeliduser != ''){ + $artikelwhere = "AND li.artikel = '$artikeliduser'"; + }else{ + $artikelwhere = ''; + } + + $where = "l.lager = '$lagerid'".$lagerplatzwhere.$artikelwhere." ORDER BY a.nummer"; + + //$regale = $this->app->DB->SelectArr("SELECT DISTINCT l.id as id, l.kurzbezeichnung as kurzbezeichnung FROM lager_mindesthaltbarkeitsdatum lm LEFT JOIN lager_platz l ON l.id=lm.lager_platz LEFT JOIN artikel a ON lm.artikel=a.id WHERE l.lager = '$lagerid' $lagerplatzwhere ORDER BY l.id"); + + $regale = $this->app->DB->SelectArr("SELECT DISTINCT l.id as id, l.kurzbezeichnung as kurzbezeichnung FROM lager_platz l LEFT JOIN lager_platz_inhalt li ON l.id = li.lager_platz LEFT JOIN artikel a ON a.id = li.artikel WHERE l.lager = '$lagerid' $lagerplatzwhere $artikelwhere ORDER BY l.kurzbezeichnung"); + + //Neue PDF Datei erstellen + $pdf=new SuperFPDF('P','mm','A4',$this->app); + $pdf->AddPage(); + + $pdf->SetFont('Arial', 'B', 15); + $pdf->Cell(100, 8, 'Lagerbestand '.'Lager: '.$lagername, 0, 0, 'L'); + $pdf->SetFont('Arial','',10); + $pdf->Cell(0, 8, date('d.m.Y'), 0, 1, 'R'); + $pdf->Cell(0, 8, 'Bearbeiter: '.$this->app->User->GetName(), 0, 1, 'R'); + $pdf->Ln(); + + foreach($regale as $key=>$value){ + + $pdf->SetFont('Arial','B',15); + $pdf->Cell(80, 10, $value['kurzbezeichnung'], 0, 0, 'L'); + $pdf->SetFont('Arial','',10); + $pdf->Cell(0, 10, $pdf->Code128($pdf->GetX(), $pdf->GetY(), $this->app->erp->UmlauteEntfernen($value['kurzbezeichnung']), 50, 7), 0, 1, "L"); + + $pdf->SetFont('Arial','B',10); + $pdf->Cell(40, 5, 'Artikelnr', 0, 0, 'L'); + $pdf->Cell(80, 5, 'Artikel', 0, 1, 'L'); + $pdf->SetFont('Arial','',10); + + $pdf->Line($pdf->GetX(), $pdf->GetY(), $pdf->GetX()+190, $pdf->GetY()); + + //$artikel = $this->app->DB->SelectArr("SELECT DISTINCT a.id as id, a.name_de as name_de, a.nummer as nummer FROM lager_mindesthaltbarkeitsdatum lm LEFT JOIN lager_platz l ON l.id=lm.lager_platz LEFT JOIN artikel a ON lm.artikel=a.id WHERE lm.lager_platz = '".$value['id']."' $artikelwhere ORDER BY lm.artikel"); + + $artikel = $this->app->DB->SelectArr("SELECT DISTINCT a.id as id, a.name_de as name_de, a.nummer as nummer FROM lager_platz_inhalt li LEFT JOIN lager_platz l ON l.id=li.lager_platz LEFT JOIN artikel a ON li.artikel = a.id WHERE li.lager_platz = '".$value['id']."' $artikelwhere ORDER BY li.artikel"); + + foreach($artikel as $key2=>$value2){ + $pdf->Ln(4); + + $pdf->SetFont('Arial','B',10); + $pdf->Cell(40, 5, $value2['nummer'], 0, 0, 'L'); + $pdf->Cell(30, 5, $value2['name_de'], 0, 1, 'L'); + $pdf->SetFont('Arial','',10); + + $gesamt = $this->app->DB->Select("SELECT ".$this->app->erp->FormatMenge('SUM(li.menge)')." as menge FROM lager_platz_inhalt li JOIN lager_platz l ON li.lager_platz = l.id WHERE li.artikel = '".$value2['id']."' AND li.lager_platz = '".$value['id']."'"); + + $pdf->SetX($pdf->GetX()+40); + $pdf->SetFont('Arial','B',10); + $pdf->Cell(0, 8, 'Gesamtbestand: '.$gesamt, 0, 1, 'L'); + $pdf->SetFont('Arial','',10); + + $pdf->Cell(40, 5, $pdf->Code128($pdf->GetX(),$pdf->GetY(),$this->app->erp->UmlauteEntfernen($value2['nummer']),30,5), 0, 0, "L"); + + $artikelvorhanden = $this->app->DB->Select("SELECT lm.id FROM lager_mindesthaltbarkeitsdatum lm LEFT JOIN lager_platz l ON l.id=lm.lager_platz LEFT JOIN artikel a ON lm.artikel = a.id WHERE l.lager = '$lagerid' AND lm.artikel = '".$value2['id']."' AND lm.lager_platz = '".$value['id']."' LIMIT 1"); + + if($artikelvorhanden != ''){ + + $chargenmhd = $this->app->DB->SelectArr('SELECT '.$this->app->erp->FormatMenge('lm.menge')." as menge, lm.mhddatum as mhd, lm.charge as charge, lm.internebemerkung as internebemerkung, lm.artikel as artikel FROM lager_mindesthaltbarkeitsdatum lm LEFT JOIN lager_platz l ON l.id=lm.lager_platz LEFT JOIN artikel a ON lm.artikel=a.id WHERE l.lager = '$lagerid' AND lm.artikel = '".$value2['id']."' AND lm.lager_platz = '".$value['id']."'"); + + $gesamtchargen = $this->app->DB->Select('SELECT '.$this->app->erp->FormatMenge('SUM(lm.menge)')." as menge FROM lager_mindesthaltbarkeitsdatum lm LEFT JOIN lager_platz l ON l.id = lm.lager_platz LEFT JOIN artikel a ON lm.artikel = a.id WHERE l.lager = '$lagerid' AND lm.artikel = '".$value2['id']."' AND lm.lager_platz = '".$value['id']."'"); + + //$pdf->SetX($pdf->GetX()+40); + + $pdf->SetTableWidths(array(40,30,40)); + $pdf->SetFont('Arial','B',10); + $pdf->SetTableFonts(array(array('Arial','B',10),array('Arial','B',10),array('Arial','B',10))); + $pdf->TableRow(array('Menge', 'MHD', 'Charge')); + $pdf->SetFont('Arial','',10); + $pdf->SetTableFonts(array(array('Arial','',10),array('Arial','',10),array('Arial','',10))); + + foreach($chargenmhd as $key3=>$value3){ + $pdf->SetX($pdf->GetX()+40); + $pdf->TableRow(array($value3['menge'], date('d.m.Y', strtotime($value3['mhd'])), $value3['charge'])); + + } + + if($gesamt != $gesamtchargen){ + if($gesamtchargen < $gesamt){ + $zuwenig = $gesamt - $gesamtchargen; + $pdf->Cell(0, 5, '', 0, 1, 'L'); + $pdf->SetX($pdf->GetX()+40); + $pdf->SetFont('Arial', 'B', 10); + $pdf->Cell(0, 5, "Hinweis: Es sind ".$zuwenig." Chargen-/MHD Einträge zu wenig vorhanden.", 0, 1, "L"); + $pdf->SetFont('Arial','',10); + }else{ + $zuviel = $gesamtchargen - $gesamt; + $pdf->Cell(0, 5, '', 0, 1, 'L'); + $pdf->SetX($pdf->GetX()+40); + $pdf->SetFont('Arial', 'B', 10); + $pdf->Cell(0, 5, "Hinweis: Es sind ".$zuviel." Chargen-/MHD Einträge zu viel vorhanden.", 0, 1, "L"); + $pdf->SetFont('Arial','',10); + } + } + }else{ + $pdf->Ln(); + } + + $pdf->Ln(); + $pdf->Line($pdf->GetX(), $pdf->GetY(), $pdf->GetX()+190, $pdf->GetY()); + //$pdf->Ln(); + } + $pdf->Ln(); + $pdf->Ln(); + } + + $pdf->Output(date('Ymd').'_'.'Artikelbestandsliste.pdf','D'); + $this->app->ExitXentral(); + } + + public function LagerPlatz() { + $this->LagerMenu(); + $id = $this->app->Secure->GetGET('id'); + // neues arbeitspaket + + + $import = $this->app->Secure->GetPOST('import'); + $importcsv = $this->app->Secure->GetPOST('importcsv'); + if($import!='' || $importcsv!='') + { + if($import!='') + { + $lagerimport = $this->app->Secure->GetPOST('lagerimport'); + $lagerimport = str_replace(['\\r\\n','"', ' '],["\r\n",'',''],$lagerimport); + if (strpos($lagerimport, ',') !== false) { + $tmp = explode(',',$lagerimport); + } else { + $tmp = explode("\r\n",$lagerimport); + } + } else if ($importcsv!='') { + $lagerimport = file_get_contents($_FILES['csv']['tmp_name']); + $lagerimport = str_replace(['\\r\\n','"', ' ',','],["\r\n",'','',';'],$lagerimport); + + if (strpos($lagerimport, ';') !== false) { + $tmp2 = explode("\n",$lagerimport); + foreach($tmp2 as $key=>$row) + { + $rowtmp = explode(";",$row); + if(isset($rowtmp[0]) && $rowtmp[0]!="") + { + $tmp[] = $rowtmp[0]; + $tmpsort[] = $rowtmp[1]; + } + } + } + else { + $tmp = explode("\r\n",$lagerimport); + } + } + + $neue=0; + $neuesort=0; + $ctmp = !empty($tmp)?count($tmp):0; + for($i=0;$i<$ctmp;$i++) + { + $lagerabkuerzung = $tmp[$i]; + $lagersort = $tmpsort[$i]; + // new line + spaces entfernen + $lagerabkuerzung = trim(preg_replace('/\s+/', ' ', $lagerabkuerzung)); + $lagersort = trim(preg_replace('/\s+/', ' ', $lagersort)); + + if(empty($lagerabkuerzung)){ + continue; + } + + $check = $this->app->DB->Select("SELECT id FROM lager_platz WHERE kurzbezeichnung='$lagerabkuerzung' LIMIT 1"); + if($check <= 0) + { + // Anlegen + $check = $this->app->erp->CreateLagerplatz($id,$lagerabkuerzung); + + $neue++; + } + if($check > 0 && $lagersort!="") + { + $neuesort++; + $this->app->DB->Update("UPDATE lager_platz SET rownumber='".$lagersort."' WHERE id='".$check."' LIMIT 1"); + } + } + + + + $this->app->Tpl->Set('IMPORT',$lagerimport); + + if((!empty($tmp)?count($tmp):0) > 0) { + $sorttxt = ($neuesort > 0?" ($neuesort x Reihenfolge angepasst)":""); + if($neue == 1){ + $this->app->Tpl->Set('MESSAGE3', "
    $neue Regal wurde neu angelegt$sorttxt!
    "); + } + else if($neue > 1){ + $this->app->Tpl->Set('MESSAGE3', "
    $neue Lagerplätze wurden neu angelegt$sorttxt!
    "); + } + else{ + $this->app->Tpl->Set('MESSAGE3', "
    Keine neuen Lagerplätze angelegt! Alle bereits gefunden$sorttxt.
    "); + } + } + else{ + $this->app->Tpl->Set('MESSAGE3', "
    Es wurden keine Lagerplätze angegeben!
    "); + } + } + + $speichern = $this->app->Secure->GetPOST('speichern'); + + if($speichern!='') { + $kurzbezeichnung = $this->app->Secure->GetPOST('kurzbezeichnung'); + $autolagersperre=$this->app->Secure->GetPOST('autolagersperre'); + $verbrauchslager=$this->app->Secure->GetPOST('verbrauchslager'); + $breite=$this->app->Secure->GetPOST('breite'); + $laenge=$this->app->Secure->GetPOST('laenge'); + $hoehe=$this->app->Secure->GetPOST('hoehe'); + $sperrlager=$this->app->Secure->GetPOST('sperrlager'); + $poslager=$this->app->Secure->GetPOST('poslager'); + $abckategorie=$this->app->Secure->GetPOST('abckategorie'); + $regalart=$this->app->Secure->GetPOST('regalart'); + $rownumber=(int)$this->app->Secure->GetPOST('rownumber'); + $allowproduction=(int)$this->app->Secure->GetPOST('allowproduction'); + + $allowed = '/[^a-z0-9A-Z\-\_\.]/i'; + $kurzbezeichnung = preg_replace($allowed,'',$kurzbezeichnung); + $kurzbezeichnung = substr($kurzbezeichnung,0,15); + + $adresse=$this->app->Secure->GetPOST('adresse'); + $adresse = trim($adresse); + $rest = explode(' ',$adresse); + $rest = $rest[0]; + $adresseid = $this->app->DB->Select("SELECT id FROM adresse WHERE id='$rest' AND geloescht=0 LIMIT 1"); + + $check = $this->app->DB->Select("SELECT id FROM lager_platz WHERE kurzbezeichnung='$kurzbezeichnung' AND kurzbezeichnung!='' LIMIT 1"); + if($check<=0 && $kurzbezeichnung!='') { + $breite = str_replace(',','.',$breite); + $hoehe = str_replace(',','.',$hoehe); + $laenge = str_replace(',','.',$laenge); + + $this->app->DB->Insert( + sprintf( + "INSERT INTO lager_platz + (lager,kurzbezeichnung,autolagersperre,verbrauchslager,sperrlager, + breite,laenge,hoehe,poslager,adresse,abckategorie,regalart,rownumber,allowproduction) + VALUES + (%d,'%s',%d,%d,%d,%f,%f,%f,%d,%d,'%s','%s', %d, %d)", + $id, $kurzbezeichnung, $autolagersperre,$verbrauchslager,$sperrlager, + $breite, $laenge, $hoehe,$poslager,$adresseid, $abckategorie,$regalart, $rownumber,$allowproduction + ) + ); + + $msg = $this->app->erp->base64_url_encode("
    Das Regal wurde angelegt!
    "); + $this->app->Location->execute("index.php?module=lager&action=platz&id=$id&msg=$msg"); + } + if($kurzbezeichnung==''){ + $this->app->Tpl->Set('MESSAGE', "
    Das Regal wurde nicht angelegt! Bitte geben Sie einen Namen an!
    "); + } + else{ + $this->app->Tpl->Set('MESSAGE', "
    Das Regal wurde nicht angelegt! Der Name existiert bereits in diesem oder einem anderem Lager. + Bitte einen anderen wählen!
    "); + } + } + + $this->app->YUI->AutoComplete('adresse','adresse'); + + $this->app->Tpl->Set('KURZBEZEICHNUNG',$kurzbezeichnung); + $this->app->Tpl->Set('ADRESSE',$adresse); + if($autolagersperre=='1') { + $this->app->Tpl->Set('AUTOLAGERSPERRE','checked'); + } + if($poslager=='1') { + $this->app->Tpl->Set('POSLAGER','checked'); + } + if($verbrauchslager=='1') { + $this->app->Tpl->Set('VERBRAUCHSLAGER','checked'); + } + if($sperrlager=='1') { + $this->app->Tpl->Set('SPERRLAGER','checked'); + } + + if($allowproduction=='1') { + $this->app->Tpl->Set('ALLOWPRODUCTION','checked'); + } + + $this->app->Tpl->Set('ABCKATEGORIE',$this->app->erp->GetLagerABCKategorie($abckategorie)); + $this->app->Tpl->Set('REGALART',$this->app->erp->GetLagerRegalart($regalart)); + $this->app->YUI->HideFormular('sperrlager',['checked'=>'dummy','unchecked'=>'trsperrlager']); + $this->app->Tpl->Parse('TAB2', "lager_platz.tpl"); + + + $this->app->Tpl->Set('SUBSUBHEADING', 'Lagerplätze'); + + $this->app->YUI->TableSearch('TAB1', 'lagerplatztabelle', 'show','','',basename(__FILE__), __CLASS__); + + $this->app->Tpl->Parse('PAGE', 'lagerplatzuebersicht.tpl'); + } + + public function LagerPlatzEditPopup() { + $frame = $this->app->Secure->GetGET('frame'); + $id = $this->app->Secure->GetGET('id'); + // nach page inhalt des dialogs ausgeben + // $widget = new WidgetLager_platz($this->app,TAB1); + $sid = $this->app->DB->Select("SELECT lager FROM lager_platz WHERE id='$id' LIMIT 1"); + + $this->app->erp->MenuEintrag("index.php?module=lager&action=platz&id=$sid","zurück zur Übersicht"); + + $this->app->Tpl->Set('ABBRECHEN',""); + // $widget->form->SpecialActionAfterExecute("close_refresh", "index.php?module=lager&action=platz&id=$sid"); + // $widget->Edit(); + + $speichern = $this->app->Secure->GetPOST('speichern'); + + if($speichern!='') + { + $kurzbezeichnung = $this->app->Secure->GetPOST('kurzbezeichnung'); + $autolagersperre=$this->app->Secure->GetPOST('autolagersperre'); + $verbrauchslager=$this->app->Secure->GetPOST('verbrauchslager'); + $sperrlager=$this->app->Secure->GetPOST('sperrlager'); + $poslager=$this->app->Secure->GetPOST('poslager'); + $breite=$this->app->Secure->GetPOST('breite'); + $laenge=$this->app->Secure->GetPOST('laenge'); + $hoehe=$this->app->Secure->GetPOST('hoehe'); + $adresse=$this->app->Secure->GetPOST('adresse'); + $abckategorie=$this->app->Secure->GetPOST('abckategorie'); + $regalart=$this->app->Secure->GetPOST('regalart'); + $rownumber = $this->app->Secure->GetPOST('rownumber'); + $allowproduction = $this->app->Secure->GetPOST('allowproduction'); + + $allowed = '/[^a-z0-9A-Z\-\_\.]/i'; + $kurzbezeichnung = preg_replace($allowed,'',$kurzbezeichnung); + $kurzbezeichnung = substr($kurzbezeichnung,0,15); + + $adresse=$this->app->Secure->GetPOST('adresse'); + $adresse = trim($adresse); + $rest = explode(' ',$adresse); + $rest = $rest[0]; + $adresseid = $this->app->DB->Select("SELECT id FROM adresse WHERE id='$rest' AND geloescht=0 LIMIT 1"); + + + $check = $this->app->DB->Select("SELECT id FROM lager_platz WHERE kurzbezeichnung='$kurzbezeichnung' AND kurzbezeichnung!='' AND id!='$id' LIMIT 1"); + if($check<=0 && $kurzbezeichnung!='') + { + $breite = str_replace(',','.',$breite); + $hoehe = str_replace(',','.',$hoehe); + $laenge = str_replace(',','.',$laenge); + + $this->app->DB->Update( + sprintf( + "UPDATE lager_platz + SET kurzbezeichnung='%s',autolagersperre=%d,verbrauchslager=%d,sperrlager=%d,poslager=%d, adresse=%d, + breite=%f,laenge=%f,hoehe=%f,abckategorie='%s',regalart='%s', rownumber = %d, allowproduction = %d + WHERE id=%d + LIMIT 1", + $kurzbezeichnung,$autolagersperre, $verbrauchslager,$sperrlager,$poslager,$adresseid, + $breite,$laenge,$hoehe,$abckategorie,$regalart,$rownumber,$allowproduction, + $id + ) + ); + + $msg = $this->app->erp->base64_url_encode('
    Das Regal wurde geändert!
    '); + $this->app->Location->execute("index.php?module=lager&action=platz&id=$sid&msg=$msg"); + } + if($kurzbezeichnung==''){ + $this->app->Tpl->Set('MESSAGE', "
    Das Regal wurde nicht geändert! Bitte geben Sie einen Namen an!
    "); + } + else{ + $this->app->Tpl->Set('MESSAGE', "
    Das Regal wurde nicht geändert! Der Name existiert in diesem oder einen anderem Lager bereits. Bitte einen anderen wählen!
    "); + } + $this->app->Tpl->Set('ADRESSE',$adresse); + $this->app->Tpl->Set('KURZBEZEICHNUNG',$kurzbezeichnung); + if($autolagersperre=='1') { + $this->app->Tpl->Set('AUTOLAGERSPERRE','checked'); + } + if($verbrauchslager=='1') { + $this->app->Tpl->Set('VERBRAUCHSLAGER','checked'); + } + if($sperrlager=='1') { + $this->app->Tpl->Set('SPERRLAGER','checked'); + } + if($poslager=='1') { + $this->app->Tpl->Set('POSLAGER','checked'); + } + if($allowproduction=='1') { + $this->app->Tpl->Set('ALLOWPRODUCTION','checked'); + } + + $this->app->Tpl->Set('ABCKATEGORIE',$this->app->erp->GetLagerABCKategorie($abckategorie)); + $this->app->Tpl->Set('REGALART',$this->app->erp->GetLagerRegalart($regalart)); + + } else { + + $tmp = $this->app->DB->SelectRow( + sprintf( + 'SELECT * FROM lager_platz WHERE id=%d LIMIT 1', + $id + ) + ); + $kurzbezeichnung = $tmp['kurzbezeichnung']; + $autolagersperre = $tmp['autolagersperre']; + $verbrauchslager = $tmp['verbrauchslager']; + $adresse = $tmp['adresse']; + + $breite = $tmp['breite']; + $laenge = $tmp['laenge']; + $hoehe = $tmp['hoehe']; + $rownumber = $tmp['rownumber']; + + $sperrlager = $tmp['sperrlager']; + $poslager = $tmp['poslager']; + $abckategorie = $tmp['abckategorie']; + $regalart = $tmp['regalart']; + $allowproduction = $tmp['allowproduction']; + $this->app->Tpl->Set('KURZBEZEICHNUNG',$kurzbezeichnung); + $adresse = $this->app->DB->Select("SELECT CONCAT(id,' ',name) FROM adresse WHERE id='$adresse' LIMIT 1"); + $this->app->Tpl->Set('ADRESSE',$adresse); + + $this->app->Tpl->Set('LAENGE',$laenge); + $this->app->Tpl->Set('BREITE',$breite); + $this->app->Tpl->Set('HOEHE',$hoehe); + $this->app->Tpl->Set('ROWNUMBER',$rownumber); + + $this->app->Tpl->Set('ABCKATEGORIE',$this->app->erp->GetLagerABCKategorie($abckategorie)); + $this->app->Tpl->Set('REGALART',$this->app->erp->GetLagerRegalart($regalart)); + + if($autolagersperre=='1') { + $this->app->Tpl->Set('AUTOLAGERSPERRE','checked'); + } + if($verbrauchslager=='1') { + $this->app->Tpl->Set('VERBRAUCHSLAGER','checked'); + } + if($sperrlager=='1') { + $this->app->Tpl->Set('SPERRLAGER','checked'); + } + if($poslager=='1') { + $this->app->Tpl->Set('POSLAGER','checked'); + } + + if($allowproduction == '1') { + $this->app->Tpl->Set('ALLOWPRODUCTION','checked'); + } + } + + $this->app->erp->MenuEintrag('index.php?module=lager&action=platzeditpopup&id='.$id,'Details'); + $this->app->YUI->AutoComplete('adresse','adresse'); + $this->app->YUI->HideFormular('sperrlager',['checked'=>'dummy','unchecked'=>'trsperrlager']); + $this->app->Tpl->Parse('TAB1', 'lager_platz.tpl'); + + $this->app->Tpl->Set('TABNAME', 'Regal'); + $this->app->Tpl->Parse('PAGE', 'tabview.tpl'); + } + + public function LagerCreate() { + + $this->app->erp->Headlines('Lager', 'anlegen'); + $this->app->erp->MenuEintrag('index.php?module=lager&action=list', 'Zurück zur Übersicht'); + parent::LagerCreate(); + } + + public function LagerEtikettenlist() + { + $this->app->erp->Headlines('','Etiketten'); + + $this->app->YUI->AutoComplete('von','lagerplatz'); + $this->app->YUI->AutoComplete('bis','lagerplatz'); + + $etikettenauswahl = $this->app->Secure->GetPOST('etikettenauswahl'); + $etikettendrucker = $this->app->Secure->GetPOST('etikettendrucker'); + $von = $this->app->Secure->GetPOST('von'); + $bis = $this->app->Secure->GetPOST('bis'); + + $cmd = $this->app->Secure->GetGET('cmd'); + $data = $this->app->Secure->GetGET('data'); + + if($cmd==='holeanzahl'){ + if($von!='') + { + $error = ''; + $data = $this->app->erp->base64_url_encode(serialize(array('drucker'=>$etikettendrucker,'etiketten'=>$etikettenauswahl,'von'=>$von,'bis'=>$bis))); + $tmp = $this->app->DB->SelectArr("SELECT kurzbezeichnung FROM lager_platz WHERE kurzbezeichnung >='$von' AND kurzbezeichnung<='$bis'"); + + if((!empty($tmp)?count($tmp):0)>0){ + echo json_encode(array('status'=>1, 'anzahl' => (!empty($tmp)?count($tmp):0), 'daten'=>$data)); + $this->app->ExitXentral(); + } + + $error .= 'In diesem Bereich wurden keine Lagerplätze gefunden!'; + echo json_encode(array('status'=>0,'statusText'=>$error)); + $this->app->ExitXentral(); + } + $this->app->ExitXentral(); + } + if($cmd==='print') + { + $data = unserialize($this->app->erp->base64_url_decode($data)); + + $arr = $this->app->DB->SelectArr("SELECT kurzbezeichnung,id FROM lager_platz WHERE kurzbezeichnung >='".$data['von']."' AND kurzbezeichnung<='".$data['bis']."' ORDER by kurzbezeichnung"); + if($data['etiketten']>0){ + $label = $data['etiketten']; + } + else + { + $label = "lagerplatz_klein"; + } + $carr = !empty($arr)?count($arr):0; + for ($i = 0;$i < $carr;$i++) { + $this->app->erp->EtikettenDrucker($label,1,'lager_platz',$arr[$i]['id'],'','',$data['drucker']); + } + + $msg = $this->app->erp->base64_url_encode("
    Die Etiketten wurden gedruckt!
    "); + echo json_encode(array('status'=>1)); + $this->app->ExitXentral(); + } + $this->LagerHauptmenu(); + $etiketten = $this->app->erp->GetSelectEtiketten("lagerplatz_klein",$etikettenauswahl); + if($etiketten=="") $etiketten=""; + + $drucker = $this->app->erp->GetSelectEtikettenDrucker($etikettendrucker); + + $druckbutton = ""; + $this->app->Tpl->Set('FORMULAR',"
    + + + +
    {|Lagerplatz|} ({|von|}):
    {|Lagerplatz|} ({|bis|}): $druckbutton
    {|Etikett|}:
    {|Drucker|}:
    +


    "); + + $this->app->Tpl->Parse('PAGE', 'lager_etikettenlist.tpl'); + } + + public function LagerHauptmenu() { + if($this->app->Secure->GetGET('action')!=='list') { + $this->app->erp->MenuEintrag('index.php?module=lager&action=list','zurück zur Übersicht'); + } + + $this->app->erp->MenuEintrag('index.php?module=lager&action=list', 'Übersicht'); + $this->app->erp->MenuEintrag('index.php?module=lager&action=etikettenlist', 'Lageretiketten'); + $this->app->erp->MenuEintrag('index.php?module=lager&action=create', 'Neues Lager anlegen'); + $this->app->erp->MenuEintrag('index.php?module=lager&action=bestand', 'Lagerbestand'); + $this->app->erp->MenuEintrag('index.php?module=lager&action=wert', 'Lagerbestandsberechnung'); + $this->app->erp->MenuEintrag('index.php?module=lager&action=allebewegungen', 'Bewegungen'); + + if($this->app->erp->Version()!=='stock') + { + } + + if($this->app->erp->RechteVorhanden('lagerinventur','bestand')){ + $this->app->erp->MenuEintrag('index.php?module=lagerinventur&action=bestand', 'Inventur'); + } + + $this->app->erp->Headlines('Lagerverwaltung'); + $this->app->erp->RunMenuHook('lager_hauptmenu'); + } + + + function LagerDoppelteWarnung() + { + $check_double_lager = $this->app->DB->SelectArr("SELECT bezeichnung, COUNT(bezeichnung) AS NumOccurrences FROM lager WHERE geloescht!=1 GROUP BY bezeichnung HAVING ( COUNT(bezeichnung) > 1 )"); + $ccheck_double_lager = !empty($check_double_lager)?count($check_double_lager):0; + if($ccheck_double_lager>0) { + $bezeichnung = ''; + for($icheck=0;$icheck<$ccheck_double_lager;$icheck++) { + $bezeichnung .= ' ' . $check_double_lager[$icheck]['bezeichnung']; + } + /*if(trim($bezeichnung)=='') { + $belege='ohne Bezeichnung'; + }*/ + + //$gesamt_lager= $ccheck_double_lager; + $this->app->Tpl->Set('MESSAGE','
    Achtung! Doppelte Bezeichnungen: '.$bezeichnung.'
    '); + //$this->app->erp->InternesEvent($this->app->User->GetID(),'Achtung! Doppelte Bezeichnungen: '.$bezeichnung,"warning",0); + } + } + + public function LagerList() { + $this->LagerHauptmenu(); + $this->LagerDoppelteWarnung(); + + $this->app->YUI->TableSearch('TAB1', 'lagertabelle', 'show','','',basename(__FILE__), __CLASS__); + $this->app->Tpl->Parse('PAGE', "lageruebersicht.tpl"); + } + + + public function LagerMenu() { + $id = $this->app->Secure->GetGET('id'); + $this->app->erp->Headlines('Lager'); + + $bezeichnung = $this->app->DB->Select("SELECT bezeichnung FROM lager WHERE id='$id' LIMIT 1"); + + $this->app->erp->Headlines('Lagerverwaltung', $bezeichnung); + + $this->app->erp->MenuEintrag("index.php?module=lager&action=edit&id=$id", "Details"); + $this->app->erp->MenuEintrag("index.php?module=lager&action=platz&id=$id", "Regale"); + $this->app->erp->MenuEintrag("index.php?module=lager&action=inhalt&id=$id", "Bestand"); + $this->app->erp->MenuEintrag("index.php?module=lager&action=bewegung&id=$id", "Bewegungen"); + + $this->app->erp->MenuEintrag("index.php?module=lager&action=list", "Zurück zur Übersicht"); + } + + public function LagerEdit() { + $this->app->Tpl->Set('AKTIV_TAB1', "selected"); + $this->app->Tpl->Set('ABBRECHEN',""); + parent::LagerEdit(); + $this->LagerDoppelteWarnung(); + $this->LagerMenu(); + } + + public function LagerEtiketten() { + $this->LagerMenu(); + $this->app->Tpl->Set('PAGE', "


    Etiketten"); + } +}