@@ -40,6 +40,7 @@ class Auftrag extends GenAuftrag
4040 */
4141 public function TableSearch ($ app , $ name , $ erlaubtevars )
4242 {
43+
4344 switch ($ name )
4445 {
4546 case 'auftraege ' :
@@ -711,6 +712,55 @@ function fnFilterColumn' . $r . ' ( i )
711712
712713
713714 break ;
715+ case 'positionen_teillieferung ' :
716+
717+ $ id = $ app ->Secure ->GetGET ('id ' );
718+ $ allowed ['positionen_teillieferung ' ] = array ('list ' );
719+ $ heading = array ('Position ' ,'Artikel ' ,'Nr. ' ,'Menge ' ,'Lager ' ,'Teilmenge ' ,'' );
720+ $ width = array ( '1% ' , '60% ' , '29% ' ,'5% ' ,'5% ' ); // Fill out manually later
721+
722+ // columns that are aligned right (numbers etc)
723+ // $alignright = array(4,5,6,7,8);
724+
725+ $ findcols = array ('ap.sort ' ,'a.name_de ' ,'a.nummer ' ,'ap.menge ' ,'lager ' ,'teilmenge ' );
726+ $ searchsql = array ('' );
727+
728+ $ defaultorder = 2 ;
729+ $ defaultorderdesc = 0 ;
730+
731+ $ input_for_menge = "CONCAT(
732+ '<input type = \"number \" min= \"0 \" max= \"',
733+ ap.menge,
734+ ' \" name= \"teilmenge_',
735+ ap.id,
736+ ' \"',
737+ ' value= \"',
738+
739+ ' \">',
740+ '</input>'
741+ ) " ;
742+
743+
744+ // .'(SELECT TRIM(IFNULL(SUM(l.menge),0))+0 FROM lager_platz_inhalt l WHERE l.artikel=a.id) as lager'
745+
746+ $ sql = "SELECT SQL_CALC_FOUND_ROWS
747+ ap.sort,
748+ ap.sort,
749+ a.name_de,
750+ a.nummer, "
751+ .$ this ->app ->erp ->FormatMenge ('ap.menge ' ).", "
752+ ."(SELECT TRIM(IFNULL(SUM(l.menge),0))+0 FROM lager_platz_inhalt l WHERE l.artikel=a.id) as lager, "
753+ .$ input_for_menge
754+ ." FROM auftrag_position ap
755+ INNER JOIN
756+ artikel a
757+ ON ap.artikel = a.id " ;
758+
759+ $ where = " ap.auftrag = $ id " ;
760+ $ count = "SELECT count(DISTINCT ap.id) FROM auftrag_position ap WHERE $ where " ;
761+ // $groupby = "";
762+
763+ break ;
714764
715765 }
716766 $ erg = [];
@@ -765,7 +815,7 @@ public function __construct($app, $intern = false)
765815 $ this ->app ->ActionHandler ("rechnung " ,"AuftragRechnung " );
766816 $ this ->app ->ActionHandler ("lieferschein " ,"AuftragLieferschein " );
767817 $ this ->app ->ActionHandler ("lieferscheinrechnung " ,"AuftragLieferscheinRechnung " );
768-
818+ $ this -> app -> ActionHandler ( " teillieferung " , " AuftragTeillieferung " );
769819 $ this ->app ->ActionHandler ("nachlieferung " ,"AuftragNachlieferung " );
770820 // $this->app->ActionHandler("versand","AuftragVersand");
771821 $ this ->app ->ActionHandler ("freigabe " ,"AuftragFreigabe " );
@@ -1271,7 +1321,11 @@ function AuftragIconMenu($id,$prefix="")
12711321 $ kommissionierart = $ this ->app ->DB ->Select ("SELECT kommissionierverfahren FROM projekt WHERE id=' $ projekt' LIMIT 1 " );
12721322 //$art = $this->app->DB->Select("SELECT art FROM auftrag WHERE id='$id' LIMIT 1");
12731323 $ alleartikelreservieren = '' ;
1274- $ teillieferungen = '' ;
1324+
1325+ if ($ status ==='angelegt ' || $ status ==='freigegeben ' ) {
1326+ $ teillieferungen = '<option value="teillieferung">Teilauftrag erstellen</option> ' ;
1327+ }
1328+
12751329 if ($ status ==='freigegeben ' ) {
12761330 $ alleartikelreservieren = "<option value= \"reservieren \">alle Artikel reservieren</option> " ;
12771331
@@ -1369,9 +1423,14 @@ function onchangeauftrag(cmd)
13691423 {
13701424 switch(cmd)
13711425 {
1372- case 'storno': if(!confirm('Wirklich stornieren?')) return document.getElementById('aktion $ prefix').selectedIndex = 0; else window.location.href='index.php?module=auftrag&action=delete&id=%value%'; break;
1373- case 'unstorno': if(!confirm('Wirklich stornierten Auftrag wieder freigeben?')) return document.getElementById('aktion $ prefix').selectedIndex = 0; else window.location.href='index.php?module=auftrag&action=undelete&id=%value%'; break;
1374- case 'teillieferung': window.location.href='index.php?module=auftrag&action=teillieferung&id=%value%'; break;
1426+ case 'storno':
1427+ if(!confirm('Wirklich stornieren?')) return document.getElementById('aktion $ prefix').selectedIndex = 0; else window.location.href='index.php?module=auftrag&action=delete&id=%value%'; break;
1428+ case 'unstorno':
1429+ if(!confirm('Wirklich stornierten Auftrag wieder freigeben?')) return document.getElementById('aktion $ prefix').selectedIndex = 0; else window.location.href='index.php?module=auftrag&action=undelete&id=%value%';
1430+ break;
1431+ case 'teillieferung':
1432+ window.location.href='index.php?module=auftrag&action=teillieferung&id=%value%';
1433+ break;
13751434 case 'anfrage': if(!confirm('Wirklich rückführen?')) return document.getElementById('aktion $ prefix').selectedIndex = 0; else window.location.href='index.php?module=auftrag&action=anfrage&id=%value%'; break;
13761435 case 'kreditlimit': if(!confirm('Wirklich Kreditlimit für diesen Auftrag freigeben?')) return document.getElementById('aktion $ prefix').selectedIndex = 0; else window.location.href='index.php?module=auftrag&action=kreditlimit&id=%value%'; break;
13771436 case 'copy': if(!confirm('Wirklich kopieren?')) return document.getElementById('aktion $ prefix').selectedIndex = 0; else window.location.href='index.php?module=auftrag&action=copy&id=%value%'; break;
@@ -7004,4 +7063,121 @@ public function Auftraegeberechnen() {
70047063 header ('Location: index.php?module=auftrag&action=versandzentrum ' );
70057064 }
70067065
7066+ /*
7067+ * Split auftrag into separate documents with submit -> do it and return jump to the new split part
7068+ */
7069+ function AuftragTeillieferung () {
7070+
7071+ $ id = $ this ->app ->Secure ->GetGET ('id ' );
7072+ $ this ->AuftragMenu ();
7073+ $ submit = $ this ->app ->Secure ->GetPOST ('submit ' );
7074+
7075+
7076+ $ sql = "SELECT * from auftrag WHERE id = $ id " ;
7077+ $ auftrag_alt = $ this ->app ->DB ->SelectArr ($ sql )[0 ];
7078+ $ msg = "" ;
7079+
7080+ if (in_array ($ auftrag_alt ['status ' ],array ('angelegt ' ,'freigegeben ' ))) {
7081+ if ($ submit != '' ) {
7082+ $ msg = "" ;
7083+ switch ($ submit ) {
7084+ case 'speichern ' :
7085+ // Get parameters
7086+
7087+ $ teilmenge_input = $ this ->app ->Secure ->GetPOSTArray ();
7088+
7089+ $ teilmengen = array ();
7090+
7091+ foreach ($ teilmenge_input as $ key => $ value ) {
7092+
7093+ if ((strpos ($ key ,'teilmenge_ ' ) === 0 ) && ($ value !== '' )) {
7094+ $ posid = substr ($ key ,'10 ' );
7095+ $ teilmenge = array ('posid ' => $ posid , 'menge ' => $ value );
7096+ $ teilmengen [] = $ teilmenge ;
7097+ }
7098+ }
7099+
7100+ if (!empty ($ teilmengen )) {
7101+
7102+ // Create new auftrag
7103+ $ sql = "SELECT * from auftrag WHERE id = $ id " ;
7104+ $ auftrag_alt = $ this ->app ->DB ->SelectArr ($ sql )[0 ];
7105+
7106+ // Part auftrag of part auftrag -> select parent
7107+ $ hauptauftrag_id = $ auftrag_alt ['teillieferungvon ' ];
7108+ if ($ hauptauftrag_id != 0 ) {
7109+ $ sql = "SELECT belegnr FROM auftrag WHERE id = $ hauptauftrag_id " ;
7110+ $ hauptauftrag_belegnr = $ this ->app ->DB ->SelectArr ($ sql )[0 ]['belegnr ' ];
7111+ } else {
7112+ $ hauptauftrag_id = $ auftrag_alt ['id ' ];
7113+ $ hauptauftrag_belegnr = $ auftrag_alt ['belegnr ' ];
7114+ }
7115+
7116+ $ sql = "SELECT MAX(teillieferungnummer) as tpn FROM auftrag WHERE teillieferungvon = $ hauptauftrag_id " ;
7117+ $ teillieferungnummer = $ this ->app ->DB ->SelectArr ($ sql )[0 ]['tpn ' ];
7118+ if (empty ($ teillieferungnummer ) || $ teillieferungnummer == 0 ) {
7119+ $ teillieferungnummer = '1 ' ;
7120+ } else {
7121+ $ teillieferungnummer ++;
7122+ }
7123+
7124+ $ belegnr_neu = $ hauptauftrag_belegnr ."- " .$ teillieferungnummer ;
7125+
7126+ $ auftrag_neu = $ auftrag_alt ;
7127+ $ auftrag_neu ['id ' ] = null ;
7128+ $ auftrag_neu ['belegnr ' ] = $ belegnr_neu ;
7129+ $ auftrag_neu ['teillieferungvon ' ] = $ hauptauftrag_id ;
7130+ $ auftrag_neu ['teillieferungnummer ' ] = $ teillieferungnummer ;
7131+
7132+ $ id_neu = $ this ->app ->DB ->MysqlCopyRow ('auftrag ' ,'id ' ,$ id );
7133+ $ sql = "UPDATE auftrag SET belegnr = ' $ belegnr_neu', teillieferungvon = $ hauptauftrag_id, teillieferungnummer = $ teillieferungnummer WHERE id = $ id_neu " ;
7134+ echo ("--------------------------- " .$ sql ."<br> " );
7135+ $ this ->app ->DB ->Update ($ sql );
7136+
7137+ // Adjust quantities
7138+ foreach ($ teilmengen as $ teilmenge ) {
7139+
7140+ $ sql = "SELECT menge FROM auftrag_position WHERE id = " .$ teilmenge ['posid ' ];
7141+ $ menge_alt = $ this ->app ->DB ->SelectArr ($ sql )[0 ]['menge ' ];
7142+
7143+ $ menge_neu = $ teilmenge ['menge ' ];
7144+ if ($ menge_neu > $ menge_alt ) {
7145+ $ menge_neu = $ menge_alt ;
7146+ }
7147+
7148+ $ menge_reduziert = $ menge_alt -$ menge_neu ;
7149+
7150+ $ posid_alt = $ teilmenge ['posid ' ];
7151+ $ posid_neu = $ this ->app ->DB ->MysqlCopyRow ('auftrag_position ' ,'id ' ,$ posid_alt );
7152+
7153+ $ sql = "UPDATE auftrag_position SET menge = $ menge_reduziert WHERE id = $ posid_alt " ;
7154+ echo ("--------------------------- " .$ sql ."<br> " );
7155+ $ this ->app ->DB ->Update ($ sql );
7156+ $ sql = "UPDATE auftrag_position SET auftrag = $ id_neu, menge = $ menge_neu WHERE id = $ posid_neu " ;
7157+ echo ("--------------------------- " .$ sql ."<br> " );
7158+ $ this ->app ->DB ->Update ($ sql );
7159+ }
7160+ }
7161+
7162+ break ;
7163+ case 'abbrechen ' :
7164+ header ('Location: index.php?module=auftrag&action=edit&id= ' .$ id );
7165+ return ;
7166+ break ;
7167+ }
7168+ } // Submit
7169+ else {
7170+ $ msg = "Teilauftrag: Auswahl der Artikel für den Teilauftrag. " ;
7171+ }
7172+ } // Status ok
7173+ else {
7174+ $ msg = 'Teilauftrag in diesem Status nicht möglich. ' ;
7175+ }
7176+
7177+ $ this ->app ->Tpl ->Add ('INFOTEXT ' ,$ msg );
7178+ $ this ->app ->YUI ->TableSearch ('TABLE ' ,'positionen_teillieferung ' , 'show ' ,'' ,'' ,basename (__FILE__ ), __CLASS__ );
7179+
7180+ $ this ->app ->Tpl ->Parse ('PAGE ' ,'auftrag_teillieferung.tpl ' );
7181+ } // AuftragTeillieferung
7182+
70077183}
0 commit comments