diff --git a/upgrade/data/db_schema.json b/upgrade/data/db_schema.json index 4526dc4a..e2b28f00 100644 --- a/upgrade/data/db_schema.json +++ b/upgrade/data/db_schema.json @@ -57180,6 +57180,17 @@ "Extra": "", "Privileges": "select,insert,update,references", "Comment": "" + }, + { + "Field": "umgelagert", + "Type": "int(1)", + "Collation": null, + "Null": "NO", + "Key": "", + "Default": "0", + "Extra": "", + "Privileges": "select,insert,update,references", + "Comment": "" } ], "keys": [ @@ -104773,7 +104784,7 @@ }, { "Field": "adresse", - "Type": "int", + "Type": "int(11)", "Collation": null, "Null": "NO", "Key": "", diff --git a/www/pages/content/lager_umlagern_lieferschein.tpl b/www/pages/content/lager_umlagern_lieferschein.tpl new file mode 100644 index 00000000..0b2f651d --- /dev/null +++ b/www/pages/content/lager_umlagern_lieferschein.tpl @@ -0,0 +1,43 @@ +
+ +
+ [MESSAGE] + [MESSAGETABLE] +
+
+ + + + + +
+ + + + + +
+ + + + + + +
{|Quelllager|}:
+ + +
+
+
+
+
+
+
+
+
+
+
diff --git a/www/pages/content/lieferschein_umlagern.tpl b/www/pages/content/lieferschein_umlagern.tpl new file mode 100644 index 00000000..2295eef7 --- /dev/null +++ b/www/pages/content/lieferschein_umlagern.tpl @@ -0,0 +1,44 @@ +
+ +
+ [MESSAGE] + [MESSAGETABLE] +
+
+ + + + + +
+ + + + + +
+ + + + + + + +
{|Quelllager|}:
{|Ziellager|}:
+ + +
+
+
+
+
+
+
+
+
+
+
diff --git a/www/pages/lager.php b/www/pages/lager.php index 37807df7..98013162 100644 --- a/www/pages/lager.php +++ b/www/pages/lager.php @@ -174,31 +174,7 @@ class Lager extends GenLager { // fester filter $where = " l.geloescht=0 AND l.id!=0 AND l.lager='$id' "; $count = "SELECT COUNT(id) FROM lager_platz WHERE geloescht=0 AND lager='$id' "; - break; - case 'lagerletztebewegungen': - $allowed['lager'] = array('letztebewegungen'); - - // headings - - // headings - - $heading = array('Datum', 'Lager', 'Menge', 'Nummer', 'Artikel', 'Richtung', 'Referenz', 'Bearbeiter', 'Projekt', 'Menü'); - $width = array('1%', '5%', '5%', '5%', '5%', '5%', '40%', '20%', '5%', '1%'); - $findcols = array('zeit', 'lager', 'menge', 'nummer', 'name_de', 'Richtung', 'referenz', 'bearbeiter', 'projekt', 'id'); - $searchsql = array('lpi.referenz', 'lpi.bearbeiter', 'p.abkuerzung', 'DATE_FORMAT(lpi.zeit,\'%d.%m.%Y\')', 'lp.kurzbezeichnung', 'a.name_de', 'a.nummer'); - $defaultorder = 10; //Optional wenn andere Reihenfolge gewuenscht - $alignright = array(3); - $defaultorderdesc = 1; - $menu = "-"; - - $sql = "SELECT SQL_CALC_FOUND_ROWS lpi.id, - DATE_FORMAT(lpi.zeit,'%d.%m.%Y') as datum, lp.kurzbezeichnung as lager, trim(lpi.menge)+0 as menge, - a.nummer, a.name_de, if(lpi.eingang,'Eingang','Ausgang') as Richtung, substring(lpi.referenz,1,60) as referenz, lpi.bearbeiter as bearbeiter, p.abkuerzung as projekt, - lpi.id FROM lager_bewegung lpi LEFT JOIN lager_platz as lp ON lpi.lager_platz=lp.id LEFT JOIN projekt p ON lpi.projekt=p.id LEFT JOIN artikel a ON a.id=lpi.artikel"; - - - $count = "SELECT COUNT(lpi.id) FROM lager_bewegung lpi LEFT JOIN lager_platz as lp ON lpi.lager_platz=lp.id LEFT JOIN projekt p ON lpi.projekt=p.id "; - break; + break; case 'lagertabelle': $allowed['lager'] = array('list'); $defaultCountry = $app->erp->Firmendaten('land'); @@ -832,7 +808,23 @@ class Lager extends GenLager { $datecols = array(6); - $sql = "SELECT SQL_CALC_FOUND_ROWS i.id, l.bezeichnung, lp.kurzbezeichnung as regal, a.nummer, a.name_de, IF(i.eingang, 'Eingang', 'Ausgang'), if(i.eingang, CONCAT('+', ' ', trim(i.menge)+0), CONCAT('-', ' ', trim(i.menge)+0)) as menge, DATE_FORMAT(i.zeit,'%d.%m.%Y') as datum, i.referenz, i.bearbeiter, p.abkuerzung AS projektbewegung, i.id FROM lager_bewegung i LEFT JOIN lager_platz lp ON lp.id=i.lager_platz LEFT JOIN lager l ON lp.lager = l.id LEFT JOIN artikel a ON i.artikel=a.id LEFT JOIN projekt p ON l.projekt = p.id"; + $sql = "SELECT SQL_CALC_FOUND_ROWS + i.id, + l.bezeichnung, + lp.kurzbezeichnung as regal, + a.nummer, + a.name_de, + IF(i.eingang, + 'Eingang', + 'Ausgang'), + if(i.eingang, + CONCAT('+',' ',trim(i.menge)+0),CONCAT('-',' ',trim(i.menge)+0)) as menge, + ".$app->erp->FormatDateTimeShort('i.zeit')." as datum, + i.referenz, + i.bearbeiter, + p.abkuerzung AS projektbewegung, + i.id + FROM lager_bewegung i LEFT JOIN lager_platz lp ON lp.id=i.lager_platz LEFT JOIN lager l ON lp.lager = l.id LEFT JOIN artikel a ON i.artikel=a.id LEFT JOIN projekt p ON l.projekt = p.id"; $lager = $app->User->GetParameter("lager_bewegungalle_lager"); @@ -1107,6 +1099,7 @@ class Lager extends GenLager { $this->app->ActionHandler("buchenzwischenlagerdelete", "LagerBuchenZwischenlagerDelete"); $this->app->ActionHandler("bucheneinlagern", "LagerBuchenEinlagern"); $this->app->ActionHandler("buchenauslagern", "LagerBuchenAuslagern"); + $this->app->ActionHandler("umlagernlieferschein", "LagerBuchenUmlagernLieferschein"); $this->app->ActionHandler("artikelentfernenreserviert", "LagerArtikelEntfernenReserviert"); $this->app->ActionHandler("letztebewegungen", "LagerLetzteBewegungen"); $this->app->ActionHandler("schnelleinlagern", "LagerSchnellEinlagern"); @@ -3156,12 +3149,50 @@ class Lager extends GenLager { $this->app->Tpl->Parse('PAGE', 'tabview.tpl'); } + function LagerBuchenUmlagernLieferschein() { + $this->LagerBuchenMenu(); + $this->app->Tpl->AddMessage('info',"Gesamten Lagerplatz in einen neuen Lieferschein zur Umlagerung geben."); + $this->app->YUI->AutoComplete("quelllager", "lagerplatz"); + $quelllager = $this->app->Secure->GetPOST('quelllager'); + + $submit = $this->app->Secure->GetPOST('submit'); + if ($submit == 'lieferschein') { + $quellager_id = $this->app->erp->ReplaceLagerPlatz(true, $quelllager, true); + if (empty($quellager_id)) { + $this->app->Tpl->AddMessage('error',"Bitte Quelllager angeben."); + } else { + $sql = "SELECT artikel, SUM(menge) as menge FROM lager_platz_inhalt WHERE lager_platz=$quellager_id AND menge > 0 GROUP BY artikel"; + $positionen = $this->app->DB->SelectArr($sql); + + if (empty($positionen)) { + $this->app->Tpl->AddMessage('error',"Lager ist leer."); + } else { + $id = $this->app->erp->ImportCreateLieferschein(null); + if (!empty($id)) { + $this->app->erp->LieferscheinProtokoll($id,"Lieferschein aus Lager ".$quelllager." erstellt"); + $this->app->DB->Update("UPDATE lieferschein SET standardlager = '$quellager_id' WHERE id = '$id' LIMIT 1"); + + foreach ($positionen as $position) { + // public function AddLieferscheinPositionArtikelID($lieferschein, $artikel,$menge,$bezeichnung,$beschreibung,$datum) + $this->app->erp->AddLieferscheinPositionArtikelID($id, $position['artikel'],$position['menge'],null,null,null); + } + + $this->app->Location->execute("index.php?module=lieferschein&action=edit&id=$id"); + } else { + $this->app->Tpl->AddMessage('error',"Lieferschein konnte nicht erzeugt werden."); + } + } + } + } + + $this->app->Tpl->Set('QUELLLAGER',$this->app->erp->ReplaceLagerPlatz(false, $quellager_id, false)); + $this->app->Tpl->Parse('PAGE', 'lager_umlagern_lieferschein.tpl'); + } + function LagerLetzteBewegungen() { $this->LagerBuchenMenu(); - - $this->app->YUI->TableSearch('TAB1', 'lagerletztebewegungen','show','','',basename(__FILE__), __CLASS__); - + $this->app->YUI->TableSearch('TAB1', 'lager_allebewegungenlist','show','','',basename(__FILE__), __CLASS__); $this->app->Tpl->Parse('PAGE', 'tabview.tpl'); } @@ -3171,6 +3202,7 @@ class Lager extends GenLager { $this->app->erp->Headlines('Lager'); if($this->app->erp->Version()!=='stock') { $this->app->erp->MenuEintrag("index.php?module=lager&action=buchenauslagern&cmd=umlagern&id=$id", 'Umlagern'); + $this->app->erp->MenuEintrag("index.php?module=lager&action=umlagernlieferschein&id=$id", 'Umlagern mit Lieferschein'); $this->app->erp->MenuEintrag("index.php?module=lager&action=buchenauslagern&id=$id", 'Auslagern'); $this->app->erp->MenuEintrag("index.php?module=lager&action=bucheneinlagern&id=$id", 'Einlagern'); $this->app->erp->MenuEintrag("index.php?module=lager&action=buchenzwischenlager&id=$id", 'Zwischenlager'); diff --git a/www/pages/lieferschein.php b/www/pages/lieferschein.php index 55e24fb9..6780078c 100644 --- a/www/pages/lieferschein.php +++ b/www/pages/lieferschein.php @@ -194,6 +194,7 @@ class Lieferschein extends GenLieferschein $this->app->ActionHandler("abschicken","LieferscheinAbschicken"); $this->app->ActionHandler("abschliessen","LieferscheinAbschliessen"); $this->app->ActionHandler("auslagern","LieferscheinAuslagern"); + $this->app->ActionHandler("umlagern","LieferscheinUmlagern"); $this->app->ActionHandler("pdf","LieferscheinPDF"); $this->app->ActionHandler("inlinepdf","LieferscheinInlinePDF"); $this->app->ActionHandler("protokoll","LieferscheinProtokoll"); @@ -453,6 +454,100 @@ class Lieferschein extends GenLieferschein exit; } + function LieferscheinUmlagern() + { + $id = (int)$this->app->Secure->GetGET("id"); + $sql = "SELECT belegnr, name, status, umgelagert, standardlager FROM lieferschein WHERE id='$id'"; + $lieferschein = $this->app->DB->SelectArr($sql)[0]; + $belegnr = $lieferschein['belegnr']; + $name = $lieferschein['name']; + $status = $lieferschein['status']; + $umgelagert = $lieferschein['umgelagert']; + + $quelllager = $this->app->Secure->GetPOST('quelllager'); + $ziellager = $this->app->Secure->GetPOST('ziellager'); + + $quellager_id = $this->app->erp->ReplaceLagerPlatz(true, $quelllager, true); + $ziellager_id = $this->app->erp->ReplaceLagerPlatz(true, $ziellager, true); + + if (empty($quellager_id)) { + $quellager_id = $lieferschein['standardlager']; + } + + if ($status != "versendet" && $status != "freigegeben") { + exit(); + } + + if ($umgelagert) { + $this->app->Tpl->AddMessage('error',"Lieferschein wurde bereits umgelagert."); + } else { + $submit = $this->app->Secure->GetPOST('submit'); + if ($submit == 'umlagern') { + + if (empty($quellager_id) || empty($ziellager_id)) { + $this->app->Tpl->AddMessage('error',"Bitte Quell- und Ziellager angeben."); + } else { + $sql = "SELECT artikel, name_de, a.nummer AS artikelnummer, SUM(menge) AS menge FROM lieferschein_position lp INNER JOIN artikel a ON a.id = lp.artikel WHERE lp.lieferschein = $id GROUP BY lp.artikel"; + $positionen = $this->app->DB->SelectArr($sql); + + $menge_ok = true; + $fehlt = array(); + + foreach ($positionen as $position) { + $sql = "SELECT SUM(menge) as menge FROM lager_platz_inhalt WHERE lager_platz=$quellager_id AND artikel = ".$position['artikel']; + $menge_lager = $this->app->DB->SelectArr($sql)[0]['menge']; + + if ($menge_lager < $position['menge']) { + $menge_ok = false; + $fehlt[] = array('Nummer' => $position['artikelnummer'],'Artikel' => $position['name_de'],'Lieferschein Menge' => (int) $position['menge'],'Lager Menge' => empty($menge_lager)?'-':(int) $menge_lager); + } + } + + if ($menge_ok) { + foreach ($positionen as $position) { + + $artikel = $position['artikel']; + $menge = $position['menge']; + $projekt = 0; + $grund = "Umlagern Lieferschein ".$belegnr; + $importer = ""; + $paketannahme = ""; + $doctype = "lieferschein"; + $doctypeId = $id; + + $this->app->erp->LagerAuslagernRegal($artikel,$quellager_id,$menge,$projekt,$grund,$importer,$doctype,$doctypeid); + $this->app->erp->LagerEinlagern($artikel,$menge,$ziellager_id,$projekt,$grund,$importer,$paketannahme,$doctype,$doctypeid); + } + $sql = "UPDATE lieferschein SET umgelagert = 1 WHERE id = ".$id; + $this->app->DB->Update($sql); + $this->app->erp->LieferscheinProtokoll($id,"Lieferschein umgelagert von ".$quelllager." nach ".$ziellager); + $this->app->Tpl->AddMessage('success','Erfolgreich umgelagert.'); + } else { + $this->app->Tpl->AddMessage('error',"Mengen im Quelllager nicht ausreichend."); + $tmp = new EasyTable($this->app); + $tmp->headings = array('Nummer','Artikel','Lieferschein Menge','Lager Menge',''); + $tmp->datasets = $fehlt; + $tmp->DisplayNew('MESSAGETABLE',null,"noAction"); + } // Menge ok + } // Lager ok + } // umlagern + } // $umgelagert + + $this->LieferscheinMenu(); + + $this->app->YUI->AutoComplete("quelllager", "lagerplatz"); + $this->app->YUI->AutoComplete("ziellager", "lagerplatz"); + + $this->app->Tpl->Set('KURZUEBERSCHRIFT2',"Lieferschein $belegnr umlagern"); + $this->app->Tpl->Set('TABTEXT',"Umlagern"); + + $this->app->Tpl->Set('QUELLLAGER',$this->app->erp->ReplaceLagerPlatz(false, $quellager_id, false)); + + $this->app->Tpl->Set('ZIELLAGER',$this->app->erp->ReplaceLagerPlatz(false, $ziellager_id, false)); + + $this->app->Tpl->Parse('PAGE',"lieferschein_umlagern.tpl"); + } + function LieferscheinPaketmarke() { $id = (int)$this->app->Secure->GetGET("id"); @@ -537,16 +632,16 @@ class Lieferschein extends GenLieferschein function LieferscheinIconMenu($id,$prefix="") { $status = $this->app->DB->Select("SELECT status FROM lieferschein WHERE id='$id' LIMIT 1"); + $adresse = $this->app->DB->Select("SELECT adresse FROM lieferschein WHERE id='$id' LIMIT 1"); $lieferantenretoure = $this->app->DB->Select("SELECT lieferantenretoure FROM lieferschein WHERE id='$id' LIMIT 1"); - if($status=="angelegt" || $status=="") + if($adresse > 0 && ($status=="angelegt" || $status=="")) $freigabe = ""; if(($status=="versendet" || $status=="freigegeben") && $lieferantenretoure=="1") $abschliessen = ""; - $checkifrgexists = $this->app->DB->Select("SELECT id FROM rechnung WHERE lieferschein='$id' LIMIT 1"); $optioncustom = $this->Custom('option'); @@ -574,27 +669,34 @@ class Lieferschein extends GenLieferschein $mengegeliefert = $mengegeliefert + $this->app->DB->Select("SELECT ifnull(sum(olp.menge),0)+0 FROM objekt_lager_platz olp INNER JOIN lieferschein_position lp ON olp.objekt='lieferschein' AND olp.parameter=lp.id AND lp.lieferschein = '$id'"); - if($mengegeliefert <= 0 && $liefermengelagerartikel > 0 && $schreibschutz=="1" && $status!='angelegt' && $status!='storniert') { - $auslagern = ''; - }else{ - //12.07.19 LG lieferscheinlager als kommissionierverfahren zum if hinzugefuegt - $projektkommissionierverfahren = $this->app->DB->Select("SELECT kommissionierverfahren FROM projekt where id = '$projekt'"); - if($projekt && ($projektkommissionierverfahren == "" || $projektkommissionierverfahren == "rechnungsmail" || $projektkommissionierverfahren == "lieferschein" || $projektkommissionierverfahren == "lieferscheinscan" || $projektkommissionierverfahren == "lieferscheinlager" || $projektkommissionierverfahren == "lieferscheinlagerscan")) - { - if(($bestellmengelagerartikel != $liefermengelagerartikel && $bestellmengelagerartikel != $liefermengelagerartikel2) && $status!='angelegt' && $status!='storniert') { - $auslagern = ''; + if ($status == "versendet" || $status == "freigegeben") { + + if($mengegeliefert <= 0 && $liefermengelagerartikel > 0 && $schreibschutz=="1" && $status!='angelegt' && $status!='storniert') { + $auslagern = ''; + }else{ + //12.07.19 LG lieferscheinlager als kommissionierverfahren zum if hinzugefuegt + $projektkommissionierverfahren = $this->app->DB->Select("SELECT kommissionierverfahren FROM projekt where id = '$projekt'"); + if($projekt && ($projektkommissionierverfahren == "" || $projektkommissionierverfahren == "rechnungsmail" || $projektkommissionierverfahren == "lieferschein" || $projektkommissionierverfahren == "lieferscheinscan" || $projektkommissionierverfahren == "lieferscheinlager" || $projektkommissionierverfahren == "lieferscheinlagerscan")) + { + if(($bestellmengelagerartikel != $liefermengelagerartikel && $bestellmengelagerartikel != $liefermengelagerartikel2) && $status!='angelegt' && $status!='storniert') { + $auslagern = ''; + } + } + } + + $optionumlagern = ""; + $abschicken = ""; + + if($status!="angelegt" && $lieferantenretoure!="1") + { + $alsrechnung = ""; + if($this->app->erp->RechteVorhanden('lieferschein', 'proformarechnung') && $this->app->erp->ModulVorhanden('proformarechnung')) + { + $alsrechnung .= ""; + } } - } } - if($status!="angelegt" && $lieferantenretoure!="1") - { - $alsrechnung = ""; - if($this->app->erp->RechteVorhanden('lieferschein', 'proformarechnung') && $this->app->erp->ModulVorhanden('proformarechnung')) - { - $alsrechnung .= ""; - } - } if($this->app->erp->RechteVorhanden('belegeimport', 'belegcsvexport')) { @@ -629,6 +731,7 @@ class Lieferschein extends GenLieferschein $casehook $hookcase $casebelegeimport + case 'umlagern': window.location.href='index.php?module=lieferschein&action=umlagern&id=%value%'; break; } } @@ -639,16 +742,17 @@ class Lieferschein extends GenLieferschein $freigabe - + $abschicken $abschliessen $auslagern + $optionumlagern $alsrechnung $optionbelegeimport $etiketten $optioncustom $optionhook - $hookoption + $hookoption