erp->ModulVorhanden('batches');
$projectCol = 'p.abkuerzung';
$abJoin = '';
if($useProjectAb) {
$projectCol = 'IFNULL(pab.abkuerzung ,p.abkuerzung)';
$abJoin = ' LEFT JOIN auftrag AS ab ON l.auftragid = ab.id
LEFT JOIN projekt AS pab ON ab.projekt = pab.id ';
}
switch($name)
{
case 'lieferscheineinbearbeitung':
$allowed['lieferschein'] = array('create', 'list');
// headings
$heading = array('', 'Lieferschein', 'Vom', 'Kd-Nr./Lf-Nr.', 'Kunde/Lieferant', 'Land', 'Projekt', 'Versand', 'Art', 'Status', 'Menü');
$width = array('1%', '10%', '10%', '10%', '35%', '5%', '1%', '1%', '1%', '1%', '1%', '1%');
$findcols = array('open', 'l.belegnr', 'l.datum', 'if(l.lieferantenretoure=1,lfr.lieferantennummer,adr.kundennummer)', 'l.name', 'l.land', $projectCol, 'l.versandart', 'l.lieferscheinart', 'l.status', 'id');
$searchsql = array('l.id', 'DATE_FORMAT(l.datum,\'%d.%m.%Y\')', 'l.belegnr', 'if(l.lieferantenretoure=1,lfr.lieferantennummer,adr.kundennummer)', 'l.name', 'l.land', $projectCol, 'l.status', 'l.plz', 'l.id', 'adr.freifeld1', 'l.ihrebestellnummer','l.internebezeichnung','l.versandart');
$defaultorder = 11; //Optional wenn andere Reihenfolge gewuenscht
$defaultorderdesc = 1;
$menu = "
";
$menucol = 10;
// SQL statement
$sql = "SELECT SQL_CALC_FOUND_ROWS l.id,'Conf->WFconf['defaulttheme']}/images/details_open.png class=details>' as open, 'ENTWURF' as belegnr, DATE_FORMAT(l.datum,'%d.%m.%Y') as vom, if(l.lieferantenretoure=1,lfr.lieferantennummer,adr.kundennummer) as kundennummer,
CONCAT(" . $app->erp->MarkerUseredit("l.name", "l.useredittimestamp") . ", if(l.internebezeichnung!='',CONCAT('
',l.internebezeichnung,''),'')) as kunde,
l.land as land, $projectCol as projekt, l.versandart as versandart,
l.lieferscheinart as art, UPPER(l.status) as status, l.id
FROM lieferschein AS l
LEFT JOIN projekt AS p ON p.id=l.projekt
LEFT JOIN adresse AS lfr ON l.lieferant=lfr.id
LEFT JOIN adresse AS adr ON l.adresse=adr.id ".$abJoin;
$where = " ( l.status='angelegt') " . $app->erp->ProjektRechte('p.id', true, 'l.vertriebid');
// gesamt anzahl
$count = "SELECT COUNT(l.id) FROM lieferschein l WHERE ( l.status='angelegt')";
$moreinfo = true;
break;
case 'lieferscheineoffene':
$allowed['lieferschein'] = array('list');
// headings
$heading = array('', 'Lieferschein', 'Vom', 'Kd-Nr.', 'Kunde', 'Land', 'Projekt', 'Versand', 'Art', 'Status', 'Menü');
$width = array('1%', '10%', '10%', '10%', '35%', '5%', '1%', '1%', '1%', '1%', '1%', '1%');
$findcols = array('open', 'l.belegnr', 'l.datum', 'if(l.lieferantenretoure=1,lfr.lieferantennummer,adr.kundennummer)', 'l.name', 'l.land',$projectCol, 'l.versandart', 'l.lieferscheinart', 'l.status', 'id');
$searchsql = array('l.id', 'DATE_FORMAT(l.datum,\'%d.%m.%Y\')', 'l.belegnr', 'if(l.lieferantenretoure=1,lfr.lieferantennummer,adr.kundennummer)', 'l.name', 'l.land', $projectCol, 'l.status', 'l.plz', 'l.id', 'adr.freifeld1', 'l.ihrebestellnummer','l.internebezeichnung','l.versandart');
$defaultorder = 11; //Optional wenn andere Reihenfolge gewuenscht
$defaultorderdesc = 1;
$menu = "";
$menucol = 10;
// SQL statement
$sql = "SELECT SQL_CALC_FOUND_ROWS l.id,'Conf->WFconf['defaulttheme']}/images/details_open.png class=details>' as open, l.belegnr, DATE_FORMAT(l.datum,'%d.%m.%Y') as vom, if(l.lieferantenretoure=1,lfr.lieferantennummer,adr.kundennummer) as kundennummer,
CONCAT(" . $app->erp->MarkerUseredit("l.name", "l.useredittimestamp") . ", if(l.internebezeichnung!='',CONCAT('
',l.internebezeichnung,''),'')) as kunde,
l.land as land, $projectCol as projekt, l.versandart as versandart,
l.lieferscheinart as art, UPPER(l.status) as status, l.id
FROM lieferschein AS l
LEFT JOIN projekt AS p ON p.id=l.projekt
LEFT JOIN adresse AS lfr ON l.lieferant=lfr.id
LEFT JOIN adresse AS adr ON l.adresse=adr.id ".$abJoin;
$where = " l.id!='' AND l.status='freigegeben' " . $app->erp->ProjektRechte('p.id', true, 'l.vertriebid');
// gesamt anzahl
$count = "SELECT COUNT(l.id) FROM lieferschein l WHERE l.status='freigegeben'";
$moreinfo = true;
break;
case "lieferschein_seriennummern_assistent":
$id = $app->Secure->GetGET('id');
$heading = array('Artikel-Nr.','Artikel','Lagerplatz','Seriennummer','Menü');
$width = array('10%','10%','10%','10%', '1%');
$findcols = array('art.nummer','art.name_de','t2.seriennummer','lag.kurzbezeichnung','t2.id');
$searchsql = array('art.nummer','art.name_de','t2.seriennummer','lag.kurzbezeichnung' );
$sql = "SELECT SQL_CALC_FOUND_ROWS t2.id, art.nummer, art.name_de, lag.kurzbezeichnung, t2.seriennummer ,CONCAT('this,',t2.menge)
FROM (
SELECT ls.id, t.artikel, t.menge, count(s.id) as co, ls.seriennummer, ls.lager_platz
FROM lager_seriennummern AS ls
INNER JOIN
(
SELECT lp.artikel, sum(menge) as menge
FROM lieferschein_position AS lp
WHERE lp.lieferschein = '$id'
GROUP BY lp.artikel
) AS t ON ls.artikel = t.artikel
LEFT JOIN seriennummern s ON s.artikel = t.artikel AND s.lieferschein = '$id' AND s.seriennummer <> ''
GROUP BY ls.id, t.artikel
) AS t2
INNER JOIN artikel AS art ON t2.artikel = art.id
INNER JOIN lager_platz AS lag ON t2.lager_platz = lag.id
";
$menu = "Conf->WFconf['defaulttheme']}/images/forward.svg border=\"0\">";
$where = "t2.menge > t2.co ";
$count = "SELECT count(t2.id)
FROM (SELECT ls.id, t.artikel, t.menge, count(s.id) as co, ls.seriennummer, ls.lager_platz
FROM lager_seriennummern ls
INNER JOIN
(SELECT lp.artikel, sum(menge) as menge
FROM lieferschein_position lp WHERE lp.lieferschein = '$id') t
ON ls.artikel = lp.artikel LEFT JOIN seriennummern s ON s.artikel = t.artikel AND s.lieferschein = '$id' AND s.seriennummer <> ''
GROUP BY ls.id, t.artikel) t2
INNER JOIN artikel art ON t2.artikel = art.id
INNER JOIN lager_platz lag ON t2.lager_platz = lag.id
WHERE $where";
break;
}
$erg = [];
foreach($erlaubtevars as $k => $v)
{
if(isset($$v)){
$erg[$v] = $$v;
}
}
return $erg;
}
/** @var Application $app */
function __construct($app, $intern = false)
{
$this->app=$app;
if($intern)return;
$this->app->ActionHandlerInit($this);
$this->app->ActionHandler("list","LieferscheinList");
$this->app->ActionHandler("create","LieferscheinCreate");
$this->app->ActionHandler("paketmarke","LieferscheinPaketmarke");
$this->app->ActionHandler("positionen","LieferscheinPositionen");
$this->app->ActionHandler("uplieferscheinposition","UpLieferscheinPosition");
$this->app->ActionHandler("dellieferscheinposition","DelLieferscheinPosition");
$this->app->ActionHandler("copylieferscheinposition","CopyLieferscheinPosition");
$this->app->ActionHandler("downlieferscheinposition","DownLieferscheinPosition");
$this->app->ActionHandler("positioneneditpopup","LieferscheinPositionenEditPopup");
$this->app->ActionHandler("edit","LieferscheinEdit");
$this->app->ActionHandler("copy","LieferscheinCopy");
$this->app->ActionHandler("delete","LieferscheinDelete");
$this->app->ActionHandler("freigabe","LieferscheinFreigabe");
$this->app->ActionHandler("abschicken","LieferscheinAbschicken");
$this->app->ActionHandler("abschliessen","LieferscheinAbschliessen");
$this->app->ActionHandler("auslagern","LieferscheinAuslagern");
$this->app->ActionHandler("umlagern","LieferscheinUmlagern");
$this->app->ActionHandler("pdf","LieferscheinPDF");
$this->app->ActionHandler("inlinepdf","LieferscheinInlinePDF");
$this->app->ActionHandler("protokoll","LieferscheinProtokoll");
$this->app->ActionHandler("minidetail","LieferscheinMiniDetail");
$this->app->ActionHandler("minidetailkommissionierung","LieferscheinMiniDetailkommissionierung");
$this->app->ActionHandler("editable","LieferscheinEditable");
$this->app->ActionHandler("livetabelle","LieferscheinLiveTabelle");
$this->app->ActionHandler("schreibschutz","LieferscheinSchreibschutz");
$this->app->ActionHandler("positionenetiketten","LieferscheinPositionenEtiketten");
$this->app->ActionHandler("rechnung","LieferscheinRechnung");
$this->app->ActionHandler("proformarechnung","LieferscheinProformarechnung");
$this->app->ActionHandler("dateien","LieferscheinDateien");
$this->app->ActionHandler("pdffromarchive","LieferscheinPDFfromArchiv");
$this->app->ActionHandler("archivierepdf","LieferscheinArchivierePDF");
$this->app->DefaultActionHandler("list");
$id = $this->app->Secure->GetGET("id");
$nummer = $this->app->Secure->GetPOST("adresse");
if($nummer==''){
if($id > 0){
$adresse = $this->app->DB->Select("SELECT a.name FROM lieferschein b INNER JOIN adresse a ON a.id=b.adresse WHERE b.id='$id' LIMIT 1");
}else{
$adresse = 0;
}
}
else{
$adresse = $nummer;
}
if($id > 0){
$nummer = $this->app->DB->Select("SELECT b.belegnr FROM lieferschein b LEFT JOIN adresse a ON a.id=b.adresse WHERE b.id='$id' LIMIT 1");
}else{
$nummer = '';
}
if($nummer=="" || $nummer==0) $nummer="ohne Nummer";
$this->app->Tpl->Set('UEBERSCHRIFT',"Lieferschein: ".$adresse." (".$nummer.")");
$this->app->Tpl->Set('FARBE',"[FARBE3]");
$this->app->erp->Headlines('Lieferschein');
$this->app->ActionHandlerListen($app);
}
public function Install(){
$this->app->erp->RegisterHook('supersearch_detail', 'lieferschein', 'LieferscheinSupersearchDetail');
}
/**
* @param \Xentral\Widgets\SuperSearch\Query\DetailQuery $detailQuery
* @param \Xentral\Widgets\SuperSearch\Result\ResultDetail $detailResult
*
* @return void
*/
public function LieferscheinSupersearchDetail($detailQuery, $detailResult)
{
if($detailQuery->getGroupKey() === 'deliverynote'){
$this->LieferscheinSupersearchDetailDeliveryNote($detailQuery, $detailResult);
}
if ($detailQuery->getGroupKey() === 'trackingnumber') {
$this->LieferscheinSupersearchDetailTrackingNumber($detailQuery, $detailResult);
}
}
/**
* @param \Xentral\Widgets\SuperSearch\Query\DetailQuery $detailQuery
* @param \Xentral\Widgets\SuperSearch\Result\ResultDetail $detailResult
*
* @return void
*/
public function LieferscheinSupersearchDetailDeliveryNote($detailQuery, $detailResult)
{
if ($detailQuery->getGroupKey() !== 'deliverynote') {
return;
}
$lieferscheinId = $detailQuery->getItemIdentifier();
$sql = sprintf(
"SELECT l.id, l.belegnr, l.datum FROM `lieferschein` AS `l` WHERE l.id = '%s' LIMIT 1",
$this->app->DB->real_escape_string($lieferscheinId)
);
$lieferschein = $this->app->DB->SelectRow($sql);
if (empty($lieferschein)) {
return;
}
$datum = date('d.m.Y', strtotime($lieferschein['datum']));
$detailResult->setTitle(sprintf('Lieferschein %s vom %s', $lieferschein['belegnr'], $datum));
$detailResult->addButton('Lieferschein Details', sprintf('index.php?module=lieferschein&action=edit&id=%s', $lieferschein['id']));
$detailResult->setMiniDetailUrl(sprintf('index.php?module=lieferschein&action=minidetail&id=%s', $lieferschein['id']));
}
/**
* @param \Xentral\Widgets\SuperSearch\Query\DetailQuery $detailQuery
* @param \Xentral\Widgets\SuperSearch\Result\ResultDetail $detailResult
*
* @return void
*/
public function LieferscheinSupersearchDetailTrackingNumber($detailQuery, $detailResult)
{
if ($detailQuery->getGroupKey() !== 'trackingnumber') {
return;
}
$versandId = $detailQuery->getItemIdentifier();
$sql = sprintf(
"SELECT v.lieferschein FROM `versand` AS `v` WHERE v.id = '%s' LIMIT 1",
$this->app->DB->real_escape_string($versandId)
);
$lieferscheinId = $this->app->DB->Select($sql);
$sql = sprintf(
"SELECT l.id, l.belegnr, l.datum FROM `lieferschein` AS `l` WHERE l.id = '%s' LIMIT 1",
$this->app->DB->real_escape_string($lieferscheinId)
);
$lieferschein = $this->app->DB->SelectRow($sql);
if (empty($lieferschein)) {
return;
}
$datum = date('d.m.Y', strtotime($lieferschein['datum']));
$detailResult->setTitle(sprintf('Lieferschein %s vom %s', $lieferschein['belegnr'], $datum));
$detailResult->addButton('Lieferschein Details', sprintf('index.php?module=lieferschein&action=edit&id=%s', $lieferschein['id']));
$detailResult->setMiniDetailUrl(sprintf('index.php?module=lieferschein&action=minidetail&id=%s', $lieferschein['id']));
}
function LieferscheinMiniDetailkommissionierung()
{
$id = (int)$this->app->Secure->GetGET('id');
$table = new EasyTable($this->app);
$table->Query("SELECT date_format(datum,'%d.%m.%Y') as Datum,belegnr as Lieferschein FROM lieferschein WHERE kommissionierung = '$id' ORDER BY id",0,"");
echo $table->DisplayNew('return', 'Lieferschein', 'noAction');
exit;
}
/**
* @param int $deliveryNoteId
*/
public function archivePdf($deliveryNoteId)
{
if($deliveryNoteId <= 0) {
return;
}
$projectId = $this->app->DB->Select(
sprintf(
'SELECT projekt FROM lieferschein WHERE id = %d LIMIT 1',
$deliveryNoteId
)
);
if(class_exists('LieferscheinPDFCustom')) {
$Brief = new LieferscheinPDFCustom($this->app, $projectId);
}
else{
$Brief = new LieferscheinPDF($this->app, $projectId);
}
$Brief->GetLieferschein($deliveryNoteId);
$tmpfile = $Brief->displayTMP();
$Brief->ArchiviereDocument(1);
unlink($tmpfile);
$this->app->DB->Update(
sprintf(
'UPDATE lieferschein SET schreibschutz=1 WHERE id = %d',
$deliveryNoteId
)
);
}
function LieferscheinArchivierePDF()
{
$id = (int)$this->app->Secure->GetGET('id');
$this->archivePdf($id);
header('Location: index.php?module=lieferschein&action=edit&id='.$id);
exit;
}
function LieferscheinAbschliessen() {
$id = $this->app->Secure->GetGET("id");
if($id > 0)
{
$this->app->DB->Update("UPDATE lieferschein SET status='abgeschlossen' WHERE id='$id' LIMIT 1");
$this->app->erp->LieferscheinProtokoll($id,"Lieferschein abgeschlossen");
$auftragid = $this->app->DB->Select("SELECT auftragid FROM lieferschein WHERE id='$id' LIMIT 1");
if($auftragid && $this->app->erp->ModulVorhanden('produktion') && method_exists($this->app->erp, 'ProduktionEinzelnBerechnen'))
{
$produktionen = $this->app->DB->SelectArr("SELECT id FROM produktion WHERE auftragid = '$auftragid'");
if($produktionen)
{
foreach($produktionen as $v)$this->app->erp->ProduktionEinzelnBerechnen($v['id']);
}
}
}
$msg = $this->app->erp->base64_url_encode("Der Lieferschein wurde als abgeschlossen markiert!
");
header("Location: index.php?module=lieferschein&action=list&msg=$msg");
exit;
}
function LieferscheinAuslagern()
{
$id = (int)$this->app->Secure->GetGET("id");
if($id > 0)
{
if($this->LieferscheinCheck($id))
{
// wenn alles lagernd ist und nicht ausgelagert ist
$standardlager = $this->app->DB->Select("SELECT standardlager FROM lieferschein WHERE id = '$id' LIMIT 1");
if($standardlager && $this->app->DB->Select("SELECT count(id) FROM lager") <= 1)$standardlager = 0;
$this->app->erp->LieferscheinAuslagern($id, true, $standardlager, 'lieferschein', 0, true);
$this->app->erp->RunHook('lieferschein_auslagern', 1, $id);
$msg = $this->app->erp->base64_url_encode("Der Lieferschein wurde ausgelagert!
");
} else {
if($this->LieferscheinCheck($id, true)) {
$article = $this->LieferscheinCheck($id, 'article');
$typ = '';
if(!empty($article)) {
$mhd = $article['mindesthaltbarkeitsdatum'] > 0;
$charge = $article['chargenverwaltung'] > 0;
$sn = $article['seriennummern'] != '' && $article['seriennummern'] !== 'keine';
if($mhd && $charge) {
$typ = 'MHD/Chargen';
}
elseif($mhd) {
$typ = 'MHDs';
}
elseif($charge) {
$typ = 'Chargen';
}
elseif($sn) {
$typ = 'Seriennummern';
}
}
if(!empty($typ)) {
$msg = $this->app->erp->base64_url_encode(
"Der Lieferschein kann nicht ausgelagert werden da zu wenig ".$typ." im Artikel ".$article['nummer']." vorhanden sind!
"
);
}
else {
$msg = $this->app->erp->base64_url_encode(
"Der Lieferschein kann nicht ausgelagert werden da zu wenig MHD/Chargen/Seriennummern in einem Artikel vorhanden sind!
"
);
}
}
else{
// wenn nur teilmenge ausgelagert werden konnte
$msg = $this->app->erp->base64_url_encode("Der Lieferschein kann nicht ausgelagert werden da nicht alle Artikel vorhanden sind!
");
}
}
header("Location: index.php?module=lieferschein&action=edit&id=$id&msg=$msg");
}
exit;
}
function LieferscheinUmlagern()
{
$id = (int)$this->app->Secure->GetGET("id");
$sql = "SELECT belegnr, name, status, umgelagert, standardlager FROM lieferschein WHERE id='$id'";
$lieferschein = $this->app->DB->SelectArr($sql)[0];
$belegnr = $lieferschein['belegnr'];
$name = $lieferschein['name'];
$status = $lieferschein['status'];
$umgelagert = $lieferschein['umgelagert'];
$quelllagerplatz = $this->app->Secure->GetPOST('quelllagerplatz');
$ziellagerplatz = $this->app->Secure->GetPOST('ziellagerplatz');
$quellager_id = $this->app->erp->ReplaceLagerPlatz(true, $quelllagerplatz, true);
$ziellagerplatz_id = $this->app->erp->ReplaceLagerPlatz(true, $ziellagerplatz, true);
if (empty($quellager_id)) {
$quellager_id = $lieferschein['standardlager'];
}
if ($status != "versendet" && $status != "freigegeben") {
exit();
}
$submit = $this->app->Secure->GetPOST('submit');
$erneut = $this->app->Secure->GetPOST('erneut');
if ($umgelagert && !$erneut) {
$this->app->Tpl->AddMessage('warning',"Lieferschein wurde bereits umgelagert.");
} else {
$this->app->Tpl->Set('ERNEUT_UMLAGERN_HIDDEN','hidden');
$submit = $this->app->Secure->GetPOST('submit');
if ($submit == 'umlagern') {
if (empty($quellager_id) || empty($ziellagerplatz_id)) {
$this->app->Tpl->AddMessage('error',"Bitte Quell- und Ziellagerplatz angeben.");
} else {
$sql = "SELECT artikel, name_de, a.nummer AS artikelnummer, SUM(menge) AS menge FROM lieferschein_position lp INNER JOIN artikel a ON a.id = lp.artikel WHERE lp.lieferschein = $id GROUP BY lp.artikel";
$positionen = $this->app->DB->SelectArr($sql);
$menge_ok = true;
$fehlt = array();
foreach ($positionen as $position) {
$sql = "SELECT SUM(menge) as menge FROM lager_platz_inhalt WHERE lager_platz=$quellager_id AND artikel = ".$position['artikel'];
$menge_lager = $this->app->DB->SelectArr($sql)[0]['menge'];
if ($menge_lager < $position['menge']) {
$menge_ok = false;
$fehlt[] = array('Nummer' => $position['artikelnummer'],'Artikel' => $position['name_de'],'Lieferschein Menge' => (int) $position['menge'],'Lager Menge' => empty($menge_lager)?'-':(int) $menge_lager);
}
}
if ($menge_ok) {
foreach ($positionen as $position) {
$artikel = $position['artikel'];
$menge = $position['menge'];
$projekt = 0;
$grund = "Umlagern Lieferschein ".$belegnr;
$importer = "";
$paketannahme = "";
$doctype = "lieferschein";
$doctypeId = $id;
$this->app->erp->LagerAuslagernRegal($artikel,$quellager_id,$menge,$projekt,$grund,$importer,$doctype,$doctypeid);
$this->app->erp->LagerEinlagern($artikel,$menge,$ziellagerplatz_id,$projekt,$grund,$importer,$paketannahme,$doctype,$doctypeid);
}
$sql = "UPDATE lieferschein SET umgelagert = 1 WHERE id = ".$id;
$this->app->DB->Update($sql);
$this->app->erp->LieferscheinProtokoll($id,"Lieferschein umgelagert von ".$quelllagerplatz." nach ".$ziellagerplatz);
$this->app->Tpl->AddMessage('success','Erfolgreich umgelagert.');
$erneut = null;
} else {
$this->app->Tpl->AddMessage('error',"Mengen im Quelllagerplatz nicht ausreichend.");
$tmp = new EasyTable($this->app);
$tmp->headings = array('Nummer','Artikel','Lieferschein Menge','Lager Menge','');
$tmp->datasets = $fehlt;
$tmp->DisplayNew('MESSAGETABLE',null,"noAction");
} // Menge ok
} // Lager ok
} // umlagern
} // $umgelagert
$this->LieferscheinMenu();
$this->app->YUI->AutoComplete("quelllagerplatz", "lagerplatz");
$this->app->YUI->AutoComplete("ziellagerplatz", "lagerplatz");
$this->app->Tpl->Set('KURZUEBERSCHRIFT2',"Lieferschein $belegnr umlagern");
$this->app->Tpl->Set('TABTEXT',"Umlagern");
$this->app->Tpl->Set('QUELLLAGERPLATZ',$this->app->erp->ReplaceLagerPlatz(false, $quellager_id, false));
$this->app->Tpl->Set('ZIELLAGERPLATZ',$this->app->erp->ReplaceLagerPlatz(false, $ziellagerplatz_id, false));
$this->app->Tpl->Set('ERNEUT_CHECKED',$erneut?'checked':'');
$this->app->Tpl->Parse('PAGE',"lieferschein_umlagern.tpl");
}
function LieferscheinPaketmarke()
{
$id = (int)$this->app->Secure->GetGET("id");
$this->LieferscheinMenu();
$this->app->Tpl->Set('TABTEXT',"Paketmarke");
$result = $this->app->DB->SelectRow(
"SELECT v.id, v.modul
FROM lieferschein l
LEFT JOIN versandarten v ON (l.versandart=v.type AND v.projekt in (l.projekt, 0))
WHERE l.id=$id
AND v.aktiv = 1 AND v.ausprojekt = 0 AND v.modul != ''
ORDER BY v.projekt DESC LIMIT 1");
if (empty($result['modul']) || empty($result['id'])) {
// $this->app->Tpl->addMessage('error', 'Bitte zuerst eine gültige Versandart auswählen', false, 'PAGE');
$this->app->Location->execute("index.php?module=versandpakete&action=add&lieferschein=".$id);
return;
}
$versandmodul = $this->app->erp->LoadVersandModul($result['modul'], $result['id']);
$gewicht = $this->app->erp->VersandartMindestgewicht($id, 'lieferschein');
$versandmodul->Paketmarke('TAB1', docType: 'lieferschein', docId: $id, gewicht: $gewicht);
$this->app->Tpl->Parse('PAGE',"tabview.tpl");
}
function LieferscheinEditable()
{
$this->app->YUI->AARLGEditable();
}
function LieferscheinSchreibschutz()
{
$id = $this->app->Secure->GetGET("id");
$this->app->DB->Update("UPDATE lieferschein SET zuarchivieren='1' WHERE id='$id'");
$this->app->DB->Update("UPDATE lieferschein SET schreibschutz='0' WHERE id='$id'");
header("Location: index.php?module=lieferschein&action=edit&id=$id");
exit;
}
function LieferscheinLiveTabelle()
{
$id = $this->app->Secure->GetGET("id");
$status = $this->app->DB->Select("SELECT status FROM lieferschein WHERE id='$id' LIMIT 1");
$table = new EasyTable($this->app);
if($status=="freigegeben")
{
$table->Query("SELECT SUBSTRING(ap.bezeichnung,1,20) as artikel, ap.nummer as Nummer, ap.menge as M,
if(a.porto,'-',if((SELECT SUM(l.menge) FROM lager_platz_inhalt l WHERE l.artikel=ap.artikel) > ap.menge,(SELECT SUM(l.menge) FROM lager_platz_inhalt l WHERE l.artikel=ap.artikel),
if((SELECT SUM(l.menge) FROM lager_platz_inhalt l WHERE l.artikel=ap.artikel)>0,CONCAT('',(SELECT SUM(l.menge) FROM lager_platz_inhalt l WHERE l.artikel=ap.artikel),''),
if(a.lagerartikel=1,'aus','kein Lagerartikel' ))) as L
FROM lieferschein_position ap, artikel a WHERE ap.lieferschein='$id' AND a.id=ap.artikel",0,"");
$artikel = $table->DisplayNew("return","A","noAction");
} else {
$table->Query("SELECT SUBSTRING(ap.bezeichnung,1,20) as artikel, ap.nummer as Nummer, ap.menge as M
FROM lieferschein_position ap, artikel a WHERE ap.lieferschein='$id' AND a.id=ap.artikel",0,"");
$artikel = $table->DisplayNew("return","Menge","noAction");
}
echo $artikel;
exit;
}
function LieferscheinCopy()
{
$id = $this->app->Secure->GetGET("id");
$newid = $this->CopyLieferschein($id);
header("Location: index.php?module=lieferschein&action=edit&id=$newid");
exit;
}
function Custom($typ)
{
return '';
}
function LieferscheinIconMenu($id,$prefix="")
{
$status = $this->app->DB->Select("SELECT status FROM lieferschein WHERE id='$id' LIMIT 1");
$adresse = $this->app->DB->Select("SELECT adresse FROM lieferschein WHERE id='$id' LIMIT 1");
$lieferantenretoure = $this->app->DB->Select("SELECT lieferantenretoure FROM lieferschein WHERE id='$id' LIMIT 1");
if($adresse > 0 && ($status=="angelegt" || $status=="")) {
$freigabe = "";
}
$seriennummern_check_result = $this->app->erp->SeriennummernCheckLieferschein(lieferschein_id: $id, ignore_date: true, only_missing: true, group_lieferschein: true);
if(($status=="versendet" || $status=="freigegeben") && $lieferantenretoure=="1" && empty($seriennummern_check_result)) {
$abschliessen = "";
}
$checkifrgexists = $this->app->DB->Select("SELECT id FROM rechnung WHERE lieferschein='$id' LIMIT 1");
$optioncustom = $this->Custom('option');
$casecustom = $this->Custom('case');
$projekt = $this->app->DB->Select("SELECT projekt FROM lieferschein WHERE id='$id' LIMIT 1");
$auslagern = '';
$erneut = '';
$casehook = '';
$optionhook = '';
$this->app->erp->RunHook('lieferscheiniconmenu_option', 5, $id, $casehook, $optionhook, $status, $prefix);
$hookoption = '';
$hookcase = '';
$this->app->erp->RunHook('Lieferschein_Aktion_option',3, $id, $status, $hookoption);
$this->app->erp->RunHook('Lieferschein_Aktion_case',3, $id, $status, $hookcase);
$bestellmengelagerartikel = $this->app->DB->Select("SELECT sum(lp.menge) as bestellmenge from lieferschein_position lp INNER JOIN artikel a on a.id=lp.artikel where a.lagerartikel=1 AND lp.lieferschein = '$id'");
$liefermengelagerartikel = $this->app->DB->Select("SELECT sum(lp.geliefert) as liefermenge from lieferschein_position lp INNER JOIN artikel a on a.id=lp.artikel where a.lagerartikel=1 AND lp.lieferschein = '$id'");
$liefermengelagerartikel2 = $this->app->DB->Select("SELECT sum(olp.menge) as liefermenge from lieferschein_position lp INNER JOIN objekt_lager_platz olp ON olp.objekt='lieferschein' AND olp.parameter=lp.id INNER JOIN artikel a on a.id=lp.artikel where a.lagerartikel=1 AND lp.lieferschein = '$id'");
$lieferscheinpositionen = (int)$this->app->DB->Select("SELECT count(id) from lieferschein_position where lieferschein = '$id'");
$mengegeliefert = $this->app->DB->Select("SELECT ifnull(sum(geliefert),0) from lieferschein_position where lieferschein = '$id'");
$schreibschutz = $this->app->DB->Select("SELECT schreibschutz FROM lieferschein WHERE id='$id' LIMIT 1");
$mengegeliefert = $mengegeliefert + $this->app->DB->Select("SELECT ifnull(sum(olp.menge),0)+0 FROM objekt_lager_platz olp INNER JOIN lieferschein_position lp ON olp.objekt='lieferschein' AND olp.parameter=lp.id AND lp.lieferschein = '$id'");
if ($status == "versendet" || $status == "freigegeben") {
if($mengegeliefert <= 0 && $liefermengelagerartikel > 0 && $schreibschutz=="1" && $status!='angelegt' && $status!='storniert') {
$auslagern = '';
}else{
//12.07.19 LG lieferscheinlager als kommissionierverfahren zum if hinzugefuegt
$projektkommissionierverfahren = $this->app->DB->Select("SELECT kommissionierverfahren FROM projekt where id = '$projekt'");
if($projekt && ($projektkommissionierverfahren == "" || $projektkommissionierverfahren == "rechnungsmail" || $projektkommissionierverfahren == "lieferschein" || $projektkommissionierverfahren == "lieferscheinscan" || $projektkommissionierverfahren == "lieferscheinlager" || $projektkommissionierverfahren == "lieferscheinlagerscan"))
{
if(($bestellmengelagerartikel != $liefermengelagerartikel && $bestellmengelagerartikel != $liefermengelagerartikel2) && $status!='angelegt' && $status!='storniert') {
$auslagern = '';
}
}
}
$optionumlagern = "";
if (empty($seriennummern_check_result)) {
$abschicken = "";
if($status!="angelegt" && $lieferantenretoure!="1")
{
$alsrechnung = "";
if($this->app->erp->RechteVorhanden('lieferschein', 'proformarechnung') && $this->app->erp->ModulVorhanden('proformarechnung'))
{
$alsrechnung .= "";
}
}
}
}
if($this->app->erp->RechteVorhanden('belegeimport', 'belegcsvexport'))
{
$casebelegeimport = "case 'belegeimport': window.location.href='index.php?module=belegeimport&action=belegcsvexport&cmd=lieferschein&id=%value%'; break;";
$optionbelegeimport = "";
}
$etiketten_positionen = $this->app->DB->Select("SELECT etiketten_positionen FROM projekt WHERE id='$projekt' LIMIT 1");
$etikett_adresse = $this->app->DB->SelectRow("SELECT lieferscheinpositionetikettdruck, lieferscheinpositionetikett FROM adresse WHERE id ='".$adresse."' LIMIT 1");
if ($etikett_adresse['lieferscheinpositionetikettdruck']) {
$etiketten_positionen = 1;
}
if($etiketten_positionen > 0)
$etiketten = "";
$casestorno = "case 'storno': if(!confirm('Wirklich stornieren?')) return document.getElementById('aktion$prefix').selectedIndex = 0; else window.location.href='index.php?module=lieferschein&action=delete&id=%value%'; break;";
if($this->app->DB->Select("SELECT olp.id FROM objekt_lager_platz olp INNER JOIN lieferschein_position pos ON olp.parameter = pos.id AND olp.objekt = 'lieferschein' WHERE pos.lieferschein = '$id' LIMIT 1"))$casestorno = "case 'storno': if(!confirm('Wirklich stornieren?')) return document.getElementById('aktion$prefix').selectedIndex = 0; else if(!confirm('Artikel wieder einlagern?')) window.location.href='index.php?module=lieferschein&action=delete&id=%value%';else window.location.href='index.php?module=lieferschein&action=delete&cmd=einlagern&id=%value%'; break;";
if($checkifrgexists>0) $extendtext = "HINWEIS: Es existiert bereits eine Rechnung zu diesem Lieferschein! "; else $extendtext="";
$menu ="
Aktion:
";
//$tracking = $this->AuftragTrackingTabelle($id);
$menu = str_replace('%value%',$id,$menu);
return $menu;
}
function LieferscheinPDFfromArchiv()
{
$id = $this->app->Secure->GetGET("id");
$archiv = $this->app->DB->Select("SELECT table_id from pdfarchiv where id = '$id' LIMIT 1");
if($archiv)
{
$projekt = $this->app->DB->Select("SELECT projekt from lieferschein where id = '".(int)$archiv."'");
}
if(class_exists('LieferscheinPDFCustom'))
{
if($archiv)$Brief = new LieferscheinPDFCustom($this->app,$projekt);
}else{
if($archiv)$Brief = new LieferscheinPDF($this->app,$projekt);
}
if($archiv && $content = $Brief->getArchivByID($id))
{
header('Content-type: application/pdf');
header('Content-Disposition: attachment; filename="'.$content['belegnr'].'.pdf"');
echo $content['file'];
$this->app->ExitXentral();
}
header('Content-type: application/pdf');
header('Content-Disposition: attachment; filename="Fehler.pdf"');
$this->app->ExitXentral();
}
function LieferscheinMiniDetail($parsetarget="",$menu=true)
{
$id = $this->app->Secure->GetGET("id");
if($id > 0){
$auftragArr = $this->app->DB->SelectArr("SELECT * FROM lieferschein WHERE id='$id' LIMIT 1");
}
$kundennummer = '';
$projekt = 0;
$kundenname = '';
$lieferantenretoure = '';
$lieferantenretoureinfo = '';
if(!empty($auftragArr)) {
$kundennummer = $auftragArr[0]['kundennummer'];
$projektid = $auftragArr[0]['projekt'];
$projekt = '';
if($projektid){
$projekt = $this->app->DB->Select("SELECT abkuerzung FROM projekt WHERE id='{$auftragArr[0]['projekt']}' LIMIT 1");
}
$kundenname = '';
if($auftragArr[0]['adresse'] > 0){
$kundenname = $this->app->DB->Select("SELECT name FROM adresse WHERE id='{$auftragArr[0]['adresse']}' LIMIT 1");
}
$lieferantenretoure = $auftragArr[0]['lieferantenretoure'];
$lieferantenretoureinfo = $auftragArr[0]['lieferantenretoureinfo'];
}
$this->app->Tpl->Set('LIEFERANTENRETOUREINFO',$lieferantenretoureinfo);
if($lieferantenretoure!='1') {
$this->app->Tpl->Set('LIEFERANTENRETOUREINFOSTART','