diff --git a/upgrade/data/db_schema.json b/upgrade/data/db_schema.json index b9527d97..ba830e9c 100644 --- a/upgrade/data/db_schema.json +++ b/upgrade/data/db_schema.json @@ -50440,6 +50440,17 @@ "Privileges": "select,insert,update,references", "Comment": "" }, + { + "Field": "ausgelagert", + "Type": "int(1)", + "Collation": null, + "Null": "NO", + "Key": "", + "Default": "0", + "Extra": "", + "Privileges": "select,insert,update,references", + "Comment": "" + }, { "Field": "sprache", "Type": "varchar(32)", diff --git a/www/lib/class.erpapi.php b/www/lib/class.erpapi.php index 1d37cb17..abd385be 100644 --- a/www/lib/class.erpapi.php +++ b/www/lib/class.erpapi.php @@ -3028,7 +3028,7 @@ function LieferscheinEinlagern($id,$grund="Lieferschein Einlagern", $lpiids = nu // @refactor LagerBeleg Modul // Returns Array: // storageMovements => array('lager_platz', 'artikel', 'menge'); - function LieferscheinAuslagern($lieferschein,$anzeige_lagerplaetze_in_lieferschein=false, $standardlager = 0, $belegtyp = 'lieferschein', $chargenmhdnachprojekt = 0, $forceseriennummerngeliefertsetzen = false,$nurrestmenge = false, $lager_platz_vpe = 0, $lpiid = 0) + function LieferscheinAuslagern($lieferschein,$anzeige_lagerplaetze_in_lieferschein=false, $standardlager = 0, $belegtyp = 'lieferschein', $chargenmhdnachprojekt = 0, $forceseriennummerngeliefertsetzen = false,$nurrestmenge = false, $lager_platz_vpe = 0, $lpiid = 0, $simulieren = false) { if($lieferschein <= 0) { return; @@ -3468,77 +3468,87 @@ function LieferscheinEinlagern($id,$grund="Lieferschein Einlagern", $lpiids = nu break; } - $this->LagerAuslagernRegal($artikel,$lager_max[0]['lager_platz'],$menge_auslagern,$projekt,ucfirst($belegtyp)." $belegnr","",$belegtyp,$lieferschein, $lager_max[0]['lager_platz_vpe'], $lager_max[0]['id']); - $storageLocations[] = $lager_max[0]['lager_platz']; - if($anzeige_lagerplaetze_in_lieferschein){ - $this->LagerAuslagernText($artikel, $subid, $lager_max[0]['lager_platz'], $menge_auslagern, $belegtyp); - } else { - $this->LagerAuslagernObjektLagerPlatz($artikel, $subid, $lager_max[0]['lager_platz'], $menge_auslagern, $belegtyp); - } - $regal_name = $this->app->DB->Select("SELECT kurzbezeichnung FROM lager_platz WHERE id='".$lager_max[0]['lager_platz']."' LIMIT 1"); - $lager_string .= $regal_name."(".(float)$menge_auslagern.") "; - if(!$nurrestmenge){ - $this->LagerAuslagernRegalMHDCHARGESRN($artikel,$lager_max[0]['lager_platz'],$menge_auslagern,$projekt,ucfirst($belegtyp)." $belegnr","",$belegtyp,$lieferschein,$subid, $chargenauslagern, $mhdauslagern, $seriennummernauslagern); - } - $restmenge = round($restmenge - $menge_auslagern, 8); - $storageMovements[] = array('lager_platz' => $lager_max[0]['lager_platz'], 'artikel' => $artikel,'menge' => $menge_auslagern); - } - } - $geliefert = $menge; - if($nurrestmenge && $belegtyp=='produktion') { - $geliefert = $menge + $artikelarr[$i]['geliefert_menge']; - } - $artikelhatseriennummer = $this->app->DB->Select("SELECT seriennummern FROM artikel WHERE id='".$artikel."' LIMIT 1"); - if($belegtyp == 'produktion') - { - $this->app->DB->Update("UPDATE ".$belegtyp."_position SET geliefert_menge='$geliefert', geliefert = 1 WHERE id='$subid' LIMIT 1"); - }else{ - - if($belegtyp=="lieferschein") - { - $auftragposid=$this->app->DB->Select("SELECT auftrag_position_id FROM lieferschein_position WHERE id='$subid'"); - if($auftragposid>0) - { - $this->app->DB->Update("UPDATE auftrag_position SET geliefert_menge='$geliefert' WHERE id='$auftragposid' LIMIT 1"); + if (!$simulieren) { + $this->LagerAuslagernRegal($artikel,$lager_max[0]['lager_platz'],$menge_auslagern,$projekt,ucfirst($belegtyp)." $belegnr","",$belegtyp,$lieferschein, $lager_max[0]['lager_platz_vpe'], $lager_max[0]['id']); + $storageLocations[] = $lager_max[0]['lager_platz']; + if($anzeige_lagerplaetze_in_lieferschein){ + $this->LagerAuslagernText($artikel, $subid, $lager_max[0]['lager_platz'], $menge_auslagern, $belegtyp); + } else { + $this->LagerAuslagernObjektLagerPlatz($artikel, $subid, $lager_max[0]['lager_platz'], $menge_auslagern, $belegtyp); + } + $regal_name = $this->app->DB->Select("SELECT kurzbezeichnung FROM lager_platz WHERE id='".$lager_max[0]['lager_platz']."' LIMIT 1"); + $lager_string .= $regal_name."(".(float)$menge_auslagern.") "; + if(!$nurrestmenge){ + $this->LagerAuslagernRegalMHDCHARGESRN($artikel,$lager_max[0]['lager_platz'],$menge_auslagern,$projekt,ucfirst($belegtyp)." $belegnr","",$belegtyp,$lieferschein,$subid, $chargenauslagern, $mhdauslagern, $seriennummernauslagern); + } } - } - - if($seriennummernerfassen=='1' && ($artikelhatseriennummer=='vomprodukteinlagern' || $artikelhatseriennummer=='vomprodukt' || $artikelhatseriennummer=='eigene')) - { - // wenn Seriennummer erfasst werden soll - //if($anzeige_lagerplaetze_in_lieferschein) - //{ - //$this->app->DB->Update("UPDATE ".$belegtyp."_position SET beschreibung='$beschreibung' WHERE id='$subid' LIMIT 1"); - //neue datenstruktur - //} - if($forceseriennummerngeliefertsetzen)$this->app->DB->Update("UPDATE ".$belegtyp."_position SET geliefert='$geliefert' WHERE id='$subid' LIMIT 1"); - } else { - //wenn nicht - //if($anzeige_lagerplaetze_in_lieferschein) - // $this->app->DB->Update("UPDATE ".$belegtyp."_position SET geliefert='$geliefert',beschreibung='$beschreibung' WHERE id='$subid' LIMIT 1"); - //else - $this->app->DB->Update("UPDATE ".$belegtyp."_position SET geliefert='$geliefert' WHERE id='$subid' LIMIT 1"); + $restmenge = round($restmenge - $menge_auslagern, 8); } } - } - if(!empty($storageLocations)) { - $this->addStorageCountry($belegtyp, $lieferschein, $storageLocations); - } - $this->app->DB->Delete("DELETE FROM lager_reserviert WHERE objekt = '$belegtyp' AND parameter = '$lieferschein'"); - $auftragid = $this->app->DB->Select("SELECT auftragid FROM $belegtyp WHERE id='$lieferschein'"); - if($auftragid){ - $this->app->DB->Delete("DELETE FROM lager_reserviert WHERE objekt = 'auftrag' AND parameter = '$auftragid'"); + if (!$simulieren) { + + $geliefert = $menge; + if($nurrestmenge && $belegtyp=='produktion') { + $geliefert = $menge + $artikelarr[$i]['geliefert_menge']; + } + $artikelhatseriennummer = $this->app->DB->Select("SELECT seriennummern FROM artikel WHERE id='".$artikel."' LIMIT 1"); + if($belegtyp == 'produktion') + { + $this->app->DB->Update("UPDATE ".$belegtyp."_position SET geliefert_menge='$geliefert', geliefert = 1 WHERE id='$subid' LIMIT 1"); + }else{ + + if($belegtyp=="lieferschein") + { + $auftragposid=$this->app->DB->Select("SELECT auftrag_position_id FROM lieferschein_position WHERE id='$subid'"); + if($auftragposid>0) + { + $this->app->DB->Update("UPDATE auftrag_position SET geliefert_menge='$geliefert' WHERE id='$auftragposid' LIMIT 1"); + } + } + + if($seriennummernerfassen=='1' && ($artikelhatseriennummer=='vomprodukteinlagern' || $artikelhatseriennummer=='vomprodukt' || $artikelhatseriennummer=='eigene')) + { + // wenn Seriennummer erfasst werden soll + //if($anzeige_lagerplaetze_in_lieferschein) + //{ + //$this->app->DB->Update("UPDATE ".$belegtyp."_position SET beschreibung='$beschreibung' WHERE id='$subid' LIMIT 1"); + //neue datenstruktur + //} + if($forceseriennummerngeliefertsetzen)$this->app->DB->Update("UPDATE ".$belegtyp."_position SET geliefert='$geliefert' WHERE id='$subid' LIMIT 1"); + } else { + //wenn nicht + //if($anzeige_lagerplaetze_in_lieferschein) + // $this->app->DB->Update("UPDATE ".$belegtyp."_position SET geliefert='$geliefert',beschreibung='$beschreibung' WHERE id='$subid' LIMIT 1"); + //else + $this->app->DB->Update("UPDATE ".$belegtyp."_position SET geliefert='$geliefert' WHERE id='$subid' LIMIT 1"); + } + } + } // simulieren + } // for loop + + if (!$simulieren) { + + if(!empty($storageLocations)) { + $this->addStorageCountry($belegtyp, $lieferschein, $storageLocations); + } + $this->app->DB->Delete("DELETE FROM lager_reserviert WHERE objekt = '$belegtyp' AND parameter = '$lieferschein'"); + + if($belegtyp == '' || $belegtyp === 'lieferschein') + { + $auftragid = $this->app->DB->Select("SELECT auftragid FROM $belegtyp WHERE id='$lieferschein'"); + if($auftragid){ + $this->app->DB->Delete("DELETE FROM lager_reserviert WHERE objekt = 'auftrag' AND parameter = '$auftragid'"); + } + + $this->RunHook('erpapi_lieferschein_auslagern', 1, $lieferschein); + $this->LieferscheinProtokoll($lieferschein,"Lieferschein ausgelagert"); + } } - if($belegtyp == '' || $belegtyp === 'lieferschein') - { - $this->RunHook('erpapi_lieferschein_auslagern', 1, $lieferschein); - $this->LieferscheinProtokoll($lieferschein,"Lieferschein ausgelagert"); - } return(array('storageMovements' => $storageMovements)); } diff --git a/www/lib/dokumente/class.kommissionierung.php b/www/lib/dokumente/class.kommissionierung.php index 467dc6fc..a835c51e 100644 --- a/www/lib/dokumente/class.kommissionierung.php +++ b/www/lib/dokumente/class.kommissionierung.php @@ -108,6 +108,7 @@ class KommissionierungPDF extends BriefpapierCustom { k.bezeichnung, k.bearbeiter, DATE_FORMAT(k.zeitstempel,'%Y%m%d') as datum, + k.ausgelagert, l.belegnr as lieferscheinnummer, ab.belegnr as auftragnummer, DATE_FORMAT(ab.tatsaechlicheslieferdatum,'%d.%m.%Y') as tatsaechlicheslieferdatum, @@ -121,11 +122,11 @@ class KommissionierungPDF extends BriefpapierCustom { LEFT JOIN auftrag ab ON - l.auftragid = ab.id + l.auftragid = ab.id OR k.auftrag = ab.id LEFT JOIN adresse a ON - a.id = l.adresse + a.id = k.adresse WHERE k.id='$id' "); @@ -170,7 +171,7 @@ class KommissionierungPDF extends BriefpapierCustom { ksp.menge as amount, a.herstellernummer as `name`, '' as steuersatz_ermaessigt, - DATE_FORMAT(zeitstempel,'%%Y%%m%%d') as datum + DATE_FORMAT(zeitstempel,'%%Y%%m%%d') as datum FROM kommissionierung ks INNER JOIN kommissionierung_position ksp ON ks.id = ksp.kommissionierung @@ -202,6 +203,11 @@ class KommissionierungPDF extends BriefpapierCustom { if (!empty($data['tatsaechlicheslieferdatum'])) { $corrDetails['Liefertermin'] = $data['tatsaechlicheslieferdatum']; } + if (!empty($data['ausgelagert'])) { + $corrDetails['Ausgelagert'] = "ja"; + } else { + $corrDetails['Ausgelagert'] = "nein"; + } $this->setCorrDetails($corrDetails, true); } } diff --git a/www/pages/auftrag.php b/www/pages/auftrag.php index 95604fb1..72ac3c63 100644 --- a/www/pages/auftrag.php +++ b/www/pages/auftrag.php @@ -579,91 +579,93 @@ class Auftrag extends GenAuftrag break; case 'auftraegeoffeneauto': - $allowed['auftraegeoffeneauto'] = array('list'); + $allowed['auftraegeoffeneauto'] = array('list'); - $heading = array('','', 'Auftrag', 'Vom', 'Kd-Nr.', 'Kunde','Lieferdatum', 'Land','Projekt', 'Zahlung', 'Betrag (brutto)','Monitor','Menü'); - $width = array('1%','1%','1%', '10%', '10%', '10%', '27%', '5%', '5%','1%', '1%', '1%', '1%'); - $findcols = array('open','a.belegnr', 'a.belegnr', 'a.datum', 'a.lieferantkdrnummer', 'a.name','a.tatsaechlicheslieferdatum', 'a.land', 'p.abkuerzung', 'a.zahlungsweise', 'a.gesamtsumme'); + $heading = array('','', 'Auftrag', 'Vom', 'Kd-Nr.', 'Kunde','Lieferdatum', 'Land','Projekt', 'Zahlung', 'Betrag (brutto)','Kommissionierung','Monitor','Menü'); + $width = array('1%','1%','1%', '10%', '10%', '27%', '10%', '5%', '5%', '1%', '1%', '1%', '1%'); + $findcols = array('open','a.belegnr', 'a.belegnr', 'a.datum', 'a.lieferantkdrnummer', 'a.name','a.tatsaechlicheslieferdatum', 'a.land', 'p.abkuerzung', 'a.zahlungsweise', 'a.gesamtsumme','(SELECT id FROM kommissionierung WHERE auftrag = a.id)'); - $defaultorder = 1; - $defaultorderdesc = 0; + $defaultorder = 1; + $defaultorderdesc = 0; + $alignright = array(3,4,5,11,12); - $menu = ""; + $menu = ""; - $sql = "SELECT SQL_CALC_FOUND_ROWS - a.id, - 'app->Conf->WFconf['defaulttheme']}/images/details_open.png class=details>' AS `open`, - CONCAT('') AS `auswahl`, - IF(a.fastlane=1,CONCAT(a.belegnr,' (FL)'),a.belegnr) AS `belegnr`, - DATE_FORMAT(a.datum,'%d.%m.%Y') AS `datum`, - a.lieferantkdrnummer, - a.name, - DATE_FORMAT(a.tatsaechlicheslieferdatum,'%d.%m.%Y') as `tatsaechlicheslieferdatum`, - a.land, - p.abkuerzung, - a.zahlungsweise, - a.gesamtsumme, - (" . $this->app->YUI->IconsSQL() . ") AS icons, - a.id - FROM - auftrag a LEFT JOIN projekt p ON a.projekt = p.id"; + $sql = "SELECT SQL_CALC_FOUND_ROWS + a.id, + 'app->Conf->WFconf['defaulttheme']}/images/details_open.png class=details>' AS `open`, + CONCAT('') AS `auswahl`, + IF(a.fastlane=1,CONCAT(a.belegnr,' (FL)'),a.belegnr) AS `belegnr`, + DATE_FORMAT(a.datum,'%d.%m.%Y') AS `datum`, + a.lieferantkdrnummer, + a.name, + DATE_FORMAT(a.tatsaechlicheslieferdatum,'%d.%m.%Y') as `tatsaechlicheslieferdatum`, + a.land, + p.abkuerzung, + a.zahlungsweise, + a.gesamtsumme, + (SELECT id FROM kommissionierung WHERE auftrag = a.id) as kommissionierung, + (" . $this->app->YUI->IconsSQL() . ") AS icons, + a.id + FROM + auftrag a LEFT JOIN projekt p ON a.projekt = p.id"; - $where = "a.status = 'freigegeben' AND a.cronjobkommissionierung = 0 AND a.lager_ok=1 AND a.porto_ok=1 AND a.ust_ok=1 AND a.vorkasse_ok=1 AND a.nachnahme_ok=1 AND a.autoversand=1 AND a.check_ok=1 AND a.kreditlimit_ok=1 AND a.liefersperre_ok=1"; // liefertermin_ok special treatment + $where = "a.status = 'freigegeben' AND a.cronjobkommissionierung = 0 AND a.lager_ok=1 AND a.porto_ok=1 AND a.ust_ok=1 AND a.vorkasse_ok=1 AND a.nachnahme_ok=1 AND a.autoversand=1 AND a.check_ok=1 AND a.kreditlimit_ok=1 AND a.liefersperre_ok=1"; // liefertermin_ok special treatment - $count = "SELECT count(DISTINCT id) FROM auftrag a WHERE $where"; + $count = "SELECT count(DISTINCT id) FROM auftrag a WHERE $where"; // $groupby = ""; - $moreinfo = true; // Allow drop down details + $moreinfo = true; // Allow drop down details - // Toggle filters - $this->app->Tpl->Add('JQUERYREADY', "$('#fastlane').click( function() { fnFilterColumn1( 0 ); } );"); - $this->app->Tpl->Add('JQUERYREADY', "$('#auftrag_kundemehrereauftraege').click( function() { fnFilterColumn2( 0 ); } );"); - $this->app->Tpl->Add('JQUERYREADY', "$('#auftrag_lieferdatum').click( function() { fnFilterColumn3( 0 ); } );"); + // Toggle filters + $this->app->Tpl->Add('JQUERYREADY', "$('#fastlane').click( function() { fnFilterColumn1( 0 ); } );"); + $this->app->Tpl->Add('JQUERYREADY', "$('#auftrag_kundemehrereauftraege').click( function() { fnFilterColumn2( 0 ); } );"); + $this->app->Tpl->Add('JQUERYREADY', "$('#auftrag_lieferdatum').click( function() { fnFilterColumn3( 0 ); } );"); - for ($r = 1;$r <= 3;$r++) { - $this->app->Tpl->Add('JAVASCRIPT', ' - function fnFilterColumn' . $r . ' ( i ) - { - if(oMoreData' . $r . $name . '==1) - oMoreData' . $r . $name . ' = 0; - else - oMoreData' . $r . $name . ' = 1; + for ($r = 1;$r <= 3;$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 - ); - } - '); - } + $(\'#' . $name . '\').dataTable().fnFilter( + \'\', + i, + 0,0 + ); + } + '); + } - $more_data1 = $this->app->Secure->GetGET("more_data1"); + $more_data1 = $this->app->Secure->GetGET("more_data1"); - if ($more_data1 == 1) { - $where .= " AND a.fastlane=1"; - } else { - } + if ($more_data1 == 1) { + $where .= " AND a.fastlane=1"; + } else { + } - $more_data3 = $this->app->Secure->GetGET("more_data3"); - if ($more_data3 == 1) { - } - else { - $where .= " AND a.liefertermin_ok=1"; - } + $more_data3 = $this->app->Secure->GetGET("more_data3"); + if ($more_data3 == 1) { + } + else { + $where .= " AND a.liefertermin_ok=1"; + } - $more_data2 = $this->app->Secure->GetGET("more_data2"); - if ($more_data2 == 1) $where .= " AND a.adresse in (SELECT adresse FROM `auftrag` a WHERE ".$where." GROUP BY adresse HAVING count(id) > 1)"; // More than 1 order per address + $more_data2 = $this->app->Secure->GetGET("more_data2"); + if ($more_data2 == 1) $where .= " AND a.adresse in (SELECT adresse FROM `auftrag` a WHERE ".$where." GROUP BY adresse HAVING count(id) > 1)"; // More than 1 order per address - // END Toggle filters + // END Toggle filters - $menu .= ""; - $menu .= "app->Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\">"; - $menu .= ""; + $menu .= ""; + $menu .= "app->Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\">"; + $menu .= ""; - $moreinfo = true; // Minidetail active - $menucol = 11; // For minidetail + $moreinfo = true; // Minidetail active + $menucol = 11; // For minidetail break; case 'auftraegeoffeneautowartend': @@ -886,7 +888,6 @@ class Auftrag extends GenAuftrag */ public function __construct($app, $intern = false) { - $this->kommissionierung = false; $this->app=$app; if($intern) { return; @@ -5453,9 +5454,6 @@ Die Gesamtsumme stimmt nicht mehr mit ursprünglich festgelegten Betrag '. $this->app->Tpl->Parse('PAGE',"tabview.tpl"); } - - - function AuftragReservieren() { $id = $this->app->Secure->GetGET('id'); @@ -5465,179 +5463,12 @@ Die Gesamtsumme stimmt nicht mehr mit ursprünglich festgelegten Betrag '. $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; - } - /* order processed true or false */ 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!='') @@ -5947,14 +5778,25 @@ Die Gesamtsumme stimmt nicht mehr mit ursprünglich festgelegten Betrag '. if($kommissionierverfahren==='lieferschein' && $lieferschein > 0) { //FALL 1 Lieferschein mit Lagerplatz - - if($this->kommissionierung){ + + $sql = "SELECT id FROM kommissionierung k WHERE k.auftrag = '".$id."'"; + $vorkommissionierung = $this->app->DB->Select($sql); + + if(!$vorkommissionierung) + { + $kommissionierung = $this->app->erp->GetNextKommissionierung(); + } else { + $kommissionierung = false; + } + + if($kommissionierung){ $this->app->DB->Update( sprintf( - "UPDATE kommissionierung SET lieferschein = %d, auftrag = %d WHERE id = %d LIMIT 1", + "UPDATE kommissionierung SET lieferschein = %d, auftrag = %d, adresse = %d WHERE id = %d LIMIT 1", $lieferschein, $id, - $this->kommissionierung + $kommissionierung, + $adresse ) ); } @@ -5969,30 +5811,39 @@ Die Gesamtsumme stimmt nicht mehr mit ursprünglich festgelegten Betrag '. false, $nurRestmenge ); - - foreach ($auslagernresult['storageMovements'] as $storageMovement) { - $this->app->DB->Update( - sprintf( - "INSERT INTO kommissionierung_position (kommissionierung, artikel, lager_platz, menge) VALUES (%d, %d, %d, %d)", - $this->kommissionierung, - $storageMovement['artikel'], - $storageMovement['lager_platz'], - $storageMovement['menge'] - ) - ); - } - // Kommissionierschein drucken? - if ($projektarr['autodruckkommissionierscheinstufe1']) { - $Brief = new KommissionierungPDF($this->app, styleData: array('ohne_steuer' => true, 'artikeleinheit' => false, 'abstand_boxrechtsoben' => -70, 'abstand_artikeltabelleoben' => -70, 'abstand_betreffzeileoben' => -70, 'preise_ausblenden' => true)); - $Brief->GetKommissionierung($this->kommissionierung); - $tmpfile = $Brief->displayTMP(); - for($mengedruck=$projektarr['autodruckkommissionierscheinstufe1menge'];$mengedruck > 0;$mengedruck--) { - $druckercode = $this->app->erp->Projektdaten($projekt,'druckerlogistikstufe1'); - $this->app->printer->Drucken($druckercode, $tmpfile); + if($kommissionierung){ + $this->app->DB->Update( + sprintf( + "UPDATE kommissionierung SET ausgelagert = 1 WHERE id = %d LIMIT 1", + $kommissionierung + ) + ); + + foreach ($auslagernresult['storageMovements'] as $storageMovement) { + $this->app->DB->Update( + sprintf( + "INSERT INTO kommissionierung_position (kommissionierung, artikel, lager_platz, menge) VALUES (%d, %d, %d, %d)", + $kommissionierung, + $storageMovement['artikel'], + $storageMovement['lager_platz'], + $storageMovement['menge'] + ) + ); } - unlink($tmpfile); - } + + // Kommissionierschein drucken? + if ($projektarr['autodruckkommissionierscheinstufe1']) { + $Brief = new KommissionierungPDF($this->app, styleData: array('ohne_steuer' => true, 'artikeleinheit' => false, 'abstand_boxrechtsoben' => -70, 'abstand_artikeltabelleoben' => -70, 'abstand_betreffzeileoben' => -70, 'preise_ausblenden' => true)); + $Brief->GetKommissionierung($kommissionierung); + $tmpfile = $Brief->displayTMP(); + for($mengedruck=$projektarr['autodruckkommissionierscheinstufe1menge'];$mengedruck > 0;$mengedruck--) { + $druckercode = $this->app->erp->Projektdaten($projekt,'druckerlogistikstufe1'); + $this->app->printer->Drucken($druckercode, $tmpfile); + } + unlink($tmpfile); + } + } // Prozesse ohne Versandzentrum $this->app->erp->BriefpapierHintergrundDisable($druckercode); @@ -6649,65 +6500,15 @@ Die Gesamtsumme stimmt nicht mehr mit ursprünglich festgelegten Betrag '. foreach ($auftraegenachprojekt as $projekt => $auftraege) { if(!is_array($auftraege) || empty($auftraege)) { continue; - } - $this->kommissionierung = $this->app->erp->GetNextKommissionierung($bezeichnung); - + } $processed_orders_num = 0; - foreach ($auftraege as $auftrag) { - /* Process each order */ - if($this->AuftragVersand($auftrag)) { + if($this->AuftragVersand($auftrag, true)) { $processed_orders_num++; } - } - $this->app->Tpl->Set('MESSAGE','
'.$processed_orders_num.' Aufträge wurden verarbeitet.
'); - - 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; @@ -6741,6 +6542,86 @@ Die Gesamtsumme stimmt nicht mehr mit ursprünglich festgelegten Betrag '. } } break; + case 'vorkommissionieren': + + if (!empty($auftraegemarkiert)) { + foreach ($auftraegemarkiert as $k => $v) { + $sql = " + SELECT + k.id, + a.belegnr, + a.adresse + FROM + kommissionierung k + LEFT JOIN + lieferschein l + ON + l.id = k.lieferschein + LEFT JOIN + auftrag al + ON + al.id = l.auftrag + LEFT JOIN + auftrag a + ON + a.id = k.auftrag + WHERE + a.id = $v OR al.id = $v + LIMIT 1 + "; + $check = $this->app->DB->SelectRow($sql); + if (!empty($check)) { + $this->app->Tpl->addMessage('Error',"Bereits Kommissioniert: ".$check['belegnr']); + break; + } + + $kid = $this->app->erp->GetNextKommissionierung(); + + $sql = "UPDATE kommissionierung SET auftrag = $v, adresse = (SELECT adresse FROM auftrag WHERE id = ".$v.") WHERE id = $kid"; + $this->app->DB->Update($sql); + + $auslagernresult = + $this->app->erp->LieferscheinAuslagern( + lieferschein: $v, + anzeige_lagerplaetze_in_lieferschein: true, + standardlager: (int)$this->app->DB->Select(sprintf('SELECT standardlager FROM auftrag WHERE id = %d LIMIT 1', $v)), + belegtyp: 'auftrag', + chargenmhdnachprojekt: true, + forceseriennummerngeliefertsetzen: false, + nurrestmenge: false, + simulieren: true + ); + + foreach ($auslagernresult['storageMovements'] as $storageMovement) { + $this->app->DB->Update( + sprintf( + "INSERT INTO kommissionierung_position (kommissionierung, artikel, lager_platz, menge) VALUES (%d, %d, %d, %d)", + $kid, + $storageMovement['artikel'], + $storageMovement['lager_platz'], + $storageMovement['menge'] + ) + ); + } + + $this->app->erp->AuftragProtokoll($v,'Auftrag vorkommissioniert, Kommissionierung '.$kid); + + $projektarr = $this->app->DB->SelectRow("SELECT projekt.* FROM projekt INNER JOIN auftrag ON projekt.id = auftrag.projekt WHERE auftrag.id = '".$v."'"); + + // Kommissionierschein drucken? + if ($projektarr['autodruckkommissionierscheinstufe1']) { + $Brief = new KommissionierungPDF($this->app, styleData: array('ohne_steuer' => true, 'artikeleinheit' => false, 'abstand_boxrechtsoben' => -70, 'abstand_artikeltabelleoben' => -70, 'abstand_betreffzeileoben' => -70, 'preise_ausblenden' => true)); + $Brief->GetKommissionierung($kid); + $tmpfile = $Brief->displayTMP(); + for($mengedruck=$projektarr['autodruckkommissionierscheinstufe1menge'];$mengedruck > 0;$mengedruck--) { + $druckercode = $this->app->erp->Projektdaten($projektarr['id'],'druckerlogistikstufe1'); + $this->app->printer->Drucken($druckercode, $tmpfile); + } + unlink($tmpfile); + } + } + } + break; } } } @@ -7191,7 +7072,6 @@ Die Gesamtsumme stimmt nicht mehr mit ursprünglich festgelegten Betrag '. } foreach ($auftraegenachprojekt as $projekt => $auftraege) { if(is_array($auftraege)){ - $this->kommissionierung = $this->app->erp->GetNextKommissionierung($bezeichnung); foreach ($auftraege as $auftrag) { $this->AuftragVersand($auftrag); } diff --git a/www/pages/content/auftrag_versandzentrum.tpl b/www/pages/content/auftrag_versandzentrum.tpl index ee224967..5e7fdd85 100644 --- a/www/pages/content/auftrag_versandzentrum.tpl +++ b/www/pages/content/auftrag_versandzentrum.tpl @@ -48,6 +48,7 @@ +