<?php /* **** COPYRIGHT & LICENSE NOTICE *** DO NOT REMOVE **** * * Xentral (c) Xentral ERP Sorftware GmbH, Fuggerstrasse 11, D-86150 Augsburg, * Germany 2019 * * This file is licensed under the Embedded Projects General Public License *Version 3.1. * * You should have received a copy of this license from your vendor and/or *along with this file; If not, please visit www.wawision.de/Lizenzhinweis * to obtain the text of the corresponding license version. * **** END OF COPYRIGHT & LICENSE NOTICE *** DO NOT REMOVE **** */ ?> <?php use Xentral\Components\Pdf\Exception\PdfComponentExceptionInterface; use Xentral\Components\Pdf\PdfMerger; use Xentral\Components\Http\Session\SessionHandler; use Xentral\Modules\Article\Gateway\ArticleGateway; use Xentral\Modules\ScanArticle\Service\ScanArticleService; use Xentral\Modules\ScanArticle\Exception\ArticleNotFoundException; include '_gen/bestellung.php'; class Bestellung extends GenBestellung { /** @var Application $app */ /** * Bestellung constructor. * * @param Application $app * @param bool $intern */ public function __construct($app, $intern = false) { $this->app=$app; if($intern) { return; } $this->app->ActionHandlerInit($this); $this->app->ActionHandler("list","BestellungList"); $this->app->ActionHandler("create","BestellungCreate"); $this->app->ActionHandler("positionen","BestellungPositionen"); $this->app->ActionHandler("upbestellungposition","UpBestellungPosition"); $this->app->ActionHandler("delbestellungposition","DelBestellungPosition"); $this->app->ActionHandler("copybestellungposition","CopyBestellungPosition"); $this->app->ActionHandler("downbestellungposition","DownBestellungPosition"); $this->app->ActionHandler("positioneneditpopup","BestellungPositionenEditPopup"); $this->app->ActionHandler("edit","BestellungEdit"); $this->app->ActionHandler("copy","BestellungCopy"); $this->app->ActionHandler("auftrag","BestellungAuftrag"); $this->app->ActionHandler("delete","BestellungDelete"); $this->app->ActionHandler("undelete","BestellungUndelete"); $this->app->ActionHandler("freigabe","BestellungFreigabe"); $this->app->ActionHandler("freigegeben","BestellungFreigegeben"); $this->app->ActionHandler("abschicken","BestellungAbschicken"); $this->app->ActionHandler("dateien","BestellungDateien"); $this->app->ActionHandler("pdf","BestellungPDF"); $this->app->ActionHandler("inlinepdf","BestellungInlinePDF"); $this->app->ActionHandler("protokoll","BestellungProtokoll"); $this->app->ActionHandler("minidetail","BestellungMiniDetail"); $this->app->ActionHandler("editable","BestellungEditable"); $this->app->ActionHandler("livetabelle","BestellungLiveTabelle"); $this->app->ActionHandler("schreibschutz","BestellungSchreibschutz"); $this->app->ActionHandler("abschliessen","BestellungAbschliessen"); $this->app->ActionHandler("alsversendet","BestellungAlsversendet"); $this->app->ActionHandler("pdffromarchive","BestellungPDFfromArchiv"); $this->app->ActionHandler("archivierepdf","BestellungArchivierePDF"); $this->app->ActionHandler("einlagern","BestellungEinlagern"); $this->app->ActionHandler("offenepositionen","BestellungOffenePositionen"); $this->app->ActionHandler("steuer","BestellungSteuer"); $this->app->ActionHandler("adressebestellungcopy", "AdresseBestellungCopy"); $this->app->ActionHandler("ean","BestellungEAN"); $this->app->DefaultActionHandler("list"); $id = (int)$this->app->Secure->GetGET('id'); $nummer = $this->app->Secure->GetPOST('adresse'); if($id > 0){ $bestRow = $this->app->DB->Select( sprintf( 'SELECT a.name, b.belegnr FROM bestellung b LEFT JOIN adresse a ON b.adresse = a.id WHERE b.id=%d LIMIT 1', $id ) ); } if($nummer=='' && !empty($bestRow) && gettype($bestRow) == 'array'){ $adresse = $bestRow['name']; } else{ $adresse = $nummer; } if (gettype($bestRow) == 'array') { $nummer = !empty($bestRow)?$bestRow['belegnr']:''; if($nummer=='' || $nummer=='0') { $nummer='ohne Nummer'; } } $this->app->Tpl->Set('UEBERSCHRIFT','Bestellung: '.$adresse.' ('.$nummer.')'); $this->app->Tpl->Set('FARBE','[FARBE2]'); $this->app->erp->Headlines('Bestellung'); $this->app->ActionHandlerListen($app); } function BestellungSteuer() { } function BestellungUndelete() { $id = (int)$this->app->Secure->GetGET('id'); $bestellungRow = $this->app->DB->SelectRow( sprintf("SELECT status, belegnr, name FROM bestellung WHERE id=%d LIMIT 1", $id) ); $status = $bestellungRow['status']; $belegnr = $bestellungRow['belegnr']; $name = $bestellungRow['name']; if($status==='storniert') { $this->app->erp->BestellungProtokoll($id,"Bestellung Storno rückgängig"); $this->app->DB->Update("UPDATE bestellung SET status='freigegeben' WHERE id='$id' LIMIT 1"); $msg = $this->app->erp->base64_url_encode("<div class=\"info\">Bestellung \"$name\" ($belegnr) wurde wieder freigegeben!</div> "); } else { $msg = $this->app->erp->base64_url_encode("<div class=\"error\">Bestellung \"$name\" ($belegnr) kann nicht wieder freigegeben werden, da sie nicht storniert ist.</div> "); } //header("Location: ".$_SERVER['HTTP_REFERER']."&msg=$msg"); $this->app->Location->execute('index.php?module=bestellung&action=list&msg='.$msg); } function BestellungEinlagern($id = null, $lagerplatz = null) { if($id === null) { $intern = false; $id = (int)$this->app->Secure->GetGET('id'); }else{ $intern = true; } if($id) { $arr = $this->app->DB->SelectRow("SELECT projekt,belegnr,status FROM bestellung WHERE id = '$id' LIMIT 1"); if(!empty($arr)){ $projekt = $arr['projekt']; $belegnr = $arr['belegnr']; $status = $arr['status']; if(($status === 'versendet' || $status === 'freigegeben')){ $standardlager = $this->app->DB->Select("SELECT id FROM lager_platz WHERE geloescht <> 1 AND sperrlager <> 1 AND poslager <> 1 ORDER BY id LIMIT 1"); $positionen = $this->app->DB->SelectArr("SELECT id,artikel,menge,geliefert FROM bestellung_position WHERE geliefert < menge AND bestellung='$id'"); if($positionen){ foreach ($positionen as $position) { if($lagerplatz){ $lager = $lagerplatz; }else{ $lager = $this->app->DB->Select("SELECT lager_platz FROM artikel WHERE id = '" . $position['artikel'] . "' LIMIT 1"); if(!$this->app->DB->Select("SELECT id FROM lager_platz WHERE id = '$lager' AND geloescht <> 1 LIMIT 1")) { $lager = $standardlager; } if(!$lager) { $lager = $standardlager; } } if($lager){ $this->app->erp->LagerEinlagern( $position['artikel'], $position['menge'] - $position['geliefert'], $lager, $projekt, 'Wareneingang von Bestellung ' . $belegnr,'','','bestellung',$id ); $this->app->DB->Update("UPDATE bestellung_position SET geliefert = menge WHERE id = '" . $position['id'] . "' LIMIT 1"); } else { $dataartikel = $this->app->DB->SelectRow("SELECT nummer,name_de FROM artikel WHERE id='".$position['artikel']."'"); $msg = $this->app->erp->base64_url_encode("<div class=\"error\">Abbruch beim Einlagern da für den Artikel \"".$dataartikel['nummer']." ".$dataartikel['name_de']."\" kein Standard Lagerplatz definiert wurde oder alle Lager Sperr- oder POS-Lager sind!</div>"); $this->app->Location->execute('index.php?module=bestellung&action=edit&id=' . $id . "&msg=" . $msg); } } $this->app->erp->BestellungProtokoll($id,"Bestellung manuell eingelagert"); $this->checkAbschliessen($id); if($intern) { return true; } $msg = $this->app->erp->base64_url_encode("<div class=\"info\">Die Bestellung wurde eingelagert!</div>"); $this->app->Location->execute('index.php?module=bestellung&action=edit&id=' . $id . "&msg=" . $msg); } } } if($intern) { return false; } $this->app->Location->execute('index.php?module=bestellung&action=edit&id='.$id); } if($intern) { return false; } $this->app->Location->execute('index.php?module=bestellung&action=list'); } function checkAbschliessen($id = 0) { if(!$id) { $id = $this->app->Secure->GetGET('id'); } $id = (int)$id; if($id <= 0) { return; } $status = $this->app->DB->Select("SELECT status FROM bestellung WHERE id = '$id' LIMIT 1"); if(($status === 'versendet' || $status === 'freigegeben')) { $sql = "SELECT bp.id FROM bestellung_position bp LEFT JOIN artikel a ON a.id=bp.artikel WHERE bp.bestellung = '$id' AND a.lagerartikel=1"; $alleLagerArtikelVonBestellung = $this->app->DB->SelectArr($sql); //nur wenn auch Lagerartikel enthalten sind, soll automatisch abgeschlossen werden können. if((!empty($alleLagerArtikelVonBestellung)?count($alleLagerArtikelVonBestellung):0)>0){ $lagerArtikelIds = []; foreach ($alleLagerArtikelVonBestellung as $l){ $lagerArtikelIds[] = $l['id']; } $sql = "SELECT bp.id FROM bestellung_position bp LEFT JOIN artikel a ON a.id=bp.artikel WHERE bp.geliefert < bp.menge AND bp.id IN (".implode(',',$lagerArtikelIds).")"; $offenePositionen = $this->app->DB->SelectArr($sql); if(empty($offenePositionen)){ $this->BestellungAbschliessen($id,true); } } } } function BestellungOffenePositionen() { $this->BestellungListMenu(); $this->app->YUI->TableSearch('TAB1','bestellung_offenepositionen'); $this->app->Tpl->Parse('PAGE','bestellung_offenepositionen.tpl'); } function BestellungArchivierePDF() { $id = (int)$this->app->Secure->GetGET('id'); $projektbriefpapier = $this->app->DB->Select("SELECT projekt FROM bestellung WHERE id = '$id' LIMIT 1"); if(class_exists('BestellungPDFCustom')) { $Brief = new BestellungPDFCustom($this->app,$projektbriefpapier); }else{ $Brief = new BestellungPDF($this->app,$projektbriefpapier); } $Brief->GetBestellung($id); $tmpfile = $Brief->displayTMP(); $Brief->ArchiviereDocument(1); unlink($tmpfile); $this->app->DB->Update("UPDATE bestellung SET schreibschutz='1' WHERE id='$id'"); $this->app->Location->execute('index.php?module=bestellung&action=edit&id='.$id); } function BestellungEditable() { $this->app->YUI->AARLGEditable(); } function BestellungSchreibschutz() { $id = (int)$this->app->Secure->GetGET('id'); $this->app->DB->Update(sprintf('UPDATE bestellung SET zuarchivieren=1, schreibschutz = 0 WHERE id=%d', $id)); $this->app->erp->BestellungProtokoll($id,'Schreibschutz entfernt'); $this->app->Location->execute('index.php?module=bestellung&action=edit&id='.$id); } function BestellungPDFfromArchiv() { $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 bestellung where id = '".(int)$archiv."'"); } if(class_exists('BestellungPDFCustom')) { if($archiv) { $Brief = new BestellungPDFCustom($this->app,$projekt); } }else{ if($archiv) { $Brief = new BestellungPDF($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 BestellungMiniDetail($parsetarget='',$menu=true) { $id = (int)$this->app->Secure->GetGET('id'); $cmd = $this->app->Secure->GetGET('cmd'); if($cmd === 'lager') { if($this->app->DB->Select("SELECT id FROM artikel WHERE id = '$id' AND lagerartikel = 1 LIMIT 1")) { $table = new EasyTable($this->app); $table->Query("SELECT ".$this->app->erp->FormatMenge("sum(lpi.menge)")." as menge, l.bezeichnung as Lager FROM lager l INNER JOIN lager_platz lp ON l.id = lp.lager AND l.geloescht = 0 INNER JOIN lager_platz_inhalt lpi ON lp.id = lpi.lager_platz AND lpi.artikel = $id GROUP BY l.id ORDER BY l.bezeichnung"); $table->align[0] = 'right'; $table->align[1] = 'left'; echo json_encode(array('inhalt'=>'<div class="inlinetooltiptable"><style> div.inlinetooltiptable > table.mkTable > tbody > tr:nth-child(2n+1) td {background-color:#e0e0e0;} </style>'.$table->DisplayNew('return','Lager','noAction').'</div>')); }else{ echo json_encode(array('inhalt'=>'<div class="inlinetooltiptable">kein Lagerartikel</div>')); } $this->app->ExitXentral(); } if($cmd === 'zuordnungAuftragZuBestellung') { $bid = $this->app->Secure->GetGet("id"); $belegnummer = $this->app->DB->Select("SELECT belegnr FROM bestellung WHERE id='$bid'"); $auftragPost = explode(" ",$this->app->Secure->GetPOST("auftrag")); $auftragsnummer = $auftragPost[0]; $auftrag_positionen = $this->app->DB->SelectArr("SELECT ap.id,ap.artikel,ap.menge FROM auftrag_position ap LEFT JOIN auftrag a on a.id=ap.auftrag WHERE a.belegnr='$auftragsnummer' AND a.belegnr!=''"); foreach($auftrag_positionen as $value){ $a_positionen[$value['artikel']]['id'] = $value['id']; $a_positionen[$value['artikel']]['menge'] = $value['menge']; } //jetzt holen wir alle Bestellpositonen für diese Bestellung $bestellung_positionen = $this->app->DB->SelectArr("SELECT bp.id,bp.artikel,bp.menge FROM bestellung_position bp WHERE bp.bestellung='$bid'"); foreach($bestellung_positionen as $position){ // prüfen ob beide artikel gleich sind und ob die menge passt if( (is_array($a_positionen[$position['artikel']])) && ($position['menge'] == $a_positionen[$position['artikel']]['menge']) ) { // wenn wir den Artikel haben und die Anzahl passt $wert = $a_positionen[$position['artikel']]['id']; $this->app->DB->Update("UPDATE bestellung_position SET auftrag_position_id='$wert' WHERE id='{$position['id']}' AND bestellung='$bid' LIMIT 1"); } else{ // wenn wir den Artikel haben aber die Anzahl nicht passt nehmen wir die Position vom ersten Auffinden des Artikel if($position['artikel'] == $a_positionen[$position['artikel']]){ $wert = $a_positionen[$position['artikel']]['id']; $this->app->DB->Update("UPDATE bestellung_position SET auftrag_position_id='$wert' WHERE id='{$position['id']}' AND bestellung='$bid' LIMIT 1"); }else{ // wenn wir keinen Artikel haben nehmen wir den ersten Artikel zum verknüpfen $wert = $a_positionen[0]['id']; $this->app->DB->Update("UPDATE bestellung_position SET auftrag_position_id='$wert' WHERE id='{$position['id']}' AND bestellung='$bid' LIMIT 1"); } } } $zugeordnet = $this->app->DB->Select("SELECT count(id) FROM bestellung_position WHERE bestellung='$bid' AND auftrag_position_id != '0'");; $nichtzugeordnet = $this->app->DB->Select("SELECT count(id) FROM bestellung_position WHERE bestellung='$bid' AND auftrag_position_id = '0'"); $gesamtpositionen = $this->app->DB->Select("SELECT count(id) FROM bestellung_position WHERE bestellung='$bid'"); $data['gesamtpositionen'] = $gesamtpositionen; $data['belegnummer'] = $belegnummer; $data['zugeordnet'] = $zugeordnet; $data['nichtzugeordnet'] = $nichtzugeordnet; $data['error'] = false; echo json_encode($data); $this->app->ExitXentral(); } if($cmd === 'checkmenge') { $bpid = $this->app->Secure->GetPOST("bp"); $ab_menge = round(str_replace(',','.',$this->app->Secure->GetPOST("ab_menge")),8); $data = $this->app->DB->SelectArr("SELECT *, TRIM(menge)+0 as menge FROM bestellung_position WHERE id = '$bpid' LIMIT 1"); if($data) { $data = reset($data); $bestellung = $data['bestellung']; $adresse = $this->app->DB->Select("SELECT adresse FROM bestellung WHERE id = '$bestellung' LIMIT 1"); $ek = $this->app->erp->GetEinkaufspreisArr($data['artikel'], $ab_menge, $adresse, $data['waehrung']); if($ek) { $data = array('menge'=>$ab_menge, 'ab_menge'=>round($ek['ab_menge'],8)); }else{ $data = array('menge'=>$ab_menge, 'ab_menge'=>$ab_menge); } } echo json_encode($data); $this->app->ExitXentral(); } if($cmd === 'getpreis') { $bpid = $this->app->Secure->GetPOST("bp"); $data = $this->app->DB->SelectArr("SELECT *, TRIM(menge)+0 as menge FROM bestellung_position WHERE id = '$bpid' LIMIT 1"); if($data) { $data = reset($data); $data['menge'] = round((float)$data['menge'], 8); $bestellung = $data['bestellung']; $adresse = $this->app->DB->Select("SELECT adresse FROM bestellung WHERE id = '$bestellung' LIMIT 1"); $ek = $this->app->erp->GetEinkaufspreisArr($data['artikel'], $data['menge'], $adresse, $data['waehrung']); if($ek)$data['ab_menge'] = round($ek['ab_menge'], 8); $data['preis'] = number_format(round($data['preis'],8),2,',','.'); $data['auchinstammdaten'] = $this->app->User->GetParameter('bestellung_auchinstammdaten')?1:0; } echo json_encode($data); $this->app->ExitXentral(); } if($cmd === 'savepreis') { $bpid = (int)$this->app->Secure->GetPOST('bp'); $bpRow = $this->app->DB->SelectRow( sprintf( 'SELECT artikel, bestellung FROM bestellung_position WHERE id = %d LIMIT 1' ,$bpid ) ); $artikel = $bpRow['artikel']; $preis = str_replace(',','.',$this->app->Secure->GetPOST('preis')); $auchinstammdaten = $this->app->Secure->GetPOST('auchinstammdaten'); $this->app->User->SetParameter('bestellung_auchinstammdaten', $auchinstammdaten); $waehrung = $this->app->Secure->GetPOST('waehrung'); $bestellnummer = $this->app->Secure->GetPOST('bestellnummer'); $bezeichnung = $this->app->Secure->GetPOST('bezeichnung'); $ab_menge = str_replace(',','.',$this->app->Secure->GetPOST('ab_menge')); $menge = str_replace(',','.',$this->app->Secure->GetPOST('menge')); $bestellung = $bpRow['bestellung']; // Schreibschutz entfernen $this->app->DB->Update("UPDATE bestellung SET schreibschutz=0 WHERE id='$bestellung' LIMIT 1"); $bRow = $this->app->DB->SelectRow( sprintf( 'SELECT schreibschutz, adresse FROM bestellung WHERE id=%d LIMIT 1', (int)$bestellung ) ); $schreibschutz = $bRow['schreibschutz']; $adresse = $bRow['adresse']; if(!$schreibschutz) { $this->app->DB->Update( sprintf( 'UPDATE bestellung_position SET preis = %f WHERE id = %d LIMIT 1', (float)$preis, $bpid ) ); if((String)$bestellnummer !== '') { $this->app->DB->Update( sprintf( "UPDATE bestellung_position SET bestellnummer = '%s' WHERE id = %d LIMIT 1", $bestellnummer, $bpid ) ); } if((String)$bezeichnung !== '') { $this->app->DB->Update( sprintf( "UPDATE bestellung_position SET bezeichnunglieferant = '%s' WHERE id = %d LIMIT 1", $bezeichnung, $bpid ) ); } if($menge) { $this->app->DB->Update( sprintf( "UPDATE bestellung_position SET menge = %f WHERE id = %d LIMIT 1", (float)$menge, $bpid ) ); } $this->app->erp->ANABREGSNeuberechnen($bestellung,'bestellung'); } if($auchinstammdaten && $artikel && $adresse) { $this->app->erp->AddEinkaufspreis($artikel,$ab_menge,$adresse,$bestellnummer,$bezeichnung, $preis, $waehrung); } $data = $this->app->DB->SelectRow( sprintf( 'SELECT id, %s as preis, bestellnummer, trim(menge)+0 as menge FROM bestellung_position WHERE id = %d LIMIT 1', $this->app->erp->FormatPreis('preis'),$bpid ) ); if(!empty($data)) { $data['menge'] = round($data['menge'], 8); $data['preis'] .= ' <a href="#" onclick="changepreis'.$this->app->Secure->getPOST('md5').'('.$bpid.');"><img src="themes/'.$this->app->Conf->WFconf['defaulttheme'].'/images/edit.svg" border="0"></a>'; } echo json_encode($data); $this->app->ExitXentral(); } $bestRow = $this->app->DB->SelectRow( sprintf( 'SELECT belegnr, name, status, zahlungsweise, adresse, verbindlichkeiteninfo,preisanfrageid, DATE_FORMAT(gewuenschteslieferdatum,\'%%d.%%m.%%Y\') as gewuenschteslieferdatum, bestellungbestaetigtabnummer, DATE_FORMAT(bestaetigteslieferdatum,\'%%d.%%m.%%Y\') as bestaetigteslieferdatum, datum, projekt FROM bestellung WHERE id=%d LIMIT 1', $id ) ); $belegnr = $bestRow['belegnr']; $name = $bestRow['name']; $status = $bestRow['status']; //$schreibschutz = $this->app->DB->Select("SELECT schreibschutz FROM bestellung WHERE id='$id' LIMIT 1"); $zahlweise = $bestRow['zahlungsweise']; $bestaetigteslieferdatum = $bestRow['bestaetigteslieferdatum']; $wunschlieferdatum = $bestRow['gewuenschteslieferdatum']; $ablieferant = $bestRow['bestellungbestaetigtabnummer']; $verbindlichkeiteninfo = $bestRow['verbindlichkeiteninfo']; $preisanfrageid = $bestRow['preisanfrageid']; $preisanfrage = $this->app->DB->Select("SELECT belegnr FROM preisanfrage WHERE id = '$preisanfrageid' LIMIT 1"); $adresse = (int)$bestRow['adresse']; $lieferantennummer = $this->app->DB->Select("SELECT lieferantennummer FROM adresse WHERE id = '$adresse' LIMIT 1"); $datum = (int)$bestRow['datum']; $projekt = (int)$bestRow['projekt']; $this->app->Tpl->Set('VERBINDLICHKEITENINFO',$verbindlichkeiteninfo); if($belegnr=='0' || $belegnr=='') { $belegnr = 'ENTWURF'; } $this->app->Tpl->Set('BELEGNR',$belegnr); $this->app->Tpl->Set('LIEFERANT',"<a href=\"index.php?module=adresse&action=edit&id=".$adresse."\" target=\"_blank\">".$lieferantennummer."</a> ".$name); $this->app->Tpl->Set('STATUS',$status); $this->app->Tpl->Set('ZAHLWEISE',$zahlweise); $this->app->Tpl->Set('BESTELLUNGID',$id); if($preisanfrageid > 0) { $this->app->Tpl->Set('PREISANFRAGE','<a href="index.php?module=preisanfrage&action=edit&id='.$preisanfrageid.'" target="_blank">'.$preisanfrage.'</a> <a href="index.php?module=preisanfrage&action=pdf&id='.$preisanfrageid.'" target="_blank"><img src="./themes/new/images/pdf.svg" title="Preisanfrage PDF" border="0" target="_blank"></a> <a href="index.php?module=preisanfrage&action=edit&id='.$preisanfrageid.'" target="_blank"><img src="./themes/new/images/edit.svg" title="Preisanfrage bearbeiten" border="0" target="_blank"></a>'); } if($bestaetigteslieferdatum=="00.00.0000") $bestaetigteslieferdatum="warte auf Datum"; $this->app->Tpl->Set('BESTAETIGTESLIEFERDATUM',$bestaetigteslieferdatum); if($wunschlieferdatum=="00.00.0000") $wunschlieferdatum="warte auf Datum"; $this->app->Tpl->Set('WUNSCHLIEFERDATUM',$wunschlieferdatum); $this->app->Tpl->Set('ABLIEFERANT',$ablieferant); $nettogewicht = $this->app->erp->BestellungNettoGewicht($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); } $projektabkuerzung = $this->app->DB->Select("SELECT abkuerzung FROM projekt WHERE id='$projekt' LIMIT 1"); if($this->app->erp->RechteVorhanden("projekt","dashboard")) $this->app->Tpl->Set('PROJEKT',"<a href=\"index.php?module=projekt&action=dashboard&id=".$projekt."\" target=\"_blank\">$projektabkuerzung</a>"); else $this->app->Tpl->Set('PROJEKT',$projekt); $md5 = md5(microtime(true)); $table = new EasyTable($this->app); $anzahlzeichen = 200; $artikelIdList = []; $artikelArr = $this->app->DB->SelectArr(sprintf('SELECT DISTINCT artikel FROM bestellung_position WHERE bestellung = %d', $id)); if(!empty($artikelArr)) { foreach($artikelArr as $row) { $artikelIdList[] = $row['artikel']; } } $table->Query("SELECT CONCAT(SUBSTRING(ap.bezeichnunglieferant,1,$anzahlzeichen),'<br>Best-Nr.:<span id=\"spanbestellnummer".$md5."',ap.id,'\">',ap.bestellnummer,'</span>') as artikel, CONCAT('<a href=\"index.php?module=artikel&action=edit&id=',a.id,'\" target=\"_blank\">',a.nummer,'</a>') as nummer, CONCAT('<span id=\"spanmenge".$md5."',ap.id,'\">',(TRIM(ap.menge)+0),'</span>') as Menge, TRIM(ap.geliefert)+0 as geliefert, IF(a.lagerartikel = 1,CONCAT( ".$this->app->erp->FormatMenge('IFNULL(lag.menge,0)').",'lagermehr(',ap.artikel,')'),'-') as Lager, if(ap.lieferdatum!='0000-00-00',DATE_FORMAT(ap.lieferdatum,'%d.%m.%Y'),'sofort') as lieferdatum, concat('<span id=\"spanpreis".$md5."',ap.id,'\">',FORMAT(ap.preis,2,'de_DE'),'". " <a href=\"#\" onclick=\"changepreis".$md5."(',ap.id,');\"><img src=\"themes/{$this->app->Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\"></a>" ."','</span>') as preis FROM bestellung_position AS ap INNER JOIN artikel AS a ON ap.artikel = a.id 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 ".(!empty($artikelIdList)?' AND lpi.artikel IN ('.implode(',', $artikelIdList).')':'')." GROUP BY lpi.artikel ) as lag ON a.id = lag.artikel WHERE ap.bestellung='$id' ORDER by ap.sort"); foreach($table->datasets as $tablerowKey => $tableRow) { foreach($tableRow as $columName => $columnValue) { if(preg_match_all('/^(.*)lagermehr\((.*)\)(.*)$/', $columnValue, $matches,PREG_OFFSET_CAPTURE)) { $table->datasets[$tablerowKey][$columName] = $matches[1][0][0].' '.$this->app->YUI->ContentTooltip('return','index.php?module=auftrag&action=minidetail&cmd=lager&id='.$matches[2][0][0],'url').$matches[3][0][0]; } } } foreach($table->datasets as $k => $row) { if(strip_tags($table->datasets[$k]['geliefert']) == strip_tags($table->datasets[$k]['Menge'])) { $table->datasets[$k]['geliefert'] = '<b>'.$table->datasets[$k]['geliefert'].'</b>'; $table->datasets[$k]['Menge'] = '<b>'.$table->datasets[$k]['Menge'].'</b>'; } else { $table->datasets[$k]['geliefert'] = '<b style="color:red;">'.$table->datasets[$k]['geliefert'].'</b>'; $table->datasets[$k]['Menge'] = '<b style="color:red;">'.$table->datasets[$k]['Menge'].'</b>'; } $table->datasets[$k]['preis'] = '<div style="float:right;text-align:right;"><b>'.$table->datasets[$k]['preis']; if(preg_match("/&id=([0-9]*)/",$row['nummer'],$treffer)){ $artid = (int)$treffer[1]; if($epreise = $this->app->DB->SelectArr("SELECT ab_menge, preis FROM einkaufspreise WHERE artikel='".$artid."' AND adresse='$adresse' AND (gueltig_bis>='".$datum."' OR gueltig_bis='0000-00-00') and (preis_anfrage_vom = '0000-00-00' or preis_anfrage_vom <= '".$datum."') and ab_menge > ".(int)strip_tags($row['Menge'])." order by ab_menge")) { $table->datasets[$k]['preis'] .= '</b> <br /><table style="float:right;">'; foreach($epreise as $key => $pr) { $table->datasets[$k]['preis'] .= "<tr style=\"background-color: transparent;text-align:right;\"><td><small>(".floatval($pr['ab_menge']).":</small></td><td><small>".number_format($pr['preis'],2,',','.').")</small></td></tr>"; } $table->datasets[$k]['preis'] .= '</table>'; } } else { $table->datasets[$k]['preis'] .= '</b>'; } $table->datasets[$k]['preis'] .= "</div>"; } $check = $this->app->DB->SelectArr("SELECT a.belegnr, a.id FROM auftrag_position ap INNER JOIN auftrag a ON ap.auftrag = a.id INNER JOIN bestellung_position bp ON ap.id = bp.auftrag_position_id WHERE bp.bestellung='$id' GROUP BY a.belegnr, a.id ORDER BY a.belegnr, a.id"); if($check) { $auftraege = null; $lieferscheine = []; $rechnungen = []; foreach($check as $row) { $auftraege[] = '<a href="index.php?module=auftrag&action=edit&id='.$row['id'].'" target="_blank">'.($row['belegnr']?$row['belegnr']:'Entwurf').'</a> <a href="index.php?module=auftrag&action=pdf&id='.$row['id'].'" target="_blank"><img src="./themes/new/images/pdf.svg" title="Auftrag PDF" border="0"></a> <a href="index.php?module=auftrag&action=edit&id='.$row['id'].'" target="_blank"><img src="./themes/new/images/edit.svg" title="Auftrag bearbeiten" border="0"></a>'; $lieferscheineTemp = $this->app->DB->SelectPairs( "SELECT l.id, CONCAT( '<a href=\"index.php?module=lieferschein&action=edit&id=', l.id,'\" target=\"_blank\"', if(l.status='storniert',' title=\"Lieferschein storniert\"><s>','>'), if(l.belegnr='0' OR l.belegnr='','ENTWURF',l.belegnr), if(l.status='storniert','</s>',''), '</a> <a href=\"index.php?module=lieferschein&action=pdf&id=',l.id, '\" target=\"_blank\"><img src=\"./themes/new/images/pdf.svg\" title=\"Lieferschein PDF\" border=\"0\"></a> <a href=\"index.php?module=lieferschein&action=edit&id=', l.id, '\" target=\"_blank\"><img src=\"./themes/new/images/edit.svg\" title=\"Lieferschein bearbeiten\" border=\"0\"></a>' ) as lieferschein FROM lieferschein l WHERE l.auftragid='".$row['id']."'" ); if(!empty($lieferscheineTemp)){ foreach ($lieferscheineTemp as $k => $v){ $lieferscheine[$k] = $v; } } $rechnungenTemp = $this->app->DB->SelectPairs( "SELECT r.id, CONCAT( '<a href=\"index.php?module=rechnung&action=edit&id=', r.id, '\" target=\"_blank\"', if(r.status='storniert',' title=\"Rechnung storniert\"><s>','>'), if(r.belegnr='0' OR r.belegnr='','ENTWURF',r.belegnr), if(r.status='storniert','</s>',''), '</a> <a href=\"index.php?module=rechnung&action=pdf&id=', r.id, '\" target=\"_blank\"><img src=\"./themes/new/images/pdf.svg\" title=\"Rechnung PDF\" border=\"0\"></a> <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='".$row['id']."'" ); if(!empty($rechnungenTemp)){ foreach ($rechnungenTemp as $k => $v){ $rechnungen[$k] = $v; } } } if(!empty($auftraege)){ $this->app->Tpl->Set('AUFTRAG', implode('<br />', $auftraege)); } if(!empty($lieferscheine)){ $this->app->Tpl->Set('LIEFERSCHEIN', implode('<br />', $lieferscheine)); } if(!empty($rechnungen)){ $this->app->Tpl->Set('RECHNUNG', implode('<br />', $rechnungen)); } } // $nowarp-Parameter (letzter Parameter) auf false setzen, damit lange Artikeltitel umbrechen können $artikel = $table->DisplayNew("return", "Preis", "noAction", false, 0, 0, false); if($menu) { $menu = $this->BestellungIconMenu($id); $this->app->Tpl->Set('MENU',$menu); } $this->app->Tpl->Set('ARTIKEL',$artikel); $tmp = new EasyTable($this->app); $tmp->Query("SELECT zeit,bearbeiter,grund FROM bestellung_protokoll WHERE bestellung='$id' ORDER by id DESC"); $tmp->DisplayNew('PROTOKOLL',"Protokoll","noAction"); $this->app->Tpl->Set('RECHNUNGLIEFERADRESSE',$this->BestellungRechnungsLieferadresse($id)); if(class_exists('BestellungPDFCustom')) { $Brief = new BestellungPDFCustom($this->app,$projekt); }else{ $Brief = new BestellungPDF($this->app,$projekt); } $Dokumentenliste = $Brief->getArchivedFiles($id, 'bestellung'); if(!empty($Dokumentenliste)) { $tmp3 = new EasyTable($this->app); $tmp3->headings = array('Datum','Belegnr','Bearbeiter','Menü'); 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=bestellung&action=pdffromarchive&id='.$v['id'].'"><img src="themes/'.$this->app->Conf->WFconf['defaulttheme'].'/images/pdf.svg" /></a>'; $tmp3->datasets[] = $tmpr; } } $tmp3->DisplayNew('PDFARCHIV','Menü',"noAction"); } /* $wareneingangsbelege = $this->app->DB->SelectFirstCols("SELECT CONCAT('<a href=\"index.php?module=receiptdocument&action=edit&id=',r.id,'\" target=\"_blank\"',if(r.status='storniert',' title=\"Wareneingangsbeleg storniert\"><s>','>'),if(r.document_number='0' OR document_number='','ENTWURF',r.document_number),if(r.status='storniert','</s>',''),'</a> <a href=\"index.php?module=receiptdocument&action=pdf&id=',r.id,'\" target=\"_blank\"><img src=\"./themes/new/images/pdf.svg\" title=\"Wareneingangsbeleg PDF\" border=\"0\"></a> <a href=\"index.php?module=receiptdocument&action=edit&id=',r.id,'\" target=\"_blank\"><img src=\"./themes/new/images/edit.svg\" title=\"Wareneingangsbeleg bearbeiten\" border=\"0\"></a>') as wareneingangsbeleg FROM receiptdocument r WHERE r.supplier_order_id='$id'"); if(!empty($wareneingangsbelege)){ $this->app->Tpl->Add('WARENEINGANGSBELEG', implode('<br />', $wareneingangsbelege)); } else{ $this->app->Tpl->Set('WARENEINGANGSBELEG', '-'); } */ $sql = "SELECT CONCAT('<a href =\"index.php?module=wareneingang&action=distriinhalt&id=',pa.id,'\">',pa.id,'</a>') as wareneingang FROM paketannahme pa INNER JOIN paketdistribution pd ON pd.paketannahme = pa.id INNER JOIN bestellung_position bp ON pd.bestellung_position = bp.id INNER JOIN bestellung b ON b.id = bp.bestellung WHERE b.id = $id GROUP BY pa.id"; // echo($sql); $wareneingangsbelege = $this->app->DB->SelectArr($sql); if(!empty($wareneingangsbelege)){ $this->app->Tpl->Add('WARENEINGANGSBELEG', implode('<br />', array_column($wareneingangsbelege , 'wareneingang' ))); } else{ $this->app->Tpl->Set('WARENEINGANGSBELEG', '-'); } $this->app->Tpl->Set('ID', $id); $this->app->Tpl->Set('MD5', $md5); $this->app->Tpl->Parse('ARTIKEL', 'bestellung_minidetail_popup.tpl'); if($parsetarget=='') { $this->app->Tpl->Output("bestellung_minidetail.tpl"); $this->app->ExitXentral(); } $this->app->Tpl->Parse($parsetarget,"bestellung_minidetail.tpl"); } function BestellungAlsversendet($id = 0) { if($id) { $intern = true; }else{ $intern = false; $id = $this->app->Secure->GetGET('id'); } if($id > 0) { $this->app->DB->Update("UPDATE bestellung SET status='versendet' WHERE id='$id' LIMIT 1"); $this->app->erp->BestellungProtokoll($id,"Bestellung als versendet markiert"); } if($intern) { return; } $msg = $this->app->erp->base64_url_encode("<div class=\"info\">Die Bestellung wurde als versendet markiert!</div>"); $this->app->Location->execute('index.php?module=bestellung&action=list&msg='.$msg); } function BestellungAbschliessen($id = 0,$auto=false) { if($id) { $intern = true; }else{ $intern = false; $id = (int)$this->app->Secure->GetGET('id'); } if($id > 0) { $this->app->DB->Update("UPDATE bestellung SET status='abgeschlossen',schreibschutz=1 WHERE id='$id' LIMIT 1"); $this->app->DB->Update("UPDATE verbindlichkeit SET freigabe='1' WHERE bestellung='$id'"); $this->app->erp->BestellungProtokoll($id,'Bestellung '.($auto?'automatisch ':'').'abgeschlossen'); $this->app->erp->RunHook("bestellung_abschliessen",1,$id); } if($intern) { return; } $msg = $this->app->erp->base64_url_encode("<div class=\"info\">Die Bestellung wurde als abgeschlossen markiert!</div>"); $this->app->Location->execute('index.php?module=bestellung&action=list&msg='.$msg); } function BestellungFreigegeben($id = '') { if($id<=0){ $intern = false; $id = (int)$this->app->Secure->GetGET('id'); }else{ $intern = true; } if($id) { if($this->app->DB->Select("SELECT id FROM bestellung WHERE status = 'abgeschlossen' AND id = '$id' LIMIT 1")) { $this->app->DB->Update("UPDATE bestellung SET status = 'freigegeben', schreibschutz = 0 WHERE id = '$id' LIMIT 1"); $msg = $this->app->erp->base64_url_encode("<div class=\"error2\">Die Bestellung wurde auf freigegeben gesetzt!</div>"); }else{ $msg = $this->app->erp->base64_url_encode("<div class=\"error\">Die Bestellung ist nicht abgeschlossen!</div>"); } }else{ $msg = $this->app->erp->base64_url_encode("<div class=\"error\">Es wurde keine Bestellung angeben!</div>"); $this->app->Location->execute('index.php?module=bestellung&action=list&msg='.$msg); } if($intern) { return $id; } $this->app->Location->execute('index.php?module=bestellung&action=edit&id='.$id.'&msg='.$msg); } function BestellungFreigabe($id='') { if($id<=0) { $intern = false; $id = (int)$this->app->Secure->GetGET('id'); $freigabe= $this->app->Secure->GetGET('freigabe'); $weiter= $this->app->Secure->GetPOST('weiter'); $this->app->Tpl->Set('TABTEXT','Freigabe'); } else { $intern = true; $freigabe=$intern; } $allowedFrm = true; $showDefault = true; $doctype = 'bestellung'; if(empty($intern)){ $this->app->erp->RunHook('beleg_freigabe', 4, $doctype, $id, $allowedFrm, $showDefault); } if($weiter!='') { $this->app->Location->execute('index.php?module=bestellung&action=abschicken&id='.$id); } if($allowedFrm && $freigabe==$id) { //$projekt = $this->app->DB->Select("SELECT projekt FROM bestellung WHERE id='$id' LIMIT 1"); $belegnr = $this->app->DB->Select("SELECT belegnr FROM bestellung WHERE id='$id' LIMIT 1"); if($belegnr=='') { $this->app->erp->BelegFreigabe('bestellung',$id); if($intern) { return 1; } $msg = $this->app->erp->base64_url_encode("<div class=\"error2\">Die Bestellung wurde freigegeben und kann jetzt versendet werden!</div>"); $this->app->Location->execute("index.php?module=bestellung&action=edit&id=$id&msg=$msg"); } if($intern) { return 0; } $msg = $this->app->erp->base64_url_encode("<div class=\"error\">Die Bestellung wurde bereits freigegeben!</div>"); $this->app->Location->execute("index.php?module=bestellung&action=edit&id=$id&msg=$msg"); } if($showDefault){ $name = $this->app->DB->Select("SELECT a.name FROM bestellung b LEFT JOIN adresse a ON a.id=b.adresse WHERE b.id='$id' LIMIT 1"); $summe = $this->app->DB->Select("SELECT SUM(menge*preis) FROM bestellung_position WHERE bestellung='$id'"); $waehrung = $this->app->DB->Select("SELECT waehrung FROM bestellung_position WHERE bestellung='$id' LIMIT 1"); $summe = $this->app->erp->EUR($summe); $extra = $this->app->erp->CheckboxEntwurfsmodus("bestellung", $id); if($this->app->erp->Firmendaten("oneclickrelease")=="1" && $extra=="") { $this->app->Location->execute("index.php?module=bestellung&action=freigabe&id=$id&freigabe=$id"); } else { $this->app->Tpl->Set('TAB1', "<div class=\"info\">Soll die Bestellung an <b>$name</b> im Wert von <b>$summe $waehrung</b> jetzt freigegeben werden? <input type=\"button\" class=\"btnImportantLarge\" value=\"Jetzt freigeben\" onclick=\"window.location.href='index.php?module=bestellung&action=freigabe&id=$id&freigabe=$id'\"> $extra </div>"); } } $this->BestellungMenu(); $this->app->Tpl->Parse('PAGE','tabview.tpl'); } function BestellungCopy() { $id = $this->app->Secure->GetGET('id'); $newid = $this->app->erp->CopyBestellung($id); $this->app->Location->execute('Location: index.php?module=bestellung&action=edit&id='.$newid); } function AdresseBestellungCopy() { $id = $this->app->Secure->GetGET('id'); $newid = $this->app->erp->CopyBestellung($id); echo json_encode(array('status'=>1, 'newid'=>$newid)); $this->app->ExitXentral(); } function BestellungLiveTabelle() { $id = (int)$this->app->Secure->GetGET('id'); $status = $this->app->DB->Select("SELECT status FROM bestellung WHERE id='$id' LIMIT 1"); $table = new EasyTable($this->app); if($status==='freigegeben') { $anzahlzeichen = 200; $table->Query("SELECT SUBSTRING(ap.bezeichnung,1,$anzahlzeichen) 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>'), '<font color=red><b>aus</b></font>'))) as L FROM bestellung_position ap, artikel a WHERE ap.bestellung='$id' AND a.id=ap.artikel"); $artikel = $table->DisplayNew("return","A","noAction"); } else { $table->Query("SELECT SUBSTRING(ap.bezeichnung,1,$anzahlzeichen) as artikel, ap.nummer as Nummer, ap.menge as M FROM bestellung_position ap, artikel a WHERE ap.bestellung='$id' AND a.id=ap.artikel"); $artikel = $table->DisplayNew("return","Menge","noAction"); } echo $artikel; $this->app->ExitXentral(); } function BestellungAuftrag() { $id = $this->app->Secure->GetGET('id'); $newid = $this->app->erp->WeiterfuehrenBestellungZuAuftrag($id); $this->app->Location->execute('index.php?module=auftrag&action=edit&id='.$newid); } function BestellungAbschicken() { $this->BestellungMenu(); $this->app->erp->DokumentAbschicken(); } function BestellungDelete() { $id = $this->app->Secure->GetGET("id"); $belegnr = $this->app->DB->Select("SELECT belegnr FROM bestellung WHERE id='$id' LIMIT 1"); $name = $this->app->DB->Select("SELECT name FROM bestellung WHERE id='$id' LIMIT 1"); $status = $this->app->DB->Select("SELECT status FROM bestellung WHERE id='$id' LIMIT 1"); if($belegnr=='0' || $belegnr=='') { $this->app->erp->DeleteBestellung($id); $belegnr='ENTWURF'; $msg = $this->app->erp->base64_url_encode("<div class=\"error\">Die Bestellung \"$name\" ($belegnr) wurde gelöscht!</div>"); //header("Location: ".$_SERVER['HTTP_REFERER']."&msg=$msg"); $this->app->Location->execute('index.php?module=bestellung&action=list&msg='.$msg); } if($status==='storniert') { $maxbelegnr = $this->app->DB->Select("SELECT MAX(belegnr) FROM bestellung"); if(0)//$maxbelegnr == $belegnr) { $this->app->DB->Delete("DELETE FROM bestellung_position WHERE bestellung='$id'"); $this->app->DB->Delete("DELETE FROM bestellung_protokoll WHERE bestellung='$id'"); $this->app->DB->Delete("DELETE FROM bestellung WHERE id='$id'"); $msg = $this->app->erp->base64_url_encode("<div class=\"error\">Rechnung \"$name\" ($belegnr) wurde geöscht !</div>"); } else { $msg = $this->app->erp->base64_url_encode("<div class=\"error\">Bestellung \"$name\" ($belegnr) kann nicht storniert werden da sie bereits storniert ist!</div>"); } $this->app->Location->execute('index.php?module=bestellung&action=list&msg='.$msg); } $this->app->DB->Update("UPDATE bestellung SET status='storniert' WHERE id='$id' LIMIT 1"); $this->app->erp->BestellungProtokoll($id,"Bestellung storniert"); $msg = $this->app->erp->base64_url_encode("<div class=\"error\">Die Bestellung \"$name\" ($belegnr) wurde storniert!</div>"); $this->app->Location->execute("Location: index.php?module=bestellung&action=list&msg=$msg#tabs-1"); } function BestellungProtokoll() { $this->BestellungMenu(); $id = (int)$this->app->Secure->GetGET('id'); $this->app->Tpl->Set('TABTEXT','Protokoll'); $tmp = new EasyTable($this->app); $tmp->Query("SELECT zeit,bearbeiter,grund FROM bestellung_protokoll WHERE bestellung=$id ORDER by zeit DESC"); $tmp->DisplayNew('TAB1','Protokoll','noAction'); $this->app->Tpl->Parse('PAGE','tabview.tpl'); } function BestellungInlinePDF() { $id = (int)$this->app->Secure->GetGET('id'); $frame = $this->app->Secure->GetGET('frame'); if($frame != '') { $file = urlencode('../../../../index.php?module=bestellung&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>"; $this->app->ExitXentral(); } $projekt = $this->app->DB->Select("SELECT projekt FROM bestellung WHERE id=$id LIMIT 1"); if(class_exists('BestellungPDFCustom')) { $Brief = new BestellungPDFCustom($this->app,$projekt); }else{ $Brief = new BestellungPDF($this->app,$projekt); } $Brief->GetBestellung($id); $Brief->inlineDocument(); } function BestellungPDF() { $id = (int)$this->app->Secure->GetGET('id'); //$belegnr = $this->app->DB->Select("SELECT belegnr FROM bestellung WHERE id='$id' LIMIT 1"); $projekt = $this->app->DB->Select("SELECT projekt FROM bestellung WHERE id='$id' LIMIT 1"); // if(is_numeric($belegnr) && $belegnr!=0) { if(class_exists('BestellungPDFCustom')) { $Brief = new BestellungPDFCustom($this->app,$projekt); }else{ $Brief = new BestellungPDF($this->app,$projekt); } $Brief->GetBestellung($id); $Brief->displayDocument(); } //else // $this->app->Tpl->Set(MESSAGE,"<div class=\"error\">Noch nicht freigegebene Bestellungen können nicht als PDF betrachtet werden.!</div>"); $this->BestellungList(); } function BestellungMenu() { $id = (int)$this->app->Secure->GetGET('id'); $bestellungRow = $this->app->DB->SelectRow(sprintf('SELECT belegnr, name,status FROM bestellung WHERE id=%d LIMIT 1', $id)); $belegnr = !empty($bestellungRow)?$bestellungRow['belegnr']:''; $name = !empty($bestellungRow)?$bestellungRow['name']:''; $this->app->erp->BestellungNeuberechnen($id); if($belegnr=='0' || $belegnr=='') { $belegnr ='(Entwurf)'; } $this->app->Tpl->Set('KURZUEBERSCHRIFT2',"$name Bestellung $belegnr"); $status = !empty($bestellungRow)?$bestellungRow['status']:''; if($status==="angelegt") { $this->app->erp->MenuEintrag("index.php?module=bestellung&action=freigabe&id=$id","Freigabe"); } $this->app->erp->MenuEintrag("index.php?module=bestellung&action=edit&id=$id","Details"); if($status==='bestellt') { $this->app->erp->MenuEintrag("index.php?module=bestellung&action=wareneingang&id=$id","Wareneingang<br>Rückstände"); $this->app->erp->MenuEintrag("index.php?module=bestellung&action=wareneingang&id=$id","Mahnstufen"); } // $this->app->erp->MenuEintrag("index.php?module=bestellung&action=abschicken&id=$id","Abschicken / Protokoll"); // $this->app->erp->MenuEintrag("index.php?module=bestellung&action=protokoll&id=$id","Protokoll"); $anzahldateien = $this->app->erp->AnzahlDateien("Bestellung",$id); if($anzahldateien > 0) $anzahldateien = " (".$anzahldateien.")"; else $anzahldateien=""; $this->app->erp->MenuEintrag("index.php?module=bestellung&action=dateien&id=$id","Dateien".$anzahldateien); if($this->app->erp->Firmendaten('auftrag_eantab')=='1'){ $this->app->erp->MenuEintrag('index.php?module=bestellung&action=ean&id='.$id, 'Barcodescanner'); } if($this->app->Secure->GetGET("action")==="abschicken") $this->app->erp->MenuEintrag("index.php?module=bestellung&action=edit&id=$id","Zurück zur Bestellung"); else { $backlink = $this->app->Secure->GetGET('backlink'); // Prüfen ob Backlink mit index.php? beginnt; ansonsten ist Open Redirect möglich if (!empty($backlink) && strpos($backlink, 'index.php?') !== 0){ unset($backlink); } if($backlink) { $this->app->erp->MenuEintrag($backlink,"Zurück zur Übersicht"); }else{ $this->app->erp->MenuEintrag("index.php?module=bestellung&action=list","Zurück zur Übersicht"); } } $this->app->erp->RunMenuHook('bestellung'); $this->app->Tpl->Parse('MENU',"bestellung_menu.tpl"); } function BestellungDateien() { $id = $this->app->Secure->GetGET("id"); $this->BestellungMenu(); $this->app->Tpl->Add('UEBERSCHRIFT'," (Dateien)"); $this->app->YUI->DateiUpload('PAGE',"Bestellung",$id); } function BestellungPositionen() { $id = $this->app->Secure->GetGET("id"); $this->app->erp->AuftragNeuberechnen($id); $this->app->YUI->AARLGPositionen(false); } function CopyBestellungPosition() { $this->app->YUI->SortListEvent("copy","bestellung_position","bestellung"); $this->BestellungPositionen(); } function DelBestellungPosition() { $this->app->YUI->SortListEvent("del","bestellung_position","bestellung"); $this->BestellungPositionen(); } function UpBestellungPosition() { $this->app->YUI->SortListEvent("up","bestellung_position","bestellung"); $this->BestellungPositionen(); } function DownBestellungPosition() { $this->app->YUI->SortListEvent("down","bestellung_position","bestellung"); $this->BestellungPositionen(); } function BestellungPositionenEditPopup() { $id = $this->app->Secure->GetGET("id"); // nach page inhalt des dialogs ausgeben $filename = "widgets/widget.bestellung_position_custom.php"; if(is_file($filename)) { include_once($filename); $widget = new WidgetBestellung_positionCustom($this->app,'PAGE'); } else { $widget = new WidgetBestellung_position($this->app,'PAGE'); } $sid= $this->app->DB->Select("SELECT bestellung FROM bestellung_position WHERE id='$id' LIMIT 1"); $widget->form->SpecialActionAfterExecute("close_refresh", "index.php?module=bestellung&action=positionen&id=$sid"); $widget->Edit(); $this->app->BuildNavigation=false; } function BestellungIconMenu($id,$prefix="") { $supplierOrder = $this->app->DB->SelectRow("SELECT status, belegnr FROM bestellung WHERE id='$id' LIMIT 1"); $status = $supplierOrder['status']; $belegnr = $supplierOrder['belegnr']; $freigegeben = ''; if($status=="angelegt" || $status=="") $freigabe = "<option value=\"freigabe\">Bestellung freigeben</option>"; if($status!="angelegt" && $status!="abgeschlossen") $abschliessen = "<option value=\"abschliessen\">Bestellung abschliessen</option>"; $einlagern = ''; if(($status === 'versendet' || $status === 'freigegeben') && $this->app->erp->RechteVorhanden("bestellung", "einlagern") && $this->app->DB->Select("SELECT id FROM bestellung_position WHERE bestellung = '$id' AND geliefert < menge LIMIT 1")) { $standardlager = $this->app->DB->Select("SELECT kurzbezeichnung FROM lager_platz WHERE geloescht <> 1 AND sperrlager <> 1 AND poslager <> 1 ORDER BY id LIMIT 1"); $nichtlager = $this->app->DB->Select("SELECT art.id FROM bestellung_position bp INNER JOIN artikel art ON bp.artikel = art.id WHERE bp.bestellung = '$id' AND art.porto <> 1 AND lagerartikel <> 1 AND stueckliste <> 1 LIMIT 1"); if($nichtlager) { $standardlager .= ' (Achtung Es gibt Positionen die keine Lagerartikel sind, diese werden nicht eingelagert)'; } $einlagern = '<option value="einlagern">Bestellung einlagern</option>'; } if($status === 'abgeschlossen') { $freigegeben = "<option value=\"freigegeben\">als freigegeben markieren</option>"; } if($status === 'abgeschlossen' || $status=="freigegeben") $alsversendet = "<option value=\"alsversendet\">als versendet markieren</option>"; if($status=="storniert") $storno = "<option value=\"unstorno\">Bestellung Storno rückgängig</option>"; else if($status!="storniert") $storno = "<option value=\"storno\">Bestellung stornieren</option>"; if($this->app->erp->RechteVorhanden('belegeimport', 'belegcsvexport')) { $casebelegeimport = "case 'belegeimport': window.location.href='index.php?module=belegeimport&action=belegcsvexport&cmd=bestellung&id=%value%'; break;"; $optionbelegeimport = "<option value=\"belegeimport\">Export als CSV</option>"; } $hookoption = ''; $hookcase = ''; $this->app->erp->RunHook("Bestellung_Aktion_option",3, $id, $status, $hookoption); $this->app->erp->RunHook("Bestellung_Aktion_case",3, $id, $status, $hookcase); $abschliessentext = '{|Wirklich abschliessen?|}'; if($this->app->DB->Select("SELECT id FROM bestellung_position WHERE bestellung = '$id' AND mengemanuellgeliefertaktiviert = 0 AND geliefert < menge LIMIT 1")) $abschliessentext = "{|Zu dieser Bestellung gibt es noch offene Postitionen, möchten Sie diese wirklich als abgeschlossen markieren? Eine Warenannahme ist dann nicht mehr möglich für diese Bestellung.|}"; $menu =" <script type=\"text/javascript\"> function onchangebestellung(cmd) { switch(cmd) { case 'storno': if(!confirm('Wirklich stornieren?')) return document.getElementById('aktion$prefix').selectedIndex = 0; else window.location.href='index.php?module=bestellung&action=delete&id=%value%'; break; case 'unstorno': if(!confirm('Wirklich stornierte Bestellung wieder freigeben?')) return document.getElementById('aktion$prefix').selectedIndex = 0; else window.location.href='index.php?module=bestellung&action=undelete&id=%value%'; break; case 'copy': if(!confirm('Wirklich kopieren?')) return document.getElementById('aktion$prefix').selectedIndex = 0; else window.location.href='index.php?module=bestellung&action=copy&id=%value%'; break; case 'pdf': window.location.href='index.php?module=bestellung&action=pdf&id=%value%'; document.getElementById('aktion$prefix').selectedIndex = 0; break; case 'abschicken': ".$this->app->erp->DokumentAbschickenPopup()." break; case 'freigabe': window.location.href='index.php?module=bestellung&action=freigabe&id=%value%'; break; case 'alsversendet': window.location.href='index.php?module=bestellung&action=alsversendet&id=%value%'; break; case 'freigegeben': if(!confirm('Wirklich auf freigegeben setzen?')) return document.getElementById('aktion$prefix').selectedIndex = 0; else window.location.href='index.php?module=bestellung&action=freigegeben&id=%value%'; break; case 'abschliessen': if(!confirm('$abschliessentext')) return document.getElementById('aktion$prefix').selectedIndex = 0; else window.location.href='index.php?module=bestellung&action=abschliessen&id=%value%'; break; case 'einlagern': if(!confirm('Wirklich einlagern? Die Artikel werden in den voreingestellten Lagerplätzen eingelagert andersfalls in das Lager $standardlager')) return document.getElementById('aktion$prefix').selectedIndex = 0; else window.location.href='index.php?module=bestellung&action=einlagern&id=%value%'; break; $hookcase $casebelegeimport } } </script> Aktion: <select id=\"aktion$prefix\" onchange=\"onchangebestellung(this.value);\"> <option>bitte wählen ...</option> $storno <option value=\"copy\">Bestellung kopieren</option> <option value=\"abschicken\">Bestellung abschicken</option> $freigabe $alsversendet $freigegeben $abschliessen $einlagern $hookoption $optionbelegeimport <option value=\"pdf\">PDF öffnen</option> </select> <a href=\"index.php?module=bestellung&action=pdf&id=%value%\"><img border=\"0\" src=\"./themes/new/images/pdf.svg\"></a> <!-- <a href=\"index.php?module=bestellung&action=edit&id=%value%\"><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=bestellung&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=bestellung&action=copy&id=%value%';\"> <img src=\"./themes/new/images/copy.svg\" border=\"0\"></a> <a onclick=\"if(!confirm('Wirklich Auftrag abschicken?')) return false; else window.location.href='index.php?module=bestellung&action=abschicken&id=%value%';\"> <img src=\"./themes/new/images/lieferung.png\" border=\"0\" alt=\"Auftrag abeschicken\"></a>-->"; //$tracking = $this->AuftragTrackingTabelle($id); $menu = str_replace('%value%',$id,$menu); return $menu; } function BestellungEdit() { //$action = $this->app->Secure->GetGET("action"); $id = $this->app->Secure->GetGET("id"); $this->app->erp->BestellungNeuberechnen($id); $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); $this->app->ExitXentral(); } 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 '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); $this->app->ExitXentral(); } if($this->app->erp->DisableModul("bestellung",$id)) { //$this->app->erp->MenuEintrag("index.php?module=auftrag&action=list","Zurück zur Übersicht"); $this->BestellungMenu(); return; } $this->app->YUI->AARLGPositionen(); //$storno = $this->app->Secure->GetGET("storno"); $speichern = $this->app->Secure->GetPOST("speichern"); $verbindlichkeiteninfo = $this->app->Secure->GetPOST("verbindlichkeiteninfo"); if($verbindlichkeiteninfo!="" && $speichern!="" && $id > 0) $this->app->DB->Update("UPDATE bestellung SET verbindlichkeiteninfo='$verbindlichkeiteninfo' WHERE id='$id' LIMIT 1"); //$this->BestellungMiniDetail(MINIDETAIL,false); $arr = $this->app->DB->SelectArr( "SELECT b.belegnr, b.adresse, b.status, b.schreibschutz, b.langeartikelnummern, b.zuarchivieren FROM `bestellung` AS `b` WHERE b.id = '$id' LIMIT 1" ); if($arr){ $arr = reset($arr); $belegnr = $arr['belegnr']; $nummer = $arr['belegnr']; $adresse = $arr['adresse']; $status = $arr['status']; $schreibschutz = $arr['schreibschutz']; $zuArchivieren = $arr['zuarchivieren']; $lieferantennummer = $this->app->DB->Select("SELECT lieferantennummer FROM adresse WHERE id='$adresse' LIMIT 1"); } if($id > 0 && $zuArchivieren == 1 && $schreibschutz == 1) { $this->app->erp->PDFArchivieren('bestellung', $id, true); } if($status !== "angelegt" && $status !== "angelegta" && $status !== "a") { /* $laenge = $this->app->DB->SelectArr("SELECT LENGTH(bestellnummer) as length,bestellnummer FROM bestellung_position WHERE bestellung='$id' ORDER by length DESC"); $pdf=new FPDFWAWISION(); $pdf->SetFontClassic($this->app->erp->Firmendaten("schriftart"),'',$this->app->erp->Firmendaten("tabellenhinhalt")); $laengepdf = $pdf->GetStringWidth($laenge[0]['bestellnummer']); if(floor($laengepdf) > $this->app->erp->Firmendaten("breite_nummer")+11 && $arr['langeartikelnummern']!="1") { $this->app->Tpl->Add('MESSAGE',"<div class=\"error\">Eventuell ist die Artikelnummer zu lang. Sie können die Funktion \"Lange Artikelnummer\" weiter unten aktivieren.</div>"); } */ $Brief = new Briefpapier($this->app); if($Brief->zuArchivieren($id, "bestellung")) { $this->app->Tpl->Add('MESSAGE',"<div class=\"error\">Die Bestellung 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=bestellung&action=archivierepdf&id=$id';\" value=\"Manuell archivieren\" /> <input type=\"button\" value=\"Dokument versenden\" onclick=\"DokumentAbschicken('bestellung',$id)\"></div>"); }elseif(!$this->app->DB->Select("SELECT versendet FROM bestellung WHERE id = '$id' LIMIT 1")) { $this->app->Tpl->Add('MESSAGE',"<div class=\"error\">Die Bestellung wurde noch nicht versendet! <input type=\"button\" value=\"Dokument versenden\" onclick=\"DokumentAbschicken('bestellung',$id)\"></div>"); } } if($schreibschutz!="1")// && $this->app->erp->RechteVorhanden("bestellung","schreibschutz")) { { $this->app->erp->AnsprechpartnerButton($adresse); $this->app->erp->LieferadresseButton($adresse); $this->app->erp->AnsprechpartnerAlsLieferadresseButton($adresse); $this->app->erp->AdresseAlsLieferadresseButton($adresse); } $this->app->Tpl->Set('ICONMENU',$this->BestellungIconMenu($id)); $this->app->Tpl->Set('ICONMENU2',$this->BestellungIconMenu($id,2)); if($nummer!="") { $this->app->Tpl->Set('NUMMER',$nummer); if($this->app->erp->RechteVorhanden("adresse","edit")) $this->app->Tpl->Set('LIEFERANT'," Lf-Nr. <a href=\"index.php?module=adresse&action=edit&id=$adresse\" target=\"_blank\">".$lieferantennummer."</a>"); else $this->app->Tpl->Set('LIEFERANT'," Lf-Nr. ".$lieferantennummer); } $check = $this->app->DB->SelectArr("SELECT a.belegnr, a.id, a.name FROM bestellung_position bp INNER JOIN auftrag_position ap ON ap.id = bp.auftrag_position_id INNER JOIN auftrag a ON ap.auftrag = a.id WHERE bp.bestellung='$id' GROUP BY a.belegnr, a.id ORDER BY a.belegnr, a.id"); if($check) { $this->app->Tpl->Add('MESSAGE',"<div class=\"info\">Zu dieser Bestellung gehör".((!empty($check)?count($check):0) == 1?'t der Auftrag':'en die Aufträge:')); foreach($check as $row) { $this->app->Tpl->Add('MESSAGE',' <a href="index.php?module=auftrag&action=edit&id='.$row['id'].'" target="_blank"><input type="button" value="'.($row['belegnr']?$row['belegnr']:'Entwurf')." (".$row['name'].')" /></a>'); } $this->app->Tpl->Add('MESSAGE',"</div>"); } if($this->app->Secure->GetPOST("speichern")!="") { $abweichenderechnungsadresse = $this->app->Secure->GetPOST("abweichenderechnungsadresse"); $abweichendelieferadresse = $this->app->Secure->GetPOST("abweichendelieferadresse"); } else { $abweichenderechnungsadresse = $this->app->DB->Select("SELECT abweichende_rechnungsadresse FROM adresse WHERE id='$adresse' LIMIT 1"); $abweichendelieferadresse = $this->app->DB->Select("SELECT abweichendelieferadresse FROM bestellung WHERE id='$id' LIMIT 1"); } if($abweichenderechnungsadresse) $this->app->Tpl->Set('RECHNUNGSADRESSE',"visible"); else $this->app->Tpl->Set('RECHNUNGSADRESSE',"none"); if($abweichendelieferadresse) $this->app->Tpl->Set('LIEFERADRESSE',"visible"); else $this->app->Tpl->Set('LIEFERADRESSE',"none"); if($belegnr=="" || $belegnr=="0") { $this->app->Tpl->Set('LOESCHEN',"<input type=\"button\" value=\"Abbrechen\" onclick=\"if(!confirm('Wirklich löschen?')) return false; else window.location.href='index.php?module=bestellung&action=delete&id=$id';\">"); } $status= $this->app->DB->Select("SELECT status FROM bestellung WHERE id='$id' LIMIT 1"); if($status=="") $this->app->DB->Update("UPDATE bestellung SET status='angelegt' WHERE id='$id' LIMIT 1"); if($schreibschutz=="1" && $this->app->erp->RechteVorhanden("bestellung","schreibschutz")) { $this->app->Tpl->Add('MESSAGE',"<div class=\"warning\">Diese Bestellung ist schreibgeschützt und darf daher nicht mehr bearbeitet werden! <input type=\"button\" value=\"Schreibschutz entfernen\" onclick=\"if(!confirm('Soll der Schreibschutz für diese Bestellung wirklich entfernt werden?')) return false;else window.location.href='index.php?module=bestellung&action=schreibschutz&id=$id';\"></div>"); // $this->app->erp->CommonReadonly(); } if($schreibschutz=="1") { $this->app->erp->RemoveReadonly("bestellung_bestaetigt"); $this->app->erp->RemoveReadonly("bestaetigteslieferdatum"); $this->app->erp->RemoveReadonly("bestellungbestaetigtabnummer"); $this->app->erp->RemoveReadonly("bestellungbestaetigtper"); $speichern = $this->app->Secure->GetPOST("speichern"); if($speichern!="") { $bestellung_bestaetigt = $this->app->Secure->GetPOST("bestellung_bestaetigt"); $bestaetigteslieferdatum = $this->app->Secure->GetPOST("bestaetigteslieferdatum"); $bestellungbestaetigtabnummer = $this->app->Secure->GetPOST("bestellungbestaetigtabnummer"); $bestellungbestaetigtper = $this->app->Secure->GetPOST("bestellungbestaetigtper"); if($bestellung_bestaetigt!="1") $bestellung_bestaetigt="0"; $bestaetigteslieferdatum = $this->app->String->Convert($bestaetigteslieferdatum,"%1.%2.%3","%3-%2-%1"); $this->app->DB->Update("UPDATE bestellung SET bestellung_bestaetigt='$bestellung_bestaetigt',bestaetigteslieferdatum='$bestaetigteslieferdatum', bestellungbestaetigtabnummer='$bestellungbestaetigtabnummer',bestellungbestaetigtper='$bestellungbestaetigtper' WHERE id='$id' LIMIT 1"); // alle positonen ebenso anpassen $this->app->DB->Update("UPDATE bestellung_position SET lieferdatum='$bestaetigteslieferdatum' WHERE bestellung='$id' AND lieferdatum='0000-00-00'"); } $this->app->erp->CommonReadonly(); } else { $portofreilieferant_aktiv = $this->app->DB->Select("SELECT portofreilieferant_aktiv FROM adresse WHERE id='$adresse' LIMIT 1"); $portofreiablieferant = $this->app->DB->Select("SELECT portofreiablieferant FROM adresse WHERE id='$adresse' LIMIT 1"); $gesamtsumme = $this->app->erp->BEGesamtsummeOhnePorto($id,"bestellung"); if($portofreilieferant_aktiv == 1 && $portofreiablieferant > 0 && $gesamtsumme <= $portofreiablieferant) { $this->app->Tpl->Add('MESSAGE',"<div class=\"warning\">Die Lieferung wird ab ".number_format($portofreiablieferant,2,',','.')." EUR (netto) Portofrei. Aktuell sind nur ".number_format($gesamtsumme,2,',','.')." EUR (netto) in der Bestellung.</div>"); } } if($schreibschutz != '1'){ if($this->app->erp->Firmendaten("schnellanlegen") == "1"){ $this->app->Tpl->Set('BUTTON_UEBERNEHMEN', ' <input type="button" value="übernehmen" onclick="document.getElementById(\'uebernehmen\').value=1; document.getElementById(\'eprooform\').submit();"/><input type="hidden" id="uebernehmen" name="uebernehmen" value="0"> '); }else{ $this->app->Tpl->Set('BUTTON_UEBERNEHMEN', ' <input type="button" value="übernehmen" onclick="if(!confirm(\'Soll der neue Lieferant wirklich übernommen werden? Es werden alle Felder überladen.\')) return false;else document.getElementById(\'uebernehmen\').value=1; document.getElementById(\'eprooform\').submit();"/><input type="hidden" id="uebernehmen" name="uebernehmen" value="0"> '); } } // immer wenn sich der lieferant genändert hat standartwerte setzen if($this->app->Secure->GetPOST("adresse")!="") { $tmp = $this->app->Secure->GetPOST("adresse"); $lieferantennummer = $this->app->erp->FirstTillSpace($tmp); //$name = substr($tmp,6); $filter_projekt = $this->app->DB->Select("SELECT projekt FROM bestellung 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 a.id FROM adresse a LEFT JOIN adresse_rolle ar ON a.id = ar.adresse AND ar.projekt > 0 ".$this->app->erp->ProjektRechte("ar.projekt")." WHERE a.lieferantennummer='$lieferantennummer' AND a.geloescht=0 AND (1 ".$this->app->erp->ProjektRechte("a.projekt")." OR not isnull(ar.id)) ORDER by ".($filter_projekt?" a.projekt = '$filter_projekt' DESC, ":"")." a.projekt LIMIT 1"); $uebernehmen =$this->app->Secure->GetPOST("uebernehmen"); if($schreibschutz != '1' && $uebernehmen=="1" && $adresse > 0) // nur neuladen bei tastendruck auf uebernehmen // FRAGEN!!!! { $this->app->erp->LoadBestellungStandardwerte($id,$adresse); $this->app->Location->execute('index.php?module=bestellung&action=edit&id='.$id); } } /* $table = new EasyTable($this->app); $table->Query("SELECT a.bezeichnung as artikel, a.nummer as Nummer, b.menge, b.vpe as VPE, FORMAT(b.preis,4) as preis FROM bestellung_position b LEFT JOIN artikel a ON a.id=b.artikel WHERE b.bestellung='$id'"); $table->DisplayNew(POSITIONEN,"Preis","noAction"); */ $arr = $this->app->DB->SelectArr("SELECT bearbeiter, belegnr, status, zahlungsweise,abweichendelieferadresse FROM bestellung WHERE id = '$id' LIMIT 1"); if($arr){ $arr = reset($arr); $bearbeiter = $arr['bearbeiter']; $status = $arr['status']; $bestellung = $arr['belegnr']; $zahlungsweise = $arr['zahlungsweise']; $abweichendelieferadresse = $arr['abweichendelieferadresse']; } $this->app->Tpl->Set('BEARBEITER',"<input type=\"text\" value=\"".$this->app->erp->GetAdressName($bearbeiter)."\" readonly>"); $this->app->Tpl->Set('STATUS',"<input type=\"text\" size=\"30\" value=\"".$status."\" readonly [COMMONREADONLYINPUT]>"); if($bestellung!='') $bestellung="keine Nummer"; $this->app->Tpl->Set('ANGEBOT',"<input type=\"text\" value=\"".$bestellung."\" readonly>"); if($this->app->Secure->GetPOST("zahlungsweise")!="") $zahlungsweise = $this->app->Secure->GetPOST("zahlungsweise"); $zahlungsweise = strtolower($zahlungsweise); $this->app->Tpl->Set('RECHNUNG',"none"); $this->app->Tpl->Set('KREDITKARTE',"none"); $this->app->Tpl->Set('VORKASSE',"none"); $this->app->Tpl->Set('PAYPAL',"none"); $this->app->Tpl->Set('EINZUGSERMAECHTIGUNG',"none"); if($zahlungsweise=="rechnung") $this->app->Tpl->Set('RECHNUNG',""); if($zahlungsweise=="paypal") $this->app->Tpl->Set('PAYPAL',""); if($zahlungsweise=="kreditkarte") $this->app->Tpl->Set('KREDITKARTE',""); if($zahlungsweise=="einzugsermaechtigung" || $zahlungsweise=="lastschrift") $this->app->Tpl->Set('EINZUGSERMAECHTIGUNG',""); if($zahlungsweise=="vorkasse" || $zahlungsweise=="kreditkarte" || $zahlungsweise=="paypal" || $zahlungsweise=="bar") $this->app->Tpl->Set('VORKASSE',""); if($this->app->Secure->GetPOST("abweichendelieferadresse")!="") $versandart = $this->app->Secure->GetPOST("abweichendelieferadresse"); $this->app->Tpl->Set('ABWEICHENDELIEFERADRESSESTYLE',"none"); if($abweichendelieferadresse=="1") $this->app->Tpl->Set('ABWEICHENDELIEFERADRESSESTYLE',""); $this->app->Tpl->Set('AKTIV_TAB1',"selected"); parent::BestellungEdit(); $this->app->erp->MessageHandlerStandardForm(); /* if($this->app->Secure->GetPOST("speichern")!="" && $storno=="") { if($this->app->Secure->GetGET("msg")=="") { $msg = $this->app->Tpl->Get(MESSAGE); $msg = $this->app->erp->base64_url_encode($msg); } else { $msg = $this->app->erp->base64_url_encode($msg); } header("Location: index.php?module=bestellung&action=edit&id=$id&msg=$msg"); exit; } */ /* $summe = $this->app->DB->Select("SELECT SUM(menge*preis) FROM bestellung_position WHERE bestellung='$id'"); $waehrung = $this->app->DB->Select("SELECT waehrung FROM bestellung_position WHERE bestellung='$id' LIMIT 1"); $ust_befreit_check = $this->app->DB->Select("SELECT ust_befreit FROM bestellung WHERE id='$id' LIMIT 1"); $summebrutto = $summe *1.19; if($ust_befreit_check==0) $tmp = "Kunde zahlt mit UST"; else if($ust_befreit_check==1) $tmp = "Kunde ist UST befreit"; else $tmp = "Kunde zahlt keine UST"; if($summe > 0) $this->app->Tpl->Add(POSITIONEN, "<br><center>Zu zahlen: <b>$summe (netto) $summebrutto (brutto) $waehrung</b> ($tmp) "); */ if($this->app->Secure->GetPOST('weiter')!='') { $this->app->Location->execute('index.php?module=bestellung&action=positionen&id='.$id); } $this->BestellungMenu(); } function BestellungCreate() { //$this->app->Tpl->Add(TABS,"<li><h2>Bestellung</h2></li>"); $this->app->erp->Headlines('Bestellung anlegen'); $this->app->erp->MenuEintrag("index.php?module=bestellung&action=list","Zurück zur Übersicht"); $anlegen = $this->app->Secure->GetGET("anlegen"); if($this->app->erp->Firmendaten("schnellanlegen")=="1" && $anlegen!="1") { $this->app->Location->execute('index.php?module=bestellung&action=create&anlegen=1'); } if($anlegen != "") { $id = $this->app->erp->CreateBestellung(); $this->app->erp->BestellungProtokoll($id,"Bestellung angelegt"); $this->app->Location->execute('index.php?module=bestellung&action=edit&id='.$id); } $this->app->Tpl->Add('MESSAGE',"<div class=\"warning\">Möchten Sie eine Bestellung jetzt anlegen? <input type=\"button\" onclick=\"window.location.href='index.php?module=bestellung&action=create&anlegen=1'\" value=\"Ja - Bestellung 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\">Bestellungen in Bearbeitung</b> <br> <br> Offene Bestellunge, die durch andere Mitarbeiter in Bearbeitung sind. <br> </td> </tr> </table> <br> [ANGEBOTE]"); $this->app->Tpl->Set('AKTIV_TAB1',"selected"); $this->app->YUI->TableSearch('ANGEBOTE',"bestellungeninbearbeitung"); /* $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 bestellung WHERE status='angelegt' order by datum DESC, id DESC"); $table->DisplayNew(ANGEBOTE, "<a href=\"index.php?module=bestellung&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=bestellung&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=bestellung&action=copy&id=%value%';\"> <img src=\"./themes/new/images/copy.svg\" border=\"0\"></a> "); */ $this->app->Tpl->Set('TABTEXT',"Bestellung anlegen"); $this->app->Tpl->Parse('PAGE',"tabview.tpl"); //parent::BestellungCreate(); } function BestellungListMenu() { $backurl = $this->app->Secure->GetGET("backurl"); $backurl = $this->app->erp->base64_url_decode($backurl); //$this->app->Tpl->Add(TABS,"<li><h2 class=\"allgemein\" style=\"background-color: [FARBE2]\">Allgemein</h2></li>"); $this->app->erp->MenuEintrag("index.php?module=bestellung&action=list","Übersicht"); $this->app->erp->MenuEintrag("index.php?module=bestellung&action=create","Neue Bestellung anlegen"); $this->app->erp->MenuEintrag("index.php?module=bestellung&action=offenepositionen","Offene Positionen"); //$this->app->erp->MenuEintrag("index.php?module=bestellvorschlag&action=ausgehend","Bestellvorschlag"); if(strlen($backurl)>5){ $this->app->erp->MenuEintrag((string)$backurl, 'Zurück zur Übersicht'); } else{ $this->app->erp->MenuEintrag('index.php', 'Zurück zur Übersicht'); } } function BestellungList() { // $this->app->Tpl->Set(UEBERSCHRIFT,"Bestellungssuche"); // $this->app->Tpl->Set(KURZUEBERSCHRIFT,"Bestellungssuche"); if($this->app->Secure->GetPOST('ausfuehren') && $this->app->erp->RechteVorhanden('bestellung', '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)) { switch($aktion) { case 'mail': foreach($auswahl as $v) { $v = (int)$v; if($v){ $bestellungarr = $this->app->DB->SelectRow("SELECT email,adresse,projekt,name,sprache FROM bestellung WHERE id = '$v' LIMIT 1"); if(!empty($bestellungarr)) { $email = (String)$bestellungarr['email'];//$this->app->DB->Select("SELECT email FROM auftrag WHERE id = '$v' LIMIT 1"); $adresse = $bestellungarr['adresse'];//$this->app->DB->Select("SELECT adresse FROM auftrag WHERE id = '$v' LIMIT 1"); $projekt = $bestellungarr['projekt'];//$this->app->DB->Select("SELECT projekt FROM auftrag WHERE id = '$v' LIMIT 1"); $name = $bestellungarr['name'];// $this->app->DB->Select("SELECT name FROM auftrag WHERE id = '$v' LIMIT 1"); $sprache = $bestellungarr['sprache'];// $this->app->DB->Select("SELECT sprache FROM auftrag WHERE id='$v' LIMIT 1"); }else{ $email = ''; $adresse = 0; $projekt = 0; $name = ''; $sprache = ''; } if($sprache==''){ $sprache = $this->app->DB->Select("SELECT sprache FROM adresse WHERE id='$adresse' AND geloescht=0 LIMIT 1"); } if($sprache=='') { $sprache='de'; } $emailtext = $this->app->erp->Geschaeftsbriefvorlage($sprache,'bestellung',$projekt,$name,$v); if($email === '') { $email = (String)$this->app->DB->Select("SELECT email FROM adresse WHERE id = '$adresse' LIMIT 1"); } if($email !== '') { $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable; if(class_exists('BestellungPDFCustom')) { $Brief = new BestellungPDFCustom($this->app,$projekt); }else{ $Brief = new BestellungPDF($this->app,$projekt); } $Brief->GetBestellung($v); $_tmpfile = $Brief->displayTMP(); $Brief->ArchiviereDocument(); unlink($_tmpfile); $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable; if(class_exists('BestellungPDFCustom')) { $Brief = new BestellungPDFCustom($this->app,$projekt); }else{ $Brief = new BestellungPDF($this->app,$projekt); } $Brief->GetBestellung($v); $tmpfile = $Brief->displayTMP(); $Brief->ArchiviereDocument(); $fileid = $this->app->erp->CreateDatei($Brief->filename,'bestellung','','',$tmpfile,$this->app->User->GetName()); $this->app->erp->AddDateiStichwort($fileid,'bestellung','bestellung',$v); $this->app->erp->DokumentSend($adresse,'bestellung', $v, 'email',$emailtext['betreff'],$emailtext['text'],array($tmpfile),"","",$projekt,$email, $name); $ansprechpartner = $name." <".$email.">"; $this->app->DB->Insert("INSERT INTO dokumente_send (id,dokument,zeit,bearbeiter,adresse,parameter,art,betreff,text,projekt,ansprechpartner,versendet,dateiid) VALUES ('','bestellung',NOW(),'".$this->app->DB->real_escape_string($this->app->User->GetName())."', '$adresse','$v','email','".$this->app->DB->real_escape_string($emailtext['betreff'])."','".$this->app->DB->real_escape_string($emailtext['text'])."','$projekt','$ansprechpartner',1,'$fileid')"); $tmpid = $this->app->DB->GetInsertID(); unlink($tmpfile); $this->app->DB->Update("UPDATE bestellung SET versendet=1, versendet_am=NOW(), versendet_per='email',versendet_durch='".$this->app->DB->real_escape_string($this->app->User->GetName())."',schreibschutz='1' WHERE id='$v' LIMIT 1"); $this->app->erp->BestellungProtokoll($v,'Bestellung versendet'); } } } break; case 'freigeben': foreach($auswahl as $v) { $v = (int)$v; if($v){ if($this->app->DB->Select("SELECT id FROM bestellung WHERE id = '$v' AND status <> 'storniert' LIMIT 1")){ $this->BestellungFreigegeben($v); } } } break; case 'versendet': foreach($auswahl as $v) { $v = (int)$v; if($v) { $projekt = $this->app->DB->Select("SELECT projekt FROM bestellung WHERE id='$v' LIMIT 1"); if(class_exists('BestellungPDFCustom')) { $Brief = new BestellungPDFCustom($this->app,$projekt); }else{ $Brief = new BestellungPDF($this->app,$projekt); } $Brief->GetBestellung($v); $tmpfile = $Brief->displayTMP(); $Brief->ArchiviereDocument(); $this->app->erp->BestellungProtokoll($v,"Bestellung versendet"); $this->app->erp->closeInvoice($v); $this->app->DB->Update("UPDATE bestellung SET schreibschutz=1, versendet = 1, status='versendet' WHERE id = '$v' LIMIT 1"); } } break; case 'abgeschlossen': foreach($auswahl as $v) { $v = (int)$v; if($v){ if($this->app->DB->Select("SELECT id FROM bestellung WHERE id = '$v' AND status != 'angelegt' AND status != 'abgeschlossen' LIMIT 1")){ $this->BestellungAbschliessen($v); } } } break; case 'drucken': if($drucker) { foreach($auswahl as $v) { $v = (int)$v; if($v){ $bestellungsdaten = $this->app->DB->Select("SELECT projekt, adresse FROM bestellung WHERE id='$v' LIMIT 1"); $projekt = $bestellungsdaten['projekt']; $adressId = $bestellungsdaten['adresse']; $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable; if(class_exists('BestellungPDFCustom')) { $Brief = new BestellungPDFCustom($this->app,$projekt); }else{ $Brief = new BestellungPDF($this->app,$projekt); } $Brief->GetBestellung($v); $_tmpfile = $Brief->displayTMP(); $Brief->ArchiviereDocument(); unlink($_tmpfile); $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable; if(class_exists('BestellungPDFCustom')) { $Brief = new BestellungPDFCustom($this->app,$projekt); }else{ $Brief = new BestellungPDF($this->app,$projekt); } $Brief->GetBestellung($v); $tmpfile = $Brief->displayTMP(); $Brief->ArchiviereDocument(); $this->app->printer->Drucken($drucker,$tmpfile); $doctype = 'bestellung'; $this->app->erp->RunHook('dokumentsend_ende', 5, $doctype, $v, $projekt, $adressId, $aktion); $this->app->erp->BestellungProtokoll($v,"Bestellung versendet"); unlink($tmpfile); } } } break; case 'pdf': foreach($auswahl as $v) { $v = (int)$v; if($v){ $projekt = $this->app->DB->Select("SELECT projekt FROM bestellung WHERE id='$v' LIMIT 1"); $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable; if(class_exists('BestellungPDFCustom')) { $Brief = new BestellungPDFCustom($this->app,$projekt); }else{ $Brief = new BestellungPDF($this->app,$projekt); } $Brief->GetBestellung($v); $_tmpfile = $Brief->displayTMP(); $Brief->ArchiviereDocument(); unlink($_tmpfile); $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable; if(class_exists('BestellungPDFCustom')) { $Brief = new BestellungPDFCustom($this->app,$projekt); }else{ $Brief = new BestellungPDF($this->app,$projekt); } $Brief->GetBestellung($v); $tmpfile[] = $Brief->displayTMP(); //$Brief->ArchiviereDocument(); } } 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; } } } $speichern = $this->app->Secure->GetPOST("speichern"); $verbindlichkeiteninfo = $this->app->Secure->GetPOST("verbindlichkeiteninfo"); $bestellungid = $this->app->Secure->GetPOST("bestellungid"); if($this->app->erp->Firmendaten("bestellungabschliessen")) { $offene = $this->app->DB->SelectArr("SELECT id FROM bestellung WHERE status='freigegeben' OR status='versendet'"); foreach($offene as $order) { $this->checkAbschliessen($order['id']); } } if($verbindlichkeiteninfo!="" && $speichern!="" && $bestellungid > 0) $this->app->DB->Update("UPDATE bestellung SET verbindlichkeiteninfo='$verbindlichkeiteninfo' WHERE id='$bestellungid' LIMIT 1"); $this->BestellungListMenu(); $zahlungsweisen = $this->app->DB->SelectArr(' SELECT zahlungsweise FROM bestellung GROUP BY zahlungsweise '); $zahlungsweiseStr = ''; if ($zahlungsweisen) { foreach ($zahlungsweisen as $zahlungsweise) { if (empty($zahlungsweise['zahlungsweise'])) { continue; } $zahlungsweiseStr .= '<option name="' . $zahlungsweise['zahlungsweise'] . '">' . ucfirst($zahlungsweise['zahlungsweise']) . '</option>'; } } $status = $this->app->DB->SelectArr(' SELECT status FROM bestellung 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 bestellung 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->Tpl->Set('AKTIV_TAB1',"selected"); $this->app->Tpl->Set('INHALT',""); // $this->app->Tpl->Add(STATUS,$statusStr); // $this->app->Tpl->Add(VERSANDARTEN,$versandartenStr); $this->app->YUI->DatePicker("datumVon"); $this->app->YUI->DatePicker("datumBis"); $this->app->YUI->AutoComplete("projekt", "projektname", 1); $this->app->YUI->AutoComplete("lieferantennummer", "lieferant", 1); $this->app->YUI->AutoComplete("artikel", "artikelnummer", 1); $this->app->YUI->AutoComplete("bestellungnummer", "bestellung", 1); $this->app->Tpl->Add('ZAHLUNGSWEISEN',$zahlungsweiseStr); $this->app->Tpl->Add('STATUS',$statusStr); $this->app->Tpl->Add('VERSANDARTEN',$versandartenStr); $this->app->Tpl->Add('LAENDER',$laenderStr); $this->app->Tpl->Parse('TAB1',"bestellung_table_filter.tpl"); $this->app->YUI->TableSearch('TAB1',"bestellungen"); $this->app->YUI->TableSearch('TAB2',"bestellungeninbearbeitung"); $this->app->Tpl->Set('SELDRUCKER', $this->app->erp->GetSelectDrucker($this->app->User->GetParameter('rechnung_list_drucker'))); $this->app->Tpl->Parse('PAGE',"bestellunguebersicht.tpl"); return; /* // suche $sql = $this->app->erp->BestellungSuche(); // offene Bestellungen $this->app->Tpl->Set(SUBSUBHEADING,"Offene Bestellunge"); $table = new EasyTable($this->app); $table->Query($sql,$_SESSION[bestellungtreffer]); //$table->Query("SELECT DATE_FORMAT(a.datum,'%d.%m.%Y') as vom, if(a.belegnr,a.belegnr,'ohne Nummer') as Bestellung, a.name, p.abkuerzung as projekt, a.id // FROM bestellung a, projekt p WHERE (a.status='freigegeben' OR a.status='versendet') AND p.id=a.projekt order by a.datum DESC, a.id DESC",10); $table->DisplayOwn(INHALT, "<a href=\"index.php?module=bestellung&action=edit&id=%value%\"><img border=\"0\" src=\"./themes/new/images/edit.svg\"></a> <a href=\"index.php?module=bestellung&action=pdf&id=%value%\"><img border=\"0\" src=\"./themes/new/images/pdf.svg\"></a> <a onclick=\"if(!confirm('Wirklich kopieren?')) return false; else window.location.href='index.php?module=bestellung&action=copy&id=%value%';\"> <img src=\"./themes/new/images/copy.svg\" border=\"0\"></a> <a onclick=\"if(!confirm('Weiterfüfhren als Auftrag?')) return false; else window.location.href='index.php?module=bestellung&action=auftrag&id=%value%';\"> <img src=\"./themes/new/images/right.png\" border=\"0\"></a> "); $this->app->Tpl->Parse(TAB1,"rahmen70.tpl"); $this->app->Tpl->Set(INHALT,""); // wartende Bestellungen $table = new EasyTable($this->app); $table->Query("SELECT DATE_FORMAT(a.datum,'%d.%m.%y') as vom, if(a.belegnr,a.belegnr,'ohne Nummer') as Bestellung, ad.lieferantennummer as kunde, a.name, p.abkuerzung as projekt, a.id FROM bestellung a, projekt p, adresse ad WHERE (a.status='freigegeben' OR a.status='versendet') AND p.id=a.projekt AND a.adresse=ad.id order by a.datum DESC, a.id DESC"); $table->DisplayNew(INHALT, "<a href=\"index.php?module=bestellung&action=edit&id=%value%\"><img border=\"0\" src=\"./themes/new/images/edit.svg\"></a> <a href=\"index.php?module=bestellung&action=pdf&id=%value%\"><img border=\"0\" src=\"./themes/new/images/pdf.svg\"></a> <a onclick=\"if(!confirm('Wirklich kopieren?')) return false; else window.location.href='index.php?module=bestellung&action=copy&id=%value%';\"> <img src=\"./themes/new/images/copy.svg\" border=\"0\"></a> "); $this->app->Tpl->Parse(TAB2,"rahmen70.tpl"); $this->app->Tpl->Set(INHALT,""); // In Bearbeitung $this->app->Tpl->Set(SUBSUBHEADING,"In Bearbeitung"); $table = new EasyTable($this->app); $table->Query("SELECT DATE_FORMAT(datum,'%d.%m.%y') as vom, if(belegnr,belegnr,'ohne Nummer') as auftrag, name, vertrieb, status, id FROM bestellung WHERE status='angelegt' order by datum DESC, id DESC"); $table->DisplayNew(INHALT, "<a href=\"index.php?module=bestellung&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=bestellung&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=bestellung&action=copy&id=%value%';\"> <img src=\"./themes/new/images/copy.svg\" border=\"0\"></a> "); $this->app->Tpl->Parse(TAB3,"rahmen70.tpl"); */ /* $this->app->Tpl->Set(TAB2,"lieferant, bestellung, waehrung, sprache, liefertermin, steuersatz, einkäufer, freigabe<br> <br>Bestellung (NR),Bestellart (NB), Bestelldatum <br>Projekt <br>Kostenstelle pro Position <br>Terminbestellung (am xx.xx.xxxx raus damit) <br>vorschlagsdaten für positionen <br>proposition reinklicken zum ändern und reihenfolge tabelle <br>Bestellung muss werden wie bestellung (bestellung beschreibung = allgemein) <br>Positionen (wie stueckliste) <br>Wareneingang / Rückstand <br>Etiketten <br>Freigabe <br>Dokument direkt faxen "); */ } function BestellungRechnungsLieferadresse($auftragid) { $data = $this->app->DB->SelectArr("SELECT * FROM bestellung WHERE id='$auftragid' 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']; if($data[0]['abweichendelieferadresse']!=0){ $lieferadresse = $data[0]['liefername']."".$data[0]['lieferansprechpartner']."".$data[0]['lieferabteilung']."".$data[0]['lieferunterabteilung']. "".$data[0]['lieferstrasse']."".$data[0]['lieferadresszusatz']."".$data[0]['lieferland']."-".$data[0]['lieferplz']." ".$data[0]['lieferort']; } else { $lieferadresse = "keine abweichende Lieferadresse"; } return "<table width=\"100%\"> <tr valign=\"top\"><td width=\"50%\"><b>Bestellt bei:</b><br><br>$rechnungsadresse<br></td></tr> <tr><td><b>Lieferadresse:</b><br><br>$lieferadresse</td></tr></table>"; } public function BestellungNeuberechnen($id) { $summeV = $this->app->DB->Select( "SELECT IFNULL(SUM(menge*preis), 0) FROM bestellung_position WHERE umsatzsteuer!='ermaessigt' AND umsatzsteuer!='befreit' AND bestellung='$id' AND (isnull(steuersatz) OR steuersatz < 0)" ); $summeR = $this->app->DB->Select("SELECT IFNULL(SUM(menge*preis), 0) FROM bestellung_position WHERE umsatzsteuer='ermaessigt' AND bestellung='$id' AND (isnull(steuersatz) OR steuersatz < 0)"); $summeS = (float)$this->app->DB->Select("SELECT IFNULL( SUM(menge*preis * if(umsatzsteuer = 'befreit', 0, IF(steuersatz < 0 OR isnull(steuersatz),0,steuersatz / 100) ) ) ,0) FROM bestellung_position WHERE bestellung='$id' AND umsatzsteuer!='ermaessigt' AND umsatzsteuer!='normal' AND ((steuersatz IS NOT NULL AND steuersatz >= 0) OR umsatzsteuer='befreit')"); $summeNetto = $this->app->DB->Select("SELECT IFNULL(SUM(menge*preis),0) FROM bestellung_position WHERE bestellung='$id'"); $ust_befreit = $this->app->DB->Select("SELECT ust_befreit FROM bestellung WHERE id='$id' LIMIT 1"); if($ust_befreit>0) { $rechnungsbetrag = $summeNetto; } else { $rechnungsbetrag = $summeNetto + ($summeV*$this->app->erp->GetSteuersatzNormal(true,$id,'bestellung')-$summeV)+ ($summeR*$this->app->erp->GetSteuersatzErmaessigt(true,$id,'bestellung')-$summeR)+$summeS; } $this->app->DB->Update("UPDATE bestellung SET gesamtsumme='$rechnungsbetrag' WHERE id='$id' LIMIT 1"); } public function DeleteBestellung($id) { if($id <= 0) { return; } $belegnr = $this->app->DB->Select("SELECT belegnr FROM bestellung WHERE id='$id' LIMIT 1"); if($belegnr=='' || $belegnr=='0') { $this->app->DB->Delete("DELETE FROM bestellung_position WHERE bestellung='$id'"); $this->app->DB->Delete("DELETE FROM bestellung_protokoll WHERE bestellung='$id'"); $this->app->DB->Delete("DELETE FROM bestellung WHERE id='$id' LIMIT 1"); } } public function CreateBestellung($adresse='') { $projekt = $this->app->erp->GetCreateProjekt($adresse); $belegmax = ''; $ohnebriefpapier = $this->app->erp->Firmendaten('bestellung_ohnebriefpapier'); $bestellungohnepreis = $this->app->erp->Firmendaten('bestellungohnepreis'); $eigenartikelnummer = $this->app->erp->Firmendaten('bestellungeigeneartikelnummer'); $bestellunglangeartikelnummern = $this->app->erp->Firmendaten('bestellunglangeartikelnummern'); $this->app->DB->Insert("INSERT INTO bestellung (datum,bearbeiter,firma,belegnr,adresse,status,artikelnummerninfotext,ohne_briefpapier,bestellungohnepreis,projekt,langeartikelnummern) VALUES (NOW(),'".$this->app->User->GetName()."','".$this->app->User->GetFirma()."','$belegmax','$adresse','angelegt',".($eigenartikelnummer?'1':'0').",'".$ohnebriefpapier."','".$bestellungohnepreis."','".$projekt."',".($bestellunglangeartikelnummern?'1':'0').')'); $id = $this->app->DB->GetInsertID(); $this->app->erp->ObjektProtokoll('bestellung',$id,'bestellung_create','Bestellung angelegt'); $this->app->erp->SchnellFreigabe('bestellung',$id); $this->app->erp->LoadSteuersaetzeWaehrung($id,'bestellung'); $this->app->erp->EventAPIAdd('EventBestellungCreate',$id,'bestellung','create'); return $id; } public function AddBestellungPosition($bestellung, $einkauf,$menge,$datum, $beschreibung = '',$artikel='',$einheit='', $waehrung = '') { $beschreibung = $this->app->DB->real_escape_string($beschreibung); if($artikel<=0) { if($einkauf > 0){ $einkaufarr = $this->app->DB->SelectRow("SELECT * FROM einkaufspreise WHERE id='$einkauf' LIMIT 1"); } if(!empty($einkaufarr)) { $artikel = $einkaufarr['artikel']; $article = $this->app->DB->SelectRow( "SELECT `nummer`, `name_de`, `name_en`, `umsatzsteuer` FROM `artikel` WHERE `id` = {$artikel}" ); $preis = $einkaufarr['preis']; $projekt = $einkaufarr['projekt']; $waehrung = $einkaufarr['waehrung']; $vpe = $einkaufarr['vpe']; $bezeichnunglieferant = $this->app->DB->real_escape_string($einkaufarr['bezeichnunglieferant']); $bestellnummer = $this->app->DB->real_escape_string($einkaufarr['bestellnummer']); }else{ $artikel = 0; $preis = 0; $projekt = 0; $waehrung = ''; $vpe = ''; $bezeichnunglieferant = ''; $bestellnummer = ''; } }else{ $article = $this->app->DB->SelectRow( "SELECT `nummer`, `name_de`, `name_en`, `umsatzsteuer` FROM `artikel` WHERE `id` = {$artikel}" ); $bestellnummer = $article['nummer']; $bezeichnunglieferant = $this->app->DB->real_escape_string($article['name_de']); $projekt = $projekt = $this->app->DB->Select("SELECT projekt FROM bestellung WHERE id='$bestellung' LIMIT 1"); $preis = 0; } if($projekt <= 0) { $projekt = $this->app->DB->Select("SELECT projekt FROM bestellung WHERE id='$bestellung' LIMIT 1"); } if($bezeichnunglieferant==''){ $languageIso = $this->app->erp->GetSpracheBelegISO('bestellung', $bestellung); if($languageIso === 'EN'){ $bezeichnunglieferant = $this->app->DB->real_escape_string($article['name_en']); } if(empty($bezeichnunglieferant)){ $bezeichnunglieferant = $this->app->DB->real_escape_string($article['name_de']); } } $umsatzsteuer = $article['umsatzsteuer']; if($umsatzsteuer=='') { $umsatzsteuer='normal'; } $sort = $this->app->DB->Select("SELECT MAX(sort) FROM bestellung_position WHERE bestellung='$bestellung' LIMIT 1"); $sort++; $this->app->DB->Insert("INSERT INTO bestellung_position (bestellung,artikel,bezeichnunglieferant,bestellnummer,menge,preis, waehrung, sort,lieferdatum, umsatzsteuer, status,projekt,vpe, beschreibung,einheit) VALUES ('$bestellung','$artikel','$bezeichnunglieferant','$bestellnummer','$menge','$preis','$waehrung','$sort','$datum','$umsatzsteuer','angelegt','$projekt','$vpe','$beschreibung','$einheit')"); return $this->app->DB->GetInsertID(); } public function CopyBestellung($id) { $this->app->DB->Insert('INSERT INTO bestellung (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,einkaeufer,zahlungsweise,zahlungszieltage,'angelegt' as status,typ, zahlungszieltageskonto,zahlungszielskonto,firma,'angelegt' as status,abweichendelieferadresse,liefername,lieferabteilung,lieferunterabteilung,ust_befreit, lieferland,lieferstrasse,lieferort,lieferplz,lieferadresszusatz,lieferansprechpartner,sprache,anzeigesteuer,waehrung,kostenstelle FROM bestellung WHERE id='$id' LIMIT 1"); $arr['bundesstaat'] = $this->app->DB->Select("SELECT bundesstaat FROM bestellung WHERE id='$id' LIMIT 1"); $this->app->DB->UpdateArr('bestellung',$newid,'id',$arr, true); $pos = $this->app->DB->SelectArr("SELECT * FROM bestellung_position WHERE bestellung='$id'"); $cpos = !empty($pos)?count($pos):0; for($i=0;$i<$cpos;$i++){ $this->app->DB->Insert("INSERT INTO bestellung_position (bestellung) VALUES ($newid)"); $newposid = $this->app->DB->GetInsertID(); $pos[$i]['bestellung']=$newid; $pos[$i]['auftrag_position_id']=0; $this->app->DB->UpdateArr('bestellung_position',$newposid,'id',$pos[$i], true); if(is_null($pos[$i]['steuersatz'])){ $this->app->DB->Update("UPDATE bestellung_position SET steuersatz = null WHERE id = '$newposid' LIMIT 1"); } } $this->app->erp->CheckFreifelder('bestellung',$newid); $this->app->erp->CopyBelegZwischenpositionen('bestellung',$id,'bestellung',$newid); $this->app->DB->Update("UPDATE bestellung_position SET geliefert=0, mengemanuellgeliefertaktiviert=0,abgeschlossen='0',abgerechnet='0' WHERE bestellung='$newid'"); $this->app->erp->LoadSteuersaetzeWaehrung($newid,'bestellung'); $this->app->erp->SchnellFreigabe('bestellung',$newid); return $newid; } public function LoadBestellungStandardwerte($id,$adresse) { // standard adresse von lieferant $arr = $this->app->DB->SelectArr("SELECT * FROM adresse WHERE id='$adresse' AND geloescht=0 LIMIT 1"); $rolle_projekt = $this->app->DB->Select("SELECT parameter FROM adresse_rolle WHERE adresse='$adresse' AND subjekt='Lieferant' AND objekt='Projekt' AND (bis ='0000-00-00' OR bis <= NOW()) LIMIT 1"); if($rolle_projekt > 0) { $arr[0]['projekt'] = $rolle_projekt; } $field = array('anschreiben','name','abteilung','unterabteilung','strasse','adresszusatz','plz','ort','land','ustid','email','telefon','telefax','lieferantennummer','projekt','ust_befreit','titel','lieferbedingung','ansprechpartner'); 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("'", ''',$arr[0][$value]); $uparr[$value] = str_replace("'", ''',$arr[0][$value]); } //$this->app->Secure->POST[$value] = $arr[0][$value]; //$uparr[$value] = $arr[0][$value]; } $uparr['adresse'] = $adresse; $this->app->DB->UpdateArr('bestellung',$id,'id',$uparr); $uparr=null; //liefernantenvorlage $arr = $this->app->DB->SelectArr("SELECT kundennummerlieferant as kundennummer, zahlungsweiselieferant as zahlungsweise, zahlungszieltagelieferant as zahlungszieltage, zahlungszieltageskontolieferant as zahlungszieltageskonto, zahlungszielskontolieferant as zahlungszielskonto, versandartlieferant as versandart, waehrung 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[0]['projekt'] = $uparr['projekt']; $this->app->Secure->POST['projekt']=$this->app->DB->Select("SELECT abkuerzung FROM projekt WHERE id='".$arr[0]['projekt']."' AND id > 0 LIMIT 1"); } $field = array('kundennummer','zahlungsweise','zahlungszieltage','zahlungszieltageskonto','zahlungszielskonto','versandart','waehrung'); foreach($field as $key=>$value) { $uparr[$value] = $arr[0][$value]; $this->app->Secure->POST[$value] = $arr[0][$value]; } $this->app->DB->UpdateArr('bestellung',$id,'id',$uparr); //standardprojekt //$projekt = $this->app->DB->Select("SELECT projekt FROM adresse WHERE id='$adresse' AND geloescht=0 LIMIT 1"); //$this->app->Secure->POST[projekt] = $projekt; $this->app->erp->LoadAdresseStandard('bestellung',$id,$adresse); } public function BestellungEAN() { $id=$this->app->Secure->GetGET("id"); $scanner=$this->app->Secure->GetPOST("scanner"); $menge=$this->app->Secure->GetPOST("menge"); $posAdd = $this->app->Secure->GetPOST('posadd'); $posDel = $this->app->Secure->GetPost('posdel'); /** @var ScanArticleService $scanArticleService */ $scanArticleService = $this->app->Container->get('ScanArticleService'); $this->BestellungMenu(); $schreibschutz = $this->app->DB->Select("SELECT schreibschutz FROM bestellung WHERE id='$id' LIMIT 1"); if($scanner!="" && $schreibschutz!="1") { if(!is_numeric($menge)){ $menge=1; } $adresse = $this->app->DB->Select("SELECT adresse FROM bestellung WHERE id='$id' LIMIT 1"); try{ $scanArticleService->writeArticleToSession('bestellung',$scanner,$menge,$id); } catch(ArticleNotFoundException $e){ $this->app->Tpl->Set('TAB1',"<div class=\"error\">{|Der Artikel wurde nicht gefunden|}: ".$scanner."</div>"); } catch(InvalidArgumentException $e){ $this->app->Tpl->Set('TAB1',"<div class=\"error\">{|Fehler beim Schreiben in die Session|}</div>"); } } if($schreibschutz=="1"){ $this->app->Tpl->Set('TAB1',"<div class=\"info\">Der Schreibschutz ist aktiviert. Bitte entfernen Sie diesen.</div>"); } else{ if(!empty($posAdd)){ try{ $scanArticleService->savePositions('bestellung',$id); $this->app->Tpl->Set('MESSAGE',"<div class=\"info\">{|Positionen hinzugefügt|}</div>"); } catch(Exception $e){ $this->app->Tpl->Set('MESSAGE',"<div class=\"error\">{|Positionen nicht gespeichert|}!</div>"); } } if(!empty($posDel)){ $scanArticleService->clearAllArticleDataInSession('bestellung'); } $gescannteArtikel = $scanArticleService->getAllArticleDataFromSession('bestellung'); if(!empty($gescannteArtikel)){ $table = new EasyTable($this->app); $table->headings = ['Artikelnummer','Artikel','Menge','Preis']; foreach($gescannteArtikel as $a){ $row['nummer'] = $a['number']; $row['name'] = $a['name']; $row['menge'] = $a['amount']; $row['preis'] = $a['price']; if(!empty($row)){ $table->AddRow($row); } } $table->DisplayNew('GESCANNTEARTIKEL','Preis','noAction'); $this->app->Tpl->Set('POSITIONENSPEICHERN','<input type="submit" id="posadd" name="posadd" value="Positionen hinzufügen"><input type="submit" id="posdel" name="posdel" value="Löschen">'); } $this->app->Tpl->Parse('TAB1',"bestellung_ean.tpl"); } $this->app->Tpl->Parse('PAGE',"tabview.tpl"); } }