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'] .= "(".floatval($pr['ab_menge']).": ".number_format($pr['preis'],2,',','.').") ";
-
- }
- $table->datasets[$k]['preis'] .= '
';
- }
- } 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 = "Bestellung freigeben ";
-
- if($status!="angelegt" && $status!="abgeschlossen")
- $abschliessen = "Bestellung 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 = 'Bestellung einlagern ';
- }
-
- if($status === 'abgeschlossen') {
- $freigegeben = "als freigegeben markieren ";
- }
- if($status === 'abgeschlossen' || $status=="freigegeben")
- $alsversendet = "als versendet markieren ";
-
-
-
- if($status=="storniert")
- $storno = "Bestellung Storno rückgängig ";
- else if($status!="storniert")
- $storno = "Bestellung stornieren ";
-
- 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 = "Export als CSV ";
- }
-
-
- $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:
- bitte wählen ...
- $storno
- Bestellung kopieren
- Bestellung abschicken
- $freigabe
- $alsversendet
- $freigegeben
- $abschliessen
- $einlagern
- $hookoption
- $optionbelegeimport
- PDF öffnen
-
-
-
- ";
-
- //$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',"");
- }
-
- 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 .= '' . ucfirst($zahlungsweise['zahlungsweise']) . ' ';
- }
- }
-
- $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 .= '' . ucfirst($statusE['status']) . ' ';
- }
- }
-
- $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 .= '' . ucfirst($versandart['versandart']) . ' ';
- }
- }
-
- $laender = $this->app->erp->GetSelectLaenderliste();
- $laenderStr = '';
- foreach ($laender as $landKey => $land) {
- $laenderStr .= '' . $land . ' ';
- }
-
- $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'] .= "(".floatval($pr['ab_menge']).": ".number_format($pr['preis'],2,',','.').") ";
+
+ }
+ $table->datasets[$k]['preis'] .= '
';
+ }
+ } 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 = "Bestellung freigeben ";
+
+ if($status!="angelegt" && $status!="abgeschlossen")
+ $abschliessen = "Bestellung 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 = 'Bestellung einlagern ';
+ }
+
+ if($status === 'abgeschlossen') {
+ $freigegeben = "als freigegeben markieren ";
+ }
+ if($status === 'abgeschlossen' || $status=="freigegeben")
+ $alsversendet = "als versendet markieren ";
+
+
+
+ if($status=="storniert")
+ $storno = "Bestellung Storno rückgängig ";
+ else if($status!="storniert")
+ $storno = "Bestellung stornieren ";
+
+ 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 = "Export als CSV ";
+ }
+
+
+ $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:
+ bitte wählen ...
+ $storno
+ Bestellung kopieren
+ Bestellung abschicken
+ $freigabe
+ $alsversendet
+ $freigegeben
+ $abschliessen
+ $einlagern
+ $hookoption
+ $optionbelegeimport
+ PDF öffnen
+
+
+
+ ";
+
+ //$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',"");
+ }
+
+ 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 .= '' . ucfirst($zahlungsweise['zahlungsweise']) . ' ';
+ }
+ }
+
+ $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 .= '' . ucfirst($statusE['status']) . ' ';
+ }
+ }
+
+ $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 .= '' . ucfirst($versandart['versandart']) . ' ';
+ }
+ }
+
+ $laender = $this->app->erp->GetSelectLaenderliste();
+ $laenderStr = '';
+ foreach ($laender as $landKey => $land) {
+ $laenderStr .= '' . $land . ' ';
+ }
+
+ $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;