-
[AFTERTAB1]
@@ -108,4 +134,4 @@
});
}
});
-
\ No newline at end of file
+
diff --git a/www/pages/content/wareneingangpaketdistribution_list.tpl b/www/pages/content/wareneingangpaketdistribution_list.tpl
new file mode 100644
index 00000000..1742e34f
--- /dev/null
+++ b/www/pages/content/wareneingangpaketdistribution_list.tpl
@@ -0,0 +1,5 @@
+
+ [MESSAGE]
+ [TAB1]
+ [TAB1NEXT]
+
diff --git a/www/pages/content/wareneingangpaketdistribution_tab3_lager.tpl b/www/pages/content/wareneingangpaketdistribution_tab3_lager.tpl
index 0d995f5c..e2680720 100644
--- a/www/pages/content/wareneingangpaketdistribution_tab3_lager.tpl
+++ b/www/pages/content/wareneingangpaketdistribution_tab3_lager.tpl
@@ -15,7 +15,7 @@
{|Nummer|}: | [NUMMER] |
[BILDERFASSENSTART]
| |
-
{|Bild erfassen|}: | |
+
{|Bild für Artikelstammdaten erfassen|}: | |
{|Bildtyp|}: | |
[BILDERFASSENENDE]
| |
diff --git a/www/pages/content/wareneingangpaketdistribution_tab3_mitarbeiter.tpl b/www/pages/content/wareneingangpaketdistribution_tab3_mitarbeiter.tpl
index 5be8c34f..870f7bd0 100644
--- a/www/pages/content/wareneingangpaketdistribution_tab3_mitarbeiter.tpl
+++ b/www/pages/content/wareneingangpaketdistribution_tab3_mitarbeiter.tpl
@@ -5,7 +5,7 @@
- Der Artikel ist für einen Mitarbeiter.
+Dies ist kein Lagerartikel.
[MESSAGE]
@@ -15,12 +15,12 @@
Artikel: | [NAME] |
-Lieferant: | [LIEFERANT] |
+
| |
Bemerkung: |
|
| |
-1. Schritt: | Artikel zu Mitarbeiter [MITARBEITER] bringen
+ | Anmerkung: | Artikel zu Mitarbeiter [MITARBEITER] bringen
[DISPLAY_WARENEINGANG_RMA_HOOK1]
|
| |
diff --git a/www/pages/wareneingang.php b/www/pages/wareneingang.php
index 9ae6bbe5..8f79be70 100644
--- a/www/pages/wareneingang.php
+++ b/www/pages/wareneingang.php
@@ -1,3047 +1,3206 @@
-app->Secure->GetGET('id');
- switch($name) {
- case 'wareneingangartikelmanuellerfassen':
- $allowed['wareneingang'] = array('manuellerfassen');
- $this->app->Tpl->Add('JQUERYREADY', "$('#eigene').click( function() { fnFilterColumn1( 0 ); } );");
- for ($r = 1;$r < 2;$r++) {
- $this->app->Tpl->Add('JAVASCRIPT', '
- function fnFilterColumn' . $r . ' ( i )
- {
- if(oMoreData' . $r . $name . '==1)
- oMoreData' . $r . $name . ' = 0;
- else
- oMoreData' . $r . $name . ' = 1;
-
- $(\'#' . $name . '\').dataTable().fnFilter(
- \'\',
- i,
- 0,0
- );
- }
- ');
- }
-
-
-
- // headings
- $alignright = array(3);
- $heading = array('Nummer', 'Artikel', 'Lagerbestand', 'Projekt', 'Menü');
- $width = array( '10%', '60%', '5%', '15%', '1%');
- $findcols = array( 'nummer', 'name_de', 'ifnull((SELECT SUM(l.menge) FROM lager_platz_inhalt l WHERE l.artikel=a.id),0 )', 'projekt', 'id');
-
- if ($this->app->erp->Firmendaten("artikel_suche_kurztext") == "1") {
- $searchsql = array('a.name_de', 'kurztext_de', 'a.nummer', 'p.abkuerzung', "a.hersteller", "a.herstellernummer", "a.anabregs_text", "(SELECT tmp.nummer FROM artikel tmp WHERE a.variante_von=tmp.id LIMIT 1)");
- } else {
- $searchsql = array('a.name_de', 'a.nummer', 'p.abkuerzung', "a.hersteller", "a.herstellernummer", "(SELECT tmp.nummer FROM artikel tmp WHERE a.variante_von=tmp.id LIMIT 1)");
- }
- $searchsql[] = 'a.ean';
- $searchsql[] = 'a.herstellernummer';
- $paket = $this->app->Secure->GetGET("id");
- $menu = "app->Conf->WFconf['defaulttheme']}/images/forward.svg\" border=\"0\">";
-
- // SQL statement
-
-
- $more_data1 = $this->app->Secure->GetGET("more_data1");
-
- if($more_data1=="1")
- {
- $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 ";
-
- $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;
-
- $where = "a.geloescht=0 $subwhere " . $this->app->erp->ProjektRechte();
-
- $moreinfo = false;
- $count = "SELECT COUNT(a.id) FROM artikel a LEFT JOIN projekt p ON p.id=a.projekt $addjoin WHERE a.geloescht=0 $subwhere " . $this->app->erp->ProjektRechte();
- break;
- case 'wareneingang_lieferant':
- $allowed['wareneingang'] = array('distriinhalt');
-
- // headings
- $id = $this->app->Secure->GetGET('id');
- $adresse = $this->app->DB->Select("SELECT adresse FROM paketannahme WHERE id='$id' LIMIT 1");
- $wareneingangauftragzubestellung = $this->app->erp->Firmendaten('wareneingangauftragzubestellung');
- if($wareneingangauftragzubestellung)
- {
- $heading = array('Bestellnummer', 'Nummer', 'Bestellung', 'Beschreibung', 'Lieferdatum', 'Projekt', 'Menge', 'Geliefert', 'Offen', 'Auftrag', 'Menge', 'Aktion');
- $width = array('5%', '5%', '5%', '30%', '5%', '5%', '5%', '5%', '5%', '5%', '5%', '5%');
- $findcols = array('bp.bestellnummer', 'art.nummer', 'b.belegnr',
- "CONCAT(art.name_de,' Bei Lieferant: ',bp.bezeichnunglieferant,
- IF(b.internebemerkung != '' AND b.internebemerkung IS NOT NULL, CONCAT(' Interne Bemerkung: ',b.internebemerkung),''),
- IF(b.internebezeichnung != '' AND b.internebezeichnung IS NOT NULL, CONCAT(' Interne Bezeichnung: ',b.internebezeichnung), ''),
- IF(b.bestellungbestaetigtabnummer != '' AND b.bestellungbestaetigtabnummer IS NOT NULL, CONCAT(' AB Nummer Lieferant: ',b.bestellungbestaetigtabnummer), ''),
- IF(b.bestaetigteslieferdatum != '' AND b.bestaetigteslieferdatum IS NOT NULL AND b.bestaetigteslieferdatum != '0000-00-00', CONCAT(' Best. Lieferdatum: ',DATE_FORMAT(b.bestaetigteslieferdatum, '%d.%m.%Y')),'')
- )",
- "if(bp.lieferdatum,bp.lieferdatum,'sofort')", 'p.abkuerzung', 'bp.menge', 'bp.geliefert', 'offen','auftrag','auftragmenge', 'bp.id');
- $searchsql = array('bp.bestellnummer', 'art.nummer', 'art.ean', 'b.belegnr', "CONCAT(art.name_de,' Bei Lieferant: ',bp.bezeichnunglieferant, '',
- IF(b.internebemerkung != '' AND b.internebemerkung IS NOT NULL, CONCAT(' Interne Bemerkung: ',b.internebemerkung),''),
- IF(b.internebezeichnung != '' AND b.internebezeichnung IS NOT NULL, CONCAT(' Interne Bezeichnung: ',b.internebezeichnung), ''),
- IF(b.bestellungbestaetigtabnummer != '' AND b.bestellungbestaetigtabnummer IS NOT NULL, CONCAT(' AB Nummer Lieferant: ',b.bestellungbestaetigtabnummer), ''),
- IF(b.bestaetigteslieferdatum != '' AND b.bestaetigteslieferdatum IS NOT NULL AND b.bestaetigteslieferdatum != '0000-00-00', CONCAT(' Best. Lieferdatum: ',DATE_FORMAT(b.bestaetigteslieferdatum, '%d.%m.%Y')),'')
- )", "if(bp.lieferdatum,DATE_FORMAT(bp.lieferdatum,'%d.%m.%Y'),'sofort')", 'p.abkuerzung', 'bp.menge', 'bp.geliefert',"if((SELECT COUNT(auf2.id) FROM auftrag auf2 INNER JOIN auftrag_position ap2 ON auf2.id = ap2.auftrag WHERE bp.auftrag_position_id = ap2.id ) > 0,(SELECT auf2.belegnr FROM auftrag auf2 INNER JOIN auftrag_position ap2 ON auf2.id = ap2.auftrag WHERE bp.auftrag_position_id = ap2.id ORDER BY belegnr LIMIT 1),'-' )");
- }else{
- $heading = array('Bestellnummer', 'Nummer', 'Bestellung', 'Beschreibung', 'Lieferdatum', 'Projekt', 'Menge', 'Geliefert', 'Offen', 'Aktion');
- $width = array('5%', '5%', '5%', '30%', '5%', '5%', '5%', '5%', '5%', '5%');
- $findcols = array('bp.bestellnummer', 'art.nummer', 'b.belegnr',
- "CONCAT(art.name_de,' Bei Lieferant: ',bp.bezeichnunglieferant,
- IF(b.internebemerkung != '' AND b.internebemerkung IS NOT NULL, CONCAT(' Interne Bemerkung: ',b.internebemerkung),''),
- IF(b.internebezeichnung != '' AND b.internebezeichnung IS NOT NULL, CONCAT(' Interne Bezeichnung: ',b.internebezeichnung), ''),
- IF(b.bestellungbestaetigtabnummer != '' AND b.bestellungbestaetigtabnummer IS NOT NULL, CONCAT(' AB Nummer Lieferant: ',b.bestellungbestaetigtabnummer), ''),
- IF(b.bestaetigteslieferdatum != '' AND b.bestaetigteslieferdatum IS NOT NULL AND b.bestaetigteslieferdatum != '0000-00-00', CONCAT(' Best. Lieferdatum: ',DATE_FORMAT(b.bestaetigteslieferdatum, '%d.%m.%Y')),'')
- )",
- "if(bp.lieferdatum,bp.lieferdatum,'sofort')", 'p.abkuerzung', 'bp.menge', 'bp.geliefert', $this->app->erp->FormatMenge("bp.menge - bp.geliefert"), 'bp.id');
- $searchsql = array('bp.bestellnummer', 'art.nummer', 'b.belegnr', "CONCAT(art.name_de,' Bei Lieferant: ',bp.bezeichnunglieferant, '',
- IF(b.internebemerkung != '' AND b.internebemerkung IS NOT NULL, CONCAT(' Interne Bemerkung: ',b.internebemerkung),''),
- IF(b.internebezeichnung != '' AND b.internebezeichnung IS NOT NULL, CONCAT(' Interne Bezeichnung: ',b.internebezeichnung), ''),
- IF(b.bestellungbestaetigtabnummer != '' AND b.bestellungbestaetigtabnummer IS NOT NULL, CONCAT(' AB Nummer Lieferant: ',b.bestellungbestaetigtabnummer), ''),
- IF(b.bestaetigteslieferdatum != '' AND b.bestaetigteslieferdatum IS NOT NULL AND b.bestaetigteslieferdatum != '0000-00-00', CONCAT(' Best. Lieferdatum: ',DATE_FORMAT(b.bestaetigteslieferdatum, '%d.%m.%Y')),'')
- ,'')", "if(bp.lieferdatum,DATE_FORMAT(bp.lieferdatum,'%d.%m.%Y'),'sofort')", 'p.abkuerzung', 'bp.menge', 'bp.geliefert', $this->app->erp->FormatMenge("bp.menge - bp.geliefert"), 'art.ean', 'art.herstellernummer');
- }
-
- $alignright = array(7,8,9);
- $datecols = array(4);
-
- //$defaultorder = 6; //Optional wenn andere Reihenfolge gewuenscht
-
- //$defaultorderdesc=1;
-
- $menu = "";
-
- //&NBSP; ";
- $menucol = 4;
-
- if($this->app->erp->Firmendaten("wareneingang_lagerartikel")) $lagerartikel = "AND art.lagerartikel = 1";
- else $lagerartikel = "";
- $receiptDocument = $this->app->erp->ModulVorhanden('receiptdocument');
- if($receiptDocument) {
- $this->app->DB->Select('SELECT id FROM receiptdocument LIMIT 1');
- if($this->app->DB->error()) {
- $receiptDocument = false;
- }
- }
- $rdJoin = '';
- $colBeschreibung = "CONCAT(art.name_de,' Bei Lieferant: ',bp.bezeichnunglieferant, '',
- IF(b.internebemerkung != '' AND b.internebemerkung IS NOT NULL, CONCAT(' Interne Bemerkung: ',b.internebemerkung),''),
- IF(b.internebezeichnung != '' AND b.internebezeichnung IS NOT NULL, CONCAT(' Interne Bezeichnung: ',b.internebezeichnung), ''),
- IF(b.bestellungbestaetigtabnummer != '' AND b.bestellungbestaetigtabnummer IS NOT NULL, CONCAT(' AB Nummer Lieferant: ',b.bestellungbestaetigtabnummer), ''),
- IF(b.bestaetigteslieferdatum != '' AND b.bestaetigteslieferdatum IS NOT NULL AND b.bestaetigteslieferdatum != '0000-00-00', CONCAT(' Best. Lieferdatum: ',DATE_FORMAT(b.bestaetigteslieferdatum, '%d.%m.%Y')),'')
- ,''
- )";
- if(!empty($receiptDocument)){
- $rdJoin = " LEFT JOIN (
- SELECT supplier_order_id, MAX(useredit_id) AS useredit, MAX(useredit_time) AS useredit_time
- FROM receiptdocument
- WHERE (status = 'angelegt' OR status = '') AND supplier_order_id > 0
- AND useredit_time <> '0000-00-00 00:00:00' AND DATE_SUB(NOW(), INTERVAL 600 SECOND) < useredit_time
- GROUP BY supplier_order_id
- ) AS rd ON b.id = rd.supplier_order_id ";
- $colBeschreibung = "CONCAT(art.name_de,' Bei Lieferant: ',bp.bezeichnunglieferant, '',
- IF(b.internebemerkung != '' AND b.internebemerkung IS NOT NULL, CONCAT(' Interne Bemerkung: ',b.internebemerkung),''),
- IF(b.internebezeichnung != '' AND b.internebezeichnung IS NOT NULL, CONCAT(' Interne Bezeichnung: ',b.internebezeichnung), ''),
- IF(b.bestellungbestaetigtabnummer != '' AND b.bestellungbestaetigtabnummer IS NOT NULL, CONCAT(' AB Nummer Lieferant: ',b.bestellungbestaetigtabnummer), ''),
- IF(b.bestaetigteslieferdatum != '' AND b.bestaetigteslieferdatum IS NOT NULL AND b.bestaetigteslieferdatum != '0000-00-00', CONCAT(' Best. Lieferdatum: ',DATE_FORMAT(b.bestaetigteslieferdatum, '%d.%m.%Y')),'')
- ,'',
- IF(
- IFNULL(rd.useredit,0) <= 0,'',
- CONCAT(' (in Bearbeitung von ', (SELECT a2.name FROM user u2 LEFT JOIN adresse a2 ON a2.id=u2.adresse WHERE u2.id=rd.useredit LIMIT 1),')')
- )
- )";
- }
- // SQL statement
- $sql = "SELECT SQL_CALC_FOUND_ROWS bp.id, bp.bestellnummer, art.nummer, b.belegnr as `Bestellung`,
- $colBeschreibung as beschreibung,
- if(bp.lieferdatum,DATE_FORMAT(bp.lieferdatum,'%d.%m.%Y'),'sofort') as lieferdatum, p.abkuerzung as projekt,
- ".$this->app->erp->FormatMenge('bp.menge').", ".$this->app->erp->FormatMenge('bp.geliefert').",
- ".$this->app->erp->FormatMenge('bp.menge - bp.geliefert')." as offen,
- bp.id
- FROM bestellung_position bp
- INNER JOIN bestellung b ON bp.bestellung=b.id
- $rdJoin
- INNER JOIN artikel art ON art.id=bp.artikel $lagerartikel
- LEFT JOIN projekt p ON b.projekt=p.id ";
- if($wareneingangauftragzubestellung)
- {
- $sql = "SELECT SQL_CALC_FOUND_ROWS bp.id, bp.bestellnummer, art.nummer, b.belegnr as `Bestellung`,
- $colBeschreibung as beschreibung,
- if(bp.lieferdatum,DATE_FORMAT(bp.lieferdatum,'%d.%m.%Y'),'sofort') as lieferdatum, p.abkuerzung as projekt,
- trim(bp.menge)+0, trim(bp.geliefert)+0, trim(bp.menge - bp.geliefert)+0 as offen,
- if((SELECT COUNT(auf2.id) FROM auftrag auf2 INNER JOIN auftrag_position ap2 ON auf2.id = ap2.auftrag WHERE bp.auftrag_position_id = ap2.id ) > 0,(SELECT auf2.belegnr FROM auftrag auf2 INNER JOIN auftrag_position ap2 ON auf2.id = ap2.auftrag WHERE bp.auftrag_position_id = ap2.id ORDER BY belegnr LIMIT 1),'-' ) AS auftrag,
- if((SELECT sum(ap2.menge) FROM auftrag auf2 INNER JOIN auftrag_position ap2 ON auf2.id = ap2.auftrag WHERE bp.auftrag_position_id = ap2.id ) > 0,(SELECT TRIM(sum(ap2.menge))+0 FROM auftrag auf2 INNER JOIN auftrag_position ap2 ON auf2.id = ap2.auftrag WHERE bp.auftrag_position_id = ap2.id ),'-' ) AS auftragmenge,
- bp.id
- FROM bestellung_position bp
- INNER JOIN bestellung b ON bp.bestellung=b.id
- $rdJoin
- INNER JOIN artikel art ON art.id=bp.artikel $lagerartikel
- LEFT JOIN projekt p ON b.projekt=p.id ";
-
- }
-
- $where = " b.adresse='$adresse' AND b.belegnr != ''
- AND bp.geliefert < bp.menge AND (bp.abgeschlossen IS NULL OR bp.abgeschlossen=0) AND (b.status='versendet' OR b.status='freigegeben') " . $this->app->erp->ProjektRechte();
-
- // gesamt anzahl
- $count = "
- SELECT COUNT(bp.id) FROM bestellung_position bp INNER JOIN bestellung b ON bp.bestellung=b.id INNER JOIN artikel art ON art.id=bp.artikel $lagerartikel LEFT JOIN projekt p ON bp.projekt=p.id WHERE b.adresse='$adresse' AND b.belegnr !='' AND bp.geliefert < bp.menge AND (bp.abgeschlossen IS NULL OR bp.abgeschlossen=0) AND (b.status='versendet' OR b.status='freigegeben') " . $this->app->erp->ProjektRechte();
- $moreinfo = false;
- $this->app->erp->RunHook('warneingang_tablesearch_wareneingang_lieferant', 4, $id, $sql, $where, $count);
- break;
- case 'paketannahme_retoure':
- $allowed['wareneingang'] = array('distriinhalt');
- $adresse = $this->app->DB->Select("SELECT adresse FROM paketannahme WHERE id='$id' LIMIT 1");
- $heading = array(
- 'Nummer', 'Beschreibung', 'Retoure', 'Datum', 'Projekt', 'Menge',
- 'Geliefert', 'Offen', 'Aktion'
- );
- $menucol = (!empty($heading)?count($heading):0);
- $width = array('5%', '5%', '5%', '30%', '5%', '5%', '5%', '5%', '5%', '5%');
- $findcols = array('art.nummer','art.name_de', 'b.belegnr',
- "DATE_FORMAT(b.datum,'%d.%m.%Y')",
- 'p.abkuerzung', 'bp.menge', 'bp.menge_eingang',
- $this->app->erp->FormatMenge('bp.menge - bp.menge_eingang'), 'bp.id'
- );
- $searchsql = array('art.nummer','art.name_de', 'b.belegnr',
- "DATE_FORMAT(b.datum,'%d.%m.%Y')", 'p.abkuerzung', 'bp.menge',
- 'bp.menge_eingang',
- $this->app->erp->FormatMenge('bp.menge - bp.menge_eingang'),
- 'art.ean', 'art.herstellernummer'
- );
- $this->app->DB->SelectRow(
- 'SELECT `return_order_id`, `id`, `useredit_time`, `status` FROM `receiptdocument` LIMIT 1'
- );
- $count = "SELECT COUNT(bp.id)
- FROM `retoure` as `b`
- INNER JOIN `retoure_position` as `bp` ON b.id = bp.retoure
- LEFT JOIN `projekt` AS `p` ON b.projekt = p.id
- ";
- if(empty($this->app->DB->error())){
-
- $sql = "SELECT SQL_CALC_FOUND_ROWS bp.id, art.nummer,
- CONCAT(art.name_de,
- IF(
- IFNULL(rd.useredit,0) <= 0,'',
- CONCAT(' (in Bearbeitung von ',
- (SELECT a2.name FROM user u2 LEFT JOIN adresse a2 ON a2.id=u2.adresse WHERE u2.id=rd.useredit LIMIT 1),')')
- )
- ), b.belegnr,
- DATE_FORMAT(b.datum,'%d.%m.%Y'),
- p.abkuerzung,
- trim(bp.menge)+0 AS menge, trim(bp.menge_eingang)+0 AS eingang,
- trim(bp.menge - bp.menge_eingang)+0 as offen,
- bp.id
- FROM `retoure` AS `b`
- LEFT JOIN (
- SELECT `return_order_id`, MAX(`useredit_id`) AS `useredit`, MAX(`useredit_time`) AS `useredit_time`
- FROM `receiptdocument`
- WHERE (`status` = 'angelegt' OR `status` = '') AND `return_order_id` > 0
- AND `useredit_time` <> '0000-00-00 00:00:00' AND DATE_SUB(NOW(), INTERVAL 600 SECOND) < `useredit_time`
- GROUP BY `return_order_id`
- ) AS `rd` ON b.id = rd.return_order_id
- LEFT JOIN (
- SELECT `return_order_id`
- FROM `receiptdocument`
- WHERE (`status` = 'fertiggestellt' OR `status` = 'abgeschlossen') AND `return_order_id` > 0
- GROUP BY `return_order_id`
- ) AS `rd2` ON b.id = rd2.return_order_id
- INNER JOIN retoure_position as bp ON b.id = bp.retoure
- INNER JOIN artikel AS art ON bp.artikel = art.id
- LEFT JOIN projekt AS p ON b.projekt = p.id
- ";
-
- $count .= "
- LEFT JOIN (
- SELECT `return_order_id`, MAX(`useredit_id`) AS `useredit`, MAX(`useredit_time`) AS `useredit_time`
- FROM `receiptdocument`
- WHERE (`status` = 'angelegt' OR `status` = '') AND `return_order_id` > 0
- AND `useredit_time` <> '0000-00-00 00:00:00' AND DATE_SUB(NOW(), INTERVAL 600 SECOND) < `useredit_time`
- GROUP BY `return_order_id`
- ) AS `rd` ON b.id = rd.return_order_id
- LEFT JOIN (
- SELECT `return_order_id`
- FROM `receiptdocument`
- WHERE (`status` = 'fertiggestellt' OR `status` = 'abgeschlossen') AND `return_order_id` > 0
- GROUP BY `return_order_id`
- ) AS `rd2` ON b.id = rd2.return_order_id
- ";
- }
- else {
- $sql = "SELECT SQL_CALC_FOUND_ROWS bp.id, art.nummer,
- art.name_de
- , b.belegnr,
- DATE_FORMAT(b.datum,'%d.%m.%Y'),
- p.abkuerzung,
- trim(bp.menge)+0 AS menge, trim(bp.menge_eingang)+0 AS eingang,
- trim(bp.menge - bp.menge_eingang)+0 as offen,
- bp.id
- FROM retoure as b
- INNER JOIN retoure_position as bp ON b.id = bp.retoure
- INNER JOIN artikel AS art ON bp.artikel = art.id
- LEFT JOIN projekt AS p ON b.projekt = p.id
- ";
- }
- $where = sprintf(' b.adresse = %d ', $adresse).
- " AND bp.menge_eingang < bp.menge AND b.belegnr <> '' AND b.status <> 'storniert' ".
- $this->app->erp->ProjektRechte('b.projekt');
-
-
- $count .= " WHERE $where ";
-
- $menu = "";
- $this->app->erp->RunHook('wareneingang_tablesearch_wareneingang_retoure', 4, $id, $sql, $where, $count);
- break;
- case 'paketannahme':
- $allowed['wareneingang'] = array('paketannahme');
- $this->app->Tpl->Add('JQUERYREADY', "$('#nurkunden').click( function() { fnFilterColumn1( 0 ); } );");
- $this->app->Tpl->Add('JQUERYREADY', "$('#nurlieferanten').click( function() { fnFilterColumn2( 0 ); } );");
- $this->app->Tpl->Add('JQUERYREADY', "$('#kundenmitrma').click( function() { fnFilterColumn3( 0 ); } );");
- $this->app->Tpl->Add('JQUERYREADY', "$('#lieferungfehlt').click( function() { fnFilterColumn4( 0 ); } );");
-
- $this->app->Tpl->Add('JQUERYREADY', "$('#zeitvon').change( function() { fnFilterColumn5( $('#zeitvon').val() ); } );$('#zeitvon').click( function() { fnFilterColumn5( $('#zeitvon').val() ); } );");
- $this->app->Tpl->Add('JQUERYREADY', "$('#zeitbis').change( function() { fnFilterColumn6( $('#zeitbis').val() ); } );$('#zeitbis').click( function() { fnFilterColumn6( $('#zeitbis').val() ); } );");
-
- $forcerowclick=true;
- $rowclickaction="paketannahme&vorlage=adresse";
- $hide767 = [7, 8];
- for ($r = 1;$r < 5;$r++) {
- $this->app->Tpl->Add('JAVASCRIPT', '
- function fnFilterColumn' . $r . ' ( i )
- {
- if(oMoreData' . $r . $name . '==1)
- oMoreData' . $r . $name . ' = 0;
- else
- oMoreData' . $r . $name . ' = 1;
-
- $(\'#' . $name . '\').dataTable().fnFilter(
- \'\',
- i,
- 0,0
- );
- }
- ');
- }
-
- for ($r = 5;$r < 7;$r++) {
- $this->app->Tpl->Add('JAVASCRIPT', '
- function fnFilterColumn' . $r . ' ( i )
- {
- oMoreData' . $r . $name . ' = i;
-
- $(\'#' . $name . '\').dataTable().fnFilter(
- \'\',
- i,
- 0,0
- );
- }
- ');
- }
-
- $more_data1 = $this->app->Secure->GetGET("more_data1");
-
- if ($more_data1 == 1) $subwhere[] = " a.kundennummer != '' ";
- $more_data2 = $this->app->Secure->GetGET("more_data2");
-
- if ($more_data2 == 1) $subwhere[] = " a.lieferantennummer != '' ";
-
- $more_data3 = $this->app->Secure->GetGET("more_data3");
- $tmpfrom2 = '';
- if($more_data3 == 1)
- {
- $subwhere2[] = " rma.status != 'storniert' ";
- $tmpfrom2 = ' INNER JOIN rma_artikel rma ON a.id = rma.adresse ';
- }
-
- $more_data4 = $this->app->Secure->GetGET("more_data4");
- $more_data5 = $this->app->Secure->GetGET("more_data5");
- $more_data6 = $this->app->Secure->GetGET("more_data6");
- $tmpfrom3 = '';
- if($more_data4 == 1)
- {
- $tmpfrom3 = ' INNER JOIN bestellung b ON a.id = b.adresse INNER JOIN bestellung_position bp ON b.id = bp.bestellung ';
- $subwhere2[] = " (bp.geliefert < bp.menge AND (b.status!='abgeschlossen' AND b.status!='angelegt' AND b.status!='storniert')) ";
- }
- $tmpfrom4 = '';
- $tmpfrom5 = '';
- $tmpwhere = '';
- $tmpwhere2 = '';
- $datumvon = '';
- $datumbis = '';
- if(!empty($more_data5) || !empty($more_data6))
- {
-
- if(!empty($more_data5))$datumvon = $this->app->String->Convert($more_data5,"%1.%2.%3","%3-%2-%1");
- if(!empty($more_data6))$datumbis = $this->app->String->Convert($more_data6,"%1.%2.%3","%3-%2-%1");
- if($more_data4 == 1)
- {
-
- }else{
- if($more_data2 == 1 || $more_data1 != 1)$tmpfrom4 = ' LEFT JOIN bestellung b on a.id = b.adresse ';
-
- }
- if($more_data2 == 1 || $more_data1 != 1)
- {
- if(!empty($more_data5))
- {
- $tmpwhere = "( date(b.versendet_am) >= '$datumvon' ";
- }
- if(!empty($more_data6))
- {
- if(!empty($tmpwhere))
- {
- $tmpwhere .= " AND date(b.versendet_am) <= '$datumbis' ";
- }else{
- $tmpwhere .= "(date(b.versendet_am) <= '$datumbis' ";
- }
- }
- if(!empty($tmpwhere))$tmpwhere .= ') ';
- }
- if($more_data1 == 1 || $more_data2 != 1)
- {
- $tmpfrom5 = ' LEFT JOIN lieferschein l on a.id = l.adresse ';
- if(!empty($more_data5))
- {
- $tmpwhere2 = " ((l.status = 'versendet' OR l.status = 'freigegeben') AND date(l.datum) >= '$datumvon' ";
- }
- if(!empty($more_data6))
- {
- if(!empty($tmpwhere2))
- {
- $tmpwhere2 .= " AND date(l.datum) <= '$datumbis' ";
- }else{
- $tmpwhere2 .= "((l.status = 'versendet' OR l.status = 'freigegeben') AND date(l.datum) <= '$datumbis' ";
- }
- }
- if(!empty($tmpwhere2))$tmpwhere2 .= ') ';
- }
- if(!empty($tmpwhere) || !empty($tmpwhere2))
- {
- if(!empty($tmpwhere) && !empty($tmpwhere2))
- {
- $subwhere2[] = " (".$tmpwhere." OR ".$tmpwhere2.") ";
- }else{
- if(!empty($tmpwhere))
- {
- $subwhere2[] = $tmpwhere;
- }else{
- $subwhere2[] = $tmpwhere2;
- }
- }
-
- }
- }
- $tmp = '';
- if(!empty($subwhere))
- {
- foreach($subwhere as $s) {
- $tmp.= " AND " . $s;
- }
- }
- $tmp2 = '';
- if(!empty($subwhere2))
- {
- foreach($subwhere2 as $s2) {
- $tmp2.= " AND " . $s2;
- }
- }
-
-
-
- // headings
- $heading = array('Name', 'Kunde', 'Lieferant', 'Land', 'PLZ', 'Ort', 'E-Mail', 'Projekt', 'Menü');
- $width = array('25%', '10%', '5%', '5%', '5%', '5%', '25%', '5%', '1%');
- $findcols = array('a.name', 'a.kundennummer', 'a.lieferantennummer', 'a.land', 'a.plz', 'a.ort', 'a.email', 'a.projekt', 'a.id');
- $searchsql = array('a.ort', 'a.name', 'p.abkuerzung', 'a.land', 'a.plz', 'a.email', 'a.kundennummer', 'a.lieferantennummer', 'a.ansprechpartner');
- if ($this->app->erp->Firmendaten('adresse_freitext1_suche')) {
- $searchsql[] = 'a.freifeld1';
- $searchsql[] = 'a.freifeld2';
- }
-
- $defaultorder = 2;
- $defaultorderdesc = 1;
- if($this->app->erp->RechteVorhanden("wareneingang","distrietiketten") && $this->app->erp->RechteVorhanden("wareneingang","distriabschluss")){
- $menu = "app->Conf->WFconf['defaulttheme']}/images/forward.svg\" border=\"0\">";
- }
-
- // SQL statement
-
- //if(a.typ = 'herr' OR a.typ = 'frau',CONCAT(a.vorname,' ',a.name),a.name) as name,
- if ($this->app->erp->Firmendaten("adresse_freitext1_suche")) {
- $sql = "SELECT SQL_CALC_FOUND_ROWS a.id, CONCAT(a.name,if(a.freifeld1!='',CONCAT(' (',a.freifeld1,')'),'')) as name,
- if(a.kundennummer!='',a.kundennummer,'-') as kundennummer,
- if(a.lieferantennummer!='',a.lieferantennummer,'-') as lieferantennummer, a.land as land, a.plz as plz, a.ort as ort, a.email as email, p.abkuerzung as projekt, a.id as menu
- FROM adresse AS a LEFT JOIN projekt p ON p.id=a.projekt $tmpfrom2 $tmpfrom3 $tmpfrom4 $tmpfrom5";
- } else {
- $sql = "SELECT SQL_CALC_FOUND_ROWS a.id, a.name as name,
- if(a.kundennummer!='',a.kundennummer,'-') as kundennummer,
- if(a.lieferantennummer!='',a.lieferantennummer,'-') as lieferantennummer, a.land as land, a.plz as plz, a.ort as ort, a.email as email, p.abkuerzung as projekt, a.id as menu
- FROM adresse AS a LEFT JOIN projekt p ON p.id=a.projekt $tmpfrom2 $tmpfrom3 $tmpfrom4 $tmpfrom5";
- }
- // fester filter
- $where = "a.geloescht=0 $tmp $tmp2 " . $this->app->erp->ProjektRechte();
- $groupby = " GROUP BY a.id ";
- $count = "SELECT COUNT(a.id) FROM adresse a LEFT JOIN projekt p ON p.id=a.projekt WHERE a.geloescht=0 $tmp " . $this->app->erp->ProjektRechte();
- break;
- case 'wareneingang_kunderetoure':
- $allowed['wareneingang'] = array('distriinhalt');
-
- // headings
- $id = $this->app->Secure->GetGET('id');
- $adresse = (int)$this->app->DB->Select(sprintf('SELECT adresse FROM paketannahme WHERE id = %d LIMIT 1', $id));
- $heading = array('Nummer', 'Beschreibung', 'SN/Charge/MHD', 'Projekt', 'Menge', 'Retoure', 'Lieferschein', 'Datum', 'Aktion','');
- $width = array('5%', '30%', '5%', '5%', '5%', '5%', '5%', '5%', '5%','1%');
- $findcols = array('lp.nummer', 'lp.bezeichnung', 'sn.seriennummer', 'p.abkuerzung', 'if(isnull(sn.menge), lp.menge,sn.menge)', 'rma.menge', 'l.belegnr', 'l.datum', 'lp.id','lp.id');
- $searchsql = array('lp.nummer', 'lp.bezeichnung', 'sn.seriennummer','lp.beschreibung', 'p.abkuerzung', 'trim(if(isnull(sn.menge), lp.menge,sn.menge))+0', 'lp.geliefert', 'l.belegnr', "DATE_FORMAT(l.datum,'%d.%m.%Y')", 'lp.id','lp.id');
-
- $alignright = array(5,6);
-
- //$defaultorder = 6; //Optional wenn andere Reihenfolge gewuenscht
-
- //$defaultorderdesc=1;
-
- $mCol = "CONCAT('Menge: "
- ."app->erp->FormatMenge('ra.quantity')."
- FROM returnorder_quantity AS ra
- WHERE ra.delivery_note_id = lp.id
- AND ra.serialnumber = IFNULL(sn.seriennummer,'')
- AND ra.bestbefore = IFNULL(bbf.mhd,'')
- AND ra.batch = IFNULL(batch.charge,'')
- LIMIT 1
- ),''
- ),'\" type=\"text\" size=\"5\" name=\"pos',lp.id,'\" data-dnpid=\"',lp.id,'\" data-bestbefore=\"',IFNULL(bbf.mhd,''),'\" data-batch=\"',IFNULL(batch.charge,''),'\" data-serialnumber=\"',IFNULL(sn.seriennummer,''),'\" />"
- ." | ')";
-
- $menu = '';
-
- // ";
- $menucol = 8;
-
- $kommissionskonsignationslager = true;
- if(!$this->app->erp->ModulVorhanden('kommissionskonsignationslager')) {
- $kommissionskonsignationslager = false;
- }
- if($kommissionskonsignationslager
- && !$this->app->DB->Select("SELECT id FROM kommissionskonsignationslager_positionen LIMIT 1")) {
- $kommissionskonsignationslager = false;
- }
-
-
- // SQL statement
-
- $rmamengecol = "
- if(
- ifnull(rma2.menge,0)+IFNULL(rma4.menge,0) > 0,
- concat(".$this->app->erp->FormatMenge('ifnull(rma2.menge,0)+ifnull(rma4.menge,0)')."),
- if(
- ifnull(rma.menge,0)+ifnull(rma3.menge,0) > 0,
- concat(".$this->app->erp->FormatMenge('ifnull(rma.menge,0)+ifnull(rma3.menge,0)').",
- if(isnull(sn.pos),'',' (Retoure gesamt)')
- )
- ,''
- )
- ),
- ";
- $rmajoin = "LEFT JOIN (
- SELECT sum(menge) as menge,pos
- FROM rma_artikel WHERE seriennummer = ''
- GROUP BY pos
- ) rma ON lp.id = rma.pos ";
-
- $rmajoin2 = "LEFT JOIN (
- SELECT sum(menge) as menge,pos,seriennummer
- FROM rma_artikel WHERE seriennummer != ''
- GROUP BY pos,seriennummer
- ) rma2 ON lp.id = rma2.pos AND sn.seriennummer = rma2.seriennummer";
-
-
- $rmajoin3 = "
- LEFT JOIN (
- SELECT SUM(menge) AS menge, lieferschein_position_id
- FROM `retoure_position`
- WHERE `lieferschein_position_id` > 0
- GROUP BY lieferschein_position_id
- ) AS rma3 ON lp.id = rma3.lieferschein_position_id
- AND (sn.seriennummer IS NULL OR sn.seriennummer = '')
- ";
-
- $rmajoin4 = "
- LEFT JOIN (
- SELECT count(bcr.id) as menge, bcr.wert as seriennummer,
- rop.lieferschein_position_id
- FROM `beleg_chargesnmhd` AS bcr
- INNER JOIN retoure_position AS rop ON bcr.pos = rop.id
- AND bcr.doctype = 'retoure' AND bcr.type='sn'
- GROUP BY rop.lieferschein_position_id, bcr.wert
- ) AS rma4 ON lp.id = rma4.lieferschein_position_id
- AND sn.seriennummer = rma4.seriennummer
- ";
-
-
- if($kommissionskonsignationslager) {
- $kommname = $this->app->erp->Firmendaten('kommissionskonsignationslager');
- if($kommname === '') {
- $kommname = 'Kommissions-/Konsignationslager';
- }
-
- $sql = "SELECT SQL_CALC_FOUND_ROWS lp.id,lp.nummer,
- concat(lp.bezeichnung, if(isnull(komm.menge),'',' ($kommname)')) as beschreibung,
-
- if(
- sn.seriennummer IS NULL,
- IF(bbf.mhd IS NULL,
- IF(batch.charge IS NULL,
- '',
- CONCAT('Charge: ',batch.charge)
- ),
- CONCAT('MHD: ', bbf.mhd)
- ),
- CONCAT('SN: ', sn.seriennummer)
- ),
- p.abkuerzung as projekt,
-
- trim(if(isnull(sn.menge),
- if(isnull(bbf.menge),
- IF(isnull(batch.menge),lp.menge,batch.menge)
- , bbf.menge)
- ,sn.menge))+0,
-
-
- $rmamengecol
- l.belegnr as lieferschein,
- DATE_FORMAT(l.datum,'%d.%m.%Y') as datum, if(isnull(sn.seriennummer),lp.id,
- $mCol,
- concat(lp.id,'-',sn.seriennummer)),
-
- FROM lieferschein_position lp
- $rmajoin
- LEFT JOIN lieferschein l ON lp.lieferschein=l.id
- LEFT JOIN projekt p ON l.projekt=p.id
- LEFT JOIN artikel a ON a.id=lp.artikel
- LEFT JOIN (
- (
- SELECT '1' as menge, wert as seriennummer, pos
- FROM `beleg_chargesnmhd`
- WHERE doctype = 'lieferschein' AND type='sn'
- ) UNION ALL
- (
- SELECT '1' as menge,seriennummer, lieferscheinpos as pos
- FROM seriennummern
- )
- ) sn ON sn.pos = lp.id
- LEFT JOIN (
- SELECT SUM(menge) AS menge,
- IF(IFNULL(wert2,'') = '',wert ,CONCAT(wert,'-',IFNULL(wert2,''))) AS mhd,
- pos
- FROM `beleg_chargesnmhd`
- WHERE doctype = 'lieferschein' AND type='mhd'
- GROUP BY wert,pos,wert2
- ) AS bbf ON bbf.pos = lp.id AND a.mindesthaltbarkeitsdatum = 1 AND sn.pos IS NULL
- AND (a.seriennummern = 'keine' OR a.seriennummern = '')
- LEFT JOIN (
- SELECT SUM(menge) AS menge, wert AS charge, pos
- FROM `beleg_chargesnmhd`
- WHERE doctype = 'lieferschein' AND type='charge'
- GROUP BY wert,pos
- ) AS batch ON batch.pos = lp.id AND a.mindesthaltbarkeitsdatum = 0 AND a.chargenverwaltung > 0
- AND (a.seriennummern = 'keine' OR a.seriennummern = '') AND sn.pos IS NULL
- LEFT JOIN
- (SELECT lieferschein_position, sum(menge) as menge FROM kommissionskonsignationslager_positionen WHERE menge > ausgelagert GROUP BY lieferschein_position) komm ON lp.id = komm.lieferschein_position
-
- $rmajoin2
- $rmajoin3
- $rmajoin4
- ";
- }
- else{
-
- $sql = "SELECT SQL_CALC_FOUND_ROWS lp.id,lp.nummer, lp.bezeichnung as beschreibung,
-
- if(
- sn.seriennummer IS NULL,
- IF(bbf.mhd IS NULL,
- IF(batch.charge IS NULL,
- '',
- CONCAT('Charge: ',batch.charge)
- ),
- CONCAT('MHD: ', bbf.mhd)
- ),
- CONCAT('SN: ', sn.seriennummer)
- ),
-
- p.abkuerzung as projekt,
-
- trim(if(isnull(sn.menge),
- if(isnull(bbf.menge),
- IF(isnull(batch.menge),lp.menge,batch.menge)
- , bbf.menge)
- ,sn.menge))+0,
- $rmamengecol
- l.belegnr as lieferschein,
- DATE_FORMAT(l.datum,'%d.%m.%Y') as datum,
- $mCol,
- if(isnull(sn.seriennummer),lp.id,concat(lp.id,'-',sn.seriennummer))
- FROM lieferschein_position lp
- $rmajoin
- LEFT JOIN lieferschein l ON lp.lieferschein=l.id
- LEFT JOIN projekt p ON l.projekt=p.id
- LEFT JOIN artikel a ON a.id=lp.artikel
- LEFT JOIN
- (
- (
- SELECT '1' as menge, wert as seriennummer, pos
- FROM `beleg_chargesnmhd`
- WHERE doctype = 'lieferschein' AND type='sn'
- )
- UNION ALL
- (
- SELECT '1' as menge,seriennummer, lieferscheinpos as pos
- FROM seriennummern
- )
- ) sn ON sn.pos = lp.id
- LEFT JOIN (
- SELECT SUM(menge) AS menge,
- IF(IFNULL(wert2,'') = '',wert ,CONCAT(wert,'-',IFNULL(wert2,''))) AS mhd,
- pos
- FROM `beleg_chargesnmhd`
- WHERE doctype = 'lieferschein' AND type='mhd'
- GROUP BY wert,pos,wert2
- ) AS bbf ON bbf.pos = lp.id AND a.mindesthaltbarkeitsdatum = 1 AND sn.pos IS NULL
- AND (a.seriennummern = 'keine' OR a.seriennummern = '')
- LEFT JOIN (
- SELECT SUM(menge) AS menge, wert AS charge, pos
- FROM `beleg_chargesnmhd`
- WHERE doctype = 'lieferschein' AND type='charge'
- GROUP BY wert,pos
- ) AS batch ON batch.pos = lp.id AND a.mindesthaltbarkeitsdatum = 0 AND a.chargenverwaltung > 0
- AND (a.seriennummern = 'keine' OR a.seriennummern = '') AND sn.pos IS NULL
- $rmajoin2
- $rmajoin3
- $rmajoin4
- ";
- }
-
- $where = " (l.adresse='$adresse' AND (l.status='versendet' OR l.status='freigegeben') AND a.lagerartikel=1) " .
- $this->app->erp->ProjektRechte();
-
- // gesamt anzahl
- /*$count = "SELECT COUNT(lp.id)
- FROM lieferschein_position lp
- LEFT JOIN lieferschein l ON lp.lieferschein=l.id
- LEFT JOIN projekt p ON l.projekt=p.id
- LEFT JOIN artikel a ON a.id=lp.artikel
- WHERE ($where)";*/
- $count = '';
- $moreinfo = false;
- break;
- case 'wareneingang_kunde':
- $allowed['wareneingang'] = array('distriinhalt');
-
- // headings
- $id = $this->app->Secure->GetGET('id');
- $adresse = $this->app->DB->Select("SELECT adresse FROM paketannahme WHERE id='$id' LIMIT 1");
- $heading = array('Nummer', 'Beschreibung', 'SN/Charge/MHD', 'Projekt', 'Menge', 'Retoure', 'Lieferschein', 'Datum', 'Aktion');
- $width = array('5%', '30%', '5%', '5%', '5%', '5%', '5%', '5%', '5%');
- $findcols = array('lp.nummer', 'lp.bezeichnung', 'sn.seriennummer', 'p.abkuerzung', 'if(isnull(sn.menge), lp.menge,sn.menge)', 'rma.menge', 'l.belegnr', 'l.datum', 'lp.id');
- $searchsql = array('lp.nummer', 'lp.bezeichnung', 'sn.seriennummer','lp.beschreibung', 'p.abkuerzung', 'trim(if(isnull(sn.menge), lp.menge,sn.menge))+0', 'lp.geliefert', 'l.belegnr', "DATE_FORMAT(l.datum,'%d.%m.%Y')", 'lp.id');
-
- $alignright = array(5,6);
-
- //$defaultorder = 6; //Optional wenn andere Reihenfolge gewuenscht
-
- //$defaultorderdesc=1;
-
- $menu = "";
-
- // |
";
- $menucol = 4;
-
- $kommissionskonsignationslager = true;
- if(!$this->app->erp->ModulVorhanden('kommissionskonsignationslager'))
- {
- $kommissionskonsignationslager = false;
- }
- if($kommissionskonsignationslager && !$this->app->DB->Select("SELECT id FROM kommissionskonsignationslager_positionen LIMIT 1"))
- {
- $kommissionskonsignationslager = false;
- }
-
-
- // SQL statement
-
- $rmamengecol = "
- if(ifnull(rma2.menge,0) > 0,
- concat(".$this->app->erp->FormatMenge('ifnull(rma2.menge,0)')."),
- if(ifnull(rma.menge,0) > 0,concat(".$this->app->erp->FormatMenge('ifnull(rma.menge,0)').",if(isnull(sn.pos),'',' (Retoure gesamt)')),'')
- ),
- ";
- $rmajoin = "LEFT JOIN (SELECT sum(menge) as menge,pos FROM rma_artikel WHERE seriennummer = '' GROUP BY pos) rma ON lp.id = rma.pos ";
- $rmajoin2 = "LEFT JOIN (SELECT sum(menge) as menge,pos,seriennummer FROM rma_artikel WHERE seriennummer != '' GROUP BY pos,seriennummer) rma2 ON lp.id = rma2.pos AND sn.seriennummer = rma2.seriennummer";
- if($kommissionskonsignationslager)
- {
- $kommname = $this->app->erp->Firmendaten('kommissionskonsignationslager');
- if($kommname === '')
- {
- $kommname = 'Kommissions-/Konsignationslager';
- }
-
- $sql = "SELECT SQL_CALC_FOUND_ROWS lp.id,lp.nummer,
- concat(lp.bezeichnung, if(isnull(komm.menge),'','
($kommname)')) as beschreibung,
- if(
- sn.seriennummer IS NULL,
- IF(bbf.mhd IS NULL,
- IF(batch.charge IS NULL,
- '',
- CONCAT('Charge: ',batch.charge)
- ),
- CONCAT('MHD: ', bbf.mhd)
- ),
- CONCAT('SN: ', sn.seriennummer)
- ),
- p.abkuerzung as projekt,
- trim(if(isnull(sn.menge),
- if(isnull(bbf.menge),
- IF(isnull(batch.menge),lp.menge,batch.menge)
- , bbf.menge)
- ,sn.menge))+0,
- $rmamengecol
- l.belegnr as lieferschein, DATE_FORMAT(l.datum,'%d.%m.%Y') as datum,
- if(
- sn.seriennummer IS NULL,
- IF(bbf.mhd IS NULL,
- IF(batch.charge IS NULL,
- lp.id,
- CONCAT(lp.id,'-',batch.charge)
- ),
- CONCAT(lp.id,'-', bbf.mhd)
- ),
- CONCAT(lp.id,'-', sn.seriennummer)
- )
-
- FROM lieferschein_position lp
- $rmajoin
- LEFT JOIN lieferschein l ON lp.lieferschein=l.id
- LEFT JOIN projekt p ON l.projekt=p.id
- LEFT JOIN artikel a ON a.id=lp.artikel
- LEFT JOIN (
- (SELECT '1' as menge, wert as seriennummer, pos FROM `beleg_chargesnmhd` WHERE doctype = 'lieferschein' AND type='sn' ) UNION ALL
- (SELECT '1' as menge,seriennummer, lieferscheinpos as pos FROM seriennummern)
- ) sn ON sn.pos = lp.id
- LEFT JOIN (
- SELECT SUM(menge) AS menge,
- IF(IFNULL(wert2,'') = '',wert ,CONCAT(wert,'-',IFNULL(wert2,''))) AS mhd,
- pos
- FROM `beleg_chargesnmhd`
- WHERE doctype = 'lieferschein' AND type='mhd'
- GROUP BY wert,pos,wert2
- ) AS bbf ON bbf.pos = lp.id AND a.mindesthaltbarkeitsdatum = 1 AND sn.pos IS NULL
- AND (a.seriennummern = 'keine' OR a.seriennummern = '')
- LEFT JOIN (
- SELECT SUM(menge) AS menge, wert AS charge, pos
- FROM `beleg_chargesnmhd`
- WHERE doctype = 'lieferschein' AND type='charge'
- GROUP BY wert,pos
- ) AS batch ON batch.pos = lp.id AND a.mindesthaltbarkeitsdatum = 0 AND a.chargenverwaltung > 0
- AND (a.seriennummern = 'keine' OR a.seriennummern = '') AND sn.pos IS NULL
- LEFT JOIN
- (SELECT lieferschein_position, sum(menge) as menge FROM kommissionskonsignationslager_positionen WHERE menge > ausgelagert GROUP BY lieferschein_position) komm ON lp.id = komm.lieferschein_position
-
- $rmajoin2
- ";
- }else{
-
- $sql = "SELECT SQL_CALC_FOUND_ROWS lp.id,lp.nummer, lp.bezeichnung as beschreibung,
- if(
- sn.seriennummer IS NULL,
- IF(bbf.mhd IS NULL,
- IF(batch.charge IS NULL,
- '',
- CONCAT('Charge: ',batch.charge)
- ),
- CONCAT('MHD: ', bbf.mhd)
- ),
- CONCAT('SN: ', sn.seriennummer)
- ),
- p.abkuerzung as projekt,
- trim(if(isnull(sn.menge),
- if(isnull(bbf.menge),
- IF(isnull(batch.menge),lp.menge,batch.menge)
- , bbf.menge)
- ,sn.menge))+0,
- $rmamengecol
- l.belegnr as lieferschein, DATE_FORMAT(l.datum,'%d.%m.%Y') as datum,
- if(
- sn.seriennummer IS NULL,
- IF(bbf.mhd IS NULL,
- IF(batch.charge IS NULL,
- lp.id,
- CONCAT(lp.id,'-',batch.charge)
- ),
- CONCAT(lp.id,'-', bbf.mhd)
- ),
- CONCAT(lp.id,'-', sn.seriennummer)
- )
-
-
- FROM lieferschein_position lp
- $rmajoin
- LEFT JOIN lieferschein l ON lp.lieferschein=l.id
- LEFT JOIN projekt p ON l.projekt=p.id
- LEFT JOIN artikel a ON a.id=lp.artikel
- LEFT JOIN (
- (SELECT '1' as menge, wert as seriennummer, pos FROM `beleg_chargesnmhd` WHERE doctype = 'lieferschein' AND type='sn' ) UNION ALL
- (SELECT '1' as menge,seriennummer, lieferscheinpos as pos FROM seriennummern)
- ) sn ON sn.pos = lp.id
- LEFT JOIN (
- SELECT SUM(menge) AS menge,
- IF(IFNULL(wert2,'') = '',wert ,CONCAT(wert,'-',IFNULL(wert2,''))) AS mhd,
- pos
- FROM `beleg_chargesnmhd`
- WHERE doctype = 'lieferschein' AND type='mhd'
- GROUP BY wert,pos,wert2
- ) AS bbf ON bbf.pos = lp.id AND a.mindesthaltbarkeitsdatum = 1 AND sn.pos IS NULL
- AND (a.seriennummern = 'keine' OR a.seriennummern = '')
- LEFT JOIN (
- SELECT SUM(menge) AS menge, wert AS charge, pos
- FROM `beleg_chargesnmhd`
- WHERE doctype = 'lieferschein' AND type='charge'
- GROUP BY wert,pos
- ) AS batch ON batch.pos = lp.id AND a.mindesthaltbarkeitsdatum = 0 AND a.chargenverwaltung > 0
- AND (a.seriennummern = 'keine' OR a.seriennummern = '') AND sn.pos IS NULL
- $rmajoin2
- ";
- }
-
- $where = " (l.adresse='$adresse' AND (l.status='versendet' OR l.status='freigegeben') AND a.lagerartikel=1) " . $this->app->erp->ProjektRechte();
-
- // gesamt anzahl
- $count = "SELECT COUNT(lp.id) FROM lieferschein_position lp
- LEFT JOIN lieferschein l ON lp.lieferschein=l.id LEFT JOIN projekt p ON l.projekt=p.id LEFT JOIN artikel a ON a.id=lp.artikel WHERE ($where)";
- $moreinfo = false;
- break;
- }
-
- $erg = [];
-
- //$erlaubtevars = array('heading','width','sql','count','findcols','searchsql','defaultorder','defaultorderdesc','menu','menucol','where','groupby','allowed');
-
-
- foreach($erlaubtevars as $k => $v)
- {
- if(isset($$v))
- {
- $erg[$v] = $$v;
- }
- }
- return $erg;
- }
-
- /**
- * Wareneingang constructor.
- *
- * @param Application $app
- * @param bool $intern
- */
- public function __construct($app, $intern = false)
- {
- $this->app=$app;
- if($intern) {
- return;
- }
- $this->app->ActionHandlerInit($this);
-
- $this->app->ActionHandler("main","WareneingangMain");
- $this->app->ActionHandler("list","WareneingangList");
- $this->app->ActionHandler("help","WareneingangHelp");
- $this->app->ActionHandler("vorgang","VorgangAnlegen");
- $this->app->ActionHandler("removevorgang","VorgangEntfernen");
- //$this->app->ActionHandler("create","WareneingangCreate");
- $this->app->ActionHandler("paketannahme","WareneingangPaketannahme");
- $this->app->ActionHandler("paketzustand","WareneingangPaketZustand");
- $this->app->ActionHandler("paketetikett","WareneingangPaketEtikett");
- $this->app->ActionHandler("paketabschliessen","WareneingangPaketAbschliessen");
- $this->app->ActionHandler("distriinhalt","WareneingangPaketDistriInhalt");
- $this->app->ActionHandler("distrietiketten","WareneingangPaketDistriEtiketten");
- $this->app->ActionHandler("distrietikettenbilderfassen","WareneingangPaketDistriEtikettenBilderfassen");
- $this->app->ActionHandler("distriabschluss","WareneingangPaketDistriAbschluss");
- $this->app->ActionHandler("manuellerfassen","WareneingangManuellErfassen");
- $this->app->ActionHandler("minidetail","WareneingangMiniDetail");
- $this->app->ActionHandler("stornieren","WareneingangStornieren");
- $this->app->ActionHandler("settings","WareneingangSettings");
-
- $this->app->DefaultActionHandler("login");
- $this->app->erp->Headlines('Wareneinang');
-
- $this->app->ActionHandlerListen($app);
- }
-
- public function WareneingangSettings()
- {
- $menu = $this->app->Secure->GetGET('menu');
-
- if($menu === 'paketdistri'){
- $this->WareneingangPaketDistriMenu();
- }
- elseif($menu === 'paket'){
- $this->WareneingangPaketMenu();
- }
- else{
- $this->WareneingangMenu();
- }
- $this->app->YUI->AutoSaveFormular(
- 'wareneingang',
- [
- 'createreturnorder'=>[
- 'bezeichnung' => 'Retouren annehmen mit Retouren-Beleg',
- 'type'=>'checkbox',
- ]
- ],
- [
- 'legend'=>'Einstellungen',
- 'finaltarget' => 'TAB1',
- 'target' => 'TABLE',
- 'template' => 'table.tpl',
- ]
- );
- $this->app->Tpl->Set('TABLE', '');
- $this->app->erp->RunHook('wareneingang_settings', 0);
-
- $this->app->Tpl->Parse('PAGE', 'tabview.tpl');
- }
-
- /**
- * @param bool $mitstandardlager
- * @param bool $forceZwischenlager
- * @param int $lagerplatz
- *
- * @return array
- */
- public function GetLager($mitstandardlager=false, $forceZwischenlager = false, $lagerplatz = null)
- {
- $tmp = [];
- if($forceZwischenlager || $this->app->erp->Firmendaten('wareneingang_zwischenlager')=='1') {
- $tmp['zwischenlager'] = 'Zwischenlager';
- }
- if($mitstandardlager) {
- $tmp['standardlager'] = 'Standardlager';
- }
-
- $result = $this->app->DB->SelectArr(
- sprintf(
- "SELECT lp.id, CONCAT(l.bezeichnung,'->',lp.kurzbezeichnung) as kurzbezeichnung
- FROM lager_platz AS lp
- INNER JOIN lager AS l ON lp.lager=l.id
- WHERE lp.kurzbezeichnung!='' AND lp.geloescht <> 1 AND l.geloescht <> 1 AND lp.id = %d
- ORDER BY l.bezeichnung,lp.kurzbezeichnung",
- $lagerplatz
- )
- );
- if(empty($result)) {
- return $tmp;
- }
- foreach($result as $row) {
- $tmp[$row['id']] = $row['kurzbezeichnung'];
- }
- return $tmp;
- }
-
- public function WareneingangPaketMenu()
- {
- $id = $this->app->Secure->GetGET('id');
- $action = $this->app->Secure->GetGET('action');
- $this->app->Tpl->Set('ID',$id);
- $this->app->Tpl->Add('KURZUEBERSCHRIFT',' Paketannahme');
- $this->app->erp->MenuEintrag('index.php?module=wareneingang&action=paketannahme','Paketannahme');
- $this->app->erp->RunMenuHook('wareneingangpaket');
- $this->app->erp->MenuEintrag(
- 'index.php?module=wareneingang&action=settings&menu=paket',
- 'Einstellungen',
- $action === 'settings'
- );
- }
-
- public function WareneingangPaketDistriMenu()
- {
- $id = (int)$this->app->Secure->GetGET('id');
- $action = $this->app->Secure->GetGET('action');
- $this->app->Tpl->Set('ID',$id);
- $this->app->Tpl->Add('KURZUEBERSCHRIFT',' Paketdistribution');
- $this->app->erp->MenuEintrag('index.php?module=wareneingang&action=paketannahme','zur Paketannahme');
- if($action==='distribution' && $id > 0){
- $this->app->erp->MenuEintrag('index.php?module=wareneingang&action=distribution&id='.$id, 'Paketannahme');
- }
- else if($action==='distribution'){
- $this->app->erp->MenuEintrag('index.php?module=wareneingang&action=distribution', 'Paketannahme');
- }
- else{
- $this->app->erp->MenuEintrag('index.php?module=wareneingang&action=distriinhalt&id='.$id, 'Paketannahme');
- }
- if($id && $this->app->erp->RechteVorhanden('schneller_wareneingang','distriinhalt'))
- {
- $adresse = $this->app->DB->Select("SELECT adresse FROM paketannahme WHERE id = '$id' LIMIT 1");
- $lieferantennummer = $this->app->DB->Select("SELECT lieferantennummer FROM adresse WHERE id = '$adresse' LIMIT 1");
- if($lieferantennummer != '0' && $lieferantennummer != '')
- {
- $this->app->erp->MenuEintrag('index.php?module=schneller_wareneingang&action=distriinhaltschnell&id='.$id,"schnelle Paketannahme");
- }
- }
- $this->app->erp->RunMenuHook('wareneingangpaketdistri');
- $this->app->erp->MenuEintrag(
- 'index.php?module=wareneingang&action=settings&menu=paketdistri',
- 'Einstellungen',
- $action === 'settings'
- );
- }
-
- public function WareneingangStornieren()
- {
- $id = $this->app->Secure->GetGET('id');
-
- if($id > 0 && is_numeric($id))
- {
- $this->app->DB->Delete("DELETE FROM paketannahme WHERE id='$id' LIMIT 1");
- }
- $this->app->Location->execute('Location: index.php?module=wareneingang&action=distribution');
- }
-
-
- public function WareneingangMenu()
- {
- $action = $this->app->Secure->GetGET('action');
- $this->app->Tpl->Add('KURZUEBERSCHRIFT',' Wareneingang');
- $this->app->erp->MenuEintrag('index.php?module=wareneingang&action=list','Übersicht');
- $this->app->erp->RunMenuHook('wareneingang');
- $this->app->erp->MenuEintrag(
- 'index.php?module=wareneingang&action=settings',
- 'Einstellungen',
- $action==='settings'
- );
- }
-
- /**
- * @return JsonResponse
- */
- protected function HandleCreateReturnOrderAjaxAction()
- {
- $id = $this->app->Secure->GetPOST('id');
- $addressId = (int)$this->app->DB->Select(sprintf('SELECT adresse FROM paketannahme WHERE id = %d LIMIT 1', $id));
- $sql = "
- SELECT lp.*, IFNULL(sn.seriennummer, '') AS serialnumber,
- rq.bestbefore,rq.batch,
- rq.quantity, rq.id As rqid
-
- FROM lieferschein_position lp
-
- LEFT JOIN lieferschein l ON lp.lieferschein=l.id
- LEFT JOIN projekt p ON l.projekt=p.id
- LEFT JOIN artikel a ON a.id=lp.artikel
- LEFT JOIN
- (
- (
- SELECT '1' as menge, wert as seriennummer, pos
- FROM `beleg_chargesnmhd`
- WHERE doctype = 'lieferschein' AND type='sn'
- )
- UNION ALL
- (
- SELECT '1' as menge,seriennummer, lieferscheinpos as pos
- FROM seriennummern
- )
- ) sn ON sn.pos = lp.id
- LEFT JOIN (
- SELECT SUM(menge) AS menge,
- IF(IFNULL(wert2,'') = '',wert ,CONCAT(wert,'-',IFNULL(wert2,''))) AS mhd,
- pos
- FROM `beleg_chargesnmhd`
- WHERE doctype = 'lieferschein' AND type='mhd'
- GROUP BY wert,pos,wert2
- ) AS bbf ON bbf.pos = lp.id AND a.mindesthaltbarkeitsdatum = 1 AND sn.pos IS NULL
- AND (a.seriennummern = 'keine' OR a.seriennummern = '')
- LEFT JOIN (
- SELECT SUM(menge) AS menge, wert AS charge, pos
- FROM `beleg_chargesnmhd`
- WHERE doctype = 'lieferschein' AND type='charge'
- GROUP BY wert,pos
- ) AS batch ON batch.pos = lp.id AND a.mindesthaltbarkeitsdatum = 0 AND a.chargenverwaltung > 0
- AND (a.seriennummern = 'keine' OR a.seriennummern = '') AND sn.pos IS NULL
-
- INNER JOIN `returnorder_quantity` AS rq
- ON lp.id = rq.delivery_note_id AND IFNULL(sn.seriennummer, '') = rq.serialnumber
- AND IFNULL(rq.quantity,0) > 0 AND IFNULL(batch.charge,'') = rq.batch AND IFNULL(bbf.mhd,'') = rq.bestbefore
- WHERE (l.adresse='$addressId' AND (l.status='versendet' OR l.status='freigegeben')
- AND a.lagerartikel=1) "
- .$this->app->erp->ProjektRechte()
- ."ORDER BY l.datum, l.id, lp.sort,sn.seriennummer";
-
- $positions = $this->app->DB->SelectArr($sql);
- if(empty($positions)) {
- return new JsonResponse(['status' => 0, 'error' => 'Position nicht gefunden']);
- }
- /** @var Retoure $returnOrderObj */
- $returnOrderObj = $this->app->erp->LoadModul('retoure');
- if($returnOrderObj === null) {
- return new JsonResponse(['status' => 0, 'error' => 'Retourenmodul nicht gefunden oder deaktiviert']);
- }
- $returnOrderId = $this->app->erp->CreateRetoure($addressId);
- $this->app->erp->LoadRetoureStandardwerte($returnOrderId, $addressId);
- $this->app->erp->RetoureProtokoll($returnOrderId, 'Retoure angelegt');
- foreach($positions as $position) {
- $this->app->DB->Insert("INSERT INTO retoure_position (id) VALUES (NULL)");
- $newposid = $this->app->DB->GetInsertID();
- $idtoid[$position['id']] = $newposid;
- $artikelarr[$newposid] = $position['artikel'];
- $position['lieferschein_position_id'] = $position['id'];
- if(!empty($position['explodiert_parent'])) {
- $position['explodiert_parent'] =
- isset($idtoid[$position['explodiert_parent']])
- ? $idtoid[$position['explodiert_parent']] : 0;
- }
- $position['retoure'] = $returnOrderId;
- $position['menge'] = $position['quantity'];
- $this->app->DB->Delete(sprintf('DELETE FROM `returnorder_quantity` WHERE `id` = %d', $position['rqid']));
- $serialnumber = (string)$position['serialnumber'];
- $bestbefore = (string)$position['bestbefore'];
- $batch = (string)$position['batch'];
- if(!empty($bestbefore)) {
- $batch = ltrim(substr($bestbefore,10),'-');
- $bestbefore = substr($bestbefore,0,10);
- if(strpos($bestbefore, '.') !== false) {
- $bestbefore = $this->app->String->Convert($bestbefore,'%1.%2.%3','%3-%2-%1');
- }
- }
- unset($position['quantity'], $position['rqid'], $position['serialnumber'],$position['lagertext']);
- $this->app->DB->UpdateArr('retoure_position', $newposid,'id', $position, true);
- if($serialnumber !== '' && $serialnumber !== '0') {
- $this->app->erp->CreateBelegPositionMHDCHARGESRN(
- 'retoure',$returnOrderId,$newposid,'sn',$serialnumber,1
- );
- }
- elseif(!empty($bestbefore)) {
- if(!empty($batch)) {
- $this->app->erp->CreateBelegPositionMHDCHARGESRN(
- 'retoure',$returnOrderId,$newposid,'mhd',$bestbefore,$position['menge'],'charge', $batch
- );
- $this->app->erp->CreateBelegPositionMHDCHARGESRN(
- 'retoure',$returnOrderId,$newposid,'charge',$batch,$position['menge']
- );
- }
- else {
- $this->app->erp->CreateBelegPositionMHDCHARGESRN(
- 'retoure',$returnOrderId,$newposid,'mhd',$bestbefore,$position['menge']
- );
- }
- }
- elseif(!empty($batch)) {
- $this->app->erp->CreateBelegPositionMHDCHARGESRN(
- 'retoure',$returnOrderId,$newposid,'charge',$batch,$position['menge']
- );
- }
- }
- $this->app->erp->BelegFreigabe('retoure', $returnOrderId);
-
- return new JsonResponse( [
- 'status' => 1,
- 'url' =>
- 'index.php?module=wareneingang&action=distriinhalt&cmd=createreceiptdocumentreturnorder&id='
- .$returnOrderId
- ]);
- }
-
- /**
- * @return JsonResponse
- */
- protected function HandleChangeQtyAjaxAction()
- {
- $dnpid = (int)$this->app->Secure->GetPOST('dnpid');
- $dnp = $dnpid <= 0?null:$this->app->DB->SelectRow(
- sprintf(
- 'SELECT dn.* FROM `lieferschein_position` AS `dn` WHERE dn.id = %d LIMIT 1',
- $dnpid
- )
- );
- if(empty($dnp)) {
- return new JsonResponse(
- ['status' => 0, 'error' => 'Position nicht gefunden']
- );
- }
-
- $serialnumber = $this->app->Secure->GetPOST('serialnumber');
- $batch = $this->app->Secure->GetPOST('batch');
- $bestbefore = $this->app->Secure->GetPOST('bestbefore');
- $qty = str_replace(',', '.', $this->app->Secure->GetPOST('value'));
- if(round($qty,4) > round($dnp['menge'],4)) {
- return new JsonResponse(['status' => 0, 'error' => 'Die Menge ist zu groß']);
- }
- $check = $this->app->DB->SelectRow(
- sprintf(
- "SELECT rq.*
- FROM `returnorder_quantity` AS `rq`
- WHERE rq.delivery_note_id = %d AND rq.serialnumber = '%s'
- AND rq.bestbefore = '%s' AND rq.batch = '%s' ",
- $dnpid, $serialnumber, $bestbefore, $batch
- )
- );
- if(empty($check) && $qty !== ''){
- $this->app->DB->Insert(
- sprintf(
- "INSERT INTO `returnorder_quantity`
- (`delivery_note_id`, `quantity`, `serialnumber`,`bestbefore`,`batch`)
- VALUES (%d, %f, '%s','%s','%s') ",
- $dnpid, $qty, $serialnumber, $bestbefore, $batch
- )
- );
- }
- elseif(!empty($check)){
- $this->app->DB->Update(
- sprintf(
- "UPDATE `returnorder_quantity` SET `quantity` = %s WHERE `id` = %d",
- $qty !== '' ? (float)$qty : 'NULL', $check['id']
- )
- );
- }
-
- return new JsonResponse(['status' => 1]);
- }
-
- /**
- * @param int $returnOrderId
- *
- * @return array
- */
- public function getNextReturnOrderPosition($returnOrderId)
- {
- return (array)$this->app->DB->SelectRow(
- sprintf(
- "SELECT `rop`.*, art.seriennummern, art.chargenverwaltung, art.mindesthaltbarkeitsdatum
- FROM `retoure_position` AS `rop`
- INNER JOIN `artikel` AS `art` ON rop.artikel = art.id AND (art.geloescht = 0 OR art.geloescht IS NULL)
- INNER JOIN `retoure` AS `ro` ON rop.retoure = ro.id AND ro.status <> 'storniert' AND ro.belegnr <> ''
- WHERE `rop`.retoure = %d AND rop.menge_eingang < rop.menge %s
- ORDER BY rop.sort, rop.id
- LIMIT 1",
- $returnOrderId, $this->app->erp->ProjektRechte('ro.projekt')
- )
- );
- }
-
- /**
- * @param int|array $returnOrder
- * @param null|int $id
- *
- * @return string
- */
- public function getNextReturnOrderLocation($returnOrder, $id = null)
- {
- if($id === null) {
- $id = (int)$this->app->Secure->GetGET('id');
- }
- if(is_array($returnOrder)) {
- $rop = $returnOrder;
- $returnOrderId = $rop['retoure'];
- }
- else{
- $returnOrderId = $returnOrder;
- $rop = $this->getNextReturnOrderPosition($returnOrderId);
- }
- if(empty($rop)) {
- return '';
- }
-
- $serial = '';
- $serials = [];
- $bestbefore = '';
- $batch = '';
- $amount = $rop['menge'] - $rop['eingang'];
- $isSerial = !empty($rop['seriennummern']) && $rop['seriennummern'] !== 'keine';
- $isBestBefore = !empty($rop['mindesthaltbarkeitsdatum']);
- $isBatch = !empty($rop['chargenverwaltung']);
- if($isSerial) {
- $sns = $this->app->DB->SelectFirstCols(
- sprintf(
- "SELECT `wert`
- FROM `beleg_chargesnmhd` AS `bc`
- WHERE bc.doctype = 'retoure' AND bc.`doctypeid` = %d AND bc.pos = %d AND `type` = 'sn' AND `wert` <> ''",
- $returnOrderId, $rop['id']
- )
- );
-
- if(!empty($sns)) {
- $serial = $sns[0];
- $movements = $this->app->DB->SelectFirstCols(
- sprintf(
- "SELECT sl.bezeichnung
- FROM `seriennummern_log` AS `sl`
- WHERE `doctype` = 'retoure' AND `doctypeid` = %d AND `artikel` = %d AND `eingang` = 1",
- $returnOrderId, $rop['artikel']
- )
- );
-
- foreach($sns as $sn) {
- if(!in_array($sn, $movements)) {
- $serials[] = $sn;
- }
- }
- if(!empty($serials)) {
- $serial = reset($serials);
- }
- }
- }
- elseif($isBestBefore) {
- if($isBatch) {
- $sns = $this->app->DB->SelectPairs(
- sprintf(
- "SELECT CONCAT(`wert`, IF(`type2` = 'charge',CONCAT('-', `wert2`),'')), `menge`
- FROM `beleg_chargesnmhd` AS `bc`
- WHERE bc.doctype = 'retoure' AND bc.`doctypeid` = %d AND bc.pos = %d AND `type` = 'mhd'",
- $returnOrderId, $rop['id']
- )
- );
- }
- else{
- $sns = $this->app->DB->SelectPairs(
- sprintf(
- "SELECT `wert`, `menge`
- FROM `beleg_chargesnmhd` AS `bc`
- WHERE bc.doctype = 'retoure' AND bc.`doctypeid` = %d AND bc.pos = %d AND `type` = 'mhd'",
- $returnOrderId, $rop['id']
- )
- );
- }
- if(!empty($sns)) {
- $movements = $this->app->DB->SelectFirstCols(
- sprintf(
- "SELECT CONCAT(ml.mhddatum,'-',IFNULL(ml.charge,''))
- FROM `mhd_log` AS `ml`
- WHERE `doctype` = 'retoure' AND `doctypeid` = %d AND `artikel` = %d AND `eingang` = 1",
- $returnOrderId, $rop['artikel']
- )
- );
- $bestbefores = array_keys($sns);
- $bestbefore = reset($bestbefores);
-
- foreach ($sns as $sn => $bestBeforeAmount) {
- if(!in_array($sn, $movements)) {
- $bestbefore = $sn;
- if($bestBeforeAmount < $amount) {
- $amount = $bestBeforeAmount;
- }
- break;
- }
- }
- if(strlen($bestbefore) >= 10) {
- $batch = substr($bestbefore, 10);
- $bestbefore = substr($bestbefore, 0, 10);
- if(strpos($bestbefore, '.') === false) {
- $bestbefore = $this->app->String->Convert($bestbefore,'%1-%2-%3', '%3.%2.%1');
- }
- $bestbefore .= $batch;
- }
- }
- }
- elseif($isBatch) {
- $sns = $this->app->DB->SelectPairs(
- sprintf(
- "SELECT `bc`.wert, `bc`.menge
- FROM `beleg_chargesnmhd` AS `bc`
- WHERE bc.doctype = 'retoure' AND bc.`doctypeid` = %d AND bc.pos = %d AND `type` = 'charge'",
- $returnOrderId, $rop['id']
- )
- );
- if(!empty($sns)){
- $movements = $this->app->DB->SelectFirstCols(
- sprintf(
- "SELECT cl.bezeichnung
- FROM `chargen_log` AS `cl`
- WHERE `doctype` = 'retoure' AND `doctypeid` = %d AND `artikel` = %d AND `eingang` = 1",
- $returnOrderId, $rop['artikel']
- )
- );
- $batchess = array_keys($sns);
- $batch = reset($batchess);
-
- foreach ($sns as $sn => $batchAmount) {
- if(!in_array($sn, $movements)) {
- $batch = $sn;
- if($batchAmount < $amount) {
- $amount = $batchAmount;
- }
- break;
- }
- }
- }
- }
- $serialsUrl = '';
- if(!empty($serials)) {
- foreach($serials as $serialVal) {
- $serialsUrl .= '&seriennummer[]='.urlencode($serialVal);
- }
- }
- elseif(!empty($serial)) {
- $serialsUrl .= '&seriennummer[]='.urlencode($serial);
- }
- return sprintf(
- 'index.php?module=wareneingang&action=distrietiketten&id=%d&retourepos=%d&menge=%f%s&mhd=%s&charge=%s',
- $id, $rop['id'], $amount, $serialsUrl, urlencode($bestbefore), urlencode($batch)
- );
-
- }
-
- /**
- * @param int $returnOrderId
- */
- public function LocatateToReturnOrderPosition($returnOrderId)
- {
- $id = $this->app->Secure->GetGET('id');
-
- $ropLink = $this->getNextReturnOrderLocation($returnOrderId, $id);
- if(!empty($ropLink)) {
- $this->app->Location->execute($ropLink);
- }
-
- $userReturnOrder = $this->app->User->GetParameter('wareneingang_from_returnorder');
- if($userReturnOrder != $returnOrderId) {
- return;
- }
- $module = $this->app->User->GetParameter('wareneingang_from_module');
- if(empty($module)) {
- return;
- }
- $action = $this->app->User->GetParameter('wareneingang_from_action');
- if(empty($action)) {
- return;
- }
- $this->app->User->SetParameter('wareneingang_from_returnorder', '');
- $this->app->User->SetParameter('wareneingang_from_module', '');
- $this->app->User->SetParameter('wareneingang_from_action', '');
- if($module !== 'retoure') {
- $id = '';
- }
- $this->app->Location->execute('index.php?module='.$module.'&action='.$action.'&id='.$id);
- }
-
- public function WareneingangPaketDistriInhalt()
- {
- $cmd = $this->app->Secure->GetGET('cmd');
- $isCmdFromReturnOrder = $cmd === 'fromreturnorder';
- if($isCmdFromReturnOrder) {
- /** @var Retoure $returnOrderObj */
- $returnOrderObj = $this->app->loadModule('retoure');
- if(!empty($returnOrderObj)) {
- $id = $this->app->Secure->GetGET('id');
- $receiptDocument = $returnOrderObj->getReceiptDocumentArrByParcelId($id);
- if(!empty($receiptDocument['return_order_id'])) {
- $this->LocatateToReturnOrderPosition($receiptDocument['return_order_id']);
- }
- }
- }
- if($cmd === 'createreturnorder') {
- $response = $this->HandleCreateReturnOrderAjaxAction();
- $response->send();
- $this->app->ExitXentral();
-
- }
- if($cmd === 'changeqty') {
- $response = $this->HandleChangeQtyAjaxAction();
- $response->send();
- $this->app->ExitXentral();
- }
- $id = $this->app->Secure->GetGET('id');
- $this->app->erp->RunHook('wareneingang_distriinhalt_start', 1, $id);
-
- $submit = $this->app->Secure->GetPOST('submit');
- $submitkunde = $this->app->Secure->GetPOST('submitkunde');
-
- $this->WareneingangPaketDistriMenu();
-
- if($submit!='') {
- $tmp = $this->app->Secure->GetPOST('pos');
- $tmpRetoure = $this->app->Secure->GetPOST('retourepos');
- $col = 'pos';
- if(!empty($tmpRetoure)) {
- $tmp = $tmpRetoure;
- $col= 'retourepos';
- }
- $pos = key($tmp);
- $menge = str_replace(',','.',$tmp[$pos]);
- $seriennummer = '';
- $posa = explode('-', $pos, 2);
- $pos = $posa[0];
- if(isset($posa[1])){
- $seriennummer = $posa[1];
- }
- if($menge<=0) {
- $this->app->Tpl->Set('TAB1','
Bitte geben Sie eine Menge an!
');
- }
- else {
- if($pos > 0 && !empty($tmpRetoure) && $this->app->User->GetParameter('wareneingang_from_type') === 'manual') {
- $returnOrder = $this->app->DB->Select(
- sprintf(
- "SELECT ro.*
- FROM `retoure_position` AS `rop`
- INNER JOIN `retoure` AS `ro` ON rop.retoure = ro.id
- WHERE rop.`id` = %d AND `ro`.status <> 'angelegt' AND ro.status <> 'storniert'
- AND rop.menge_eingang < rop.menge",
- $pos
- )
- );
- if(!empty($returnOrder['adresse'])) {
- $receiptDocument = $this->app->DB->SelectRow(
- sprintf(
- "SELECT *
- FROM `receiptdocument`
- WHERE `return_order_id` = %d
- ORDER BY `status` = '' OR `status` = 'angelegt' DESC
- LIMIT 1",
- $returnOrder['retoure']
- )
- );
- if(empty($receiptDocument)) {
- /** @var Retoure $obj */
- $obj = $this->app->loadModule('retoure');
- $parcelReceiptId = null;
- if($obj !== null) {
- $parcelReceiptId = $this->createParcelReceiptFromAdress($returnOrder['adresse']);
- $receiptDocumentId = $obj->createReceiptDocument($returnOrder['adresse'], $parcelReceiptId);
- $this->app->DB->Update(
- sprintf(
- 'UPDATE `receiptdocument` SET `return_order_id` = %d WHERE `id` = %d',
- $returnOrder['id'], $receiptDocumentId
- )
- );
- }
- }
- }
- }
- $this->app->Location->execute("index.php?module=wareneingang&action=distrietiketten&id=$id&$col=$pos&menge=$menge&seriennummer=".$seriennummer);
- }
- }
-
-
- $adresse= $this->app->DB->Select(
- sprintf(
- 'SELECT `adresse` FROM `paketannahme` WHERE `id` = %d LIMIT 1',
- $id
- )
- );
-
- $addressRow = empty($adresse)?null: $this->app->DB->SelectRow(
- sprintf(
- 'SELECT `name`,`kundennummer`,`lieferantennummer`
- FROM `adresse`
- WHERE `id` = %d AND `geloescht` = 0
- LIMIT 1',
- $adresse
- )
- );
-
- // pruefe ob
- $lieferant = empty($addressRow)?null:$addressRow['lieferantennummer'];
- $kunde= empty($addressRow)?null:$addressRow['kundennummer'];
-
- $name= empty($addressRow)?null:$addressRow['name'];
- $isSupplier = $lieferant!='' && $lieferant!='0';
- $isCustomer = $kunde!='' && $kunde!='0';
-
- if($isSupplier) {
- //$this->app->Tpl->Set('TAB1TEXT','
Bestellungen');
- $this->app->Tpl->Set('TAB1TEXT','Bestellungen');
- //$this->app->Tpl->Set('TAB1START','
');
- //$this->app->Tpl->Set('TAB1ENDE','
');
-
- $this->app->Tpl->Add('TAB1',"
Offene Artikel aus Bestellungen bei $name:
");
- $this->app->YUI->TableSearch('TAB1','wareneingang_lieferant','show','','',basename(__FILE__), __CLASS__);
- }
- else {
- /*$this->app->Tpl->Set('TAB1START','');*/
- $this->app->Tpl->Set('TAB1START','');
- $this->app->Tpl->Set('TAB1ENDE','');
- $this->app->Tpl->Set('BEFORETAB1', '');
- }
-
-
-
- if(!$isSupplier && !$isCustomer) {
- $this->app->Tpl->Set('TAB1START','');
- $this->app->Tpl->Set('TAB1ENDE','');
- $this->app->Tpl->Set('BEFORETAB1', '');
- $this->app->Tpl->Set('AFTERTAB1', '');
- $this->app->Tpl->Set(
- 'TAB1',
- '
Die ausgewählte Adresse hat noch keine Rolle Kunde oder Lieferant.
- Bitte vergeben Sie diese, dann sehen Sie Bestellungen oder versendete Waren.
'
- );
- }
-
- $this->app->erp->RunHook('wareneingang_distriinhalt', 1, $id);
- if($showcreateReturnOrder) {
- $this->app->Tpl->addButton(
- 'BUTTONS2',
- '✚ Retoure Anlegen',
- '',
- '',
- 'newreturnorder button-primary button',
- [
- 'id'=>'newreturnorder',
- 'data-id' => $id,
- ]
- );
- }
- if($this->app->User->GetParameter('wareneingang_action')==='distribution'){
- $this->app->erp->MenuEintrag(
- 'index.php?module=wareneingang&action=distribution',
- 'zurück zur Übersicht'
- );
- }
- if($isSupplier){
- $this->app->Tpl->Parse('PAGE', 'wareneingangpaketdistribution.tpl');
- }
- else {
- $this->app->Tpl->Parse('PAGE', 'wareneingangpaketdistribution2.tpl');
- }
- $returnordergeprueft = $this->app->Secure->GetPOST('returnordergeprueft');
- $abschliessen = $this->app->Secure->GetPOST('abschliessen');
- if($abschliessen!='' || $returnordergeprueft != '') {
- // paketannahme auf abgeschlossen setzten
-
- $returnOrderId = empty($returnordergeprueft)?null: $this->app->DB->Select(
- sprintf(
- 'SELECT return_order_id FROM receiptdocument WHERE parcel_receipt_id = %d',
- $id
- )
- );
- $this->app->DB->Update("UPDATE paketannahme SET status='abgeschlossen' WHERE id='$id' LIMIT 1");
-
-
- $this->app->erp->RunHook('wareneinang_paketannahme_abschliessen',1, $id);
- $this->app->Location->execute('index.php?module=wareneingang&action=paketannahme');
- }
-
- $manuellerfassen = $this->app->Secure->GetPOST('manuellerfassen');
- if($manuellerfassen!='') {
- $this->app->Location->execute('index.php?module=wareneingang&action=manuellerfassen&id='.$id);
- }
- }
-
- public function WareneingangMiniDetail()
- {
- $id = $this->app->Secure->GetGET('id');
- if($this->app->Secure->GetGET('cmd') === 'change') {
- $beipack_lieferschein = (int)$this->app->Secure->GetPOST('beipack_lieferschein');
- $beipack_rechnung = (int)$this->app->Secure->GetPOST('beipack_rechnung');
- $renr = $this->app->Secure->GetPOST('renr');
- $lsnr = $this->app->Secure->GetPOST('lsnr');
- $this->app->DB->Update("UPDATE paketannahme SET renr = '$renr',lsnr = '$lsnr',beipack_lieferschein = '$beipack_lieferschein', beipack_rechnung = '$beipack_rechnung' WHERE id = '$id' LIMIT 1");
- echo json_encode(array('status'=>1));
- $this->app->ExitXentral();
- }
- $table = new EasyTable($this->app);
- $table->Query("SELECT a.nummer, LEFT(a.name_de,30) as artikel, trim(lb.menge)+0 as menge FROM lager_bewegung lb
- LEFT JOIN artikel a ON lb.artikel=a.id
- WHERE lb.paketannahme='$id' ORDER by a.nummer");
- $this->app->Tpl->Set('MD5', md5(microtime(true)));
- $this->app->Tpl->Set('ID', $id);
- $arr = $this->app->DB->SelectRow("SELECT * FROM paketannahme WHERE id = '$id' LIMIT 1");
- if($arr) {
- if($arr['beipack_rechnung']) {
- $this->app->Tpl->Set('BEIPACK_RECHNUNG',' checked="checked" ');
- }
- if($arr['beipack_lieferschein']) {
- $this->app->Tpl->Set('BEIPACK_LIEFERSCHEIN',' checked="checked" ');
- }
- $this->app->Tpl->Set('RENR', $arr['renr']);
- $this->app->Tpl->Set('LSNR', $arr['lsnr']);
- }
- $table->DisplayNew('ARTIKEL','Menge','noAction');
- $this->app->Tpl->Output('wareneingang_minidetail.tpl');
- $this->app->ExitXentral();
- }
-
- public function WareneingangManuellErfassen()
- {
- $id = $this->app->Secure->GetGET('id');
- $paket = $this->app->Secure->GetGET('paket');
- $this->app->erp->MenuEintrag('index.php?module=wareneingang&action=distriinhalt&id='.$id,'Zurück zur Übersicht');
- $this->app->erp->MenuEintrag('index.php?module=wareneingang&action=manuellerfassen&id='.$id,'Artikel');
- $artikel = $this->app->Secure->GetPOST('artikel');
- if($artikel) {
- $artikelid = $this->app->DB->Select("SELECT a.id FROM artikel a LEFT JOIN projekt pr ON a.projekt = pr.id WHERE (a.nummer = '".$artikel."' OR a.herstellernummer = '".$artikel."' OR a.ean = '".$artikel."') AND a.geloescht = 0 ".$this->app->erp->ProjektRechte()." LIMIT 1");
- if($artikelid) {
- $this->app->Location->execute('index.php?module=wareneingang&action=distrietiketten&id='.(int)$id.'&pos='.$artikelid.'%&menge=1&cmd=manuell');
- }
- $this->app->Tpl->Add('MESSAGE','
{|Der Artikel wurde nicht gefunden|}
');
- }
-
- $cmd = $this->app->Secure->GetGET('cmd');
-
- if($cmd==='add') {
- echo 'huhuh';
- }
- else {
- $this->app->YUI->TableSearch('TAB1','wareneingangartikelmanuellerfassen','show','','',basename(__FILE__), __CLASS__);
- }
-
- //$this->WareneingangPaketMenu();
- $this->app->Tpl->Parse('PAGE','wareneingang_manuellerfassen.tpl');
- }
-
- public function WareneingangPaketDistriEtikettenBildErfassen(){
- $this->app->Tpl->Set('TAB1','Die Funktion hat keinen Inhalt. Sie dient lediglich zur Berechtigungserfassung.');
- $this->app->Tpl->Parse('PAGE','tabview.tpl');
- }
-
- public function WareneingangPaketDistriEtiketten()
- {
- $id = $this->app->Secure->GetGET('id');
- $pos = $this->app->Secure->GetGET('pos');
- $retourepos = $this->app->Secure->GetGET('retourepos');
- $artikelnummer = $this->app->Secure->GetGET('artikelnummer');
- $seriennummer = $this->app->Secure->GetGET('seriennummer');
- $menge = str_replace(',','.',$this->app->Secure->GetGET('menge'));
- $nmenge = str_replace(',','.',$this->app->Secure->GetGET('nmenge'));
- if($nmenge > 0) {
- $menge = $nmenge;
- }
- $rma = $this->app->Secure->GetGET('rma');
-
- $submit = $this->app->Secure->GetPOST('submit');
- $lager = $this->app->Secure->GetPOST('lager');
- $etiketten = $this->app->Secure->GetPOST('etiketten');
- $anzahlauswahl = $this->app->Secure->GetPOST("anzahlauswahl");
- $anzahl_fix = $this->app->Secure->GetPOST('anzahl_fix');
- $anzahl_dyn = $this->app->Secure->GetPOST('anzahl_dyn');
- $anzahl = $this->app->Secure->GetPOST('anzahl');
- $bemerkung = $this->app->Secure->GetPOST('bemerkung');
- $chargesnmhdbemerkung = $this->app->Secure->GetPOST('chargesnmhdbemerkung');
- $wunsch= $this->app->Secure->GetPOST('wunsch');
- $cmd= $this->app->Secure->GetGET('cmd');
- $backaction = $this->app->Secure->GetGET('backaction');
- $ismobile = $this->app->Secure->GetGET('ismobile');
- $withZwischenlager = $ismobile || $this->app->erp->Firmendaten('wareneingang_zwischenlager')=='1';
-
- if($cmd === 'scan') {
- $lagerscan = $this->app->Secure->GetPOST('elagerscan');
- if($lagerscan != '') {
- $lagervorhanden = $this->app->DB->SelectRow(
- "SELECT lp.id, CONCAT(l.bezeichnung,'->',lp.kurzbezeichnung) AS kurzbezeichnung
- FROM lager_platz AS lp
- INNER JOIN lager AS l ON lp.lager = l.id AND l.geloescht <> 1
- WHERE lp.kurzbezeichnung = '$lagerscan' AND lp.geloescht <> 1
- LIMIT 1"
- );
- if(!empty($lagervorhanden)){
- echo json_encode(
- array(
- 'status'=>1,'id'=>$lagervorhanden['id'],'kurzbezeichnung'=>$lagervorhanden['kurzbezeichnung']
- )
- );
- $this->app->ExitXentral();
- }
- $error = 'Gescanntes Regal existiert nicht';
- echo json_encode(array('status'=>0,'statusText'=>$error));
- $this->app->ExitXentral();
- }
- }
-
- $this->app->Tpl->Set('ID',$id);
- $weiterleitung = '';
- if($cmd==='manuell'){
- $this->app->DB->Update("UPDATE artikel SET lagerartikel='1' WHERE id='$pos' AND juststueckliste!=1 LIMIT 1");
- $artikel = $pos;
- $this->app->Tpl->Set('ANZAHLAENDERN',"
0) window.location.href=document.URL + '&menge=' + menge;\">");
- //$this->app->Tpl->Set('SHOWANZAHLSTART',''); //BENE war auskommentiert
- }
- else if($cmd==='manuell') {
- $artikel = $pos;
- $mitarbeiter = $this->app->User->GetName();
- $projekt = $this->app->DB->Select("SELECT projekt FROM artikel WHERE id='$artikel' LIMIT 1");
- }
- else {
- $retarr = null;
- $bparr = null;
- //bestellung
- // bestellung findet man raus ueber pos (bestellung)
- $artikel = 0;
- $projekt = 0;
- $bestellung = 0;
- $vpe = '';
- $menge_bestellung = 0;
- $menge_retoure = 0;
- if(!empty($retourepos)) {
- $retarr = $this->app->DB->SelectRow("SELECT * FROM retoure_position WHERE id='$retourepos' LIMIT 1");
- }
- else{
- $bparr = $this->app->DB->SelectRow("SELECT * FROM bestellung_position WHERE id='$pos' LIMIT 1");
- }
- if(!empty($retarr)) {
- $artikel = $retarr['artikel'];
- $projekt = $retarr['projekt'];
- $retoure = $retarr['retoure'];
- $vpe = $retarr['vpe'];
- $menge_retoure = $retarr['menge'];
- }
- elseif(!empty($bparr)){
- $artikel = $bparr['artikel'];
- $projekt = $bparr['projekt'];
- $bestellung = $bparr['bestellung'];
- $vpe = $bparr['vpe'];
- $menge_bestellung = $bparr['menge'];
- }
- $adresse = $this->app->DB->Select("SELECT adresse FROM paketannahme WHERE id='$id' LIMIT 1");
- $name = $this->app->DB->Select("SELECT name FROM adresse WHERE id='$adresse' AND geloescht=0 LIMIT 1");
- $retoure_belegnr = '';
- $bestellung_belegnr = '';
- if(!empty($retourepos)) {
- $mitarbeiter = $this->app->DB->Select("SELECT bearbeiter FROM retoure WHERE id='$retoure' LIMIT 1");
- $retoure_belegnr = $this->app->DB->Select("SELECT belegnr FROM retoure WHERE id='$retoure' LIMIT 1");
- }
- else {
- $mitarbeiter = $this->app->DB->Select("SELECT bearbeiter FROM bestellung WHERE id='$bestellung' LIMIT 1");
- $bestellung_belegnr = $this->app->DB->Select("SELECT belegnr FROM bestellung WHERE id='$bestellung' LIMIT 1");
- }
- }
- $standardlager = $this->app->DB->Select("SELECT lager_platz FROM artikel WHERE id='".$artikel."' LIMIT 1");
- $withStandardlager = $standardlager > 0;
-
- $artikelRow = $this->app->DB->SelectRow(
- sprintf(
- 'SELECT lagerartikel,mindesthaltbarkeitsdatum, seriennummern,nummer, name_de,
- artikelcheckliste,funktionstest,endmontage,standardbild,shop,chargenverwaltung
- FROM artikel WHERE id = %d LIMIT 1',
- $artikel
- )
- );
- $lagerartikel = $artikelRow['lagerartikel'];
- $mindesthaltbarkeitsdatum = $artikelRow['mindesthaltbarkeitsdatum'];
- $seriennummern = $artikelRow['seriennummern'];
- if($seriennummern != '' && $seriennummern !== 'keine'){
- $menge = (int)$menge;
- }
- $mitarbeiter_name = $this->app->DB->Select("SELECT name FROM adresse WHERE id='$mitarbeiter' AND geloescht=0 LIMIT 1");
- $artikelcheckliste = !empty($artikelRow)?$artikelRow['artikelcheckliste']:$this->app->DB->Select("SELECT artikelcheckliste FROM artikel WHERE id='$artikel' LIMIT 1");
- $funktionstest = !empty($artikelRow)?$artikelRow['funktionstest']:$this->app->DB->Select("SELECT funktionstest FROM artikel WHERE id='$artikel' LIMIT 1");
- $endmontage = !empty($artikelRow)?$artikelRow['endmontage']:$this->app->DB->Select("SELECT endmontage FROM artikel WHERE id='$artikel' LIMIT 1");
- $name_de = !empty($artikelRow)?$artikelRow['name_de']:$this->app->DB->Select("SELECT name_de FROM artikel WHERE id='$artikel' LIMIT 1");
- $nummer = !empty($artikelRow)?$artikelRow['nummer']:$this->app->DB->Select("SELECT nummer FROM artikel WHERE id='$artikel' LIMIT 1");
- $chargenverwaltung= !empty($artikelRow)?$artikelRow['chargenverwaltung']:$this->app->DB->Select("SELECT chargenverwaltung FROM artikel WHERE id='$artikel' LIMIT 1");
- $standardbild = !empty($artikelRow)?$artikelRow['standardbild']:$this->app->DB->Select("SELECT standardbild FROM artikel WHERE id='$artikel' LIMIT 1");
- $shopartikel = !empty($artikelRow)?$artikelRow['shop']:$this->app->DB->Select("SELECT shop FROM artikel WHERE id='$artikel' LIMIT 1");
-
- if($standardbild==''){
- $standardbild = $this->app->DB->Select("SELECT datei FROM datei_stichwoerter WHERE subjekt='Shopbild' AND objekt='Artikel' AND parameter='$artikel' LIMIT 1");
- }
-
- if(empty($retourepos)){
- if(($menge > $menge_bestellung) && $cmd !== 'manuell'){
- $this->app->Tpl->Add('MESSAGE', "
Achtung! Es wurden mehr geliefert als in der aktuellen Position bestellt worden sind!
-
");
- }
- }
- else{
- if(($menge > $menge_retoure) && $cmd !== 'manuell'){
- $this->app->Tpl->Add('MESSAGE', "
Achtung! Es wurden mehr geliefert als in der aktuellen Position eingangen worden sind!
-
");
- }
- }
-
- $bilderfassen = $this->app->erp->RechteVorhanden('wareneingang','distrietikettenbilderfassen');
- $stichwoerter = $this->app->erp->getDateiTypen('artikel');
- foreach ($stichwoerter as $stichwort){
- $selected = '';
- $vorauswahl = $this->app->erp->Firmendaten('wareneingangbildtypvorauswahl');
- if ($stichwort['wert'] === $vorauswahl){
- $selected = 'selected';
- }
- $this->app->Tpl->Add('BILDTYPEN','
');
- }
- if(empty($bilderfassen)){
- $this->app->Tpl->Set('BILDERFASSENSTART','');
- }
-
- if($standardbild == '') {
- $this->app->Tpl->Set('SHOWIMGSTART','');
- }
-
- $mhdFrm = (string)$this->app->Secure->GetGET('mhd');
- $chargeFrm = (string)$this->app->Secure->GetGET('charge');
- if(strlen($mhdFrm) > 10) {
- $chargeFrm = ltrim(substr($mhdFrm, 10),'-');
- $mhdFrm = substr($mhdFrm, 0, 10);
- }
-
- if($chargenverwaltung !='2' && $chargenverwaltung != '1') {
- $this->app->Tpl->Set('SHOWCHRSTART','');
- }
- else{
- $this->app->Tpl->Set('CHARGEFRM', $chargeFrm);
- }
-
-
- if($mindesthaltbarkeitsdatum !='1') {
- $this->app->Tpl->Set('SHOWMHDSTART','');
- }
- else {
- $this->app->YUI->DatePicker('mhd');
- $this->app->Tpl->Set('MHDFRM', $mhdFrm);
- }
-
- $this->app->Tpl->Set('SHOWSRNSTART','');
- if($standardlager <=0){
- $this->app->Tpl->Set('STANDARDLAGER', 'nicht definiert');
- }
- if(!empty($retarr) && !empty($retarr['default_storagelocation'])) {
- $retarr['default_storagelocation'] = $this->app->DB->Select(
- sprintf(
- "SELECT kurzbezeichnung FROM lager_platz WHERE geloescht <> 1 AND id = %d and kurzbezeichnung <> ''",
- $retarr['default_storagelocation']
- )
- );
- }
- if(!empty($retarr) && !empty($retarr['default_storagelocation'])) {
- $this->app->Tpl->Set('LAGERPLACEHOLDER',' placeholder="'.
- $retarr['default_storagelocation']
- .'" ');
- }
- elseif($standardlager <=0) {
- if($ismobile || $this->app->erp->Firmendaten('wareneingang_zwischenlager')=='1') {
- $this->app->Tpl->Set('LAGERPLACEHOLDER',' placeholder="zwischenlager" ');
- }
- //$this->app->Tpl->Set('LAGER',$this->app->erp->GetSelectAsso($this->app->erp->GetLager(false, $ismobile),$lager));
- }
- else {
- $this->app->Tpl->Set('STANDARDLAGER',$this->app->DB->Select("SELECT kurzbezeichnung FROM lager_platz WHERE id='".$standardlager."' LIMIT 1"));
- if($ismobile || $this->app->erp->Firmendaten('wareneingang_zwischenlager')=='1') {
- $this->app->Tpl->Set('LAGERPLACEHOLDER',' placeholder="zwischenlager" ');
- }
- else {
- $this->app->Tpl->Set('LAGERPLACEHOLDER',' placeholder="Standardlager" ');
- }
- //$this->app->Tpl->Set('LAGER',$this->app->erp->GetSelectAsso($this->app->erp->GetLager(true, $ismobile),$lager));
- }
-
- if($submit=='') {
- $tmpauswahl = $this->app->User->GetParameter('wareneingang_distrietiketten_etiketten');
- if($tmpauswahl=='') {
- $tmpauswahl='artikel_klein';
- }
- $this->app->Tpl->Set('ETIKETTEN',$this->app->erp->GetSelectAsso($this->app->erp->GetEtikett(),$tmpauswahl));
- }
- else {
- $this->app->Tpl->Set('ETIKETTEN', $this->app->erp->GetSelectAsso($this->app->erp->GetEtikett(), $etiketten));
- }
-
- $this->app->Tpl->Set('MENGE',$menge);
-
- if($this->app->erp->Firmendaten('standardetikettendrucker')>0) {
- $this->app->Tpl->Set('ETIKETTENDRUCKEN','Etiketten drucken.');
- $this->app->Tpl->Set('ANZAHL',0);
- $this->app->Tpl->Set('TEXTBUTTON','Artikel einlagern');
- }
- else {
- $this->app->Tpl->Set('SHOWANZAHLSTART','');
-
- $this->app->Tpl->Set('ETIKETTENDRUCKENSTART','');
- $this->app->Tpl->Set('TEXTBUTTON','Artikel einlagern');
- $this->app->Tpl->Set('ANZAHL',0);
- $this->app->Tpl->Set('ANZAHLCHECKED','checked');
- }
-
- $this->app->Tpl->Set('LIEFERANT',$name);
- $this->app->Tpl->Set('MITARBEITER',$mitarbeiter_name);
- $this->app->Tpl->Set('VPE',$vpe);
- $this->app->Tpl->Set('NAME',$name_de);
- $this->app->Tpl->Set('NUMMER',$nummer);
- $this->app->Tpl->Set('DATEI',$standardbild);
-
- $error = 0;
- // Pflichfelder pruefen
- if($mindesthaltbarkeitsdatum=='1' && $this->app->Secure->GetPOST('mhd')=='') {
- $error++;
- }
-
- if(($chargenverwaltung=='2' || $chargenverwaltung=='1') && $this->app->Secure->GetPOST('charge')=='') {
- $error++;
- }
- //vomprodukteinlagern hinzugefuegt 08.01.20 LG OS904009
- if(($seriennummern !=='keine' && $seriennummern !=='vomprodukt' && $seriennummern !=='eigene' && $seriennummern != 'vomprodukteinlagern' && $seriennummern !='') && $rma!=='rma') {
- $tmpcheck = $this->app->Secure->GetPOST('seriennummern');
- for($checkser=0;$checkser < $menge; $checkser++) {
- if($tmpcheck[$checkser]==''){
- $error++;
- }
- }
- }
-
- if($rma==='rma') {
- $error=0;
- }
-
- if($submit!='' && $error > 0) {
- $this->app->Tpl->Add('MESSAGE','
Achtung! Bitte alle Pflichtfelder ausfüllen!
');
- }
- // ende pflichtfelder pruefung
-
- // $this->app->erp->MenuEintrag("index.php?module=wareneingang&action=distriinhalt&id=$id","zum Paketinhalt");
- $this->app->erp->MenuEintrag("index.php?module=wareneingang&action=manuellerfassen&id=$id","Zurück zur Übersicht");
- $this->app->erp->MenuEintrag("index.php?module=wareneingang&action=distrietiketten&id=$id","Artikel",true);
-
- $typ = '';
- //weiter mit paket bis fertig
-
- if($rma==='rma') {
- }
- else {
- if($lagerartikel && !$artikelcheckliste && !$funktionstest && !$endmontage) {
- $this->app->erp->RunHook('wareneingang_display_hook_rma1', 3, $id, $pos, $menge);
- $typ = 'lager';
- $this->app->Tpl->Set('ANZAHLAENDERN',"
0) window.location.href=document.URL + '&nmenge=' + menge;\">");
- //$this->app->Tpl->Add(TAB1TEXT,"
Lagerartikel");
-
- $this->app->YUI->AutoComplete('lager','lagerplatz',0,'&zwischenlager='.$withZwischenlager.'&withstandardlager='.$withStandardlager);
- $this->app->Tpl->Parse('TAB1','wareneingangpaketdistribution_tab3_lager.tpl');
- }
- else if($artikelcheckliste || $funktionstest || $endmontage) {
- }
- else if (!$lagerartikel && !$artikelcheckliste && !$funktionstest && !$endmontage)
- {
- $typ = 'mitarbeiter';
- $this->app->erp->RunHook('wareneingang_display_hook_rma1', 3, $id, $pos, $menge);
- $this->app->Tpl->Add('TAB1TEXT','
Artikel für Mitarbeiter');
- $this->app->Tpl->Parse('TAB1','wareneingangpaketdistribution_tab3_mitarbeiter.tpl');
- }
- else {
- echo 'Diesen Fall gibt es nicht. Xentral Entwicklung kontaktieren!';
- }
- }
-
- if($typ === 'lager' && $submit!='' && $error==0) {
- if(empty($lager) && !empty($retarr) && !empty($retarr['default_storagelocation'])) {
- $lager = $retarr['default_storagelocation'];
- }
- elseif(empty($lager)) {
- if($standardlager <=0) {
- if($ismobile || $this->app->erp->Firmendaten('wareneingang_zwischenlager')=='1') {
- $lager = 'zwischenlager';
- }
- }
- else {
- if($ismobile || $this->app->erp->Firmendaten('wareneingang_zwischenlager')=='1') {
- $lager = 'zwischenlager';
- }
- else {
- $lager = 'standardlager';
- }
- }
- }
- if(empty($lager)) {
- $error++;
- }
- else {
- switch(strtolower($lager)) {
- case 'zwischenlager':
- $lager = 'zwischenlager';
- if(!$withZwischenlager) {
- $error++;
- $this->app->Tpl->Add('MESSAGE1','
Wareneingang mit Zwischenlager ist nicht aktiviert
');
- }
- break;
- case 'standardlager':
- $lager = $this->app->DB->Select(
- sprintf(
- 'SELECT lager_platz FROM artikel WHERE id = %d',
- $artikel
- )
- );
- $lager = empty($lager)?null: $this->app->DB->Select(
- sprintf(
- 'SELECT id FROM lager_platz WHERE id = %d AND geloescht <> 1',
- $lager
- )
- );
- if(empty($lager)) {
- $error++;
- $this->app->Tpl->Add('MESSAGE1','
Der Artikel hat kein Standardlager
');
- }
- break;
- default:
- $frmLager = $lager;
- $lager = $this->app->DB->Select(
- sprintf(
- "SELECT id
- FROM lager_platz
- WHERE kurzbezeichnung <> '' AND kurzbezeichnung = '%s' AND geloescht <> 1",
- $frmLager
- )
- );
- if(empty($lager) && is_numeric($frmLager)) {
- $lager = $this->app->DB->Select(
- sprintf(
- "SELECT id
- FROM lager_platz
- WHERE kurzbezeichnung <> '' AND id = %d AND geloescht <> 1",
- $frmLager
- )
- );
- }
- if(empty($lager)) {
- $error++;
- $this->app->Tpl->Add(
- 'MESSAGE1',
- '
Lagerplatz '.$frmLager.' wurde nicht gefunden
'
- );
- }
- break;
- }
- }
- }
-
- //befehl ab ins lager, produktion oder mitarbeiter
- if($submit!='' && $error==0) {
- if (!empty($_FILES['wareneingangartikelbild']['tmp_name'])) {
- $stichwort = $this->app->Secure->GetPOST('bildtyp');
- $bildTitel = '';
- $bildBeschreibung = '';
- $chargeNummer = $this->app->Secure->GetPOST('charge');
- $bildName = $_FILES['wareneingangartikelbild']['name'];
- $this->app->erp->RunHook('wareneingang_chargenbildspeichern', 5, $nummer, $chargeNummer, $bildName, $bildTitel, $bildBeschreibung);
- $fileid = $this->app->erp->CreateDatei($bildName, $bildTitel, $bildBeschreibung, '', $_FILES['wareneingangartikelbild']['tmp_name'], $this->app->User->GetName());
- // stichwoerter hinzufuegen
- if(!empty($this->app->Secure->GetPOST('charge'))){
- $this->app->erp->AddDateiStichwort($fileid, $stichwort, 'Artikel', $artikel,false, $this->app->Secure->GetPOST('charge'),'Charge');
- }else if(!empty($this->app->Secure->GetPOST('mhd'))){
- $dstype = 'MHD';
- try {
- $mhddate = date_create_from_format('d.m.Y', $this->app->Secure->GetPOST('mhd'))->getTimestamp();
- }catch (Exception $ex){
- $mhddate='';
- }
- if($mhddate===''){
- $dstype='';
- }
- $this->app->erp->AddDateiStichwort($fileid, $stichwort, 'Artikel', $artikel,false, $mhddate,$dstype);
- }else{
- $this->app->erp->AddDateiStichwort($fileid, $stichwort, 'Artikel', $artikel);
- }
- }
-
- switch($typ) {
- case 'lager':
- if($anzahlauswahl==='fix') {
- $druckanzahl = $anzahl_fix;
- }
- else {
- $druckanzahl = $anzahl_dyn;
- }
- $name_de = $this->app->DB->Select("SELECT name_de FROM artikel WHERE id='$artikel' LIMIT 1");
- $name_de = base64_encode($name_de);
-
- $this->app->erp->LagerArtikelZusammenfassen($artikel);
-
- //$etiketten AUSWAHL etiketten ob gross oder klein
- if($this->app->erp->Firmendaten('standardetikettendrucker')>0) {
- if($druckanzahl>0) {
- $data['charge']=$this->app->Secure->GetPOST("charge");
-
- // falls BE für Auftrag
- if(!empty($retoure)) {
- $auftragid = $this->app->DB->Select(
- "SELECT a.id FROM retoure_position bp
- LEFT JOIN auftrag_position ap ON bp.auftrag_position_id=ap.id
- LEFT JOIN auftrag a ON a.id=ap.auftrag WHERE bp.retoure='$retoure' LIMIT 1");
-
- $data['retoure'] = $this->app->DB->Select("SELECT belegnr FROM bestellung WHERE id='$retoure' LIMIT 1");
-
- }
- else{
- $auftragid = $this->app->DB->Select("SELECT a.id FROM bestellung_position bp LEFT JOIN auftrag_position ap ON bp.auftrag_position_id=ap.id
- LEFT JOIN auftrag a ON a.id=ap.auftrag WHERE bp.bestellung='$bestellung' LIMIT 1");
-
- $data['bestellung'] = $this->app->DB->Select("SELECT belegnr FROM bestellung WHERE id='$bestellung' LIMIT 1");
- }
-
- if($auftragid>0) {
- $belegnummer = $this->app->DB->Select("SELECT belegnr FROM auftrag WHERE id='$auftragid' LIMIT 1");
- $data['belegnummer']=$belegnummer;
- $data['auftragsnummer']=$belegnummer;
- $data['auftrag']=$belegnummer;
-
- $adresse = $this->app->DB->Select("SELECT adresse FROM auftrag WHERE id='$auftragid' LIMIT 1");
- if($adresse > 0) {
- $adressearr = $this->app->DB->SelectRow("SELECT * FROM adresse WHERE id='$adresse' LIMIT 1");
- foreach($adressearr as $key=>$value) {
- $data['adresse_'.$key]=$value;
- }
- }
- }
- $data['etiketten_menge']=$druckanzahl;
- $data['menge']=$anzahl_fix;
- $data['charge']=$this->app->Secure->GetPOST('charge');
- $data['mhd2']=$this->app->Secure->GetPOST('mhd');
-
- if($lager>0){
- $data['lager_platz_einlagern'] = $this->app->DB->Select("SELECT kurzbezeichnung FROM lager_platz WHERE id='" . $lager . "' LIMIT 1");
- }
-
- //$data['seriennummer']="";
- $tmpdataseriennummern=$this->app->Secure->GetPOST('seriennummern');
-
- if($etiketten=='') {
- $etiketten='artikel_klein';
- }
- if(!empty($tmpdataseriennummern) && is_array($tmpdataseriennummern) && (!empty($tmpdataseriennummern)?count($tmpdataseriennummern):0)>0) {
- if($etiketten!=='keineetiketten') {
- foreach($tmpdataseriennummern as $srn) {
- $data['seriennummer']=$srn;
- $druckanzahl = 1;
- $this->app->erp->EtikettenDrucker($etiketten,$druckanzahl,'artikel',$artikel,$data);
- }
- }
- }
- else {
- if($etiketten!=='keineetiketten'){
- $this->app->erp->EtikettenDrucker($etiketten, $druckanzahl, 'artikel', $artikel, $data);
- }
- }
- $this->app->User->SetParameter('wareneingang_distrietiketten_etiketten',$etiketten);
- }
- }
-
- $zid = 0;
- if($chargenverwaltung=='2' || $chargenverwaltung=='1') {
- $charge = $this->app->Secure->GetPOST('charge');
- $chargemindest = $charge;
- }
- else {
- $ch = 0;
- }
- $doctype = !empty($retoure)?'retoure':'';
- $doctypeId = !empty($retoure)?$retoure:0;
- if(empty($doctypeId)) {
- $doctypeId = !empty($bestellung)?$bestellung:$id;
- }
- if($doctype === '') {
- $doctype =!empty($bestellung)?'bestellung':'paketannahme';
- }
- // entweder ins zwischenlager
- if(strtolower($lager)==='zwischenlager') {
- if(!empty($retoure)) {
- $this->app->DB->Insert("INSERT INTO zwischenlager (id,bearbeiter,projekt,artikel,menge,vpe,grund,lager_von,richtung,objekt,parameter,firma,paketannahme)
- VALUES ('','" . $this->app->User->GetName() . "','$projekt','$artikel','$menge','$vpe','Wareneingang von Retoure $retoure_belegnr','Wareneingang','Eingang',
- 'Retoure','$retoure','" . $this->app->User->GetFirma() . "','$id')");
- }
- else{
- $this->app->DB->Insert("INSERT INTO zwischenlager (id,bearbeiter,projekt,artikel,menge,vpe,grund,lager_von,richtung,objekt,parameter,firma,paketannahme)
- VALUES ('','" . $this->app->User->GetName() . "','$projekt','$artikel','$menge','$vpe','Wareneingang von Bestellung $bestellung_belegnr','Wareneingang','Eingang',
- 'Bestellung','$bestellung','" . $this->app->User->GetFirma() . "','$id')");
- }
- $typ = 'zwischenlager';
- $zid = $this->app->DB->GetInsertID();
- $typ2 = 'zwischenlager';
- $tmpid2 = $zid;
- }
- // oder direkt ins manuelle (lagerplatz + lager_bewegung)
- else {
- if(strtolower($lager)==='standardlager'){
- $lager = $this->app->DB->Select("SELECT lager_platz FROM artikel WHERE id='" . $artikel . "' LIMIT 1");
- }
-
- if($lager<=0){
- $lager = $this->app->DB->Select("SELECT id FROM lager_platz WHERE autolagersperre!=1 AND verbrauchslager!=1 AND geloescht!=1 LIMIT 1");
- }
-
- if($lager==='zwischenlager'){
- $lagerplatz = 0;
- }
- else{
- $lagerplatz = $lager;
- }
-
- /*
- //$charge = $this->app->Secure->GetPOST("charge");
- /*if(false && $chargenverwaltung=="1")
- {
- // wenn chargenverwaltung dann chargen id holen!!!! und mit bei lagerung und etikett speichern!
- $this->app->DB->Insert("INSERT INTO chargenverwaltung (id,artikel,bestellung,menge,vpe,zeit,bearbeiter)
- VALUES ('','$artikel','$bestellung','$menge','$vpe',NOW(),'".$this->app->User->GetName()."')");
- // drucken (inkl. chargennummer)
- $ch = $this->app->DB->GetInsertID();
- $chargemindest = $ch;
- } else*/
-
- if(!empty($retoure)) {
- $url = null;
- $this->app->erp->RunHook(
- 'wareneingang_before_stock_in_return_order', 7, $id, $retoure, $retourepos, $artikel, $menge, $lager, $url
- );
- if(!empty($url)) {
- $this->app->Location->execute($url);
- }
- $this->app->erp->LagerEinlagern(
- $artikel, $menge, $lager, '', 'Wareneingang von Retoure '.$retoure_belegnr, '', $id,'retoure',$retoure
- );
- }
- else {
- if($cmd === 'manuell') {
- $this->app->erp->LagerEinlagern($artikel, $menge, $lager, '', 'Wareneingang manuell', '', $id);
- }
- else{
- $this->app->erp->LagerEinlagern($artikel, $menge, $lager, '', "Wareneingang von Bestellung $bestellung_belegnr", '', $id);
- $this->app->erp->RunHook('wareneingang_bestellung', 5, $bparr, $artikel, $menge, $lager, $id);
- }
- }
- $typ2 = 'lager_platz';
- $tmpid2 = array('artikel'=>$artikel,'lager_platz'=>$lager,'menge'=>$menge);
- }
-
- $_adresse = $this->app->DB->Select("SELECT adresse FROM paketannahme WHERE id = '$id' LIMIT 1");
- $this->app->erp->RunHook('wareneingang_lager_submit', 8, $_adresse, $artikel, $menge,$lagerplatz,$mhd,$chargemindest, $tmpcheck, $weiterleitung);
-
-
- $this->app->erp->RunHook('wareneingang_after', 3, $id, $typ2, $tmpid2);
- break;
- case 'mitarbeiter':
- // buchen als mitarbeiter inventar auf das projekt was angegeben ist
- // wenn mitarbeiterartikel muss artikel als inventar dem mitarbeiter gebucht werden fuer projekt bla bla
- $this->app->DB->Insert("INSERT INTO projekt_inventar (id,artikel,menge,projekt,mitarbeiter,bestellung,zeit,vpe)
- VALUES('','$artikel','$menge','$projekt','$mitarbeiter','$bestellung',NOW(),'$vpe')");
- $projekt_inventar_id = $this->app->DB->GetInsertID();
- $this->app->erp->RunHook('wareneingang_after', 3, $id, $typ, $projekt_inventar_id);
- break;
- //$this->app->erp->RunHook('wareneingang_mitarbeiter_submit', 6, $mitarbeiter, $bestellung, $projekt, $artikel, $menge, $weiterleitung);
-
- default:
- echo 'ACHTUNG DAS DARF NICHT PASSIEREN!! XENTRAL ENTWICKLUNG HOLEN! FEHLER IM PROGRAMM?';
- }
-
- if($typ!=='rma' && $cmd !== 'manuell') {
-
- // Distribution speichern!
- $this->app->DB->Insert("INSERT INTO paketdistribution
- (id,bearbeiter,zeit,paketannahme,adresse,artikel,menge,vpe,etiketten,bemerkung,bestellung_position)
- VALUES ('','".$this->app->User->GetName()."',NOW(),'$id','$adresse','$artikel','$menge','$vpe','$etiketten','$bemerkung','$pos')");
- $pdId = $this->app->DB->GetInsertID();
- if(!empty($retourepos)) {
- $this->app->DB->Update(
- sprintf(
- 'UPDATE paketdistribution SET bestellung_position = 0, retoure_position = %d WHERE id = %d',
- $retourepos, $pdId
- )
- );
- }
-
- // anzahl gelieferte erhoehen bestellung_position !!!
- if(!empty($retourepos)) {
- $geliefert = $this->app->DB->Select("SELECT ifnull(menge_eingang,0) FROM retoure_position WHERE id='$retourepos' LIMIT 1");
- //$gesamt_erwartet = $this->app->DB->Select("SELECT menge FROM bestellung_position WHERE id='$pos' LIMIT 1");
- $geliefert += $menge;
- $this->app->DB->Update("UPDATE retoure_position SET menge_eingang='$geliefert' WHERE id='$retourepos' LIMIT 1");
- $this->app->DB->Update(
- sprintf(
- "UPDATE retoure
- SET fortschritt = 'eingegangen'
- WHERE id = %d AND IFNULL(fortschritt,'') IN ('angekuenigt','angekuendigt','') ",
- $retoure
- )
- );
- }
- else{
- $geliefert = $this->app->DB->Select("SELECT ifnull(geliefert,0) FROM bestellung_position WHERE id='$pos' LIMIT 1");
- //$gesamt_erwartet = $this->app->DB->Select("SELECT menge FROM bestellung_position WHERE id='$pos' LIMIT 1");
- $geliefert += $menge;
- $this->app->DB->Update("UPDATE bestellung_position SET geliefert='$geliefert' WHERE id='$pos' LIMIT 1");
- }
- }
- // alles passt weiter im abschluss
- if($weiterleitung) {
- $this->app->Location->execute($weiterleitung);
- }
- else {
- if(!empty($backaction) && $backaction === 'paketannahme') {
- $this->app->Location->execute('index.php?module=wareneingang&action='.$backaction);
- }
- if(!empty($retoure) && !empty($retourepos)) {
- $all = $this->app->YUI->TableSearch('', 'paketannahme_retoure','ALL','','',basename(__FILE__),__CLASS__);
- $sorts = $this->app->DB->SelectPairs(
- sprintf(
- "SELECT id,sort FROM retoure_position WHERE retoure = %d",
- $retoure
- )
- );
- $actSort = !empty($sorts[$retourepos])?$sorts[$retourepos]:0;
- $positions = $this->app->DB->SelectArr(
- $all['sql'].' WHERE '.$all['where']
- . sprintf(' ORDER BY bp.menge - bp.menge_eingang <= 0,
- bp.menge_eingang <> 0,
- bp.id = %d,
- bp.sort <= %d ', $retourepos, $actSort)
- );
-
- if(!$this->app->DB->Select(
- sprintf(
- "SELECT `id` FROM `retoure_position` WHERE `retoure` = %d AND `menge` > `menge_eingang`",
- $retoure
- )
- )
- ) {
- $positions = null;
- }
-
- if(!empty($positions)) {
- foreach($positions as $position) {
- $position['eingang'] = str_replace(',','.', $position['eingang']);
- $position['offen'] = str_replace(',','.', $position['offen']);
- if($position['offen'] > 0) {
- $returnOrderId = (int)$this->app->DB->Select(
- sprintf(
- 'SELECT `retoure` FROM `retoure_position` WHERE `id` = %d',
- $position['id']
- )
- );
- if(!empty($doctypeId) && (int)$doctypeId !== $returnOrderId) {
- continue;
- }
- if($returnOrderId <= 0 || $this->app->User->GetParameter('wareneingang_from_type') === 'manual') {
- $rop = null;
- }
- else{
- $rop = $this->getNextReturnOrderPosition($returnOrderId);
- }
- if(!empty($rop) && $rop['id'] == $position['id']) {
- $loc = $this->getNextReturnOrderLocation($returnOrderId, $id);
- if(!empty($loc)) {
- $this->app->Location->execute($loc);
- }
- }
- if($this->app->User->GetParameter('wareneingang_from_type') === 'manual') {
- $this->app->Location->execute(
- 'index.php?module=wareneingang&action=distriinhalt&cmd=fromreturnordermanual&id='.$id
- );
- }
-
- $this->app->Location->execute(
- 'index.php?module=wareneingang&action=distrietiketten&id='
- .$id.'&retourepos='
- .$position['id'].'&menge='.$position['offen']
- .'&seriennummer=&nmenge='.$position['offen']
- );
- }
- }
- }
- $pos = $retourepos;
- }
- $receiptDocument = $this->app->DB->SelectRow(
- sprintf(
- 'SELECT `id`, `status` FROM `receiptdocument` WHERE `return_order_id` = %d LIMIT 1', empty($returnOrderId)?$retoure:$returnOrderId
- )
- );
- $receiptDocumentId = empty($receiptDocument)?0:(int)$receiptDocument['id'];
- $returnOrderComplete = !empty($retoure) && !empty($retourepos) && $positions === null;
- if(!empty($receiptDocumentId)
- && ($returnOrderComplete || in_array($receiptDocument['status'], ['fertiggestellt', 'abgeschlossen']))
- ) {
- $url = '';
- $this->app->erp->RunHook('receiptdocument_close', 2, $receiptDocumentId, $url);
- if(!empty($url) && $url !== 'index.php') {
- $this->app->Location->execute(
- "index.php?module=wareneingang&action=distriabschluss&id=$id&pos=$pos&typ=$typ&rma=$rma"
- .(!empty($doctype)?'&doctype='.$doctype:'').'&locateto='.urlencode($url)
- );
- }
- }
-
- $this->app->Location->execute(
- "index.php?module=wareneingang&action=distriabschluss&id=$id&pos=$pos&typ=$typ&rma=$rma"
- .(!empty($doctype)?'&doctype='.$doctype:'')
- );
- }
- }
-
- $this->app->Tpl->Set('AKTIV_TAB2','tabs-1');
- $this->app->Tpl->Parse('PAGE','wareneingang_distrietiketten.tpl');
- }
-
-
- public function WareneingangPaketDistriAbschluss()
- {
- $id = $this->app->Secure->GetGET('id');
- $doctype = $this->app->Secure->GetGET('doctype');
- $pos = $this->app->Secure->GetGET('pos');
- $locateTo = $this->app->Secure->GetGET('locateto');
- $fromDoctype = '';
- if($doctype === 'bestellung') {
- $fromDoctype = '&from=bestellung';
- }
- elseif($doctype === 'retoure') {
- $fromDoctype = '&from=retoure';
-
- if($this->app->User->GetParameter('wareneingang_from') === 'retoure') {
- $all = $this->app->YUI->TableSearch(
- 'TAB1', 'paketannahme_retoure', 'ALL', '', '', basename(__FILE__), __CLASS__
- );
- if(!$this->app->DB->Select($all['sql'].' WHERE '.$all['where']. ' LIMIT 1')) {
- $this->app->User->SetParameter('wareneingang_from', '');
- $retoure = $this->app->DB->Select(sprintf('SELECT `retoure` FROM `retoure_position` WHERE `id` = %d', $pos));
- $userReturnOrder = $this->app->User->GetParameter('wareneingang_from_returnorder');
- $module = $this->app->User->GetParameter('wareneingang_from_module');
- $action = $this->app->User->GetParameter('wareneingang_from_action');
-
- if($retoure == $userReturnOrder && !empty($module) && !empty($action)) {
- $this->app->User->SetParameter('wareneingang_from_returnorder', '');
- $this->app->User->SetParameter('wareneingang_from_module', '');
- $this->app->User->SetParameter('wareneingang_from_action', '');
- if($module !== 'retoure') {
- $retoure = '';
- }
- if(!empty($locateTo)) {
- if($this->app->Location->getLocationUrl($locateTo) !== 'index.php'){
- $this->app->Location->execute($locateTo);
- }
- }
- $this->app->Location->execute('index.php?module='.$module.'&action='.$action.'&id='.$retoure);
- }
- if(!empty($locateTo)) {
- if($this->app->Location->getLocationUrl($locateTo) !== 'index.php') {
- $this->app->Location->execute($locateTo);
- }
- }
- $this->app->Location->execute('index.php?module=retoure&action=list');
- }
- }
- }
- if(empty($pos) && empty($doctype) && $this->app->erp->Firmendaten('wareneingang_gross')=='1'){
- $this->app->DB->Update(
- sprintf(
- "UPDATE `paketannahme` SET `status` = 'abgeschlossen' WHERE `id` = %d LIMIT 1",
- $id
- )
- );
- $this->app->Location->execute('index.php?module=wareneingang&action=distribution');
- }
- if(!empty($locateTo)) {
- if($this->app->Location->getLocationUrl($locateTo) !== 'index.php'){
- $this->app->Location->execute($locateTo);
- }
- }
- $this->app->Location->execute('index.php?module=wareneingang&action=distriinhalt&id='.$id.$fromDoctype);
- }
-
-
-
-
- public function WareneingangPaketZustand()
- {
- $this->WareneingangPaketMenu();
- $id = $this->app->Secure->GetGET('id');
- $submit = $this->app->Secure->GetPOST('submit');
- if($submit!='')
- {
- $this->app->FormHandler->FormUpdateDatabase('paketannahme',$id);
-
- $this->app->Location->execute('index.php?module=wareneingang&action=paketetikett&id='.$id);
- }
- //$client = new HttpClient("192.168.0.171");
- $wareneingang_kamera_waage = $this->app->erp->Firmendaten('wareneingang_kamera_waage');//$this->app->DB->Select("SELECT wareneingang_kamera_waage FROM firmendaten LIMIT 1");
-
- if($wareneingang_kamera_waage == '1')
- {
- $seriennummer = $this->app->DB->Select("SELECT seriennummer FROM adapterbox WHERE verwendenals='kamera' OR verwendenals='waage' LIMIT 1");
- $pageContent = $this->app->erp->GetAdapterboxAPIWaage($seriennummer);
- }
-
- $gewicht = $pageContent;
-
- //$gewicht = intval($gewicht)-2;
-
- if($wareneingang_kamera_waage =='1'){
- $this->app->Tpl->Set('GEWICHT', $gewicht);
- }
- else{
- $this->app->Tpl->Set('GEWICHT','none');
- }
-
-
- if($wareneingang_kamera_waage == '1'){
- //$datei = HttpClient::quickGet("http://192.168.0.53/snap.jpg");
- $seriennummer = $this->app->DB->Select("SELECT seriennummer FROM adapterbox WHERE verwendenals='kamera' LIMIT 1");
- $datei = $this->app->erp->GetAdapterboxAPIImage($seriennummer,'800','600');
-
- $tmpname = tempnam($this->app->erp->GetTMP(),'wareneingang').'.jpg';
- file_put_contents($tmpname, $datei);
-
- $ersteller = $this->app->User->GetName();
- $file = $this->app->erp->CreateDatei(date('Ymd')."_paketannahme_$id.jpg","Paketannahme $id",'','',$tmpname,$ersteller);
-
- unlink($tmpname);
-
- $this->app->Tpl->Set('FOTO',$file);
-
- $this->app->erp->AddDateiStichwort($file,'Bild','Paketannahme',$id);
-
- $this->app->Tpl->Set('LIVEFOTO','
');
- }
-
- if($gewicht <= 0 && $wareneingang_kamera_waage==1){
- $this->app->Tpl->Set('MELDUNG', '
Bitte legen Sie das Paket auf die Waage und schießen Sie nochmal ein Foto!
');
- }
- else if ($gewicht <= 0 && $wareneingang_kamera_waage !=1){
- $this->app->Tpl->Set('MELDUNG', '
Status: Ohne Waage und Kamera Funktion
');
- }
-
-
- if($this->app->erp->Firmendaten('wareneingang_gross')=='1')
- {
- $this->app->Tpl->Parse('TAB1','wareneingangpaketannahme_tab3.tpl');
- $this->app->Tpl->Parse('PAGE','tabview.tpl');
- }
- else{
- $this->app->Tpl->Parse('PAGE', 'wareneingangpaketannahme.tpl');
- }
- $this->app->Tpl->Set('AKTIV_TAB3','tabs-1');
-}
-
-
-public function WareneingangPaketEtikett()
-{
- $this->WareneingangPaketMenu();
- $id = $this->app->Secure->GetGET('id');
- $submit = $this->app->Secure->GetPOST('submit');
- if($submit!=''){
- header('Location: index.php?module=wareneingang&action=paketabschliessen&id='.$id);
- }
-
- if($this->app->erp->Firmendaten('wareneingang_gross')=='1')
- {
- $this->app->Tpl->Parse('TAB1','wareneingangpaketannahme_tab4.tpl');
- $this->app->Tpl->Parse('PAGE','tabview.tpl');
- $weiteres= $this->app->Secure->GetPOST('weiteres');
- $abschluss= $this->app->Secure->GetPOST('abschluss');
-
- if($weiteres!=''){
- header('Location: index.php?module=wareneingang&action=paketannahme');
- }
- if($abschluss!='')
- {
- header('Location: index.php?module=wareneingang&action=paketannahme');
-
- }
-
- }
- else{
- $this->app->Tpl->Parse('PAGE', 'wareneingangpaketannahme.tpl');
- }
-
-}
-
-public function WareneingangPaketAbschliessen()
-{
- $this->WareneingangPaketMenu();
- $id = $this->app->Secure->GetGET('id');
- $weiteres= $this->app->Secure->GetPOST('weiteres');
- $abschluss= $this->app->Secure->GetPOST('abschluss');
-
- if($weiteres!=''){
- $this->app->Location->execute('index.php?module=wareneingang&action=paketannahme');
- }
- if($abschluss!='')
- {
- $this->app->Location->execute('index.php?module=wareneingang&action=paketannahme');
-
- }
-
-
- if($this->app->erp->Firmendaten('wareneingang_gross')=='1')
- {
- $this->app->Tpl->Parse('TAB1','wareneingangpaketannahme_tab5.tpl');
- $this->app->Tpl->Parse('PAGE','tabview.tpl');
- }
- else{
- $this->app->Tpl->Parse('PAGE', 'wareneingangpaketannahme.tpl');
- }
-}
-
-
-
-
-public function WareneingangList()
-{
- $this->WareneingangMenu();
-
- $this->app->Tpl->Set('SUBHEADING','Lieferungen');
- //Jeder der in Nachbesserung war egal ob auto oder manuell wandert anschliessend in Manuelle-Freigabe");
- $table = new EasyTable($this->app);
- $table->Query("SELECT '23.11.2009' as datum, 'Olimex' as lieferant,id FROM aufgabe LIMIT 3");
- $table->DisplayNew('INHALT','
Lesen');
- $this->app->Tpl->Parse('TAB1','rahmen.tpl');
- $this->app->Tpl->Set('INHALT','');
-
- $this->app->Tpl->Set('AKTIV_TAB1','tabs-1');
- $this->app->Tpl->Parse('PAGE','wareneinganguebersicht.tpl');
-}
-
- /**
- * @param int $addressId
- *
- * @return int
- */
- public function createParcelReceiptFromAdress($addressId)
- {
- $bearbeiter = empty($this->app->User) || !method_exists($this->app->User,'GetName') ?'Cronjob':
- $this->app->DB->real_escape_string($this->app->User->GetName());
- $projectId = (int)$this->app->DB->Select("SELECT projekt FROM adresse WHERE id='$addressId' AND geloescht=0 LIMIT 1");
- $sql = sprintf(
- "INSERT INTO paketannahme (datum,adresse,vorlage,vorlageid,projekt,bearbeiter,status) VALUES
- (NOW(),%d,'adresse',%d,%d,'%s','angenommen')",
- $addressId, $addressId, $projectId, $bearbeiter
- );
- $this->app->DB->Insert($sql);
-
- return (int)$this->app->DB->GetInsertID();
- }
-
-public function WareneingangPaketannahme()
-{
- $this->WareneingangPaketMenu();
- $vorlage= $this->app->Secure->GetGET('vorlage');
- $suche= $this->app->Secure->GetPOST('suche');
- $id = $this->app->Secure->GetGET('id');
-
- $articlescan = $this->app->Secure->GetPOST('articlescan');
- if($articlescan) {
- $best = $this->app->DB->SelectArr(
- sprintf(
- 'SELECT bp.bestellung,MIN(bp.id) as pos, b.adresse, bp.artikel, b.projekt, art.lager_platz
- FROM bestellung AS b
- INNER JOIN bestellung_position AS bp ON b.id = bp.bestellung AND bp.geliefert < bp.menge AND b.belegnr <> \'\' AND
- (bp.abgeschlossen IS NULL OR bp.abgeschlossen=0) AND (b.status=\'versendet\' OR b.status=\'freigegeben\')
- INNER JOIN artikel AS art ON bp.artikel = art.id
- LEFT JOIN `artikelnummer_fremdnummern` AS af ON art.id = af.artikel AND af.aktiv = 1 AND af.scannable = 1
- WHERE art.nummer = \'%s\' OR art.ean = \'%s\' OR art.herstellernummer = \'%s\' OR af.nummer = \'%s\'
- GROUP BY b.id, art.id ',
- $articlescan, $articlescan, $articlescan, $articlescan
- )
- );
- $vorlage = '';
- if(empty($best)) {
- if($this->app->erp->ModulVorhanden('retoure')) {
- $retoure = $this->app->DB->SelectRow(
- sprintf(
- "SELECT ro.id, ro.adresse
- FROM retoure AS ro
- INNER JOIN retoure_position AS rp on ro.id = rp.retoure AND rp.menge_eingang < rp.menge
- AND ro.status <> 'storniert' AND ro.belegnr <> '' AND ro.adresse > 0
- WHERE ro.belegnr = '%s'
- LIMIT 1",
- $articlescan
- )
- );
- if(empty($retoure)) {
- $retoure = $this->app->DB->SelectRow(
- sprintf(
- "SELECT ro.id , ro.adresse
- FROM retoure AS ro
- INNER JOIN retoure_position AS rp on ro.id = rp.retoure AND rp.menge_eingang < rp.menge
- AND ro.status <> 'storniert' AND ro.belegnr <> '' AND ro.adresse > 0
- INNER JOIN lieferschein AS dn ON ro.lieferscheinid = dn.id
- WHERE dn.belegnr = '%s' AND dn.belegnr <> '' LIMIT 1",
- $articlescan
- )
- );
- }
- if(empty($retoure)) {
- $retoure = $this->app->DB->SelectRow(
- sprintf(
- "SELECT ro.id, ro.adresse
- FROM retoure AS ro
- INNER JOIN retoure_position AS rp on ro.id = rp.retoure AND rp.menge_eingang < rp.menge
- AND ro.status <> 'storniert' AND ro.belegnr <> '' AND ro.adresse > 0
- INNER JOIN auftrag AS o ON ro.auftragid = o.id
- WHERE o.belegnr = '%s' AND o.belegnr <> '' LIMIT 1",
- $articlescan
- )
- );
- }
- if(empty($retoure)) {
- $retoure = $this->app->DB->SelectRow(
- sprintf(
- "SELECT ro.id, ro.adresse
- FROM retoure AS ro
- INNER JOIN retoure_position AS rp on ro.id = rp.retoure AND rp.menge_eingang < rp.menge
- AND ro.status <> 'storniert' AND ro.belegnr <> '' AND ro.adresse > 0
- INNER JOIN lieferschein AS dn ON ro.lieferscheinid = dn.id
- INNER JOIN versand AS v ON dn.id = v.lieferschein
- WHERE v.tracking = '%s' AND v.tracking <> '' LIMIT 1",
- $articlescan
- )
- );
- }
- if(!empty($retoure)) {
- $this->app->User->SetParameter('wareneingang_from_returnorder', $retoure['id']);
- $this->app->User->SetParameter('wareneingang_from_module', 'wareneingang');
- $this->app->User->SetParameter('wareneingang_from_action', 'paketannahme');
-
- $this->app->Location->execute(
- 'index.php?module=wareneingang&action=distriinhalt&cmd=createreceiptdocumentreturnorder&id='
- . $retoure['id']
- );
- }
- }
- $this->app->Tpl->Add('INFO','
Es wurde keine offene Bestellung mit diesem Artikel gefunden.
');
- }
- elseif((!empty($best)?count($best):0) > 1) {
- $this->app->Tpl->Add('INFO','
Es wurden mehrere offene Bestellung mit diesem Artikel gefunden.
');
- }else{
- $vorlage = 'bestellung';
- $id = (int)$best[0]['bestellung'];
- $pos = $best[0]['pos'];
- $adresse = (int)$best[0]['adresse'];
- $projekt = (int)$best[0]['projekt'];
- $lagerplatz = (int)$best[0]['lager_platz'];
- $ismobile = $this->app->Secure->GetPOST('ismobile');
- $menge = round(
- $this->app->DB->Select(
- sprintf(
- 'SELECT menge - geliefert FROM bestellung_position WHERE id = %d LIMIT 1',
- $pos
- )
- ),
- 7
- );
- $this->app->User->SetParameter('wareneingang_from', 'wareneingang');
- if($this->app->erp->Firmendaten('wareneingang_gross')!='1') {
- $bearbeiter = $this->app->DB->real_escape_string($this->app->User->GetName());
-
- $sql = "INSERT INTO paketannahme (datum,adresse,vorlage,vorlageid,projekt,bearbeiter,status) VALUES
- (NOW(),$adresse,'$vorlage',$id,$projekt,'$bearbeiter','angenommen')";
- $this->app->DB->Insert($sql);
- $id = $this->app->DB->GetInsertID();
-
- $this->app->Location->execute('index.php?module=wareneingang&action=distrietiketten&backaction=paketannahme&id='.$id.'&pos='.$pos.'&menge='.$menge.($lagerplatz > 0?'&lager_platz='.$lagerplatz:'').(!empty($ismobile)?'&ismobile=1':''));
- }
- }
- }
- if($vorlage!='')
- {
- if($vorlage==='bestellung')
- {
- $vorlageid = $id;
- $adresse = $this->app->DB->Select("SELECT adresse FROM bestellung WHERE id='$id' LIMIT 1");
- $projekt = $this->app->DB->Select("SELECT projekt FROM bestellung WHERE id='$id' LIMIT 1");
- }
- else if ($vorlage==='adresse')
- {
- $adresse = $id;
- $vorlageid = $adresse;
- // standardprojekt von kunde
- $projekt = $this->app->DB->Select("SELECT projekt FROM adresse WHERE id='$id' AND geloescht=0 LIMIT 1");
- } else {
- $this->app->ExitXentral();
- }
-
- $bearbeiter = $this->app->DB->real_escape_string($this->app->User->GetName());
-
- $sql = "INSERT INTO paketannahme (datum,adresse,vorlage,vorlageid,projekt,bearbeiter,status) VALUES
- (NOW(),'$adresse','$vorlage','$vorlageid','$projekt','$bearbeiter','angenommen')";
- $this->app->DB->Insert($sql);
- $id = $this->app->DB->GetInsertID();
-
- if($this->app->erp->ModulVorhanden('schneller_wareneingang') &&
- $this->app->erp->RechteVorhanden('schneller_wareneingang','distriinhaltschnell')) {
- $lieferantennummer = $this->app->DB->Select("SELECT lieferantennummer FROM adresse WHERE id = '$adresse' LIMIT 1");
- if($lieferantennummer != '' && $lieferantennummer != '0')
- {
- $this->app->Location->execute('index.php?module=schneller_wareneingang&action=distriinhaltschnell&id='.$id);
- }
- }
- $this->app->Location->execute('index.php?module=wareneingang&action=distriinhalt&id='.$id);
- }
-
- $rechteproblem = array();
- if(!$this->app->erp->RechteVorhanden('wareneingang','distrietiketten')){
- $rechteproblem[] = 'distrietiketten';
- }
- if(!$this->app->erp->RechteVorhanden('wareneingang','distriabschluss')){
- $rechteproblem[] = 'distriabschluss';
- }
- if((!empty($rechteproblem)?count($rechteproblem):0) > 0){
- $this->app->Tpl->Set('INFO','
Es werden im Menü nicht alle Icons angezeigt, da die nötigen Rechte nicht vorliegen für: Wareneingang > '.implode(', ', $rechteproblem).'
');
- }
-
-
- $this->app->YUI->TableSearch('SUCHE','paketannahme','show','','',basename(__FILE__), __CLASS__);
- $this->app->YUI->DatePicker('zeitvon');
- $this->app->YUI->DatePicker('zeitbis');
-
- $table = new EasyTable($this->app);
- $table->Query("SELECT DATE_FORMAT(datum,'%d.%m.%Y') as datum, name, belegnr as bestellung, id FROM bestellung WHERE status!='geliefert'");
- $table->DisplayNew('BESTELLUNGEN','
weiter');
-
- $this->app->YUI->AutoComplete('suche','adressename');
-
- $this->app->Tpl->Set('AKTIV_TAB1','tabs-1');
- $this->app->User->SetParameter('wareneingang_action', 'paketannahme');
- $this->app->Tpl->Parse('PAGE','wareneingangpaketannahme.tpl');
-}
-
-}
+app->Secure->GetGET('id');
+ switch($name) {
+ case 'wareneingangartikelmanuellerfassen':
+ $allowed['wareneingang'] = array('manuellerfassen');
+ $this->app->Tpl->Add('JQUERYREADY', "$('#eigene').click( function() { fnFilterColumn1( 0 ); } );");
+ for ($r = 1;$r < 2;$r++) {
+ $this->app->Tpl->Add('JAVASCRIPT', '
+ function fnFilterColumn' . $r . ' ( i )
+ {
+ if(oMoreData' . $r . $name . '==1)
+ oMoreData' . $r . $name . ' = 0;
+ else
+ oMoreData' . $r . $name . ' = 1;
+
+ $(\'#' . $name . '\').dataTable().fnFilter(
+ \'\',
+ i,
+ 0,0
+ );
+ }
+ ');
+ }
+
+
+
+ // headings
+ $alignright = array(3);
+ $heading = array('Nummer', 'Artikel', 'Lagerbestand', 'Projekt', 'Menü');
+ $width = array( '10%', '60%', '5%', '15%', '1%');
+ $findcols = array( 'nummer', 'name_de', 'ifnull((SELECT SUM(l.menge) FROM lager_platz_inhalt l WHERE l.artikel=a.id),0 )', 'projekt', 'id');
+
+ if ($this->app->erp->Firmendaten("artikel_suche_kurztext") == "1") {
+ $searchsql = array('a.name_de', 'kurztext_de', 'a.nummer', 'p.abkuerzung', "a.hersteller", "a.herstellernummer", "a.anabregs_text", "(SELECT tmp.nummer FROM artikel tmp WHERE a.variante_von=tmp.id LIMIT 1)");
+ } else {
+ $searchsql = array('a.name_de', 'a.nummer', 'p.abkuerzung', "a.hersteller", "a.herstellernummer", "(SELECT tmp.nummer FROM artikel tmp WHERE a.variante_von=tmp.id LIMIT 1)");
+ }
+ $searchsql[] = 'a.ean';
+ $searchsql[] = 'a.herstellernummer';
+ $paket = $this->app->Secure->GetGET("id");
+ $menu = "
app->Conf->WFconf['defaulttheme']}/images/forward.svg\" border=\"0\">";
+
+ // SQL statement
+
+
+ $more_data1 = $this->app->Secure->GetGET("more_data1");
+
+ if($more_data1=="1")
+ {
+ $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 ";
+
+ $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;
+
+ $where = "a.geloescht=0 $subwhere " . $this->app->erp->ProjektRechte();
+
+ $moreinfo = false;
+ $count = "SELECT COUNT(a.id) FROM artikel a LEFT JOIN projekt p ON p.id=a.projekt $addjoin WHERE a.geloescht=0 $subwhere " . $this->app->erp->ProjektRechte();
+ break;
+ case 'wareneingang_lieferant':
+ $allowed['wareneingang'] = array('distriinhalt');
+
+ // headings
+ $id = $this->app->Secure->GetGET('id');
+ $adresse = $this->app->DB->Select("SELECT adresse FROM paketannahme WHERE id='$id' LIMIT 1");
+ $wareneingangauftragzubestellung = $this->app->erp->Firmendaten('wareneingangauftragzubestellung');
+ if($wareneingangauftragzubestellung)
+ {
+ $heading = array('Lieferant-Art.-Nr.', 'Art.-Nummer', 'Bestellung', 'Beschreibung', 'Lieferdatum', 'Projekt', 'Menge', 'Geliefert', 'Offen', 'Auftrag', 'Menge', 'Aktion');
+ $width = array('5%', '5%', '5%', '30%', '5%', '5%', '5%', '5%', '5%', '5%', '5%', '5%');
+ $findcols = array('bp.bestellnummer', 'art.nummer', 'b.belegnr',
+ "CONCAT(art.name_de,'
Bei Lieferant: ',bp.bezeichnunglieferant,
+ IF(b.internebemerkung != '' AND b.internebemerkung IS NOT NULL, CONCAT('
Interne Bemerkung: ',b.internebemerkung),''),
+ IF(b.internebezeichnung != '' AND b.internebezeichnung IS NOT NULL, CONCAT('
Interne Bezeichnung: ',b.internebezeichnung), ''),
+ IF(b.bestellungbestaetigtabnummer != '' AND b.bestellungbestaetigtabnummer IS NOT NULL, CONCAT('
AB Nummer Lieferant: ',b.bestellungbestaetigtabnummer), ''),
+ IF(b.bestaetigteslieferdatum != '' AND b.bestaetigteslieferdatum IS NOT NULL AND b.bestaetigteslieferdatum != '0000-00-00', CONCAT('
Best. Lieferdatum: ',DATE_FORMAT(b.bestaetigteslieferdatum, '%d.%m.%Y')),'')
+ )",
+ "if(bp.lieferdatum,bp.lieferdatum,'sofort')", 'p.abkuerzung', 'bp.menge', 'bp.geliefert', 'offen','auftrag','auftragmenge', 'bp.id');
+ $searchsql = array('bp.bestellnummer', 'art.nummer', 'art.ean', 'b.belegnr', "CONCAT(art.name_de,'
Bei Lieferant: ',bp.bezeichnunglieferant, '
',
+ IF(b.internebemerkung != '' AND b.internebemerkung IS NOT NULL, CONCAT('
Interne Bemerkung: ',b.internebemerkung),''),
+ IF(b.internebezeichnung != '' AND b.internebezeichnung IS NOT NULL, CONCAT('
Interne Bezeichnung: ',b.internebezeichnung), ''),
+ IF(b.bestellungbestaetigtabnummer != '' AND b.bestellungbestaetigtabnummer IS NOT NULL, CONCAT('
AB Nummer Lieferant: ',b.bestellungbestaetigtabnummer), ''),
+ IF(b.bestaetigteslieferdatum != '' AND b.bestaetigteslieferdatum IS NOT NULL AND b.bestaetigteslieferdatum != '0000-00-00', CONCAT('
Best. Lieferdatum: ',DATE_FORMAT(b.bestaetigteslieferdatum, '%d.%m.%Y')),'')
+ )", "if(bp.lieferdatum,DATE_FORMAT(bp.lieferdatum,'%d.%m.%Y'),'sofort')", 'p.abkuerzung', 'bp.menge', 'bp.geliefert',"if((SELECT COUNT(auf2.id) FROM auftrag auf2 INNER JOIN auftrag_position ap2 ON auf2.id = ap2.auftrag WHERE bp.auftrag_position_id = ap2.id ) > 0,(SELECT auf2.belegnr FROM auftrag auf2 INNER JOIN auftrag_position ap2 ON auf2.id = ap2.auftrag WHERE bp.auftrag_position_id = ap2.id ORDER BY belegnr LIMIT 1),'-' )");
+ }else{
+ $heading = array('Lieferant-Art.-Nr.', 'Art.-Nummer', 'Bestellung', 'Beschreibung', 'Lieferdatum', 'Projekt', 'Menge', 'Geliefert', 'Offen', 'Aktion');
+ $width = array('5%', '5%', '5%', '30%', '5%', '5%', '5%', '5%', '5%', '5%');
+ $findcols = array('bp.bestellnummer', 'art.nummer', 'b.belegnr',
+ "CONCAT(art.name_de,'
Bei Lieferant: ',bp.bezeichnunglieferant,
+ IF(b.internebemerkung != '' AND b.internebemerkung IS NOT NULL, CONCAT('
Interne Bemerkung: ',b.internebemerkung),''),
+ IF(b.internebezeichnung != '' AND b.internebezeichnung IS NOT NULL, CONCAT('
Interne Bezeichnung: ',b.internebezeichnung), ''),
+ IF(b.bestellungbestaetigtabnummer != '' AND b.bestellungbestaetigtabnummer IS NOT NULL, CONCAT('
AB Nummer Lieferant: ',b.bestellungbestaetigtabnummer), ''),
+ IF(b.bestaetigteslieferdatum != '' AND b.bestaetigteslieferdatum IS NOT NULL AND b.bestaetigteslieferdatum != '0000-00-00', CONCAT('
Best. Lieferdatum: ',DATE_FORMAT(b.bestaetigteslieferdatum, '%d.%m.%Y')),'')
+ )",
+ "if(bp.lieferdatum,bp.lieferdatum,'sofort')", 'p.abkuerzung', 'bp.menge', 'bp.geliefert', $this->app->erp->FormatMenge("bp.menge - bp.geliefert"), 'bp.id');
+ $searchsql = array('bp.bestellnummer', 'art.nummer', 'b.belegnr', "CONCAT(art.name_de,'
Bei Lieferant: ',bp.bezeichnunglieferant, '',
+ IF(b.internebemerkung != '' AND b.internebemerkung IS NOT NULL, CONCAT('
Interne Bemerkung: ',b.internebemerkung),''),
+ IF(b.internebezeichnung != '' AND b.internebezeichnung IS NOT NULL, CONCAT('
Interne Bezeichnung: ',b.internebezeichnung), ''),
+ IF(b.bestellungbestaetigtabnummer != '' AND b.bestellungbestaetigtabnummer IS NOT NULL, CONCAT('
AB Nummer Lieferant: ',b.bestellungbestaetigtabnummer), ''),
+ IF(b.bestaetigteslieferdatum != '' AND b.bestaetigteslieferdatum IS NOT NULL AND b.bestaetigteslieferdatum != '0000-00-00', CONCAT('
Best. Lieferdatum: ',DATE_FORMAT(b.bestaetigteslieferdatum, '%d.%m.%Y')),'')
+ ,'')", "if(bp.lieferdatum,DATE_FORMAT(bp.lieferdatum,'%d.%m.%Y'),'sofort')", 'p.abkuerzung', 'bp.menge', 'bp.geliefert', $this->app->erp->FormatMenge("bp.menge - bp.geliefert"), 'art.ean', 'art.herstellernummer');
+ }
+
+ $alignright = array(7,8,9);
+ $datecols = array(4);
+
+ //$defaultorder = 6; //Optional wenn andere Reihenfolge gewuenscht
+
+ //$defaultorderdesc=1;
+
+ $menu = "";
+
+ //&NBSP;";
+ $menucol = 4;
+
+ if($this->app->erp->Firmendaten("wareneingang_lagerartikel")) $lagerartikel = "AND art.lagerartikel = 1";
+ else $lagerartikel = "";
+ $receiptDocument = $this->app->erp->ModulVorhanden('receiptdocument');
+ if($receiptDocument) {
+ $this->app->DB->Select('SELECT id FROM receiptdocument LIMIT 1');
+ if($this->app->DB->error()) {
+ $receiptDocument = false;
+ }
+ }
+ $rdJoin = '';
+ $colBeschreibung = "CONCAT(art.name_de,'
Bei Lieferant: ',bp.bezeichnunglieferant, '',
+ IF(b.internebemerkung != '' AND b.internebemerkung IS NOT NULL, CONCAT('
Interne Bemerkung: ',b.internebemerkung),''),
+ IF(b.internebezeichnung != '' AND b.internebezeichnung IS NOT NULL, CONCAT('
Interne Bezeichnung: ',b.internebezeichnung), ''),
+ IF(b.bestellungbestaetigtabnummer != '' AND b.bestellungbestaetigtabnummer IS NOT NULL, CONCAT('
AB Nummer Lieferant: ',b.bestellungbestaetigtabnummer), ''),
+ IF(b.bestaetigteslieferdatum != '' AND b.bestaetigteslieferdatum IS NOT NULL AND b.bestaetigteslieferdatum != '0000-00-00', CONCAT('
Best. Lieferdatum: ',DATE_FORMAT(b.bestaetigteslieferdatum, '%d.%m.%Y')),'')
+ ,''
+ )";
+ if(!empty($receiptDocument)){
+ $rdJoin = " LEFT JOIN (
+ SELECT supplier_order_id, MAX(useredit_id) AS useredit, MAX(useredit_time) AS useredit_time
+ FROM receiptdocument
+ WHERE (status = 'angelegt' OR status = '') AND supplier_order_id > 0
+ AND useredit_time <> '0000-00-00 00:00:00' AND DATE_SUB(NOW(), INTERVAL 600 SECOND) < useredit_time
+ GROUP BY supplier_order_id
+ ) AS rd ON b.id = rd.supplier_order_id ";
+ $colBeschreibung = "CONCAT(art.name_de,'
Bei Lieferant: ',bp.bezeichnunglieferant, '',
+ IF(b.internebemerkung != '' AND b.internebemerkung IS NOT NULL, CONCAT('
Interne Bemerkung: ',b.internebemerkung),''),
+ IF(b.internebezeichnung != '' AND b.internebezeichnung IS NOT NULL, CONCAT('
Interne Bezeichnung: ',b.internebezeichnung), ''),
+ IF(b.bestellungbestaetigtabnummer != '' AND b.bestellungbestaetigtabnummer IS NOT NULL, CONCAT('
AB Nummer Lieferant: ',b.bestellungbestaetigtabnummer), ''),
+ IF(b.bestaetigteslieferdatum != '' AND b.bestaetigteslieferdatum IS NOT NULL AND b.bestaetigteslieferdatum != '0000-00-00', CONCAT('
Best. Lieferdatum: ',DATE_FORMAT(b.bestaetigteslieferdatum, '%d.%m.%Y')),'')
+ ,'',
+ IF(
+ IFNULL(rd.useredit,0) <= 0,'',
+ CONCAT('
(in Bearbeitung von ', (SELECT a2.name FROM user u2 LEFT JOIN adresse a2 ON a2.id=u2.adresse WHERE u2.id=rd.useredit LIMIT 1),')')
+ )
+ )";
+ }
+ // SQL statement
+ $sql = "SELECT SQL_CALC_FOUND_ROWS bp.id, bp.bestellnummer, art.nummer, b.belegnr as `Bestellung`,
+ $colBeschreibung as beschreibung,
+ if(bp.lieferdatum,DATE_FORMAT(bp.lieferdatum,'%d.%m.%Y'),'sofort') as lieferdatum, p.abkuerzung as projekt,
+ ".$this->app->erp->FormatMenge('bp.menge').", ".$this->app->erp->FormatMenge('bp.geliefert').",
+ ".$this->app->erp->FormatMenge('bp.menge - bp.geliefert')." as offen,
+ bp.id
+ FROM bestellung_position bp
+ INNER JOIN bestellung b ON bp.bestellung=b.id
+ $rdJoin
+ INNER JOIN artikel art ON art.id=bp.artikel $lagerartikel
+ LEFT JOIN projekt p ON b.projekt=p.id ";
+ if($wareneingangauftragzubestellung)
+ {
+ $sql = "SELECT SQL_CALC_FOUND_ROWS bp.id, bp.bestellnummer, art.nummer, b.belegnr as `Bestellung`,
+ $colBeschreibung as beschreibung,
+ if(bp.lieferdatum,DATE_FORMAT(bp.lieferdatum,'%d.%m.%Y'),'sofort') as lieferdatum, p.abkuerzung as projekt,
+ trim(bp.menge)+0, trim(bp.geliefert)+0, trim(bp.menge - bp.geliefert)+0 as offen,
+ if((SELECT COUNT(auf2.id) FROM auftrag auf2 INNER JOIN auftrag_position ap2 ON auf2.id = ap2.auftrag WHERE bp.auftrag_position_id = ap2.id ) > 0,(SELECT auf2.belegnr FROM auftrag auf2 INNER JOIN auftrag_position ap2 ON auf2.id = ap2.auftrag WHERE bp.auftrag_position_id = ap2.id ORDER BY belegnr LIMIT 1),'-' ) AS auftrag,
+ if((SELECT sum(ap2.menge) FROM auftrag auf2 INNER JOIN auftrag_position ap2 ON auf2.id = ap2.auftrag WHERE bp.auftrag_position_id = ap2.id ) > 0,(SELECT TRIM(sum(ap2.menge))+0 FROM auftrag auf2 INNER JOIN auftrag_position ap2 ON auf2.id = ap2.auftrag WHERE bp.auftrag_position_id = ap2.id ),'-' ) AS auftragmenge,
+ bp.id
+ FROM bestellung_position bp
+ INNER JOIN bestellung b ON bp.bestellung=b.id
+ $rdJoin
+ INNER JOIN artikel art ON art.id=bp.artikel $lagerartikel
+ LEFT JOIN projekt p ON b.projekt=p.id ";
+
+ }
+
+ $where = " b.adresse='$adresse' AND b.belegnr != ''
+ AND bp.geliefert < bp.menge AND (bp.abgeschlossen IS NULL OR bp.abgeschlossen=0) AND (b.status='versendet' OR b.status='freigegeben') " . $this->app->erp->ProjektRechte();
+
+ // gesamt anzahl
+ $count = "
+ SELECT COUNT(bp.id) FROM bestellung_position bp INNER JOIN bestellung b ON bp.bestellung=b.id INNER JOIN artikel art ON art.id=bp.artikel $lagerartikel LEFT JOIN projekt p ON bp.projekt=p.id WHERE b.adresse='$adresse' AND b.belegnr !='' AND bp.geliefert < bp.menge AND (bp.abgeschlossen IS NULL OR bp.abgeschlossen=0) AND (b.status='versendet' OR b.status='freigegeben') " . $this->app->erp->ProjektRechte();
+ $moreinfo = false;
+ $this->app->erp->RunHook('warneingang_tablesearch_wareneingang_lieferant', 4, $id, $sql, $where, $count);
+ break;
+ case 'paketannahme_retoure':
+ $allowed['wareneingang'] = array('distriinhalt');
+ $adresse = $this->app->DB->Select("SELECT adresse FROM paketannahme WHERE id='$id' LIMIT 1");
+ $heading = array(
+ 'Nummer', 'Beschreibung', 'Retoure', 'Datum', 'Projekt', 'Menge',
+ 'Geliefert', 'Offen', 'Aktion'
+ );
+ $menucol = (!empty($heading)?count($heading):0);
+ $width = array('5%', '5%', '5%', '30%', '5%', '5%', '5%', '5%', '5%', '5%');
+ $findcols = array('art.nummer','art.name_de', 'b.belegnr',
+ "DATE_FORMAT(b.datum,'%d.%m.%Y')",
+ 'p.abkuerzung', 'bp.menge', 'bp.menge_eingang',
+ $this->app->erp->FormatMenge('bp.menge - bp.menge_eingang'), 'bp.id'
+ );
+ $searchsql = array('art.nummer','art.name_de', 'b.belegnr',
+ "DATE_FORMAT(b.datum,'%d.%m.%Y')", 'p.abkuerzung', 'bp.menge',
+ 'bp.menge_eingang',
+ $this->app->erp->FormatMenge('bp.menge - bp.menge_eingang'),
+ 'art.ean', 'art.herstellernummer'
+ );
+ $this->app->DB->SelectRow(
+ 'SELECT `return_order_id`, `id`, `useredit_time`, `status` FROM `receiptdocument` LIMIT 1'
+ );
+ $count = "SELECT COUNT(bp.id)
+ FROM `retoure` as `b`
+ INNER JOIN `retoure_position` as `bp` ON b.id = bp.retoure
+ LEFT JOIN `projekt` AS `p` ON b.projekt = p.id
+ ";
+ if(empty($this->app->DB->error())){
+
+ $sql = "SELECT SQL_CALC_FOUND_ROWS bp.id, art.nummer,
+ CONCAT(art.name_de,
+ IF(
+ IFNULL(rd.useredit,0) <= 0,'',
+ CONCAT('
(in Bearbeitung von ',
+ (SELECT a2.name FROM user u2 LEFT JOIN adresse a2 ON a2.id=u2.adresse WHERE u2.id=rd.useredit LIMIT 1),')')
+ )
+ ), b.belegnr,
+ DATE_FORMAT(b.datum,'%d.%m.%Y'),
+ p.abkuerzung,
+ trim(bp.menge)+0 AS menge, trim(bp.menge_eingang)+0 AS eingang,
+ trim(bp.menge - bp.menge_eingang)+0 as offen,
+ bp.id
+ FROM `retoure` AS `b`
+ LEFT JOIN (
+ SELECT `return_order_id`, MAX(`useredit_id`) AS `useredit`, MAX(`useredit_time`) AS `useredit_time`
+ FROM `receiptdocument`
+ WHERE (`status` = 'angelegt' OR `status` = '') AND `return_order_id` > 0
+ AND `useredit_time` <> '0000-00-00 00:00:00' AND DATE_SUB(NOW(), INTERVAL 600 SECOND) < `useredit_time`
+ GROUP BY `return_order_id`
+ ) AS `rd` ON b.id = rd.return_order_id
+ LEFT JOIN (
+ SELECT `return_order_id`
+ FROM `receiptdocument`
+ WHERE (`status` = 'fertiggestellt' OR `status` = 'abgeschlossen') AND `return_order_id` > 0
+ GROUP BY `return_order_id`
+ ) AS `rd2` ON b.id = rd2.return_order_id
+ INNER JOIN retoure_position as bp ON b.id = bp.retoure
+ INNER JOIN artikel AS art ON bp.artikel = art.id
+ LEFT JOIN projekt AS p ON b.projekt = p.id
+ ";
+
+ $count .= "
+ LEFT JOIN (
+ SELECT `return_order_id`, MAX(`useredit_id`) AS `useredit`, MAX(`useredit_time`) AS `useredit_time`
+ FROM `receiptdocument`
+ WHERE (`status` = 'angelegt' OR `status` = '') AND `return_order_id` > 0
+ AND `useredit_time` <> '0000-00-00 00:00:00' AND DATE_SUB(NOW(), INTERVAL 600 SECOND) < `useredit_time`
+ GROUP BY `return_order_id`
+ ) AS `rd` ON b.id = rd.return_order_id
+ LEFT JOIN (
+ SELECT `return_order_id`
+ FROM `receiptdocument`
+ WHERE (`status` = 'fertiggestellt' OR `status` = 'abgeschlossen') AND `return_order_id` > 0
+ GROUP BY `return_order_id`
+ ) AS `rd2` ON b.id = rd2.return_order_id
+ ";
+ }
+ else {
+ $sql = "SELECT SQL_CALC_FOUND_ROWS bp.id, art.nummer,
+ art.name_de
+ , b.belegnr,
+ DATE_FORMAT(b.datum,'%d.%m.%Y'),
+ p.abkuerzung,
+ trim(bp.menge)+0 AS menge, trim(bp.menge_eingang)+0 AS eingang,
+ trim(bp.menge - bp.menge_eingang)+0 as offen,
+ bp.id
+ FROM retoure as b
+ INNER JOIN retoure_position as bp ON b.id = bp.retoure
+ INNER JOIN artikel AS art ON bp.artikel = art.id
+ LEFT JOIN projekt AS p ON b.projekt = p.id
+ ";
+ }
+ $where = sprintf(' b.adresse = %d ', $adresse).
+ " AND bp.menge_eingang < bp.menge AND b.belegnr <> '' AND b.status <> 'storniert' ".
+ $this->app->erp->ProjektRechte('b.projekt');
+
+
+ $count .= " WHERE $where ";
+
+ $menu = "";
+ $this->app->erp->RunHook('wareneingang_tablesearch_wareneingang_retoure', 4, $id, $sql, $where, $count);
+ break;
+ case 'paketannahme':
+ $allowed['wareneingang'] = array('paketannahme');
+ $this->app->Tpl->Add('JQUERYREADY', "$('#nurkunden').click( function() { fnFilterColumn1( 0 ); } );");
+ $this->app->Tpl->Add('JQUERYREADY', "$('#nurlieferanten').click( function() { fnFilterColumn2( 0 ); } );");
+ $this->app->Tpl->Add('JQUERYREADY', "$('#kundenmitrma').click( function() { fnFilterColumn3( 0 ); } );");
+ $this->app->Tpl->Add('JQUERYREADY', "$('#lieferungfehlt').click( function() { fnFilterColumn4( 0 ); } );");
+
+ $this->app->Tpl->Add('JQUERYREADY', "$('#zeitvon').change( function() { fnFilterColumn5( $('#zeitvon').val() ); } );$('#zeitvon').click( function() { fnFilterColumn5( $('#zeitvon').val() ); } );");
+ $this->app->Tpl->Add('JQUERYREADY', "$('#zeitbis').change( function() { fnFilterColumn6( $('#zeitbis').val() ); } );$('#zeitbis').click( function() { fnFilterColumn6( $('#zeitbis').val() ); } );");
+
+ $forcerowclick=true;
+ $rowclickaction="paketannahme&vorlage=adresse";
+ $hide767 = [7, 8];
+ for ($r = 1;$r < 5;$r++) {
+ $this->app->Tpl->Add('JAVASCRIPT', '
+ function fnFilterColumn' . $r . ' ( i )
+ {
+ if(oMoreData' . $r . $name . '==1)
+ oMoreData' . $r . $name . ' = 0;
+ else
+ oMoreData' . $r . $name . ' = 1;
+
+ $(\'#' . $name . '\').dataTable().fnFilter(
+ \'\',
+ i,
+ 0,0
+ );
+ }
+ ');
+ }
+
+ for ($r = 5;$r < 7;$r++) {
+ $this->app->Tpl->Add('JAVASCRIPT', '
+ function fnFilterColumn' . $r . ' ( i )
+ {
+ oMoreData' . $r . $name . ' = i;
+
+ $(\'#' . $name . '\').dataTable().fnFilter(
+ \'\',
+ i,
+ 0,0
+ );
+ }
+ ');
+ }
+
+ $more_data1 = $this->app->Secure->GetGET("more_data1");
+
+ if ($more_data1 == 1) $subwhere[] = " a.kundennummer != '' ";
+ $more_data2 = $this->app->Secure->GetGET("more_data2");
+
+ if ($more_data2 == 1) $subwhere[] = " a.lieferantennummer != '' ";
+
+ $more_data3 = $this->app->Secure->GetGET("more_data3");
+ $tmpfrom2 = '';
+ if($more_data3 == 1)
+ {
+ $subwhere2[] = " rma.status != 'storniert' ";
+ $tmpfrom2 = ' INNER JOIN rma_artikel rma ON a.id = rma.adresse ';
+ }
+
+ $more_data4 = $this->app->Secure->GetGET("more_data4");
+ $more_data5 = $this->app->Secure->GetGET("more_data5");
+ $more_data6 = $this->app->Secure->GetGET("more_data6");
+ $tmpfrom3 = '';
+ if($more_data4 == 1)
+ {
+ $tmpfrom3 = ' INNER JOIN bestellung b ON a.id = b.adresse INNER JOIN bestellung_position bp ON b.id = bp.bestellung ';
+ $subwhere2[] = " (bp.geliefert < bp.menge AND (b.status!='abgeschlossen' AND b.status!='angelegt' AND b.status!='storniert')) ";
+ }
+ $tmpfrom4 = '';
+ $tmpfrom5 = '';
+ $tmpwhere = '';
+ $tmpwhere2 = '';
+ $datumvon = '';
+ $datumbis = '';
+ if(!empty($more_data5) || !empty($more_data6))
+ {
+
+ if(!empty($more_data5))$datumvon = $this->app->String->Convert($more_data5,"%1.%2.%3","%3-%2-%1");
+ if(!empty($more_data6))$datumbis = $this->app->String->Convert($more_data6,"%1.%2.%3","%3-%2-%1");
+ if($more_data4 == 1)
+ {
+
+ }else{
+ if($more_data2 == 1 || $more_data1 != 1)$tmpfrom4 = ' LEFT JOIN bestellung b on a.id = b.adresse ';
+
+ }
+ if($more_data2 == 1 || $more_data1 != 1)
+ {
+ if(!empty($more_data5))
+ {
+ $tmpwhere = "( date(b.versendet_am) >= '$datumvon' ";
+ }
+ if(!empty($more_data6))
+ {
+ if(!empty($tmpwhere))
+ {
+ $tmpwhere .= " AND date(b.versendet_am) <= '$datumbis' ";
+ }else{
+ $tmpwhere .= "(date(b.versendet_am) <= '$datumbis' ";
+ }
+ }
+ if(!empty($tmpwhere))$tmpwhere .= ') ';
+ }
+ if($more_data1 == 1 || $more_data2 != 1)
+ {
+ $tmpfrom5 = ' LEFT JOIN lieferschein l on a.id = l.adresse ';
+ if(!empty($more_data5))
+ {
+ $tmpwhere2 = " ((l.status = 'versendet' OR l.status = 'freigegeben') AND date(l.datum) >= '$datumvon' ";
+ }
+ if(!empty($more_data6))
+ {
+ if(!empty($tmpwhere2))
+ {
+ $tmpwhere2 .= " AND date(l.datum) <= '$datumbis' ";
+ }else{
+ $tmpwhere2 .= "((l.status = 'versendet' OR l.status = 'freigegeben') AND date(l.datum) <= '$datumbis' ";
+ }
+ }
+ if(!empty($tmpwhere2))$tmpwhere2 .= ') ';
+ }
+ if(!empty($tmpwhere) || !empty($tmpwhere2))
+ {
+ if(!empty($tmpwhere) && !empty($tmpwhere2))
+ {
+ $subwhere2[] = " (".$tmpwhere." OR ".$tmpwhere2.") ";
+ }else{
+ if(!empty($tmpwhere))
+ {
+ $subwhere2[] = $tmpwhere;
+ }else{
+ $subwhere2[] = $tmpwhere2;
+ }
+ }
+
+ }
+ }
+ $tmp = '';
+ if(!empty($subwhere))
+ {
+ foreach($subwhere as $s) {
+ $tmp.= " AND " . $s;
+ }
+ }
+ $tmp2 = '';
+ if(!empty($subwhere2))
+ {
+ foreach($subwhere2 as $s2) {
+ $tmp2.= " AND " . $s2;
+ }
+ }
+
+
+
+ // headings
+ $heading = array('Name', 'Kunde', 'Lieferant', 'Land', 'PLZ', 'Ort', 'E-Mail', 'Projekt', 'Menü');
+ $width = array('25%', '10%', '5%', '5%', '5%', '5%', '25%', '5%', '1%');
+ $findcols = array('a.name', 'a.kundennummer', 'a.lieferantennummer', 'a.land', 'a.plz', 'a.ort', 'a.email', 'a.projekt', 'a.id');
+ $searchsql = array('a.ort', 'a.name', 'p.abkuerzung', 'a.land', 'a.plz', 'a.email', 'a.kundennummer', 'a.lieferantennummer', 'a.ansprechpartner');
+ if ($this->app->erp->Firmendaten('adresse_freitext1_suche')) {
+ $searchsql[] = 'a.freifeld1';
+ $searchsql[] = 'a.freifeld2';
+ }
+
+ $defaultorder = 2;
+ $defaultorderdesc = 1;
+ if($this->app->erp->RechteVorhanden("wareneingang","distrietiketten") && $this->app->erp->RechteVorhanden("wareneingang","distriabschluss")){
+ $menu = "app->Conf->WFconf['defaulttheme']}/images/forward.svg\" border=\"0\">";
+ }
+
+ // SQL statement
+
+ //if(a.typ = 'herr' OR a.typ = 'frau',CONCAT(a.vorname,' ',a.name),a.name) as name,
+ if ($this->app->erp->Firmendaten("adresse_freitext1_suche")) {
+ $sql = "SELECT SQL_CALC_FOUND_ROWS a.id, CONCAT(a.name,if(a.freifeld1!='',CONCAT(' (',a.freifeld1,')'),'')) as name,
+ if(a.kundennummer!='',a.kundennummer,'-') as kundennummer,
+ if(a.lieferantennummer!='',a.lieferantennummer,'-') as lieferantennummer, a.land as land, a.plz as plz, a.ort as ort, a.email as email, p.abkuerzung as projekt, a.id as menu
+ FROM adresse AS a LEFT JOIN projekt p ON p.id=a.projekt $tmpfrom2 $tmpfrom3 $tmpfrom4 $tmpfrom5";
+ } else {
+ $sql = "SELECT SQL_CALC_FOUND_ROWS a.id, a.name as name,
+ if(a.kundennummer!='',a.kundennummer,'-') as kundennummer,
+ if(a.lieferantennummer!='',a.lieferantennummer,'-') as lieferantennummer, a.land as land, a.plz as plz, a.ort as ort, a.email as email, p.abkuerzung as projekt, a.id as menu
+ FROM adresse AS a LEFT JOIN projekt p ON p.id=a.projekt $tmpfrom2 $tmpfrom3 $tmpfrom4 $tmpfrom5";
+ }
+ // fester filter
+ $where = "a.geloescht=0 $tmp $tmp2 " . $this->app->erp->ProjektRechte();
+ $groupby = " GROUP BY a.id ";
+ $count = "SELECT COUNT(a.id) FROM adresse a LEFT JOIN projekt p ON p.id=a.projekt WHERE a.geloescht=0 $tmp " . $this->app->erp->ProjektRechte();
+ break;
+ case 'wareneingang_kunderetoure':
+ $allowed['wareneingang'] = array('distriinhalt');
+
+ // headings
+ $id = $this->app->Secure->GetGET('id');
+ $adresse = (int)$this->app->DB->Select(sprintf('SELECT adresse FROM paketannahme WHERE id = %d LIMIT 1', $id));
+ $heading = array('Nummer', 'Beschreibung', 'SN/Charge/MHD', 'Projekt', 'Menge', 'Retoure', 'Lieferschein', 'Datum', 'Aktion','');
+ $width = array('5%', '30%', '5%', '5%', '5%', '5%', '5%', '5%', '5%','1%');
+ $findcols = array('lp.nummer', 'lp.bezeichnung', 'sn.seriennummer', 'p.abkuerzung', 'if(isnull(sn.menge), lp.menge,sn.menge)', 'rma.menge', 'l.belegnr', 'l.datum', 'lp.id','lp.id');
+ $searchsql = array('lp.nummer', 'lp.bezeichnung', 'sn.seriennummer','lp.beschreibung', 'p.abkuerzung', 'trim(if(isnull(sn.menge), lp.menge,sn.menge))+0', 'lp.geliefert', 'l.belegnr', "DATE_FORMAT(l.datum,'%d.%m.%Y')", 'lp.id','lp.id');
+
+ $alignright = array(5,6);
+
+ //$defaultorder = 6; //Optional wenn andere Reihenfolge gewuenscht
+
+ //$defaultorderdesc=1;
+
+ $mCol = "CONCAT('Menge: "
+ ."app->erp->FormatMenge('ra.quantity')."
+ FROM returnorder_quantity AS ra
+ WHERE ra.delivery_note_id = lp.id
+ AND ra.serialnumber = IFNULL(sn.seriennummer,'')
+ AND ra.bestbefore = IFNULL(bbf.mhd,'')
+ AND ra.batch = IFNULL(batch.charge,'')
+ LIMIT 1
+ ),''
+ ),'\" type=\"text\" size=\"5\" name=\"pos',lp.id,'\" data-dnpid=\"',lp.id,'\" data-bestbefore=\"',IFNULL(bbf.mhd,''),'\" data-batch=\"',IFNULL(batch.charge,''),'\" data-serialnumber=\"',IFNULL(sn.seriennummer,''),'\" />"
+ ." |
')";
+
+ $menu = '';
+
+ // ";
+ $menucol = 8;
+
+ $kommissionskonsignationslager = true;
+ if(!$this->app->erp->ModulVorhanden('kommissionskonsignationslager')) {
+ $kommissionskonsignationslager = false;
+ }
+ if($kommissionskonsignationslager
+ && !$this->app->DB->Select("SELECT id FROM kommissionskonsignationslager_positionen LIMIT 1")) {
+ $kommissionskonsignationslager = false;
+ }
+
+
+ // SQL statement
+
+ $rmamengecol = "
+ if(
+ ifnull(rma2.menge,0)+IFNULL(rma4.menge,0) > 0,
+ concat(".$this->app->erp->FormatMenge('ifnull(rma2.menge,0)+ifnull(rma4.menge,0)')."),
+ if(
+ ifnull(rma.menge,0)+ifnull(rma3.menge,0) > 0,
+ concat(".$this->app->erp->FormatMenge('ifnull(rma.menge,0)+ifnull(rma3.menge,0)').",
+ if(isnull(sn.pos),'',' (Retoure gesamt)')
+ )
+ ,''
+ )
+ ),
+ ";
+ $rmajoin = "LEFT JOIN (
+ SELECT sum(menge) as menge,pos
+ FROM rma_artikel WHERE seriennummer = ''
+ GROUP BY pos
+ ) rma ON lp.id = rma.pos ";
+
+ $rmajoin2 = "LEFT JOIN (
+ SELECT sum(menge) as menge,pos,seriennummer
+ FROM rma_artikel WHERE seriennummer != ''
+ GROUP BY pos,seriennummer
+ ) rma2 ON lp.id = rma2.pos AND sn.seriennummer = rma2.seriennummer";
+
+
+ $rmajoin3 = "
+ LEFT JOIN (
+ SELECT SUM(menge) AS menge, lieferschein_position_id
+ FROM `retoure_position`
+ WHERE `lieferschein_position_id` > 0
+ GROUP BY lieferschein_position_id
+ ) AS rma3 ON lp.id = rma3.lieferschein_position_id
+ AND (sn.seriennummer IS NULL OR sn.seriennummer = '')
+ ";
+
+ $rmajoin4 = "
+ LEFT JOIN (
+ SELECT count(bcr.id) as menge, bcr.wert as seriennummer,
+ rop.lieferschein_position_id
+ FROM `beleg_chargesnmhd` AS bcr
+ INNER JOIN retoure_position AS rop ON bcr.pos = rop.id
+ AND bcr.doctype = 'retoure' AND bcr.type='sn'
+ GROUP BY rop.lieferschein_position_id, bcr.wert
+ ) AS rma4 ON lp.id = rma4.lieferschein_position_id
+ AND sn.seriennummer = rma4.seriennummer
+ ";
+
+
+ if($kommissionskonsignationslager) {
+ $kommname = $this->app->erp->Firmendaten('kommissionskonsignationslager');
+ if($kommname === '') {
+ $kommname = 'Kommissions-/Konsignationslager';
+ }
+
+ $sql = "SELECT SQL_CALC_FOUND_ROWS lp.id,lp.nummer,
+ concat(lp.bezeichnung, if(isnull(komm.menge),'',' ($kommname)')) as beschreibung,
+
+ if(
+ sn.seriennummer IS NULL,
+ IF(bbf.mhd IS NULL,
+ IF(batch.charge IS NULL,
+ '',
+ CONCAT('Charge: ',batch.charge)
+ ),
+ CONCAT('MHD: ', bbf.mhd)
+ ),
+ CONCAT('SN: ', sn.seriennummer)
+ ),
+ p.abkuerzung as projekt,
+
+ trim(if(isnull(sn.menge),
+ if(isnull(bbf.menge),
+ IF(isnull(batch.menge),lp.menge,batch.menge)
+ , bbf.menge)
+ ,sn.menge))+0,
+
+
+ $rmamengecol
+ l.belegnr as lieferschein,
+ DATE_FORMAT(l.datum,'%d.%m.%Y') as datum, if(isnull(sn.seriennummer),lp.id,
+ $mCol,
+ concat(lp.id,'-',sn.seriennummer)),
+
+ FROM lieferschein_position lp
+ $rmajoin
+ LEFT JOIN lieferschein l ON lp.lieferschein=l.id
+ LEFT JOIN projekt p ON l.projekt=p.id
+ LEFT JOIN artikel a ON a.id=lp.artikel
+ LEFT JOIN (
+ (
+ SELECT '1' as menge, wert as seriennummer, pos
+ FROM `beleg_chargesnmhd`
+ WHERE doctype = 'lieferschein' AND type='sn'
+ ) UNION ALL
+ (
+ SELECT '1' as menge,seriennummer, lieferscheinpos as pos
+ FROM seriennummern
+ )
+ ) sn ON sn.pos = lp.id
+ LEFT JOIN (
+ SELECT SUM(menge) AS menge,
+ IF(IFNULL(wert2,'') = '',wert ,CONCAT(wert,'-',IFNULL(wert2,''))) AS mhd,
+ pos
+ FROM `beleg_chargesnmhd`
+ WHERE doctype = 'lieferschein' AND type='mhd'
+ GROUP BY wert,pos,wert2
+ ) AS bbf ON bbf.pos = lp.id AND a.mindesthaltbarkeitsdatum = 1 AND sn.pos IS NULL
+ AND (a.seriennummern = 'keine' OR a.seriennummern = '')
+ LEFT JOIN (
+ SELECT SUM(menge) AS menge, wert AS charge, pos
+ FROM `beleg_chargesnmhd`
+ WHERE doctype = 'lieferschein' AND type='charge'
+ GROUP BY wert,pos
+ ) AS batch ON batch.pos = lp.id AND a.mindesthaltbarkeitsdatum = 0 AND a.chargenverwaltung > 0
+ AND (a.seriennummern = 'keine' OR a.seriennummern = '') AND sn.pos IS NULL
+ LEFT JOIN
+ (SELECT lieferschein_position, sum(menge) as menge FROM kommissionskonsignationslager_positionen WHERE menge > ausgelagert GROUP BY lieferschein_position) komm ON lp.id = komm.lieferschein_position
+
+ $rmajoin2
+ $rmajoin3
+ $rmajoin4
+ ";
+ }
+ else{
+
+ $sql = "SELECT SQL_CALC_FOUND_ROWS lp.id,lp.nummer, lp.bezeichnung as beschreibung,
+
+ if(
+ sn.seriennummer IS NULL,
+ IF(bbf.mhd IS NULL,
+ IF(batch.charge IS NULL,
+ '',
+ CONCAT('Charge: ',batch.charge)
+ ),
+ CONCAT('MHD: ', bbf.mhd)
+ ),
+ CONCAT('SN: ', sn.seriennummer)
+ ),
+
+ p.abkuerzung as projekt,
+
+ trim(if(isnull(sn.menge),
+ if(isnull(bbf.menge),
+ IF(isnull(batch.menge),lp.menge,batch.menge)
+ , bbf.menge)
+ ,sn.menge))+0,
+ $rmamengecol
+ l.belegnr as lieferschein,
+ DATE_FORMAT(l.datum,'%d.%m.%Y') as datum,
+ $mCol,
+ if(isnull(sn.seriennummer),lp.id,concat(lp.id,'-',sn.seriennummer))
+ FROM lieferschein_position lp
+ $rmajoin
+ LEFT JOIN lieferschein l ON lp.lieferschein=l.id
+ LEFT JOIN projekt p ON l.projekt=p.id
+ LEFT JOIN artikel a ON a.id=lp.artikel
+ LEFT JOIN
+ (
+ (
+ SELECT '1' as menge, wert as seriennummer, pos
+ FROM `beleg_chargesnmhd`
+ WHERE doctype = 'lieferschein' AND type='sn'
+ )
+ UNION ALL
+ (
+ SELECT '1' as menge,seriennummer, lieferscheinpos as pos
+ FROM seriennummern
+ )
+ ) sn ON sn.pos = lp.id
+ LEFT JOIN (
+ SELECT SUM(menge) AS menge,
+ IF(IFNULL(wert2,'') = '',wert ,CONCAT(wert,'-',IFNULL(wert2,''))) AS mhd,
+ pos
+ FROM `beleg_chargesnmhd`
+ WHERE doctype = 'lieferschein' AND type='mhd'
+ GROUP BY wert,pos,wert2
+ ) AS bbf ON bbf.pos = lp.id AND a.mindesthaltbarkeitsdatum = 1 AND sn.pos IS NULL
+ AND (a.seriennummern = 'keine' OR a.seriennummern = '')
+ LEFT JOIN (
+ SELECT SUM(menge) AS menge, wert AS charge, pos
+ FROM `beleg_chargesnmhd`
+ WHERE doctype = 'lieferschein' AND type='charge'
+ GROUP BY wert,pos
+ ) AS batch ON batch.pos = lp.id AND a.mindesthaltbarkeitsdatum = 0 AND a.chargenverwaltung > 0
+ AND (a.seriennummern = 'keine' OR a.seriennummern = '') AND sn.pos IS NULL
+ $rmajoin2
+ $rmajoin3
+ $rmajoin4
+ ";
+ }
+
+ $where = " (l.adresse='$adresse' AND (l.status='versendet' OR l.status='freigegeben') AND a.lagerartikel=1) " .
+ $this->app->erp->ProjektRechte();
+
+ // gesamt anzahl
+ /*$count = "SELECT COUNT(lp.id)
+ FROM lieferschein_position lp
+ LEFT JOIN lieferschein l ON lp.lieferschein=l.id
+ LEFT JOIN projekt p ON l.projekt=p.id
+ LEFT JOIN artikel a ON a.id=lp.artikel
+ WHERE ($where)";*/
+ $count = '';
+ $moreinfo = false;
+ break;
+ case 'wareneingang_kunde':
+ $allowed['wareneingang'] = array('distriinhalt');
+
+ // headings
+ $id = $this->app->Secure->GetGET('id');
+ $adresse = $this->app->DB->Select("SELECT adresse FROM paketannahme WHERE id='$id' LIMIT 1");
+ $heading = array('Nummer', 'Beschreibung', 'SN/Charge/MHD', 'Projekt', 'Menge', 'Retoure', 'Lieferschein', 'Datum', 'Aktion');
+ $width = array('5%', '30%', '5%', '5%', '5%', '5%', '5%', '5%', '5%');
+ $findcols = array('lp.nummer', 'lp.bezeichnung', 'sn.seriennummer', 'p.abkuerzung', 'if(isnull(sn.menge), lp.menge,sn.menge)', 'rma.menge', 'l.belegnr', 'l.datum', 'lp.id');
+ $searchsql = array('lp.nummer', 'lp.bezeichnung', 'sn.seriennummer','lp.beschreibung', 'p.abkuerzung', 'trim(if(isnull(sn.menge), lp.menge,sn.menge))+0', 'lp.geliefert', 'l.belegnr', "DATE_FORMAT(l.datum,'%d.%m.%Y')", 'lp.id');
+
+ $alignright = array(5,6);
+
+ //$defaultorder = 6; //Optional wenn andere Reihenfolge gewuenscht
+
+ //$defaultorderdesc=1;
+
+ $menu = "";
+
+ // ";
+ $menucol = 4;
+
+ $kommissionskonsignationslager = true;
+ if(!$this->app->erp->ModulVorhanden('kommissionskonsignationslager'))
+ {
+ $kommissionskonsignationslager = false;
+ }
+ if($kommissionskonsignationslager && !$this->app->DB->Select("SELECT id FROM kommissionskonsignationslager_positionen LIMIT 1"))
+ {
+ $kommissionskonsignationslager = false;
+ }
+
+
+ // SQL statement
+
+ $rmamengecol = "
+ if(ifnull(rma2.menge,0) > 0,
+ concat(".$this->app->erp->FormatMenge('ifnull(rma2.menge,0)')."),
+ if(ifnull(rma.menge,0) > 0,concat(".$this->app->erp->FormatMenge('ifnull(rma.menge,0)').",if(isnull(sn.pos),'',' (Retoure gesamt)')),'')
+ ),
+ ";
+ $rmajoin = "LEFT JOIN (SELECT sum(menge) as menge,pos FROM rma_artikel WHERE seriennummer = '' GROUP BY pos) rma ON lp.id = rma.pos ";
+ $rmajoin2 = "LEFT JOIN (SELECT sum(menge) as menge,pos,seriennummer FROM rma_artikel WHERE seriennummer != '' GROUP BY pos,seriennummer) rma2 ON lp.id = rma2.pos AND sn.seriennummer = rma2.seriennummer";
+ if($kommissionskonsignationslager)
+ {
+ $kommname = $this->app->erp->Firmendaten('kommissionskonsignationslager');
+ if($kommname === '')
+ {
+ $kommname = 'Kommissions-/Konsignationslager';
+ }
+
+ $sql = "SELECT SQL_CALC_FOUND_ROWS lp.id,lp.nummer,
+ concat(lp.bezeichnung, if(isnull(komm.menge),'',' ($kommname)')) as beschreibung,
+ if(
+ sn.seriennummer IS NULL,
+ IF(bbf.mhd IS NULL,
+ IF(batch.charge IS NULL,
+ '',
+ CONCAT('Charge: ',batch.charge)
+ ),
+ CONCAT('MHD: ', bbf.mhd)
+ ),
+ CONCAT('SN: ', sn.seriennummer)
+ ),
+ p.abkuerzung as projekt,
+ trim(if(isnull(sn.menge),
+ if(isnull(bbf.menge),
+ IF(isnull(batch.menge),lp.menge,batch.menge)
+ , bbf.menge)
+ ,sn.menge))+0,
+ $rmamengecol
+ l.belegnr as lieferschein, DATE_FORMAT(l.datum,'%d.%m.%Y') as datum,
+ if(
+ sn.seriennummer IS NULL,
+ IF(bbf.mhd IS NULL,
+ IF(batch.charge IS NULL,
+ lp.id,
+ CONCAT(lp.id,'-',batch.charge)
+ ),
+ CONCAT(lp.id,'-', bbf.mhd)
+ ),
+ CONCAT(lp.id,'-', sn.seriennummer)
+ )
+
+ FROM lieferschein_position lp
+ $rmajoin
+ LEFT JOIN lieferschein l ON lp.lieferschein=l.id
+ LEFT JOIN projekt p ON l.projekt=p.id
+ LEFT JOIN artikel a ON a.id=lp.artikel
+ LEFT JOIN (
+ (SELECT '1' as menge, wert as seriennummer, pos FROM `beleg_chargesnmhd` WHERE doctype = 'lieferschein' AND type='sn' ) UNION ALL
+ (SELECT '1' as menge,seriennummer, lieferscheinpos as pos FROM seriennummern)
+ ) sn ON sn.pos = lp.id
+ LEFT JOIN (
+ SELECT SUM(menge) AS menge,
+ IF(IFNULL(wert2,'') = '',wert ,CONCAT(wert,'-',IFNULL(wert2,''))) AS mhd,
+ pos
+ FROM `beleg_chargesnmhd`
+ WHERE doctype = 'lieferschein' AND type='mhd'
+ GROUP BY wert,pos,wert2
+ ) AS bbf ON bbf.pos = lp.id AND a.mindesthaltbarkeitsdatum = 1 AND sn.pos IS NULL
+ AND (a.seriennummern = 'keine' OR a.seriennummern = '')
+ LEFT JOIN (
+ SELECT SUM(menge) AS menge, wert AS charge, pos
+ FROM `beleg_chargesnmhd`
+ WHERE doctype = 'lieferschein' AND type='charge'
+ GROUP BY wert,pos
+ ) AS batch ON batch.pos = lp.id AND a.mindesthaltbarkeitsdatum = 0 AND a.chargenverwaltung > 0
+ AND (a.seriennummern = 'keine' OR a.seriennummern = '') AND sn.pos IS NULL
+ LEFT JOIN
+ (SELECT lieferschein_position, sum(menge) as menge FROM kommissionskonsignationslager_positionen WHERE menge > ausgelagert GROUP BY lieferschein_position) komm ON lp.id = komm.lieferschein_position
+
+ $rmajoin2
+ ";
+ }else{
+
+ $sql = "SELECT SQL_CALC_FOUND_ROWS lp.id,lp.nummer, lp.bezeichnung as beschreibung,
+ if(
+ sn.seriennummer IS NULL,
+ IF(bbf.mhd IS NULL,
+ IF(batch.charge IS NULL,
+ '',
+ CONCAT('Charge: ',batch.charge)
+ ),
+ CONCAT('MHD: ', bbf.mhd)
+ ),
+ CONCAT('SN: ', sn.seriennummer)
+ ),
+ p.abkuerzung as projekt,
+ trim(if(isnull(sn.menge),
+ if(isnull(bbf.menge),
+ IF(isnull(batch.menge),lp.menge,batch.menge)
+ , bbf.menge)
+ ,sn.menge))+0,
+ $rmamengecol
+ l.belegnr as lieferschein, DATE_FORMAT(l.datum,'%d.%m.%Y') as datum,
+ if(
+ sn.seriennummer IS NULL,
+ IF(bbf.mhd IS NULL,
+ IF(batch.charge IS NULL,
+ lp.id,
+ CONCAT(lp.id,'-',batch.charge)
+ ),
+ CONCAT(lp.id,'-', bbf.mhd)
+ ),
+ CONCAT(lp.id,'-', sn.seriennummer)
+ )
+
+
+ FROM lieferschein_position lp
+ $rmajoin
+ LEFT JOIN lieferschein l ON lp.lieferschein=l.id
+ LEFT JOIN projekt p ON l.projekt=p.id
+ LEFT JOIN artikel a ON a.id=lp.artikel
+ LEFT JOIN (
+ (SELECT '1' as menge, wert as seriennummer, pos FROM `beleg_chargesnmhd` WHERE doctype = 'lieferschein' AND type='sn' ) UNION ALL
+ (SELECT '1' as menge,seriennummer, lieferscheinpos as pos FROM seriennummern)
+ ) sn ON sn.pos = lp.id
+ LEFT JOIN (
+ SELECT SUM(menge) AS menge,
+ IF(IFNULL(wert2,'') = '',wert ,CONCAT(wert,'-',IFNULL(wert2,''))) AS mhd,
+ pos
+ FROM `beleg_chargesnmhd`
+ WHERE doctype = 'lieferschein' AND type='mhd'
+ GROUP BY wert,pos,wert2
+ ) AS bbf ON bbf.pos = lp.id AND a.mindesthaltbarkeitsdatum = 1 AND sn.pos IS NULL
+ AND (a.seriennummern = 'keine' OR a.seriennummern = '')
+ LEFT JOIN (
+ SELECT SUM(menge) AS menge, wert AS charge, pos
+ FROM `beleg_chargesnmhd`
+ WHERE doctype = 'lieferschein' AND type='charge'
+ GROUP BY wert,pos
+ ) AS batch ON batch.pos = lp.id AND a.mindesthaltbarkeitsdatum = 0 AND a.chargenverwaltung > 0
+ AND (a.seriennummern = 'keine' OR a.seriennummern = '') AND sn.pos IS NULL
+ $rmajoin2
+ ";
+ }
+
+ $where = " (l.adresse='$adresse' AND (l.status='versendet' OR l.status='freigegeben') AND a.lagerartikel=1) " . $this->app->erp->ProjektRechte();
+
+ // gesamt anzahl
+ $count = "SELECT COUNT(lp.id) FROM lieferschein_position lp
+ LEFT JOIN lieferschein l ON lp.lieferschein=l.id LEFT JOIN projekt p ON l.projekt=p.id LEFT JOIN artikel a ON a.id=lp.artikel WHERE ($where)";
+ $moreinfo = false;
+ break;
+ case 'paketdistribution_list':
+ $allowed['paketdistribution_list'] = array('list');
+/* $heading = array('bearbeiter', 'zeit', 'paketannahme', 'adresse', 'artikel', 'menge', 'vpe', 'etiketten', 'bemerkung', 'bestellung_position', 'logdatei', 'retoure_position', 'Menü');
+ $width = array('10%'); // Fill out manually later
+
+ $findcols = array('bearbeiter', 'zeit', 'paketannahme', 'adresse', 'artikel', 'menge', 'vpe', 'etiketten', 'bemerkung', 'bestellung_position', 'logdatei', 'retoure_position');
+ $searchsql = array('bearbeiter', 'zeit', 'paketannahme', 'adresse', 'artikel', 'menge', 'vpe', 'etiketten', 'bemerkung', 'bestellung_position', 'logdatei', 'retoure_position');
+*/
+
+
+ $heading = array('Lieferant-Art.-Nr.','Art.-Nummer','Bestellung', 'Beschreibung', 'Menge','Bemerkung','');
+ $width = array('5%', '5%', '5%', '30%', '5%','5%','45%');
+
+ $findcols = array('p.nummer','p.bestellbezug','p.name', 'p.menge','p.bemerkung');
+ $searchsql = array('p.nummer','p.name','p.bemerkung');
+
+ $defaultorder = 1;
+ $defaultorderdesc = 0;
+
+ /*$sql = "SELECT p.nummer,p.lieferantnummer, p.nummer, p.bestellbezug, p.name, p.menge, p.bemerkung from
+ (SELECT bestellung.belegnr as bestellbezug, bestellung_position.bestellnummer as lieferantnummer ,artikel.nummer as nummer, artikel.name_de as name, ".$this->app->erp->FormatMenge("sum(paketdistribution.menge)")." as menge, paketdistribution.bemerkung
+ FROM paketdistribution
+ INNER 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 GROUP BY bestellung_position, paketdistribution.artikel) as p";*/
+
+ $sql = "SELECT p.nummer,p.lieferantnummer, p.nummer, p.bestellbezug, p.name, p.menge, p.bemerkung from
+ (SELECT bestellung.belegnr as bestellbezug, bestellung_position.bestellnummer as lieferantnummer ,artikel.nummer as nummer, artikel.name_de as name, ".$this->app->erp->FormatMenge("paketdistribution.menge")." as menge, paketdistribution.bemerkung
+ FROM paketdistribution
+ INNER 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) as p";
+
+ $where = "";
+ $count = "SELECT count(DISTINCT artikel) FROM paketdistribution p WHERE paketannahme = $id";
+// $groupby = "";
+
+ break;
+ case "paketannahme_list":
+/* $allowed['paketdistribution_list'] = array('list');
+ $heading = array('bearbeiter', 'zeit', 'paketannahme', 'adresse', 'artikel', 'menge', 'vpe', 'etiketten', 'bemerkung', 'bestellung_position', 'logdatei', 'retoure_position', 'Menü');
+ $width = array('10%'); // Fill out manually later
+
+ $findcols = array('bearbeiter', 'zeit', 'paketannahme', 'adresse', 'artikel', 'menge', 'vpe', 'etiketten', 'bemerkung', 'bestellung_position', 'logdatei', 'retoure_position');
+ $searchsql = array('bearbeiter', 'zeit', 'paketannahme', 'adresse', 'artikel', 'menge', 'vpe', 'etiketten', 'bemerkung', 'bestellung_position', 'logdatei', 'retoure_position');
+
+ $defaultorder = 1;
+ $defaultorderdesc = 0;
+
+ $menu = "";
+
+ $sql = "SELECT id, bearbeiter, zeit, paketannahme, adresse, artikel, menge, vpe, etiketten, bemerkung, bestellung_position, logdatei, retoure_position, id FROM paketdistribution";
+
+ $where = "1";
+ $count = "SELECT count(DISTINCT id) FROM paketdistribution WHERE $where";
+// $groupby = "";
+*/
+ $allowed['paketannahme_list'] = array('list');
+ $heading = array('Paket-Nr.','Status','Name', 'Kunde', 'Lieferant', 'Bearbeiter','Datum', 'Bemerkung', 'Menü');
+ $width = array('5%','10%','10%','10%','10%','10%','10%','10%','10%'); // Fill out manually later
+
+ $findcols = array(
+ 'paketannahme.id',
+ 'paketannahme.status',
+ 'adresse.name',
+ 'adresse.kundennummer',
+ 'adresse.lieferantennummer',
+ 'paketannahme.bearbeiter',
+ 'paketannahme.datum',
+ 'paketannahme.bemerkung',
+ 'paketannahme.id');
+
+ $searchsql = array(
+ 'paketannahme.status',
+ 'adresse.name',
+ 'adresse.kundennummer',
+ 'adresse.lieferantennummer',
+ 'paketannahme.bearbeiter',
+ 'paketannahme.datum',
+ 'paketannahme.bemerkung');
+
+ $defaultorder = 6;
+ $defaultorderdesc = 0;
+
+ $menu = "";
+
+ $sql = "SELECT
+ paketannahme.id,
+ paketannahme.id,
+ paketannahme.status,
+ adresse.name,
+ adresse.kundennummer,
+ adresse.lieferantennummer,
+ paketannahme.bearbeiter,
+ paketannahme.datum,
+ paketannahme.bemerkung,
+ paketannahme.id
+ FROM paketannahme
+ INNER JOIN adresse
+ ON paketannahme.adresse = adresse.id";
+
+ $where = "1";
+ $count = "SELECT count(paketannahme.id) FROM paketannahme
+ INNER JOIN adresse
+ ON paketannahme.adresse = adresse.id";
+// $groupby = "";
+
+
+ break;
+ }
+
+ $erg = [];
+
+ //$erlaubtevars = array('heading','width','sql','count','findcols','searchsql','defaultorder','defaultorderdesc','menu','menucol','where','groupby','allowed');
+
+
+ foreach($erlaubtevars as $k => $v)
+ {
+ if(isset($$v))
+ {
+ $erg[$v] = $$v;
+ }
+ }
+ return $erg;
+ }
+
+ /**
+ * Wareneingang constructor.
+ *
+ * @param Application $app
+ * @param bool $intern
+ */
+ public function __construct($app, $intern = false)
+ {
+ $this->app=$app;
+ if($intern) {
+ return;
+ }
+ $this->app->ActionHandlerInit($this);
+
+ $this->app->ActionHandler("main","WareneingangMain");
+ $this->app->ActionHandler("list","WareneingangList");
+ $this->app->ActionHandler("help","WareneingangHelp");
+ $this->app->ActionHandler("vorgang","VorgangAnlegen");
+ $this->app->ActionHandler("removevorgang","VorgangEntfernen");
+ //$this->app->ActionHandler("create","WareneingangCreate");
+ $this->app->ActionHandler("paketannahme","WareneingangPaketannahme");
+ $this->app->ActionHandler("paketzustand","WareneingangPaketZustand");
+ $this->app->ActionHandler("paketetikett","WareneingangPaketEtikett");
+ $this->app->ActionHandler("paketabschliessen","WareneingangPaketAbschliessen");
+ $this->app->ActionHandler("distriinhalt","WareneingangPaketDistriInhalt");
+ $this->app->ActionHandler("distrietiketten","WareneingangPaketDistriEtiketten");
+ $this->app->ActionHandler("distrietikettenbilderfassen","WareneingangPaketDistriEtikettenBilderfassen");
+ $this->app->ActionHandler("distriabschluss","WareneingangPaketDistriAbschluss");
+ $this->app->ActionHandler("manuellerfassen","WareneingangManuellErfassen");
+ $this->app->ActionHandler("minidetail","WareneingangMiniDetail");
+ $this->app->ActionHandler("stornieren","WareneingangStornieren");
+ $this->app->ActionHandler("settings","WareneingangSettings");
+
+ $this->app->DefaultActionHandler("login");
+ $this->app->erp->Headlines('Wareneinang');
+
+ $this->app->ActionHandlerListen($app);
+ }
+
+ public function WareneingangSettings()
+ {
+ $menu = $this->app->Secure->GetGET('menu');
+
+ if($menu === 'paketdistri'){
+ $this->WareneingangPaketDistriMenu();
+ }
+ elseif($menu === 'paket'){
+ $this->WareneingangPaketMenu();
+ }
+ else{
+ $this->WareneingangMenu();
+ }
+ $this->app->YUI->AutoSaveFormular(
+ 'wareneingang',
+ [
+ 'createreturnorder'=>[
+ 'bezeichnung' => 'Retouren annehmen mit Retouren-Beleg',
+ 'type'=>'checkbox',
+ ]
+ ],
+ [
+ 'legend'=>'Einstellungen',
+ 'finaltarget' => 'TAB1',
+ 'target' => 'TABLE',
+ 'template' => 'table.tpl',
+ ]
+ );
+ $this->app->Tpl->Set('TABLE', '');
+ $this->app->erp->RunHook('wareneingang_settings', 0);
+
+ $this->app->Tpl->Parse('PAGE', 'tabview.tpl');
+ }
+
+ /**
+ * @param bool $mitstandardlager
+ * @param bool $forceZwischenlager
+ * @param int $lagerplatz
+ *
+ * @return array
+ */
+ public function GetLager($mitstandardlager=false, $forceZwischenlager = false, $lagerplatz = null)
+ {
+ $tmp = [];
+ if($forceZwischenlager || $this->app->erp->Firmendaten('wareneingang_zwischenlager')=='1') {
+ $tmp['zwischenlager'] = 'Zwischenlager';
+ }
+ if($mitstandardlager) {
+ $tmp['standardlager'] = 'Standardlager';
+ }
+
+ $result = $this->app->DB->SelectArr(
+ sprintf(
+ "SELECT lp.id, CONCAT(l.bezeichnung,'->',lp.kurzbezeichnung) as kurzbezeichnung
+ FROM lager_platz AS lp
+ INNER JOIN lager AS l ON lp.lager=l.id
+ WHERE lp.kurzbezeichnung!='' AND lp.geloescht <> 1 AND l.geloescht <> 1 AND lp.id = %d
+ ORDER BY l.bezeichnung,lp.kurzbezeichnung",
+ $lagerplatz
+ )
+ );
+ if(empty($result)) {
+ return $tmp;
+ }
+ foreach($result as $row) {
+ $tmp[$row['id']] = $row['kurzbezeichnung'];
+ }
+ return $tmp;
+ }
+
+ public function WareneingangPaketMenu()
+ {
+ $id = $this->app->Secure->GetGET('id');
+ $action = $this->app->Secure->GetGET('action');
+ $this->app->Tpl->Set('ID',$id);
+ $this->app->Tpl->Add('KURZUEBERSCHRIFT',' Paketannahme');
+ $this->app->erp->MenuEintrag('index.php?module=wareneingang&action=paketannahme','Paketannahme');
+ $this->app->erp->MenuEintrag('index.php?module=wareneingang&action=list','Archiv');
+ $this->app->erp->RunMenuHook('wareneingangpaket');
+ $this->app->erp->MenuEintrag(
+ 'index.php?module=wareneingang&action=settings&menu=paket',
+ 'Einstellungen',
+ $action === 'settings'
+ );
+ }
+
+ public function WareneingangPaketDistriMenu()
+ {
+ $id = (int)$this->app->Secure->GetGET('id');
+ $action = $this->app->Secure->GetGET('action');
+ $this->app->Tpl->Set('ID',$id);
+ $this->app->Tpl->Add('KURZUEBERSCHRIFT',' Paketdistribution');
+ $this->app->erp->MenuEintrag('index.php?module=wareneingang&action=paketannahme','zur Paketannahme');
+ if($action==='distribution' && $id > 0){
+ $this->app->erp->MenuEintrag('index.php?module=wareneingang&action=distribution&id='.$id, 'Paketannahme');
+ }
+ else if($action==='distribution'){
+ $this->app->erp->MenuEintrag('index.php?module=wareneingang&action=distribution', 'Paketannahme');
+ }
+ else{
+ $this->app->erp->MenuEintrag('index.php?module=wareneingang&action=distriinhalt&id='.$id, 'Paketannahme');
+ }
+ if($id && $this->app->erp->RechteVorhanden('schneller_wareneingang','distriinhalt'))
+ {
+ $adresse = $this->app->DB->Select("SELECT adresse FROM paketannahme WHERE id = '$id' LIMIT 1");
+ $lieferantennummer = $this->app->DB->Select("SELECT lieferantennummer FROM adresse WHERE id = '$adresse' LIMIT 1");
+ if($lieferantennummer != '0' && $lieferantennummer != '')
+ {
+ $this->app->erp->MenuEintrag('index.php?module=schneller_wareneingang&action=distriinhaltschnell&id='.$id,"schnelle Paketannahme");
+ }
+ }
+ $this->app->erp->RunMenuHook('wareneingangpaketdistri');
+ $this->app->erp->MenuEintrag(
+ 'index.php?module=wareneingang&action=settings&menu=paketdistri',
+ 'Einstellungen',
+ $action === 'settings'
+ );
+ }
+
+ public function WareneingangStornieren()
+ {
+ $id = $this->app->Secure->GetGET('id');
+
+ if($id > 0 && is_numeric($id))
+ {
+ $this->app->DB->Delete("DELETE FROM paketannahme WHERE id='$id' LIMIT 1");
+ }
+ $this->app->Location->execute('Location: index.php?module=wareneingang&action=distribution');
+ }
+
+
+ public function WareneingangMenu()
+ {
+ $action = $this->app->Secure->GetGET('action');
+ $this->app->Tpl->Add('KURZUEBERSCHRIFT',' Wareneingang');
+ $this->app->erp->MenuEintrag('index.php?module=wareneingang&action=list','Übersicht');
+ $this->app->erp->RunMenuHook('wareneingang');
+ $this->app->erp->MenuEintrag(
+ 'index.php?module=wareneingang&action=settings',
+ 'Einstellungen',
+ $action==='settings'
+ );
+ }
+
+ /**
+ * @return JsonResponse
+ */
+ protected function HandleCreateReturnOrderAjaxAction()
+ {
+ $id = $this->app->Secure->GetPOST('id');
+ $addressId = (int)$this->app->DB->Select(sprintf('SELECT adresse FROM paketannahme WHERE id = %d LIMIT 1', $id));
+ $sql = "
+ SELECT lp.*, IFNULL(sn.seriennummer, '') AS serialnumber,
+ rq.bestbefore,rq.batch,
+ rq.quantity, rq.id As rqid
+
+ FROM lieferschein_position lp
+
+ LEFT JOIN lieferschein l ON lp.lieferschein=l.id
+ LEFT JOIN projekt p ON l.projekt=p.id
+ LEFT JOIN artikel a ON a.id=lp.artikel
+ LEFT JOIN
+ (
+ (
+ SELECT '1' as menge, wert as seriennummer, pos
+ FROM `beleg_chargesnmhd`
+ WHERE doctype = 'lieferschein' AND type='sn'
+ )
+ UNION ALL
+ (
+ SELECT '1' as menge,seriennummer, lieferscheinpos as pos
+ FROM seriennummern
+ )
+ ) sn ON sn.pos = lp.id
+ LEFT JOIN (
+ SELECT SUM(menge) AS menge,
+ IF(IFNULL(wert2,'') = '',wert ,CONCAT(wert,'-',IFNULL(wert2,''))) AS mhd,
+ pos
+ FROM `beleg_chargesnmhd`
+ WHERE doctype = 'lieferschein' AND type='mhd'
+ GROUP BY wert,pos,wert2
+ ) AS bbf ON bbf.pos = lp.id AND a.mindesthaltbarkeitsdatum = 1 AND sn.pos IS NULL
+ AND (a.seriennummern = 'keine' OR a.seriennummern = '')
+ LEFT JOIN (
+ SELECT SUM(menge) AS menge, wert AS charge, pos
+ FROM `beleg_chargesnmhd`
+ WHERE doctype = 'lieferschein' AND type='charge'
+ GROUP BY wert,pos
+ ) AS batch ON batch.pos = lp.id AND a.mindesthaltbarkeitsdatum = 0 AND a.chargenverwaltung > 0
+ AND (a.seriennummern = 'keine' OR a.seriennummern = '') AND sn.pos IS NULL
+
+ INNER JOIN `returnorder_quantity` AS rq
+ ON lp.id = rq.delivery_note_id AND IFNULL(sn.seriennummer, '') = rq.serialnumber
+ AND IFNULL(rq.quantity,0) > 0 AND IFNULL(batch.charge,'') = rq.batch AND IFNULL(bbf.mhd,'') = rq.bestbefore
+ WHERE (l.adresse='$addressId' AND (l.status='versendet' OR l.status='freigegeben')
+ AND a.lagerartikel=1) "
+ .$this->app->erp->ProjektRechte()
+ ."ORDER BY l.datum, l.id, lp.sort,sn.seriennummer";
+
+ $positions = $this->app->DB->SelectArr($sql);
+ if(empty($positions)) {
+ return new JsonResponse(['status' => 0, 'error' => 'Position nicht gefunden']);
+ }
+ /** @var Retoure $returnOrderObj */
+ $returnOrderObj = $this->app->erp->LoadModul('retoure');
+ if($returnOrderObj === null) {
+ return new JsonResponse(['status' => 0, 'error' => 'Retourenmodul nicht gefunden oder deaktiviert']);
+ }
+ $returnOrderId = $this->app->erp->CreateRetoure($addressId);
+ $this->app->erp->LoadRetoureStandardwerte($returnOrderId, $addressId);
+ $this->app->erp->RetoureProtokoll($returnOrderId, 'Retoure angelegt');
+ foreach($positions as $position) {
+ $this->app->DB->Insert("INSERT INTO retoure_position (id) VALUES (NULL)");
+ $newposid = $this->app->DB->GetInsertID();
+ $idtoid[$position['id']] = $newposid;
+ $artikelarr[$newposid] = $position['artikel'];
+ $position['lieferschein_position_id'] = $position['id'];
+ if(!empty($position['explodiert_parent'])) {
+ $position['explodiert_parent'] =
+ isset($idtoid[$position['explodiert_parent']])
+ ? $idtoid[$position['explodiert_parent']] : 0;
+ }
+ $position['retoure'] = $returnOrderId;
+ $position['menge'] = $position['quantity'];
+ $this->app->DB->Delete(sprintf('DELETE FROM `returnorder_quantity` WHERE `id` = %d', $position['rqid']));
+ $serialnumber = (string)$position['serialnumber'];
+ $bestbefore = (string)$position['bestbefore'];
+ $batch = (string)$position['batch'];
+ if(!empty($bestbefore)) {
+ $batch = ltrim(substr($bestbefore,10),'-');
+ $bestbefore = substr($bestbefore,0,10);
+ if(strpos($bestbefore, '.') !== false) {
+ $bestbefore = $this->app->String->Convert($bestbefore,'%1.%2.%3','%3-%2-%1');
+ }
+ }
+ unset($position['quantity'], $position['rqid'], $position['serialnumber'],$position['lagertext']);
+ $this->app->DB->UpdateArr('retoure_position', $newposid,'id', $position, true);
+ if($serialnumber !== '' && $serialnumber !== '0') {
+ $this->app->erp->CreateBelegPositionMHDCHARGESRN(
+ 'retoure',$returnOrderId,$newposid,'sn',$serialnumber,1
+ );
+ }
+ elseif(!empty($bestbefore)) {
+ if(!empty($batch)) {
+ $this->app->erp->CreateBelegPositionMHDCHARGESRN(
+ 'retoure',$returnOrderId,$newposid,'mhd',$bestbefore,$position['menge'],'charge', $batch
+ );
+ $this->app->erp->CreateBelegPositionMHDCHARGESRN(
+ 'retoure',$returnOrderId,$newposid,'charge',$batch,$position['menge']
+ );
+ }
+ else {
+ $this->app->erp->CreateBelegPositionMHDCHARGESRN(
+ 'retoure',$returnOrderId,$newposid,'mhd',$bestbefore,$position['menge']
+ );
+ }
+ }
+ elseif(!empty($batch)) {
+ $this->app->erp->CreateBelegPositionMHDCHARGESRN(
+ 'retoure',$returnOrderId,$newposid,'charge',$batch,$position['menge']
+ );
+ }
+ }
+ $this->app->erp->BelegFreigabe('retoure', $returnOrderId);
+
+ return new JsonResponse( [
+ 'status' => 1,
+ 'url' =>
+ 'index.php?module=wareneingang&action=distriinhalt&cmd=createreceiptdocumentreturnorder&id='
+ .$returnOrderId
+ ]);
+ }
+
+ /**
+ * @return JsonResponse
+ */
+ protected function HandleChangeQtyAjaxAction()
+ {
+ $dnpid = (int)$this->app->Secure->GetPOST('dnpid');
+ $dnp = $dnpid <= 0?null:$this->app->DB->SelectRow(
+ sprintf(
+ 'SELECT dn.* FROM `lieferschein_position` AS `dn` WHERE dn.id = %d LIMIT 1',
+ $dnpid
+ )
+ );
+ if(empty($dnp)) {
+ return new JsonResponse(
+ ['status' => 0, 'error' => 'Position nicht gefunden']
+ );
+ }
+
+ $serialnumber = $this->app->Secure->GetPOST('serialnumber');
+ $batch = $this->app->Secure->GetPOST('batch');
+ $bestbefore = $this->app->Secure->GetPOST('bestbefore');
+ $qty = str_replace(',', '.', $this->app->Secure->GetPOST('value'));
+ if(round($qty,4) > round($dnp['menge'],4)) {
+ return new JsonResponse(['status' => 0, 'error' => 'Die Menge ist zu groß']);
+ }
+ $check = $this->app->DB->SelectRow(
+ sprintf(
+ "SELECT rq.*
+ FROM `returnorder_quantity` AS `rq`
+ WHERE rq.delivery_note_id = %d AND rq.serialnumber = '%s'
+ AND rq.bestbefore = '%s' AND rq.batch = '%s' ",
+ $dnpid, $serialnumber, $bestbefore, $batch
+ )
+ );
+ if(empty($check) && $qty !== ''){
+ $this->app->DB->Insert(
+ sprintf(
+ "INSERT INTO `returnorder_quantity`
+ (`delivery_note_id`, `quantity`, `serialnumber`,`bestbefore`,`batch`)
+ VALUES (%d, %f, '%s','%s','%s') ",
+ $dnpid, $qty, $serialnumber, $bestbefore, $batch
+ )
+ );
+ }
+ elseif(!empty($check)){
+ $this->app->DB->Update(
+ sprintf(
+ "UPDATE `returnorder_quantity` SET `quantity` = %s WHERE `id` = %d",
+ $qty !== '' ? (float)$qty : 'NULL', $check['id']
+ )
+ );
+ }
+
+ return new JsonResponse(['status' => 1]);
+ }
+
+ /**
+ * @param int $returnOrderId
+ *
+ * @return array
+ */
+ public function getNextReturnOrderPosition($returnOrderId)
+ {
+ return (array)$this->app->DB->SelectRow(
+ sprintf(
+ "SELECT `rop`.*, art.seriennummern, art.chargenverwaltung, art.mindesthaltbarkeitsdatum
+ FROM `retoure_position` AS `rop`
+ INNER JOIN `artikel` AS `art` ON rop.artikel = art.id AND (art.geloescht = 0 OR art.geloescht IS NULL)
+ INNER JOIN `retoure` AS `ro` ON rop.retoure = ro.id AND ro.status <> 'storniert' AND ro.belegnr <> ''
+ WHERE `rop`.retoure = %d AND rop.menge_eingang < rop.menge %s
+ ORDER BY rop.sort, rop.id
+ LIMIT 1",
+ $returnOrderId, $this->app->erp->ProjektRechte('ro.projekt')
+ )
+ );
+ }
+
+ /**
+ * @param int|array $returnOrder
+ * @param null|int $id
+ *
+ * @return string
+ */
+ public function getNextReturnOrderLocation($returnOrder, $id = null)
+ {
+ if($id === null) {
+ $id = (int)$this->app->Secure->GetGET('id');
+ }
+ if(is_array($returnOrder)) {
+ $rop = $returnOrder;
+ $returnOrderId = $rop['retoure'];
+ }
+ else{
+ $returnOrderId = $returnOrder;
+ $rop = $this->getNextReturnOrderPosition($returnOrderId);
+ }
+ if(empty($rop)) {
+ return '';
+ }
+
+ $serial = '';
+ $serials = [];
+ $bestbefore = '';
+ $batch = '';
+ $amount = $rop['menge'] - $rop['eingang'];
+ $isSerial = !empty($rop['seriennummern']) && $rop['seriennummern'] !== 'keine';
+ $isBestBefore = !empty($rop['mindesthaltbarkeitsdatum']);
+ $isBatch = !empty($rop['chargenverwaltung']);
+ if($isSerial) {
+ $sns = $this->app->DB->SelectFirstCols(
+ sprintf(
+ "SELECT `wert`
+ FROM `beleg_chargesnmhd` AS `bc`
+ WHERE bc.doctype = 'retoure' AND bc.`doctypeid` = %d AND bc.pos = %d AND `type` = 'sn' AND `wert` <> ''",
+ $returnOrderId, $rop['id']
+ )
+ );
+
+ if(!empty($sns)) {
+ $serial = $sns[0];
+ $movements = $this->app->DB->SelectFirstCols(
+ sprintf(
+ "SELECT sl.bezeichnung
+ FROM `seriennummern_log` AS `sl`
+ WHERE `doctype` = 'retoure' AND `doctypeid` = %d AND `artikel` = %d AND `eingang` = 1",
+ $returnOrderId, $rop['artikel']
+ )
+ );
+
+ foreach($sns as $sn) {
+ if(!in_array($sn, $movements)) {
+ $serials[] = $sn;
+ }
+ }
+ if(!empty($serials)) {
+ $serial = reset($serials);
+ }
+ }
+ }
+ elseif($isBestBefore) {
+ if($isBatch) {
+ $sns = $this->app->DB->SelectPairs(
+ sprintf(
+ "SELECT CONCAT(`wert`, IF(`type2` = 'charge',CONCAT('-', `wert2`),'')), `menge`
+ FROM `beleg_chargesnmhd` AS `bc`
+ WHERE bc.doctype = 'retoure' AND bc.`doctypeid` = %d AND bc.pos = %d AND `type` = 'mhd'",
+ $returnOrderId, $rop['id']
+ )
+ );
+ }
+ else{
+ $sns = $this->app->DB->SelectPairs(
+ sprintf(
+ "SELECT `wert`, `menge`
+ FROM `beleg_chargesnmhd` AS `bc`
+ WHERE bc.doctype = 'retoure' AND bc.`doctypeid` = %d AND bc.pos = %d AND `type` = 'mhd'",
+ $returnOrderId, $rop['id']
+ )
+ );
+ }
+ if(!empty($sns)) {
+ $movements = $this->app->DB->SelectFirstCols(
+ sprintf(
+ "SELECT CONCAT(ml.mhddatum,'-',IFNULL(ml.charge,''))
+ FROM `mhd_log` AS `ml`
+ WHERE `doctype` = 'retoure' AND `doctypeid` = %d AND `artikel` = %d AND `eingang` = 1",
+ $returnOrderId, $rop['artikel']
+ )
+ );
+ $bestbefores = array_keys($sns);
+ $bestbefore = reset($bestbefores);
+
+ foreach ($sns as $sn => $bestBeforeAmount) {
+ if(!in_array($sn, $movements)) {
+ $bestbefore = $sn;
+ if($bestBeforeAmount < $amount) {
+ $amount = $bestBeforeAmount;
+ }
+ break;
+ }
+ }
+ if(strlen($bestbefore) >= 10) {
+ $batch = substr($bestbefore, 10);
+ $bestbefore = substr($bestbefore, 0, 10);
+ if(strpos($bestbefore, '.') === false) {
+ $bestbefore = $this->app->String->Convert($bestbefore,'%1-%2-%3', '%3.%2.%1');
+ }
+ $bestbefore .= $batch;
+ }
+ }
+ }
+ elseif($isBatch) {
+ $sns = $this->app->DB->SelectPairs(
+ sprintf(
+ "SELECT `bc`.wert, `bc`.menge
+ FROM `beleg_chargesnmhd` AS `bc`
+ WHERE bc.doctype = 'retoure' AND bc.`doctypeid` = %d AND bc.pos = %d AND `type` = 'charge'",
+ $returnOrderId, $rop['id']
+ )
+ );
+ if(!empty($sns)){
+ $movements = $this->app->DB->SelectFirstCols(
+ sprintf(
+ "SELECT cl.bezeichnung
+ FROM `chargen_log` AS `cl`
+ WHERE `doctype` = 'retoure' AND `doctypeid` = %d AND `artikel` = %d AND `eingang` = 1",
+ $returnOrderId, $rop['artikel']
+ )
+ );
+ $batchess = array_keys($sns);
+ $batch = reset($batchess);
+
+ foreach ($sns as $sn => $batchAmount) {
+ if(!in_array($sn, $movements)) {
+ $batch = $sn;
+ if($batchAmount < $amount) {
+ $amount = $batchAmount;
+ }
+ break;
+ }
+ }
+ }
+ }
+ $serialsUrl = '';
+ if(!empty($serials)) {
+ foreach($serials as $serialVal) {
+ $serialsUrl .= '&seriennummer[]='.urlencode($serialVal);
+ }
+ }
+ elseif(!empty($serial)) {
+ $serialsUrl .= '&seriennummer[]='.urlencode($serial);
+ }
+ return sprintf(
+ 'index.php?module=wareneingang&action=distrietiketten&id=%d&retourepos=%d&menge=%f%s&mhd=%s&charge=%s',
+ $id, $rop['id'], $amount, $serialsUrl, urlencode($bestbefore), urlencode($batch)
+ );
+
+ }
+
+ /**
+ * @param int $returnOrderId
+ */
+ public function LocatateToReturnOrderPosition($returnOrderId)
+ {
+ $id = $this->app->Secure->GetGET('id');
+
+ $ropLink = $this->getNextReturnOrderLocation($returnOrderId, $id);
+ if(!empty($ropLink)) {
+ $this->app->Location->execute($ropLink);
+ }
+
+ $userReturnOrder = $this->app->User->GetParameter('wareneingang_from_returnorder');
+ if($userReturnOrder != $returnOrderId) {
+ return;
+ }
+ $module = $this->app->User->GetParameter('wareneingang_from_module');
+ if(empty($module)) {
+ return;
+ }
+ $action = $this->app->User->GetParameter('wareneingang_from_action');
+ if(empty($action)) {
+ return;
+ }
+ $this->app->User->SetParameter('wareneingang_from_returnorder', '');
+ $this->app->User->SetParameter('wareneingang_from_module', '');
+ $this->app->User->SetParameter('wareneingang_from_action', '');
+ if($module !== 'retoure') {
+ $id = '';
+ }
+ $this->app->Location->execute('index.php?module='.$module.'&action='.$action.'&id='.$id);
+ }
+
+ public function WareneingangPaketDistriInhalt()
+ {
+
+ $this->WareneingangPaketMenu();
+
+ $id = $this->app->Secure->GetGET('id');
+ $cmd = $this->app->Secure->GetGET('cmd');
+ $lsnr = $this->app->Secure->GetPOST('lsnr');
+ $renr = $this->app->Secure->GetPOST('renr');
+ $bemerkung = $this->app->Secure->GetPOST('bemerkung');
+
+ // Load from DB
+ if (($lsnr == '' || $renr == '' || $bemerkung == '') && $id != '') {
+ $fields = $this->app->DB->SelectArr(
+ sprintf(
+ 'SELECT `lsnr`, `renr`,`bemerkung` FROM `paketannahme` WHERE `id` = %d LIMIT 1',
+ $id
+ ));
+
+ $lsnr = $fields[0]['lsnr'];
+ $renr = $fields[0]['renr'];
+ $bemerkung = $fields[0]['bemerkung'];
+ } else {
+
+ // Save header
+ $this->app->DB->Update(
+ "UPDATE paketannahme SET
+ lsnr='".$lsnr."',
+ renr='".$renr."',
+ bemerkung='".$bemerkung."'
+ WHERE id='$id' LIMIT 1");
+ }
+
+ $this->app->Tpl->Set('LSNR', $lsnr);
+ $this->app->Tpl->Set('RENR', $renr);
+ $this->app->Tpl->Set('BEMERKUNG', $bemerkung);
+
+ $isCmdFromReturnOrder = $cmd === 'fromreturnorder';
+ if($isCmdFromReturnOrder) {
+ /** @var Retoure $returnOrderObj */
+ $returnOrderObj = $this->app->loadModule('retoure');
+ if(!empty($returnOrderObj)) {
+ $receiptDocument = $returnOrderObj->getReceiptDocumentArrByParcelId($id);
+ if(!empty($receiptDocument['return_order_id'])) {
+ $this->LocatateToReturnOrderPosition($receiptDocument['return_order_id']);
+ }
+ }
+ }
+ if($cmd === 'createreturnorder') {
+ $response = $this->HandleCreateReturnOrderAjaxAction();
+ $response->send();
+ $this->app->ExitXentral();
+
+ }
+ if($cmd === 'changeqty') {
+ $response = $this->HandleChangeQtyAjaxAction();
+ $response->send();
+ $this->app->ExitXentral();
+ }
+ $this->app->erp->RunHook('wareneingang_distriinhalt_start', 1, $id);
+
+ $submit = $this->app->Secure->GetPOST('submit');
+ $submitkunde = $this->app->Secure->GetPOST('submitkunde');
+
+ if($submit!='') {
+ $tmp = $this->app->Secure->GetPOST('pos');
+ $tmpRetoure = $this->app->Secure->GetPOST('retourepos');
+ $col = 'pos';
+ if(!empty($tmpRetoure)) {
+ $tmp = $tmpRetoure;
+ $col= 'retourepos';
+ }
+ $pos = key($tmp);
+ $menge = str_replace(',','.',$tmp[$pos]);
+ $seriennummer = '';
+ $posa = explode('-', $pos, 2);
+ $pos = $posa[0];
+ if(isset($posa[1])){
+ $seriennummer = $posa[1];
+ }
+ if($menge<=0) {
+ $this->app->Tpl->Set('TAB1','Bitte geben Sie eine Menge an!
');
+ }
+ else {
+ if($pos > 0 && !empty($tmpRetoure) && $this->app->User->GetParameter('wareneingang_from_type') === 'manual') {
+ $returnOrder = $this->app->DB->Select(
+ sprintf(
+ "SELECT ro.*
+ FROM `retoure_position` AS `rop`
+ INNER JOIN `retoure` AS `ro` ON rop.retoure = ro.id
+ WHERE rop.`id` = %d AND `ro`.status <> 'angelegt' AND ro.status <> 'storniert'
+ AND rop.menge_eingang < rop.menge",
+ $pos
+ )
+ );
+ if(!empty($returnOrder['adresse'])) {
+ $receiptDocument = $this->app->DB->SelectRow(
+ sprintf(
+ "SELECT *
+ FROM `receiptdocument`
+ WHERE `return_order_id` = %d
+ ORDER BY `status` = '' OR `status` = 'angelegt' DESC
+ LIMIT 1",
+ $returnOrder['retoure']
+ )
+ );
+ if(empty($receiptDocument)) {
+ /** @var Retoure $obj */
+ $obj = $this->app->loadModule('retoure');
+ $parcelReceiptId = null;
+ if($obj !== null) {
+ $parcelReceiptId = $this->createParcelReceiptFromAdress($returnOrder['adresse']);
+ $receiptDocumentId = $obj->createReceiptDocument($returnOrder['adresse'], $parcelReceiptId);
+ $this->app->DB->Update(
+ sprintf(
+ 'UPDATE `receiptdocument` SET `return_order_id` = %d WHERE `id` = %d',
+ $returnOrder['id'], $receiptDocumentId
+ )
+ );
+ }
+ }
+ }
+ }
+ $this->app->Location->execute("index.php?module=wareneingang&action=distrietiketten&id=$id&$col=$pos&menge=$menge&seriennummer=".$seriennummer);
+ }
+ }
+
+
+ $adresse= $this->app->DB->Select(
+ sprintf(
+ 'SELECT `adresse` FROM `paketannahme` WHERE `id` = %d LIMIT 1',
+ $id
+ )
+ );
+
+ $addressRow = empty($adresse)?null: $this->app->DB->SelectRow(
+ sprintf(
+ 'SELECT `name`,`kundennummer`,`lieferantennummer`
+ FROM `adresse`
+ WHERE `id` = %d AND `geloescht` = 0
+ LIMIT 1',
+ $adresse
+ )
+ );
+
+ // pruefe ob
+ $lieferant = empty($addressRow)?null:$addressRow['lieferantennummer'];
+ $kunde= empty($addressRow)?null:$addressRow['kundennummer'];
+
+ $name= empty($addressRow)?null:$addressRow['name'];
+ $isSupplier = $lieferant!='' && $lieferant!='0';
+ $isCustomer = $kunde!='' && $kunde!='0';
+
+ if($isSupplier) {
+ //$this->app->Tpl->Set('TAB1TEXT','Bestellungen');
+ $this->app->Tpl->Set('TAB1TEXT','Bestellungen');
+ //$this->app->Tpl->Set('TAB1START','');
+ //$this->app->Tpl->Set('TAB1ENDE','
');
+
+ $this->app->Tpl->Add('TAB1',"
Offene Artikel aus Bestellungen bei $name:
");
+ $this->app->YUI->TableSearch('TAB1','wareneingang_lieferant','show','','',basename(__FILE__), __CLASS__);
+ }
+ else {
+ /*$this->app->Tpl->Set('TAB1START','');*/
+ $this->app->Tpl->Set('TAB1START','');
+ $this->app->Tpl->Set('TAB1ENDE','');
+ // $this->app->Tpl->Set('BEFORETAB1', '');
+ }
+
+ if(!$isSupplier && !$isCustomer) {
+ $this->app->Tpl->Set('TAB1START','');
+ $this->app->Tpl->Set('TAB1ENDE','');
+ $this->app->Tpl->Set('BEFORETAB1', '');
+ $this->app->Tpl->Set('AFTERTAB1', '');
+ $this->app->Tpl->Set(
+ 'TAB1',
+ 'Die ausgewählte Adresse hat noch keine Rolle Kunde oder Lieferant.
+ Bitte vergeben Sie diese, dann sehen Sie Bestellungen oder versendete Waren.
'
+ );
+ }
+
+
+ if (!empty($addressRow['name'])) {
+ $this->app->Tpl->Set('LEGENDE',"Paket Nr.$id erfassen für Adresse '".$addressRow['name']."':");
+ }
+
+ $this->app->Tpl->Add('TAB1_SECOND',"
Paketinhalt (eingebucht):
");
+ $this->app->YUI->TableSearch('TAB1_SECOND', 'paketdistribution_list', "show", "", "", basename(__FILE__), __CLASS__);
+
+ $this->app->erp->RunHook('wareneingang_distriinhalt', 1, $id);
+ if($showcreateReturnOrder) {
+ $this->app->Tpl->addButton(
+ 'BUTTONS2',
+ '✚ Retoure Anlegen',
+ '',
+ '',
+ 'newreturnorder button-primary button',
+ [
+ 'id'=>'newreturnorder',
+ 'data-id' => $id,
+ ]
+ );
+ }
+ if($this->app->User->GetParameter('wareneingang_action')==='distribution'){
+ $this->app->erp->MenuEintrag(
+ 'index.php?module=wareneingang&action=distribution',
+ 'zurück zur Übersicht'
+ );
+ }
+// if($isSupplier){
+ $this->app->Tpl->Parse('PAGE', 'wareneingangpaketdistribution.tpl');
+// }
+// else {
+// $this->app->Tpl->Parse('PAGE', 'wareneingangpaketdistribution2.tpl');
+// }
+ $returnordergeprueft = $this->app->Secure->GetPOST('returnordergeprueft');
+ $abschliessen = $this->app->Secure->GetPOST('abschliessen');
+ if($abschliessen!='' || $returnordergeprueft != '') {
+ // paketannahme auf abgeschlossen setzten
+
+ $returnOrderId = empty($returnordergeprueft)?null: $this->app->DB->Select(
+ sprintf(
+ 'SELECT return_order_id FROM receiptdocument WHERE parcel_receipt_id = %d',
+ $id
+ )
+ );
+
+ // Save header and finish
+ $this->app->DB->Update(
+ "UPDATE paketannahme SET
+ status='abgeschlossen',
+ lsnr='".$lsnr."',
+ renr='".$renr."',
+ bemerkung='".$bemerkung."'
+ WHERE id='$id' LIMIT 1");
+
+ $this->app->erp->RunHook('wareneinang_paketannahme_abschliessen',1, $id);
+ $this->app->Location->execute('index.php?module=wareneingang&action=paketannahme');
+ }
+
+ $manuellerfassen = $this->app->Secure->GetPOST('manuellerfassen');
+ if($manuellerfassen!='') {
+ $this->app->Location->execute('index.php?module=wareneingang&action=manuellerfassen&id='.$id);
+ }
+
+ }
+ // END WareneingangPaketDistriInhalt
+
+ public function WareneingangMiniDetail()
+ {
+ $id = $this->app->Secure->GetGET('id');
+ if($this->app->Secure->GetGET('cmd') === 'change') {
+ $beipack_lieferschein = (int)$this->app->Secure->GetPOST('beipack_lieferschein');
+ $beipack_rechnung = (int)$this->app->Secure->GetPOST('beipack_rechnung');
+ $renr = $this->app->Secure->GetPOST('renr');
+ $lsnr = $this->app->Secure->GetPOST('lsnr');
+ $this->app->DB->Update("UPDATE paketannahme SET renr = '$renr',lsnr = '$lsnr',beipack_lieferschein = '$beipack_lieferschein', beipack_rechnung = '$beipack_rechnung' WHERE id = '$id' LIMIT 1");
+ echo json_encode(array('status'=>1));
+ $this->app->ExitXentral();
+ }
+ $table = new EasyTable($this->app);
+ $table->Query("SELECT a.nummer, LEFT(a.name_de,30) as artikel, trim(lb.menge)+0 as menge FROM lager_bewegung lb
+ LEFT JOIN artikel a ON lb.artikel=a.id
+ WHERE lb.paketannahme='$id' ORDER by a.nummer");
+ $this->app->Tpl->Set('MD5', md5(microtime(true)));
+ $this->app->Tpl->Set('ID', $id);
+ $arr = $this->app->DB->SelectRow("SELECT * FROM paketannahme WHERE id = '$id' LIMIT 1");
+ if($arr) {
+ if($arr['beipack_rechnung']) {
+ $this->app->Tpl->Set('BEIPACK_RECHNUNG',' checked="checked" ');
+ }
+ if($arr['beipack_lieferschein']) {
+ $this->app->Tpl->Set('BEIPACK_LIEFERSCHEIN',' checked="checked" ');
+ }
+ $this->app->Tpl->Set('RENR', $arr['renr']);
+ $this->app->Tpl->Set('LSNR', $arr['lsnr']);
+ }
+ $table->DisplayNew('ARTIKEL','Menge','noAction');
+ $this->app->Tpl->Output('wareneingang_minidetail.tpl');
+ $this->app->ExitXentral();
+ }
+
+ public function WareneingangManuellErfassen()
+ {
+ $id = $this->app->Secure->GetGET('id');
+ $paket = $this->app->Secure->GetGET('paket');
+ $this->app->erp->MenuEintrag('index.php?module=wareneingang&action=distriinhalt&id='.$id,'Zurück zur Übersicht');
+ $this->app->erp->MenuEintrag('index.php?module=wareneingang&action=manuellerfassen&id='.$id,'Artikel');
+ $artikel = $this->app->Secure->GetPOST('artikel');
+ if($artikel) {
+ $artikelid = $this->app->DB->Select("SELECT a.id FROM artikel a LEFT JOIN projekt pr ON a.projekt = pr.id WHERE (a.nummer = '".$artikel."' OR a.herstellernummer = '".$artikel."' OR a.ean = '".$artikel."') AND a.geloescht = 0 ".$this->app->erp->ProjektRechte()." LIMIT 1");
+ if($artikelid) {
+ $this->app->Location->execute('index.php?module=wareneingang&action=distrietiketten&id='.(int)$id.'&pos='.$artikelid.'%&menge=1&cmd=manuell');
+ }
+ $this->app->Tpl->Add('MESSAGE','{|Der Artikel wurde nicht gefunden|}
');
+ }
+
+ $cmd = $this->app->Secure->GetGET('cmd');
+
+ if($cmd==='add') {
+ echo 'huhuh';
+ }
+ else {
+ $this->app->YUI->TableSearch('TAB1','wareneingangartikelmanuellerfassen','show','','',basename(__FILE__), __CLASS__);
+ }
+
+ //$this->WareneingangPaketMenu();
+ $this->app->Tpl->Parse('PAGE','wareneingang_manuellerfassen.tpl');
+ }
+
+ public function WareneingangPaketDistriEtikettenBildErfassen(){
+ $this->app->Tpl->Set('TAB1','Die Funktion hat keinen Inhalt. Sie dient lediglich zur Berechtigungserfassung.');
+ $this->app->Tpl->Parse('PAGE','tabview.tpl');
+ }
+
+ public function WareneingangPaketDistriEtiketten()
+ {
+ $id = $this->app->Secure->GetGET('id');
+ $pos = $this->app->Secure->GetGET('pos');
+ $retourepos = $this->app->Secure->GetGET('retourepos');
+ $artikelnummer = $this->app->Secure->GetGET('artikelnummer');
+ $seriennummer = $this->app->Secure->GetGET('seriennummer');
+ $menge = str_replace(',','.',$this->app->Secure->GetGET('menge'));
+ $nmenge = str_replace(',','.',$this->app->Secure->GetGET('nmenge'));
+ if($nmenge > 0) {
+ $menge = $nmenge;
+ }
+ $rma = $this->app->Secure->GetGET('rma');
+
+ $submit = $this->app->Secure->GetPOST('submit');
+ $lager = $this->app->Secure->GetPOST('lager');
+ $etiketten = $this->app->Secure->GetPOST('etiketten');
+ $anzahlauswahl = $this->app->Secure->GetPOST("anzahlauswahl");
+ $anzahl_fix = $this->app->Secure->GetPOST('anzahl_fix');
+ $anzahl_dyn = $this->app->Secure->GetPOST('anzahl_dyn');
+ $anzahl = $this->app->Secure->GetPOST('anzahl');
+ $bemerkung = $this->app->Secure->GetPOST('bemerkung');
+ $chargesnmhdbemerkung = $this->app->Secure->GetPOST('chargesnmhdbemerkung');
+ $wunsch= $this->app->Secure->GetPOST('wunsch');
+ $cmd= $this->app->Secure->GetGET('cmd');
+ $backaction = $this->app->Secure->GetGET('backaction');
+ $ismobile = $this->app->Secure->GetGET('ismobile');
+ $withZwischenlager = $ismobile || $this->app->erp->Firmendaten('wareneingang_zwischenlager')=='1';
+
+ if($cmd === 'scan') {
+ $lagerscan = $this->app->Secure->GetPOST('elagerscan');
+ if($lagerscan != '') {
+ $lagervorhanden = $this->app->DB->SelectRow(
+ "SELECT lp.id, CONCAT(l.bezeichnung,'->',lp.kurzbezeichnung) AS kurzbezeichnung
+ FROM lager_platz AS lp
+ INNER JOIN lager AS l ON lp.lager = l.id AND l.geloescht <> 1
+ WHERE lp.kurzbezeichnung = '$lagerscan' AND lp.geloescht <> 1
+ LIMIT 1"
+ );
+ if(!empty($lagervorhanden)){
+ echo json_encode(
+ array(
+ 'status'=>1,'id'=>$lagervorhanden['id'],'kurzbezeichnung'=>$lagervorhanden['kurzbezeichnung']
+ )
+ );
+ $this->app->ExitXentral();
+ }
+ $error = 'Gescanntes Regal existiert nicht';
+ echo json_encode(array('status'=>0,'statusText'=>$error));
+ $this->app->ExitXentral();
+ }
+ }
+
+ $this->app->Tpl->Set('ID',$id);
+ $weiterleitung = '';
+ if($cmd==='manuell'){
+ $this->app->DB->Update("UPDATE artikel SET lagerartikel='1' WHERE id='$pos' AND juststueckliste!=1 LIMIT 1");
+ $artikel = $pos;
+ $this->app->Tpl->Set('ANZAHLAENDERN'," 0) window.location.href=document.URL + '&menge=' + menge;\">");
+ //$this->app->Tpl->Set('SHOWANZAHLSTART',''); //BENE war auskommentiert
+ }
+ else if($cmd==='manuell') {
+ $artikel = $pos;
+ $mitarbeiter = $this->app->User->GetName();
+ $projekt = $this->app->DB->Select("SELECT projekt FROM artikel WHERE id='$artikel' LIMIT 1");
+ }
+ else {
+ $retarr = null;
+ $bparr = null;
+ //bestellung
+ // bestellung findet man raus ueber pos (bestellung)
+ $artikel = 0;
+ $projekt = 0;
+ $bestellung = 0;
+ $vpe = '';
+ $menge_bestellung = 0;
+ $menge_retoure = 0;
+ if(!empty($retourepos)) {
+ $retarr = $this->app->DB->SelectRow("SELECT * FROM retoure_position WHERE id='$retourepos' LIMIT 1");
+ }
+ else{
+ $bparr = $this->app->DB->SelectRow("SELECT * FROM bestellung_position WHERE id='$pos' LIMIT 1");
+ }
+ if(!empty($retarr)) {
+ $artikel = $retarr['artikel'];
+ $projekt = $retarr['projekt'];
+ $retoure = $retarr['retoure'];
+ $vpe = $retarr['vpe'];
+ $menge_retoure = $retarr['menge'];
+ }
+ elseif(!empty($bparr)){
+ $artikel = $bparr['artikel'];
+ $projekt = $bparr['projekt'];
+ $bestellung = $bparr['bestellung'];
+ $vpe = $bparr['vpe'];
+ $menge_bestellung = $bparr['menge'];
+ }
+ $adresse = $this->app->DB->Select("SELECT adresse FROM paketannahme WHERE id='$id' LIMIT 1");
+ $name = $this->app->DB->Select("SELECT name FROM adresse WHERE id='$adresse' AND geloescht=0 LIMIT 1");
+ $retoure_belegnr = '';
+ $bestellung_belegnr = '';
+ if(!empty($retourepos)) {
+ $mitarbeiter = $this->app->DB->Select("SELECT bearbeiter FROM retoure WHERE id='$retoure' LIMIT 1");
+ $retoure_belegnr = $this->app->DB->Select("SELECT belegnr FROM retoure WHERE id='$retoure' LIMIT 1");
+ }
+ else {
+ $mitarbeiter = $this->app->DB->Select("SELECT bearbeiter FROM bestellung WHERE id='$bestellung' LIMIT 1");
+ $bestellung_belegnr = $this->app->DB->Select("SELECT belegnr FROM bestellung WHERE id='$bestellung' LIMIT 1");
+ }
+ }
+ $standardlager = $this->app->DB->Select("SELECT lager_platz FROM artikel WHERE id='".$artikel."' LIMIT 1");
+ $withStandardlager = $standardlager > 0;
+
+ $artikelRow = $this->app->DB->SelectRow(
+ sprintf(
+ 'SELECT lagerartikel,mindesthaltbarkeitsdatum, seriennummern,nummer, name_de,
+ artikelcheckliste,funktionstest,endmontage,standardbild,shop,chargenverwaltung
+ FROM artikel WHERE id = %d LIMIT 1',
+ $artikel
+ )
+ );
+ $lagerartikel = $artikelRow['lagerartikel'];
+ $mindesthaltbarkeitsdatum = $artikelRow['mindesthaltbarkeitsdatum'];
+ $seriennummern = $artikelRow['seriennummern'];
+ if($seriennummern != '' && $seriennummern !== 'keine'){
+ $menge = (int)$menge;
+ }
+ $mitarbeiter_name = $this->app->DB->Select("SELECT name FROM adresse WHERE id='$mitarbeiter' AND geloescht=0 LIMIT 1");
+ $artikelcheckliste = !empty($artikelRow)?$artikelRow['artikelcheckliste']:$this->app->DB->Select("SELECT artikelcheckliste FROM artikel WHERE id='$artikel' LIMIT 1");
+ $funktionstest = !empty($artikelRow)?$artikelRow['funktionstest']:$this->app->DB->Select("SELECT funktionstest FROM artikel WHERE id='$artikel' LIMIT 1");
+ $endmontage = !empty($artikelRow)?$artikelRow['endmontage']:$this->app->DB->Select("SELECT endmontage FROM artikel WHERE id='$artikel' LIMIT 1");
+ $name_de = !empty($artikelRow)?$artikelRow['name_de']:$this->app->DB->Select("SELECT name_de FROM artikel WHERE id='$artikel' LIMIT 1");
+ $nummer = !empty($artikelRow)?$artikelRow['nummer']:$this->app->DB->Select("SELECT nummer FROM artikel WHERE id='$artikel' LIMIT 1");
+ $chargenverwaltung= !empty($artikelRow)?$artikelRow['chargenverwaltung']:$this->app->DB->Select("SELECT chargenverwaltung FROM artikel WHERE id='$artikel' LIMIT 1");
+ $standardbild = !empty($artikelRow)?$artikelRow['standardbild']:$this->app->DB->Select("SELECT standardbild FROM artikel WHERE id='$artikel' LIMIT 1");
+ $shopartikel = !empty($artikelRow)?$artikelRow['shop']:$this->app->DB->Select("SELECT shop FROM artikel WHERE id='$artikel' LIMIT 1");
+
+ if($standardbild==''){
+ $standardbild = $this->app->DB->Select("SELECT datei FROM datei_stichwoerter WHERE subjekt='Shopbild' AND objekt='Artikel' AND parameter='$artikel' LIMIT 1");
+ }
+
+ if(empty($retourepos)){
+ if(($menge > $menge_bestellung) && $cmd !== 'manuell'){
+ $this->app->Tpl->Add('MESSAGE', "Achtung! Es wurden mehr geliefert als in der aktuellen Position bestellt worden sind!
+
");
+ }
+ }
+ else{
+ if(($menge > $menge_retoure) && $cmd !== 'manuell'){
+ $this->app->Tpl->Add('MESSAGE', "Achtung! Es wurden mehr geliefert als in der aktuellen Position eingangen worden sind!
+
");
+ }
+ }
+
+ $bilderfassen = $this->app->erp->RechteVorhanden('wareneingang','distrietikettenbilderfassen');
+ $stichwoerter = $this->app->erp->getDateiTypen('artikel');
+ foreach ($stichwoerter as $stichwort){
+ $selected = '';
+ $vorauswahl = $this->app->erp->Firmendaten('wareneingangbildtypvorauswahl');
+ if ($stichwort['wert'] === $vorauswahl){
+ $selected = 'selected';
+ }
+ $this->app->Tpl->Add('BILDTYPEN','');
+ }
+ if(empty($bilderfassen)){
+ $this->app->Tpl->Set('BILDERFASSENSTART','');
+ }
+
+ if($standardbild == '') {
+ $this->app->Tpl->Set('SHOWIMGSTART','');
+ }
+
+ $mhdFrm = (string)$this->app->Secure->GetGET('mhd');
+ $chargeFrm = (string)$this->app->Secure->GetGET('charge');
+ if(strlen($mhdFrm) > 10) {
+ $chargeFrm = ltrim(substr($mhdFrm, 10),'-');
+ $mhdFrm = substr($mhdFrm, 0, 10);
+ }
+
+ if($chargenverwaltung !='2' && $chargenverwaltung != '1') {
+ $this->app->Tpl->Set('SHOWCHRSTART','');
+ }
+ else{
+ $this->app->Tpl->Set('CHARGEFRM', $chargeFrm);
+ }
+
+
+ if($mindesthaltbarkeitsdatum !='1') {
+ $this->app->Tpl->Set('SHOWMHDSTART','');
+ }
+ else {
+ $this->app->YUI->DatePicker('mhd');
+ $this->app->Tpl->Set('MHDFRM', $mhdFrm);
+ }
+
+ $this->app->Tpl->Set('SHOWSRNSTART','');
+ if($standardlager <=0){
+ $this->app->Tpl->Set('STANDARDLAGER', 'nicht definiert');
+ }
+ if(!empty($retarr) && !empty($retarr['default_storagelocation'])) {
+ $retarr['default_storagelocation'] = $this->app->DB->Select(
+ sprintf(
+ "SELECT kurzbezeichnung FROM lager_platz WHERE geloescht <> 1 AND id = %d and kurzbezeichnung <> ''",
+ $retarr['default_storagelocation']
+ )
+ );
+ }
+ if(!empty($retarr) && !empty($retarr['default_storagelocation'])) {
+ $this->app->Tpl->Set('LAGERPLACEHOLDER',' placeholder="'.
+ $retarr['default_storagelocation']
+ .'" ');
+ }
+ elseif($standardlager <=0) {
+ if($ismobile || $this->app->erp->Firmendaten('wareneingang_zwischenlager')=='1') {
+ $this->app->Tpl->Set('LAGERPLACEHOLDER',' placeholder="zwischenlager" ');
+ }
+ //$this->app->Tpl->Set('LAGER',$this->app->erp->GetSelectAsso($this->app->erp->GetLager(false, $ismobile),$lager));
+ }
+ else {
+ $this->app->Tpl->Set('STANDARDLAGER',$this->app->DB->Select("SELECT kurzbezeichnung FROM lager_platz WHERE id='".$standardlager."' LIMIT 1"));
+ if($ismobile || $this->app->erp->Firmendaten('wareneingang_zwischenlager')=='1') {
+ $this->app->Tpl->Set('LAGERPLACEHOLDER',' placeholder="zwischenlager" ');
+ }
+ else {
+ $this->app->Tpl->Set('LAGERPLACEHOLDER',' placeholder="Standardlager" ');
+ }
+ //$this->app->Tpl->Set('LAGER',$this->app->erp->GetSelectAsso($this->app->erp->GetLager(true, $ismobile),$lager));
+ }
+
+ if($submit=='') {
+ $tmpauswahl = $this->app->User->GetParameter('wareneingang_distrietiketten_etiketten');
+ if($tmpauswahl=='') {
+ $tmpauswahl='artikel_klein';
+ }
+ $this->app->Tpl->Set('ETIKETTEN',$this->app->erp->GetSelectAsso($this->app->erp->GetEtikett(),$tmpauswahl));
+ }
+ else {
+ $this->app->Tpl->Set('ETIKETTEN', $this->app->erp->GetSelectAsso($this->app->erp->GetEtikett(), $etiketten));
+ }
+
+ $this->app->Tpl->Set('MENGE',$menge);
+
+ if($this->app->erp->Firmendaten('standardetikettendrucker')>0) {
+ $this->app->Tpl->Set('ETIKETTENDRUCKEN','Etiketten drucken.');
+ $this->app->Tpl->Set('ANZAHL',0);
+ $this->app->Tpl->Set('TEXTBUTTON','Artikel einlagern');
+ }
+ else {
+ $this->app->Tpl->Set('SHOWANZAHLSTART','');
+
+ $this->app->Tpl->Set('ETIKETTENDRUCKENSTART','');
+ $this->app->Tpl->Set('TEXTBUTTON','Artikel einlagern');
+ $this->app->Tpl->Set('ANZAHL',0);
+ $this->app->Tpl->Set('ANZAHLCHECKED','checked');
+ }
+
+ $this->app->Tpl->Set('LIEFERANT',$name);
+ $this->app->Tpl->Set('MITARBEITER',$mitarbeiter_name);
+ $this->app->Tpl->Set('VPE',$vpe);
+ $this->app->Tpl->Set('NAME',$name_de);
+ $this->app->Tpl->Set('NUMMER',$nummer);
+ $this->app->Tpl->Set('DATEI',$standardbild);
+
+ $error = 0;
+ // Pflichfelder pruefen
+ if($mindesthaltbarkeitsdatum=='1' && $this->app->Secure->GetPOST('mhd')=='') {
+ $error++;
+ }
+
+ if(($chargenverwaltung=='2' || $chargenverwaltung=='1') && $this->app->Secure->GetPOST('charge')=='') {
+ $error++;
+ }
+ //vomprodukteinlagern hinzugefuegt 08.01.20 LG OS904009
+ if(($seriennummern !=='keine' && $seriennummern !=='vomprodukt' && $seriennummern !=='eigene' && $seriennummern != 'vomprodukteinlagern' && $seriennummern !='') && $rma!=='rma') {
+ $tmpcheck = $this->app->Secure->GetPOST('seriennummern');
+ for($checkser=0;$checkser < $menge; $checkser++) {
+ if($tmpcheck[$checkser]==''){
+ $error++;
+ }
+ }
+ }
+
+ if($rma==='rma') {
+ $error=0;
+ }
+
+ if($submit!='' && $error > 0) {
+ $this->app->Tpl->Add('MESSAGE','Achtung! Bitte alle Pflichtfelder ausfüllen!
');
+ }
+ // ende pflichtfelder pruefung
+
+ // $this->app->erp->MenuEintrag("index.php?module=wareneingang&action=distriinhalt&id=$id","zum Paketinhalt");
+ $this->app->erp->MenuEintrag("index.php?module=wareneingang&action=manuellerfassen&id=$id","Zurück zur Übersicht");
+ $this->app->erp->MenuEintrag("index.php?module=wareneingang&action=distrietiketten&id=$id","Artikel",true);
+
+ $typ = '';
+ //weiter mit paket bis fertig
+
+ if($rma==='rma') {
+ }
+ else {
+ if($lagerartikel && !$artikelcheckliste && !$funktionstest && !$endmontage) {
+ $this->app->erp->RunHook('wareneingang_display_hook_rma1', 3, $id, $pos, $menge);
+ $typ = 'lager';
+ $this->app->Tpl->Set('ANZAHLAENDERN'," 0) window.location.href=document.URL + '&nmenge=' + menge;\">");
+ //$this->app->Tpl->Add(TAB1TEXT,"Lagerartikel");
+
+ $this->app->YUI->AutoComplete('lager','lagerplatz',0,'&zwischenlager='.$withZwischenlager.'&withstandardlager='.$withStandardlager);
+ $this->app->Tpl->Parse('TAB1','wareneingangpaketdistribution_tab3_lager.tpl');
+ }
+ else if($artikelcheckliste || $funktionstest || $endmontage) {
+ }
+ else if (!$lagerartikel && !$artikelcheckliste && !$funktionstest && !$endmontage)
+ {
+ $typ = 'mitarbeiter';
+ $this->app->erp->RunHook('wareneingang_display_hook_rma1', 3, $id, $pos, $menge);
+ $this->app->Tpl->Add('TAB1TEXT','Kein Lagerartikel');
+ $this->app->Tpl->Parse('TAB1','wareneingangpaketdistribution_tab3_mitarbeiter.tpl');
+ }
+ else {
+ echo 'Diesen Fall gibt es nicht. Xentral Entwicklung kontaktieren!';
+ }
+ }
+
+ if($typ === 'lager' && $submit!='' && $error==0) {
+ if(empty($lager) && !empty($retarr) && !empty($retarr['default_storagelocation'])) {
+ $lager = $retarr['default_storagelocation'];
+ }
+ elseif(empty($lager)) {
+ if($standardlager <=0) {
+ if($ismobile || $this->app->erp->Firmendaten('wareneingang_zwischenlager')=='1') {
+ $lager = 'zwischenlager';
+ }
+ }
+ else {
+ if($ismobile || $this->app->erp->Firmendaten('wareneingang_zwischenlager')=='1') {
+ $lager = 'zwischenlager';
+ }
+ else {
+ $lager = 'standardlager';
+ }
+ }
+ }
+ if(empty($lager)) {
+ $error++;
+ }
+ else {
+ switch(strtolower($lager)) {
+ case 'zwischenlager':
+ $lager = 'zwischenlager';
+ if(!$withZwischenlager) {
+ $error++;
+ $this->app->Tpl->Add('MESSAGE1','Wareneingang mit Zwischenlager ist nicht aktiviert
');
+ }
+ break;
+ case 'standardlager':
+ $lager = $this->app->DB->Select(
+ sprintf(
+ 'SELECT lager_platz FROM artikel WHERE id = %d',
+ $artikel
+ )
+ );
+ $lager = empty($lager)?null: $this->app->DB->Select(
+ sprintf(
+ 'SELECT id FROM lager_platz WHERE id = %d AND geloescht <> 1',
+ $lager
+ )
+ );
+ if(empty($lager)) {
+ $error++;
+ $this->app->Tpl->Add('MESSAGE1','Der Artikel hat kein Standardlager
');
+ }
+ break;
+ default:
+ $frmLager = $lager;
+ $lager = $this->app->DB->Select(
+ sprintf(
+ "SELECT id
+ FROM lager_platz
+ WHERE kurzbezeichnung <> '' AND kurzbezeichnung = '%s' AND geloescht <> 1",
+ $frmLager
+ )
+ );
+ if(empty($lager) && is_numeric($frmLager)) {
+ $lager = $this->app->DB->Select(
+ sprintf(
+ "SELECT id
+ FROM lager_platz
+ WHERE kurzbezeichnung <> '' AND id = %d AND geloescht <> 1",
+ $frmLager
+ )
+ );
+ }
+ if(empty($lager)) {
+ $error++;
+ $this->app->Tpl->Add(
+ 'MESSAGE1',
+ 'Lagerplatz '.$frmLager.' wurde nicht gefunden
'
+ );
+ }
+ break;
+ }
+ }
+ }
+
+ //befehl ab ins lager, produktion oder mitarbeiter
+ if($submit!='' && $error==0) {
+ if (!empty($_FILES['wareneingangartikelbild']['tmp_name'])) {
+ $stichwort = $this->app->Secure->GetPOST('bildtyp');
+ $bildTitel = '';
+ $bildBeschreibung = '';
+ $chargeNummer = $this->app->Secure->GetPOST('charge');
+ $bildName = $_FILES['wareneingangartikelbild']['name'];
+ $this->app->erp->RunHook('wareneingang_chargenbildspeichern', 5, $nummer, $chargeNummer, $bildName, $bildTitel, $bildBeschreibung);
+ $fileid = $this->app->erp->CreateDatei($bildName, $bildTitel, $bildBeschreibung, '', $_FILES['wareneingangartikelbild']['tmp_name'], $this->app->User->GetName());
+ // stichwoerter hinzufuegen
+ if(!empty($this->app->Secure->GetPOST('charge'))){
+ $this->app->erp->AddDateiStichwort($fileid, $stichwort, 'Artikel', $artikel,false, $this->app->Secure->GetPOST('charge'),'Charge');
+ }else if(!empty($this->app->Secure->GetPOST('mhd'))){
+ $dstype = 'MHD';
+ try {
+ $mhddate = date_create_from_format('d.m.Y', $this->app->Secure->GetPOST('mhd'))->getTimestamp();
+ }catch (Exception $ex){
+ $mhddate='';
+ }
+ if($mhddate===''){
+ $dstype='';
+ }
+ $this->app->erp->AddDateiStichwort($fileid, $stichwort, 'Artikel', $artikel,false, $mhddate,$dstype);
+ }else{
+ $this->app->erp->AddDateiStichwort($fileid, $stichwort, 'Artikel', $artikel);
+ }
+ }
+
+ switch($typ) {
+ case 'lager':
+ if($anzahlauswahl==='fix') {
+ $druckanzahl = $anzahl_fix;
+ }
+ else {
+ $druckanzahl = $anzahl_dyn;
+ }
+ $name_de = $this->app->DB->Select("SELECT name_de FROM artikel WHERE id='$artikel' LIMIT 1");
+ $name_de = base64_encode($name_de);
+
+ $this->app->erp->LagerArtikelZusammenfassen($artikel);
+
+ //$etiketten AUSWAHL etiketten ob gross oder klein
+ if($this->app->erp->Firmendaten('standardetikettendrucker')>0) {
+ if($druckanzahl>0) {
+ $data['charge']=$this->app->Secure->GetPOST("charge");
+
+ // falls BE für Auftrag
+ if(!empty($retoure)) {
+ $auftragid = $this->app->DB->Select(
+ "SELECT a.id FROM retoure_position bp
+ LEFT JOIN auftrag_position ap ON bp.auftrag_position_id=ap.id
+ LEFT JOIN auftrag a ON a.id=ap.auftrag WHERE bp.retoure='$retoure' LIMIT 1");
+
+ $data['retoure'] = $this->app->DB->Select("SELECT belegnr FROM bestellung WHERE id='$retoure' LIMIT 1");
+
+ }
+ else{
+ $auftragid = $this->app->DB->Select("SELECT a.id FROM bestellung_position bp LEFT JOIN auftrag_position ap ON bp.auftrag_position_id=ap.id
+ LEFT JOIN auftrag a ON a.id=ap.auftrag WHERE bp.bestellung='$bestellung' LIMIT 1");
+
+ $data['bestellung'] = $this->app->DB->Select("SELECT belegnr FROM bestellung WHERE id='$bestellung' LIMIT 1");
+ }
+
+ if($auftragid>0) {
+ $belegnummer = $this->app->DB->Select("SELECT belegnr FROM auftrag WHERE id='$auftragid' LIMIT 1");
+ $data['belegnummer']=$belegnummer;
+ $data['auftragsnummer']=$belegnummer;
+ $data['auftrag']=$belegnummer;
+
+ $adresse = $this->app->DB->Select("SELECT adresse FROM auftrag WHERE id='$auftragid' LIMIT 1");
+ if($adresse > 0) {
+ $adressearr = $this->app->DB->SelectRow("SELECT * FROM adresse WHERE id='$adresse' LIMIT 1");
+ foreach($adressearr as $key=>$value) {
+ $data['adresse_'.$key]=$value;
+ }
+ }
+ }
+ $data['etiketten_menge']=$druckanzahl;
+ $data['menge']=$anzahl_fix;
+ $data['charge']=$this->app->Secure->GetPOST('charge');
+ $data['mhd2']=$this->app->Secure->GetPOST('mhd');
+
+ if($lager>0){
+ $data['lager_platz_einlagern'] = $this->app->DB->Select("SELECT kurzbezeichnung FROM lager_platz WHERE id='" . $lager . "' LIMIT 1");
+ }
+
+ //$data['seriennummer']="";
+ $tmpdataseriennummern=$this->app->Secure->GetPOST('seriennummern');
+
+ if($etiketten=='') {
+ $etiketten='artikel_klein';
+ }
+ if(!empty($tmpdataseriennummern) && is_array($tmpdataseriennummern) && (!empty($tmpdataseriennummern)?count($tmpdataseriennummern):0)>0) {
+ if($etiketten!=='keineetiketten') {
+ foreach($tmpdataseriennummern as $srn) {
+ $data['seriennummer']=$srn;
+ $druckanzahl = 1;
+ $this->app->erp->EtikettenDrucker($etiketten,$druckanzahl,'artikel',$artikel,$data);
+ }
+ }
+ }
+ else {
+ if($etiketten!=='keineetiketten'){
+ $this->app->erp->EtikettenDrucker($etiketten, $druckanzahl, 'artikel', $artikel, $data);
+ }
+ }
+ $this->app->User->SetParameter('wareneingang_distrietiketten_etiketten',$etiketten);
+ }
+ }
+
+ $zid = 0;
+ if($chargenverwaltung=='2' || $chargenverwaltung=='1') {
+ $charge = $this->app->Secure->GetPOST('charge');
+ $chargemindest = $charge;
+ }
+ else {
+ $ch = 0;
+ }
+ $doctype = !empty($retoure)?'retoure':'';
+ $doctypeId = !empty($retoure)?$retoure:0;
+ if(empty($doctypeId)) {
+ $doctypeId = !empty($bestellung)?$bestellung:$id;
+ }
+ if($doctype === '') {
+ $doctype =!empty($bestellung)?'bestellung':'paketannahme';
+ }
+ // entweder ins zwischenlager
+ if(strtolower($lager)==='zwischenlager') {
+ if(!empty($retoure)) {
+ $this->app->DB->Insert("INSERT INTO zwischenlager (id,bearbeiter,projekt,artikel,menge,vpe,grund,lager_von,richtung,objekt,parameter,firma,paketannahme)
+ VALUES ('','" . $this->app->User->GetName() . "','$projekt','$artikel','$menge','$vpe','Wareneingang von Retoure $retoure_belegnr','Wareneingang','Eingang',
+ 'Retoure','$retoure','" . $this->app->User->GetFirma() . "','$id')");
+ }
+ else{
+ $this->app->DB->Insert("INSERT INTO zwischenlager (id,bearbeiter,projekt,artikel,menge,vpe,grund,lager_von,richtung,objekt,parameter,firma,paketannahme)
+ VALUES ('','" . $this->app->User->GetName() . "','$projekt','$artikel','$menge','$vpe','Wareneingang von Bestellung $bestellung_belegnr','Wareneingang','Eingang',
+ 'Bestellung','$bestellung','" . $this->app->User->GetFirma() . "','$id')");
+ }
+ $typ = 'zwischenlager';
+ $zid = $this->app->DB->GetInsertID();
+ $typ2 = 'zwischenlager';
+ $tmpid2 = $zid;
+ }
+ // oder direkt ins manuelle (lagerplatz + lager_bewegung)
+ else {
+ if(strtolower($lager)==='standardlager'){
+ $lager = $this->app->DB->Select("SELECT lager_platz FROM artikel WHERE id='" . $artikel . "' LIMIT 1");
+ }
+
+ if($lager<=0){
+ $lager = $this->app->DB->Select("SELECT id FROM lager_platz WHERE autolagersperre!=1 AND verbrauchslager!=1 AND geloescht!=1 LIMIT 1");
+ }
+
+ if($lager==='zwischenlager'){
+ $lagerplatz = 0;
+ }
+ else{
+ $lagerplatz = $lager;
+ }
+
+ /*
+ //$charge = $this->app->Secure->GetPOST("charge");
+ /*if(false && $chargenverwaltung=="1")
+ {
+ // wenn chargenverwaltung dann chargen id holen!!!! und mit bei lagerung und etikett speichern!
+ $this->app->DB->Insert("INSERT INTO chargenverwaltung (id,artikel,bestellung,menge,vpe,zeit,bearbeiter)
+ VALUES ('','$artikel','$bestellung','$menge','$vpe',NOW(),'".$this->app->User->GetName()."')");
+ // drucken (inkl. chargennummer)
+ $ch = $this->app->DB->GetInsertID();
+ $chargemindest = $ch;
+ } else*/
+
+ if(!empty($retoure)) {
+ $url = null;
+ $this->app->erp->RunHook(
+ 'wareneingang_before_stock_in_return_order', 7, $id, $retoure, $retourepos, $artikel, $menge, $lager, $url
+ );
+ if(!empty($url)) {
+ $this->app->Location->execute($url);
+ }
+ $this->app->erp->LagerEinlagern(
+ $artikel, $menge, $lager, '', 'Wareneingang von Retoure '.$retoure_belegnr, '', $id,'retoure',$retoure
+ );
+ }
+ else {
+ if($cmd === 'manuell') {
+ $this->app->erp->LagerEinlagern($artikel, $menge, $lager, '', "Wareneingang Paket $id", '', $id);
+
+ $lagerplatz_name = $this->app->DB->Select("SELECT kurzbezeichnung FROM lager_platz WHERE lager_platz.id = $lager LIMIT 1");
+ $bemerkung = $lagerplatz_name;
+ }
+ else{
+ $this->app->erp->LagerEinlagern($artikel, $menge, $lager, '', "Wareneingang Paket $id, Bestellung $bestellung_belegnr", '', $id);
+ $this->app->erp->RunHook('wareneingang_bestellung', 5, $bparr, $artikel, $menge, $lager, $id);
+ }
+ }
+ $typ2 = 'lager_platz';
+ $tmpid2 = array('artikel'=>$artikel,'lager_platz'=>$lager,'menge'=>$menge);
+ }
+
+ $_adresse = $this->app->DB->Select("SELECT adresse FROM paketannahme WHERE id = '$id' LIMIT 1");
+ $this->app->erp->RunHook('wareneingang_lager_submit', 8, $_adresse, $artikel, $menge,$lagerplatz,$mhd,$chargemindest, $tmpcheck, $weiterleitung);
+
+
+ $this->app->erp->RunHook('wareneingang_after', 3, $id, $typ2, $tmpid2);
+ break;
+ case 'mitarbeiter':
+ // buchen als mitarbeiter inventar auf das projekt was angegeben ist
+ // wenn mitarbeiterartikel muss artikel als inventar dem mitarbeiter gebucht werden fuer projekt bla bla
+ $this->app->DB->Insert("INSERT INTO projekt_inventar (id,artikel,menge,projekt,mitarbeiter,bestellung,zeit,vpe)
+ VALUES('','$artikel','$menge','$projekt','$mitarbeiter','$bestellung',NOW(),'$vpe')");
+ $projekt_inventar_id = $this->app->DB->GetInsertID();
+ $this->app->erp->RunHook('wareneingang_after', 3, $id, $typ, $projekt_inventar_id);
+ break;
+ //$this->app->erp->RunHook('wareneingang_mitarbeiter_submit', 6, $mitarbeiter, $bestellung, $projekt, $artikel, $menge, $weiterleitung);
+
+ default:
+ echo 'ACHTUNG DAS DARF NICHT PASSIEREN!! XENTRAL ENTWICKLUNG HOLEN! FEHLER IM PROGRAMM?';
+ }
+
+ if($typ!=='rma' && $cmd !== 'manuell') {
+
+ // Distribution speichern!
+ $this->app->DB->Insert("INSERT INTO paketdistribution
+ (id,bearbeiter,zeit,paketannahme,adresse,artikel,menge,vpe,etiketten,bemerkung,bestellung_position)
+ VALUES ('','".$this->app->User->GetName()."',NOW(),'$id','$adresse','$artikel','$menge','$vpe','$etiketten','$bemerkung','$pos')");
+ $pdId = $this->app->DB->GetInsertID();
+ if(!empty($retourepos)) {
+ $this->app->DB->Update(
+ sprintf(
+ 'UPDATE paketdistribution SET bestellung_position = 0, retoure_position = %d WHERE id = %d',
+ $retourepos, $pdId
+ )
+ );
+ }
+
+ // anzahl gelieferte erhoehen bestellung_position !!!
+ if(!empty($retourepos)) {
+ $geliefert = $this->app->DB->Select("SELECT ifnull(menge_eingang,0) FROM retoure_position WHERE id='$retourepos' LIMIT 1");
+ //$gesamt_erwartet = $this->app->DB->Select("SELECT menge FROM bestellung_position WHERE id='$pos' LIMIT 1");
+ $geliefert += $menge;
+ $this->app->DB->Update("UPDATE retoure_position SET menge_eingang='$geliefert' WHERE id='$retourepos' LIMIT 1");
+ $this->app->DB->Update(
+ sprintf(
+ "UPDATE retoure
+ SET fortschritt = 'eingegangen'
+ WHERE id = %d AND IFNULL(fortschritt,'') IN ('angekuenigt','angekuendigt','') ",
+ $retoure
+ )
+ );
+ }
+ else{
+ $geliefert = $this->app->DB->Select("SELECT ifnull(geliefert,0) FROM bestellung_position WHERE id='$pos' LIMIT 1");
+ //$gesamt_erwartet = $this->app->DB->Select("SELECT menge FROM bestellung_position WHERE id='$pos' LIMIT 1");
+ $geliefert += $menge;
+ $this->app->DB->Update("UPDATE bestellung_position SET geliefert='$geliefert' WHERE id='$pos' LIMIT 1");
+ }
+ } else if ($cmd == 'manuell') {
+ // Save the manually added entries to paketdistribution
+ $this->app->DB->Insert("INSERT INTO paketdistribution
+ (id,bearbeiter,zeit,paketannahme,adresse,artikel,menge,vpe,etiketten,bemerkung)
+ VALUES ('','".$this->app->User->GetName()."',NOW(),'$id','$adresse','$artikel','$menge','$vpe','$etiketten','$bemerkung')");
+
+ }
+
+
+ // alles passt weiter im abschluss
+ if($weiterleitung) {
+ $this->app->Location->execute($weiterleitung);
+ }
+ else {
+ if(!empty($backaction) && $backaction === 'paketannahme') {
+ $this->app->Location->execute('index.php?module=wareneingang&action='.$backaction);
+ }
+ if(!empty($retoure) && !empty($retourepos)) {
+ $all = $this->app->YUI->TableSearch('', 'paketannahme_retoure','ALL','','',basename(__FILE__),__CLASS__);
+ $sorts = $this->app->DB->SelectPairs(
+ sprintf(
+ "SELECT id,sort FROM retoure_position WHERE retoure = %d",
+ $retoure
+ )
+ );
+ $actSort = !empty($sorts[$retourepos])?$sorts[$retourepos]:0;
+ $positions = $this->app->DB->SelectArr(
+ $all['sql'].' WHERE '.$all['where']
+ . sprintf(' ORDER BY bp.menge - bp.menge_eingang <= 0,
+ bp.menge_eingang <> 0,
+ bp.id = %d,
+ bp.sort <= %d ', $retourepos, $actSort)
+ );
+
+ if(!$this->app->DB->Select(
+ sprintf(
+ "SELECT `id` FROM `retoure_position` WHERE `retoure` = %d AND `menge` > `menge_eingang`",
+ $retoure
+ )
+ )
+ ) {
+ $positions = null;
+ }
+
+ if(!empty($positions)) {
+ foreach($positions as $position) {
+ $position['eingang'] = str_replace(',','.', $position['eingang']);
+ $position['offen'] = str_replace(',','.', $position['offen']);
+ if($position['offen'] > 0) {
+ $returnOrderId = (int)$this->app->DB->Select(
+ sprintf(
+ 'SELECT `retoure` FROM `retoure_position` WHERE `id` = %d',
+ $position['id']
+ )
+ );
+ if(!empty($doctypeId) && (int)$doctypeId !== $returnOrderId) {
+ continue;
+ }
+ if($returnOrderId <= 0 || $this->app->User->GetParameter('wareneingang_from_type') === 'manual') {
+ $rop = null;
+ }
+ else{
+ $rop = $this->getNextReturnOrderPosition($returnOrderId);
+ }
+ if(!empty($rop) && $rop['id'] == $position['id']) {
+ $loc = $this->getNextReturnOrderLocation($returnOrderId, $id);
+ if(!empty($loc)) {
+ $this->app->Location->execute($loc);
+ }
+ }
+ if($this->app->User->GetParameter('wareneingang_from_type') === 'manual') {
+ $this->app->Location->execute(
+ 'index.php?module=wareneingang&action=distriinhalt&cmd=fromreturnordermanual&id='.$id
+ );
+ }
+
+ $this->app->Location->execute(
+ 'index.php?module=wareneingang&action=distrietiketten&id='
+ .$id.'&retourepos='
+ .$position['id'].'&menge='.$position['offen']
+ .'&seriennummer=&nmenge='.$position['offen']
+ );
+ }
+ }
+ }
+ $pos = $retourepos;
+ }
+ $receiptDocument = $this->app->DB->SelectRow(
+ sprintf(
+ 'SELECT `id`, `status` FROM `receiptdocument` WHERE `return_order_id` = %d LIMIT 1', empty($returnOrderId)?$retoure:$returnOrderId
+ )
+ );
+ $receiptDocumentId = empty($receiptDocument)?0:(int)$receiptDocument['id'];
+ $returnOrderComplete = !empty($retoure) && !empty($retourepos) && $positions === null;
+ if(!empty($receiptDocumentId)
+ && ($returnOrderComplete || in_array($receiptDocument['status'], ['fertiggestellt', 'abgeschlossen']))
+ ) {
+ $url = '';
+ $this->app->erp->RunHook('receiptdocument_close', 2, $receiptDocumentId, $url);
+ if(!empty($url) && $url !== 'index.php') {
+ $this->app->Location->execute(
+ "index.php?module=wareneingang&action=distriabschluss&id=$id&pos=$pos&typ=$typ&rma=$rma"
+ .(!empty($doctype)?'&doctype='.$doctype:'').'&locateto='.urlencode($url)
+ );
+ }
+ }
+
+ $this->app->Location->execute(
+ "index.php?module=wareneingang&action=distriabschluss&id=$id&pos=$pos&typ=$typ&rma=$rma"
+ .(!empty($doctype)?'&doctype='.$doctype:'')
+ );
+ }
+ }
+
+ $this->app->Tpl->Set('AKTIV_TAB2','tabs-1');
+ $this->app->Tpl->Parse('PAGE','wareneingang_distrietiketten.tpl');
+ }
+
+
+ public function WareneingangPaketDistriAbschluss()
+ {
+ $id = $this->app->Secure->GetGET('id');
+ $doctype = $this->app->Secure->GetGET('doctype');
+ $pos = $this->app->Secure->GetGET('pos');
+ $locateTo = $this->app->Secure->GetGET('locateto');
+ $fromDoctype = '';
+ if($doctype === 'bestellung') {
+ $fromDoctype = '&from=bestellung';
+ }
+ elseif($doctype === 'retoure') {
+ $fromDoctype = '&from=retoure';
+
+ if($this->app->User->GetParameter('wareneingang_from') === 'retoure') {
+ $all = $this->app->YUI->TableSearch(
+ 'TAB1', 'paketannahme_retoure', 'ALL', '', '', basename(__FILE__), __CLASS__
+ );
+ if(!$this->app->DB->Select($all['sql'].' WHERE '.$all['where']. ' LIMIT 1')) {
+ $this->app->User->SetParameter('wareneingang_from', '');
+ $retoure = $this->app->DB->Select(sprintf('SELECT `retoure` FROM `retoure_position` WHERE `id` = %d', $pos));
+ $userReturnOrder = $this->app->User->GetParameter('wareneingang_from_returnorder');
+ $module = $this->app->User->GetParameter('wareneingang_from_module');
+ $action = $this->app->User->GetParameter('wareneingang_from_action');
+
+ if($retoure == $userReturnOrder && !empty($module) && !empty($action)) {
+ $this->app->User->SetParameter('wareneingang_from_returnorder', '');
+ $this->app->User->SetParameter('wareneingang_from_module', '');
+ $this->app->User->SetParameter('wareneingang_from_action', '');
+ if($module !== 'retoure') {
+ $retoure = '';
+ }
+ if(!empty($locateTo)) {
+ if($this->app->Location->getLocationUrl($locateTo) !== 'index.php'){
+ $this->app->Location->execute($locateTo);
+ }
+ }
+ $this->app->Location->execute('index.php?module='.$module.'&action='.$action.'&id='.$retoure);
+ }
+ if(!empty($locateTo)) {
+ if($this->app->Location->getLocationUrl($locateTo) !== 'index.php') {
+ $this->app->Location->execute($locateTo);
+ }
+ }
+ $this->app->Location->execute('index.php?module=retoure&action=list');
+ }
+ }
+ }
+ if(empty($pos) && empty($doctype) && $this->app->erp->Firmendaten('wareneingang_gross')=='1'){
+ $this->app->DB->Update(
+ sprintf(
+ "UPDATE `paketannahme` SET `status` = 'abgeschlossen' WHERE `id` = %d LIMIT 1",
+ $id
+ )
+ );
+ $this->app->Location->execute('index.php?module=wareneingang&action=distribution');
+ }
+ if(!empty($locateTo)) {
+ if($this->app->Location->getLocationUrl($locateTo) !== 'index.php'){
+ $this->app->Location->execute($locateTo);
+ }
+ }
+ $this->app->Location->execute('index.php?module=wareneingang&action=distriinhalt&id='.$id.$fromDoctype);
+ }
+
+
+
+
+ public function WareneingangPaketZustand()
+ {
+ $this->WareneingangPaketMenu();
+ $id = $this->app->Secure->GetGET('id');
+ $submit = $this->app->Secure->GetPOST('submit');
+ if($submit!='')
+ {
+ $this->app->FormHandler->FormUpdateDatabase('paketannahme',$id);
+
+ $this->app->Location->execute('index.php?module=wareneingang&action=paketetikett&id='.$id);
+ }
+ //$client = new HttpClient("192.168.0.171");
+ $wareneingang_kamera_waage = $this->app->erp->Firmendaten('wareneingang_kamera_waage');//$this->app->DB->Select("SELECT wareneingang_kamera_waage FROM firmendaten LIMIT 1");
+
+ if($wareneingang_kamera_waage == '1')
+ {
+ $seriennummer = $this->app->DB->Select("SELECT seriennummer FROM adapterbox WHERE verwendenals='kamera' OR verwendenals='waage' LIMIT 1");
+ $pageContent = $this->app->erp->GetAdapterboxAPIWaage($seriennummer);
+ }
+
+ $gewicht = $pageContent;
+
+ //$gewicht = intval($gewicht)-2;
+
+ if($wareneingang_kamera_waage =='1'){
+ $this->app->Tpl->Set('GEWICHT', $gewicht);
+ }
+ else{
+ $this->app->Tpl->Set('GEWICHT','none');
+ }
+
+
+ if($wareneingang_kamera_waage == '1'){
+ //$datei = HttpClient::quickGet("http://192.168.0.53/snap.jpg");
+ $seriennummer = $this->app->DB->Select("SELECT seriennummer FROM adapterbox WHERE verwendenals='kamera' LIMIT 1");
+ $datei = $this->app->erp->GetAdapterboxAPIImage($seriennummer,'800','600');
+
+ $tmpname = tempnam($this->app->erp->GetTMP(),'wareneingang').'.jpg';
+ file_put_contents($tmpname, $datei);
+
+ $ersteller = $this->app->User->GetName();
+ $file = $this->app->erp->CreateDatei(date('Ymd')."_paketannahme_$id.jpg","Paketannahme $id",'','',$tmpname,$ersteller);
+
+ unlink($tmpname);
+
+ $this->app->Tpl->Set('FOTO',$file);
+
+ $this->app->erp->AddDateiStichwort($file,'Bild','Paketannahme',$id);
+
+ $this->app->Tpl->Set('LIVEFOTO','');
+ }
+
+ if($gewicht <= 0 && $wareneingang_kamera_waage==1){
+ $this->app->Tpl->Set('MELDUNG', 'Bitte legen Sie das Paket auf die Waage und schießen Sie nochmal ein Foto!
');
+ }
+ else if ($gewicht <= 0 && $wareneingang_kamera_waage !=1){
+ $this->app->Tpl->Set('MELDUNG', 'Status: Ohne Waage und Kamera Funktion
');
+ }
+
+
+ if($this->app->erp->Firmendaten('wareneingang_gross')=='1')
+ {
+ $this->app->Tpl->Parse('TAB1','wareneingangpaketannahme_tab3.tpl');
+ $this->app->Tpl->Parse('PAGE','tabview.tpl');
+ }
+ else{
+ $this->app->Tpl->Parse('PAGE', 'wareneingangpaketannahme.tpl');
+ }
+ $this->app->Tpl->Set('AKTIV_TAB3','tabs-1');
+}
+
+
+public function WareneingangPaketEtikett()
+{
+ $this->WareneingangPaketMenu();
+ $id = $this->app->Secure->GetGET('id');
+ $submit = $this->app->Secure->GetPOST('submit');
+ if($submit!=''){
+ header('Location: index.php?module=wareneingang&action=paketabschliessen&id='.$id);
+ }
+
+ if($this->app->erp->Firmendaten('wareneingang_gross')=='1')
+ {
+ $this->app->Tpl->Parse('TAB1','wareneingangpaketannahme_tab4.tpl');
+ $this->app->Tpl->Parse('PAGE','tabview.tpl');
+ $weiteres= $this->app->Secure->GetPOST('weiteres');
+ $abschluss= $this->app->Secure->GetPOST('abschluss');
+
+ if($weiteres!=''){
+ header('Location: index.php?module=wareneingang&action=paketannahme');
+ }
+ if($abschluss!='')
+ {
+ header('Location: index.php?module=wareneingang&action=paketannahme');
+
+ }
+
+ }
+ else{
+ $this->app->Tpl->Parse('PAGE', 'wareneingangpaketannahme.tpl');
+ }
+
+}
+
+public function WareneingangPaketAbschliessen()
+{
+ $this->WareneingangPaketMenu();
+ $id = $this->app->Secure->GetGET('id');
+ $weiteres= $this->app->Secure->GetPOST('weiteres');
+ $abschluss= $this->app->Secure->GetPOST('abschluss');
+
+ if($weiteres!=''){
+ $this->app->Location->execute('index.php?module=wareneingang&action=paketannahme');
+ }
+ if($abschluss!='')
+ {
+ $this->app->Location->execute('index.php?module=wareneingang&action=paketannahme');
+
+ }
+
+
+ if($this->app->erp->Firmendaten('wareneingang_gross')=='1')
+ {
+ $this->app->Tpl->Parse('TAB1','wareneingangpaketannahme_tab5.tpl');
+ $this->app->Tpl->Parse('PAGE','tabview.tpl');
+ }
+ else{
+ $this->app->Tpl->Parse('PAGE', 'wareneingangpaketannahme.tpl');
+ }
+}
+
+
+
+
+public function WareneingangList()
+{
+ $this->WareneingangPaketMenu();
+ $this->app->YUI->TableSearch('TAB1', 'paketannahme_list', "show", "", "", basename(__FILE__), __CLASS__);
+ $this->app->Tpl->Parse('PAGE', "wareneingangpaketdistribution_list.tpl");
+}
+
+ /**
+ * @param int $addressId
+ *
+ * @return int
+ */
+ public function createParcelReceiptFromAdress($addressId)
+ {
+ $bearbeiter = empty($this->app->User) || !method_exists($this->app->User,'GetName') ?'Cronjob':
+ $this->app->DB->real_escape_string($this->app->User->GetName());
+ $projectId = (int)$this->app->DB->Select("SELECT projekt FROM adresse WHERE id='$addressId' AND geloescht=0 LIMIT 1");
+ $sql = sprintf(
+ "INSERT INTO paketannahme (datum,adresse,vorlage,vorlageid,projekt,bearbeiter,status) VALUES
+ (NOW(),%d,'adresse',%d,%d,'%s','angenommen')",
+ $addressId, $addressId, $projectId, $bearbeiter
+ );
+ $this->app->DB->Insert($sql);
+
+ return (int)$this->app->DB->GetInsertID();
+ }
+
+public function WareneingangPaketannahme()
+{
+ $this->WareneingangPaketMenu();
+ $vorlage= $this->app->Secure->GetGET('vorlage');
+ $suche= $this->app->Secure->GetPOST('suche');
+ $id = $this->app->Secure->GetGET('id');
+
+ $articlescan = $this->app->Secure->GetPOST('articlescan');
+ if($articlescan) {
+ $best = $this->app->DB->SelectArr(
+ sprintf(
+ 'SELECT bp.bestellung,MIN(bp.id) as pos, b.adresse, bp.artikel, b.projekt, art.lager_platz
+ FROM bestellung AS b
+ INNER JOIN bestellung_position AS bp ON b.id = bp.bestellung AND bp.geliefert < bp.menge AND b.belegnr <> \'\' AND
+ (bp.abgeschlossen IS NULL OR bp.abgeschlossen=0) AND (b.status=\'versendet\' OR b.status=\'freigegeben\')
+ INNER JOIN artikel AS art ON bp.artikel = art.id
+ LEFT JOIN `artikelnummer_fremdnummern` AS af ON art.id = af.artikel AND af.aktiv = 1 AND af.scannable = 1
+ WHERE art.nummer = \'%s\' OR art.ean = \'%s\' OR art.herstellernummer = \'%s\' OR af.nummer = \'%s\'
+ GROUP BY b.id, art.id ',
+ $articlescan, $articlescan, $articlescan, $articlescan
+ )
+ );
+ $vorlage = '';
+ if(empty($best)) {
+ if($this->app->erp->ModulVorhanden('retoure')) {
+ $retoure = $this->app->DB->SelectRow(
+ sprintf(
+ "SELECT ro.id, ro.adresse
+ FROM retoure AS ro
+ INNER JOIN retoure_position AS rp on ro.id = rp.retoure AND rp.menge_eingang < rp.menge
+ AND ro.status <> 'storniert' AND ro.belegnr <> '' AND ro.adresse > 0
+ WHERE ro.belegnr = '%s'
+ LIMIT 1",
+ $articlescan
+ )
+ );
+ if(empty($retoure)) {
+ $retoure = $this->app->DB->SelectRow(
+ sprintf(
+ "SELECT ro.id , ro.adresse
+ FROM retoure AS ro
+ INNER JOIN retoure_position AS rp on ro.id = rp.retoure AND rp.menge_eingang < rp.menge
+ AND ro.status <> 'storniert' AND ro.belegnr <> '' AND ro.adresse > 0
+ INNER JOIN lieferschein AS dn ON ro.lieferscheinid = dn.id
+ WHERE dn.belegnr = '%s' AND dn.belegnr <> '' LIMIT 1",
+ $articlescan
+ )
+ );
+ }
+ if(empty($retoure)) {
+ $retoure = $this->app->DB->SelectRow(
+ sprintf(
+ "SELECT ro.id, ro.adresse
+ FROM retoure AS ro
+ INNER JOIN retoure_position AS rp on ro.id = rp.retoure AND rp.menge_eingang < rp.menge
+ AND ro.status <> 'storniert' AND ro.belegnr <> '' AND ro.adresse > 0
+ INNER JOIN auftrag AS o ON ro.auftragid = o.id
+ WHERE o.belegnr = '%s' AND o.belegnr <> '' LIMIT 1",
+ $articlescan
+ )
+ );
+ }
+ if(empty($retoure)) {
+ $retoure = $this->app->DB->SelectRow(
+ sprintf(
+ "SELECT ro.id, ro.adresse
+ FROM retoure AS ro
+ INNER JOIN retoure_position AS rp on ro.id = rp.retoure AND rp.menge_eingang < rp.menge
+ AND ro.status <> 'storniert' AND ro.belegnr <> '' AND ro.adresse > 0
+ INNER JOIN lieferschein AS dn ON ro.lieferscheinid = dn.id
+ INNER JOIN versand AS v ON dn.id = v.lieferschein
+ WHERE v.tracking = '%s' AND v.tracking <> '' LIMIT 1",
+ $articlescan
+ )
+ );
+ }
+ if(!empty($retoure)) {
+ $this->app->User->SetParameter('wareneingang_from_returnorder', $retoure['id']);
+ $this->app->User->SetParameter('wareneingang_from_module', 'wareneingang');
+ $this->app->User->SetParameter('wareneingang_from_action', 'paketannahme');
+
+ $this->app->Location->execute(
+ 'index.php?module=wareneingang&action=distriinhalt&cmd=createreceiptdocumentreturnorder&id='
+ . $retoure['id']
+ );
+ }
+ }
+ $this->app->Tpl->Add('INFO','Es wurde keine offene Bestellung mit diesem Artikel gefunden.
');
+ }
+ elseif((!empty($best)?count($best):0) > 1) {
+ $this->app->Tpl->Add('INFO','Es wurden mehrere offene Bestellung mit diesem Artikel gefunden.
');
+ }else{
+ $vorlage = 'bestellung';
+ $id = (int)$best[0]['bestellung'];
+ $pos = $best[0]['pos'];
+ $adresse = (int)$best[0]['adresse'];
+ $projekt = (int)$best[0]['projekt'];
+ $lagerplatz = (int)$best[0]['lager_platz'];
+ $ismobile = $this->app->Secure->GetPOST('ismobile');
+ $menge = round(
+ $this->app->DB->Select(
+ sprintf(
+ 'SELECT menge - geliefert FROM bestellung_position WHERE id = %d LIMIT 1',
+ $pos
+ )
+ ),
+ 7
+ );
+ $this->app->User->SetParameter('wareneingang_from', 'wareneingang');
+ if($this->app->erp->Firmendaten('wareneingang_gross')!='1') {
+ $bearbeiter = $this->app->DB->real_escape_string($this->app->User->GetName());
+
+ $sql = "INSERT INTO paketannahme (datum,adresse,vorlage,vorlageid,projekt,bearbeiter,status) VALUES
+ (NOW(),$adresse,'$vorlage',$id,$projekt,'$bearbeiter','angenommen')";
+ $this->app->DB->Insert($sql);
+ $id = $this->app->DB->GetInsertID();
+
+ $this->app->Location->execute('index.php?module=wareneingang&action=distrietiketten&backaction=paketannahme&id='.$id.'&pos='.$pos.'&menge='.$menge.($lagerplatz > 0?'&lager_platz='.$lagerplatz:'').(!empty($ismobile)?'&ismobile=1':''));
+ }
+ }
+ }
+ if($vorlage!='')
+ {
+ if($vorlage==='bestellung')
+ {
+ $vorlageid = $id;
+ $adresse = $this->app->DB->Select("SELECT adresse FROM bestellung WHERE id='$id' LIMIT 1");
+ $projekt = $this->app->DB->Select("SELECT projekt FROM bestellung WHERE id='$id' LIMIT 1");
+ }
+ else if ($vorlage==='adresse')
+ {
+ $adresse = $id;
+ $vorlageid = $adresse;
+ // standardprojekt von kunde
+ $projekt = $this->app->DB->Select("SELECT projekt FROM adresse WHERE id='$id' AND geloescht=0 LIMIT 1");
+ } else {
+ $this->app->ExitXentral();
+ }
+
+ $bearbeiter = $this->app->DB->real_escape_string($this->app->User->GetName());
+
+ $sql = "INSERT INTO paketannahme (datum,adresse,vorlage,vorlageid,projekt,bearbeiter,status) VALUES
+ (NOW(),'$adresse','$vorlage','$vorlageid','$projekt','$bearbeiter','angenommen')";
+ $this->app->DB->Insert($sql);
+ $id = $this->app->DB->GetInsertID();
+
+ if($this->app->erp->ModulVorhanden('schneller_wareneingang') &&
+ $this->app->erp->RechteVorhanden('schneller_wareneingang','distriinhaltschnell')) {
+ $lieferantennummer = $this->app->DB->Select("SELECT lieferantennummer FROM adresse WHERE id = '$adresse' LIMIT 1");
+ if($lieferantennummer != '' && $lieferantennummer != '0')
+ {
+ $this->app->Location->execute('index.php?module=schneller_wareneingang&action=distriinhaltschnell&id='.$id);
+ }
+ }
+ $this->app->Location->execute('index.php?module=wareneingang&action=distriinhalt&id='.$id);
+ }
+
+ $rechteproblem = array();
+ if(!$this->app->erp->RechteVorhanden('wareneingang','distrietiketten')){
+ $rechteproblem[] = 'distrietiketten';
+ }
+ if(!$this->app->erp->RechteVorhanden('wareneingang','distriabschluss')){
+ $rechteproblem[] = 'distriabschluss';
+ }
+ if((!empty($rechteproblem)?count($rechteproblem):0) > 0){
+ $this->app->Tpl->Set('INFO','
Es werden im Menü nicht alle Icons angezeigt, da die nötigen Rechte nicht vorliegen für: Wareneingang > '.implode(', ', $rechteproblem).'
');
+ }
+
+
+ $this->app->YUI->TableSearch('SUCHE','paketannahme','show','','',basename(__FILE__), __CLASS__);
+ $this->app->YUI->DatePicker('zeitvon');
+ $this->app->YUI->DatePicker('zeitbis');
+
+ $table = new EasyTable($this->app);
+ $table->Query("SELECT DATE_FORMAT(datum,'%d.%m.%Y') as datum, name, belegnr as bestellung, id FROM bestellung WHERE status!='geliefert'");
+ $table->DisplayNew('BESTELLUNGEN','weiter');
+
+ $this->app->YUI->AutoComplete('suche','adressename');
+
+ $this->app->Tpl->Set('AKTIV_TAB1','tabs-1');
+ $this->app->User->SetParameter('wareneingang_action', 'paketannahme');
+ $this->app->Tpl->Parse('PAGE','wareneingangpaketannahme.tpl');
+}
+
+}