app->erp->GetKonfiguration('auftraege_projectsearchdisabled'); if($projectsearchdisabled==='') { $projectsearchdisabled = ($this->app->DB->Select('SELECT COUNT(id) FROM auftrag') >= 100000)?1:0; $this->app->erp->SetKonfigurationValue('auftraege_projectsearchdisabled', $projectsearchdisabled); } $projectCol = 'p.abkuerzung'; $useAddr = true; if($projectsearchdisabled) { $projectCol = '(SELECT LEFT(UPPER(abkuerzung),10) FROM projekt WHERE id = a.projekt)'; if(!$this->app->erp->Firmendaten('adresse_freitext1_suche')) { $useAddr = false; } } $projectColSql = $projectCol.' AS projektabkuerung'; $rowcallback_gt = 1; $auftragmarkierenegsaldo = $this->app->erp->Firmendaten('auftragmarkierenegsaldo'); // START EXTRA checkboxen $this->app->Tpl->Add('JQUERYREADY', "$('#artikellager').click( function() { fnFilterColumn1( 0 ); } );"); $this->app->Tpl->Add('JQUERYREADY', "$('#ustpruefung').click( function() { fnFilterColumn2( 0 ); } );"); $this->app->Tpl->Add('JQUERYREADY', "$('#zahlungseingang').click( function() { fnFilterColumn3( 0 ); } );"); $this->app->Tpl->Add('JQUERYREADY', "$('#zahlungseingangfehlt').click( function() { fnFilterColumn5( 0 ); } );"); $this->app->Tpl->Add('JQUERYREADY', "$('#manuellepruefung').click( function() { fnFilterColumn4( 0 ); } );"); $this->app->Tpl->Add('JQUERYREADY', "$('#ohnerechnung').click( function() { fnFilterColumn10( 0 ); } );"); $this->app->Tpl->Add('JQUERYREADY', "$('#auftragheute').click( function() { fnFilterColumn6( 0 ); } );"); $this->app->Tpl->Add('JQUERYREADY', "$('#auftragoffene').click( function() { fnFilterColumn7( 0 ); } );"); $this->app->Tpl->Add('JQUERYREADY', "$('#auftragstornierte').click( function() { fnFilterColumn8( 0 ); } );"); $this->app->Tpl->Add('JQUERYREADY', "$('#auftragabgeschlossene').click( function() { fnFilterColumn9( 0 ); } );"); $this->app->Tpl->Add('JQUERYREADY', "$('#teillieferung').click( function() { fnFilterColumn11( 0 ); } );"); $this->app->Tpl->Add('JQUERYREADY', "$('#portofehlt').click( function() { fnFilterColumn12( 0 ); } );"); $this->app->Tpl->Add('JQUERYREADY', "$('#teilzahlung').click( function() { fnFilterColumn13( 0 ); } );"); $this->app->Tpl->Add('JQUERYREADY', "$('#autoversandfehlt').click( function() { fnFilterColumn14( 0 ); } );"); $this->app->Tpl->Add('JQUERYREADY', "$('#autoversandok').click( function() { fnFilterColumn15( 0 ); } );"); $this->app->Tpl->Add('JQUERYREADY', "$('#fastlanea').click( function() { fnFilterColumn16( 0 ); } );"); $this->app->Tpl->Add('JQUERYREADY', "$('#tolate').click( function() { fnFilterColumn17( 0 ); } );"); // $this->app->Tpl->Add('JQUERYREADY',"$('#artikellager').click( function() { oTable".$name.".fnDraw(); } );"); for ($r = 1;$r < 18;$r++) { $this->app->Tpl->Add('JAVASCRIPT', ' function fnFilterColumn' . $r . ' ( i ) { if(oMoreData' . $r . $name . '==1) oMoreData' . $r . $name . ' = 0; else oMoreData' . $r . $name . ' = 1; $(\'#' . $name . '\').dataTable().fnFilter( \'\', i, 0,0 ); } '); } // ENDE EXTRA checkboxen // headings $zusatzcols = array(); $auftragzusatzfelder = $this->app->erp->getZusatzfelderAuftrag(); $heading = array('','', 'Auftrag', 'Vom', 'Kd-Nr.', 'Kunde', 'Land', 'Projekt', 'Zahlung', 'Betrag (brutto)'); $width = array('1%','1%', '10%', '10%', '10%', '31%', '5%', '1%', '1%', '1%', '1%', '1%'); $findcols = array('open','a.belegnr', 'a.belegnr', 'a.datum' ,$useAddr? 'if(a.lieferantenauftrag=1,adr.lieferantennummer,adr.kundennummer)':'a.lieferantkdrnummer', 'a.name', 'a.land', //'p.abkuerzung', $projectCol, 'a.zahlungsweise', 'a.gesamtsumme'); $searchsql = array('DATE_FORMAT(a.datum,\'%d.%m.%Y\')', 'a.belegnr', 'a.ihrebestellnummer','a.transaktionsnummer', 'a.internet', "a.lieferantkdrnummer", 'a.name', 'a.land', 'a.zahlungsweise', 'a.status', $app->erp->FormatPreis('a.gesamtsumme',2), //'adr.freifeld1', 'a.internebezeichnung' ); if($useAddr) { $searchsql[] = 'adr.freifeld1'; } if(!$projectsearchdisabled) { $searchsql[] = $projectCol; } $alignright = array('10'); $defaultorder = 13; //Optional wenn andere Reihenfolge gewuenscht $hide767 = array('5'); $defaultorderdesc = 1; if($this->app->erp->RechteVorhanden('auftrag','summe')){ $sumcol = array(10); } $menu = ""; $menu .= ""; $menu .= ""; $menu .= ""; $menu .= ""; $menu .= ""; $menu .= ""; $menu .= ""; $menu .= "
"; $menu .= ""; $menu .= "app->Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\">"; $menu .= ""; $menu .= ""; $menu .= ""; $menu .= "app->Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\">"; $menu .= ""; $menu .= ""; $menu .= ""; $menu .= "app->Conf->WFconf['defaulttheme']}/images/copy.svg\" border=\"0\">"; $menu .= ""; $menu .= ""; $menu .= ""; $menu .= "app->Conf->WFconf['defaulttheme']}/images/pdf.svg\" border=\"0\">"; $menu .= ""; $menu .= ""; $menu .= ""; $menu .= ""; $menu .= ""; $menu .= "
"; $menucol = 11; for($i = 1; $i <= 5; $i++) { $zusatzfeld = $this->app->erp->Firmendaten('auftragtabellezusatz' . $i); if($zusatzfeld && isset($auftragzusatzfelder[$zusatzfeld])){ $defaultorder++; $menucol++; $heading[] = $auftragzusatzfelder[$zusatzfeld]; $width[] = '10%'; $findcols[] = 'a.'.$zusatzfeld; switch($zusatzfeld) { case 'umsatz_netto': $searchsql[] = $app->erp->FormatPreis($zusatzfeld, 2); $zusatzcols[] = $app->erp->FormatPreis($zusatzfeld,2); $numbercols[] = array_search('a.'.$zusatzfeld, $findcols); $sumcol[] = array_search('a.'.$zusatzfeld, $findcols)+1; $alignright[] = array_search('a.'.$zusatzfeld, $findcols)+1; break; case 'tatsaechlicheslieferdatum': case 'lieferdatum': $searchsql[] = 'IF(a.'.$zusatzfeld.'!="0000-00-00", DATE_FORMAT(a.'.$zusatzfeld.",'%d.%m.%Y'), '')"; $zusatzcols[] = 'IF(a.'.$zusatzfeld.'!="0000-00-00", DATE_FORMAT(a.'.$zusatzfeld.",'%d.%m.%Y'), '')"; $datecols[] = array_search('a.'.$zusatzfeld, $findcols); break; default: $searchsql[] = 'a.'.$zusatzfeld; $zusatzcols[] = 'a.'.$zusatzfeld; } } } $findcols[] = 'a.status'; $width[] = '1%'; $width[] = '1%'; $findcols[] = 'a.status'; $findcols[] = 'a.id'; $findcols[] = 'a.id'; $heading[] = 'Monitor'; $heading[] = 'Menü'; $parameter = $this->app->User->GetParameter('table_filter_auftrag'); $parameter = base64_decode($parameter); $parameter = json_decode($parameter, true); $sql = ""; $sql .= "SELECT SQL_CALC_FOUND_ROWS a.id, 'app->Conf->WFconf['defaulttheme']}/images/details_open.png class=details>' AS `open`, CONCAT('') AS `auswahl`, CONCAT( IF(a.status = 'angelegt','ENTWURF',a.belegnr), IF( a.projektfiliale > 0 OR a.fastlane = 1, CONCAT( ' (', IF(a.projektfiliale > 0,'F',''), IF( a.fastlane = 1, IF(a.projektfiliale > 0,',FL','FL'), '' ), ')' ), '' ) ) AS `auftrag`, DATE_FORMAT(a.datum,'%d.%m.%Y') AS `vom`, a.lieferantkdrnummer AS `kunde`, CONCAT( " . $this->app->erp->MarkerUseredit("a.name", "a.useredittimestamp") . ", IF( a.internebemerkung = '', '', ' *' ), IF( a.freitext = '', '', ' *' ), IF( a.internebezeichnung != '', CONCAT( '
', a.internebezeichnung, '' ), '' ), IF( a.abweichendelieferadresse = 1, CONCAT( '
Abw. Lieferadr.: ', a.liefername,', ', a.lieferstrasse,', ', a.lieferland,'-', a.lieferplz,' ', a.lieferort, '' ), '' ) ) AS `name`, a.land AS `land`, $projectColSql, ".( $auftragmarkierenegsaldo ? "CONCAT( ''," : '' )." a.zahlungsweise".($auftragmarkierenegsaldo?",'')":"")." AS `zahlungsweise`, ".$app->erp->FormatPreis('a.gesamtsumme',2)." AS `betrag`, ".(!empty($zusatzcols)?implode(', ',$zusatzcols).',':'')." (" . $this->app->YUI->IconsSQL() . ") AS icons, a.id FROM `auftrag` AS `a` "; if($useAddr) { $sql .= ' LEFT JOIN `adresse` AS `adr` ON a.adresse = adr.id '; } if(!$projectsearchdisabled) { $sql .= ' LEFT JOIN `projekt` AS `p` ON p.id = a.projekt '; } if(isset($parameter['artikel']) && !empty($parameter['artikel'])) { $artikelid = $this->app->DB->Select("SELECT id FROM artikel where geloescht != 1 AND nummer != 'DEL' AND nummer != '' AND nummer = '".$this->app->DB->real_escape_string(reset(explode(' ',trim($parameter['artikel']))))."' LIMIT 1"); if($artikelid) { $sql .= sprintf( ' INNER JOIN `auftrag_position` AS `ap` ON a.id = ap.auftrag AND ap.artikel = %d ', $artikelid ); $groupby = ' GROUP BY a.id '; } } // Fester filter // START EXTRA more $more_data1 = $this->app->Secure->GetGET("more_data1"); if ($more_data1 == 1) $subwhere[] = " a.lager_ok=0 "; $more_data2 = $this->app->Secure->GetGET("more_data2"); if ($more_data2 == 1) $subwhere[] = " a.ust_ok=0 "; $more_data3 = $this->app->Secure->GetGET("more_data3"); if ($more_data3 == 1) $subwhere[] = " a.vorkasse_ok=1 "; $more_data13 = $this->app->Secure->GetGET("more_data13"); if ($more_data13 == 1) $subwhere[] = " a.vorkasse_ok=2 "; //$more_data4 = $this->app->Secure->GetGET("more_data4"); if($more_data4==1) $subwhere[] = " a.check_ok=0 "; $more_data4 = $this->app->Secure->GetGET("more_data4"); if ($more_data4 == 1) $subwhere[] = " (a.check_ok=0 OR a.liefersperre_ok=0 OR a.kreditlimit_ok='0') "; $more_data5 = $this->app->Secure->GetGET("more_data5"); if ($more_data5 == 1) $subwhere[] = " a.vorkasse_ok=0 "; $more_data6 = $this->app->Secure->GetGET("more_data6"); if ($more_data6 == 1) { $subwhere[] = " a.datum=CURDATE() "; $ignore = true; } $more_data7 = $this->app->Secure->GetGET("more_data7"); if ($more_data7 == 1) { $subwherestatus[] = " a.status='freigegeben' "; $ignore = true; } $more_data8 = $this->app->Secure->GetGET("more_data8"); if ($more_data8 == 1) { $subwherestatus[] = " a.status='storniert' "; $ignore = true; } $more_data9 = $this->app->Secure->GetGET("more_data9"); if ($more_data9 == 1) { $subwherestatus[] = " a.status='abgeschlossen' "; $ignore = true; } $more_data10 = $this->app->Secure->GetGET("more_data10"); if ($more_data10 == 1) { $subwhere[] = " (SELECT COUNT(r.id) FROM rechnung r WHERE r.auftragid=a.id) <= 0 AND (SELECT count(sp1.id) FROM sammelrechnung_position sp1 INNER JOIN auftrag_position ap1 ON sp1.auftrag_position_id = ap1.id WHERE ap1.auftrag = a.id) <= 0 AND (SELECT count(sp1.id) FROM sammelrechnung_position sp1 INNER JOIN lieferschein_position lsp1 ON sp1.lieferschein_position_id = lsp1.id INNER JOIN auftrag_position ap1 ON ap1.id = lsp1.auftrag_position_id WHERE ap1.auftrag = a.id) <= 0 AND (SELECT COUNT(l.id) FROM lieferschein l WHERE l.auftragid = a.id AND l.keinerechnung = 1) <= 0 AND a.gesamtsumme > 0 AND ifnull(a.rechnungid,0) = 0 "; $ignore = true; } $more_data11 = $this->app->Secure->GetGET("more_data11"); if ($more_data11 == 1) { $subwhere[] = " a.teillieferung_moeglich='1' "; } $more_data12 = $this->app->Secure->GetGET("more_data12"); if ($more_data12 == 1) { $subwhere[] = " a.porto_ok=0 "; } $more_data14 = $this->app->Secure->GetGET("more_data14"); if ($more_data14 == 1) { $subwhere[] = " a.autoversand=0 "; } $more_data15 = $this->app->Secure->GetGET("more_data15"); if ($more_data15 == 1) { $subwhere[] = " a.autoversand=1 "; } $more_data16 = $this->app->Secure->GetGET("more_data16"); if ($more_data16 == 1) { $subwhere[] = " a.fastlane=1 "; } $more_data17 = $this->app->Secure->GetGET("more_data17"); if ($more_data17 == 1) { /*$subwhere[] = " ( ( (a.datum < DATE_SUB(NOW(), INTERVAL 1 DAY)) OR (a.lieferdatum < DATE_SUB(NOW(), INTERVAL 1 DAY) AND a.lieferdatum!='0000-00-00') OR (a.tatsaechlicheslieferdatum < DATE_SUB(NOW(), INTERVAL 1 DAY) AND a.tatsaechlicheslieferdatum!='0000-00-00') ) AND a.status='freigegeben' )";*/ $subwhere[] = "( ( (a.datum < DATE_SUB(NOW(), INTERVAL 1 DAY)) OR (a.lieferdatum < DATE_SUB(NOW(), INTERVAL 1 DAY) AND a.lieferdatum!='0000-00-00') OR (a.tatsaechlicheslieferdatum < DATE_SUB(NOW(), INTERVAL 1 DAY) AND a.tatsaechlicheslieferdatum!='0000-00-00') ) AND a.status='freigegeben' AND NOT ( IFNULL(a.tatsaechlicheslieferdatum,'0000-00-00')!='0000-00-00' AND a.tatsaechlicheslieferdatum >= CURDATE() ) AND NOT ( IFNULL(a.tatsaechlicheslieferdatum,'0000-00-00')='0000-00-00' AND IFNULL(a.lieferdatum,'0000-00-00')!='0000-00-00' AND a.lieferdatum >= CURDATE() ) )"; } $tmp = ''; if(!empty($subwhere)) { foreach($subwhere as $s) { $tmp .= ' AND '.$s; } } if(!empty($subwherestatus)){ $tmp .= " AND (".implode(" OR ", $subwherestatus).")"; } if ($tmp != "" && !$ignore) $tmp.= " AND a.status='freigegeben' "; // ENDE EXTRA more $where = " a.id!='' $tmp " . $this->app->erp->ProjektRechte('a.projekt', true, 'a.vertriebid'); /* STAMMDATEN */ if(isset($parameter['kundennummer']) && !empty($parameter['kundennummer'])) { if(!$useAddr) { $sql .= ' LEFT JOIN adresse adr ON a.adresse=adr.id '; $useAddr = true; } $paramsArray[] = " (a.kundennummer LIKE '%".$parameter['kundennummer']."%' OR adr.kundennummer LIKE '%".$parameter['kundennummer']."%') "; } if(isset($parameter['kundengruppe']) && !empty($parameter['kundengruppe'])){ $gruppenId = $this->app->DB->Select("SELECT id FROM gruppen WHERE kennziffer LIKE '%".$parameter['kundengruppe']."%' LIMIT 1"); $sql .= ' LEFT JOIN adresse_rolle ar ON a.adresse = ar.adresse '; $paramsArray[] = " ( ar.subjekt LIKE 'Mitglied' AND ar.objekt LIKE 'Gruppe' AND ar.parameter = '$gruppenId')"; } if(isset($parameter['name']) && !empty($parameter['name'])) { $paramsArray[] = "a.name LIKE '%".$parameter['name']."%' "; } if(isset($parameter['ansprechpartner']) && !empty($parameter['ansprechpartner'])) { $paramsArray[] = "a.ansprechpartner LIKE '%".$parameter['ansprechpartner']."%' "; } if(isset($parameter['abteilung']) && !empty($parameter['abteilung'])) { $paramsArray[] = "a.abteilung LIKE '%".$parameter['abteilung']."%' "; } if(isset($parameter['strasse']) && !empty($parameter['strasse'])) { $paramsArray[] = "a.strasse LIKE '%".$parameter['strasse']."%' "; } if(isset($parameter['plz']) && !empty($parameter['plz'])) { $paramsArray[] = "a.plz LIKE '".$parameter['plz']."%'"; } if(isset($parameter['ort']) && !empty($parameter['ort'])) { $paramsArray[] = "a.ort LIKE '%".$parameter['ort']."%' "; } if(isset($parameter['land']) && !empty($parameter['land'])) { $paramsArray[] = "a.land LIKE '%".$parameter['land']."%' "; } if(isset($parameter['ustid']) && !empty($parameter['ustid'])) { $paramsArray[] = "a.ustid LIKE '%".$parameter['ustid']."%' "; } if(isset($parameter['telefon']) && !empty($parameter['telefon'])) { $paramsArray[] = "a.telefon LIKE '%".$parameter['telefon']."%' "; } if(isset($parameter['email']) && !empty($parameter['email'])) { $paramsArray[] = "a.email LIKE '%".$parameter['email']."%' "; } /* XXX */ if(isset($parameter['datumVon']) && !empty($parameter['datumVon'])) { $paramsArray[] = "a.datum >= '" . date('Y-m-d',strtotime($parameter['datumVon']))."' "; } if(isset($parameter['datumBis']) && !empty($parameter['datumBis'])) { $paramsArray[] = "a.datum <= '" . date('Y-m-d',strtotime($parameter['datumBis']))."' "; } if(isset($parameter['projekt']) && !empty($parameter['projekt'])) { $projektData = $this->app->DB->SelectRow(' SELECT * FROM projekt WHERE abkuerzung LIKE "' . $parameter['projekt'] . '" '); $paramsArray[] = "a.projekt = '".$projektData['id']."' "; } if(isset($parameter['belegnummer']) && !empty($parameter['belegnummer'])) { $paramsArray[] = "a.belegnr LIKE '".$parameter['belegnummer']."' "; } if(isset($parameter['internebemerkung']) && !empty($parameter['internebemerkung'])) { $paramsArray[] = "a.internebemerkung LIKE '%".$parameter['internebemerkung']."%' "; } if(isset($parameter['aktion']) && !empty($parameter['aktion'])) { $paramsArray[] = "a.aktion LIKE '%".$parameter['aktion']."%' "; } if(isset($parameter['transaktionsnummer']) && !empty($parameter['transaktionsnummer'])) { $paramsArray[] = "a.transaktionsnummer LIKE '%".$parameter['transaktionsnummer']."%' "; } if(isset($parameter['freitext']) && !empty($parameter['freitext'])) { $paramsArray[] = "a.freitext LIKE '%".$parameter['freitext']."%' "; } if(isset($parameter['zahlungsweise']) && !empty($parameter['zahlungsweise'])) { $paramsArray[] = "a.zahlungsweise LIKE '%".$parameter['zahlungsweise']."%' "; } if(isset($parameter['status']) && !empty($parameter['status'])) { $paramsArray[] = "a.status LIKE '%".$parameter['status']."%' "; } if(isset($parameter['versandart']) && !empty($parameter['versandart'])) { $paramsArray[] = "a.versandart LIKE '%".$parameter['versandart']."%' "; } if(isset($parameter['betragVon']) && !empty($parameter['betragVon'])) { $paramsArray[] = "a.gesamtsumme >= '" . $parameter['betragVon'] . "' "; } if(isset($parameter['betragBis']) && !empty($parameter['betragBis'])) { $paramsArray[] = "a.gesamtsumme <= '" . $parameter['betragBis'] . "' "; } // projekt, belegnummer, internetnummer, bestellnummer, transaktionsId, freitext, internebemerkung, aktionscodes if ($paramsArray) { $where .= ' AND ' . implode(' AND ', $paramsArray); } $this->app->erp->RunHook('auftraege_tablesearch', 2, $sql, $where); // gesamt anzahl $count = "SELECT COUNT(a.id) FROM auftrag a "; $moreinfo = true; // EXTRA break; } $erg = []; foreach($erlaubtevars as $k => $v) { if(isset($$v)) { $erg[$v] = $$v; } } return $erg; } /** * Auftrag constructor. * * @param Application $app * @param bool $intern */ public function __construct($app, $intern = false) { $this->kommissionierung = false; $this->app=$app; if($intern) { return; } $this->app->ActionHandlerInit($this); $this->app->ActionHandler("list","AuftragList"); $this->app->ActionHandler("create","AuftragCreate"); $this->app->ActionHandler("positionen","AuftragPositionen"); $this->app->ActionHandler("upauftragposition","UpAuftragPosition"); $this->app->ActionHandler("delauftragposition","DelAuftragPosition"); $this->app->ActionHandler("copyauftragposition","CopyAuftragPosition"); $this->app->ActionHandler("downauftragposition","DownAuftragPosition"); $this->app->ActionHandler("positioneneditpopup","AuftragPositionenEditPopup"); $this->app->ActionHandler("checkdisplay","AuftragCheckDisplayPopup"); $this->app->ActionHandler("edit","AuftragEdit"); $this->app->ActionHandler("tracking","AuftragTracking"); $this->app->ActionHandler("ausversand","AuftragDeleteAusVersand"); $this->app->ActionHandler("search","AuftragSuche"); $this->app->ActionHandler("ean","AuftragEAN"); $this->app->ActionHandler("versandzentrum","AuftragVersandzentrum"); $this->app->ActionHandler("uststart","AuftragUstStart"); $this->app->ActionHandler("delete","AuftragDelete"); $this->app->ActionHandler("undelete","AuftragUndelete"); $this->app->ActionHandler("anfrage","AuftragAnfrage"); $this->app->ActionHandler("abschluss","AuftragAbschluss"); $this->app->ActionHandler("copy","AuftragCopy"); $this->app->ActionHandler("zertifikate","AuftragZertifikate"); $this->app->ActionHandler("verfuegbar","AuftragVerfuegbar"); $this->app->ActionHandler("rechnung","AuftragRechnung"); $this->app->ActionHandler("lieferschein","AuftragLieferschein"); $this->app->ActionHandler("lieferscheinrechnung","AuftragLieferscheinRechnung"); $this->app->ActionHandler("nachlieferung","AuftragNachlieferung"); // $this->app->ActionHandler("versand","AuftragVersand"); $this->app->ActionHandler("freigabe","AuftragFreigabe"); $this->app->ActionHandler("abschicken","AuftragAbschicken"); $this->app->ActionHandler("pdf","AuftragPDF"); $this->app->ActionHandler("inlinepdf","AuftragInlinePDF"); $this->app->ActionHandler("proforma","AuftragProforma"); $this->app->ActionHandler("versand","AuftragVersand"); $this->app->ActionHandler("zahlungsmail","AuftragZahlungsmail"); $this->app->ActionHandler("reservieren","AuftragReservieren"); $this->app->ActionHandler("nachlieferung","AuftragNachlieferung"); $this->app->ActionHandler("protokoll","AuftragProtokoll"); $this->app->ActionHandler("minidetail","AuftragMiniDetail"); $this->app->ActionHandler("editable","AuftragEditable"); $this->app->ActionHandler("dateien","AuftragDateien"); $this->app->ActionHandler("livetabelle","AuftragLiveTabelle"); $this->app->ActionHandler("zahlungsmahnungswesen","AuftragZahlungMahnungswesen"); $this->app->ActionHandler("schreibschutz","AuftragSchreibschutz"); $this->app->ActionHandler("shopexport","AuftragShopexport"); $this->app->ActionHandler("deleterabatte","AuftragDeleteRabatte"); $this->app->ActionHandler("kreditlimit","AuftragKreditlimit"); $this->app->ActionHandler("updateverband","AuftragUpdateVerband"); $this->app->ActionHandler("pdffromarchive","AuftragPDFfromArchiv"); $this->app->ActionHandler("archivierepdf", "AuftragArchivierePDF"); $this->app->ActionHandler("paypal", "AuftragPaypal"); $this->app->ActionHandler("summe","AuftragSumme"); // nur fuer rechte $this->app->ActionHandler("einkaufspreise", "AuftragEinkaufspreise"); $this->app->ActionHandler("alsfreigegeben", "AuftragAlsfreigegeben"); $this->app->ActionHandler("steuer", "AuftragSteuer"); $this->app->DefaultActionHandler("list"); $id = $this->app->Secure->GetGET('id'); $nummer = $this->app->Secure->GetPOST('adresse'); $name = ''; $belegnr = ''; $abweichendebezeichnung = 0; if($id > 0) { $abArr = $this->app->DB->SelectRow("SELECT b.belegnr, a.name,b.abweichendebezeichnung FROM auftrag b LEFT JOIN adresse a ON a.id=b.adresse WHERE b.id='$id' LIMIT 1"); if(!empty($abArr)) { $name = $abArr['name']; $belegnr = $abArr['belegnr']; $abweichendebezeichnung = $abArr['abweichendebezeichnung']; } } if($nummer==''){ $adresse = $name; } else{ $adresse = $nummer; } $nummer = $belegnr; if($nummer=='' || $nummer=='0') { $nummer='ohne Nummer'; } $this->app->Tpl->Set('UEBERSCHRIFT','Auftrag: '.$adresse.' ('.$nummer.')'); $this->app->Tpl->Set('FARBE','[FARBE2]'); if($abweichendebezeichnung){ $this->app->Tpl->Set('BEZEICHNUNGTITEL', $this->app->erp->Firmendaten('bezeichnungauftragersatz')); } else{ $this->app->Tpl->Set('BEZEICHNUNGTITEL', 'Auftrag'); } $this->app->erp->Headlines('Auftrag'); $this->app->ActionHandlerListen($app); } public function Install() { $this->app->erp->RegisterHook('supersearch_detail', 'auftrag', 'AuftragSupersearchDetail'); } /** * @param \Xentral\Widgets\SuperSearch\Query\DetailQuery $detailQuery * @param \Xentral\Widgets\SuperSearch\Result\ResultDetail $detailResult * * @return void */ public function AuftragSupersearchDetail($detailQuery, $detailResult) { if ($detailQuery->getGroupKey() !== 'orders') { return; } $auftragId = $detailQuery->getItemIdentifier(); $sql = sprintf( "SELECT a.id, a.belegnr, a.datum FROM `auftrag` AS `a` WHERE a.id = '%s' LIMIT 1", $this->app->DB->real_escape_string($auftragId) ); $auftrag = $this->app->DB->SelectRow($sql); if (empty($auftrag)) { return; } $datum = date('d.m.Y', strtotime($auftrag['datum'])); $detailResult->setTitle(sprintf('Auftrag %s vom %s', $auftrag['belegnr'], $datum)); $detailResult->addButton('Auftrag Details', sprintf('index.php?module=auftrag&action=edit&id=%s', $auftrag['id'])); $detailResult->setMiniDetailUrl(sprintf('index.php?module=auftrag&action=minidetail&id=%s', $auftrag['id'])); } function AuftragAARLGPositionen_aktion($module, $id, &$aktionoptionen, &$aktionjs) { if($module !== 'auftrag') { return; } $aktionoptionen .= ""; $aktionjs .= ' if(wert == \'delivery\') { var parameter = \'\'; var ok = false; $(checkboxen).each(function(){ if(parameter != \'\')parameter += \',\'; if($(this).attr(\'name\') == \'belegsort[]\') { parameter += \'b\'+$(this).val(); ok = true; }else{ parameter += \'z\'+$(this).val(); } }); if(ok) { if(confirm(\'{|Wirklich als Lieferschein weiterführen?|}\')) { window.location.href=\'index.php?module=auftrag&action=lieferschein&id='.$id.'&posids=\'+parameter; }else{ $(el).val(\'\'); } }else{ $(el).val(\'\'); alert(\'Bitte einen Artikel auswählen\'); } } '; } function AuftragSteuer() { } function AuftragEinkaufspreise() { } function AuftragSumme() { } function AuftragArchivierePDF() { $id = (int)$this->app->Secure->GetGET('id'); $projekt = $this->app->DB->Select("SELECT projekt FROM auftrag WHERE id = '$id' 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($id); $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($id); $tmpfile = $Brief->displayTMP(); $Brief->ArchiviereDocument(1); $this->app->DB->Update("UPDATE auftrag SET schreibschutz='1' WHERE id='$id'"); unlink($tmpfile); $this->app->Location->execute('index.php?module=auftrag&action=edit&id='.$id); } function AuftragPaypal() { $id = $this->app->Secure->GetGET('id'); if($id) { $erg = $this->app->erp->SendPaypalFromAuftrag($id); if($erg === false) { $msg = $this->app->erp->base64_url_encode('
Es ist ein Fehler aufgetreten
'); }else if(isset($erg['error'])) { $msg = $this->app->erp->base64_url_encode('
'.$erg['error'].'
'); }else{ $msg = $this->app->erp->base64_url_encode('
Anfrage gesendet
'); } }else{ $msg = $this->app->erp->base64_url_encode('
Kein Auftrag
'); } header('Location: index.php?module=auftrag&action=edit&id='.$id.'&msg='.$msg); } function AuftragEAN() { $id=$this->app->Secure->GetGET('id'); $scanner=$this->app->Secure->GetPOST('scanner'); $menge=$this->app->Secure->GetPOST('menge'); $posAdd = $this->app->Secure->GetPOST('posadd'); $posDel = $this->app->Secure->GetPost('posdel'); $sumposition = $this->app->Secure->GetPOST('sumposition'); /** @var ScanArticleService $scanArticleService */ $scanArticleService = $this->app->Container->get('ScanArticleService'); $this->AuftragMenu(); $schreibschutz = $this->app->DB->Select( sprintf( 'SELECT `schreibschutz` FROM `auftrag` WHERE `id` = %d LIMIT 1', $id ) ); if($scanner!='' && $schreibschutz!='1') { if(!is_numeric($menge)){ $menge=1; } //$adresse = $this->app->DB->Select("SELECT adresse FROM auftrag WHERE id='$id' LIMIT 1"); try{ $scanArticleService->writeArticleToSession('auftrag',$scanner,$menge,$id); } catch(ArticleNotFoundException $e){ $this->app->Tpl->Set('TAB1',"
{|Der Artikel wurde nicht gefunden|}: ".$scanner."
"); } catch(InvalidArgumentException $e){ $this->app->Tpl->Set('TAB1',"
{|Fehler beim Schreiben in die Session|}
"); } } if($schreibschutz=="1"){ $this->app->Tpl->Set('TAB1',"
Der Schreibschutz ist aktiviert. Bitte entfernen Sie diesen.
"); } else{ if(!empty($posAdd)){ try{ if($sumposition) { $scanArticleService->saveSumedPositions('auftrag', $id); } else{ $scanArticleService->savePositions('auftrag', $id); } $this->app->Tpl->Set('MESSAGE',"
{|Positionen hinzugefügt|}
"); } catch(Exception $e){ $this->app->Tpl->Set('MESSAGE',"
{|Positionen nicht gespeichert|}!
"); } } if(!empty($posDel)){ $scanArticleService->clearAllArticleDataInSession('auftrag'); } $gescannteArtikel = $scanArticleService->getAllArticleDataFromSession('auftrag'); if(!empty($gescannteArtikel)){ $table = new EasyTable($this->app); $table->headings = ['Artikelnummer','Artikel','Menge','Preis']; foreach($gescannteArtikel as $a){ $row['nummer'] = $a['number']; $row['name'] = $a['name']; $row['menge'] = $a['amount']; $row['preis'] = $a['price']; if(!empty($row)){ $table->AddRow($row); } } $table->DisplayNew('GESCANNTEARTIKEL','Preis','noAction'); $this->app->Tpl->Set('POSITIONENSPEICHERN',''); } $this->app->Tpl->Parse('TAB1','auftrag_ean.tpl'); } $this->app->Tpl->Parse('PAGE','tabview.tpl'); } function AuftragUpdateVerband() { $id=$this->app->Secure->GetGET("id"); $adresse = $this->app->DB->Select("SELECT adresse FROM auftrag WHERE id='$id' LIMIT 1"); $msg = $this->app->erp->base64_url_encode("
Die Verbandsinformation wurde neu geladen!
"); $this->app->Location->execute("index.php?module=auftrag&action=edit&id=$id&msg=$msg"); } function AuftragDeleteRabatte() { $id=$this->app->Secure->GetGET("id"); $this->app->DB->Update("UPDATE auftrag SET rabatt='',rabatt1='',rabatt2='',rabatt3='',rabatt4='',rabatt5='',realrabatt='' WHERE id='$id' LIMIT 1"); $msg = $this->app->erp->base64_url_encode("
Die Rabatte wurden entfernt!
"); $this->app->Location->execute('index.php?module=auftrag&action=edit&id='.$id.'&msg='.$msg); } function AuftragShopexport() { $id=$this->app->Secure->GetGET('id'); $shop=$this->app->DB->Select("SELECT shop FROM auftrag WHERE id='$id' LIMIT 1"); $this->app->remote->RemoteUpdateAuftrag($shop,$id); $msg = $this->app->erp->base64_url_encode("
Versandstatus an Shop übertragen
"); $this->app->Location->execute('index.php?module=auftrag&action=edit&id='.$id.'&msg='.$msg); } function AuftragDateien() { $id = $this->app->Secure->GetGET('id'); $this->AuftragMenu(); $this->app->Tpl->Add('UEBERSCHRIFT',' (Dateien)'); $this->app->YUI->DateiUpload('PAGE','Auftrag',$id); } function AuftragSchreibschutz() { $id = $this->app->Secure->GetGET('id'); $this->app->DB->Update("UPDATE auftrag SET zuarchivieren='1' WHERE id='$id'"); $this->app->DB->Update("UPDATE auftrag SET schreibschutz='0' WHERE id='$id'"); $this->app->erp->AuftragProtokoll($id,"Schreibschutz entfernt"); $this->app->Location->execute('index.php?module=auftrag&action=edit&id='.$id); } function AuftragTracking() { $tracking = $this->app->Secure->GetGET("tracking"); // Wir werden eine PDF Datei ausgeben header('Content-type: application/html'); // Es wird downloaded.pdf benannt header('Content-Disposition: attachment; filename="'.$tracking.'.html"'); // Die originale PDF Datei heißt original.pdf if(is_file('/var/data/userdata/tracking/'.$tracking.'.html')){ readfile('/var/data/userdata/tracking/' . $tracking . '.html'); } $this->app->ExitXentral(); } function AuftragZahlungMahnungswesen() { $this->AuftragMenu(); $this->AuftragMiniDetail('TAB1',true); $this->app->Tpl->Parse('PAGE','tabview.tpl'); } function AuftragLiveTabelleZeit($parsetarget="") { $id = $this->app->Secure->GetGET("id"); $table = new EasyTable($this->app); $sql = "SELECT z.aufgabe as aufgabe, a.name as name, DATE_FORMAT(z.von,'%d.%m.%y %H:%i') as von, DATE_FORMAT(z.bis,'%d.%m.%y %H:%i') as bis, CONCAT(LPAD(HOUR(TIMEDIFF(bis, von)),2,'0'),':',LPAD(MINUTE(TIMEDIFF(bis, von)),2,'0')) AS dauer FROM zeiterfassung z LEFT JOIN adresse a ON a.id=z.adresse WHERE z.auftrag='$id' order by z.von"; //,if(z.abrechnen,if(z.abgerechnet!=1 AND z.abrechnen='1','offen','abgerechnet'),'abgeschlossen') as status $table->Query($sql); $artikel = $table->DisplayNew("return","Dauer","noAction"); if($parsetarget==''){ echo $artikel; $this->app->ExitXentral(); } $this->app->Tpl->Add($parsetarget,$artikel); } function AuftragLiveTabelle() { $id = $this->app->Secure->GetGET("id"); $status = $this->app->DB->Select("SELECT status FROM auftrag WHERE id='$id' LIMIT 1"); $table = new EasyTable($this->app); if($status==='freigegeben') { $table->Query("SELECT ap.bezeichnung as artikel, ap.nummer as Nummer, ap.menge as Menge, if(a.lagerartikel,if(a.porto,'-',if((SELECT TRIM(SUM(l.menge))+0 FROM lager_platz_inhalt l WHERE l.artikel=ap.artikel) > ap.menge,(SELECT TRIM(SUM(l.menge))+0 FROM lager_platz_inhalt l WHERE l.artikel=ap.artikel), if((SELECT SUM(l.menge) FROM lager_platz_inhalt l WHERE l.artikel=ap.artikel)>0,CONCAT('',(SELECT TRIM(SUM(l.menge))+0 FROM lager_platz_inhalt l WHERE l.artikel=ap.artikel),''), 'aus'))),'-') as Lager FROM auftrag_position ap, artikel a WHERE ap.auftrag='$id' AND a.id=ap.artikel"); $artikel = $table->DisplayNew("return","Lager","noAction"); } else { $table->Query("SELECT ap.bezeichnung as artikel, ap.nummer as Nummer, if(a.lagerartikel,ap.menge,'-') as M FROM auftrag_position ap, artikel a WHERE ap.auftrag='$id' AND a.id=ap.artikel"); $artikel = $table->DisplayNew("return","Menge","noAction"); } echo $artikel; $this->app->ExitXentral(); } function AuftragEditable() { $this->app->YUI->AARLGEditable(); } function Custom($typ) { return ''; } function AuftragIconMenu($id,$prefix="") { $storno = ''; $status = ''; $projekt = 0; $anfrageid = 0; $kreditlimit_ok = 0; $lieferantenauftrag = 0; $art = ''; $adresse = 0; $shop = 0; $shopexportstatus = ''; $auftragArr = $id <=0?null:$this->app->DB->SelectRow( sprintf( 'SELECT status,projekt,anfrageid,kreditlimit_ok,lieferantenauftrag,art,adresse,shopextstatus,shop FROM auftrag WHERE id = %d LIMIT 1', $id ) ); if(!empty($auftragArr)){ $shop = $auftragArr['shop']; $shopextstatus = $auftragArr['shopextstatus']; $adresse = $auftragArr['adresse']; $status = $auftragArr['status'];//$auftragArr[''];// $this->app->DB->Select("SELECT status FROM auftrag WHERE id='$id' LIMIT 1"); $projekt = $auftragArr['projekt'];//$this->app->DB->Select("SELECT projekt FROM auftrag WHERE id='$id' LIMIT 1"); $anfrageid = $auftragArr['anfrageid'];//$this->app->DB->Select("SELECT anfrageid FROM auftrag WHERE id='$id' LIMIT 1"); $kreditlimit_ok = $auftragArr['kreditlimit_ok'];//$this->app->DB->Select("SELECT kreditlimit_ok FROM auftrag WHERE id='$id' LIMIT 1"); $lieferantenauftrag = $auftragArr['lieferantenauftrag'];//$this->app->DB->Select("SELECT lieferantenauftrag FROM auftrag WHERE id='$id' LIMIT 1"); $art = $auftragArr['art']; } $freigabe = ''; if($status==='angelegt' || $status=='') { $freigabe = ""; $freigabe .= ""; } $proformapopup = ''; $proformarechnungoption = ''; $proformarechnungcase = ''; $casehook = ''; $optionhook = ''; $kreditlimit = ''; $shopexport = ''; $auswahlentsprechendkommissionierung = ''; $this->app->erp->RunHook('auftragiconmenu_option', 5, $id, $casehook, $optionhook, $status, $prefix); if($anfrageid > 0){ $freigabe .= ""; } if($kreditlimit_ok==0 && $this->app->erp->RechteVorhanden('auftrag','kreditlimit')){ $kreditlimit .= ""; } $checkifrgexists = $this->app->DB->Select("SELECT id FROM rechnung WHERE auftragid='$id' LIMIT 1"); if($status !== 'storniert') { $storno = ''; } else { $showrueckgaenig = $this->app->DB->Select(sprintf('SELECT id FROM lieferschein WHERE auftragid=%d LIMIT 1', $id)) <= 0 && $this->app->DB->Select(sprintf('SELECT id FROM rechnung WHERE auftragid=%d LIMIT 1', $id)) <= 0; if($showrueckgaenig) { $storno = ''; } } /*$anzahl_ls = $this->app->DB->Select("SELECT COUNT(id) FROM lieferschein WHERE auftragid='$id'"); $anzahl_re = $this->app->DB->Select("SELECT COUNT(id) FROM rechnung WHERE auftragid='$id'"); if($status=="storniert" && $anzahl_ls <=0 && $anzahl_re<=0) $storno = ""; else if($status!="storniert") $storno = "";*/ $kommissionierart = $this->app->DB->Select("SELECT kommissionierverfahren FROM projekt WHERE id='$projekt' LIMIT 1"); //$art = $this->app->DB->Select("SELECT art FROM auftrag WHERE id='$id' LIMIT 1"); $alleartikelreservieren = ''; $teillieferungen = ''; if($status==='freigegeben') { $alleartikelreservieren = ""; if($kommissionierart === "zweistufig" || $kommissionierart === "lieferscheinlagerscan" || $kommissionierart==="lieferscheinscan") { if($art==="rechnung"){ $auswahlentsprechendkommissionierung = ""; } else{ $auswahlentsprechendkommissionierung = ""; } } else if($kommissionierart === "lieferschein" || $kommissionierart === "lieferscheinlager"){ $auswahlentsprechendkommissionierung = ""; } else{ $auswahlentsprechendkommissionierung = ""; } } $zertifikatoption = ''; $zertifikatcase = ''; if($adresse > 0 && $this->app->erp->RechteVorhanden('zertifikatgenerator','list')) { $zertifikate = $this->app->DB->Select("SELECT ds.datei FROM datei_stichwoerter ds INNER JOIN datei_stichwoerter ds2 ON ds.datei = ds2.datei AND ds2.objekt = 'Artikel' INNER JOIN auftrag_position ap ON ap.artikel = ds2.parameter AND ap.auftrag = '$id' WHERE ds.objekt = 'Adressen' AND ds.parameter = '$adresse' GROUP BY ds.datei LIMIT 1"); if(!empty($zertifikate)) { $zertifikatoption = ''; $zertifikatcase = "case 'zertifikate': if(!confirm('Zertifikate wirklich laden?')) return document.getElementById('aktion$prefix').selectedIndex = 0; else window.location.href='index.php?module=auftrag&action=zertifikate&id=%value%'; break; "; } } $artikeleinlagern = ''; $artikelauslagern = ''; $menueinlagern = ''; $menuauslagern = ''; $shopupdate = ''; $menushopupdate = ''; $optioncustom = $this->Custom('option'); $casecustom = $this->Custom('case'); if($this->app->erp->RechteVorhanden('auftrageinauslagern','einlagern')) { $artikeleinlagern = ''; $menueinlagern = " case 'artikeleinlagern': if(!confirm('Artikel wirklich einlagern?')) return document.getElementById('aktion$prefix').selectedIndex = 0; else window.location.href='index.php?module=auftrageinauslagern&action=einlagern&id=%value%'; break;"; } if($this->app->erp->RechteVorhanden('auftrageinauslagern','auslagern')) { $artikelauslagern = ''; $menuauslagern = " case 'artikelauslagern': if(!confirm('Artikel wirklich auslagern?')) return document.getElementById('aktion$prefix').selectedIndex = 0; else window.location.href='index.php?module=auftrageinauslagern&action=auslagern&id=%value%'; break;"; } if($status === 'abgeschlossen' && $this->app->erp->RechteVorhanden('auftrag','shopexport')) { if($shop > 0 && $shopexportstatus != 'abgeschlossen') { $shopexport = ''; $menushopupdate = " case 'shopexport': if(!confirm('Status wirklich an Shop melden?')) return document.getElementById('aktion$prefix').selectedIndex = 0; else window.location.href='index.php?module=auftrag&action=shopexport&id=%value%'; break;"; } } if($this->app->erp->RechteVorhanden('lieferkette', 'create')) { if(!$this->app->DB->Select("SELECT id FROM lieferkette WHERE auftrag = '$id'")) { $caselieferkette = "case 'lieferkette': window.location.href='index.php?module=lieferkette&action=create&id=%value%'; break;"; $optionlieferkette = ""; } } if($this->app->erp->RechteVorhanden('belegeimport', 'belegcsvexport')) { $casebelegeimport = "case 'belegeimport': window.location.href='index.php?module=belegeimport&action=belegcsvexport&cmd=auftrag&id=%value%'; break;"; $optionbelegeimport = ""; } $extendtext = ''; if($checkifrgexists>0) { $extendtext = 'HINWEIS: Es existiert bereits eine Rechnung zu diesem Auftrag! '; } if($lieferantenauftrag!='1') { $alsrechnung = ''; } $hookoption = ''; $hookcase = ''; $this->app->erp->RunHook('Auftrag_Aktion_option',3, $id, $status, $hookoption); $this->app->erp->RunHook('Auftrag_Aktion_case',3, $id, $status, $hookcase); $menu =" Aktion:   "; $menu .= " "; //$tracking = $this->AuftragTrackingTabelle($id); $menu = str_replace('%value%',$id,$menu); return $menu.$proformapopup; } /** * @param int $id * * @return string */ public function AuftragTrackingTabelle($id) { $table = new EasyTable($this->app); if($id > 0) { $table->Query( "SELECT if(v.versendet_am!='0000-00-00', DATE_FORMAT(v.versendet_am,'%d.%m.%Y'),CONCAT('Heute im Versand
Aktuell im Versand
-> als RMA markieren
')) as datum, v.versandunternehmen as versand, v.tracking as L, CONCAT('',l.belegnr,'
zum LS') as LS, CONCAT('',r.belegnr,'
zur RE') as RE, if(tracking!='',CONCAT('Online-Status'),'') FROM versand v INNER JOIN lieferschein l ON v.lieferschein=l.id LEFT JOIN rechnung r ON v.rechnung=r.id WHERE l.auftragid='$id' AND l.auftrag!=''" ); } if(empty($table->datasets)) { return 'Keine Versandinformationen vorhanden'; } $result = $table->DisplayNew('return','Tracking','noAction'); $heuteimversand = $this->app->DB->Select( "SELECT if(v.versendet_am!='0000-00-00', DATE_FORMAT(v.versendet_am,'%d.%m.%Y'),'Heute im Versand') as datum FROM versand v INNER JOIN lieferschein l ON v.lieferschein=l.id WHERE l.auftragid='$id' AND l.auftrag!=''" ); if($heuteimversand==='Heute im Versand'){ $result .= "
RMA jetzt starten
"; } return $result; } function AuftragPDFfromArchiv() { $id = $this->app->Secure->GetGET("id"); $archiv = $this->app->DB->Select("SELECT table_id from pdfarchiv where id = '$id' LIMIT 1"); if($archiv) { $projekt = $this->app->DB->Select("SELECT projekt from auftrag where id = '".(int)$archiv."'"); } if(class_exists('AuftragPDFCustom')) { if($archiv)$Brief = new AuftragPDFCustom($this->app,$projekt); }else{ if($archiv)$Brief = new AuftragPDF($this->app,$projekt); } if($archiv && $content = $Brief->getArchivByID($id)) { header('Content-type: application/pdf'); header('Content-Disposition: attachment; filename="'.$content['belegnr'].'.pdf"'); echo $content['file']; $this->app->ExitXentral(); } header('Content-type: application/pdf'); header('Content-Disposition: attachment; filename="Fehler.pdf"'); $this->app->ExitXentral(); } /** * @var null|int $id * * @return array */ protected function ajaxMiniDetailLager($id = null) { if($id === null){ $id = (int)$this->app->Secure->GetGET('id'); } $artikelRow = $this->app->DB->SelectRow( sprintf( 'SELECT id, mindesthaltbarkeitsdatum, chargenverwaltung FROM artikel WHERE id = %d AND lagerartikel = 1 LIMIT 1', $id ) ); if(empty($artikelRow)){ return ['inhalt' => '
kein Lagerartikel
']; } $lastCol = 'Lager'; $table = new EasyTable($this->app); $warning = ''; if(!empty($artikelRow['mindesthaltbarkeitsdatum'])) { $table->Query( sprintf( 'SELECT ' . $this->app->erp->FormatMenge('sum(lpi.menge)') . ' as menge, l.bezeichnung as Lager, ' . $this->app->erp->FormatMenge('sum(lm.menge)') . ' as `MHD-Menge` FROM lager l INNER JOIN lager_platz lp ON l.id = lp.lager AND l.geloescht = 0 INNER JOIN lager_platz_inhalt lpi ON lp.id = lpi.lager_platz AND lpi.artikel = %d LEFT JOIN ( SELECT SUM(menge) AS menge, lager_platz FROM `lager_mindesthaltbarkeitsdatum` WHERE artikel = %d GROUP BY lager_platz ) AS lm ON lp.id = lm.lager_platz GROUP BY l.id ORDER BY l.bezeichnung', (int)$id, (int)$id ) ); if(!empty($table->datasets)) { $showBestbefore = false; foreach($table->datasets as $dataSetKey => $dataset) { if((string)$dataset['menge'] !== (string)$dataset['MHD-Menge']) { $showBestbefore = true; break; } } if(!$showBestbefore) { foreach($table->datasets as $dataSetKey => $dataset) { unset($table->datasets[$dataSetKey]['MHD-Menge']); } unset($table->headings[count($table->headings)-1]); } else { $lastCol = 'MHD-Menge'; $table->align[2] = 'right'; foreach($table->datasets as $dataSetKey => $dataset) { if(str_replace(',','.',$dataset[$lastCol]) < str_replace(',','.',$dataset['menge'])) { $table->datasets[$dataSetKey][$lastCol] = ''.$dataset[$lastCol].''; $warning = '
Es sind weniger MHD-Mengen als Lagerartikel vorhanden!'; } } } } } elseif(!empty($artikelRow['chargenverwaltung'])) { $table->Query( sprintf( 'SELECT ' . $this->app->erp->FormatMenge('sum(lpi.menge)') . ' as menge, l.bezeichnung as Lager , ' . $this->app->erp->FormatMenge('sum(lc.menge)') . ' as `Chargen-Menge` FROM lager l INNER JOIN lager_platz lp ON l.id = lp.lager AND l.geloescht = 0 INNER JOIN lager_platz_inhalt lpi ON lp.id = lpi.lager_platz AND lpi.artikel = %d LEFT JOIN ( SELECT SUM(menge) AS menge, lager_platz FROM `lager_charge` WHERE artikel = %d GROUP BY lager_platz ) AS lc ON lp.id = lc.lager_platz GROUP BY l.id ORDER BY l.bezeichnung', (int)$id, (int)$id ) ); if(!empty($table->datasets)) { $showBatch = false; foreach($table->datasets as $dataSetKey => $dataset) { if((string)$dataset['menge'] !== (string)$dataset['Chargen-Menge']) { $showBatch = true; break; } } if(!$showBatch) { foreach($table->datasets as $dataSetKey => $dataset) { unset($table->datasets[$dataSetKey]['Chargen-Menge']); } unset($table->headings[count($table->headings)-1]); } else { $lastCol = 'Chargen-Menge'; $table->align[2] = 'right'; foreach($table->datasets as $dataSetKey => $dataset) { if(str_replace(',','.',$dataset[$lastCol]) < str_replace(',','.',$dataset['menge'])) { $table->datasets[$dataSetKey][$lastCol] = ''.$dataset[$lastCol].''; $warning = '
Es sind weniger Chargen-Mengen als Lagerartikel vorhanden!'; } } } } } else{ $table->Query( sprintf( 'SELECT ' . $this->app->erp->FormatMenge('sum(lpi.menge)') . ' as menge, l.bezeichnung as Lager FROM lager l INNER JOIN lager_platz lp ON l.id = lp.lager AND l.geloescht = 0 INNER JOIN lager_platz_inhalt lpi ON lp.id = lpi.lager_platz AND lpi.artikel = %d GROUP BY l.id ORDER BY l.bezeichnung', (int)$id ) ); } $table->align[0] = 'right'; $table->align[1] = 'left'; return [ 'inhalt'=> '
'.$table->DisplayNew('return',$lastCol,'noAction').$warning.'
' ]; } /** * @param null|int $id * * @return array */ protected function ajaxMiniDetailLagerSaveInterneBemerkung($id = null) { if($id === null){ $id = (int)$this->app->Secure->GetGET('id'); } $internebemerkung = $this->app->Secure->GetPOST('internebemerkung'); $this->app->DB->Update( sprintf( "UPDATE `auftrag` SET `internebemerkung` = '%s' WHERE `id` = %d LIMIT 1", $internebemerkung, $id ) ); return ['status' => 1]; } /** * @param mixed $ret */ protected function sendAjax($ret) { header('Content-Type: application/json'); echo json_encode($ret); $this->app->ExitXentral(); } /** * @param string $parsetarget * @param bool $menu */ public function AuftragMiniDetail($parsetarget='',$menu=true) { $id = (int)$this->app->Secure->GetGET('id'); $cmd = $this->app->Secure->GetGET('cmd'); if($cmd === 'lager') { $ret = $this->ajaxMiniDetailLager($id); $this->sendAjax($ret); } if($cmd === 'saveinternebemerkung') { $ret = $this->ajaxMiniDetailLagerSaveInterneBemerkung($id); $this->sendAjax($ret); } if( !$this->app->DB->Select( sprintf('SELECT deckungsbeitragcalc FROM auftrag WHERE id = %d LIMIT 1',$id) ) ){ $this->app->erp->BerechneDeckungsbeitrag($id,'auftrag'); } $auftragArr = $this->app->DB->SelectArr( sprintf( "SELECT *,DATE_FORMAT(lieferdatum,'%%d.%%m.%%Y') as lieferdatum FROM auftrag WHERE id=%d LIMIT 1", $id ) ); $addressId = $auftragArr[0]['adresse']; $projectId = $auftragArr[0]['projekt']; $adrArr = $this->app->DB->SelectRow( sprintf( 'SELECT kundennummer, name FROM adresse WHERE id=%d LIMIT 1', $addressId ) ); $kundennummer = $adrArr['kundennummer']; $projekt = empty($projectId)?'':$this->app->DB->Select( sprintf( 'SELECT abkuerzung FROM projekt WHERE id= %d LIMIT 1', $projectId ) ); $kundenname = $adrArr['name']; $this->app->Tpl->Set( 'KUNDE', "" .$kundennummer." ".$kundenname ); if($this->app->erp->RechteVorhanden('projekt','dashboard')){ $this->app->Tpl->Set( 'PROJEKT', "$projekt" ); } else{ $this->app->Tpl->Set('PROJEKT', $projekt); } $this->app->Tpl->Set('IHREBESTELLNUMMER',$auftragArr[0]['ihrebestellnummer']); $rechnungs = $addressId <= 0?0: $this->app->DB->Select( "SELECT SUM(soll-ist) FROM rechnung WHERE status != 'angelegt' AND zahlungsstatus != 'bezahlt' AND adresse = '".$addressId."'" ); $gutschrifts = $addressId <= 0?0:$this->app->DB->Select( "SELECT SUM(soll-ist) FROM gutschrift WHERE status != 'angelegt' AND (manuell_vorabbezahlt != '0000-00-00' OR manuell_vorabbezahlt IS NOT NULL) AND adresse = '".$addressId."'" ); $kundensaldo = $rechnungs - $gutschrifts; $kundensaldo = round($kundensaldo, 2); if($kundensaldo > 0){ $kundensaldo = "-".number_format($kundensaldo,2,',','.').""; } else if($kundensaldo == 0){ $kundensaldo = '0,00'; } else{ $kundensaldo = number_format($kundensaldo,2,',','.'); } $this->app->Tpl->Set('KUNDENSALDO', $kundensaldo); $zahlungsweisearr = $this->app->erp->GetZahlungsweise('auftrag', $id); if($zahlungsweisearr) { foreach($zahlungsweisearr as $k => $v) { if($k == $auftragArr[0]['zahlungsweise']) { $auftragArr[0]['zahlungsweise'] = $v; break; } } } $versandartarr = $this->app->erp->GetVersandartAuftrag((int)$projectId); if($versandartarr){ foreach($versandartarr as $k => $v) { if($k == $auftragArr[0]['versandart']){ $auftragArr[0]['versandart'] = $v; break; } } } $this->app->Tpl->Set('ZAHLWEISE',$auftragArr[0]['zahlungsweise']); if($auftragArr[0]['lieferdatum']==='00.00.0000') { $auftragArr[0]['lieferdatum']='sofort'; } $this->app->Tpl->Set('WUNSCHLIEFERDATUM',$auftragArr[0]['lieferdatum']); $gebuchtezeit = $this->app->DB->Select( "SELECT IFNULL(SUM(TIME_TO_SEC(TIMEDIFF(bis, von)))/3600,0) FROM zeiterfassung z LEFT JOIN auftrag_position ap ON ap.id = z.auftragpositionid WHERE z.auftrag = '$id' OR ap.auftrag = '$id'" ); if(0){ $gebuchtezeit = (int)$gebuchtezeit.":".round(fmod($gebuchtezeit,1)*60);//Alternative Zeitangabe }else{ $gebuchtezeit = str_replace(".", ",", round($gebuchtezeit,2)); } $summebrutto = $this->app->DB->Select("SELECT gesamtsumme FROM auftrag WHERE id='$id' LIMIT 1"); $this->app->Tpl->Set('DECKUNGSBEITRAG',0); $this->app->Tpl->Set('DBPROZENT',0); $this->app->Tpl->Set('GEBUCHTEZEIT',0); if($auftragArr[0]['ust_befreit']==0){ $this->app->Tpl->Set('STEUER', "Inland"); } else if($auftragArr[0]['ust_befreit']==1){ $this->app->Tpl->Set('STEUER', "EU-Lieferung"); } else{ $this->app->Tpl->Set('STEUER', "Export"); } $this->app->Tpl->Set('DELIVERYTHRESHOLDVATID',!empty($auftragArr[0]['deliverythresholdvatid'])?$auftragArr[0]['deliverythresholdvatid']:''); $this->app->Tpl->Set('GESAMTSUMME',number_format($summebrutto,2,",","")); //ENDE ZUSTANDSAUTOMAT FARBEN // angebot $angebot[]['angebot'] = $this->app->DB->Select( "SELECT CONCAT('',if(an.belegnr='0' OR an.belegnr='','ENTWURF',an.belegnr),'   ') FROM auftrag a LEFT JOIN angebot an ON an.id=a.angebotid WHERE a.id='$id' LIMIT 1" ); if(!empty($angebot)) { $cangebot = count($angebot); for($li=0;$li<$cangebot;$li++) { $this->app->Tpl->Add('ANGEBOT',$angebot[$li]['angebot']); if($liapp->Tpl->Add('ANGEBOT', "
"); } } } else{ $this->app->Tpl->Set('ANGEBOT', '-'); } $lieferschein = $this->app->DB->SelectPairs( "SELECT l.id, CONCAT( '','>'), if(l.belegnr='0' OR l.belegnr='','ENTWURF',l.belegnr), if(l.status='storniert','',''), '   ' ) as lieferschein FROM lieferschein l WHERE l.auftragid='$id'" ); $deliveryNoteIds = [0]; $hasDeliveryNotes = false; $deliveryNoteIdsImplode = '0'; if(empty($lieferschein)) { $this->app->Tpl->Set('LIEFERSCHEIN', '-'); } else{ $hasDeliveryNotes = true; $deliveryNoteIds = array_keys($lieferschein); $deliveryNoteIdsImplode = implode(',', $deliveryNoteIds); $this->app->Tpl->Set('LIEFERSCHEIN', implode('
', $lieferschein)); } /* rechnungen */ $sammelrechnungcheck = $this->app->DB->Select("SELECT * FROM sammelrechnung_position LIMIT 1"); if($sammelrechnungcheck) { $rechnung = $this->app->DB->SelectPairs( "SELECT r.id, CONCAT('','>'),if(r.belegnr='0' OR r.belegnr='','ENTWURF',r.belegnr),if(r.status='storniert','',''),'   ') as rechnung FROM rechnung r WHERE r.auftragid='$id' union SELECT r.id,CONCAT('','>'),if(r.belegnr='0' OR r.belegnr='','ENTWURF',r.belegnr),if(r.status='storniert','',''),'   ') as rechnung FROM rechnung r INNER JOIN sammelrechnung_position s ON r.id = s.rechnung INNER JOIN auftrag_position p ON s.auftrag_position_id = p.id WHERE p.auftrag='$id' union SELECT r.id,CONCAT('','>'),if(r.belegnr='0' OR r.belegnr='','ENTWURF',r.belegnr),if(r.status='storniert','',''),'   ') as rechnung FROM rechnung r INNER JOIN sammelrechnung_position s ON r.id = s.rechnung INNER JOIN lieferschein_position lp ON lp.id = s.lieferschein_position_id INNER JOIN auftrag_position p ON p.id = lp.auftrag_position_id WHERE p.auftrag='$id' "); $rechnungids = array_keys($rechnung); /*$this->app->DB->SelectArr( "SELECT r.id as rid FROM rechnung r WHERE r.auftragid ='$id' AND r.auftrag!='' union SELECT s.rechnung as rid FROM sammelrechnung_position s INNER JOIN auftrag_position p ON s.auftrag_position_id = p.id WHERE p.auftrag = '$id' " );*/ } else{ $rechnung = $this->app->DB->SelectPairs( "SELECT r.id, CONCAT('','>'),if(r.belegnr='0' OR r.belegnr='','ENTWURF',r.belegnr),if(r.status='storniert','',''),'   ' ) as rechnung FROM rechnung r WHERE r.auftragid='$id'" ); $rechnungids =array_keys($rechnung); /*$this->app->DB->SelectArr( "SELECT r.id as rid FROM rechnung r WHERE r.auftragid='$id' AND r.auftrag!='' " );*/ } if(!$rechnung) { $rechnung = $this->app->DB->SelectPairs( "SELECT r.id, CONCAT('','>'),if(r.belegnr='0' OR r.belegnr='','ENTWURF',r.belegnr),if(r.status='storniert','',''),'   ' ) as rechnung FROM rechnung r INNER JOIN auftrag a ON a.rechnungid = r.id WHERE a.id='$id' "); } if(!empty($rechnung)){ $this->app->Tpl->Set('RECHNUNG', implode('
', $rechnung)); } else{ $this->app->Tpl->Set('RECHNUNG', '-'); } /* ende rechnungen */ $positionIdToArticleIds = $this->app->DB->SelectPairs( sprintf( 'SELECT id, artikel FROM auftrag_position WHERE auftrag = %d ', $id ) ); $articleIds = array_unique(array_values($positionIdToArticleIds)); $positionIds = array_keys($positionIdToArticleIds); if(empty($articleIds)) { $articleIds = [0]; } $bpPositions = []; $bpIds = [0]; $bIds = [0]; $hasSupplierOrder = false; if(empty($positionIds)) { $positionIds = [0]; } else { $bpPositions = $this->app->DB->SelectPairs( sprintf( 'SELECT bp.id, bp.bestellung FROM bestellung_position AS bp WHERE bp.auftrag_position_id IN (%s)', implode(',', $positionIds) ) ); if(!empty($bpPositions)) { $bpIds = array_keys($bpPositions); $bIds = array_unique(array_values($bpPositions)); $hasSupplierOrder = true; } } $bpIdsImplode = implode(', ', $bpIds ); $bIdsImplode = implode(', ', $bIds ); $articleIdsimplode = implode(', ', $articleIds ); $positionIdsImplode = implode(', ', $positionIds ); $check = empty($hasSupplierOrder)?[]:$this->app->DB->SelectPairs( sprintf( 'SELECT b.id, b.belegnr FROM bestellung b WHERE b.id IN (%s) ORDER BY b.belegnr, b.id', $bIdsImplode ) ); if($check) { $bestellungen = []; foreach($check as $supplierOrderId => $supplierOrderNumber) { $bestellungen[] = '' .($supplierOrderNumber?$supplierOrderNumber:'ENTWURF') .' '; } $this->app->Tpl->Set('BESTELLUNG', implode('
', $bestellungen)); } $returnOrders = (array)$this->app->DB->SelectArr( sprintf( 'SELECT ro.id, ro.belegnr, ro.status FROM `auftrag` AS `o` LEFT JOIN `lieferschein` AS `dn` ON o.id = dn.auftragid INNER JOIN `retoure` AS `ro` ON ro.auftragid = o.id OR (ro.lieferscheinid = dn.id) WHERE o.id = %d ORDER BY ro.id', $id ) ); $returnOrderHtml = []; foreach($returnOrders as $returnOrderKey => $returnOrder) { $returnOrderId = $returnOrder['id']; $returnOrderNumber = $returnOrder['belegnr']; if(empty($returnOrderNumber)) { $returnOrderNumber = 'ENTWURF'; } $isReturnOrderCanceled = $returnOrder['status'] === 'storniert'; $returnOrderHtml[] = '' .($isReturnOrderCanceled?'':'').$returnOrderNumber.($isReturnOrderCanceled?'':'') .' Retoure PDF Retoure bearbeiten'; } $this->app->Tpl->Set('RETOURE', implode('
', $returnOrderHtml)); $priceRequests = empty($hasSupplierOrder)?[]: (array)$this->app->DB->SelectArr( sprintf( "SELECT pa.id, pa.belegnr, pa.status FROM `bestellung` AS `b` INNER JOIN `preisanfrage` AS `pa` ON pa.id=b.preisanfrageid WHERE b.id IN (%s) GROUP BY pa.belegnr, pa.id ORDER BY pa.belegnr, pa.id", $bIdsImplode ) ); if(!empty($priceRequests)){ $priceRequestsHtml = []; foreach($priceRequests as $priceRequest) { $priceRequestId = $priceRequest['id']; $priceRequestNumber = $priceRequest['belegnr']; if(empty($priceRequestNumber)) { $priceRequestNumber = 'ENTWURF'; } $isPriceRequestIsCanceled = $priceRequest['status'] === 'storniert'; $priceRequestsHtml[] = '' .($isPriceRequestIsCanceled?'':'').($priceRequestNumber).($isPriceRequestIsCanceled?'':'').' '; } $this->app->Tpl->Set('PREISANFRAGE', implode('
', $priceRequestsHtml)); } $tmpVersand = !$hasDeliveryNotes?[]: $this->app->DB->SelectFirstCols( "SELECT if(v.versendet_am!='0000-00-00', CONCAT(DATE_FORMAT( v.versendet_am,'%d.%m.%Y'),' ',v.versandunternehmen), CONCAT( 'Heute im Versand
Aktuell im Versand
-> als RMA markieren
' ) ) as datum FROM versand AS v INNER JOIN lieferschein l ON v.lieferschein=l.id LEFT JOIN rechnung r ON v.rechnung=r.id WHERE l.id IN (".$deliveryNoteIdsImplode.") AND l.auftragid='$id' AND l.auftrag!=''" ); $tracking = !$hasDeliveryNotes?null:$this->app->DB->SelectArr("SELECT if(v.tracking_link IS NOT NULL AND v.tracking_link != '', CONCAT(UPPER(versandunternehmen), ':', v.tracking, ''), if(versandunternehmen = 'dhlexpress' AND l.land = 'DE' AND v.tracking != '', CONCAT(UPPER(versandunternehmen), ':', v.tracking, ''), if(versandunternehmen = 'dhlexpress' AND l.land != 'DE' AND v.tracking != '', CONCAT(UPPER(versandunternehmen), ':', v.tracking, ''), if((versandunternehmen='dhl' OR versandunternehmen='intraship' OR versandunternehmen LIKE '%dhl%') AND v.tracking!='', CONCAT(UPPER(versandunternehmen),':',v.tracking,''), if(versandunternehmen LIKE '%dpd%',CONCAT(UPPER(versandunternehmen),':',v.tracking,''), if(versandunternehmen LIKE '%ups%' AND v.tracking != '', CONCAT(UPPER(versandunternehmen),':',v.tracking,''), if(versandunternehmen LIKE '%gls%' AND v.tracking != '', CONCAT(UPPER(versandunternehmen),':',v.tracking,''), if(v.tracking!='', CONCAT(UPPER(versandunternehmen),': ',v.tracking),'nicht vorhanden') ) ) ) ) ) ) ) as versand2, if(versandunternehmen = 'dhlexpress' AND l.land = 'DE' AND vp.tracking != '', CONCAT(UPPER(versandunternehmen), ':', vp.tracking, ''), if(versandunternehmen = 'dhlexpress' AND l.land != 'DE' AND vp.tracking != '', CONCAT(UPPER(versandunternehmen), ':', vp.tracking, ''), if( (versandunternehmen='dhl' OR versandunternehmen='intraship') AND vp.tracking!='', CONCAT(UPPER(versandunternehmen),':',vp.tracking,''), if(versandunternehmen LIKE '%dpd%',CONCAT(UPPER(versandunternehmen),':',vp.tracking,''), if(versandunternehmen LIKE '%ups%' AND vp.tracking != '', CONCAT(UPPER(versandunternehmen),':',v.tracking,''), if(versandunternehmen LIKE '%gls%' AND vp.tracking != '', CONCAT(UPPER(versandunternehmen),':',v.tracking,''), if(vp.tracking!='', CONCAT(UPPER(versandunternehmen),': ',vp.tracking),'nicht vorhanden') ) ) ) ) ) ) as versand3, v.tracking as tracking2, vp.tracking as tracking3 FROM versand AS v INNER JOIN lieferschein AS l ON v.lieferschein=l.id LEFT JOIN versandpakete AS vp ON v.id = vp.versand WHERE l.id IN (".$deliveryNoteIdsImplode.") AND l.auftragid='$id' AND l.auftrag!='' ORDER BY v.id, vp.nr" ); $ctracking = $tracking?count($tracking):0; for($counti=0;$counti < $ctracking; $counti++) { if($tracking[$counti]['tracking2']!=''){ if($counti == 0 || $tracking[$counti]['tracking2'] != $tracking[$counti-1]['tracking2']){ $tmp[]=$tracking[$counti]['versand2']; } if($tracking[$counti]['tracking3'] != ''){ $tmp[]=$tracking[$counti]['versand3']; } } } if(is_array($tmp)){ $tracking = implode(', ', $tmp); } else{ $tracking = ''; } if(is_array($tmpVersand)){ $tmpVersand = implode(', ', $tmpVersand); } if($tracking!='' && $tracking!=' '){ $this->app->Tpl->Set('TRACKING', $tracking); } else { $this->app->Tpl->Set('TRACKING',$tmpVersand); } $icons = $this->app->YUI->IconsSQL(); if(strpos($icons,'aac.status')) { $icons = $this->app->DB->Select( "SELECT $icons FROM auftrag a LEFT JOIN `auftragsampel_auftrag_cache` aac ON a.id = aac.auftrag WHERE a.id='$id' LIMIT 1" ); } else{ $icons = $this->app->DB->Select( "SELECT $icons FROM auftrag a WHERE a.id='$id' LIMIT 1" ); } $this->app->Tpl->Set('STATUSICONS',$icons); $this->app->Tpl->Set('STATUS',$auftragArr[0]['status']); $this->app->Tpl->Set('VERSANDART',$auftragArr[0]['versandart']); $this->app->Tpl->Set('INTERNET',$auftragArr[0]['internet']); $this->app->Tpl->Set('TRANSAKTIONSNUMMER',$auftragArr[0]['transaktionsnummer']); $onlineshopName = $auftragArr[0]['shop'] <= 0?'':$this->app->DB->Select( sprintf( 'SELECT `bezeichnung` FROM `shopexport` WHERE `id` = %d LIMIT 1', $auftragArr[0]['shop'] ) ); if($onlineshopName != ''){ $this->app->Tpl->Set('ONLINESHOP', $onlineshopName); } if($menu) { $menu = $this->AuftragIconMenu($id); $this->app->Tpl->Set('MENU',$menu); } // ARTIKEL $auftragRow = $this->app->DB->SelectRow( sprintf( 'SELECT status, projekt, standardlager,teillieferungvon FROM auftrag WHERE id = %d', $id ) ); $status = $auftragRow['status'];//$this->app->DB->Select("SELECT status FROM auftrag WHERE id='$id' LIMIT 1"); $table = new EasyTable($this->app); //$lagermehr = " app->Conf->WFconf['defaulttheme']."/images/tooltip_grau.png\" />"; if($status==='freigegeben' || $status==='angelegt') { $anzahllager = $this->app->DB->Select("SELECT count(id) FROM lager WHERE geloescht = 0"); $standardlager = $auftragRow['standardlager'];//$this->app->DB->Select("SELECT standardlager FROM auftrag WHERE id = '$id' LIMIT 1"); $projektlager = 0; if(!$standardlager){ $projektlager = $this->app->DB->Select("SELECT projektlager FROM projekt WHERE id = '".$auftragArr[0]['projekt']."' LIMIT 1"); } if($projektlager){ $projektlager = $auftragArr[0]['projekt']; } $standardlagertext = ''; if($standardlager){ $standardlagertext = $this->app->DB->Select("SELECT bezeichnung FROM lager WHERE id = '$standardlager' LIMIT 1"); } $hookjoins = ''; $hookcolumns = ''; $lastcolumn = 'Reservierung'; $_lastcolumn = $lastcolumn; $this->app->erp->RunHook("auftrag_minidetail_hook1",4, $id, $hookcolumns, $hookjoins, $lastcolumn); $sql = "SELECT if(ap.explodiert_parent > 1,CONCAT('***',if(CHAR_LENGTH(TRIM(ap.beschreibung)) > 0,CONCAT(ap.bezeichnung,' *'),ap.bezeichnung)),if(CHAR_LENGTH(ap.beschreibung) > 0,CONCAT(ap.bezeichnung,' *'),ap.bezeichnung)) as artikel, CONCAT('', ap.nummer,'') as Nummer, if(isnull(b.id),'-',concat('',if(b.belegnr <> '', b.belegnr,'ENTWURF'),'')) as Bestellung, ".$this->app->erp->FormatMenge("ifnull(a.gewicht,0)")." as gewicht, ".$this->app->erp->FormatMenge("ifnull(ap.menge,0)")." as Menge, concat(if(a.lagerartikel, if(a.porto, 'Porto', if( (round(( (SELECT TRIM(SUM(l.menge))+0 FROM lager_platz_inhalt l LEFT JOIN lager_platz lp ON lp.id=l.lager_platz WHERE l.artikel=ap.artikel AND lp.autolagersperre!=1 AND lp.sperrlager!=1 ) - IFNULL(( SELECT SUM(r.menge) FROM lager_reserviert r WHERE r.artikel=ap.artikel AND ((r.objekt='auftrag' AND ( ( r.parameter!='$id') OR ( r.parameter='$id' AND r.posid!=ap.id) )) OR r.objekt!='auftrag' ) ),0) ),8) >= round(ap.menge,8) AND ( round((SELECT TRIM(SUM(l.menge))+0 FROM lager_platz_inhalt l LEFT JOIN lager_platz lp ON lp.id=l.lager_platz WHERE l.artikel=ap.artikel AND lp.autolagersperre!=1 AND lp.sperrlager!=1 ) - IFNULL(( SELECT SUM(r.menge) FROM lager_reserviert r WHERE r.artikel=ap.artikel AND ((r.objekt='auftrag' AND r.parameter!='$id') OR r.objekt!='auftrag' ) ),0),8) >= round((SELECT sum(ap3.menge) FROM auftrag_position ap3 WHERE ap3.auftrag = '$id' AND ap3.artikel = ap.artikel),8) OR round(ap.menge,8) <= round(IFNULL(( SELECT SUM(r.menge) FROM lager_reserviert r WHERE r.artikel=ap.artikel AND r.objekt='auftrag' AND r.parameter='$id' ),0),8) )) OR (( round(ifnull((SELECT SUM(l.menge) FROM lager_platz_inhalt l INNER JOIN lager_platz lp ON lp.id=l.lager_platz WHERE l.artikel=ap.artikel AND lp.autolagersperre!=1 AND lp.sperrlager!=1 ),0),8) - round(IFNULL(( SELECT SUM(r.menge) FROM lager_reserviert r WHERE r.artikel=ap.artikel AND ((r.objekt!='auftrag' OR r.parameter!='$id') ) ),0),8) > round(IFNULL(apc.menge,0),8) ) ) , CONCAT( ifnull( ifnull(( SELECT ".$this->app->erp->FormatMenge("TRIM(SUM(l.menge))+0")." FROM lager_platz_inhalt l LEFT JOIN lager_platz lp ON lp.id=l.lager_platz WHERE l.artikel=ap.artikel AND lp.autolagersperre!=1 AND lp.sperrlager!=1) ,0) ,0), if(round(( SELECT TRIM(SUM(l.menge))+0 FROM lager_platz_inhalt l LEFT JOIN lager_platz lp ON lp.id=l.lager_platz WHERE l.artikel=ap.artikel AND lp.autolagersperre=1 AND lp.sperrlager!=1),8)>0, CONCAT(' + ',(SELECT ".$this->app->erp->FormatMenge("(SUM(l.menge))")." FROM lager_platz_inhalt l LEFT JOIN lager_platz lp ON lp.id=l.lager_platz WHERE l.artikel=ap.artikel AND lp.autolagersperre=1 AND lp.sperrlager!=1),'(N)'),'') ) , if(round(( (SELECT ".$this->app->erp->FormatMenge("(SUM(l.menge))")." FROM lager_platz_inhalt l LEFT JOIN lager_platz lp ON lp.id=l.lager_platz WHERE l.artikel=ap.artikel AND lp.autolagersperre!=1 AND lp.sperrlager!=1) - IFNULL((SELECT SUM(r.menge) FROM lager_reserviert r WHERE r.artikel=ap.artikel AND r.objekt='auftrag' AND r.parameter!='$id'),0)),8)>=0, CONCAT('', (SELECT ".$this->app->erp->FormatMenge("(SUM(l.menge))")." FROM lager_platz_inhalt l LEFT JOIN lager_platz lp ON lp.id=l.lager_platz WHERE l.artikel=ap.artikel AND lp.autolagersperre!=1 AND lp.sperrlager!=1) ,''), 'aus') ) ) ,if(a.porto,'Porto',if(a.stueckliste,'Set','kein Lagerartikel'))),'".($anzahllager >= 1?" lagermehr(',ap.artikel,') ":"")."') as Lager, ".($standardlager?" concat(if(a.lagerartikel, if(a.porto, 'Porto', if( (( (SELECT TRIM(SUM(l.menge))+0 FROM lager_platz_inhalt l INNER JOIN lager_platz lp ON lp.id=l.lager_platz AND lp.lager = '$standardlager' WHERE l.artikel=ap.artikel AND lp.autolagersperre!=1 AND lp.sperrlager!=1 ) - IFNULL(( SELECT SUM(r.menge) FROM lager_reserviert r INNER JOIN auftrag a2 ON r.parameter = a2.id AND r.objekt = 'auftrag' AND a2.standardlager = '$standardlager' WHERE r.artikel = ap.artikel AND (r.parameter <> '$id' OR r.parameter = '$id' AND r.posid != ap.id) ),0) ) >= ap.menge AND ( (SELECT TRIM(SUM(l.menge))+0 FROM lager_platz_inhalt l INNER JOIN lager_platz lp ON lp.id=l.lager_platz AND lp.lager = '$standardlager' WHERE l.artikel=ap.artikel AND lp.autolagersperre!=1 AND lp.sperrlager!=1 ) - IFNULL(( SELECT SUM(r.menge) FROM lager_reserviert r INNER JOIN auftrag a2 ON r.parameter = a2.id AND r.objekt = 'auftrag' AND a2.standardlager = '$standardlager' WHERE r.artikel = ap.artikel AND (r.parameter <> '$id') ),0) >= (SELECT sum(ap3.menge) FROM auftrag_position ap3 WHERE ap3.auftrag = '$id' AND ap3.artikel = ap.artikel) OR ap.menge <= IFNULL(( SELECT SUM(r.menge) FROM lager_reserviert r WHERE r.artikel=ap.artikel AND r.objekt='auftrag' AND r.parameter='$id' ),0) )) AND ( ( (SELECT TRIM(SUM(l.menge))+0 FROM lager_platz_inhalt l LEFT JOIN lager_platz lp ON lp.id=l.lager_platz WHERE l.artikel=ap.artikel AND lp.autolagersperre!=1 AND lp.sperrlager!=1 ) - IFNULL(( SELECT SUM(r.menge) FROM lager_reserviert r WHERE r.artikel=ap.artikel AND ((r.objekt='auftrag' AND ( ( r.parameter!='$id') OR ( r.parameter='$id' AND r.posid!=ap.id) )) OR r.objekt!='auftrag' ) ),0) ) >= ap.menge AND ( (SELECT TRIM(SUM(l.menge))+0 FROM lager_platz_inhalt l LEFT JOIN lager_platz lp ON lp.id=l.lager_platz WHERE l.artikel=ap.artikel AND lp.autolagersperre!=1 AND lp.sperrlager!=1 ) - IFNULL(( SELECT SUM(r.menge) FROM lager_reserviert r WHERE r.artikel=ap.artikel AND ((r.objekt='auftrag' AND r.parameter!='$id') OR r.objekt!='auftrag' ) ),0) >= (SELECT sum(ap3.menge) FROM auftrag_position ap3 WHERE ap3.auftrag = '$id' AND ap3.artikel = ap.artikel) OR ap.menge <= IFNULL(( SELECT SUM(r.menge) FROM lager_reserviert r WHERE r.artikel=ap.artikel AND r.objekt='auftrag' AND r.parameter='$id' ),0) ) ) , CONCAT( ifnull( trim(ifnull(lpin2.menge ,0))+0 ,0), if(( SELECT TRIM(SUM(l.menge))+0 FROM lager_platz_inhalt l INNER JOIN lager_platz lp ON lp.id=l.lager_platz AND lp.lager = '$standardlager' WHERE l.artikel=ap.artikel AND lp.autolagersperre=1 AND lp.sperrlager!=1)>0, CONCAT(' + ',(SELECT TRIM(SUM(l.menge))+0 FROM lager_platz_inhalt l LEFT JOIN lager_platz lp ON lp.id=l.lager_platz WHERE l.artikel=ap.artikel AND lp.lager='$standardlager' AND lp.autolagersperre=1 AND lp.sperrlager!=1),'(N)'),'') ) , if(( (SELECT TRIM(SUM(l.menge))+0 FROM lager_platz_inhalt l INNER JOIN lager_platz lp ON lp.id=l.lager_platz AND lp.lager = '$standardlager' WHERE l.artikel=ap.artikel AND lp.autolagersperre!=1 AND lp.sperrlager!=1) - IFNULL((SELECT SUM(r.menge) FROM lager_reserviert r WHERE r.artikel=ap.artikel AND r.objekt='auftrag' AND r.parameter!='$id'),0))>=0, CONCAT('', (SELECT TRIM(ifnull(SUM(l.menge),0))+0 FROM lager_platz_inhalt l INNER JOIN lager_platz lp ON lp.id=l.lager_platz AND lp.lager = '$standardlager' WHERE l.artikel=ap.artikel AND lp.autolagersperre!=1 AND lp.sperrlager!=1) ,''), 'aus') ) ) ,if(a.porto,'Porto',if(a.stueckliste,'Set','-'))) ,'".($anzahllager >= 1?" lagermehr(',ap.artikel,') ":"")."') as `$standardlagertext` , ":($projektlager?" concat(if(a.lagerartikel, if(a.porto, 'Porto', if( (( ifnull((SELECT TRIM(ifnull(SUM(l.menge),0))+0 FROM lager_platz_inhalt l INNER JOIN lager_platz lp ON lp.id=l.lager_platz INNER JOIN lager lag ON lp.lager = lag.id AND lag.projekt = '$projektlager' WHERE l.artikel=ap.artikel AND lp.autolagersperre!=1 AND lp.sperrlager!=1 ),0) - IFNULL(( SELECT ifnull(SUM(r.menge),0) FROM lager_reserviert r INNER JOIN auftrag a2 ON r.parameter = a2.id AND r.objekt = 'auftrag' AND a2.projekt = '$projektlager' WHERE r.artikel = ap.artikel AND (r.parameter <> '$id' OR r.parameter = '$id' AND r.posid != ap.id) ),0) ) >= ap.menge AND ( (SELECT TRIM(ifnull(SUM(l.menge),0))+0 FROM lager_platz_inhalt l INNER JOIN lager_platz lp ON lp.id=l.lager_platz INNER JOIN lager lag ON lp.lager = lag.id AND lag.projekt = '$projektlager' WHERE l.artikel=ap.artikel AND lp.autolagersperre!=1 AND lp.sperrlager!=1 ) - IFNULL(( SELECT ifnull(SUM(r.menge),0) FROM lager_reserviert r INNER JOIN auftrag a2 ON r.parameter = a2.id AND r.objekt = 'auftrag' AND a2.projekt = '$projektlager' WHERE r.artikel = ap.artikel AND (r.parameter <> '$id') ),0) >= (SELECT ifnull(sum(ap3.menge),0) FROM auftrag_position ap3 WHERE ap3.auftrag = '$id' AND ap3.artikel = ap.artikel) OR ap.menge <= IFNULL(( SELECT ifnull(SUM(r.menge),0) FROM lager_reserviert r WHERE r.artikel=ap.artikel AND r.objekt='auftrag' AND r.parameter='$id' ),0) )) AND ( ( (SELECT TRIM(ifnull(SUM(l.menge),0))+0 FROM lager_platz_inhalt l LEFT JOIN lager_platz lp ON lp.id=l.lager_platz WHERE l.artikel=ap.artikel AND lp.autolagersperre!=1 AND lp.sperrlager!=1 ) - IFNULL(( SELECT ifnull(SUM(r.menge),0) FROM lager_reserviert r WHERE r.artikel=ap.artikel AND ((r.objekt='auftrag' AND ( ( r.parameter!='$id') OR ( r.parameter='$id' AND r.posid!=ap.id) )) OR r.objekt!='auftrag' ) ),0) ) >= ap.menge AND ( (SELECT TRIM(ifnull(SUM(l.menge),0))+0 FROM lager_platz_inhalt l LEFT JOIN lager_platz lp ON lp.id=l.lager_platz WHERE l.artikel=ap.artikel AND lp.autolagersperre!=1 AND lp.sperrlager!=1 ) - IFNULL(( SELECT ifnull(SUM(r.menge),0) FROM lager_reserviert r WHERE r.artikel=ap.artikel AND ((r.objekt='auftrag' AND r.parameter!='$id') OR r.objekt!='auftrag' ) ),0) >= (SELECT ifnull(sum(ap3.menge),0) FROM auftrag_position ap3 WHERE ap3.auftrag = '$id' AND ap3.artikel = ap.artikel) OR ap.menge <= IFNULL(( SELECT ifnull(SUM(r.menge),0) FROM lager_reserviert r WHERE r.artikel=ap.artikel AND r.objekt='auftrag' AND r.parameter='$id' ),0) ) ) , CONCAT( ".$this->app->erp->FormatMenge("ifnull(lpin2.menge,0)")." , if(( SELECT ifnull(SUM(l.menge),0) FROM lager_platz_inhalt l INNER JOIN lager_platz lp ON lp.id=l.lager_platz INNER JOIN lager lag ON lp.lager = lag.id AND lag.projekt = '$projektlager' WHERE l.artikel=ap.artikel AND lp.autolagersperre=1 AND lp.sperrlager!=1)>0, CONCAT(' + ',(SELECT ".$this->app->erp->FormatMenge("ifnull(SUM(l.menge),0)")." FROM lager_platz_inhalt l LEFT JOIN lager_platz lp ON lp.id=l.lager_platz WHERE l.artikel=ap.artikel AND lp.lager='$standardlager' AND lp.autolagersperre=1 AND lp.sperrlager!=1),'(N)'),'') ) , if(( (SELECT TRIM(ifnull(SUM(l.menge),0))+0 FROM lager_platz_inhalt l INNER JOIN lager_platz lp ON lp.id=l.lager_platz INNER JOIN lager lag ON lp.lager = lag.id AND lag.projekt = '$projektlager' WHERE l.artikel=ap.artikel AND lp.autolagersperre!=1 AND lp.sperrlager!=1) - IFNULL((SELECT ifnull(SUM(r.menge),0) FROM lager_reserviert r WHERE r.artikel=ap.artikel AND r.objekt='auftrag' AND r.parameter!='$id'),0))>=0, CONCAT('', (SELECT ".$this->app->erp->FormatMenge("ifnull(SUM(l.menge),0)")." FROM lager_platz_inhalt l INNER JOIN lager_platz lp ON lp.id=l.lager_platz INNER JOIN lager lag ON lp.lager = lag.id AND lag.projekt = '$projektlager' WHERE l.artikel=ap.artikel AND lp.autolagersperre!=1 AND lp.sperrlager!=1) ,''), 'aus') ) ) ,if(a.porto,'Porto',if(a.stueckliste,'Set','-'))),'".($anzahllager >= 1?" lagermehr(',ap.artikel,') ":"")."') as `Projektlager` , ":''))." CONCAT( IFNULL((SELECT ".$this->app->erp->FormatMenge("ifnull(SUM(r.menge),0)")." FROM lager_reserviert r WHERE r.artikel=ap.artikel AND r.objekt='auftrag' AND r.parameter='$id' AND (r.posid=ap.id OR (r.artikel=ap.artikel AND r.posid=0))),'0') , ' / ',(SELECT ".$this->app->erp->FormatMenge("ifnull(SUM(r.menge),0)")." FROM lager_reserviert r WHERE r.artikel=ap.artikel ) ,' *') as '$_lastcolumn' $hookcolumns FROM auftrag_position ap INNER JOIN artikel a ON a.id = ap.artikel LEFT JOIN ( SELECT apa.id, sum(apb.menge) as menge FROM auftrag_position apa INNER JOIN auftrag_position apb ON apa.artikel = apb.artikel AND apa.auftrag = '$id' AND apb.auftrag = '$id' AND apb.sort <= apa.sort WHERE apa.id IN (".$positionIdsImplode.") AND apb.id IN (".$positionIdsImplode.") GROUP BY apa.id ) apc ON ap.id = apc.id LEFT JOIN ( SELECT ifnull(sum(lpi1.menge),0) as menge, lpi1.artikel FROM lager_platz_inhalt lpi1 INNER JOIN lager_platz lp1 ON lpi1.lager_platz = lp1.id AND lp1.autolagersperre != 1 AND lp1.sperrlager != 1 ".($standardlager?" AND lp1.lager != '$standardlager' ":"")." WHERE lpi1.artikel IN (".$articleIdsimplode.") GROUP BY lpi1.artikel ) as lpin1 ON ap.artikel = lpin1.artikel ".($standardlager?" LEFT JOIN ( SELECT ifnull(sum(lpi2.menge),0) as menge, lpi2.artikel FROM lager_platz_inhalt lpi2 INNER JOIN lager_platz lp2 ON lpi2.lager_platz = lp2.id AND lp2.autolagersperre != 1 AND lp2.sperrlager != 1 AND lp2.lager = '$standardlager' WHERE lpi2.artikel IN (".$articleIdsimplode.") GROUP BY lpi2.artikel ) as lpin2 ON ap.artikel = lpin2.artikel ":($projektlager?" LEFT JOIN ( SELECT ifnull(sum(lpi2.menge),0) as menge, lpi2.artikel FROM lager_platz_inhalt lpi2 INNER JOIN lager_platz lp2 ON lpi2.lager_platz = lp2.id AND lp2.autolagersperre != 1 AND lp2.sperrlager != 1 INNER JOIN lager l2 ON lp2.lager = l2.id AND l2.projekt = '$projektlager' WHERE lpi2.artikel IN (".$articleIdsimplode.") GROUP BY lpi2.artikel ) as lpin2 ON ap.artikel = lpin2.artikel ":""))." LEFT JOIN bestellung_position bp ON bp.id IN (".$bpIdsImplode.") AND ap.id = bp.auftrag_position_id AND bp.artikel IN (".$articleIdsimplode.") LEFT JOIN bestellung b ON b.id IN (".$bIdsImplode.") AND b.id = bp.bestellung $hookjoins WHERE ap.auftrag='$id' AND ap.id IN (".$positionIdsImplode.") ORDER by ap.sort"; //$time = microtime(true); $table->Query($sql); //$time = microtime(true) - $time; $gewichtanzeigen = false; $bestellunganzeigen = false; $reserviertfuerkundeanzeigen = false; if($table->datasets) { foreach($table->datasets as $k => $row) { if(str_replace(',','.',$row['gewicht']) > 0){ $gewichtanzeigen = true; } if($row['Bestellung'] != '-') { $bestellunganzeigen = true; } if(isset($row['Res']) && $row['Res'] != ''){ $reserviertfuerkundeanzeigen = true; } if($row[$_lastcolumn] != ''){ $reserviertfuerkundeanzeigen = true; } } } if(!$bestellunganzeigen) { foreach($table->datasets as $k => $row) { unset($table->datasets[$k]['Bestellung']); } $table->headings[2] = $table->headings[3]; if(isset($table->headings[4]))$table->headings[3] = $table->headings[4]; if(isset($table->headings[5]))$table->headings[4] = $table->headings[5]; if(isset($table->headings[6]))$table->headings[5] = $table->headings[6]; if(isset($table->headings[7]))$table->headings[6] = $table->headings[7]; if(isset($table->headings[8]))$table->headings[7] = $table->headings[8]; if(isset($table->headings[8])) { unset($table->headings[8]); }elseif(isset($table->headings[7])) { unset($table->headings[7]); }elseif(isset($table->headings[6])) { unset($table->headings[6]); }elseif(isset($table->headings[5])){ unset($table->headings[5]); }else{ unset($table->headings[4]); } } if(!$gewichtanzeigen) { foreach($table->datasets as $k => $row) { unset($table->datasets[$k]['gewicht']); } if(!$bestellunganzeigen) { $table->headings[2] = $table->headings[3]; } if(isset($table->headings[4]))$table->headings[3] = $table->headings[4]; if(isset($table->headings[5]))$table->headings[4] = $table->headings[5]; if(isset($table->headings[6]))$table->headings[5] = $table->headings[6]; if(isset($table->headings[7]))$table->headings[6] = $table->headings[7]; if(isset($table->headings[8]))$table->headings[7] = $table->headings[8]; if(isset($table->headings[8])) { unset($table->headings[8]); }elseif(isset($table->headings[7])) { unset($table->headings[7]); }elseif(isset($table->headings[6])) { unset($table->headings[6]); }elseif(isset($table->headings[5])) { unset($table->headings[5]); }elseif(isset($table->headings[4])) { unset($table->headings[4]); }else{ unset($table->headings[3]); } } if(!$reserviertfuerkundeanzeigen) { foreach($table->datasets as $k => $row) { unset($table->datasets[$k][$_lastcolumn]); } if($lastcolumn == $_lastcolumn) { unset($table->headings[count($table->headings)-1]); }else { $cheading = !empty($table->headings)?count($table->headings):0; for($hc = 0; $hc < $cheading; $hc++) { if($table->headings[$hc] == $_lastcolumn) { break; } } for($hci = $hc; $hci < $cheading ;$hci++) { if(isset($table->headings[$hci])) { if(isset($table->headings[$hci + 1])) { $table->headings[$hci] = $table->headings[$hci + 1]; }else{ unset($table->headings[$hci]); } } } } if($lastcolumn == $_lastcolumn) { $lastcolumn = $table->headings[count($table->headings)-1]; if($lastcolumn == 'Aktion'){ $lastcolumn = $table->headings[count($table->headings)-2]; } } } if($table->datasets) { foreach($table->datasets as $k => $v) { foreach($v as $k2 => $v2) { if(preg_match_all('/^(.*)lagermehr\((.*)\)(.*)$/', $v2, $matches,PREG_OFFSET_CAPTURE)) { $table->datasets[$k][$k2] = $matches[1][0][0].' '.$this->app->YUI->ContentTooltip('return','index.php?module=auftrag&action=minidetail&cmd=lager&id='.$matches[2][0][0],'url').$matches[3][0][0]; } } } foreach($table->headings as $k => $v) { if($v === 'Lager'){ $table->align[$k] = 'right'; }elseif($v === 'Menge'){ $table->align[$k] = 'right'; }elseif($v === 'Projektlager'){ $table->align[$k] = 'right'; }elseif($v == $standardlagertext){ $table->align[$k] = 'right'; } } } $artikel = $table->DisplayNew("return",$lastcolumn,"noAction","false",0,0,false); } else { //$table->Query("SELECT ap.bezeichnung as artikel, ap.nummer as Nummer, if(a.lagerartikel,ap.menge,'-') as Menge $hookjoins = ''; $hookcolumns = ''; $lastcolumn = 'Menge'; $this->app->erp->RunHook('auftrag_minidetail_hook1',4, $id, $hookcolumns, $hookjoins, $lastcolumn); $sql = "SELECT if(ap.explodiert_parent > 1, CONCAT('***',if(CHAR_LENGTH(ap.beschreibung) > 0,CONCAT(ap.bezeichnung,' *'),ap.bezeichnung)),if(CHAR_LENGTH(ap.beschreibung) > 0,CONCAT(ap.bezeichnung,' *'),ap.bezeichnung)) as artikel, CONCAT('', ap.nummer,'') as Nummer, if(isnull(b.id),'-',concat('',if(b.belegnr <> '', b.belegnr,'ENTWURF'),'') ) as Bestellung,a.gewicht as gewicht, TRIM(ap.menge)+0 as Menge $hookcolumns FROM auftrag_position AS ap INNER JOIN artikel AS a ON a.id=ap.artikel LEFT JOIN bestellung_position AS bp ON ap.id = bp.auftrag_position_id AND bp.id IN (".$bpIdsImplode.") LEFT JOIN bestellung AS b ON b.id = bp.bestellung AND b.id IN (".$bIdsImplode.") $hookjoins WHERE ap.id IN (".$positionIdsImplode.") AND ap.auftrag='$id' ORDER by ap.sort "; $table->Query($sql); $gewichtanzeigen = false; $bestellunganzeigen = false; if($table->datasets){ foreach($table->datasets as $k => $row) { if($row['gewicht'] > 0){ $gewichtanzeigen = true; } if($row['Bestellung'] != '-'){ $bestellunganzeigen = true; } } } if(!$bestellunganzeigen) { foreach($table->datasets as $k => $row) { unset($table->datasets[$k]['Bestellung']); } $table->headings[2] = $table->headings[3]; if(isset($table->headings[4])){ $table->headings[3] = $table->headings[4]; } if(isset($table->headings[5])){ $table->headings[4] = $table->headings[5]; } if(isset($table->headings[6])){ $table->headings[5] = $table->headings[6]; } if(isset($table->headings[7])){ $table->headings[6] = $table->headings[7]; } if(isset($table->headings[7])) { unset($table->headings[7]); }elseif(isset($table->headings[6])) { unset($table->headings[6]); }elseif(isset($table->headings[5])){ unset($table->headings[5]); }else{ unset($table->headings[4]); } } if(!$gewichtanzeigen) { foreach($table->datasets as $k => $row) { unset($table->datasets[$k]['gewicht']); } if(!$bestellunganzeigen) { $table->headings[2] = $table->headings[3]; } if(isset($table->headings[4]))$table->headings[3] = $table->headings[4]; if(isset($table->headings[5]))$table->headings[4] = $table->headings[5]; if(isset($table->headings[6]))$table->headings[5] = $table->headings[6]; if(isset($table->headings[7]))$table->headings[6] = $table->headings[7]; if(isset($table->headings[7])) { unset($table->headings[7]); }elseif(isset($table->headings[6])) { unset($table->headings[6]); }elseif(isset($table->headings[5])){ unset($table->headings[5]); }elseif(isset($table->headings[4])){ unset($table->headings[4]); }else{ unset($table->headings[3]); } } $artikel = $table->DisplayNew("return",$lastcolumn,"noAction"); } $this->app->Tpl->Set('ARTIKEL','
'.$artikel.'
'); $nachartikeltarget = 'MINIDETAILNACHARTIKEL'; $this->app->erp->RunHook("AuftragMiniDetailNachArtikel", 2, $id, $nachartikeltarget); //START ZUSTANDSAUTOMAT FARBEN if($auftragArr[0]['status']==='freigegeben'){ $this->app->Tpl->Set( 'VERSANDTEXT','
Versand: Noch nicht versendet!
' ); } else if ($auftragArr[0]['status']==='abgeschlossen') { $this->app->Tpl->Set( 'VERSANDTEXT','
Versand: Bereits versendet!
' ); } else { $this->app->Tpl->Set( 'VERSANDTEXT','
Versand: -
' ); } $vorkasse_ok = $this->app->DB->Select("SELECT vorkasse_ok FROM auftrag WHERE id='$id' LIMIT 1"); $zahlungsweise = $auftragArr[0]['zahlungsweise']; if($vorkasse_ok==1){ if($zahlungsweise==='vorkasse' || $zahlungsweise==='paypal' || $zahlungsweise==='kreditkarte') { $this->app->Tpl->Add( 'ZAHLUNGEN',"
Der Auftrag wurde bezahlt.
");} else if ($zahlungsweise==='rechnung') { $this->app->Tpl->Add( 'ZAHLUNGEN',"
Der Auftrag wird per Rechnung bezahlt.
"); } else if ($zahlungsweise==='amazon') { $this->app->Tpl->Add( 'ZAHLUNGEN',"
Der Auftrag wird per Amazon bezahlt.
"); } else if ($zahlungsweise==='lastschrift'||$zahlungsweise==='einzugsermaechtigung') { $this->app->Tpl->Add( 'ZAHLUNGEN',"
Der Auftrag wird per Lastschrift bezahlt.
"); } else if ($zahlungsweise==='bar' || $zahlungsweise==='nachnahme' ) { $this->app->Tpl->Add( 'ZAHLUNGEN',"
Der Auftrag wird bei Übergabe bezahlt.
"); } } else if($vorkasse_ok==2){ $this->app->Tpl->Add('ZAHLUNGEN','
Es liegt eine Teilzahlung vor!
'); } elseif(in_array($zahlungsweise, ['vorkasse','paypal','kreditkarte','bar'])) { $this->app->Tpl->Add( 'ZAHLUNGEN', '
Vorkasse noch nicht abgeschlossen!
' ); } // schaue ob es eine GS zu diesem Auftrag gibt // schaue ob es eine GS zu diesem Auftrag gibt //$gutschriftid = $this->app->DB->Select("SELECT id FROM gutschrift WHERE rechnungid='$rechnungid' LIMIT 1"); if(!empty($rechnungids)) { foreach($rechnungids as $rechnungid) { $gutschriftid = $rechnungid <= 0?0:$this->app->DB->Select( sprintf( 'SELECT id FROM gutschrift WHERE rechnungid=%d AND rechnungid > 0 LIMIT 1', $rechnungid ) ); if($gutschriftid > 0) { $tmp = $this->app->DB->Select( "SELECT CONCAT('',if(r.belegnr='0' OR r.belegnr='','ENTWURF',r.belegnr),'   ') as rechnung FROM gutschrift r WHERE r.id='".$gutschriftid."' LIMIT 1" ); $this->app->Tpl->Add('GUTSCHRIFT',$tmp); } } } if($auftragArr[0]['rma']==1){ $this->app->YUI->ParserVarIf('RMA', 1); } else{ $this->app->YUI->ParserVarIf('RMA', 0); } $this->app->Tpl->Set('RMAFARBE','red'); $this->app->Tpl->Set('RMATEXT','RMA zu diesem Auftrag vorhanden!'); if($auftragArr[0]['belegnr']=='0' || $auftragArr[0]['belegnr']=='') { $auftragArr[0]['belegnr'] = 'ENTWURF'; } $this->app->Tpl->Set('BELEGNR',$auftragArr[0]['belegnr']); $this->app->Tpl->Set('AUFTRAGID',$auftragArr[0]['id']); $this->app->Tpl->Set( 'RECHNUNGLIEFERADRESSE', $this->AuftragRechnungsLieferadresse($auftragArr[0]['id']) ); $this->app->Tpl->Set('RMA',"Es ist kein RMA-Prozess zu diesem Auftrag vorhanden."); $tmp = new EasyTable($this->app); $tmp->Query( sprintf( "SELECT DATE_FORMAT(ap.zeit, '%%d.%%m.%%Y %%H:%%i:%%s') AS `zeit`, ap.bearbeiter, ap.grund FROM `auftrag_protokoll` AS `ap` WHERE ap.auftrag = %d ORDER by ap.zeit DESC, ap.id DESC", $id ) ); $tmp->DisplayNew('PROTOKOLL',"Protokoll","noAction"); $produktionsId = $this->app->DB->Select("SELECT id FROM produktion WHERE auftragid = '$id' LIMIT 1"); if($produktionsId > 0){ $this->app->Tpl->Set( 'VORPRODUKTIONPROTOKOLL', '

{|Produktion Protokoll|}

' ); $produktionProtokoll = new EasyTable($this->app); $produktionProtokoll->Query( sprintf( "SELECT DATE_FORMAT(pp.zeit,'%%d.%%m.%%Y %%H:%%i:%%s') AS `zeit`, pp.bearbeiter, pp.grund FROM `produktion_protokoll` AS `pp` WHERE pp.produktion = %d ORDER BY pp.zeit DESC, pp.id DESC", $produktionsId ) ); $produktionProtokoll->DisplayNew('PRODUKTIONPROTOKOLL', 'Produktion Protokoll', 'noAction'); $this->app->Tpl->Set('NACHPRODUKTIONPROTOKOLL', '
'); } if(class_exists('AuftragPDFCustom')) { $Brief = new AuftragPDFCustom($this->app,$auftragArr[0]['projekt']); } else{ $Brief = new AuftragPDF($this->app,$auftragArr[0]['projekt']); } $Dokumentenliste = $Brief->getArchivedFiles($id, 'auftrag'); if($Dokumentenliste) { $tmp3 = new EasyTable($this->app); $tmp3->headings = array('Datum','Belegnr','Bearbeiter','Menü'); foreach($Dokumentenliste as $k => $v) { if(!$v['erstesoriginal']) { $tmpr['datum'] = date('d.m.Y H:i:s',strtotime($v['zeitstempel'])); $tmpr['belegnr'] = str_replace('.pdf','',$v['file']); $tmpr['belegnr'] = substr($tmpr['belegnr'],strrpos($tmpr['belegnr'],'_')+1); if(isset($v['belegnummer']) && $v['belegnummer']) { $tmpr['belegnr'] = $v['belegnummer']; } $tmpr['bearbeiter'] = $v['bearbeiter']; $tmpr['menu'] = ''; $tmp3->datasets[] = $tmpr; } } $tmp3->DisplayNew('PDFARCHIV','Menü',"noAction"); } $nettogewicht = $this->app->erp->AuftragNettoGewicht($id); if($nettogewicht!='') { $nettogewicht = number_format($nettogewicht, 2, ',','.'); $gewichtbezeichnung = $this->app->erp->Firmendaten('gewichtbezeichnung'); if($gewichtbezeichnung == '') { $gewichtbezeichnung = 'Kg'; } $this->app->Tpl->Set('GEWICHT', $nettogewicht . ' '.$gewichtbezeichnung); } if($this->app->erp->Firmendaten('internebemerkungminidetails')) { //$schreibschutz = $this->app->DB->Select("SELECT schreibschutz FROM auftrag WHERE id = '$id' LIMIT 1"); $schreibschutz=0; $this->app->Tpl->Set( 'INTERNEBEMERKUNGEDIT', '

Interne Bemerkung

'); $this->app->Tpl->Add('INTERNEBEMERKUNGEDIT','' ); } else{ $this->app->Tpl->Add('INTERNEBEMERKUNGEDIT',''); } } if($parsetarget=='') { $this->app->Tpl->Output('auftrag_minidetail.tpl'); $this->app->ExitXentral(); } $this->app->Tpl->Parse($parsetarget,'auftrag_minidetail.tpl'); } function AuftragRechnungsLieferadresse($auftragid) { $data = $this->app->DB->SelectArr("SELECT * FROM auftrag WHERE id='$auftragid' LIMIT 1"); foreach($data[0] as $key=>$value) { if($data[0][$key]!='' && $key!=='abweichendelieferadresse' && $key!=='land' && $key!=='plz' && $key!=='lieferland' && $key!=='lieferplz') { $data[0][$key] = $data[0][$key].'
'; } } $rechnungsadresse = $data[0]['name']."".$data[0]['ansprechpartner']."".$data[0]['abteilung']."".$data[0]['unterabteilung']. "".$data[0]['strasse']."".$data[0]['adresszusatz']."".$data[0]['land']."-".$data[0]['plz']." ".$data[0]['ort']; // wenn abweichende rechnungsadresse bei kunden aktiv ist dann diese verwenden $abweichende = $this->app->DB->Select("SELECT abweichende_rechnungsadresse FROM adresse WHERE id='".$data[0]['adresse']."' LIMIT 1"); if($abweichende=="1") { $adresse_data = $this->app->DB->SelectArr("SELECT * FROM adresse WHERE id='".$data[0]['adresse']."' LIMIT 1"); foreach($adresse_data[0] as $key=>$value) { if($adresse_data[0][$key]!="" && $key!="abweichendelieferadresse" && $key!="rechnung_land" && $key!="rechnung_plz") { $adresse_data[0][$key] = $adresse_data[0][$key]."
"; } } $rechnungsadresse = $adresse_data[0]['rechnung_name']."".$adresse_data[0]['rechnung_ansprechpartner']."".$adresse_data[0]['rechnung_abteilung']."".$adresse_data[0]['rechnung_unterabteilung']. "".$adresse_data[0]['rechnung_strasse']."".$adresse_data[0]['rechnung_adresszusatz']."".$adresse_data[0]['rechnung_land']."-".$adresse_data[0]['rechnung_plz']." ".$adresse_data[0]['rechnung_ort']; } if($data[0]['abweichendelieferadresse']!=0){ $lieferadresse = $data[0]['liefername']."".$data[0]['lieferansprechpartner']."".$data[0]['lieferabteilung']."".$data[0]['lieferunterabteilung']. "".$data[0]['lieferstrasse']."".$data[0]['lieferadresszusatz']."".$data[0]['lieferland']."-".$data[0]['lieferplz']." ".$data[0]['lieferort']; } else { $lieferadresse = "entspricht Rechnungsadresse"; } return "
Rechnungsadresse ".($abweichende=="1"?' (abweichend)':'').":

$rechnungsadresse
Lieferadresse:

$lieferadresse
"; } function AuftragZahlungsmail() { $id = $this->app->Secure->GetGET("id"); $this->app->erp->AuftragZahlungsmail($id,1); $this->app->Location->execute('index.php?module=auftrag&action=edit&id='.$id); } function AuftragSuche() { $this->app->erp->Headlines('Aufträge'); $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=search","Auftrag Suchen"); $this->app->erp->MenuEintrag("index.php","Zurück zur Übersicht"); $this->app->Tpl->Set('TABTEXT',"Aufträge"); $name = trim($this->app->Secure->GetPOST("name")); $suchwort = trim($this->app->Secure->GetPOST("suchwort")); $email = trim($this->app->Secure->GetPOST("email")); $plz = trim($this->app->Secure->GetPOST("plz")); $auftrag = trim($this->app->Secure->GetPOST("auftrag")); $proforma = trim($this->app->Secure->GetPOST("proforma")); $kundennummer = trim($this->app->Secure->GetPOST("kundennummer")); $betrag= trim($this->app->Secure->GetPOST("betrag")); $betrag = str_replace(',','.',$betrag); if($name!="" || $plz!="" || $proforma!="" || $kundennummer!="" || $auftrag!="" || $email!="" || $betrag!="" || $suchwort!="") { $table = new EasyTable($this->app); $this->app->Tpl->Add('ERGEBNISSE',"

Trefferliste:


"); 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',"
Auftragssuche (bitte entsprechende Suchparameter eingeben)
"); } $this->app->Tpl->Parse('INHALT',"auftragssuche.tpl"); $this->app->Tpl->Set('AKTIV_TAB1',"selected"); $this->app->Tpl->Parse('TAB1',"rahmen77.tpl"); $this->app->Tpl->Parse('PAGE',"tabview.tpl"); } public function AuftragRechnung() { $id = $this->app->Secure->GetGET('id'); $anzahl_artikel = $this->app->DB->Select("SELECT id FROM auftrag_position WHERE auftrag=$id LIMIT 1"); if($anzahl_artikel <= 0) { $belegnr = $this->app->DB->Select("SELECT if(belegnr = '','ENTWURF',belegnr) FROM auftrag WHERE id = '$id' LIMIT 1"); $msg = $this->app->erp->base64_url_encode("
Der Auftrag $belegnr kann nicht weitergefuehrt werden, da keine Artikel gebucht sind!
"); $this->app->Location->execute('index.php?module=auftrag&action=edit&id='.$id.'&msg='.$msg); } $newid = $this->app->erp->WeiterfuehrenAuftragZuRechnung($id); $this->app->erp->AuftragProtokoll($id,'Auftrag manuell als Rechnung weitergeführt'); $this->app->Location->execute('index.php?module=rechnung&action=edit&id='.$newid); } /** * @return JsonResponse */ public function HandleCreateProforma() { $justStorage = $this->app->Secure->GetPOST('just_strorage'); $this->app->User->SetParameter('proforma_just_storage', (int)$justStorage); $id = $this->app->Secure->GetPOST('elementid'); $status = $this->app->DB->Select("SELECT status FROM auftrag WHERE id=$id"); if($status!=='angelegt') { /** @var Proformarechnung $obj */ $obj = $this->app->loadModule('proformarechnung'); if(!empty($obj) && method_exists($obj, 'createFromOrder')) { $newid = $obj->createFromOrder($id, $justStorage); $this->app->erp->AuftragProtokoll($id,'Auftrag als Proformarechnung weitergeführt'); return new JsonResponse( ['success' => true, 'url' => "index.php?module=proformarechnung&action=edit&id=$newid"] ); } return new JsonResponse( [ 'success' => false, 'error' => 'Das Modul Proformarechnung konnte nicht geladen werden!' ], JsonResponse::HTTP_BAD_REQUEST ); } return new JsonResponse( [ 'success' => false, 'error' => 'Das Auftrag befindet sich noch im Entwurfsmodus und kann daher nicht als Proformarechnung weiterführt werden!' ], JsonResponse::HTTP_BAD_REQUEST ); } public function AuftragLieferschein() { $id = $this->app->Secure->GetGET('id'); $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($v[0] === 'b') { $v = substr($v ,1); $positionen[] = $v; }else{ $v = substr($v ,1); $zwischenpositionen[] = $v; } } } } $this->app->erp->AuftragProtokoll($id,'Auftrag manuell als Lieferschein weitergeführt'); $msgNoArticle = $this->app->erp->base64_url_encode('
Der Auftrag kann nicht zum Lieferschein weitergeführt werden, da er keine Positionen oder keine Lagerartikel enthält
'); if(isset($positionen)) { $newid = $this->app->erp->WeiterfuehrenAuftragZuLieferschein($id, $positionen, $zwischenpositionen); $this->app->BuildNavigation = false; if($newid){ $this->app->Tpl->Add('TAB1', ' '); }else{ $this->app->Tpl->Add('TAB1', ' '); } $this->app->Tpl->Parse('PAGE','tabview.tpl'); return; } $newid = $this->app->erp->WeiterfuehrenAuftragZuLieferschein($id); if($newid > 0){ $this->app->Location->execute("Location: index.php?module=lieferschein&action=edit&id=$newid"); } $this->app->Location->execute("Location: index.php?module=auftrag&action=edit&id=$id&msg=".$msgNoArticle); } public function AuftragLieferscheinRechnung() { $id = $this->app->Secure->GetGET('id'); $auftragarr = $this->app->DB->SelectRow("SELECT projekt,art FROM auftrag WHERE id='$id' LIMIT 1"); if(!empty($auftragarr)) { $projekt = $auftragarr['projekt'];//$this->app->DB->Select("SELECT projekt FROM auftrag WHERE id='$id' LIMIT 1"); $art = $auftragarr['art'];//$this->app->DB->Select("SELECT art FROM auftrag WHERE id='$id' LIMIT 1"); }else{ $projekt = 0; $art = ''; } $druckercode = $this->app->erp->Firmendaten('standardversanddrucker'); $this->app->erp->BriefpapierHintergrundDisable($druckercode); if($art!=='rechnung') { // automatisch drucken bzw. freigeben $newid = $this->app->erp->WeiterfuehrenAuftragZuLieferschein($id); $belegnr = (string)$this->app->DB->Select("SELECT belegnr FOM lieferschein WHERE id='$newid' LIMIT 1"); if($belegnr==='' || $belegnr==='0') { $belegnr = $this->app->erp->GetNextNummer('lieferschein',$projekt,$newid); } $this->app->DB->Update("UPDATE lieferschein SET belegnr='$belegnr', status='freigegeben' WHERE id='$newid' LIMIT 1"); $this->app->erp->LieferscheinProtokoll($newid,'Lieferschein freigegeben'); $this->app->erp->LieferscheinAuslagern($newid,true, (int)$this->app->DB->Select("SELECT standardlager FROM auftrag WHERE id = '$id' LIMIT 1"),'lieferschein',true); $Brief = new LieferscheinPDF($this->app,$projekt); $Brief->GetLieferschein($newid); $tmpfile = $Brief->displayTMP(); $Brief->ArchiviereDocument(); $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',$newid,$without_log=false); unlink($tmpfile); $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable; $Brief = new LieferscheinPDF($this->app,$projekt); $Brief->GetLieferschein($newid); $tmpfile = $Brief->displayTMP(); $Brief->ArchiviereDocument(); unlink($tmpfile); } if($art!=='lieferung') { //TODO eventuell wenn es Rechnung schon gibt keine weitere erstellen $newid = $this->app->erp->WeiterfuehrenAuftragZuRechnung($id); $belegnr = (string)$this->app->DB->Select("SELECT belegnr FOM rechnung WHERE id='$newid' LIMIT 1"); if($belegnr==='' || $belegnr==='0') { $belegnr = $this->app->erp->GetNextNummer('rechnung',$projekt,$newid); } $this->app->DB->Update("UPDATE rechnung SET belegnr='$belegnr', status='freigegeben' WHERE id='$newid' LIMIT 1"); $this->app->erp->RechnungProtokoll($newid,'Rechnung freigegeben'); $this->app->erp->ANABREGSNeuberechnen($newid,"rechnung"); $Brief = new RechnungPDF($this->app,$projekt); $Brief->GetRechnung($newid); $tmpfile = $Brief->displayTMP(); $Brief->ArchiviereDocument(); $this->app->printer->Drucken($druckercode,$tmpfile); $fileid_rechnung = $this->app->erp->CreateDatei($Brief->filename,'rechnung','','',$tmpfile,$this->app->User->GetName()); $this->app->erp->AddDateiStichwort($fileid_rechnung,'rechnung','rechnung',$newid,$without_log=false); unlink($tmpfile); $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable; $Brief = new RechnungPDF($this->app,$projekt); $Brief->GetRechnung($newid); $tmpfile = $Brief->displayTMP(); $Brief->ArchiviereDocument(); unlink($tmpfile); } $this->app->Location->execute('index.php?module=auftrag&action=edit&id='.$id); } public function AuftragZertifikate() { $id = $this->app->Secure->GetGET('id'); $adresse = $this->app->DB->Select("SELECT adresse FROM auftrag WHERE id = '$id' LIMIT 1"); if($adresse) { $zertifikate = $this->app->DB->SelectArr("SELECT ds.datei FROM datei_stichwoerter ds INNER JOIN datei_stichwoerter ds2 ON ds.datei = ds2.datei AND ds2.objekt = 'Artikel' INNER JOIN auftrag_position ap ON ap.artikel = ds2.parameter AND ap.auftrag = '$id' WHERE ds.objekt = 'Adressen' AND ds.parameter = '$adresse' GROUP BY ds.datei"); if(!empty($zertifikate)) { foreach($zertifikate as $zertifikat) { $this->app->erp->AddDateiStichwort($zertifikat['datei'],'Sonstige','Auftrag',$id); } } } $this->app->Location->execute('index.php?module=auftrag&action=dateien&id='.$id); } public function AuftragCopy() { $id = $this->app->Secure->GetGET('id'); if($id > 0){ $newid = $this->app->erp->CopyAuftrag($id); }else{ $newid = $id; } $this->app->Location->execute("index.php?module=auftrag&action=edit&id=$newid"); } public function AuftragKreditlimit() { $id = $this->app->Secure->GetGET('id'); if($id > 0){ $this->app->DB->Update("UPDATE auftrag SET kreditlimit_freigabe='1' WHERE id='$id' LIMIT 1"); $this->app->erp->AuftragProtokoll($id, 'Kreditlimit manuell freigegeben'); $this->app->erp->AuftragAutoversandBerechnen($id); $this->app->erp->AuftragNeuberechnen($id); } header('Location: index.php?module=auftrag&action=edit&id='.$id); } function AuftragFreigabe($id='') { if($id=='') { $id = $this->app->Secure->GetGET('id'); $freigabe= $this->app->Secure->GetGET('freigabe'); //$this->app->Tpl->Set('TABTEXT',"Freigabe"); //$module = $this->app->Secure->GetGET("module"); } else { $intern = true; $freigabe=$intern; } $allowedFrm = true; $showDefault = true; if($id > 0){ $this->app->erp->CheckVertrieb($id, 'auftrag'); $this->app->erp->CheckBearbeiter($id, 'auftrag'); $auftragarr = $this->app->DB->SelectRow("SELECT projekt,belegnr,status,email,gesamtsumme FROM auftrag WHERE id='$id' LIMIT 1"); $doctype = 'auftrag'; if(empty($intern)){ $this->app->erp->RunHook('beleg_freigabe', 4, $doctype, $id, $allowedFrm, $showDefault); } } if(!empty($auftragarr)) { $projekt = $auftragarr['projekt'];//$this->app->DB->Select("SELECT projekt FROM auftrag WHERE id='$id' LIMIT 1"); $checkbelegnr = $auftragarr['belegnr'];//$this->app->DB->Select("SELECT belegnr FROM auftrag WHERE id='$id' LIMIT 1"); $status = $auftragarr['status'];//$this->app->DB->Select("SELECT status FROM auftrag WHERE id = '$id' LIMIT 1"); $email = $auftragarr['email']; $summe = $auftragarr['gesamtsumme']; } else{ $status = ''; $projekt = 0; $checkbelegnr = ''; $email = ''; if($intern) { return 0; } $id = 0; } if($allowedFrm && $freigabe==$id && !empty($id)) { if($checkbelegnr==''){ $belegnr = $this->app->erp->GetNextNummer('auftrag', $projekt, $id); } else { $belegnr = $checkbelegnr; } if($this->app->User->GetParameter('auftrag_create_entwurfsdatumuebernehmen')=='1'){ $this->app->DB->Update("UPDATE auftrag SET belegnr='$belegnr', status='freigegeben' WHERE id='$id' LIMIT 1"); } else{ $this->app->DB->Update("UPDATE auftrag SET datum=NOW(), belegnr='$belegnr', status='freigegeben' WHERE id='$id' LIMIT 1"); } $this->app->erp->AuftragProtokoll($id,'Auftrag freigegeben'); if($status !== 'freigegeben') { $_beleg = 'auftrag'; $_id = $id; $this->app->erp->RunHook('BelegFreigabe', 2, $_beleg, $_id); } // auftrag abschliessen und event senden if($intern) { return 1; } $cmd = $this->app->Secure->GetGET('cmd'); if($cmd==='mail') { $this->app->erp->BelegVersand('auftrag',$id,'email'); $msg = $this->app->erp->base64_url_encode('
Der Auftrag wurde freigegeben und die AB an den Kunden per Mail gesendet!
'); } else{ $msg = $this->app->erp->base64_url_encode('
Der Auftrag wurde freigegeben und kann jetzt versendet werden!
'); } $this->app->Location->execute("index.php?module=auftrag&action=edit&id=$id&msg=$msg"); } if($id && $showDefault) { $name = $this->app->DB->Select("SELECT a.name FROM auftrag b INNER JOIN adresse a ON a.id=b.adresse WHERE b.id='$id' LIMIT 1"); //$email = $this->app->DB->Select("SELECT email FROM auftrag WHERE id='$id' LIMIT 1"); //$summe = $this->app->DB->Select("SELECT FORMAT(SUM(menge*preis),2) FROM auftrag_position //WHERE auftrag='$id'"); //$summe = $this->app->DB->Select("SELECT gesamtsumme FROM auftrag WHERE id='$id' LIMIT 1"); $waehrung = $this->app->DB->Select("SELECT waehrung FROM auftrag_position WHERE auftrag='$id' LIMIT 1"); // check ob entwurdsdataum alt ist $extra = $this->app->erp->CheckboxEntwurfsmodus('auftrag',$id); if($email!='') { $this->app->Tpl->Set('TAB1',"
Soll der Auftrag an $name im Wert von $summe $waehrung jetzt freigegeben werden?
 oder ohne automatische Mail:   $extra
"); } else { if($this->app->erp->Firmendaten("oneclickrelease")=="1" && $extra=="") { $this->app->Location->execute("index.php?module=auftrag&action=freigabe&id=$id&freigabe=$id"); } else { $this->app->Tpl->Set('TAB1',"
Soll der Auftrag an $name im Wert von $summe $waehrung jetzt freigegeben werden?  $extra
"); } } } $this->AuftragMenu(); $this->app->Tpl->Parse('PAGE','tabview.tpl'); } public function AuftragAbschicken() { $this->AuftragMenu(); $this->app->erp->DokumentAbschicken(); } public function AuftragAnfrage() { $id = $this->app->Secure->GetGET('id'); if($id > 0){ $anfrageid = $this->app->DB->Select("SELECT anfrageid FROM auftrag WHERE id='$id' LIMIT 1"); }else{ $anfrageid = 0; } // loesche alle positionen im Auftrag if($anfrageid > 0){ $this->app->erp->WeiterfuehrenAuftragZuAnfrage($id); } $this->app->Location->execute('index.php?module=anfrage&action=edit&id='.$anfrageid); } public function AuftragAlsfreigegeben() { $id = $this->app->Secure->GetGET('id'); $alsfreigegeben= $this->app->Secure->GetGET('alsfreigegeben'); $auftragarr = $this->app->DB->SelectRow("SELECT name,belegnr,status FROM auftrag WHERE id='$id' LIMIT 1"); if(!empty($auftragarr)) { $name = $auftragarr['name'];//$this->app->DB->Select("SELECT name FROM auftrag WHERE id='$id' LIMIT 1"); $belegnr = $auftragarr['belegnr'];//$this->app->DB->Select("SELECT belegnr FROM auftrag WHERE id='$id' LIMIT 1"); $status = $auftragarr['status'];//$this->app->DB->Select("SELECT status FROM auftrag WHERE id='$id' LIMIT 1"); }else{ $name = ''; $status = ''; $belegnr = ''; } if(empty($auftragarr)){ }elseif(!empty($auftragarr) && $alsfreigegeben==$id) { if($status==='angelegt') { // KUNDE muss RMA starten $msg = $this->app->erp->base64_url_encode("
Der Auftrag \"$name\" ($belegnr) kann nicht als offen markiert werden. Er muss erst freigegeben werden!
"); } else if($status==="freigegeben") { // KUNDE muss RMA starten $msg = $this->app->erp->base64_url_encode("
Der Auftrag \"$name\" ($belegnr) ist bereits freigegeben!
"); } else if($status==="abgeschlossen" || $status==="storniert" || $status==="versendet") { $msg = $this->app->erp->base64_url_encode("
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('
'.$ret['error'].'
'); } else{ $msg = $this->app->erp->base64_url_encode('
'.$ret['info'].'
'); } $this->app->Location->execute("index.php?module=auftrag&action=edit&id=$id&msg=$msg"); } $name = $this->app->DB->Select("SELECT a.name FROM auftrag b INNER 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 abgeschlossen werden?
"); $this->AuftragMenu(); $this->app->Tpl->Parse('PAGE','tabview.tpl'); } public function AuftragUndelete() { $id = (int)$this->app->Secure->GetGET('id'); $auftragarr = $this->app->DB->SelectRow("SELECT name, belegnr, status FROM auftrag WHERE id='$id' LIMIT 1"); if(!empty($auftragarr)){ $name = $auftragarr['name'];//$this->app->DB->Select("SELECT name FROM auftrag WHERE id='$id' LIMIT 1"); $belegnr = $auftragarr['belegnr'];//$this->app->DB->Select("SELECT belegnr FROM auftrag WHERE id='$id' LIMIT 1"); $status = $auftragarr['status'];//$this->app->DB->Select("SELECT status FROM auftrag WHERE id='$id' LIMIT 1"); }else{ $name = ''; $belegnr = ''; $status = ''; } $ok = true; if($status !== 'storniert') { $ok = false; } if($ok) { $anzahl_ls = $this->app->DB->Select("SELECT id FROM lieferschein WHERE auftragid='$id' LIMIT 1"); if($anzahl_ls) { $ok = false; } } if($ok) { $anzahl_re = $this->app->DB->Select("SELECT id FROM rechnung WHERE auftragid='$id' LIMIT 1"); if($anzahl_re){ $ok = false; } } if($ok) { $this->app->DB->Update("UPDATE auftrag SET status='freigegeben' WHERE id='$id' LIMIT 1"); $this->app->erp->AuftragProtokoll($id,'Auftrag Storno rückgängig'); $msg = $this->app->erp->base64_url_encode("
Auftrag \"$name\" ($belegnr) wurde wieder freigegeben!
"); } else { $msg = $this->app->erp->base64_url_encode("
Auftrag \"$name\" ($belegnr) kann nicht wieder freigegeben werden da es bereits Rechnungen und/oder Lieferrscheine zu dem Auftrag gibt.
"); } //header("Location: ".$_SERVER['HTTP_REFERER']."&msg=$msg"); $this->app->Location->execute("index.php?module=auftrag&action=list&msg=$msg"); } public function AuftragDelete($id = null) { if($id === null) { $intern = false; $id = $this->app->Secure->GetGET('id'); $abschluss = $this->app->Secure->GetGET('abschluss'); $mail = $this->app->Secure->GetGET('mail'); }else { $intern = true; $abschluss = $intern; $mail = 0; } $auftragarr = $this->app->DB->SelectRow("SELECT name, belegnr, status,shop,shopextid FROM auftrag WHERE id='$id' LIMIT 1"); if(!empty($auftragarr)){ $name = $auftragarr['name'];//$this->app->DB->Select("SELECT name FROM auftrag WHERE id='$id' LIMIT 1"); $belegnr = $auftragarr['belegnr'];//$this->app->DB->Select("SELECT belegnr FROM auftrag WHERE id='$id' LIMIT 1"); $status = $auftragarr['status'];//$this->app->DB->Select("SELECT status FROM auftrag WHERE id='$id' LIMIT 1"); $shop = $auftragarr['shop']; $shopextid = (string)$auftragarr['shopextid']; }else{ $name = ''; $belegnr = ''; $status = ''; $shop = 0; $shopextid = ''; } if($abschluss==$id) { if($shop && $this->app->DB->Select("SELECT id FROM shopexport WHERE aktiv = 1 AND id = '$shop' AND stornoabgleich AND demomodus = 0 LIMIT 1")) { if($shopextid !== ''){ $this->app->remote->RemoteStorniereAuftrag($shop, $id); } } if($belegnr=='0' || $belegnr=='') { $this->app->erp->DeleteAuftrag($id); if($belegnr!=''){ $msg = $this->app->erp->base64_url_encode("
Auftrag \"$name\" ($belegnr) wurde gelöscht!
"); } else{ $msg = $this->app->erp->base64_url_encode("
Auftrag \"$name\" wurde gelöscht!
"); } //header("Location: ".$_SERVER['HTTP_REFERER']."&msg=$msg"); if($intern){ return; } $this->app->Location->execute("index.php?module=auftrag&action=list&msg=$msg"); } if($status==='storniert') { if($intern){ return; } $msg = $this->app->erp->base64_url_encode("
Auftrag \"$name\" ($belegnr) kann nicht storniert werden da er bereits storniert ist!
"); $this->app->Location->execute("index.php?module=auftrag&action=list&msg=$msg"); } $this->app->DB->Update("UPDATE auftrag SET status='storniert' WHERE id='$id' LIMIT 1"); $this->app->erp->AuftragProtokoll($id,'Auftrag storniert'); // stornierungen loeschen $this->app->DB->Delete("DELETE FROM lager_reserviert WHERE objekt='auftrag' AND parameter='$id'"); // ausfuellen automatisch stornofelder //stornobetrag // summe des zahlungseingangs!!!! //stornogutschrift //stornowareerhalten //stornorueckzahlung // zureuckzahlen per // email senden? if($mail==1){ $this->app->erp->Stornomail($id); } $recheck = $this->app->DB->Select("SELECT id FROM rechnung WHERE auftrag='$belegnr' LIMIT 1"); if($recheck <= 0) { // Fall 1 keine RE und LS // -> stornieren und Geld zurueckueberweisen (Paypal, Kredit oder Bank) // geld wird ueber ipayment oder paypal zurueckgebucht!!! // negatives auftragssguthaben loescht auftragsguthaben $this->app->Tpl->Add('MESSAGE','
Achtung dem Kunden sofort das Geld überweisen!
'); } $msg = $this->app->erp->base64_url_encode('
Der Auftrag wurde storniert!
'); $this->app->erp->RunHook('auftrag_delete', 1, $id); if($intern){ return; } $this->app->Location->execute('index.php?module=auftrag&action=list&msg='.$msg); } if($intern){ return; } $name = $this->app->DB->Select("SELECT a.name FROM auftrag b INNER JOIN adresse a ON a.id=b.adresse WHERE b.id='$id' LIMIT 1"); $auftragarr = $this->app->DB->SelectRow("SELECT email,projekt FROM auftrag WHERE id='$id' LIMIT 1"); if(!empty($auftragarr)){ $email = $auftragarr['email'];//$this->app->DB->Select("SELECT email FROM auftrag WHERE id='$id' LIMIT 1"); $projekt = $auftragarr['projekt'];//$this->app->DB->Select("SELECT projekt FROM auftrag WHERE id='$id' LIMIT 1"); }else{ $email = ''; $projekt = 0; } if($projekt > 0){ $stornomail = $this->app->DB->Select("SELECT stornomail FROM projekt WHERE id='$projekt' LIMIT 1"); }else{ $stornomail = 0; } if($email!='') { $name =$name.' '.$email; } if($email!='' && $stornomail=='1') { $this->app->Tpl->Set('TAB1',"
Soll der Auftrag an $name jetzt storniert werden?    
"); } else { $this->app->Tpl->Set('TAB1',"
Soll der Auftrag an $name jetzt storniert werden?  
"); } $this->AuftragMenu(); $this->app->Tpl->Parse('PAGE','tabview.tpl'); } public function AuftragDeleteAusVersand() { $id = $this->app->Secure->GetGET('id'); //$rechnung = $this->app->DB->Select("SELECT rechnung FROM versand WHERE id='$id' LIMIT 1"); if($id > 0){ $lieferschein = $this->app->DB->Select("SELECT lieferschein FROM versand WHERE id='$id' LIMIT 1"); }else{ $lieferschein = 0; } if($lieferschein > 0){ $auftragid = $this->app->DB->Select("SELECT auftragid FROM lieferschein WHERE id='$lieferschein' LIMIT 1"); }else{ $auftragid = 0; } if($auftragid > 0){ $this->app->DB->Update("UPDATE auftrag SET rma=1,status='storniert' WHERE id='$auftragid' LIMIT 1"); } if($lieferschein > 0){ $auftrag = $this->app->DB->Select("SELECT auftragid FROM lieferschein WHERE id='$lieferschein' LIMIT 1"); }else{ $auftrag = 0; } // status aendern if($lieferschein > 0) { $this->app->DB->Update("UPDATE lieferschein SET versandart='rma',status='storniert' WHERE id='$lieferschein' LIMIT 1"); $this->app->DB->Delete("DELETE FROM lager_reserviert WHERE objekt='lieferschein' AND parameter='$lieferschein'"); $this->app->erp->LieferscheinProtokoll($lieferschein,'Lieferschein durch Auftrag aus Versand storniert'); } $this->app->erp->AuftragProtokoll($auftrag,'Auftrag aus Versand storniert'); // RMA anlegen $msg = $this->app->erp->base64_url_encode('
Der Auftrag wurde als RMA im Versand markiert!
'); $this->app->Location->execute("index.php?module=auftrag&action=edit&id=$auftrag&msg=$msg"); } public function AuftragProtokoll() { $this->AuftragMenu(); $id = $this->app->Secure->GetGET('id'); $tmp = new EasyTable($this->app); $tmp->Query("SELECT zeit,bearbeiter,grund FROM auftrag_protokoll WHERE auftrag='$id' ORDER by zeit DESC"); $tmp->DisplayNew('TAB1','Protokoll','noAction'); $this->app->Tpl->Parse('PAGE','tabview.tpl'); } public function AuftragProforma() { $id = $this->app->Secure->GetGET('id'); $this->app->erp->AuftragNeuberechnen($id); $projekt = $this->app->DB->Select("SELECT projekt FROM auftrag WHERE id='$id' LIMIT 1"); if(class_exists('AuftragPDFCustom')) { $Brief = new AuftragPDFCustom($this->app,$projekt,'proforma'); } else{ $Brief = new AuftragPDF($this->app,$projekt,'proforma'); } $Brief->GetAuftrag($id); $Brief->displayDocument(); $this->AuftragList(); } public function AuftragInlinePDF() { $id = $this->app->Secure->GetGET('id'); if($id > 0) { $this->app->erp->AuftragNeuberechnen($id); $auftragarr = $this->app->DB->SelectRow("SELECT projekt,schreibschutz FROM auftrag WHERE id='$id' LIMIT 1"); } if(!empty($auftragarr)) { $projekt = $auftragarr['projekt'];//$this->app->DB->Select("SELECT projekt FROM auftrag WHERE id='$id' LIMIT 1"); $schreibschutz = $auftragarr['schreibschutz'];//$this->app->DB->Select("SELECT schreibschutz FROM auftrag WHERE id='$id' LIMIT 1"); }else{ $projekt = 0; $schreibschutz = 0; } $frame = $this->app->Secure->GetGET('frame'); if($frame != ''){ $file = urlencode("../../../../index.php?module=auftrag&action=inlinepdf&id=$id"); echo ""; $this->app->ExitXentral(); } if(class_exists('AuftragPDFCustom')) { $Brief = new AuftragPDFCustom($this->app,$projekt); }else{ $Brief = new AuftragPDF($this->app,$projekt); } $Brief->GetAuftrag($id); $Brief->inlineDocument($schreibschutz); } public function AuftragPDF() { $id = $this->app->Secure->GetGET('id'); if($id > 0){ $this->app->erp->AuftragNeuberechnen($id); $auftragarr = $this->app->DB->SelectRow("SELECT projekt,schreibschutz FROM auftrag WHERE id='$id' LIMIT 1"); } if(!empty($auftragarr)) { $projekt = $auftragarr['projekt']; $schreibschutz = $auftragarr['schreibschutz']; }else{ $projekt = 0; $schreibschutz = 0; } if(class_exists('AuftragPDFCustom')) { $Brief = new AuftragPDFCustom($this->app,$projekt); }else{ $Brief = new AuftragPDF($this->app,$projekt); } $Brief->GetAuftrag($id); $Brief->displayDocument($schreibschutz); $this->AuftragList(); } public function AuftragMenu() { $id = $this->app->Secure->GetGET('id'); if($id > 0){ $this->app->erp->AuftragNeuberechnen($id); $auftragarr = $this->app->DB->SelectRow("SELECT belegnr,name, status FROM auftrag WHERE id='$id' LIMIT 1"); } $backurl = $this->app->Secure->GetGET('backurl'); $backurl = $this->app->erp->base64_url_decode($backurl); $belegnr = ''; $name = ''; $status = ''; if(!empty($auftragarr)) { $belegnr = $auftragarr['belegnr']; $name = $auftragarr['name']; $status = $auftragarr['status']; } if($belegnr=='0' || $belegnr=='') { $belegnr ='(Entwurf)'; } $this->app->Tpl->Set('KURZUEBERSCHRIFT2',"$name Auftrag $belegnr"); // status bestell if ($status==='angelegt') { $this->app->erp->MenuEintrag("index.php?module=auftrag&action=freigabe&id=$id","Freigabe"); } $this->app->erp->MenuEintrag("index.php?module=auftrag&action=edit&id=$id","Details"); if($status==='bestellt') { $this->app->Tpl->Add('TABS',"
  • Wareneingang
    Rückstände
  • "); $this->app->Tpl->Add('TABS',"
  • Mahnstufen
  • "); } $anzahldateien=''; if($id > 0) { $anzahldateien = $this->app->erp->AnzahlDateien('Auftrag',$id); $anzahldateien = $anzahldateien > 0?' ('.$anzahldateien.')':''; } $action = $this->app->Secure->GetGET('action'); $this->app->erp->MenuEintrag("index.php?module=auftrag&action=dateien&id=$id",'Dateien'.$anzahldateien); // $this->app->erp->MenuEintrag("index.php?module=auftrag&action=protokoll&id=$id","Protokoll"); if($this->app->erp->Firmendaten('auftrag_eantab')=='1'){ $this->app->erp->MenuEintrag('index.php?module=auftrag&action=ean&id='.$id, 'Barcodescanner'); } if($action==='abschicken' || $action==='zahlungsmahnungswesen'){ $this->app->erp->MenuEintrag("index.php?module=auftrag&action=edit&id=$id", 'Zurück zum Auftrag'); } else if($backurl==''){ $this->app->erp->MenuEintrag('index.php?module=auftrag&action=list', 'Zurück zur Übersicht'); } else{ $this->app->erp->MenuEintrag((string)$backurl, 'Zurück zur Übersicht'); } $this->app->erp->RunMenuHook('auftrag'); if($id) { $this->app->erp->RunMenuHook('auftrag_edit'); } } function AuftragPositionstabelle($parsetarget) { $this->app->YUI->TableSearch($parsetarget,'auftraegeoffene'); } public function AuftragPositionen() { $id = $this->app->Secure->GetGET('id'); $this->app->erp->AuftragNeuberechnen($id); $this->app->YUI->AARLGPositionen(false); } function DelAuftragStueckliste($id, $sid, $lvl = 0) { if($sid <= 0 || $id <= 0 || $lvl > 10){ return; } $unterartikel = $this->app->DB->SelectArr("SELECT * FROM auftrag_position WHERE explodiert_parent='$sid' ORDER BY sort"); if($unterartikel && count($unterartikel)>0 && $sid >0 && $id >0) { $cunterartikel = count($unterartikel); for($i=0;$i<$cunterartikel;$i++) { $sidexplodiert = $unterartikel[$i]['id']; if($sidexplodiert>0) { $sort = $this->app->DB->Select("SELECT sort FROM auftrag_position WHERE id='$sidexplodiert' LIMIT 1"); if($sort>0) { $this->app->DB->Delete("DELETE FROM auftrag_position WHERE id='$sidexplodiert' LIMIT 1"); $this->app->DB->Delete("DELETE FROM lager_reserviert WHERE parameter='$id' AND objekt='auftrag' AND artikel='".$unterartikel[$i]['artikel']."'"); $this->app->DB->Update("UPDATE auftrag_position SET sort=sort-1 WHERE auftrag='$id' AND sort > $sort"); $this->app->DB->Update("UPDATE beleg_zwischenpositionen SET pos = pos - 1 WHERE doctype = 'auftrag' AND doctypeid = '$id' AND pos >= ".($sort-1)." "); }else{ $this->app->DB->Delete("DELETE FROM auftrag_position WHERE id='$sidexplodiert' LIMIT 1"); $this->app->DB->Delete("DELETE FROM lager_reserviert WHERE parameter='$id' AND objekt='auftrag' AND artikel='".$unterartikel[$i]['artikel']."'"); } } $this->DelAuftragStueckliste($id, $sidexplodiert, $lvl + 1); $this->app->DB->Update( sprintf( 'UPDATE `artikel` SET `laststorage_changed` = NOW() WHERE `id` = %d', $unterartikel[$i]['artikel'] ) ); } // alle wirklich loeschen $this->app->DB->Delete("DELETE FROM auftrag_position WHERE explodiert_parent='$sid' AND auftrag='$id'"); } } public function DelAuftragPosition() { $sid = (int)$this->app->Secure->GetGET('sid'); $id = (int)$this->app->Secure->GetGET('id'); if($sid > 0){ $this->DelAuftragStueckliste($id, $sid); } $this->app->YUI->SortListEvent('del','auftrag_position','auftrag'); if($sid > 0) { $this->DelAuftragStueckliste($id, $sid); $this->app->erp->AuftragNeuberechnen($id); } $this->AuftragPositionen(); } public function CopyAuftragPosition() { $this->app->YUI->SortListEvent('copy','auftrag_position','auftrag'); $this->AuftragPositionen(); } public function UpAuftragPosition() { $this->app->YUI->SortListEvent('up','auftrag_position','auftrag'); $this->AuftragPositionen(); } public function DownAuftragPosition() { $this->app->YUI->SortListEvent('down','auftrag_position','auftrag'); $this->AuftragPositionen(); } public function AuftragCheckDisplayPopup() { $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(700,700); } else { // nach page $projekt = $this->app->DB->Select("SELECT projekt FROM auftrag WHERE id='$id' LIMIT 1"); $projektcheckname = $this->app->DB->Select("SELECT checkname FROM projekt WHERE id='$projekt' LIMIT 1"); include_once './plugins/class.'.$projektcheckname.'.php'; $tmp = new $projektcheckname($this->app); $tmp->CheckDisplay('PAGE',$id); $this->app->BuildNavigation=false; } } public function AuftragPositionenEditPopup() { $cmd = $this->app->Secure->GetGET('cmd'); if($cmd === 'getopenaccordions') { $accordions = $this->app->Secure->GetPOST('accordions'); $accordions = explode('*|*',$accordions); foreach($accordions as $k => $v) { if(empty($v)) { unset($accordions[$k]); }else{ $accordions[$k] = 'auftrag_accordion'.$v; } } $ret = []; if(!empty($accordions)) { $accordions = $this->app->User->GetParameter($accordions); if(!empty($accordions)) { foreach($accordions as $v) { if(!empty($v['value'])) { $ret['accordions'][] = str_replace('auftrag_accordion','',$v['name']); } } } } echo json_encode($ret); $this->app->ExitXentral(); } if($cmd === 'setaccordion') { $name = $this->app->Secure->GetPOST('name'); $active = $this->app->Secure->GetPOST('active'); $this->app->User->SetParameter('auftrag_accordion'.$name, $active); echo json_encode(array('success'=>1)); $this->app->ExitXentral(); } $id = $this->app->Secure->GetGET('id'); $fmodul = $this->app->Secure->GetGET('fmodul'); $artikel= $this->app->DB->Select("SELECT artikel FROM auftrag_position WHERE id='$id' LIMIT 1"); // nach page inhalt des dialogs ausgeben $filename = 'widgets/widget.auftag_position_custom.php'; if(is_file($filename)) { include_once $filename; $widget = new WidgetAuftrag_positionCustom($this->app,'PAGE'); } else { $widget = new WidgetAuftrag_position($this->app,'PAGE'); } $sid= $this->app->DB->Select("SELECT auftrag FROM auftrag_position WHERE id='$id' LIMIT 1"); $widget->form->SpecialActionAfterExecute('close_refresh', "index.php?module=auftrag&action=positionen&id=$sid&fmodul=$fmodul"); $widget->Edit(); $this->app->BuildNavigation=false; } function AuftragEdit() { $action = $this->app->Secure->GetGET("action"); $id = $this->app->Secure->GetGET("id"); $storno = $this->app->Secure->GetGET("storno"); // zum aendern vom Vertrieb $sid = $this->app->Secure->GetGET("sid"); $cmd = $this->app->Secure->GetGET("cmd"); if($this->app->Secure->GetPOST('resetextsoll')) { $this->app->DB->Update( sprintf( 'UPDATE auftrag SET extsoll = 0 WHERE id = %d', $id ) ); $this->app->erp->AuftragNeuberechnen($id); } $this->app->erp->RunHook('auftrag_edit_hook1',1, $id); if($cmd === 'dadown') { $erg['status'] = 0; $daid = $this->app->Secure->GetPOST("da_id"); $check = $this->app->DB->SelectArr("SELECT ds.* FROM datei_stichwoerter ds INNER JOIN datei d on ds.datei = d.id WHERE ds.id = '$daid' and d.geloescht <> 1 LIMIT 1"); if($check) { $sort = $check[0]['sort']+1; if($sort > 1) { $check2 = $this->app->DB->SelectArr("SELECT ds.* FROM datei_stichwoerter ds INNER JOIN datei d on ds.datei = d.id WHERE ds.objekt like 'angebot' AND ds.sort = '$sort' AND d.geloescht <> 1 AND ds.parameter = '$id' LIMIT 1"); if($check2) { $erg['status'] = 1; $erg['from'] = $check2[0]['id']; $this->app->DB->Update("UPDATE datei_stichwoerter SET sort = sort + 1 WHERE id = '$daid' LIMIT 1"); $this->app->DB->Update("UPDATE datei_stichwoerter SET sort = sort - 1 WHERE id = '".$check2[0]['id']."' LIMIT 1"); } } } echo json_encode($erg); $this->app->ExitXentral(); } if($cmd === 'daup') { $erg['status'] = 0; $daid = $this->app->Secure->GetPOST("da_id"); $check = $this->app->DB->SelectArr("SELECT ds.* FROM datei_stichwoerter ds INNER JOIN datei d on ds.datei = d.id WHERE ds.id = '$daid' and d.geloescht <> 1 LIMIT 1"); if($check) { $sort = $check[0]['sort']-1; if($sort > 0) { $check2 = $this->app->DB->SelectArr("SELECT ds.* FROM datei_stichwoerter ds INNER JOIN datei d on ds.datei = d.id WHERE ds.objekt like 'auftrag' AND ds.sort = '$sort' AND d.geloescht <> 1 AND ds.parameter = '$id' LIMIT 1"); if($check2) { $erg['status'] = 1; $erg['from'] = $check2[0]['id']; $this->app->DB->Update("UPDATE datei_stichwoerter SET sort = sort - 1 WHERE id = '$daid' LIMIT 1"); $this->app->DB->Update("UPDATE datei_stichwoerter SET sort = sort + 1 WHERE id = '".$check2[0]['id']."' LIMIT 1"); } } } echo json_encode($erg); $this->app->ExitXentral(); } if($this->app->erp->VertriebAendern('auftrag',$id,$cmd,$sid)){ return; } if($this->app->erp->InnendienstAendern('auftrag',$id,$cmd,$sid)){ return; } if($this->app->erp->DisableModul('auftrag',$id)) { //$this->app->erp->MenuEintrag("index.php?module=auftrag&action=list","Zurück zur Übersicht"); $this->AuftragMenu(); return; } $adresse = $this->app->DB->Select("SELECT adresse FROM auftrag WHERE id='$id' LIMIT 1"); if($adresse <=0) { $this->app->Tpl->Add('JAVASCRIPT','$(document).ready(function() { if(document.getElementById("adresse"))document.getElementById("adresse").focus(); });'); $this->app->Tpl->Set('MESSAGE',"
    Achtung! Dieses Dokument ist mit keiner Kunden-Nr. verlinkt. Bitte geben Sie die Kundennummer an und klicken Sie übernehmen oder Speichern!
    "); } $this->app->erp->InfoAuftragsErfassung("auftrag",$id); $teilArr = $this->app->DB->SelectRow( sprintf( 'SELECT teillieferungvon, teillieferungnummer, belegnr FROM auftrag WHERE id=%d LIMIT 1', $id ) ); $teillieferungvon= $teilArr['teillieferungvon'];//$this->app->DB->Select("SELECT teillieferungvon FROM auftrag WHERE id='$id' LIMIT 1"); $teillieferungnummer= $teilArr['teillieferungnummer'];//$this->app->DB->Select("SELECT teillieferungnummer FROM auftrag WHERE id='$id' LIMIT 1"); $hauptid = $id; $timeout = 0; while($timeout < 100) { $checkteillieferungvon = $this->app->DB->Select( sprintf( 'SELECT teillieferungvon FROM auftrag WHERE id=%d LIMIT 1', $hauptid ) ); if($checkteillieferungvon > 0) { $hauptid = $checkteillieferungvon; } else { break; } $timeout++; } $teillieferungnummermax = 0; $anzahlteillieferungen = $this->app->DB->SelectArr( sprintf( 'SELECT id,belegnr,teillieferungnummer FROM auftrag WHERE teillieferungvon=%d ORDER BY belegnr', $id ) ); if(!empty($anzahlteillieferungen)) { $canzahlteillieferungen = count($anzahlteillieferungen); for($ati=0;$ati<$canzahlteillieferungen;$ati++) { if($canzahlteillieferungen[$ati]['teillieferungnummer'] + 1 > $teillieferungnummermax) { $teillieferungnummermax = $canzahlteillieferungen[$ati]['teillieferungnummer'] + 1; } $this->app->Tpl->Add( 'MESSAGE', '
    Zu diesem Auftrag gehört Teilauftrag Nr. ' .$anzahlteillieferungen[$ati]['belegnr'].'
    ' ); } } $teillieferung_von_auftrag_nummer = $teilArr['belegnr']; if($teillieferungvon>0) { if($hauptid != $id) { $teillieferungnummermax = $this->app->DB->Select( "SELECT MAX(teillieferungnummer)+1 FROM auftrag WHERE teillieferungvon='$hauptid' LIMIT 1" ); $teillieferung_von_auftrag_nummer = $this->app->DB->Select( "SELECT belegnr FROM auftrag WHERE id='$hauptid' LIMIT 1" ); } $this->app->Tpl->Add( 'MESSAGE', "
    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" .(count($check) == 1?'t':'en') ." die Bestellung".(count($check) == 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',"
    Der Auftrag wurde noch nicht versendet!
    "); } } if($liefersperre=='1' && ($status==='freigegeben' || $status==='angelegt')) { $this->app->Tpl->Add('MESSAGE','
    Achtung: Der Kunde hat eine Liefersperre!
    '); } $this->app->erp->AuftragEinzelnBerechnen($id); $this->app->erp->AuftragNeuberechnen($id); $this->app->erp->AuftragAutoversandBerechnen($id); // heute wieder eingebaut 09.03.2019 BS weil Termin ampel falsch $this->app->erp->DisableVerband(); $this->AuftragMiniDetail('MINIDETAIL',true); $icons = $this->app->YUI->IconsSQL(); if(strpos($icons,'aac.status')) { $icons = $this->app->DB->Select("SELECT $icons FROM auftrag a LEFT JOIN `auftragsampel_auftrag_cache` aac ON a.id = aac.auftrag WHERE a.id='$id' LIMIT 1"); } else{ $icons = $this->app->DB->Select("SELECT $icons FROM auftrag a WHERE a.id='$id' LIMIT 1"); } $this->app->Tpl->Set('STATUSICONS',$icons); $this->app->YUI->AARLGPositionen(); $orderRow = $this->app->DB->SelectRow(sprintf('SELECT * FROM auftrag WHERE id = %d', $id)); $status= $orderRow['status'];//$this->app->DB->Select("SELECT status FROM auftrag WHERE id='$id' LIMIT 1"); if($status=='') { $this->app->DB->Update("UPDATE auftrag SET status='angelegt' WHERE id='$id' LIMIT 1"); $orderRow['status'] = $this->app->DB->Select(sprintf('SELECT status FROM auftrag WHERE id = %d', $id)); } $tmpcheckversand = $orderRow['versandart'];//$this->app->DB->Select("SELECT versandart FROM auftrag WHERE id='$id' LIMIT 1"); if($tmpcheckversand==='packstation' && $orderRow['abweichendelieferadresse'] != 0) { $this->app->DB->Update("UPDATE auftrag SET abweichendelieferadresse='0' WHERE id='$id' LIMIT 1"); } $status = $orderRow['status'];//$this->app->DB->Select("SELECT status FROM auftrag WHERE id='$id' LIMIT 1"); $nummer = $orderRow['belegnr'];//$this->app->DB->Select("SELECT belegnr FROM auftrag WHERE id='$id' LIMIT 1"); $adresse = $orderRow['adresse'];//$this->app->DB->Select("SELECT adresse FROM auftrag WHERE id='$id' LIMIT 1"); $lieferant = $orderRow['lieferant'];//$this->app->DB->Select("SELECT lieferant FROM auftrag WHERE id='$id' LIMIT 1"); $kundennummer = $this->app->DB->Select("SELECT kundennummer FROM adresse WHERE id='$adresse' LIMIT 1"); $lieferantenretoure = $orderRow['lieferantenauftrag'];//$this->app->DB->Select("SELECT lieferantenauftrag FROM auftrag WHERE id='$id' LIMIT 1"); if($lieferantenretoure=='1' && $lieferant<=0) { $this->app->Tpl->Add('JAVASCRIPT','$(document).ready(function() { if(document.getElementById("adresse"))document.getElementById("adresse").focus(); });'); $this->app->Tpl->Set('MESSAGE',"
    Pflichtfeld! Bitte geben Sie eine Lieferanten-Nr. an!
    "); } else if ($adresse <=0 && $lieferantenretoure!='1') { $this->app->Tpl->Add('JAVASCRIPT','$(document).ready(function() { if(document.getElementById("adresse"))document.getElementById("adresse").focus(); });'); $this->app->Tpl->Set('MESSAGE',"
    Pflichtfeld! Bitte geben Sie eine Kunden-Nr. an!
    "); } if($schreibschutz!='1')// && $this->app->erp->RechteVorhanden("auftrag","schreibschutz")) { $this->app->erp->AnsprechpartnerButton($adresse); $this->app->erp->LieferadresseButton($adresse); $this->app->erp->AnsprechpartnerAlsLieferadresseButton($adresse); $this->app->erp->AdresseAlsLieferadresseButton($adresse); } if($nummer!='') { $this->app->Tpl->Set('NUMMER',$nummer); if($this->app->erp->RechteVorhanden('adresse','edit')){ $this->app->Tpl->Set( 'KUNDE', "   Kd-Nr. " . $kundennummer . "" ); } else{ $this->app->Tpl->Set( 'KUNDE', '   Kd-Nr. ' . $kundennummer ); } } $this->app->Tpl->Set('ICONMENU',$this->AuftragIconMenu($id)); $this->app->Tpl->Set('ICONMENU2',$this->AuftragIconMenu($id,2)); if($status==='angelegt') { $this->app->Tpl->Set('ABGESCHLOSSENENABLE',""); //TODO } if($status!=='storniert') { $this->app->Tpl->Set('STORNOENABLE',''); } $stornobezahlt = $orderRow['stornobezahlt'];// $this->app->DB->Select("SELECT stornobezahlt FROM auftrag WHERE id='$id' LIMIT 1"); if($storno!=='abschluss' && $stornobezahlt==0) { $this->app->Tpl->Set('STORNORETOUREENABLE',''); } else { $this->app->Tpl->Set('HIDDENFIELD',""); // bearbeiter $stornobezahltvon = $orderRow['stornobezahltvon'];//$this->app->DB->Select("SELECT stornobezahltvon FROM auftrag WHERE id='$id' LIMIT 1"); $stornobezahltam = $orderRow['stornobezahltam'];//$this->app->DB->Select("SELECT stornobezahltam FROM auftrag WHERE id='$id' LIMIT 1"); if($stornobezahltvon==''){ $this->app->DB->Update( "UPDATE auftrag SET stornobezahltvon='" . $this->app->DB->real_escape_string($this->app->User->GetName()) . "' WHERE id='$id' LIMIT 1" ); } if($stornobezahltam=="0000-00-00"){ $this->app->DB->Update("UPDATE auftrag SET stornobezahltam=NOW() WHERE id='$id' LIMIT 1"); } } $this->AuftragAmpel($id,'AMPEL'); $optional = ''; $lieferscheine = $this->app->DB->SelectPairs( "SELECT id,belegnr FROM lieferschein WHERE auftragid='$id' AND auftragid > 0" ); $deliveryNoteIds = array_keys($lieferscheine); $deliveryNoteIdsImplode = implode(',', $deliveryNoteIds); if(!empty($lieferscheine)) { foreach($lieferscheine as $deliveryNoteId => $deliveryNoteNumber) { $optional .= " "; } } $rechnungid = $this->app->DB->Select("SELECT rechnungid FROM auftrag WHERE id = '$id' LIMIT 1"); $rechnungen = $this->app->DB->SelectPairs( "SELECT id,belegnr FROM rechnung WHERE (auftragid='$id' AND auftragid > 0) OR id = '$rechnungid'" ); if(!empty($rechnungen)) { foreach($rechnungen as $invoiceId => $invoiceNumber) { $optional .= " "; } } $projekt = $this->app->DB->Select("SELECT projekt from auftrag where id = '$id' LIMIT 1"); if($schreibschutz=='1' && $this->app->erp->RechteVorhanden('auftrag','schreibschutz')) { $this->app->Tpl->Add( 'MESSAGE', "
    Dieser Auftrag ist schreibgeschützt und darf daher nicht bearbeitet werden!  $optional
    " ); // $this->app->erp->CommonReadonly(); } else { if(isset($optional) && (string)$optional !== '') { $this->app->Tpl->Add( 'MESSAGE', "
    Zu diesem Auftrag gibt es folgende Dokumente.  $optional
    " ); } } if($schreibschutz=='1') { $this->app->erp->CommonReadonly(); } if($schreibschutz != '1'){ if($this->app->erp->Firmendaten('schnellanlegen') == '1'){ $this->app->Tpl->Set('BUTTON_UEBERNEHMEN', ' '); $this->app->Tpl->Set('BUTTON_UEBERNEHMEN2', ' '); }else{ $this->app->Tpl->Set('BUTTON_UEBERNEHMEN', ' '); $this->app->Tpl->Set('BUTTON_UEBERNEHMEN2', ' '); } } // immer wenn sich der lieferant genändert hat standartwerte setzen if($this->app->Secure->GetPOST('adresse')!='') { $tmp = $this->app->Secure->GetPOST('adresse'); $kundennummer = $this->app->erp->FirstTillSpace($tmp); $filter_projekt = $this->app->DB->Select("SELECT projekt FROM auftrag WHERE id = '$id' LIMIT 1"); $adresse = $this->app->DB->Select( "SELECT id FROM adresse WHERE kundennummer='$kundennummer' AND geloescht=0 " .$this->app->erp->ProjektRechte('projekt', true, 'vertrieb')." ORDER by ".($filter_projekt?" projekt = '$filter_projekt' DESC, ":"")." projekt LIMIT 1" ); $uebernehmen =$this->app->Secure->GetPOST('uebernehmen'); if($uebernehmen=='1' && $schreibschutz != '1') { // nur neuladen bei tastendruck auf uebernehmen // FRAGEN!!!! $this->app->erp->LoadAuftragStandardwerte($id,$adresse); $projekt = $this->app->DB->Select("SELECT projekt FROM auftrag WHERE id = '$id' LIMIT 1"); if($projekt != $filter_projekt) { $deactivateAutoversand = (int)$this->app->erp->Projektdaten($projekt,'deactivateautoshipping'); if($deactivateAutoversand) { $this->app->DB->Update( sprintf( 'UPDATE auftrag SET autoversand = 0 WHERE autoversand = 1 AND schreibschutz = 0 AND id = %d', $id ) ); } } $projektlager = $this->app->DB->Select("SELECT standardlager FROM projekt WHERE id = '$projekt' LIMIT 1"); $this->app->DB->Update("UPDATE auftrag SET standardlager = '$projektlager' WHERE id = '$id' LIMIT 1"); $this->app->DB->Update("UPDATE auftrag SET lieferantenauftrag=0 WHERE id='$id'"); $this->app->Location->execute("index.php?module=auftrag&action=edit&id=$id"); } } if($this->app->Secure->GetPOST('lieferant')!='') { $tmplieferant = $this->app->Secure->GetPOST('lieferant'); $lieferantennummer = $this->app->erp->FirstTillSpace($tmplieferant); $adresselieferant = $this->app->DB->Select("SELECT id FROM adresse WHERE lieferantennummer='$lieferantennummer' AND lieferantennummer!='' AND geloescht=0 LIMIT 1"); $uebernehmen2 =$this->app->Secure->GetPOST('uebernehmen2'); if($uebernehmen2=='1' && $schreibschutz != '1') { // nur neuladen bei tastendruck auf uebernehmen // FRAGEN!!!! $this->app->DB->Update("UPDATE auftrag SET lieferantenauftrag=1 WHERE id='$id'"); $this->app->erp->LoadAuftragStandardwerte($id,$adresselieferant,true); $this->app->Location->execute("index.php?module=auftrag&action=edit&id=$id"); } } // easy table mit arbeitspaketen YUI als template $table = new EasyTable($this->app); $table->Query( "SELECT ap.bezeichnung as artikel, ap.nummer as Nummer, ap.menge, (SELECT TRIM(SUM(l.menge))+0 FROM lager_platz_inhalt l WHERE l.artikel=ap.artikel ) as Lagerbestand, ap.geliefert ausgeliefert,ap.vpe as VPE FROM auftrag_position ap WHERE ap.auftrag='$id'" ); $table->DisplayNew('POSITIONEN','VPE','noAction'); $summe = $this->app->DB->Select( "SELECT FORMAT(SUM(menge*preis),2) FROM auftrag_position WHERE auftrag='$id'" ); $waehrung = $this->app->DB->Select( "SELECT waehrung FROM auftrag_position WHERE auftrag='$id' LIMIT 1" ); $orderRow = $this->app->DB->SelectRow( sprintf( 'SELECT * FROM auftrag WHERE id = %d', $id ) ); $summebrutto = $orderRow['gesamtsumme'];//$this->app->DB->Select("SELECT gesamtsumme FROM auftrag WHERE id='$id' LIMIT 1"); $ust_befreit_check = $orderRow['ust_befreit'];//$this->app->DB->Select("SELECT ust_befreit FROM auftrag WHERE id='$id' LIMIT 1"); if($ust_befreit_check==1){ $tmp = 'Kunde ist UST befreit'; } else{ $tmp = 'Kunde zahlt mit UST'; } if($summe > 0){ $this->app->Tpl->Add( 'POSITIONEN', "
    Zu zahlen: $summe (netto) $summebrutto (brutto) $waehrung ($tmp)  " ); } $vertrieb = $orderRow['vertrieb'];//$this->app->DB->Select("SELECT vertrieb FROM auftrag WHERE id='$id' LIMIT 1"); $this->app->Tpl->Set('VERTRIEB',""); $belegnr= $orderRow['belegnr'];//$this->app->DB->Select("SELECT belegnr FROM auftrag WHERE id='$id' LIMIT 1"); $this->app->Tpl->Set('BELEGNR',""); $status = $orderRow['status'];//$this->app->DB->Select("SELECT status FROM auftrag WHERE id='$id' LIMIT 1"); $this->app->Tpl->Set('STATUS',""); // ENDE //alle RE und LS zu diesem Auftrag $auftragsnummer = $orderRow['belegnr'];//$this->app->DB->Select("SELECT belegnr FROM auftrag WHERE id='$id' LIMIT 1"); $anzahl = $this->app->DB->Select( "SELECT COUNT(r.belegnr) FROM rechnung r WHERE r.adresse='$adresse' AND r.auftrag='$auftragsnummer' AND r.auftrag!=''"); if($anzahl >0) { $this->app->Tpl->Set('AUFTRAGSDOKUMENTE',"
    Rechnungen und Lieferscheine"); $table = new EasyTable($this->app); $table->Query( "SELECT r.belegnr as rechnung, DATE_FORMAT(r.datum,'%d.%m.%Y') as ausgang, l.belegnr as lieferschein, r.soll as betrag FROM rechnung r LEFT JOIN lieferschein l ON r.lieferschein=l.id WHERE r.adresse='$adresse' AND r.auftrag='$auftragsnummer' AND r.auftrag!=''" ); $table->DisplayNew('AUFTRAGSDOKUMENTE',"Betrag","noAction"); $this->app->Tpl->Add('AUFTRAGSDOKUMENTE',"
    "); } //suche alle LS zu diesem Auftrag if($auftragsnummer>0) { $trackingInfo = $this->AuftragTrackingTabelle(empty($deliveryNoteIds)?0: $id); $this->app->Tpl->Set('VERSAND', $trackingInfo); } // UST $ust_ok = $orderRow['ust_ok'];//$this->app->DB->Select("SELECT ust_ok FROM auftrag WHERE id='$id' LIMIT 1"); $ust_befreit = $orderRow['ust_befreit'];//$this->app->DB->Select("SELECT ust_befreit FROM auftrag WHERE id='$id' LIMIT 1"); $ustprfid = $this->app->DB->Select( "SELECT id FROM ustprf WHERE DATE_FORMAT(datum_online,'%Y-%m-%d')=DATE_FORMAT(NOW(),'%Y-%m-%d') AND adresse='$adresse' AND status='erfolgreich' LIMIT 1" ); if($ust_befreit==0) { $this->app->Tpl->Set('USTPRUEFUNG','Abgabe in Inland'); } else if ($ust_befreit==1) { if($ust_ok == 1) { $datum = $this->app->DB->Select("SELECT briefbestellt FROM ustprf WHERE id='$ustprfid' LIMIT 1"); $datum = $this->app->String->Convert($datum,"%1-%2-%3","%3.%2.%1"); $this->app->Tpl->Set('USTPRUEFUNG',"EU-Lieferung mit Pruefung
    Brief bestellt: $datum"); } else{ $this->app->Tpl->Set('USTPRUEFUNG', "Pruefung notwendig! (Starten)"); } } else { if($ust_ok == 1) { $this->app->Tpl->Set('USTPRUEFUNG', 'Freigabe Export (Drittland)'); } else{ $this->app->Tpl->Set('USTPRUEFUNG', 'Fehlende Freigabe Export!'); } } $versandart = $orderRow['versandart'];// $this->app->DB->Select("SELECT versandart FROM auftrag WHERE id='$id' LIMIT 1"); if($this->app->Secure->GetPOST('versandart')!='') { $versandart = $this->app->Secure->GetPOST('versandart'); } $this->app->Tpl->Set('PACKSTATION','none'); if($versandart==='packstation') { $this->app->Tpl->Set('PACKSTATION',''); } $abweichendelieferadresse= $orderRow['abweichendelieferadresse'];//$this->app->DB->Select("SELECT abweichendelieferadresse FROM auftrag WHERE id='$id' LIMIT 1"); if($this->app->Secure->GetPOST('abweichendelieferadresse')!='') { $versandart = $this->app->Secure->GetPOST('abweichendelieferadresse'); } $this->app->Tpl->Set('ABWEICHENDELIEFERADRESSESTYLE','none'); if($abweichendelieferadresse=='1') { $this->app->Tpl->Set('ABWEICHENDELIEFERADRESSESTYLE',''); } if($id && $status !== 'storniert' && $auftragsnummer && $this->app->erp->RechteVorhanden('auftrag','paypal') && false !== $this->app->erp->SendPaypalFromAuftrag($id, true) ) { $this->app->Tpl->Add( 'BUTTON_UEBERNEHMEN', '' ); } $this->app->Tpl->Set('AKTIV_TAB1','selected'); $sollExtSoll = $this->app->DB->SelectRow( sprintf( "SELECT extsoll, gesamtsumme FROM auftrag WHERE id = %d AND schreibschutz = 0 AND status = 'abgeschlossen' AND extsoll <> 0", $id ) ); if(!empty($sollExtSoll['extsoll']) && $sollExtSoll['extsoll'] == $sollExtSoll['gesamtsumme']) { $sollExtSoll['gesamtsumme'] = $this->app->DB->Select( sprintf( 'SELECT ROUND(SUM(`umsatz_brutto_gesamt`),2) FROM `auftrag_position` WHERE `auftrag` = %d ', $id ) ); } if(!empty($sollExtSoll) && $sollExtSoll['gesamtsumme'] != $sollExtSoll['extsoll']) { $extsoll = $sollExtSoll['extsoll']; $this->app->Tpl->Add( 'MESSAGE', '
    Die Gesamtsumme stimmt nicht mehr mit ursprünglich festgelegten Betrag '. number_format($extsoll,2,',','.'). ' überein
    ' ); } parent::AuftragEdit(); $this->app->erp->CheckBearbeiter($id,'auftrag'); $this->app->erp->CheckVertrieb($id,'auftrag'); if($this->app->Secure->GetPOST('speichern')!='' && $storno==''){ $msg = $this->app->Secure->GetGET('msg'); if($this->app->Secure->GetGET('msg')==''){ $msg .= $this->app->Tpl->Get('MESSAGE').' '; $msg = $this->app->erp->base64_url_encode($msg); } $this->app->Location->execute( "index.php?module=auftrag&action=edit&id=$id&msg=$msg" .($this->app->Secure->GetGET('msgid')?'&msgid='.(int)$this->app->Secure->GetGET('msgid'):'') ); } if ($this->app->Secure->GetPOST('speichern')!='' && $storno==='abschluss'){ //header("Location: index.php?module=stornierungen&action=list"); $this->app->ExitXentral(); } if($this->app->Secure->GetPOST('weiter')!='') { $this->app->Location->execute("index.php?module=auftrag&action=positionen&id=$id"); } $this->AuftragMenu(); } function AuftragUstStart() { $frame = $this->app->Secure->GetGET("frame"); if($frame=="false") { // hier nur fenster größe anpassen $this->app->YUI->IframeDialog(600,320); } else { $this->app->BuildNavigation=false; } } function AuftragCreate() { //$this->app->Tpl->Add(KURZUEBERSCHRIFT,"Auftrag"); $this->app->erp->MenuEintrag("index.php?module=auftrag&action=list","Zurück zur Übersicht"); $anlegen = $this->app->Secure->GetGET("anlegen"); if($this->app->erp->Firmendaten("schnellanlegen")=="1" && $anlegen!="1") { $this->app->Location->execute("index.php?module=auftrag&action=create&anlegen=1"); } if($anlegen != '') { $id = $this->app->erp->CreateAuftrag(); $deactivateautoshipping = $this->app->DB->Select( sprintf( 'SELECT pr.deactivateautoshipping FROM auftrag AS o INNER JOIN projekt AS pr ON o.projekt = pr.id WHERE o.id = %d', $id ) ); if($deactivateautoshipping) { $this->app->DB->Update( sprintf( 'UPDATE auftrag SET autoversand = 0 WHERE id = %d', $id ) ); } $this->app->Location->execute("index.php?module=auftrag&action=edit&id=$id"); } $this->app->Tpl->Set('MESSAGE',"
    Möchten Sie ein Auftrag jetzt anlegen?  

    "); $this->app->Tpl->Set('TAB1',"

    Aufträge in Bearbeitung

    Offene Aufträge, die durch andere Mitarbeiter in Bearbeitung sind.

    [AUFTRAGE]"); $this->app->Tpl->Set('AKTIV_TAB1',"selected"); $this->app->YUI->TableSearch('AUFTRAGE',"auftraegeinbearbeitung"); $this->app->Tpl->Parse('PAGE',"tabview.tpl"); } function AuftragReservieren() { $id = $this->app->Secure->GetGET('id'); $this->app->erp->AuftragEinzelnBerechnen($id,true); $msg = $this->app->erp->base64_url_encode("
    Artilel für diesen Auftrag reserviert!
    "); $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;$iapp->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 = count($auftraegemarkiert); 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
    ' ); } } else{ $this->app->Tpl->Set('VORTABS3UEBERSCHRIFT',''); } $this->app->Tpl->Set('SELDRUCKERVERSAND', $this->app->erp->GetSelectDrucker($this->app->User->GetParameter('rechnung_list_drucker'))); if(!$autoshipmentEnabled) { $this->app->Tpl->Parse('PAGE','auftraguebersicht.tpl'); return; } if($this->app->erp->RechteVorhanden('auftrag','berechnen')) { $this->app->Tpl->Set('AUTOBERECHNEN',''); }else{ $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]
    '); } else{ $this->app->Tpl->Add('AUTOVERSANDBERECHNEN','
    Die letzte Berechnung der Auftragsampeln wurde noch nicht ermittelt. '.$infolink.' [AUTOBERECHNEN]
    '); } $this->app->YUI->TableSearch('TAB2','auftraegeoffeneauto'); $this->app->Tpl->Parse('PAGE','auftrag_versandzentrum.tpl'); } public function AuftragList() { if($this->app->Secure->GetPOST('ausfuehren') && $this->app->erp->RechteVorhanden('auftrag', 'edit')) { $drucker = $this->app->Secure->GetPOST('seldrucker'); $aktion = $this->app->Secure->GetPOST('sel_aktion'); $auswahl = $this->app->Secure->GetPOST('auswahl'); $selectedIds = []; if(!empty($auswahl)) { foreach($auswahl as $selectedId) { $selectedId = (int)$selectedId; if($selectedId > 0) { $selectedIds[] = $selectedId; } } } if($drucker > 0) { $this->app->erp->BriefpapierHintergrundDisable($drucker); } if(is_array($auswahl)) { switch($aktion) { case 'stapelproduktionweiter': $error_artikel = ''; foreach($selectedIds as $v) { $weiteralsproduktion = $this->AuftragProduktion($v,true); /** @var Produktion $produktion */ $produktion = $this->app->erp->LoadModul('produktion'); $produktion->ProduktionFreigabe($weiteralsproduktion); if(!is_int($weiteralsproduktion)){ $auftragsnummer = $this->app->DB->Select("SELECT belegnr FROM auftrag WHERE id = '$v'"); $error_artikel .= $auftragsnummer . ', '; } } $error_artikel = rtrim($error_artikel, ', '); if($error_artikel != '') { $msg = $this->app->erp->base64_url_encode('
    Der Auftrag kann nicht als Produktion weitergeführt werden, da im Auftrag $error_artikel Artikel nicht als Produktionsartikel markiert sind!
    '); }else { $msg = $this->app->erp->base64_url_encode('
    Die Aufträge wurden als Produktion weitergeführt.
    '); } $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(count($tmpfile) > 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); } } }