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]
+
+
+
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]
+
+
+
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