OpenXE/www/pages/lager.php

4632 lines
218 KiB
PHP
Raw Normal View History

2021-05-21 08:49:41 +02:00
<?php
/*
**** COPYRIGHT & LICENSE NOTICE *** DO NOT REMOVE ****
*
* Xentral (c) Xentral ERP Sorftware GmbH, Fuggerstrasse 11, D-86150 Augsburg, * Germany 2019
*
* This file is licensed under the Embedded Projects General Public License *Version 3.1.
*
* You should have received a copy of this license from your vendor and/or *along with this file; If not, please visit www.wawision.de/Lizenzhinweis
* to obtain the text of the corresponding license version.
*
**** END OF COPYRIGHT & LICENSE NOTICE *** DO NOT REMOVE ****
2021-05-21 08:49:41 +02:00
*/
?>
<?php
include __DIR__.'/_gen/lager.php';
class Lager extends GenLager {
/** @var Application $app */
var $app;
/**
* @param string $arttab
* @param string $tab1
* @param string $tab2
*
* @return string
*/
static function LetzterEK($arttab = 'art', $tab1 = 'e1', $tab2 = 'e')
{
return "
(
SELECT $tab2.artikel, $tab2.waehrung, $tab2.preis FROM
(SELECT max( $tab2.id ) AS id, artikel
FROM einkaufspreise $tab2
WHERE $tab2.geloescht !=1
AND (
ifnull($tab2.gueltig_bis,'0000-00-00') = '0000-00-00'
OR $tab2.gueltig_bis >= 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&uuml;');
$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 = "<table cellpadding=0 cellspacing=0><tr><td nowrap>" . "<a href=\"index.php?module=artikel&action=lager&id=%value%\" target=\"_blank\">" . "<img src=\"themes/{$app->Conf->WFconf['defaulttheme']}/images/forward.svg\" border=\"0\"></a>" . "</td></tr></table>";
$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&uuml;');
$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 = "<table><tr><td nowrap><a href=\"index.php?module=lager&action=platzeditpopup&id=%value%\"><img src=\"themes/{$app->Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\"></a>" . "&nbsp;<a href=\"#\" onclick=DeleteDialog(\"index.php?module=lager&action=deleteplatz&id=%value%\");><img src=\"themes/{$app->Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\"></a>" . "&nbsp;<a href=\"#\" onclick=PrintDialog(\"index.php?module=lager&action=regaletiketten&id=%value%\");><img src=\"themes/{$app->Conf->WFconf['defaulttheme']}/images/labelprinter.png\" border=\"0\"></a></td></tr></table>";
// 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&uuml;');
$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&uuml;');
$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 = "<table><tr><td nowrap><a href=\"index.php?module=lager&action=edit&id=%value%\"><img src=\"themes/{$app->Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\"></a>" . "&nbsp;<a href=\"#\" onclick=DeleteDialog(\"index.php?module=lager&action=delete&id=%value%\");><img src=\"themes/{$app->Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\"></a>" . "&nbsp;<a href=\"#\" onclick=PrintDialog(\"index.php?module=lager&action=regaletiketten&id=%value%&cmd=all\");><img src=\"themes/{$app->Conf->WFconf['defaulttheme']}/images/labelprinter.png\" border=\"0\"></a></td></tr></table>";
// 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&uuml;');
$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 = "<a href=\"index.php?module=artikel&action=lager&id=%value%\" target=\"_blank\"><img src=\"themes/{$app->Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\"></a>" . "&nbsp;<a href=\"#\" onclick=LagerplatzdifferenzenEdit(\"%value%\") ><img src=\"themes/{$app->Conf->WFconf['defaulttheme']}/images/forward.svg\" border=\"0\"></a>";
/*
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('<font color=red>',".$app->erp->FormatMenge('l.berechnet').",'</font>'),
".$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&uuml;');
$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 = "<a href=\"index.php?module=artikel&action=lager&id=%value%\" target=\"_blank\"><img src=\"themes/{$app->Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\"></a>" . "&nbsp;";
/*
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('<font color=red>',".$app->erp->FormatMenge('l.differenz').",'</font>'),".$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":
2023-02-06 13:48:58 +01:00
$allowed['lager'] = array('wert');
2023-02-03 09:53:33 +01:00
// Get HTML form values
$preisart = $app->User->GetParameter('preisart');
$datum = $app->User->GetParameter('datum');
$gruppierenlager = $app->User->GetParameter('gruppierenlager');
$preiseineuro = $app->User->GetParameter('preiseineuro');
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;
}
}
$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';
}
2023-02-06 13:48:58 +01:00
$heading = array('Datum','Artikel-Nr.','Artikel','Artikelkategorie','Lager','Lagerplatz','Menge','Gewicht','Volumen','EK-Preis','W&auml;hrung','Kurs','Gesamt','invisible!?','letzte Bewegung','');
$width = array( '5%', '05%', '20%', '10%', '10%', '5%' , '5%', '5%', '5%', '5%', '5%', '5%', '1%', '23%', '5%');
$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 = "";
2023-02-06 13:48:58 +01:00
$preis = self::EinzelPreis($preisart,$live);
$preiscol = $app->erp->FormatPreis($preis,2);
2023-02-06 13:48:58 +01:00
if ($preiseineuro) {
$kursjoin = self::KursJoin($preisart, $datum);
2023-02-06 13:48:58 +01:00
$preisEUR = self::PreisUmrechnung($app, $preisart, true);
$gesamtcol = "(".$preisEUR.'*'.$colmenge.")";
$kurs = $app->erp->FormatPreis('kurs',2);
} else {
$gesamtcol = "(".$preis.'*'.$colmenge.")";
$kurs = 1;
}
2023-02-06 13:48:58 +01:00
$waehrungcol = self::Waehrung($preisart,$live);
$findcols[] = $preis;
$findcols[] = 'waehrung';
$findcols[] = 'kurs';
$findcols[] = $gesamtcol;
$findcols[] = 'art.id';
$searchsql = $findcols;
$searchsql[0] = "date_format(lw.datum,'%d.%m.%Y')";
2023-02-06 13:48:58 +01:00
$searchsql[13] = "date_format(lw.letzte_bewegung,'%d.%m.%Y %H:%i:%s')";
$searchsql[12] = "date_format(lbew.zeit,'%d.%m.%Y %H:%i:%s')";
$defaultorder = 1;
$defaultorderdesc = 0;
2023-02-06 13:48:58 +01:00
$alignright = array(7,8,9,10,11,12,13);
$sumcol = array(7,8,9,13);
$numbercols = array(7,8,9,10,12,13);
$datecols = array(0);
$onequeryperuser = true;
$joinek = ' LEFT JOIN '.self::LetzterEK('art', 'e1','e2').' ek ON art.id = ek.artikel';
2023-02-06 13:48:58 +01:00
if (!$live)
{
2023-02-06 13:48:58 +01:00
$findcols[] = 'lw.letzte_bewegung';
$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)."
2023-02-06 13:48:58 +01:00
, $preiscol, $waehrungcol, ".$kurs.", ".$app->erp->FormatPreis($gesamtcol,2).", '', 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' ";
2023-02-06 13:48:58 +01:00
if ($gruppierenlager)
{
$sql .= "INNER JOIN (SELECT '' as kurzbezeichnung ) lp ON lp.kurzbezeichnung = ''
INNER JOIN lager lag ON lw.lager = lag.id
2023-02-06 13:48:58 +01:00
";
$where .= " AND lw.lager <> 0";
2023-02-06 13:48:58 +01:00
} 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";
}
2023-02-06 13:48:58 +01:00
} else {
$findcols[0] = 'curdate()';
2023-02-06 13:48:58 +01:00
$findcols[] = 'lbew.zeit';
$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)."
2023-02-06 13:48:58 +01:00
, $preiscol, $waehrungcol, ".$kurs.", ".$app->erp->FormatPreis($gesamtcol,2).", '', 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 ";
2023-02-06 13:48:58 +01:00
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' ";
}
2023-02-06 13:48:58 +01:00
} 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' ";
}
2023-02-06 13:48:58 +01:00
}
}
if($artikel)
{
$where .= " AND art.id = '$artikel' ";
}
if($artikelkategorie > 0){
$where .= " AND (aba.kategorie = '$artikelkategorie' OR art.typ = '".$artikelkategorie."_kat') ";
}
2023-02-06 13:48:58 +01:00
$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&uuml;');
$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 = "<a href=\"#\" onclick=\"DeleteZw(%value%);\"><img src=\"./themes/{$app->Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\"></a>";
}
$menu = "<table cellpadding=0 cellspacing=0><tr><td nowrap><a href=\"index.php?module=lager&action=bucheneinlagern&cmd=zwischenlager&id=%value%\"><img border=\"0\" src=\"./themes/{$app->Conf->WFconf['defaulttheme']}/images/forward.svg\"></a>&nbsp;<a onclick=\"DialogZwischenlager(%value%);\" href=\"#\"><img src=\"./themes/{$app->Conf->WFconf['defaulttheme']}/images/add.png\" border=\"0\"></a>&nbsp;$delete</td></tr></table>";
$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&uuml;');
$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 = "<a href=\"#\" onclick=\"DeleteZw(%value%);\"><img src=\"./themes/{$app->Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\"></a>";
}
$menu = "<table cellpadding=0 cellspacing=0><tr><td nowrap><a href=\"index.php?module=lager&action=bucheneinlagern&cmd=zwischenlager&id=%value%\"><img border=\"0\" src=\"./themes/{$app->Conf->WFconf['defaulttheme']}/images/forward.svg\"></a>&nbsp;$delete</td></tr></table>";
$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 = "<table cellpadding=0 cellspacing=0><tr><td nowrap><a href=\"index.php?module=artikel&action=lager&id=%value%\" target=\"_blank\"><img src=\"themes/{$app->Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\"></a></td></tr></table>";
$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&nbsp;<sup>*</sup>';
$heading[] = 'Reserviert&nbsp;<sup>*</sup>';
$heading[] = 'Men&uuml;';
$width[] = '10%';
$width[] = '10%';
$width[] = '1%';
$findcols[] = 'a.id';
//$moreinfo = true;
if($more_data2)
{
$sql = "SELECT SQL_CALC_FOUND_ROWS a.id, CONCAT('<a href=\"index.php?module=artikel&action=edit&id=',a.id,'\" target=\"_blank\">',a.nummer,'</a>'),a.name_de,";
}else{
$sql = "SELECT SQL_CALC_FOUND_ROWS lpi.id, CONCAT('<a href=\"index.php?module=artikel&action=edit&id=',a.id,'\" target=\"_blank\">',a.nummer,'</a>'),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','Artikelnummer','Artikel','Menge','Projekt','Grund','Men&uuml;');
$width = array('20%', '10%', '5%', '5%', '5%', '20%', '1%', '10%', '20%');
$findcols = array('t.kunde', 't.typ', 't.belegnr', 't.status','t.Artikelnummer', 't.Artikel', 't.menge', 't.projekt', 't.grund', 't.rid');
$searchsql = array('t.kunde', 't.typ', 't.belegnr', 't.status','t.Artikelnummer', 't.Artikel', $app->erp->FormatMenge('t.menge'), 't.projekt', 't.grund');
$defaultorder = 1; //Optional wenn andere Reihenfolge gewuenscht
$defaultorderdesc = 1;
//$sumcol = 9;
$menu = "<table cellpadding=0 cellspacing=0><tr><td nowrap><a href=\"#\" onclick=DeleteDialog(\"index.php?module=lager&action=artikelentfernenreserviert&reservierung=%value%\"); ><img src=\"themes/{$app->Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\"></a></td></tr></table>";
$alignright = array(7);
$numbercols = array(6);
$menucol = 5;
//$moreinfo = true;
$sql = "
SELECT
SQL_CALC_FOUND_ROWS t.rid,
t.kunde,
t.typ,
t.belegnr,
t.status,
t.Artikelnummer,
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.nummer as Artikelnummer, 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.nummer as Artikelnummer, 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.nummer as Artikelnummer, 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&Ouml;SCHT' as belegnr ,'GEL&Ouml;SCHT' as status, a.nummer as Artikelnummer, 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&Ouml;SCHT' as belegnr ,'GEL&Ouml;SCHT' as status, a.nummer as Artikelnummer, 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&Ouml;SCHT' as belegnr ,'GEL&Ouml;SCHT' as status, a.nummer as Artikelnummer, 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.nummer as Artikelnummer, 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");
2023-02-03 09:53:33 +01:00
$this->app->ActionHandler("wert", "LagerWert");
$this->app->ActionHandler("wert2", "LagerWert2");
$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("<div class=\"warning\">Der Artikel $name_de wurde $menge mal umgelagert!</div>");
$this->app->Location->execute('index.php?module=lager&action=schnellumlagern&msg='.$msg);
}
if($anzahl_artikel > 0){
$msg = $this->app->erp->base64_url_encode("<div class=\"error\">Der Artikel ist nur maximal $anzahl_artikel im Lager vorhanden! Bitte korrekte Menge angeben!</div>");
}
else{
$msg = $this->app->erp->base64_url_encode("<div class=\"error\">Der Artikel hat keinen Bestand im Lager!</div>");
}
$this->app->Location->execute('index.php?module=lager&action=schnellumlagern&msg='.$msg);
}
if($artikelid<=0)
{
$msg = "<div class=\"error\">Der Artikel mit der Nummer $nummer wurde nicht gefunden!</div>";
$get_nummer = '';
}
else{
$get_nummer = $nummer;
}
if($lager_platz<=0)
{
$msg .= "<div class=\"error\">Das Ziellager $ziellager wurde nicht gefunden!</div>";
$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', '<div class="info">{|Der Artikel wird wenn vorhanden aus dem Standardlager ausgelagert.|}</div>');
}
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("<div class=\"warning\">Der Artikel $name_de wurde $menge mal ausgelagert!</div>");
$this->app->Location->execute("index.php?module=lager&action=schnellauslagern&msg=$msg");
}
$msg = $this->app->erp->base64_url_encode("<div class=\"error\">Der Artikel ist nur maximal $anzahl_artikel im Lager vorhanden! Bitte korrekte Menge angeben!</div>");
$this->app->Location->execute("index.php?module=lager&action=schnellauslagern&msg=$msg");
}
$msg = $this->app->erp->base64_url_encode("<div class=\"error\">Der Artikel mit der Nummer $nummer wurde nicht gefunden!</div>");
$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', '<div class="info">Der Artikel wird wenn vorhanden aus dem Standardlager ausgelagert.</div>');
}
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&uuml;ck zur &Uuml;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();
2023-02-03 09:53:33 +01:00
/* $this->app->Tpl->Set('VERS','Professional');
$this->app->Tpl->Set('MODUL','Professional');
2023-02-03 09:53:33 +01:00
$this->app->Tpl->Parse('PAGE', 'only_version.tpl');
ROFLMAO
*/
// Transfer Parameters to TableSearch
$gruppierenlager = $this->app->Secure->GetPOST('gruppierenlager');
$this->app->User->SetParameter('gruppierenlager', $gruppierenlager);
$preiseineuro = $this->app->Secure->GetPOST('preiseineuro');
$this->app->User->SetParameter('preiseineuro', $preiseineuro);
$datum = $this->app->Secure->GetPOST('datum');
$this->app->User->SetParameter('datum', $datum);
$preisart = $this->app->Secure->GetPOST('preisart');
$this->app->User->SetParameter('preisart', $preisart);
$this->app->YUI->DatePicker("datum");
$this->app->Tpl->Set('DATUM', $datum);
$this->app->Tpl->Set('PREISEINEURO', $preiseineuro==1?"checked":"");
$this->app->Tpl->Set('GRUPPIERENLAGER', $gruppierenlager==1?"checked":"");
$this->app->Tpl->Set(strtoupper($preisart), 'selected');
$this->app->erp->MenuEintrag('index.php?module=lager&action=list','zur&uuml;ck zur &Uuml;bersicht');
$this->app->erp->Headlines('','Bestand');
$this->app->YUI->TableSearch('TAB1', 'lager_wert', 'show','','',basename(__FILE__), __CLASS__);
$this->app->Tpl->Parse('PAGE','lager_wert.tpl');
}
2023-02-03 09:53:33 +01:00
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('<div class="error">In diesem Lager existieren Artikel. Es k&ouml;nnen nur leere Lagerpl&auml;tze bzw. Lager ohne Lagerpl&auml;tze gel&ouml;scht werden!</div>');
}
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('<div class="error2">Das Regal wurde gel&ouml;scht!</div>');
}
$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('<div class="error">In diesem Lager existieren noch Lagerpl&auml;tze. Es k&ouml;nnen nur leere Lager gel&ouml;scht werden!</div>');
}
else {
$this->app->DB->Select(sprintf('DELETE FROM lager WHERE id=%d LIMIT 1', (int)$id));
$msg = $this->app->erp->base64_url_encode('<div class="error2">Das Lager wurde gel&ouml;scht!</div>');
}
$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 = "<a href=\"#\" onclick=\"if(!confirm('Artikel wirklich aus dem Zwischenlager nehmen?')) return false; else window.location.href='index.php?module=lager&action=buchenzwischenlagerdelete&id=%value%';\"><img src=\"./themes/[THEME]/images/delete.svg\" border=\"0\"></a>";
}
/*$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', "<a href=\"index.php?module=lager&action=bucheneinlagern&cmd=zwischenlager&id=%value%\"><img border=\"0\" src=\"./themes/[THEME]/images/forward.svg\"></a>&nbsp;$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', "<a href=\"index.php?module=lager&action=bucheneinlagern&cmd=zwischenlager&id=%value%\"><img border=\"0\" src=\"./themes/[THEME]/images/forward.svg\"></a>&nbsp;$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','<script>
function DeleteZw(zid)
{
if(!confirm(\'Artikel wirklich aus dem Zwischenlager nehmen?\')) return false; else window.location.href=\'index.php?module=lager&action=buchenzwischenlagerdelete&id=\'+zid+\'\';
}
</script>');
$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->Tpl->Set('NEINDOCHNICHTENDE','-->');
}
$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','<!--');
$this->app->Tpl->Set('WOHERREADONLYENDE','-->');
$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',"<tr><td></td><td>MHD: ".$mhd[$i-1]['mhddatum']."</td></tr>");
$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',"<tr><td></td><td>Charge: ".$charge[$i-1]['charge']."</td></tr>");
}
$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',"<tr><td></td><td>Seriennummer: ".$srn[$i-1]['seriennummer']."</td></tr>");
}
$this->app->Tpl->Set('SHOWCHRSTART','<!--');
$this->app->Tpl->Set('SHOWCHREND','-->');
if((!empty($mhd)?count($mhd):0) <=0)
{
$this->app->Tpl->Set('SHOWMHDSTART','<!--');
$this->app->Tpl->Set('SHOWMHDEND','-->');
}
$this->app->Tpl->Set('SHOWSRNSTART','<!--');
$this->app->Tpl->Set('SHOWSRNEND','-->');
} else {
$this->app->Tpl->Set('WOHERREADONLYSTART2','<!--');
$this->app->Tpl->Set('WOHERREADONLYENDE2','-->');
}
// 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', "<br>{|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.= "<li>Artikel kommt nicht aus Zwischenlager!</li>";
$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.= "<li>Artikel-Nummer gibt es nicht!</li>";
$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.= "<li>Regal gibt es nicht!</li>";
$alles_komplett++;
}
if ($alles_komplett > 0 && $regal != '') {
$this->app->Tpl->Set('MESSAGELAGER', "<div class=\"error\">Artikel wurde nicht gebucht! Grund:<ul>$grund</ul> </div>");
} else {
if ($artikel_quickcheck == 1 && (String)$nummer !== '') {
$this->app->Tpl->Set('MESSAGELAGER', "<div class=\"error\">Achtung! Artikelnummer
gibt es nicht, oder der Artikel ist kein Lagerartikel! </div>");
$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',"<div class=\"error\">Achtung! Bitte alle Pflichtfelder (Regal, MHD, Charge, Seriennummer) ausf&uuml;llen!</div>");
}
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("<div class=\"warning\">Der Artikel $name wurde $menge mal eingelagert. Anzahl Regal: <b>".(float)$gesamt." $einheit</b> Anzahl Komplettbestand alle Regale: <b>".(float)$gesamt_alle." $einheit</b></div>");
} else {
$msg = $this->app->erp->base64_url_encode("<div class=\"error\">Fehler: Unbekannte oder falsche Menge: $menge bei Artikel \"$name\". Der Artikel wurde nicht eingelagert! </div>");
}
$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("<div class=\"warning\">Der Artikel $name wurde $menge mal eingelagert. Anzahl Regal: <b>".(float)$gesamt." $einheit</b> Anzahl Komplettbestand alle Regale: <b>".(float)$gesamt_alle." $einheit</b></div>");
}
else {
$msg = $this->app->erp->base64_url_encode("<div class=\"error\">Fehler: Unbekannte oder falsche Menge: $menge bei Artikel \"$name\". Der Artikel wurde nicht eingelagert! </div>");
}
// 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', "<tr valign=\"top\"><td>Bezeichnung:</td><td>$name_de</td></tr>");
if ($standardbild > 0) {
$this->app->Tpl->Add('ZWISCHENLAGERINFO', "<tr valign=\"top\"><td>Bild:</td><td align=\"center\"><img src=\"index.php?module=dateien&action=send&id=$standardbild\" width=\"110\"></td></tr>");
}
if($lagerbezeichnung!='')
{
$this->app->Tpl->Add('ZWISCHENLAGERINFO', "<tr valign=\"top\"><td></td><td><br></td></tr><tr ><td>Regalvorschlag:</td><td><font size=\"5\"><b onclick=\"document.getElementById('regal').value='$lagerbezeichnung'\";>$lagerbezeichnung</b></font></td></tr>");
} 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&auml;hlen';
}
$this->app->Tpl->Add('ZWISCHENLAGERINFO', "<tr valign=\"top\"><td></td><td><br></td></tr><tr ><td>Regalvorschlag:</td><td><font size=\"5\"><b onclick=\"document.getElementById('regal').value='$lagerbezeichnung'\";>$lagerbezeichnung</b></font></td></tr>");
}
$this->app->Tpl->Add('ZWISCHENLAGERINFO', "<tr valign=\"top\"><td><br><br><b>Regal:</b></td><td><br><br><input type=\"text\" name=\"regal\" id=\"regal\" style=\"border: 2px solid;width:200px;\"><br>Jetzt Regal abscannen!</td></tr>
<input type=\"hidden\" name=\"zwischenlager\" value=\"$id\">");
$this->app->Tpl->Add('ZWISCHENLAGERINFO', '<script type="text/javascript">
document.getElementById("regal").focus();
</script>');
} 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&auml;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','<!--');
$this->app->Tpl->Set('SHOWCHREND','-->');
} 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','<!--');
$this->app->Tpl->Set('SHOWMHDEND','-->');
} 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','<!--');
$this->app->Tpl->Set('SHOWSRNEND','-->');
} else {
// Generator felder fuer seriennummern
$this->app->Tpl->Add('SERIENNUMMERN','<table><tr><td>Nr.</td><td>{|Seriennummer|}</td></tr>');
$tmp = $this->app->Secure->GetPOST("seriennummern");
for($ij=1;$ij<=$menge;$ij++)
{
$value = $tmp[$ij-1];
$this->app->Tpl->Add('SERIENNUMMERN',"<tr><td>$ij</td><td><input type=\"text\" name=\"seriennummern[]\" id=\"seriennummern_$ij\" size=\"30\" value=\"$value\"></td></tr>");
$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','</table>');
}
$standardbild = $this->app->erp->GetArtikelStandardbild($artikel,true);
if ($standardbild > 0)
$this->app->Tpl->Set('STANDARDBILD', "<tr valign=\"top\"><td>{|Bild|}:</td><td><img src=\"index.php?module=dateien&action=send&id=$standardbild\" width=\"110\"></td></tr>");
if(trim($einheit) != ''){
$name_de .= " (Einheit: ".$einheit.")";
}
$this->app->Tpl->Set('NAMEDE',$name_de);
if($lagermeist!="" || $lagermeist!=0){
$this->app->Tpl->Set('LAGERMEIST',"<b onclick=\"document.getElementById('regal').value='$lagermeist'\";>$lagermeist</b> ({|aktuell am meisten im Lager|})");
if($lagerbezeichnung!='' && $lagerbezeichnung!=='Regal frei w&auml;hlen')
$this->app->Tpl->Add('LAGERMEIST',"<br><b onclick=\"document.getElementById('regal').value='$lagerbezeichnung'\";>$lagerbezeichnung</b> ({|Standardlager|})");
} else {
$this->app->Tpl->Set('LAGERBEZEICHNUNG',"<b onclick=\"document.getElementById('regal').value='$lagerbezeichnung'\";>$lagerbezeichnung</b>");
}
$this->app->Tpl->Set('REGALVALUE',$frmRegal);
$this->app->Tpl->Parse('ZWISCHENLAGERINFO', 'lager_regal.tpl');
} else {
//falsche artikelnummer
$nummer = '';
$this->app->Tpl->Set('MSGARTIKEL', '<br>{|Jetzt Artikel abscannen!|}');
$this->app->Tpl->Set('ARTIKELSTYLE', 'style="border: 2px solid red"');
$this->app->Tpl->Set('ZWISCHENLAGERINFO', '<script type="text/javascript">document.getElementById("nummer").focus();</script>');
$this->app->Tpl->Set('SHOWCHRSTART','<!--');
$this->app->Tpl->Set('SHOWCHREND','-->');
$this->app->Tpl->Set('SHOWMHDSTART','<!--');
$this->app->Tpl->Set('SHOWMHDEND','-->');
$this->app->Tpl->Set('SHOWSRNSTART','<!--');
$this->app->Tpl->Set('SHOWSRNEND','-->');
}
} else {
$this->app->Tpl->Set('ZWISCHENLAGERINFO', '<script type="text/javascript">document.getElementById("nummer").focus();</script>');
if($artikel <=0)
{
$this->app->Tpl->Set('SHOWCHRSTART','<!--');
$this->app->Tpl->Set('SHOWCHREND','-->');
$this->app->Tpl->Set('SHOWMHDSTART','<!--');
$this->app->Tpl->Set('SHOWMHDEND','-->');
$this->app->Tpl->Set('SHOWSRNSTART','<!--');
$this->app->Tpl->Set('SHOWSRNEND','-->');
}
}
}
$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', '<!--');
$this->app->Tpl->Set('ENDEDISABLESTOCK', '-->');
}
session_start();
if($cmd==='umlagern') {
//$this->app->Tpl->Set(TABTEXT, "Auslagern");
$this->app->Tpl->Set('STARTNICHTUMLAGERN', '<!--');
$this->app->Tpl->Set('ENDENICHTUMLAGERN', '-->');
}
else {
//$this->app->Tpl->Set(TABTEXT, "Auslagern");
$this->app->Tpl->Set('STARTUMLAGERN', '<!--');
$this->app->Tpl->Set('ENDEUMLAGERN', '-->');
}
$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,"<font color=\"red\">Projekt gibt es nicht!</font>");
$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', "<div class=\"error\">Bitte eine g&uuml;ltige Adresse angeben!</div>");
}
*/
if (!is_numeric($menge) || $menge == 0) {
$error++;
$this->app->Tpl->Set('MSGMENGE', "<font color=\"red\">Wert ist keine Zahl oder Null.</font>");
}
$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', "<div class=\"error\">{|Diese Artikelnummer gibt es nicht, oder der Artikel ist kein Lagerartikel!|}</div>");
$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', "<div class=\"error\">{|Artikel gibt es in diesem Regal nicht!|}</div>");
} else if ($summe < $menge) {
$this->app->Tpl->Set('MESSAGELAGER', "<div class=\"error\">{|Zu wenig Artikel im Regal! Bitte kleinere Menge w&auml;hlen!|} ({|Summe|}: $summe)</div>");
} 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',"<tr><td></td><td>{|MHD|}</td><td>{|Seriennummer|}</td><td>{|Charge|}</td></tr>");
} else if ((!empty($tmpmhd)?count($tmpmhd):0) > 0) {
$this->app->Tpl->Add('SRNINFO',"<tr><td></td><td>{|Mindesthalt.|}</td><td width=30></td><td>{|Charge|}</td></tr>");
} else if ((!empty($tmpcharge)?count($tmpcharge):0) > 0) {
$this->app->Tpl->Add('SRNINFO',"<tr><td></td><td>{|Charge|}</td></tr>");
}
$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',"<tr>
<td><input type=\"checkbox\" onclick=\"countChecks(this)\" name=\"lager_srn_id[]\" value=\"".$tmpsrn[$y]['id']."\" $checked>&nbsp;$out</td>
<td>".$tmpsrn[$y]['mhddatum']."</td>
<td>".$tmpsrn[$y]['seriennummer']."</td>
<td>".$tmpsrn[$y]['charge']."</td></tr>");
}
} 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',"<tr>
<td><input type=\"hidden\" name=\"lager_mhd_id[]\" value=\"".$tmpmhd[$y]['id']."\" ><input type=\"text\" size=\"6\" class=\"chargenmengen mhdmenge\" onchange=\"checklagermengen();\" name=\"lager_mhd_auswahl[]\" value=\"\" /> / <input type=\"hidden\" class=\"lager_charge_menge\" name=\"lager_mhd_menge[]\" value=\"".$tmpmhd[$y]['mhdmenge']."\" />".$tmpmhd[$y]['mhdmenge']."&nbsp;$out</td>
<td>".$tmpmhd[$y]['mhddatum']."</td><td></td>
<td>".$tmpmhd[$y]['charge']."</td></tr>");
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',"<tr>
<td><input type=\"checkbox\" onclick=\"countChecks(this)\" name=\"lager_mhd_id[]\" value=\"".$tmpmhd[$y]['id']."\" $checked>&nbsp;$out</td>
<td>".$tmpmhd[$y]['mhddatum']."</td><td></td>
<td>".$tmpmhd[$y]['charge']."</td></tr>");
}
}
} 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',"<tr>
<td><input type=\"hidden\" name=\"lager_charge_id[]\" value=\"".$tmpcharge[$y]['id']."\" ><input class=\"chargenmengen\" onchange=\"checklagermengen();\" type=\"text\" size=\"6\" name=\"lager_charge_auswahl[]\" value=\"\" /> / <input type=\"hidden\" class=\"lager_charge_menge\" name=\"lager_charge_menge[]\" value=\"".$tmpcharge[$y]['cmenge']."\" />".$this->app->erp->ReplaceMenge(0,$tmpcharge[$y]['cmenge'],0)."&nbsp;$out</td>
<td>".$tmpcharge[$y]['charge']."</td></tr>");
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',"<tr>
<td><input type=\"checkbox\" onclick=\"countChecks(this)\" name=\"lager_charge_id[]\" value=\"".$tmpcharge[$y]['id']."\" $checked>&nbsp;$out</td>
<td>".$tmpcharge[$y]['charge']."</td></tr>");
}
}
}
//$regaltreffer="1";
$this->app->Tpl->Add('ZWISCHENLAGERINFO',"<input type=\"hidden\" name=\"abschluss_auslagern\" value=\"1\">");
$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&uuml;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("<div class=\"info\">Der Artikel $name wurde $menge mal ausgelagert. Anzahl Regal: <b>".floatval($gesamt)." $einheit</b> Anzahl Komplettbestand alle Regale: <b>".floatval($gesamt_alle)." $einheit</b></div>");
if($artikelid > 0)
{
$this->app->Location->execute('index.php?module=artikel&action=lager&id='.$artikelid.'&msg='.$msg);
}
//$msg = $this->app->erp->base64_url_encode("<div class=\"info\">Der Artikel $name wurde umgelagert. Der n&auml;chste Artikel kann jetzt umgelagert werden.</div>");
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', "<div class=\"error\">$msgregal</div>");
$regalcheck = 0;
}
// ende auslagern
}
} else {
//$error++;
if ($regal != '') {
$msgregal = "Dieses Regal gibt es nicht!";
$this->app->Tpl->Set('MESSAGELAGER', "<div class=\"error\">$msgregal</div>");
$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', "<tr valign=\"top\"><td>Aktueller Artikel:</td><td>$name_de</td></tr>"); //BENE
if ($standardbild > 0) {
$this->app->Tpl->Add('BEZEICHNUNG', "<tr valign=\"top\"><td>Bild:</td><td><img src=\"index.php?module=dateien&action=send&id=$standardbild\" width=\"110\"></td></tr>");
}
$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 = "<b onclick=\"document.getElementById('regal').value='$standard_lagerbezeichnung'\";>$standard_lagerbezeichnung</b> (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', "<tr ><td>Regalvorschlag:</td><td align=\"left\"><input type=\"button\" onclick=\"document.getElementById('regal').value='$regalvalue'\"; value=\"$regalvalue\"></td></tr>");
}
$this->app->Tpl->Set('FOCUSFIELD','document.getElementById("regal").focus();');
$this->app->Tpl->Add('ZWISCHENLAGERINFO', "<tr valign=\"top\"><td><b>Zielregal:</b></td><td align=\"left\"><input type=\"text\" style=\"width:200px;border: 2px solid red\" name=\"regalneu\" id=\"regal\" value=\"\"><br>Jetzt Regal abscannen!<script type=\"text/javascript\">document.getElementById('menge').style.backgroundColor='#ececec'; document.getElementById('nummer').style.backgroundColor='#ececec'; document.getElementById('grundreferenz').style.backgroundColor='#ececec';
document.getElementById('grundreferenz').readOnly=true;
document.getElementById('menge').readOnly=true;
document.getElementById('nummer').readOnly=true;
</script>
<input type=\"hidden\" name=\"regal\" value=\"$regalvalue\"></td></tr>");
} 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', "<tr ><td>Regalvorschlag:</td><td align=\"left\"><input type=\"button\" onclick=\"document.getElementById('regal').value='$lagerbezeichnung'\" value=\"$lagerbezeichnung\" > (Standardlager)<br>$standardlageranzeigen</td></tr>");
}
else {
$this->app->Tpl->Add('ZWISCHENLAGERINFO', "<tr ><td>Regalvorschlag:</td><td align=\"left\"><input type=\"button\" onclick=\"document.getElementById('regal').value='$lagerbezeichnung'\" value=\"$lagerbezeichnung\" > (aktuell am meisten im Lager)<br>$standardlageranzeigen</td></tr>");
}
if($lagerbezeichnung!='' && empty($regalvaluestock) && $regal!='') {
$regalvaluestock=$lagerbezeichnung;
}
if($regal!='') {
$regalvaluestock=$regalvalue;
}
$this->app->Tpl->Add('ZWISCHENLAGERINFO', "<tr valign=\"top\"><td><b>Entnahmeregal:</b></td><td align=\"left\"><input type=\"text\" style=\"width:200px;border: 2px solid red;\" name=\"regal\" id=\"regal\" value=\"$regalvaluestock\"><br>Jetzt Regal abscannen!</td></tr>");
$this->app->Tpl->Set('FOCUSFIELD','document.getElementById("regal").focus();');
}
// letzt einstellung von grad
$this->app->Tpl->Add('ZWISCHENLAGERINFO', '<script type="text/javascript">
document.getElementById("regal").focus();
</script>');
} 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&uuml;ck zur &Uuml;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','&Uuml;bersicht');
$this->app->erp->Headlines('Lager', 'Reservierungen');
$this->app->Tpl->Set('MESSAGE','<div class="info">Reservierungen Stand ' . date('d.m.Y').'</div>');
$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","&Uuml;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', "<table border=0 width=100% class=\"mkTable\">
<tr><td><b>Produktion</b></td><td><b>Bezeichnung</b></td><td align=center><b>Auslagern</b></td></tr>");
$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', "<tr><td>Produktion $nummer</td><td>$bezeichnung</td><td align=center><a href=\"index.php?module=lager&action=auslagernproduktion&id=$produktion&cmd=produktion\"><img src=\"./themes/[THEME]/images/forward.svg\"></a></td></tr>");
$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', "</table>");
//TODO YUI Ende
if ($gesamtanzahlartikel <= 0) {
$this->app->Tpl->Set('MESSAGE', "<div class=\"info\">{|Aktuell gibt es keine Artikel f&uuml;r Produktionen, da keine Produktionen gestartet wurden.|}</div>");
$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', "<h2>$projektName Lieferungen Stand " . date('d.m.Y') . "</h2>");
$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', "<div class=\"info\">Aktuell gibt es keine Artikel f&uuml;r Lieferungen.</div>");
}
$this->app->erp->MenuEintrag('index.php?module=kommissionierlauf&action=list','Kommissionierl&auml;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."<br>";
}
}
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<br>";
print_r($orderarray);
echo "<br>";
echo "schritt 2<br>";
print_r($tmparray);
echo "<br>";
echo "schritt 3<br>";
// 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: <input type=\"text\" size=\"10\" id=\"$erstes\" onchange=\"if(!confirm('Artikelnummer ".$row['nummer']." wurde ".$row['tmpmenge']." mal entnommen?')) return false; else window.location.href='index.php?module=lager&action=artikelfuerlieferungen&cmd=".$row['cmd']."&artikel=".$row['artikel']."&menge=".$row['tmpmenge']."&projekt=".$row['projekt']."&produktion=".$row['produktion']."&lagerplatzid=".$row['link_lagerplatzid']."&lager='+this.value;\">");
$htmltable->AddCol("<a href=\"#\" onclick=\"if(!confirm('Artikelnummer ".$row['nummer']." wurde ".$row['tmpmenge']." mal entnommen?')) return false; else window.location.href='index.php?module=lager&action=artikelfuerlieferungen&cmd=".$row['cmd']."&artikel=".$row['artikel']."&menge=".$row['tmpmenge']."&projekt=".$row['projekt']."&produktion=".$row['produktion']."&lagerplatzid=".$row['link_lagerplatzid']."&lager=".$row['link_lager']."';\"><img src=\"./themes/[THEME]/images/forward.svg\"></a>");
// if ($this->app->User->GetType() == "admin") $htmltable->AddCol("<a href=\"#\" onclick=\"if(!confirm('Artikel aus Lieferungen und Reservierungen nehmen?')) return false; else window.location.href='index.php?module=lager&action=artikelentfernen&produktion=".$row['produktion']."&projekt=".$row['projekt']."&artikel=".$row['artikel']."&cmd=".$row['cmd']."';\"><img src=\"./themes/[THEME]/images/delete.svg\"></a>");
}
//bestimme regalplaetze fuer artikel
$this->app->Tpl->Add('INHALT', $htmltable->Get());
// und enter abfangen!!!
$this->app->Tpl->Add('INHALT', "<script type=\"text/javascript\">document.getElementById(\"erstes\").focus(); </script>");
//$table->DisplayNew('INHALT', "<a href=\"index.php?module=lager&action=bucheneinlagern&cmd=zwischenlager&id=%value%\"><img border=\"0\" src=\"./themes/[THEME]/images/einlagern.png\"></a>");
$this->app->Tpl->Parse('TAB1', 'rahmen70_ohneform.tpl');
}
function LagerZwischenlager() {
$this->app->Tpl->Add('TABS', '<li><h2>Zwischenlager</h2></li>');
$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', "<a href=\"index.php?module=lager&action=bewegungpopup&frame=false&id=%value%\"
onclick=\"makeRequest(this);return false\">Info</a>");
$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', "<a href=\"index.php?module=lager&action=bewegungpopup&frame=false&id=%value%\"
onclick=\"makeRequest(this);return false\">Info</a>");
$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&uuml;ck zur &Uuml;bersicht');
$id = $this->app->Secure->GetGET('id');
$this->app->Tpl->Set("MESSAGE", "<div class=\"info\" style=\"margin-top:7px\">Bewegungen Lager: $lager bis zum " . date('d.m.Y')."</div>");
$this->app->YUI->AutoComplete('lager_platz_bewegung', 'lagerplatz',0,'&lager='.$id);
$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&uuml;ck zur &Uuml;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', "<div class=\"info\">$neue Regal wurde neu angelegt$sorttxt!</div>");
}
else if($neue > 1){
$this->app->Tpl->Set('MESSAGE3', "<div class=\"info\">$neue Lagerpl&auml;tze wurden neu angelegt$sorttxt!</div>");
}
else{
$this->app->Tpl->Set('MESSAGE3', "<div class=\"info\">Keine neuen Lagerpl&auml;tze angelegt! Alle bereits gefunden$sorttxt.</div>");
}
}
else{
$this->app->Tpl->Set('MESSAGE3', "<div class=\"error\">Es wurden keine Lagerpl&auml;tze angegeben!</div>");
}
}
$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("<div class=\"info\">Das Regal wurde angelegt!</div>");
$this->app->Location->execute("index.php?module=lager&action=platz&id=$id&msg=$msg");
}
if($kurzbezeichnung==''){
$this->app->Tpl->Set('MESSAGE', "<div class=\"error\">Das Regal wurde nicht angelegt! Bitte geben Sie einen Namen an!</div>");
}
else{
$this->app->Tpl->Set('MESSAGE', "<div class=\"error\">Das Regal wurde nicht angelegt! Der Name existiert bereits in diesem oder einem anderem Lager.
Bitte einen anderen w&auml;hlen!</div>");
}
}
$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&auml;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&uuml;ck zur &Uuml;bersicht");
$this->app->Tpl->Set('ABBRECHEN',"<input type=\"button\" value=\"Abbrechen\" onclick=\"window.location.href='index.php?module=lager&action=platz&id=$sid';\">");
// $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('<div class="info">Das Regal wurde ge&auml;ndert!</div>');
$this->app->Location->execute("index.php?module=lager&action=platz&id=$sid&msg=$msg");
}
if($kurzbezeichnung==''){
$this->app->Tpl->Set('MESSAGE', "<div class=\"error\">Das Regal wurde nicht ge&auml;ndert! Bitte geben Sie einen Namen an!</div>");
}
else{
$this->app->Tpl->Set('MESSAGE', "<div class=\"error\">Das Regal wurde nicht ge&auml;ndert! Der Name existiert in diesem oder einen anderem Lager bereits. Bitte einen anderen w&auml;hlen!</div>");
}
$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&uuml;ck zur &Uuml;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("<div class=\"info\">Die Etiketten wurden gedruckt!</div>");
echo json_encode(array('status'=>1));
$this->app->ExitXentral();
}
$this->LagerHauptmenu();
$etiketten = $this->app->erp->GetSelectEtiketten("lagerplatz_klein",$etikettenauswahl);
if($etiketten=="") $etiketten="<option>Standard</option>";
$drucker = $this->app->erp->GetSelectEtikettenDrucker($etikettendrucker);
$druckbutton = "<input type=\"button\" onclick=\"Etikettendrucken()\" class=\"btnBlue\" value=\"{|Drucken|}\">";
$this->app->Tpl->Set('FORMULAR',"<form action=\"\" method=\"post\"><table class=\"mkTableFormular\">
<tr><td>{|Lagerplatz|} ({|von|}):</td><td><input type=\"text\" name=\"von\" id=\"von\" value=\"$von\"></td></tr>
<tr><td>{|Lagerplatz|} ({|bis|}):</td><td><input type=\"text\" name=\"bis\" id=\"bis\" value=\"$bis\">&nbsp;$druckbutton</td></tr>
<tr><td>{|Etikett|}:</td><td><select name=\"etikettenauswahl\" id=\"etikettenauswahl\">".$etiketten."</select></td></tr>
<tr><td>{|Drucker|}:</td><td><select name=\"etikettendrucker\" id=\"etikettendrucker\">".$drucker."</select></td></tr></table>
</form><br><br>");
$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&uuml;ck zur &Uuml;bersicht');
}
$this->app->erp->MenuEintrag('index.php?module=lager&action=list', '&Uuml;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','<div class="error">Achtung! Doppelte Bezeichnungen: '.$bezeichnung.'</div>');
//$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&uuml;ck zur &Uuml;bersicht");
}
public function LagerEdit() {
$this->app->Tpl->Set('AKTIV_TAB1', "selected");
$this->app->Tpl->Set('ABBRECHEN',"<input type=\"button\" value=\"Abbrechen\" onclick=\"window.location.href='index.php?module=lager&action=list';\">");
parent::LagerEdit();
$this->LagerDoppelteWarnung();
$this->LagerMenu();
}
public function LagerEtiketten() {
$this->LagerMenu();
$this->app->Tpl->Set('PAGE', "<br><br><br>Etiketten");
}
}