OpenXE/www/pages/lieferschein.php
2024-07-26 14:51:45 +02:00

2723 lines
130 KiB
PHP

<?php
/*
* SPDX-FileCopyrightText: 2022 Andreas Palm
* SPDX-FileCopyrightText: 2019 Xentral (c) Xentral ERP Software GmbH, Fuggerstrasse 11, D-86150 Augsburg, Germany
*
* SPDX-License-Identifier: LicenseRef-EGPL-3.1
*/
/*
**** 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 ****
*/
?>
<?php
use Xentral\Components\Pdf\Exception\PdfComponentExceptionInterface;
use Xentral\Components\Pdf\PdfMerger;
include '_gen/lieferschein.php';
class Lieferschein extends GenLieferschein
{
/**
* @param Application $app
* @param string $name
* @param array $erlaubtevars
*
* @return array
*/
static function TableSearch($app, $name, $erlaubtevars)
{
$useProjectAb = $app->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&uuml;');
$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 = "<table cellpadding=0 cellspacing=0><tr><td nowrap><a href=\"index.php?module=lieferschein&action=edit&id=%value%\"><img src=\"themes/{$app->Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\"></a>" .
"&nbsp;<a href=\"#\" onclick=DeleteDialogLieferschein(\"%value%\");><img src=\"themes/{$app->Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\"></a>" .
// "&nbsp;<a href=\"index.php?module=paketmarke&action=create&frame=false&sid=lieferschein&id=%value%\" class=\"popup\"><img src=\"themes/{$this->app->Conf->WFconf['defaulttheme']}/images/stamp.png\" border=\"0\"></a>".
"&nbsp;<a href=\"index.php?module=lieferschein&action=pdf&id=%value%\"><img src=\"themes/{$app->Conf->WFconf['defaulttheme']}/images/pdf.svg\" border=\"0\"></a>".
"&nbsp;<a href=\"#\" class=\"label-manager\" data-label-column-number=\"5\" data-label-reference-id=\"%value%\" data-label-reference-table=\"lieferscheineinbearbeitung\"><span class=\"label-manager-icon\"></span></a>"."</td></tr></table>";
$menucol = 10;
// SQL statement
$sql = "SELECT SQL_CALC_FOUND_ROWS l.id,'<img src=./themes/{$app->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('<br><i style=color:#999>',l.internebezeichnung,'</i>'),'')) 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&uuml;');
$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 = "<table cellpadding=0 cellspacing=0><tr><td nowrap><a href=\"index.php?module=lieferschein&action=edit&id=%value%\"><img src=\"themes/{$app->Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\"></a>" . "&nbsp;<a href=\"#\" onclick=DeleteDialogLieferschein(\"%value%\");><img src=\"themes/{$app->Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\"></a>" .
// "&nbsp;<a href=\"index.php?module=paketmarke&action=create&frame=false&sid=lieferschein&id=%value%\" class=\"popup\"><img src=\"themes/{$this->app->Conf->WFconf['defaulttheme']}/images/stamp.png\" border=\"0\"></a>".
"&nbsp;<a href=\"index.php?module=lieferschein&action=pdf&id=%value%\"><img src=\"themes/{$app->Conf->WFconf['defaulttheme']}/images/pdf.svg\" border=\"0\"></a></td></tr></table>";
$menucol = 10;
// SQL statement
$sql = "SELECT SQL_CALC_FOUND_ROWS l.id,'<img src=./themes/{$app->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('<br><i style=color:#999>',l.internebezeichnung,'</i>'),'')) 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&uuml;');
$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 = "<a href=\"#\" onclick=\"uebernehme(%value%);\" ><img src=./themes/{$app->Conf->WFconf['defaulttheme']}/images/forward.svg border=\"0\"></a>";
$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:&nbsp;".$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 <small>vom %s</small>', $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 <small>vom %s</small>', $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("<div class=\"info\">Der Lieferschein wurde als abgeschlossen markiert!</div>");
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("<div class=\"info\">Der Lieferschein wurde ausgelagert!</div>");
} 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(
"<div class=\"error\">Der Lieferschein kann nicht ausgelagert werden da zu wenig ".$typ." im Artikel ".$article['nummer']." vorhanden sind!</div>"
);
}
else {
$msg = $this->app->erp->base64_url_encode(
"<div class=\"error\">Der Lieferschein kann nicht ausgelagert werden da zu wenig MHD/Chargen/Seriennummern in einem Artikel vorhanden sind!</div>"
);
}
}
else{
// wenn nur teilmenge ausgelagert werden konnte
$msg = $this->app->erp->base64_url_encode("<div class=\"error\">Der Lieferschein kann nicht ausgelagert werden da nicht alle Artikel vorhanden sind!</div>");
}
}
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'];
$quelllager = $this->app->Secure->GetPOST('quelllager');
$ziellager = $this->app->Secure->GetPOST('ziellager');
$quellager_id = $this->app->erp->ReplaceLagerPlatz(true, $quelllager, true);
$ziellager_id = $this->app->erp->ReplaceLagerPlatz(true, $ziellager, 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($ziellager_id)) {
$this->app->Tpl->AddMessage('error',"Bitte Quell- und Ziellager 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,$ziellager_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 ".$quelllager." nach ".$ziellager);
$this->app->Tpl->AddMessage('success','Erfolgreich umgelagert.');
$erneut = null;
} else {
$this->app->Tpl->AddMessage('error',"Mengen im Quelllager 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("quelllager", "lagerplatz");
$this->app->YUI->AutoComplete("ziellager", "lagerplatz");
$this->app->Tpl->Set('KURZUEBERSCHRIFT2',"Lieferschein $belegnr umlagern");
$this->app->Tpl->Set('TABTEXT',"Umlagern");
$this->app->Tpl->Set('QUELLLAGER',$this->app->erp->ReplaceLagerPlatz(false, $quellager_id, false));
$this->app->Tpl->Set('ZIELLAGER',$this->app->erp->ReplaceLagerPlatz(false, $ziellager_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('<font color=red><b>',(SELECT SUM(l.menge) FROM lager_platz_inhalt l WHERE l.artikel=ap.artikel),'</b></font>'),
if(a.lagerartikel=1,'<font color=red><b>aus</b></font>','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 = "<option value=\"freigabe\">Lieferschein freigeben</option>";
if(($status=="versendet" || $status=="freigegeben") && $lieferantenretoure=="1")
$abschliessen = "<option value=\"abschliessen\">Lieferschein abschliessen</option>";
$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 = '<option value="auslagern">Lieferschein auslagern</option>';
}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 = '<option value="auslagern">Lieferschein auslagern</option>';
}
}
}
$optionumlagern = "<option value=\"umlagern\">Lieferschein umlagern</option>";
$abschicken = "<option value=\"abschicken\">Lieferschein abschicken</option>";
if($status!="angelegt" && $lieferantenretoure!="1")
{
$alsrechnung = "<option value=\"rechnung\">als Rechnung weiterf&uuml;hren</option>";
if($this->app->erp->RechteVorhanden('lieferschein', 'proformarechnung') && $this->app->erp->ModulVorhanden('proformarechnung'))
{
$alsrechnung .= "<option value=\"proformarechnung\">als Proformarechnung weiterf&uuml;hren</option>";
}
}
}
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 = "<option value=\"belegeimport\">Export als CSV</option>";
}
$etiketten_positionen = $this->app->DB->Select("SELECT etiketten_positionen FROM projekt WHERE id='$projekt' LIMIT 1");
if($etiketten_positionen > 0)
$etiketten = "<option value=\"positionenetiketten\">Positionen als Etiketten</option>";
$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 ="
<script type=\"text/javascript\">
function onchangelieferschein(cmd)
{
switch(cmd)
{
$casestorno
case 'copy': if(!confirm('Wirklich kopieren?')) return document.getElementById('aktion$prefix').selectedIndex = 0; else window.location.href='index.php?module=lieferschein&action=copy&id=%value%'; break;
case 'pdf': window.location.href='index.php?module=lieferschein&action=pdf&id=%value%'; document.getElementById('aktion$prefix').selectedIndex = 0; break;
case 'positionenetiketten': window.location.href='index.php?module=lieferschein&action=positionenetiketten&id=%value%'; document.getElementById('aktion$prefix').selectedIndex = 0; break;
case 'abschicken': ".$this->app->erp->DokumentAbschickenPopup()." break;
case 'freigabe': window.location.href='index.php?module=lieferschein&action=freigabe&id=%value%'; break;
case 'abschliessen': if(!confirm('Wirklich abschliessen?')) return document.getElementById('aktion$prefix').selectedIndex = 0; else window.location.href='index.php?module=lieferschein&action=abschliessen&id=%value%'; break;
case 'auslagern': if(!confirm('Wirklich$erneut auslagern?')) return document.getElementById('aktion$prefix').selectedIndex = 0; else window.location.href='index.php?module=lieferschein&action=auslagern&id=%value%'; break;
case 'rechnung': if(!confirm('".$extendtext."Wirklich als Rechnung weiterführen?')) return document.getElementById('aktion$prefix').selectedIndex = 0; else window.location.href='index.php?module=lieferschein&action=rechnung&id=%value%'; break;
case 'proformarechnung': if(!confirm('".$extendtext."Wirklich als Proformarechnung weiterführen?')) return document.getElementById('aktion$prefix').selectedIndex = 0; else window.location.href='index.php?module=lieferschein&action=proformarechnung&id=%value%'; break;
$casecustom
$casehook
$hookcase
$casebelegeimport
case 'umlagern': window.location.href='index.php?module=lieferschein&action=umlagern&id=%value%'; break;
}
}
</script>
&nbsp;Aktion:&nbsp;<select id=\"aktion$prefix\" onchange=\"onchangelieferschein(this.value)\">
<option>bitte w&auml;hlen ...</option>
<option value=\"storno\">Lieferschein stornieren</option>
<option value=\"copy\">Lieferschein kopieren</option>
$freigabe
$abschicken
$abschliessen
$auslagern
$optionumlagern
$alsrechnung
$optionbelegeimport
<option value=\"pdf\">PDF &ouml;ffnen</option>
$etiketten
$optioncustom
$optionhook
$hookoption
</select>&nbsp;
<a href=\"index.php?module=lieferschein&action=pdf&id=%value%\" title=\"PDF\"><img border=\"0\" src=\"./themes/new/images/pdf.svg\"></a>
<!-- <a href=\"index.php?module=lieferschein&action=edit&id=%value%\" title=\"Bearbeiten\"><img border=\"0\" src=\"./themes/new/images/edit.svg\"></a>
<a onclick=\"if(!confirm('Wirklich stornieren?')) return false; else window.location.href='index.php?module=lieferschein&action=delete&id=%value%';\" title=\"Stornieren\">
<img src=\"./themes/new/images/delete.svg\" border=\"0\"></a>
<a onclick=\"if(!confirm('Wirklich kopieren?')) return false; else window.location.href='index.php?module=lieferschein&action=copy&id=%value%';\" title=\"Kopieren\">
<img src=\"./themes/new/images/copy.svg\" border=\"0\"></a>-->";
//$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','<!--');
$this->app->Tpl->Set('LIEFERANTENRETOUREINFOENDE','<!--');
}
$this->app->Tpl->Set('LIEFERSCHEINID',$id);
$this->app->Tpl->Set('KUNDE',"<a href=\"index.php?module=adresse&action=edit&id=".$auftragArr[0]['adresse']."\" target=\"_blank\">".$kundennummer."</a> ".$kundenname);
if($this->app->erp->RechteVorhanden('projekt','dashboard')){
$this->app->Tpl->Set('PROJEKT', "<a href=\"index.php?module=projekt&action=dashboard&id=" . $auftragArr[0]['projekt'] . "\" target=\"_blank\">$projekt</a>");
}
else{
$this->app->Tpl->Set('PROJEKT', $projekt);
}
$this->app->Tpl->Set('ZAHLWEISE',$auftragArr[0]['zahlungsweise']);
$this->app->Tpl->Set('STATUS',$auftragArr[0]['status']);
if($auftragArr[0]['auftragid'] > 0){
$orderRow = $this->app->DB->SelectRow(
"SELECT belegnr, projekt FROM auftrag WHERE id='".$auftragArr[0]['auftragid']."' LIMIT 1"
);
if($this->app->erp->ModulVorhanden('batches')) {
$abProjekt = $this->app->DB->Select(
sprintf(
'SELECT abkuerzung FROM projekt WHERE id = %d',
$orderRow['projekt']
)
);
if(!empty($abProjekt)){
$this->app->Tpl->Set('PROJEKT', $abProjekt);
}
}
$belegnr_auftrag = $orderRow['belegnr'];
$this->app->Tpl->Set('AUFTRAG',"<a href=\"index.php?module=auftrag&action=edit&id=".$auftragArr[0]['auftragid']."\" target=\"_blank\">$belegnr_auftrag</a>
&nbsp;<a href=\"index.php?module=auftrag&action=pdf&id=".$auftragArr[0]['auftragid']."\" target=\"blank\"><img src=\"./themes/new/images/pdf.svg\" title=\"Auftrag PDF\" border=\"0\"></a>&nbsp;
<a href=\"index.php?module=auftrag&action=edit&id=".$auftragArr[0]['auftragid']."\" target=\"_blank\"><img src=\"./themes/new/images/edit.svg\" title=\"Auftrag bearbeiten\" border=\"0\"></a>
");
}else{
$this->app->Tpl->Set('AUFTRAG','-');
}
if($auftragArr[0]['auftragid'] > 0){
$rechnung = $this->app->DB->SelectArr(
($auftragArr[0]['auftragid']?
"SELECT
CONCAT('<a href=\"index.php?module=rechnung&action=edit&id=',r.id,'\" target=\"_blank\">',if(r.belegnr='0' OR r.belegnr='','ENTWURF',r.belegnr),'&nbsp;<a href=\"index.php?module=rechnung&action=pdf&id=',r.id,'\"><img src=\"./themes/new/images/pdf.svg\" title=\"Rechnung PDF\" border=\"0\"></a>&nbsp;
<a href=\"index.php?module=rechnung&action=edit&id=',r.id,'\" target=\"_blank\"><img src=\"./themes/new/images/edit.svg\" title=\"Rechnung bearbeiten\" border=\"0\"></a>') as rechnung
FROM rechnung r WHERE r.auftragid='".$auftragArr[0]['auftragid']."' AND r.auftragid <> '0'
union
SELECT
CONCAT('<a href=\"index.php?module=rechnung&action=edit&id=',r.id,'\" target=\"_blank\">',if(r.belegnr='0' OR r.belegnr='','ENTWURF',r.belegnr),'&nbsp;<a href=\"index.php?module=rechnung&action=pdf&id=',r.id,'\"><img src=\"./themes/new/images/pdf.svg\" title=\"Rechnung PDF\" border=\"0\"></a>&nbsp;
<a href=\"index.php?module=rechnung&action=edit&id=',r.id,'\" target=\"_blank\"><img src=\"./themes/new/images/edit.svg\" title=\"Rechnung bearbeiten\" border=\"0\"></a>') as rechnung
FROM rechnung r INNER JOIN sammelrechnung_position s ON r.id = s.rechnung INNER JOIN auftrag_position p ON s.auftrag_position_id = p.id WHERE p.auftrag='".$auftragArr[0]['auftragid']."'
union ":"")."
SELECT
CONCAT('<a href=\"index.php?module=rechnung&action=edit&id=',r.id,'\" target=\"_blank\">',if(r.belegnr='0' OR r.belegnr='','ENTWURF',r.belegnr),'&nbsp;<a href=\"index.php?module=rechnung&action=pdf&id=',r.id,'\"><img src=\"./themes/new/images/pdf.svg\" title=\"Rechnung PDF\" border=\"0\"></a>&nbsp;
<a href=\"index.php?module=rechnung&action=edit&id=',r.id,'\" target=\"_blank\"><img src=\"./themes/new/images/edit.svg\" title=\"Rechnung bearbeiten\" border=\"0\"></a>') as rechnung
FROM rechnung r INNER JOIN sammelrechnung_position s ON r.id = s.rechnung
INNER JOIN lieferschein_position lp ON lp.id = s.lieferschein_position_id
WHERE lp.lieferschein='$id'
"
);
}
else{
if($auftragArr[0]['rechnungid'] > 0){
$rechnung = $this->app->DB->SelectArr("SELECT
CONCAT('<a href=\"index.php?module=rechnung&action=edit&id=',r.id,'\" target=\"_blank\">',if(r.belegnr='0' OR r.belegnr='','ENTWURF',r.belegnr),'&nbsp;<a href=\"index.php?module=rechnung&action=pdf&id=',r.id,'\"><img src=\"./themes/new/images/pdf.svg\" title=\"Rechnung PDF\" border=\"0\"></a>&nbsp;
<a href=\"index.php?module=rechnung&action=edit&id=',r.id,'\" target=\"_blank\"><img src=\"./themes/new/images/edit.svg\" title=\"Rechnung bearbeiten\" border=\"0\"></a>') as rechnung
FROM rechnung r WHERE r.id='".$auftragArr[0]['rechnungid']."' AND r.id <> '0'
union
SELECT
CONCAT('<a href=\"index.php?module=rechnung&action=edit&id=',r.id,'\" target=\"_blank\">',if(r.belegnr='0' OR r.belegnr='','ENTWURF',r.belegnr),'&nbsp;<a href=\"index.php?module=rechnung&action=pdf&id=',r.id,'\"><img src=\"./themes/new/images/pdf.svg\" title=\"Rechnung PDF\" border=\"0\"></a>&nbsp;
<a href=\"index.php?module=rechnung&action=edit&id=',r.id,'\" target=\"_blank\"><img src=\"./themes/new/images/edit.svg\" title=\"Rechnung bearbeiten\" border=\"0\"></a>') as rechnung
FROM rechnung r INNER JOIN sammelrechnung_position s ON r.id = s.rechnung
INNER JOIN lieferschein_position lp ON lp.id = s.lieferschein_position_id
WHERE lp.lieferschein='$id'
");
}
}
$crechnung = !empty($rechnung)?count($rechnung):0;
if($crechnung>0)
{
for($li=0;$li<$crechnung;$li++)
{
$this->app->Tpl->Add('RECHNUNG',$rechnung[$li]['rechnung']);
if($li<(!empty($rechnung)?count($rechnung):0))
$this->app->Tpl->Add('RECHNUNG',"<br>");
}
}
else
$this->app->Tpl->Set('RECHNUNG',"-");
if($auftragArr[0]['ust_befreit']==0)
$this->app->Tpl->Set('STEUER',"Inland");
else if($auftragArr[0]['ust_befreit']==1)
$this->app->Tpl->Set('STEUER',"EU-Lieferung");
else
$this->app->Tpl->Set('STEUER',"Export");
if($menu)
{
$menu = $this->LieferscheinIconMenu($id);
$this->app->Tpl->Set('MENU',$menu);
}
// ARTIKEL
$lieferscheinarr = $this->app->DB->SelectRow("SELECT * FROM lieferschein WHERE id='$id' LIMIT 1");
$status = $lieferscheinarr['status'];//$this->app->DB->Select("SELECT status FROM lieferschein WHERE id='$id' LIMIT 1");
$projekt = $lieferscheinarr['projekt'];
$projektlager = $this->app->DB->Select("SELECT projektlager FROM projekt WHERE id = $projekt");
$auftrag = $lieferscheinarr['auftragid'];
$standardlager = $lieferscheinarr['standardlager'];//$this->app->DB->Select("SELECT standardlager FROM auftrag WHERE id = $auftrag LIMIT 1");
$positionIdsToArticle = $id <= 0?[]:$this->app->DB->SelectPairs(
sprintf(
'SELECT id, artikel FROM lieferschein_position WHERE lieferschein = %d',
$id
)
);
if(empty($positionIdsToArticle)) {
$positionIdsToArticle = [ 0 => 0];
}
//$artikelarr = array_m $this->app->DB->SelectArr("SELECT DISTINCT artikel FROM lieferschein_position WHERE lieferschein = $id");
$artikelids = array_unique(array_values($positionIdsToArticle));
$positionIds = array_keys($positionIdsToArticle);
$artikelidsImplode = implode(',', $artikelids);
$positionIdsImplode = implode(',', $positionIds);
$table = new EasyTable($this->app);
$sql = "SELECT if(CHAR_LENGTH(ap.beschreibung) > 0,CONCAT(ap.bezeichnung,' *'),ap.bezeichnung) as artikel,
CONCAT('<a href=\"index.php?module=artikel&action=edit&id=',ap.artikel,'\" target=\"_blank\">',
ap.nummer,'</a>'
) as Nummer,
a.gewicht as gewicht,
TRIM(ap.menge)+0 as Menge,
if(
a.porto,
'-',
if(
IFNULL(lpi2.menge,0) >= ap.menge AND a.lagerartikel=1,
IF(
ROUND(ap2.offen,7) > 0 AND
ROUND(IFNULL(lpi2.menge,0) - IFNULL(r.menge,0) + IFNULL(r2.menge,0),7) < ROUND(ap2.offen,7)
AND ROUND(IFNULL(r2.menge,0),7) < ROUND(ap2.offen,7),
CONCAT('<b style=\"color:red;\">',".$this->app->erp->FormatMenge('IFNULL(lpi2.menge,0)').",'</b>'),
".$this->app->erp->FormatMenge('IFNULL(lpi2.menge,0)')."
),
if(
IFNULL(lpi2.menge,0)>0 AND a.lagerartikel=1,
CONCAT('<b style=\"color:red;\">',".$this->app->erp->FormatMenge('lpi2.menge').",'</b>'),
if(
a.lagerartikel=1,
'<b style=\"color:red;\">aus</b>',
'kein Lagerartikel'
)
)
)
) as Lager,
CONCAT(".$this->app->erp->FormatMenge('IFNULL(r2.menge,0)').",' von ',"
.$this->app->erp->FormatMenge('IFNULL(r.menge,0)')
.",' (Gesamtres.)')as `Res. für Kunde`
FROM lieferschein_position AS ap
INNER JOIN artikel AS a ON ap.artikel = a.id
INNER JOIN (
SELECT sum(menge-geliefert) as offen, artikel
FROM lieferschein_position
WHERE id IN (".$positionIdsImplode.")
GROUP BY artikel
) as ap2 ON a.id = ap2.artikel
LEFT JOIN (
SELECT sum(lpi.menge) as menge,lpi.artikel
FROM lager_platz_inhalt AS lpi
INNER JOIN lager_platz AS lp
ON lpi.lager_platz = lp.id AND IFNULL(lp.sperrlager,0) = 0 AND IFNULL(lp.autolagersperre,0) = 0
INNER JOIN lager AS `lag` ON lp.lager = `lag`.id
WHERE lpi.artikel IN (".$artikelidsImplode.")
".($standardlager?" AND `lag`.id = $standardlager ":($projektlager?" AND `lag`.projekt = $projekt ":''))."
GROUP BY lpi.artikel
) AS lpi2 ON a.id = lpi2.artikel
LEFT JOIN (
SELECT SUM(menge) as menge,artikel
FROM lager_reserviert
WHERE artikel IN (".$artikelidsImplode.")
".($projektlager || ($standardlager && false)?" AND projekt = $projekt ":'')."
GROUP BY artikel
) r ON a.id = r.artikel
LEFT JOIN (
SELECT SUM(menge) as menge,artikel
FROM lager_reserviert
WHERE ((objekt = 'lieferschein' AND parameter = $id) "
.($auftrag > 0?" OR (objekt = 'auftrag' AND parameter = $auftrag) ":'').")
AND artikel IN (".$artikelidsImplode.")
GROUP BY artikel
) r2 ON a.id = r2.artikel
WHERE ap.id IN (".$positionIdsImplode.") AND ap.lieferschein='$id'
ORDER BY ap.sort, ap.id";
$table->Query($sql,0,"");
$gewichtanzeigen = false;
if($table->datasets) {
foreach($table->datasets as $k => $row) {
if($row['gewicht'] > 0)$gewichtanzeigen = true;
}
}
if(!$gewichtanzeigen)
{
foreach($table->datasets as $k => $row)
{
unset($table->datasets[$k]['gewicht']);
}
$table->headings[2] = $table->headings[3];
$table->headings[3] = $table->headings[4];
$table->headings[4] = $table->headings[5];
unset($table->headings[5]);
}
$artikel = $table->DisplayNew("return","Res. für Kunde","noAction","false",0,0,false);
$this->app->Tpl->Set('ARTIKEL','<div id="artikeltabellelive'.$id.'">'.$artikel.'</div>');
if($auftragArr[0]['lieferantenretoure']=="1" && ($auftragArr[0]['status']=="versendet" || $auftragArr[0]['status']=="freigegeben"))
$this->app->Tpl->Add('ARTIKEL',"<br><center><input type=\"button\" value=\"Lieferschein abschliessen\" onclick=\"window.open('index.php?module=lieferschein&action=abschliessen&id=$id')\"></center>");
if($auftragArr[0]['belegnr']=="0" || $auftragArr[0]['belegnr']=="") $auftragArr[0]['belegnr'] = "ENTWURF";
$this->app->Tpl->Set('BELEGNR',$auftragArr[0]['belegnr']);
$this->app->Tpl->Set('LIEFERSCHEIN',$auftragArr[0]['id']);
$this->app->Tpl->Set('VERSANDART',$auftragArr[0]['versandart']);
/*
$tracking = $this->app->DB->SelectArr("SELECT
if(v.tracking_link IS NOT NULL AND v.tracking_link != '', CONCAT(UPPER(versandunternehmen), ':<a href=\"', v.tracking_link, '\">', v.tracking, '</a>'),
if(versandunternehmen = 'dhlexpress' AND l.land = 'DE' AND v.tracking != '', CONCAT(UPPER(versandunternehmen), ':<a href=\"https://www.dhl.de/de/privatkunden/pakete-empfangen/verfolgen.html?piececode=', v.tracking, '\" target=\"_blank\">', v.tracking, '</a>'),
if(versandunternehmen = 'dhlexpress' AND l.land != 'DE' AND v.tracking != '', CONCAT(UPPER(versandunternehmen), ':<a href=\"https://www.dhl.com/en/hidden/component_library/express/local_express/dhl_de_tracking/de/sendungsverfolgung_dhlde.html?AWB=', v.tracking, '&brand=DHL\" target=\"_blank\">', v.tracking, '</a>'),
if( (versandunternehmen='dhl' OR versandunternehmen='intraship' OR versandunternehmen LIKE '%dhl%') AND v.tracking!='', CONCAT(UPPER(versandunternehmen),':<a href=\"http://nolp.dhl.de/nextt-online-public/set_identcodes.do?lang=de&idc=',v.tracking,'\" target=\"_blank\">',v.tracking,'</a>'),
if(versandunternehmen LIKE '%dpd%',CONCAT(UPPER(versandunternehmen),':<a href=\"https://tracking.dpd.de/parcelstatus/?locale=de_DE&query=',v.tracking,'\" target=\"_blank\">',v.tracking,'</a>'),
if(versandunternehmen LIKE '%ups%' AND v.tracking != '', CONCAT(UPPER(versandunternehmen),':<a href=\"https://www.ups.com/track?loc=de_DE&tracknum=',v.tracking,'\" target=\"_blank\">',v.tracking,'</a>'),
if(versandunternehmen LIKE '%gls%' AND v.tracking != '', CONCAT(UPPER(versandunternehmen),':<a href=\"https://www.gls-group.eu/276-I-PORTAL-WEB/content/GLS/DE03/DE/5004.htm?txtRefNo=',v.tracking,'\" target=\"_blank\">',v.tracking,'</a>'),
if(versandunternehmen LIKE '%postch%' AND v.tracking != '', CONCAT(UPPER(versandunternehmen),':<a href=\"https://service.post.ch/EasyTrack/submitParcelData.do?formattedParcelCodes=',v.tracking,'&from_directentry=True&directSearch=false&p_language=de&VTI-GROUP=1&lang=de&service=ttb\" target=\"_blank\">',v.tracking,'</a>'),
if(v.tracking!='',
CONCAT(UPPER(versandunternehmen),': ',v.tracking),'nicht vorhanden')
)
)
)
)
)
)
)
) as versand2,
if(versandunternehmen = 'dhlexpress' AND l.land = 'DE' AND vp.tracking != '', CONCAT(UPPER(versandunternehmen), ':<a href=\"https://www.dhl.de/de/privatkunden/pakete-empfangen/verfolgen.html?piececode=', vp.tracking, '\" target=\"_blank\">', vp.tracking, '</a>'),
if(versandunternehmen = 'dhlexpress' AND l.land != 'DE' AND vp.tracking != '', CONCAT(UPPER(versandunternehmen), ':<a href=\"https://www.dhl.com/en/hidden/component_library/express/local_express/dhl_de_tracking/de/sendungsverfolgung_dhlde.html?AWB=', vp.tracking, '&brand=DHL\" target=\"_blank\">', vp.tracking, '</a>'),
if( (versandunternehmen='dhl' OR versandunternehmen='intraship') AND vp.tracking!='', CONCAT(UPPER(versandunternehmen),':<a href=\"http://nolp.dhl.de/nextt-online-public/set_identcodes.do?lang=de&idc=',vp.tracking,'\" target=\"_blank\">',vp.tracking,'</a>'),
if(versandunternehmen LIKE '%dpd%',CONCAT(UPPER(versandunternehmen),':<a href=\"https://tracking.dpd.de/parcelstatus/?locale=de_DE&query=',vp.tracking,'\" target=\"_blank\">',vp.tracking,'</a>'),
if(versandunternehmen LIKE '%ups%' AND vp.tracking != '', CONCAT(UPPER(versandunternehmen),':<a href=\"https://www.ups.com/track?loc=de_DE&tracknum=',vp.tracking,'\" target=\"_blank\">',v.tracking,'</a>'),
if(versandunternehmen LIKE '%gls%' AND vp.tracking != '', CONCAT(UPPER(versandunternehmen),':<a href=\"https://www.gls-group.eu/276-I-PORTAL-WEB/content/GLS/DE03/DE/5004.htm?txtRefNo=',vp.tracking,'\" target=\"_blank\">',v.tracking,'</a>'),
if(versandunternehmen LIKE '%postch%' AND v.tracking != '', CONCAT(UPPER(versandunternehmen),':<a href=\"https://service.post.ch/EasyTrack/submitParcelData.do?formattedParcelCodes=',v.tracking,'&from_directentry=True&directSearch=false&p_language=de&VTI-GROUP=1&lang=de&service=ttb\" target=\"_blank\">',v.tracking,'</a>'),
if(vp.tracking!='',
CONCAT(UPPER(versandunternehmen),': ',vp.tracking),'nicht vorhanden')
)
)
)
)
)
)
) as versand3,
v.tracking as tracking2, vp.tracking as tracking3
FROM versand AS v
LEFT JOIN versandpakete AS vp ON v.id = vp.versand
LEFT JOIN lieferschein AS l ON v.lieferschein=l.id WHERE l.id='$id'"
);
$ctracking = !empty($tracking)?count($tracking):0;
for($counti=0;$counti < $ctracking; $counti++)
if($tracking[$counti]['tracking2']!="")
{
if($counti == 0 || $tracking[$counti]['tracking2'] != $tracking[$counti-1]['tracking2'])
{
$tmp[]=$tracking[$counti]['versand2'];
}
if($tracking[$counti]['tracking3'] != '')
{
$tmp[]=$tracking[$counti]['versand3'];
}
}
if (!is_null($tmp)) {
$this->app->Tpl->Set('TRACKING',implode(', ',$tmp));
}
*/
$sql = "SELECT SQL_CALC_FOUND_ROWS
v.id,
v.tracking as tracking,
v.tracking_link
FROM
versandpakete v
LEFT JOIN
versandpaket_lieferschein_position vlp ON v.id = vlp.versandpaket
LEFT JOIN
lieferschein_position lp ON lp.id = vlp.lieferschein_position
LEFT JOIN
lieferschein l ON lp.lieferschein = l.id
WHERE l.id = ".$id." OR v.lieferschein_ohne_pos = ".$id."
GROUP BY
v.id
";
$tracking = $this->app->DB->SelectArr($sql);
$tracking_list = array();
foreach ($tracking as $single_tracking) {
$tracking_list[] = '<a href="index.php?module=versandpakete&action=edit&id='.$single_tracking['id'].'">Paket Nr.'.$single_tracking['id'].'</a>'.
' ('.'<a href="'.$single_tracking['tracking_link'].'">'.$single_tracking['tracking'].'</a>'.')';
}
$this->app->Tpl->Set('TRACKING',implode('<br>',$tracking_list));
$returnOrders = (array)$this->app->DB->SelectArr(
sprintf(
'SELECT ro.id, ro.belegnr, ro.status
FROM `retoure` AS `ro`
LEFT JOIN `auftrag` AS `o` ON ro.auftragid = o.id
LEFT JOIN `lieferschein` AS `dn` ON o.id = dn.auftragid
WHERE ro.lieferscheinid = %d OR dn.id = %d
ORDER BY ro.id',
$id, $id
)
);
$returnOrderHtml = [];
foreach($returnOrders as $returnOrderKey => $returnOrder) {
$returnOrderId = $returnOrder['id'];
$returnOrderNumber = $returnOrder['belegnr'];
if(empty($returnOrderNumber)) {
$returnOrderNumber = 'ENTWURF';
}
$isReturnOrderCanceled = $returnOrder['status'] === 'storniert';
$returnOrderHtml[] = '<a href="index.php?module=retoure&action=edit&id='
.$returnOrderId.'" target="_blank">'
.($isReturnOrderCanceled?'<s>':'').$returnOrderNumber.($isReturnOrderCanceled?'</s>':'')
.'</a>
<a href="index.php?module=retoure&action=pdf&id='
.$returnOrderId
.'" target="_blank"><img src="./themes/new/images/pdf.svg" alt="Retoure PDF" title="Retoure PDF" border="0"></a>
<a href="index.php?module=retoure&action=edit&id='
.$returnOrderId
.'" target="_blank"><img src="./themes/new/images/edit.svg" alt="Retoure bearbeiten" title="Retoure bearbeiten" border="0"></a>';
}
$this->app->Tpl->Set('RETOURE', implode('<br />', $returnOrderHtml));
$this->app->Tpl->Set('LIEFERADRESSE',$this->Lieferadresse($auftragArr[0]['id']));
$tmp = new EasyTable($this->app);
$tmp->Query("SELECT zeit,bearbeiter,grund FROM lieferschein_protokoll WHERE lieferschein='$id' ORDER by zeit DESC",0,"");
$tmp->DisplayNew('PROTOKOLL',"Protokoll","noAction");
if(class_exists('LieferscheinPDFCustom'))
{
$Brief = new LieferscheinPDFCustom($this->app,$auftragArr[0]['projekt']);
}else{
$Brief = new LieferscheinPDF($this->app,$auftragArr[0]['projekt']);
}
$Dokumentenliste = $Brief->getArchivedFiles($id, 'lieferschein');
if($Dokumentenliste)
{
$tmp3 = new EasyTable($this->app);
$tmp3->headings = array('Datum','Belegnr','Bearbeiter','Men&uuml;');
foreach($Dokumentenliste as $k => $v)
{
if(!$v['erstesoriginal'])
{
$tmpr['datum'] = date('d.m.Y H:i:s',strtotime($v['zeitstempel']));
$tmpr['belegnr'] = str_replace('.pdf','',$v['file']);
$tmpr['belegnr'] = substr($tmpr['belegnr'],strrpos($tmpr['belegnr'],'_')+1);
if(isset($v['belegnummer']) && $v['belegnummer'])$tmpr['belegnr'] = $v['belegnummer'];
$tmpr['bearbeiter'] = $v['bearbeiter'];
$tmpr['menu'] = '<a href="index.php?module=lieferschein&action=pdffromarchive&id='.$v['id'].'"><img src="themes/'.$this->app->Conf->WFconf['defaulttheme'].'/images/pdf.svg" /></a>';
$tmp3->datasets[] = $tmpr;
}
}
$tmp3->DisplayNew('PDFARCHIV','Men&uuml;',"noAction");
}
$nettogewicht = $this->app->erp->LieferscheinNettoGewicht($id);
if($nettogewicht!="") {
$nettogewicht = number_format($nettogewicht, 2, ',','.');
$gewichtbezeichnung = $this->app->erp->Firmendaten('gewichtbezeichnung');
if($gewichtbezeichnung == '')$gewichtbezeichnung = 'Kg';
$this->app->Tpl->Set("GEWICHT", $nettogewicht . " ".$gewichtbezeichnung);
}
if($parsetarget=='')
{
$this->app->Tpl->Output("lieferschein_minidetail.tpl");
$this->app->ExitXentral();
}
$this->app->Tpl->Parse($parsetarget,"lieferschein_minidetail.tpl");
}
function LieferscheinFreigabe($id="")
{
if($id<=0)
{
$id = $this->app->Secure->GetGET("id");
$freigabe= $this->app->Secure->GetGET("freigabe");
} else {
$intern = true;
$freigabe=$intern;
}
$this->app->Tpl->Set('TABTEXT',"Freigabe");
$this->app->erp->CheckVertrieb($id,"lieferschein");
$this->app->erp->CheckBearbeiter($id,"lieferschein");
if($freigabe==$id)
{
//$projekt = $this->app->DB->Select("SELECT projekt FROM lieferschein WHERE id='$id' LIMIT 1");
$belegnr = $this->app->DB->Select("SELECT belegnr FROM lieferschein WHERE id='$id' LIMIT 1");
if($belegnr=="")
{
$this->app->erp->BelegFreigabe("lieferschein",$id);
if($intern) return 1;
$msg = $this->app->erp->base64_url_encode("<div class=\"info\">Der Lieferschein wurde freigegeben und kann jetzt versendet werden!</div>");
header("Location: index.php?module=lieferschein&action=edit&id=$id&msg=$msg");
exit;
}
if($intern) return 0;
$msg = $this->app->erp->base64_url_encode("<div class=\"error\">Der Lieferschein wurde bereits freigegeben!</div>");
header("Location: index.php?module=lieferschein&action=edit&id=$id&msg=$msg");
exit;
}
$name = $this->app->DB->Select("SELECT a.name FROM lieferschein b LEFT JOIN adresse a ON a.id=b.adresse WHERE b.id='$id' LIMIT 1");
/*
$summe = $this->app->DB->Select("SELECT FORMAT(SUM(menge*preis),2) FROM lieferschein_position
WHERE lieferschein='$id'");
$waehrung = $this->app->DB->Select("SELECT waehrung FROM lieferschein_position
WHERE lieferschein='$id' LIMIT 1");
*/
$extra = $this->app->erp->CheckboxEntwurfsmodus("lieferschein",$id);
if($this->app->erp->Firmendaten("oneclickrelease")=="1" && $extra=="")
{
$this->app->Location->execute("index.php?module=lieferschein&action=freigabe&id=$id&freigabe=$id");
} else {
$this->app->Tpl->Set('TAB1',"<div class=\"info\">Soll der Lieferschein an <b>$name</b> jetzt freigegeben werden? <input type=\"button\" class=\"btnImportantLarge\" value=\"Jetzt freigeben\" onclick=\"window.location.href='index.php?module=lieferschein&action=freigabe&id=$id&freigabe=$id'\">&nbsp;$extra
</div>");
}
$this->LieferscheinMenu();
$this->app->Tpl->Parse('PAGE',"tabview.tpl");
}
function LieferscheinAbschicken()
{
$this->LieferscheinMenu();
$this->app->erp->DokumentAbschicken();
}
function LieferscheinDelete($id = null)
{
if(is_null($id))
{
$intern = false;
$id = $this->app->Secure->GetGET("id");
}else $intern = true;
$belegnr = $this->app->DB->Select("SELECT belegnr FROM lieferschein WHERE id='$id' LIMIT 1");
$name = $this->app->DB->Select("SELECT name FROM lieferschein WHERE id='$id' LIMIT 1");
$status = $this->app->DB->Select("SELECT status FROM lieferschein WHERE id='$id' LIMIT 1");
$objekt_lager_platz = $this->app->DB->SelectArr("SELECT olp.id, olp.menge, olp.lager_platz, olp.artikel, olp.parameter FROM
lieferschein_position lp INNER JOIN objekt_lager_platz olp ON lp.id = olp.parameter AND olp.objekt = 'lieferschein' AND lp.lieferschein = '$id'");
$cmdEinlagern = $this->app->Secure->GetGET('cmd') === 'einlagern';
if($cmdEinlagern)
{
if($objekt_lager_platz)
{
$projekt = $this->app->DB->Select("SELECT projekt FROM lieferschein WHERE id = '$id' LIMIT 1");
foreach($objekt_lager_platz as $olp) {
$this->app->erp->LagerEinlagern($olp['artikel'],$olp['menge'],$olp['lager_platz'],$projekt,
'Stornierung Lieferschein '.$belegnr,$this->app->User->GetName(),'','lieferschein',$id);
$beleg_chargesnmhd = $this->app->DB->SelectArr("SELECT * FROM `beleg_chargesnmhd` WHERE doctype = 'lieferschein' AND doctypeid = '$id' AND pos = '".$olp['parameter']."'");
$seriennummern = $this->app->DB->SelectArr("SELECT * FROM seriennummern WHERE lieferschein = '$id' AND lieferscheinpos = '".$olp['parameter']."'");
if($seriennummern) {
foreach($seriennummern as $sn) {
$belegesnarr['sn'][] = array('menge'=>1, 'value'=>$sn['seriennummer'],'table'=>'seriennummern','id'=>$sn['id']);
}
}
if($beleg_chargesnmhd) {
$belegesnarr = null;
foreach($beleg_chargesnmhd as $bc) {
$belegesnarr[$bc['type']][] = array('menge'=>$bc['menge'], 'value'=>$bc['wert'],'table'=>'beleg_chargesnmhd','id'=>$bc['id']);
}
}
if(isset($belegesnarr['sn'])){
foreach($belegesnarr['sn'] as $v) {
if(isset($belegesnarr['charge']) && isset($belegesnarr['mhd']))
{
$charge = '';
$mhd = '';
foreach($belegesnarr['charge'] as $k2 => $v2)
{
if($v2['menge'] > 1)
{
$charge = $v2['value'];
$belegesnarr['charge'][$k2]['menge'] -= 1;
break;
}
if($v2['menge'] == 1)
{
$charge = $v2['value'];
unset($belegesnarr['charge'][$k2]);
break;
}
}
foreach($belegesnarr['mhd'] as $k2 => $v2)
{
if($v2['menge'] > 1)
{
$mhd = $v2['value'];
$belegesnarr['mhd'][$k2]['menge'] -= 1;
break;
}
if($v2['menge'] == 1)
{
$mhd = $v2['value'];
unset($belegesnarr['mhd'][$k2]);
break;
}
}
if(isset($v['table']) && $v['table'] === 'seriennummern' && !empty($v['id']))
{
// Xentral Legacy $this->app->DB->Delete("DELETE FROM seriennummern WHERE id = '".$v['id']."' LIMIT 1");
}
elseif(isset($v['table']) && $v['table'] === 'beleg_chargesnmhd' && !empty($v['id'])){
$this->app->DB->Delete("DELETE FROM beleg_chargesnmhd WHERE id = '".$v['id']."' LIMIT 1");
}
if(method_exists($this->app->erp,'AddSeriennummerLager')) {
$this->app->erp->AddSeriennummerLager($olp['artikel'], $olp['lager_platz'], $v['value'],'Stornierung Lieferschein '.$belegnr, '', $mhd, $charge,'lieferschein', $id);
}
if(method_exists($this->app->erp,'AddMindesthaltbarkeitsdatumLagerOhneBewegung')) {
$this->app->erp->AddMindesthaltbarkeitsdatumLagerOhneBewegung($olp['artikel'], 1,$olp['lager_platz'], $mhd, $charge,0,'lieferschein',$id,'Stornierung Lieferschein '.$belegnr);
}
if(method_exists($this->app->erp,'AddChargeLagerOhneBewegung')) {
$this->app->erp->AddChargeLagerOhneBewegung($olp['artikel'],1, $olp['lager_platz'],$mhd,$charge,'Stornierung Lieferschein '.$belegnr,0,'lieferschein',$id);
}
}
elseif(isset($belegesnarr['charge']))
{
$charge = '';
$mhd = '';
foreach($belegesnarr['charge'] as $k2 => $v2) {
if($v2['menge'] > 1)
{
$charge = $v2['value'];
$belegesnarr['charge'][$k2]['menge'] -= 1;
break;
}
if($v2['menge'] == 1) {
$charge = $v2['value'];
unset($belegesnarr['charge'][$k2]);
break;
}
}
if(isset($v['table']) && $v['table'] === 'seriennummern' && !empty($v['id']))
{
// Xentral Legacy $this->app->DB->Delete("DELETE FROM seriennummern WHERE id = '".$v['id']."' LIMIT 1");
}
elseif(isset($v['table']) && $v['table'] === 'beleg_chargesnmhd' && !empty($v['id'])){
$this->app->DB->Delete("DELETE FROM beleg_chargesnmhd WHERE id = '".$v['id']."' LIMIT 1");
}
if(method_exists($this->app->erp,'AddSeriennummerLager')) {
$this->app->erp->AddSeriennummerLager($olp['artikel'],1, $olp['lager_platz'], $v['value'],'Stornierung Lieferschein '.$belegnr, '', $mhd, $charge,'lieferschein',$id);
}
if(method_exists($this->app->erp,'AddChargeLagerOhneBewegung')) {
$this->app->erp->AddChargeLagerOhneBewegung($olp['artikel'], 1,$olp['lager_platz'],$mhd,$charge,'Stornierung Lieferschein '.$belegnr,0,'lieferschein',$id);
}
}
elseif(isset($belegesnarr['mhd']))
{
$charge = '';
$mhd = '';
foreach($belegesnarr['mhd'] as $k2 => $v2)
{
if($v2['menge'] > 1) {
$mhd = $v2['value'];
$belegesnarr['mhd'][$k2]['menge'] -= 1;
break;
}
if($v2['menge'] == 1) {
$mhd = $v2['value'];
unset($belegesnarr['mhd'][$k2]);
break;
}
}
if(isset($v['table']) && $v['table'] === 'seriennummern' && !empty($v['id'])) {
// Xentral Legacy $this->app->DB->Delete("DELETE FROM seriennummern WHERE id = '".$v['id']."' LIMIT 1");
}
elseif(isset($v['table']) && $v['table'] === 'beleg_chargesnmhd' && !empty($v['id'])){
$this->app->DB->Delete("DELETE FROM beleg_chargesnmhd WHERE id = '".$v['id']."' LIMIT 1");
}
if(method_exists($this->app->erp,'AddSeriennummerLager')) {
$this->app->erp->AddSeriennummerLager($olp['artikel'], $olp['lager_platz'], $v['value'],'Stornierung Lieferschein '.$belegnr, '', $mhd, $charge,'lieferschein', $id);
}
if(method_exists($this->app->erp,'AddMindesthaltbarkeitsdatumLagerOhneBewegung')) {
$this->app->erp->AddMindesthaltbarkeitsdatumLagerOhneBewegung($olp['artikel'],1, $olp['lager_platz'], $mhd, $charge, 0, 'lieferschein', $id,'Stornierung Lieferschein '.$belegnr);
}
}
else{
if(isset($v['table']) && $v['table'] === 'seriennummern' && !empty($v['id']))
{
// Xentral Legacy $this->app->DB->Delete("DELETE FROM seriennummern WHERE id = '".$v['id']."' LIMIT 1");
}
elseif(isset($v['table']) && $v['table'] === 'beleg_chargesnmhd' && !empty($v['id'])){
$this->app->DB->Delete("DELETE FROM beleg_chargesnmhd WHERE id = '".$v['id']."' LIMIT 1");
}
if(method_exists($this->app->erp,'AddSeriennummerLager')) {
$this->app->erp->AddSeriennummerLager($olp['artikel'], $olp['lager_platz'], $v['value'],'Stornierung Lieferschein '.$belegnr, '','','','lieferschein', $id);
}
}
}
}
else{
if(isset($belegesnarr['charge']) && isset($belegesnarr['mhd'])) {
foreach($belegesnarr['charge'] as $v2) {
$nochmenge = $v2['menge'];
foreach($belegesnarr['mhd'] as $k3 => $v3) {
if($v3['menge'] <= 0) {
continue;
}
if($nochmenge <= 0) {
break;
}
if($nochmenge == $v3['menge']) {
$mhd = $v3['value'];
$charge = $v2['value'];
if(method_exists($this->app->erp,'AddMindesthaltbarkeitsdatumLagerOhneBewegung')) {
$this->app->erp->AddMindesthaltbarkeitsdatumLagerOhneBewegung($olp['artikel'], $nochmenge,$olp['lager_platz'], $mhd, $charge, 0, 'lieferschein', $id,'Stornierung Lieferschein '.$belegnr);
}
if(method_exists($this->app->erp,'AddChargeLagerOhneBewegung')) {
$this->app->erp->AddChargeLagerOhneBewegung($olp['artikel'],$nochmenge, $olp['lager_platz'],$mhd,$charge,'Stornierung Lieferschein '.$belegnr, 0, 'lieferschein', $id);
}
unset($belegesnarr['mhd'][$k3]);
break;
}
if($nochmenge > $v3['menge']) {
$mhd = $v3['value'];
$charge = $v2['value'];
if(method_exists($this->app->erp,'AddMindesthaltbarkeitsdatumLagerOhneBewegung')) {
$this->app->erp->AddMindesthaltbarkeitsdatumLagerOhneBewegung($olp['artikel'], $v3['menge'],$olp['lager_platz'], $mhd, $charge, 0, 'lieferschein', $id,'Stornierung Lieferschein '.$belegnr);
}
if(method_exists($this->app->erp,'AddChargeLagerOhneBewegung')) {
$this->app->erp->AddChargeLagerOhneBewegung($olp['artikel'],$v3['menge'], $olp['lager_platz'],$mhd,$charge,'Stornierung Lieferschein '.$belegnr, 0, 'lieferschein', $id);
}
unset($belegesnarr['mhd'][$k3]);
$nochmenge -= $v3['menge'];
if($nochmenge <= 0) {
break;
}
continue;
}
if($nochmenge < $v3['menge']) {
$mhd = $v3['value'];
$charge = $v2['value'];
if(method_exists($this->app->erp,'AddMindesthaltbarkeitsdatumLagerOhneBewegung')) {
$this->app->erp->AddMindesthaltbarkeitsdatumLagerOhneBewegung($olp['artikel'], $nochmenge,$olp['lager_platz'], $mhd, $charge, 0, 'lieferschein', $id,'Stornierung Lieferschein '.$belegnr);
}
if(method_exists($this->app->erp,'AddChargeLagerOhneBewegung')) {
$this->app->erp->AddChargeLagerOhneBewegung($olp['artikel'],$nochmenge, $olp['lager_platz'],$mhd,$charge,'Stornierung Lieferschein '.$belegnr, 0, 'lieferschein', $id);
}
$belegesnarr['mhd'][$k3]['menge'] -= $nochmenge;
break;
}
}
}
}
elseif($belegesnarr['charge']) {
foreach($belegesnarr['charge'] as $v2) {
if($v2['menge'] <= 0) {
continue;
}
if(method_exists($this->app->erp,'AddChargeLagerOhneBewegung')) {
$this->app->erp->AddChargeLagerOhneBewegung($olp['artikel'],$v2['menge'], $olp['lager_platz'],'',$v2['value'],'Stornierung Lieferschein '.$belegnr, 0, 'lieferschein', $id);
}
}
}
elseif($belegesnarr['mhd']) {
foreach($belegesnarr['mhd'] as $v2) {
if($v2['menge'] <= 0) {
continue;
}
if(method_exists($this->app->erp, 'AddMindesthaltbarkeitsdatumLagerOhneBewegung')) {
$this->app->erp->AddMindesthaltbarkeitsdatumLagerOhneBewegung($olp['artikel'], $v2['menge'], $olp['lager_platz'], $v2['value'],'',0,'lieferschein', $id,'Stornierung Lieferschein '.$belegnr);
}
}
}
}
$this->app->DB->Delete("DELETE FROM objekt_lager_platz WHERE id = '".$olp['id']."' LIMIT 1");
}
}
}
if($cmdEinlagern || empty($objekt_lager_platz)) {
$sns = $this->app->DB->SelectArr(
sprintf(
'SELECT bc.id, bc.wert, bc.lagerplatz, lp.artikel, bc.wert2, bc.type2
FROM `beleg_chargesnmhd` AS bc
INNER JOIN lieferschein_position AS lp ON bc.pos = lp.id AND bc.`doctypeid` = %d
WHERE bc.`doctype` = \'lieferschein\' AND bc.`doctypeid` = %d AND bc.`type` = \'sn\' AND bc.lagerplatz > 0 AND bc.wert <> \'\'',
$id, $id
)
);
if(!empty($sns)) {
foreach($sns as $sn) {
$mhd = '';
$charge = '';
if($sn['type2'] === 'charge') {
$charge = $sn['wert2'];
}elseif($sn['type2'] === 'mhd') {
$mhd = $sn['wert2'];
}
$this->app->erp->AddSeriennummerLager($sn['artikel'], $sn['lagerplatz'], $sn['wert'],'Stornierung Lieferschein '.$belegnr, '', $mhd, $charge,'lieferschein', $id);
$this->app->DB->Delete(sprintf('DELETE FROM `beleg_chargesnmhd` WHERE id = %d LIMIT 1', $sn['id']));
}
}
}
if($belegnr=="0" || $belegnr=="")
{
$this->DeleteLieferschein($id);
if($intern)return;
$belegnr="ENTWURF";
$msg = $this->app->erp->base64_url_encode("<div class=\"warning\">Der Lieferschein \"$name\" ($belegnr) wurde gel&ouml;scht!</div>");
//header("Location: ".$_SERVER['HTTP_REFERER']."&msg=$msg");
header("Location: index.php?module=lieferschein&action=list&msg=$msg");
exit;
}
if($status=="storniert")
{
$maxbelegnr = $this->app->DB->Select("SELECT MAX(belegnr) FROM lieferschein");
if(0)//$maxbelegnr == $belegnr)
{
$this->app->DB->Delete("DELETE FROM lieferschein_position WHERE lieferschein='$id'");
$this->app->DB->Delete("DELETE FROM lieferschein_protokoll WHERE lieferschein='$id'");
$this->app->DB->Delete("DELETE FROM lieferschein WHERE id='$id'");
$msg = $this->app->erp->base64_url_encode("<div class=\"warning\">Lieferschein \"$name\" ($belegnr) wurde ge&ouml;scht !</div>");
} else
{
$msg = $this->app->erp->base64_url_encode("<div class=\"error\">Lieferschein \"$name\" ($belegnr) kann nicht storniert werden da er bereits storniert ist!</div>");
}
if($intern)return;
header("Location: index.php?module=lieferschein&action=list&msg=$msg");
exit;
}
else {
$this->app->DB->Update("UPDATE lieferschein SET status='storniert' WHERE id='$id' LIMIT 1");
$checkversand = $this->app->DB->Select("SELECT id FROM versand WHERE lieferschein='$id' LIMIT 1");
if($checkversand > 0)
{
if($id > 0) $this->app->DB->Delete("UPDATE versand SET abgeschlossen='1' WHERE lieferschein='$id' AND lieferschein > 0");
$this->app->erp->LieferscheinProtokoll($id,"Lieferschein aus Versandzentrum entfernt");
}
$this->app->erp->LieferscheinProtokoll($id,"Lieferschein storniert");
$msg = $this->app->erp->base64_url_encode("<div class=\"warning\">Das Lieferschein \"$name\" ($belegnr) wurde storniert!</div>");
}
if($intern)return;
header("Location: index.php?module=lieferschein&action=list&msg=$msg#tabs-1");
exit;
}
function LieferscheinProtokoll()
{
$this->LieferscheinMenu();
$id = $this->app->Secure->GetGET("id");
$this->app->Tpl->Set('TABTEXT',"Protokoll");
$tmp = new EasyTable($this->app);
$tmp->Query("SELECT zeit,bearbeiter,grund FROM lieferschein_protokoll WHERE lieferschein='$id' ORDER by zeit DESC",0,"");
$tmp->DisplayNew('TAB1',"Protokoll","noAction");
$this->app->Tpl->Parse('PAGE',"tabview.tpl");
}
function LieferscheinRechnung() {
$id = $this->app->Secure->GetGET("id");
$newid = $this->app->erp->WeiterfuehrenLieferscheinZuRechnung($id);
$this->app->erp->LieferscheinProtokoll($id,"Lieferschein als Rechnung weitergeführt");
header("Location: index.php?module=rechnung&action=edit&id=$newid");
exit;
}
function LieferscheinProformarechnung() {
$id = $this->app->Secure->GetGET("id");
$proformaRechnung = $this->app->erp->LoadModul('proformarechnung');
if(!empty($proformaRechnung) && method_exists($proformaRechnung, 'CreateProformaInvoiceAndPrint')) {
$tmp = $this->app->DB->SelectArr("SELECT adresse,projekt FROM lieferschein WHERE id='$id'");
$newid = $proformaRechnung->createProformaInvoiceFromDeliveryNotes([$id], $tmp[0]['adresse'], $tmp[0]['projekt']);
}
$this->app->erp->LieferscheinProtokoll($id,"Lieferschein als Proformarechnung weitergeführt");
header("Location: index.php?module=proformarechnung&action=edit&id=$newid");
exit;
}
function LieferscheinInlinePDF()
{
$id = $this->app->Secure->GetGET("id");
$this->app->erp->LieferscheinNeuberechnen($id);
$projekt = $this->app->DB->Select("SELECT projekt FROM lieferschein WHERE id='$id' LIMIT 1");
$schreibschutz = $this->app->DB->Select("SELECT schreibschutz FROM lieferschein WHERE id='$id' LIMIT 1");
$frame = $this->app->Secure->GetGET("frame");
if($frame=="")
{
if(class_exists('LieferscheinPDFCustom'))
{
$Brief = new LieferscheinPDFCustom($this->app,$projekt);
}else{
$Brief = new LieferscheinPDF($this->app,$projekt);
}
$Brief->GetLieferschein($id);
$Brief->inlineDocument($schreibschutz);
} else {
$file = urlencode("../../../../index.php?module=lieferschein&action=inlinepdf&id=$id");
echo "<iframe width=\"100%\" height=\"100%\" style=\"height:calc(100vh - 110px)\" src=\"./js/production/generic/web/viewer.html?file=$file\"></iframe>";
exit;
}
}
function LieferscheinPDF()
{
$id = $this->app->Secure->GetGET("id");
$this->app->erp->LieferscheinNeuberechnen($id);
$belegnr = $this->app->DB->Select("SELECT belegnr FROM lieferschein WHERE id='$id' LIMIT 1");
$projekt = $this->app->DB->Select("SELECT projekt FROM lieferschein WHERE id='$id' LIMIT 1");
$schreibschutz = $this->app->DB->Select("SELECT schreibschutz FROM lieferschein WHERE id='$id' LIMIT 1");
// if(is_numeric($belegnr) && $belegnr!=0)
{
if(class_exists('LieferscheinPDFCustom'))
{
$Brief = new LieferscheinPDFCustom($this->app,$projekt);
}else{
$Brief = new LieferscheinPDF($this->app,$projekt);
}
$Brief->GetLieferschein($id);
$Brief->displayDocument($schreibschutz);
}// else
// $this->app->Tpl->Set(MESSAGE,"<div class=\"error\">Noch nicht freigegebene Lieferscheinen k&ouml;nnen nicht als PDF betrachtet werden.!</div>");
$this->LieferscheinList();
}
function LieferscheinMenu()
{
$id = $this->app->Secure->GetGET("id");
$belegnr = $this->app->DB->Select("SELECT belegnr FROM lieferschein WHERE id='$id' LIMIT 1");
$name = $this->app->DB->Select("SELECT name FROM lieferschein WHERE id='$id' LIMIT 1");
if($belegnr=="0" || $belegnr=="") $belegnr ="(Entwurf)";
// $this->app->Tpl->Set(KURZUEBERSCHRIFT,"Lieferschein $belegnr");
$this->app->Tpl->Set('KURZUEBERSCHRIFT2',"$name Lieferschein $belegnr");
// $this->app->erp->MenuEintrag("index.php?module=lieferschein&action=edit&id=$id","Lieferscheindaten");
//$this->app->Tpl->Add(TABS,"<li><a href=\"index.php?module=lieferschein&action=positionen&id=$id\">Positionen</a></li>");
// status bestell
$status = $this->app->DB->Select("SELECT status FROM lieferschein WHERE id='$id' LIMIT 1");
if ($status=="angelegt")
{
$this->app->erp->MenuEintrag("index.php?module=lieferschein&action=freigabe&id=$id","Freigabe");
}
$this->app->erp->MenuEintrag("index.php?module=lieferschein&action=edit&id=$id","Details");
$this->app->erp->MenuEintrag("index.php?module=lieferschein&action=paketmarke&id=$id","Paketmarke");
// $this->app->erp->MenuEintrag("index.php?module=lieferschein&action=abschicken&id=$id","Abschicken / Protokoll");
// $this->app->erp->MenuEintrag("index.php?module=lieferschein&action=protokoll&id=$id","Protokoll");
$this->app->erp->MenuEintrag("index.php?module=lieferschein&action=list","Zur&uuml;ck zur &Uuml;bersicht");
$this->app->erp->RunMenuHook('lieferschein');
}
function LieferscheinPositionen()
{
$this->app->YUI->AARLGPositionen(false);
return;
}
function CopyLieferscheinPosition()
{
$this->app->YUI->SortListEvent("copy","lieferschein_position","lieferschein");
$this->LieferscheinPositionen();
}
function DelLieferscheinPosition()
{
$this->app->YUI->SortListEvent("del","lieferschein_position","lieferschein");
$this->LieferscheinPositionen();
}
function UpLieferscheinPosition()
{
$this->app->YUI->SortListEvent("up","lieferschein_position","lieferschein");
$this->LieferscheinPositionen();
}
function DownLieferscheinPosition()
{
$this->app->YUI->SortListEvent("down","lieferschein_position","lieferschein");
$this->LieferscheinPositionen();
}
function LieferscheinPositionenEditPopup()
{
$id = $this->app->Secure->GetGET("id");
// nach page inhalt des dialogs ausgeben
$filename = "widgets/widget.lieferschein_position_custom.php";
if(is_file($filename))
{
include_once($filename);
$widget = new WidgetLieferschein_positionCustom($this->app,'PAGE');
} else {
$widget = new WidgetLieferschein_position($this->app,'PAGE');
}
$sid= $this->app->DB->Select("SELECT lieferschein FROM lieferschein_position WHERE id='$id' LIMIT 1");
$widget->form->SpecialActionAfterExecute("close_refresh",
"index.php?module=lieferschein&action=positionen&id=$sid");
$widget->Edit();
$this->app->BuildNavigation=false;
}
function LieferscheinEdit()
{
$action = $this->app->Secure->GetGET("action");
$id = $this->app->Secure->GetGET("id");
$sid = $this->app->Secure->GetGET("sid");
$cmd = $this->app->Secure->GetGET("cmd");
if($cmd == 'dadown')
{
$erg['status'] = 0;
$daid = $this->app->Secure->GetPOST("da_id");
$check = $this->app->DB->SelectArr("SELECT ds.* FROM datei_stichwoerter ds INNER JOIN datei d on ds.datei = d.id WHERE ds.id = '$daid' and d.geloescht <> 1 LIMIT 1");
if($check)
{
$sort = $check[0]['sort']+1;
if($sort > 1)
{
$check2 = $this->app->DB->SelectArr("SELECT ds.* FROM datei_stichwoerter ds INNER JOIN datei d on ds.datei = d.id WHERE ds.objekt like 'angebot' AND ds.sort = '$sort' AND d.geloescht <> 1 AND ds.parameter = '$id' LIMIT 1");
if($check2)
{
$erg['status'] = 1;
$erg['from'] = $check2[0]['id'];
$this->app->DB->Update("UPDATE datei_stichwoerter SET sort = sort + 1 WHERE id = '$daid' LIMIT 1");
$this->app->DB->Update("UPDATE datei_stichwoerter SET sort = sort - 1 WHERE id = '".$check2[0]['id']."' LIMIT 1");
}
}
}
echo json_encode($erg);
exit;
}
if($cmd == 'daup')
{
$erg['status'] = 0;
$daid = $this->app->Secure->GetPOST("da_id");
$check = $this->app->DB->SelectArr("SELECT ds.* FROM datei_stichwoerter ds INNER JOIN datei d on ds.datei = d.id WHERE ds.id = '$daid' and d.geloescht <> 1 LIMIT 1");
if($check)
{
$sort = $check[0]['sort']-1;
if($sort > 0)
{
$check2 = $this->app->DB->SelectArr("SELECT ds.* FROM datei_stichwoerter ds INNER JOIN datei d on ds.datei = d.id WHERE ds.objekt like 'lieferschein' AND ds.sort = '$sort' AND d.geloescht <> 1 AND ds.parameter = '$id' LIMIT 1");
if($check2)
{
$erg['status'] = 1;
$erg['from'] = $check2[0]['id'];
$this->app->DB->Update("UPDATE datei_stichwoerter SET sort = sort - 1 WHERE id = '$daid' LIMIT 1");
$this->app->DB->Update("UPDATE datei_stichwoerter SET sort = sort + 1 WHERE id = '".$check2[0]['id']."' LIMIT 1");
}
}
}
echo json_encode($erg);
exit;
}
if($this->app->erp->VertriebAendern("lieferschein",$id,$cmd,$sid))
return;
if($this->app->erp->InnendienstAendern("lieferschein",$id,$cmd,$sid))
return;
if($this->app->erp->DisableModul("lieferschein",$id))
{
//$this->app->erp->MenuEintrag("index.php?module=auftrag&action=list","Zur&uuml;ck zur &Uuml;bersicht");
$this->LieferscheinMenu();
return;
}
$this->app->YUI->AARLGPositionen();
$this->app->erp->CheckVertrieb($id,"lieferschein");
$this->app->erp->CheckBearbeiter($id,"lieferschein");
if($id > 0){
$lieferscheinarr = $this->app->DB->SelectRow("SELECT * FROM lieferschein WHERE id='$id' LIMIT 1");
}
if(!empty($lieferscheinarr)){
$nummer = $lieferscheinarr['belegnr'];//$this->app->DB->Select("SELECT belegnr FROM lieferschein WHERE id='$id' LIMIT 1");
$projekt = $lieferscheinarr['projekt'];//$this->app->DB->Select("SELECT projekt FROM lieferschein WHERE id='$id' LIMIT 1");
$adresse = $lieferscheinarr['adresse'];//$this->app->DB->Select("SELECT adresse FROM lieferschein WHERE id='$id' LIMIT 1");
$lieferant = $lieferscheinarr['lieferant'];//$this->app->DB->Select("SELECT lieferant FROM lieferschein WHERE id='$id' LIMIT 1");
$lieferantenretoure = $lieferscheinarr['lieferantenretoure'];//$this->app->DB->Select("SELECT lieferantenretoure FROM lieferschein WHERE id='$id' LIMIT 1");
$schreibschutz = $lieferscheinarr['schreibschutz'];//$this->app->DB->Select("SELECT schreibschutz FROM lieferschein WHERE id='$id' LIMIT 1");
$status = $lieferscheinarr['status'];//$this->app->DB->Select("SELECT status FROM lieferschein WHERE id='$id' LIMIT 1");
}else{
$nummer = '';
$projekt = 0;
$adresse = 0;
$lieferant = null;
$lieferantenretoure = null;
$schreibschutz = 0;
$status = '';
}
$kundennummer = $this->app->DB->Select("SELECT kundennummer FROM adresse WHERE id='$adresse' LIMIT 1");
if($lieferantenretoure=="1" && $lieferant<=0)
{
$this->app->Tpl->Add('JAVASCRIPT','$(document).ready(function() { if(document.getElementById("adresse"))document.getElementById("adresse").focus(); });');
$this->app->Tpl->Set('MESSAGE',"<div class=\"error\">Pflichtfeld! Bitte geben Sie eine Lieferanten-Nr. an!</div>");
} else if ($adresse <=0 && $lieferantenretoure!="1")
{
$this->app->Tpl->Add('JAVASCRIPT','$(document).ready(function() { if(document.getElementById("adresse"))document.getElementById("adresse").focus(); });');
$this->app->Tpl->Set('MESSAGE',"<div class=\"error\">Pflichtfeld! Bitte geben Sie eine Kunden-Nr. an!</div>");
}
$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'");
$anzahllagerartikel = $this->app->DB->Select("SELECT count(lp.id) as liefermenge from lieferschein_position lp 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'");
$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($mengegeliefert <= 0 && $liefermengelagerartikel <=0 && $schreibschutz=="1" && $status!='angelegt' && $status!='storniert' && $anzahllagerartikel > 0) {
$this->app->Tpl->Add('MESSAGE',"<div class=\"warning\">Der Lieferschein wurde noch nicht ausgelagert! <input type=\"button\" value=\"Jetzt auslagern\" onclick=\"window.location.href='index.php?module=lieferschein&action=auslagern&id=$id'\"></div>");
}else{
$projektkommissionierverfahren = $this->app->DB->Select("SELECT kommissionierverfahren FROM projekt where id = '$projekt'");
if($projekt && ($projektkommissionierverfahren == "" || $projektkommissionierverfahren == "rechnungsmail" || $projektkommissionierverfahren == "lieferschein" || $projektkommissionierverfahren == "lieferscheinscan"))
{
if($mengegeliefert <= 0 && $liefermengelagerartikel <=0 && $status!='angelegt' && $status!='storniert' && $anzahllagerartikel > 0) {
$this->app->Tpl->Add('MESSAGE', "<div class=\"warning\">Der Lieferschein wurde noch nicht ausgelagert! <input type=\"button\" value=\"Jetzt auslagern\" onclick=\"window.location.href='index.php?module=lieferschein&action=auslagern&id=$id'\"></div>");
}else{
if($liefermengelagerartikel > 0 && ($bestellmengelagerartikel != $liefermengelagerartikel)){
$this->app->Tpl->Add('MESSAGE', "<div class=\"warning\">Die Lieferscheinpositionen wurden nachträglich verändert. Ein erneutes Auslagern ist nicht möglich.</div>");
}
}
}
}
$deliveryData = $this->app->DB->SelectRow(
"SELECT l.status, l.zuarchivieren, l.schreibschutz
FROM `lieferschein` AS `l`
WHERE l.id='$id'
LIMIT 1"
);
$status = $deliveryData['status'];
$zuArchivieren = $deliveryData['zuarchivieren'];
$schreibschutz = $deliveryData['schreibschutz'];
if($id > 0 && $zuArchivieren == 1 && $schreibschutz == 1) {
$this->app->erp->PDFArchivieren('lieferschein', $id, true);
}
if($status != "angelegt" && $status != "angelegta" && $status != "a")
{
$Brief = new Briefpapier($this->app);
if($Brief->zuArchivieren($id, "lieferschein"))
{
$this->app->Tpl->Add('MESSAGE',"<div class=\"warning\">Der Lieferschein ist noch nicht archiviert! Bitte versenden oder manuell archivieren.
<input type=\"button\" onclick=\"if(!confirm('Soll das Dokument archiviert werden?')) return false;else window.location.href='index.php?module=lieferschein&action=archivierepdf&id=$id';\" value=\"Manuell archivieren\" /> <input type=\"button\" value=\"Dokument versenden\" onclick=\"DokumentAbschicken('lieferschein',$id)\"></div>");
}elseif(!$this->app->DB->Select("SELECT versendet FROM lieferschein WHERE id = '$id' LIMIT 1"))
{
$this->app->Tpl->Add('MESSAGE',"<div class=\"warning\">Der Lieferschein wurde noch nicht versendet! <input type=\"button\" value=\"Dokument versenden\" onclick=\"DokumentAbschicken('lieferschein',$id)\"></div>");
}
}
if($schreibschutz!="1")// && $this->app->erp->RechteVorhanden("lieferschein","schreibschutz"))
{
$this->app->erp->AnsprechpartnerButton($adresse);
$this->app->erp->LieferadresseButton($adresse);
$this->app->erp->AdresseAlsAnsprechpartner($adresse);
$this->app->erp->LieferscheinNeuberechnen($id);
}
//$this->LieferscheinMiniDetail(MINIDETAIL,false);
$this->app->Tpl->Set('ICONMENU',$this->LieferscheinIconMenu($id));
$this->app->Tpl->Set('ICONMENU2',$this->LieferscheinIconMenu($id,2));
if($nummer!="")
{
$this->app->Tpl->Set('NUMMER',$nummer);
if($this->app->erp->RechteVorhanden("adresse","edit"))
$this->app->Tpl->Set('KUNDE',"&nbsp;&nbsp;&nbsp;Kd-Nr. <a href=\"index.php?module=adresse&action=edit&id=$adresse\" target=\"_blank\">".$kundennummer."</a>");
else
$this->app->Tpl->Set('KUNDE',"&nbsp;&nbsp;&nbsp;Kd-Nr. ".$kundennummer);
}
if($schreibschutz=="1" && $this->app->erp->RechteVorhanden("lieferschein","schreibschutz"))
{
$this->app->Tpl->Add('MESSAGE',"<div class=\"warning\">Dieser Lieferschein ist schreibgesch&uuml;tzt und darf daher nicht mehr bearbeitet werden!&nbsp;<input type=\"button\" value=\"Schreibschutz entfernen\" onclick=\"if(!confirm('Soll der Schreibschutz f&uuml;r diesen Lieferschein wirklich entfernt werden?')) return false;else window.location.href='index.php?module=lieferschein&action=schreibschutz&id=$id';\"></div>");
// $this->app->erp->CommonReadonly();
}
if($schreibschutz=="1")
$this->app->erp->CommonReadonly();
$status= $this->app->DB->Select("SELECT status FROM lieferschein WHERE id='$id' LIMIT 1");
if($status=="")
$this->app->DB->Update("UPDATE lieferschein SET status='angelegt' WHERE id='$id' LIMIT 1");
if($schreibschutz != '1'){
$this->app->Tpl->Set('BUTTON_UEBERNEHMEN', '
<input type="button" value="&uuml;bernehmen" onclick="if(!confirm(\'Soll der neue Kunde wirklich &uuml;bernommen werden? Es werden alle Felder &uuml;berladen.\')) return false;else document.getElementById(\'uebernehmen\').value=1; document.getElementById(\'eprooform\').submit();"/><input type="hidden" id="uebernehmen" name="uebernehmen" value="0">
');
$this->app->Tpl->Set('BUTTON_UEBERNEHMEN2', '
<input type="button" value="&uuml;bernehmen" onclick="if(!confirm(\'Soll der neue Lieferant wirklich &uuml;bernommen werden? Es werden alle Felder &uuml;berladen.\')) return false;else document.getElementById(\'uebernehmen2\').value=1; document.getElementById(\'eprooform\').submit();"/><input type="hidden" id="uebernehmen2" name="uebernehmen2" value="0">
');
}
// immer wenn sich der lieferant genändert hat standartwerte setzen
if($this->app->Secure->GetPOST("adresse")!="")
{
$tmp = $this->app->Secure->GetPOST("adresse");
$kundennummer = $this->app->erp->FirstTillSpace($tmp);
$filter_projekt = $this->app->DB->Select("SELECT projekt FROM lieferschein WHERE id = '$id' LIMIT 1");
//if($filter_projekt)$filter_projekt = $this->app->DB->Select("SELECT id FROM projekt WHERE id= '$filter_projekt' and eigenernummernkreis = 1 LIMIT 1");
$adresse = $this->app->DB->Select("SELECT id FROM adresse WHERE kundennummer='$kundennummer' AND kundennummer!='' AND geloescht=0 ".$this->app->erp->ProjektRechte("projekt")." ORDER by ".($filter_projekt?" projekt = '$filter_projekt' DESC, ":"")." projekt LIMIT 1");
$uebernehmen =$this->app->Secure->GetPOST("uebernehmen");
if($uebernehmen=="1") // nur neuladen bei tastendruck auf uebernehmen // FRAGEN!!!!
{
$this->app->DB->Update("UPDATE lieferschein SET lieferantenretoure=0,lieferant=0 WHERE id='$id'");
$this->LoadLieferscheinStandardwerte($id,$adresse);
header("Location: index.php?module=lieferschein&action=edit&id=$id");
exit;
}
}
if($this->app->Secure->GetPOST("lieferant")!="")
{
$tmplieferant = $this->app->Secure->GetPOST("lieferant");
$lieferantennummer = $this->app->erp->FirstTillSpace($tmplieferant);
$adresselieferant = $this->app->DB->Select("SELECT id FROM adresse WHERE lieferantennummer='$lieferantennummer' AND lieferantennummer!='' AND geloescht=0 LIMIT 1");
$uebernehmen2 =$this->app->Secure->GetPOST("uebernehmen2");
if($uebernehmen2=="1") // nur neuladen bei tastendruck auf uebernehmen // FRAGEN!!!!
{
$this->app->DB->Update("UPDATE lieferschein SET lieferantenretoure=1 WHERE id='$id'");
$this->LoadLieferscheinStandardwerte($id,$adresselieferant,true);
header("Location: index.php?module=lieferschein&action=edit&id=$id");
exit;
}
}
// easy table mit arbeitspaketen YUI als template
$table = new EasyTable($this->app);
$table->Query("SELECT nummer as Nummer, bezeichnung, menge,vpe as VPE
FROM lieferschein_position
WHERE lieferschein='$id'",0,"");
$table->DisplayNew('POSITIONEN',"VPE","noAction");
$status= $this->app->DB->Select("SELECT status FROM lieferschein WHERE id='$id' LIMIT 1");
$this->app->Tpl->Set('STATUS',"<input type=\"text\" size=\"30\" value=\"".$status."\" readonly [COMMONREADONLYINPUT]>");
$this->app->Tpl->Set('AKTIV_TAB1',"selected");
parent::LieferscheinEdit();
if($id > 0 && $this->app->DB->Select(
sprintf(
'SELECT id FROM lieferschein WHERE schreibschutz =1 AND zuarchivieren = 1 AND id = %d',
$id
)
)
) {
$this->app->erp->PDFArchivieren('lieferschein', $id, true);
}
$this->app->erp->MessageHandlerStandardForm();
if($this->app->Secure->GetPOST("weiter")!="")
{
header("Location: index.php?module=lieferschein&action=positionen&id=$id");
exit;
}
$this->LieferscheinMenu();
}
/**
* @param int $deliveryNoteId
*
* @return bool
*/
public function printPostitionLabels($deliveryNoteId)
{
if(empty($deliveryNoteId)) {
return false;
}
$projectId = $this->app->DB->Select(
sprintf(
'SELECT projekt FROM lieferschein WHERE id=%d LIMIT 1',
$deliveryNoteId
)
);
if(empty($projectId)) {
return false;
}
$projectRow = $this->app->DB->SelectRow(
sprintf(
'SELECT etiketten_positionen, etiketten_art, etiketten_drucker, etiketten_sort
FROM projekt
WHERE id = %d',
$projectId
)
);
if(empty($projectRow) || $projectRow['etiketten_positionen'] <= 0) {
return false;
}
/** @var Etiketten $obj */
$obj = $this->app->erp->LoadModul('etiketten');
if(empty($obj) || !method_exists($obj, 'LieferscheinPositionenDrucken')) {
return false;
}
$obj->LieferscheinPositionenDrucken(
$deliveryNoteId,
$projectRow['etiketten_drucker'],
$projectRow['etiketten_art'],
$projectRow['etiketten_sort']
);
return true;
}
public function LieferscheinPositionenEtiketten()
{
$id = $this->app->Secure->GetGET('id');
$this->printPostitionLabels($id);
$this->app->Location->execute('index.php?module=lieferschein&action=edit&id='.$id);
}
function Lieferadresse($id)
{
$data = $this->app->DB->SelectArr("SELECT * FROM lieferschein WHERE id='$id' LIMIT 1");
foreach($data[0] as $key=>$value)
{
if($data[0][$key]!="" && $key!="abweichendelieferadresse" && $key!="land" && $key!="plz" && $key!="lieferland" && $key!="lieferplz") $data[0][$key] = $data[0][$key]."<br>";
}
$rechnungsadresse = $data[0]['name']."".$data[0]['ansprechpartner']."".$data[0]['abteilung']."".$data[0]['unterabteilung'].
"".$data[0]['strasse']."".$data[0]['adresszusatz']."".$data[0]['land']."-".$data[0]['plz']." ".$data[0]['ort'];
return "<table width=\"100%\">
<tr valign=\"top\"><td width=\"50%\"><b>Lieferschein:</b><br><br>$rechnungsadresse</td></tr></table>";
}
function LieferscheinCreate()
{
// $this->app->Tpl->Set(KURZUEBERSCHRIFT,"Lieferschein");
$this->app->erp->MenuEintrag("index.php?module=lieferschein&action=list","Zur&uuml;ck zur &Uuml;bersicht");
$anlegen = $this->app->Secure->GetGET("anlegen");
if($this->app->erp->Firmendaten("schnellanlegen")=="1" && $anlegen!="1")
{
header("Location: index.php?module=lieferschein&action=create&anlegen=1");
exit;
}
if($anlegen != "")
{
$id = $this->app->erp->CreateLieferschein();
$this->app->erp->LieferscheinProtokoll($id,"Lieferschein angelegt");
header("Location: index.php?module=lieferschein&action=edit&id=$id");
exit;
}
$this->app->Tpl->Set('MESSAGE',"<div class=\"warning\">M&ouml;chten Sie eine Lieferschein jetzt anlegen? &nbsp;
<input type=\"button\" onclick=\"window.location.href='index.php?module=lieferschein&action=create&anlegen=1'\" value=\"Ja - Lieferschein jetzt anlegen\"></div><br>");
$this->app->Tpl->Set('TAB1',"
<table width=\"100%\" style=\"background-color: #fff; border: solid 1px #000;\" align=\"center\">
<tr>
<td align=\"center\">
<br><b style=\"font-size: 14pt\">Lieferscheine in Bearbeitung</b>
<br>
<br>
Offene Auftr&auml;ge, die durch andere Mitarbeiter in Bearbeitung sind.
<br>
</td>
</tr>
</table>
<br>
[AUFTRAGE]");
$this->app->Tpl->Set('AKTIV_TAB1',"selected");
$this->app->YUI->TableSearch('AUFTRAGE','lieferscheineinbearbeitung', 'show','','',basename(__FILE__), __CLASS__);
/*
$table = new EasyTable($this->app);
$table->Query("SELECT DATE_FORMAT(datum,'%d.%m.%y') as vom, if(belegnr,belegnr,'ohne Nummer') as beleg, name, status, id
FROM lieferschein WHERE status='angelegt' order by datum DESC, id DESC");
$table->DisplayNew(AUFTRAGE, "<a href=\"index.php?module=lieferschein&action=edit&id=%value%\"><img border=\"0\" src=\"./themes/new/images/edit.svg\"></a>
<a onclick=\"if(!confirm('Wirklich löschen?')) return false; else window.location.href='index.php?module=lieferschein&action=delete&id=%value%';\">
<img src=\"./themes/new/images/delete.svg\" border=\"0\"></a>
<a onclick=\"if(!confirm('Wirklich kopieren?')) return false; else window.location.href='index.php?module=lieferschein&action=copy&id=%value%';\">
<img src=\"./themes/new/images/copy.svg\" border=\"0\"></a>
");
*/
$this->app->Tpl->Set('TABTEXT',"Lieferschein anlegen");
$this->app->Tpl->Parse('PAGE',"tabview.tpl");
//parent::LieferscheinCreate();
}
function LieferscheinDateien()
{
$id = $this->app->Secure->GetGET("id");
$this->LieferscheinMenu();
$this->app->Tpl->Add('UEBERSCHRIFT'," (Dateien)");
$this->app->YUI->DateiUpload('PAGE',"Lieferschein",$id);
}
function LieferscheinList()
{
if($this->app->Secure->GetPOST('ausfuehren') && $this->app->erp->RechteVorhanden('lieferschein', 'edit'))
{
$drucker = $this->app->Secure->GetPOST('seldrucker');
$aktion = $this->app->Secure->GetPOST('sel_aktion');
$auswahl = $this->app->Secure->GetPOST('auswahl');
if($drucker > 0) {
$this->app->erp->BriefpapierHintergrundDisable($drucker);
}
if(is_array($auswahl)) {
$selectedIds = [];
foreach($auswahl as $v) {
$v = (int)$v;
if($v > 0) {
$selectedIds[] = $v;
}
$selectedIds = array_unique($selectedIds);
}
switch($aktion) {
case 'offen':
if(!empty($selectedIds)) {
$this->app->DB->Update(
sprintf(
"UPDATE `lieferschein`
SET `versendet` = 0, `status` = 'freigegeben', `schreibschutz` = 0
WHERE `id` IN (%s)",
implode(',' , $selectedIds)
)
);
}
break;
case 'storniert':
$deliveryNotes = empty($selectedIds)? null: $this->app->DB->SelectArr(
sprintf(
'SELECT id, projekt, status FROM lieferschein WHERE id IN (%s)',
implode(',', $selectedIds)
)
);
if(empty($deliveryNotes)) {
$deliveryNotes = [];
}
foreach($deliveryNotes as $deliveryNote) {
$deliveryNoteId = $deliveryNote['id'];
$projekt = $deliveryNote['projekt'];
$status = $deliveryNote['status'];
if($status==='angelegt' || $status=='') {
$this->app->erp->DeleteLieferschein($deliveryNoteId);
continue;
}
if(class_exists('LieferscheinPDFCustom')) {
$Brief = new LieferscheinPDFCustom($this->app,$projekt);
}
else{
$Brief = new LieferscheinPDF($this->app,$projekt);
}
$Brief->GetLieferschein($deliveryNoteId);
$tmpfile = $Brief->displayTMP();
$Brief->ArchiviereDocument();
$this->app->erp->LieferscheinProtokoll($v,'Lieferschein storniert');
$this->app->DB->Update(
sprintf(
"UPDATE lieferschein
SET status='storniert',schreibschutz=1, versendet = 1
WHERE id = %d AND status!='angelegt'
LIMIT 1",
$deliveryNoteId
)
);
@unlink($tmpfile);
}
break;
case 'versendet':
$deliveryNotes = empty($selectedIds)?[]: $this->app->DB->SelectPairs(
sprintf(
'SELECT id, projekt FROM lieferschein WHERE id in (%s)', implode(',', $selectedIds)
)
);
foreach($deliveryNotes as $deliveryNoteId => $projectId) {
if(class_exists('LieferscheinPDFCustom')) {
$Brief = new LieferscheinPDFCustom($this->app,$projectId);
}
else{
$Brief = new LieferscheinPDF($this->app,$projectId);
}
$this->app->DB->Update(
sprintf(
"UPDATE lieferschein
SET schreibschutz=1, versendet = 1, status='versendet'
WHERE id = %d
AND status != 'storniert'
LIMIT 1",
$deliveryNoteId
)
);
$this->app->erp->LieferscheinProtokoll($deliveryNoteId, 'Lieferschein versendet');
$Brief->GetLieferschein($deliveryNoteId);
$tmpfile = $Brief->displayTMP();
$Brief->ArchiviereDocument();
@unlink($tmpfile);
}
break;
case 'drucken':
if($drucker) {
$this->app->User->SetParameter('lieferschein_list_drucker', $drucker);
$deliveryNotes = empty($selectedIds)?[]: $this->app->DB->SelectPairs(
sprintf(
'SELECT id, projekt FROM lieferschein WHERE id in (%s)', implode(',', $selectedIds)
)
);
foreach($deliveryNotes as $deliveryNoteId => $projectId) {
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();
$this->app->printer->Drucken($drucker,$tmpfile);
$doctype = 'lieferschein';
$adressId = $this->app->DB->Select("SELECT adresse FROM lieferschein WHERE id = '$deliveryNoteId' LIMIT 1");
$this->app->erp->RunHook('dokumentsend_ende', 5, $doctype, $deliveryNoteId, $projectId, $adressId, $aktion);
$this->app->erp->LieferscheinProtokoll($deliveryNoteId, 'Lieferschein versendet');
$this->app->DB->Update(
sprintf(
"UPDATE lieferschein
SET schreibschutz=1, versendet = 1, status='versendet'
WHERE id = %d
AND status != 'storniert'
LIMIT 1",
$deliveryNoteId
)
);
@unlink($tmpfile);
}
}
break;
case 'pdf':
$tmpfile = [];
$deliveryNotes = empty($selectedIds)?[]: $this->app->DB->SelectPairs(
sprintf(
'SELECT id, projekt FROM lieferschein WHERE id in (%s)', implode(',', $selectedIds)
)
);
foreach($deliveryNotes as $deliveryNoteId => $projectId) {
if(class_exists('LieferscheinPDFCustom')) {
$Brief = new LieferscheinPDFCustom($this->app,$projectId);
}
else{
$Brief = new LieferscheinPDF($this->app,$projectId);
}
$Brief->GetLieferschein($deliveryNoteId);
$tmpfile[] = $Brief->displayTMP();
}
if((!empty($tmpfile)?count($tmpfile):0) > 0) {
try {
/** @var PdfMerger $pdfMerger */
$pdfMerger = $this->app->Container->get('PdfMerger');
$mergeOutputPath = realpath($this->app->erp->GetTMP()) . '/' . uniqid('sammelpdf_', true) . '.pdf';
$pdfMerger->merge($tmpfile, $mergeOutputPath);
foreach($tmpfile as $key=>$value) {
unlink($value);
}
header('Content-type:application/pdf');
header('Content-Disposition: attachment;filename='.md5(microtime(true)).'.pdf');
readfile($mergeOutputPath);
$this->app->ExitXentral();
} catch (PdfComponentExceptionInterface $exception) {
echo 'Fehler beim Generieren der Sammelpdf: ' . htmlspecialchars($exception->getMessage());
$this->app->ExitXentral();
}
}
break;
case 'versanduebergabe':
if(!empty($selectedIds)) {
$this->app->DB->Update(
sprintf(
"UPDATE `lieferschein`
SET `versand_status` = 1
WHERE `id` IN (%s) AND `versand_status` = 0",
implode(',' , $selectedIds)
)
);
}
break;
}
}
}
$speichern = $this->app->Secure->GetPOST("speichern");
$lieferantenretoureinfo = $this->app->Secure->GetPOST("lieferantenretoureinfo");
$lieferscheinid = $this->app->Secure->GetPOST("lieferscheinid");
if($lieferantenretoureinfo!="" && $speichern!="" && $lieferscheinid > 0)
$this->app->DB->Update("UPDATE lieferschein SET lieferantenretoureinfo='$lieferantenretoureinfo' WHERE id='$lieferscheinid' LIMIT 1");
$this->app->Tpl->Set('UEBERSCHRIFT',"Lieferscheine");
$backurl = $this->app->Secure->GetGET("backurl");
$backurl = $this->app->erp->base64_url_decode($backurl);
// $this->app->Tpl->Add(KURZUEBERSCHRIFT,"Lieferscheine");
$this->app->erp->MenuEintrag("index.php?module=lieferschein&action=list","&Uuml;bersicht");
$this->app->erp->MenuEintrag("index.php?module=lieferschein&action=create","Neuen Lieferschein anlegen");
if(strlen($backurl)>5)
$this->app->erp->MenuEintrag("$backurl","Zur&uuml;ck zur &Uuml;bersicht");
else
$this->app->erp->MenuEintrag("index.php","Zur&uuml;ck zur &Uuml;bersicht");
$status = $this->app->DB->SelectArr('
SELECT
status
FROM
lieferschein
GROUP BY
status
');
$statusStr = '';
if ($status) {
foreach ($status as $statusE) {
if (empty($statusE['status'])) {
continue;
}
$statusStr .= '<option name="' . $statusE['status'] . '">' . ucfirst($statusE['status']) . '</option>';
}
}
$versandarten = $this->app->DB->SelectArr('
SELECT
versandart
FROM
lieferschein
GROUP BY
versandart
');
$versandartenStr = '';
if ($versandarten) {
foreach ($versandarten as $versandart) {
if (empty($versandart['versandart'])) {
continue;
}
$versandartenStr .= '<option name="' . $versandart['versandart'] . '">' . ucfirst($versandart['versandart']) . '</option>';
}
}
$laender = $this->app->erp->GetSelectLaenderliste();
$laenderStr = '';
foreach ($laender as $landKey => $land) {
$laenderStr .= '<option value="' . $landKey . '">' . $land . '</option>';
}
$this->app->YUI->DatePicker("datumVon");
$this->app->YUI->DatePicker("datumBis");
$this->app->YUI->AutoComplete("projekt", "projektname", 1);
$this->app->YUI->AutoComplete("kundennummer", "kunde", 1);
$this->app->YUI->AutoComplete("lieferscheinnummer", "lieferschein", 1);
$this->app->YUI->AutoComplete("artikel", "artikelnummer", 1);
$this->app->Tpl->Add('STATUS',$statusStr);
$this->app->Tpl->Add('VERSANDARTEN',$versandartenStr);
$this->app->Tpl->Add('LAENDER',$laenderStr);
$this->app->Tpl->Parse('TAB1',"lieferschein_table_filter.tpl");
//$this->app->YUI->TableSearch('TAB2','lieferscheineoffene', 'show','','',basename(__FILE__), __CLASS__);
$this->app->YUI->TableSearch('TAB1',"lieferscheine");
$this->app->YUI->TableSearch('TAB3','lieferscheineinbearbeitung', 'show','','',basename(__FILE__), __CLASS__);
$this->app->Tpl->Set('SELDRUCKER', $this->app->erp->GetSelectDrucker($this->app->User->GetParameter('lieferschein_list_drucker')));
$this->app->Tpl->Parse('PAGE',"lieferscheinuebersicht.tpl");
}
public function DeleteLieferschein($id)
{
if($id <= 0)
{
return;
}
$this->app->DB->Delete("DELETE FROM lieferschein_position WHERE lieferschein='$id'");
$this->app->DB->Delete("DELETE FROM lieferschein_protokoll WHERE lieferschein='$id'");
$this->app->DB->Delete("DELETE FROM lieferschein WHERE id='$id' LIMIT 1");
}
public function CreateLieferschein($adresse='')
{
$projekt = $this->app->erp->GetCreateProjekt($adresse);
$standardlager = $this->app->DB->Select("SELECT l.id FROM projekt p INNER JOIN lager l ON p.standardlager = l.id WHERE p.id = '$projekt' LIMIT 1");
$belegmax = '';
$ohnebriefpapier = $this->app->erp->Firmendaten('lieferschein_ohnebriefpapier');
$this->app->DB->Insert("INSERT INTO lieferschein (datum,bearbeiter,firma,belegnr,adresse,ohne_briefpapier,projekt)
VALUES (NOW(),'".$this->app->User->GetName()."','".$this->app->User->GetFirma()."','$belegmax','$adresse','".$ohnebriefpapier."','".$projekt."')");
$id = $this->app->DB->GetInsertID();
$this->app->erp->LieferscheinProtokoll($id,'Lieferschein angelegt');
if($standardlager){
$this->app->DB->Update("UPDATE lieferschein SET standardlager = '$standardlager' WHERE id = '$id' LIMIT 1");
}
$type='lieferschein';
$this->app->erp->ObjektProtokoll($type,$id,$type.'_create',ucfirst($type).' angelegt');
$this->app->erp->SchnellFreigabe($type,$id);
$this->app->erp->EventAPIAdd('EventLieferscheinCreate',$id,'lieferschein','create');
return $id;
}
public function LoadLieferscheinStandardwerte($id,$adresse,$lieferantenretoure=false)
{
$arr = $this->app->DB->SelectRow("SELECT * FROM adresse WHERE id='$adresse' AND geloescht=0 LIMIT 1");
$field = array('anschreiben','name','abteilung','unterabteilung','strasse','adresszusatz','plz','ort','land','bundesstaat','ustid','email','telefon','telefax','kundennummer','projekt','ust_befreit','typ','titel','lieferbedingung','ansprechpartner');
$rolle_projekt = $this->app->DB->Select("SELECT parameter FROM adresse_rolle WHERE adresse='$adresse' AND subjekt='Kunde' AND objekt='Projekt' AND (bis ='0000-00-00' OR bis <= NOW()) LIMIT 1");
if($rolle_projekt > 0)
{
$arr['projekt'] = $rolle_projekt;
}
foreach($field as $key=>$value)
{
if($value==='projekt' && $this->app->Secure->POST[$value]!="" && 0)
{
$uparr[$value] = $this->app->Secure->POST[$value];
} else {
$this->app->Secure->POST[$value] = str_replace("'", '&apos;',$arr[$value]);
$uparr[$value] = str_replace("'", '&apos;',$arr[$value]);
}
}
$uparr['adresse']=$adresse;
if($lieferantenretoure)
{
$uparr['lieferant']=$adresse;
$uparr['lieferantenretoure'] = 1;
}
$this->app->DB->UpdateArr('lieferschein',$id,'id',$uparr,true);
$uparr=null;
//liefernantenvorlage
$arr = $this->app->DB->SelectRow("SELECT * FROM adresse WHERE id='$adresse' LIMIT 1");
// falls von Benutzer projekt ueberladen werden soll
$projekt_bevorzugt=$this->app->DB->Select("SELECT projekt_bevorzugen FROM user WHERE id='".$this->app->User->GetID()."' LIMIT 1");
if($projekt_bevorzugt=='1')
{
$uparr['projekt'] = $this->app->DB->Select("SELECT projekt FROM user WHERE id='".$this->app->User->GetID()."' LIMIT 1");
$arr['projekt'] = $uparr['projekt'];
$this->app->Secure->POST['projekt']=$this->app->DB->Select("SELECT abkuerzung FROM projekt WHERE id='".$arr['projekt']."' AND id > 0 LIMIT 1");
}
$field = array('versandart');
foreach($field as $key=>$value)
{
$uparr[$value] = $arr[$value];
$this->app->Secure->POST[$value] = $arr[$value];
}
if($uparr['versandart']==''){
$uparr['versandart'] = $this->app->erp->StandardVersandart($arr['projekt']);
}
$this->app->DB->UpdateArr('lieferschein',$id,'id',$uparr,true);
$this->app->erp->LoadStandardLieferadresse($adresse,$id,'lieferschein');
$this->app->erp->LoadAdresseStandard('lieferschein',$id,$adresse);
$this->app->erp->RunHook('erpapi_loadlieferscheinstandardwerte',2, $id, $adresse);
}
public function CopyLieferschein($id)
{
$this->app->DB->Insert('INSERT INTO lieferschein (id) VALUES (NULL)');
$newid = $this->app->DB->GetInsertID();
$arr = $this->app->DB->SelectRow("SELECT NOW() as datum,projekt,bodyzusatz,freitext,adresse,name,abteilung,unterabteilung,strasse,adresszusatz,plz,ort,land,ustid,email,telefon,telefax,betreff,kundennummer,versandart,bearbeiter,'angelegt' as status,typ,standardlager,ansprechpartner,titel,anschreiben,sprache,kostenstelle,
firma,bundesstaat,keinerechnung,ihrebestellnummer,lieferbedingung,internebezeichnung,lieferantenretoure,lieferant FROM lieferschein WHERE id='$id' LIMIT 1");
$this->app->DB->UpdateArr('lieferschein',$newid,'id',$arr, true);
$pos = $this->app->DB->SelectArr("SELECT * FROM lieferschein_position WHERE lieferschein='$id'");
$cpos = !empty((!empty($pos)?count($pos):0))?count($pos):0;
for($i=0;$i<$cpos;$i++){
$this->app->DB->Insert("INSERT INTO lieferschein_position (lieferschein) VALUES ($newid)");
$newposid = $this->app->DB->GetInsertID();
$altzuneu[$pos[$i]['id']] = $newposid;
$pos[$i]['lagertext']='';
$pos[$i]['lieferschein']=$newid;
if($pos[$i]['explodiert_parent'] && isset($altzuneu[$pos[$i]['explodiert_parent']])){
$pos[$i]['explodiert_parent'] = $altzuneu[$pos[$i]['explodiert_parent']];
}
$this->app->DB->UpdateArr('lieferschein_position',$newposid,'id',$pos[$i], true);
}
$this->app->erp->CheckFreifelder('lieferschein',$newid);
$this->app->erp->CopyBelegZwischenpositionen('lieferschein',$id,'lieferschein',$newid);
$this->app->DB->Update("UPDATE lieferschein_position SET geliefert=0, abgerechnet=0 WHERE lieferschein='$newid'");
$this->app->erp->SchnellFreigabe('lieferschein',$newid);
$this->app->erp->LieferscheinNeuberechnen($newid);
return $newid;
}
public function AddLieferscheinPosition($lieferschein, $verkauf,$menge,$datum)
{
$artikel = $this->app->DB->Select("SELECT artikel FROM verkaufspreise WHERE id='$verkauf' LIMIT 1");
$bezeichnunglieferant = $this->app->DB->Select("SELECT name_de FROM artikel WHERE id='$artikel' LIMIT 1");
$bestellnummer = $this->app->DB->Select("SELECT nummer FROM artikel WHERE id='$artikel' LIMIT 1");
$projekt = $this->app->DB->Select("SELECT projekt FROM verkaufspreise WHERE id='$verkauf' LIMIT 1");
$vpe = '';
//$waehrung = $this->app->DB->Select("SELECT waehrung FROM verkaufspreise WHERE id='$verkauf' LIMIT 1");
//$vpe = $this->app->DB->Select("SELECT vpe FROM verkaufspreise WHERE id='$verkauf' LIMIT 1");
$sort = $this->app->DB->Select("SELECT MAX(sort) FROM lieferschein_position WHERE lieferschein='$lieferschein' LIMIT 1");
$sort++;
$this->app->DB->Insert("INSERT INTO lieferschein_position (lieferschein,artikel,bezeichnung,nummer,menge,sort,lieferdatum,status,projekt,vpe)
VALUES ('$lieferschein','$artikel','$bezeichnunglieferant','$bestellnummer','$menge','$sort','$datum','angelegt','$projekt','$vpe')");
}
public function AddLieferscheinPositionArtikelID($lieferschein, $artikel,$menge,$bezeichnung,$beschreibung,$datum)
{
$bestellnummer = $this->app->DB->Select("SELECT nummer FROM artikel WHERE id='$artikel' LIMIT 1");
if($bezeichnung==''){
$bezeichnung = $this->app->DB->Select("SELECT name_de FROM artikel WHERE id='$artikel' LIMIT 1");
}
$vpe = '';
$projekt = 0;
$sort = $this->app->DB->Select("SELECT MAX(sort) FROM lieferschein_position WHERE lieferschein='$lieferschein' LIMIT 1");
$sort++;
$this->app->DB->Insert("INSERT INTO lieferschein_position (lieferschein,artikel,bezeichnung,beschreibung,nummer,menge,sort,lieferdatum,status,projekt,vpe)
VALUES ('$lieferschein','$artikel','$bezeichnung','$beschreibung','$bestellnummer','$menge','$sort','$datum','angelegt','$projekt','$vpe')");
}
/**
* @param int $lieferschein
* @param bool|string $justStorage
*
* @return bool|array
*/
public function LieferscheinCheck($lieferschein, $justStorage = false)
{
$lagercheckjustStorage = $justStorage;
if($justStorage === 'article') {
$lagercheckjustStorage = false;
}
$adresse = 0;
$positionen_vorhanden = null;
$artikelzaehlen=null;
if($lieferschein > 0){
$artikelarr = $this->app->DB->SelectArr(
"SELECT ap.id, ap.artikel, ap.menge, ap.geliefert, art.lagerartikel as artlagerartikel,
ap.nummer,art.chargenverwaltung,art.mindesthaltbarkeitsdatum,art.seriennummern
FROM lieferschein_position AS ap
LEFT JOIN artikel AS art ON ap.artikel = art.id
WHERE ap.lieferschein='$lieferschein' AND ap.geliefert < ap.menge ");
}
$cartikelarr = !empty($artikelarr)?count($artikelarr):0;
for($k=0;$k<$cartikelarr; $k++) {
$menge = $artikelarr[$k]['menge'] - $artikelarr[$k]['gelieferte'];
$artikel = $artikelarr[$k]['artikel'];
$artikel_position_id = $artikelarr[$k]['id'];
$lagerartikel = $artikelarr[$k]['artlagerartikel'];
if($lagerartikel==1)
{
$gesamte_menge_im_lieferschein= $this->app->DB->Select("SELECT SUM(menge-geliefert) FROM lieferschein_position WHERE lieferschein='$lieferschein' AND artikel='$artikel'");
if($gesamte_menge_im_lieferschein > $menge) {
$menge = $gesamte_menge_im_lieferschein;
}
if($this->app->erp->LagerCheck($adresse,$artikel,$menge,'lieferschein',$lieferschein, $lagercheckjustStorage)>0){
$positionen_vorhanden++;
}
else {
if($justStorage === 'article') {
return $artikelarr[$k];
}
return false;
}
$artikelzaehlen++;
}
}
if($positionen_vorhanden==$artikelzaehlen && $positionen_vorhanden !=null && $artikelzaehlen!=null){
return true;
}
return false;
}
}