diff --git a/www/pages/content/wareneingang_manuellerfassen.tpl b/www/pages/content/wareneingang_manuellerfassen.tpl index 69ac8c17..c273e158 100644 --- a/www/pages/content/wareneingang_manuellerfassen.tpl +++ b/www/pages/content/wareneingang_manuellerfassen.tpl @@ -10,8 +10,10 @@ - + + +
 {|Scannen|}: {|Artikel|}: {|Menge|}:
diff --git a/www/pages/content/wareneingang_mitarbeiter.tpl b/www/pages/content/wareneingang_mitarbeiter.tpl index e353b738..02a53e44 100644 --- a/www/pages/content/wareneingang_mitarbeiter.tpl +++ b/www/pages/content/wareneingang_mitarbeiter.tpl @@ -22,7 +22,7 @@
[DISPLAY_WARENEINGANG_RMA_HOOK1] -
  +
  diff --git a/www/pages/content/wareneingang_paketinhalt.tpl b/www/pages/content/wareneingang_paketinhalt.tpl index 75773e67..4aa8038c 100644 --- a/www/pages/content/wareneingang_paketinhalt.tpl +++ b/www/pages/content/wareneingang_paketinhalt.tpl @@ -1,162 +1,188 @@
- - - - - - [BEFORETAB1] -
- [TAB1START] - [MESSAGE1] -
-
-
-
-
-
- {|[LEGENDE]|} - - - - - - - [ISLIEFERANTSTART] - - [ISLIEFERANTENDE] -
{|Status|}:
Abgeschlossen am [DATUM_ABGESCHLOSSEN] durch [BEARBEITER_ABGESCHLOSSEN]
{|Lieferschein-Nr.|}:
{|Rechnung-Nr.|}:
{|Bemerkung|}:
{|Ziellager|}:
Wenn nicht angegeben, wird das Standardlager des Artikels bebucht.
-
-
-
-
-
-
- [BUTTONS] - [BEFOREFRM] - [AFTERFRM] - [DISTRIINHALTBUTTONS] - [BEFOREFRM] - [AFTERFRM] - - - {|Aktionen|} - [BEFOREMANUELLERFASSEN] - - [AFTERMANUELLERFASSEN] - [ISLIEFERANTSTART] - - - [ISLIEFERANTENDE] - - [ISLIEFERANTSTART] - - [ISLIEFERANTENDE] - -
- -
- -
- -
- -
- -
- -
-
-
-
-
-
-
-
-
-
- [TAB1] -
-
-
-
-
-
-
-
- [TAB1_SECOND] -
-
-
-
-
- [TAB1ENDE] -
- [AFTERTAB1] - [BEFORETAB2] -
- - [TAB2START] - [MESSAGE2] - -
-
-
-
- [TAB2] -
[BUTTONS2]
-
-
-
-
-
- {|Aktionen|} - [BUTTONS] -
-
-
-
-
- [TAB2ENDE] -
- [AFTERTAB2] - [BEFORETAB3] -
- [TAB3START] - [MESSAGE3] -
-
-
-
- [TAB3] -
-
-
-
-
- {|Aktionen|} - [BUTTONS] -
-
-
-
-
- [TAB3ENDE] -
- [AFTERTAB3] -
+ + + + [BEFORETAB1] +
[TAB1START] [MESSAGE1] [MESSAGE] +
+
+
+
+
+
+
+
+
+
+ {|[LEGENDE]|} + + + + + + + + + + + + + + + + + +
{|Status|}: + +
Abgeschlossen am [DATUM_ABGESCHLOSSEN] durch [BEARBEITER_ABGESCHLOSSEN]
{|Lieferschein-Nr.|}: + +
{|Rechnung-Nr.|}: + +
+
+
+
+
+
+
+ + + + + + [ISLIEFERANTSTART] + [ISLIEFERANTENDE] +
{|Bemerkung|}: + +
+
+
+
+
+
+
+
+
+
+ [TAB1] +
+
+
+
+
+
+
+
+
[BUTTONS] [BEFOREFRM] [AFTERFRM] [DISTRIINHALTBUTTONS] [BEFOREFRM] [AFTERFRM] + + + {|Aktionen|} + + + + [ISLIEFERANTSTART] + + + + [ISLIEFERANTENDE] +
+ +
+ +
+
+
+
+
+
+
+
+
+
[TAB1_SECOND]
+
+
+
+
+ + + {|Aktionen|} + [BEFOREMANUELLERFASSEN] + + + + [AFTERMANUELLERFASSEN] + + + + + + + + + + + + +
+ +
+ +
+ {|Ziellager|}:  +
+ +
+ +
+
+
+
+
+
+
[TAB1ENDE] +
[AFTERTAB1] [BEFORETAB2] +
[TAB2START] [MESSAGE2] +
+
+
+
[TAB2] +
[BUTTONS2]
+
+
+
+
+
+ {|Aktionen|} [BUTTONS]
+
+
+
+
[TAB2ENDE]
[AFTERTAB2] [BEFORETAB3] +
[TAB3START] [MESSAGE3] +
+
+
+
[TAB3]
+
+
+
+
+ {|Aktionen|} [BUTTONS]
+
+
+
+
[TAB3ENDE]
[AFTERTAB3] diff --git a/www/pages/wareneingang.php b/www/pages/wareneingang.php index 9c769ca1..418a60d7 100644 --- a/www/pages/wareneingang.php +++ b/www/pages/wareneingang.php @@ -83,24 +83,27 @@ class Wareneingang { $adresse = $this->app->DB->Select("SELECT adresse FROM paketannahme WHERE id='$id' LIMIT 1"); $subwhere = " AND (a.adresse=$adresse OR ( (e.gueltig_bis >= NOW() OR e.gueltig_bis='0000-00-00' OR e.gueltig_bis IS NULL) AND e.adresse=$adresse) )"; - $addjoin = " RIGHT JOIN einkaufspreise e ON e.adresse=a.adresse "; + $addjoin = " INNER JOIN einkaufspreise e ON e.adresse=a.adresse AND e.artikel = a.id "; $groupby = " GROUP BY a.id "; } - $sql = "SELECT SQL_CALC_FOUND_ROWS a.id, a.nummer as nummer, - CONCAT('',a.name_de,'',if(a.intern_gesperrt,CONCAT('', - - if(a.variante AND a.variante_von > 0,CONCAT(name_de,' (Variante von ',ifnull((SELECT tmp.nummer FROM artikel tmp WHERE a.variante_von=tmp.id LIMIT 1),''),')'),name_de) - - ,''), - - if(a.variante AND a.variante_von > 0,CONCAT(name_de,' (Variante von ',ifnull((SELECT tmp.nummer FROM artikel tmp WHERE a.variante_von=tmp.id LIMIT 1),''),')'),name_de) - - )) as name_de, - CONCAT('',a.name_de,'',trim((SELECT SUM(l.menge) FROM lager_platz_inhalt l WHERE l.artikel=a.id))+0) as lagerbestand, - p.abkuerzung as projekt, a.id as menu - FROM artikel a - LEFT JOIN projekt p ON p.id=a.projekt " . $addjoin; + $sql = " + SELECT SQL_CALC_FOUND_ROWS + a.id, + a.nummer as nummer, + CONCAT('',a.name_de,'',if(a.intern_gesperrt,CONCAT('', + if ( + a.variante AND a.variante_von > 0,CONCAT(name_de,' (Variante von ',ifnull((SELECT tmp.nummer FROM artikel tmp WHERE a.variante_von=tmp.id LIMIT 1),''),')'),name_de) + ,''), + if(a.variante AND a.variante_von > 0,CONCAT(name_de,' (Variante von ',ifnull((SELECT tmp.nummer FROM artikel tmp WHERE a.variante_von=tmp.id LIMIT 1),''),')'),name_de) + ) + ) as name_de, + CONCAT('',a.name_de,'',trim((SELECT SUM(l.menge) FROM lager_platz_inhalt l WHERE l.artikel=a.id))+0) as lagerbestand, + p.abkuerzung as projekt, + a.id as menu + FROM + artikel a + LEFT JOIN projekt p ON p.id=a.projekt " . $addjoin; $where = "a.geloescht=0 $subwhere " . $this->app->erp->ProjektRechte(); @@ -115,10 +118,19 @@ class Wareneingang { $adresse = $this->app->DB->Select("SELECT adresse FROM paketannahme WHERE id='$id' LIMIT 1"); $wareneingangauftragzubestellung = $this->app->erp->Firmendaten('wareneingangauftragzubestellung'); + $vorschlag = " + if( + bp.menge-bp.geliefert-COALESCE((SELECT TRIM(SUM(menge))+0 FROM paketdistribution WHERE vorlaeufig = 1 AND bestellung_position = bp.id),0) > 0, + bp.menge-bp.geliefert-COALESCE((SELECT TRIM(SUM(menge))+0 FROM paketdistribution WHERE vorlaeufig = 1 AND bestellung_position = bp.id),0), + 0 + ) + "; + + $input_for_menge = "CONCAT( 'Bei Lieferant: ',bp.bezeichnunglieferant, @@ -962,14 +974,28 @@ class Wareneingang { */ - $heading = array('Lieferant-Art.-Nr.', 'Art.-Nummer', 'Bestellung', 'Beschreibung', 'Menge', 'Bemerkung','Bearbeiter', ''); - $width = array( '5%', '5%', '5%', '30%', '5%', '15%', '5%', '30%'); + $heading = array('Lieferant-Art.-Nr.', 'Art.-Nummer', 'Bestellung', 'Beschreibung', 'Menge', 'Bemerkung','Bearbeiter', '','',''); + $width = array( '5%', '5%', '5%', '30%', '5%', '15%', '5%', '1%','1%','1%'); $findcols = array('p.nummer', 'p.bestellbezug', 'p.name', 'p.menge', 'p.bemerkung','p.bearbeiter'); $searchsql = array('p.nummer', 'p.name', 'p.bemerkung'); + $alignright = array('5'); $defaultorder = 1; $defaultorderdesc = 0; + + $icon_nicht_eingelagert = ""; + $icon_eingelagert = ""; + $icon_kein_lagerplatz = ""; + $icon_lagerplatz = ""; + + $deletelink = array( + "
" . " 'paketannahme'], + '&posid=', + ['sql' => 'paketdistribution.id'], + "\">Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\"> 
" + ); $sql = "SELECT SQL_CALC_FOUND_ROWS p.nummer, @@ -979,7 +1005,9 @@ class Wareneingang { p.name, p.menge, p.bemerkung, - p.bearbeiter + p.bearbeiter, + p.icon, + p.menu FROM ( SELECT @@ -989,12 +1017,30 @@ class Wareneingang { artikel.name_de as name, " . $this->app->erp->FormatMenge("paketdistribution.menge") . " as menge, paketdistribution.bemerkung, - paketdistribution.bearbeiter - FROM paketdistribution - INNER JOIN artikel ON artikel.id = paketdistribution.artikel + paketdistribution.bearbeiter, + CONCAT( + '
', + if ( + paketdistribution.vorlaeufig, + CONCAT( + '$icon_nicht_eingelagert', + if ( + artikel.lager_platz = 0, + '$icon_kein_lagerplatz', + '$icon_lagerplatz' + ) + ), + '$icon_eingelagert' + ), + '
' + ) + AS icon, + if (paketdistribution.vorlaeufig,".$this->app->erp->ConcatSQL($deletelink).",'') as menu + FROM paketdistribution + LEFT JOIN artikel ON artikel.id = paketdistribution.artikel LEFT JOIN bestellung_position ON bestellung_position = bestellung_position.id LEFT JOIN bestellung on bestellung_position.bestellung = bestellung.id - WHERE paketannahme = $id AND vorlaeufig IS NULL + WHERE paketannahme = $id ) AS p"; $where = ""; @@ -1126,8 +1172,10 @@ class Wareneingang { $this->app->ActionHandler("stornieren", "WareneingangStornieren"); $this->app->ActionHandler("settings", "WareneingangSettings"); + $this->app->ActionHandler("deletepos", "WareneingangPositionLoeschen"); + $this->app->DefaultActionHandler("list"); - $this->app->erp->Headlines('Wareneinang'); + $this->app->erp->Headlines('Wareneingang'); $this->app->ActionHandlerListen($app); } @@ -1204,7 +1252,6 @@ class Wareneingang { $this->app->Tpl->Set('ID', $id); $this->app->Tpl->Add('KURZUEBERSCHRIFT', ' Paketannahme / Leistungserfassung'); $this->app->erp->MenuEintrag('index.php?module=wareneingang&action=paketannahme', 'Neu'); - $this->app->erp->MenuEintrag('index.php?module=wareneingang&action=list', 'Übersicht'); $this->app->erp->RunMenuHook('wareneingangpaket'); $this->app->erp->MenuEintrag( 'index.php?module=wareneingang&action=settings&menu=paket', @@ -1647,9 +1694,10 @@ class Wareneingang { } public function WareneingangPaketDistriInhalt() { - $this->WareneingangPaketMenu(); $id = $this->app->Secure->GetGET('id'); + $this->app->erp->MenuEintrag('index.php?module=wareneingang&action=distriinhalt&id='.$id, 'Details'); + $this->app->Tpl->Add('KURZUEBERSCHRIFT', ' Paketannahme / Leistungserfassung'); $cmd = $this->app->Secure->GetGET('cmd'); $lsnr = $this->app->Secure->GetPOST('lsnr'); $renr = $this->app->Secure->GetPOST('renr'); @@ -1855,7 +1903,7 @@ class Wareneingang { } break; - case 'speichern': + case 'hinzufuegen': $menge_input = $this->app->Secure->GetPOSTArray(); $mengen = array(); @@ -1865,9 +1913,9 @@ class Wareneingang { if ((strpos($key,'menge_') === 0) && ($menge !== '')) { $bestellposition = substr($key,'6'); - if ($menge >= 0) { // Allow 0 for reset of saved value + if ($menge > 0) { // Gather info bestellung - $bparr = $this->app->DB->SelectRow("SELECT * FROM bestellung INNER JOIN bestellung_position ON bestellung_position.bestellung = bestellung.id INNER JOIN artikel ON bestellung_position.artikel = artikel.id WHERE bestellung_position.id='$bestellposition' LIMIT 1"); + $bparr = $this->app->DB->SelectRow("SELECT bp.artikel, a.nummer, b.projekt, b.belegnr, bp.vpe, bp.menge FROM bestellung b INNER JOIN bestellung_position bp ON bp.bestellung = b.id INNER JOIN artikel a ON bp.artikel = a.id WHERE bp.id='$bestellposition' LIMIT 1"); $artikel = $bparr['artikel']; $artikel_nr = $bparr['nummer']; $projekt = $bparr['projekt']; @@ -1876,8 +1924,8 @@ class Wareneingang { $menge_bestellung = $bparr['menge']; // Check existing preliminary value - $sql = "SELECT id FROM paketdistribution WHERE paketannahme = ".$id." AND bestellung_position = ".$bestellposition." AND vorlaeufig = 1 LIMIT 1"; - $preliminary = $this->app->DB->Select($sql); + $sql = "SELECT id, menge FROM paketdistribution WHERE paketannahme = ".$id." AND bestellung_position = ".$bestellposition." AND vorlaeufig = 1 LIMIT 1"; + $preliminary = $this->app->DB->SelectRow($sql); if (empty($preliminary)) { $sql = "INSERT INTO paketdistribution( @@ -1904,20 +1952,101 @@ class Wareneingang { '$menge', '$vpe', '', - '$bemerkung', + '', '$bestellposition', 1 )"; $this->app->DB->Insert($sql); } else { - $sql = "UPDATE paketdistribution SET menge = ".$menge." WHERE id = ".$preliminary; + $menge = $menge + $preliminary['menge']; + if ($menge > $bparr['menge']-$bparr['geliefert']) { + $menge = $bparr['menge']-$bparr['geliefert']; + } + $sql = "UPDATE paketdistribution SET menge = ".$menge." WHERE id = ".$preliminary['id']; $this->app->DB->Insert($sql); } } } } break; + case 'vorlaeufige_buchen': + $ziellager_from_form = $this->app->erp->ReplaceLagerPlatz(true,$this->app->Secure->GetPOST('ziellager'),true); // Parameters: Target db?, value, from form? + $sql = "SELECT * FROM paketdistribution WHERE paketannahme = ".$id." AND vorlaeufig = 1"; + $positionen = $this->app->DB->SelectArr($sql); + foreach ($positionen as $position) { + $bemerkung = ""; + $menge = $position['menge']; + $bestellposition = $position['bestellung_position']; + if ($menge > 0) { + // Gather info bestellung + $bparr = $this->app->DB->SelectRow(" + SELECT + * + FROM + bestellung + INNER JOIN + bestellung_position ON bestellung_position.bestellung = bestellung.id + INNER JOIN + artikel ON bestellung_position.artikel = artikel.id + WHERE + bestellung_position.id='$bestellposition' + LIMIT 1 + "); + $artikel = $bparr['artikel']; + $artikel_nr = $bparr['nummer']; + $projekt = $bparr['projekt']; + $bestellung_belegnr = $bparr['belegnr']; + $vpe = $bparr['vpe']; + $menge_bestellung = $bparr['menge']; + if ($bparr['lagerartikel']) { + // Get Lager_platz + if (empty($ziellager_from_form)) { + $lager = $this->app->DB->Select("SELECT lager_platz FROM artikel WHERE id='" . $artikel . "' LIMIT 1"); + if (empty($lager)) { + $msg .= '
Kein Ziellagerplatz gefunden für Artikel: '.$artikel_nr.'
'; + continue; + } + } + else { + $lager = $ziellager_from_form; + } + + // Put stock + $this->app->erp->LagerEinlagern($artikel, $menge, $lager, '', "Wareneingang Paket $id, Bestellung $bestellung_belegnr", '', $id); + $lagerplatz_name = $this->app->DB->Select("SELECT kurzbezeichnung FROM lager_platz WHERE lager_platz.id = $lager LIMIT 1"); + $bemerkung = $lagerplatz_name; + } + // Increase bestellung_position geliefert_menge + $geliefert = $this->app->DB->Select("SELECT ifnull(geliefert,0) FROM bestellung_position WHERE id='$bestellposition' LIMIT 1"); + $geliefert += $menge; + + $sql = "UPDATE bestellung_position SET geliefert='$geliefert' WHERE id='$bestellposition' LIMIT 1"; + $this->app->DB->Update($sql); + + // Write paketdistribution + $sql = "UPDATE + paketdistribution + SET + bearbeiter = '". $this->app->User->GetName()."', + zeit = NOW(), + bemerkung = '".$bemerkung."', + vorlaeufig = NULL + WHERE + id = ".$position['id']." + "; + $this->app->DB->Update($sql); + } + } + + break; case 'abschliessen': + + $sql = "SELECT id FROM paketdistribution WHERE paketannahme = ".$id." AND vorlaeufig = 1"; + + $vorlaeufige = $this->app->DB->SelectArr($sql); + if (!empty($vorlaeufige)) { + break; + } // Save header and finish $sql = "UPDATE paketannahme SET status='abgeschlossen', datum_abgeschlossen = NOW(), bearbeiter_abgeschlossen = '".$this->app->User->GetName()."' WHERE id='$id'"; $this->app->DB->Update($sql); @@ -2006,6 +2135,15 @@ class Wareneingang { $datum_abgeschlossen = $paketannahme['datum_abgeschlossen']; $bearbeiter_abgeschlossen = $paketannahme['bearbeiter_abgeschlossen']; + $sql = "SELECT id FROM paketdistribution WHERE paketannahme = ".$id." AND vorlaeufig = 1"; + $vorlaeufige = $this->app->DB->SelectArr($sql); + if (!empty($vorlaeufige)) { + $this->app->YUI->Message('warning','Nicht eingebuchte Positionen vorhanden'); + $this->app->Tpl->Set('ABSCHLIESSENHIDDEN','hidden'); + } else { + $this->app->Tpl->Set('BUCHENHIDDEN','hidden'); + } + $addressRow = empty($adresse) ? null : $this->app->DB->SelectRow( sprintf( 'SELECT `name`,`kundennummer`,`lieferantennummer` @@ -2035,8 +2173,8 @@ class Wareneingang { } else { $this->app->Tpl->Set('ISLIEFERANTSTART', ''); - $this->app->Tpl->Set('TAB1START', ''); - $this->app->Tpl->Set('TAB1ENDE', ''); +/* $this->app->Tpl->Set('TAB1START', ''); + $this->app->Tpl->Set('TAB1ENDE', '');*/ // $this->app->Tpl->Set('BEFORETAB1', ''); } @@ -2058,7 +2196,7 @@ class Wareneingang { $this->app->Tpl->Set('LEGENDE', "Paket Nr.$id vom $datum erfassen für Adresse '" . $addressRow['name'] . "':"); } - $this->app->Tpl->Add('TAB1_SECOND', "Paketinhalt / Leistungserfassung (eingebucht):"); + $this->app->Tpl->Add('TAB1_SECOND', "Paketinhalt / Leistungserfassung:"); $this->app->YUI->TableSearch('TAB1_SECOND', 'paketdistribution_list', "show", "", "", basename(__FILE__), __CLASS__); $this->app->erp->RunHook('wareneingang_distriinhalt', 1, $id); @@ -2087,9 +2225,14 @@ class Wareneingang { $this->app->Tpl->Set('STATUS',$status); if ($status == 'abgeschlossen') { - $this->app->Tpl->Set('ABSCHLIESSENHIDDEN','hidden'); - $this->app->Tpl->Set('DATUM_ABGESCHLOSSEN',$datum_abgeschlossen); - $this->app->Tpl->Set('BEARBEITER_ABGESCHLOSSEN',$bearbeiter_abgeschlossen); + $this->app->Tpl->Set('HINZUFUEGENHIDDEN','hidden'); + if (!empty($bearbeiter_abgeschlossen)) { + $this->app->Tpl->Set('ABSCHLIESSENHIDDEN','hidden'); + $this->app->Tpl->Set('DATUM_ABGESCHLOSSEN',$datum_abgeschlossen); + $this->app->Tpl->Set('BEARBEITER_ABGESCHLOSSEN',$bearbeiter_abgeschlossen); + } else { + $this->app->Tpl->Set('ABGESCHLOSSENHIDDEN','hidden'); + } } else { $this->app->Tpl->Set('ABGESCHLOSSENHIDDEN','hidden'); } @@ -3310,5 +3453,13 @@ class Wareneingang { $this->app->User->SetParameter('wareneingang_action', 'paketannahme'); $this->app->Tpl->Parse('PAGE', 'wareneingang_paketannahme.tpl'); } + + function WareneingangPositionLoeschen() { + $id = $this->app->Secure->GetGET('id'); + $posid = $this->app->Secure->GetGET('posid'); + $sql = "DELETE FROM paketdistribution WHERE id = ".$posid." AND vorlaeufig = 1"; + $this->app->DB->Delete($sql); + header('Location: index.php?module=wareneingang&wareneingang&action=distriinhalt&id='.$id); + } } diff --git a/www/themes/new/images/lagerplatzgo.png b/www/themes/new/images/lagerplatzgo.png new file mode 100644 index 00000000..48cf7cdb Binary files /dev/null and b/www/themes/new/images/lagerplatzgo.png differ diff --git a/www/themes/new/images/lagerplatzgostop.png b/www/themes/new/images/lagerplatzgostop.png new file mode 100644 index 00000000..0b55b39a Binary files /dev/null and b/www/themes/new/images/lagerplatzgostop.png differ diff --git a/www/themes/new/images/lagerplatzstop.png b/www/themes/new/images/lagerplatzstop.png new file mode 100644 index 00000000..9f5a7188 Binary files /dev/null and b/www/themes/new/images/lagerplatzstop.png differ