");
- 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
');
+ }
+ $this->app->Location->execute('index.php?module=auftrag&action=list&msg='.$msg);
+ break;
+ case 'fastlane':
+ if(!empty($selectedIds)) {
+ $this->app->DB->Update('UPDATE auftrag SET fastlane = 1 WHERE id IN (' . implode(', ', $selectedIds) . ')');
+ }
+ break;
+ case 'fastlaneentfernen':
+ if(!empty($selectedIds)) {
+ $this->app->DB->Update('UPDATE auftrag SET fastlane = 0 WHERE id IN (' . implode(', ', $selectedIds) . ')');
+ }
+ break;
+ case 'freigeben':
+ foreach($selectedIds as $v) {
+ if($this->app->DB->Select("SELECT id FROM auftrag WHERE id = '$v' AND belegnr = '' AND status <> 'freigeben' AND status <> 'abgeschlossen' AND status <> 'storniert' LIMIT 1")){
+ $this->AuftragFreigabe($v);
+ }
+ }
+ break;
+ case 'versandfreigeben':
+ if(!empty($selectedIds)) {
+ $this->app->DB->Update('UPDATE auftrag SET autoversand = 1 WHERE id IN ('. implode(', ', $selectedIds) . ')');
+ }
+ break;
+ case 'versandentfernen':
+ if(!empty($selectedIds)) {
+ $this->app->DB->Update('UPDATE auftrag SET autoversand = 0 WHERE id IN ('. implode(', ', $selectedIds) . ')');
+ }
+ break;
+ case 'mail':
+ foreach($selectedIds as $v) {
+ $auftragarr = $this->app->DB->SelectRow("SELECT email,adresse,projekt,name,sprache FROM auftrag WHERE id = '$v' LIMIT 1");
+ $email = '';
+ $adresse = 0;
+ $projekt = 0;
+ $name = '';
+ $sprache = '';
+ if(!empty($auftragarr)) {
+ $email = (string)$auftragarr['email'];//$this->app->DB->Select("SELECT email FROM auftrag WHERE id = '$v' LIMIT 1");
+ $adresse = (int)$auftragarr['adresse'];//$this->app->DB->Select("SELECT adresse FROM auftrag WHERE id = '$v' LIMIT 1");
+ $projekt = (int)$auftragarr['projekt'];//$this->app->DB->Select("SELECT projekt FROM auftrag WHERE id = '$v' LIMIT 1");
+ $name = $auftragarr['name'];// $this->app->DB->Select("SELECT name FROM auftrag WHERE id = '$v' LIMIT 1");
+ $sprache = $auftragarr['sprache'];// $this->app->DB->Select("SELECT sprache FROM auftrag WHERE id='$v' LIMIT 1");
+ }
+
+ if($sprache=='' || $email === '') {
+ $adrArr = $this->app->DB->SelectRow("SELECT sprache, email FROM adresse WHERE id='$adresse' AND geloescht=0 LIMIT 1");
+ if($sprache == '') {
+ $sprache = $adrArr['sprache'];
+ }
+ if($email === '') {
+ $email = (string)$adrArr['email'];
+ }
+ }
+
+ if($sprache=='') {
+ $sprache='de';
+ }
+
+ if($email !== '')
+ {
+ $emailtext = $this->app->erp->Geschaeftsbriefvorlage($sprache,'auftrag',$projekt,$name,$v);
+ $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();
+
+ $fileid = $this->app->erp->CreateDatei($Brief->filename,'auftrag','','',$tmpfile,$this->app->User->GetName());
+ $this->app->erp->AddDateiStichwort($fileid,'auftrag','auftrag',$v);
+ $this->app->erp->DokumentSend($adresse,'auftrag', $v, 'email',$emailtext['betreff'],$emailtext['text'],array($tmpfile),"","",$projekt,$email, $name);
+ $ansprechpartner = $name." <".$email.">";
+ $this->app->DB->Insert("INSERT INTO dokumente_send
+ (id,dokument,zeit,bearbeiter,adresse,parameter,art,betreff,text,projekt,ansprechpartner,versendet,dateiid) VALUES ('','auftrag',NOW(),'".$this->app->DB->real_escape_string($this->app->User->GetName())."',
+ '$adresse','$v','email','".$this->app->DB->real_escape_string($emailtext['betreff'])."','".$this->app->DB->real_escape_string($emailtext['text'])."','$projekt','$ansprechpartner',1,'$fileid')");
+ $tmpid = $this->app->DB->GetInsertID();
+ unlink($tmpfile);
+ $this->app->DB->Update("UPDATE auftrag SET versendet=1, versendet_am=NOW(),
+ versendet_per='email',versendet_durch='".$this->app->DB->real_escape_string($this->app->User->GetName())."',schreibschutz='1' WHERE id='$v' LIMIT 1");
+ $this->app->erp->AuftragProtokoll($v,'Auftrag versendet');
+ }
+ }
+
+ break;
+ case 'storniert':
+ foreach($selectedIds as $v) {
+ $orderArr = $this->app->DB->SelectRow(
+ sprintf(
+ 'SELECT projekt, status FROM auftrag WHERE id= %d',
+ $v
+ )
+ );
+ $projekt = $orderArr['projekt'];
+ $status = $orderArr['status'];
+ if($status==='angelegt' || $status=='') {
+ $this->app->erp->DeleteAuftrag($v);
+ }
+ else {
+ 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->erp->AuftragProtokoll($v,'Auftrag storniert');
+ $this->app->DB->Update(
+ sprintf(
+ "UPDATE auftrag
+ SET status='storniert', schreibschutz=1, versendet = 1
+ WHERE id = %d AND status!='angelegt'
+ LIMIT 1",
+ $v
+ )
+ );
+ unlink($tmpfile);
+ $this->app->DB->Delete(
+ sprintf(
+ "DELETE FROM lager_reserviert WHERE parameter = '%d' AND objekt LIKE 'auftrag'",
+ $v
+ )
+ );
+ }
+ }
+ break;
+ case 'versendet':
+ foreach($selectedIds as $v) {
+ $projekt = $this->app->DB->Select("SELECT projekt FROM auftrag WHERE id='$v' LIMIT 1");
+ 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->erp->AuftragProtokoll($v,'Auftrag versendet');
+ $this->app->DB->Update("UPDATE auftrag SET schreibschutz=1, versendet = 1 WHERE id = '$v' LIMIT 1");
+ $this->app->DB->Update("UPDATE auftrag SET status='versendet' WHERE id = '$v' AND status='freigegeben' LIMIT 1");
+ unlink($tmpfile);
+ }
+
+ break;
+
+ case 'drucken':
+ if($drucker)
+ {
+ foreach($selectedIds as $v) {
+ $auftragsdaten = $this->app->DB->SelectRow("SELECT projekt, adresse FROM auftrag WHERE id='$v' LIMIT 1");
+ $projekt = $auftragsdaten['projekt'];
+ $adressId = $auftragsdaten['adresse'];
+ $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);
+ $doctype = 'auftrag';
+ $this->app->erp->RunHook('dokumentsend_ende', 5, $doctype, $v, $projekt, $adressId, $aktion);
+ $this->app->erp->AuftragProtokoll($v,"Auftrag versendet");
+ unlink($tmpfile);
+ }
+
+ }
+ break;
+ case 'pdf':
+ $tmpfile = [];
+ 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();
+ }
+
+ if((!empty($tmpfile)?count($tmpfile):0) > 0){
+ try {
+ /** @var \Xentral\Components\Pdf\PdfMerger $pdfMerger */
+ $pdfMerger = $this->app->Container->get('PdfMerger');
+ $mergeOutputPath = realpath($this->app->erp->GetTMP()) . '/' . uniqid('sammelpdf_', true) . '.pdf';
+ $pdfMerger->merge($tmpfile, $mergeOutputPath);
+
+ foreach($tmpfile as $key=>$value) {
+ unlink($value);
+ }
+
+ header('Content-type:application/pdf');
+ header('Content-Disposition: attachment;filename='.md5(microtime(true)).'.pdf');
+ readfile($mergeOutputPath);
+ $this->app->ExitXentral();
+ } catch (\Xentral\Components\Pdf\Exception\PdfComponentExceptionInterface $exception) {
+ echo 'Fehler beim Generieren der Sammelpdf: ' . htmlspecialchars($exception->getMessage());
+ $this->app->ExitXentral();
+ }
+ }
+ break;
+ default:
+ $this->app->erp->RunHook('auftrag_batch', 1, $selectedId);
+ break;
+ }
+ }
+ }
+
+ $this->AuftraguebersichtMenu();
+
+ 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');
+
+ // ZAHLUNGSMAIL
+ $zahlungsmail= $this->app->Secure->GetPOST('zahlungsmail');
+
+ if($zahlungsmail!='')
+ {
+ $orders = $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'"
+ );
+ if(!empty($orders)){
+ foreach($orders as $order) {
+ $this->app->erp->AuftragNeuberechnen($order['id']);
+ $this->app->erp->AuftragEinzelnBerechnen($order['id']);
+ $this->app->erp->AuftragZahlungsmail($order['id']);
+ }
+ }
+ }
+ // AUFTAEGE ABSCHLIESSEN!
+ $submit = $this->app->Secure->GetPOST('submit');
+ $auftraegemarkiert = $this->app->Secure->GetPOST('auftraegemarkiert');
+ if($submit!='' || $this->app->Secure->GetPOST('frmauto'))
+ {
+ $bezeichnung = $this->app->Secure->GetPOST('bezeichnung');
+ $orderIds = [];
+ if(!empty($auftraegemarkiert)) {
+ foreach($orderIds as $orderId) {
+ if((int)$orderId > 0) {
+ $orderIds[] = (int)$orderId;
+ }
+ }
+ $orders = empty($orderIds)?null:$this->app->DB->SelectArr(
+ sprintf(
+ 'SELECT id, projekt
+ FROM `auftrag`
+ WHERE id IN (%s)
+ ORDER BY id',implode(', ', $orderIds)
+ )
+ );
+
+ if(!empty($orders)) {
+ $auftraegenachprojekt = [];
+ foreach($orders as $order) {
+ $auftraegenachprojekt[$order['projekt']][] = $order['id'];
+ }
+ foreach ($auftraegenachprojekt as $projekt => $auftraege) {
+ if(is_array($auftraege)){
+ $this->kommissionierung = $this->app->erp->GetNextKommissionierung($bezeichnung);
+ foreach ($auftraege as $auftrag) {
+ $this->AuftragVersand($auftrag);
+ }
+ }
+ }
+ }
+ }
+ }
+
+ $zahlungsweisen = $this->app->DB->SelectArr('
+ SELECT
+ zahlungsweise
+ FROM
+ auftrag
+ GROUP BY
+ zahlungsweise
+ ');
+
+ $zahlungsweiseStr = '';
+ if ($zahlungsweisen) {
+ foreach ($zahlungsweisen as $zahlungsweise) {
+ if (empty($zahlungsweise['zahlungsweise'])) {
+ continue;
+ }
+ $zahlungsweiseStr .= '';
+ }
+ }
+
+ $status = $this->app->DB->SelectArr('
+ SELECT
+ status
+ FROM
+ auftrag
+ GROUP BY
+ status
+ ');
+
+ $statusStr = '';
+ if ($status) {
+ foreach ($status as $statusE) {
+ if (empty($statusE['status'])) {
+ continue;
+ }
+ $statusStr .= '';
+ }
+ }
+
+ $versandarten = $this->app->DB->SelectArr('
+ SELECT
+ versandart
+ FROM
+ auftrag
+ GROUP BY
+ versandart
+ ');
+
+ $versandartenStr = '';
+ if ($versandarten) {
+ foreach ($versandarten as $versandart) {
+ if (empty($versandart['versandart'])) {
+ continue;
+ }
+ $versandartenStr .= '';
+ }
+ }
+
+ $laender = $this->app->erp->GetSelectLaenderliste();
+ $laenderStr = '';
+ foreach ($laender as $landKey => $land) {
+ $laenderStr .= '';
+ }
+
+
+ $this->app->YUI->DatePicker("datumVon");
+ $this->app->YUI->DatePicker("datumBis");
+ $this->app->YUI->AutoComplete("projekt", "projektname", 1);
+ $this->app->YUI->AutoComplete("kundennummer", "kunde", 1);
+ $this->app->YUI->AutoComplete("auftragsnummer", "auftrag", 1);
+ $this->app->YUI->AutoComplete("artikel", "artikelnummer");
+ $this->app->YUI->AutoComplete("kundengruppe", "gruppekennziffer",1);
+
+ $this->app->Tpl->Add('ZAHLUNGSWEISEN',$zahlungsweiseStr);
+ $this->app->Tpl->Add('STATUS',$statusStr);
+ $this->app->Tpl->Add('VERSANDARTEN',$versandartenStr);
+ $this->app->Tpl->Add('LAENDER',$laenderStr);
+ $this->app->Tpl->Parse('TAB1',"auftrag_table_filter.tpl");
+
+ $this->app->YUI->TableSearch('TAB2',"auftraegeoffeneauto");
+ $this->app->YUI->TableSearch('TAB1','auftraege', 'show','','',basename(__FILE__), __CLASS__);
+ $this->app->YUI->TableSearch('TAB3',"auftraegeoffene");
+
+ $this->app->Tpl->Set('SELDRUCKER', $this->app->erp->GetSelectDrucker($this->app->User->GetParameter('rechnung_list_drucker')));
+ $this->app->YUI->TableSearch('TAB5',"auftraegeinbearbeitung");
+ $this->app->erp->RunHook('auftraguebersicht_filter', 0);
+ $this->app->Tpl->Parse('PAGE',"auftraguebersicht.tpl");
+ }
+
+ /**
+ * @param int $order_id
+ * @param int $pos_id
+ */
+ public function removeExplodedPosition($order_id, $pos_id)
+ {
+ if($order_id <= 0 || $pos_id <= 0)
+ {
+ return;
+ }
+ $pos_arr = $this->app->DB->SelectArr(
+ sprintf(
+ 'SELECT id FROM auftrag_position WHERE auftrag = %d AND explodiert_parent = %d',
+ (int)$order_id, (int)$pos_id
+ )
+ );
+ if(empty($pos_arr))
+ {
+ return;
+ }
+ foreach($pos_arr as $position)
+ {
+ $this->DelAuftragStueckliste($order_id, $position['id']);
+ $this->app->YUI->SortListEvent('del','auftrag_position','auftrag',$order_id, $position['id']);
+ $this->removeExplodedPosition($order_id, $pos_id);
+ }
+ }
+
+
+ /*
+ * Calculate order auto status for all open orders
+ */
+ public function Auftraegeberechnen() {
+ $this->app->erp->AuftraegeBerechnen();
+ header('Location: index.php?module=auftrag&action=versandzentrum');
+ }
+
+}
From 3ef58b681fe1db3b4f99e2619a5a1a1acdaa4694 Mon Sep 17 00:00:00 2001
From: Xenomporio <>
Date: Mon, 11 Jul 2022 21:57:48 +0200
Subject: [PATCH 02/19] Bugfix auto increment of document IDs
---
www/lib/class.erpapi.php | 19 +++++++++++--------
1 file changed, 11 insertions(+), 8 deletions(-)
diff --git a/www/lib/class.erpapi.php b/www/lib/class.erpapi.php
index f6fc71c0..c5d014c9 100644
--- a/www/lib/class.erpapi.php
+++ b/www/lib/class.erpapi.php
@@ -33040,20 +33040,23 @@ function MailSendFinal($from,$from_name,$to,$to_name,$betreff,$text,$files="",$p
if($field === 'mysql55') {
return '1';
}
- if(strpos($field,'next') !== false)
+
+ if(strpos($field,'next') != false)
{
$firmendatenid = (int)$this->app->DB->Select('SELECT MAX(id) FROM firmendaten LIMIT 1');
- if ($this->app->DB->Select("SHOW COLUMNS FROM firmendaten LIKE '$field'")) {
- $firmendaten_value = $this->app->DB->Select(
- sprintf(
- 'SELECT `%s` FROM firmendaten WHERE id = %d LIMIT 1',
- $field, $firmendatenid)
- );
- }
+ if ($this->app->DB->Select("SHOW COLUMNS FROM firmendaten LIKE '$field'")) {
+ $firmendaten_value = $this->app->DB->Select(
+ sprintf(
+ 'SELECT `%s` FROM firmendaten WHERE id = %d LIMIT 1',
+ $field, $firmendatenid)
+ );
+ }
+
if(!$this->app->DB->error()) {
return $firmendaten_value;
}
+
$firmendaten_value = $this->app->DB->SelectRow(
sprintf('SELECT id, wert FROM firmendaten_werte WHERE `name` = \'%s\' LIMIT 1', $field)
);
From eff711a5394e1d1b858328e9e7503dcf237470cf Mon Sep 17 00:00:00 2001
From: Xenomporio <>
Date: Tue, 12 Jul 2022 17:23:02 +0200
Subject: [PATCH 03/19] Minidetail versandzentrum added
---
www/pages/auftrag.php | 18 ++++++++++++------
1 file changed, 12 insertions(+), 6 deletions(-)
diff --git a/www/pages/auftrag.php b/www/pages/auftrag.php
index a92de50f..1e570e1e 100644
--- a/www/pages/auftrag.php
+++ b/www/pages/auftrag.php
@@ -583,8 +583,8 @@ class Auftrag extends GenAuftrag
$allowed['auftraegeoffeneauto'] = array('list');
- $heading = array('','', 'Auftrag', 'Vom', 'Kd-Nr.', 'Kunde', 'Land', 'Zahlung', 'Betrag (brutto)','Monitor','');
- $width = array('1%','1%', '10%', '10%', '10%', '31%', '5%', '1%', '1%', '1%', '1%', '1%');
+ $heading = array('','', 'Auftrag', 'Vom', 'Kd-Nr.', 'Kunde', 'Land', 'Zahlung', 'Betrag (brutto)','Monitor','Menü');
+ $width = array('1%','1%', '10%', '10%', '10%', '31%', '5%', '1%', '1%', '1%', '1%', '1%','0%','0%');
$findcols = array('open','a.belegnr', 'a.belegnr', 'a.datum', 'a.lieferantkdrnummer', 'a.name', 'a.land', 'a.zahlungsweise', 'a.gesamtsumme');
@@ -599,21 +599,27 @@ class Auftrag extends GenAuftrag
'app->Conf->WFconf['defaulttheme']}/images/details_open.png class=details>' AS `open`,
CONCAT('') AS `auswahl`,
belegnr,
- datum,
+ DATE_FORMAT(a.datum,'%d.%m.%Y') AS `datum`,
lieferantkdrnummer,
name,
land,
zahlungsweise,
gesamtsumme,
(" . $this->app->YUI->IconsSQL() . ") AS icons,
- id
+ a.id
FROM
auftrag a";
- $where = "1";
- $count = "SELECT count(DISTINCT id) FROM auftrag WHERE $where";
+ $where = "a.status = 'freigegeben'";
+ $count = "SELECT count(DISTINCT id) FROM auftrag a WHERE $where";
// $groupby = "";
+ $moreinfo = true; // Allow drop down details
+
+ $menu .= "";
+ $menu .= "app->Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\">";
+ $menu .= "";
+ $menucol = 8; // For moredata
break;
From b14c419f3f617db04d63bee4fb8ae6cc9751e59a Mon Sep 17 00:00:00 2001
From: Xenomporio <>
Date: Wed, 13 Jul 2022 10:45:03 +0200
Subject: [PATCH 04/19] removed.upgrade.host
---
conf/main.conf.php.tpl | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/conf/main.conf.php.tpl b/conf/main.conf.php.tpl
index ede820b2..dd1d1cc0 100644
--- a/conf/main.conf.php.tpl
+++ b/conf/main.conf.php.tpl
@@ -12,7 +12,7 @@
class Config
{
/** @var string */
- public $updateHost = 'update.xentral.biz';
+ public $updateHost = 'removed.upgrade.host';
public function __construct()
{
From 90de6426853aaeb9219f3527a2443ebec3766f43 Mon Sep 17 00:00:00 2001
From: Xenomporio <>
Date: Wed, 13 Jul 2022 11:23:38 +0200
Subject: [PATCH 05/19] Minor bugfix for emailaccount testmail
---
www/pages/emailbackup.php | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/www/pages/emailbackup.php b/www/pages/emailbackup.php
index 94f4c15b..1d904b7f 100644
--- a/www/pages/emailbackup.php
+++ b/www/pages/emailbackup.php
@@ -283,8 +283,8 @@ $width = array('10%'); // Fill out manually later
$result[0]['email'],
$result[0]['angezeigtername'],
'Xenomporio ERP: Testmail',
- 'Dies ist eine Testmail',
- '',0,true,'','',
+ 'Dies ist eine Testmail für Account "'.$result[0]['email'].'".',
+ '',0,false,'','',
true
)
) {
From b52354b1ad028a957da4e9233c61415dfd3493d1 Mon Sep 17 00:00:00 2001
From: Xenomporio <>
Date: Thu, 14 Jul 2022 14:06:30 +0200
Subject: [PATCH 06/19] Automatic order processing manually
Cronjob based not working yes. Expanded process options in project settings.
---
www/pages/auftrag.php | 64 ++++++++++++++++----
www/pages/content/auftrag_versandzentrum.tpl | 30 ++++-----
www/widgets/widget.projekt.php | 6 +-
3 files changed, 69 insertions(+), 31 deletions(-)
diff --git a/www/pages/auftrag.php b/www/pages/auftrag.php
index 1e570e1e..05e43ed5 100644
--- a/www/pages/auftrag.php
+++ b/www/pages/auftrag.php
@@ -622,6 +622,13 @@ class Auftrag extends GenAuftrag
$menucol = 8; // For moredata
break;
+/* case 'auftraegeoffeneautowartend':
+
+ // TODO for cronjob commissioning
+
+
+
+ break;*/
}
$erg = [];
@@ -5245,6 +5252,10 @@ Die Gesamtsumme stimmt nicht mehr mit ursprünglich festgelegten Betrag '.
return $return;
}
+ /*
+ order processed true or false
+ */
+
public function AuftragVersand($id='', $ignoriereliefertermin = false, &$ergebnis = null, $paketmarkedrucken = false)
{
if(!$this->kommissionierung)
@@ -6076,6 +6087,9 @@ Die Gesamtsumme stimmt nicht mehr mit ursprünglich festgelegten Betrag '.
{
$this->AuftraguebersichtMenu();
$targetMessage = 'AUTOVERSANDBERECHNEN';
+
+ $this->app->Tpl->Set('MESSAGE','
Aufträge an Versand übergeben mit automatischem Druck und Mailversand.
');
+
$autoshipmentEnabled = true;
$this->app->erp->RunHook('OrderAutoShipment', 2, $targetMessage, $autoshipmentEnabled);
@@ -6143,6 +6157,12 @@ Die Gesamtsumme stimmt nicht mehr mit ursprünglich festgelegten Betrag '.
switch($aktion){
case 'versandstarten':
+
+ /*
+ * If one of the cronjobs is active, orders only get marked. Sending will be handled by the cronjob.
+ * If not, sending will be done here.
+ */
+
$cronjobActive = $this->app->DB->Select(
"SELECT ps.id
FROM `prozessstarter` AS `ps`
@@ -6179,6 +6199,9 @@ Die Gesamtsumme stimmt nicht mehr mit ursprünglich festgelegten Betrag '.
//sort($auftraegemarkiert);
}
if($check){
+
+ /* Send all to cronjob */
+
$maxcronjobkommissionierung = $this->createCronjobCommission((string)$bezeichnung);
$cauftraegemarkiert = $auftraegemarkiert ? count($auftraegemarkiert) : 0;
@@ -6195,6 +6218,9 @@ Die Gesamtsumme stimmt nicht mehr mit ursprünglich festgelegten Betrag '.
}
}
else {
+
+ /* Process here now */
+
$cauftraegemarkiert = $auftraegemarkiert ? count($auftraegemarkiert) : 0;
for ($i = 0; $i < $cauftraegemarkiert; $i++) {
$projekt = (int)$this->app->DB->Select(
@@ -6211,9 +6237,20 @@ Die Gesamtsumme stimmt nicht mehr mit ursprünglich festgelegten Betrag '.
continue;
}
$this->kommissionierung = $this->app->erp->GetNextKommissionierung($bezeichnung);
+
+ $processed_orders_num = 0;
+
foreach ($auftraege as $auftrag) {
- $this->AuftragVersand($auftrag);
+
+ /* Process each order */
+ if($this->AuftragVersand($auftrag)) {
+ $processed_orders_num++;
+ }
+
}
+
+ $this->app->Tpl->Set('MESSAGE','
'.$processed_orders_num.' Aufträge wurden verarbeitet.
');
+
if(empty($this->kommissionierung)) {
continue;
}
@@ -6336,9 +6373,12 @@ Die Gesamtsumme stimmt nicht mehr mit ursprünglich festgelegten Betrag '.
$warteschleife='';
}
- $this->app->Tpl->Set('TABTEXT2','Unversendet '.$unversendet);
- $this->app->Tpl->Set('TABTEXT3','Warteschleife '.$warteschleife);
- $this->app->YUI->TableSearch('TAB3','auftraegeoffeneautowartend');
+ $this->app->Tpl->Set('MESSAGE','
Cronjob order processing not yet implemented!
');
+
+ $this->app->Tpl->Set('TABTEXT1','Unversendet '.$unversendet);
+ $this->app->Tpl->Set('TABTEXT2','Warteschleife '.$warteschleife);
+// $this->app->YUI->TableSearch('TAB2','auftraegeoffeneautowartend');
+
if($warteschleife > 0 && !$cronjobActive) {
$this->app->Tpl->Add(
'AUTOVERSANDBERECHNEN',
@@ -6351,8 +6391,8 @@ Die Gesamtsumme stimmt nicht mehr mit ursprünglich festgelegten Betrag '.
}
else{
- $this->app->Tpl->Set('VORTABS3UEBERSCHRIFT','');
+ $this->app->Tpl->Set('VORTABS2UEBERSCHRIFT','');
}
$this->app->Tpl->Set('SELDRUCKERVERSAND', $this->app->erp->GetSelectDrucker($this->app->User->GetParameter('rechnung_list_drucker')));
@@ -6368,6 +6408,8 @@ Die Gesamtsumme stimmt nicht mehr mit ursprünglich festgelegten Betrag '.
// $this->app->Tpl->Set('AUTOBERECHNEN2','');
}
$infolink = '(Information)';
+
+/*
$last_order_calc = $this->app->erp->GetKonfiguration('last_order_calc');
if(!empty($last_order_calc)) {
$this->app->Tpl->Add('AUTOVERSANDBERECHNEN','
Die letzte Berechnung der Auftragsampeln war am '.$last_order_calc.'. '.$infolink.' [AUTOBERECHNEN]
');
@@ -6375,14 +6417,10 @@ Die Gesamtsumme stimmt nicht mehr mit ursprünglich festgelegten Betrag '.
else{
$this->app->Tpl->Add('AUTOVERSANDBERECHNEN','
Die letzte Berechnung der Auftragsampeln wurde noch nicht ermittelt. '.$infolink.' [AUTOBERECHNEN]
');
}
+*/
-// $this->app->YUI->TableSearch('TAB1','auftraege', 'show','','',basename(__FILE__), __CLASS__);
- $this->app->YUI->TableSearch('TAB2','auftraegeoffeneauto', 'show','','',basename(__FILE__), __CLASS__);
-// $this->app->Tpl->Parse('PAGE',"auftraguebersicht.tpl");
-
-// TEST
+ $this->app->YUI->TableSearch('TAB1','auftraegeoffeneauto', 'show','','',basename(__FILE__), __CLASS__);
$this->app->Tpl->Parse('PAGE','auftrag_versandzentrum.tpl');
-// TEST
} // Ende
@@ -6830,8 +6868,8 @@ Die Gesamtsumme stimmt nicht mehr mit ursprünglich festgelegten Betrag '.
$this->app->Tpl->Add('LAENDER',$laenderStr);
$this->app->Tpl->Parse('TAB1',"auftrag_table_filter.tpl");
- $this->app->YUI->TableSearch('TAB2',"auftraegeoffeneauto");
$this->app->YUI->TableSearch('TAB1','auftraege', 'show','','',basename(__FILE__), __CLASS__);
+// $this->app->YUI->TableSearch('TAB2',"auftraegeoffeneauto");
$this->app->YUI->TableSearch('TAB3',"auftraegeoffene");
$this->app->Tpl->Set('SELDRUCKER', $this->app->erp->GetSelectDrucker($this->app->User->GetParameter('rechnung_list_drucker')));
diff --git a/www/pages/content/auftrag_versandzentrum.tpl b/www/pages/content/auftrag_versandzentrum.tpl
index 5ea50a19..e8aadbaf 100644
--- a/www/pages/content/auftrag_versandzentrum.tpl
+++ b/www/pages/content/auftrag_versandzentrum.tpl
@@ -1,16 +1,14 @@