");
- if($suchwort!="")
- {
- $table->Query("SELECT DATE_FORMAT(a.datum,'%d.%m.%Y') as datum, a.name, a.belegnr as auftrag, adr.kundennummer, a.internet, a.plz, a.ort, a.strasse, a.zahlungsweise, a.status, a.id FROM auftrag a
- LEFT JOIN adresse adr ON adr.id = a.adresse WHERE (a.name LIKE '%$suchwort%' OR a.email LIKE '%$suchwort%' OR a.plz LIKE '$suchwort%' OR a.internet LIKE '%$suchwort%' OR (adr.kundennummer='$suchwort' AND adr.kundennummer!=0)
- OR (a.gesamtsumme='$suchwort' AND a.gesamtsumme!=0) OR (a.belegnr='$suchwort' AND a.belegnr!='' ))");
- } else {
- if($name!="")
- $table->Query("SELECT DATE_FORMAT(a.datum,'%d.%m.%Y') as datum, a.name, a.belegnr as auftrag, adr.kundennummer, a.internet, a.plz, a.ort, a.strasse, a.zahlungsweise, a.status, a.id FROM auftrag a
- LEFT JOIN adresse adr ON adr.id = a.adresse WHERE (a.name LIKE '%$name%')");
- else if($email!="")
- $table->Query("SELECT DATE_FORMAT(a.datum,'%d.%m.%Y') as datum, a.name, a.belegnr as auftrag, adr.kundennummer, a.internet, a.plz, a.ort, a.strasse, a.zahlungsweise, a.status, a.id FROM auftrag a
- LEFT JOIN adresse adr ON adr.id = a.adresse WHERE (a.email LIKE '%$email%')");
- else if($plz!="")
- $table->Query("SELECT DATE_FORMAT(a.datum,'%d.%m.%Y') as datum, a.name, a.belegnr as auftrag, adr.kundennummer, a.internet, a.plz, a.ort, a.strasse, a.zahlungsweise, a.status, a.id FROM auftrag a
- LEFT JOIN adresse adr ON adr.id = a.adresse WHERE (a.plz LIKE '$plz%')");
- else if($proforma!="")
- $table->Query("SELECT DATE_FORMAT(a.datum,'%d.%m.%Y') as datum, a.name, a.belegnr as auftrag, adr.kundennummer, a.internet, a.plz, a.ort, a.strasse, a.zahlungsweise, a.status, a.id FROM auftrag a
- LEFT JOIN adresse adr ON adr.id = a.adresse WHERE (a.internet LIKE '%$proforma%')");
- else if($kundennummer!="")
- $table->Query("SELECT DATE_FORMAT(a.datum,'%d.%m.%Y') as datum, a.name, a.belegnr as auftrag, adr.kundennummer, a.internet, a.plz, a.ort, a.strasse, a.zahlungsweise, a.status, a.id FROM auftrag a
- LEFT JOIN adresse adr ON adr.id = a.adresse WHERE (adr.kundennummer='$kundennummer')");
- else if($betrag!="")
- $table->Query("SELECT DATE_FORMAT(a.datum,'%d.%m.%Y') as datum, a.name, a.belegnr as auftrag, adr.kundennummer, a.internet, a.plz, a.ort, a.strasse, a.zahlungsweise, a.status, a.id FROM auftrag a
- LEFT JOIN adresse adr ON adr.id = a.adresse WHERE (a.gesamtsumme='$betrag')");
- else if($auftrag!="")
- $table->Query("SELECT DATE_FORMAT(a.datum,'%d.%m.%Y') as datum, a.name, a.belegnr as auftrag, adr.kundennummer, a.internet, a.plz, a.ort, a.strasse, a.zahlungsweise, a.status, a.id FROM auftrag a
- LEFT JOIN adresse adr ON adr.id = a.adresse WHERE (a.belegnr='$auftrag')");
-
- }
- $table->DisplayNew('ERGEBNISSE',"Lesen");
- } else {
- $this->app->Tpl->Add('ERGEBNISSE',"
Der Auftrag \"$name\" ($belegnr) wurde wieder als freigegeben markiert!
");
- $this->app->DB->Update("UPDATE auftrag SET status='freigegeben',schreibschutz=0 WHERE id='$id' LIMIT 1");
- $this->app->DB->Update("UPDATE auftrag_position SET geliefert_menge=0,geliefert=0 WHERE auftrag='$id'");
- $this->app->erp->AuftragProtokoll($id,'Auftrag manuell als freigegeben markiert');
- }
- else
- {
- $msg = $this->app->erp->base64_url_encode('
Der Auftrag wurde abgeschlossen!
');
- }
- $this->app->Location->execute("index.php?module=auftrag&action=edit&id=$id&msg=$msg");
- }
- else {
- $name = $this->app->DB->Select("SELECT a.name FROM auftrag b LEFT JOIN adresse a ON a.id=b.adresse WHERE b.id='$id' LIMIT 1");
- $this->app->Tpl->Set('TAB1',"
Soll der Auftrag an $name jetzt wirklich als freigegeben markiert werden?
-
-
");
- }
- $this->AuftragMenu();
- $this->app->Tpl->Parse('PAGE','tabview.tpl');
- }
-
- /**
- * @param int $orderId
- *
- * @return array
- */
- public function closeOrder($orderId)
- {
- $orderRow = $this->app->DB->SelectRow(
- sprintf(
- 'SELECT name, belegnr, status FROM auftrag WHERE id=%d LIMIT 1',
- $orderId
- )
- );
- if(empty($orderRow)) {
- return ['error' => 'Auftrag nicht gefunden'];
- }
- $status = $orderRow['status'];
- $number = $orderRow['belegnr'];
- $name = $orderRow['name'];
- if($status === 'angelegt') {
- return ['error' => "Der Auftrag \"$name\" ($number) kann nicht abgeschlossen werden da er noch nicht freigeben wurde! Bitte Auftrag erst freigeben!"];
- }
- if($status==='storniert') {
- return ['error' => "Der Auftrag \"$name\" ($number) kann nicht abgeschlossen werden da er bereits storniert ist!"];
- }
- if($status === 'abgeschlossen') {
- return ['error' => "Der Auftrag \"$name\" ($number) kann nicht abgeschlossen werden da er bereits abgeschlossen ist!"];
- }
- if($status!=='freigegeben' && $status!=='versendet') {
- return ['error' => "Der Auftrag \"$name\" ($number) kann nicht abgeschlossen werden"];
- }
- $this->app->DB->Update(
- sprintf(
- "UPDATE auftrag SET status='abgeschlossen',schreibschutz=1 WHERE id=%d LIMIT 1",
- $orderId
- )
- );
- $this->app->erp->AuftragProtokoll($orderId,'Auftrag wurde manuell abgeschlossen');
-
- return ['info' => 'Der Auftrag wurde abgeschlossen!'];
- }
-
- public function AuftragAbschluss()
- {
- $id = $this->app->Secure->GetGET('id');
- $abschluss= $this->app->Secure->GetGET('abschluss');
- $auftragarr = empty($id)?null: $this->app->DB->SelectRow(
- sprintf(
- 'SELECT name, belegnr, status FROM auftrag WHERE id=%d LIMIT 1',
- $id
- )
- );
- $name = '';
- $belegnr = '';
- $status = '';
- if(!empty($auftragarr)){
- $name = $auftragarr['name'];
- $belegnr = $auftragarr['belegnr'];
- $status = $auftragarr['status'];
- }
-
- if($abschluss==$id) {
- $ret = $this->closeOrder($id);
- if(!empty($ret['error'])) {
- $msg = $this->app->erp->base64_url_encode('
Dies ist Teilauftrag Nr. $teillieferungnummer (Aktuell gesplittet in $teillieferungnummermax Aufträge). Der ursprüngliche Auftrag war: $teillieferung_von_auftrag_nummer
"
- );
- }
-
-
- $check = $this->app->DB->SelectPairs(
- "SELECT b.id, b.belegnr
- FROM auftrag_position ap
- INNER JOIN bestellung_position bp ON ap.id = bp.auftrag_position_id
- INNER JOIN bestellung b ON bp.bestellung = b.id
- WHERE ap.auftrag='$id'
- GROUP BY b.belegnr, b.id
- ORDER BY b.belegnr, b.id"
- );
- if($check) {
- $this->app->Tpl->Add(
- 'MESSAGE',
- "
Zu diesem Auftrag gehör"
- .((!empty($check)?count($check):0) == 1?'t':'en')
- ." die Bestellung".((!empty($check)?count($check):0) == 1?':':'en:')
- );
- foreach($check as $supplierOrderId => $supplieryNumber) {
- $this->app->Tpl->Add('MESSAGE',' '
- );
- }
- $this->app->Tpl->Add('MESSAGE',"
");
- }
-
-
- if($this->app->erp->ModulVorhanden('lieferkette')) {
- $auftraglieferkette = $this->app->DB->Select(
- "SELECT l.auftrag
- FROM lieferkette l
- INNER JOIN lieferkette_bestellung lb
- ON l.id = lb.lieferkette AND lb.belegtyp = 'auftrag' AND belegid = '$id' AND l.auftrag > 0
- LIMIT 1"
- );
- if($auftraglieferkette) {
- $this->app->Tpl->Add(
- 'MESSAGE',
- '
Dieser Auftrag gehört zur Lieferkette des Auftrags
'
- );
- }
- }
-
- $orderRow = $this->app->DB->SelectRow(sprintf('SELECT * FROM auftrag WHERE id = %d', $id));
-
- $zahlungsweise= $orderRow['zahlungsweise'];//$this->app->DB->Select("SELECT zahlungsweise FROM auftrag WHERE id='$id' LIMIT 1");
- $zahlungszieltage= $orderRow['zahlungszieltage'];//$this->app->DB->Select("SELECT zahlungszieltage FROM auftrag WHERE id='$id' LIMIT 1");
-
- $status= $orderRow['status'];//$this->app->DB->Select("SELECT status FROM auftrag WHERE id='$id' LIMIT 1");
- $schreibschutz= $orderRow['schreibschutz'];//$this->app->DB->Select("SELECT schreibschutz FROM auftrag WHERE id='$id' LIMIT 1");
-
-
- $adresse= $orderRow['adresse'];//$this->app->DB->Select("SELECT adresse FROM auftrag WHERE id='$id' LIMIT 1");
- $liefersperre= $this->app->DB->Select("SELECT liefersperre FROM adresse WHERE id='$adresse' LIMIT 1");
-
- if($id > 0 && $this->app->DB->Select(
- sprintf(
- 'SELECT id FROM auftrag WHERE schreibschutz =1 AND zuarchivieren = 1 AND id = %d',
- $id
- )
- )
- ) {
- $this->app->erp->PDFArchivieren('auftrag', $id, true);
- }
-
- if($status !== 'angelegt' && $status !== 'angelegta' && $status !== 'a') {
- $Brief = new Briefpapier($this->app);
-
- if($Brief->zuArchivieren($id, 'auftrag')) {
- $this->app->Tpl->Add('MESSAGE',"
Der Auftrag ist noch nicht archiviert! Bitte versenden oder manuell archivieren.
");
- }
- elseif(!$this->app->DB->Select("SELECT versendet FROM auftrag WHERE id = '$id' LIMIT 1")) {
- $this->app->Tpl->Add('MESSAGE',"
");
-
- $this->app->Location->execute("index.php?module=auftrag&action=edit&id=$id&msg=$msg");
- }
-
- /**
- * @param int $kommissionierungId
- */
- public function updateCase($kommissionierungId)
- {
- if($kommissionierungId <= 0) {
- return;
- }
- $deliveryNotes = $this->app->DB->SelectArr(
- sprintf(
- 'SELECT id, kiste FROM lieferschein WHERE kommissionierung = %d ORDER BY id',
- $kommissionierungId
- )
- );
- if(empty($deliveryNotes)) {
- return;
- }
-
- $kiste = 0;
- foreach($deliveryNotes as $deliveryNote) {
- $kiste++;
- if($deliveryNote['kiste'] != $kiste) {
- $this->app->DB->Update(
- sprintf(
- 'UPDATE lieferschein SET kiste = %d WHERE id = %d',
- $kiste, $deliveryNote['id']
- )
- );
- }
- }
- }
-
- /**
- * @param array $orders
- * @param int $projectId
- * @param int $cronjobCommissionId
- * @param int $cronjobId
- * @param int $commissionId
- *
- * @return int
- */
- public function sendOrders($orders, $projectId, $cronjobCommissionId, $cronjobId = 0, $commissionId = 0)
- {
- $return = 0;
- if(empty($orders) || !is_array($orders)) {
- return $return;
- }
-
- $commissionName = empty($cronjobCommissionId)?'': $this->app->DB->real_escape_string(
- $this->app->DB->Select(
- sprintf(
- 'SELECT `bezeichnung` FROM `cronjob_kommissionierung` WHERE `id` = %d',
- $cronjobCommissionId
- )
- )
- );
- $this->kommissionierung = $commissionId > 0
- ? $commissionId
- : $this->app->erp->GetNextKommissionierung($commissionName);
- foreach($orders as $auftrag) {
- if(
- $auftragRow = $this->app->DB->SelectRow(
- sprintf(
- "SELECT a.id, a.belegnr
- FROM auftrag AS a
- WHERE (cronjobkommissionierung = '$cronjobCommissionId' OR 0 = '$cronjobCommissionId')
- AND a.id != ''
- AND (a.belegnr!=0 OR a.belegnr!='') AND a.status='freigegeben' AND a.inbearbeitung=0
- AND a.nachlieferung!='1' AND a.autoversand='1' AND a.liefertermin_ok='1' AND kreditlimit_ok='1'
- AND liefersperre_ok='1'
- AND a.vorkasse_ok='1' AND a.porto_ok='1' AND a.lager_ok='1' AND a.check_ok='1' AND a.ust_ok='1'
- AND a.id = %d
- GROUP BY a.id
- ORDER by a.id",
- $auftrag
- )
- )
- ) {
- if($cronjobId > 0){
- $this->app->erp->ProzessstarterStatus(
- 'Auftrag Versand Auftrag: ' . $auftragRow['belegnr'], $cronjobId
- );
- }
- //$this->app->erp->AuftragEinzelnBerechnen($auftrag);
- $this->app->DB->Update(
- "UPDATE prozessstarter
- SET mutex = 1 , mutexcounter = 0, letzteausfuerhung = now()
- WHERE (parameter = 'autoversand_standard' OR parameter = 'autoversand_manuell') AND aktiv = 1"
- );
- $erg = null;
- $this->app->erp->RunHook('VorAutoversand', 1, $auftrag);
- if(
- $this->app->DB->Select(
- sprintf(
- "SELECT a.id
- FROM auftrag AS a
- WHERE a.id = %d AND (a.belegnr!=0 OR a.belegnr!='') AND a.status='freigegeben'
- AND a.inbearbeitung=0 AND a.nachlieferung!='1' AND a.autoversand='1' AND a.liefertermin_ok='1'
- AND kreditlimit_ok='1' AND liefersperre_ok='1'
- AND a.vorkasse_ok='1' AND a.porto_ok='1' AND a.lager_ok='1' AND a.check_ok='1' AND a.ust_ok='1'
- GROUP BY a.id",
- $auftrag
- )
- )
- ) {
- $this->AuftragVersand($auftrag, false, $erg, true);
- $return++;
- }
- $this->app->DB->Update(
- sprintf(
- 'UPDATE auftrag SET cronjobkommissionierung = 0 WHERE id = %d LIMIT 1',
- $auftrag
- )
- );
- }
- }
-
- if(
- empty($projectId)
- || empty($this->kommissionierung)
- || !$this->app->DB->Select(
- sprintf(
- 'SELECT `id` FROM `lieferschein` WHERE `kommissionierung` = %d LIMIT 1',
- $this->kommissionierung
- )
- )
- ) {
- return $return;
- }
-
- $kommissionierlistestufe1 = $this->app->erp->Projektdaten($projectId, 'kommissionierlistestufe1');
- if($kommissionierlistestufe1) {
- $druckercode = $this->app->erp->Projektdaten($projectId, 'druckerlogistikstufe1');
- if($druckercode <=0) {
- $druckercode = $this->app->erp->Firmendaten('standardversanddrucker');
- }
- $kommissionierlistestufe1menge = $this->app->erp->Projektdaten(
- $projectId, 'kommissionierlistestufe1menge'
- );
- if($kommissionierlistestufe1menge < 1) {
- $kommissionierlistestufe1menge = 1;
- }
- /** @var Kommissionierlauf $obj2 */
- $obj2 = $this->app->erp->LoadModul('kommissionierlauf');
- if($obj2 && $this->kommissionierung) {
- if($cronjobId > 0){
- $this->app->erp->ProzessstarterStatus(
- 'KommissionierlaufPDF: ' . $this->kommissionierung, $cronjobId
- );
- }
- $tmpfile = $obj2->KommissionierlaufPDF($this->kommissionierung);
- for($mengedruck=$kommissionierlistestufe1menge;$mengedruck > 0;$mengedruck--) {
- $this->app->printer->Drucken($druckercode,$tmpfile);
- }
- unlink($tmpfile);
- }
- }
-
- return $return;
- }
-
- public function AuftragVersand($id='', $ignoriereliefertermin = false, &$ergebnis = null, $paketmarkedrucken = false)
- {
- if(!$this->kommissionierung)
- {
- $this->kommissionierung = $this->app->erp->GetNextKommissionierung();
- }
- // mit der funktionen koennen nur erstauftraege abgewickelt koennen!!!
- $internmodus = 0;
- if($id!='')
- {
- $internmodus=1;
- }
- if($id==''){
- $id = $this->app->Secure->GetGET('id');
- }
- $cmd = $this->app->Secure->GetGET("cmd");
- if($cmd=="manually" && $id > 0)
- {
- $this->app->DB->Update(sprintf("UPDATE auftrag SET autoversand=1 WHERE id=%d AND status='freigegeben' LIMIT 1",$id));
- }
-
- @ignore_user_abort(true);
- @set_time_limit(0);
- // Prozess haengt so lange bis der nächste frei ist
- $fp = $this->app->erp->ProzessLock('auftrag_autoversand');
- $posids = $this->app->Secure->GetGET('posids');
- if($posids)
- {
- $positionen = null;
- $zwischenpositionen = null;
- if(strpos($posids, 'z') !== false || strpos($posids, 'b') !== false)
- {
- $sida = explode(',',$posids);
- foreach($sida as $v)
- {
- if(strpos($v, 'b') === 0)
- {
- $v = substr($v ,1);
- $positionen[] = $v;
- }else{
- $v = substr($v ,1);
- $zwischenpositionen[] = $v;
- }
- }
- }
- }
- $this->app->erp->AuftragEinzelnBerechnen($id);
- // artikel reservieren
- $adresse = 0;
- $versandart = '';
- $projekt = 0;
- $belegnr = '';
- $tmpname = '';
- $keinetrackingmail = 0;
- $usereditid = 0;
- $auftrag = $this->app->DB->SelectArr("SELECT * FROM auftrag WHERE id='$id' LIMIT 1");
- if(!empty($auftrag)){
- $adresse = $auftrag[0]['adresse'];
- $versandart = $auftrag[0]['versandart'];
- $projekt = (int)$auftrag[0]['projekt'];
- $belegnr = $auftrag[0]['belegnr'];
- $tmpname = $auftrag[0]['name'];
- $keinetrackingmail = $auftrag[0]['keinetrackingmail'];
- $usereditid = $auftrag[0]['usereditid'];//$this->app->DB->Select("SELECT usereditid FROM auftrag WHERE id='$id' LIMIT 1");
- }
- $useredittimestamp = $this->app->DB->Select("SELECT TIME_TO_SEC(TIMEDIFF(NOW(), useredittimestamp)) FROM auftrag WHERE id='$id' LIMIT 1");
-
- $projektarr = null;
- if($projekt > 0){
- $projektarr = $this->app->DB->SelectRow("SELECT * FROM projekt WHERE id='$projekt' LIMIT 1");
- }
- if(!empty($projektarr)){
- $kommissionierverfahren = $projektarr['kommissionierverfahren'];//$this->app->DB->Select("SELECT kommissionierverfahren FROM projekt WHERE id='$projekt' LIMIT 1");
- }else{
- $kommissionierverfahren = '';
- }
- if($usereditid == $this->app->User->GetID())
- {
- $useredittimestamp = 1000;
- }
-
- $anzahl_artikel = $this->app->DB->Select("SELECT id FROM auftrag_position WHERE auftrag=$id LIMIT 1");
- if($anzahl_artikel <= 0)
- {
- $meldung = "Auftrag $belegnr kann nicht weitergefuehrt werden, da keine Artikel gebucht sind!";
- $this->app->erp->EventMitSystemLog($this->app->User->GetID(), $meldung, -1,'', 'alert', 1);
- }
- $ret = false;
- $zusatzcheck = true;
- $this->app->erp->RunHook('AuftragVersandZusatzcheck', 2, $id, $zusatzcheck);
- if(($auftrag[0]['status']==='freigegeben' && $auftrag[0]['nachlieferung']=='0'
- && $auftrag[0]['lager_ok']=='1'&&$auftrag[0]['porto_ok']=='1'&&$auftrag[0]['ust_ok']=='1'
- && $auftrag[0]['vorkasse_ok']=='1'&&$auftrag[0]['nachnahme_ok']=='1' &&($auftrag[0]['liefertermin_ok']=='1' || $ignoriereliefertermin)
- && $auftrag[0]['check_ok']=='1' && $auftrag[0]['autoversand']=='1'
- && $auftrag[0]['kreditlimit_ok']=='1' && $auftrag[0]['liefersperre_ok']=='1' && ($useredittimestamp > 45 || $useredittimestamp <= 0 || $internmodus)
- && $anzahl_artikel >=1) && $zusatzcheck)
- {
- // Start
- $ret = true;
-
- $this->app->DB->Insert(
- sprintf(
- "INSERT INTO auftrag_protokoll (auftrag, zeit, bearbeiter, grund) VALUES
- (%d,now(),'%s','Lieferschein an Versandzentrum übergeben')",
- (int)$id,(isset($this->app->User)?$this->app->DB->real_escape_string($this->app->User->GetName()):'Cronjob')
- )
- );
-
- $this->app->erp->Protokoll("WeiterfuehrenAuftrag AB $belegnr Art: ".$auftrag[0]['art']);
- // pruefe ob es lagerartikel gibt
- /*$summe_lagerartikel = $this->app->DB->Select("SELECT SUM(ap.id) FROM auftrag_position ap,
- artikel a WHERE ap.auftrag='$id' AND a.id=ap.artikel AND a.lagerartikel='1'");*/
-
- $nurRestmenge = false;
- //if($summe_lagerartikel >0 || $auftrag[0][art]=="rma")
- //TODO wenn nur dienstleistung keinen lieferschein
- if($auftrag[0]['art']==='lieferung' || $auftrag[0]['art']==='standardauftrag' || $auftrag[0]['art']=='')
- {
- if($posids) {
- $lieferschein = $this->app->erp->WeiterfuehrenAuftragZuLieferschein($id, $positionen, $zwischenpositionen);
- $this->app->erp->Protokoll('WeiterfuehrenAuftragZuLieferschein AB '.$belegnr);
- }
- else {
- $lieferschein = $this->app->DB->Select(
- sprintf(
- "SELECT dn.id
- FROM lieferschein AS dn
- WHERE dn.auftragid = %d AND dn.status <> 'storniert'
- LIMIT 1",
- $id
- )
- );
- if(empty($lieferschein)) {
- $lieferschein = $this->app->erp->WeiterfuehrenAuftragZuLieferschein($id);
- $this->app->erp->Protokoll('WeiterfuehrenAuftragZuLieferschein AB ' . $belegnr);
- }
- else {
- $nurRestmenge = true;
- }
- }
-
- $ls_belegnr = (string)$this->app->DB->Select("SELECT belegnr FROM lieferschein WHERE id='$lieferschein' LIMIT 1");
- if($ls_belegnr==='' || $ls_belegnr==='0') {
- $ls_belegnr = $this->app->erp->GetNextNummer('lieferschein',$projekt,$lieferschein);
- }
-
- $this->app->DB->Update("UPDATE lieferschein SET
- belegnr='$ls_belegnr', status='freigegeben', versand='".$this->app->User->GetDescription()."'
- WHERE id='$lieferschein' LIMIT 1");
-
- $this->app->erp->LieferscheinProtokoll($lieferschein, 'Lieferschein freigegeben');
-
- if(!($kommissionierverfahren==='lieferscheinlager' ||
- $kommissionierverfahren==='lieferscheinlagerscan' ||
- $kommissionierverfahren==='lieferschein')){
- $this->app->erp->PDFArchivieren('lieferschein', $lieferschein);
- }
- $etiketten_positionen = 0;
- $etiketten_art = '';
- $etiketten_drucker = 0;
- $etiketten_sort = 0;
- if(!empty($projektarr))
- {
- $etiketten_positionen = $projektarr['etiketten_positionen'];//$this->app->DB->Select("SELECT etiketten_positionen FROM projekt WHERE id='$projekt' LIMIT 1");
- $etiketten_art = $projektarr['etiketten_art'];//$this->app->DB->Select("SELECT etiketten_art FROM projekt WHERE id='$projekt' LIMIT 1");
- $etiketten_drucker = $projektarr['etiketten_drucker'];//$this->app->DB->Select("SELECT etiketten_drucker FROM projekt WHERE id='$projekt' LIMIT 1");
- $etiketten_sort= $projektarr['etiketten_sort'];//$this->app->DB->Select("SELECT etiketten_drucker FROM projekt WHERE id='$projekt' LIMIT 1");
- }
- if($etiketten_positionen > 0)
- {
- $this->app->erp->LieferscheinPositionenDrucken($lieferschein,$etiketten_drucker,$etiketten_art,$etiketten_sort);
- }
- } else {
- // sonst ist lieferschein = 0
- $lieferschein = 0;
- }
-
- // rechnung immer außer es ist beistellung bzw. kostenlose lieferung
- $rechnung = 0;
- if(($auftrag[0]['art']==='rechnung' || $auftrag[0]['art']==='standardauftrag' || $auftrag[0]['art']=='') && !$this->app->erp->Projektdaten($projekt,'rechnungerzeugen'))
- {
- // nur erzeugen wenn positionen betrag hpoch genug ist
- $artikelarrsumme = $this->app->DB->Select("SELECT SUM(preis*menge) FROM auftrag_position WHERE auftrag='$id' AND auftrag > 0");
- $this->app->erp->Protokoll("WeiterfuehrenAuftragZuRechnung AB $belegnr Preis ".$artikelarrsumme);
-
- // wenn mindestesten zwei verschiedene steuersaetze und rechnung 0 ist dann muss man auch erzeugen
- $anzahlsteuer = $this->app->DB->Select("Select sum(t.summe) FROM (
- (SELECT count(distinct 1) as summe FROM auftrag_position WHERE umsatzsteuer = 'ermaessigt' AND (isnull(steuersatz) OR steuersatz < 0) AND auftrag = '$id' LIMIT 1)
- union all (SELECT count(distinct 1) as summe FROM auftrag_position WHERE umsatzsteuer = 'befreit' AND (isnull(steuersatz) OR steuersatz < 0) AND auftrag = '$id' LIMIT 1)
- union all (SELECT count(distinct 1) as summe FROM auftrag_position WHERE umsatzsteuer <> 'ermaessigt' AND (isnull(steuersatz) OR steuersatz < 0) AND auftrag = '$id' LIMIT 1)
- union all (SELECT count(distinct 1) as summe FROM auftrag_position WHERE steuersatz >= 0 and not isnull(steuersatz) AND auftrag = '$id' LIMIT 1) )t");
-
- if($artikelarrsumme>=0.01 || $anzahlsteuer > 1)
- {
- // versand erzeugen (RE + LS) und verlinken und wenn vorkasse auftrag geld als bezahlt markieren in rechnung
- if($posids) {
-
- $rechnung = $this->app->erp->WeiterfuehrenAuftragZuRechnung($id, $positionen, $zwischenpositionen);
- }
- else{
- $rechnung = $this->app->DB->Select(
- sprintf(
- "SELECT i.id FROM rechnung AS i WHERE auftragid = %d AND status <> 'storniert' LIMIT 1",
- $id
- )
- );
- if(empty($rechnung)){
- $rechnung = $this->app->erp->WeiterfuehrenAuftragZuRechnung($id);
- }
- }
- $this->app->DB->Update("UPDATE rechnung SET lieferschein='$lieferschein' WHERE id='$rechnung' LIMIT 1");
-
- $re_belegnr = (string)$this->app->DB->Select("SELECT belegnr FROM rechnung WHERE id='$rechnung' LIMIT 1");
- if($re_belegnr==='' || $re_belegnr==='0')
- {
- $re_belegnr = $this->app->erp->GetNextNummer('rechnung',$projekt,$rechnung);
- }
- $this->app->erp->Protokoll("WeiterfuehrenAuftragZuRechnung AB $belegnr (id $id) RE $re_belegnr (id $rechnung)");
-
- $this->app->DB->Update(
- sprintf(
- "UPDATE rechnung SET belegnr = '%s' WHERE id = %d AND (belegnr = '' OR belegnr = '0')",
- $re_belegnr, $rechnung
- )
- );
- $this->app->DB->Update(
- sprintf(
- "UPDATE rechnung SET status = 'freigegeben' WHERE status <> 'storniert' AND status <> 'versendet' AND id = %d",
- $rechnung
- )
- );
- $this->app->erp->RechnungProtokoll($rechnung, 'Rechnung freigegeben');
-
- $this->app->DB->Update(
- sprintf(
- "UPDATE rechnung
- SET buchhaltung='%s'
- WHERE id=%d
- LIMIT 1",
- $this->app->DB->real_escape_string($this->app->User->GetDescription()), $rechnung
- )
- );
-
- $this->app->erp->ANABREGSNeuberechnen($rechnung,"rechnung");
- $this->app->erp->PDFArchivieren("rechnung",$rechnung);
- }
- }
- // auftrag_position geliefert_menge und geliefert anpassen
- $artikelarr = $this->app->DB->SelectArr(
- sprintf(
- "SELECT ap.id,ap.artikel,ap.menge
- FROM auftrag_position AS ap
- INNER JOIN artikel AS art ON ap.artikel = art.id AND art.lagerartikel = 1
- WHERE ap.auftrag=%d AND ap.auftrag > 0",
- (int)$id
- )
- );
-
- $cartikelarr = $artikelarr?count($artikelarr):0;
- for($i=0;$i<$cartikelarr; $i++)
- {
- $auftragspositionsid = $artikelarr[$i]['id'];
- $artikel = $artikelarr[$i]['artikel'];
- $menge= $artikelarr[$i]['menge'];
- // lager teile reservieren
-
- $this->app->DB->Delete("DELETE FROM lager_reserviert WHERE objekt='auftrag'
- AND parameter='$id' AND artikel='$artikel' ");
-
- $this->app->DB->Update("UPDATE auftrag_position SET geliefert_menge='$menge',
- geliefert='1' WHERE id='$auftragspositionsid' LIMIT 1");
- }
-
- // nur wenn autoversand projekt
- $autoversand_pruefung = '';
- $automailrechnung = '';
- $autodruckrechnungstufe1mail = '';
- if(!empty($projektarr)){
- $autoversand_pruefung = $projektarr['autoversand'];// $this->app->DB->Select("SELECT autoversand FROM projekt WHERE id='$projekt' LIMIT 1");
- $automailrechnung = $projektarr['automailrechnung'];//$this->app->DB->Select("SELECT automailrechnung FROM projekt WHERE id='$projekt' LIMIT 1");
- $autodruckrechnungstufe1mail = $projektarr['autodruckrechnungstufe1mail'];//$this->app->DB->Select("SELECT autodruckrechnungstufe1mail FROM projekt WHERE id='$projekt' LIMIT 1");
- }
-
- $druckercode = $this->app->erp->Firmendaten('standardversanddrucker');
-
-
- $this->app->erp->Protokoll("WeiterfuehrenAuftragZuRechnung AB $belegnr Kommissionierverfahren: $kommissionierverfahren Projekt $projekt");
-
- switch($kommissionierverfahren)
- {
- case 'rechnungsmail':
- // rechnung per mail versenden????
- if($automailrechnung && $rechnung > 0)
- {
- // rechnung per mail versenden
- // sende
- // $this->app->erp->Rechnungsmail($rechnung);
- }
- $this->app->DB->Insert(
- sprintf(
- "INSERT INTO auftrag_protokoll (auftrag, zeit, bearbeiter, grund) VALUES
- (%d,now(),'%s','Autoversand ausgeführt')",
- (int)$id,(isset($this->app->User)?$this->app->DB->real_escape_string($this->app->User->GetName()):'Cronjob')
- )
- );
- break;
- default:
-
- if($kommissionierverfahren==='lieferschein' && $lieferschein > 0)
- {
- //FALL 1 Lieferschein mit Lagerplatz
- if($this->kommissionierung){
- $this->app->DB->Update(
- sprintf(
- "UPDATE lieferschein SET kommissionierung = %d WHERE id = %d LIMIT 1",
- $this->kommissionierung, $lieferschein
- )
- );
- $this->updateCase($this->kommissionierung);
- }
- $this->app->erp->LieferscheinAuslagern(
- $lieferschein,
- true,
- (int)$this->app->DB->Select(sprintf('SELECT standardlager FROM auftrag WHERE id = %d LIMIT 1', $id)),
- 'lieferschein',
- true,
- false,
- $nurRestmenge
- );
-
- // Prozesse ohne Versandzentrum
-
-
- $this->app->erp->BriefpapierHintergrundDisable($druckercode);
-
- $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable;
- if(class_exists('LieferscheinPDFCustom')) {
- $Brief = new LieferscheinPDFCustom($this->app,$projekt);
- }
- else{
- $Brief = new LieferscheinPDF($this->app,$projekt);
- }
- $Brief->GetLieferschein($lieferschein);
- $tmpfile = $Brief->displayTMP();
- $Brief->ArchiviereDocument(false, true);
- unlink($tmpfile);
- $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable;
-
- if(class_exists('LieferscheinPDFCustom')) {
- $Brief = new LieferscheinPDFCustom($this->app,$projekt);
- }
- else{
- $Brief = new LieferscheinPDF($this->app,$projekt);
- }
- $Brief->GetLieferschein($lieferschein);
- $tmpfile = $Brief->displayTMP();
- $Brief->ArchiviereDocument(false, true);
- //$this->app->printer->Drucken($druckercode,$tmpfile);
-
- $fileid_lieferschein = $this->app->erp->CreateDatei($Brief->filename,'lieferschein','','',$tmpfile,$this->app->User->GetName());
- $this->app->erp->AddDateiStichwort($fileid_lieferschein,'lieferschein','lieferschein',$lieferschein,$without_log=false);
-
- $sprache = $this->app->DB->Select("SELECT sprache FROM lieferschein WHERE id='$lieferschein' LIMIT 1");
- if($sprache=='')
- {
- $sprache='deutsch';
- }
- $text = $this->app->erp->GetGeschaeftsBriefText('Lieferschein',$sprache,$projekt);
- $betreff = $this->app->erp->GetGeschaeftsBriefBetreff('Lieferschein',$sprache,$projekt);
- if($betreff=='')
- {
- $betreff='Mitgesendet bei Lieferung';
- }
-
- $this->app->DB->Update("UPDATE lieferschein SET status='versendet',versendet='1',schreibschutz='1' WHERE id='$lieferschein' LIMIT 1");
- $this->app->DB->Insert("INSERT INTO dokumente_send
- (id,dokument,zeit,bearbeiter,adresse,parameter,art,betreff,text,projekt,ansprechpartner,dateiid) VALUES ('','lieferschein',NOW(),'".$this->app->User->GetName()."',
- '$adresse','$lieferschein','versand','$betreff','$text','$projekt','','$fileid_lieferschein')");
- $this->app->erp->LieferscheinProtokoll($lieferschein,'Lieferschein versendet (Auto-Versand)');
-
- unlink($tmpfile);
- // Druck Auftrag Anhang wenn aktiv
- if(1)//if($this->app->erp->Projektdaten($projekt,"autodruckanhang")=="1")
- {
- // alle anhaenge drucken! wo auftrag datei anhang
- $this->app->erp->GetDateiSubjektObjekt('anhang','Auftrag',$id);
- // for($i=0;$i<(!empty($tmpanhang)?count($tmpanhang):0);$i++)
- // $this->app->printer->Drucken($druckercode,$tmpanhang[$i]);
- $tmpanhang ='';
- }
- $this->app->DB->Insert(
- sprintf(
- "INSERT INTO auftrag_protokoll (auftrag, zeit, bearbeiter, grund) VALUES
- (%d,now(),'%s','Auftrag an Versandzentrum übergeben')",
- (int)$id,(isset($this->app->User)?$this->app->DB->real_escape_string($this->app->User->GetName()):'Cronjob')
- )
- );
- }
-
-
- //FALL 2 // logistikzentrum
-
- // auftrag_position geliefert_menge und geliefert anpassen
- $artikelarr = $this->app->DB->SelectArr(
- sprintf(
- "SELECT ap.id, ap.artikel,ap.menge
- FROM auftrag_position AS ap
- INNER JOIN artikel AS art ON ap.artikel = art.id AND art.lagerartikel = 1
- WHERE ap.auftrag=%d AND ap.auftrag > 0",
- (int)$id
- )
- );
- $cartikelarr = $artikelarr?count($artikelarr):0;
- for($i=0;$i<$cartikelarr; $i++) {
- $auftragspositionsid = $artikelarr[$i]['id'];
- $artikel = $artikelarr[$i]['artikel'];
- $menge= $artikelarr[$i]['menge'];
- // lager teile reservieren
-
- $this->app->DB->Delete("DELETE FROM lager_reserviert WHERE objekt='auftrag'
- AND parameter='$id' AND artikel='$artikel' ");
-
- if($kommissionierverfahren==='zweistufig' && $lieferschein > 0)
- {
- $this->app->DB->Insert("INSERT INTO lager_reserviert (id,adresse,artikel,menge,grund,projekt,
- firma,bearbeiter,datum,objekt,parameter)
- VALUES('','$adresse','$artikel','$menge','Versand für Auftrag $belegnr','$projekt',
- '".$this->app->User->GetFirma()."','".$this->app->User->GetName()."','9999-01-01','lieferschein','$lieferschein')");
- }
-
- if($lieferschein > 0) {
- $this->app->DB->Update("UPDATE auftrag_position SET geliefert_menge='$menge',
- geliefert='1' WHERE id='$auftragspositionsid' LIMIT 1");
- }
-
- }
- //ende
-
- $this->app->DB->Insert(
- sprintf(
- "INSERT INTO auftrag_protokoll (auftrag, zeit, bearbeiter, grund) VALUES
- (%d,now(),'%s','Autoversand ausgeführt')",
- (int)$id,(isset($this->app->User)?$this->app->DB->real_escape_string($this->app->User->GetName()):'Cronjob')
- )
- );
- }
- $autodruckrechnungstufe1 = 0;
- $autodruckrechnungstufe1menge = 0;
- $exportdruckrechnungstufe1 = 0;
- $printOrderQuantity = 0;
- if(!empty($projektarr))
- {
- $autodruckrechnungstufe1 = $projektarr['autodruckrechnungstufe1'];
- $autodruckrechnungstufe1menge = $projektarr['autodruckrechnungstufe1menge'];
- $exportdruckrechnungstufe1 = $projektarr['exportdruckrechnungstufe1'];
- if($projektarr['auftragdrucken'] == '1') {
- $printOrderQuantity = $projektarr['auftragdruckenmenge'] > 1 ? $projektarr['auftragdruckenmenge'] : 1;
- }
- }
-
- if($exportdruckrechnungstufe1)
- {
- if(!empty($projektarr))
- {
- $exportdruckrechnungstufe1menge = $projektarr['exportdruckrechnungstufe1menge'];//$this->app->DB->Select("SELECT exportdruckrechnungstufe1menge FROM projekt WHERE id='$projekt' LIMIT 1");
- }else{
- $exportdruckrechnungstufe1menge = 0;
- }
-
- $exportland = $this->app->DB->Select("SELECT if(abweichendelieferadresse = 1 AND lieferland <> '',lieferland, land) FROM auftrag WHERE id = '$id' LIMIT 1");
- $exportdruckrechnungstufe1 = $this->app->erp->Export($exportland);
- }
-
-
-
-
- if(($autodruckrechnungstufe1=='1' || $exportdruckrechnungstufe1) && $rechnung > 0)
- {
- $this->app->DB->Update("UPDATE rechnung SET status='versendet', versendet='1',schreibschutz='1' WHERE id='$rechnung' LIMIT 1");
- $druckercode = $this->app->erp->Projektdaten($projekt,'druckerlogistikstufe1');
- $this->app->erp->BriefpapierHintergrundDisable($druckercode);
- if(class_exists('RechnungPDFCustom'))
- {
- $Brief = new RechnungPDFCustom($this->app,$projekt);
- }else{
- $Brief = new RechnungPDF($this->app,$projekt);
- }
- $Brief->GetRechnung($rechnung);
- $tmpfile = $Brief->displayTMP();
- $Brief->ArchiviereDocument();
- if($autodruckrechnungstufe1=='1')
- {
- for($imenge=0;$imenge<$autodruckrechnungstufe1menge;$imenge++) {
- $this->app->printer->Drucken($druckercode, $tmpfile);
- }
- }
- if($exportdruckrechnungstufe1 == '1')
- {
- for($imenge=0;$imenge<$exportdruckrechnungstufe1menge;$imenge++) {
- $this->app->printer->Drucken($druckercode, $tmpfile);
- }
- }
- unlink($tmpfile);
- $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable;
- if(class_exists('RechnungPDFCustom'))
- {
- $Brief = new RechnungPDFCustom($this->app,$projekt);
- }else{
- $Brief = new RechnungPDF($this->app,$projekt);
- }
- $Brief->GetRechnung($rechnung);
- $tmpfile = $Brief->displayTMP();
- $Brief->ArchiviereDocument();
- unlink($tmpfile);
- $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable;
- }
-
- if($autodruckrechnungstufe1mail && $rechnung > 0)
- {
- $this->app->erp->Rechnungsmail($rechnung);
- }
-
- // auftrag abschliessen
- $this->app->DB->Update("UPDATE auftrag SET status='abgeschlossen',schreibschutz='1' WHERE id='$id' LIMIT 1");
- $this->app->erp->PDFArchivieren('auftrag',$id);
-
- // auftrag abschliessen und event senden
-
- $this->app->erp->ProzessUnlock($fp);
-
- // kundenfreigabe loeschen wenn das im projekt eingestellt ist
- if(!empty($projektarr))
- {
- $checkok = $projektarr['kundenfreigabe_loeschen'];//$this->app->DB->Select("SELECT kundenfreigabe_loeschen FROM projekt WHERE id='$projekt' LIMIT 1");
- }else{
- $checkok = 0;
- }
-
- if($checkok==1){
- $this->app->DB->Update("UPDATE adresse SET kundenfreigabe='0' WHERE id='$adresse' LIMIT 1");
- }
-
- if($this->app->erp->ModulVorhanden('produktion') && method_exists($this->app->erp, 'ProduktionEinzelnBerechnen'))
- {
- $produktionen = $this->app->DB->SelectArr("SELECT id FROM produktion WHERE auftragid = '$id'");
- if($produktionen)
- {
- foreach($produktionen as $v)
- {
- $this->app->erp->ProduktionEinzelnBerechnen($v['id']);
- }
- }
- }
-
- //if($internmodus && $lieferschein) // 2018-10-09 BS ab jetzt immer diese Optionen auswerten - nicht nur wenn es intern ist
- if($lieferschein)
- {
- $paketmarkedruckenprojekt = !empty($projektarr['paketmarkedrucken'])?$projektarr['paketmarkedrucken']:0;
- if($paketmarkedrucken && $paketmarkedruckenprojekt && !$this->app->erp->PaketmarkeDrucken($lieferschein, 'lieferschein'))
- {
- //$this->app->DB->Update("UPDATE auftrag SET schreibschutz = 0, status = 'freigegeben' WHERE id = '$id' LIMIT 1");
- $this->app->erp->AuftragProtokoll($id, 'Paketmarke drucken fehlgeschlagen');
- if(!empty($fp))
- {
- $this->app->erp->ProzessUnlock($fp);
- }
- return $ret;
- }
- $lieferscheinedruckenprojekt = !empty($projektarr['lieferscheinedrucken'])?$projektarr['lieferscheinedrucken']:0;
- if($lieferscheinedruckenprojekt)
- {
- $lieferscheinedruckenmenge = !empty($projektarr['lieferscheinedruckenmenge'])?$projektarr['lieferscheinedruckenmenge']:0;//$this->app->DB->Select("SELECT lieferscheinedruckenmenge FROM projekt WHERE id = '$projekt' LIMIT 1");
- if($lieferscheinedruckenmenge > 0)
- {
- $druckercode = !empty($projektarr['druckerlogistikstufe1'])?$projektarr['druckerlogistikstufe1']:0;//$this->app->DB->Select("SELECT druckerlogistikstufe1 FROM projekt WHERE id='$projekt' LIMIT 1");
- if($druckercode <=0){
- $druckercode = $this->app->erp->Firmendaten('standardversanddrucker');
- }
-
- $this->app->erp->BriefpapierHintergrundDisable($druckercode);
-
- if(class_exists('LieferscheinPDFCustom'))
- {
- $Brief = new LieferscheinPDFCustom($this->app,$projekt);
- }else{
- $Brief = new LieferscheinPDF($this->app,$projekt);
- }
- $Brief->GetLieferschein($lieferschein);
-
- $tmpfile = $Brief->displayTMP();
- $Brief->ArchiviereDocument();
-
- for($imenge=0;$imenge<$lieferscheinedruckenmenge;$imenge++) {
- $this->app->printer->Drucken($druckercode, $tmpfile);
- }
- unlink($tmpfile);
- $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable;
- if(class_exists('LieferscheinPDFCustom'))
- {
- $Brief = new LieferscheinPDFCustom($this->app,$projekt);
- }else{
- $Brief = new LieferscheinPDF($this->app,$projekt);
- }
- $Brief->GetLieferschein($lieferschein);
-
- $tmpfile = $Brief->displayTMP();
- $Brief->ArchiviereDocument();
- unlink($tmpfile);
- $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable;
- }
- }
- }
-
- // Druck Auftrag Anhang wenn aktiv
- if($this->app->erp->Projektdaten($projekt,'druckanhang')=='1') {
- $obj = $this->app->erp->LoadModul('versanderzeugen');
- if(!empty($obj) && method_exists($obj,'autoPrintAttachment'))
- {
- $obj->autoPrintAttachment($druckercode,$id,$lieferschein,$rechnung);
- }
- }
-
- if($printOrderQuantity > 0 && $druckercode) {
- if(class_exists('AuftragPDFCustom'))
- {
- $Brief = new AuftragPDFCustom($this->app,$projekt);
- }else{
- $Brief = new AuftragPDF($this->app,$projekt);
- }
- $Brief->GetAuftrag($id);
-
- $tmpfile = $Brief->displayTMP();
- for($printOrderQuantity; $printOrderQuantity > 0; $printOrderQuantity--) {
- $this->app->printer->Drucken($druckercode, $tmpfile);
- }
- unlink($tmpfile);
- }
-
- $this->app->erp->RunHook('auftrag_versand_ende', 1, $id);
-
- // wenn per URL aufgerufen
- if($internmodus!='1')
- {
- if(!empty($fp))
- {
- $this->app->erp->ProzessUnlock($fp);
- }
- $this->app->Location->execute("index.php?module=auftrag&action=edit&id=$id&msg=$msg");
- }
- if(!empty($fp))
- {
- $this->app->erp->ProzessUnlock($fp);
- }
- return $ret;
- }
-
- //$this->app->erp->ProzessUnlock("auftrag_autoversand");
- $this->app->erp->ProzessUnlock($fp);
-
- if($posids)
- {
- $this->app->Location->execute('index.php?module=auftrag&action=positionen&id='.$id);
- }
-
- // wenn per URL aufgerufen
- if($internmodus!='1')
- {
- // $this->AuftragList();
-
- //header("Location: index.php?module=auftrag&action=search");
- if($id > 0){
- $this->app->Location->execute('index.php?module=auftrag&action=edit&id=' . $id);
- }
- $this->app->Location->execute('index.php?module=auftrag&action=versandzentrum');
- }
- }
-
-
- function AuftragSelbstabholerNachricht()
- {
- // kann man immer wieder aufrufen wenn ein teilchen gekommen ist bis auftrag voll erfuellt ist
-
- }
-
- function AuftragSelbstabholerAbgeholt()
- {
- // kann man immer wieder aufrufen wenn ein teilchen gekommen ist bis auftrag voll erfuellt ist
-
- }
-
-
- function AuftragNachlieferungCheck()
- {
-
- //echo "pruefe ob eine Nachlieferung gemacht werden kann";
-
- }
-
-
- function AuftragNachlieferung()
- {
- // kann man immer wieder aufrufen wenn ein teilchen gekommen ist bis auftrag voll erfuellt ist
-
- }
-
-
-
-
- public function AuftragVerfuegbar()
- {
- $frame = $this->app->Secure->GetGET('frame');
- $id = $this->app->Secure->GetGET('id');
- if($frame=='false')
- {
- // hier nur fenster größe anpassen
- $this->app->YUI->IframeDialog(600,400);
- } else {
- // nach page inhalt des dialogs ausgeben
- $table = new EasyTable($this->app);
- $table->Query("SELECT ap.nummer, ap.bezeichnung, ap.menge, (SELECT TRIM(SUM(lp.menge))+0 FROM lager_platz_inhalt lp WHERE lp.artikel=ap.artikel) as lager,
- (SELECT SUM(lr.menge) FROM lager_reserviert lr WHERE lr.artikel=ap.artikel AND lr.datum>=NOW() AND lr.objekt!='lieferschein') as reserviert,
- if(((SELECT SUM(lp.menge) FROM lager_platz_inhalt lp WHERE lp.artikel=ap.artikel) - (SELECT SUM(lr.menge) FROM lager_reserviert lr WHERE lr.artikel=ap.artikel AND lr.datum>=NOW() AND lr.objekt!='lieferschein') - ap.menge)>=0,'',
- TRIM((SELECT SUM(lp.menge) FROM lager_platz_inhalt lp WHERE lp.artikel=ap.artikel) - (SELECT SUM(lr.menge) FROM lager_reserviert lr WHERE lr.artikel=ap.artikel AND lr.datum>=NOW() AND lr.objekt!='lieferschein') - ap.menge)+0
- ) as fehlend
- FROM auftrag_position ap LEFT JOIN artikel a ON a.id=ap.artikel WHERE ap.auftrag='$id' AND a.lagerartikel=1");
-
- $table->DisplayNEW('PAGE','Fehlende','noAction');
-
- $this->app->BuildNavigation=false;
- }
- }
-
- public function AuftragAmpel($id,$parsetarget)
- {
-
- $status = $this->app->DB->Select("SELECT status FROM auftrag WHERE id='$id' LIMIT 1");
-
- if($status=='abgeschlossen' || $status=='storniert')
- {
- $go = '';
- $stop = '';
- $reserviert = '';
- $check = '';
- } else {
-
- $go = '';
- $stop = '';
- $reserviert = '';
- $check = '';
-
- }
-
- // offene Auftraege
- $table = new EasyTable($this->app);
- $sql = "SELECT DATE_FORMAT(a.datum,'%d.%m.%Y') as vom, if(a.belegnr!='',a.belegnr,'ohne Nummer') as auftrag, a.internet, CONCAT('',a.name,'') as name, a.land, p.abkuerzung as projekt, a.zahlungsweise as per, a.gesamtsumme as soll,";
- $subsql = "'0' as ist,";
- $sql .= $subsql. "if(a.check_ok,'','$check') as AC,
-
- if(a.reserviert_ok,'$reserviert','') as AR,
- if(a.lager_ok,'$go','$stop') as LA,
- if(a.porto_ok,'$go','$stop') as PO,
- if(a.ust_ok,'$go',CONCAT('','$stop','')) as ST,
- if(a.vorkasse_ok,'$go','$stop') as ZE,
- if(a.nachnahme_ok,'$go','$stop') as N,
- if(a.autoversand,'$go','$stop') as A,
- if(a.liefertermin_ok,'$go','$stop') as LT,
- a.id
- FROM auftrag a, projekt p WHERE a.inbearbeitung=0 AND p.id=a.projekt AND a.id=$id LIMIT 1";
-
- $table->Query($sql);
-
- $table->DisplayNew($parsetarget, "
-
-
-
- ");
-
-
- }
-
- public function AuftraguebersichtMenu()
- {
- $backurl = $this->app->Secure->GetGET('backurl');
- $backurl = $this->app->erp->base64_url_decode($backurl);
-
- $this->app->erp->MenuEintrag('index.php?module=auftrag&action=list','Übersicht');
- $this->app->erp->MenuEintrag('index.php?module=auftrag&action=create','Neuen Auftrag anlegen');
-
- if(strlen($backurl)>5){
- $this->app->erp->MenuEintrag("$backurl", 'Zurück zur Übersicht');
- }
- else{
- $this->app->erp->MenuEintrag('index.php', 'Zurück zur Übersicht');
- }
-
- $this->app->erp->RunMenuHook('auftrag_list');
- }
-
- /**
- * @param string $description
- * @param bool $escaped
- *
- * @return int
- */
- public function createCronjobCommission(string $description = ''): int
- {
- $nextCronjobCommissionId = 1 + (int)$this->app->DB->Select(
- 'SELECT MAX(`cronjobkommissionierung`) FROM `auftrag`'
- );
-
- $this->app->DB->Insert(
- "INSERT INTO `cronjob_kommissionierung` (`id`, `bezeichnung`)
- VALUES ({$nextCronjobCommissionId}, '{$description}') "
- );
- if($this->app->DB->GetInsertID() > 0) {
- return $this->app->DB->GetInsertID();
- }
- $this->app->DB->Update(
- "UPDATE `cronjob_kommissionierung`
- SET `bezeichnung` = '{$description}'
- WHERE `id` = {$nextCronjobCommissionId}"
- );
-
- return $nextCronjobCommissionId;
- }
-
- public function AuftragVersandzentrum()
- {
- $this->AuftraguebersichtMenu();
- $targetMessage = 'AUTOVERSANDBERECHNEN';
- $autoshipmentEnabled = true;
- $this->app->erp->RunHook('OrderAutoShipment', 2, $targetMessage, $autoshipmentEnabled);
-
- $plusCronjobs = $this->app->DB->SelectRow(
- "SELECT art, periode
- FROM prozessstarter
- WHERE (parameter = 'autoversand' OR parameter = 'autoversand_plus') AND aktiv = 1
- ORDER BY art = 'periodisch', periode >= 30
- LIMIT 1"
- );
-
- if(!empty($plusCronjobs) && $plusCronjobs['art'] === 'periodisch' && $plusCronjobs['periode'] < 30) {
- $message = 'Autoversand Cronjob ist mit '.$plusCronjobs['periode'].' Minuten zu kurz eingestellt (mindestens 30).';
- $this->app->Tpl->Add('AUTOVERSANDBERECHNEN', '
'.$message.'
');
- }
-
- // ZAHLUNGSMAIL
- $zahlungsmail= $this->app->Secure->GetPOST('zahlungsmail');
-
- if($zahlungsmail!=''){
- $meineauftraege = $this->app->DB->SelectArr("SELECT id FROM auftrag WHERE status='freigegeben'
- AND vorkasse_ok!='1' AND zahlungsweise!='rechnung' AND zahlungsweise!='nachnahme' AND zahlungsweise!='bar' AND zahlungsweise!='lastschrift'");
- $cmeineauftraege = $meineauftraege?count($meineauftraege):0;
- for($i=0;$i<$cmeineauftraege;$i++) {
- $this->app->erp->AuftragNeuberechnen($meineauftraege[$i]['id']);
-
- $this->app->erp->AuftragEinzelnBerechnen($meineauftraege[$i]['id']);
- $this->app->erp->AuftragZahlungsmail($meineauftraege[$i]['id']);
- }
- }
-
- // AUFTAEGE ABSCHLIESSEN!
- $submit = $this->app->Secure->GetPOST('submit');
- $auftraegemarkiert = $this->app->Secure->GetPOST('auftraegemarkiert');
- $entfernen = $this->app->Secure->GetPOST('entfernen');
- $bezeichnung = (string)$this->app->Secure->GetPOST('bezeichnung');
- if($entfernen && $auftraegemarkiert){
- $cauftraegemarkiert = (!empty($auftraegemarkiert)?count($auftraegemarkiert):0);
- for($i=0;$i<$cauftraegemarkiert;$i++) {
- $this->app->DB->Update("UPDATE auftrag SET cronjobkommissionierung = 0 WHERE id = '".$auftraegemarkiert[$i]."' LIMIT 1");
- }
- }
-
- if($this->app->Secure->GetPOST('ausfuehren')){
- $drucker = $this->app->Secure->GetPOST('seldruckerversand');
- $aktion = $this->app->Secure->GetPOST('auftrag_versandauswahl');
- $auftraegemarkiert = $this->app->Secure->GetPOST('auftraegemarkiert');
- $bezeichnung = (string)$this->app->Secure->GetPOST('bezeichnung');
-
- $selectedIds = [];
- if(!empty($auftraegemarkiert)) {
- foreach($auftraegemarkiert as $selectedId) {
- $selectedId = (int)$selectedId;
- if($selectedId > 0) {
- $selectedIds[] = $selectedId;
- }
- }
- }
- if($drucker > 0) {
- $this->app->erp->BriefpapierHintergrundDisable($drucker);
- }
- if(is_array($auftraegemarkiert)){
-
- switch($aktion){
- case 'versandstarten':
- $cronjobActive = $this->app->DB->Select(
- "SELECT ps.id
- FROM `prozessstarter` AS `ps`
- WHERE ps.aktiv = 1 and (ps.parameter = 'autoversand_standard' OR ps.parameter = 'autoversand_manuell')
- LIMIT 1"
- );
- $check = $cronjobActive;
- if(!$check){
- $check = $this->app->DB->Select(
- "SELECT id
- FROM auftrag AS a
- WHERE a.id!='' AND (a.belegnr!=0 OR a.belegnr!='')
- AND a.status='freigegeben' AND a.autoversand='1' AND a.cronjobkommissionierung > 0
- AND a.inbearbeitung=0 AND a.nachlieferung!='1' AND a.vorkasse_ok='1'
- AND a.porto_ok='1' AND a.lager_ok='1' AND a.check_ok='1' AND a.ust_ok='1'
- AND a.liefertermin_ok='1' AND kreditlimit_ok='1' AND liefersperre_ok='1'
- LIMIT 1"
- );
- }
-
- if(!empty($auftraegemarkiert)){
- $datuma = null;
- foreach ($auftraegemarkiert as $k => $v) {
- $datuma[$k] = $this->app->DB->Select(
- sprintf(
- 'SELECT datum FROM auftrag WHERE id = %d LIMIT 1',
- (int)$v
- )
- );
- }
- //Sortieren nach Datum
- array_multisort($datuma, SORT_ASC, $auftraegemarkiert);
- // aufsteigend sortieren erst die alten IDs
- //sort($auftraegemarkiert);
- }
- if($check){
- $maxcronjobkommissionierung = $this->createCronjobCommission((string)$bezeichnung);
-
- $cauftraegemarkiert = $auftraegemarkiert ? count($auftraegemarkiert) : 0;
- for ($i = 0; $i < $cauftraegemarkiert; $i++) {
- $this->app->DB->Update(
- sprintf(
- 'UPDATE `auftrag`
- SET `cronjobkommissionierung` = %d
- WHERE `id` = %d
- LIMIT 1',
- $maxcronjobkommissionierung, $auftraegemarkiert[$i]
- )
- );
- }
- }
- else {
- $cauftraegemarkiert = $auftraegemarkiert ? count($auftraegemarkiert) : 0;
- for ($i = 0; $i < $cauftraegemarkiert; $i++) {
- $projekt = (int)$this->app->DB->Select(
- sprintf(
- 'SELECT `projekt` FROM `auftrag` WHERE `id` = %d LIMIT 1',
- $auftraegemarkiert[$i]
- )
- );
- $auftraegenachprojekt[$projekt][] = $auftraegemarkiert[$i];
- }
-
- foreach ($auftraegenachprojekt as $projekt => $auftraege) {
- if(!is_array($auftraege) || empty($auftraege)) {
- continue;
- }
- $this->kommissionierung = $this->app->erp->GetNextKommissionierung($bezeichnung);
- foreach ($auftraege as $auftrag) {
- $this->AuftragVersand($auftrag);
- }
- if(empty($this->kommissionierung)) {
- continue;
- }
- if(
- empty(
- $this->app->DB->Select(
- sprintf(
- 'SELECT `id` FROM `lieferschein` WHERE `kommissionierung` = %d',
- $this->kommissionierung
- )
- )
- )
- ) {
- continue;
- }
- $kommissionierlistestufe1 = $this->app->erp->Projektdaten($projekt, 'kommissionierlistestufe1');
- if(empty($kommissionierlistestufe1)) {
- continue;
- }
- $druckercode = $this->app->DB->Select(
- sprintf(
- 'SELECT druckerlogistikstufe1 FROM projekt WHERE id= %d LIMIT 1',
- $projekt
- )
- );
- if($druckercode <= 0){
- $druckercode = $this->app->erp->Firmendaten('standardversanddrucker');
- }
- $kommissionierlistestufe1menge = $this->app->erp->Projektdaten(
- $projekt, 'kommissionierlistestufe1menge'
- );
- if($kommissionierlistestufe1menge < 1){
- $kommissionierlistestufe1menge = 1;
- }
- /** @var Kommissionierlauf $obj */
- $obj = $this->app->erp->LoadModul('kommissionierlauf');
- if($obj && $this->kommissionierung){
- $tmpfile = $obj->KommissionierlaufPDF($this->kommissionierung);
- for ($mengedruck = $kommissionierlistestufe1menge; $mengedruck > 0; $mengedruck--) {
- $this->app->printer->Drucken($druckercode, $tmpfile);
- }
- unlink($tmpfile);
- }
- }
- }
- break;
- case 'drucken':
- if($drucker){
- foreach ($selectedIds as $v) {
- $projekt = $this->app->DB->Select("SELECT projekt FROM auftrag WHERE id='$v' LIMIT 1");
- $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable;
- if(class_exists('AuftragPDFCustom')){
- $Brief = new AuftragPDFCustom($this->app, $projekt);
- }else{
- $Brief = new AuftragPDF($this->app, $projekt);
- }
- $Brief->GetAuftrag($v);
- $_tmpfile = $Brief->displayTMP();
- $Brief->ArchiviereDocument();
- unlink($_tmpfile);
- $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable;
- if(class_exists('AuftragPDFCustom')){
- $Brief = new AuftragPDFCustom($this->app, $projekt);
- }else{
- $Brief = new AuftragPDF($this->app, $projekt);
- }
- $Brief->GetAuftrag($v);
- $tmpfile = $Brief->displayTMP();
- $Brief->ArchiviereDocument();
- $this->app->printer->Drucken($drucker, $tmpfile);
- $this->app->erp->AuftragProtokoll($v, "Auftrag versendet");
- $this->app->erp->AuftragProtokoll($v, "In Versandübergabe gedruckt");
- unlink($tmpfile);
- }
- }
- break;
- }
- }
- }
-
- $check = null;
- $cronjobActive = $this->app->DB->Select(
- "SELECT ps.id
- FROM `prozessstarter` AS `ps`
- WHERE ps.aktiv = 1 and (ps.parameter = 'autoversand_standard' OR ps.parameter = 'autoversand_manuell')
- LIMIT 1"
- );
- if(!$cronjobActive) {
- $check = $this->app->DB->Select(
- sprintf(
- "SELECT id
- FROM auftrag AS a
- WHERE a.id!='' AND (a.belegnr!=0 OR a.belegnr!='') AND a.status='freigegeben' AND a.autoversand='1' AND
- a.cronjobkommissionierung > 0
- AND a.inbearbeitung=0 AND a.nachlieferung!='1' AND a.vorkasse_ok='1' AND a.porto_ok='1'
- AND a.lager_ok='1' AND a.check_ok='1' AND a.ust_ok='1' AND a.liefertermin_ok='1' AND kreditlimit_ok='1' AND
- liefersperre_ok='1'
- LIMIT 1"
- )
- );
- }
-
- if($check || $cronjobActive) {
- $unversendet = $this->app->DB->Select("SELECT count(a.id) FROM auftrag as a LEFT JOIN projekt p ON p.id=a.projekt WHERE a.id!='' AND (a.belegnr!=0 OR a.belegnr!='') AND a.status='freigegeben' AND a.inbearbeitung=0 AND a.nachlieferung!='1' AND a.autoversand='1' AND a.cronjobkommissionierung = 0 AND a.liefertermin_ok='1' AND kreditlimit_ok='1' AND liefersperre_ok='1'
- AND a.vorkasse_ok='1' AND a.porto_ok='1' AND a.lager_ok='1' AND a.check_ok='1' AND a.ust_ok='1' " . $this->app->erp->ProjektRechte('p.id', true, 'a.vertriebid'));
-
- $warteschleife = $this->app->DB->Select("SELECT count(a.id) FROM auftrag as a LEFT JOIN projekt p ON p.id=a.projekt WHERE a.id!='' AND (a.belegnr!=0 OR a.belegnr!='') AND a.status='freigegeben' AND a.inbearbeitung=0 AND a.nachlieferung!='1' AND a.autoversand='1' AND a.liefertermin_ok='1' AND kreditlimit_ok='1' AND liefersperre_ok='1'
- AND a.vorkasse_ok='1' AND a.porto_ok='1' AND a.lager_ok='1' AND a.check_ok='1' AND a.ust_ok='1' AND a.cronjobkommissionierung > 0 " . $this->app->erp->ProjektRechte('p.id', true, "a.vertriebid"));
-
- if($unversendet > 0) {
- $unversendet ='('.$unversendet.')';
- }
- else {
- $unversendet='';
- }
- if($warteschleife > 0) {
- $warteschleife ='('.$warteschleife.')';
- }
- else {
- $warteschleife='';
- }
-
- $this->app->Tpl->Set('TABTEXT2','Unversendet '.$unversendet);
- $this->app->Tpl->Set('TABTEXT3','Warteschleife '.$warteschleife);
- $this->app->YUI->TableSearch('TAB3','auftraegeoffeneautowartend');
- if($warteschleife > 0 && !$cronjobActive) {
- $this->app->Tpl->Add(
- 'AUTOVERSANDBERECHNEN',
- '
Der Prozessstarter "Autoversand Manuell" ist deaktivert,
- es befinden sich aber Aufträge in der Warteschlange.
- Bitte aktieren Sie den Prozessstarter
- oder entfernen Sie die betreffenden Aufträge in der Warteschlange
");
+ if($suchwort!="")
+ {
+ $table->Query("SELECT DATE_FORMAT(a.datum,'%d.%m.%Y') as datum, a.name, a.belegnr as auftrag, adr.kundennummer, a.internet, a.plz, a.ort, a.strasse, a.zahlungsweise, a.status, a.id FROM auftrag a
+ LEFT JOIN adresse adr ON adr.id = b.adresse WHERE (a.name LIKE '%$suchwort%' OR a.email LIKE '%$suchwort%' OR a.plz LIKE '$suchwort%' OR a.internet LIKE '%$suchwort%' OR (adr.kundennummer='$suchwort' AND adr.kundennummer!=0)
+ OR (a.gesamtsumme='$suchwort' AND a.gesamtsumme!=0) OR (a.belegnr='$suchwort' AND a.belegnr!='' ))");
+ } else {
+ if($name!="")
+ $table->Query("SELECT DATE_FORMAT(a.datum,'%d.%m.%Y') as datum, a.name, a.belegnr as auftrag, adr.kundennummer, a.internet, a.plz, a.ort, a.strasse, a.zahlungsweise, a.status, a.id FROM auftrag a
+ LEFT JOIN adresse adr ON adr.id = a.adresse WHERE (a.name LIKE '%$name%')");
+ else if($email!="")
+ $table->Query("SELECT DATE_FORMAT(a.datum,'%d.%m.%Y') as datum, a.name, a.belegnr as auftrag, adr.kundennummer, a.internet, a.plz, a.ort, a.strasse, a.zahlungsweise, a.status, a.id FROM auftrag a
+ LEFT JOIN adresse adr ON adr.id = a.adresse WHERE (a.email LIKE '%$email%')");
+ else if($plz!="")
+ $table->Query("SELECT DATE_FORMAT(a.datum,'%d.%m.%Y') as datum, a.name, a.belegnr as auftrag, adr.kundennummer, a.internet, a.plz, a.ort, a.strasse, a.zahlungsweise, a.status, a.id FROM auftrag a
+ LEFT JOIN adresse adr ON adr.id = a.adresse WHERE (a.plz LIKE '$plz%')");
+ else if($proforma!="")
+ $table->Query("SELECT DATE_FORMAT(a.datum,'%d.%m.%Y') as datum, a.name, a.belegnr as auftrag, adr.kundennummer, a.internet, a.plz, a.ort, a.strasse, a.zahlungsweise, a.status, a.id FROM auftrag a
+ LEFT JOIN adresse adr ON adr.id = a.adresse WHERE (a.internet LIKE '%$proforma%')");
+ else if($kundennummer!="")
+ $table->Query("SELECT DATE_FORMAT(a.datum,'%d.%m.%Y') as datum, a.name, a.belegnr as auftrag, adr.kundennummer, a.internet, a.plz, a.ort, a.strasse, a.zahlungsweise, a.status, a.id FROM auftrag a
+ LEFT JOIN adresse adr ON adr.id = a.adresse WHERE (adr.kundennummer='$kundennummer')");
+ else if($betrag!="")
+ $table->Query("SELECT DATE_FORMAT(a.datum,'%d.%m.%Y') as datum, a.name, a.belegnr as auftrag, adr.kundennummer, a.internet, a.plz, a.ort, a.strasse, a.zahlungsweise, a.status, a.id FROM auftrag a
+ LEFT JOIN adresse adr ON adr.id = a.adresse WHERE (a.gesamtsumme='$betrag')");
+ else if($auftrag!="")
+ $table->Query("SELECT DATE_FORMAT(a.datum,'%d.%m.%Y') as datum, a.name, a.belegnr as auftrag, adr.kundennummer, a.internet, a.plz, a.ort, a.strasse, a.zahlungsweise, a.status, a.id FROM auftrag a
+ LEFT JOIN adresse adr ON adr.id = a.adresse WHERE (a.belegnr='$auftrag')");
+
+ }
+ $table->DisplayNew('ERGEBNISSE',"Lesen");
+ } else {
+ $this->app->Tpl->Add('ERGEBNISSE',"
Der Auftrag \"$name\" ($belegnr) wurde wieder als freigegeben markiert!
");
+ $this->app->DB->Update("UPDATE auftrag SET status='freigegeben',schreibschutz=0 WHERE id='$id' LIMIT 1");
+ $this->app->DB->Update("UPDATE auftrag_position SET geliefert_menge=0,geliefert=0 WHERE auftrag='$id'");
+ $this->app->erp->AuftragProtokoll($id,'Auftrag manuell als freigegeben markiert');
+ }
+ else
+ {
+ $msg = $this->app->erp->base64_url_encode('
Der Auftrag wurde abgeschlossen!
');
+ }
+ $this->app->Location->execute("index.php?module=auftrag&action=edit&id=$id&msg=$msg");
+ }
+ else {
+ $name = $this->app->DB->Select("SELECT a.name FROM auftrag b LEFT JOIN adresse a ON a.id=b.adresse WHERE b.id='$id' LIMIT 1");
+ $this->app->Tpl->Set('TAB1',"
Soll der Auftrag an $name jetzt wirklich als freigegeben markiert werden?
+
+
");
+ }
+ $this->AuftragMenu();
+ $this->app->Tpl->Parse('PAGE','tabview.tpl');
+ }
+
+ /**
+ * @param int $orderId
+ *
+ * @return array
+ */
+ public function closeOrder($orderId)
+ {
+ $orderRow = $this->app->DB->SelectRow(
+ sprintf(
+ 'SELECT name, belegnr, status FROM auftrag WHERE id=%d LIMIT 1',
+ $orderId
+ )
+ );
+ if(empty($orderRow)) {
+ return ['error' => 'Auftrag nicht gefunden'];
+ }
+ $status = $orderRow['status'];
+ $number = $orderRow['belegnr'];
+ $name = $orderRow['name'];
+ if($status === 'angelegt') {
+ return ['error' => "Der Auftrag \"$name\" ($number) kann nicht abgeschlossen werden da er noch nicht freigeben wurde! Bitte Auftrag erst freigeben!"];
+ }
+ if($status==='storniert') {
+ return ['error' => "Der Auftrag \"$name\" ($number) kann nicht abgeschlossen werden da er bereits storniert ist!"];
+ }
+ if($status === 'abgeschlossen') {
+ return ['error' => "Der Auftrag \"$name\" ($number) kann nicht abgeschlossen werden da er bereits abgeschlossen ist!"];
+ }
+ if($status!=='freigegeben' && $status!=='versendet') {
+ return ['error' => "Der Auftrag \"$name\" ($number) kann nicht abgeschlossen werden"];
+ }
+ $this->app->DB->Update(
+ sprintf(
+ "UPDATE auftrag SET status='abgeschlossen',schreibschutz=1 WHERE id=%d LIMIT 1",
+ $orderId
+ )
+ );
+ $this->app->erp->AuftragProtokoll($orderId,'Auftrag wurde manuell abgeschlossen');
+
+ return ['info' => 'Der Auftrag wurde abgeschlossen!'];
+ }
+
+ public function AuftragAbschluss()
+ {
+ $id = $this->app->Secure->GetGET('id');
+ $abschluss= $this->app->Secure->GetGET('abschluss');
+ $auftragarr = empty($id)?null: $this->app->DB->SelectRow(
+ sprintf(
+ 'SELECT name, belegnr, status FROM auftrag WHERE id=%d LIMIT 1',
+ $id
+ )
+ );
+ $name = '';
+ $belegnr = '';
+ $status = '';
+ if(!empty($auftragarr)){
+ $name = $auftragarr['name'];
+ $belegnr = $auftragarr['belegnr'];
+ $status = $auftragarr['status'];
+ }
+
+ if($abschluss==$id) {
+ $ret = $this->closeOrder($id);
+ if(!empty($ret['error'])) {
+ $msg = $this->app->erp->base64_url_encode('
Dies ist Teilauftrag Nr. $teillieferungnummer (Aktuell gesplittet in $teillieferungnummermax Aufträge). Der ursprüngliche Auftrag war: $teillieferung_von_auftrag_nummer
"
+ );
+ }
+
+
+ $check = $this->app->DB->SelectPairs(
+ "SELECT b.id, b.belegnr
+ FROM auftrag_position ap
+ INNER JOIN bestellung_position bp ON ap.id = bp.auftrag_position_id
+ INNER JOIN bestellung b ON bp.bestellung = b.id
+ WHERE ap.auftrag='$id'
+ GROUP BY b.belegnr, b.id
+ ORDER BY b.belegnr, b.id"
+ );
+ if($check) {
+ $this->app->Tpl->Add(
+ 'MESSAGE',
+ "
Zu diesem Auftrag gehör"
+ .((!empty($check)?count($check):0) == 1?'t':'en')
+ ." die Bestellung".((!empty($check)?count($check):0) == 1?':':'en:')
+ );
+ foreach($check as $supplierOrderId => $supplieryNumber) {
+ $this->app->Tpl->Add('MESSAGE',' '
+ );
+ }
+ $this->app->Tpl->Add('MESSAGE',"
");
+ }
+
+
+ if($this->app->erp->ModulVorhanden('lieferkette')) {
+ $auftraglieferkette = $this->app->DB->Select(
+ "SELECT l.auftrag
+ FROM lieferkette l
+ INNER JOIN lieferkette_bestellung lb
+ ON l.id = lb.lieferkette AND lb.belegtyp = 'auftrag' AND belegid = '$id' AND l.auftrag > 0
+ LIMIT 1"
+ );
+ if($auftraglieferkette) {
+ $this->app->Tpl->Add(
+ 'MESSAGE',
+ '
Dieser Auftrag gehört zur Lieferkette des Auftrags
'
+ );
+ }
+ }
+
+ $orderRow = $this->app->DB->SelectRow(sprintf('SELECT * FROM auftrag WHERE id = %d', $id));
+
+ $zahlungsweise= $orderRow['zahlungsweise'];//$this->app->DB->Select("SELECT zahlungsweise FROM auftrag WHERE id='$id' LIMIT 1");
+ $zahlungszieltage= $orderRow['zahlungszieltage'];//$this->app->DB->Select("SELECT zahlungszieltage FROM auftrag WHERE id='$id' LIMIT 1");
+
+ $status= $orderRow['status'];//$this->app->DB->Select("SELECT status FROM auftrag WHERE id='$id' LIMIT 1");
+ $schreibschutz= $orderRow['schreibschutz'];//$this->app->DB->Select("SELECT schreibschutz FROM auftrag WHERE id='$id' LIMIT 1");
+
+
+ $adresse= $orderRow['adresse'];//$this->app->DB->Select("SELECT adresse FROM auftrag WHERE id='$id' LIMIT 1");
+ $liefersperre= $this->app->DB->Select("SELECT liefersperre FROM adresse WHERE id='$adresse' LIMIT 1");
+
+ if($id > 0 && $this->app->DB->Select(
+ sprintf(
+ 'SELECT id FROM auftrag WHERE schreibschutz =1 AND zuarchivieren = 1 AND id = %d',
+ $id
+ )
+ )
+ ) {
+ $this->app->erp->PDFArchivieren('auftrag', $id, true);
+ }
+
+ if($status !== 'angelegt' && $status !== 'angelegta' && $status !== 'a') {
+ $Brief = new Briefpapier($this->app);
+
+ if($Brief->zuArchivieren($id, 'auftrag')) {
+ $this->app->Tpl->Add('MESSAGE',"
Der Auftrag ist noch nicht archiviert! Bitte versenden oder manuell archivieren.
");
+ }
+ elseif(!$this->app->DB->Select("SELECT versendet FROM auftrag WHERE id = '$id' LIMIT 1")) {
+ $this->app->Tpl->Add('MESSAGE',"
");
+
+ $this->app->Location->execute("index.php?module=auftrag&action=edit&id=$id&msg=$msg");
+ }
+
+ /**
+ * @param int $kommissionierungId
+ */
+ public function updateCase($kommissionierungId)
+ {
+ if($kommissionierungId <= 0) {
+ return;
+ }
+ $deliveryNotes = $this->app->DB->SelectArr(
+ sprintf(
+ 'SELECT id, kiste FROM lieferschein WHERE kommissionierung = %d ORDER BY id',
+ $kommissionierungId
+ )
+ );
+ if(empty($deliveryNotes)) {
+ return;
+ }
+
+ $kiste = 0;
+ foreach($deliveryNotes as $deliveryNote) {
+ $kiste++;
+ if($deliveryNote['kiste'] != $kiste) {
+ $this->app->DB->Update(
+ sprintf(
+ 'UPDATE lieferschein SET kiste = %d WHERE id = %d',
+ $kiste, $deliveryNote['id']
+ )
+ );
+ }
+ }
+ }
+
+ /**
+ * @param array $orders
+ * @param int $projectId
+ * @param int $cronjobCommissionId
+ * @param int $cronjobId
+ * @param int $commissionId
+ *
+ * @return int
+ */
+ public function sendOrders($orders, $projectId, $cronjobCommissionId, $cronjobId = 0, $commissionId = 0)
+ {
+ $return = 0;
+ if(empty($orders) || !is_array($orders)) {
+ return $return;
+ }
+
+ $commissionName = empty($cronjobCommissionId)?'': $this->app->DB->real_escape_string(
+ $this->app->DB->Select(
+ sprintf(
+ 'SELECT `bezeichnung` FROM `cronjob_kommissionierung` WHERE `id` = %d',
+ $cronjobCommissionId
+ )
+ )
+ );
+ $this->kommissionierung = $commissionId > 0
+ ? $commissionId
+ : $this->app->erp->GetNextKommissionierung($commissionName);
+ foreach($orders as $auftrag) {
+ if(
+ $auftragRow = $this->app->DB->SelectRow(
+ sprintf(
+ "SELECT a.id, a.belegnr
+ FROM auftrag AS a
+ WHERE (cronjobkommissionierung = '$cronjobCommissionId' OR 0 = '$cronjobCommissionId')
+ AND a.id != ''
+ AND (a.belegnr!=0 OR a.belegnr!='') AND a.status='freigegeben' AND a.inbearbeitung=0
+ AND a.nachlieferung!='1' AND a.autoversand='1' AND a.liefertermin_ok='1' AND kreditlimit_ok='1'
+ AND liefersperre_ok='1'
+ AND a.vorkasse_ok='1' AND a.porto_ok='1' AND a.lager_ok='1' AND a.check_ok='1' AND a.ust_ok='1'
+ AND a.id = %d
+ GROUP BY a.id
+ ORDER by a.id",
+ $auftrag
+ )
+ )
+ ) {
+ if($cronjobId > 0){
+ $this->app->erp->ProzessstarterStatus(
+ 'Auftrag Versand Auftrag: ' . $auftragRow['belegnr'], $cronjobId
+ );
+ }
+ //$this->app->erp->AuftragEinzelnBerechnen($auftrag);
+ $this->app->DB->Update(
+ "UPDATE prozessstarter
+ SET mutex = 1 , mutexcounter = 0, letzteausfuerhung = now()
+ WHERE (parameter = 'autoversand_standard' OR parameter = 'autoversand_manuell') AND aktiv = 1"
+ );
+ $erg = null;
+ $this->app->erp->RunHook('VorAutoversand', 1, $auftrag);
+ if(
+ $this->app->DB->Select(
+ sprintf(
+ "SELECT a.id
+ FROM auftrag AS a
+ WHERE a.id = %d AND (a.belegnr!=0 OR a.belegnr!='') AND a.status='freigegeben'
+ AND a.inbearbeitung=0 AND a.nachlieferung!='1' AND a.autoversand='1' AND a.liefertermin_ok='1'
+ AND kreditlimit_ok='1' AND liefersperre_ok='1'
+ AND a.vorkasse_ok='1' AND a.porto_ok='1' AND a.lager_ok='1' AND a.check_ok='1' AND a.ust_ok='1'
+ GROUP BY a.id",
+ $auftrag
+ )
+ )
+ ) {
+ $this->AuftragVersand($auftrag, false, $erg, true);
+ $return++;
+ }
+ $this->app->DB->Update(
+ sprintf(
+ 'UPDATE auftrag SET cronjobkommissionierung = 0 WHERE id = %d LIMIT 1',
+ $auftrag
+ )
+ );
+ }
+ }
+
+ if(
+ empty($projectId)
+ || empty($this->kommissionierung)
+ || !$this->app->DB->Select(
+ sprintf(
+ 'SELECT `id` FROM `lieferschein` WHERE `kommissionierung` = %d LIMIT 1',
+ $this->kommissionierung
+ )
+ )
+ ) {
+ return $return;
+ }
+
+ $kommissionierlistestufe1 = $this->app->erp->Projektdaten($projectId, 'kommissionierlistestufe1');
+ if($kommissionierlistestufe1) {
+ $druckercode = $this->app->erp->Projektdaten($projectId, 'druckerlogistikstufe1');
+ if($druckercode <=0) {
+ $druckercode = $this->app->erp->Firmendaten('standardversanddrucker');
+ }
+ $kommissionierlistestufe1menge = $this->app->erp->Projektdaten(
+ $projectId, 'kommissionierlistestufe1menge'
+ );
+ if($kommissionierlistestufe1menge < 1) {
+ $kommissionierlistestufe1menge = 1;
+ }
+ /** @var Kommissionierlauf $obj2 */
+ $obj2 = $this->app->erp->LoadModul('kommissionierlauf');
+ if($obj2 && $this->kommissionierung) {
+ if($cronjobId > 0){
+ $this->app->erp->ProzessstarterStatus(
+ 'KommissionierlaufPDF: ' . $this->kommissionierung, $cronjobId
+ );
+ }
+ $tmpfile = $obj2->KommissionierlaufPDF($this->kommissionierung);
+ for($mengedruck=$kommissionierlistestufe1menge;$mengedruck > 0;$mengedruck--) {
+ $this->app->printer->Drucken($druckercode,$tmpfile);
+ }
+ unlink($tmpfile);
+ }
+ }
+
+ return $return;
+ }
+
+ public function AuftragVersand($id='', $ignoriereliefertermin = false, &$ergebnis = null, $paketmarkedrucken = false)
+ {
+ if(!$this->kommissionierung)
+ {
+ $this->kommissionierung = $this->app->erp->GetNextKommissionierung();
+ }
+ // mit der funktionen koennen nur erstauftraege abgewickelt koennen!!!
+ $internmodus = 0;
+ if($id!='')
+ {
+ $internmodus=1;
+ }
+ if($id==''){
+ $id = $this->app->Secure->GetGET('id');
+ }
+ $cmd = $this->app->Secure->GetGET("cmd");
+ if($cmd=="manually" && $id > 0)
+ {
+ $this->app->DB->Update(sprintf("UPDATE auftrag SET autoversand=1 WHERE id=%d AND status='freigegeben' LIMIT 1",$id));
+ }
+
+ @ignore_user_abort(true);
+ @set_time_limit(0);
+ // Prozess haengt so lange bis der nächste frei ist
+ $fp = $this->app->erp->ProzessLock('auftrag_autoversand');
+ $posids = $this->app->Secure->GetGET('posids');
+ if($posids)
+ {
+ $positionen = null;
+ $zwischenpositionen = null;
+ if(strpos($posids, 'z') !== false || strpos($posids, 'b') !== false)
+ {
+ $sida = explode(',',$posids);
+ foreach($sida as $v)
+ {
+ if(strpos($v, 'b') === 0)
+ {
+ $v = substr($v ,1);
+ $positionen[] = $v;
+ }else{
+ $v = substr($v ,1);
+ $zwischenpositionen[] = $v;
+ }
+ }
+ }
+ }
+ $this->app->erp->AuftragEinzelnBerechnen($id);
+ // artikel reservieren
+ $adresse = 0;
+ $versandart = '';
+ $projekt = 0;
+ $belegnr = '';
+ $tmpname = '';
+ $keinetrackingmail = 0;
+ $usereditid = 0;
+ $auftrag = $this->app->DB->SelectArr("SELECT * FROM auftrag WHERE id='$id' LIMIT 1");
+ if(!empty($auftrag)){
+ $adresse = $auftrag[0]['adresse'];
+ $versandart = $auftrag[0]['versandart'];
+ $projekt = (int)$auftrag[0]['projekt'];
+ $belegnr = $auftrag[0]['belegnr'];
+ $tmpname = $auftrag[0]['name'];
+ $keinetrackingmail = $auftrag[0]['keinetrackingmail'];
+ $usereditid = $auftrag[0]['usereditid'];//$this->app->DB->Select("SELECT usereditid FROM auftrag WHERE id='$id' LIMIT 1");
+ }
+ $useredittimestamp = $this->app->DB->Select("SELECT TIME_TO_SEC(TIMEDIFF(NOW(), useredittimestamp)) FROM auftrag WHERE id='$id' LIMIT 1");
+
+ $projektarr = null;
+ if($projekt > 0){
+ $projektarr = $this->app->DB->SelectRow("SELECT * FROM projekt WHERE id='$projekt' LIMIT 1");
+ }
+ if(!empty($projektarr)){
+ $kommissionierverfahren = $projektarr['kommissionierverfahren'];//$this->app->DB->Select("SELECT kommissionierverfahren FROM projekt WHERE id='$projekt' LIMIT 1");
+ }else{
+ $kommissionierverfahren = '';
+ }
+ if($usereditid == $this->app->User->GetID())
+ {
+ $useredittimestamp = 1000;
+ }
+
+ $anzahl_artikel = $this->app->DB->Select("SELECT id FROM auftrag_position WHERE auftrag=$id LIMIT 1");
+ if($anzahl_artikel <= 0)
+ {
+ $meldung = "Auftrag $belegnr kann nicht weitergefuehrt werden, da keine Artikel gebucht sind!";
+ $this->app->erp->EventMitSystemLog($this->app->User->GetID(), $meldung, -1,'', 'alert', 1);
+ }
+ $ret = false;
+ $zusatzcheck = true;
+ $this->app->erp->RunHook('AuftragVersandZusatzcheck', 2, $id, $zusatzcheck);
+ if(($auftrag[0]['status']==='freigegeben' && $auftrag[0]['nachlieferung']=='0'
+ && $auftrag[0]['lager_ok']=='1'&&$auftrag[0]['porto_ok']=='1'&&$auftrag[0]['ust_ok']=='1'
+ && $auftrag[0]['vorkasse_ok']=='1'&&$auftrag[0]['nachnahme_ok']=='1' &&($auftrag[0]['liefertermin_ok']=='1' || $ignoriereliefertermin)
+ && $auftrag[0]['check_ok']=='1' && $auftrag[0]['autoversand']=='1'
+ && $auftrag[0]['kreditlimit_ok']=='1' && $auftrag[0]['liefersperre_ok']=='1' && ($useredittimestamp > 45 || $useredittimestamp <= 0 || $internmodus)
+ && $anzahl_artikel >=1) && $zusatzcheck)
+ {
+ // Start
+ $ret = true;
+
+ $this->app->DB->Insert(
+ sprintf(
+ "INSERT INTO auftrag_protokoll (auftrag, zeit, bearbeiter, grund) VALUES
+ (%d,now(),'%s','Lieferschein an Versandzentrum übergeben')",
+ (int)$id,(isset($this->app->User)?$this->app->DB->real_escape_string($this->app->User->GetName()):'Cronjob')
+ )
+ );
+
+ $this->app->erp->Protokoll("WeiterfuehrenAuftrag AB $belegnr Art: ".$auftrag[0]['art']);
+ // pruefe ob es lagerartikel gibt
+ /*$summe_lagerartikel = $this->app->DB->Select("SELECT SUM(ap.id) FROM auftrag_position ap,
+ artikel a WHERE ap.auftrag='$id' AND a.id=ap.artikel AND a.lagerartikel='1'");*/
+
+ $nurRestmenge = false;
+ //if($summe_lagerartikel >0 || $auftrag[0][art]=="rma")
+ //TODO wenn nur dienstleistung keinen lieferschein
+ if($auftrag[0]['art']==='lieferung' || $auftrag[0]['art']==='standardauftrag' || $auftrag[0]['art']=='')
+ {
+ if($posids) {
+ $lieferschein = $this->app->erp->WeiterfuehrenAuftragZuLieferschein($id, $positionen, $zwischenpositionen);
+ $this->app->erp->Protokoll('WeiterfuehrenAuftragZuLieferschein AB '.$belegnr);
+ }
+ else {
+ $lieferschein = $this->app->DB->Select(
+ sprintf(
+ "SELECT dn.id
+ FROM lieferschein AS dn
+ WHERE dn.auftragid = %d AND dn.status <> 'storniert'
+ LIMIT 1",
+ $id
+ )
+ );
+ if(empty($lieferschein)) {
+ $lieferschein = $this->app->erp->WeiterfuehrenAuftragZuLieferschein($id);
+ $this->app->erp->Protokoll('WeiterfuehrenAuftragZuLieferschein AB ' . $belegnr);
+ }
+ else {
+ $nurRestmenge = true;
+ }
+ }
+
+ $ls_belegnr = (string)$this->app->DB->Select("SELECT belegnr FROM lieferschein WHERE id='$lieferschein' LIMIT 1");
+ if($ls_belegnr==='' || $ls_belegnr==='0') {
+ $ls_belegnr = $this->app->erp->GetNextNummer('lieferschein',$projekt,$lieferschein);
+ }
+
+ $this->app->DB->Update("UPDATE lieferschein SET
+ belegnr='$ls_belegnr', status='freigegeben', versand='".$this->app->User->GetDescription()."'
+ WHERE id='$lieferschein' LIMIT 1");
+
+ $this->app->erp->LieferscheinProtokoll($lieferschein, 'Lieferschein freigegeben');
+
+ if(!($kommissionierverfahren==='lieferscheinlager' ||
+ $kommissionierverfahren==='lieferscheinlagerscan' ||
+ $kommissionierverfahren==='lieferschein')){
+ $this->app->erp->PDFArchivieren('lieferschein', $lieferschein);
+ }
+ $etiketten_positionen = 0;
+ $etiketten_art = '';
+ $etiketten_drucker = 0;
+ $etiketten_sort = 0;
+ if(!empty($projektarr))
+ {
+ $etiketten_positionen = $projektarr['etiketten_positionen'];//$this->app->DB->Select("SELECT etiketten_positionen FROM projekt WHERE id='$projekt' LIMIT 1");
+ $etiketten_art = $projektarr['etiketten_art'];//$this->app->DB->Select("SELECT etiketten_art FROM projekt WHERE id='$projekt' LIMIT 1");
+ $etiketten_drucker = $projektarr['etiketten_drucker'];//$this->app->DB->Select("SELECT etiketten_drucker FROM projekt WHERE id='$projekt' LIMIT 1");
+ $etiketten_sort= $projektarr['etiketten_sort'];//$this->app->DB->Select("SELECT etiketten_drucker FROM projekt WHERE id='$projekt' LIMIT 1");
+ }
+ if($etiketten_positionen > 0)
+ {
+ $this->app->erp->LieferscheinPositionenDrucken($lieferschein,$etiketten_drucker,$etiketten_art,$etiketten_sort);
+ }
+ } else {
+ // sonst ist lieferschein = 0
+ $lieferschein = 0;
+ }
+
+ // rechnung immer außer es ist beistellung bzw. kostenlose lieferung
+ $rechnung = 0;
+ if(($auftrag[0]['art']==='rechnung' || $auftrag[0]['art']==='standardauftrag' || $auftrag[0]['art']=='') && !$this->app->erp->Projektdaten($projekt,'rechnungerzeugen'))
+ {
+ // nur erzeugen wenn positionen betrag hpoch genug ist
+ $artikelarrsumme = $this->app->DB->Select("SELECT SUM(preis*menge) FROM auftrag_position WHERE auftrag='$id' AND auftrag > 0");
+ $this->app->erp->Protokoll("WeiterfuehrenAuftragZuRechnung AB $belegnr Preis ".$artikelarrsumme);
+
+ // wenn mindestesten zwei verschiedene steuersaetze und rechnung 0 ist dann muss man auch erzeugen
+ $anzahlsteuer = $this->app->DB->Select("Select sum(t.summe) FROM (
+ (SELECT count(distinct 1) as summe FROM auftrag_position WHERE umsatzsteuer = 'ermaessigt' AND (isnull(steuersatz) OR steuersatz < 0) AND auftrag = '$id' LIMIT 1)
+ union all (SELECT count(distinct 1) as summe FROM auftrag_position WHERE umsatzsteuer = 'befreit' AND (isnull(steuersatz) OR steuersatz < 0) AND auftrag = '$id' LIMIT 1)
+ union all (SELECT count(distinct 1) as summe FROM auftrag_position WHERE umsatzsteuer <> 'ermaessigt' AND (isnull(steuersatz) OR steuersatz < 0) AND auftrag = '$id' LIMIT 1)
+ union all (SELECT count(distinct 1) as summe FROM auftrag_position WHERE steuersatz >= 0 and not isnull(steuersatz) AND auftrag = '$id' LIMIT 1) )t");
+
+ if($artikelarrsumme>=0.01 || $anzahlsteuer > 1)
+ {
+ // versand erzeugen (RE + LS) und verlinken und wenn vorkasse auftrag geld als bezahlt markieren in rechnung
+ if($posids) {
+
+ $rechnung = $this->app->erp->WeiterfuehrenAuftragZuRechnung($id, $positionen, $zwischenpositionen);
+ }
+ else{
+ $rechnung = $this->app->DB->Select(
+ sprintf(
+ "SELECT i.id FROM rechnung AS i WHERE auftragid = %d AND status <> 'storniert' LIMIT 1",
+ $id
+ )
+ );
+ if(empty($rechnung)){
+ $rechnung = $this->app->erp->WeiterfuehrenAuftragZuRechnung($id);
+ }
+ }
+ $this->app->DB->Update("UPDATE rechnung SET lieferschein='$lieferschein' WHERE id='$rechnung' LIMIT 1");
+
+ $re_belegnr = (string)$this->app->DB->Select("SELECT belegnr FROM rechnung WHERE id='$rechnung' LIMIT 1");
+ if($re_belegnr==='' || $re_belegnr==='0')
+ {
+ $re_belegnr = $this->app->erp->GetNextNummer('rechnung',$projekt,$rechnung);
+ }
+ $this->app->erp->Protokoll("WeiterfuehrenAuftragZuRechnung AB $belegnr (id $id) RE $re_belegnr (id $rechnung)");
+
+ $this->app->DB->Update(
+ sprintf(
+ "UPDATE rechnung SET belegnr = '%s' WHERE id = %d AND (belegnr = '' OR belegnr = '0')",
+ $re_belegnr, $rechnung
+ )
+ );
+ $this->app->DB->Update(
+ sprintf(
+ "UPDATE rechnung SET status = 'freigegeben' WHERE status <> 'storniert' AND status <> 'versendet' AND id = %d",
+ $rechnung
+ )
+ );
+ $this->app->erp->RechnungProtokoll($rechnung, 'Rechnung freigegeben');
+
+ $this->app->DB->Update(
+ sprintf(
+ "UPDATE rechnung
+ SET buchhaltung='%s'
+ WHERE id=%d
+ LIMIT 1",
+ $this->app->DB->real_escape_string($this->app->User->GetDescription()), $rechnung
+ )
+ );
+
+ $this->app->erp->ANABREGSNeuberechnen($rechnung,"rechnung");
+ $this->app->erp->PDFArchivieren("rechnung",$rechnung);
+ }
+ }
+ // auftrag_position geliefert_menge und geliefert anpassen
+ $artikelarr = $this->app->DB->SelectArr(
+ sprintf(
+ "SELECT ap.id,ap.artikel,ap.menge
+ FROM auftrag_position AS ap
+ INNER JOIN artikel AS art ON ap.artikel = art.id AND art.lagerartikel = 1
+ WHERE ap.auftrag=%d AND ap.auftrag > 0",
+ (int)$id
+ )
+ );
+
+ $cartikelarr = $artikelarr?count($artikelarr):0;
+ for($i=0;$i<$cartikelarr; $i++)
+ {
+ $auftragspositionsid = $artikelarr[$i]['id'];
+ $artikel = $artikelarr[$i]['artikel'];
+ $menge= $artikelarr[$i]['menge'];
+ // lager teile reservieren
+
+ $this->app->DB->Delete("DELETE FROM lager_reserviert WHERE objekt='auftrag'
+ AND parameter='$id' AND artikel='$artikel' ");
+
+ $this->app->DB->Update("UPDATE auftrag_position SET geliefert_menge='$menge',
+ geliefert='1' WHERE id='$auftragspositionsid' LIMIT 1");
+ }
+
+ // nur wenn autoversand projekt
+ $autoversand_pruefung = '';
+ $automailrechnung = '';
+ $autodruckrechnungstufe1mail = '';
+ if(!empty($projektarr)){
+ $autoversand_pruefung = $projektarr['autoversand'];// $this->app->DB->Select("SELECT autoversand FROM projekt WHERE id='$projekt' LIMIT 1");
+ $automailrechnung = $projektarr['automailrechnung'];//$this->app->DB->Select("SELECT automailrechnung FROM projekt WHERE id='$projekt' LIMIT 1");
+ $autodruckrechnungstufe1mail = $projektarr['autodruckrechnungstufe1mail'];//$this->app->DB->Select("SELECT autodruckrechnungstufe1mail FROM projekt WHERE id='$projekt' LIMIT 1");
+ }
+
+ $druckercode = $this->app->erp->Firmendaten('standardversanddrucker');
+
+
+ $this->app->erp->Protokoll("WeiterfuehrenAuftragZuRechnung AB $belegnr Kommissionierverfahren: $kommissionierverfahren Projekt $projekt");
+
+ switch($kommissionierverfahren)
+ {
+ case 'rechnungsmail':
+ // rechnung per mail versenden????
+ if($automailrechnung && $rechnung > 0)
+ {
+ // rechnung per mail versenden
+ // sende
+ // $this->app->erp->Rechnungsmail($rechnung);
+ }
+ $this->app->DB->Insert(
+ sprintf(
+ "INSERT INTO auftrag_protokoll (auftrag, zeit, bearbeiter, grund) VALUES
+ (%d,now(),'%s','Autoversand ausgeführt')",
+ (int)$id,(isset($this->app->User)?$this->app->DB->real_escape_string($this->app->User->GetName()):'Cronjob')
+ )
+ );
+ break;
+ default:
+
+ if($kommissionierverfahren==='lieferschein' && $lieferschein > 0)
+ {
+ //FALL 1 Lieferschein mit Lagerplatz
+ if($this->kommissionierung){
+ $this->app->DB->Update(
+ sprintf(
+ "UPDATE lieferschein SET kommissionierung = %d WHERE id = %d LIMIT 1",
+ $this->kommissionierung, $lieferschein
+ )
+ );
+ $this->updateCase($this->kommissionierung);
+ }
+ $this->app->erp->LieferscheinAuslagern(
+ $lieferschein,
+ true,
+ (int)$this->app->DB->Select(sprintf('SELECT standardlager FROM auftrag WHERE id = %d LIMIT 1', $id)),
+ 'lieferschein',
+ true,
+ false,
+ $nurRestmenge
+ );
+
+ // Prozesse ohne Versandzentrum
+
+
+ $this->app->erp->BriefpapierHintergrundDisable($druckercode);
+
+ $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable;
+ if(class_exists('LieferscheinPDFCustom')) {
+ $Brief = new LieferscheinPDFCustom($this->app,$projekt);
+ }
+ else{
+ $Brief = new LieferscheinPDF($this->app,$projekt);
+ }
+ $Brief->GetLieferschein($lieferschein);
+ $tmpfile = $Brief->displayTMP();
+ $Brief->ArchiviereDocument(false, true);
+ unlink($tmpfile);
+ $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable;
+
+ if(class_exists('LieferscheinPDFCustom')) {
+ $Brief = new LieferscheinPDFCustom($this->app,$projekt);
+ }
+ else{
+ $Brief = new LieferscheinPDF($this->app,$projekt);
+ }
+ $Brief->GetLieferschein($lieferschein);
+ $tmpfile = $Brief->displayTMP();
+ $Brief->ArchiviereDocument(false, true);
+ //$this->app->printer->Drucken($druckercode,$tmpfile);
+
+ $fileid_lieferschein = $this->app->erp->CreateDatei($Brief->filename,'lieferschein','','',$tmpfile,$this->app->User->GetName());
+ $this->app->erp->AddDateiStichwort($fileid_lieferschein,'lieferschein','lieferschein',$lieferschein,$without_log=false);
+
+ $sprache = $this->app->DB->Select("SELECT sprache FROM lieferschein WHERE id='$lieferschein' LIMIT 1");
+ if($sprache=='')
+ {
+ $sprache='deutsch';
+ }
+ $text = $this->app->erp->GetGeschaeftsBriefText('Lieferschein',$sprache,$projekt);
+ $betreff = $this->app->erp->GetGeschaeftsBriefBetreff('Lieferschein',$sprache,$projekt);
+ if($betreff=='')
+ {
+ $betreff='Mitgesendet bei Lieferung';
+ }
+
+ $this->app->DB->Update("UPDATE lieferschein SET status='versendet',versendet='1',schreibschutz='1' WHERE id='$lieferschein' LIMIT 1");
+ $this->app->DB->Insert("INSERT INTO dokumente_send
+ (id,dokument,zeit,bearbeiter,adresse,parameter,art,betreff,text,projekt,ansprechpartner,dateiid) VALUES ('','lieferschein',NOW(),'".$this->app->User->GetName()."',
+ '$adresse','$lieferschein','versand','$betreff','$text','$projekt','','$fileid_lieferschein')");
+ $this->app->erp->LieferscheinProtokoll($lieferschein,'Lieferschein versendet (Auto-Versand)');
+
+ unlink($tmpfile);
+ // Druck Auftrag Anhang wenn aktiv
+ if(1)//if($this->app->erp->Projektdaten($projekt,"autodruckanhang")=="1")
+ {
+ // alle anhaenge drucken! wo auftrag datei anhang
+ $this->app->erp->GetDateiSubjektObjekt('anhang','Auftrag',$id);
+ // for($i=0;$i<(!empty($tmpanhang)?count($tmpanhang):0);$i++)
+ // $this->app->printer->Drucken($druckercode,$tmpanhang[$i]);
+ $tmpanhang ='';
+ }
+ $this->app->DB->Insert(
+ sprintf(
+ "INSERT INTO auftrag_protokoll (auftrag, zeit, bearbeiter, grund) VALUES
+ (%d,now(),'%s','Auftrag an Versandzentrum übergeben')",
+ (int)$id,(isset($this->app->User)?$this->app->DB->real_escape_string($this->app->User->GetName()):'Cronjob')
+ )
+ );
+ }
+
+
+ //FALL 2 // logistikzentrum
+
+ // auftrag_position geliefert_menge und geliefert anpassen
+ $artikelarr = $this->app->DB->SelectArr(
+ sprintf(
+ "SELECT ap.id, ap.artikel,ap.menge
+ FROM auftrag_position AS ap
+ INNER JOIN artikel AS art ON ap.artikel = art.id AND art.lagerartikel = 1
+ WHERE ap.auftrag=%d AND ap.auftrag > 0",
+ (int)$id
+ )
+ );
+ $cartikelarr = $artikelarr?count($artikelarr):0;
+ for($i=0;$i<$cartikelarr; $i++) {
+ $auftragspositionsid = $artikelarr[$i]['id'];
+ $artikel = $artikelarr[$i]['artikel'];
+ $menge= $artikelarr[$i]['menge'];
+ // lager teile reservieren
+
+ $this->app->DB->Delete("DELETE FROM lager_reserviert WHERE objekt='auftrag'
+ AND parameter='$id' AND artikel='$artikel' ");
+
+ if($kommissionierverfahren==='zweistufig' && $lieferschein > 0)
+ {
+ $this->app->DB->Insert("INSERT INTO lager_reserviert (id,adresse,artikel,menge,grund,projekt,
+ firma,bearbeiter,datum,objekt,parameter)
+ VALUES('','$adresse','$artikel','$menge','Versand für Auftrag $belegnr','$projekt',
+ '".$this->app->User->GetFirma()."','".$this->app->User->GetName()."','9999-01-01','lieferschein','$lieferschein')");
+ }
+
+ if($lieferschein > 0) {
+ $this->app->DB->Update("UPDATE auftrag_position SET geliefert_menge='$menge',
+ geliefert='1' WHERE id='$auftragspositionsid' LIMIT 1");
+ }
+
+ }
+ //ende
+
+ $this->app->DB->Insert(
+ sprintf(
+ "INSERT INTO auftrag_protokoll (auftrag, zeit, bearbeiter, grund) VALUES
+ (%d,now(),'%s','Autoversand ausgeführt')",
+ (int)$id,(isset($this->app->User)?$this->app->DB->real_escape_string($this->app->User->GetName()):'Cronjob')
+ )
+ );
+ }
+ $autodruckrechnungstufe1 = 0;
+ $autodruckrechnungstufe1menge = 0;
+ $exportdruckrechnungstufe1 = 0;
+ $printOrderQuantity = 0;
+ if(!empty($projektarr))
+ {
+ $autodruckrechnungstufe1 = $projektarr['autodruckrechnungstufe1'];
+ $autodruckrechnungstufe1menge = $projektarr['autodruckrechnungstufe1menge'];
+ $exportdruckrechnungstufe1 = $projektarr['exportdruckrechnungstufe1'];
+ if($projektarr['auftragdrucken'] == '1') {
+ $printOrderQuantity = $projektarr['auftragdruckenmenge'] > 1 ? $projektarr['auftragdruckenmenge'] : 1;
+ }
+ }
+
+ if($exportdruckrechnungstufe1)
+ {
+ if(!empty($projektarr))
+ {
+ $exportdruckrechnungstufe1menge = $projektarr['exportdruckrechnungstufe1menge'];//$this->app->DB->Select("SELECT exportdruckrechnungstufe1menge FROM projekt WHERE id='$projekt' LIMIT 1");
+ }else{
+ $exportdruckrechnungstufe1menge = 0;
+ }
+
+ $exportland = $this->app->DB->Select("SELECT if(abweichendelieferadresse = 1 AND lieferland <> '',lieferland, land) FROM auftrag WHERE id = '$id' LIMIT 1");
+ $exportdruckrechnungstufe1 = $this->app->erp->Export($exportland);
+ }
+
+
+
+
+ if(($autodruckrechnungstufe1=='1' || $exportdruckrechnungstufe1) && $rechnung > 0)
+ {
+ $this->app->DB->Update("UPDATE rechnung SET status='versendet', versendet='1',schreibschutz='1' WHERE id='$rechnung' LIMIT 1");
+ $druckercode = $this->app->erp->Projektdaten($projekt,'druckerlogistikstufe1');
+ $this->app->erp->BriefpapierHintergrundDisable($druckercode);
+ if(class_exists('RechnungPDFCustom'))
+ {
+ $Brief = new RechnungPDFCustom($this->app,$projekt);
+ }else{
+ $Brief = new RechnungPDF($this->app,$projekt);
+ }
+ $Brief->GetRechnung($rechnung);
+ $tmpfile = $Brief->displayTMP();
+ $Brief->ArchiviereDocument();
+ if($autodruckrechnungstufe1=='1')
+ {
+ for($imenge=0;$imenge<$autodruckrechnungstufe1menge;$imenge++) {
+ $this->app->printer->Drucken($druckercode, $tmpfile);
+ }
+ }
+ if($exportdruckrechnungstufe1 == '1')
+ {
+ for($imenge=0;$imenge<$exportdruckrechnungstufe1menge;$imenge++) {
+ $this->app->printer->Drucken($druckercode, $tmpfile);
+ }
+ }
+ unlink($tmpfile);
+ $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable;
+ if(class_exists('RechnungPDFCustom'))
+ {
+ $Brief = new RechnungPDFCustom($this->app,$projekt);
+ }else{
+ $Brief = new RechnungPDF($this->app,$projekt);
+ }
+ $Brief->GetRechnung($rechnung);
+ $tmpfile = $Brief->displayTMP();
+ $Brief->ArchiviereDocument();
+ unlink($tmpfile);
+ $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable;
+ }
+
+ if($autodruckrechnungstufe1mail && $rechnung > 0)
+ {
+ $this->app->erp->Rechnungsmail($rechnung);
+ }
+
+ // auftrag abschliessen
+ $this->app->DB->Update("UPDATE auftrag SET status='abgeschlossen',schreibschutz='1' WHERE id='$id' LIMIT 1");
+ $this->app->erp->PDFArchivieren('auftrag',$id);
+
+ // auftrag abschliessen und event senden
+
+ $this->app->erp->ProzessUnlock($fp);
+
+ // kundenfreigabe loeschen wenn das im projekt eingestellt ist
+ if(!empty($projektarr))
+ {
+ $checkok = $projektarr['kundenfreigabe_loeschen'];//$this->app->DB->Select("SELECT kundenfreigabe_loeschen FROM projekt WHERE id='$projekt' LIMIT 1");
+ }else{
+ $checkok = 0;
+ }
+
+ if($checkok==1){
+ $this->app->DB->Update("UPDATE adresse SET kundenfreigabe='0' WHERE id='$adresse' LIMIT 1");
+ }
+
+ if($this->app->erp->ModulVorhanden('produktion') && method_exists($this->app->erp, 'ProduktionEinzelnBerechnen'))
+ {
+ $produktionen = $this->app->DB->SelectArr("SELECT id FROM produktion WHERE auftragid = '$id'");
+ if($produktionen)
+ {
+ foreach($produktionen as $v)
+ {
+ $this->app->erp->ProduktionEinzelnBerechnen($v['id']);
+ }
+ }
+ }
+
+ //if($internmodus && $lieferschein) // 2018-10-09 BS ab jetzt immer diese Optionen auswerten - nicht nur wenn es intern ist
+ if($lieferschein)
+ {
+ $paketmarkedruckenprojekt = !empty($projektarr['paketmarkedrucken'])?$projektarr['paketmarkedrucken']:0;
+ if($paketmarkedrucken && $paketmarkedruckenprojekt && !$this->app->erp->PaketmarkeDrucken($lieferschein, 'lieferschein'))
+ {
+ //$this->app->DB->Update("UPDATE auftrag SET schreibschutz = 0, status = 'freigegeben' WHERE id = '$id' LIMIT 1");
+ $this->app->erp->AuftragProtokoll($id, 'Paketmarke drucken fehlgeschlagen');
+ if(!empty($fp))
+ {
+ $this->app->erp->ProzessUnlock($fp);
+ }
+ return $ret;
+ }
+ $lieferscheinedruckenprojekt = !empty($projektarr['lieferscheinedrucken'])?$projektarr['lieferscheinedrucken']:0;
+ if($lieferscheinedruckenprojekt)
+ {
+ $lieferscheinedruckenmenge = !empty($projektarr['lieferscheinedruckenmenge'])?$projektarr['lieferscheinedruckenmenge']:0;//$this->app->DB->Select("SELECT lieferscheinedruckenmenge FROM projekt WHERE id = '$projekt' LIMIT 1");
+ if($lieferscheinedruckenmenge > 0)
+ {
+ $druckercode = !empty($projektarr['druckerlogistikstufe1'])?$projektarr['druckerlogistikstufe1']:0;//$this->app->DB->Select("SELECT druckerlogistikstufe1 FROM projekt WHERE id='$projekt' LIMIT 1");
+ if($druckercode <=0){
+ $druckercode = $this->app->erp->Firmendaten('standardversanddrucker');
+ }
+
+ $this->app->erp->BriefpapierHintergrundDisable($druckercode);
+
+ if(class_exists('LieferscheinPDFCustom'))
+ {
+ $Brief = new LieferscheinPDFCustom($this->app,$projekt);
+ }else{
+ $Brief = new LieferscheinPDF($this->app,$projekt);
+ }
+ $Brief->GetLieferschein($lieferschein);
+
+ $tmpfile = $Brief->displayTMP();
+ $Brief->ArchiviereDocument();
+
+ for($imenge=0;$imenge<$lieferscheinedruckenmenge;$imenge++) {
+ $this->app->printer->Drucken($druckercode, $tmpfile);
+ }
+ unlink($tmpfile);
+ $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable;
+ if(class_exists('LieferscheinPDFCustom'))
+ {
+ $Brief = new LieferscheinPDFCustom($this->app,$projekt);
+ }else{
+ $Brief = new LieferscheinPDF($this->app,$projekt);
+ }
+ $Brief->GetLieferschein($lieferschein);
+
+ $tmpfile = $Brief->displayTMP();
+ $Brief->ArchiviereDocument();
+ unlink($tmpfile);
+ $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable;
+ }
+ }
+ }
+
+ // Druck Auftrag Anhang wenn aktiv
+ if($this->app->erp->Projektdaten($projekt,'druckanhang')=='1') {
+ $obj = $this->app->erp->LoadModul('versanderzeugen');
+ if(!empty($obj) && method_exists($obj,'autoPrintAttachment'))
+ {
+ $obj->autoPrintAttachment($druckercode,$id,$lieferschein,$rechnung);
+ }
+ }
+
+ if($printOrderQuantity > 0 && $druckercode) {
+ if(class_exists('AuftragPDFCustom'))
+ {
+ $Brief = new AuftragPDFCustom($this->app,$projekt);
+ }else{
+ $Brief = new AuftragPDF($this->app,$projekt);
+ }
+ $Brief->GetAuftrag($id);
+
+ $tmpfile = $Brief->displayTMP();
+ for($printOrderQuantity; $printOrderQuantity > 0; $printOrderQuantity--) {
+ $this->app->printer->Drucken($druckercode, $tmpfile);
+ }
+ unlink($tmpfile);
+ }
+
+ $this->app->erp->RunHook('auftrag_versand_ende', 1, $id);
+
+ // wenn per URL aufgerufen
+ if($internmodus!='1')
+ {
+ if(!empty($fp))
+ {
+ $this->app->erp->ProzessUnlock($fp);
+ }
+ $this->app->Location->execute("index.php?module=auftrag&action=edit&id=$id&msg=$msg");
+ }
+ if(!empty($fp))
+ {
+ $this->app->erp->ProzessUnlock($fp);
+ }
+ return $ret;
+ }
+
+ //$this->app->erp->ProzessUnlock("auftrag_autoversand");
+ $this->app->erp->ProzessUnlock($fp);
+
+ if($posids)
+ {
+ $this->app->Location->execute('index.php?module=auftrag&action=positionen&id='.$id);
+ }
+
+ // wenn per URL aufgerufen
+ if($internmodus!='1')
+ {
+ // $this->AuftragList();
+
+ //header("Location: index.php?module=auftrag&action=search");
+ if($id > 0){
+ $this->app->Location->execute('index.php?module=auftrag&action=edit&id=' . $id);
+ }
+ $this->app->Location->execute('index.php?module=auftrag&action=versandzentrum');
+ }
+ }
+
+
+ function AuftragSelbstabholerNachricht()
+ {
+ // kann man immer wieder aufrufen wenn ein teilchen gekommen ist bis auftrag voll erfuellt ist
+
+ }
+
+ function AuftragSelbstabholerAbgeholt()
+ {
+ // kann man immer wieder aufrufen wenn ein teilchen gekommen ist bis auftrag voll erfuellt ist
+
+ }
+
+
+ function AuftragNachlieferungCheck()
+ {
+
+ //echo "pruefe ob eine Nachlieferung gemacht werden kann";
+
+ }
+
+
+ function AuftragNachlieferung()
+ {
+ // kann man immer wieder aufrufen wenn ein teilchen gekommen ist bis auftrag voll erfuellt ist
+
+ }
+
+
+
+
+ public function AuftragVerfuegbar()
+ {
+ $frame = $this->app->Secure->GetGET('frame');
+ $id = $this->app->Secure->GetGET('id');
+ if($frame=='false')
+ {
+ // hier nur fenster größe anpassen
+ $this->app->YUI->IframeDialog(600,400);
+ } else {
+ // nach page inhalt des dialogs ausgeben
+ $table = new EasyTable($this->app);
+ $table->Query("SELECT ap.nummer, ap.bezeichnung, ap.menge, (SELECT TRIM(SUM(lp.menge))+0 FROM lager_platz_inhalt lp WHERE lp.artikel=ap.artikel) as lager,
+ (SELECT SUM(lr.menge) FROM lager_reserviert lr WHERE lr.artikel=ap.artikel AND lr.datum>=NOW() AND lr.objekt!='lieferschein') as reserviert,
+ if(((SELECT SUM(lp.menge) FROM lager_platz_inhalt lp WHERE lp.artikel=ap.artikel) - (SELECT SUM(lr.menge) FROM lager_reserviert lr WHERE lr.artikel=ap.artikel AND lr.datum>=NOW() AND lr.objekt!='lieferschein') - ap.menge)>=0,'',
+ TRIM((SELECT SUM(lp.menge) FROM lager_platz_inhalt lp WHERE lp.artikel=ap.artikel) - (SELECT SUM(lr.menge) FROM lager_reserviert lr WHERE lr.artikel=ap.artikel AND lr.datum>=NOW() AND lr.objekt!='lieferschein') - ap.menge)+0
+ ) as fehlend
+ FROM auftrag_position ap LEFT JOIN artikel a ON a.id=ap.artikel WHERE ap.auftrag='$id' AND a.lagerartikel=1");
+
+ $table->DisplayNEW('PAGE','Fehlende','noAction');
+
+ $this->app->BuildNavigation=false;
+ }
+ }
+
+ public function AuftragAmpel($id,$parsetarget)
+ {
+
+ $status = $this->app->DB->Select("SELECT status FROM auftrag WHERE id='$id' LIMIT 1");
+
+ if($status=='abgeschlossen' || $status=='storniert')
+ {
+ $go = '';
+ $stop = '';
+ $reserviert = '';
+ $check = '';
+ } else {
+
+ $go = '';
+ $stop = '';
+ $reserviert = '';
+ $check = '';
+
+ }
+
+ // offene Auftraege
+ $table = new EasyTable($this->app);
+ $sql = "SELECT DATE_FORMAT(a.datum,'%d.%m.%Y') as vom, if(a.belegnr!='',a.belegnr,'ohne Nummer') as auftrag, a.internet, CONCAT('',a.name,'') as name, a.land, p.abkuerzung as projekt, a.zahlungsweise as per, a.gesamtsumme as soll,";
+ $subsql = "'0' as ist,";
+ $sql .= $subsql. "if(a.check_ok,'','$check') as AC,
+
+ if(a.reserviert_ok,'$reserviert','') as AR,
+ if(a.lager_ok,'$go','$stop') as LA,
+ if(a.porto_ok,'$go','$stop') as PO,
+ if(a.ust_ok,'$go',CONCAT('','$stop','')) as ST,
+ if(a.vorkasse_ok,'$go','$stop') as ZE,
+ if(a.nachnahme_ok,'$go','$stop') as N,
+ if(a.autoversand,'$go','$stop') as A,
+ if(a.liefertermin_ok,'$go','$stop') as LT,
+ a.id
+ FROM auftrag a, projekt p WHERE a.inbearbeitung=0 AND p.id=a.projekt AND a.id=$id LIMIT 1";
+
+ $table->Query($sql);
+
+ $table->DisplayNew($parsetarget, "
+
+
+
+ ");
+
+
+ }
+
+ public function AuftraguebersichtMenu()
+ {
+ $backurl = $this->app->Secure->GetGET('backurl');
+ $backurl = $this->app->erp->base64_url_decode($backurl);
+
+ $this->app->erp->MenuEintrag('index.php?module=auftrag&action=list','Übersicht');
+ $this->app->erp->MenuEintrag('index.php?module=auftrag&action=create','Neuen Auftrag anlegen');
+ $this->app->erp->MenuEintrag('index.php?module=auftrag&action=versandzentrum','Versandzentrum');
+
+ if(strlen($backurl)>5){
+ $this->app->erp->MenuEintrag("$backurl", 'Zurück zur Übersicht');
+ }
+ else{
+ $this->app->erp->MenuEintrag('index.php', 'Zurück zur Übersicht');
+ }
+
+ $this->app->erp->RunMenuHook('auftrag_list');
+ }
+
+ /**
+ * @param string $description
+ * @param bool $escaped
+ *
+ * @return int
+ */
+ public function createCronjobCommission(string $description = ''): int
+ {
+ $nextCronjobCommissionId = 1 + (int)$this->app->DB->Select(
+ 'SELECT MAX(`cronjobkommissionierung`) FROM `auftrag`'
+ );
+
+ $this->app->DB->Insert(
+ "INSERT INTO `cronjob_kommissionierung` (`id`, `bezeichnung`)
+ VALUES ({$nextCronjobCommissionId}, '{$description}') "
+ );
+ if($this->app->DB->GetInsertID() > 0) {
+ return $this->app->DB->GetInsertID();
+ }
+ $this->app->DB->Update(
+ "UPDATE `cronjob_kommissionierung`
+ SET `bezeichnung` = '{$description}'
+ WHERE `id` = {$nextCronjobCommissionId}"
+ );
+
+ return $nextCronjobCommissionId;
+ }
+
+ public function AuftragVersandzentrum()
+ {
+ $this->AuftraguebersichtMenu();
+ $targetMessage = 'AUTOVERSANDBERECHNEN';
+ $autoshipmentEnabled = true;
+ $this->app->erp->RunHook('OrderAutoShipment', 2, $targetMessage, $autoshipmentEnabled);
+
+ $plusCronjobs = $this->app->DB->SelectRow(
+ "SELECT art, periode
+ FROM prozessstarter
+ WHERE (parameter = 'autoversand' OR parameter = 'autoversand_plus') AND aktiv = 1
+ ORDER BY art = 'periodisch', periode >= 30
+ LIMIT 1"
+ );
+
+ if(!empty($plusCronjobs) && $plusCronjobs['art'] === 'periodisch' && $plusCronjobs['periode'] < 30) {
+ $message = 'Autoversand Cronjob ist mit '.$plusCronjobs['periode'].' Minuten zu kurz eingestellt (mindestens 30).';
+ $this->app->Tpl->Add('AUTOVERSANDBERECHNEN', '
'.$message.'
');
+ }
+
+ // ZAHLUNGSMAIL
+ $zahlungsmail= $this->app->Secure->GetPOST('zahlungsmail');
+
+ if($zahlungsmail!=''){
+ $meineauftraege = $this->app->DB->SelectArr("SELECT id FROM auftrag WHERE status='freigegeben'
+ AND vorkasse_ok!='1' AND zahlungsweise!='rechnung' AND zahlungsweise!='nachnahme' AND zahlungsweise!='bar' AND zahlungsweise!='lastschrift'");
+ $cmeineauftraege = $meineauftraege?count($meineauftraege):0;
+ for($i=0;$i<$cmeineauftraege;$i++) {
+ $this->app->erp->AuftragNeuberechnen($meineauftraege[$i]['id']);
+
+ $this->app->erp->AuftragEinzelnBerechnen($meineauftraege[$i]['id']);
+ $this->app->erp->AuftragZahlungsmail($meineauftraege[$i]['id']);
+ }
+ }
+
+ // AUFTAEGE ABSCHLIESSEN!
+ $submit = $this->app->Secure->GetPOST('submit');
+ $auftraegemarkiert = $this->app->Secure->GetPOST('auftraegemarkiert');
+ $entfernen = $this->app->Secure->GetPOST('entfernen');
+ $bezeichnung = (string)$this->app->Secure->GetPOST('bezeichnung');
+ if($entfernen && $auftraegemarkiert){
+ $cauftraegemarkiert = (!empty($auftraegemarkiert)?count($auftraegemarkiert):0);
+ for($i=0;$i<$cauftraegemarkiert;$i++) {
+ $this->app->DB->Update("UPDATE auftrag SET cronjobkommissionierung = 0 WHERE id = '".$auftraegemarkiert[$i]."' LIMIT 1");
+ }
+ }
+
+ if($this->app->Secure->GetPOST('ausfuehren')){
+
+ $drucker = $this->app->Secure->GetPOST('seldruckerversand');
+ $aktion = $this->app->Secure->GetPOST('auftrag_versandauswahl');
+// $auftraegemarkiert = $this->app->Secure->GetPOST('auftraegemarkiert');
+ $auftraegemarkiert = $this->app->Secure->GetPOST('auswahl');
+ $bezeichnung = (string)$this->app->Secure->GetPOST('bezeichnung');
+
+ $selectedIds = [];
+ if(!empty($auftraegemarkiert)) {
+ foreach($auftraegemarkiert as $selectedId) {
+ $selectedId = (int)$selectedId;
+ if($selectedId > 0) {
+ $selectedIds[] = $selectedId;
+ }
+ }
+ }
+ if($drucker > 0) {
+ $this->app->erp->BriefpapierHintergrundDisable($drucker);
+ }
+ if(is_array($auftraegemarkiert)){
+
+ switch($aktion){
+ case 'versandstarten':
+ $cronjobActive = $this->app->DB->Select(
+ "SELECT ps.id
+ FROM `prozessstarter` AS `ps`
+ WHERE ps.aktiv = 1 and (ps.parameter = 'autoversand_standard' OR ps.parameter = 'autoversand_manuell')
+ LIMIT 1"
+ );
+ $check = $cronjobActive;
+ if(!$check){
+ $check = $this->app->DB->Select(
+ "SELECT id
+ FROM auftrag AS a
+ WHERE a.id!='' AND (a.belegnr!=0 OR a.belegnr!='')
+ AND a.status='freigegeben' AND a.autoversand='1' AND a.cronjobkommissionierung > 0
+ AND a.inbearbeitung=0 AND a.nachlieferung!='1' AND a.vorkasse_ok='1'
+ AND a.porto_ok='1' AND a.lager_ok='1' AND a.check_ok='1' AND a.ust_ok='1'
+ AND a.liefertermin_ok='1' AND kreditlimit_ok='1' AND liefersperre_ok='1'
+ LIMIT 1"
+ );
+ }
+
+ if(!empty($auftraegemarkiert)){
+ $datuma = null;
+ foreach ($auftraegemarkiert as $k => $v) {
+ $datuma[$k] = $this->app->DB->Select(
+ sprintf(
+ 'SELECT datum FROM auftrag WHERE id = %d LIMIT 1',
+ (int)$v
+ )
+ );
+ }
+ //Sortieren nach Datum
+ array_multisort($datuma, SORT_ASC, $auftraegemarkiert);
+ // aufsteigend sortieren erst die alten IDs
+ //sort($auftraegemarkiert);
+ }
+ if($check){
+ $maxcronjobkommissionierung = $this->createCronjobCommission((string)$bezeichnung);
+
+ $cauftraegemarkiert = $auftraegemarkiert ? count($auftraegemarkiert) : 0;
+ for ($i = 0; $i < $cauftraegemarkiert; $i++) {
+ $this->app->DB->Update(
+ sprintf(
+ 'UPDATE `auftrag`
+ SET `cronjobkommissionierung` = %d
+ WHERE `id` = %d
+ LIMIT 1',
+ $maxcronjobkommissionierung, $auftraegemarkiert[$i]
+ )
+ );
+ }
+ }
+ else {
+ $cauftraegemarkiert = $auftraegemarkiert ? count($auftraegemarkiert) : 0;
+ for ($i = 0; $i < $cauftraegemarkiert; $i++) {
+ $projekt = (int)$this->app->DB->Select(
+ sprintf(
+ 'SELECT `projekt` FROM `auftrag` WHERE `id` = %d LIMIT 1',
+ $auftraegemarkiert[$i]
+ )
+ );
+ $auftraegenachprojekt[$projekt][] = $auftraegemarkiert[$i];
+ }
+
+ foreach ($auftraegenachprojekt as $projekt => $auftraege) {
+ if(!is_array($auftraege) || empty($auftraege)) {
+ continue;
+ }
+ $this->kommissionierung = $this->app->erp->GetNextKommissionierung($bezeichnung);
+ foreach ($auftraege as $auftrag) {
+ $this->AuftragVersand($auftrag);
+ }
+ if(empty($this->kommissionierung)) {
+ continue;
+ }
+ if(
+ empty(
+ $this->app->DB->Select(
+ sprintf(
+ 'SELECT `id` FROM `lieferschein` WHERE `kommissionierung` = %d',
+ $this->kommissionierung
+ )
+ )
+ )
+ ) {
+ continue;
+ }
+ $kommissionierlistestufe1 = $this->app->erp->Projektdaten($projekt, 'kommissionierlistestufe1');
+ if(empty($kommissionierlistestufe1)) {
+ continue;
+ }
+ $druckercode = $this->app->DB->Select(
+ sprintf(
+ 'SELECT druckerlogistikstufe1 FROM projekt WHERE id= %d LIMIT 1',
+ $projekt
+ )
+ );
+ if($druckercode <= 0){
+ $druckercode = $this->app->erp->Firmendaten('standardversanddrucker');
+ }
+ $kommissionierlistestufe1menge = $this->app->erp->Projektdaten(
+ $projekt, 'kommissionierlistestufe1menge'
+ );
+ if($kommissionierlistestufe1menge < 1){
+ $kommissionierlistestufe1menge = 1;
+ }
+ /** @var Kommissionierlauf $obj */
+ $obj = $this->app->erp->LoadModul('kommissionierlauf');
+ if($obj && $this->kommissionierung){
+ $tmpfile = $obj->KommissionierlaufPDF($this->kommissionierung);
+ for ($mengedruck = $kommissionierlistestufe1menge; $mengedruck > 0; $mengedruck--) {
+ $this->app->printer->Drucken($druckercode, $tmpfile);
+ }
+ unlink($tmpfile);
+ }
+ }
+ }
+ break;
+ case 'drucken':
+ if($drucker){
+ foreach ($selectedIds as $v) {
+ $projekt = $this->app->DB->Select("SELECT projekt FROM auftrag WHERE id='$v' LIMIT 1");
+ $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable;
+ if(class_exists('AuftragPDFCustom')){
+ $Brief = new AuftragPDFCustom($this->app, $projekt);
+ }else{
+ $Brief = new AuftragPDF($this->app, $projekt);
+ }
+ $Brief->GetAuftrag($v);
+ $_tmpfile = $Brief->displayTMP();
+ $Brief->ArchiviereDocument();
+ unlink($_tmpfile);
+ $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable;
+ if(class_exists('AuftragPDFCustom')){
+ $Brief = new AuftragPDFCustom($this->app, $projekt);
+ }else{
+ $Brief = new AuftragPDF($this->app, $projekt);
+ }
+ $Brief->GetAuftrag($v);
+ $tmpfile = $Brief->displayTMP();
+ $Brief->ArchiviereDocument();
+ $this->app->printer->Drucken($drucker, $tmpfile);
+ $this->app->erp->AuftragProtokoll($v, "Auftrag versendet");
+ $this->app->erp->AuftragProtokoll($v, "In Versandübergabe gedruckt");
+ unlink($tmpfile);
+ }
+ }
+ break;
+ }
+ }
+ }
+
+ $check = null;
+ $cronjobActive = $this->app->DB->Select(
+ "SELECT ps.id
+ FROM `prozessstarter` AS `ps`
+ WHERE ps.aktiv = 1 and (ps.parameter = 'autoversand_standard' OR ps.parameter = 'autoversand_manuell')
+ LIMIT 1"
+ );
+ if(!$cronjobActive) {
+ $check = $this->app->DB->Select(
+ sprintf(
+ "SELECT id
+ FROM auftrag AS a
+ WHERE a.id!='' AND (a.belegnr!=0 OR a.belegnr!='') AND a.status='freigegeben' AND a.autoversand='1' AND
+ a.cronjobkommissionierung > 0
+ AND a.inbearbeitung=0 AND a.nachlieferung!='1' AND a.vorkasse_ok='1' AND a.porto_ok='1'
+ AND a.lager_ok='1' AND a.check_ok='1' AND a.ust_ok='1' AND a.liefertermin_ok='1' AND kreditlimit_ok='1' AND
+ liefersperre_ok='1'
+ LIMIT 1"
+ )
+ );
+ }
+
+ if($check || $cronjobActive) {
+ $unversendet = $this->app->DB->Select("SELECT count(a.id) FROM auftrag as a LEFT JOIN projekt p ON p.id=a.projekt WHERE a.id!='' AND (a.belegnr!=0 OR a.belegnr!='') AND a.status='freigegeben' AND a.inbearbeitung=0 AND a.nachlieferung!='1' AND a.autoversand='1' AND a.cronjobkommissionierung = 0 AND a.liefertermin_ok='1' AND kreditlimit_ok='1' AND liefersperre_ok='1'
+ AND a.vorkasse_ok='1' AND a.porto_ok='1' AND a.lager_ok='1' AND a.check_ok='1' AND a.ust_ok='1' " . $this->app->erp->ProjektRechte('p.id', true, 'a.vertriebid'));
+
+ $warteschleife = $this->app->DB->Select("SELECT count(a.id) FROM auftrag as a LEFT JOIN projekt p ON p.id=a.projekt WHERE a.id!='' AND (a.belegnr!=0 OR a.belegnr!='') AND a.status='freigegeben' AND a.inbearbeitung=0 AND a.nachlieferung!='1' AND a.autoversand='1' AND a.liefertermin_ok='1' AND kreditlimit_ok='1' AND liefersperre_ok='1'
+ AND a.vorkasse_ok='1' AND a.porto_ok='1' AND a.lager_ok='1' AND a.check_ok='1' AND a.ust_ok='1' AND a.cronjobkommissionierung > 0 " . $this->app->erp->ProjektRechte('p.id', true, "a.vertriebid"));
+
+ if($unversendet > 0) {
+ $unversendet ='('.$unversendet.')';
+ }
+ else {
+ $unversendet='';
+ }
+ if($warteschleife > 0) {
+ $warteschleife ='('.$warteschleife.')';
+ }
+ else {
+ $warteschleife='';
+ }
+
+ $this->app->Tpl->Set('TABTEXT2','Unversendet '.$unversendet);
+ $this->app->Tpl->Set('TABTEXT3','Warteschleife '.$warteschleife);
+ $this->app->YUI->TableSearch('TAB3','auftraegeoffeneautowartend');
+ if($warteschleife > 0 && !$cronjobActive) {
+ $this->app->Tpl->Add(
+ 'AUTOVERSANDBERECHNEN',
+ '
Der Prozessstarter "Autoversand Manuell" ist deaktivert,
+ es befinden sich aber Aufträge in der Warteschlange.
+ Bitte aktieren Sie den Prozessstarter
+ oder entfernen Sie die betreffenden Aufträge in der Warteschlange