Kommissionierung, Kommissionsscheine

This commit is contained in:
OpenXE 2024-05-30 14:44:54 +02:00
parent 5c21bf6c1d
commit 652838c950
5 changed files with 291 additions and 383 deletions

View File

@ -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)",

View File

@ -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,6 +3468,10 @@ function LieferscheinEinlagern($id,$grund="Lieferschein Einlagern", $lpiids = nu
break;
}
$storageMovements[] = array('lager_platz' => $lager_max[0]['lager_platz'], 'artikel' => $artikel,'menge' => $menge_auslagern);
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){
@ -3480,13 +3484,13 @@ function LieferscheinEinlagern($id,$grund="Lieferschein Einlagern", $lpiids = nu
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);
}
}
if (!$simulieren) {
$geliefert = $menge;
if($nurrestmenge && $belegtyp=='produktion') {
$geliefert = $menge + $artikelarr[$i]['geliefert_menge'];
@ -3523,22 +3527,28 @@ function LieferscheinEinlagern($id,$grund="Lieferschein Einlagern", $lpiids = nu
$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'");
}
if($belegtyp == '' || $belegtyp === 'lieferschein')
{
$this->RunHook('erpapi_lieferschein_auslagern', 1, $lieferschein);
$this->LieferscheinProtokoll($lieferschein,"Lieferschein ausgelagert");
}
}
return(array('storageMovements' => $storageMovements));
}

View File

@ -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'
");
@ -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);
}
}

View File

@ -581,12 +581,13 @@ class Auftrag extends GenAuftrag
$allowed['auftraegeoffeneauto'] = array('list');
$heading = array('','', 'Auftrag', 'Vom', 'Kd-Nr.', 'Kunde','Lieferdatum', 'Land','Projekt', 'Zahlung', 'Betrag (brutto)','Monitor','Men&uuml;');
$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&uuml;');
$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;
$alignright = array(3,4,5,11,12);
$menu = "";
@ -603,6 +604,7 @@ class Auftrag extends GenAuftrag
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
@ -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&uuml;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&uuml;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!='')
@ -5948,13 +5779,24 @@ Die Gesamtsumme stimmt nicht mehr mit urspr&uuml;nglich festgelegten Betrag '.
{
//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
)
);
}
@ -5970,11 +5812,19 @@ Die Gesamtsumme stimmt nicht mehr mit urspr&uuml;nglich festgelegten Betrag '.
$nurRestmenge
);
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)",
$this->kommissionierung,
$kommissionierung,
$storageMovement['artikel'],
$storageMovement['lager_platz'],
$storageMovement['menge']
@ -5985,7 +5835,7 @@ Die Gesamtsumme stimmt nicht mehr mit urspr&uuml;nglich festgelegten Betrag '.
// 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);
$Brief->GetKommissionierung($kommissionierung);
$tmpfile = $Brief->displayTMP();
for($mengedruck=$projektarr['autodruckkommissionierscheinstufe1menge'];$mengedruck > 0;$mengedruck--) {
$druckercode = $this->app->erp->Projektdaten($projekt,'druckerlogistikstufe1');
@ -5993,6 +5843,7 @@ Die Gesamtsumme stimmt nicht mehr mit urspr&uuml;nglich festgelegten Betrag '.
}
unlink($tmpfile);
}
}
// Prozesse ohne Versandzentrum
$this->app->erp->BriefpapierHintergrundDisable($druckercode);
@ -6650,64 +6501,14 @@ Die Gesamtsumme stimmt nicht mehr mit urspr&uuml;nglich festgelegten Betrag '.
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','<div class="info">'.$processed_orders_num.' Auftr&auml;ge wurden verarbeitet.</div>');
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&uuml;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&uuml;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);
}

View File

@ -48,6 +48,7 @@
<option value="">{|bitte w&auml;hlen|} ...</option>
<option value="versandstarten">Auto-Versand</option>
<option value="versandstartenmit">Auto-Versand (mit Kommissionierbez.)</option>
<option value="vorkommissionieren">Vorkommissionieren</option>
<option value="drucken">drucken</option>
</select>
<span id="druckerauswahl" style="display: none;">{|Drucker|}: <select name="seldruckerversand" id="seldruckerversand">[SELDRUCKERVERSAND]</select></span><input type="submit" class="btnBlue" name="ausfuehren" value="{|ausf&uuml;hren|}" />