From d2862cb130f256a01849d0657684735dc7b75129 Mon Sep 17 00:00:00 2001 From: Xenomporio <> Date: Mon, 30 May 2022 15:40:17 +0200 Subject: [PATCH] Bugfix bestellung --- www/js/ajax_001.js | 1 + www/pages/artikel.php | 4 +- www/pages/bestellung.php | 5014 ++++++++++++++-------------- www/themes/new/templates/popup.tpl | 17 +- 4 files changed, 2526 insertions(+), 2510 deletions(-) diff --git a/www/js/ajax_001.js b/www/js/ajax_001.js index 43f1c1f5..972e6914 100644 --- a/www/js/ajax_001.js +++ b/www/js/ajax_001.js @@ -1555,6 +1555,7 @@ function processData( xmlHttp, intID ) render=1; document.getElementById("artikel").value=trim(mySplitResult[0]); document.getElementById("nummer").value=mySplitResult[1]; + if(mySplitResult[1]=="") { alert('In der Schnelleingabe können nur Artikel aus den Stammdaten eingefügt werden. Klicken Sie auf Artikel manuell suchen / neu anlegen.'); } else { diff --git a/www/pages/artikel.php b/www/pages/artikel.php index 1c7431f9..5cb70b0d 100644 --- a/www/pages/artikel.php +++ b/www/pages/artikel.php @@ -3489,7 +3489,7 @@ class Artikel extends GenArtikel { } } else { $commandline = $id; - $tmp_id = explode(' ',$commandline); + $tmp_id = explode(',',$commandline); $tmp_id = $tmp_id[0]; // $id = substr($id,0,6); if($tmp_id!='') @@ -3511,8 +3511,10 @@ class Artikel extends GenArtikel { } else { $this->app->ExitXentral(); } + $id = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer='$id' AND geloescht!=1 AND intern_gesperrt!=1 LIMIT 1"); } + if(!is_numeric($id)) { echo '#*##*##*##*##*##*##*#'; diff --git a/www/pages/bestellung.php b/www/pages/bestellung.php index eb6fbcb6..9514a305 100644 --- a/www/pages/bestellung.php +++ b/www/pages/bestellung.php @@ -1,2509 +1,2511 @@ -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)){ - $adresse = $bestRow['name']; - } - else{ - $adresse = $nummer; - } - - $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("
Bestellung \"$name\" ($belegnr) wurde wieder freigegeben!
"); - } else { - $msg = $this->app->erp->base64_url_encode("
Bestellung \"$name\" ($belegnr) kann nicht wieder freigegeben werden, da sie nicht storniert ist.
"); - } - //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("
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!
"); - $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("
Die Bestellung wurde eingelagert!
"); - $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(count($alleLagerArtikelVonBestellung)>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'=>'
'.$table->DisplayNew('return','Lager','noAction').'
')); - }else{ - echo json_encode(array('inhalt'=>'
kein Lagerartikel
')); - } - $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'] .= ' '; - } - 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',"".$lieferantennummer." ".$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',''.$preisanfrage.'  '); - } - - 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',"$projektabkuerzung"); - 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),'
Best-Nr.:',ap.bestellnummer,'') as artikel, - CONCAT('',a.nummer,'') as nummer, - CONCAT('',(TRIM(ap.menge)+0),'') 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('',FORMAT(ap.preis,2,'de_DE'),'". - " app->Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\">" - ."','') 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'] = ''.$table->datasets[$k]['geliefert'].''; - $table->datasets[$k]['Menge'] = ''.$table->datasets[$k]['Menge'].''; - - } else { - $table->datasets[$k]['geliefert'] = ''.$table->datasets[$k]['geliefert'].''; - $table->datasets[$k]['Menge'] = ''.$table->datasets[$k]['Menge'].''; - } - - - $table->datasets[$k]['preis'] = '
'.$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'] .= '  
'; - foreach($epreise as $key => $pr) - { - $table->datasets[$k]['preis'] .= ""; - - } - $table->datasets[$k]['preis'] .= '
(".floatval($pr['ab_menge']).":".number_format($pr['preis'],2,',','.').")
'; - } - } else { - $table->datasets[$k]['preis'] .= ''; - } - $table->datasets[$k]['preis'] .= "
"; - - } - - $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[] = ''.($row['belegnr']?$row['belegnr']:'Entwurf').' - - '; - - $lieferscheineTemp = $this->app->DB->SelectPairs( - "SELECT - l.id, - CONCAT( - '','>'), - if(l.belegnr='0' OR l.belegnr='','ENTWURF',l.belegnr), - if(l.status='storniert','',''), - '   - ' - ) 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( - '','>'), - if(r.belegnr='0' OR r.belegnr='','ENTWURF',r.belegnr), - if(r.status='storniert','',''), - '   - ' - ) 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('
', $auftraege)); - } - - if(!empty($lieferscheine)){ - $this->app->Tpl->Set('LIEFERSCHEIN', implode('
', $lieferscheine)); - } - - if(!empty($rechnungen)){ - $this->app->Tpl->Set('RECHNUNG', implode('
', $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'] = ''; - $tmp3->datasets[] = $tmpr; - } - } - - $tmp3->DisplayNew('PDFARCHIV','Menü',"noAction"); - } - - $wareneingangsbelege = $this->app->DB->SelectFirstCols("SELECT - CONCAT('','>'),if(r.document_number='0' OR document_number='','ENTWURF',r.document_number),if(r.status='storniert','',''),'   - ') as wareneingangsbeleg - FROM receiptdocument r WHERE r.supplier_order_id='$id'"); - - if(!empty($wareneingangsbelege)){ - $this->app->Tpl->Add('WARENEINGANGSBELEG', implode('
', $wareneingangsbelege)); - } - 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("
Die Bestellung wurde als versendet markiert!
"); - $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("
Die Bestellung wurde als abgeschlossen markiert!
"); - $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("
Die Bestellung wurde auf freigegeben gesetzt!
"); - }else{ - $msg = $this->app->erp->base64_url_encode("
Die Bestellung ist nicht abgeschlossen!
"); - } - }else{ - $msg = $this->app->erp->base64_url_encode("
Es wurde keine Bestellung angeben!
"); - $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("
Die Bestellung wurde freigegeben und kann jetzt versendet werden!
"); - $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("
Die Bestellung wurde bereits freigegeben!
"); - $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', "
Soll die Bestellung an $name im Wert von $summe $waehrung - jetzt freigegeben werden?  $extra -
"); - } - } - $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('',(SELECT SUM(l.menge) FROM lager_platz_inhalt l WHERE l.artikel=ap.artikel),''), - 'aus'))) 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("
Die Bestellung \"$name\" ($belegnr) wurde gelöscht!
"); - //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("
Rechnung \"$name\" ($belegnr) wurde geöscht !
"); - } else - { - $msg = $this->app->erp->base64_url_encode("
Bestellung \"$name\" ($belegnr) kann nicht storniert werden da sie bereits storniert ist!
"); - } - $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("
Die Bestellung \"$name\" ($belegnr) wurde storniert!
"); - $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 ""; - $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,"
Noch nicht freigegebene Bestellungen können nicht als PDF betrachtet werden.!
"); - - - $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
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 = ""; - - if($status!="angelegt" && $status!="abgeschlossen") - $abschliessen = ""; - - $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 = ''; - } - - if($status === 'abgeschlossen') { - $freigegeben = ""; - } - if($status === 'abgeschlossen' || $status=="freigegeben") - $alsversendet = ""; - - - - if($status=="storniert") - $storno = ""; - else if($status!="storniert") - $storno = ""; - - 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 = ""; - } - - - $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 =" - - - -  Aktion:   - - - "; - - //$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',"
Eventuell ist die Artikelnummer zu lang. Sie können die Funktion \"Lange Artikelnummer\" weiter unten aktivieren.
"); - } -*/ - $Brief = new Briefpapier($this->app); - if($Brief->zuArchivieren($id, "bestellung")) - { - $this->app->Tpl->Add('MESSAGE',"
Die Bestellung ist noch nicht archiviert! Bitte versenden oder manuell archivieren.
"); - }elseif(!$this->app->DB->Select("SELECT versendet FROM bestellung WHERE id = '$id' LIMIT 1")) - { - - $this->app->Tpl->Add('MESSAGE',"
Die Bestellung wurde noch nicht versendet!
"); - } - } - - 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. ".$lieferantennummer.""); - 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',"
Zu dieser Bestellung gehör".(count($check) == 1?'t der Auftrag':'en die Aufträge:')); - foreach($check as $row) - { - $this->app->Tpl->Add('MESSAGE',' '); - } - $this->app->Tpl->Add('MESSAGE',"
"); - } - - 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',""); - } - $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',"
Diese Bestellung ist schreibgeschützt und darf daher nicht mehr bearbeitet werden! 
"); - // $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',"
Die Lieferung wird ab ".number_format($portofreiablieferant,2,',','.')." EUR (netto) Portofrei. - Aktuell sind nur ".number_format($gesamtsumme,2,',','.')." EUR (netto) in der Bestellung.
"); - } - } - - if($schreibschutz != '1'){ - if($this->app->erp->Firmendaten("schnellanlegen") == "1"){ - $this->app->Tpl->Set('BUTTON_UEBERNEHMEN', ' - '); - }else{ - $this->app->Tpl->Set('BUTTON_UEBERNEHMEN', ' - - '); - } - } - - // 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',"app->erp->GetAdressName($bearbeiter)."\" readonly>"); - - $this->app->Tpl->Set('STATUS',""); - - if($bestellung!='') $bestellung="keine Nummer"; - $this->app->Tpl->Set('ANGEBOT',""); - - 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, "
Zu zahlen: $summe (netto) $summebrutto (brutto) $waehrung ($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,"
  • Bestellung

  • "); - $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',"
    Möchten Sie eine Bestellung jetzt anlegen?   -

    "); - $this->app->Tpl->Set('TAB1'," - - - - -
    -
    Bestellungen in Bearbeitung -
    -
    - Offene Bestellunge, die durch andere Mitarbeiter in Bearbeitung sind. -
    -
    -
    - [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, " - - - - - "); - */ - - $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,"
  • Allgemein

  • "); - $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(count($tmpfile) > 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 .= ''; - } - } - - $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 .= ''; - } - } - - $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 .= ''; - } - } - - $laender = $this->app->erp->GetSelectLaenderliste(); - $laenderStr = ''; - foreach ($laender as $landKey => $land) { - $laenderStr .= ''; - } - - $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, " - - - - - - - "); - $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, " - - - - "); - $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, " - - - - - "); - - $this->app->Tpl->Parse(TAB3,"rahmen70.tpl"); - */ - - - /* - $this->app->Tpl->Set(TAB2,"lieferant, bestellung, waehrung, sprache, liefertermin, steuersatz, einkäufer, freigabe
    -
    Bestellung (NR),Bestellart (NB), Bestelldatum -
    Projekt -
    Kostenstelle pro Position -
    Terminbestellung (am xx.xx.xxxx raus damit) -
    vorschlagsdaten für positionen -
    proposition reinklicken zum ändern und reihenfolge tabelle -
    Bestellung muss werden wie bestellung (bestellung beschreibung = allgemein) -
    Positionen (wie stueckliste) -
    Wareneingang / Rückstand -
    Etiketten -
    Freigabe -
    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].'
    '; - } - } - - - $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 " - -
    Bestellt bei:

    $rechnungsadresse
    Lieferadresse:

    $lieferadresse
    "; - } - - 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',"
    {|Der Artikel wurde nicht gefunden|}: ".$scanner."
    "); - } catch(InvalidArgumentException $e){ - $this->app->Tpl->Set('TAB1',"
    {|Fehler beim Schreiben in die Session|}
    "); - } - } - - if($schreibschutz=="1"){ - $this->app->Tpl->Set('TAB1',"
    Der Schreibschutz ist aktiviert. Bitte entfernen Sie diesen.
    "); - } - else{ - - if(!empty($posAdd)){ - try{ - $scanArticleService->savePositions('bestellung',$id); - $this->app->Tpl->Set('MESSAGE',"
    {|Positionen hinzugefügt|}
    "); - } catch(Exception $e){ - $this->app->Tpl->Set('MESSAGE',"
    {|Positionen nicht gespeichert|}!
    "); - } - } - - 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',''); - } - - $this->app->Tpl->Parse('TAB1',"bestellung_ean.tpl"); - } - $this->app->Tpl->Parse('PAGE',"tabview.tpl"); - } -} +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("
    Bestellung \"$name\" ($belegnr) wurde wieder freigegeben!
    "); + } else { + $msg = $this->app->erp->base64_url_encode("
    Bestellung \"$name\" ($belegnr) kann nicht wieder freigegeben werden, da sie nicht storniert ist.
    "); + } + //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("
    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!
    "); + $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("
    Die Bestellung wurde eingelagert!
    "); + $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(count($alleLagerArtikelVonBestellung)>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'=>'
    '.$table->DisplayNew('return','Lager','noAction').'
    ')); + }else{ + echo json_encode(array('inhalt'=>'
    kein Lagerartikel
    ')); + } + $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'] .= ' '; + } + 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',"".$lieferantennummer." ".$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',''.$preisanfrage.'  '); + } + + 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',"$projektabkuerzung"); + 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),'
    Best-Nr.:',ap.bestellnummer,'') as artikel, + CONCAT('',a.nummer,'') as nummer, + CONCAT('',(TRIM(ap.menge)+0),'') 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('',FORMAT(ap.preis,2,'de_DE'),'". + " app->Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\">" + ."','') 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'] = ''.$table->datasets[$k]['geliefert'].''; + $table->datasets[$k]['Menge'] = ''.$table->datasets[$k]['Menge'].''; + + } else { + $table->datasets[$k]['geliefert'] = ''.$table->datasets[$k]['geliefert'].''; + $table->datasets[$k]['Menge'] = ''.$table->datasets[$k]['Menge'].''; + } + + + $table->datasets[$k]['preis'] = '
    '.$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'] .= '  
    '; + foreach($epreise as $key => $pr) + { + $table->datasets[$k]['preis'] .= ""; + + } + $table->datasets[$k]['preis'] .= '
    (".floatval($pr['ab_menge']).":".number_format($pr['preis'],2,',','.').")
    '; + } + } else { + $table->datasets[$k]['preis'] .= ''; + } + $table->datasets[$k]['preis'] .= "
    "; + + } + + $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[] = ''.($row['belegnr']?$row['belegnr']:'Entwurf').' + + '; + + $lieferscheineTemp = $this->app->DB->SelectPairs( + "SELECT + l.id, + CONCAT( + '','>'), + if(l.belegnr='0' OR l.belegnr='','ENTWURF',l.belegnr), + if(l.status='storniert','',''), + '   + ' + ) 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( + '','>'), + if(r.belegnr='0' OR r.belegnr='','ENTWURF',r.belegnr), + if(r.status='storniert','',''), + '   + ' + ) 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('
    ', $auftraege)); + } + + if(!empty($lieferscheine)){ + $this->app->Tpl->Set('LIEFERSCHEIN', implode('
    ', $lieferscheine)); + } + + if(!empty($rechnungen)){ + $this->app->Tpl->Set('RECHNUNG', implode('
    ', $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'] = ''; + $tmp3->datasets[] = $tmpr; + } + } + + $tmp3->DisplayNew('PDFARCHIV','Menü',"noAction"); + } + + $wareneingangsbelege = $this->app->DB->SelectFirstCols("SELECT + CONCAT('','>'),if(r.document_number='0' OR document_number='','ENTWURF',r.document_number),if(r.status='storniert','',''),'   + ') as wareneingangsbeleg + FROM receiptdocument r WHERE r.supplier_order_id='$id'"); + + if(!empty($wareneingangsbelege)){ + $this->app->Tpl->Add('WARENEINGANGSBELEG', implode('
    ', $wareneingangsbelege)); + } + 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("
    Die Bestellung wurde als versendet markiert!
    "); + $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("
    Die Bestellung wurde als abgeschlossen markiert!
    "); + $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("
    Die Bestellung wurde auf freigegeben gesetzt!
    "); + }else{ + $msg = $this->app->erp->base64_url_encode("
    Die Bestellung ist nicht abgeschlossen!
    "); + } + }else{ + $msg = $this->app->erp->base64_url_encode("
    Es wurde keine Bestellung angeben!
    "); + $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("
    Die Bestellung wurde freigegeben und kann jetzt versendet werden!
    "); + $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("
    Die Bestellung wurde bereits freigegeben!
    "); + $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', "
    Soll die Bestellung an $name im Wert von $summe $waehrung + jetzt freigegeben werden?  $extra +
    "); + } + } + $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('',(SELECT SUM(l.menge) FROM lager_platz_inhalt l WHERE l.artikel=ap.artikel),''), + 'aus'))) 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("
    Die Bestellung \"$name\" ($belegnr) wurde gelöscht!
    "); + //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("
    Rechnung \"$name\" ($belegnr) wurde geöscht !
    "); + } else + { + $msg = $this->app->erp->base64_url_encode("
    Bestellung \"$name\" ($belegnr) kann nicht storniert werden da sie bereits storniert ist!
    "); + } + $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("
    Die Bestellung \"$name\" ($belegnr) wurde storniert!
    "); + $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 ""; + $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,"
    Noch nicht freigegebene Bestellungen können nicht als PDF betrachtet werden.!
    "); + + + $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
    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 = ""; + + if($status!="angelegt" && $status!="abgeschlossen") + $abschliessen = ""; + + $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 = ''; + } + + if($status === 'abgeschlossen') { + $freigegeben = ""; + } + if($status === 'abgeschlossen' || $status=="freigegeben") + $alsversendet = ""; + + + + if($status=="storniert") + $storno = ""; + else if($status!="storniert") + $storno = ""; + + 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 = ""; + } + + + $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 =" + + + +  Aktion:   + + + "; + + //$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',"
    Eventuell ist die Artikelnummer zu lang. Sie können die Funktion \"Lange Artikelnummer\" weiter unten aktivieren.
    "); + } +*/ + $Brief = new Briefpapier($this->app); + if($Brief->zuArchivieren($id, "bestellung")) + { + $this->app->Tpl->Add('MESSAGE',"
    Die Bestellung ist noch nicht archiviert! Bitte versenden oder manuell archivieren.
    "); + }elseif(!$this->app->DB->Select("SELECT versendet FROM bestellung WHERE id = '$id' LIMIT 1")) + { + + $this->app->Tpl->Add('MESSAGE',"
    Die Bestellung wurde noch nicht versendet!
    "); + } + } + + 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. ".$lieferantennummer.""); + 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',"
    Zu dieser Bestellung gehör".(count($check) == 1?'t der Auftrag':'en die Aufträge:')); + foreach($check as $row) + { + $this->app->Tpl->Add('MESSAGE',' '); + } + $this->app->Tpl->Add('MESSAGE',"
    "); + } + + 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',""); + } + $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',"
    Diese Bestellung ist schreibgeschützt und darf daher nicht mehr bearbeitet werden! 
    "); + // $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',"
    Die Lieferung wird ab ".number_format($portofreiablieferant,2,',','.')." EUR (netto) Portofrei. + Aktuell sind nur ".number_format($gesamtsumme,2,',','.')." EUR (netto) in der Bestellung.
    "); + } + } + + if($schreibschutz != '1'){ + if($this->app->erp->Firmendaten("schnellanlegen") == "1"){ + $this->app->Tpl->Set('BUTTON_UEBERNEHMEN', ' + '); + }else{ + $this->app->Tpl->Set('BUTTON_UEBERNEHMEN', ' + + '); + } + } + + // 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',"app->erp->GetAdressName($bearbeiter)."\" readonly>"); + + $this->app->Tpl->Set('STATUS',""); + + if($bestellung!='') $bestellung="keine Nummer"; + $this->app->Tpl->Set('ANGEBOT',""); + + 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, "
    Zu zahlen: $summe (netto) $summebrutto (brutto) $waehrung ($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,"
  • Bestellung

  • "); + $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',"
    Möchten Sie eine Bestellung jetzt anlegen?   +

    "); + $this->app->Tpl->Set('TAB1'," + + + + +
    +
    Bestellungen in Bearbeitung +
    +
    + Offene Bestellunge, die durch andere Mitarbeiter in Bearbeitung sind. +
    +
    +
    + [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, " + + + + + "); + */ + + $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,"
  • Allgemein

  • "); + $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(count($tmpfile) > 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 .= ''; + } + } + + $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 .= ''; + } + } + + $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 .= ''; + } + } + + $laender = $this->app->erp->GetSelectLaenderliste(); + $laenderStr = ''; + foreach ($laender as $landKey => $land) { + $laenderStr .= ''; + } + + $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, " + + + + + + + "); + $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, " + + + + "); + $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, " + + + + + "); + + $this->app->Tpl->Parse(TAB3,"rahmen70.tpl"); + */ + + + /* + $this->app->Tpl->Set(TAB2,"lieferant, bestellung, waehrung, sprache, liefertermin, steuersatz, einkäufer, freigabe
    +
    Bestellung (NR),Bestellart (NB), Bestelldatum +
    Projekt +
    Kostenstelle pro Position +
    Terminbestellung (am xx.xx.xxxx raus damit) +
    vorschlagsdaten für positionen +
    proposition reinklicken zum ändern und reihenfolge tabelle +
    Bestellung muss werden wie bestellung (bestellung beschreibung = allgemein) +
    Positionen (wie stueckliste) +
    Wareneingang / Rückstand +
    Etiketten +
    Freigabe +
    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].'
    '; + } + } + + + $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 " + +
    Bestellt bei:

    $rechnungsadresse
    Lieferadresse:

    $lieferadresse
    "; + } + + 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',"
    {|Der Artikel wurde nicht gefunden|}: ".$scanner."
    "); + } catch(InvalidArgumentException $e){ + $this->app->Tpl->Set('TAB1',"
    {|Fehler beim Schreiben in die Session|}
    "); + } + } + + if($schreibschutz=="1"){ + $this->app->Tpl->Set('TAB1',"
    Der Schreibschutz ist aktiviert. Bitte entfernen Sie diesen.
    "); + } + else{ + + if(!empty($posAdd)){ + try{ + $scanArticleService->savePositions('bestellung',$id); + $this->app->Tpl->Set('MESSAGE',"
    {|Positionen hinzugefügt|}
    "); + } catch(Exception $e){ + $this->app->Tpl->Set('MESSAGE',"
    {|Positionen nicht gespeichert|}!
    "); + } + } + + 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',''); + } + + $this->app->Tpl->Parse('TAB1',"bestellung_ean.tpl"); + } + $this->app->Tpl->Parse('PAGE',"tabview.tpl"); + } +} diff --git a/www/themes/new/templates/popup.tpl b/www/themes/new/templates/popup.tpl index 6be0e277..f6c45b8b 100644 --- a/www/themes/new/templates/popup.tpl +++ b/www/themes/new/templates/popup.tpl @@ -271,7 +271,11 @@ function fillArtikelBestellung(id,menge) id = tmp[0]; strSource = "./index.php"; - id = $.base64Encode( id); + + // Force string type + id = ""+id; + id = $.base64Encode(id); + strData = "module=artikel&action=ajaxwerte&id="+id+"&smodule=[MODULE]&sid=[KID]&menge="+menge+"&vpe="+vpe; intType= 0; //GET intID = 0; @@ -302,7 +306,10 @@ function fillArtikelProduktion(id,menge) strSource = "./index.php"; - id = $.base64Encode( id); + // Force string type + id = ""+id; + id = $.base64Encode(id); + strData = "module=artikel&action=ajaxwerte&id="+id+"&smodule=[MODULE]&sid=[KID]&menge="+menge; intType= 0; //GET intID = 0; @@ -343,7 +350,11 @@ function fillArtikelInventur(id,menge) id = tmp[0]; strSource = "./index.php"; - id = $.base64Encode( id); + + // Force string type + id = ""+id; + id = $.base64Encode(id); + strData = "module=artikel&action=ajaxwerte&id="+id+"&smodule=[MODULE]&sid=[KID]&menge="+menge; intType= 0; //GET intID = 0;