From b7f553664bd53d5fa94c9d55afeb386558e588f3 Mon Sep 17 00:00:00 2001 From: Xenomporio <> Date: Tue, 24 May 2022 16:09:30 +0200 Subject: [PATCH] Bugfixes angebot ajax positionen --- phpwf/plugins/class.yui.php | 11 +- www/js/ajax_001.js | 1 + www/pages/artikel.php | 19503 ++++++++++++++------------- www/themes/new/templates/popup.tpl | 37 +- 4 files changed, 9781 insertions(+), 9771 deletions(-) diff --git a/phpwf/plugins/class.yui.php b/phpwf/plugins/class.yui.php index 7f32d3ad..0c8e38b3 100644 --- a/phpwf/plugins/class.yui.php +++ b/phpwf/plugins/class.yui.php @@ -2301,10 +2301,11 @@ class YUI { $originalpreis = $preis; $originalwaehrung = $waehrung; $ekpreisp = $this->app->erp->GetEinkaufspreisWaehrung($artikel_id, $menge, $waehrung, $originalwaehrung, $originalpreis); - $dbeitrag = 1; - if($ekpreisp && $preis*(100-$rabatt)/100 != 0) + $dbeitrag = 1; + + if(!is_null($ekpreisp) && (int)$preis*(100-(int)$rabatt)/100 != 0) { - $dbeitrag = ($preis*(100-$rabatt)/100-$ekpreisp)/($preis*(100-$rabatt)/100); + $dbeitrag = ((int)$preis*(100-(int)$rabatt)/100-(int)$ekpreisp)/((int)$preis*(100-(int)$rabatt)/100); } $this->app->DB->Update("UPDATE $table SET einkaufspreis = '$ekpreisp', einkaufspreisurspruenglich = '$originalpreis',ekwaehrung = '$originalwaehrung', deckungsbeitrag = '$dbeitrag' WHERE id = '$newposid' LIMIT 1"); $ust_befreit = $this->app->DB->Select("SELECT ust_befreit FROM $module WHERE id = '$id' LIMIT 1"); @@ -7118,7 +7119,9 @@ r.land as land, p.abkuerzung as projekt, r.zahlungsweise as zahlungsweise, } } - for ($j = 0;$j < count($subwhere);$j++) $tmp.= " AND " . $subwhere[$j]; + if (!is_null($subwhere)) { + for ($j = 0;$j < count($subwhere);$j++) $tmp.= " AND " . $subwhere[$j]; + } // START EXTRA more $where = " b.id!='' AND b.status!='angelegt' $tmp " . $this->app->erp->ProjektRechte(); diff --git a/www/js/ajax_001.js b/www/js/ajax_001.js index 64694126..43f1c1f5 100644 --- a/www/js/ajax_001.js +++ b/www/js/ajax_001.js @@ -1503,6 +1503,7 @@ function processData( xmlHttp, intID ) case 'fillArtikel': var myString = xmlHttp.responseText; var mySplitResult = myString.split("#*#"); + if(myString.length>3) { render=1; diff --git a/www/pages/artikel.php b/www/pages/artikel.php index a820ea2d..1274d722 100644 --- a/www/pages/artikel.php +++ b/www/pages/artikel.php @@ -1,9754 +1,9755 @@ -app->Secure->GetGET('id'); - $allowed['artikel'] = array('eigenschaften'); - $defaultorder = 1; //Optional wenn andere Reihenfolge gewuenscht - - $defaultorderdesc = 0; - $alignright = array(3,4,5); - $heading = array('Hauptkategorie', 'Unterkategorie (Optional)', 'Wert', 'Einheit (Optional)', 'Menü'); - $width = array('15%', '15%', '12%', '8%', '10%'); - $findcols = array('e.hauptkategorie', 'e.unterkategorie', 'e.wert', 'e.einheit', 'e.id'); - $searchsql = array('e.hauptkategorie', 'e.unterkategorie', 'e.wert', 'e.einheit'); - $menu = "app->Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\">" . " app->Conf->WFconf['defaulttheme']}/images/copy.svg\" border=\"0\">". " app->Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\">"; - - // SQL statement - $sql = "SELECT SQL_CALC_FOUND_ROWS e.id, e.hauptkategorie, e.unterkategorie, CONCAT(e.wert,'  '), - e.einheit, e.id - FROM eigenschaften e "; - $where = "e.artikel='$id' "; - break; - case 'artikel_eigenschaften': - $id = $this->app->Secure->GetGET('id'); - $allowed['artikel'] = array('eigenschaften'); - $defaultorder = 1; //Optional wenn andere Reihenfolge gewuenscht - - $defaultorderdesc = 0; - $alignright = array(3,4,5); - $heading = array('Eigenschaft', 'Wert', 'Einheit (Optional)', 'Menü'); - $width = array('32%', '32%', '20%', '10%'); - $findcols = array('e.name', 'ew.wert', 'ew.einheit', 'ew.id'); - $searchsql = array('e.name', 'ew.wert', 'ew.einheit'); - $menu = "app->Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\">" . " app->Conf->WFconf['defaulttheme']}/images/copy.svg\" border=\"0\">". " app->Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\">"; - - // SQL statement - $sql = "SELECT SQL_CALC_FOUND_ROWS ew.id, e.name, CONCAT(ew.wert,'  '), - ew.einheit, ew.id FROM artikeleigenschaften e INNER JOIN artikeleigenschaftenwerte ew ON e.id = ew.artikeleigenschaften"; - - $where = " ew.artikel='$id' "; - - // gesamt anzahl - $count = "SELECT COUNT(ew.id) FROM artikeleigenschaften e INNER JOIN artikeleigenschaftenwerte ew ON e.id = ew.artikeleigenschaften WHERE $where "; - break; - - case 'artikel_eigenschaften_neu': - $id = $this->app->Secure->GetGET('id'); - $allowed['artikel'] = array('eigenschaften'); - - $heading = array('Eigenschaft DE', 'Wert DE', 'Einheit (Optional)', 'Eigenschaft', 'Wert', 'Sprache', 'Shop', 'Artikelspezifisch', 'Menü', ''); - $width = array('10%', '10%', '10%', '10%', '10%', '4%', '10%', '4%', '1%', '1%'); - - $findcols = array('b.name', 'b.wert', 'b.einheit', 'b.eigenschafts', 'b.werts', 'b.spraches', 'b.shops', 'b.artikelspezifisch', 'b.menux', 'b.menu'); - $searchsql = array('b.name', 'b.wert', 'b.einheit', 'b.eigenschafts', 'b.werts', 'b.spraches', 'b.shops', 'b.artikelspezifisch'); - - $menu = ""; - - $sqla[] = "(SELECT ew.id, e.name, ew.wert, ew.einheit, '' as eigenschafts, '' as werts, 'DE' as spraches, '' as shops, '' as artikelspezifisch, CONCAT('
app->Conf->WFconf[defaulttheme]}/images/edit.svg\" title=\"Bearbeiten\" border=\"0\"> app->Conf->WFconf[defaulttheme]}/images/delete.svg\" title=\"Löschen\" border=\"0\"> ',IF(e.typ='select' AND ew.vorlage>0,'',CONCAT('app->Conf->WFconf[defaulttheme]}/images/copy.svg\" title=\"Kopieren\" border=\"0\">
'))) as menux, '' as menu - FROM artikeleigenschaften e - INNER JOIN artikeleigenschaftenwerte ew ON e.id = ew.artikeleigenschaften - WHERE ew.artikel = '$id')"; - - $sqla[] = "(SELECT ap.id, ae.name, aw.wert, aw.einheit, ap.property_to as eigenschafts, ap.property_value_to as werts, ap.language_to as spraches, s.bezeichnung as shops, IF(ap.article_id > 0, 'ja', '') as artikelspezifisch, IF(ap.article_id = 0, CONCAT('
app->Conf->WFconf[defaulttheme]}/images/forward.svg\" title=\"Eigenschaften Übersetzung\" border=\"0\">'), IF(ap.article_id != 0, CONCAT(''; - - if(count($fehlende_preise) > 0) { - $tpl3 .= "'; - $tpl2 .= ''; - } - else { - $tpl3 .= ''; - $tpl2 .= ''; - } - - $fehlende_artikel_links=''; - $summe_fehlende_preise_max = 0; - $summe_fehlende_preise_min = 0; - - $cfehlende_preise = $fehlende_preise?count($fehlende_preise):0; - for($jj=0;$jj<$cfehlende_preise;$jj++) { - $nummer = $this->app->DB->Select("SELECT nummer FROM artikel WHERE id='".$fehlende_preise[$jj]['artikel']."' LIMIT 1"); - - $menge = $this->app->DB->Select("SELECT SUM(s.menge) FROM stueckliste s LEFT JOIN artikel a ON a.id=s.artikel - WHERE s.stuecklistevonartikel='$id' AND s.artikel='".$fehlende_preise[$jj]['artikel']."'"); - - //TODO VK - $preis_min = $this->app->DB->Select("SELECT MIN(preis) FROM einkaufspreise WHERE artikel='".$fehlende_preise[$jj]['artikel']."' AND geloescht!=1 - AND (gueltig_bis='0000-00-00' OR gueltig_bis >= curdate()) ")*$menge; - - //TODO VK - $preis_max = $this->app->DB->Select("SELECT MAX(preis) FROM einkaufspreise WHERE artikel='".$fehlende_preise[$jj]['artikel']."' AND geloescht!=1 - AND (gueltig_bis='0000-00-00' OR gueltig_bis >= curdate()) ")*$menge; - - $fehlende_artikel_links .="$nummer
"; - //target=\"_blink\">$nummer/$preis_min/$preis_max
"; - - $summe_fehlende_preise_max = $summe_fehlende_preise_max + $preis_max; - $summe_fehlende_preise_min = $summe_fehlende_preise_min + $preis_min; - } - $teile_tpl .=""; - - if(count($fehlende_preise) <=0){ - $tpl22 .=''; - } else { - $tpl22 .='"; - } - //$tpl4 .=''; - //$tpl5 .=''; - } - - $this->app->Tpl->Add('TABELLE',"".$tpl.''); - - $this->app->Tpl->Add('TABELLE',''.$tpl2.''); - - $this->app->Tpl->Add('TABELLE',"".$tpl3.""); - - $this->app->Tpl->Add('TABELLE',"".$tpl22.""); - - if(!empty($artikel_ohne_ek_eins)) { - $this->app->Tpl->Add('TABELLE',"".$teile_tpl.""); - $this->app->Tpl->Set('TAB5'," -
app->Conf->WFconf[defaulttheme]}/images/edit.svg\" title=\"Bearbeiten\" border=\"0\"> app->Conf->WFconf[defaulttheme]}/images/delete.svg\" title=\"Löschen\" border=\"0\">'), '')) as menux, '' as menu - FROM article_property_translation ap - LEFT JOIN shopexport s ON ap.shop_id = s.id - LEFT JOIN artikeleigenschaften ae ON ap.property_from = ae.name - JOIN artikeleigenschaftenwerte aw ON ae.id = aw.artikeleigenschaften AND ap.property_value_from = aw.wert - WHERE ap.language_from = 'DE' AND aw.artikel = '$id' AND (ap.article_id = '$id' OR ap.article_id = 0))"; - - $sql = "SELECT SQL_CALC_FOUND_ROWS b.id, b.name, b.wert, b.einheit, b.eigenschafts, b.werts, b.spraches, b.shops, b.artikelspezifisch, b.menux, b.menu - FROM ( - ".implode(" UNION ALL ", $sqla)." - )b - "; - - break; - - case 'artikel_fremdnummern': - $allowed['artikel'] = array('fremdnummern'); - $id = (int)$this->app->Secure->GetGET('id'); - - $this->app->Tpl->Add('JQUERYREADY', "$('#inaktiv').click( function() { fnFilterColumn1( 0 ); } );"); - - for ($r = 1;$r <= 1;$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 - ); - } - '); - } - $more_data1 = $this->app->Secure->GetGET('more_data1'); - - $heading = array('Aktiv','Bezeichnung','Fremdnummer','Shop','Scanner', 'Menü'); - $width = array('1%','20%','20%','15%','5%','1%'); - $findcols = array("if(af.aktiv = 1,'ja','-')",'af.bezeichnung','af.nummer','s.bezeichnung',"if(af.scannable = 1,'ja','-')",'af.id'); - $searchsql = array("if(af.aktiv = 1,'ja','-')",'af.bezeichnung','af.nummer','s.bezeichnung',"if(af.scannable = 1,'ja','-')"); - $defaultorder = 0; - $defaultorderdesc = 1; - - $menu = "
app->Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\"> app->Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\">
"; - - $sql = "SELECT SQL_CALC_FOUND_ROWS af.id, if(af.aktiv = 1,'ja','-') as aktiv, - af.bezeichnung, - af.nummer, - s.bezeichnung,if(af.scannable = 1,'ja','-') as scannable,af.id - from artikelnummer_fremdnummern af - left join shopexport s on af.shopid = s.id - "; - $where = "af.artikel = '$id' AND af.aktiv = 1"; - if($more_data1 == 1){ - $where = "af.artikel = '$id'"; - } - break; - case 'manuellagerlampe': - $allowed['artikel'] = array('lagerlampe'); - $this->app->Tpl->Add('JQUERYREADY', "$('#green').click( function() { fnFilterColumn1( 0 ); } );"); - $this->app->Tpl->Add('JQUERYREADY', "$('#yellow').click( function() { fnFilterColumn2( 0 ); } );"); - $this->app->Tpl->Add('JQUERYREADY', "$('#red').click( function() { fnFilterColumn3( 0 ); } );"); - $this->app->Tpl->Add('JQUERYREADY', "$('#imlager').click( function() { fnFilterColumn4( 0 ); } );"); - $this->app->Tpl->Add('JQUERYREADY', "$('#nichtimlager').click( function() { fnFilterColumn5( 0 ); } );"); - - // headings - $heading = array('', 'Ampel', 'Nummer', 'Artikel', 'Lieferant', 'Im Lager', 'Projekt', 'Menü'); - $width = array('3%', '5%', '10%', '35%', '20%', '8%', '15%', '10%'); - $findcols = array('wahl', 'a.lieferzeit', 'a.nummer', 'a.name_de', 'a.lieferant', 'lager', 'projekt', 'a.id'); - $searchsql = array('a.name_de', 'a.nummer', 'adr.name', 'p.abkuerzung'); - $menu = "app->Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\">" . ""; - - // SQL statement - - /* CONCAT('') as wahl, - - CONCAT('') as ampel, - */ - $sql = "SELECT SQL_CALC_FOUND_ROWS a.id, - CONCAT('') as wahl, - CONCAT('') as ampel, - - If(a.inaktiv,CONCAT('',a.nummer,''),a.nummer) as nummer, - If(a.inaktiv,CONCAT('',a.name_de,''),a.name_de) as name_de, - If(a.inaktiv,CONCAT('',adr.name,''),adr.name) as lieferant, - - (SELECT SUM(l.menge) FROM lager_platz_inhalt l WHERE l.artikel=a.id) as lager, - - If(a.inaktiv,CONCAT('',p.abkuerzung,''),p.abkuerzung) as projekt, - a.id as menu - FROM artikel a LEFT JOIN projekt p ON p.id=a.projekt LEFT JOIN adresse adr ON a.adresse=adr.id "; - for ($r = 1;$r < 9;$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 - ); - } - '); - } - - // START EXTRA more - $more_data1 = $this->app->Secure->GetGET('more_data1'); - - if ($more_data1 == 1) { - $subwhere[] = " a.lieferzeit='green' "; - } - $more_data2 = $this->app->Secure->GetGET('more_data2'); - - if ($more_data2 == 1) { - $subwhere[] = " a.lieferzeit='yellow' "; - } - $more_data3 = $this->app->Secure->GetGET('more_data3'); - - if ($more_data3 == 1) { - $subwhere[] = " a.lieferzeit='red' "; - } - $more_data4 = $this->app->Secure->GetGET('more_data4'); - - if ($more_data4 == 1) { - $subwhere[] = ' (SELECT SUM(l.menge) FROM lager_platz_inhalt l WHERE l.artikel=a.id) > 0 '; - } - $more_data5 = $this->app->Secure->GetGET('more_data5'); - - if ($more_data5 == 1) { - $subwhere[] = ' (SELECT SUM(l.menge) FROM lager_platz_inhalt l WHERE l.artikel=a.id) IS NULL '; - } - - $tmp = ''; - $csubwhere = !empty($subwhere)?count($subwhere):0; - for ($j = 0;$j < $csubwhere;$j++) { - $tmp.= ' AND ' . $subwhere[$j]; - } - - $where = 'a.geloescht=0 AND a.shop > 0 AND a.lagerartikel=1 AND autolagerlampe!=1 ' . $tmp; - $count = 'SELECT COUNT(id) FROM artikel WHERE geloescht=0 AND shop > 0 AND lagerartikel=1'; - break; - case 'autolagerlampe': - $allowed['artikel'] = array('lagerlampe'); - - // headings - $heading = array('', 'Ampel', 'Art', 'Nummer', 'Artikel', 'Lieferant', 'Im Lager', 'Projekt', 'Menü'); - $width = array('1%', '7%', '3%', '10%', '30%', '20%', '10%', '10%'); - $findcols = array('a.id', 'a.lieferzeit', 'art', 'a.nummer', 'a.name_de', 'lieferant', 'projekt', 'a.id'); - $searchsql = array('a.name_de', 'a.nummer', 'adr.name', 'p.abkuerzung'); - $menu = "app->Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\">" . ""; - - // SQL statement - $sql = "SELECT SQL_CALC_FOUND_ROWS a.id, - - if(a.autolagerlampe,CONCAT(''), - CONCAT('')) as wahl, - CONCAT('') as ampel, - - if(a.autolagerlampe,'auto','manuell') as art, - - If(a.inaktiv,CONCAT('',a.nummer,''),a.nummer) as nummer, - If(a.inaktiv,CONCAT('',a.name_de,''),a.name_de) as name_de, - If(a.inaktiv,CONCAT('',adr.name,''),adr.name) as lieferant, - (SELECT SUM(l.menge) FROM lager_platz_inhalt l WHERE l.artikel=a.id) as lager, - If(a.inaktiv,CONCAT('',p.abkuerzung,''),p.abkuerzung) as projekt, - - a.id as menu - FROM artikel a LEFT JOIN projekt p ON p.id=a.projekt LEFT JOIN adresse adr ON a.adresse=adr.id "; - $where = 'a.geloescht=0 AND a.shop > 0 AND a.lagerartikel=1 '; - $count = 'SELECT COUNT(id) FROM artikel WHERE geloescht=0 AND shop > 0 AND lagerartikel=1'; - break; - case 'artikeltabelleneu': - $allowed['artikel'] = array('lagerlampe'); - - // headings - $heading = array('', 'Nummer', 'Artikel', 'Im Lager', 'Projekt', 'Menü'); - $width = array('5%', '10%', '45%', '8%', '15%', '1%'); - $findcols = array('nummer', 'name_de', 'projekt', 'lager', 'id'); - $searchsql = array('a.nummer', 'a.name_de','p.abkuerzung'); - $menu = "app->Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\">" . ""; - - // SQL statement - - $sql = "SELECT SQL_CALC_FOUND_ROWS a.id, CONCAT('') as wahl, a.nummer as nummer, - a.name_de as name_de, (SELECT SUM(l.menge) FROM lager_platz_inhalt l WHERE l.artikel=a.id) as lager, p.abkuerzung as projekt, a.id as menu - FROM artikel a LEFT JOIN projekt p ON p.id=a.projekt "; - - // fester filter - $where = "a.geloescht=0 AND a.neu='1' AND a.shop >0 " . $this->app->erp->ProjektRechte(); - $count = 'SELECT COUNT(a.id) FROM artikel a WHERE a.geloescht=0 AND a.shop > 0 AND a.neu=1 ' . $this->app->erp->ProjektRechte(); - break; - case 'lieferantartikelpreise': - $id = (int)$this->app->Secure->GetGET('id'); - $allowed['artikel'] = array('profisuche'); - // alle artikel die ein Kunde kaufen kann mit preisen netto brutto - $cmd = $this->app->Secure->GetGET('smodule'); - $adresse = $this->app->DB->Select("SELECT adresse FROM {$cmd} WHERE id='$id' LIMIT 1"); - - // headings - $heading = array('', 'Nummer', 'Artikel', 'Ab', 'Preis', 'Lager', 'Res.', 'Menge', 'Projekt', 'Menü'); - $width = array('1%', '10%', '45%', '10%', '10%', '10%', '10%', '15%', '10%'); - $findcols = array('auswahlbox', 'nummer', 'name_de', 'v.ab_menge', 'v.preis', 'lager', 'reserviert', 'auswahlmenge', 'p.abkuerzung', 'id'); - $searchsql = array('a.name_de', 'a.nummer', 'p.abkuerzung'); - - $alignright = array(4,5,6); - $numbercols = array(4); - - $menu = "app->Conf->WFconf['defaulttheme']}/images/add.png\" border=\"0\">"; - - // SQL statement - $sql = "SELECT SQL_CALC_FOUND_ROWS a.id, - CONCAT('') AS auswahlbox, - a.nummer as nummer, a.name_de as name_de, ".$this->app->erp->FormatMenge('v.ab_menge').' as abmenge,'.$this->app->erp->FormatPreis('v.preis',2).' as preis, - '.$this->app->erp->FormatMenge('(SELECT SUM(l.menge) FROM lager_platz_inhalt l WHERE l.artikel=a.id)').' as lager, - '.$this->app->erp->FormatMenge('(SELECT SUM(l.menge) FROM lager_reserviert l WHERE l.artikel=a.id)')." as reserviert, - CONCAT('app->erp->FormatMenge("v.ab_menge").", '\" autocomplete=\"off\">') AS auswahlmenge, - p.abkuerzung as projekt, v.id as menu - FROM einkaufspreise v, artikel a LEFT JOIN projekt p ON p.id=a.projekt "; - - // fester filter - //$where = "a.geloescht=0 AND v.artikel=a.id AND (v.adresse='' OR v.adresse='$adresse' OR v.adresse='0') AND (v.gueltig_bis='0000-00-00' OR v.gueltig_bis >=NOW()) "; - $where = "a.geloescht=0 AND v.artikel=a.id AND (v.adresse='$adresse') AND (v.gueltig_bis='0000-00-00' OR v.gueltig_bis >=NOW()) "; - //$count = "SELECT COUNT(v.id) FROM einkaufspreise v, artikel a WHERE a.geloescht=0 AND v.artikel=a.id AND (v.adresse='' OR v.adresse='$adresse')"; - $count = "SELECT COUNT(v.id) FROM einkaufspreise v, artikel a WHERE a.geloescht=0 AND v.artikel=a.id AND (v.adresse='$adresse')"; - break; - case 'kundeartikelpreise': - $id = (int)$this->app->Secure->GetGET('id'); - $allowed['artikel'] = array('profisuche'); - // START EXTRA checkboxen - $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 - ); } - '); - } - - // alle artikel die ein Kunde kaufen kann mit preisen netto brutto - $cmd = $this->app->Secure->GetGET('smodule'); - $adresse = $this->app->DB->Select(sprintf('SELECT adresse FROM `%s` WHERE id=%d LIMIT 1',$cmd,$id)); - - $sEcho = (int)$this->app->Secure->GetGET('sEcho'); - if ($sEcho === 1) { - // Beim allerersten Aufruf Filterbaum-Selektion löschen, damit alle Artikel angezeigt werden. - // Ansonsten ist Kategorie-Filter aktiv; die ausgewählte Kategorie ist aber nicht markiert im Baum. - $this->app->User->SetParameter('filterbaum_'.$cmd, ''); - } - - $filterbaum = $this->app->User->GetParameter('filterbaum_'.$cmd); - $baum = null; - if($filterbaum) - { - $this->app->erp->GetArtikelunterbaumids($filterbaum, $baum); - } - $baumids = null; - $typwhere = []; - if($baum) - { - foreach($baum as $v) - { - $baumids[] = " kategorie = '$v' "; - $typwhere[] = ' a.typ = \''.$v.'_kat\' '; - } - } - - // headings - $heading = array('', 'Nummer', 'Artikel', 'Ab', 'Preis','Währung', 'Lager', 'Res.', 'Menge', 'Projekt'); - $width = array('1%', '10%', '45%', '10%', '10%', '10%', '10%', '10%', '15%'); - $findcols = array('auswahlbox', 'nummer', 'name_de', 'v.ab_menge', 'v.preis','v.waehrung', 'l.menge', 'r.menge', 'auswahlmenge', 'p.abkuerzung'); - $fmodul = $this->app->Secure->GetGET('fmodul'); - $searchsql = array('a.name_de', 'a.nummer', 'p.abkuerzung','a.herstellernummer'); - $alignright = array(4,5,7,8); - $numbercols = array(4); - - $artikel_freitext1_suche = $this->app->erp->Firmendaten('artikel_freitext1_suche'); - if($artikel_freitext1_suche=='1') { - $searchsql[]='a.freifeld1'; - } - if($artikel_freitext1_suche=='1') { - $searchsql[]='a.freifeld2'; - } - - $artikel_suche_kurztext = $this->app->erp->Firmendaten('artikel_suche_kurztext'); - if($artikel_suche_kurztext=='1') { - $searchsql[]='a.kurztext_de'; - } - - - - $artikelzusatzfelder = $this->app->erp->getZusatzfelderArtikel(); - $artikelcachedfelder = $this->app->erp->getArtikelCachedfelder(); - $zusatzcols = null; - $joincached = ''; - $joineig = ''; - for($i = 1; $i <= 5; $i++) - { - $zusatzfeld = $this->app->erp->Firmendaten('artikeltabellezusatz'.$i); - if($zusatzfeld && isset($artikelzusatzfelder[$zusatzfeld])) - { - $heading[] = $artikelzusatzfelder[$zusatzfeld]; - $width[] = '10%'; - if(isset($artikelcachedfelder[$zusatzfeld])) - { - $findcols[] = 'cache.'.$zusatzfeld; - switch($artikelcachedfelder[$zusatzfeld]) - { - case 'Menge': - if($zusatzfeld == 'lager_verfuegbar') - { - $zusatzcols[] = 'if(a.lagerartikel=\'1\','.$this->app->erp->FormatMenge('cache.' . $zusatzfeld).',\'\')'; - }else{ - $zusatzcols[] = $this->app->erp->FormatMenge('cache.' . $zusatzfeld); - } - $alignright[] = count($findcols); - break; - case 'Preis': - $zusatzcols[] = $this->app->erp->FormatPreis('cache.'.$zusatzfeld,2); - $alignright[] = count($findcols); - break; - default: - $zusatzcols[] = 'cache.'.$zusatzfeld; - break; - } - $joincached = ' LEFT JOIN artikel_cached_fields cache ON a.id = cache.artikel '; - }else{ - switch($zusatzfeld) - { - case 'vknetto': - case 'eknetto': - case 'vkbrutto': - case 'ekbrutto': - case 'lagerverfuegbar': - $findcols[] = 'a.id'; - $zusatzcols[] = "''"; - break; - case 'eigenschaften': - /*$findcols[] = 'eig.value'; - $zusatzcols[] = 'eig.value'; - $joineig = " - LEFT JOIN ( - SELECT aew.artikel, - GROUP_CONCAT(DISTINCT concat(ae.name,': ',aew.wert) - ORDER BY ae.name SEPARATOR ', ') as value - FROM artikeleigenschaftenwerte aew - INNER JOIN artikeleigenschaften ae ON aew.artikeleigenschaften = ae.id AND ifnull(ae.geloescht,0) = 0 AND ae.name != '' - GROUP BY aew.artikel - ) eig ON a.id = eig.artikel - ";*/ - break; - default: - $findcols[] = 'a.'.$zusatzfeld; - $zusatzcols[] = 'a.'.$zusatzfeld; - break; - } - } - } - } - - $joins = ''; - - $joins .= $joincached; - $joins .= $joineig; - - - $menu = "app->Conf->WFconf['defaulttheme']}/images/add.png\" border=\"0\">"; - - $sql = "SELECT SQL_CALC_FOUND_ROWS a.id, - CONCAT('') AS auswahlbox, - a.nummer as nummer, - CONCAT(a.name_de,' (',v.art,')') - as name_de, trim(v.ab_menge)+0 as abmenge,".$this->app->erp->FormatPreis('v.preis')." as preis,v.waehrung, - trim(l.menge)+0 as lager, - trim(r.menge)+0 as reserviert, - CONCAT('app->erp->FormatMenge('v.ab_menge').", '\" autocomplete=\"off\">') AS auswahlmenge, - p.abkuerzung as projekt, "; - - if($zusatzcols) - { - $sql .= implode(', ', $zusatzcols).', '; - foreach($zusatzcols as $v) - { - if(!in_array($v, $searchsql)){ - $searchsql[] = $v; - } - } - } - - $sql .= "v.id as menu - FROM verkaufspreise v - INNER JOIN artikel a ON v.artikel = a.id AND a.geloescht <> 1 - LEFT JOIN (SELECT artikel, sum(menge) as menge FROM lager_platz_inhalt GROUP BY artikel) l ON l.artikel = a.id - LEFT JOIN (SELECT artikel, sum(menge) as menge FROM lager_reserviert GROUP BY artikel) r ON r.artikel = a.id - LEFT JOIN projekt p ON p.id=a.projekt $joins"; - - $heading[] = 'Menü'; - $width[] = '1%'; - $findcols[] = 'id'; - - $gruppenarr = $this->app->erp->GetGruppen($adresse); - $cgruppenarr = $gruppenarr?count($gruppenarr):0; - $gruppen = ''; - for ($i = 0;$i < $cgruppenarr;$i++) { - - if ($gruppenarr[$i] > 0) { - $gruppen.= " OR v.gruppe='" . $gruppenarr[$i] . "' "; - } - } - - //$more_data1 = $this->app->Secure->GetGET("more_data1"); - - if(!$this->app->Secure->GetGET('more_data1')){ - $tmp_or = " OR ((v.adresse='' OR v.adresse='0') AND v.art='Kunde') "; - } - - $where = "((v.adresse='$adresse' $gruppen) $tmp_or) AND (v.gueltig_bis='0000-00-00' OR v.gueltig_bis>=NOW()) AND a.intern_gesperrt!=1 ".$this->app->erp->ProjektRechte('a.projekt').' '; - if(!empty($baumids)) - { - $sql .= 'LEFT JOIN (SELECT artikel FROM `artikelbaum_artikel` WHERE ('.implode(' OR ', $baumids).') GROUP BY artikel) b ON a.id = b.artikel '; - $where .= 'AND (b.artikel > 0 OR '.implode(' OR ',$typwhere).') '; - } - - //$count = "SELECT COUNT(v.id) FROM verkaufspreise v INNER JOIN artikel a ON v.artikel = a.id AND a.geloescht <> 1 WHERE ((v.adresse='$adresse' $gruppen) $tmp_or) AND (v.gueltig_bis='0000-00-00' OR v.gueltig_bis>=NOW()) "; - - break; - case 'artikel_auftraege_offen': - $id = (int)$this->app->Secure->GetGET('id'); - $allowed['artikel'] = array('offeneauftraege'); - - // headings - $heading = array('Auftrag', 'Datum', 'Status', 'Zahlweise', 'Freigabe', 'Kunde', 'Menge', 'Geliefert', 'Preis', 'Menü'); - $width = array('10%', '10%', '15%', '10%', '10%', '30%', '10%', '10%'); - $findcols = array('a.id', 'a.belegnr', 'a.datum', 'a.status', 'a.zahlungsweise', 'adr.kundenfreigabe', 'adr.name', 'ap.menge', 'ap.geliefert_menge', "FORMAT(ap.preis*(100-ap.rabatt)/100,2)"); - $searchsql = array('a.belegnr', "DATE_FORMAT(a.datum,'%d.%m.%Y')", 'a.status', 'a.zahlungsweise', 'adr.kundenfreigabe', 'adr.name', 'ap.menge', 'ap.geliefert_menge', "FORMAT(ap.preis*(100-ap.rabatt)/100,2)"); - $menu = "app->Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\">"; - $alignright = array(7,8,9); - // SQL statement - $sql = "SELECT SQL_CALC_FOUND_ROWS a.id, CONCAT('',a.belegnr,'') as belegnr, DATE_FORMAT(a.datum,'%d.%m.%Y') as datum, a.status, a.zahlungsweise, adr.kundenfreigabe as freigabe, CONCAT(a.name,'
', a.email) as Kunde, - trim(ap.menge)+0, trim(ap.geliefert_menge)+0 as gelieferte, FORMAT(ap.preis*(100-ap.rabatt)/100,2) as preis, a.id - FROM auftrag_position ap LEFT JOIN auftrag a ON a.id=ap.auftrag, adresse adr"; - - if ($name == 'artikel_auftraege_offen') { - - // fester filter - $where = " adr.id=a.adresse AND ap.artikel='$id' AND ap.geliefert_menge < ap.menge AND a.status='freigegeben'"; - $count = "SELECT COUNT(a.id) FROM auftrag_position ap LEFT JOIN auftrag a ON a.id=ap.auftrag, adresse adr - WHERE adr.id=a.adresse AND ap.artikel='$id' AND ap.geliefert_menge < ap.menge AND a.status='freigegeben'"; - } else { - - // fester filter - $where = " adr.id=a.adresse AND ap.artikel='$id' AND a.status='abgeschlossen'"; - $count = "SELECT COUNT(a.id) FROM auftrag_position ap LEFT JOIN auftrag a ON a.id=ap.auftrag, adresse adr - WHERE adr.id=a.adresse AND ap.artikel='$id' AND a.status='abgeschlossen'"; - } - break; - case 'artikel_auftraege_versendet': - $id = (int)$this->app->Secure->GetGET('id'); - $allowed['artikel'] = array('offeneauftraege'); - $alignright = array(7,8,9); - // headings - $heading = array('Auftrag', 'Datum', 'Status', 'Zahlweise', 'Freigabe', 'Kunde', 'Menge', 'Geliefert', 'Preis', 'Menü'); - $width = array('10%', '10%', '15%', '10%', '10%', '30%', '10%', '10%'); - $findcols = array('a.id', 'a.belegnr', 'a.datum', 'a.status', 'a.zahlungsweise', 'adr.kundenfreigabe', 'adr.name', 'ap.menge', 'ap.geliefert_menge', "FORMAT(ap.preis*(100-ap.rabatt)/100,2)"); - $searchsql = array('a.belegnr', "DATE_FORMAT(a.datum,'%d.%m.%Y')", 'a.status', 'a.zahlungsweise', 'adr.kundenfreigabe', 'adr.name', 'ap.menge', 'ap.geliefert_menge', "FORMAT(ap.preis*(100-ap.rabatt)/100,2)"); - $menu = "app->Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\">"; - - // SQL statement - $sql = "SELECT SQL_CALC_FOUND_ROWS a.id, CONCAT('',a.belegnr,'') as belegnr, DATE_FORMAT(a.datum,'%d.%m.%Y') as datum, a.status, a.zahlungsweise, adr.kundenfreigabe as freigabe, CONCAT(a.name,'
', a.email) as Kunde, - trim(ap.menge)+0, trim(ap.geliefert_menge)+0 as gelieferte, FORMAT(ap.preis*(100-ap.rabatt)/100,2) as preis, a.id - FROM auftrag_position ap LEFT JOIN auftrag a ON a.id=ap.auftrag, adresse adr"; - - // fester filter - $where = " adr.id=a.adresse AND ap.artikel='$id' AND a.status='abgeschlossen'"; - $count = "SELECT COUNT(a.id) FROM auftrag_position ap LEFT JOIN auftrag a ON a.id=ap.auftrag, adresse adr - WHERE adr.id=a.adresse AND ap.artikel='$id' AND a.status='abgeschlossen'"; - break; - case 'verkaufspreise': - $id = (int)$this->app->Secure->GetGET('id'); - $allowed['artikel'] = array('verkauf'); - $this->app->Tpl->Add('JQUERYREADY', "$('#alteverkaufspreise').click( function() { fnFilterColumn1( 0 ); } );"); - $this->app->Tpl->Add('JQUERYREADY', "$('#nurkunde').click( function() { fnFilterColumn2( 0 ); } );"); - $this->app->Tpl->Add('JQUERYREADY', "$('#nurgruppe').click( function() { fnFilterColumn3( 0 ); } );"); - $this->app->Tpl->Add('JQUERYREADY', "$('#nurstandard').click( function() { fnFilterColumn4( 0 ); } );"); - $defaultorder = 3; //Optional wenn andere Reihenfolge gewuenscht - - $alignright=array(3,4,5,6,7); - - $defaultorderdesc = 0; - 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 - ); - } - '); - } - $heading = array('Kunde/Gruppe', 'Hinweis', 'ab', 'Preis', 'Währung', 'Gültig ab', 'Gültig bis', 'Menü'); - $width = array('40%', '15%', '10%', '5%', '10%', '10%','15%'); - $findcols = array("if(v.art='Kunde',if(v.adresse='' or v.adresse=0,'Standardpreis',CONCAT(adr.kundennummer,' ',adr.name)),CONCAT(g.name,' ',g.kennziffer))", 'hinweis', $this->app->erp->FormatMenge('v.ab_menge'), 'preis', 'v.waehrung','gueltig_ab','gueltig_bis', 'id'); - $searchsql = array("if(v.art='Kunde',if(v.adresse='' or v.adresse=0,'Standardpreis',CONCAT(adr.kundennummer,' ',adr.name)),CONCAT(g.name,' ',g.kennziffer))",'adr.name', 'g.name', $this->app->erp->FormatMenge('v.ab_menge'), 'v.waehrung',$this->app->YUI->FormatPreis('v.preis'),"DATE_FORMAT(v.gueltig_bis,'%d.%m.%Y')","DATE_FORMAT(v.gueltig_ab,'%d.%m.%Y')"); - $menu = ''; - $menu .= ''; - $menu .= ''; - $menu .= ''; - $menu .= '
'; - $menu .= ''; - //$menu .= ""; - $menu .= "app->Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\">"; - $menu .= '' . ' '; - $menu .= ""; - $menu .= "app->Conf->WFconf['defaulttheme']}/images/disable.png\" border=\"0\">"; - $menu .= '' . ' '; - $menu .= ""; - $menu .= "app->Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\">"; - $menu .= ' '; - $menu .= ""; - $menu .= "app->Conf->WFconf['defaulttheme']}/images/copy.svg\" border=\"0\">"; - $menu .= ''; - $menu .= '
'; - - $numbercols = array(3); - - // SQL statement - $sql = "SELECT SQL_CALC_FOUND_ROWS v.id, - if(v.art='Kunde',if(v.adresse='' or v.adresse=0,'Standardpreis',CONCAT(adr.kundennummer,' ',adr.name)),CONCAT(g.name,' ',g.kennziffer)) as kunde, - if(v.adresse > 0 OR v.gruppe >0,'','') as hinweis, - ".$this->app->erp->FormatMenge('v.ab_menge').' as ab_menge, '.$this->app->YUI->FormatPreis('v.preis')." as preis, v.waehrung, DATE_FORMAT(v.gueltig_ab, '%d.%m.%Y') as gueltig_ab, DATE_FORMAT(v.gueltig_bis, '%d.%m.%Y') as gueltig_bis, v.id as menu - FROM verkaufspreise v LEFT JOIN adresse adr ON v.adresse=adr.id LEFT JOIN gruppen g ON g.id=v.gruppe "; - $more_data1 = $this->app->Secure->GetGET('more_data1'); - - // kunde - $more_data2 = $this->app->Secure->GetGET('more_data2'); - if($more_data2=='1') { - $subwhere[] = ' v.adresse > 0 AND v.gruppe <= 0 '; - } - - //Gruppe - $more_data3 = $this->app->Secure->GetGET('more_data3'); - if($more_data3=='1') { - $subwhere[] = ' v.gruppe > 0 AND v.adresse<=0 '; - } - - //listenpreise - $more_data4 = $this->app->Secure->GetGET('more_data4'); - if($more_data4=='1') { - $subwhere[] = ' v.adresse = 0 AND v.gruppe=0 '; - } - - $csubwhere = !empty($subwhere)?count($subwhere):0; - $tmp = ''; - for ($j = 0;$j < $csubwhere;$j++) { - $tmp.= ' AND ' . $subwhere[$j]; - } - - if ($more_data1 == 1){ - $where = "v.artikel='$id' " . $tmp; - } - else{ - $where = "v.artikel='$id' AND v.geloescht='0' AND (v.gueltig_bis>NOW() OR v.gueltig_bis='0000-00-00') " . $tmp; - } - - - - // gesamt anzahl - $count = "SELECT COUNT(v.id) FROM verkaufspreise v WHERE $where"; - break; - case 'einkaufspreise': - $id = (int)$this->app->Secure->GetGET('id'); - $allowed['artikel'] = array('einkauf'); - $this->app->Tpl->Add('JQUERYREADY', "$('#alteeinkaufspreise').click( function() { fnFilterColumn1( 0 ); } );"); - $defaultorder = 4; //Optional wenn andere Reihenfolge gewuenscht - - $defaultorderdesc = 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 - $heading = array('Lieferant', 'Bezeichnung', 'Bestellnummer', 'ab', 'VPE', 'Preis', 'Währung', 'bis', 'Rahmenvert.', 'Menü'); - $width = array('35%', '20%', '3%', '3%', '1%', '1%', '1%', '1%', '10%', '10%'); - $findcols = array('adr.name', 'bezeichnunglieferant', 'bestellnummer', 'ab_menge', 'vpe', 'preis', 'e.waehrung', 'e.gueltig_bis', "if(e.rahmenvertrag='1',CONCAT(e.rahmenvertrag_menge,' / ',IFNULL((SELECT trim(SUM(bp.menge)) FROM bestellung b LEFT JOIN bestellung_position bp ON bp.bestellung=b.id WHERE b.datum >=e.rahmenvertrag_von AND b.datum <= e.rahmenvertrag_bis AND b.status!='storniert' AND e.adresse=b.adresse AND bp.artikel=e.artikel),0)),'-')", 'id'); - $searchsql = array('adr.name', 'e.bezeichnunglieferant', 'e.bestellnummer', 'e.ab_menge', 'e.vpe', $this->app->YUI->FormatPreis('e.preis'), 'e.waehrung', "DATE_FORMAT(e.gueltig_bis,'%d.%m.%Y')", "if(e.rahmenvertrag='1',CONCAT(e.rahmenvertrag_menge,' / ',IFNULL((SELECT trim(SUM(bp.menge)) FROM bestellung b LEFT JOIN bestellung_position bp ON bp.bestellung=b.id WHERE b.datum >=e.rahmenvertrag_von AND b.datum <= e.rahmenvertrag_bis AND b.status!='storniert' AND e.adresse=b.adresse AND bp.artikel=e.artikel),0)),'-')"); - - $menu = ''; - //$menu = ""; - $menu .= "app->Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\">"; - $menu .= '" . " '; - $menu .= ""; - $menu .= "app->Conf->WFconf['defaulttheme']}/images/disable.png\" border=\"0\">"; - $menu .= '" . " '; - $menu .= ""; - $menu .= "app->Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\">"; - $menu .= '" . " '; - $menu .= ""; - $menu .= "app->Conf->WFconf['defaulttheme']}/images/copy.svg\" border=\"0\">"; - $menu .= ''; - - // SQL statement - - $datecols = array(7); - $numbercols = array(5); - - $alignright=array(4,5,6,7,8,9); - - $sql = "SELECT SQL_CALC_FOUND_ROWS e.id, CONCAT('',adr.name,'') as lieferant, e.bezeichnunglieferant, e.bestellnummer, - ".$this->app->erp->FormatMenge('e.ab_menge')." as ab_menge ,e.vpe as vpe, ".$this->app->YUI->FormatPreis('e.preis')." as preis,e.waehrung as waehrung, if(e.gueltig_bis='0000-00-00','-',DATE_FORMAT(e.gueltig_bis, '%d.%m.%Y')) as gueltig_bis, - if(e.rahmenvertrag='1',CONCAT(e.rahmenvertrag_menge,' / ',IFNULL((SELECT trim(SUM(bp.menge)) FROM bestellung b LEFT JOIN bestellung_position bp ON bp.bestellung=b.id WHERE b.datum >=e.rahmenvertrag_von AND b.datum <= e.rahmenvertrag_bis AND b.status!='storniert' AND e.adresse=b.adresse AND bp.artikel=e.artikel),0)),'-') as rahmenvertrag, e.id as menu - FROM einkaufspreise e LEFT JOIN projekt p ON p.id=e.projekt LEFT JOIN adresse adr ON e.adresse=adr.id "; - - $more_data1 = $this->app->Secure->GetGET('more_data1'); - // if($tmp!="")$tmp .= " AND e.geloescht='1' "; - - // Fester filter - - - if ($more_data1 == 1){ - $where = "e.artikel='$id' AND e.geloescht='0' "; - } - else{ - $where = "e.artikel='$id' AND e.geloescht='0' AND (e.gueltig_bis>NOW() OR e.gueltig_bis='0000-00-00') "; - } - - // Fester filter - // $where = "e.artikel='$id' AND e.geloescht='0' "; - - - // gesamt anzahl - - $count = "SELECT COUNT(e.id) FROM einkaufspreise e WHERE $where"; - break; - case 'lagerbewegungartikel': - $id = (int)$this->app->Secure->GetGET('id'); - $allowed['artikel'] = array('lager'); - - $heading = array('Datum', 'Lager', 'Menge', 'VPE', 'Richtung', 'Referenz', 'Bearbeiter', 'Projekt', 'Inventur','Menü'); - $width = array('1%', '5%', '5%', '5%', '5%', '40%', '20%', '5%','10%', '1%'); - $findcols = array('lpi.zeit', 'lp.kurzbezeichnung', 'lpi.menge', 'vpe', "if(lpi.eingang,'Eingang','Ausgang')", 'referenz', 'lpi.bearbeiter', 'p.abkuerzung', 'zeitstempel','id'); - $searchsql = array('DATE_FORMAT(lpi.zeit,\'%d.%m.%Y\')', 'lp.kurzbezeichnung', 'lpi.menge', 'vpe', "if(lpi.eingang,'Eingang','Ausgang')", 'lpi.referenz', 'lpi.bearbeiter', 'p.abkuerzung'); - $defaultorder = 10; //Optional wenn andere Reihenfolge gewuenscht - $alignright = array(3); - $defaultorderdesc = 1; - $menu = '-'; - - $datecols = array(0); - - //$menu = "
"; - - //app->Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\" > - - - // $menucol=3; - /* - - SELECT DATE_FORMAT(lpi.zeit,'%d.%m.%Y') as datum, lp.kurzbezeichnung as lager, lpi.menge as menge, lpi.vpe as VPE, if(lpi.eingang,'Eingang','Ausgang') as Richtung, substring(lpi.referenz,1,60) as referenz, lpi.bearbeiter as bearbeiter, p.abkuerzung as projekt, - lpi.id FROM lager_bewegung lpi LEFT JOIN lager_platz as lp ON lpi.lager_platz=lp.id LEFT JOIN projekt p ON lpi.projekt=p.id WHERE lpi.artikel='$id' order by lpi.zeit DESC*/ - - // SQL statement - - if($this->app->erp->GetKonfiguration('artikel_lager_bestandsanzeige')=='1') - { - $sql = "SELECT SQL_CALC_FOUND_ROWS lpi.id, - DATE_FORMAT(lpi.zeit,'%d.%m.%Y') as datum, lp.kurzbezeichnung as lager, - ".$this->app->erp->FormatMenge('lpi.menge')." as menge, - lpi.vpe as VPE, if(lpi.eingang,'Eingang','Ausgang') as Richtung, - CONCAT( - lpi.referenz, - if( - lpi.bestand >= 0 AND DATE_FORMAT(lpi.zeit,'%Y-%m-%d') >='2015-06-07' , - CONCAT( - ' (Neuer Bestand: ', - ".$this->app->erp->FormatMenge('lpi.bestand').", - ')' - ), - '' - ), - IF(art.mindesthaltbarkeitsdatum = 1, - CONCAT('
', - IFNULL( - ( - SELECT CONCAT(IFNULL(mhddatum,''),' ',IFNULL(charge,'') ) - FROM mhd_log - WHERE artikel = art.id AND zeit >= lpi.zeit - ORDER BY id - LIMIT 1 - ),'' - ),'' - ), - IF( - art.chargenverwaltung > 0, - CONCAT('
', - IFNULL( - ( - SELECT IFNULL(bezeichnung,'') - FROM chargen_log - WHERE artikel = art.id AND zeit >= lpi.zeit - ORDER BY id - LIMIT 1 - ), - '' - ),'' - ), - '' - ) - ) - ) as referenz, - lpi.bearbeiter as bearbeiter, p.abkuerzung as projekt, - DATE_FORMAT(api.zeitstempel,'%d.%m.%Y'), - lpi.id - FROM lager_bewegung AS lpi - INNER JOIN `artikel` AS `art` ON lpi.artikel = art.id - LEFT JOIN lager_platz as lp ON lpi.lager_platz=lp.id - LEFT JOIN projekt p ON lpi.projekt=p.id - LEFT JOIN artikel_permanenteinventur api ON api.id=lpi.permanenteinventur"; - } else { - $sql = "SELECT SQL_CALC_FOUND_ROWS lpi.id, - DATE_FORMAT(lpi.zeit,'%d.%m.%Y') as datum, lp.kurzbezeichnung as lager, - ".$this->app->erp->FormatMenge("lpi.menge")." as menge, - lpi.vpe as VPE, if(lpi.eingang,'Eingang','Ausgang') as Richtung, - CONCAT( - lpi.referenz, - IF(art.mindesthaltbarkeitsdatum = 1, - CONCAT('
', - IFNULL( - ( - SELECT CONCAT(IFNULL(mhddatum,''),' ',IFNULL(charge,'') ) - FROM mhd_log - WHERE artikel = art.id AND zeit >= lpi.zeit - ORDER BY id - LIMIT 1 - ),'' - ),'' - ), - IF( - art.chargenverwaltung > 0, - CONCAT('
', - IFNULL( - ( - SELECT IFNULL(bezeichnung,'') - FROM chargen_log - WHERE artikel = art.id AND zeit >= lpi.zeit - ORDER BY id - LIMIT 1 - ), - '' - ),'' - ), - '') - ) - ) as referenz, lpi.bearbeiter as bearbeiter, - p.abkuerzung as projekt, DATE_FORMAT(api.zeitstempel,'%d.%m.%Y'), - lpi.id - FROM lager_bewegung lpi - INNER JOIN `artikel` AS `art` ON lpi.artikel = art.id - LEFT JOIN lager_platz as lp ON lpi.lager_platz=lp.id - LEFT JOIN projekt p ON lpi.projekt=p.id - LEFT JOIN artikel_permanenteinventur api ON api.id=lpi.permanenteinventur"; - - } - // Fester filter - $where = " lpi.artikel='$id' "; - - // gesamt anzahl - $count = "SELECT COUNT(lpi.id) FROM lager_bewegung lpi LEFT JOIN lager_platz as lp ON lpi.lager_platz=lp.id LEFT JOIN projekt p ON lpi.projekt=p.id WHERE lpi.artikel='$id'"; - break; - case 'stueckliste': - $id = (int)$this->app->Secure->GetGET('id'); - $allowed['artikel'] = array('stueckliste'); - $defaultorder = 7; - - // headings - $heading = array('Artikel', 'Nummer','Menge', 'Einheit', 'Lager', 'Reserviert', 'Menü'); - $width = array('50%', '10%', '5%', '5%','5%', '5%', '9%'); - $findcols = array('a.name_de', 'a.nummer', 's.menge','a.einheit', - 'lag.menge', 'CASE WHEN (SELECT SUM(lr.menge) FROM lager_reserviert lr WHERE lr.artikel=a.id) > 0 - THEN (SELECT SUM(lr.menge) FROM lager_reserviert lr WHERE lr.artikel=a.id) - ELSE 0 - END','id'); - $searchsql = array('a.name_de', 'a.nummer','a.einheit', 's.menge','s.art',"CONCAT(IF(s.art='' OR s.art='et','Einkaufsteil',''),IF(s.art='it','Informationsteil/Dienstleistung',''),IF(s.art='bt','Beistellung',''))"); - - $menu = ""; - $menu .= ""; - $menu .= ""; - $menu .= ""; - $menu .= "
"; - $menu .= ''; - //$menu = ""; - $menu .= "app->Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\">"; - $menu .= '' . ' '; - $menu .= ""; - $menu .= "app->Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\">"; - $menu .= '' . ' '; - $menu .= "
"; - - $alignright = array(3,5,6); - // SQL statement - $sql = "SELECT SQL_CALC_FOUND_ROWS s.id, - CONCAT('',a.name_de,' ', - IF(s.art='it','
- Informationsteil/Dienstleistung',''),IF(s.art='bt','
- Beistellung',''), COALESCE((SELECT GROUP_CONCAT('
- ', art.nummer, ' ', art.name_de, ' (', alt.reason, ')', '' SEPARATOR '') FROM parts_list_alternative AS alt INNER JOIN artikel AS art ON art.id = alt.alternative_article_id WHERE alt.parts_list_id = s.id), '')) as artikel, - CONCAT('',a.nummer,'') as nummer, - ".$this->app->erp->FormatMenge('s.menge').' as menge, a.einheit, - - '.$this->app->erp->FormatMenge('ifnull(lag.menge,0)').' as lager, - - CASE WHEN (SELECT SUM(lr.menge) FROM lager_reserviert lr WHERE lr.artikel=a.id) > 0 - THEN (SELECT '.$this->app->erp->FormatMenge('SUM(lr.menge)')." FROM lager_reserviert lr WHERE lr.artikel=a.id) - ELSE 0 - END as reserviert, - - s.id as menu - FROM stueckliste s - INNER JOIN artikel a ON s.artikel=a.id - LEFT JOIN (SELECT sum(lpi.menge) as menge ,lpi.artikel - FROM lager_platz_inhalt AS lpi - INNER JOIN ( - SELECT artikel - FROM stueckliste - WHERE stuecklistevonartikel='$id' GROUP BY artikel - ) AS s2 ON lpi.artikel = s2.artikel - INNER JOIN lager_platz AS lp ON lpi.lager_platz = lp.id AND ifnull(lp.sperrlager,0) = 0 - GROUP BY lpi.artikel) AS lag ON a.id = lag.artikel - "; - - // Fester filter - $where = "s.stuecklistevonartikel='$id' "; - - // gesamt anzahl - $count = "SELECT COUNT(s.id) FROM stueckliste s WHERE s.stuecklistevonartikel='$id' "; - break; - - case 'parts_list_alternatives': - $allowed['artikel'] = array('stueckliste'); - - $heading = array('Nummer','Artikel','Menü'); - $width = array('40%','50%','5%'); - - $findcols = array('a.nummer', 'a.name_de', 'p.id'); - $searchsql = array('a.nummer', 'a.name_de'); - - $id = $app->Secure->GetGET('more_data1'); - - $menu = ""; - $menu .= ""; - $menu .= ""; - $menu .= ""; - $menu .= "
"; - $menu .= ''; - $menu .= "app->Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\">"; - $menu .= ' '; - $menu .= ''; - $menu .= "app->Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\">"; - $menu .= ''; - $menu .= "
"; - - $sql = "SELECT SQL_CALC_FOUND_ROWS p.id, a.nummer, CONCAT(a.name_de, IF(p.reason != '', CONCAT('
- Grund: ',p.reason,''),'')), p.id - FROM parts_list_alternative p - LEFT JOIN stueckliste s ON p.parts_list_id = s.id - LEFT JOIN artikel a ON p.alternative_article_id = a.id"; - - $where = " s.id = '$id'"; - - break; - - case 'artikel_onlineshops': - $id = $this->app->Secure->GetGET('id'); - $disablebuttons=true; - $allowed['artikel'] = array('edit'); - $heading = array('Shop','aktiv','Menü'); - $width = array('50%','10%','1%'); - $findcols = array('ao.id','s.bezeichnung',"if(ao.aktiv = 1, 'ja','-')",'ao.id'); - $searchsql = array('s.bezeichnung',"if(ao.aktiv = 1, 'ja','-')"); - $sql = "SELECT SQL_CALC_FOUND_ROWS ao.id, concat(s.bezeichnung,'',ao.shop,''), if(ao.aktiv = 1, 'ja','-'), ao.id - FROM artikel_onlineshops ao - INNER JOIN shopexport s ON ao.shop = s.id AND ao.artikel = '$id' - "; - //$menu = "
 %value%app->Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\"> app->Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\">
"; - $menu = '
'. - "app->Conf->WFconf['defaulttheme']}/images/forward.svg\" border=\"0\" /> ". - "". - "app->Conf->WFconf['defaulttheme']}/images/back.svg\" border=\"0\" /> ". - "". - "%value%". - "". - "app->Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\"> ". - "app->Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\">". - '
'; - $where = ' ao.id > 0 '.$this->app->erp->ProjektRechte('s.projekt'); -; - $count = "select count(ao.id) FROM artikel_onlineshops ao INNER JOIN shopexport s ON ao.shop = s.id AND ao.artikel = '$id' WHERE $where"; - break; - case 'artikel_zertifikate': - $allowed['artikel'] = array('zertifikate'); - $id = (int)$this->app->Secure->GetGET('id'); - - $heading = array('Datum','Kunden-Nr','Kunde','Artikelnummer','Artikel','Menü'); - $width = array('5%','8%','8%','8%','15%','1%'); - $alignright = array(7); - $findcols = array('z.erstellt_datum','a.kundennummer','a.name','ar.nummer','ar.name_de','z.id'); - $searchsql = array('z.erstellt_datum','a.kundennummer','a.name','ar.nummer','ar.name_de','z.id'); - $menucol = 5; - $menu = "
app->Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\">
"; - $defaultorder = 0; - $defaultorderdesc = 1; - $sql = "SELECT SQL_CALC_FOUND_ROWS z.id, - date_format(z.erstellt_datum,'%d.%m.%Y'), - - a.kundennummer, - a.name, - ar.nummer, - ar.name_de, - z.id - from zertifikatgenerator z - inner join artikel ar on ar.id = z.artikel - left join adresse a on z.adresse_kunde = a.id - "; - $where = "z.artikel = '$id'"; - $count = "SELECT count(z.id) from zertifikatgenerator z where z.artikel = '$id'"; - break; - case 'artikeltabellebilder': - case 'artikeltabelle': - $begrenzen_artikeltabelle = $this->app->erp->Firmendaten('begrenzen_artikeltabelle'); - $bilder = false; - if($name === 'artikeltabellebilder'){ - $bilder = true; - } - $dark = $this->app->erp->Firmendaten('iconset_dunkel')?1:0; - $allowed['artikel'] = array('list'); - - $filterbaum = $this->app->erp->Firmendaten('artikel_baum_uebersicht')?$this->app->User->GetParameter('filterbaum_artikel'):null; - $baum = null; - if($filterbaum) - { - $this->app->erp->GetArtikelunterbaumids($filterbaum, $baum); - } - $baumids = null; - if($baum) - { - foreach($baum as $v) - { - $baumids[] = " kategorie = '$v' "; - } - } - - // headings - $artikel_beschleunigte_suche = $this->app->erp->Firmendaten('artikel_beschleunigte_suche'); - $useLpiCache = $artikel_beschleunigte_suche || $begrenzen_artikeltabelle; - - $heading = array(''); - $width = array('1%'); - $findcols = array('open'); - if($bilder) - { - $heading[] = 'Bild'; - $width[] = '5%'; - $findcols[] = 'bildvorschau'; - } - $heading = array_merge($heading, array('Nummer', 'Artikel')); - $width = array_merge($width, array('10%', '55%')); - $findcols = array_merge($findcols, array('nummer', 'name_de')); - if($this->app->erp->RechteVorhanden("multilevel","list") && $this->app->erp->Firmendaten("modul_mlm")=="1") - { - $mlm = true; - $heading[] = 'Provionspunkte'; - $width[] = '10%'; - $findcols[] = 'mlmpunkte'; - } - $heading = array_merge($heading, array('Lagerbestand', 'Projekt')); - $width = array_merge($width, array('5%', '15%')); - - //$lpicol = 'CAST((SELECT SUM(l.menge) FROM lager_platz_inhalt l WHERE l.artikel=a.id) as SIGNED)'; - $lpicol = '(SELECT TRIM(IFNULL(SUM(l.menge),0))+0 FROM lager_platz_inhalt l WHERE l.artikel=a.id)'; - $lpicol2 = $lpicol; - if($useLpiCache) { - $lpicol = '`cache`.lager_gesamt'; - $lpicol2 = 'trim(cache.lager_gesamt)+0'; - } - - $findcols = array_merge($findcols, array($lpicol, 'p.abkuerzung')); - $alignright = array(count($heading)-1); - $artikelzusatzfelder = $this->app->erp->getZusatzfelderArtikel(); - $artikelcachedfelder = $this->app->erp->getArtikelCachedfelder(); - $zusatzcols = null; - $joincached = ''; - $joineig = ''; - for($i = 1; $i <= 5; $i++) - { - $zusatzfeld = $this->app->erp->Firmendaten('artikeltabellezusatz'.$i); - if($zusatzfeld && isset($artikelzusatzfelder[$zusatzfeld])) - { - $heading[] = $artikelzusatzfelder[$zusatzfeld]; - $width[] = '10%'; - if(isset($artikelcachedfelder[$zusatzfeld])) - { - switch($artikelcachedfelder[$zusatzfeld]) - { - case 'Menge': - if($zusatzfeld === 'lager_verfuegbar') - { - $zusatzcols[] = 'if(a.lagerartikel=\'1\','.$this->app->erp->FormatMenge('cache.' . $zusatzfeld).',\'\')'; - }else{ - $zusatzcols[] = $this->app->erp->FormatMenge('cache.' . $zusatzfeld); - } - $findcols[] = 'cache.'.$zusatzfeld; - $alignright[] = count($findcols); - $numbercols[] = count($findcols) - 1; - break; - case 'Preis': - $findcols[] = 'ROUND(cache.'.$zusatzfeld.',2)'; - $zusatzcols[] = $this->app->erp->FormatPreis('cache.'.$zusatzfeld,2); - $alignright[] = count($findcols); - $numbercols[] = count($findcols) - 1; - break; - default: - $zusatzcols[] = 'cache.'.$zusatzfeld; - $findcols[] = 'cache.'.$zusatzfeld; - break; - } - $joincached = ' LEFT JOIN artikel_cached_fields `cache` ON a.id = `cache`.artikel '; - }else{ - switch($zusatzfeld) - { - case 'vk_netto': - case 'ek_netto': - case 'vk_brutto': - case 'ek_brutto': - case 'lager_verfuegbar': - $findcols[] = 'a.id'; - $zusatzcols[] = "''"; - break; - case 'eigenschaften': - /*$findcols[] = 'eig.value'; - $zusatzcols[] = 'eig.value'; - $joineig = " - LEFT JOIN ( - SELECT aew.artikel, - GROUP_CONCAT(DISTINCT concat(ae.name,': ',aew.wert) - ORDER BY ae.name SEPARATOR ', ') as value - FROM artikeleigenschaftenwerte aew - INNER JOIN artikeleigenschaften ae ON aew.artikeleigenschaften = ae.id AND ifnull(ae.geloescht,0) = 0 AND ae.name != '' - GROUP BY aew.artikel - ) eig ON a.id = eig.artikel - ";*/ - break; - case 'inproduktion': - - "(SELECT SUM(pos.menge) - FROM produktion_position pos - WHERE pos.status = 'gestartet' AND (pos.explodiert=1 or pos.id>0) - GROUP BY pos.artikel - ORDER BY pos.sort, pos.id - LIMIT 1)"; - - break; - default: - $findcols[] = 'a.'.$zusatzfeld; - $zusatzcols[] = 'a.'.$zusatzfeld; - break; - } - } - } - } - $useCacheEkNumbers = false; - if($useLpiCache) { - $joincached = ' LEFT JOIN artikel_cached_fields `cache` ON a.id = cache.artikel '; - $this->app->DB->Select("SELECT ek_customnumber FROM artikel_cached_fields LIMIT 1"); - if(!$this->app->DB->error()) { - $useCacheEkNumbers = true; - } - } - - $heading[] = 'Menü'; - $width[] = '1%'; - $findcols[] = 'a.id'; - $menucol = count($heading) - 1; - - /* - $heading = array('', 'Bild', 'Nummer', 'Artikel', 'Lagerbestand', 'Projekt', 'Menü'); - $width = array('1%', '5%', '10%', '55%', '5%', '15%', '10%'); - $findcols = array('open', 'bildvorschau','nummer', 'name_de', 'CAST((SELECT SUM(l.menge) FROM lager_platz_inhalt l WHERE l.artikel=a.id) as SIGNED)', 'p.abkuerzung', 'id'); - $menucol = 6; - $defaultorder = 7; //Optional wenn andere Reihenfolge gewuenscht - $mlm = false; - $alignright = array(5); - if($this->app->erp->RechteVorhanden("multilevel","list") && $this->app->erp->Firmendaten("modul_mlm")=="1") - { - $mlm = true; - $heading = array('', 'Bild', 'Nummer', 'Artikel','Provionspunkte', 'Lagerbestand', 'Projekt', 'Menü'); - $width = array('1%', '5%', '10%', '45%','10%', '5%', '15%', '10%'); - $findcols = array('open', 'bildvorschau','nummer', 'name_de','mlmpunkte', 'CAST((SELECT SUM(l.menge) FROM lager_platz_inhalt l WHERE l.artikel=a.id) as SIGNED)', 'p.abkuerzung', 'id'); - $menucol = 7; - $defaultorder = 8; - $alignright = array(6); - }*/ - $this->app->Tpl->Add('JQUERYREADY', "$('#f_lagerartikel').click( function() { fnFilterColumn1( 0 ); } );"); - $this->app->Tpl->Add('JQUERYREADY', "$('#f_keinlagerartikel').click( function() { fnFilterColumn2( 0 ); } );"); - $this->app->Tpl->Add('JQUERYREADY', "$('#f_variante').click( function() { fnFilterColumn3( 0 ); } );"); - $this->app->Tpl->Add('JQUERYREADY', "$('#f_stueckliste').click( function() { fnFilterColumn4( 0 ); } );"); - $this->app->Tpl->Add('JQUERYREADY', "$('#f_keinestueckliste').click( function() { fnFilterColumn5( 0 ); } );"); - $this->app->Tpl->Add('JQUERYREADY', "$('#f_gesperrt').click( function() { fnFilterColumn6( 0 ); } );"); - $this->app->Tpl->Add('JQUERYREADY', "$('#f_variantekeine').click( function() { fnFilterColumn7( 0 ); } );"); - $this->app->Tpl->Add('JQUERYREADY', "$('#f_alleartikel').click( function() { fnFilterColumn8( 0 ); } );"); - $this->app->Tpl->Add('JQUERYREADY', "$('#f_nurlagerndeartikel').click( function() { fnFilterColumn9( 0 ); } );"); - for ($r = 1;$r <= 9;$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 - ); - } - '); - } - - // START EXTRA more - $more_data1 = $this->app->Secure->GetGET('more_data1'); - $more_data2 = $this->app->Secure->GetGET('more_data2'); - $more_data3 = $this->app->Secure->GetGET('more_data3'); - $more_data4 = $this->app->Secure->GetGET('more_data4'); - $more_data5 = $this->app->Secure->GetGET('more_data5'); - $more_data6 = $this->app->Secure->GetGET('more_data6'); - $more_data7 = $this->app->Secure->GetGET('more_data7'); - $more_data8 = $this->app->Secure->GetGET('more_data8'); - $more_data9 = $this->app->Secure->GetGET('more_data9'); - - if ($this->app->erp->Firmendaten('iconset_dunkel')) { - $str = ''; - } else { - $str = ''; - } - $loading = ''; - - $defaultorderdesc = 1; - $isArticleDescriptionSearchEnabled = $this->app->erp->Firmendaten('artikel_suche_kurztext') == '1'; - if ($isArticleDescriptionSearchEnabled) { - $searchsql = array('a.nummer','a.name_de','p.abkuerzung','a.kurztext_de', 'a.hersteller', 'a.herstellernummer', 'a.ean', 'a.anabregs_text'); - } else { - $searchsql = array('a.nummer','a.name_de','p.abkuerzung', 'a.hersteller', 'a.herstellernummer', 'a.ean'); - } - if($this->app->erp->Firmendaten('artikel_suche_variante_von') == '1'){ - $searchsql[] = '(SELECT tmp.nummer FROM artikel tmp WHERE a.variante_von=tmp.id LIMIT 1)'; - } - - if($this->app->erp->Firmendaten('artikel_freitext1_suche')){ - $searchsql[] = 'a.freifeld1'; - } - if($this->app->erp->Firmendaten('artikel_freitext1_suche')){ - $searchsql[] = 'a.freifeld2'; - } - $menu = ""; - $menu .= ""; - $menu .= ""; - $menu .= ""; - $menu .= ""; - $menu .= ""; - $menu .= ""; - $menu .= "
"; - $menu .= ""; - $menu .= "app->Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\">"; - $menu .= ""; - $menu .= ""; - $menu .= ""; - $menu .= "app->Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\">"; - $menu .= ""; - $menu .= ""; - $menu .= ""; - $menu .= "app->Conf->WFconf['defaulttheme']}/images/copy.svg\" border=\"0\">"; - $menu .= ""; - $menu .= ""; - $menu .= ""; - $menu .= ""; - $menu .= ""; - $menu .= "
"; - - if($artikel_beschleunigte_suche && $isArticleDescriptionSearchEnabled){ - $searchsql = ['a.nummer','a.name_de','a.ean', 'a.anabregs_text']; - } - elseif($artikel_beschleunigte_suche) { - $searchsql = ['a.nummer','a.name_de','a.ean']; - } - // SQL statement - $sql = "SELECT - a.id, - 'app->Conf->WFconf['defaulttheme']}/images/details_open.png class=details>' as open, - "; - - if($bilder) { - if(!function_exists('imagejpeg')) { - $sql .= "'app->Conf->WFconf['defaulttheme']}/images/icon_img_error.png title=\"Keine GD-Erweiterung installiert\" />' as bild,"; - } - else{ - $sql .=" - IF( - a.bildvorschau = 'KEINBILD', - '$str', - CONCAT( - ' '','',' tocheck'),'\" src=\"index.php?module=artikel&action=thumbnail&id=', - a.id, - '&projectid=',IFNULL(a.projekt,0),'&dark=" - .$dark."&bildvorschau=',a.bildvorschau,'\" style=\"max-width:50px;max-height:50px;\">' - ) - ) as bild,"; - } - } - - $parameter = $this->app->User->GetParameter('table_filter_artikel'); - $parameter = base64_decode($parameter); - $parameter = json_decode($parameter, true); - - $joins = ''; - for($i = 1; $i <= 3; $i++) { - if((isset($parameter['eigenschaftname'.$i]) && $parameter['eigenschaftname'.$i] !== '') - || (isset($parameter['eigenschaftwert'.$i]) && $parameter['eigenschaftwert'.$i] !== '') - ) { - $joins .= ' INNER JOIN artikeleigenschaftenwerte aw'.$i.' ON a.id = aw'.$i.'.artikel - INNER JOIN artikeleigenschaften ae'.$i.' ON ae'.$i.'.id = aw'.$i.'.artikeleigenschaften AND (ae1.geloescht = 0 OR isnull(ae'.$i.".geloescht)) - "; - if(isset($parameter['eigenschaftname'.$i]) && $parameter['eigenschaftname'.$i] !== ''){ - $paramsArray[] = 'ae'.$i.".name LIKE '".$parameter['eigenschaftname'.$i]."' "; - } - if(isset($parameter['eigenschaftwert'.$i]) && $parameter['eigenschaftwert'.$i] !== ''){ - $paramsArray[] = 'aw'.$i.".wert LIKE '".$parameter['eigenschaftwert'.$i]."' "; - } - } - } - - $joins .= $joincached; - $joins .= $joineig; - - if($more_data9 == 1){ - $joins .= ' INNER JOIN (SELECT artikel, SUM(menge) AS menge FROM lager_platz_inhalt WHERE menge>0 GROUP BY artikel) AS lpi ON lpi.artikel = a.id'; - } - - $sql .= " - a.nummer as nummer, - CONCAT( - IF(a.intern_gesperrt,'',''), - name_de, - IF(a.variante AND a.variante_von > 0,CONCAT(' (Variante von ',IFNULL((SELECT tmp.nummer FROM artikel tmp WHERE a.variante_von=tmp.id LIMIT 1),''),')'),''), - IF(a.intern_gesperrt,'','') - ) AS name_de, - ".(!empty($mlm)?" a.mlmpunkte, ":'')." - if(a.lagerartikel=1,$lpicol2,'') as lagerbestand, - p.abkuerzung as projekt, "; - if($zusatzcols) { - $sql .= implode(', ', $zusatzcols).', '; - foreach($zusatzcols as $v) { - if(!in_array($v, $searchsql)){ - $searchsql[] = $v; - } - } - } - - $sql .= ' a.id as menu - FROM artikel a - '; - if($baumids) { - $sql .= ' LEFT JOIN (SELECT artikel FROM `artikelbaum_artikel` WHERE ('.implode(' OR ', $baumids).") GROUP BY artikel) aa ON a.id = aa.artikel "; - } - - $sql .= "LEFT JOIN projekt p ON p.id=a.projekt $joins "; - - - // fester filter - - //if(a.variante,CONCAT('Variante von ',(SELECT tmp.nummer FROM artikel tmp WHERE a.variante_von=tmp.id LIMIT 1),': ',a.name_de),a.name_de) - - //$where = "a.geloescht=0 ".$this->app->erp->ProjektRechte(); - $where = 'a.geloescht=0 ' . $this->app->erp->ProjektRechte('a.projekt'); - $fastcount = " SELECT count(a.id) FROM artikel a LEFT JOIN projekt p ON p.id=a.projekt $joins "; - $extracountjoin = ''; - if($baumids) - { - $extracountjoin = ' LEFT JOIN (SELECT artikel FROM `artikelbaum_artikel` WHERE ('.implode(' OR ', $baumids).") GROUP BY artikel) aa ON a.id = aa.artikel "; - - $fastcount .= $extracountjoin; - $where .= " AND ( NOT isnull(aa.artikel) OR a.typ = '".$filterbaum."_kat' ) "; - } - - - - /* STAMMDATEN */ - if(isset($parameter['name']) && !empty($parameter['name'])) { - $paramsArray[] = "a.name_de LIKE '%".$parameter['name']."%' "; - } - - if(isset($parameter['nummer']) && !empty($parameter['nummer'])) { - $paramsArray[] = "a.nummer LIKE '%".$parameter['nummer']."%' "; - } - - if(isset($parameter['hersteller']) && !empty($parameter['hersteller'])) { - $paramsArray[] = "a.hersteller LIKE '%".$parameter['hersteller']."%' "; - } - - if($more_data1 == 1 || ($more_data1 != 1 && !empty($parameter['lagerartikel']))) { - $paramsArray[] = 'a.lagerartikel = 1 '; - } - - if($more_data2 == 1) - { - $paramsArray[] = 'a.lagerartikel <> 1 '; - } - - if(!empty($parameter['variante']) || $more_data3 == 1) { - $paramsArray[] = 'a.variante = 1 '; - } - - if($more_data7 == 1) { - $paramsArray[] = ' (a.variante <> 1 OR isnull(a.variante)) '; - } - - - - if(isset($parameter['freigabenotwending']) && !empty($parameter['freigabenotwending'])) { - $paramsArray[] = 'a.freigabenotwendig = 1 '; - } - - if(isset($parameter['abverkauf']) && !empty($parameter['abverkauf'])) { - $paramsArray[] = 'a.restmenge > 0 '; - } - - - if(isset($parameter['standardlieferant']) && !empty($parameter['standardlieferant'])) { - if(isset($parameter['standardlieferant']) && !empty($parameter['standardlieferant'])) { - $lieferant = $this->app->DB->Select(' - SELECT - id - FROM - adresse - WHERE - lieferantennummer = "' . reset(explode(' ',trim($parameter['standardlieferant']))) . '" AND geloescht = 0 LIMIT 1 - '); - - $paramsArray[] = "a.adresse = '" . $lieferant . "'"; - } - } - - if($more_data4 == 1 || !empty($parameter['stueckliste'])) { - $paramsArray[] = 'a.stueckliste > 0 '; - } - - if($more_data5 == 1) - { - $paramsArray[] = 'a.stueckliste = 0 '; - } - - if(isset($parameter['justintimestueckliste']) && !empty($parameter['justintimestueckliste'])) { - $paramsArray[] = 'a.juststueckliste > 0 '; - } - - if(isset($parameter['inventursperre']) && !empty($parameter['inventursperre'])) { - $paramsArray[] = 'a.inventursperre > 0 '; - } - - - if(!empty($parameter['gesperrt']) || $more_data6 == 1) { - $paramsArray[] = '(a.intern_gesperrt > 0) '; - }else{ - $paramsArray[] = '(a.intern_gesperrt = 0) '; - } - - if(empty($parameter['unikat'])) { - $paramsArray[] = '(a.unikat = 0) '; - } - - if(isset($parameter['projekt']) && !empty($parameter['projekt'])) { - - $projektData = $this->app->DB->SelectRow(' - SELECT - * - FROM - projekt - WHERE - abkuerzung LIKE "' . $parameter['projekt'] . '" - '); - $paramsArray[] = "a.projekt = '".$projektData['id']."' "; - } - - if(isset($parameter['freifeld1']) && !empty($parameter['freifeld1'])) { - $paramsArray[] = "a.freifeld1 LIKE '%".$parameter['freifeld1']."%' "; - } - - if(isset($parameter['internebemerkung']) && !empty($parameter['internebemerkung'])) { - $paramsArray[] = "a.internerkommentar LIKE '%".$parameter['internebemerkung']."%' "; - } - - if(isset($parameter['ean']) && !empty($parameter['ean'])) { - $paramsArray[] = "a.ean LIKE '%" . $parameter['ean'] . "%' "; - } - - if(isset($parameter['shop']) && !empty($parameter['shop'])) { - $shop = explode(' ', $parameter['shop']); - $shop = (int)reset($shop); - $paramsArray[] = " ((a.shop = '" . $shop . "' OR a.shop2 = '" . $shop . "' OR a.shop3 = '" . $shop . "') OR a.id IN (SELECT artikel FROM artikel_onlineshops WHERE shop = '" . $shop . "')) "; - } - - if(isset($parameter['herstellernummer']) && !empty($parameter['herstellernummer'])) { - $paramsArray[] = "a.herstellernummer LIKE '%" . $parameter['herstellernummer'] . "%' "; - } - - if(isset($parameter['typ']) && !empty($parameter['typ'])) { - - $artikelkategorie = explode(" ", $parameter['typ']); - $artikelkategorieid = $artikelkategorie[0]; - $artikelkategorieid = $app->DB->Select("SELECT id FROM artikelkategorien WHERE id = '$artikelkategorieid' LIMIT 1"); - if($artikelkategorieid != ''){ - $artikelkategorie = $artikelkategorieid; - }else{ - $artikelkategorie = 0; - } - - if($artikelkategorie > 0){ - $joinartikelbaum = ' LEFT JOIN artikelbaum_artikel aba ON a.id = aba.artikel'; - $sql .= $joinartikelbaum; - $groupby = ' GROUP BY a.id '; - } - - } - - if ($paramsArray) { - $where .= ' AND ' . implode(' AND ', $paramsArray); - } - - if($more_data8){ - $where = 'a.geloescht=0 ' . $this->app->erp->ProjektRechte(); - } - - - $moreinfo = true; - $count = "SELECT COUNT(DISTINCT a.id) FROM artikel a $joins"; - $extrawhere = ''; - - if($baumids) - { - $count .= ' LEFT JOIN (SELECT artikel FROM `artikelbaum_artikel` WHERE ('.implode(' OR ', $baumids).') GROUP BY artikel) aa ON a.id = aa.artikel '; - $extrawhere = " AND ( NOT isnull(aa.artikel) OR a.typ = '".$filterbaum."_kat' ) "; - } - - - if($artikelkategorie > 0){ - $count .= $joinartikelbaum; - $where .= " AND (aba.kategorie = '$artikelkategorie' OR a.typ = '".$artikelkategorie."_kat') "; - $extrawhere .= " AND (aba.kategorie = '$artikelkategorie' OR a.typ = '".$artikelkategorie."_kat') "; - $fastcount .= $joinartikelbaum; - } - - - if($this->app->erp->Firmendaten('artikel_artikelnummer_suche') == '1'){ - - /*$maxEinkauf = $this->app->DB->Select( - "SELECT MAX(ct) as mx FROM( - SELECT artikel, COUNT(bestellnummer) as ct FROM einkaufspreise - WHERE bestellnummer IS NOT NULL - AND bestellnummer !='' - GROUP BY artikel - ) as data"); - - $maxVerkauf = $this->app->DB->Select( - "SELECT MAX(ct) as mx FROM( - SELECT artikel, COUNT(kundenartikelnummer) as ct FROM verkaufspreise - WHERE kundenartikelnummer IS NOT NULL - AND kundenartikelnummer !='' - GROUP BY artikel - ) as data"); - - for($i=0;$i<$maxEinkauf;$i++){ - $searchsql[] = '(SELECT bestellnummer FROM einkaufspreise e WHERE e.artikel=a.id AND bestellnummer != "" LIMIT '.$i.',1)'; - } - - for($i=0;$i<$maxVerkauf;$i++){ - $searchsql[] = '(SELECT kundenartikelnummer FROM verkaufspreise v WHERE v.artikel=a.id AND kundenartikelnummer != "" LIMIT '.$i.',1)'; - }*/ - - if($useCacheEkNumbers){ - $searchsql[] = 'cache.ek_customnumber'; - $searchsql[] = 'cache.vk_customnumber'; - } - else{ - $sql .= " LEFT JOIN einkaufspreise AS ekpr ON a.id = ekpr.artikel AND IFNULL(ekpr.bestellnummer,'') <> '' - AND (IFNULL(ekpr.gueltig_bis,'0000-00-00')='0000-00-00' OR ekpr.gueltig_bis >= CURDATE()) "; - $sql .= " LEFT JOIN verkaufspreise AS vkpr ON a.id = vkpr.artikel AND IFNULL(vkpr.kundenartikelnummer,'') <> '' - AND (IFNULL(vkpr.gueltig_bis,'0000-00-00')='0000-00-00' OR vkpr.gueltig_bis >= CURDATE())"; - - $count .= " LEFT JOIN einkaufspreise AS ekpr ON a.id = ekpr.artikel AND IFNULL(ekpr.bestellnummer,'') <> '' - AND (IFNULL(ekpr.gueltig_bis,'0000-00-00')='0000-00-00' OR ekpr.gueltig_bis >= CURDATE()) "; - - $count .= " LEFT JOIN verkaufspreise AS vkpr ON a.id = vkpr.artikel AND IFNULL(vkpr.kundenartikelnummer,'') <> '' - AND (IFNULL(vkpr.gueltig_bis,'0000-00-00')='0000-00-00' OR vkpr.gueltig_bis >= CURDATE())"; - - $fastcount .=" LEFT JOIN einkaufspreise AS ekpr ON a.id = ekpr.artikel AND IFNULL(ekpr.bestellnummer,'') <> '' - AND (IFNULL(ekpr.gueltig_bis,'0000-00-00')='0000-00-00' OR ekpr.gueltig_bis >= CURDATE()) "; - - $fastcount .= " LEFT JOIN verkaufspreise AS vkpr ON a.id = vkpr.artikel AND IFNULL(vkpr.kundenartikelnummer,'') <> '' - AND (IFNULL(vkpr.gueltig_bis,'0000-00-00')='0000-00-00' OR vkpr.gueltig_bis >= CURDATE())"; - $searchsql[] = " IFNULL(ekpr.bestellnummer,'') "; - $searchsql[] = " IFNULL(vkpr.kundenartikelnummer,'') "; - $groupby = ' GROUP BY a.id '; - if(!empty($joincached)){ - $groupby .= ' ,cache.id '; - } - } - } - else { - $groupby = ''; - } - - $count .= " WHERE a.geloescht=0 $extrawhere " . $this->app->erp->ProjektRechte('a.projekt'); - $cached_count = 'SELECT COUNT(id) FROM artikel WHERE geloescht = 0 AND intern_gesperrt <> 1 '.$this->app->erp->ProjektRechte('projekt'); - break; - case 'artikel_offenebestellungen': - $id = (int)$this->app->Secure->GetGET('id'); - $heading = array('Datum', 'Bestellung Nr.', 'Nummer', 'Menge', 'Geliefert', 'VPE','Einzelpreis','Gesamtpreis','Lieferant', 'Name', 'Lieferdatum', 'Status Bestellung', 'Menü'); - $width = array('10%', '10%', '10%', '10%', '10%', '10%', '10%', '10%', '10%','10%','10%', '10%', '1%'); - $findcols = array('b.datum', 'b.belegnr', 'bp.bestellnummer', 'bp.menge', 'bp.geliefert', 'bp.vpe', 'bp.preis','bp.preis*bp.menge', 'a.lieferantennummer', 'a.name', "if(bp.lieferdatum!='0000-00-00', bp.lieferdatum,'sofort')", 'b.status', 'bp.bestellung', 'b.id'); - $searchsql = array("DATE_FORMAT(b.datum,'%d.%m.%Y')", 'b.belegnr', 'bp.bestellnummer', $this->app->erp->FormatMenge("bp.menge"), $this->app->erp->FormatMenge("bp.geliefert"), 'bp.vpe', 'a.lieferantennummer', 'a.name', "if(bp.lieferdatum!='0000-00-00', DATE_FORMAT(bp.lieferdatum,'%d.%m.%Y'),'sofort')", 'b.status', 'bp.bestellung', $this->app->erp->FormatPreis("bp.preis",2), $this->app->erp->FormatPreis("bp.preis*bp.menge",2)); - - $defaultorder = 1; - $defaultorderdesc = 0; - - $menu = ""; - $menu .= ''; - $menu .= ' '; - $menu .= ""; - $menu .= ''; - $menu .= ''; - - $where = " artikel='$id' AND b.status!='storniert'" . $this->app->erp->ProjektRechte("b.id"); - - $alignright=array(4,5,6,7,8); - $numbercols = array(3,4,5,6,7); - $datecols = array(10); - - $sql = "SELECT SQL_CALC_FOUND_ROWS b.id, DATE_FORMAT(b.datum,'%d.%m.%Y') as datum, b.belegnr, bp.bestellnummer, ".$this->app->erp->FormatMenge("bp.menge").", ".$this->app->erp->FormatMenge("bp.geliefert").",bp.vpe, ".$this->app->erp->FormatPreis("bp.preis",2).",".$this->app->erp->FormatPreis("bp.preis*bp.menge",2).",a.lieferantennummer, a.name, if(bp.lieferdatum!='0000-00-00', DATE_FORMAT(bp.lieferdatum,'%d.%m.%Y'),'sofort') as lieferdatum, b.status, bp.bestellung, b.id FROM bestellung_position bp LEFT JOIN bestellung b ON bp.bestellung=b.id LEFT JOIN adresse a ON b.adresse=a.id"; - - //$orderby = " ORDER by b.datum DESC"; - - break; - case 'artikel_belege': - $id = (int)$this->app->Secure->GetGET('id'); - $heading = array('Beleg','Belegnr','Datum','Status','Zahlweise','Kd- / Lf-Nr.','Kunde / Lieferant','Bezeichnung','Menge','Geliefert','Preis' , 'Menü',''); - $width = array('5%','5%','5%','5%','5%','5%','15%','20%','5%','5%','5%', '1%','1%'); - $findcols = array('b.typ', 'b.belegnr' , 'b.datum','b.status','b.zahlungsweise','b.kundennummer','b.name','b.bezeichnung','b.menge','b.geliefert','b.preis','b.id','b.id'); - $searchsql = array('b.typ', 'b.belegnr' , "DATE_FORMAT(b.datum, '%d.%m.%Y')",'b.status','b.zahlungsweise','b.kundennummer','b.name','b.bezeichnung', $this->app->erp->FormatPreis('preis',2), $this->app->erp->FormatMenge('b.menge'), $this->app->erp->FormatMenge('b.geliefert')); - $fstatusoffen = $this->app->YUI->TableSearchFilter($name, 1, 'statusoffen', '0',0,'checkbox'); - $fstatusabgeschlossen = $this->app->YUI->TableSearchFilter($name, 2, 'statusabgeschlossen', '0',0,'checkbox'); - $fauftrag = $this->app->YUI->TableSearchFilter($name, 3, 'auftrag', '0',0,'checkbox'); - $frechnung = $this->app->YUI->TableSearchFilter($name, 4, 'rechnung', '0',0,'checkbox'); - $fgutschrift = $this->app->YUI->TableSearchFilter($name, 5, 'gutschrift', '0',0,'checkbox'); - $fangebot = $this->app->YUI->TableSearchFilter($name, 6, 'angebot', '0',0,'checkbox'); - $flieferschein = $this->app->YUI->TableSearchFilter($name, 7, 'lieferschein', '0',0,'checkbox'); - $fproduktion = $this->app->YUI->TableSearchFilter($name, 8, 'produktion', '0',0,'checkbox'); - $fbestellung = $this->app->YUI->TableSearchFilter($name, 9, 'bestellung', '0', 0, 'checkbox'); - if(!$fstatusoffen && !$fstatusabgeschlossen) - { - $fstatusoffen = 1; - $fstatusabgeschlossen = 1; - } - if(!$fauftrag && !$frechnung && !$fgutschrift && !$fangebot && !$flieferschein && !$fproduktion && !$fbestellung) - { - $fauftrag = 1; - $frechnung = 1; - $fgutschrift = 1; - $fangebot = 1; - $flieferschein = 1; - $fproduktion = 1; - $fbestellung = 1; - } - - $numbercols = array(8,9,10); - - if($fauftrag && $this->app->erp->RechteVorhanden('auftrag','list')) - { - $sqla[] = "(SELECT a.id, 'auftrag' as typ ,a.belegnr, a.datum, a.status, a.zahlungsweise, a.kundennummer, a.name, ap.bezeichnung, ifnull(sum(ap.menge),0) as menge,ifnull(sum(ap.geliefert_menge),0) as geliefert,ifnull(ap.preis*(100-ap.rabatt)/100,0) as preis - FROM auftrag a INNER JOIN auftrag_position ap ON a.id = ap.auftrag AND ap.artikel = '$id' - WHERE a.id > 0 ".(($fstatusabgeschlossen && !$fstatusoffen)?" AND a.status = 'abgeschlossen' ":(($fstatusoffen && !$fstatusabgeschlossen)?" AND a.status != 'abgeschlossen' AND a.status != 'storniert' ":""))." - ".$this->app->erp->ProjektRechte('a.projekt').' GROUP BY a.id)'; - } - if($frechnung && $this->app->erp->RechteVorhanden('rechnung','list')) - { - $sqla[] = "(SELECT a.id, 'rechnung' as typ ,a.belegnr, a.datum, a.status, a.zahlungsweise, a.kundennummer, a.name,ap.bezeichnung, ifnull(sum(ap.menge),0) as menge,0 as geliefert,ifnull(ap.preis*(100-ap.rabatt)/100,0) as preis - FROM rechnung a INNER JOIN rechnung_position ap ON a.id = ap.rechnung AND ap.artikel = '$id' - WHERE a.id > 0 ".(($fstatusabgeschlossen && !$fstatusoffen)?" AND a.status = 'abgeschlossen' ":(($fstatusoffen && !$fstatusabgeschlossen)?" AND a.status != 'abgeschlossen' ":""))." - ".$this->app->erp->ProjektRechte('a.projekt').' GROUP BY a.id )'; - } - if($fgutschrift && $this->app->erp->RechteVorhanden('gutschrift','list')) - { - $sqla[] = "(SELECT a.id, 'gutschrift' as typ ,a.belegnr, a.datum, a.status, a.zahlungsweise, a.kundennummer, a.name,ap.bezeichnung, ifnull(sum(ap.menge),0) as menge,0 as geliefert,ifnull(ap.preis*(100-ap.rabatt)/100,0) as preis - FROM gutschrift a INNER JOIN gutschrift_position ap ON a.id = ap.gutschrift AND ap.artikel = '$id' - WHERE a.id > 0 ".(($fstatusabgeschlossen && !$fstatusoffen)?" AND a.status = 'abgeschlossen' ":(($fstatusoffen && !$fstatusabgeschlossen)?" AND a.status != 'abgeschlossen' AND a.status != 'storniert' ":""))." - ".$this->app->erp->ProjektRechte('a.projekt').' GROUP BY a.id )'; - } - if($flieferschein && $this->app->erp->RechteVorhanden('lieferschein','list')) - { - $sqla[] = "(SELECT a.id, 'lieferschein' as typ ,a.belegnr, a.datum, a.status, '' as zahlungsweise, a.kundennummer, a.name,ap.bezeichnung, ifnull(sum(ap.menge),0) as menge,ifnull(sum(ap.geliefert),0) as geliefert,0 as preis - FROM lieferschein a INNER JOIN lieferschein_position ap ON a.id = ap.lieferschein AND ap.artikel = '$id' - WHERE a.id > 0 ".(($fstatusabgeschlossen && !$fstatusoffen)?" AND a.status = 'versendet' ":(($fstatusoffen && !$fstatusabgeschlossen)?" AND a.status != 'versendet' AND a.status != 'storniert' ":""))." - ".$this->app->erp->ProjektRechte('a.projekt').' GROUP BY a.id )'; - } - if($fangebot && $this->app->erp->RechteVorhanden('angebot','list')) - { - $sqla[] = "(SELECT a.id, 'angebot' as typ ,a.belegnr, a.datum, a.status, a.zahlungsweise, a.kundennummer, a.name,ap.bezeichnung, ifnull(sum(ap.menge),0) as menge,ifnull(sum(ap.geliefert),0) as geliefert,ifnull(ap.preis*(100-ap.rabatt)/100,0) as preis - FROM angebot a INNER JOIN angebot_position ap ON a.id = ap.angebot AND ap.artikel = '$id' - WHERE a.id > 0 ".(($fstatusabgeschlossen && !$fstatusoffen)?" AND a.status = 'abgeschlossen' ":(($fstatusoffen && !$fstatusabgeschlossen)?" AND a.status != 'abgeschlossen' AND a.status != 'storniert' ":""))." - ".$this->app->erp->ProjektRechte('a.projekt').' GROUP BY a.id )'; - } - if($fbestellung && $this->app->erp->RechteVorhanden('bestellung','list')) - { - $sqla[] = "(SELECT a.id, 'bestellung' as typ ,a.belegnr, a.datum, a.status, a.zahlungsweise, a.lieferantennummer as kundennummer, a.name, ap.bezeichnunglieferant as bezeichnung, ifnull(sum(ap.menge),0) as menge,ifnull(sum(ap.geliefert),0) as geliefert,ifnull(ap.preis,0) as preis - FROM bestellung a INNER JOIN bestellung_position ap ON a.id = ap.bestellung AND ap.artikel = '$id' - WHERE a.id > 0 ".(($fstatusabgeschlossen && !$fstatusoffen)?" AND a.status = 'abgeschlossen' ":(($fstatusoffen && !$fstatusabgeschlossen)?" AND a.status != 'abgeschlossen' AND a.status != 'storniert' ":""))." - ".$this->app->erp->ProjektRechte('a.projekt').' GROUP BY a.id )'; - } - if($fproduktion && $this->app->erp->ModulVorhanden('produktion') && $this->app->erp->RechteVorhanden('produktion','list')) - { - $sqla[] = "(SELECT a.id, 'produktion' as typ ,a.belegnr, a.datum, a.status, a.zahlungsweise, a.kundennummer, a.name, ap.bezeichnung, ifnull(sum(ap.menge),0) as menge,ifnull(sum(ap.geliefert),0) as geliefert,ifnull(ap.preis,0) as preis - FROM produktion a INNER JOIN produktion_position ap ON a.id = ap.produktion AND ap.artikel = '$id' - WHERE a.id > 0 ".(($fstatusabgeschlossen && !$fstatusoffen)?" AND a.status = 'abgeschlossen' ":(($fstatusoffen && !$fstatusabgeschlossen)?" AND a.status != 'abgeschlossen' AND a.status != 'storniert' ":""))." - ".$this->app->erp->ProjektRechte('a.projekt').' GROUP BY a.id )'; - } - - $where = 'b.id > 0'; - if(!isset($sqla)) - { - $sqla[] = "(SELECT 0, '' as typ ,a.belegnr, a.datum, a.status, a.zahlungsweise, a.kundennummer, a.name, ap.bezeichnung, ifnull(sum(ap.menge),0) as menge,ifnull(sum(ap.geliefert_menge),0) as geliefert,ifnull(ap.preis*(100-ap.rabatt)/100,0) as preis - FROM auftrag a INNER JOIN auftrag_position ap ON a.id = ap.auftrag AND ap.artikel = '$id' - WHERE a.id < 0 - )"; - $where = '0'; - } - - - $defaultorder = 1; //Optional wenn andere Reihenfolge gewuenscht - $defaultorderdesc=0; - $alignright = array(9,10,11); - $sql = "SELECT SQL_CALC_FOUND_ROWS b.id, b.typ,b.belegnr, DATE_FORMAT(b.datum, '%d.%m.%Y'), b.status, b.zahlungsweise, b.kundennummer, b.name, b.bezeichnung, ".$this->app->erp->FormatMenge("b.menge").", ".$this->app->erp->FormatMenge("b.geliefert").", ".$this->app->erp->FormatPreis("b.preis",2).", - concat('
app->Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\"> app->Conf->WFconf['defaulttheme']}/images/pdf.svg\" border=\"0\">
'),'' - FROM ( - ".implode(' UNION ALL ', $sqla).' - )b - - '; - break; - case 'instueckliste': - $allowed['artikel'] = array('instueckliste'); - $id = (int)$this->app->Secure->GetGET('id'); - // headings - $heading = array('Artikel', 'Nummer', 'Menge', 'Menü'); - $width = array('70%', '10%', '5%', '10%'); - $findcols = array('artikel', 'nummer', 'menge', 'id'); - $searchsql = array('a.name_de', 'a.nummer', 's.menge'); - $defaultorder = 4; - $defaultorderdesc = 1; - $alignright = array(3); - $menu = "app->Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\">"; - - // SQL statement - - if (!empty($this->app->Conf->WFdbType) && $this->app->Conf->WFdbType == 'postgre') { - $sql = 'SELECT s.id, a.name_de as artikel,a.nummer as nummer, trim(s.menge)+0 as menge, - CASE WHEN (SELECT SUM(l.menge) FROM lager_platz_inhalt l WHERE l.artikel=a.id) > 0 - THEN (SELECT SUM(l.menge) FROM lager_platz_inhalt l WHERE l.artikel=a.id) - ELSE 0 - END as lager, s.artikel as menu - FROM stueckliste s LEFT JOIN artikel a ON s.artikel=a.id '; - } else { - $sql = 'SELECT SQL_CALC_FOUND_ROWS s.id, a.name_de as artikel,a.nummer as nummer, trim(s.menge)+0 as menge, - s.stuecklistevonartikel - as menu - FROM stueckliste s LEFT JOIN artikel a ON s.stuecklistevonartikel=a.id '; - } - - // Fester filter - $where = "s.artikel='$id' "; - - // gesamt anzahl - $count = "SELECT COUNT(s.id) FROM stueckliste s WHERE s.stuecklistevonartikel='$id' "; - break; - case 'artikel_etiketten': - $allowed['artikel'] = array('etiketten'); - $artikelId = (int)$this->app->Secure->GetGET('id'); - // headings - $heading = array('Etikett', 'Menge', 'Drucker', 'Art', 'Menü'); - $width = array('30%', '10%', '20%', '20%', '5%'); - - $findcols = array('e.name', 'al.amount', 'd.name', 'al.type', 'al.id'); - $searchsql = array('e.name', 'al.amount', 'd.name', 'al.type'); - - $defaultorder = 0; - $defaultorderdesc = 1; - - $alignright = array(2); - - $menu = ""; - $menu .= ""; - $menu .= ""; - $menu .= ""; - $menu .= "
"; - $menu .= ''; - $menu .= "Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\">"; - $menu .= " "; - $menu .= ''; - $menu .= "Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\">"; - $menu .= ""; - $menu .= "
"; - - $sql = "SELECT SQL_CALC_FOUND_ROWS al.id, e.name, al.amount, d.name, CONCAT(UCASE(LEFT(al.type, 1)), SUBSTRING(al.type, 2)), al.id - FROM article_label al - LEFT JOIN etiketten e ON al.label_id = e.id - LEFT JOIN drucker d ON al.printer_id = d.id"; - - $where = "al.article_id = '$artikelId'"; - - break; - } - - - $erg = []; - foreach($erlaubtevars as $k => $v) - { - if(isset($$v)) - { - $erg[$v] = $$v; - } - } - return $erg; - } - public function __construct($app, $intern = false) { - //parent::GenArtikel($app); - $this->app=$app; - if($intern){ - return; - } - - $this->app->ActionHandlerInit($this); - - $this->app->ActionHandler("create","ArtikelCreate"); - $this->app->ActionHandler("demo","ArtikelDemo"); - $this->app->ActionHandler("edit","ArtikelEdit"); - $this->app->ActionHandler("list","ArtikelList"); - $this->app->ActionHandler("newlist","ArtikelNewList"); - $this->app->ActionHandler("stueckliste","ArtikelStueckliste"); - $this->app->ActionHandler("stuecklisteimport","ArtikelStuecklisteImport"); - $this->app->ActionHandler("stuecklisteupload","ArtikelStuecklisteUpload"); - $this->app->ActionHandler("instueckliste","ArtikelInStueckliste"); - $this->app->ActionHandler("delstueckliste","DelStueckliste"); - $this->app->ActionHandler("stuecklisteempty","ArtikelStuecklisteEmpty"); - $this->app->ActionHandler("stuecklisteexport","ArtikelStuecklisteExport"); - $this->app->ActionHandler("upstueckliste","UpStueckliste"); - $this->app->ActionHandler("downstueckliste","DownStueckliste"); - $this->app->ActionHandler("editstueckliste","ArtikelStuecklisteEditPopup"); - $this->app->ActionHandler("verkauf","ArtikelVerkauf"); - $this->app->ActionHandler("copy","ArtikelCopy"); - $this->app->ActionHandler("copyedit", "ArtikelCopyEdit"); - $this->app->ActionHandler("copysave", "ArtikelCopySave"); - $this->app->ActionHandler("schliessen","ArtikelSchliessen"); - $this->app->ActionHandler("verkaufcopy","ArtikelVerkaufCopy"); - $this->app->ActionHandler("verkaufdelete","ArtikelVerkaufDelete"); - $this->app->ActionHandler("verkaufdisable","ArtikelVerkaufDisable"); - $this->app->ActionHandler("einkauf","ArtikelEinkauf"); - $this->app->ActionHandler("einkaufdelete","ArtikelEinkaufDelete"); - $this->app->ActionHandler("einkaufdisable","ArtikelEinkaufDisable"); - $this->app->ActionHandler("einkaufcopy","ArtikelEinkaufCopy"); - $this->app->ActionHandler("projekte","ArtikelProjekte"); - $this->app->ActionHandler("rabatt","ArtikelRabatt"); - $this->app->ActionHandler("lager","ArtikelLager"); - $this->app->ActionHandler("mindesthaltbarkeitsdatum","ArtikelMHD"); - $this->app->ActionHandler("mhddelete","ArtikelMHDDelete"); - $this->app->ActionHandler("bestbeforeadd","ArticleBestbeforeAdd"); - $this->app->ActionHandler("bestbeforereduce","ArticleBestbeforeReduce"); - $this->app->ActionHandler("batchadd","ArticleBatchAdd"); - $this->app->ActionHandler("batchreduce","ArticleBatchReduce"); - $this->app->ActionHandler("chargedelete","ArtikelChargeDelete"); - $this->app->ActionHandler("chargen","ArtikelChargen"); - $this->app->ActionHandler("wareneingang","ArtikelWareneingang"); - $this->app->ActionHandler("offenebestellungen","ArtikelOffeneBestellungen"); - $this->app->ActionHandler("belege","ArtikelBelege"); - $this->app->ActionHandler("statistik","ArtikelStatistik"); - $this->app->ActionHandler("offeneauftraege","ArtikelOffeneAuftraege"); - $this->app->ActionHandler("dateien","ArtikelDateien"); - - $this->app->ActionHandler("eigenschaften","ArtikelEigenschaften"); - $this->app->ActionHandler("eigenschaftensuche","ArtikelEigenschaftenSuche"); - $this->app->ActionHandler("eigenschaftendelete","ArtikelEigenschaftenDelete"); - $this->app->ActionHandler("eigenschaftencopy","ArtikelEigenschaftenCopy"); - $this->app->ActionHandler("eigenschafteneditpopup","ArtikelEigenschaftenEditPopup"); - - $this->app->ActionHandler("provision","Artikelprovision"); - $this->app->ActionHandler("delete","ArtikelDelete"); - $this->app->ActionHandler("auslagern","ArtikelAuslagern"); - $this->app->ActionHandler("einlagern","ArtikelEinlagern"); - $this->app->ActionHandler("umlagern","ArtikelUmlagern"); - $this->app->ActionHandler("ausreservieren","ArtikelAusreservieren"); - $this->app->ActionHandler("etiketten","ArtikelEtiketten"); - $this->app->ActionHandler("reservierung","ArtikelReservierung"); - $this->app->ActionHandler("onlineshop","ArtikelOnlineShop"); - $this->app->ActionHandler("ajaxwerte","ArtikelAjaxWerte"); - $this->app->ActionHandler("profisuche","ArtikelProfisuche"); - $this->app->ActionHandler("lagerlampe","ArtikelLagerlampe"); - $this->app->ActionHandler("shopexport","ArtikelShopexport"); - $this->app->ActionHandler("shopimport","ArtikelShopimport"); - $this->app->ActionHandler("shopexportfiles","ArtikelShopexportFiles"); - $this->app->ActionHandler("stuecklisteetiketten","ArtikelStuecklisteEtiketten"); - $this->app->ActionHandler("minidetail","ArtikelMiniDetail"); - - $this->app->ActionHandler("artikelfreifelder", "ArtikelFreifelder"); - $this->app->ActionHandler("artikelfreifelderedit", "ArtikelFreifelderEdit"); - $this->app->ActionHandler("artikelfreifeldersave", "ArtikelFreifelderSave"); - $this->app->ActionHandler("artikelfreifelderdelete", "ArtikelFreifelderDelete"); - - $this->app->ActionHandler("lagersync","ArtikelLagerSync"); - $this->app->ActionHandler("thumbnail", "ArtikelThumbnail"); - $this->app->ActionHandler("schnellanlegen", "ArtikelSchnellanlegen"); - - $this->app->ActionHandler("baum", "ArtikelBaum"); - $this->app->ActionHandler("baumajax", "ArtikelBaumAjax"); - $this->app->ActionHandler("baumdetail", "ArtikelBaumDetail"); - $this->app->ActionHandler("baumedit","ArtikelBaumEdit"); - - $id = $this->app->Secure->GetGET('id'); - $nummer = $this->app->Secure->GetPOST('nummer'); - - if(is_numeric($id) && $id > 0) - { - $arr = $this->app->DB->SelectRow("SELECT CONCAT(name_de,' (',nummer,')') as name2, name_de,nummer FROM artikel WHERE id='$id' LIMIT 1"); - if(!empty($arr)){ - $artikel = $arr['name2']; - $nummer = $arr['nummer']; - $namede = $arr['name_de']; - } - } - else{ - $artikel = $nummer; - } - - if($artikel!=''){ - $this->app->Tpl->SetText('UEBERSCHRIFT', 'Artikel: ' . $artikel); - } - else { - $this->app->Tpl->SetText('UEBERSCHRIFT','Artikel'); - } - - $this->app->Tpl->SetText('ANZEIGENUMMER',$nummer); - if(isset($namede)){ - $this->app->Tpl->SetText('ANZEIGENAMEDE',' '.$this->app->erp->LimitChar($namede,65)); - } - $this->app->Tpl->Set('FARBE','[FARBE1]'); - - $this->app->erp->Headlines('Artikel'); - - $this->app->ActionHandlerListen($app); - - $this->app = $app; - } - - public function ArtikelRabatt() - { - $cmd = $this->app->Secure->GetGET('cmd'); - $id = $this->app->Secure->GetGET('id'); - $rabatt = $this->app->Secure->GetGET('rabatt'); - $fmodul = $this->app->Secure->GetGET('fmodul'); - $rabatt = str_replace(',','.',$rabatt); - - if($cmd==='angebot' || $cmd==='auftrag' || $cmd==='rechnung' || $cmd==='gutschrift') - { - $schreibschutz = $this->app->DB->Select("SELECT schreibschutz FROM $cmd WHERE id='$id'"); - if($schreibschutz!='1') - { - $this->app->DB->Update( - "UPDATE `{$cmd}_position` AS `pos` - INNER JOIN `artikel` AS `art` ON pos.artikel = art.id - SET pos.rabatt='{$rabatt}', - pos.keinrabatterlaubt = 1 - WHERE pos.{$cmd} = {$id} - AND (art.keinrabatterlaubt = 0 OR art.keinrabatterlaubt IS NULL)" - ); - } - } - $this->app->Location->execute('index.php?module='.$cmd.'&action=positionen&id='.$id.'&fmodul='.$fmodul); - } - - public function ArtikelDemo() - { - $projekt = $this->app->erp->Firmendaten('projekt'); - if(class_exists('EtikettenPDFCustom')) - { - $Brief = new EtikettenPDFCustom($this->app,$projekt); - }else{ - $Brief = new EtikettenPDF($this->app,$projekt); - } - $Brief->SetXML(' - '); - $Brief->Output('test.pdf','D'); - $this->app->ExitXentral(); - } - - public function ArtikelEinkaufAdd() - { - $bezeichnunglieferant = ''; - $artikel = (int)$this->app->Secure->GetPOST('artikel'); - $lieferant = $this->app->Secure->GetPOST('lieferant'); - $waehrung = $this->app->Secure->GetPOST('waehrung'); - $bestellnummer = $this->app->Secure->GetPOST('bestellnummer'); - $ab_menge = (float)str_replace(',','.',$this->app->Secure->GetPOST('ab_menge')); - $preis = (float)str_replace(',','.',$this->app->Secure->GetPOST('preis')); - if(!$artikel) { - echo json_encode(array('status'=>0,'error'=>'Kein Artikel')); - $this->app->ExitXentral(); - } - $lieferantennummera = explode(' ',$lieferant); - $adresse = $this->app->DB->Select("SELECT id FROM adresse WHERE lieferantennummer <> '' AND lieferantennummer = '".$this->app->DB->real_escape_string($lieferantennummera[0])."' LIMIT 1"); - if(!$adresse) { - echo json_encode(array('status'=>0,'error'=>'Lieferant nicht gefunden')); - $this->app->ExitXentral(); - } - $artikelprojekt = $this->app->DB->Select("SELECT projekt FROM artikel WHERE id = '$artikel' LIMIT 1"); - if($artikelprojekt && !$this->app->erp->UserProjektRecht($artikelprojekt)) - { - echo json_encode(array('status'=>0,'error'=>'Fehlende Projektrechte')); - $this->app->ExitXentral(); - } - $adressprojekt = $this->app->DB->Select("SELECT projekt FROM adresse WHERE id = '$adresse' LIMIT 1"); - if($adressprojekt && !$this->app->erp->UserProjektRecht($adressprojekt)) { - echo json_encode(array('status'=>0,'error'=>'Fehlende Projektrechte')); - $this->app->ExitXentral(); - } - if($ab_menge < 0) { - echo json_encode(array('status'=>0,'error'=>'Menge ist kleiner 0')); - $this->app->ExitXentral(); - } - $this->app->erp->AddEinkaufspreis($artikel,$ab_menge,$adresse,$bestellnummer,$bezeichnunglieferant,$preis,$waehrung); - echo json_encode(array('status'=>1,'html'=>$this->app->erp->EinkaufspreiseTabelle($artikel))); - $this->app->ExitXentral(); - } - - public function ArtikelEigenschaften() - { - if(!$this->app->DB->Select('SELECT id FROM eigenschaften LIMIT 1'))// $this->app->erp->ModulVorhanden('artikeleigenschaften')) - { - $id = $this->app->Secure->GetGET('id'); - $cmd = $this->app->Secure->GetGET('cmd'); - if($cmd === 'save') { - $name = $this->app->Secure->GetPOST('name'); - $wert = trim($this->app->Secure->GetPOST('wert')); - $einheit = $this->app->Secure->GetPOST('einheit'); - $status = 0; - if($name)// && $wert != "") - { - $status = 1; - $checkkategorie = $this->app->DB->Select("SELECT id FROM artikeleigenschaften WHERE name = '$name' AND geloescht <> 1 LIMIT 1"); - if(!$checkkategorie) - { - $this->app->DB->Insert("INSERT INTO artikeleigenschaften (name) values ('$name')"); - $checkkategorie = $this->app->DB->GetInsertID(); - } - $checkwert = $this->app->DB->Select("SELECT id FROM artikeleigenschaftenwerte WHERE artikeleigenschaften = '$checkkategorie' AND artikel = '$id' AND wert = '$wert' LIMIT 1"); - if(!$checkwert)$this->app->DB->Insert("INSERT INTO artikeleigenschaftenwerte (wert, artikeleigenschaften, artikel, einheit) values ('$wert','$checkkategorie','$id','$einheit')"); - } - - echo json_encode(array('status'=>$status)); - $this->app->ExitXentral(); - } - if($cmd === 'get') { - $eigenschaftid = (int)$this->app->Secure->GetPOST('eigenschaftid'); - $erg = $this->app->DB->SelectRow("SELECT ew.id, ew.wert, ew.einheit, e.name, ew.artikeleigenschaften, e.typ, ew.vorlage FROM artikeleigenschaften e INNER JOIN artikeleigenschaftenwerte ew ON e.id = ew.artikeleigenschaften - WHERE ew.id = '$eigenschaftid' AND ew.artikel = '$id' AND e.geloescht <> 1 LIMIT 1"); - - if(!$erg['vorlage']){ - $erg['typ'] = 'einzeilig'; - } - - if($erg['typ'] === 'select'){ - $tmp = $this->app->DB->SelectArr("SELECT wert FROM eigenschaften_vorlagen_werte WHERE name = '".$erg['name']."' AND vorlage='".$erg['vorlage']."'"); - $erlaubteWerte = array(); - foreach ($tmp as $wert){ - $erlaubteWerte[] = $wert['wert']; - } - $erg['erlaubtewerte'] = $erlaubteWerte; - } - - echo json_encode($erg); - $this->app->ExitXentral(); - } - if($cmd === 'update') - { - $name = trim($this->app->Secure->GetPOST('e_name')); - $wert = trim($this->app->Secure->GetPOST('e_wert')); - $einheit = trim($this->app->Secure->GetPOST('e_einheit')); - $eigenschaftid = (int)$this->app->Secure->GetPOST('eigenschaftid'); - - - $error = ""; - - if($name == ""){ - $error .= "Bitte Eigenschaft ausfüllen\n"; - }else{ - $artikeleigenschaftid = $this->app->DB->Select("SELECT id FROM artikeleigenschaften WHERE name = '$name' AND geloescht = 0 LIMIT 1"); - if($artikeleigenschaftid == "" || $artikeleigenschaftid <= 0){ - $this->app->DB->Insert("INSERT INTO artikeleigenschaften (name) VALUES ('$name')"); - $artikeleigenschaftid = $this->app->DB->Select("SELECT id FROM artikeleigenschaften WHERE name = '$name' LIMIT 1"); - } - } - - if($wert == ""){ - $error .= "Bitte Wert ausfüllen\n"; - } - - $eigenschaftvorhanden = $this->app->DB->Select("SELECT ew.id FROM artikeleigenschaften e INNER JOIN artikeleigenschaftenwerte ew ON e.id = ew.artikeleigenschaften WHERE ew.id != '$eigenschaftid' AND ew.artikel = '$id' AND ew.artikeleigenschaften = '$artikeleigenschaftid' AND ew.wert = '$wert' AND e.geloescht = 0 LIMIT 1"); - - if($eigenschaftvorhanden != "" && $eigenschaftvorhanden > 0){ - $error .= 'Eigenschaft ist bereits vorhanden.'; - } - - - if($error == ''){ - if($id && $eigenschaftid){ - $this->app->DB->Update("UPDATE artikeleigenschaftenwerte SET artikeleigenschaften = '$artikeleigenschaftid', wert = '$wert', einheit = '$einheit' WHERE id = '$eigenschaftid' LIMIT 1"); - - echo json_encode(array('status'=>1)); - $this->app->ExitXentral(); - } - if($id){ - $this->app->DB->Insert("INSERT INTO artikeleigenschaftenwerte (artikeleigenschaften, wert, einheit, artikel) - VALUES ('$artikeleigenschaftid', '$wert', '$einheit', '$id')"); - - echo json_encode(array('status'=>1)); - $this->app->ExitXentral(); - } - echo json_encode(array('status'=>0,'statusText'=>"Fehler")); - $this->app->ExitXentral(); - } - echo json_encode(array('status'=>0,'statusText'=>$error)); - $this->app->ExitXentral(); - } - - if($cmd === 'copy'){ - - $name = trim($this->app->Secure->GetPOST('e_name')); - $wert = trim($this->app->Secure->GetPOST('e_wert')); - $einheit = trim($this->app->Secure->GetPOST('e_einheit')); - $eigenschaftid = (int)$this->app->Secure->GetPOST('eigenschaftid'); - - - $error = ""; - - if($name == ""){ - $error .= "Bitte Eigenschaft ausfüllen\n"; - }else{ - $artikeleigenschaftid = $this->app->DB->Select("SELECT id FROM artikeleigenschaften WHERE name = '$name' AND geloescht = 0 LIMIT 1"); - if($artikeleigenschaftid == "" || $artikeleigenschaftid <= 0){ - $this->app->DB->Insert("INSERT INTO artikeleigenschaften (name) VALUES ('$name')"); - $artikeleigenschaftid = $this->app->DB->Select("SELECT id FROM artikeleigenschaften WHERE name = '$name' LIMIT 1"); - } - } - - if($wert == ""){ - $error .= "Bitte Wert ausfüllen\n"; - } - - $eigenschaftvorhanden = $this->app->DB->Select("SELECT ew.id FROM artikeleigenschaften e INNER JOIN artikeleigenschaftenwerte ew ON e.id = ew.artikeleigenschaften WHERE ew.id != '$eigenschaftid' AND ew.artikel = '$id' AND ew.artikeleigenschaften = '$artikeleigenschaftid' AND ew.wert = '$wert' AND e.geloescht = 0 LIMIT 1"); - - if($eigenschaftvorhanden != "" && $eigenschaftvorhanden > 0){ - $error .= 'Eigenschaft ist bereits vorhanden.'; - } - - - if($error == ''){ - if($id && $eigenschaftid == 0){ - $this->app->DB->Insert("INSERT INTO artikeleigenschaftenwerte (artikeleigenschaften, wert, einheit, artikel) - VALUES ('$artikeleigenschaftid', '$wert', '$einheit', '$id')"); - - echo json_encode(array('status'=>1)); - $this->app->ExitXentral(); - } - echo json_encode(array('status'=>0,'statusText'=>"Fehler")); - $this->app->ExitXentral(); - } - echo json_encode(array('status'=>0,'statusText'=>$error)); - $this->app->ExitXentral(); - } - if($cmd === 'delete'){ - $eigenschaftid = (int)$this->app->Secure->GetPOST('eigenschaftid'); - $eigenschaftid = $this->app->DB->Select("SELECT id FROM artikeleigenschaftenwerte - WHERE artikel='$id' AND id='$eigenschaftid' LIMIT 1"); - $status = 0; - if($eigenschaftid > 0) - { - $this->app->DB->Delete("DELETE FROM artikeleigenschaftenwerte WHERE id = '$eigenschaftid'"); - $status = 1; - } - echo json_encode(array('status'=>$status,'statusText'=>'Fehler')); - $this->app->ExitXentral(); - } - if($cmd === 'getuebersetzung'){ - - $uebersetzungid = (int)$this->app->Secure->GetPOST('id'); - - $data = $this->app->DB->SelectRow("SELECT ap.id, ap.article_id, ap.language_to, ap.property_to, ap.property_value_to, - ap.language_from, ap.property_from, ap.property_value_from, ap.shop_id - FROM article_property_translation ap - WHERE ap.id = '$uebersetzungid' AND ap.article_id = '$id' LIMIT 1"); - - if($data){ - if($data['article_id'] > 0){ - $articleNumber = $this->app->DB->Select("SELECT nummer FROM artikel WHERE id = '".$data['article_id']."' LIMIT 1"); - $articleName = $this->app->DB->Select("SELECT name_de FROM artikel WHERE id = '".$data['article_id']."' LIMIT 1"); - if($articleNumber != "" && $articleName != ""){ - $data['article'] = $articleNumber." ".$articleName; - } - } - - if($data['shop_id'] > 0){ - $shopName = $this->app->DB->Select("SELECT bezeichnung FROM shopexport WHERE id = '".$data['shop_id']."' LIMIT 1"); - $data['shop'] = $data['shop_id']." ".$shopName; - }else{ - $data['shop'] = ''; - } - - }else{ - $data['id'] = 0; - $articleNumber = $this->app->DB->Select("SELECT nummer FROM artikel WHERE id = '$id' LIMIT 1"); - $articleName = $this->app->DB->Select("SELECT name_de FROM artikel WHERE id = '$id' LIMIT 1"); - if($articleNumber != "" && $articleName != ""){ - $data['article'] = $articleNumber." ".$articleName; - }else{ - $data['article'] = ''; - } - $data['language_to'] = ''; - $data['property_to'] = ''; - $data['property_value_to'] = ''; - $data['language_from'] = ''; - $data['property_from'] = ''; - $data['property_value_from'] = ''; - $data['shop'] = ''; - } - - echo json_encode($data); - $this->app->ExitXentral(); - } - if($cmd === 'saveuebersetzung'){ - - $eintragid = (int)$this->app->Secure->GetPOST('id'); - $languageTo = trim($this->app->Secure->GetPOST('languageTo')); - $propertyTo = trim($this->app->Secure->GetPOST('propertyTo')); - $propertyValueTo = trim($this->app->Secure->GetPOST('propertyValueTo')); - $languageFrom = trim($this->app->Secure->GetPOST('languageFrom')); - $propertyFrom = trim($this->app->Secure->GetPOST('propertyFrom')); - $propertyValueFrom = trim($this->app->Secure->GetPOST('propertyValueFrom')); - $shop = trim($this->app->Secure->GetPOST('shop')); - - $error = ""; - - if($id != ""){ - $id = (int)$this->app->DB->Select("SELECT id FROM artikel WHERE id = '$id' LIMIT 1"); - if($id === 0){ - $error .= "Bitte gültigen Artikel auswählen"."\n"; - } - } - - if($shop != ""){ - $shop = explode(' ', $shop); - $shopId = $shop[0]; - if($shopId != ""){ - $shopId = (int)$this->app->DB->Select("SELECT id FROM shopexport WHERE id = '$shopId' LIMIT 1"); - if($shopId === 0){ - $error .= "Bitte gültigen Shop auswählen"."\n"; - } - } - }else{ - $shopId = 0; - } - - if($propertyTo == "" && $propertyValueTo == ""){ - $error .= "Bitte Eigenschaft oder Wert der Zielsprache ausfüllen"."\n"; - } - - //shop bedenken - $uebersetzungschonvorhanden = $this->app->DB->Select("SELECT id FROM article_property_translation WHERE article_id = '$id' AND language_from = '$languageFrom' AND language_to = '$languageTo' AND property_from = '$propertyFrom' AND property_to = '$propertyTo' AND property_value_from = '$propertyValueFrom' AND property_value_to = '$propertyValueTo' AND id != '$eintragid' LIMIT 1"); - if($uebersetzungschonvorhanden != "" && $uebersetzungschonvorhanden > 0){ - $error .= "Diese Übersetzung gibt es bereits für diesen Artikel.\n"; - } - - if($error == ''){ - - if($languageFrom === 'DE'){ - if($propertyFrom != ''){ - $propertyFromExists = $this->app->DB->Select("SELECT id FROM artikeleigenschaften WHERE name = '$propertyFrom' LIMIT 1"); - if(!$propertyFromExists){ - $this->app->DB->Insert("INSERT INTO artikeleigenschaften (name) VALUES ('$propertyFrom')"); - } - } - } - - if($eintragid){ - $this->app->DB->Update("UPDATE article_property_translation SET article_id = '$id', language_to = '$languageTo', - property_to = '$propertyTo', property_value_to = '$propertyValueTo', language_from = '$languageFrom', - property_from = '$propertyFrom', property_value_from = '$propertyValueFrom', shop_id = '$shopId' - WHERE id = '$eintragid'"); - - echo json_encode(array('status'=>1)); - $this->app->ExitXentral(); - } - $eigenschaftvorhanden = $this->app->DB->Select("SELECT aw.id FROM artikeleigenschaftenwerte aw JOIN artikeleigenschaften ae ON aw.artikeleigenschaften = ae.id WHERE aw.wert = '$propertyValueFrom' AND ae.name = '$propertyFrom' AND aw.artikel = '$id' LIMIT 1"); - if($eigenschaftvorhanden == "" || $eigenschaftvorhanden <= 0){ - $eigenschaftsid = $this->app->DB->Select("SELECT id FROM artikeleigenschaften WHERE name = '$propertyFrom' LIMIT 1"); - $this->app->DB->Insert("INSERT INTO artikeleigenschaftenwerte (artikeleigenschaften, wert, artikel) VALUES ('$eigenschaftsid', '$propertyValueFrom', '$id')"); - } - - - $this->app->DB->Insert("INSERT INTO article_property_translation (article_id, language_to, property_to, property_value_to, - language_from, property_from, property_value_from, shop_id) - VALUES ('$id', '$languageTo', '$propertyTo', '$propertyValueTo', '$languageFrom', '$propertyFrom', - '$propertyValueFrom', '$shopId')"); - - echo json_encode(array('status'=>1)); - $this->app->ExitXentral(); - } - echo json_encode(array('status'=>0,'statusText'=>$error)); - $this->app->ExitXentral(); - } - if($cmd === 'deleteuebersetzung'){ - $eintragid = (int)$this->app->Secure->GetPOST('id'); - if($eintragid){ - $this->app->DB->Update("DELETE FROM article_property_translation WHERE id = '$eintragid'"); - } - - echo json_encode(array('status'=>1)); - $this->app->ExitXentral(); - } - - //VORLAGE LADEN - $laden = $this->app->Secure->GetPOST('laden'); - if($laden){ - $vorlage = $this->app->Secure->GetPOST('vorlage'); - if(trim($vorlage) !== ''){ - - $vorlagenid = $this->app->DB->Select("SELECT id FROM eigenschaften_vorlagen WHERE bezeichnung = '$vorlage'"); - $query = sprintf("SELECT evw.name, evw.wert, evw.einheit, ae.id FROM eigenschaften_vorlagen_werte evw - LEFT JOIN artikeleigenschaften ae ON evw.name = ae.name - WHERE evw.vorlage=%d AND (ISNULL(ae.name) OR ae.typ<>'select' - AND NOT ae.name IN(SELECT name FROM artikeleigenschaften WHERE geloescht=0 AND typ='select')) - GROUP BY ae.name, evw.wert, evw.einheit", - $vorlagenid); - $alleigenschaften = $this->app->DB->SelectArr($query); - $eigenschaftenNurSelect= $this->app->DB->SelectArr("SELECT evw.name, evw.wert, evw.einheit, ae.id FROM eigenschaften_vorlagen_werte evw JOIN artikeleigenschaften ae ON evw.name = ae.name WHERE ae.geloescht = 0 AND evw.vorlage='$vorlagenid' AND ae.typ='select' GROUP BY evw.name"); - foreach ($eigenschaftenNurSelect as $eigenschaft){ - $alleigenschaften[] = $eigenschaft; - } - - foreach($alleigenschaften as $eigenschaft){ - $eigenschaftid = $this->app->DB->Select("SELECT id FROM artikeleigenschaften WHERE id='$eigenschaft[id]' LIMIT 1"); - if(!$eigenschaftid){ - $this->app->DB->Insert("INSERT INTO artikeleigenschaften (name) values ('".$eigenschaft['name']."')"); - $eigenschaftid = $this->app->DB->GetInsertID(); - } - $checkwert = $this->app->DB->Select("SELECT id FROM artikeleigenschaftenwerte WHERE artikeleigenschaften = '$eigenschaftid' AND artikel = '$id' AND wert = '".$eigenschaft['wert']."' LIMIT 1"); - if(!$checkwert){ - $this->app->DB->Insert("INSERT INTO artikeleigenschaftenwerte (wert, artikeleigenschaften, artikel, einheit, vorlage) values ('".$eigenschaft['wert']."','$eigenschaftid','$id','".$eigenschaft['einheit']."', '$vorlagenid')"); - } - } - } - } - - $sprachen = $this->app->DB->SelectArr("SELECT iso, bezeichnung_de FROM sprachen"); - $select = ''; - foreach($sprachen as $key=>$value){ - $select .= ""; - } - $this->app->Tpl->Add("SPRACHEN", $select); - - $this->app->YUI->AutoComplete('u_propertyFrom', 'artikeleigenschaften'); - $this->app->YUI->AutoComplete('u_propertyValueFrom', 'artikeleigenschaftenwerte'); - $this->app->YUI->AutoComplete('u_shop', 'shopnameid'); - - $this->app->YUI->AutoComplete('e_einheit','artikeleinheit'); - $this->app->YUI->AutoComplete('e_name','artikeleigenschaften'); - $this->app->YUI->AutoComplete('e_textwert', 'artikeleigenschaftenwerte'); - $this->app->YUI->AutoComplete('vorlage','eigenschaften_vorlagen'); - - $this->ArtikelMenu(); - $this->app->YUI->TableSearch('TAB1','artikel_eigenschaften_neu', 'show','','',basename(__FILE__), __CLASS__); - $this->app->Tpl->Parse('PAGE','artikel_artikeleigenschaften.tpl'); - - }else{ - - $this->app->Tpl->Add('UEBERSCHRIFT',' (Verkauf)'); - $this->app->Tpl->Set('SUBSUBHEADING','Verkaufspreise'); $this->ArtikelMenu(); - $id = $this->app->Secure->GetGET('id'); // neues arbeitspaket - - $this->app->YUI->AutoComplete('einheit','artikeleinheit'); - $this->app->YUI->AutoComplete('einheit2','artikeleinheit'); - $this->app->YUI->AutoComplete('einheit3','artikeleinheit'); - - $widget = new WidgetEigenschaften($this->app,'TAB2'); - $widget->form->SpecialActionAfterExecute('none', - "index.php?module=artikel&action=eigenschaften&id=$id"); - if($this->app->Secure->GetPOST('submit')!=''){ - $this->app->erp->EnableTab('tabs-2'); - } - - $widget->Create(); - - $this->app->YUI->TableSearch('TAB1','eigenschaften', 'show','','',basename(__FILE__), __CLASS__); - $this->app->Tpl->Parse('PAGE','eigenschaftenuebersicht.tpl'); - } - } - - public function CheckRights() - { - if($this->app->User->GetType()==='admin'){ - return true; - } - $id = (int)$this->app->Secure->GetGET('id'); - - $action = $this->app->Secure->GetGET('action'); - if($id && ($action == 'verkaufdisable' || $action == 'verkaufcopy' || $action == 'verkaufdelete' || $action == 'verkaufeditpopup')) - { - $projekt = $this->app->DB->Select("SELECT a.projekt FROM artikel a INNER JOIN verkaufspreise v on v.artikel = a.id WHERE v.id = '$id' LIMIT 1"); - if($projekt){ - return $this->app->erp->UserProjektRecht($projekt); - } - }elseif($id && ($action == 'einkaufdisable' || $action == 'einkaufcopy' || $action == 'einkaufdelete' || $action == 'einkaufeditpopup')) - { - $projekt = $this->app->DB->Select("SELECT a.projekt FROM artikel a INNER JOIN einkaufspreise e on e.artikel = a.id WHERE e.id = '$id' LIMIT 1"); - if($projekt){ - return $this->app->erp->UserProjektRecht($projekt); - } - } - return true; - } - - public function ArtikelEigenschaftenEditPopup() - { - $id = $this->app->Secure->GetGET('id'); - $this->app->Tpl->Set('OPENDISABLE',''); - - $this->app->YUI->AutoComplete('einheit','artikeleinheit'); - $this->app->YUI->AutoComplete('einheit2','artikeleinheit'); - $this->app->YUI->AutoComplete('einheit3','artikeleinheit'); - - $sid = $this->app->DB->Select("SELECT artikel FROM eigenschaften WHERE id='$id' LIMIT 1"); - $this->ArtikelMenu($sid); - - $this->app->Tpl->Set('ABBRECHEN',""); - $widget = new WidgetEigenschaften($this->app,'TAB1'); - $widget->form->SpecialActionAfterExecute('close_refresh', - "index.php?module=artikel&action=eigenschaften&id=$sid&&22#tabs-1"); - $widget->Edit(); - $this->app->Tpl->Add('TAB2','Sie bearbeiten gerade eine Eigenschaft. Erst nach dem Speichern können neue Preise angelegt werden.'); - $this->app->Tpl->Add('TAB3','Sie bearbeiten gerade eine Eigenschaft. Erst nach dem Speichern können Statistiken betrachtet werden.'); - $this->app->Tpl->Parse('PAGE','eigenschaftenuebersicht.tpl'); - } - - - public function ArtikelEigenschaftenDelete() - { - $id = $this->app->Secure->GetGET('id'); - $sid = $this->app->DB->Select("SELECT artikel FROM eigenschaften WHERE id='$id' LIMIT 1"); - if($id > 0){ - $this->app->DB->Delete("DELETE FROM eigenschaften WHERE id='$id' LIMIT 1"); - } - $this->app->Location->execute('index.php?module=artikel&action=eigenschaften&id='.$sid); - } - - public function ArtikelLagerSync() - { - $id = $this->app->Secure->GetGET('id'); - if($id > 0){ - $this->app->DB->Update("UPDATE artikel SET cache_lagerplatzinhaltmenge='-100' WHERE id='$id'"); - } - $sync = $this->app->erp->LagerSync($id,true); - if($sync==1) { - echo 'gruen'; - } - else { - echo 'gelb'; - } - $this->app->ExitXentral(); - } - - function Preisrechner() - { - $steuer_normal_komma = ($this->app->erp->GetStandardSteuersatzNormal() + 100)/100.0; - $steuer_ermaessigt_komma = ($this->app->erp->GetStandardSteuersatzErmaessigt() + 100)/100.0; - - $this->app->Tpl->Set('PREISRECHNER',"app->erp->GetStandardSteuersatzNormal()."\" onclick=\"this.form.preis.value=parseFloat(this.form.preis.value.split(',').join('.'))*$steuer_normal_komma;\">"); - $this->app->Tpl->Add('PREISRECHNER',"app->erp->GetStandardSteuersatzNormal()."\" onclick=\"this.form.preis.value=parseFloat(this.form.preis.value.split(',').join('.'))/$steuer_normal_komma;\">"); - if($this->app->erp->Version()!=='stock') - { - $this->app->Tpl->Add('PREISRECHNER',"
app->erp->GetStandardSteuersatzErmaessigt()."\" onclick=\"this.form.preis.value=parseFloat(this.form.preis.value.split(',').join('.'))*$steuer_ermaessigt_komma;\">"); - $this->app->Tpl->Add('PREISRECHNER',"app->erp->GetStandardSteuersatzErmaessigt()."\" onclick=\"this.form.preis.value=parseFloat(this.form.preis.value.split(',').join('.'))/$steuer_ermaessigt_komma;\">"); - } - } - - - public function ArtikelMiniDetail($parsetarget='',$menu=true) - { - $id=$this->app->Secure->GetGET('id'); - - $this->app->Tpl->Set('ID',$id); - - $artikelarr = $this->app->DB->SelectRow("SELECT * FROM artikel WHERE id='$id' LIMIT 1"); - $kurztext_de = ''; - $name_de = ''; - $nummer = ''; - $lagerartikel = 0; - $lager_platz = 0; - $standardbild = 0; - if(!empty($artikelarr)) { - $kurztext_de = $artikelarr['anabregs_text']; - //$kurztext_de = !empty($artikelarr['kurztext_de'])?$artikelarr['kurztext_de']:$artikelarr['anabregs_text']; - $name_de = $artikelarr['name_de']; - $nummer = $artikelarr['nummer']; - $lagerartikel = $artikelarr['lagerartikel']; - $lager_platz = $artikelarr['lager_platz']; - $standardbild = $this->app->erp->GetArtikelStandardbild($id,true); - } - - $this->app->Tpl->Set('NAME_DE',$name_de); - $this->app->Tpl->Set('NUMMER',$nummer); - - if($standardbild > 0) { - //index.php?module=artikel&action=thumbnail&id=2&bildvorschau=62_100_100 - //$this->app->Tpl->Set('ARTIKELBILD', ""); - $this->app->Tpl->Set('ARTIKELBILD', - 'Artikelbild' - ); - } - - if($lagerartikel>0){ - $this->app->Tpl->Set('LAGERLINK', " "); - } - else{ - $this->app->Tpl->Set('LAGERLINK', ''); - } - - $this->app->Tpl->Set('KURZTEXT',$kurztext_de); - - // easy table mit arbeitspaketen YUI als template - $table = new EasyTable($this->app); - $table->Query("SELECT CONCAT(l.bezeichnung,' / ',lp.kurzbezeichnung, if(lp.sperrlager,' (Kein Auto-Versand Lager)',''), - if(lp.poslager,' (POS Lager)',''),if(lp.verbrauchslager,' (Verbrauchslager)',''),if(lp.autolagersperre,' (Nachschublager)','')) as lager, trim(lpi.menge)+0 as menge - FROM lager_platz_inhalt lpi LEFT JOIN lager_platz as lp ON lpi.lager_platz=lp.id LEFT JOIN projekt p ON lpi.projekt=p.id - LEFT JOIN lager l ON l.id=lp.lager WHERE lpi.artikel='$id' "); - - $table->DisplayNew('ARTIKEL','Menge','noAction'); - - if($lager_platz > 0) - { - $lagerarr = $this->app->DB->SelectRow("SELECT lp.lager,lp.kurzbezeichnung,lag.bezeichnung - FROM lager_platz AS lp LEFT JOIN lager AS lag ON lp.lager = lag.id - WHERE lp.id = '$lager_platz' LIMIT 1"); - if(!empty($lagerarr)) - { - $lager = $lagerarr['lager']; - $lagerhauptbezeichung = $lagerarr['bezeichnung']; - $lagerbezeichnung = $lagerarr['kurzbezeichnung']; - }else{ - $lagerhauptbezeichung = ''; - } - }else{ - $lagerhauptbezeichung = ''; - } - if($lagerhauptbezeichung=='') { - $lagerhauptbezeichung='kein Standardlager eingestellt'; - } - $this->app->Tpl->Add('ARTIKEL',"
Standardlager: $lagerhauptbezeichung ".(!empty($lagerbezeichnung)?"/ $lagerbezeichnung":'')."

"); - - $this->app->Tpl->Add('ARTIKEL',$this->ArtikelLagerInfo($id)); - - $table = new EasyTable($this->app); - $table->Query("SELECT adr.name as kunde, adr.kundennummer as kdnr, trim(r.menge)+0 as menge ,p.abkuerzung as projekt,r.grund FROM lager_reserviert r LEFT JOIN artikel a ON a.id=r.artikel LEFT JOIN projekt p ON - p.id=r.projekt LEFT JOIN adresse adr ON r.adresse=adr.id WHERE r.firma='{$this->app->User->GetFirma()}' AND a.id='$id'"); - - $table->DisplayNew('RESERVIERT','Grund','noAction'); - - - $table = new EasyTable($this->app); - $table->Query("SELECT p.belegnr,a.name, a.kundennummer as kdnr, p.status,trim(po.menge)+0 as menge FROM auftrag_position po LEFT JOIN auftrag p ON p.id=po.auftrag LEFT JOIN adresse a ON a.id=p.adresse WHERE po.artikel='$id' AND (p.status!='abgeschlossen' AND p.status!='storniert')"); - - - $table->DisplayNew('AUFTRAG','Menge','noAction'); - - $table = new EasyTable($this->app); - /* $table->Query("SELECT DATE_FORMAT(b.datum,'%d.%m.%Y') as datum, CONCAT('',b.belegnr,'') as 'bestellung Nr.', bp.bestellnummer as Nummer, bp.menge, bp.geliefert, bp.vpe as VPE, a.lieferantennummer as lieferant, a.name as name, if(bp.lieferdatum!='0000-00-00', DATE_FORMAT(bp.lieferdatum,'%d.%m.%Y'),'sofort') as lieferdatum, b.status as status - FROM bestellung_position bp LEFT JOIN bestellung b ON bp.bestellung=b.id LEFT JOIN adresse a ON b.adresse=a.id - WHERE artikel='$id' AND b.status!='storniert' AND b.status!='abgeschlossen' AND bp.geliefertQuery("SELECT DATE_FORMAT(b.datum,'%d.%m.%Y') as datum, CONCAT('',b.belegnr,'') as 'bestellung', trim(bp.menge)+0 as menge, trim(bp.geliefert)+0 as geliefert, a.name as name, if(bp.lieferdatum!='0000-00-00', DATE_FORMAT(bp.lieferdatum,'%d.%m.%Y'),'sofort') as lieferdatum - FROM bestellung_position bp LEFT JOIN bestellung b ON bp.bestellung=b.id LEFT JOIN adresse a ON b.adresse=a.id - WHERE artikel='$id' AND b.status!='storniert' AND b.status!='abgeschlossen' AND bp.geliefertDisplayNew('BESTELLUNG','Lieferdatum','noAction'); - - $table = new EasyTable($this->app); - $table->Query('SELECT a.name as lieferant, trim(e.ab_menge)+0 ab, '.$this->app->erp->FormatPreis("e.preis")." as preis, e.waehrung FROM einkaufspreise e LEFT JOIN adresse a ON a.id=e.adresse - WHERE e.artikel='$id' AND e.geloescht!=1 AND (e.gueltig_bis >= curdate() OR e.gueltig_bis='0000-00-00')"); - - $table->DisplayNew('EINKAUFSPREISE','Waehrung','noAction'); - - $verwendeberechneterek = $this->app->DB->Select("SELECT verwendeberechneterek FROM artikel WHERE id='$id' LIMIT 1"); - $berechneterek = $this->app->DB->Select('SELECT '.$this->app->erp->FormatPreis("berechneterek")." FROM artikel WHERE id='$id' LIMIT 1"); - $berechneterekwaehrung = $this->app->DB->Select("SELECT berechneterekwaehrung FROM artikel WHERE id='$id' LIMIT 1"); - - - if($verwendeberechneterek > 0){ - $this->app->Tpl->Set('KALKULIERTEREK', 'Kalkulierter EK-Preis: ' . $berechneterek . ' ' . $berechneterekwaehrung); - } - - $table = new EasyTable($this->app); - $table->Query("SELECT if(a.name='' OR a.id IS NULL,if(v.gruppe > 0,(SELECT CONCAT(g.name,' ',g.kennziffer) FROM gruppen g WHERE g.id=v.gruppe ),'Alle'),a.name) as kunde, trim(v.ab_menge)+0 ab, ".$this->app->erp->FormatPreis("v.preis")." as preis, v.waehrung FROM verkaufspreise v LEFT JOIN adresse a ON a.id=v.adresse - WHERE v.artikel='$id' AND v.geloescht!=1 AND (v.gueltig_bis >= curdate() OR v.gueltig_bis='0000-00-00')"); - - $table->DisplayNew('VERKAUFSPREISE','Waehrung','noAction'); - - - $table = new EasyTable($this->app); - $table->Query(" - - SELECT e.name, CONCAT(ew.wert,'  ') as wert, ew.einheit FROM artikeleigenschaften e INNER JOIN artikeleigenschaftenwerte ew ON e.id = ew.artikeleigenschaften WHERE ew.artikel='$id' - - - /* SELECT t.hauptkategorie, t.unterkategorie,format(sum(t.wert),2) as wert,t.einheit - FROM ( - - - (SELECT e.hauptkategorie, e.unterkategorie, e.wert, e.einheit - FROM eigenschaften e LEFT JOIN artikel a ON a.id=e.artikel - WHERE a.id='$id')UNION ALL - (SELECT e.hauptkategorie, e.unterkategorie, (s.menge* e.wert) as wert, e.einheit - FROM eigenschaften e LEFT JOIN stueckliste s ON s.artikel=e.artikel - WHERE s.stuecklistevonartikel='$id') - )t GROUP BY t.hauptkategorie, t.unterkategorie,t.einheit*/ - - - ");// ORDER by e.bezeichnung - $table->DisplayNew('EIGENSCHAFTEN','Einheit','noAction'); - - $table = new EasyTable($this->app); - $table->Query('SELECT a.nummer, a.name_de as artikel, '.$this->app->erp->FormatMenge('s.menge')." as menge FROM stueckliste s - LEFT JOIN artikel a ON s.artikel=a.id - WHERE s.stuecklistevonartikel='$id' ORDER by a.nummer"); - $table->DisplayNew('STUECKLISTE','Menge','noAction'); - - $this->app->erp->RunHook('artikel_minidetail_hook1', 1, $id); - - $this->app->Tpl->Output('artikel_minidetail.tpl'); - $this->app->ExitXentral(); - } - - - - - - public function ArtikelShopimport() - { - $id = $this->app->Secure->GetGET('id'); - $shop = $this->app->Secure->GetGET('shop'); - $artikel = array($id); - $artikelshopid = (int)$this->app->Secure->GetGET('artikelshopid'); - - if($artikelshopid > 0) - { - $shop = $this->app->DB->Select("SELECT shop FROM artikel_onlineshops WHERE id = '$artikelshopid' AND artikel = '$id' AND aktiv = 1 LIMIT 1"); - }else{ - if($shop=='1'){ - $shop = $this->app->DB->Select("SELECT shop FROM artikel WHERE id='$id' LIMIT 1"); - } - elseif($shop=='2'){ - $shop = $this->app->DB->Select("SELECT shop2 FROM artikel WHERE id='$id' LIMIT 1"); - } - elseif($shop=='3'){ - $shop = $this->app->DB->Select("SELECT shop3 FROM artikel WHERE id='$id' LIMIT 1"); - } - } - - $nummer = $this->app->DB->Select("SELECT nummer FROM artikel WHERE id='$id' LIMIT 1"); - $extnummer = $this->app->DB->Select("SELECT nummer FROM artikelnummer_fremdnummern WHERE artikel = '$id' AND shopid='$shop' AND aktiv = 1 AND nummer <> '' LIMIT 1"); - if($extnummer){ - $nummer = $extnummer; - } - $result = $this->app->remote->RemoteGetArticle($shop,$nummer); - - $update = $this->updateShopArticle($id, $result); - - $msg = $update['msg_encoded']; - $this->app->Location->execute("index.php?module=artikel&action=edit&id=$id&msg=$msg#tabs-4"); - } - - /** - * @param int $id - * @param array|string $result - * - * @return array - */ - public function updateShopArticle($id, $result) - { - if(is_array($result)) { - $result['uebersicht_de'] = htmlentities($result['uebersicht_de'],ENT_QUOTES, 'UTF-8'); - $result['uebersicht_en'] = htmlentities($result['uebersicht_en'],ENT_QUOTES, 'UTF-8'); - - if($result['name_de']=='' && $result['name']!='') { - $result['name_de']=$result['name']; - } - } - $isOk = false; - $error = ''; - $info = ''; - if(is_array($result) && $result['name_de']!='' && !is_array($result['name_de']) && !empty($result['name_de'])) { - $isOk = true; - //$result['name_de'] = $result['name']; - if($result['aktiv'] !='1'){ - $result['inaktiv']=1; - } - else{ - $result['inaktiv']=0; - } - - $fields = [ - 'name_de','kurztext_de','uebersicht_de','name_en','kurztext_en','uebersicht_en','beschreibung_de', - 'beschreibung_en','metakeywords_de','metakeywords_en','metatitle_de','metatitle_en','metadescription_de', - 'metadescription_en', - 'inaktiv','pseudopreis','lieferzeitmanuell','pseudolager','autolagerlampe','restmenge','gewicht', - 'downloadartikel','ean','herstellernummer','hersteller' - ]; - - if($result['restmenge']!='1') { - $result['restmenge']=0; - } - - // pseudolager - $result['autolagerlampe']=1; - - //name - foreach($fields as $nameofcolumn) { - if(isset($result[$nameofcolumn])) { - if( - ($result[$nameofcolumn]!='' && !is_array($result[$nameofcolumn])) - || $nameofcolumn==='lieferzeitmanuell' || $nameofcolumn==='pseudopreis' - ){ - $this->app->DB->Update( - "UPDATE artikel - SET " . $nameofcolumn . "='" . $this->app->DB->real_escape_string($result[$nameofcolumn]) . "' - WHERE id='$id' LIMIT 1" - ); - } - } - } - - //preis_netto - if($result['preis_netto'] > 0) { - $this->app->erp->AddVerkaufspreis($id,1,0,$result['preis_netto']); - } - $info = 'Der Artikel wurde aus dem Shop geladen und nach Xentral importiert!'; - $msg = $this->app->erp->base64_url_encode('
'.$info.'
'); - } - else { - $check = strpos($result ,'error:'); - - if($check===0) { - $result = str_replace('error:','',$result); - $error = 'Fehlermeldung vom Shop: '.$result; - $msg = $this->app->erp->base64_url_encode('
'.$error.'
'); - } - else { - $error = 'Es gab keine Rückmeldung vom Shop! '.$result; - $msg = $this->app->erp->base64_url_encode('
'.$error.'
'); - } - } - - return ['status'=>$isOk, 'info'=>$info, 'msg_encoded' => $msg, 'error' => $error]; - } - - public function ArtikelShopexport() - { - $id = $this->app->Secure->GetGET('id'); - $shop = $this->app->Secure->GetGET('shop'); - $artikel = array($id); - $artikelshopid = (int)$this->app->Secure->GetGET('artikelshopid'); - - if($artikelshopid > 0) - { - $shop = $this->app->DB->Select("SELECT shop FROM artikel_onlineshops WHERE id = '$artikelshopid' AND artikel = '$id' AND aktiv = 1 LIMIT 1"); - $this->app->User->SetParameter('artikel_shopexport_shop', ''); - }else{ - if($shop=='1'){ - $shop = $this->app->DB->Select("SELECT shop FROM artikel WHERE id='$id' LIMIT 1"); - } - elseif($shop=='2'){ - $shop = $this->app->DB->Select("SELECT shop2 FROM artikel WHERE id='$id' LIMIT 1"); - } - elseif($shop=='3'){ - $shop = $this->app->DB->Select("SELECT shop3 FROM artikel WHERE id='$id' LIMIT 1"); - } - } - - $artikelexport = $this->app->DB->Select("SELECT artikelexport FROM shopexport WHERE id='$shop' LIMIT 1"); - $lagerexport = $this->app->DB->Select("SELECT lagerexport FROM shopexport WHERE id='$shop' LIMIT 1"); - - $externenummer = $this->app->DB->Select("SELECT nummer FROM artikelnummer_fremdnummern WHERE artikel = '$id' AND aktiv = 1 AND shopid = '$shop' AND nummer <> '' ORDER BY bezeichnung = 'SHOPID' DESC LIMIT 1"); - - if($externenummer) - { - $extartikelnummer = array($externenummer); - }else{ - $extartikelnummer = ''; - } - - $pageContents = $this->app->remote->RemoteSendArticleList($shop,$artikel,$extartikelnummer); - $check = strpos($pageContents ,'error:'); - $msg = ''; - if(!empty($pageContents) && is_array($pageContents)) { - if(!empty($pageContents['status']) && !empty($pageContents['message'])) { - $msg = $this->app->erp->base64_url_encode('
'.$pageContents['message'].'
'); - } - elseif(isset($pageContents['status']) && !empty($pageContents['message'])) { - $msg = $this->app->erp->base64_url_encode('
'.$pageContents['message'].'
'); - } - } - elseif($pageContents=='1') { - $pageContents='success'; - } - - if(empty($msg) && $pageContents!='') { - $pageContents = " ($pageContents)"; - } - - $this->app->erp->LogFile($this->app->DB->real_escape_string('manueller Shopexport Artikel: '.$this->app->DB->Select("SELECT nummer FROM artikel WHERE id = '$id' LIMIT 1").' Shop: '.$shop.' Status: '.$pageContents)); - // keine fehlermeldung vom shop - if(empty($msg)) { - $linkToImporterSettings = ''; - if($this->app->erp->RechteVorhanden('onlineshops', 'edit')){ - $url = 'index.php?module=onlineshops&action=edit&id='.$shop; - $linkToImporterSettings = "Zu den Shopeinstellungen"; - } - - if($check === 0){ - $msg = $this->app->erp->base64_url_encode("
Es gab einen Fehler beim Aktualisieren des Artikels im Shop!$pageContents
"); - } - else if($pageContents == ''){ - if($artikelexport != 1 && $lagerexport != 1){ - $msg = $this->app->erp->base64_url_encode("
Der Artikel konnte nicht zum Shop übertragen werden! In den Shopeinstellungen ist festgelegt, dass die Artikelinformation- und Lagerbestandsübertragung nicht erlaubt ist!$pageContents $linkToImporterSettings
"); - } - else{ - if($pageContents === '0' || $pageContents === 0){ - $msg = $this->app->erp->base64_url_encode("
Es gab einen Fehler beim Aktualisieren des Artikels im Shop! Stellen Sie sicher, dass die Zugangsdaten und URL's korrekt sind! Möglicherweise kein Artikelpreis hinterlegt
"); - }else{ - $msg = $this->app->erp->base64_url_encode("
Es gab einen Fehler beim Aktualisieren des Artikels im Shop! Stellen Sie sicher, dass die Zugangsdaten und URL's korrekt sind!$pageContents $linkToImporterSettings
"); - } - } - } - else{ - if($artikelexport != 1 && $lagerexport == 1){ - $msg = $this->app->erp->base64_url_encode("
Es wurde nur der Lagerbestand (nicht die Artikelinfos entsprechend der Einstellungen) im Shop aktualisiert!$pageContents $linkToImporterSettings
"); - } - else if($lagerexport != 1 && $artikelexport == 1){ - $msg = $this->app->erp->base64_url_encode("
Es wurde nur der Artikel (nicht der Lagerbestand entsprechend der Einstellungen) im Shop aktualisiert!$pageContents $linkToImporterSettings
"); - } - else{ - $msg = $this->app->erp->base64_url_encode("
Der Artikel wurde im Shop aktualisiert!$pageContents
"); - } - } - } - $this->app->erp->LagerSync($artikel); - - $this->app->Location->execute("index.php?module=artikel&action=edit&id=$id&msg=$msg#tabs-4"); - } - - public function ArtikelShopexportFiles() - { - $id = $this->app->Secure->GetGET('id'); - $shop = $this->app->Secure->GetGET('shop'); - - if($shop=='1'){ - $shop = $this->app->DB->Select("SELECT shop FROM artikel WHERE id='$id' LIMIT 1"); - } - elseif($shop=='2'){ - $shop = $this->app->DB->Select("SELECT shop2 FROM artikel WHERE id='$id' LIMIT 1"); - } - elseif($shop=='3'){ - $shop = $this->app->DB->Select("SELECT shop3 FROM artikel WHERE id='$id' LIMIT 1"); - } - - if($this->app->remote->RemoteUpdateFilesArtikel($id,$shop)){ - $msg = $this->app->erp->base64_url_encode('
Der Artikel wurde im Shop aktualisiert!
'); - } - else{ - $msg = $this->app->erp->base64_url_encode('
Es gab einen Fehler beim Aktualisieren des Artikels im Shop!
'); - } - - $this->app->Location->execute("index.php?module=artikel&action=edit&id=$id&msg=$msg#tabs-5"); - } - - - public function ArtikelStuecklisteEtiketten() - { - $id = $this->app->Secure->GetGET('id'); - $this->app->erp->ArtikelStuecklisteDrucken($id); - $this->app->Location->execute("index.php?module=artikel&action=stueckliste&id=$id"); - } - - public function ArtikelSchliessen() - { - $id = $this->app->Secure->GetGET('id'); - if($id > 0 && is_numeric($id)){ - $this->app->DB->Update("UPDATE bestellung_position SET abgeschlossen='1' WHERE artikel='$id'"); - } - $referer = $_SERVER['HTTP_REFERER']; - if(empty($referer)) { - $referer = 'index.php'; - } - $this->app->Location->execute($referer); - } - - public function ArtikelLagerlampe() - { - $jetztnichtlagernd = ''; - $aktivieren = $this->app->Secure->GetPOST('aktivieren'); - $deaktivieren = $this->app->Secure->GetPOST('deaktivieren'); - $jetztnichtlagerndrot = ''; - //$jetztnichtlagerndrot = $this->app->Secure->GetPOST('jetztnichtlagerndrot'); - $jetztgruen = $this->app->Secure->GetPOST('jetztgruen'); - $jetztgelb = $this->app->Secure->GetPOST('jetztgelb'); - $jetztrot = $this->app->Secure->GetPOST('jetztrot'); - $tab3gruen = $this->app->Secure->GetPOST('tab3gruen'); - $neuweg = $this->app->Secure->GetPOST('neuweg'); - $artikelmarkiert = $this->app->Secure->GetPOST('artikelmarkiert'); - $artikelmarkierthidden = $this->app->Secure->GetPOST('artikelmarkierthidden'); - - $cartikelmarkiert = count($artikelmarkiert); - if($jetztgruen!='') - { - for($i=0;$i < $cartikelmarkiert; $i++) { - $this->app->DB->Update("UPDATE artikel SET lieferzeit='green',ausverkauft='0' WHERE id='" . $artikelmarkiert[$i] . "' LIMIT 1"); - } - } - - else if($jetztgelb!='') - { - for($i=0;$i < $cartikelmarkiert; $i++) { - $this->app->DB->Update("UPDATE artikel SET lieferzeit='yellow',ausverkauft='0' WHERE id='" . $artikelmarkiert[$i] . "' LIMIT 1"); - } - } - - else if($jetztrot!='') - { - for($i=0;$i < $cartikelmarkiert; $i++) { - $this->app->DB->Update("UPDATE artikel SET lieferzeit='red' WHERE id='" . $artikelmarkiert[$i] . "' LIMIT 1"); - } - } - - else if($aktivieren!='') - { - foreach($artikelmarkierthidden as $key=>$value) - { - if($artikelmarkiert[$key]=='1') - { - $this->app->DB->Update("UPDATE artikel SET autolagerlampe='1' WHERE id='".$key."' LIMIT 1"); - } - else { - $this->app->DB->Update("UPDATE artikel SET autolagerlampe='0' WHERE id='".$key."' LIMIT 1"); - } - } - } - - else if($neuweg!='') - { - for($i=0;$i < $cartikelmarkiert; $i++) { - $this->app->DB->Update("UPDATE artikel SET neu='0' WHERE id='" . $artikelmarkiert[$i] . "' LIMIT 1"); - } - } - - else if($jetztnichtlagernd!='') - { - for($i=0;$i < $cartikelmarkiert; $i++) { - $this->app->DB->Update("UPDATE artikel SET lieferzeit='bestellt' WHERE id='" . $artikelmarkiert[$i] . "' LIMIT 1"); - } - } - else if($jetztnichtlagerndrot!='') - { - for($i=0;$i < $cartikelmarkiert; $i++) { - $this->app->DB->Update("UPDATE artikel SET lieferzeit='nichtlieferbar' WHERE id='" . $artikelmarkiert[$i] . "' LIMIT 1"); - } - } - - // $this->app->erp->MenuEintrag("index.php?module=artikel&action=create","Neuen Artikel anlegen"); - $this->app->erp->MenuEintrag('index.php?module=lager&action=list','zurück zur Übersicht'); - - $this->app->Tpl->Set('TAB1','
Hier werden alle Artikel die als nicht lagernd Online-Shop markierten Artikel angezeigt.
'); - $this->app->Tpl->Set('TAB2','
Hier werden alle Artikel die als lagernd im Online-Shop markiert sind jedoch nicht im Lager liegen.
'); - $this->app->Tpl->Set('TAB3','
Hier werden alle Artikel die als ausverkauf im Online-Shop markierten sind jedoch im Lager liegen.
'); - - $this->app->YUI->TableSearch('TAB1','manuellagerlampe', 'show','','',basename(__FILE__), __CLASS__); - $this->app->YUI->TableSearch('TAB2','autolagerlampe', 'show','','',basename(__FILE__), __CLASS__); - // $this->app->YUI->TableSearch('TAB2','artikeltabellelagerndabernichtlagernd'); - // $this->app->YUI->TableSearch('TAB3','artikeltabellehinweisausverkauft'); - $this->app->YUI->TableSearch('TAB3','artikeltabelleneu', 'show','','',basename(__FILE__), __CLASS__); - - $this->app->erp->Headlines('Lagerlampen berechnen'); - $this->app->Tpl->Set('TABTEXT','Lagerlampen berechnen'); - - $this->app->Tpl->Parse('MANUELLCHECKBOX','checkbox.tpl'); - $this->app->Tpl->Parse('AUTOCHECKBOX','checkbox2.tpl'); - $this->app->Tpl->Parse('PAGE','lagerlampen.tpl'); - } - - - public function ArtikelProfisuche() - { - $id = $this->app->Secure->GetGET('id'); // abhaengig von cmd - $cmd = $this->app->Secure->GetGET('cmd'); - $fmodul = $this->app->Secure->GetGET('fmodul'); - if($cmd === 'filterbaum') - { - $this->app->User->SetParameter('filterbaum_'.$fmodul,$this->app->Secure->GetPOST('id')); - echo json_encode(array('status'=>1)); - $this->app->ExitXentral(); - } - $this->app->User->SetParameter('filterbaum_'.$fmodul,''); - $anlegen = $this->app->Secure->GetPOST('anlegen'); - $bezeichnung = ''; - $projekt = $this->app->Secure->GetPOST('projekt'); - $adresse = $this->app->Secure->GetPOST('adresse'); - $menge = $this->app->Secure->GetPOST('menge'); - $preis = $this->app->Secure->GetPOST('preis'); - $bestellnummer = $this->app->Secure->GetPOST('bestellnummer'); - $bezeichnunglieferant = $this->app->Secure->GetPOST('bezeichnunglieferant'); - $typ = $this->app->Secure->GetPOST('typ'); - $name_de = $this->app->Secure->GetPOST('name_de'); - $kurztext_de = $this->app->Secure->GetPOST('kurztext_de'); - $umsatzsteuer = $this->app->Secure->GetPOST('umsatzsteuer'); - $steuersatz = $this->app->Secure->GetPOST('steuersatz'); - $allelieferanten = $this->app->Secure->GetPOST('allelieferanten'); - $internerkommentar = $this->app->Secure->GetPOST('internerkommentar'); - $lagerartikel = $this->app->Secure->GetPOST('lagerartikel'); - - // Anfang: FIX Batch-Insert übermittelt keine Umsatzsteuer und keinen Steuersatz > Werte aus DB holen - $insert = $this->app->Secure->GetGET('insert'); - if($insert=='true'){ - if(empty($umsatzsteuer)){ - if($cmd != 'bestellung' && $cmd != 'anfrage' && $cmd != 'preisanfrage'){ - $umsatzsteuer = $this->app->DB->Select("SELECT a.umsatzsteuer FROM verkaufspreise AS v INNER JOIN artikel AS a ON v.artikel = a.id WHERE v.id='$id' LIMIT 1"); - }else{ - $umsatzsteuer = $this->app->DB->Select("SELECT a.umsatzsteuer FROM einkaufspreise AS e INNER JOIN artikel AS a ON e.artikel = a.id WHERE e.id='$id' LIMIT 1"); - } - } - if(empty($steuersatz)){ - if($cmd != 'bestellung' && $cmd != 'anfrage' && $cmd != 'preisanfrage'){ - $steuersatz = $this->app->DB->Select("SELECT a.steuersatz FROM verkaufspreise AS v INNER JOIN artikel AS a ON v.artikel = a.id WHERE v.id='$id' LIMIT 1"); - }else{ - $steuersatz = $this->app->DB->Select("SELECT a.steuersatz FROM einkaufspreise AS e INNER JOIN artikel AS a ON e.artikel = a.id WHERE e.id='$id' LIMIT 1"); - } - if ((float)$steuersatz <= 0) { - $steuersatz = null; - } - } - } - // Ende: FIX Batch-Insert übermittelt keine Umsatzsteuer und keinen Steuersatz > Werte aus DB holen - - if (empty($menge)) { - $menge = $this->app->Secure->GetGET('menge'); - } - if (empty($name_de)){ - $name_de = $this->app->Secure->GetGET('name_de'); - } - - if(!in_array($umsatzsteuer, ['normal','ermaessigt','befreit'], true)){ - $umsatzsteuer = 'normal'; - } - if (!empty($steuersatz)) { - $umsatzsteuer = ''; - $steuersatz = (float)$steuersatz; - } else { - $steuersatz = null; - } - $steuersatzSqlValue = empty($steuersatz) ? 'NULL' : "'$steuersatz'"; - - $insert = $this->app->Secure->GetGET('insert'); - - if($insert=='true') - { - // hole alles anhand der verkaufspreis id - - $id = $this->app->Secure->GetGET('sid'); - $vid = $this->app->Secure->GetGET('id'); - $cmd = $this->app->Secure->GetGET('cmd'); - - if($cmd!=='bestellung' && $cmd!=='anfrage' && $cmd!=='preisanfrage') - { - $artikel_id = $this->app->DB->Select("SELECT artikel FROM verkaufspreise WHERE id='$vid' LIMIT 1"); - $preis = $this->app->DB->Select("SELECT preis FROM verkaufspreise WHERE id='$vid' LIMIT 1"); - $projekt = $this->app->DB->Select("SELECT projekt FROM verkaufspreise WHERE id='$vid' LIMIT 1"); - $waehrung = $this->app->DB->Select("SELECT waehrung FROM verkaufspreise WHERE id='$vid' LIMIT 1"); - if (empty($menge)){ - $menge = $this->app->DB->Select("SELECT ab_menge FROM verkaufspreise WHERE id='$vid' LIMIT 1"); - } - } else { - $artikel_id = $this->app->DB->Select("SELECT artikel FROM einkaufspreise WHERE id='$vid' LIMIT 1"); - $preis = $this->app->DB->Select("SELECT preis FROM einkaufspreise WHERE id='$vid' LIMIT 1"); - $projekt = $this->app->DB->Select("SELECT projekt FROM einkaufspreise WHERE id='$vid' LIMIT 1"); - $waehrung = $this->app->DB->Select("SELECT waehrung FROM einkaufspreise WHERE id='$vid' LIMIT 1"); - if (empty($menge)){ - $menge = $this->app->DB->Select("SELECT ab_menge FROM einkaufspreise WHERE id='$vid' LIMIT 1"); - } - } - $lieferdatum = '0000-00-00'; - - $vpe = ''; - - if($projekt <=0 ){ - $projekt = $this->app->DB->Select("SELECT name_de FROM artikel WHERE id='$artikel_id' LIMIT 1"); - } - - if($projekt <=0){ - $projekt = $this->app->DB->Select("SELECT projekt FROM {$cmd} WHERE id='$id' LIMIT 1"); - } - - if($waehrung==''){ - $waehrung = $this->app->DB->Select("SELECT waehrung FROM {$cmd} WHERE id='$id' LIMIT 1"); - } - - if($waehrung==''){ - $waehrung = $this->app->erp->GetStandardWaehrung($projekt); - } - - $sprache = $this->app->DB->Select("SELECT sprache FROM {$cmd} WHERE id='$id' LIMIT 1"); - - if($sprache==='englisch') - { - if($kurztext_de==''){ - $kurztext_de = $this->app->DB->Select("SELECT anabregs_text_en FROM artikel WHERE id='$artikel_id' LIMIT 1"); - } - if($bezeichnung==''){ - $bezeichnung = $this->app->DB->Select("SELECT name_en FROM artikel WHERE id='$artikel_id' LIMIT 1"); - } - } - - if($kurztext_de==''){ - $kurztext_de = $this->app->DB->Select("SELECT anabregs_text FROM artikel WHERE id='$artikel_id' LIMIT 1"); - } - - if($bezeichnung==""){ - $bezeichnung = $this->app->DB->Select("SELECT name_de FROM artikel WHERE id='$artikel_id' LIMIT 1"); - } - - $nummer = $this->app->DB->Select("SELECT nummer FROM artikel WHERE id='$artikel_id' LIMIT 1"); - $allelieferanten = $this->app->DB->Select("SELECT allelieferanten FROM artikel WHERE id='$artikel_id' LIMIT 1"); - - $sort = (int)$this->app->DB->Select("SELECT IFNULL(MAX(sort),0) FROM {$cmd}_position WHERE {$cmd}='$id' LIMIT 1"); - $sort++; - - $mlmpunkte = $this->app->DB->Select("SELECT mlmpunkte FROM artikel WHERE id='$artikel_id' LIMIT 1"); - $mlmbonuspunkte = $this->app->DB->Select("SELECT mlmbonuspunkte FROM artikel WHERE id='$artikel_id' LIMIT 1"); - $mlmdirektpraemie = $this->app->DB->Select("SELECT mlmdirektpraemie FROM artikel WHERE id='$artikel_id' LIMIT 1"); - - if($cmd==='lieferschein') - { - $this->app->DB->Insert("INSERT INTO lieferschein_position (id,{$cmd},artikel,bezeichnung,beschreibung,nummer,menge,sort,lieferdatum, status,projekt,vpe) - VALUES ('','$id','$artikel_id','".$this->app->DB->real_escape_string($bezeichnung)."','$kurztext_de','$nummer','$menge','$sort','$lieferdatum','angelegt','$projekt','$vpe')"); - - $posid = $this->app->DB->GetInsertID(); - } - else if($cmd==='anfrage') - { - $this->app->DB->Insert("INSERT INTO anfrage_position (id,{$cmd},artikel,bezeichnung,beschreibung,nummer,menge,sort,lieferdatum, status,projekt,vpe) - VALUES ('','$id','$artikel_id','".$this->app->DB->real_escape_string($bezeichnung)."','$kurztext_de','$nummer','$menge','$sort','$lieferdatum','angelegt','$projekt','$vpe')"); - $posid = $this->app->DB->GetInsertID(); - } - else if($cmd==='preisanfrage') - { - $this->app->DB->Insert("INSERT INTO preisanfrage_position (id,{$cmd},artikel,bezeichnung,beschreibung,nummer,menge,sort,lieferdatum, projekt,vpe) - VALUES ('','$id','$artikel_id','".$this->app->DB->real_escape_string($bezeichnung)."','$kurztext_de','$nummer','$menge','$sort','$lieferdatum','$projekt','$vpe')"); - - $posid = $this->app->DB->GetInsertID(); - } - else if($cmd==='bestellung') - { - $bestellnummer = $this->app->DB->Select("SELECT bestellnummer FROM einkaufspreise WHERE id='$vid' LIMIT 1"); - $bezeichnunglieferant = $this->app->DB->Select("SELECT bezeichnunglieferant FROM einkaufspreise WHERE id='$vid' LIMIT 1"); - if (empty($bezeichnunglieferant)) { $bezeichnunglieferant = $bezeichnung; } - - $this->app->DB->Insert("INSERT INTO bestellung_position (id,{$cmd},artikel,beschreibung,menge,sort,lieferdatum, status,projekt,vpe,bestellnummer,bezeichnunglieferant,preis,waehrung,umsatzsteuer,steuersatz) - VALUES ('','$id','$artikel_id','$kurztext_de','$menge','$sort','$lieferdatum','angelegt','$projekt','$vpe','$bestellnummer','".$this->app->DB->real_escape_string($bezeichnunglieferant)."','$preis','$waehrung','$umsatzsteuer',$steuersatzSqlValue)"); - - $posid = $this->app->DB->GetInsertID(); - } - else if ($cmd==='auftrag' || $cmd==='angebot' || $cmd==='rechnung') - { - $this->app->DB->Insert("INSERT INTO {$cmd}_position (id,{$cmd},artikel,bezeichnung,beschreibung, - nummer,menge,preis, waehrung, sort,lieferdatum, umsatzsteuer, steuersatz, status,projekt,vpe,punkte,bonuspunkte,mlmdirektpraemie) - VALUES ('','$id','$artikel_id','".$this->app->DB->real_escape_string($bezeichnung)."','$kurztext_de','$nummer','$menge','$preis','$waehrung','$sort', - '$lieferdatum','$umsatzsteuer',$steuersatzSqlValue,'angelegt','$projekt','$vpe','$mlmpunkte','$mlmbonuspunkte','$mlmdirektpraemie')"); - - $posid = $this->app->DB->GetInsertID(); - } - else { - $posid = null; - $this->app->erp->RunHook('artikel_profisuche', 4, $cmd, $id, $artikel_id, $posid); - if($posid === null){ - $this->app->DB->Insert("INSERT INTO {$cmd}_position (id,{$cmd},artikel,bezeichnung,beschreibung,nummer,menge,preis, waehrung, sort,lieferdatum, umsatzsteuer, steuersatz, status,projekt,vpe) - VALUES ('','$id','$artikel_id','".$this->app->DB->real_escape_string($bezeichnung)."','$kurztext_de','$nummer','$menge','$preis','$waehrung','$sort','$lieferdatum','$umsatzsteuer',$steuersatzSqlValue,'angelegt','$projekt','$vpe')"); - - $posid = $this->app->DB->GetInsertID(); - } - } - - if($cmd=="angebot" || $cmd=="auftrag" || $cmd=="rechnung" || $cmd=="gutschrift"){ - $this->app->erp->RunHook("beleg_afterinsertposition", 5, $cmd, $id, $artikel_id, $menge, $posid); - } - - if($cmd!="" && $posid > 0 && $id > 0) - { - $this->app->erp->CheckFreifelderEinzelPos($cmd, $id, true, $posid); - } - - // Batch-Insert wird für Artikelmatrix benötigt - // Pro Artikel der eingefügt werden soll, wird ein AJAX-Request auf diese Methode ausgeführt - $batchInsert = $this->app->Secure->GetGET('batch') === 'true'; - if ($batchInsert === true) { - header('Content-Type: application/json'); - echo json_encode(['success' => true]); - $this->app->erp->ExitWawi(); - } - - $this->app->Location->execute("index.php?module={$cmd}&action=positionen&id=$id&fmodul=$fmodul"); - } - - if($anlegen!='') - { - // speichern ?? - //echo 'speichern'; - - if($cmd==='lieferschein') - { - if($name_de=='' || $menge=='') - { - $this->app->Tpl->Set('MESSAGE',"
Artikel (DE) und Menge sind Pflichtfelder!
"); - $error = 1; - } - } else { - if($name_de=='' || $menge=='' || $preis=='') - { - $this->app->Tpl->Set('MESSAGE',"
Artikel (DE), Preis und Menge sind Pflichtfelder!
"); - $error = 1; - } - } - if($error!=1) - { - $sort = (int)$this->app->DB->Select("SELECT IFNULL(MAX(sort),0) FROM {$cmd}_position WHERE {$cmd}='$id' LIMIT 1"); - $sort++; - - $tmp = trim($adresse); - $rest = $this->app->erp->FirstTillSpace($tmp); - - if($rest > 0){ - $adresse = $this->app->DB->Select("SELECT id FROM adresse WHERE lieferantennummer='$rest' AND geloescht=0 AND firma='" . $this->app->User->GetFirma() . "' AND lieferantennummer!='' LIMIT 1"); - } - else { - $adresse=''; - } - - if($adresse <= 0 && $cmd==='bestellung') - { - $adresse = $this->app->DB->Select("SELECT adresse FROM bestellung WHERE id='$id' LIMIT 1"); - } - - $artikelart = $typ; - $lieferant = $adresse; - $bezeichnung = $name_de; - $waehrung = 'EUR'; - $lieferdatum = '00.00.0000'; - $vpe = ''; - $preis = str_replace(',','.',$preis); - - if($projekt!=''){ - $projekt = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung='$projekt' AND firma='" . $this->app->User->GetFirma() . "' LIMIT 1"); - } - else { - $projekt_bevorzugt = (int)$this->app->DB->Select("SELECT u.projekt_bevorzugen FROM `user` AS u WHERE u.id = '".$this->app->User->GetID()."' LIMIT 1"); - if($projekt_bevorzugt === 1){ - $projekt = $this->app->DB->Select("SELECT u.projekt FROM `user` AS u WHERE u.id = '".$this->app->User->GetID()."' LIMIT 1"); - }else{ - $projekt = $this->app->User->DefaultProjekt(); - } - } - - $neue_nummer = $this->app->erp->GetNextArtikelnummer($artikelart,$this->app->User->GetFirma(),$projekt); - - // anlegen als artikel - $umsatzsteuerArtikel = (empty($umsatzsteuer)) ? 'normal' : $umsatzsteuer; - $this->app->DB->Insert("INSERT INTO artikel (typ,nummer,projekt,name_de,anabregs_text,umsatzsteuer,adresse,firma,internerkommentar,lagerartikel,allelieferanten) - VALUES ('$artikelart','$neue_nummer','$projekt','$bezeichnung','$kurztext_de','$umsatzsteuerArtikel','$lieferant','".$this->app->User->GetFirma()."','$internerkommentar','$lagerartikel','$allelieferanten')"); - - $artikel_id = $this->app->DB->GetInsertID(); - // einkaufspreis anlegen - - $lieferdatum = $this->app->String->Convert($lieferdatum,"%1.%2.%3","%3-%2-%1"); - - if($cmd==="lieferschein") - { - $this->app->DB->Insert("INSERT INTO lieferschein_position (id,{$cmd},artikel,bezeichnung,beschreibung,nummer,menge,sort,lieferdatum, status,projekt,vpe) - VALUES ('','$id','$artikel_id','$bezeichnung','$kurztext_de','$neue_nummer','$menge','$sort','$lieferdatum','angelegt','$projekt','$vpe')"); - } - else if($cmd==="anfrage") - { - $this->app->DB->Insert("INSERT INTO anfrage_position (id,{$cmd},artikel,bezeichnung,beschreibung,nummer,menge,sort,lieferdatum, projekt,vpe) - VALUES ('','$id','$artikel_id','$bezeichnung','$kurztext_de','$neue_nummer','$menge','$sort','$lieferdatum','$projekt','$vpe')"); - - $this->app->erp->AddEinkaufspreis($artikel_id,$menge,$lieferant,$bestellnummer,$bezeichnunglieferant,$preis,$waehrung); - } - else if($cmd=="preisanfrage") - { - $this->app->DB->Insert("INSERT INTO preisanfrage_position (id,{$cmd},artikel,bezeichnung,beschreibung,nummer,menge,sort,lieferdatum, projekt,vpe) - VALUES ('','$id','$artikel_id','$bezeichnung','$kurztext_de','$neue_nummer','$menge','$sort','$lieferdatum','$projekt','$vpe')"); - - $this->app->erp->AddEinkaufspreis($artikel_id,$menge,$lieferant,$bestellnummer,$bezeichnunglieferant,$preis,$waehrung); - } - - - else if($cmd==="bestellung") - { - if($bezeichnunglieferant=="") $bezeichnunglieferant=$bezeichnung; - $this->app->DB->Insert("INSERT INTO bestellung_position ({$cmd},artikel,beschreibung,menge,sort,lieferdatum, status,projekt,vpe,bestellnummer,bezeichnunglieferant,preis,waehrung,umsatzsteuer,steuersatz) - VALUES ('$id','$artikel_id','$kurztext_de','$menge','$sort','$lieferdatum','angelegt','$projekt','$vpe','$bestellnummer','$bezeichnunglieferant','$preis','$waehrung','$umsatzsteuer',$steuersatzSqlValue)"); - - // $this->app->DB->Insert("INSERT INTO einkaufspreise (id,artikel,adresse,objekt,projekt,preis,ab_menge,angelegt_am,bearbeiter,bestellnummer,bezeichnunglieferant) - // VALUES ('','$artikel_id','$lieferant','Standard','$projekt','$preis','$menge',NOW(),'".$this->app->User->GetName()."','$bestellnummer','$bezeichnunglieferant')"); - - $this->app->erp->AddEinkaufspreis($artikel_id,$menge,$lieferant,$bestellnummer,$bezeichnunglieferant,$preis,$waehrung); - - } else { // angebot auftrag rechnung gutschrift - $this->app->DB->Insert("INSERT INTO verkaufspreise (artikel,adresse,objekt,projekt,preis,ab_menge,angelegt_am,bearbeiter) - VALUES ('$artikel_id','0','Standard','$projekt','$preis','$menge',NOW(),'".$this->app->User->GetName()."')"); - - $this->app->DB->Insert("INSERT INTO {$cmd}_position ({$cmd},artikel,bezeichnung,beschreibung,nummer,menge,preis, waehrung, sort,lieferdatum, umsatzsteuer, steuersatz, status,projekt,vpe) - VALUES ('$id','$artikel_id','$bezeichnung','$kurztext_de','$neue_nummer','$menge','$preis','$waehrung','$sort','$lieferdatum','$umsatzsteuer',$steuersatzSqlValue,'angelegt','$projekt','$vpe')"); - } - - $this->app->Location->execute("index.php?module={$cmd}&action=positionen&id=$id"); - } - } - - $umsatzsteuerauswahl = ''; - $umsatzsteuerauswahl .= ''; - $umsatzsteuerauswahl .= ''; - - $this->app->Tpl->Set('UMSATZSTEUERAUSWAHL',$umsatzsteuerauswahl); - $this->app->Tpl->Set('INDIVIDUELLERSTEUERSATZ',$steuersatz); - $this->app->Tpl->Set('PROJEKT',$projekt); - $this->app->Tpl->Set('ADRESSE',$adresse); - $this->app->Tpl->Set('MENGE',$menge); - $this->app->Tpl->Set('PREIS',$preis); - $this->app->Tpl->Set('BESTELLNUMMER',$bestellnummer); - $this->app->Tpl->Set('BEZEICHNUNGLIEFERANT',$bezeichnunglieferant); - $this->app->Tpl->Set('NAME_DE',$name_de); - $this->app->Tpl->Set('KURZTEXT_DE',$kurztext_de); - $this->app->Tpl->Set('INTERNERKOMMENTAR',$internerkommentar); - - if (!empty($steuersatz)) { - $this->app->Tpl->Set('STEUERSATZEINBLENDEN','checked'); - } - if($lagerartikel=='1'){ - $this->app->Tpl->Set('LAGERARTIKEL','checked'); - } - - $this->app->YUI->AutoComplete('projekt','projektname',1); - $this->app->YUI->AutoComplete('adresse','lieferant'); - $this->app->YUI->AutoComplete('steuersatz-individuell','steuersatz',1); - - if($cmd==='auftrag' || $cmd==='rechnung' || $cmd==='lieferschein' || $cmd==='angebot' || $cmd==='gutschrift' || $cmd==='anfrage') - { - $adresse = $this->app->DB->Select("SELECT adresse FROM {$cmd} WHERE id='$id' LIMIT 1"); - $kunde = $this->app->DB->Select("SELECT CONCAT(name,' ',kundennummer,'') FROM adresse WHERE id='$adresse' LIMIT 1"); - } else if ($cmd==='bestellung' || $cmd==='preisanfrage') { - $adresse = $this->app->DB->Select("SELECT adresse FROM {$cmd} WHERE id='$id' LIMIT 1"); - $kunde = $this->app->DB->Select("SELECT CONCAT(name,' ',lieferantennummer,'') FROM adresse WHERE id='$adresse' LIMIT 1"); - } - - - if($cmd==='lieferschein'){ - $this->app->YUI->ParserVarIf('LIEFERSCHEIN', 1); - } - else{ - $this->app->YUI->ParserVarIf('LIEFERSCHEIN', 0); - } - - - $this->app->Tpl->Set('KUNDE',$kunde); - - if($cmd==='bestellung' || $cmd==='preisanfrage'){ - $this->app->YUI->TableSearch('ARTIKEL', 'lieferantartikelpreise', 'show','','',basename(__FILE__), __CLASS__); - } - else{ - $this->app->YUI->TableSearch('ARTIKEL', 'kundeartikelpreise', 'show','','',basename(__FILE__), __CLASS__); - } - - $this->app->Tpl->Set('ID', $id); - $this->app->Tpl->Set('FMODULE', $cmd); - $this->app->Tpl->Set('ARTIKELBAUM',$this->app->Tpl->Parse('return', 'artikel_artikelbaum.tpl',true)); - - $this->app->Tpl->Set('PAGE',"
Sie können hier die Stammdaten durchsuchen oder einen neuen Artikel angelegen Abbrechen
"); - - $artikelart = $this->app->erp->GetArtikelgruppe($projekt); - $typ = $this->app->Secure->GetPOST('typ'); - $this->app->Tpl->Set('ARTIKELGRUPPE',$this->app->erp->GetSelectAsso($artikelart, $typ)); - - if($this->app->erp->Firmendaten('briefhtml')=='1') - { - $this->app->YUI->CkEditor("kurztext_de","belege",array('height'=>'100px')); - $this->app->YUI->CkEditor("internerkommentar","basic",array('height'=>'100px')); - } - - $this->app->Tpl->Add('PROCESSID', $id); - $this->app->Tpl->Add('PROCESSTYPE', $cmd); - - if ($cmd==='bestellung' || $cmd==='preisanfrage'){ - $this->app->Tpl->Parse('PAGE', 'aarlg_artikelbestellungneu.tpl'); - } else{ - $this->app->Tpl->Parse('PAGE', 'aarlg_artikelneu.tpl'); - } - - $this->app->BuildNavigation=false; - } - - public function ArtikelAjaxWerte() - { - $id = $this->app->Secure->GetGET('id', 'base64'); - if(!is_numeric($id)) { - $id = base64_decode($id); - } - $name = $this->app->Secure->GetGET('name'); - $sid = $this->app->Secure->GetGET('sid'); - $smodule = $this->app->Secure->GetGET('smodule'); - $menge = $this->app->Secure->GetGET('menge'); - $mengeold = $menge; - $menge = str_replace(',','.',$menge); - $cmd = $this->app->Secure->GetGET('cmd'); - $adresse = $this->app->Secure->GetGET('adresse'); - $vpe = $this->app->Secure->GetGET('vpe'); - - // wenn plus in Artikelnummer IN GET - //$id = str_replace('++',' ',$id); - - // if($id=="") exit; - - if($smodule==='bestellung') - { - if($name!=''){ - $id = $this->app->DB->Select("SELECT id FROM artikel WHERE name_de='$name' AND geloescht!=1 AND intern_gesperrt!=1 LIMIT 1"); - if($id<=0){ - $id = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer='$name' AND geloescht!=1 AND intern_gesperrt!=1 LIMIT 1"); - } - } else { - $commandline = $id; - $tmp_id = explode(' ',$commandline); - $tmp_id = $tmp_id[0]; - // $id = substr($id,0,6); - if($tmp_id!='') - { - $id = $tmp_id; - $tmp_id = $commandline; - // hole ab menge aus - - $n = strpos($tmp_id, $id.' '); - if ( false!==$n ) { - $tmp_id = substr($tmp_id, 0, $n); - } - $start_pos = strpos ($commandline, 'ab Menge '); - $commandline = substr($commandline,$start_pos + strlen('ab Menge ')); - $end_pos = strpos ($commandline, ' '); - if(trim(substr($commandline,0,$end_pos)) > 0) - $menge = trim(substr($commandline,0,$end_pos)); - - } else { - $this->app->ExitXentral(); - } - $id = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer='$id' AND geloescht!=1 AND intern_gesperrt!=1 LIMIT 1"); - } - if(!is_numeric($id)) - { - echo '#*##*##*##*##*##*##*#'; - $this->app->ExitXentral(); - } - - $waehrung = $this->app->DB->Select("SELECT waehrung FROM $smodule WHERE id='$sid' LIMIT 1"); - if(strtoupper($waehrung)==='EURO') { - $waehrung='EUR'; - } // nur fuer den uebergang damit nicht alte Kunden dauern mit Tickets kommen 2.2.2019 BS - - $adresse = $this->app->DB->Select("SELECT adresse FROM $smodule WHERE id='$sid' LIMIT 1"); - // $id = substr($id,0,6); - - $name = $this->app->DB->Select("SELECT name_de FROM artikel WHERE id='$id' LIMIT 1"); - - $sprache = $this->app->DB->Select("SELECT sprache FROM adresse WHERE id='$adresse' LIMIT 1"); - - $name_en = $this->app->DB->Select("SELECT name_en FROM artikel WHERE id='$id' LIMIT 1"); - - if($sprache==='englisch' && $name_en!=''){ - $name = $name_en; - } - - $bestellnummer = $this->app->DB->Select("SELECT bestellnummer FROM einkaufspreise - WHERE artikel='$id' AND adresse='$adresse' AND ab_menge<='$menge' AND (gueltig_bis>=NOW() OR gueltig_bis='0000-00-00') AND geloescht=0 ORDER by ab_menge DESC LIMIT 1"); - $bezeichnunglieferant = $this->app->DB->Select("SELECT bezeichnunglieferant FROM einkaufspreise - WHERE artikel='$id' AND adresse='$adresse' AND ab_menge<='$menge' AND (gueltig_bis>=NOW() OR gueltig_bis='0000-00-00') AND geloescht=0 ORDER by ab_menge DESC LIMIT 1"); - if(empty($vpe)){ - $vpe = $this->app->DB->Select("SELECT vpe FROM einkaufspreise - WHERE artikel='$id' AND adresse='$adresse' AND ab_menge<='$menge' AND (gueltig_bis>=NOW() OR gueltig_bis='0000-00-00') AND geloescht=0 ORDER by ab_menge DESC LIMIT 1"); - } - if($bestellnummer=="") { - $bestellnummer = $this->app->DB->Select("SELECT bestellnummer FROM einkaufspreise - WHERE artikel='$id' AND adresse='$adresse' AND (gueltig_bis>=NOW() OR gueltig_bis='0000-00-00') AND geloescht=0 LIMIT 1"); - } - - if($bezeichnunglieferant=="") { - $bezeichnunglieferant = $this->app->DB->Select("SELECT bezeichnunglieferant FROM einkaufspreise - WHERE artikel='$id' AND adresse='$adresse' AND (gueltig_bis>=NOW() OR gueltig_bis='0000-00-00') AND geloescht=0 LIMIT 1"); - } - - $nummer = $this->app->DB->Select("SELECT nummer FROM artikel WHERE id='$id' LIMIT 1"); - $projekt = $this->app->DB->Select("SELECT p.abkuerzung FROM artikel a LEFT JOIN projekt p ON p.id=a.projekt WHERE a.id='$id' LIMIT 1"); - //$projekt_id = $this->app->DB->Select("SELECT projekt FROM artikel WHERE id='$id' LIMIT 1"); - //$ab_menge = $this->app->DB->Select("SELECT ab_menge FROM einkaufspreise WHERE artikel='$id' AND adresse='$adresse' AND (gueltig_bis>=NOW() OR gueltig_bis='0000-00-00') AND geloescht=0 LIMIT 1"); - //$vpe = $this->app->DB->Select("SELECT vpe FROM einkaufspreise WHERE artikel='$id' AND adresse='$adresse' AND (gueltig_bis>=NOW() OR gueltig_bis='0000-00-00') AND geloescht=0 LIMIT 1"); - $vpe = str_replace(',','.',$vpe); - - if($vpe == 1){ - $andVpe = ''; - } - else{ - $andVpe = 'AND e.vpe = \''.$vpe.'\''; - } - - if($waehrung=="" || $waehrung=="EUR") - { - - $ek = $this->app->DB->Select( - "SELECT e.preis - FROM `einkaufspreise` AS `e` - WHERE e.artikel='$id' - AND e.adresse='$adresse' - AND e.ab_menge<='$menge' - AND (e.gueltig_bis>=NOW() OR e.gueltig_bis='0000-00-00') - AND e.geloescht=0 - $andVpe - ORDER BY e.ab_menge DESC - LIMIT 1" - ); - - $waehrung = $this->app->DB->Select( - "SELECT e.waehrung - FROM `einkaufspreise` AS `e` - WHERE e.artikel='$id' - AND e.adresse='$adresse' - AND e.ab_menge<='$menge' - AND (e.gueltig_bis>=NOW() OR e.gueltig_bis='0000-00-00') - AND e.geloescht=0 - $andVpe - ORDER BY e.ab_menge DESC - LIMIT 1" - ); - } else{ - $ek = $this->app->DB->Select( - "SELECT e.preis - FROM `einkaufspreise` AS `e` - WHERE e.artikel='$id' - AND e.adresse='$adresse' - AND e.ab_menge<='$menge' - AND (e.gueltig_bis>=NOW() OR e.gueltig_bis='0000-00-00') - AND e.waehrung='$waehrung' - AND e.geloescht=0 - $andVpe - ORDER BY e.ab_menge DESC - LIMIT 1" - ); - - } - - if($bezeichnunglieferant=='') { - $bezeichnunglieferant=$name; - } - - $name = html_entity_decode($name, ENT_QUOTES, 'UTF-8'); - if($vpe > 1) - { - if($menge < $vpe) { - $menge = $vpe; - } - else { - $menge_vpe = $menge / $vpe; - $menge = ceil($menge_vpe)*$vpe; - } - //$ek = $menge*$ek; - } - $menge = (float)$menge; - // bei Bestellung - echo "$name#*#$nummer#*#$projekt#*#$ek#*#$menge#*#$bestellnummer#*#$bezeichnunglieferant#*#$vpe#*#$waehrung"; - } else { - //Pinguio fehler - if($id=='') - { - $name = $this->app->Secure->GetGET('name'); - if(trim($name)!='') - { - $id = $this->app->DB->Select("SELECT nummer FROM artikel WHERE nummer LIKE '$name' AND intern_gesperrt!=1 LIMIT 1"); - if($id =='') - { - $id = $this->app->DB->Select("SELECT nummer FROM artikel WHERE name_de LIKE '$name' AND intern_gesperrt!=1 LIMIT 1"); - - if($id=='') - { - $name = str_replace(' ',' ',$name); - $id = $this->app->DB->Select("SELECT nummer FROM artikel WHERE name_de LIKE '$name' AND intern_gesperrt!=1 LIMIT 1"); - //naechster fall - } - } - } else { - if(trim($name)!='') - { - // wenn name leer ist hole max position id - $id = $this->app->DB->Select("SELECT MAX(id) FROM ".$smodule."_position WHERE $smodule='$sid'"); - $id = $this->app->DB->Select("SELECT artikel FROM ".$smodule."_position WHERE id='$id' LIMIT 1"); - $id = $this->app->DB->Select("SELECT nummer FROM artikel WHERE id='$id' AND intern_gesperrt!=1 LIMIT 1"); - } - - } - if($id ==''){ - $this->app->ExitXentral(); - } - - } - // $id = substr($id,0,6); - //echo $id; - // if(!is_numeric($id)) - // exit; - $tmp_id = explode(' ',$id); - $id = $tmp_id[0]; - - $id = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer='$id' AND intern_gesperrt!=1 LIMIT 1"); - $warnung = 1-(int)$this->app->DB->Select("SELECT if(rabatt=1,1,vkmeldungunterdruecken) FROM artikel WHERE id = '$id' LIMIT 1"); - $adresse = $this->app->DB->Select("SELECT adresse FROM $smodule WHERE id='$sid' LIMIT 1"); - $waehrung = $this->app->DB->Select("SELECT waehrung FROM $smodule WHERE id='$sid' LIMIT 1"); - $posanz = (int)$this->app->DB->Select("SELECT count(id) FROM $smodule"."_position WHERE $smodule = '$sid'"); - //if($posanz == 0){ - // $waehrung = ''; - //} - - $sprache = $this->app->DB->Select("SELECT sprache FROM adresse WHERE id='$adresse' LIMIT 1"); - - $name = $this->app->DB->Select("SELECT name_de FROM artikel WHERE id='$id' LIMIT 1"); - - $name_en = $this->app->DB->Select("SELECT name_en FROM artikel WHERE id='$id' LIMIT 1"); - - if($sprache==='englisch' && $name_en!=''){ - $name = $name_en; - } - - $nummer = $this->app->DB->Select("SELECT nummer FROM artikel WHERE id='$id' LIMIT 1"); - $projekt = $this->app->DB->Select("SELECT p.abkuerzung FROM artikel a LEFT JOIN projekt p ON p.id=a.projekt WHERE a.id='$id' LIMIT 1"); - - //$projekt_id = $this->app->DB->Select("SELECT projekt FROM artikel WHERE id='$id' LIMIT 1"); - - // $ab_menge = $this->app->DB->Select("SELECT ab_menge FROM verkaufspreise WHERE artikel='$id' AND ab_menge=1 AND geloescht=0 LIMIT 1"); - $ab_menge = $menge; - - if($smodule==="inventur") - $preis = $this->app->erp->GetEinkaufspreis($id,$menge,$adresse); - else { - if(method_exists($this->app->erp, 'GetVerkaufspreisMitWaehrung')) - { - $preis = $this->app->erp->GetVerkaufspreisMitWaehrung($id,$menge,$adresse, $waehrung); - }else{ - $preis = $this->app->erp->GetVerkaufspreis($id,$menge,$adresse, $waehrung); - } - } - - if($smodule === 'auftrag' || $smodule === 'rechnung' || $smodule === 'gutschrift' || $smodule === 'angebot' || $smodule === 'proformarechnung') - { - $_anrede = $this->app->DB->Select("SELECT typ FROM $smodule WHERE id = '$sid' LIMIT 1"); - $_projekt = $this->app->DB->Select("SELECT projekt FROM $smodule WHERE id = '$sid' LIMIT 1"); - $_adresse = $this->app->DB->Select("SELECT adresse FROM $smodule WHERE id = '$sid' LIMIT 1"); - $funktion = ucfirst($smodule).'MitUmsatzeuer'; - if($this->app->erp->AnzeigePositionenBrutto($_anrede, $smodule, $_projekt, $_adresse) && $this->app->erp->$funktion($sid)) - { - $umsatzsteuer = $this->app->DB->Select("SELECT umsatzsteuer FROM artikel WHERE id = '$id' LIMIT 1"); - if($umsatzsteuer === 'ermaessigt') - { - $preis = round($preis* (1+ (float)$this->app->DB->Select("SELECT steuersatz_ermaessigt FROM $smodule WHERE id = '$sid' LIMIT 1")/100),7); - }elseif($umsatzsteuer !== 'befreit') - { - $preis = round($preis * (1+ (float)$this->app->DB->Select("SELECT steuersatz_normal FROM $smodule WHERE id = '$sid' LIMIT 1")/100),7); - } - } - } - - $name = html_entity_decode($name, ENT_QUOTES, 'UTF-8'); - - $ab_menge = round((float)$ab_menge,8); - switch($smodule) - { - case 'auftrag': - case 'gutschrift': - case 'angebot': - case 'rechnung': - case 'proformarechnung': - if(!isset($waehrung) || $waehrung == ''){ - $waehrung = $this->app->erp->GetVerkaufspreisWaehrung($id,$menge,$adresse); - } - if(strpos($mengeold, ',') && strpos($ab_menge,'.') && strpos($ab_menge ,',') === false){ - $ab_menge = str_replace('.',',',$ab_menge); - } - $this->app->erp->RunHook('artikel_ajaxwerte',8, $id, $smodule, $name,$nummer, $preis, $ab_menge, $waehrung, $warnung); - echo "$name#*#$nummer#*#$projekt#*#$preis#*#$ab_menge#*#$waehrung#*#$warnung#"; - break; - default: - echo "$name#*#$nummer#*#$projekt#*#$preis#*#$ab_menge"; - break; - } - } - $this->app->ExitXentral(); - } - - public function ArtikelWareneingang() - { - $this->app->Tpl->Add('UEBERSCHRIFT',' (Wareneingang)'); - $this->ArtikelMenu(); - $this->app->Tpl->Set('PAGE','wareneingang'); - } - - public function ArtikelReservierung() - { - $this->app->Tpl->Add('UEBERSCHRIFT',' (Reservierungen)'); - $this->ArtikelMenu(); - $this->app->Tpl->Set('PAGE','reservierung'); - } - - - public function ArtikelOffeneAuftraege() - { - $id = $this->app->Secure->GetGET('id'); - $this->app->Tpl->Add('TABTEXT','Aufträge'); - $this->ArtikelMenu(); - - // easy table mit arbeitspaketen YUI als template - - $this->app->YUI->TableSearch('TAB1','artikel_auftraege_offen', 'show','','',basename(__FILE__), __CLASS__); - - $summe = $this->app->DB->Select("SELECT TRIM(SUM(ap.menge)-SUM(ap.geliefert_menge))+0 FROM auftrag_position ap LEFT JOIN auftrag a ON a.id=ap.auftrag WHERE ap.artikel='$id' AND ap.geliefert_menge < ap.menge AND a.status='freigegeben'"); - $euro= $this->app->DB->Select("SELECT FORMAT(SUM(ap.preis*(100-ap.rabatt)/100*ap.menge),2,'de_DE') FROM auftrag_position ap LEFT JOIN auftrag a ON a.id=ap.auftrag WHERE ap.artikel='$id' AND ap.geliefert_menge < ap.menge AND a.status='freigegeben'"); - - $this->app->Tpl->Add('TAB1',"
Summe offen: $summe Stück (Summe EUR: $euro EUR)
"); - - $this->app->YUI->TableSearch('TAB2','artikel_auftraege_versendet', 'show','','',basename(__FILE__), __CLASS__); - - $this->app->Tpl->Parse('PAGE','artikel_auftraege.tpl'); - } - - public function ArtikelDateien() - { - $id = $this->app->Secure->GetGET('id'); - $this->ArtikelMenu(); - $this->app->Tpl->Add('UEBERSCHRIFT',' (Dateien)'); - $cmd = $this->app->Secure->GetGET('cmd'); - if($cmd === 'down' || $cmd === 'up') { - $this->app->DB->Update( - sprintf( - 'UPDATE artikel SET bildvorschau = \'\' WHERE id = %d LIMIT 1', - (int)$id - ) - ); - } - $this->app->YUI->DateiUpload('PAGE','Artikel',$id); - } - - public function ArtikelCopyWaehrungen($id, $typ = 'verkauf') - { - $res = array('status' => 0); - $dat = $this->app->Secure->GetPOST('dat'); - $menge_ab = (int)$this->app->Secure->GetPOST('menge_ab'); - $art = $this->app->Secure->GetPOST('art'); - $bezeichnunglieferant = $this->app->Secure->GetPOST('bezeichnunglieferant'); - $bestellnummer = $this->app->Secure->GetPOST('bestellnummer'); - - $gruppe = $this->app->erp->ReplaceGruppe(true, $this->app->Secure->GetPOST('gruppe'),true); - $kundenartikelnummer = $this->app->Secure->GetPOST('kundenartikelnummer'); - $gueltig_bis = $this->app->Secure->GetPOST('gueltig_bis'); - if($gueltig_bis){ - $gueltig_bis = $this->app->String->Convert($gueltig_bis,'%1.%2.%3','%3-%2-%1'); - } - $vpe = (int)$this->app->Secure->GetPOST('vpe'); - if($vpe < 1){ - $vpe = 1; - } - if($menge_ab < 1){ - $menge_ab = 1; - } - if(!$dat) - { - echo json_encode($res); - $this->app->ExitXentral(); - } - $data = explode(';',$dat); - foreach($data as $k => $v) - { - $v = trim($v); - if(strpos($v,':')) - { - $va = explode(':',$v); - if(count($va) > 1){ - $waehrung = trim($va[0]); - $preis = (float)str_replace(',','.',trim($va[1])); - if($waehrung) - { - $waehrungen[$waehrung] = $preis; - } - } - } - } - if(!isset($waehrungen)) - { - echo json_encode($res); - $this->app->ExitXentral(); - } - - switch($typ) - { - case 'einkauf': - $adresse = $this->app->erp->ReplaceLieferant(true,$this->app->Secure->GetPOST('adresse'),true); - $artikel = $this->app->DB->Select("SELECT id FROM artikel WHERE id = '$id' LIMIT 1"); - - if(!$artikel) - { - echo json_encode($res); - $this->app->ExitXentral(); - } - foreach($waehrungen as $waehrung => $preis) - { - $this->app->erp->AddEinkaufspreis($artikel,$menge_ab,$adresse,$bestellnummer,$bezeichnunglieferant,$preis,$waehrung,$vpe); - } - $res['status'] = 1; - echo json_encode($res); - $this->app->ExitXentral(); - break; - case 'einkaufeditpopup': - $artikel = $this->app->DB->Select("SELECT artikel FROM einkaufspreise WHERE id = '$id' LIMIT 1"); - if(!$artikel) - { - echo json_encode($res); - $this->app->ExitXentral(); - } - foreach($waehrungen as $waehrung => $preis) - { - $newid = $this->app->DB->MysqlCopyRow("einkaufspreise","id",$id); - $this->app->DB->Update("UPDATE einkaufspreise SET geloescht='0', gueltig_bis='0000-00-00', nichtberechnet = 0,preis = '$preis', waehrung = '".$waehrung."' WHERE id='$newid' LIMIT 1"); - } - $res['status'] = 1; - echo json_encode($res); - $this->app->ExitXentral(); - break; - case 'verkauf': - $adresse = $this->app->erp->ReplaceKunde(true,$this->app->Secure->GetPOST('adresse'),true); - $artikel = $this->app->DB->Select("SELECT id FROM artikel WHERE id = '$id' LIMIT 1"); - if(!$artikel) - { - echo json_encode($res); - $this->app->ExitXentral(); - } - foreach($waehrungen as $waehrung => $preis) - { - $this->app->erp->AddVerkaufspreis($artikel,$menge_ab,$adresse,$preis,$waehrung,$kundenartikelnummer, $gruppe); - } - $res['status'] = 1; - echo json_encode($res); - $this->app->ExitXentral(); - break; - case 'verkaufeditpopup': - $artikel = $this->app->DB->Select("SELECT artikel FROM verkaufspreise WHERE id = '$id' LIMIT 1"); - if(!$artikel) - { - echo json_encode($res); - $this->app->ExitXentral(); - } - foreach($waehrungen as $waehrung => $preis) - { - $newid = $this->app->DB->MysqlCopyRow('verkaufspreise','id',$id); - $this->app->DB->Update("UPDATE verkaufspreise SET geloescht='0', gueltig_bis='0000-00-00', nichtberechnet = 0,preis = '$preis', waehrung = '".$waehrung."' WHERE id='$newid' LIMIT 1"); - } - $res['status'] = 1; - echo json_encode($res); - $this->app->ExitXentral(); - break; - } - - echo json_encode($res); - $this->app->ExitXentral(); - } - - public function ArtikelVerkauf() - { - // rechne gueltig_bis gestern aus - // erstelle array objekt, adressse, ab_menge,preis - // wenn es doppelte gibt rote meldung!!! - //$this->app->Tpl->Set('MESSAGE',"
Achtung es gibt für eine Kundengruppe bei einer gleichen Menge den Preis öfters! Deaktvieren oder löschen Sie doppelte Preise!
"); - if($this->app->Secure->GetPOST('newpreis')) - { - $id = $this->app->Secure->GetGET('id'); - $this->ArtikelCopyWaehrungen($id, 'verkauf'); - } - $waehrungenstringvk = ''; - - $standardwaehrung = $this->app->erp->GetStandardWaehrung(); - - $waehrungenvk = $this->app->DB->SelectArr("SELECT DISTINCT waehrung FROM (SELECT DISTINCT waehrung_von AS waehrung FROM waehrung_umrechnung WHERE (ISNULL(gueltig_bis) OR gueltig_bis >= NOW() OR gueltig_bis = '0000-00-00') UNION SELECT DISTINCT waehrung_nach AS waehrung FROM waehrung_umrechnung WHERE (ISNULL(gueltig_bis) OR gueltig_bis >= NOW() OR gueltig_bis = '0000-00-00')) AS waehrungen"); - if($waehrungenvk != ''){ - $standardwvorhanden = false; - if($standardwaehrung == '') { - $standardwaehrung = $waehrungenvk[0]['waehrung']; - } - foreach($waehrungenvk as $key=>$value) { - if($value['waehrung'] == $standardwaehrung){ - $standardwvorhanden = true; - } - $waehrungenstringvk .= "'; - } - $this->app->Tpl->Set('STANDARDWAEHRUNGV', $standardwaehrung); - if($standardwvorhanden == false){ - $waehrungenstringvk .= "'; - } - }else{ - if($standardwaehrung != ''){ - if($standardwaehrung !== 'EUR' && $standardwaehrung !== 'USD' && $standardwaehrung !== 'CAD' && $standardwaehrung !== 'CHF' && $standardwaehrung !== 'GBP'){ - $waehrungenstringvk .= " - - - - "; - } - - - $this->app->Tpl->Set('WAEHRUNGVERKAUF', $waehrungenstringvk); - - - - $this->app->Tpl->Add('UEBERSCHRIFT',' (Verkauf)'); - $this->app->Tpl->Set('SUBSUBHEADING','Verkaufspreise'); - $this->ArtikelMenu(); - $this->Preisrechner(); - $id = $this->app->Secure->GetGET('id'); - // neues arbeitspaket - $widget = new WidgetVerkaufspreise($this->app,'TAB2'); - $widget->form->SpecialActionAfterExecute('none', - "index.php?module=artikel&action=verkauf&id=$id"); - - //if($this->app->Secure->GetPOST("submit")!="") - //$this->app->erp->EnableTab("tabs-2"); - - //$widget->Create(); - - - $this->app->YUI->TableSearch('TAB1','verkaufspreise', 'show','','',basename(__FILE__), __CLASS__); - $stueckliste = $this->app->DB->Select("SELECT stueckliste FROM artikel WHERE id='$id' LIMIT 1"); - $porto = $this->app->DB->Select("SELECT porto FROM artikel WHERE id='$id' LIMIT 1"); - - if($stueckliste!='1') { - $max_preis = $this->app->DB->Select("SELECT MAX(preis) FROM einkaufspreise WHERE artikel='$id' AND (gueltig_bis='0000-00-00' - OR gueltig_bis >= curdate()) AND geloescht!=1 LIMIT 1"); - - $min_preis = $this->app->DB->Select("SELECT MIN(preis) FROM einkaufspreise WHERE artikel='$id' AND (gueltig_bis='0000-00-00' - OR gueltig_bis >= curdate()) AND geloescht!=1 LIMIT 1"); - - $waehrung = $this->app->DB->Select("SELECT waehrung FROM einkaufspreise WHERE artikel='$id' AND (gueltig_bis='0000-00-00' - OR gueltig_bis >= curdate()) AND geloescht!=1 ORDER by preis LIMIT 1"); - - $max_preis2 = $max_preis; - $min_preis2 = $min_preis; - - $min_preis = $this->app->erp->EUR($min_preis*(($this->app->erp->GetStandardMarge()/100.0)+1.0)*1.0); - $max_preis = $this->app->erp->EUR($max_preis*(($this->app->erp->GetStandardMarge()/100.0)+1.0)*1.0); - - $min_preis2 = $this->app->erp->EUR($min_preis2/(100-$this->app->erp->GetStandardMarge())*100); - $max_preis2 = $this->app->erp->EUR($max_preis2/(100-$this->app->erp->GetStandardMarge())*100); - - } - - if($porto=='1') { - $this->app->Tpl->Add('TAB1',"
Kundenspezifische Preise werden immer priorisiert!
"); - } - else { - - if($this->app->erp->GetStandardMarge() > 0)// && $stueckliste!="1") - { - if($max_preis <>0){ - $this->app->Tpl->Add('TAB1', "
Empfohlener Verkaufspreis netto (für teuersten EK Preis): $max_preis $waehrung bzw. als Aufschlagsrechnung $max_preis2 $waehrung
"); - } - - if($min_preis <>0){ - $this->app->Tpl->Add('TAB1', "
Empfohlener Verkaufspreis netto (für billigsten EK Preis): $min_preis $waehrung bzw. als Aufschlagsrechnung $min_preis2 $waehrung
"); - } - - - if($max_preis <>0){ - $this->app->Tpl->Add('TAB2', "
Empfohlener Verkaufspreis netto (für teuersten EK Preis): $max_preis $waehrung bzw. als Aufschlagsrechnung $max_preis2 $waehrung
"); - } - if($min_preis <>0){ - $this->app->Tpl->Add('TAB2', "
Empfohlener Verkaufspreis netto (für billigsten EK Preis): $min_preis $waehrung bzw. als Aufschlagsrechnung $min_preis2 $waehrung
"); - } - } - } - - if($this->app->Secure->GetGET('cmd')==='popupedit'){ - $eid = (int)$this->app->Secure->GetPOST('id'); - - $data = $this->app->DB->SelectRow("SELECT id, artikel, adresse, preis, waehrung, ab_menge, vpe, vpe_menge, gueltig_bis, bemerkung, kundenartikelnummer, art, gruppe, nichtberechnet, gueltig_ab,if(kurs<0,'',".$this->app->erp->FormatMenge('kurs').") as kurs,IF(ISNULL(kursdatum),'',DATE_FORMAT(kursdatum,'%d.%m.%Y')) as kursdatum, inbelegausblenden FROM verkaufspreise WHERE id = '$eid' LIMIT 1"); - - if($data){ - if($data['adresse'] > 0 && $data['art'] === 'Kunde'){ - $ekundennummer = $this->app->DB->Select("SELECT kundennummer FROM adresse WHERE id = '".$data['adresse']."' LIMIT 1"); - $ekundenname = $this->app->DB->Select("SELECT name FROM adresse WHERE id = '".$data['adresse']."' LIMIT 1"); - $data['adresse'] = $ekundennummer." ".$ekundenname; - $data['gruppe'] = ''; - }elseif($data['adresse'] == 0 && $data['art'] === 'Kunde'){ - $data['adresse'] = ''; - $data['gruppe'] = ''; - } - - if($data['gruppe'] > 0 && $data['art'] === 'Gruppe'){ - $egruppenname = $this->app->DB->Select("SELECT name FROM gruppen WHERE id = '".$data['gruppe']."' LIMIT 1"); - $egruppenkennziffer = $this->app->DB->Select("SELECT kennziffer FROM gruppen WHERE id = '".$data['gruppe']."' LIMIT 1"); - $data['gruppe'] = $egruppenkennziffer." ".$egruppenname; - $data['adresse'] = ''; - } - - $data['ab_menge'] = str_replace('.',',',$data['ab_menge']); - $data['preis'] = str_replace('.',',',$data['preis']); - - if($data['gueltig_ab'] == '0000-00-00' || $data['gueltig_ab'] == '' || is_null($data['gueltig_ab'])){ - $data['gueltig_ab'] = "00.00.0000"; - }else{ - $data['gueltig_ab'] = date('d.m.Y',strtotime($data['gueltig_ab'])); - } - - if($data['gueltig_bis'] == '0000-00-00' || $data['gueltig_bis'] == '' || is_null($data['gueltig_bis'])){ - $data['gueltig_bis'] = "00.00.0000"; - }else{ - $data['gueltig_bis'] = date('d.m.Y',strtotime($data['gueltig_bis'])); - } - - }else{ - //$data['artikel'] = 0; - $data['adresse'] = ''; - $data['gruppe'] = ''; - $data['art'] = "Kunde"; - $data['preis'] = ''; - $data['waehrung'] = "EUR"; - $data['ab_menge'] = ''; - $data['vpe'] = ''; - $data['kundenartikelnummer'] = ''; - $data['gueltig_ab'] = ''; - $data['gueltig_bis'] = ''; - $data['bemerkung'] = ''; - $data['kurs'] = ''; - $data['kurdatum'] = ''; - $data['nichtberechnet'] = 0; - $data['inbelegausblenden'] = 0; - } - - echo json_encode($data); - $this->app->ExitXentral(); - } - - if($this->app->Secure->GetGET('cmd')==='popupsave'){ - $eid = $this->app->Secure->GetPOST('eid'); - $eartikelid = $this->app->Secure->GetPOST('eartikelid'); - $eart = trim($this->app->Secure->GetPOST('eart')); - $eadresse = trim($this->app->Secure->GetPOST('eadresse')); - $egruppe = trim($this->app->Secure->GetPOST('egruppe')); - $ekundenartikelnummer = trim($this->app->Secure->GetPOST('ekundenartikelnummer')); - $eab_menge = trim($this->app->Secure->GetPOST('eab_menge')); - $evpe = trim($this->app->Secure->GetPOST('evpe')); - $epreis = trim($this->app->Secure->GetPOST('epreis')); - $ewaehrung = trim($this->app->Secure->GetPOST('ewaehrung')); - $enichtberechnet = $this->app->Secure->GetPOST('enichtberechnet'); - $inbelegausblenden = $this->app->Secure->GetPOST('inbelegausblenden'); - $egueltig_ab = trim($this->app->Secure->GetPOST('egueltig_ab')); - $egueltig_bis = trim($this->app->Secure->GetPOST('egueltig_bis')); - $ebemerkung = trim($this->app->Secure->GetPOST('ebemerkung')); - - $error = ''; - - $eab_menge = str_replace(',', '.', $eab_menge); - if($eab_menge > 0 && $eab_menge != ''){ - }else{ - $error .= 'Mengef'."\n"; - } - - $kundenname = $eadresse; - if($eadresse != '' && $eart === 'Kunde'){ - $eadresse = explode(' ', $eadresse, 2); - $eadresse = $eadresse[0]; - - $eadresse = $this->app->DB->Select("SELECT id FROM adresse WHERE kundennummer = '$eadresse' AND kundennummer != '' AND geloescht = 0 LIMIT 1"); - if($eadresse != ''){ - }else{ - $error .= 'Adressef'."\n"; - } - }elseif($eadresse == '' || $eadresse <= 0){ - $eadresse = 0; - } - - if($egruppe != '' && $eart === 'Gruppe'){ - $egruppe = explode(' ', $egruppe, 2); - $egruppe = $egruppe[0]; - $egruppe = $this->app->DB->Select("SELECT id FROM gruppen WHERE kennziffer = '$egruppe' AND name != '' LIMIT 1"); - }else{ - if($egruppe == '' && $eart === 'Gruppe'){ - $error .= 'Gruppe ausfüllen'; - } - } - - if($epreis != ''){ - $epreis = str_replace(',', '.', $epreis); - }else{ - $error .= 'Preisf'."\n"; - } - - if($eartikelid > 0 && $eartikelid != ''){ - $eartikelid = $this->app->DB->Select("SELECT id FROM artikel WHERE id = '$eartikelid' LIMIT 1"); - if($eartikelid != ''){ - }else{ - $error .= 'Bitte gültigen Artikel wählen'."\n"; - } - }else{ - $error .= 'Bitte gültigen Artikel wählen'."\n"; - } - - - if($egueltig_ab != '' && $egueltig_ab != '0000-00-00' && $egueltig_ab != '00.00.0000'){ - $egueltig_ab = date('Y-m-d',strtotime($egueltig_ab)); - }else{ - $egueltig_ab = '0000-00-00'; - } - if($egueltig_bis != '' && $egueltig_bis != '0000-00-00' && $egueltig_bis != '00.00.0000'){ - $egueltig_bis = date('Y-m-d',strtotime($egueltig_bis)); - }else{ - $egueltig_bis = '0000-00-00'; - } - - if($ewaehrung == ''){ - $ewaehrung = $this->app->erp->GetStandardWaehrung(); - } - - - if($error == ''){ - if($eid > 0){ - if($eart === 'Kunde'){ - $standardvorhanden = $this->app->DB->Select("SELECT id FROM verkaufspreise WHERE artikel = '$eartikelid' AND ab_menge = '$eab_menge' AND preis = '$epreis' AND art = 'Kunde' AND adresse = '$eadresse' AND gueltig_ab = '$egueltig_ab' AND gueltig_bis = '$egueltig_bis' AND geloescht != 1 AND id != '$eid' LIMIT 1"); - } - - if($eart === 'Gruppe' && $egruppe > 0){ - $gruppenpreisvorhanden = $this->app->DB->Select("SELECT id FROM verkaufspreise WHERE artikel = '$eartikelid' AND ab_menge = '$eab_menge' AND preis = '$epreis' AND art = 'Gruppe' AND gruppe = '$egruppe' AND gueltig_ab = '$egueltig_ab' AND gueltig_bis = '$egueltig_bis' AND geloescht != 1 AND id != '$eid' LIMIT 1"); - } - - if($standardvorhanden != ''){ - $error .= 'Diesen Preis gibt es bereits.'."\n"; - echo json_encode(array('status'=>0,'statusText'=>$error)); - $this->app->ExitXentral(); - } - if($gruppenpreisvorhanden != ''){ - $error .= 'Diesen Preis gibt es bereits.'."\n"; - echo json_encode(array('status'=>0,'statusText'=>$error)); - $this->app->ExitXentral(); - } - $this->app->DB->Update("UPDATE verkaufspreise SET adresse = '$eadresse', preis = '$epreis', waehrung = '$ewaehrung', ab_menge = '$eab_menge', vpe = '$evpe', gueltig_bis = '$egueltig_bis', bemerkung = '$ebemerkung', firma = 1, geloescht = 0, kundenartikelnummer = '$ekundenartikelnummer', art = '$eart', gruppe = '$egruppe', nichtberechnet = '$enichtberechnet', gueltig_ab = '$egueltig_ab', inbelegausblenden = '$inbelegausblenden' WHERE id = '$eid'"); - if($ewaehrung === 'EUR' || $ewaehrung === '') - { - $kurs = -1; - $kursdatum = 'NULL'; - }else{ - $kurs = $this->app->erp->GetWaehrungUmrechnungskurs('EUR', $ewaehrung, true); - } - if($kurs !== false){ - if($kurs !== -1){ - $kursdatum = "'" . date('Y-m-d') . "'"; - } - $this->app->DB->Update("UPDATE verkaufspreise SET kurs = $kurs, kursdatum = $kursdatum WHERE id = $eid LIMIT 1"); - } - echo json_encode(array('status'=>1)); - $this->app->ExitXentral(); - } - - if($eart === 'Kunde'){ - $standardvorhanden = $this->app->DB->Select("SELECT id FROM verkaufspreise WHERE artikel = '$eartikelid' AND ab_menge = '$eab_menge' AND preis = '$epreis' AND art = 'Kunde' AND adresse = '$eadresse' AND gueltig_ab = '$egueltig_ab' AND gueltig_bis = '$egueltig_bis' AND geloescht != 1 LIMIT 1"); - } - - if($eart === 'Gruppe' && $egruppe > 0){ - $gruppenpreisvorhanden = $this->app->DB->Select("SELECT id FROM verkaufspreise WHERE artikel = '$eartikelid' AND ab_menge = '$eab_menge' AND preis = '$epreis' AND art = 'Gruppe' AND gruppe = '$egruppe' AND gueltig_ab = '$egueltig_ab' AND gueltig_bis = '$egueltig_bis' AND geloescht != 1 LIMIT 1"); - } - - if($standardvorhanden != ''){ - $error .= 'Diesen Preis gibt es bereits.'."\n"; - echo json_encode(array('status'=>0,'statusText'=>$error)); - $this->app->ExitXentral(); - } - if($gruppenpreisvorhanden != ''){ - $error .= 'Diesen Preis gibt es bereits.'."\n"; - echo json_encode(array('status'=>0,'statusText'=>$error)); - $this->app->ExitXentral(); - } - $this->app->DB->Insert("INSERT INTO verkaufspreise (artikel, adresse, preis, waehrung, ab_menge, vpe, gueltig_bis, bemerkung, firma, geloescht, kundenartikelnummer, art, gruppe, apichange, nichtberechnet, gueltig_ab, inbelegausblenden) VALUES ('$eartikelid', '$eadresse', '$epreis', '$ewaehrung', '$eab_menge', '$evpe', '$egueltig_bis', '$ebemerkung', 1, 0, '$ekundenartikelnummer', '$eart', '$egruppe', '', '$enichtberechnet', '$egueltig_ab', '$inbelegausblenden')"); - $insid = $this->app->DB->GetInsertID(); - if($ewaehrung === 'EUR' || $ewaehrung === '') - { - $kurs = false; - }else{ - $kurs = $this->app->erp->GetWaehrungUmrechnungskurs('EUR', $ewaehrung, true); - } - if($kurs !== false){ - if($kurs !== -1){ - $kursdatum = "'" . date('Y-m-d') . "'"; - } - $this->app->DB->Update("UPDATE verkaufspreise SET kurs = $kurs, kursdatum = $kursdatum WHERE id = $insid LIMIT 1"); - } - echo json_encode(array('status'=>1)); - $this->app->ExitXentral(); - } - echo json_encode(array('status'=>0,'statusText'=>$error)); - $this->app->ExitXentral(); - } - - $this->app->YUI->AutoComplete('adresse', 'kunde'); - $this->app->YUI->AutoComplete('gruppe', 'gruppekennziffer'); - $this->app->YUI->DatePicker('gueltig_ab'); - $this->app->YUI->DatePicker('gueltig_bis'); - - $this->app->Tpl->Parse('PAGE','verkaufspreiseuebersicht.tpl'); - } - - public function ArtikelVerkaufDisable() - { - $id = $this->app->Secure->GetGET('id'); - if($id > 0){ - $this->app->DB->Update("UPDATE verkaufspreise SET gueltig_bis=DATE_SUB(NOW(),INTERVAL 1 DAY) WHERE id='$id' LIMIT 1"); - $this->app->erp->ObjektProtokoll('verkaufspreise', $id, 'verkaufspreise_edit', 'Verkaufspreis deaktiviert'); - } - $sid = $this->app->DB->Select("SELECT artikel FROM verkaufspreise WHERE id='$id' LIMIT 1"); - $this->app->Location->execute('index.php?module=artikel&action=verkauf&id='.$sid); - } - - public function ArtikelVerkaufDelete() - { - $id = $this->app->Secure->GetGET('id'); - if($id > 0){ - $this->app->DB->Update("UPDATE verkaufspreise SET geloescht='1', gueltig_bis=DATE_SUB(NOW(),INTERVAL 1 DAY), logdatei = now() WHERE id='$id' LIMIT 1"); - } - $sid = $this->app->DB->Select("SELECT artikel FROM verkaufspreise WHERE id='$id' LIMIT 1"); - $this->app->erp->ObjektProtokoll('verkaufspreise', $id, 'verkaufspreise_edit', 'Verkaufspreis gelöscht'); - $this->app->Location->execute('index.php?module=artikel&action=verkauf&id='.$sid); - } - - public function ArtikelVerkaufCopy() - { - $id = $this->app->Secure->GetGET('id'); - - $id = $this->app->DB->MysqlCopyRow('verkaufspreise','id',$id); - $this->app->DB->Update("UPDATE verkaufspreise SET geloescht='0', gueltig_bis='0000-00-00', logdatei = now(), angelegt_am = now() WHERE id='$id' LIMIT 1"); - $this->app->erp->ObjektProtokoll('verkaufspreise', $id, 'verkaufspreise_create', 'Verkaufspreis kopiert'); - $sid = $this->app->DB->Select("SELECT artikel FROM verkaufspreise WHERE id='$id' LIMIT 1"); - $this->app->Location->execute('index.php?module=artikel&action=verkauf&id='.$sid); - } - - public function ArtikelVerkaufEditPopup() - { - $id = $this->app->Secure->GetGET('id'); - - if($this->app->Secure->GetPOST('newpreis')) - { - $id = $this->app->Secure->GetGET('id'); - $this->ArtikelCopyWaehrungen($id, 'verkaufeditpopup'); - } - - $this->app->Tpl->Set('OPENDISABLE',''); - - $this->Preisrechner(); - $sid = $this->app->DB->Select("SELECT artikel FROM verkaufspreise WHERE id='$id' LIMIT 1"); - $this->ArtikelMenu($sid); - $artikel = $this->app->DB->Select("SELECT CONCAT(name_de,' (',nummer,')') FROM artikel WHERE id='$sid' LIMIT 1"); - $this->app->Tpl->Set('UEBERSCHRIFT','Artikel: '.$artikel); - $this->app->Tpl->Add('UEBERSCHRIFT',' (Verkauf)'); - - $this->app->Tpl->Set('ABBRECHEN',""); - - $widget = new WidgetVerkaufspreise($this->app,'TAB1'); - $widget->form->SpecialActionAfterExecute('close_refresh', - "index.php?module=artikel&action=verkauf&id=$sid&&22#tabs-1"); - $widget->Edit(); - - $this->app->Tpl->Add('TAB2','Sie bearbeiten gerade einen Verkaufspreis. Erst nach dem Speichern können neue Preise angelegt werden.'); - $this->app->Tpl->Add('TAB3','Sie bearbeiten gerade einen Verkaufspreis. Erst nach dem Speichern können Statistiken betrachtet werden.'); - $this->app->Tpl->Parse('PAGE','verkaufspreiseuebersicht.tpl'); - } - - public function ArtikelEinkauf() - { - $waehrungenstringek = ''; - if($this->app->Secure->GetPOST('ajaxadd')){ - $this->ArtikelEinkaufAdd(); - } - if($this->app->Secure->GetPOST('newpreis')) - { - $id = $this->app->Secure->GetGET('id'); - $this->ArtikelCopyWaehrungen($id, 'einkauf'); - } - $this->app->Tpl->Add('UEBERSCHRIFT',' (Einkauf)'); - $this->Preisrechner(); - $this->ArtikelMenu(); - $id = $this->app->Secure->GetGET('id'); - - - $standardwaehrung = $this->app->erp->GetStandardWaehrung(); - - $waehrungenek = $this->app->DB->SelectArr("SELECT DISTINCT waehrung FROM (SELECT DISTINCT waehrung_von AS waehrung FROM waehrung_umrechnung WHERE (ISNULL(gueltig_bis) OR gueltig_bis >= NOW() OR gueltig_bis = '0000-00-00') UNION SELECT DISTINCT waehrung_nach AS waehrung FROM waehrung_umrechnung WHERE (ISNULL(gueltig_bis) OR gueltig_bis >= NOW() OR gueltig_bis = '0000-00-00')) AS waehrungen"); - if($waehrungenek != ''){ - $standardwvorhanden = false; - if($standardwaehrung == ''){ - $standardwaehrung = $waehrungenek[0]['waehrung']; - } - foreach($waehrungenek as $key=>$value){ - if($value['waehrung'] == $standardwaehrung){ - $standardwvorhanden = true; - } - $waehrungenstringek .= "'; - } - $this->app->Tpl->Set('STANDARDWAEHRUNG', $standardwaehrung); - if($standardwvorhanden == false){ - $waehrungenstringek .= "'; - } - }else{ - if($standardwaehrung != ""){ - if($standardwaehrung !== 'EUR' && $standardwaehrung !== 'USD' && $standardwaehrung !== 'CAD' && $standardwaehrung !== 'CHF' && $standardwaehrung !== 'GBP'){ - $waehrungenstringek .= ''; - } - $this->app->Tpl->Set('STANDARDWAEHRUNG', $standardwaehrung); - }else{ - $this->app->Tpl->Set('STANDARDWAEHRUNG', 'EUR'); - } - - $waehrungenstringek .= " - - - - "; - } - - $this->app->Tpl->Set('WAEHRUNGEINKAUF', $waehrungenstringek); - - $standardlieferant = $this->app->DB->Select("SELECT CONCAT(adr.lieferantennummer,' ',adr.name) FROM artikel a LEFT - JOIN adresse adr ON adr.id=a.adresse WHERE a.id='$id'"); - - $herstellernummer = $this->app->DB->Select("SELECT herstellernummer FROM artikel WHERE id='$id' LIMIT 1"); - $name_de = $this->app->DB->Select("SELECT name_de FROM artikel WHERE id='$id' LIMIT 1"); - - $bereinigtername = str_replace(''', "\'", $name_de); - - $this->app->Tpl->Set('BUTTONLADEN',""); - - //$this->app->YUI->DatePicker('preis_anfrage_vom'); - - if($this->app->Secure->GetGET('cmd')==='popupedit'){ - $eid = (int)$this->app->Secure->GetPOST('id'); - - $data = $this->app->DB->SelectRow("SELECT id, artikel, adresse, preis, waehrung, ab_menge, vpe, preis_anfrage_vom, - gueltig_bis, lieferzeit_standard, lieferzeit_standard_einheit, lieferzeit_aktuell, lieferzeit_aktuell_einheit, lager_lieferant, datum_lagerlieferant, bestellnummer, - bezeichnunglieferant, sicherheitslager, bemerkung, standard, rahmenvertrag, rahmenvertrag_von, rahmenvertrag_bis, - rahmenvertrag_menge, nichtberechnet - FROM einkaufspreise WHERE id = '$eid' LIMIT 1"); - - if($data){ - $elieferantennummer = $this->app->DB->Select("SELECT lieferantennummer FROM adresse WHERE id = '".$data['adresse']."' LIMIT 1"); - $elieferantenname = $this->app->DB->Select("SELECT name FROM adresse WHERE id = '".$data['adresse']."' LIMIT 1"); - $data['adresse'] = $elieferantennummer." ".$elieferantenname; - - $data['ab_menge'] = str_replace('.',',',$data['ab_menge']); - $data['preis'] = str_replace('.',',',$data['preis']); - - if($data['preis_anfrage_vom'] == '0000-00-00' || $data['preis_anfrage_vom'] == "" || is_null($data['preis_anfrage_vom'])){ - $data['preis_anfrage_vom'] = "00.00.0000"; - }else{ - $data['preis_anfrage_vom'] = date('d.m.Y',strtotime($data['preis_anfrage_vom'])); - } - - if($data['gueltig_bis'] == '0000-00-00' || $data['gueltig_bis'] == "" || is_null($data['gueltig_bis'])){ - $data['gueltig_bis'] = "00.00.0000"; - }else{ - $data['gueltig_bis'] = date('d.m.Y',strtotime($data['gueltig_bis'])); - } - - if($data['datum_lagerlieferant'] == '0000-00-00' || $data['datum_lagerlieferant'] == "" || is_null($data['datum_lagerlieferant'])){ - $data['datum_lagerlieferant'] = "00.00.0000"; - }else{ - $data['datum_lagerlieferant'] = date('d.m.Y',strtotime($data['datum_lagerlieferant'])); - } - - if($data['rahmenvertrag_von'] == '0000-00-00' || $data['rahmenvertrag_von'] == '' || is_null($data['rahmenvertrag_von'])){ - $data['rahmenvertrag_von'] = '00.00.0000'; - }else{ - $data['rahmenvertrag_von'] = date('d.m.Y',strtotime($data['rahmenvertrag_von'])); - } - - if($data['rahmenvertrag_bis'] == '0000-00-00' || $data['rahmenvertrag_bis'] == '' || is_null($data['rahmenvertrag_bis'])){ - $data['rahmenvertrag_bis'] = '00.00.0000'; - }else{ - $data['rahmenvertrag_bis'] = date('d.m.Y',strtotime($data['rahmenvertrag_bis'])); - } - - if($data['lieferzeit_standard_einheit'] == ''){ - $data['lieferzeit_standard_einheit'] = 'wochen'; - } - if($data['lieferzeit_aktuell_einheit'] == ''){ - $data['lieferzeit_aktuell_einheit'] = 'wochen'; - } - - }else{ - //$data['artikel'] = 0; - $data['adresse'] = 0; - $data['preis'] = ''; - $data['waehrung'] = 'EUR'; - $data['ab_menge'] = ''; - $data['vpe'] = ''; - $data['preis_anfrage_vom'] = ''; - $data['gueltig_bis'] = ''; - $data['lieferzeit_standard'] = ''; - $data['lieferzeit_standard_einheit'] = 'wochen'; - $data['lieferzeit_aktuell'] = ''; - $data['lieferzeit_aktuell_einheit'] = 'wochen'; - $data['lager_lieferant'] = ''; - $data['datum_lagerlieferant'] = ''; - $data['bestellnummer'] = ''; - $data['bezeichnunglieferant'] = ''; - $data['sicherheitslager'] = ''; - $data['bemerkung'] = ''; - $data['standard'] = 0; - $data['rahmenvertrag'] = 0; - $data['rahmenvertrag_von'] = ''; - $data['rahmenvertrag_bis'] = ''; - $data['rahmenvertrag_menge'] = ''; - $data['nichtberechnet'] = 0; - } - echo json_encode($data); - $this->app->ExitXentral(); - } - - if($this->app->Secure->GetGET('cmd')==='popupsave'){ - $eid = $this->app->Secure->GetPOST('eid'); - $eartikelid = $this->app->Secure->GetPOST('eartikelid'); - $estandard = $this->app->Secure->GetPOST('estandard'); - $eadresse = $this->app->Secure->GetPOST('eadresse'); - $ebezeichnunglieferant = $this->app->Secure->GetPOST('ebezeichnunglieferant'); - $ebestellnummer = $this->app->Secure->GetPOST('ebestellnummer'); - $eab_menge = $this->app->Secure->GetPOST('eab_menge'); - $evpe = $this->app->Secure->GetPOST('evpe'); - $epreis = $this->app->Secure->GetPOST('epreis'); - $ewaehrung = $this->app->Secure->GetPOST('ewaehrung'); - $elivepreisvpe = $this->app->Secure->GetPOST('elivepreisvpe'); - $enichtberechnet = $this->app->Secure->GetPOST('enichtberechnet'); - $epreis_anfrage_vom = $this->app->Secure->GetPOST('epreis_anfrage_vom'); - $egueltig_bis = $this->app->Secure->GetPOST('egueltig_bis'); - $elager_lieferant = $this->app->Secure->GetPOST('elager_lieferant'); - $edatum_lagerlieferant = $this->app->Secure->GetPOST('edatum_lagerlieferant'); - $esicherheitslager = $this->app->Secure->GetPOST('esicherheitslager'); - $elieferzeit_standard = $this->app->Secure->GetPOST('elieferzeit_standard'); - $elieferzeit_standard_einheit = $this->app->Secure->GetPOST('elieferzeit_standard_einheit'); - $elieferzeit_aktuell = $this->app->Secure->GetPOST('elieferzeit_aktuell'); - $elieferzeit_aktuell_einheit = $this->app->Secure->GetPOST('elieferzeit_aktuell_einheit'); - $erahmenvertrag = $this->app->Secure->GetPOST('erahmenvertrag'); - $erahmenvertrag_menge = $this->app->Secure->GetPOST('erahmenvertrag_menge'); - $erahmenvertrag_von = $this->app->Secure->GetPOST('erahmenvertrag_von'); - $erahmenvertrag_bis = $this->app->Secure->GetPOST('erahmenvertrag_bis'); - $ebemerkung = $this->app->Secure->GetPOST('ebemerkung'); - - $error = ''; - - if($eab_menge != ''){ - $eab_menge = str_replace(',','.',$eab_menge); - }else{ - $error .= 'Mengef'."\n"; - } - - $lieferantenname = $eadresse; - if($eadresse != ''){ - $eadresse = explode(' ', $eadresse, 2); - $eadresse = $eadresse[0]; - - $eadresse = $this->app->DB->Select("SELECT id FROM adresse WHERE lieferantennummer = '$eadresse' AND lieferantennummer != '' AND geloescht = 0 LIMIT 1"); - if($eadresse != ''){ - }else{ - $error .= 'Adressef'."\n"; - } - }else{ - $error .= 'Adressef'."\n"; - } - - if($epreis != ""){ - $epreis = str_replace(',', '.', $epreis); - /*if($epreis > 0){ - }else{ - $error .= 'Preisf'."\n"; - }*/ - }else{ - $error .= 'Preisf'."\n"; - } - - if($eartikelid > 0 && $eartikelid != ''){ - $eartikelid = $this->app->DB->Select("SELECT id FROM artikel WHERE id = '$eartikelid' LIMIT 1"); - if($eartikelid != ''){ - }else{ - $error .= 'Bitte gültigen Artikel wählen'."\n"; - } - }else{ - $error .= 'Bitte gültigen Artikel wählen'."\n"; - } - - - if($epreis_anfrage_vom != '' && $epreis_anfrage_vom != '0000-00-00' && $epreis_anfrage_vom != '00.00.0000'){ - $epreis_anfrage_vom = date('Y-m-d',strtotime($epreis_anfrage_vom)); - }else{ - $epreis_anfrage_vom = '0000-00-00'; - } - if($egueltig_bis != '' && $egueltig_bis != '0000-00-00' && $egueltig_bis != '00.00.0000'){ - $egueltig_bis = date('Y-m-d',strtotime($egueltig_bis)); - }else{ - $egueltig_bis = '0000-00-00'; - } - if($edatum_lagerlieferant != '' && $edatum_lagerlieferant != '0000-00-00' && $edatum_lagerlieferant != '00.00.0000'){ - $edatum_lagerlieferant = date('Y-m-d',strtotime($edatum_lagerlieferant)); - }else{ - $edatum_lagerlieferant = '0000-00-00'; - } - if($erahmenvertrag_von != '' && $erahmenvertrag_von != '0000-00-00' && $erahmenvertrag_von != '00.00.0000'){ - $erahmenvertrag_von = date('Y-m-d',strtotime($erahmenvertrag_von)); - }else{ - $erahmenvertrag_von = '0000-000-00'; - } - if($erahmenvertrag_bis != '' && $erahmenvertrag_bis != '0000-00-00' && $erahmenvertrag_bis != '00.00.0000'){ - $erahmenvertrag_bis = date('Y-m-d',strtotime($erahmenvertrag_bis)); - }else{ - $erahmenvertrag_bis = '0000-00-00'; - } - - if($ewaehrung == ''){ - $ewaehrung = $this->app->erp->GetStandardWaehrung(); - } - - if($elieferzeit_standard_einheit == ''){ - $elieferzeit_standard_einheit = 'wochen'; - } - if($elieferzeit_aktuell_einheit == ''){ - $elieferzeit_aktuell_einheit = 'wochen'; - } - - - if($error == ''){ - if($eid > 0){ - $this->app->DB->Update("UPDATE einkaufspreise SET adresse = '$eadresse', preis = '$epreis', waehrung = '$ewaehrung', - ab_menge = '$eab_menge', vpe = '$evpe', preis_anfrage_vom = '$epreis_anfrage_vom', gueltig_bis = '$egueltig_bis', - lieferzeit_standard = '$elieferzeit_standard', lieferzeit_standard_einheit = '$elieferzeit_standard_einheit', - lieferzeit_aktuell = '$elieferzeit_aktuell', lieferzeit_aktuell_einheit = '$elieferzeit_aktuell_einheit', - lager_lieferant = '$elager_lieferant', datum_lagerlieferant = '$edatum_lagerlieferant', - bestellnummer = '$ebestellnummer', bezeichnunglieferant = '$ebezeichnunglieferant', - sicherheitslager = '$esicherheitslager', bemerkung = '$ebemerkung', logdatei = NOW(), standard = '$estandard', - geloescht = 0, firma = 1, apichange = 0, rahmenvertrag = '$erahmenvertrag', rahmenvertrag_von = '$erahmenvertrag_von', - rahmenvertrag_bis = '$erahmenvertrag_bis', rahmenvertrag_menge = '$erahmenvertrag_menge', - nichtberechnet = '$enichtberechnet' - WHERE id = '$eid'"); - echo json_encode(array('status'=>1)); - $this->app->ExitXentral(); - } - $this->app->DB->Insert("INSERT INTO einkaufspreise (artikel, adresse, preis, waehrung, ab_menge, vpe, preis_anfrage_vom, - gueltig_bis, lieferzeit_standard, lieferzeit_standard_einheit, lieferzeit_aktuell, lieferzeit_aktuell_einheit, - lager_lieferant, datum_lagerlieferant, bestellnummer, bezeichnunglieferant, sicherheitslager, - bemerkung, logdatei, standard, geloescht, firma, apichange, rahmenvertrag, rahmenvertrag_von, - rahmenvertrag_bis, rahmenvertrag_menge, nichtberechnet) - VALUES ('$eartikelid', '$eadresse', '$epreis', '$ewaehrung', '$eab_menge', '$evpe', '$epreis_anfrage_vom', - '$egueltig_bis', '$elieferzeit_standard', '$elieferzeit_standard_einheit', '$elieferzeit_aktuell', - '$elieferzeit_aktuell_einheit', '$elager_lieferant', '$edatum_lagerlieferant', '$ebestellnummer', - '$ebezeichnunglieferant', '$esicherheitslager', '$ebemerkung', NOW(), '$estandard', 0, 1, 0, - '$erahmenvertrag', '$erahmenvertrag_von', '$erahmenvertrag_bis', '$erahmenvertrag_menge', '$enichtberechnet')"); - echo json_encode(array('status'=>1)); - $this->app->ExitXentral(); - } - echo json_encode(array('status'=>0,'statusText'=>$error)); - $this->app->ExitXentral(); - } - - $stueckliste = $this->app->DB->Select("SELECT stueckliste FROM artikel WHERE id='$id' LIMIT 1"); - - if($stueckliste < 1) - { - $nicht_vorhanden = '
Nicht vorhanden, da es keine Stückliste ist.
'; - $this->app->Tpl->Set('TAB5KALKULATION',$nicht_vorhanden); - $this->app->Tpl->Set('TAB5',$nicht_vorhanden); - $this->app->Tpl->Set('TABELLE',$nicht_vorhanden); - } - - $check = $this->app->DB->Select("SELECT id FROM stueckliste WHERE stuecklistevonartikel='$id' AND art='bt' LIMIT 1"); - - // neues arbeitspaket - $widget = new WidgetEinkaufspreise($this->app,'TAB2'); - $widget->form->SpecialActionAfterExecute('none', - "index.php?module=artikel&action=einkauf&id=$id"); - - if($this->app->Secure->GetPOST('submit')!=''){ - $this->app->erp->EnableTab('tabs-2'); - } - - $widget->Create(); - - if($this->app->Secure->GetPOST('objekt')!=''){ - $this->app->Tpl->Set('AKTIV_TAB2', 'selected'); - } - else{ - $this->app->Tpl->Set('AKTIV_TAB1', 'selected'); - } - - - if ($stueckliste=='1') { - - $preis_min_ek = $this->getCalcPriceByMinBasePrice($id); - $preis_max_ek =$this->getCalcPriceByMaxBasePrice($id); - - $this->app->Tpl->Set('TAB5KALKULATION','
Dies ist nur ein grober Richtpreis aus dem kleinsten und größten Einkaufspreis.
'); - - $kalkulationstabelle = ""; - $kalkulationstabelle .= ""; - $kalkulationstabelle .= ""; - $kalkulationstabelle .= ""; - $kalkulationstabelle .= ""; - $kalkulationstabelle .= ""; - $kalkulationstabelle .= ""; - $kalkulationstabelle .= ""; - $kalkulationstabelle .= ""; - $kalkulationstabelle .= ""; - $kalkulationstabelle .= ""; - - $artikelkalkulation = $this->app->DB->SelectArr("SELECT a.id as artikelid, a.name_de as artikelname, a.nummer, trim(s.menge)+0 as menge, - (SELECT l2.name FROM einkaufspreise e LEFT JOIN adresse l2 ON l2.id=e.adresse WHERE e.artikel=a.id AND (e.objekt='Standard' OR e.objekt='') AND (e.gueltig_bis='0000-00-00' OR e.gueltig_bis >= curdate()) AND e.geloescht!=1 ORDER by e.preis ASC LIMIT 1) as lieferant, - (SELECT e.bestellnummer FROM einkaufspreise e WHERE e.artikel=a.id AND (e.objekt='Standard' OR e.objekt='') AND (e.gueltig_bis='0000-00-00' OR e.gueltig_bis >= curdate()) AND e.geloescht!=1 ORDER by e.preis ASC LIMIT 1) as bestellnummer, - - ".$this->app->erp->FormatPreis("if(a.stueckliste, - - (SELECT SUM( - (SELECT MIN(e.preis/ifnull(wt.kurs,if(e.waehrung = 'CHR',$kurschf,if(e.waehrung = 'USD',$kursusd,1)))) FROM einkaufspreise e - LEFT JOIN ( - SELECT max(kurs) as kurs, waehrung_von, waehrung_nach FROM waehrung_umrechnung WHERE (isnull(gueltig_bis) OR gueltig_bis >= now() OR gueltig_bis = '0000-00-00') AND (waehrung_von LIKE 'EUR' OR waehrung_nach LIKE 'EUR') GROUP BY waehrung_von,waehrung_nach - ) wt ON (wt.waehrung_nach <> 'EUR' AND wt.waehrung_nach = e.waehrung) OR (wt.waehrung_von <> 'EUR' AND wt.waehrung_von = e.waehrung) - WHERE e.artikel=s2.artikel AND (e.objekt='Standard' OR e.objekt='') - AND (e.gueltig_bis='0000-00-00' OR e.gueltig_bis >= curdate()) AND e.geloescht!=1) * s2.menge) - FROM stueckliste s2 - WHERE s2.stuecklistevonartikel=s.artikel), - - (SELECT MIN(e.preis/ifnull(wt.kurs,if(e.waehrung = 'CHR',$kurschf,if(e.waehrung = 'USD',$kursusd,1)))) FROM einkaufspreise e - LEFT JOIN ( - SELECT max(kurs) as kurs, waehrung_von, waehrung_nach FROM waehrung_umrechnung WHERE (isnull(gueltig_bis) OR gueltig_bis >= now() OR gueltig_bis = '0000-00-00') AND (waehrung_von LIKE 'EUR' OR waehrung_nach LIKE 'EUR') GROUP BY waehrung_von,waehrung_nach - ) wt ON (wt.waehrung_nach <> 'EUR' AND wt.waehrung_nach = e.waehrung) OR (wt.waehrung_von <> 'EUR' AND wt.waehrung_von = e.waehrung) - WHERE e.artikel=s.artikel AND (e.objekt='Standard' OR e.objekt='') AND (e.gueltig_bis='0000-00-00' OR e.gueltig_bis >= curdate()) AND e.geloescht!=1 ))*s.menge",4)." - - as 'ekmin', - - - ".$this->app->erp->FormatPreis("if(a.stueckliste, - - (SELECT SUM( - (SELECT MAX(e.preis/ifnull(wt.kurs,if(e.waehrung = 'CHR',$kurschf,if(e.waehrung = 'USD',$kursusd,1)))) FROM einkaufspreise e - - LEFT JOIN ( - SELECT max(kurs) as kurs, waehrung_von, waehrung_nach FROM waehrung_umrechnung WHERE (isnull(gueltig_bis) OR gueltig_bis >= now() OR gueltig_bis = '0000-00-00') AND (waehrung_von LIKE 'EUR' OR waehrung_nach LIKE 'EUR') GROUP BY waehrung_von,waehrung_nach - ) wt ON (wt.waehrung_nach <> 'EUR' AND wt.waehrung_nach = e.waehrung) OR (wt.waehrung_von <> 'EUR' AND wt.waehrung_von = e.waehrung) - WHERE e.artikel=s2.artikel AND (e.objekt='Standard' OR e.objekt='') - AND (e.gueltig_bis='0000-00-00' OR e.gueltig_bis >= curdate()) AND e.geloescht!=1) * s2.menge) - FROM stueckliste s2 - WHERE s2.stuecklistevonartikel=s.artikel),(SELECT MAX(e.preis/ifnull(wt.kurs,if(e.waehrung = 'CHR',$kurschf,if(e.waehrung = 'USD',$kursusd,1)))) FROM einkaufspreise e - LEFT JOIN ( - SELECT max(kurs) as kurs, waehrung_von, waehrung_nach FROM waehrung_umrechnung WHERE (isnull(gueltig_bis) OR gueltig_bis >= now() OR gueltig_bis = '0000-00-00') AND (waehrung_von LIKE 'EUR' OR waehrung_nach LIKE 'EUR') GROUP BY waehrung_von,waehrung_nach - ) wt ON (wt.waehrung_nach <> 'EUR' AND wt.waehrung_nach = e.waehrung) OR (wt.waehrung_von <> 'EUR' AND wt.waehrung_von = e.waehrung) - - WHERE e.artikel=s.artikel AND (e.objekt='Standard' OR e.objekt='') AND (e.gueltig_bis='0000-00-00' OR e.gueltig_bis >= curdate()) AND e.geloescht!=1 ))*s.menge",4)." - - as 'ekmax' - - - FROM stueckliste s - LEFT JOIN artikel a ON a.id=s.artikel - LEFT JOIN adresse l ON l.id=a.adresse - WHERE s.stuecklistevonartikel='$id' ORDER by s.sort"); - - - $calculatedPurchasePriceService = $this->app->Container->get('PurchasePriceService'); - - $kalkulierterekgesamt = 0; - - foreach($artikelkalkulation as $artikelindex => $kalkulierterArtikel){ - $kalkulationstabelle .= ""; - $kalkulationstabelle .= ""; - $kalkulationstabelle .= ""; - - $runden = true; - if($kalkulierterArtikel['menge'] != round($kalkulierterArtikel['menge']))$runden = false; - - if($runden) { - $kalkulierterArtikel['menge'] = round($kalkulierterArtikel['menge']); - } - - - $kalkulationstabelle .= ""; - $kalkulationstabelle .= ""; - $kalkulationstabelle .= ""; - $kalkulationstabelle .= ""; - $kalkulationstabelle .= ""; - $berechneterEK = 0; - $berechneterEK += $calculatedPurchasePriceService->calculateCalculatedPurchasePrice($kalkulierterArtikel['artikelid'], $kalkulierterArtikel['menge']); - $kalkulationstabelle .= ""; - $kalkulierterekgesamt += $berechneterEK; - $kalkulationstabelle .= ""; - } - - $kalkulationstabelle .= ""; - $kalkulationstabelle .= ""; - $kalkulationstabelle .= ""; - $kalkulationstabelle .= ""; - $kalkulationstabelle .= ""; - $kalkulationstabelle .= ""; - $kalkulationstabelle .= ""; - $kalkulationstabelle .= ""; - $kalkulationstabelle .= ""; - $kalkulationstabelle .= ""; - - $kalkulationstabelle .= "
ArtikelNummerMengeLieferantBestellnummerBasierend auf EK (Min)Basierend auf EK (Max)Kalkulierter EK
".$kalkulierterArtikel['artikelname']."".$kalkulierterArtikel['nummer']."".$kalkulierterArtikel['menge']."".$kalkulierterArtikel['lieferant']."".$kalkulierterArtikel['bestellnummer']."".$kalkulierterArtikel['ekmin']."".$kalkulierterArtikel['ekmax']."".number_format($berechneterEK,4,',','.')."
Σ ".number_format($preis_min_ek,4,',','.')."Σ ".number_format($preis_max_ek,4,',','.')."Σ ".number_format($kalkulierterekgesamt,4,',','.')."
"; - - $this->app->Tpl->Add('TAB5KALKULATION', $kalkulationstabelle); - - -// $this->app->Tpl->Add('TAB5KALKULATION',"
Stücklisten Grundpreis bei Menge 1: $preis EUR - $preis_max EUR (Anzahl Positionen $pos / Teile $teile)
"); - $this->app->Tpl->Parse('TAB1','rahmen70.tpl'); - - $sql = "SELECT s.artikel, SUM(s.menge) FROM stueckliste s LEFT JOIN artikel a ON a.id=s.artikel WHERE s.stuecklistevonartikel='$id' GROUP by a.id"; - $array_artikel = $this->app->DB->SelectArr($sql); - - $array_mindestmengen = array(); - $runden = true; - $carray_artikel = $array_artikel?count($array_artikel):0; - for($i_stk=0;$i_stk < $carray_artikel;$i_stk++) { - $artikel = $array_artikel[$i_stk]['artikel']; - $menge = $array_artikel[$i_stk]['menge']; - - // gehe einkaufspreis fuer einkaufspreis durch - $einkaufspreise = $this->app->DB->SelectArr("SELECT ab_menge FROM einkaufspreise WHERE artikel='$artikel' AND - (gueltig_bis='0000-00-00' OR gueltig_bis >= curdate()) AND geloescht!=1 AND ab_menge >='$menge' ORDER by ab_menge"); - - // liste mit artikel wo e keinen 1er Preis gibt - $check_ek_eins = $this->app->DB->Select("SELECT id FROM einkaufspreise WHERE artikel='$artikel' AND - (gueltig_bis='0000-00-00' OR gueltig_bis >= curdate()) AND geloescht!=1 AND ab_menge =1 LIMIT 1"); - - if($check_ek_eins <=0) { - $artikel_ohne_ek_eins[]=$artikel; - } - $ceinkaufspreise = $einkaufspreise?count($einkaufspreise):0; - for($i_ek = 0;$i_ek < $ceinkaufspreise; $i_ek++) { - if(!in_array($einkaufspreise[$i_ek]['ab_menge'],$array_mindestmengen)) { - $array_mindestmengen[] = $einkaufspreise[$i_ek]['ab_menge']; - if(round($einkaufspreise[$i_ek]['ab_menge']) != $einkaufspreise[$i_ek]['ab_menge']) { - $runden = false; - } - } - } - } - if($runden) { - foreach($array_mindestmengen as $k => $v){ - $array_mindestmengen[$k] = round($v); - } - } - sort($array_mindestmengen); - $tpl = ''; - $tpl2 = ''; - $tpl3 = ''; - $tpl4 = ''; - $tpl5 = ''; - $tpl22 = ''; - $teile_tpl =''; - $carray_mindestmengen = isset($array_mindestmengen)?count($array_mindestmengen):0; - for($j_am=0;$j_am<$carray_mindestmengen;$j_am++) { - $sql = "SELECT SUM( - (SELECT e.preis FROM einkaufspreise e WHERE e.artikel=s.artikel AND (e.objekt='Standard' OR e.objekt='') - AND e.ab_menge <= ".$array_mindestmengen[$j_am]." AND (e.gueltig_bis='0000-00-00' OR e.gueltig_bis >= curdate()) AND e.geloescht!=1 ORDER by preis ASC LIMIT 1)*s.menge) - FROM stueckliste s - LEFT JOIN artikel a ON a.id=s.artikel - WHERE s.stuecklistevonartikel='$id'"; - - $preis = $this->app->DB->Select($sql); - - $sql = "SELECT s.artikel - FROM stueckliste s - LEFT JOIN artikel a ON a.id=s.artikel - WHERE s.stuecklistevonartikel='$id' AND (SELECT e.preis FROM einkaufspreise e WHERE e.artikel=s.artikel AND (e.objekt='Standard' OR e.objekt='') - AND e.ab_menge <= ".$array_mindestmengen[$j_am]." AND (e.gueltig_bis='0000-00-00' OR e.gueltig_bis >= curdate()) AND e.geloescht!=1 ORDER by preis ASC LIMIT 1) IS NULL GROUP by s.artikel ORDER by s.artikel"; - - $fehlende_preise = $this->app->DB->SelectArr($sql); - - $tpl .= "
".$array_mindestmengen[$j_am].'".count($fehlende_preise).'--'.number_format($preis,2,',','').'$fehlende_artikel_links-'.number_format($summe_fehlende_preise_max+$preis,2,",","")."'.number_format($summe_fehlende_preise_min,2,',','').''.number_format($summe_fehlende_preise_max,2,',','').'
Anzahl
Gesamtpreis
Anzahl fehlende Preise für Staffel 
Zwischensumme (falls Preise fehlen)
Fehlende Preise für Preisstaffel bei Artikel
"); - sort($artikel_ohne_ek_eins); - $cartikel_ohne_ek_eins = count($artikel_ohne_ek_eins); - for($j_am=0;$j_am<$cartikel_ohne_ek_eins;$j_am++) { - if($j_am % 2) { - $color='#e0e0e0'; - } else { - $color='#fff'; - } - $artikel_arr = $this->app->DB->SelectArr("SELECT id,name_de, nummer FROM artikel WHERE id='".$artikel_ohne_ek_eins[$j_am]."' LIMIT 1"); - $this->app->Tpl->Add('TAB5',""); - } - $this->app->Tpl->Add('TAB5','
Artikel-Nr.NameAktion
".$artikel_arr[0]['nummer']."".$artikel_arr[0]['name_de']."
'); - } - if(!$this->app->erp->ModulVorhanden('produktion')) - { - //$this->app->Tpl->Parse(TAB5,"rahmen70.tpl"); - $this->app->Tpl->Set('TABELLE',"
Die Preismatrix (Kosten Stueckzahl abängig von Einkaufspreisen ist nur mit dem Modul Produktion verfügbar"); - } - - //$this->app->Tpl->Parse('PAGE',"einkaufspreiseuebersicht_stueckliste.tpl"); - } - - // easy table mit arbeitspaketen YUI als template - $this->app->YUI->TableSearch('TAB7','einkaufspreise', 'show','','',basename(__FILE__), __CLASS__); - - $adresse = $this->app->DB->Select("SELECT adresse FROM artikel WHERE id='$id' LIMIT 1"); - $hauptlieferant = $this->app->DB->Select("SELECT name FROM adresse WHERE id='$adresse' LIMIT 1"); - /*$min_preis = $this->app->DB->Select("SELECT FORMAT(MIN(preis),2) FROM verkaufspreise WHERE artikel='$id' AND (gueltig_bis='0000-00-00' - OR gueltig_bis >= curdate()) AND (gueltig_ab='0000-00-00' OR gueltig_ab <= curdate()) AND geloescht!=1 LIMIT 1"); - $max_preis = $this->app->DB->Select("SELECT FORMAT(MAX(preis),2) FROM verkaufspreise WHERE artikel='$id' AND (gueltig_bis='0000-00-00' - OR gueltig_bis >= curdate()) AND (gueltig_ab='0000-00-00' OR gueltig_ab <= curdate()) AND geloescht!=1 LIMIT 1");*/ - - $this->app->Tpl->Add('TAB1',"
Der Hauptlieferant ist $hauptlieferant
"); - - //$min_preis = $this->app->erp->EUR($min_preis/(($this->app->erp->GetStandardMarge()/100.0)+1.0)*1.0); - //$max_preis = $this->app->erp->EUR($max_preis/(($this->app->erp->GetStandardMarge()/100.0)+1.0)*1.0); - - $this->app->erp->CheckArtikel($id); - $this->app->Tpl->Parse('PAGE','einkaufspreiseuebersicht.tpl'); - } - - /** - * @param int $articleId - * - * @return float - */ - public function getCalcPriceByMinBasePrice($articleId) - { - $kursusd = (float)$this->app->erp->GetWaehrungUmrechnungskurs('EUR','USD'); - $kurschf = (float)$this->app->erp->GetWaehrungUmrechnungskurs('EUR','CHF'); - $sql = " - SELECT - SUM(if(a.stueckliste, - (SELECT SUM( - (SELECT MIN(e.preis/ifnull(wt.kurs,if(e.waehrung = 'CHR',$kurschf,if(e.waehrung = 'USD',$kursusd,1)))) FROM einkaufspreise e - LEFT JOIN ( - SELECT max(kurs) as kurs, waehrung_von, waehrung_nach FROM waehrung_umrechnung WHERE (isnull(gueltig_bis) OR gueltig_bis >= now() OR gueltig_bis = '0000-00-00') AND (waehrung_von LIKE 'EUR' OR waehrung_nach LIKE 'EUR') GROUP BY waehrung_von,waehrung_nach - ) wt ON (wt.waehrung_nach <> 'EUR' AND wt.waehrung_nach = e.waehrung) OR (wt.waehrung_von <> 'EUR' AND wt.waehrung_von = e.waehrung) - WHERE e.artikel=s2.artikel AND (e.objekt='Standard' OR e.objekt='') - AND (e.gueltig_bis='0000-00-00' OR e.gueltig_bis >= curdate()) AND e.geloescht!=1) * s2.menge) - FROM stueckliste s2 - WHERE s2.stuecklistevonartikel=s.artikel),(SELECT MIN(e.preis/ifnull(wt.kurs,if(e.waehrung = 'CHR',$kurschf,if(e.waehrung = 'USD',$kursusd,1)))) FROM einkaufspreise e - LEFT JOIN ( - SELECT max(kurs) as kurs, waehrung_von, waehrung_nach FROM waehrung_umrechnung WHERE (isnull(gueltig_bis) OR gueltig_bis >= now() OR gueltig_bis = '0000-00-00') AND (waehrung_von LIKE 'EUR' OR waehrung_nach LIKE 'EUR') GROUP BY waehrung_von,waehrung_nach - ) wt ON (wt.waehrung_nach <> 'EUR' AND wt.waehrung_nach = e.waehrung) OR (wt.waehrung_von <> 'EUR' AND wt.waehrung_von = e.waehrung) - WHERE e.artikel=s.artikel AND (e.objekt='Standard' OR e.objekt='') AND (e.gueltig_bis='0000-00-00' OR e.gueltig_bis >= curdate()) AND e.geloescht!=1 ))*s.menge) - FROM stueckliste s - LEFT JOIN artikel a ON a.id=s.artikel - LEFT JOIN adresse l ON l.id=a.adresse - WHERE s.stuecklistevonartikel=$articleId"; - - return (float)$this->app->DB->Select($sql); - } - - /** - * @param int $articleId - * - * @return float mixed - */ - public function getCalcPriceByMaxBasePrice($articleId) - { - $kursusd = (float)$this->app->erp->GetWaehrungUmrechnungskurs('EUR','USD'); - $kurschf = (float)$this->app->erp->GetWaehrungUmrechnungskurs('EUR','CHF'); - $sql = " - SELECT - SUM(if(a.stueckliste, - (SELECT SUM( - (SELECT MAX(e.preis/ifnull(wt.kurs,if(e.waehrung = 'CHR',$kurschf,if(e.waehrung = 'USD',$kursusd,1)))) FROM einkaufspreise e - LEFT JOIN ( - SELECT max(kurs) as kurs, waehrung_von, waehrung_nach FROM waehrung_umrechnung WHERE (isnull(gueltig_bis) OR gueltig_bis >= now() OR gueltig_bis = '0000-00-00') AND (waehrung_von LIKE 'EUR' OR waehrung_nach LIKE 'EUR') GROUP BY waehrung_von,waehrung_nach - ) wt ON (wt.waehrung_nach <> 'EUR' AND wt.waehrung_nach = e.waehrung) OR (wt.waehrung_von <> 'EUR' AND wt.waehrung_von = e.waehrung) - WHERE e.artikel=s2.artikel AND (e.objekt='Standard' OR e.objekt='') - AND (e.gueltig_bis='0000-00-00' OR e.gueltig_bis >= curdate()) AND e.geloescht!=1) * s2.menge) - FROM stueckliste s2 - WHERE s2.stuecklistevonartikel=s.artikel),(SELECT MAX(e.preis/ifnull(wt.kurs,if(e.waehrung = 'CHR',$kurschf,if(e.waehrung = 'USD',$kursusd,1)))) FROM einkaufspreise e - LEFT JOIN ( - SELECT max(kurs) as kurs, waehrung_von, waehrung_nach FROM waehrung_umrechnung WHERE (isnull(gueltig_bis) OR gueltig_bis >= now() OR gueltig_bis = '0000-00-00') AND (waehrung_von LIKE 'EUR' OR waehrung_nach LIKE 'EUR') GROUP BY waehrung_von,waehrung_nach - ) wt ON (wt.waehrung_nach <> 'EUR' AND wt.waehrung_nach = e.waehrung) OR (wt.waehrung_von <> 'EUR' AND wt.waehrung_von = e.waehrung) - WHERE e.artikel=s.artikel AND (e.objekt='Standard' OR e.objekt='') AND (e.gueltig_bis='0000-00-00' OR e.gueltig_bis >= curdate()) AND e.geloescht!=1 ))*s.menge) - FROM stueckliste s - LEFT JOIN artikel a ON a.id=s.artikel - LEFT JOIN adresse l ON l.id=a.adresse - WHERE s.stuecklistevonartikel=$articleId"; - - return (float)$this->app->DB->Select($sql); - } - - public function ArtikelEinkaufEditPopup() - { - if($this->app->Secure->GetPOST('newpreis')) - { - $id = $this->app->Secure->GetGET('id'); - $this->ArtikelCopyWaehrungen($id, 'einkaufeditpopup'); - } - //$frame = $this->app->Secure->GetGET('frame'); - $id = $this->app->Secure->GetGET('id'); - $this->app->Tpl->Set('OPENDISABLE',''); - $this->Preisrechner(); - - - $sid = $this->app->DB->Select("SELECT artikel FROM einkaufspreise WHERE id='$id' LIMIT 1"); - $this->ArtikelMenu($sid); - $artikel = $this->app->DB->Select("SELECT CONCAT(name_de,' (',nummer,')') FROM artikel WHERE id='$sid' LIMIT 1"); - $this->app->Tpl->Set('UEBERSCHRIFT','Artikel: '.$artikel); - $this->app->Tpl->Add('UEBERSCHRIFT',' (Einkauf)'); - - $this->app->Tpl->Set('ABBRECHEN',""); - - $widget = new WidgetEinkaufspreise($this->app,'TAB7'); - $widget->form->SpecialActionAfterExecute('close_refresh', - "index.php?module=artikel&action=einkauf&id=$sid#tabs-1"); - $widget->Edit(); - - - $this->app->Tpl->Add('TAB2','Sie bearbeiten gerade einen Einkaufspreis. Erst nach dem Speichern können neue Preise angelegt werden.'); - $this->app->Tpl->Add('TAB3','Sie bearbeiten gerade einen Einkaufspreis. Erst nach dem Speichern können Statistiken betrachtet werden.'); - $this->app->Tpl->Parse('PAGE','einkaufspreiseuebersicht.tpl'); - } - - public function ArtikelEinkaufDisable() - { - // $this->ArtikelMenu(); - $id = $this->app->Secure->GetGET('id'); - $sid = $this->app->DB->Select("SELECT artikel FROM einkaufspreise WHERE id='$id' LIMIT 1"); - $tagespreise = $this->app->DB->Select("SELECT tagespreise FROM artikel WHERE id = '$sid' LIMIT 1"); - if(!$tagespreise || $this->app->DB->Select("SELECT id FROM einkaufspreise WHERE id='$id' AND (gueltig_bis = '0000-00-00' || isnull(gueltig_bis) || gueltig_bis >= date(now()) LIMIT 1")){ - $this->app->DB->Update("UPDATE einkaufspreise SET gueltig_bis=DATE_SUB(NOW(),INTERVAL 1 DAY), logdatei = now() WHERE id='$id' LIMIT 1"); - } - $this->app->erp->ObjektProtokoll('einkaufspreise', $id, 'einkaufspreise_edit', 'Einkaufspreis deaktiviert'); - $this->app->Location->execute('index.php?module=artikel&action=einkauf&id='.$sid); - } - - public function ArtikelEinkaufDelete() - { - // $this->ArtikelMenu(); - $id = $this->app->Secure->GetGET('id'); - $sid = $this->app->DB->Select("SELECT artikel FROM einkaufspreise WHERE id='$id' LIMIT 1"); - $tagespreise = $this->app->DB->Select("SELECT tagespreise FROM artikel WHERE id = '$sid' LIMIT 1"); - if(!$tagespreise || $this->app->DB->Select("SELECT id FROM einkaufspreise WHERE id='$id' AND (gueltig_bis = '0000-00-00' || isnull(gueltig_bis) || gueltig_bis >= date(now()) LIMIT 1")){ - $this->app->DB->Update("UPDATE einkaufspreise SET geloescht='1',gueltig_bis=DATE_SUB(NOW(),INTERVAL 1 DAY), logdatei = now() WHERE id='$id' LIMIT 1"); - } - $this->app->erp->ObjektProtokoll('einkaufspreise', $id, 'einkaufspreise_edit', 'Einkaufspreis gelöscht'); - $this->app->Location->execute('index.php?module=artikel&action=einkauf&id='.$sid); - } - - - - public function ArtikelEigenschaftenCopy() - { - $id = $this->app->Secure->GetGET('id'); - - $id = $this->app->DB->MysqlCopyRow('eigenschaften','id',$id); - - $this->app->Location->execute('index.php?module=artikel&action=eigenschafteneditpopup&id='.$id); - } - - - public function ArtikelEinkaufCopy() - { - $id = $this->app->Secure->GetGET('id'); - $id = $this->app->DB->MysqlCopyRow('einkaufspreise','id',$id); - $this->app->DB->Update("UPDATE einkaufspreise SET geloescht='0', gueltig_bis='0000-00-00', logdatei = now() WHERE id='$id' LIMIT 1"); - $this->app->erp->ObjektProtokoll('einkaufspreise', $id, 'einkaufspreise_create', 'Einkaufspreis kopiert'); - //$this->app->DB->Update("UPDATE einkaufspreise SET geloescht='1' WHERE id='$id' LIMIT 1"); - $sid = $this->app->DB->Select("SELECT artikel FROM einkaufspreise WHERE id='$id' LIMIT 1"); - $this->app->Location->execute("index.php?module=artikel&action=einkauf&id=".$sid); - } - - - public function ArtikelCopyEdit() - { - //$id = (int)$this->app->Secure->GetGET('id'); - if($this->app->Secure->GetGET('cmd')==='get'){ - $id = (int)$this->app->Secure->GetPOST('id'); - $data = $this->app->DB->SelectRow("SELECT id FROM artikel WHERE id = \"$id\" LIMIT 1 "); - echo json_encode($data); - $this->app->ExitXentral(); - } - $this->app->Tpl->Parse('PAGE', 'artikeluebersicht.tpl'); - } - - public function ArtikelCopySave(){ - $id = (int)$this->app->Secure->GetPOST('editid'); - $einkaufspreise = $this->app->Secure->GetPOST('editeinkaufspreise'); - $verkaufspreise = $this->app->Secure->GetPOST('editverkaufspreise'); - $dateien = $this->app->Secure->GetPOST('editdateien'); - $eigenschaften = $this->app->Secure->GetPOST('editeigenschaften'); - $anweisungen = $this->app->Secure->GetPOST('editanweisungen'); - $stuecklisten = $this->app->Secure->GetPOST('editstuecklisten'); - $freifelderuebersetzung = $this->app->Secure->GetPOST('editfreifelderuebersetzung'); - - if($id == '' || $id <= 0){ - $id = 0; - } - if($einkaufspreise == '' || $einkaufspreise <= 0){ - $einkaufspreise = 0; - } - if($verkaufspreise == '' || $einkaufspreise <= 0){ - $verkaufspreise = 0; - } - if($dateien == '' || $dateien <= 0){ - $dateien = 0; - } - if($eigenschaften == '' || $eigenschaften <= 0){ - $eigenschaften = 0; - } - if($anweisungen == '' || $anweisungen <= 0){ - $anweisungen = 0; - } - if($stuecklisten == '' || $stuecklisten <= 0){ - $stuecklisten = 0; - } - if($freifelderuebersetzung == '' || $freifelderuebersetzung <= 0){ - $freifelderuebersetzung = 0; - } - - $data = array($id, $einkaufspreise, $verkaufspreise, $dateien, $eigenschaften, $anweisungen, $stuecklisten, $freifelderuebersetzung); - - $idnew = $this->ArtikelCopy($data, true); - echo json_encode(array('status'=>1,'url'=>'index.php?module=artikel&action=edit&id='.$idnew)); - $this->app->ExitXentral(); - } - - function ArtikelCopy($data = null, $return = false) - { - //$id = $this->app->Secure->GetGET("id"); - $id = $data[0]; - $einkaufspreise = $data[1]; - $verkaufspreise = $data[2]; - $dateien = $data[3]; - $eigenschaften = $data[4]; - $anweisungen = $data[5]; - $stuecklisten = $data[6]; - $freifelderuebersetzung = $data[7]; - - $this->app->DB->MysqlCopyRow('artikel','id',$id); - - $idnew = $this->app->DB->GetInsertID(); - - $steuersatz = $this->app->DB->Select("SELECT steuersatz FROM artikel WHERE id = '$id' LIMIT 1"); - if($steuersatz == ''){ - $steuersatz = -1.00; - $this->app->DB->Update("UPDATE artikel SET steuersatz = '$steuersatz' WHERE id = '$idnew' LIMIT 1"); - } - - $this->app->DB->Update("UPDATE artikel SET nummer='' WHERE id='$idnew' LIMIT 1"); - if($this->app->DB->Select("SELECT variante_kopie FROM artikel WHERE id = '$id' LIMIT 1"))$this->app->DB->Update("UPDATE artikel SET variante = 1, variante_von = '$id' WHERE id = '$idnew' LIMIT 1"); - - if($stuecklisten == 1){ - // wenn stueckliste - $stueckliste = $this->app->DB->Select("SELECT stueckliste FROM artikel WHERE id='$id' LIMIT 1"); - if($stueckliste==1) - { - $artikelarr = $this->app->DB->SelectArr("SELECT * FROM stueckliste WHERE stuecklistevonartikel='$id'"); - $cartikelarr = $artikelarr?count($artikelarr):0; - for($i=0;$i<$cartikelarr;$i++) - { - $sort = $artikelarr[$i]['sort']; - $artikel = $artikelarr[$i]['artikel']; - $referenz = $artikelarr[$i]['referenz']; - $place = $artikelarr[$i]['place']; - $layer = $artikelarr[$i]['layer']; - $stuecklistevonartikel = $idnew; - $menge = $artikelarr[$i]['menge']; - $firma = $artikelarr[$i]['firma']; - - $this->app->DB->Insert("INSERT INTO stueckliste (id,sort,artikel,referenz,place,layer,stuecklistevonartikel,menge,firma) VALUES - ('','$sort','$artikel','$referenz','$place','$layer','$stuecklistevonartikel','$menge','$firma')"); - } - } - } - - /*$arbeitsanweisungen = $this->app->DB->SelectArr("SELECT id FROM `artikel_arbeitsanweisung` WHERE artikel = '$id'"); - if($arbeitsanweisungen) - { - foreach($arbeitsanweisungen as $arbeitsanweisung) - { - $newarbeitsanweisung = $this->app->DB->MysqlCopyRow('artikel_arbeitsanweisung', 'id', $arbeitsanweisung['id']); - $this->app->DB->Update("UPDATE `artikel_arbeitsanweisung` SET artikel = '$idnew' WHERE id = '$newarbeitsanweisung' LIMIT 1"); - } - }*/ - //TODO hinweis es wuren keine Preise kopiert - - if($einkaufspreise == 1){ - $einkaufspreise = $this->app->DB->SelectArr("SELECT id FROM einkaufspreise WHERE artikel = '$id'"); - if($einkaufspreise){ - foreach($einkaufspreise as $preis){ - $neuereinkaufspreis = $this->app->DB->MysqlCopyRow("einkaufspreise", "id", $preis['id']); - $this->app->DB->Update("UPDATE einkaufspreise SET artikel = '$idnew' WHERE id = '$neuereinkaufspreis' LIMIT 1"); - } - } - } - - if($verkaufspreise == 1){ - $verkaufspreise = $this->app->DB->SelectArr("SELECT id FROM verkaufspreise WHERE artikel = '$id'"); - if($verkaufspreise){ - foreach($verkaufspreise as $preis){ - $neuerverkaufspreis = $this->app->DB->MysqlCopyRow("verkaufspreise", "id", $preis['id']); - $this->app->DB->Update("UPDATE verkaufspreise SET artikel = '$idnew' WHERE id = '$neuerverkaufspreis' LIMIT 1"); - } - } - } - - if($dateien == 1){ - $dateien = $this->app->DB->SelectArr("SELECT DISTINCT datei FROM datei_stichwoerter WHERE parameter = '$id' AND objekt = 'Artikel'"); - $datei_stichwoerter = $this->app->DB->SelectArr("SELECT id,datei FROM datei_stichwoerter WHERE parameter = '$id' AND objekt = 'Artikel'"); - - if($dateien){ - foreach($dateien as $datei){ - $titel = $this->app->DB->Select("SELECT titel FROM datei WHERE id='".$datei['datei']."' LIMIT 1"); - $beschreibung = $this->app->DB->Select("SELECT beschreibung FROM datei WHERE id='".$datei['datei']."' LIMIT 1"); - $nummer = $this->app->DB->Select("SELECT nummer FROM datei WHERE id='".$datei['datei']."' LIMIT 1"); - $name = $this->app->DB->Select("SELECT dateiname FROM datei_version WHERE datei='".$this->app->DB->real_escape_string($datei['datei'])."' ORDER by version DESC LIMIT 1"); - $ersteller = $this->app->User->GetName(); - $tmpnewdateiid = $this->app->erp->CreateDatei($name,$titel,$beschreibung,$nummer,$this->app->erp->GetDateiPfad($datei['datei']),$ersteller); - $datei_mapping[$datei['datei']] = $tmpnewdateiid; - } - } - - if($datei_stichwoerter){ - foreach($datei_stichwoerter as $datei){ - $neuesstichwort = $this->app->DB->MysqlCopyRow("datei_stichwoerter", "id", $datei['id']); - $newdatei = $datei_mapping[$datei['datei']]; - $this->app->DB->Update("UPDATE datei_stichwoerter SET datei='$newdatei', parameter = '$idnew', objekt = 'Artikel' WHERE id = '$neuesstichwort' LIMIT 1"); - } - } - } - - if($eigenschaften == 1){ - $aeigenschaften = $this->app->DB->SelectArr("SELECT id FROM artikeleigenschaftenwerte WHERE artikel = '$id'"); - if($aeigenschaften){ - foreach($aeigenschaften as $eigenschaft){ - $neue_eigenschaft = $this->app->DB->MysqlCopyRow("artikeleigenschaftenwerte", "id", $eigenschaft['id']); - $this->app->DB->Update("UPDATE artikeleigenschaftenwerte SET artikel = '$idnew' WHERE id = '$neue_eigenschaft' LIMIT 1"); - } - } - } - - //WERDEN AUCH SCHON IMMER KOPIERT - if($anweisungen == 1){ - $arbeitsanweisungen = $this->app->DB->SelectArr("SELECT id FROM artikel_arbeitsanweisung WHERE artikel = '$id'"); - if($arbeitsanweisungen){ - foreach($arbeitsanweisungen as $anweisung){ - $neue_anweisung = $this->app->DB->MysqlCopyRow("artikel_arbeitsanweisung", "id", $anweisung['id']); - $this->app->DB->Update("UPDATE artikel_arbeitsanweisung SET artikel = '$idnew' WHERE id = '$neue_anweisung' LIMIT 1"); - } - } - } - - if($freifelderuebersetzung == 1){ - $freifelderuebersetzungen = $this->app->DB->SelectArr("SELECT id FROM artikel_freifelder WHERE artikel = '$id'"); - if($freifelderuebersetzungen){ - $this->app->DB->Insert("INSERT INTO artikel_freifelder (artikel, sprache, nummer, wert) SELECT '$idnew', sprache, nummer, wert FROM artikel_freifelder WHERE artikel = '$id'"); - } - } - - // artikelbilder kopieren - - if($return){ - return $idnew; - } - - // eventuell einkaufspreise verkaufspreise und stueckliste kopieren? - $msg = $this->app->erp->base64_url_encode("
Sie befinden sich in der neuen Kopie des Artikels. Bitte legen Sie Verkaufs- und Einkaufspreise und Bilder bzw. Dateien an! Diese wurden nicht kopiert!
"); - $this->app->Location->execute("index.php?module=artikel&action=edit&msg=$msg&id=".$idnew); - } - - public function ArtikelProjekte() - { - $this->app->Tpl->Add('UEBERSCHRIFT',' (Projekte)'); - $this->ArtikelMenu(); - $this->app->Tpl->Set('PAGE','hier sieht man in welchen projekten es verwendet wird'); - } - - public function ArtikelLager() - { - $id = $this->app->Secure->GetGET('id'); - $cmd = $this->app->Secure->GetGET('cmd'); - if($cmd === 'getvpe') - { - $lpiid = (int)$this->app->Secure->GetPOST('lpiid'); - $erg = $this->app->DB->SelectRow("SELECT lpv.* FROM lager_platz_inhalt lpi LEFT JOIN lager_platz_vpe lpv ON lpi.lager_platz_vpe = lpv.id WHERE lpi.id = '".$lpiid."' LIMIT 1"); - echo json_encode($erg); - $this->app->ExitXentral(); - } - - if($cmd === 'getvpevorlage') - { - $vpeid = (int)$this->app->Secure->GetPOST('vpeid'); - $erg = $this->app->DB->SelectRow("SELECT lpv.* FROM lager_platz_vpe lpv WHERE lpv.id = '".$vpeid."' LIMIT 1"); - echo json_encode($erg); - $this->app->ExitXentral(); - } - - if($cmd === 'savevpe') - { - $lpiid = (int)$this->app->Secure->GetPOST('lpiid'); - $artikel = $this->app->DB->Select("SELECT artikel FROM lager_platz_inhalt WHERE id = '".$lpiid."' LIMIT 1"); - $status = 0; - if($artikel) - { - $status = 1; - $menge = str_replace(',','.',$this->app->Secure->GetPOST('menge')); - $menge2 = str_replace(',','.',$this->app->Secure->GetPOST('menge2')); - $gewicht = str_replace(',','.',$this->app->Secure->GetPOST('gewicht')); - $breite = str_replace(',','.',$this->app->Secure->GetPOST('breite')); - $laenge = str_replace(',','.',$this->app->Secure->GetPOST('laenge')); - $hoehe = str_replace(',','.',$this->app->Secure->GetPOST('hoehe')); - $gewicht2 = str_replace(',','.',$this->app->Secure->GetPOST('gewicht2')); - $breite2 = str_replace(',','.',$this->app->Secure->GetPOST('breite2')); - $laenge2 = str_replace(',','.',$this->app->Secure->GetPOST('laenge2')); - $hoehe2 = str_replace(',','.',$this->app->Secure->GetPOST('hoehe2')); - $check = str_replace(',','.',$this->app->DB->Select("SELECT id FROM lager_platz_vpe WHERE artikel = '$artikel' AND - menge = '$menge' AND menge2 = '$menge2' - AND gewicht = '$gewicht' AND gewicht2 = '$gewicht2' - AND breite = '$breite' AND breite2 = '$breite2' - AND laenge = '$laenge' AND laenge2 = '$laenge2' - AND hoehe = '$hoehe' AND hoehe2 = '$hoehe2' - LIMIT 1 - ")); - if(!$check && ($menge > 0 || $gewicht > 0 || $breite > 0 || $laenge > 0 || $hoehe > 0)) - { - $this->app->DB->Insert("INSERT INTO lager_platz_vpe (artikel, menge, menge2, gewicht, gewicht2, breite, breite2, laenge, laenge2, hoehe, hoehe2) - VALUES ('$artikel','$menge','$menge2','$gewicht','$gewicht2','$breite','$breite2','$laenge','$laenge2','$hoehe','$hoehe2') - "); - $check = $this->app->DB->GetInsertID(); - } - $menge = $this->app->DB->Select("SELECT menge FROM lager_platz_inhalt WHERE id = '$lpiid' LIMIT 1"); - $lager_platz = $this->app->DB->Select("SELECT lager_platz FROM lager_platz_inhalt WHERE id = '$lpiid' LIMIT 1"); - $lager_platz_vpe = $this->app->DB->Select("SELECT lager_platz_vpe FROM lager_platz_inhalt WHERE id = '".$lpiid."' LIMIT 1"); - if(!$lager_platz_vpe) - { - $lagerbewegung = $this->app->DB->SelectArr("SELECT * FROM lager_bewegung WHERE lager_platz = '$lager_platz' AND artikel = '$artikel' AND menge = '$menge' AND eingang = 1 ORDER BY zeit DESC, id DESC LIMIT 1"); - if($lagerbewegung) - { - if(!$lagerbewegung[0]['vpeid']) - { - $this->app->DB->Update("UPDATE lager_bewegung SET vpeid = '$check' WHERE id = '".$lagerbewegung[0]['id']."' LIMIT 1"); - } - if(stripos($lagerbewegung[0]['referenz'],'(VPE') === false) - { - $referenz = $this->app->DB->real_escape_string($lagerbewegung[0]['referenz'].$this->app->erp->GetVPEBezeichnung($check)); - $this->app->DB->Update("UPDATE lager_bewegung SET referenz = '$referenz' WHERE id = '".$lagerbewegung[0]['id']."' LIMIT 1"); - } - } - } - $this->app->DB->Update("UPDATE lager_platz_inhalt SET lager_platz_vpe = '$check' WHERE id = '$lpiid' LIMIT 1"); - } - echo json_encode(array('status'=>$status)); - $this->app->ExitXentral(); - } - - $msg = $this->app->Secure->GetGET('msg'); - - if(!is_numeric($id)) - { - $tmp = explode('_',$id); - $id = $tmp[0]; - if(is_numeric($id)) - { - $this->app->Location->execute("index.php?module=artikel&action=lager&id=$id"); - return; - } - } - $this->app->erp->LagerArtikelZusammenfassen($id); - - if(method_exists($this->app->erp,'GetTmpMessageOut')) - { - $this->app->Tpl->Set('MESSAGE',$this->app->erp->GetTmpMessageOut()); - }else{ - $msg = $this->app->erp->base64_url_decode($msg); - $this->app->Tpl->Set('MESSAGE',$msg); - } - if($this->app->DB->Select("SELECT id FROM lager_platz_inhalt WHERE artikel = '$id' AND lager_platz <> 0 AND NOT isnull(inventur) LIMIT 1")) - { - $this->app->Tpl->Add('MESSAGE','
Für diesen Artikel läuft aktuell eine Inventur
'); - } - $check = $this->app->DB->Select("SELECT trim(SUM(menge))+0 FROM zwischenlager WHERE artikel='$id'"); - if($check > 0) - { - $this->app->Tpl->Add('MESSAGE','
Hinweis: Es befinden sich noch '.$check.' Stück des Artikels im Zwischenlager!
'); - } - - $this->ArtikelMenu(); - $this->app->Tpl->Add('TAB1','

Lagerbestand

'); - - // easy table mit arbeitspaketen YUI als template - $table = new EasyTable($this->app); - $bestbeforeBatchSn = $this->app->DB->SelectRow( - sprintf( - 'SELECT mindesthaltbarkeitsdatum, seriennummern, chargenverwaltung - FROM artikel - WHERE id=%d - LIMIT 1', - $id - ) - ); - $mindesthaltbarkeitsdatum = $bestbeforeBatchSn['mindesthaltbarkeitsdatum']; - $seriennummern = $bestbeforeBatchSn['seriennummern']; - $chargenverwaltung= $bestbeforeBatchSn['chargenverwaltung']; - - $artikelvpe = 'lpi.vpe'; - $artikeljoin = ''; - - - if($seriennummern!=='vomprodukteinlagern' && $chargenverwaltung <1 && $mindesthaltbarkeitsdatum!='1') - { - $table->Query("SELECT CONCAT(l.bezeichnung,' / ',lp.kurzbezeichnung, if(lp.sperrlager,' (Kein Auto-Versand Lager)',''), - if(lp.poslager,' (POS Lager)',''),if(lp.verbrauchslager,' (Verbrauchslager)',''),if(lp.autolagersperre,' (Nachschublager)',''),if(isnull(lpi.inventur),'',concat(' (Inventurwert: ',(trim(lpi.inventur)+0),')'))) as lager , trim(lpi.menge)+0 as menge, - $artikelvpe as VPE, - p.abkuerzung as projekt, - lpi.id FROM lager_platz_inhalt lpi - LEFT JOIN lager_platz as lp ON lpi.lager_platz=lp.id - LEFT JOIN projekt p ON lpi.projekt=p.id - LEFT JOIN lager l ON l.id=lp.lager - $artikeljoin - WHERE lpi.artikel='$id' "); - - $submenu=''; - if($this->app->erp->RechteVorhanden('artikel','auslagern')){ - $submenu .= " 0 && (grund!=null && grund!='')) { window.location.href='index.php?module=artikel&action=auslagern&id=$id&lid=%value%&menge='+menge+'&grund='+grund;}\" href=\"#\">"; - } - - if($this->app->erp->RechteVorhanden('artikel','einlagern')){ - $submenu .= " 0 && (grund!=null && grund!='')) { window.location.href='index.php?module=artikel&action=einlagern&id=$id&lid=%value%&menge='+menge+'&grund='+grund;}\" href=\"#\">"; - } - - - if($this->app->erp->RechteVorhanden('artikel','umlagern')){ - $submenu .=" 0 && (grund!=null && grund!='')) { window.location.href='index.php?module=artikel&action=umlagern&id=$id&lid=%value%&menge='+menge+'&grund='+grund;}\" href=\"#\">"; - } - - if($this->app->erp->RechteVorhanden('artikel','auslagern') || $this->app->erp->RechteVorhanden('artikel','einlagern') - || $this->app->erp->RechteVorhanden('artikel','umlagern')) - { - $table->DisplayNew('INHALT',$submenu); - } - else { - $table->DisplayNew('INHALT',''); - } - } else { - $table->Query("SELECT CONCAT(l.bezeichnung,' / ',lp.kurzbezeichnung, if(lp.sperrlager,' (Kein Auto-Versand Lager)',''), - if(lp.poslager,' (POS Lager)',''),if(lp.verbrauchslager,' (Verbrauchslager)',''),if(lp.autolagersperre,' (Nachschublager)','')) as lager , trim(lpi.menge)+0 as menge, - $artikelvpe as VPE, - p.abkuerzung as projekt - FROM lager_platz_inhalt lpi LEFT JOIN lager_platz as lp ON lpi.lager_platz=lp.id LEFT JOIN projekt p ON lpi.projekt=p.id - LEFT JOIN lager l ON l.id=lp.lager - $artikeljoin - WHERE lpi.artikel='$id'"); - - if($this->app->erp->RechteVorhanden('artikel','auslagern') || $this->app->erp->RechteVorhanden('artikel','einlagern') - || $this->app->erp->RechteVorhanden('artikel','umlagern')){ - $table->DisplayNew('INHALT', 'Projekt', 'noAction'); - } - else{ - $table->DisplayNew('INHALT', ''); - } - } - - $this->app->Tpl->Parse('TAB1','rahmen70.tpl'); - - $this->app->Tpl->Set('INHALT',''); - - $mindesthaltbarkeitsdatum = $this->app->DB->Select("SELECT mindesthaltbarkeitsdatum FROM artikel WHERE id='$id' LIMIT 1"); - $chargenverwaltung = $this->app->DB->Select("SELECT chargenverwaltung FROM artikel WHERE id='$id' LIMIT 1"); - $seriennummern = $this->app->DB->Select("SELECT seriennummern FROM artikel WHERE id='$id' LIMIT 1"); - - if($seriennummern==='vomprodukteinlagern' || $mindesthaltbarkeitsdatum=='1' || $chargenverwaltung=='2') - { - $this->app->Tpl->Add('TAB1',"
- - - -
"); - } else { - $this->app->Tpl->Add('TAB1',"
"); - } - // $this->app->Tpl->Set('SUBSUBHEADING',"Reservierungen Stand ".date('d.m.Y')); - $this->app->Tpl->Add('TAB1',$this->ArtikelLagerInfo($id)); - - if($this->app->erp->Version()!=='stock') - { - $this->app->Tpl->Add('TAB1','

Reservierungen

'); - - // easy table mit arbeitspaketen YUI als template - $table = new EasyTable($this->app); - $table->Query("SELECT adr.name as kunde, trim(r.menge)+0 as menge, if(r.datum='0000-00-00','Kein Datum hinterlegt',r.datum) as bis, - p.abkuerzung as projekt,r.grund, IF(".$this->app->erp->RechteVorhanden("artikel","ausreservieren")."=1,CONCAT(' 0) window.location.href=\'index.php?module=artikel&action=ausreservieren&id=$id&lid=',r.id,'&menge=\'+menge;\" href=\"#\">'),'') AS Aktion FROM lager_reserviert r LEFT JOIN artikel a ON a.id=r.artikel LEFT JOIN projekt p ON - p.id=r.projekt LEFT JOIN adresse adr ON r.adresse=adr.id WHERE r.artikel='$id'"); - //$summe = round($this->app->DB->Select("SELECT SUM(menge) FROM lager_platz_inhalt WHERE artikel='$id'"),4); - //$reserviert = round($this->app->DB->Select("SELECT SUM(menge) FROM lager_reserviert WHERE artikel='$id'"),4);// AND datum >= NOW()"); - // if($this->app->User->GetType()=="admin") - - - $table->DisplayNew('INHALT'); - - $this->app->Tpl->Parse('TAB1','rahmen70.tpl'); - - $this->app->Tpl->Set('INHALT',''); - - $this->app->Tpl->Add('TAB1','

Offene Aufträge

'); - // easy table mit arbeitspaketen YUI als template - $table = new EasyTable($this->app); - $table->Query("SELECT - CONCAT('',a.belegnr,'') as belegnr, DATE_FORMAT(a.datum,'%d.%m.%Y') as datum, - DATE_FORMAT(a.tatsaechlicheslieferdatum,'%d.%m.%Y') as 'Auslieferung Lager', - trim(SUM(ap.menge))+0 as menge, - CONCAT( - (SELECT trim(SUM(li.menge))+0 FROM lager_reserviert li WHERE li.objekt='auftrag' AND li.parameter=a.id AND li.artikel='$id'),'  - - ') as reserviert, - a.zahlungsweise, adr.kundenfreigabe as freigabe, CONCAT(a.name, ' ',a.ansprechpartner - ,'
', a.email) as Kunde, - if( - (SELECT b.belegnr FROM auftrag sub_a Left Join auftrag_position ap on ap.auftrag=sub_a.id LEFT JOIN bestellung_position bp on ap.id=bp.auftrag_position_id LEFT JOIN bestellung b on b.id= bp.bestellung where sub_a.id=a.id LIMIT 1) - ,CONCAT('', - (SELECT b.belegnr FROM auftrag sub_a Left Join auftrag_position ap on ap.auftrag=sub_a.id LEFT JOIN bestellung_position bp on ap.id=bp.auftrag_position_id LEFT JOIN bestellung b on b.id= bp.bestellung where sub_a.id=a.id LIMIT 1),''),'-') as 'Bestell Nr.', - a.zahlungsweise, - format(ap.geliefert_menge,4) as gelieferte, - FORMAT(ap.preis,2) as preis FROM auftrag_position ap LEFT JOIN auftrag a ON a.id=ap.auftrag, adresse adr WHERE adr.id=a.adresse AND ap.artikel='$id' AND ap.geliefert_menge < ap.menge AND a.status='freigegeben' GROUP by a.belegnr - ORDER by a.tatsaechlicheslieferdatum, a.id - "); - if($table->datasets) - { - $lagerrunden = true; - foreach($table->datasets as $k => $v) - { - if($v['menge'] != round($v['menge'])){ - $lagerrunden = false; - } - if($v['gelieferte'] != round($v['gelieferte'])){ - $lagerrunden = false; - } - } - if($lagerrunden) - { - foreach($table->datasets as $k => $v) - { - $table->datasets[$k]['menge'] = round($v['menge']); - $table->datasets[$k]['gelieferte'] = round($v['gelieferte']); - } - } - } - //$table->DisplayNew('INHALT',"Bestellung"); - $table->DisplayNew('INHALT','Preis','noAction'); - - $this->app->Tpl->Parse('TAB1','rahmen70.tpl'); - - $this->app->Tpl->Set('INHALT',''); - - $this->app->Tpl->Set('INHALT',''); - $this->app->Tpl->Add('TAB1','

Offene Bestellungen

'); - - $table = new EasyTable($this->app); - $table->Query("SELECT DATE_FORMAT(b.datum,'%d.%m.%Y') as datum, CONCAT('',b.belegnr,'') as 'bestellung Nr.', - if( - (SELECT nummer from auftrag_position where id=bp.auftrag_position_id LIMIT 1),CONCAT('', - (SELECT a.belegnr from auftrag a LEFT JOIN auftrag_position ap on a.id=ap.auftrag where ap.id=bp.auftrag_position_id LIMIT 1),''),'-') as 'Auftrag Nr.', - bp.bestellnummer as Nummer, - - bp.menge, bp.geliefert, bp.vpe as VPE, a.lieferantennummer as lieferant, a.name as name, if(bp.lieferdatum!='0000-00-00', DATE_FORMAT(bp.lieferdatum,'%d.%m.%Y'),'sofort') as lieferdatum, - if(b.bestaetigteslieferdatum!='0000-00-00', DATE_FORMAT(b.bestaetigteslieferdatum,'%d.%m.%Y'),'-') as 'best. Lieferdatum', b.status as status_Bestellung, bp.bestellung - FROM bestellung_position bp LEFT JOIN bestellung b ON bp.bestellung=b.id LEFT JOIN adresse a ON b.adresse=a.id - WHERE artikel='$id' AND b.status!='storniert' AND b.status!='abgeschlossen' AND bp.geliefertdatasets) - { - $lagerrunden = true; - foreach($table->datasets as $k => $v) - { - if($v['menge'] != round($v['menge'])){ - $lagerrunden = false; - } - if($v['geliefert'] != round($v['geliefert'])){ - $lagerrunden = false; - } - } - if($lagerrunden) - { - foreach($table->datasets as $k => $v) - { - $table->datasets[$k]['menge'] = round($v['menge']); - $table->datasets[$k]['geliefert'] = round($v['geliefert']); - } - } - } - $table->DisplayNew('INHALT',"  "); - $this->app->Tpl->Parse('TAB1','rahmen70.tpl'); - } - $this->app->Tpl->Set('INHALT',''); - $this->app->Tpl->Add('TAB1','

Lagerplatz Bewegungen

'); - // easy table mit arbeitspaketen YUI als template - $this->app->YUI->TableSearch('TAB1','lagerbewegungartikel', 'show','','',basename(__FILE__), __CLASS__); - - - $this->app->Tpl->Set('INHALT',''); - - //$this->app->Tpl->Set('TABTEXT',"Lagerbestand"); - - $lager_platz_vpe = $this->app->DB->SelectArr("SELECT * FROM lager_platz_vpe WHERE artikel = '$id'"); - if($lager_platz_vpe) - { - foreach($lager_platz_vpe as $v) - { - $this->app->Tpl->Add('SELECTVPE',''); - } - } - $this->app->Tpl->Parse('PAGE','artikel_lager.tpl'); - } - - - public function ArtikelChargeDelete() - { - $id = $this->app->Secure->GetGET('id'); - $sid = $this->app->Secure->GetGET('sid'); - if($sid > 0){ - $data = $this->app->DB->SelectRow("SELECT * FROM lager_charge WHERE id='$sid' LIMIT 1"); - } - if(!empty($data)){ - $lager_platz = $data['lager_platz']; - $artikel = $data['artikel']; - $menge = $data['menge']; - $this->app->DB->Delete("DELETE FROM lager_charge WHERE id='$sid' LIMIT 1"); - if($this->app->DB->Select("SELECT mindesthaltbarkeitsdatum FROM artikel WHERE id = '$artikel' LIMIT 1")) - { - $this->app->erp->Chargenlog($artikel, $lager_platz, 0, $data['charge'], $menge, 'Charge und/oder MHD gelöscht', "", 0); - }else{ - $this->app->erp->Chargenlog($artikel, $lager_platz, 0, $data['charge'], $menge, 'Charge gelöscht', "", 0); - } - } - $this->app->Location->execute("index.php?module=artikel&action=chargen&id=$id"); - } - - - public function ArticleBatchAdd() - { - $id = $this->app->Secure->GetGET('id'); - $lid = $this->app->Secure->GetGET('lid'); - $grund = $this->app->Secure->GetGET('grund'); - $menge = $this->app->erp->ReplaceMenge(1, $this->app->Secure->GetGET('menge'), 1); - if($menge <= 0) { - $this->app->Location->execute('index.php?module=artikel&action=chargen&id='.$id); - } - if($lid > 0){ - $data = $this->app->DB->SelectRow( - sprintf( - 'SELECT * FROM `lager_charge` WHERE `id` = %d LIMIT 1', - $lid - ) - ); - } - if(!empty($data)){ - $lager_platz = $data['lager_platz']; - $artikel = $data['artikel']; - $this->app->erp->LagerEinlagern($artikel, $menge, $lager_platz, 0, $grund); - } - $this->app->Location->execute('index.php?module=artikel&action=chargen&id='.$id); - } - - public function ArticleBestbeforeAdd() - { - $id = $this->app->Secure->GetGET('id'); - $lid = $this->app->Secure->GetGET('lid'); - $grund = $this->app->Secure->GetGET('grund'); - $menge = $this->app->erp->ReplaceMenge(1, $this->app->Secure->GetGET('menge'), 1); - if($menge <= 0) { - $this->app->Location->execute('index.php?module=artikel&action=mindesthaltbarkeitsdatum&id='.$lid); - } - if($lid > 0){ - $data = $this->app->DB->SelectRow( - sprintf( - 'SELECT * FROM `lager_mindesthaltbarkeitsdatum` WHERE `id` = %d LIMIT 1', - $lid - ) - ); - } - if(!empty($data)){ - $lager_platz = $data['lager_platz']; - $artikel = $data['artikel']; - $this->app->erp->LagerEinlagern($artikel, $menge, $lager_platz, 0, $grund); - } - - $this->app->Location->execute('index.php?module=artikel&action=mindesthaltbarkeitsdatum&id='.$id); - } - - public function ArticleBatchReduce() - { - $id = $this->app->Secure->GetGET('id'); - $lid = $this->app->Secure->GetGET('lid'); - $grund = $this->app->Secure->GetGET('grund'); - $menge = $this->app->erp->ReplaceMenge(1, $this->app->Secure->GetGET('menge'), 1); - if($menge <= 0) { - $this->app->Location->execute('index.php?module=artikel&action=chargen&id='.$id); - } - if($lid > 0){ - $data = $this->app->DB->SelectRow( - sprintf( - 'SELECT * FROM `lager_charge` WHERE `id` = %d LIMIT 1', - $lid - ) - ); - } - if(!empty($data)){ - $lager_platz = $data['lager_platz']; - $artikel = $data['artikel']; - $lpi = round((float)$this->app->DB->Select( - sprintf( - 'SELECT SUM(menge) FROM `lager_platz_inhalt` WHERE `artikel` = %d AND `lager_platz` = %d', - $artikel, $lager_platz - ) - ),8); - if($menge > $lpi) { - $menge = $lpi; - } - - $this->app->erp->LagerAuslagernRegal($artikel, $lager_platz, $menge, 0, $grund); - } - $this->app->Location->execute('index.php?module=artikel&action=chargen&id='.$id); - } - - public function ArticleBestbeforeReduce() - { - $id = $this->app->Secure->GetGET('id'); - $lid = $this->app->Secure->GetGET('lid'); - $grund = $this->app->Secure->GetGET('grund'); - $menge = $this->app->erp->ReplaceMenge(1, $this->app->Secure->GetGET('menge'), 1); - if($menge <= 0) { - $this->app->Location->execute('index.php?module=artikel&action=mindesthaltbarkeitsdatum&id='.$id); - } - if($lid > 0){ - $data = $this->app->DB->SelectRow( - sprintf( - 'SELECT * FROM `lager_mindesthaltbarkeitsdatum` WHERE `id` = %d LIMIT 1', - $lid - ) - ); - } - if(!empty($data)){ - $lager_platz = $data['lager_platz']; - $artikel = $data['artikel']; - $lpi = round((float)$this->app->DB->Select( - sprintf( - 'SELECT SUM(menge) FROM `lager_platz_inhalt` WHERE `artikel` = %d AND `lager_platz` = %d', - $artikel, $lager_platz - ) - ),8); - if($menge > $lpi) { - $menge = $lpi; - } - - $this->app->erp->LagerAuslagernRegal($artikel, $lager_platz, $menge, 0, $grund); - } - $this->app->Location->execute('index.php?module=artikel&action=mindesthaltbarkeitsdatum&id='.$id); - } - - public function ArtikelMHDDelete() - { - $id = $this->app->Secure->GetGET('id'); - $sid = $this->app->Secure->GetGET('sid'); - if($sid > 0){ - $data = $this->app->DB->SelectArr("SELECT * FROM lager_mindesthaltbarkeitsdatum WHERE id='$sid' LIMIT 1"); - } - if(!empty($data)){ - $lager_platz = $data[0]['lager_platz']; - $artikel = $data[0]['artikel']; - $menge = $data[0]['menge']; - $charge = $data[0]['charge']; - - $this->app->DB->Delete("DELETE FROM lager_mindesthaltbarkeitsdatum WHERE id='$sid' LIMIT 1"); - if($this->app->DB->Select("SELECT chargenverwaltung FROM artikel WHERE id = '$artikel' LIMIT 1")){ - if(!empty($charge)) - { - $charge = $this->app->DB->real_escape_string($charge); - $amount_mhdcharge = $this->app->DB->Select("SELECT IFNULL(SUM(lm.menge),0) - FROM lager_mindesthaltbarkeitsdatum as lm - WHERE lm.artikel = $artikel AND lm.charge = '$charge'"); - $amount_charge = $this->app->DB->Select("SELECT IFNULL(SUM(lc.menge),0) - FROM lager_charge AS lc - WHERE lc.artikel = $artikel AND lc.charge = '$charge'"); - if($amount_charge >= $amount_mhdcharge + $menge) - { - $chargen = $this->app->DB->SelectArr("SELECT lc.* - FROM lager_charge AS lc - WHERE lc.artikel = $artikel AND lc.charge = '$charge' ORDER BY lc.menge >= $menge DESC"); - $nochmenge = $menge; - foreach($chargen as $chargenrow) - { - if($nochmenge <= 0) - { - break; - } - if($nochmenge >= $chargenrow['menge']) - { - $this->app->DB->Delete("DELETE FROM lager_charge WHERE id = ".$chargenrow['id']); - if($this->app->DB->affected_rows() > 0){ - $nochmenge = round($nochmenge - $chargenrow['menge'], 8); - } - }else{ - $this->app->DB->Update("UPDATE lager_charge SET menge = menge - $nochmenge WHERE id = ".$chargenrow['id']); - if($this->app->DB->affected_rows() > 0){ - $nochmenge = 0; - break; - } - } - } - if($nochmenge < $menge) - { - $this->app->erp->Chargenlog($artikel, $lager_platz, 0, $charge, round($menge-$nochmenge,8), 'Charge und / oder MHD gelöscht'); - } - } - } - $this->app->erp->MHDLog($artikel, $lager_platz, 0, $data[0]['mhddatum'], $menge, 'Charge und / oder MHD gelöscht', "", 0, $data[0]['charge'], 0); - }else{ - $this->app->erp->MHDLog($artikel, $lager_platz, 0, $data[0]['mhddatum'], $menge, 'MHD gelöscht', "", 0, $data[0]['charge'], 0); - } - } - $this->app->Location->execute("index.php?module=artikel&action=mindesthaltbarkeitsdatum&id=$id"); - } - - public function ArtikelChargen() - { - $this->ArtikelMenu(); - $obj = $this->app->erp->LoadModul('chargen'); - if($obj) - { - $obj->ChargenArtikelChargen(); - } - } - - - public function ArtikelMHD() - { - $id = $this->app->Secure->GetGET('id'); - $this->ArtikelMenu(); - //$this->app->Tpl->Set('TABTEXT','Mindesthaltbarkeitsdatum'); - - $this->app->YUI->DatePicker('datum'); - $this->app->YUI->AutoComplete('lagerplatz','lagerplatz'); - - if($this->app->Secure->GetPOST('anlegen')!='') - { - $formmenge = str_replace(',','.',$this->app->Secure->GetPOST('menge')); - $datum = $this->app->Secure->GetPOST('datum'); - $charge = $this->app->Secure->GetPOST('charge'); - $lagerplatz = $this->app->Secure->GetPOST('lagerplatz'); - $datum = $this->app->String->Convert($datum,'%1.%2.%3','%3-%2-%1'); - $lagerplatz = $this->app->DB->Select("SELECT id FROM lager_platz WHERE kurzbezeichnung='$lagerplatz' LIMIT 1"); - - if(is_numeric($formmenge) && is_numeric($lagerplatz) && $datum!='--') - { - if($this->app->DB->Select("SELECT chargenverwaltung FROM artikel WHERE id = '$id' LIMIT 1")) - { - if(!empty($charge)){ - $this->app->erp->AddChargeLagerOhneBewegung( - $id, - $formmenge, - $lagerplatz, - $datum, - $charge, - 'Charge und / oder MHD angelegt'); - } - $this->app->erp->AddMindesthaltbarkeitsdatumLagerOhneBewegung($id,$formmenge,$lagerplatz,$datum,$charge,0 , '', 0, 'Charge und / oder MHD angelegt'); - }else{ - $this->app->erp->AddMindesthaltbarkeitsdatumLagerOhneBewegung($id,$formmenge,$lagerplatz,$datum,$charge,0 , '', 0, 'MHD angelegt'); - } - } else { - $this->app->Tpl->Add('TAB1','
Fehler: Bitte Menge, MHD und Lager angeben!
'); - } - } - - $menge = $this->app->erp->ArtikelImLager($id); - $mhd = $this->app->DB->Select("SELECT SUM(menge) FROM lager_mindesthaltbarkeitsdatum WHERE artikel='$id'"); - if($menge > $mhd) - $this->app->Tpl->Add('TAB1',"
Achtung: Es sind ".($menge-$mhd)." Einträge zu wenig vorhanden!
"); - else if ($menge < $mhd) - $this->app->Tpl->Add('TAB1',"
Achtung: Es sind ".($mhd-$menge)." Einträge zu viel vorhanden!
"); - - $this->app->Tpl->Add('TAB1',"
Menge:  MHD:  Lager:  Charge (optional):  
"); - - - $this->app->YUI->TableSearch('TAB1','mindesthaltbarkeitsdatum', 'show','','','mhdwarning.php', 'Mhdwarning'); - $this->app->Tpl->Parse('PAGE','tabview.tpl'); - } - - - function getStuecklistenbaum(&$sbaum, $parent, $menge = 1) - { - $res = $this->app->DB->SelectArr("SELECT s.id, trim(s.menge)+0 as menge, s.art, s.stuecklistevonartikel, art.nummer, s.artikel, art.name_de FROM stueckliste s INNER JOIN artikel art ON s.artikel = art.id WHERE stuecklistevonartikel = '$parent' ORDER by sort"); - if(!empty($res)) - { - foreach($res as $k => $v) - { - $v['menge'] *= $menge; - $sbaum[] = $v; - $this->getStuecklistenbaum($sbaum, $v['artikel'], $v['menge']); - } - } - } - - public function ArtikelStueckliste() - { - if($this->app->Secure->GetGET('cmd') === 'getbaum') - { - $disabled = false; - $id = (int)$this->app->Secure->GetGET('id'); - $this->getStuecklistenbaum($sbaum, $id); - $maxlvl = 0; - foreach($sbaum as $k => $v) - { - $ind[$v['artikel']] = $k; - - if($v['stuecklistevonartikel'] == $id) - { - $sbaum[$k]['lvl'] = 0; - $name = 'node'.$k; - $$name = new stdClass(); - $$name->id = $v['id']; - $$name->label = ' '.$v['menge'].' x '.$v['nummer'].' '.(strlen($v['name_de']) < 30?$v['name_de']:(mb_substr($v['name_de'],0,27).'...')).''; - $$name->checkbox = false; - $$name->inode = false; - $$name->radio = false; - switch($v['art']) - { - case 'it': - $$name->icon = 'imgit'; - break; - case 'bt': - $$name->icon = 'imgbt'; - break; - default: - $$name->icon = 'imget'; - break; - } - if($disabled)$$name->disabled = true; - /*if($kategorie) - { - foreach($kategorie as $ka) - { - if($ka['kategorie'] == $v['id'])$$name->checked = true; - } - }*/ - $baum[] = $$name; - $sbaum[$k]['node'] = $$name; - }else{ - if(isset($ind[$v['stuecklistevonartikel']])) - { - $name = 'node'.$k; - $$name = new stdClass(); - $$name->id = $v['id']; - $$name->label = ' '.$v['menge'].' x '.$v['nummer'].' '.(strlen($v['name_de']) < 30?$v['name_de']:(mb_substr($v['name_de'],0,27).'...')).''; - $$name->checkbox = false; - $$name->inode = false; - $$name->radio = false; - if($disabled)$$name->disabled = true; - /*if($kategorie) - { - foreach($kategorie as $ka) - { - if($ka['kategorie'] == $v['id'])$$name->checked = true; - } - }*/ - switch($v['art']) - { - case 'it': - $$name->icon = 'imgit'; - break; - case 'bt': - $$name->icon = 'imgbt'; - break; - default: - $$name->icon = 'imget'; - break; - } - $sbaum[$k]['node'] = $$name; - $sbaum[$k]['lvl'] = 1+$sbaum[$ind[$v['stuecklistevonartikel']]]['lvl']; - if($sbaum[$k]['lvl'] > $maxlvl)$maxlvl = $sbaum[$k]['lvl']; - $sbaum[$ind[$v['stuecklistevonartikel']]]['inode'] = true; - //$kategorien[$ind[$v['parent']]]['node']->inode = true; - $sbaum[$ind[$v['stuecklistevonartikel']]]['node']->open = true; - $sbaum[$ind[$v['stuecklistevonartikel']]]['node']->branch[] = $$name; - } - } - } - echo json_encode($baum); - $this->app->ExitXentral(); - } - - - $this->app->Tpl->Add('UEBERSCHRIFT','" (Stückliste)'); - $this->ArtikelMenu(); - $id = $this->app->Secure->GetGET('id'); - - if($this->app->Secure->GetPOST('artikel')!=''){ - $this->app->Tpl->Set('AKTIV_TAB2', 'selected'); - } - else{ - $this->app->Tpl->Set('AKTIV_TAB1', 'selected'); - } - - $this->app->YUI->TableSearch('TAB1','stueckliste', 'show','','',basename(__FILE__), __CLASS__); - - $stueck = $this->app->erp->ArtikelAnzahlLagerStueckliste($id); - - $this->ArtikelStuecklisteImport('TAB3'); - $url = 'index.php?module=artikel&action=stueckliste&cmd=getbaum&id='.$id; - $this->app->Tpl->Set('URL',$url); - $this->app->Tpl->Add('TAB1',"
"); - $this->app->Tpl->Add('TAB1',""); - $this->app->Tpl->Add('TAB1',""); - //$this->app->Tpl->Add('TAB1',""); - $this->app->Tpl->Add('TAB1',""); - //$this->app->Tpl->Add('TAB1',""); - $this->app->Tpl->Add('TAB1',"


"); - - $this->app->Tpl->Add('TAB1',"
Aktuell können $stueck Stück produziert werden (Etiketten für Stückliste drucken)
"); - $this->app->Tpl->Add('TAB1',''); - - if($this->app->erp->IstStuecklistenZirkel($id)) - { - $this->app->Tpl->Add('MESSAGE', '
{|Diese Stückliste enthält Artikel die einen Zirkelbezug verursachen!|}
'); - } - - $addAlternative = ''; - $addAlternative .= "app->Conf->WFconf['defaulttheme']}/images/pluspaket_gruen_kl.png\" border=\"0\">"; - $addAlternative .= ''; - - if($this->app->Secure->GetGET('cmd') === 'getalternative'){ - $id = (int)$this->app->Secure->GetPOST('id'); - - $data = $this->app->DB->SelectRow("SELECT s.id, s.art FROM stueckliste s WHERE s.id = '$id' LIMIT 1"); - - if(empty($data)) { - $data['id'] = 0; - $data['art'] = ''; - } - - echo json_encode($data); - $this->app->ExitXentral(); - - } - elseif($this->app->Secure->GetGET('cmd') === 'getalternativedetails') { - $alternativeId = (int)$this->app->Secure->GetPOST('id'); - - $data = $this->app->DB->SelectArr("SELECT id as alternativeId, alternative_article_id, reason FROM parts_list_alternative WHERE id = '$alternativeId'"); - - if($data){ - $data = reset($data); - $data['article'] = $this->app->DB->Select("SELECT CONCAT(nummer, ' ', name_de) FROM artikel WHERE id = '".$data['alternative_article_id']."' LIMIT 1"); - - - }else{ - $data['id'] = 0; - $data['art'] = ''; - } - - echo json_encode($data); - $this->app->ExitXentral(); - - } - elseif($this->app->Secure->GetGET('cmd') === 'savealternative') { - $id = (int)$this->app->Secure->GetPOST('id'); - $alternativeId = $this->app->Secure->GetPOST('alternativeId'); - $alternativeArticle = trim($this->app->Secure->GetPOST('alternativeArticle')); - $reason = trim($this->app->Secure->GetPOST('reason')); - - $error = ""; - - if($alternativeArticle == ""){ - $error .= "Bitte alternativen Artikel ausfüllen\n"; - }else{ - $alternativeArticleNo = explode(' ', $alternativeArticle); - $alternativeArticleNo = $alternativeArticleNo[0]; - if($alternativeArticleNo != ""){ - $alternativeArticleId = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer = '$alternativeArticleNo' LIMIT 1 "); - if($alternativeArticleId <= 0 || $alternativeArticleId == ''){ - $error .= "Kein gültiger Artikel\n"; - } - }else{ - $error .= "Keine Artikelnummer\n"; - } - } - - if($alternativeArticleId > 0){ - //NOCH PRUEFEN - $alternativeArticleAlreadyExists = $this->app->DB->Select("SELECT id FROM parts_list_alternative WHERE alternative_article_id = '$alternativeArticleId' AND parts_list_id = '$id' AND id != '$alternativeId' LIMIT 1"); - if($alternativeArticleAlreadyExists != '' && $alternativeArticleAlreadyExists > 0){ - $error .= "Alternativer Artikel existiert bereits\n"; - } - } - - if($error == ""){ - if($id){ - if($alternativeId > 0 && $alternativeId != ''){ - $this->app->DB->Update("UPDATE parts_list_alternative SET alternative_article_id = '$alternativeArticleId', reason = '$reason' WHERE id = '$alternativeId'"); - }else{ - $this->app->DB->Insert("INSERT INTO parts_list_alternative (parts_list_id, alternative_article_id, reason) VALUES ('$id', '$alternativeArticleId', '$reason')"); - } - - echo json_encode(array('status'=>1)); - $this->app->ExitXentral(); - }else{ - echo json_encode(array('status'=>0,'statusText'=>'Fehler')); - $this->app->ExitXentral(); - } - }else{ - echo json_encode(array('status'=>0,'statusText'=>$error)); - $this->app->ExitXentral(); - } - - }elseif($this->app->Secure->GetGET('cmd') === 'deletealternative'){ - $id = (int) $this->app->Secure->GetPOST('id'); - if($id) - $this->app->DB->Update("DELETE FROM parts_list_alternative WHERE id = '$id'"); - - echo json_encode(array('status'=>1)); - $this->app->ExitXentral(); - }elseif($this->app->Secure->GetGET('cmd') === 'savetype'){ - $id = (int) $this->app->Secure->GetPOST('id'); - $type = $this->app->Secure->GetPOST('type'); - - if($type != "" && $id > 0){ - $this->app->DB->Update("UPDATE stueckliste SET art = '$type' WHERE id = '$id'"); - echo json_encode(array('status'=>1)); - $this->app->ExitXentral(); - }else{ - echo json_encode(array('status'=>0,'statusText'=>'Fehler')); - $this->app->ExitXentral(); - } - } - - - //$this->app->Tpl->Add('ADDALTERNATIVE', $addAlternative ); - $this->app->YUI->AutoComplete('parts_list_alternative_article', 'artikelnummer'); - - $this->app->YUI->TableSearch('PARTSLISTALTERNATIVES', 'parts_list_alternatives', 'show', '', '', basename(__FILE__), __CLASS__); - - $this->app->Tpl->Parse('PAGE','stuecklisteuebersicht.tpl'); - } - - public function ArtikelStuecklisteEmpty() - { - $id = $this->app->Secure->GetGET('id'); - if($id > 0){ - $this->app->DB->Delete("DELETE FROM stueckliste WHERE stuecklistevonartikel='$id'"); - } - $this->app->Location->execute("index.php?module=artikel&action=stueckliste&id=$id"); - } - - function ArtikelStuecklisteExport() - { - $id = $this->app->Secure->GetGET('id'); - if($id > 0){ - $result = $this->app->DB->SelectArr("SELECT a.nummer, a.name_de, a.hersteller,a.herstellernummer, REPLACE(TRIM(s.menge)+0,'.',',') as menge, s.referenz, s.place, s.layer, s.wert, s.bauform, s.zachse,s.xpos, s.ypos, s.art FROM stueckliste s - LEFT JOIN artikel a ON a.id=s.artikel WHERE s.stuecklistevonartikel='$id'"); - } - header('Content-type: text/csv'); - header('Content-Disposition: attachment; filename=file.csv'); - header('Pragma: no-cache'); - header('Expires: 0'); - - $out = fopen('php://output', 'w'); - $cresult = !empty($result)?count($result):0; - for($i=0;$i<$cresult;$i++) - { - if($i==0) { - foreach($result[$i] as $spalte=>$wert) - echo '"'.$spalte.'";'; - echo "\r\n"; - } - fputcsv($out, $result[$i],';','"'); - } - - fclose($out); - $this->app->ExitXentral(); - } - - public function UpStueckliste() - { - $this->app->YUI->SortListEvent('up','stueckliste','stuecklistevonartikel'); - $this->ArtikelStueckliste(); - } - - public function DownStueckliste() - { - $this->app->YUI->SortListEvent('down','stueckliste','stuecklistevonartikel'); - $this->ArtikelStueckliste(); - } - - - public function DelStueckliste() - { - $id = $this->app->Secure->GetGET('id'); - if($id > 0){ - $sort = $this->app->DB->Select("SELECT sort FROM stueckliste WHERE id='$id' LIMIT 1"); - $sid = $this->app->DB->Select("SELECT stuecklistevonartikel FROM stueckliste WHERE id='$id' LIMIT 1"); - - $this->app->DB->Delete("DELETE FROM stueckliste WHERE id='$id'"); - - $this->app->DB->Delete("UPDATE stueckliste SET sort=sort-1 WHERE stuecklistevonartikel='$sid' AND sort > $sort LIMIT 1"); - } - $this->app->Location->execute('index.php?module=artikel&action=stueckliste&id='.$sid); - } - - - function ArtikelInStueckliste() - { - $this->ArtikelMenu(); - $this->app->Tpl->Set('TABTEXT','In Stückliste von folgenden Artikel vorhanden'); - $this->app->YUI->TableSearch('TAB1','instueckliste', 'show','','',basename(__FILE__), __CLASS__); - $this->app->Tpl->Parse('PAGE','tabview.tpl'); - } - - public function ArtikelStuecklisteEditPopup() - { - $cmd = $this->app->Secure->GetGET('cmd'); - if($cmd === 'edit'){ - - $id = (int)$this->app->Secure->GetPOST('id'); - - $data = $this->app->DB->SelectRow('SELECT s.id, s.artikel, '.$this->app->erp->FormatMenge("s.menge")." as menge, s.art, s.referenz, s.layer, s.place, s.wert, s.bauform, s.zachse, s.xpos, s.ypos FROM stueckliste s WHERE s.id = '$id' LIMIT 1"); - - if($data){ - if($data['artikel'] == 0){ - $data['artikel'] = ''; - }else{ - if($data['artikel'] != ''){ - $artikel = $this->app->DB->SelectRow("SELECT nummer, name_de FROM artikel WHERE id = '".$data['artikel']."' LIMIT 1"); - if(!empty($artikel)){ - $data['artikel'] = $artikel['nummer'].' '.$artikel['name_de']; - } - } - } - - if($data['art'] == ''){ - $data['art'] = 'et'; - } - - /*if($data['alternative'] == 0){ - $data['alternative'] = ''; - }else{ - if($data['alternative'] != ''){ - $alternative = $this->app->DB->SelectRow("SELECT nummer, name_de FROM artikel WHERE id = '".$data['alternative']."' LIMIT 1"); - if(!empty($alternative)){ - $data['alternative'] = $alternative['nummer'].' '.$alternative['name_de']; - } - } - }*/ - - - }else{ - $data['id'] = 0; - $data['artikel'] = ''; - $data['menge'] = ''; - $data['art'] = 'et'; - //$data['alternative'] = ''; - $data['referenz'] = ''; - $data['layer'] = 'Top'; - $data['place'] = 'DP'; - $data['wert'] = ''; - $data['bauform'] = ''; - $data['zachse'] = ''; - $data['xpos'] = ''; - $data['ypos'] = ''; - - } - echo json_encode($data); - $this->app->ExitXentral(); - - } - if($cmd === 'save' || $cmd === 'doppeltsave'){ - - $cmdsave = $cmd; - - $id = (int)$this->app->Secure->GetPOST('eid'); - $startikelid = (int)$this->app->Secure->GetPOST('estartikelid'); - $artikel = trim($this->app->Secure->GetPOST('eartikel')); - $menge = str_replace(',','.',trim($this->app->Secure->GetPOST('emenge'))); - $art = trim($this->app->Secure->GetPOST('eart')); - //$alternative = trim($this->app->Secure->GetPOST('ealternative')); - $referenz = trim($this->app->Secure->GetPOST('ereferenz')); - $layer = trim($this->app->Secure->GetPOST('elayer')); - $place = trim($this->app->Secure->GetPOST('eplace')); - $wert = trim($this->app->Secure->GetPOST('ewert')); - $bauform = trim($this->app->Secure->GetPOST('ebauform')); - $zachse = trim($this->app->Secure->GetPOST('ezachse')); - $xpos = trim($this->app->Secure->GetPOST('expos')); - $ypos = trim($this->app->Secure->GetPOST('eypos')); - - if($cmdsave === 'doppeltsave'){ - $einfuegen = trim($this->app->Secure->GetPOST('eeinfuegen')); - $mengeerhoehen = trim($this->app->Secure->GetPOST('emengeerhoehen')); - - } - - $error = ''; - - if($artikel == ''){ - $error .= "Bitte Artikel ausfüllen\n"; - }else{ - $artikelnr = explode(' ', $artikel); - $artikelnr = $artikelnr[0]; - $artikelid = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer = '$artikelnr' LIMIT 1"); - if($artikelid != ''){ - }else{ - $error .= "Bitte gültigen Artikel ausfüllen\n"; - } - } - - //12.07.19 LG keine menge 0 bei stuecklistenposition - if($menge == '' || $menge <= 0){ - $error .= "Bitte Menge ausfüllen"."\n"; - } - - $errordoppelt = ''; - $doppeltid = ''; - - - $ergebnis = $this->artinsturec($startikelid, $artikelid, $cmdsave, $id); - - $errordoppelt = $ergebnis['errordoppelt']; - $doppeltid = $ergebnis['doppeltid']; - - - /*$alternativeid = 0; - if($alternative != ''){ - $alternativenr = explode(' ', $alternative); - $alternativenr = $alternativenr[0]; - $alternativeid = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer = '$alternativenr' LIMIT 1"); - if($alternativeid != ''){ - }else{ - $error .= "Bitte gültigen Alternativ Artikel ausfüllen\n"; - } - }*/ - - if($this->app->erp->IstStuecklistenZirkel($artikelid, $startikelid)){ - $error .= 'Stückliste enthält Artikel die einen Zirkelbezug verursachen!'; - } - - if($error == "" && $errordoppelt == ''){ - if($cmdsave === 'doppeltsave' && $mengeerhoehen == 1 && $doppeltid > 0){ - $this->app->DB->Update("UPDATE stueckliste SET menge = menge + '$menge' WHERE id = '$doppeltid'"); - echo json_encode(array('status'=>1)); - $this->app->ExitXentral(); - } - if($id){ - $this->app->DB->Update("UPDATE stueckliste SET artikel = '$artikelid', menge = '$menge', art = '$art', referenz = '$referenz', layer = '$layer', place = '$place', wert = '$wert', bauform = '$bauform', zachse = '$zachse', xpos = '$xpos', ypos = '$ypos' WHERE id = '$id'"); - echo json_encode(array('status'=>1)); - $this->app->ExitXentral(); - } - if(($cmdsave === 'doppeltsave' && $einfuegen == 1) || $cmdsave === 'save'){ - $this->app->DB->Insert("INSERT INTO stueckliste (sort, artikel, referenz, place, layer, stuecklistevonartikel, menge, art, firma, wert, bauform, zachse, xpos, ypos) VALUES (0, '$artikelid', '$referenz', '$place', '$layer', '$startikelid', '$menge', '$art', 1, '$wert', '$bauform', '$zachse', '$xpos', '$ypos')"); - echo json_encode(array('status'=>1)); - $this->app->ExitXentral(); - } - echo json_encode(array('status'=>0,'statusText'=>'Fehler')); - $this->app->ExitXentral(); - } - if($error != ''){ - echo json_encode(array('status'=>0,'statusText'=>$error,'doppelt'=>'')); - $this->app->ExitXentral(); - } - if($error == '' && $errordoppelt != ''){ - echo json_encode(array('status' => 0, 'statusText' => '', 'doppelt' => $errordoppelt)); - $this->app->ExitXentral(); - } - } - } - - function artinsturec($hauptartikelid, $unterartikelid, $cmdsave, $id){ - - $stuecklistenunterartikel = $this->app->DB->SelectArr("SELECT id, artikel FROM stueckliste WHERE stuecklistevonartikel = '$hauptartikelid' AND id != '$id'"); - foreach($stuecklistenunterartikel as $key=>$value){ - if($unterartikelid == $value['artikel']){ - $ergebnis['doppeltid'] = $value['id']; - //$doppeltid = $value['id']; - if($cmdsave === 'save'){ - $ergebnis['errordoppelt'] = 'doppelt'; - //$errordoppelt .= "doppelt"; - } - }else{ - $ergebnis = $this->artinsturec($value['artikel'], $unterartikelid, $cmdsave, $id); - } - } - return $ergebnis; - } - - public function ArtikelStatistik() - { - $id = $this->app->Secure->GetGET('id'); - $this->ArtikelMenu(); - - //$this->app->Tpl->Set('TABTEXT',"Statistik"); - //$this->app->Tpl->Set('TAB1',"

Statistik Mengen


"); - - $summe['jahr']='Summe'; - $summe['monat']=''; - - $auftraege = $this->app->DB->SelectArr("SELECT EXTRACT(YEAR FROM a.datum) as jahr, EXTRACT(MONTH FROM a.datum) as monat, TRIM(sum(ap.menge))+0 as menge - FROM auftrag_position ap LEFT JOIN auftrag a ON a.id=ap.auftrag - WHERE ap.artikel='$id' AND (a.status<>'storniert' and a.status <> 'angelegt') GROUP By monat,jahr ORDER by jahr DESC, monat DESC" - ); - $mengeauftraege = 0; - $mengeanfragen = 0; - $mengeangebote = 0; - $mengelieferscheine = 0; - $mengebestellungen = 0; - - if($auftraege) - { - foreach($auftraege as $el) - { - $tab[$el['jahr']][$el['monat']]['auftraege'] = $el['menge']; - $summe['auftrag'] += $el['menge']; - } - } else { - $summe['auftrag']=''; - } - - - $lieferscheine = $this->app->DB->SelectArr( - "SELECT EXTRACT(YEAR FROM l.datum) as jahr, EXTRACT(MONTH FROM l.datum) as monat, TRIM(sum(lp.menge))+0 as menge - from lieferschein l - LEFT JOIN lieferschein_position lp on l.id = lp.lieferschein - WHERE lp.artikel='$id' AND (l.status='versendet') GROUP By monat,jahr ORDER by jahr DESC, monat DESC" - ); - - if($lieferscheine) - { - foreach($lieferscheine as $el) - { - $tab[$el['jahr']][$el['monat']]['lieferscheine'] = $el['menge']; - $summe['lieferscheine'] += $el['menge']; - } - } else { - $summe['lieferschein']=''; - } - - $rechnungen = $this->app->DB->SelectArr( - "SELECT EXTRACT(YEAR FROM r.datum) as jahr, EXTRACT(MONTH FROM r.datum) as monat, TRIM(sum(rp.menge))+0 as menge - from rechnung r - LEFT JOIN rechnung_position rp on r.id = rp.rechnung - WHERE rp.artikel='$id' AND (r.status!='angelegt' AND r.status!='storniert') GROUP By monat,jahr ORDER by jahr DESC, monat DESC" - ); - - if($rechnungen) - { - foreach($rechnungen as $el) - { - $tab[$el['jahr']][$el['monat']]['rechnungen'] = $el['menge']; - $summe['rechnungen'] += $el['menge']; - } - } else { - $summe['rechnungen'] = ''; - } - $angebote = $this->app->DB->SelectArr("SELECT EXTRACT(YEAR FROM a.datum) as jahr, EXTRACT(MONTH FROM a.datum) as monat, TRIM(sum(ap.menge))+0 as menge - FROM angebot_position ap LEFT JOIN angebot a ON a.id=ap.angebot - WHERE ap.artikel='$id' AND (a.status<>'storniert' and a.status <> 'angelegt') GROUP By monat,jahr ORDER by jahr DESC, monat DESC" - ); - - if($angebote) - { - foreach($angebote as $el) - { - $tab[$el['jahr']][$el['monat']]['angebote'] = $el['menge']; - $summe['angebote'] += $el['menge']; - } - } else { - $summe['angebote']=''; - } - - - - $bestellungen = $this->app->DB->SelectArr("SELECT EXTRACT(YEAR FROM a.datum) as jahr, EXTRACT(MONTH FROM a.datum) as monat, TRIM(sum(ap.menge))+0 as menge - FROM bestellung_position ap LEFT JOIN bestellung a ON a.id=ap.bestellung - WHERE ap.artikel='$id' AND (a.status<>'storniert' and a.status <> 'angelegt') GROUP By monat,jahr ORDER by jahr DESC, monat DESC" - ); - - if($bestellungen) - { - foreach($bestellungen as $el) - { - $tab[$el['jahr']][$el['monat']]['bestellungen'] = $el['menge']; - $summe['bestellungen'] += $el['menge']; - } - } else { - $summe['bestellungen']=''; - } - - if($tab) - { - $table = new EasyTable($this->app); - $table->headings = array('Jahr','Monat','Aufträge','Lieferscheine','Rechnungen','Angebote','Bestellungen'); - krsort($tab); - foreach($tab as $jahr => $monate) - { - krsort($monate); - foreach($monate as $monat => $row) - { - - $displayrow[0] = $jahr; - $displayrow[1] = $monat; - $displayrow[2] = isset($row['auftraege'])?$row['auftraege']:''; - $displayrow[6] = isset($row['lieferscheine'])?$row['lieferscheine']:''; - $displayrow[3] = isset($row['rechnungen'])?$row['rechnungen']:''; - $displayrow[4] = isset($row['angebote'])?$row['angebote']:''; - $displayrow[5] = isset($row['bestellungen'])?$row['bestellungen']:''; - $table->AddRow($displayrow); - } - } - $table->AddRow($summe); - //$html .= "
"; - $table->DisplayNew('TAB1','Bestellungen','noAction'); - } else { - $this->app->Tpl->Set('TAB1','
Zu dem Artikel gibt es noch keine Statistiken, da dieser noch nicht verkauft wurde!
'); - } - - $this->app->Tpl->Parse('PAGE','tabview.tpl'); - } - - public function ArtikelBelege() - { - $this->ArtikelMenu(); - $this->app->YUI->TableSearch('TAB1','artikel_belege', 'show','','',basename(__FILE__), __CLASS__); - if(!($this->app->erp->ModulVorhanden('produktion') && $this->app->erp->RechteVorhanden('produktion','list'))) - { - $this->app->Tpl->Set('VORPRODUKTION',''); - } - $belege = array('auftrag','rechnung','angebot','bestellung','lieferschein'); - - foreach($belege as $beleg) - { - if(!$this->app->erp->RechteVorhanden($beleg,'list')) - { - $this->app->Tpl->Set('VOR'.strtoupper($beleg),''); - } - } - $this->app->Tpl->Parse('PAGE','artikel_belege.tpl'); - } - - - public function ArtikelOffeneBestellungen() - { - $this->ArtikelMenu(); - - $this->app->YUI->TableSearch('TAB1', 'artikel_offenebestellungen', 'show','','',basename(__FILE__), __CLASS__); - - $this->app->Tpl->Parse('PAGE','tabview.tpl'); - } - - - public function ArtikelEinlagern() - { - $id = $this->app->Secure->GetGET('id'); - $lid = (int)$this->app->Secure->GetGET('lid'); - $vpeid = $lid?$this->app->DB->Select("SELECT lager_platz_vpe FROM lager_platz_inhalt WHERE id = '$lid' LIMIT 1"):0; - $menge = str_replace(',','.',$this->app->Secure->GetGET('menge')); - $seriennummern = $this->app->DB->Select("SELECT seriennummern FROM artikel WHERE id = '$id' LIMIT 1"); - if($seriennummern != '' && $seriennummern !== 'keine'){ - $menge = (int)$menge; - } - $grund = $this->app->Secure->GetGET('grund'); - - // menge holen in lagerregaplplatz - //$menge_lager = $this->app->DB->Select("SELECT menge FROM lager_platz_inhalt WHERE id='$lid' LIMIT 1"); - $lager_platz = $this->app->DB->Select("SELECT lager_platz FROM lager_platz_inhalt WHERE id='$lid' LIMIT 1"); - $projekt = $this->app->DB->Select("SELECT projekt FROM lager_platz_inhalt WHERE id='$lid' LIMIT 1"); - - //$neuemenge = $menge_lager + $menge; - $name_de = $this->app->DB->Select("SELECT name_de FROM artikel WHERE id='$id' LIMIT 1"); - if(is_numeric($menge) || is_float($menge)) - { - $this->app->erp->LagerEinlagern($id,$menge,$lager_platz,$projekt,'Manuell Bestand angepasst ('.$grund.')','','','',0,$vpeid); - $msg = $this->app->erp->base64_url_encode("
Der Artikel \"$name_de\" wurde $menge mal eingelagert.
"); - } else { - $msg = $this->app->erp->base64_url_encode("
Fehler: Unbekannte oder falsche Menge: $menge bei Artikel \"$name_de\". Die Artikel wurden nicht eingelagert!
"); - } - - - $this->app->Location->execute("index.php?module=artikel&action=lager&id=$id&msg=$msg"); - } - - public function ArtikelUmlagern() - { - $id = $this->app->Secure->GetGET('id'); - $lid = (int)$this->app->Secure->GetGET('lid'); - $vpeid = $this->app->DB->Select("SELECT lager_platz_vpe FROM lager_platz_inhalt WHERE id = '$lid' LIMIT 1"); - $menge = str_replace(',','.',$this->app->Secure->GetGET('menge')); - $grund = $this->app->Secure->GetGET('grund'); - $seriennummern = $this->app->DB->Select("SELECT seriennummern FROM artikel WHERE id = '$id' LIMIT 1"); - if($seriennummern != '' && $seriennummern !== 'keine'){ - $menge = (int)$menge; - } - // menge holen in lagerregaplplatz - $lager_platz = $this->app->DB->Select("SELECT lager_platz FROM lager_platz_inhalt WHERE id='$lid' LIMIT 1"); - //$projekt = $this->app->DB->Select("SELECT projekt FROM lager_platz_inhalt WHERE id='$lid' LIMIT 1"); - $menge_lager = $this->app->erp->ArtikelImLagerPlatz($id,$lager_platz); - - if($menge_lager > 0) - { - if($menge > $menge_lager) - { - $this->app->erp->LagerAuslagernRegal($id, $lager_platz, $menge_lager, 'Manuell Bestand angepasst ('.$grund.')','','','',0,$vpeid); - }else{ - $this->app->erp->LagerAuslagernRegal($id, $lager_platz, $menge, 'Manuell Bestand angepasst ('.$grund.')','','','',0,$vpeid); - } - } - - if($menge_lager < $menge) { - $menge = $menge_lager; - } - - $grund = $this->app->erp->base64_url_encode($grund); - $this->app->Location->execute("index.php?module=lager&action=bucheneinlagern&artikelid=$id&menge=$menge&cmd=umlagern&back=artikel&grund=$grund".($vpeid?"&vpeid=".$vpeid:'')); - } - - - - public function ArtikelAuslagern() - { - $id = $this->app->Secure->GetGET('id'); - $lid = $this->app->Secure->GetGET('lid'); - $vpeid = $lid?$this->app->DB->Select("SELECT lager_platz_vpe FROM lager_platz_inhalt WHERE id = '$lid' LIMIT 1"):0; - $menge = str_replace(',','.',$this->app->Secure->GetGET('menge')); - $seriennummern = $this->app->DB->Select("SELECT seriennummern FROM artikel WHERE id = '$id' LIMIT 1"); - if($seriennummern != '' && $seriennummern !== 'keine'){ - $menge = (int)$menge; - } - $grund = $this->app->Secure->GetGET('grund'); - - // menge holen in lagerregaplplatz - //$menge_lager = $this->app->DB->Select("SELECT menge FROM lager_platz_inhalt WHERE id='$lid' LIMIT 1"); - $lager_platz = $this->app->DB->Select("SELECT lager_platz FROM lager_platz_inhalt WHERE id='$lid' LIMIT 1"); - $projekt = $this->app->DB->Select("SELECT projekt FROM lager_platz_inhalt WHERE id='$lid' LIMIT 1"); - - $name_de = $this->app->DB->Select("SELECT name_de FROM artikel WHERE id='$id' LIMIT 1"); - - if(is_numeric($menge) || is_float($menge)) - { - $result = $this->app->erp->LagerAuslagernRegal($id,$lager_platz,$menge,$projekt,'Manuell Bestand angepasst ('.$grund.')','','',0,$vpeid); - if($result < 0) - { - $msg = $this->app->erp->base64_url_encode("
Der Artikel \"$name_de\" wurde nicht ausgelagert! Er ist nicht so oft im Lager!
"); - } else { - $msg = $this->app->erp->base64_url_encode("
Der Artikel \"$name_de\" wurde $menge mal ausgelagert.
"); - } - } - else { - $msg = $this->app->erp->base64_url_encode("
Fehler: Unbekannte oder falsche Menge: $menge bei Artikel \"$name_de\". Die Artikel wurden nicht ausgelagert!
"); - } - $this->app->Location->execute("index.php?module=artikel&action=lager&id=$id&msg=$msg"); - } - - public function ArtikelAusreservieren() - { - $id = $this->app->Secure->GetGET('id'); - $lid = $this->app->Secure->GetGET('lid'); - $menge = str_replace(',','.',$this->app->Secure->GetGET('menge')); - $seriennummern = $this->app->DB->Select("SELECT seriennummern FROM artikel WHERE id = '$id' LIMIT 1"); - if($seriennummern != '' && $seriennummern !== 'keine'){ - $menge = (int)$menge; - } - // menge holen in lagerregaplplatz - $menge_lager = $this->app->DB->Select("SELECT menge FROM lager_reserviert WHERE id='$lid' LIMIT 1"); - $neuemenge = $menge_lager - $menge; - //echo "menge_lager = $menge_lager; menge raus = $menge; neuemenge = $neuemenge; lid=$lid"; - if($menge_lager <= $menge){ - $this->app->DB->Delete("DELETE FROM lager_reserviert WHERE id='$lid' LIMIT 1"); - } - else{ - $this->app->DB->Update("UPDATE lager_reserviert SET menge='$neuemenge' WHERE id='$lid' LIMIT 1"); - } - if($menge_lager < $menge) { - $menge = $menge_lager; - } - - $name_de = $this->app->DB->Select("SELECT name_de FROM artikel WHERE id='$id' LIMIT 1"); - $msg = $this->app->erp->base64_url_encode("
Die Reservierung \"$name_de\" wurde $menge mal entfernt.
"); - $this->app->Location->execute("index.php?module=artikel&action=lager&id=$id&msg=$msg"); - } - - /** - * @param int $id - * - * @return array - */ - public function isPossibleToDeleteArticle($id) { - $check_tables = array('anfrage','angebot','auftrag','rechnung','gutschrift','lieferschein','produktion','bestellung','retoure'); - $anzahl = 0; - foreach($check_tables as $table) - { - $anzahl = (int)$this->app->DB->Select("SELECT id FROM ".$table."_position WHERE artikel='$id'"); - if($anzahl > 0) { - return ['status'=>false, 'article_in'=>$table]; - } - } - - $anzahl_stueckliste = $this->app->DB->Select("SELECT id FROM stueckliste WHERE artikel='$id'"); - if($anzahl_stueckliste > 0) { - return ['status'=>false, 'article_in'=>'stueckliste']; - } - - $abos = $this->app->DB->Select("SELECT COUNT(id) FROM abrechnungsartikel WHERE artikel='$id'"); - if($abos > 0) { - return ['status'=>false, 'article_in'=>'abrechnungsartikel']; - } - - return ['status'=>true]; - } - - public function deleteArticleById($id, $sperrenbeiLager = false) - { - $name_de = $this->app->DB->Select("SELECT name_de FROM artikel WHERE id='$id' LIMIT 1"); - - $check_tables = array('anfrage','angebot','auftrag','rechnung','gutschrift','lieferschein','produktion','bestellung','retoure'); - $anzahl = 0; - foreach($check_tables as $table) { - $anzahl += (int)$this->app->DB->Select("SELECT COUNT(id) FROM ".$table."_position WHERE artikel='$id'"); - } - - $anzahl_stueckliste = $this->app->DB->Select("SELECT SUM(menge) FROM stueckliste WHERE artikel='$id'"); - - $abos = $this->app->DB->Select("SELECT COUNT(id) FROM abrechnungsartikel WHERE artikel='$id'"); - - $anzahl += (int)$abos; - $sperren = false; - if($sperrenbeiLager){ - if( - $this->app->DB->Select(sprintf('SELECT id FROM lager_platz_inhalt WHERE artikel = %d', $id)) - || $this->app->DB->Select(sprintf('SELECT id FROM lager_mindesthaltbarkeitsdatum WHERE artikel = %d', $id)) - || $this->app->DB->Select(sprintf('SELECT id FROM lager_charge WHERE artikel = %d', $id)) - || $this->app->DB->Select(sprintf('SELECT id FROM lager_seriennummern WHERE artikel = %d', $id)) - || $this->app->DB->Select(sprintf('SELECT id FROM mhd_log WHERE artikel = %d', $id)) - || $this->app->DB->Select(sprintf('SELECT id FROM chargen_log WHERE artikel = %d', $id)) - ) { - $sperren = true; - } - } - - if($anzahl <=0 && $anzahl_stueckliste <=0) { - if($sperren) { - $this->app->DB->Update("UPDATE artikel SET intern_gesperrt = 1 WHERE id='$id'"); - } - else{ - $this->app->DB->Update("UPDATE artikel SET geloescht='1', nummer='DEL' WHERE id='$id'"); - // Lager reseten - $this->app->DB->Delete("DELETE FROM lager_platz_inhalt WHERE artikel='$id'"); - $this->app->DB->Delete("DELETE FROM lager_reserviert WHERE artikel='$id'"); - $this->app->DB->Delete("DELETE FROM lager_charge WHERE artikel='$id'"); - $this->app->DB->Delete("DELETE FROM lager_bewegung WHERE artikel='$id'"); - $this->app->DB->Delete("DELETE FROM lager_mindesthaltbarkeitsdatum WHERE artikel='$id'"); - $this->app->DB->Delete("DELETE FROM einkaufspreise WHERE artikel='$id'"); - $this->app->DB->Delete("DELETE FROM verkaufspreise WHERE artikel='$id'"); - $this->app->DB->Delete("DELETE FROM artikelbaum_artikel WHERE artikel='$id'"); - $this->app->DB->Delete("DELETE FROM artikel_arbeitsanweisung WHERE artikel='$id'"); - $this->app->DB->Delete("DELETE FROM eigenschaften WHERE artikel='$id'"); - $this->app->DB->Delete( - sprintf('DELETE FROM shopexport_artikel WHERE artikel = %d', $id) - ); - $this->app->DB->Delete( - sprintf('DELETE FROM shopexport_artikeluebertragen WHERE artikel = %d', $id) - ); - - //TODO vielleicht besser machen? mit Hinweis oder so - } - $this->app->DB->Update("UPDATE artikel SET variante=0,variante_von=0 WHERE variante_von='$id' AND variante_von > 0"); - - $this->app->erp->RunHook('article_delete', 1, $id); - - return ['success'=>true, 'msg'=>["
Der Artikel \"$name_de\" und der Lagerbestand wurde gelöscht
"]]; - } - $msg = []; - if($anzahl > 0){ - - $msg[] = "
Der Artikel \"$name_de\" ist Belegen eingebucht. Gefunden: $anzahl
"; - } - - if($anzahl_stueckliste > 0){ - $msg[] = "
Der Artikel \"$name_de\" ist in $anzahl_stueckliste Stückliste(n) vorhanden.
"; - } - - return ['success'=>true, 'msg'=>$msg]; - } - - /** - * @param null|int $id - * - * @return bool|void - */ - public function ArtikelDelete($id = null) - { - $intern = false; - if($id !== null) { - $intern = true; - } else{ - $id = $this->app->Secure->GetGET('id'); - } - - $ret = $this->deleteArticleById($id); - if($intern) { - return $ret; - } - $msg = ''; - foreach($ret['msg'] as $m) { - $msg .= $this->app->erp->base64_url_encode($m); - } - $this->app->Location->execute('index.php?module=artikel&action=list&msg='.$msg); - } - - public function ArtikelCreate() - { - $cmd = $this->app->Secure->GetGET('cmd'); - if($cmd === 'getkategorien') - { - $projekttmp = $this->app->Secure->GetPOST('projekt'); - if($projekttmp) - { - $projekttmp = explode(' ', $projekttmp); - $projekttmp = reset($projekttmp); - $projekttmp = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung = '$projekttmp' LIMIT 1"); - } - $_artikelart = $this->app->erp->GetArtikelgruppe($projekttmp); - foreach($_artikelart as $k => $v){ - echo ''; - } - $this->app->ExitXentral(); - } - $this->app->Tpl->Add('JQUERYREADY',' - $(\'#projekt\').on("change",function(){ - $.ajax({ - url: \'index.php?module=artikel&action=create&cmd=getkategorien\', - type: \'POST\', - dataType: \'text\', - data: {projekt:$("#projekt").val() }, - success: function(data) { - $(\'select[name="typ"]\').html(data); - }}); - }); - $(\'#projekt\').on("focusout",function(){ - $.ajax({ - url: \'index.php?module=artikel&action=create&cmd=getkategorien\', - type: \'POST\', - dataType: \'text\', - data: {projekt:$("#projekt").val() }, - success: function(data) { - $(\'select[name="typ"]\').html(data); - }}); - - }); - '); - - $this->app->Tpl->Set('UEBERSCHRIFT','Artikel (Neu anlegen)'); - $this->app->Tpl->Set('ABBRECHEN',""); - // $this->app->Tpl->Set(KURZUEBERSCHRIFT,"Artikel anlegen"); - $this->app->erp->MenuEintrag('index.php?module=artikel&action=list','Zurück zur Übersicht'); - parent::ArtikelCreate(); - } - - function ArtikelListMenu() - { - $this->app->erp->MenuEintrag('index.php?module=artikel&action=list','Übersicht'); - $this->app->erp->MenuEintrag('index.php?module=artikel&action=create','Neuen Artikel anlegen'); - } - - protected function formatArticleList($articleListStr, $delimiter = ';') - { - $articleListStr = explode($delimiter, $articleListStr); - foreach($articleListStr as $key => $value) { - if((int)$value > 0) { - $articleListStr[$key] = (int)$value; - } else { - unset($articleListStr[$key]); - } - } - - return array_unique($articleListStr); - } - - public function ArtikelList() - { - $cmd = $this->app->Secure->GetGET('cmd'); - if($cmd === 'delete') { - $ret = ['success' => 0]; - if($this->app->erp->RechteVorhanden('artikel', 'delete')) { - $articleList = $this->formatArticleList($this->app->Secure->GetPOST('list')); - if(!empty($articleList)) { - foreach($articleList as $article) { - $r = $this->deleteArticleById($article, true); - if($r['success']){ - $ret['success'] = 1; - } else { - $ret['error'] = reset($r['msg']); - } - } - } else { - $ret['error'] = 'Es sind keine Artikel ausgewählt worden'; - } - }else{ - $ret['error'] = 'Sie haben nicht die Rechte Artikel zu löschen'; - } - - echo json_encode($ret); - $this->app->ExitXentral(); - } - - if($cmd === 'getshopuebertragung') - { - $liste = $this->formatArticleList($this->app->Secure->GetPOST('list')); - $ret = array('html'=>'','success'=>0); - if(!empty($liste)) - { - $ret['articlelist'] = implode(';', $liste); - foreach($liste as $v) - { - $this->app->erp->CheckShopTabelle($v); - } - $shops = $this->app->DB->SelectArr('SELECT s.id,s.bezeichnung FROM artikel_onlineshops AS ao - INNER JOIN shopexport s ON ao.shop = s.id AND s.aktiv = 1 AND (s.lagerexport = 1 OR s.artikelexport = 1) - WHERE ao.aktiv = 1 AND ao.artikel IN ('.implode(', ',$liste).') - GROUP BY s.id, s.bezeichnung - '); - if(empty($shops)) - { - $ret['error'] = 'Es sind keine aktiven Shops verknüpft'; - }else{ - $ret['success'] = 1; - foreach($shops as $shop) - { - $this->app->Tpl->Add('LISTE',''.$shop['bezeichnung'].':'); - } - $ret['html'] = $this->app->Tpl->Parse('', 'artikel_listonlineshops.tpl', 1); - } - } - echo json_encode($ret); - $this->app->ExitXentral(); - } - if(($frmshops = $this->app->Secure->GetPOST('shop')) && ($articlelist = $this->app->Secure->GetPOST('articlelist'))){ - $articlelist = explode(';',$articlelist); - $articlelista = []; - foreach($articlelist as $v) - { - if((int)$v > 0) - { - $articlelista[] = (int)$v; - } - } - $allready = (int)$this->app->DB->Select('SELECT count(DISTINCT ao.shop,ao.artikel) - FROM artikel_onlineshops AS ao - INNER JOIN shopexport s ON ao.shop = s.id AND s.aktiv = 1 AND (s.lagerexport = 1 OR s.artikelexport = 1) - INNER JOIN shopexport_artikeluebertragen AS sa ON ao.artikel = sa.artikel AND ao.shop = sa.shop - WHERE ao.aktiv = 1 AND ao.artikel IN ('.implode(', ',$articlelista).') AND s.id IN ('.implode(', ',$frmshops).')'); - - $this->app->DB->Insert('INSERT INTO `shopexport_artikeluebertragen` (shop, artikel) - SELECT ao.shop,ao.artikel FROM artikel_onlineshops AS ao - INNER JOIN shopexport s ON ao.shop = s.id AND s.aktiv = 1 AND (s.lagerexport = 1 OR s.artikelexport = 1) - LEFT JOIN shopexport_artikeluebertragen AS sa ON ao.artikel = sa.artikel AND ao.shop = sa.shop - WHERE ISNULL(sa.id) AND ao.aktiv = 1 AND ao.artikel IN ('.implode(', ',$articlelista).') AND s.id IN ('.implode(', ',$frmshops).')'); - $anz = $this->app->DB->affected_rows(); - $msg = $this->app->erp->base64_url_encode('
Es wurden '.($anz > 0?$anz:'keine') .' Artikel zum Übertragen übergeben'.($allready > 0?' (Es sind bereits '. $allready.' Einträge vorhanden)':'').'.
'); - $this->app->Location->execute('index.php?module=artikel&action=list&msg='.$msg); - } - $this->ArtikelListMenu(); - $this->app->YUI->AutoComplete('projekt', 'projektname', 1); - $this->app->YUI->AutoComplete('lieferantname', 'lieferant', 1); - $this->app->YUI->AutoComplete('hersteller', 'hersteller'); - - $freifeld1bezeichnung = $this->app->erp->Firmendaten('freifeld1'); - if($freifeld1bezeichnung == ''){ - $freifeld1bezeichnung = 'Freifeld 1'; - } - $this->app->Tpl->Set('FREIFELD1BEZEICHNUNG',$freifeld1bezeichnung); - $this->app->Tpl->Parse('TAB1','artikel_table_filter.tpl'); - - $artikel_baum_uebersicht = $this->app->erp->Firmendaten('artikel_baum_uebersicht') && $this->app->DB->Select("SELECT id FROM artikelkategorien LIMIT 1") && $this->app->erp->RechteVorhanden('artikelbaum','baumajax') && $this->app->erp->RechteVorhanden('artikel','profisuche'); - if($artikel_baum_uebersicht) - { - $this->app->Tpl->Set('FMODULE', 'artikel'); - $this->app->Tpl->Set('ARTIKELBAUM',''); + } + $ret['html'] = $this->app->Tpl->Parse('', 'artikel_listonlineshops.tpl', 1); + } + } + echo json_encode($ret); + $this->app->ExitXentral(); + } + if(($frmshops = $this->app->Secure->GetPOST('shop')) && ($articlelist = $this->app->Secure->GetPOST('articlelist'))){ + $articlelist = explode(';',$articlelist); + $articlelista = []; + foreach($articlelist as $v) + { + if((int)$v > 0) + { + $articlelista[] = (int)$v; + } + } + $allready = (int)$this->app->DB->Select('SELECT count(DISTINCT ao.shop,ao.artikel) + FROM artikel_onlineshops AS ao + INNER JOIN shopexport s ON ao.shop = s.id AND s.aktiv = 1 AND (s.lagerexport = 1 OR s.artikelexport = 1) + INNER JOIN shopexport_artikeluebertragen AS sa ON ao.artikel = sa.artikel AND ao.shop = sa.shop + WHERE ao.aktiv = 1 AND ao.artikel IN ('.implode(', ',$articlelista).') AND s.id IN ('.implode(', ',$frmshops).')'); + + $this->app->DB->Insert('INSERT INTO `shopexport_artikeluebertragen` (shop, artikel) + SELECT ao.shop,ao.artikel FROM artikel_onlineshops AS ao + INNER JOIN shopexport s ON ao.shop = s.id AND s.aktiv = 1 AND (s.lagerexport = 1 OR s.artikelexport = 1) + LEFT JOIN shopexport_artikeluebertragen AS sa ON ao.artikel = sa.artikel AND ao.shop = sa.shop + WHERE ISNULL(sa.id) AND ao.aktiv = 1 AND ao.artikel IN ('.implode(', ',$articlelista).') AND s.id IN ('.implode(', ',$frmshops).')'); + $anz = $this->app->DB->affected_rows(); + $msg = $this->app->erp->base64_url_encode('
Es wurden '.($anz > 0?$anz:'keine') .' Artikel zum Übertragen übergeben'.($allready > 0?' (Es sind bereits '. $allready.' Einträge vorhanden)':'').'.
'); + $this->app->Location->execute('index.php?module=artikel&action=list&msg='.$msg); + } + $this->ArtikelListMenu(); + $this->app->YUI->AutoComplete('projekt', 'projektname', 1); + $this->app->YUI->AutoComplete('lieferantname', 'lieferant', 1); + $this->app->YUI->AutoComplete('hersteller', 'hersteller'); + + $freifeld1bezeichnung = $this->app->erp->Firmendaten('freifeld1'); + if($freifeld1bezeichnung == ''){ + $freifeld1bezeichnung = 'Freifeld 1'; + } + $this->app->Tpl->Set('FREIFELD1BEZEICHNUNG',$freifeld1bezeichnung); + $this->app->Tpl->Parse('TAB1','artikel_table_filter.tpl'); + + $artikel_baum_uebersicht = $this->app->erp->Firmendaten('artikel_baum_uebersicht') && $this->app->DB->Select("SELECT id FROM artikelkategorien LIMIT 1") && $this->app->erp->RechteVorhanden('artikelbaum','baumajax') && $this->app->erp->RechteVorhanden('artikel','profisuche'); + if($artikel_baum_uebersicht) + { + $this->app->Tpl->Set('FMODULE', 'artikel'); + $this->app->Tpl->Set('ARTIKELBAUM','
'.$this->app->Tpl->Parse('return', 'artikel_artikelbaum.tpl',true).''); - } - $this->app->User->SetParameter('filterbaum_artikel',''); - - if($this->app->erp->Firmendaten('artikel_bilder_uebersicht')=='1') - { - $this->app->YUI->TableSearch('TAB1','artikeltabellebilder', 'show','','',basename(__FILE__), __CLASS__); - - $this->app->Tpl->Add('JSSCRIPTS'," - - "); - - - } else { - $this->app->YUI->TableSearch('TAB1','artikeltabelle', 'show','','',basename(__FILE__), __CLASS__); - } - - if($this->app->erp->Firmendaten('schnellsuche')){ - $this->app->YUI->EnterSearch('SCHNELLSUCHE', 'artikeltabelle'); - } - $this->app->YUI->MassenbearbeitungsWidget('massenedit','artikel',array('width'=>'90%')); - $this->app->Tpl->Parse('PAGE','artikeluebersicht.tpl'); - } - - function ArtikelgenEigenschaften(&$hw, &$produkte, $found = null, $lvl = 0) - { - if($produkte) - { - if($found === null) - { - foreach($produkte as $kp => $produkt) - { - $found[$produkt['id']] = true; - } - } - } - $keys = array_keys($hw); - $html = ''; - $html .= ''; - - foreach($hw[$keys[$lvl]] as $k => $v) - { - $html .= ''; - } - - $html .= '
'.$k.''; - - if($found !== null) - { - $where = 'and (0 '; - foreach($found as $kf => $el) - { - if($el)$where .= " or artikel = ".$kf; - } - if($where !== 'and (0 ') - { - $where .= ')'; - $artikel = $this->app->DB->SelectArr("select artikel from eigenschaften where hauptkategorie = '".$keys[$lvl]."' and wert = '".$k."' ".$where); - foreach($found as $kf => $el) - { - $foundnew[$kf] = false; - } - if($artikel) - { - - foreach($artikel as $ka => $art) - { - $foundnew[$art['artikel']] = true; - } - } - } - - } - if($lvl == count($hw) -1) - { - if($found !== null) - { - foreach($foundnew as $kf => $gef) - { - if($gef) - { - foreach($produkte as $kp => $produkt) - { - if($kf == $produkt['id']) - { - $html .= $produkt['nummer']; - break; - } - } - } - } - } - - } elseif($lvl < count($hw) -1) { - - $html .= $this->ArtikelgenEigenschaften($hw, $produkte, $foundnew , $lvl +1); - } - $html .= '
'; - return $html; - } - - - public function ArtikelMenu($id='') - { - if(!is_numeric($id)){ - $id = $this->app->Secure->GetGET('id'); - } - - //$action = $this->app->Secure->GetGET('action'); - - if($id) - { - $tmp = $this->app->DB->SelectArr("SELECT * FROM artikel WHERE id='$id' LIMIT 1"); - if($tmp) - { - $nummer = $tmp[0]['nummer']; - $name_de = $tmp[0]['name_de']; - - $this->app->Tpl->SetText('KURZUEBERSCHRIFT2',$this->app->erp->LimitChar($name_de,100)." (Artikel $nummer)"); - $this->app->erp->MenuEintrag("index.php?module=artikel&action=edit&id=$id",'Details'); - - $anzahldateien = $this->app->erp->AnzahlDateien("Artikel",$id); - if($anzahldateien > 0) { - $anzahldateien = ' ('.$anzahldateien.')'; - } else { - $anzahldateien=''; - } - - $this->app->erp->MenuEintrag("index.php?module=artikel&action=dateien&id=$id",'Dateien'.$anzahldateien); - - if($tmp[0]['stueckliste']==1){ - $this->app->erp->MenuEintrag("index.php?module=artikel&action=stueckliste&id=$id", 'Stückliste'); - } - - - if($tmp[0]['rohstoffe']==1){ - $this->app->erp->MenuEintrag("index.php?module=artikel&action=rohstoffe&id=$id", 'Rohstoffe'); - } - - - $rabatt = $this->app->DB->Select("SELECT rabatt FROM artikel WHERE id='$id' LIMIT 1"); - - $this->app->erp->MenuEintrag("index.php?module=artikel&action=artikelfreifelder&id=$id", 'Freifelder'); - - if($this->app->erp->Version()!=='stock' && $rabatt!='1'){ - $this->app->erp->MenuEintrag('index.php?module=artikel&action=eigenschaften&id='.$id, 'Eigenschaften'); - } - - if($rabatt!='1'){ - $this->app->erp->MenuEintrag("index.php?module=artikel&action=einkauf&id=$id",'Einkauf'); - if($this->app->erp->RechteVorhanden('einkaufabgleich','einkaufapi')) - { - $this->app->erp->MenuEintrag("index.php?module=einkaufabgleich&action=einkaufapi&id=$id",'EK API'); - } - } - - if($this->app->erp->Version()!='stock' && $rabatt!='1') - { - $this->app->erp->MenuEintrag("index.php?module=artikel&action=verkauf&id=$id",'Verkauf'); - $this->app->erp->MenuEintrag("index.php?module=artikel&action=statistik&id=$id",'Statistik'); - } - if($tmp[0]['lagerartikel']=='1') - { - $this->app->erp->MenuEintrag("index.php?module=artikel&action=lager&id=$id",'Lager'); - } - - - if($tmp[0]['mindesthaltbarkeitsdatum']=='1' && $tmp[0]['chargenverwaltung']<=0) - { - $this->app->erp->MenuEintrag("index.php?module=artikel&action=mindesthaltbarkeitsdatum&id=$id",'Mindesthalt.'); - } - - if($tmp[0]['mindesthaltbarkeitsdatum']=='1' && $tmp[0]['chargenverwaltung']>0) - { - $this->app->erp->MenuEintrag("index.php?module=artikel&action=mindesthaltbarkeitsdatum&id=$id",'Mindesthalt. + Charge'); - } - - - if($tmp[0]['chargenverwaltung']>0 && $tmp[0]['mindesthaltbarkeitsdatum']!='1') - { - $this->app->erp->MenuEintrag("index.php?module=artikel&action=chargen&id=$id",'Chargen'); - } - - - if($this->app->DB->Select("SELECT COUNT(id) FROM stueckliste WHERE artikel='$id' AND stuecklistevonartikel!='$id'") > 0){ - $this->app->erp->MenuEintrag("index.php?module=artikel&action=instueckliste&id=$id",'In Stückliste'); - } - - - $this->app->erp->MenuEintrag("index.php?module=artikel&action=etiketten&id=$id",'Etikett'); - - $this->app->erp->MenuEintrag("index.php?module=artikel&action=offenebestellungen&id=$id",'Bestellungen'); - - if($this->app->erp->Version()!=='stock') - { - if($this->app->erp->RechteVorhanden('auftrag','list') - || $this->app->erp->RechteVorhanden('rechnung','list') - || $this->app->erp->RechteVorhanden('gutschrift','list') - || $this->app->erp->RechteVorhanden('angebot','list') - || $this->app->erp->RechteVorhanden('lieferschein','list') - || $this->app->erp->RechteVorhanden('produktion','list') - || $this->app->erp->RechteVorhanden('bestellung','list') - ){ - $this->app->erp->MenuEintrag("index.php?module=artikel&action=belege&id=$id",'Belege'); - } - } - - $this->app->erp->MenuEintrag('index.php?module=artikel&action=list','Zurück zur Übersicht'); - $this->app->erp->InsertMenuAfter("index.php?module=artikel&action=baum&id=$id",'Artikelbaum','artikel','eigenschaften'); - } - } - $this->app->erp->MenuEintrag('index.php?module=artikel&action=create','Neuen Artikel anlegen'); - $this->app->erp->RunMenuHook('artikel'); - } - - - public function ArtikelEdit() - { - if(!$this->app->erp->RechteVorhanden('matrixprodukt','artikel')) - { - $this->app->Tpl->Set('VORMATRIX',''); - } - if(!$this->app->erp->ModulVorhanden('tagespreise')) - { - $this->app->Tpl->Set('VORTAGESPREISE',''); - } - $id = $this->app->Secure->GetGET('id'); - $cmd = $this->app->Secure->GetGET('cmd'); - if($id || $cmd === 'getshopbuttons') - { - if($cmd === 'getonlineshop') - { - $sid = (int)$this->app->Secure->GetPOST('sid'); - $arr = null; - if($sid){ - $arr = $this->app->DB->SelectRow("SELECT * FROM artikel_onlineshops WHERE id = '$sid' AND artikel = '$id' LIMIT 1"); - } - - $felder = array( - 'lagerkorrekturwert', - 'pseudolager', - 'autolagerlampe', - 'restmenge', - 'lieferzeitmanuell', - 'pseudopreis', - 'generierenummerbeioption', - 'variante_kopie', - 'unikat', - 'unikatbeikopie', - 'autoabgeleicherlaubt' - ); - if($arr) - { - $arr['sid'] = $arr['id']; - $arr['shop'] = $arr['shop']?($arr['shop'].' '.$this->app->DB->Select("SELECT bezeichnung FROM shopexport WHERE id = '".$arr['shop']."' LIMIT 1")):''; - echo json_encode($arr); - $this->app->ExitXentral(); - } - foreach($felder as $feld){ - $arr[$feld] = ''; - } - $arr['artikel'] = $id; - $arr['aktiv'] = 1; - $arr['ausartikel'] = 1; - echo json_encode($arr); - $this->app->ExitXentral(); - } - if($cmd === 'saveonlineshops') - { - $sid = $this->app->Secure->GetPOST('sid'); - $felder = array( - 'lagerkorrekturwert', - 'pseudolager', - 'autolagerlampe', - 'restmenge', - 'ausartikel', - 'lieferzeitmanuell', - 'pseudopreis', - 'generierenummerbeioption', - 'variante_kopie', - 'unikat', - 'unikatbeikopie', - 'autoabgeleicherlaubt', - 'aktiv' - ); - $shop = explode(' ', $this->app->Secure->GetPOST('shop')); - $shop = (int)reset($shop); - if($this->app->DB->Select("SELECT id FROM artikel_onlineshops WHERE aktiv = 1 AND shop = '$shop' AND id <> '$sid' AND artikel = '$id' LIMIT 1")) - { - echo json_encode(array('status'=>0,'Error'=>'Es existiert bereits ein Eintrag mit diesem Shop')); - $this->app->ExitXentral(); - } - if($sid && !$this->app->DB->Select("SELECT id FROM artikel_onlineshops WHERE artikel = '$id' AND id = '$sid'")) - { - echo json_encode(array('status'=>0,'Error'=>'Der Eintrag wurde nicht gefunden oder passt nicht zum Artikel')); - $this->app->ExitXentral(); - } - if(!$sid) - { - $this->app->DB->Insert("INSERT INTO artikel_onlineshops (artikel,autolagerlampe,ausartikel) VALUES ('$id',0,1)"); - $sid = $this->app->DB->GetInsertID(); - } - if($sid) - { - - $this->app->DB->Update("UPDATE artikel_onlineshops SET shop = '$shop' WHERE id = '$sid' LIMIT 1"); - $inhalt = null; - foreach($felder as $feld) - { - $inhalt[] = " $feld = '".$this->app->Secure->GetPOST($feld)."'"; - } - $this->app->DB->Update('UPDATE artikel_onlineshops SET '.implode(', ', $inhalt)." WHERE id = '$sid' LIMIT 1"); - if(!$this->app->DB->error()) - { - $shop = $this->app->DB->Select("SELECT shop FROM artikel_onlineshops WHERE artikel = '$id' AND id = '$sid' LIMIT 1"); - if($this->app->DB->Select("SELECT id FROM artikel_onlineshops WHERE artikel = '$id' AND shop = '$shop' AND aktiv = 1 LIMIT 1")){ - $shop = null; - } - if($shop) - { - $this->app->DB->Update("UPDATE artikel SET shop = 0 WHERE id = '$id' AND shop = '$shop' LIMIT 1"); - $this->app->DB->Update("UPDATE artikel SET shop2 = 0 WHERE id = '$id' AND shop2 = '$shop' LIMIT 1"); - $this->app->DB->Update("UPDATE artikel SET shop3 = 0 WHERE id = '$id' AND shop3 = '$shop' LIMIT 1"); - } - } - echo json_encode(array('status'=>1)); - $this->app->ExitXentral(); - } - echo json_encode(array('status'=>0,'Error'=>'Der Eintrag konnte nicht angelegt werden')); - $this->app->ExitXentral(); - } - if($cmd === 'deleteonlineshop') - { - $sid = $this->app->Secure->GetPOST("sid"); - $shop = $this->app->DB->Select("SELECT shop FROM artikel_onlineshops WHERE artikel = '$id' AND id = '$sid' LIMIT 1"); - if($shop) - { - $this->app->DB->Update("UPDATE artikel SET shop = 0 WHERE id = '$id' AND shop = '$shop' LIMIT 1"); - $this->app->DB->Update("UPDATE artikel SET shop2 = 0 WHERE id = '$id' AND shop2 = '$shop' LIMIT 1"); - $this->app->DB->Update("UPDATE artikel SET shop3 = 0 WHERE id = '$id' AND shop3 = '$shop' LIMIT 1"); - } - $this->app->DB->Delete("DELETE FROM artikel_onlineshops WHERE artikel = '$id' AND id = '$sid' LIMIT 1"); - echo json_encode(array('status'=>1)); - $this->app->ExitXentral(); - } - if($cmd === 'getshopbuttons') - { - $ids = explode(',',$this->app->Secure->GetPOST('ids')); - $firstid = (int)$this->app->Secure->GetPOST('firstid'); - $html = ''; - if(!empty($ids)) - { - $wherea = []; - foreach($ids as $sid) - { - $sid = (int)$sid; - if($sid > 0) - { - $wherea[] = $sid; - } - } - if(!empty($wherea)) - { - $shops = $this->app->DB->SelectArr("SELECT ao.* FROM artikel_onlineshops ao INNER JOIN shopexport s ON ao.shop = s.id - WHERE ao.id IN (".implode(',', $wherea).") AND s.shoptyp = 'intern' AND s.modulename != '' ORDER BY s.shoptyp"); - if(!empty($shops)) - { - foreach($shops as $shop) - { - $buttontarget = 'SHOPTABELLE'; - $nr = 'ONLINESHOPBUTTON'.$shop['id']; - $this->app->erp->RunHook('artikel_shopbutton',4, $nr, $shop['shop'], $shop['artikel'],$buttontarget); - } - if(!empty($this->app->Tpl->VARARRAY['SHOPTABELLE'])){ - $html = $this->app->Tpl->VARARRAY['SHOPTABELLE']; - } - } - } - } - $return = array('html'=>$html); - if($firstid > 0 && $artikel = $this->app->DB->Select("SELECT artikel FROM artikel_onlineshops WHERE id = ".$firstid)) - { - $shops = $this->app->DB->SelectArr("SELECT ao.id, s.shoptyp, s.modulename FROM artikel_onlineshops AS ao INNER JOIN shopexport AS s ON ao.shop = s.id WHERE ao.artikel = $artikel ORDER BY s.modulename"); - if(!empty($shops)) - { - $canimport = 0; - $canexport = 0; - foreach ($shops as $shop) - { - if(empty($shop['modulename']) || $shop['shoptyp'] !== 'intern') - { - $return['canimport'][] = $shop['id']; - $canimport++; - $return['canexport'][] = $shop['id']; - $canexport++; - }else{ - $obj = $this->app->erp->LoadModul($shop['modulename']); - if(empty($obj) || !method_exists($obj,'importerCanImport') || $obj->importerCanImport()) - { - $return['canimport'][] = $shop['id']; - $canimport++; - } - if(empty($obj) || !method_exists($obj,'importerCanExport') || $obj->importerCanExport()) - { - $return['canexport'][] = $shop['id']; - $canexport++; - } - } - } - if($canimport === 0 || $canimport === count($shops)) - { - $return['hideallimportplaceholder']; - } - if($canexport === 0 || $canexport === count($shops)) - { - $return['hideallexportplaceholder']; - } - } - } - - echo json_encode($return); - $this->app->ExitXentral(); - } - $this->app->YUI->Autocomplete('onlinshopspopup_shop','shopnameid'); - //$this->app->YUI->HideFormular('onlinshopspopup_ausartikel', array('unchecked'=>'dummy','checked'=>'onlineshopeditdis')); - - - $this->app->Tpl->Set('NEUERONLINESHOPBUTTON',''); - $this->app->erp->CheckShopTabelle($id); - } - - $this->app->YUI->TableSearch('SHOPTABELLE','artikel_onlineshops', 'show','','',basename(__FILE__), __CLASS__); - - $shop1export =$this->app->Secure->GetPOST('shop1export'); - $shop2export =$this->app->Secure->GetPOST('shop2export'); - $shop3export =$this->app->Secure->GetPOST('shop3export'); - - if($this->app->erp->Version()==='stock') - { - $this->app->DB->Update("UPDATE artikel SET lagerartikel=1 WHERE id='$id' LIMIT 1"); - } - // 18.05 heute entfernt - //$this->app->DB->Update("UPDATE artikel SET herkunftsland='".$this->app->erp->Firmendaten('land')."' WHERE id='$id' AND herkunftsland='' LIMIT 1"); - - $nummer = $this->app->DB->Select("SELECT nummer FROM artikel WHERE id = '$id' LIMIT 1"); - - if(strpos($nummer, ' ') !== false) - { - $nummer = $this->app->DB->real_escape_string(str_replace(' ','', trim($nummer))); - if($nummer=='') { - $artikelart = $this->app->DB->Select("SELECT projekt,typ FROM artikel WHERE id='$id'"); - $nummer=$this->app->erp->GetNextArtikelnummer($artikelart[0]['typ'],$this->app->User->GetFirma(),$artikelart[0]['projekt']); - } - $this->app->DB->Update("UPDATE artikel SET nummer = '$nummer' WHERE id = '$id' LIMIT 1"); - } - - $this->app->erp->CheckArtikel($id); - - if($shop1export!=''){ - $this->app->User->SetParameter('artikel_shopexport_shop1', 1); - } - - if($shop2export!=''){ - $this->app->User->SetParameter('artikel_shopexport_shop2', 1); - } - - if($shop3export!=''){ - $this->app->User->SetParameter('artikel_shopexport_shop3', 1); - } - - $shop1import =$this->app->Secure->GetPOST('shop1import'); - if($shop1import!='') - { - $this->app->Location->execute("index.php?module=artikel&action=shopimport&id=$id&shop=1"); - return; - } - $shop2import =$this->app->Secure->GetPOST('shop2import'); - if($shop2import!='') - { - $this->app->Location->execute("index.php?module=artikel&action=shopimport&id=$id&shop=2"); - return; - } - $shop3import =$this->app->Secure->GetPOST('shop3import'); - if($shop3import!='') - { - $this->app->Location->execute("index.php?module=artikel&action=shopimport&id=$id&shop=3"); - return; - } - - $POST = $this->app->Secure->POST; - - if($POST && is_array($POST)) - { - foreach($POST as $key => $value) - { - if(!empty($value)){ - if(strpos($key, 'shopimport') === 0){ - $shopid = (int)substr($key, 11); - if($shopid){ - $this->app->Location->execute("index.php?module=artikel&action=shopimport&id=$id&artikelshopid=" . $shopid); - return; - } - } - if(strpos($key, 'shopexport') === 0){ - $shopid = (int)substr($key, 11); - if($shopid){ - $this->app->User->SetParameter('artikel_shopexport_shop', $shopid); - } - } - } - } - } - - if($this->app->erp->Version()==='stock') - { - $this->app->Tpl->Set('DISABLEOPENTEXTE',''); - $this->app->Tpl->Set('DISABLEOPENSHOP',''); - $this->app->Tpl->Set('DISABLEOPENSTOCK',''); - } - - if($this->app->erp->DisableModul('artikel',$id)) - { - $this->ArtikelMenu(); - return; - } // Einzelposten im gleichen LagerRegal zusammenführen - - - $this->app->YUI->SaveReally(); - $this->app->erp->LagerArtikelZusammenfassen($id); - - $nummer = $this->app->Secure->GetGET('nummer'); - if(!is_numeric($id) && $nummer!='') - { - $id = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer='".$nummer."' LIMIT 1"); - $this->app->Location->execute("index.php?module=artikel&action=edit&id=$id"); - return; - } - - $mark = $this->app->Secure->GetPOST('bookmark'); - if($mark!='' && !in_array($id, $_SESSION['bookmarked'])) { - $_SESSION['bookmarked'][] = $id; - } - - $articleArr = $this->app->DB->SelectRow( - sprintf( - "SELECT juststueckliste, lagerartikel,name_de, kurztext_de,anabregs_text - FROM artikel - WHERE id=%d - LIMIT 1", - $id - ) - ); - $juststueckliste = $articleArr['juststueckliste']; - $lagerartikel = $articleArr['lagerartikel']; - - $shops = $this->app->DB->SelectArr("SELECT * FROM artikel_onlineshops WHERE artikel = '$id' ORDER BY aktiv DESC, shop"); - if($shops) - { - $exshops = null; - foreach($shops as $shop) - { - if($shop['shop'] && !isset($exshops[$shop['shop']])) - { - $buttontarget = 'SHOPTABELLE'; - $nr = 'ONLINESHOPBUTTON'.$shop['id']; - $this->app->erp->RunHook('artikel_shopbutton',4, $nr, $shop['shop'], $id,$buttontarget); - } - } - - $this->app->Tpl->Parse('SHOPTABELLE','artikel_onlineshopbuttons.tpl'); - - } - $this->app->Tpl->Add('SHOPTABELLE',''); - - //$shop= $this->app->DB->Select("SELECT shop FROM artikel WHERE id='$id' LIMIT 1"); - - $this->app->Tpl->Set('ABBRECHEN',""); - - if($lagerartikel=='1' && $juststueckliste=='1') - { - $this->app->Tpl->Add('MESSAGE','
Dieser Artikel ist als Lagerartikel und Explodiert im Auftrag markiert. Bitte nur eine Option wählen!
'); - } - - $artikel_de_anzeige = $articleArr['name_de']; - $kurztext_de_anzeige = $articleArr['kurztext_de']; - $artikelbeschreibung_de_anzeige = $articleArr['anabregs_text']; - - $this->app->YUI->CkEditor('artikelbeschreibung_de_anzeige','belege'); - - $this->app->Tpl->Set('ARTIKEL_DE_ANZEIGE',''); - $this->app->Tpl->Set('KURZTEXT_DE_ANZEIGE',''); - $this->app->Tpl->Set('ARTIKELBESCHREIBUNG_DE_ANZEIGE',''); - - parent::ArtikelEdit(); - - /* anzeige formular */ - $this->ArtikelMenu(); - $artikel = $this->app->DB->Select("SELECT CONCAT(name_de,' (',nummer,')') FROM artikel WHERE id='$id' LIMIT 1"); - $this->app->Tpl->Set('UEBERSCHRIFT','Artikel: '.$artikel); - - $shop1export = $this->app->User->GetParameter('artikel_shopexport_shop1'); - $shop2export = $this->app->User->GetParameter('artikel_shopexport_shop2'); - $shop3export = $this->app->User->GetParameter('artikel_shopexport_shop3'); - $artikel_shopexport_shop = (int)$this->app->User->GetParameter('artikel_shopexport_shop'); - if($artikel_shopexport_shop > 0) - { - $this->app->User->SetParameter('artikel_shopexport_shop',''); - $this->app->Location->execute("index.php?module=artikel&action=shopexport&id=$id&artikelshopid=".$artikel_shopexport_shop); - return; - } - - if($shop1export!='') - { - $this->app->User->SetParameter('artikel_shopexport_shop1',''); - $this->app->Location->execute("index.php?module=artikel&action=shopexport&id=$id&shop=1"); - return; - } - - if($shop2export!='') - { - $this->app->User->SetParameter('artikel_shopexport_shop2',''); - $this->app->Location->execute("index.php?module=artikel&action=shopexport&id=$id&shop=2"); - return; - } - - if($shop3export!='') - { - $this->app->User->SetParameter('artikel_shopexport_shop3',''); - $this->app->Location->execute("index.php?module=artikel&action=shopexport&id=$id&shop=3"); - return; - } - - $this->app->erp->MessageHandlerStandardForm(); - - /* sperrmeldung */ - $intern_gesperrt = $this->app->DB->Select("SELECT intern_gesperrt FROM artikel WHERE id='$id' LIMIT 1"); - if($intern_gesperrt) - { - if($this->app->erp->CheckSamePage()) - { - $intern_gesperrtgrund = $this->app->DB->Select("SELECT intern_gesperrtgrund FROM artikel WHERE id='$id' LIMIT 1"); - if($intern_gesperrtgrund=='') { - $intern_gesperrtgrund='Artikel gesperrt'; - } - $this->app->erp->SeitenSperrAuswahl('Wichtiger Hinweis',$intern_gesperrtgrund); - } - } - - $this->app->YUI->AutoComplete('herkunftsland', 'laender', 1); - - } - - public function ArtikelEtiketten() - { - $this->app->Tpl->Add('UEBERSCHRIFT',' (Etiketten)'); - $id = (int)$this->app->Secure->GetGET('id'); - $external= $this->app->Secure->GetGET('external'); - $menge = $this->app->Secure->GetPOST('menge'); - $mhd = $this->app->Secure->GetPOST('mhd'); - $charge = $this->app->Secure->GetPOST('charge'); - $speichern = $this->app->Secure->GetPOST('speichern'); - $seriennummer = $this->app->Secure->GetPOST('seriennummer'); - $etikettenauswahl = $this->app->Secure->GetPOST('etikettenauswahl'); - $etikettendrucker = $this->app->Secure->GetPOST('etikettendrucker'); - $this->ArtikelMenu(); - - if($speichern!='') - { - $formetikettautodruck = $this->app->Secure->GetPOST('etikettautodruck'); - if($formetikettautodruck) { - $this->app->DB->Update("UPDATE artikel SET etikettautodruck='1' WHERE id='$id' LIMIT 1"); - } - else { - $this->app->DB->Update("UPDATE artikel SET etikettautodruck='0' WHERE id='$id' LIMIT 1"); - } - $formautodrucketikett = $this->app->Secure->GetPOST('autodrucketikett'); - $this->app->DB->Update("UPDATE artikel SET autodrucketikett='$formautodrucketikett' WHERE id='$id' LIMIT 1"); - } - - $etikettautodruck = $this->app->DB->Select("SELECT etikettautodruck FROM artikel WHERE id='$id' LIMIT 1"); - if($etikettautodruck) { - $this->app->Tpl->Set('ETIKETTAUTODRUCK','checked'); - } - - $autodrucketikett = $this->app->DB->Select("SELECT autodrucketikett FROM artikel WHERE id='$id' LIMIT 1"); - $etiketten_tmp = $this->app->DB->SelectArr("SELECT * FROM etiketten WHERE verwendenals='artikel_klein' ORDER by name"); - $autodrucketiketttpl = ''; - $cetiketten_tmp = $etiketten_tmp?count($etiketten_tmp):0; - for($i=0;$i<$cetiketten_tmp;$i++) - { - if($etiketten_tmp[$i]['id']==$autodrucketikett) { - $mark='selected'; - } else { - $mark=''; - } - $autodrucketiketttpl .=""; - } - $this->app->Tpl->Set('AUTODRUCKETIKETT',$autodrucketiketttpl); - - $etiketten = $this->app->erp->GetSelectEtiketten('artikel_klein',$etikettenauswahl); - if($etiketten=='') { - $etiketten=''; - } - - $drucker = $this->app->erp->GetSelectEtikettenDrucker($etikettendrucker); - - $this->app->Tpl->Set('FORMULAR',"
- - - "); - $mhdartikel = $this->app->DB->Select("SELECT mindesthaltbarkeitsdatum FROM artikel WHERE id = '$id' LIMIT 1"); - if($mhdartikel) - { - $this->app->Tpl->Add('FORMULAR',""); - $this->app->YUI->DatePicker('mhd'); - $this->app->YUI->AutoComplete('mhd', 'lagermindesthaltbarkeitsdatum',0,"&artikel=$id"); - } - $chargenverwaltung = $this->app->DB->Select("SELECT chargenverwaltung FROM artikel WHERE id = '$id' LIMIT 1"); - if($chargenverwaltung) - { - $this->app->Tpl->Add('FORMULAR',""); - $this->app->YUI->AutoComplete('charge', 'lagercharge',0,"&artikel=$id"); - } - - $seriennummern = $this->app->DB->Select("SELECT seriennummern FROM artikel WHERE id = '$id' LIMIT 1"); - if($seriennummern==='eigene' || $seriennummern==='vomprodukt' || $seriennummern==='vomprodukteinlagern') - { - $this->app->Tpl->Add('FORMULAR',""); - $this->app->YUI->AutoComplete('seriennummer', 'lagerseriennummern',0,"&artikel=$id"); - } - $this->app->Tpl->Add('FORMULAR',"
Menge: 
Etikett:
Drucker:
Mindeshaltbarkeitsdatum:
Charge:
Seriennummer:


"); - - $standardbild = $this->app->erp->GetEtikettenbild($id,true); - - if($standardbild==''){ - $standardbild = $this->app->DB->Select("SELECT datei FROM datei_stichwoerter WHERE subjekt='Shopbild' AND objekt='Artikel' AND parameter='$id' LIMIT 1"); - } - - if($standardbild > 0){ - //$this->app->Tpl->Add('BILD', ""); - $this->app->Tpl->Set('BILD', - 'Artikelbild' - ); - } - - if($external=='1') - { - $menge = $this->app->Secure->GetGET('menge'); - } - - - if($menge!='') - { - //$nummer = $this->app->DB->Select("SELECT nummer FROM artikel WHERE id='$id' LIMIT 1"); - //$projekt = $this->app->DB->Select("SELECT projekt FROM artikel WHERE id='$id' LIMIT 1"); - $name_de = $this->app->erp->UmlauteEntfernen($this->app->DB->Select("SELECT name_de FROM artikel WHERE id='$id' LIMIT 1")); - //$name_de_base64 = $this->app->erp->base64_url_encode($name_de); - - if(!is_numeric($etikettenauswahl)) { - $etikettenauswahl = 'artikel_klein'; - } - - $variablen = null; - if($mhd){ - $variablen['mhd'] = $this->app->String->Convert($mhd,'%3.%2.%1','%1-%2-%3'); - $variablen['mhd2'] = $mhd; - $variablen['mhd3'] = date('ymd',strtotime($mhd)); - } - if($charge){ - $variablen['charge'] = $charge; - } - if($seriennummer){ - $variablen['seriennummer'] = $seriennummer; - } - $this->app->erp->EtikettenDrucker($etikettenauswahl,$menge,'artikel',$id,$variablen,'',$etikettendrucker); - } - - if($external=='1') - { - $this->app->Location->execute($_SERVER['HTTP_REFERER']); - } - - $cmd = $this->app->Secure->GetGET('cmd'); - - if($cmd === 'get'){ - $id = (int)$this->app->Secure->GetPOST('id'); - - $data = $this->app->DB->SelectRow("SELECT al.id, e.id as label, al.type, al.amount, d.id as printer - FROM article_label al - LEFT JOIN etiketten e ON al.label_id = e.id - LEFT JOIN drucker d ON al.printer_id = d.id - WHERE al.id = '$id' LIMIT 1"); - - if(empty($data)) { - $data['id'] = 0; - $data['labelname'] = ''; - $data['type'] = ''; - $data['amount'] = ''; - $data['printername'] = 1; - - } - echo json_encode($data); - $this->app->ExitXentral(); - } - elseif($cmd === 'save'){ - $id = (int)$this->app->Secure->GetPOST('id'); - $articleId = $this->app->Secure->GetPOST('article'); - $label = trim($this->app->Secure->GetPOST('label')); - $type = trim($this->app->Secure->GetPOST('type')); - $amount = trim($this->app->Secure->GetPOST('amount')); - $printer = $this->app->Secure->GetPOST('printer'); - - $error = ""; - - if($label == ""){ - $error .= "Bitte ein Etikett auswählen\n"; - }else{ - $labelId = $this->app->DB->Select("SELECT id FROM etiketten WHERE id = '$label' LIMIT 1"); - if($labelId <= 0 || $labelId == ''){ - $error .= "Bitte gültiges Etikett auswählen\n"; - } - } - - if($type == ""){ - $error .= "Bitte Art auswählen"."\n"; - } - - if($amount == "" || $amount <= 0){ - $error .= "Mindestmenge ist 1"."\n"; - }else{ - $amount = (int)$amount; - } - - //PFLICHTFELD? - if($printer == ""){ - $error .= "Bitte einen Drucker auswählen"."\n"; - }else{ - $printerId = $this->app->DB->Select("SELECT id FROM drucker WHERE id = '$printer' LIMIT 1"); - if($printerId <= 0 || $printerId == ''){ - $error .= "Bitte gültigen Drucker auswählen\n"; - } - } - - $labelAlreadyExists = $this->app->DB->Select("SELECT id - FROM article_label - WHERE label_id = '$labelId' AND type = '$type' AND article_id = '$articleId' - AND id != '$id' LIMIT 1"); - if($labelAlreadyExists != '' && $labelAlreadyExists > 0){ - $error .= "Dieses Label gibt es bereits für diesen Artikel mit dieser Art"; - } - - if($error == ""){ - if($id){ - $this->app->DB->Update("UPDATE article_label SET label_id = '$labelId', type = '$type', amount = '$amount', printer_id = '$printerId' WHERE id = '$id'"); - - echo json_encode(array('status'=>1)); - $this->app->ExitXentral(); - }else{ - $this->app->DB->Insert("INSERT INTO article_label (article_id, label_id, type, amount, printer_id) - VALUES ('$articleId', '$labelId', '$type', '$amount', '$printerId')"); - - echo json_encode(array('status'=>1)); - $this->app->ExitXentral(); - } - }else{ - echo json_encode(array('status'=>0,'statusText'=>$error)); - $this->app->ExitXentral(); - } - }elseif($cmd == 'delete'){ - $id = (int) $this->app->Secure->GetPOST('id'); - if($id) - $this->app->DB->Update("DELETE FROM article_label WHERE id = '$id'"); - - echo json_encode(array('status'=>1)); - $this->app->ExitXentral(); - } - - $articleLabels = $this->app->erp->GetSelectEtiketten('artikel_klein',$etikettenauswahl); - $this->app->Tpl->Set("ARTICLELABELS", $articleLabels); - - $articleLabelPrinter = $this->app->DB->SelectArr("SELECT id, name FROM drucker WHERE aktiv='1' AND art='2'"); - $articleLabelPrinterSelection = ""; - for($i=0;$i".$articleLabelPrinter[$i]['name'].""; - } - $this->app->Tpl->Set("ARTICLELABELPRINTER", $articleLabelPrinterSelection); - - $this->app->YUI->TableSearch('TAB1','artikel_etiketten', "show","","",basename(__FILE__), __CLASS__); - - - $this->app->Tpl->Parse('PAGE','artikel_etiketten.tpl'); - } - - public function ArtikelOnlineShop() - { - $id = $this->app->Secure->GetGET('id'); - - // neue warengruppe hinzugefuegt - $artikelgruppe = $this->app->Secure->GetPOST('artikelgruppe'); - $ok= $this->app->Secure->GetPOST('ok'); - if($artikelgruppe!='' && $ok=='') { - $this->app->DB->Insert("INSERT INTO artikel_artikelgruppe (id,artikel,artikelgruppe) VALUES ('','$id','$artikelgruppe')"); - } - //warengruppe geloescht - $sid= $this->app->Secure->GetGET('sid'); - $cmd= $this->app->Secure->GetGET('cmd'); - if($sid!='' && $cmd==='del') { - $this->app->DB->DELETE("DELETE FROM artikel_artikelgruppe WHERE id='$sid' LIMIT 1"); - } - if($sid!='' && $cmd==='image') { - $this->app->DB->DELETE("UPDATE artikel SET standardbild='$sid' WHERE id='$id' LIMIT 1"); - } - - $name = $this->app->DB->Select("SELECT name_de FROM artikel WHERE id='$id' LIMIT 1"); - $nummer = $this->app->DB->Select("SELECT nummer FROM artikel WHERE id='$id' LIMIT 1"); - $this->app->Tpl->Set('SUBSUBHEADING',"Online-Shop Attribute: $name ($nummer)"); - $this->app->Tpl->Set('AKTIV_TAB1','selected'); - - //Warengruppen - $tmp = new EasyTable($this->app); - $tmp->Query("SELECT a.bezeichnung, aa.id FROM artikel_artikelgruppe aa LEFT JOIN artikelgruppen a ON a.id=aa.artikelgruppe WHERE artikel='$id'"); - $tmp->DisplayNew('WARENGRUPPEN',""); - - $shop = $this->app->DB->Select("SELECT shop FROM artikel WHERE id='$id' LIMIT 1"); - - $arr = $this->app->DB->SelectArr("SELECT bezeichnung,id FROM artikelgruppen WHERE shop='$shop'"); - $html = ''; - if(!empty($arr)){ - foreach ($arr as $key => $value) { - $html .= ""; - } - } - - $this->app->Tpl->Add('WARENGRUPPEN',"
"); - $this->app->Tpl->Add('WARENGRUPPEN',"
"); - - // standard bild - $standardbild = $this->app->DB->Select("SELECT standardbild FROM artikel WHERE id='$id'"); - $tmp = new EasyTable($this->app); - $tmp->Query("SELECT d.titel, d.id FROM datei d LEFT JOIN datei_stichwoerter s ON d.id=s.datei - LEFT JOIN datei_version v ON v.datei=d.id - WHERE s.objekt='Artikel' AND s.parameter='$id' AND s.subjekt='Shopbild' AND d.geloescht=0"); - - $tmp->DisplayNew('HAUPTBILD', - ""); - - $standardbild_name = $this->app->DB->Select("SELECT titel FROM datei WHERE id='$standardbild'"); - $this->app->Tpl->Add('HAUPTBILD',"
Standardbild: $standardbild_name"); - - $this->app->Tpl->Parse('PAGE','onlineshop.tpl'); - - $this->app->BuildNavigation=false; - } - - function ArtikelNewList() - { - $this->app->Tpl->Parse('PAGE','datatable.tpl'); - } - - function ArtikelStuecklisteUpload() - { - - $this->app->Tpl->Set('TAB1',' - -
Datei:
'); - $this->app->Tpl->Parse('PAGE','tabview.tpl'); - } - - function ArtikelStuecklisteImport($parsetarget='') - { - $id = $this->app->Secure->GetGET('id'); - //$this->app->BuildNavigation=false; - - $vorlage = $this->app->Secure->GetPOST('vorlage'); - if($vorlage==='altium'){ - $result = $this->StuecklisteImport( - array('menge'=>'Menge','nummer'=>'Artikelnummer','wert'=>'Wert','bauform'=>'Package','referenz'=>'Referenz'), - array('menge'=>2,'nummer'=>13,'bauform'=>5,'wert'=>6,'referenz'=>3), - ';',$parsetarget); - - } - else if($vorlage==='solidedgest2'){ - $result = $this->StuecklisteImport( - array('nummer'=>'Artikelnummer','menge'=>'Menge'), - array('nummer'=>2,'menge'=>5), - ';',$parsetarget); - } - else if($vorlage==='minimal'){ - $result = $this->StuecklisteImport( - array('nummer'=>'Artikelnummer','menge'=>'Menge'), - array('nummer'=>1,'menge'=>2), - ';',$parsetarget); - } - else { - $result = $this->StuecklisteImport( - array('nummer'=>'Artikelnummer','menge'=>'Menge'), - array('nummer'=>1,'menge'=>2), - ';',$parsetarget); - } - - if(is_array($result)) - { - $fehlerhaftes_bauteil = ''; - $this->app->DB->Delete("DELETE FROM stueckliste WHERE stuecklistevonartikel='$id'"); - foreach($result as $key=>$value) - { - $value['menge'] = str_replace(',','.',$value['menge']); - $artikelid = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer='".$value['nummer']."' AND nummer!='' LIMIT 1"); - $maxsort = $this->app->DB->Select("SELECT MAX(sort) FROM stueckliste WHERE stuecklistevonartikel='".$id."'") + 1; - if($artikelid > 0) - { - if(!$this->app->erp->IstStuecklistenZirkel($artikelid, $id)) - { - $this->app->DB->Insert("INSERT INTO stueckliste - (id,sort,artikel,menge,wert,bauform,referenz,stuecklistevonartikel,firma) VALUE ('','$maxsort','$artikelid','".$value['menge']."', - '".$value['wert']."','".$value['bauform']."','".$value['referenz']."','$id','".$this->app->User->GetFirma()."')"); - }else{ - $fehlerhaftes_bauteil .= 'Stückliste enthält Artikel die einen Zirkelbezug verursachen!
'; - } - }else { - if($value['nummer']!=''){ - $fehlerhaftes_bauteil .= 'Unbekannte Artikelnummer: ' . $value['nummer'] . ' (Menge ' . $value['menge'] . ' Stück)
'; - } - } - } - if($fehlerhaftes_bauteil!='') - { - $this->app->Tpl->Set($parsetarget,"
$fehlerhaftes_bauteil
"); - } - } - } - - function StuecklisteImport($fields, $preselected="",$startdelimititer=";",$parsetarget) - { - - $stueckliste_csv = $this->app->erp->GetTMP().'stueckliste'.$this->app->User->GetID(); - - $quote = htmlentities($this->app->Secure->GetPOST('quote')); - $delimiter = htmlentities($this->app->Secure->GetPOST('delimiter')); - $cancel = $this->app->Secure->GetPOST('cancel'); - - if($cancel!='') - { - unlink($stueckliste_csv); - $this->app->User->SetParameter("artikel_stueckliste_importfilename",""); - } - - $import = $this->app->Secure->GetPOST('import'); - if($import!='') - { - $findcols = ''; - $row_post = $this->app->Secure->GetPOST('row'); - $cols = $this->app->Secure->GetPOST('cols'); - - $importerror=0; - if($row_post=='') - { - $findcols .= '
Zeile wählen
'; - $importerror++; - } - $ccols = !empty($cols)?count($cols):0; - $colcounter = 0; - for($i=0;$i<$ccols;$i++) - { - if($cols[$i]!='') $colcounter++; - } - if($colcounterapp->User->GetParameter("artikel_stueckliste_delimiter"))) !== FALSE) { - $rowcounter++; - $num = count($data); - - if($rowcounter > $row_post){ - for ($c=0; $c < $num; $c++) { - // wenn schluessel vorhanden feld uebernehmen - if($cols[$c]!='') - $singlerow[$cols[$c]]=$data[$c]; - } - $result[] = $singlerow; - $singlerow=array(); - } - } - } - fclose($handle); - unlink($stueckliste_csv); - $this->app->User->SetParameter("artikel_stueckliste_importfilename",""); - // $this->app->Tpl->Set('PAGE',$findcols); - } - } - - - //$_SESSION['quote']=$quote; - $this->app->User->SetParameter("artikel_stueckliste_quote",$quote); - //$_SESSION['delimiter']=$delimiter; - $this->app->User->SetParameter("artikel_stueckliste_delimiter",$delimiter); - - - if (move_uploaded_file($_FILES['userfile']['tmp_name'], $stueckliste_csv)) { - //$_SESSION['importfilename'] = $_FILES['userfile']['name']; - $this->app->User->SetParameter("artikel_stueckliste_importfilename",$_FILES['userfile']['name']); - } - - $row = 1; - if (($handle = fopen($stueckliste_csv, "r")) !== FALSE) { - $findcols .= " -
-

Datei: ".$this->app->User->GetParameter("artikel_stueckliste_importfilename")."

(Die Anzeige ist limitiert auf max 10 Zeilen)
- -
- - - -
- Trennzeichen:  app->User->GetParameter("artikel_stueckliste_delimiter"))."\" name=\"delimiter\">  - - -
- "; - - - $findcols .= " -
- "; - while (($data = fgetcsv($handle, 1000, $this->app->User->GetParameter("artikel_stueckliste_delimiter"))) !== FALSE) { - $num = count($data); - - if($row==1) - { - $findcols .= ""; - $findcols .= ""; - for ($c=0; $c < $num; $c++) { - $findcols .= "'; - } - $findcols .= ''; - } - if($row_post==$row) $checked="checked"; else $checked=""; - $findcols .= ""; - $row++; - for ($c=0; $c < $num; $c++) { - $findcols .= ""; - } - $findcols .= ''; - if($row > 10) { - break; - } - } - fclose($handle); - $findcols .= "
 Spalten auswählen
 Erste Zeile mit Daten 
 auswählen
-    
- ".$data[$c] . " 
-
-

- Bitte wählen Sie aus: -
  • Die erste Zeile die Daten Ihrer Stueckliste enthält
  • -
  • Die Spalten: Menge und Artikelnummer
  • -
- - -
- - "; - } else { - $findcols .= " -
-
- Datei:  - - - Vorlage: - - Trennzeichen:    - - -
-
"; - - - - } - $this->app->Tpl->Set($parsetarget,$findcols); - if(!empty($result)) { - return $result; - } - } - - function getArtikelThumbnailDateiVersion($id) - { - $datei = $this->app->DB->SelectArr(' - SELECT - datei_version.id - FROM - datei_stichwoerter - INNER JOIN datei_version ON datei_version.datei = datei_stichwoerter.datei - WHERE - datei_stichwoerter.objekt LIKE "artikel" - AND - datei_stichwoerter.parameter = "' . $id . '" - AND - (datei_stichwoerter.subjekt like "Shopbild" OR datei_stichwoerter.subjekt like "Druckbild" OR datei_stichwoerter.subjekt like "Bild" OR datei_stichwoerter.subjekt like "Gruppenbild") - ORDER BY datei_stichwoerter.subjekt like "Shopbild" DESC,subjekt like "Druckbild" DESC, datei_stichwoerter.subjekt like "Bild" DESC,datei_stichwoerter.sort, datei_version.version DESC - '); - if(empty($datei)){ - return; - } - foreach($datei as $v) - { - $pfad = $this->app->erp->GetDateiPfadVersion($v['id']); - if(file_exists($pfad)){ - return $v['id']; - } - } - } - - /** - * @param int $articleId - * @param int $projectId - * @param int $size - * - * @return string - */ - public function getThumbnailCacheFilename($articleId, $projectId, $size = 100) - { - return $this->app->getTmpFolder().$this->app->Conf->WFdbname - .'/'.implode('/',str_split($articleId)).'/'.$articleId.'_'.$projectId.'_'.$size.'_'.$size; - } - - public function ArtikelThumbnailCache() - { - $ajaxthumbnail = !empty($this->app->Secure->POST['ajaxthumbnail'])?(int)$this->app->Secure->POST['ajaxthumbnail']:''; - if(!empty($ajaxthumbnail)) { - return; - } - - $direct = !empty($this->app->Secure->GET['direkt'])?(int)$this->app->Secure->GET['direkt']:''; - if(!empty($direct)) { - return; - } - - $vorschau = !empty($this->app->Secure->GET['bildvorschau'])?$this->app->Secure->GET['bildvorschau']:''; - $dark = !empty($this->app->Secure->GET['dark']); - $projectid = !empty($this->app->Secure->GET['projectid'])?(int)$this->app->Secure->GET['projectid']:0; - $noPicture = $vorschau === 'KEINBILD' || $vorschau == ''; - $projectOk = null; - if(!$noPicture) { - $projectOk = $this->app->User->projectOk($projectid); - if($projectOk === null) { - return; - } - } - if($noPicture || !$projectOk){ - if($dark) { - $str = file_get_contents(dirname(__DIR__) . '/themes/new/images/keinbild_dunkel.png'); - }else{ - $str = file_get_contents(dirname(__DIR__) . '/themes/new/images/keinbild_hell.png'); - } - header('Content-type: image/png'); - if($vorschau === 'KEINBILD') { - header('Cache-Control: public, max-age=14400, s-maxage=14400'); - header('Pragma: '); - header('Expires: '.date('D, d M Y H:i:s e'), time()+14400); - header('Content-type: image/jpg'); - } - echo $str; - exit; //kein ExitXentral, damit die Datenbank nicht geladen wird (mit isset) - } - $id = !empty($this->app->Secure->GET['id'])?(int)$this->app->Secure->GET['id']:0; - if($id <= 0) { - return; - } - - $file = $this->getThumbnailCacheFilename($id, $projectid); - if(!file_exists($file) || filesize($file) === 0) { - return; - } - - $type = mime_content_type($file); - switch($type) { - case 'image/png': - case 'png': - header('Content-type: image/png'); - break; - case 'image/gif': - case 'gif': - header('Content-type: image/gif'); - break; - default: - header('Content-type: image/jpg'); - break; - } - header('Cache-Control: public, max-age=14400, s-maxage=14400'); - header('Pragma: '); - header('Expires: '.date('D, d M Y H:i:s e'), time()+14400); - header('Content-type: image/jpg'); - echo file_get_contents($file); - exit; - } - - /** - * @param int $fileId - * - * @return array|null - */ - public function getPreviewFileFromFileId($fileId) - { - if($fileId <= 0) { - return null; - } - - return $this->app->DB->SelectRow( - sprintf( - 'SELECT dv.* - FROM `datei_version` AS `dv` - WHERE dv.datei = %d - ORDER BY dv.version DESC - LIMIT 1', - $fileId - ) - ); - } - - /** - * @param int $articleId - * - * @return array|null - */ - public function getPreviewFileFromArticleId($articleId) - { - if($articleId <= 0) { - return null; - } - return $this->app->DB->SelectRow( - sprintf( - "SELECT dv.* - FROM `datei_stichwoerter` AS `ds` - INNER JOIN `datei_version` AS `dv` ON dv.datei = ds.datei - INNER JOIN `datei` AS `d` ON dv.datei = d.id AND IFNULL(d.geloescht, 0) = 0 - WHERE ds.objekt LIKE 'artikel' AND ds.parameter = '%d' - AND - ( - ds.subjekt like 'Shopbild' - OR ds.subjekt like 'Druckbild' - OR ds.subjekt like 'Bild' - OR ds.subjekt like 'Gruppenbild' - ) - ORDER BY ds.subjekt like 'Shopbild' DESC, - ds.subjekt like 'Druckbild' DESC, - ds.subjekt like 'Bild' DESC, - ds.sort, - dv.version DESC - LIMIT 1", - $articleId - ) - ); - } - - /** - * @param int $id - * @param int $fileId - * @param int $size - * - * @return array - */ - public function ajaxGenerateThumbnail($id, $fileid = 0, $size = 100) - { - $res = ['result' => 0]; - if($id <= 0) { - return $res; - } - - $bildvorschau = $this->app->DB->SelectRow( - sprintf( - 'SELECT `id`, `bildvorschau`, `projekt` FROM `artikel` WHERE `id` = %d LIMIT 1', - $id - ) - ); - - if(empty($bildvorschau)) { - return $res; - } - - if(!$size){ - $size = 100; - } - $cachefolder = $this->app->Conf->WFuserdata . '/dms/' . $this->app->Conf->WFdbname . '/cache'; - $datei = 0; - if($fileid > 0){ - $datei = $this->getPreviewFileFromFileId($fileid); - } - - if(empty($datei)) { - $datei = $this->getPreviewFileFromArticleId($id); - } - if(!empty($datei)) { - $contentfile = $this->app->erp->GetDMSPath($datei['id'].'_'.$size.'_'.$size, $cachefolder, true); - $created = false; - if(file_exists($contentfile.'/'.$datei['id'].'_'.$size.'_'.$size) - && filesize($contentfile.'/'.$datei['id'].'_'.$size.'_'.$size) === 0 - && @unlink($contentfile.'/'.$datei['id'].'_'.$size.'_'.$size)) { - $contentfile = $this->app->erp->GetDMSPath($datei['id'].'_'.$size.'_'.$size, $cachefolder, true); - } - if(!file_exists($contentfile.'/'.$datei['id'].'_'.$size.'_'.$size)) { - if(!class_exists('image')){ - include dirname(__DIR__).'/lib/class.image.php'; - } - $img = new image($this->app); - $img->scaledPicByFileId($datei['id'], $size, $size); - $created = true; - } - if(!file_exists($contentfile.'/'.$datei['id'].'_'.$size.'_'.$size)) { - return $res; - } - - if($bildvorschau['bildvorschau'] != $datei['id'].'_'.$size.'_'.$size) { - $this->app->DB->Update( - sprintf( - "UPDATE `artikel` - SET `bildvorschau` = '%d_%d_%d' - WHERE `id` = %d - LIMIT 1", - $datei['id'], $size, $size, $id - ) - ); - $res['reload'] = 1; - } - $res['status'] = 1; - $res['bildvorschau'] = $datei['id'].'_'.$size.'_'.$size; - $cachefile = $this->getThumbnailCacheFilename($id, (int)$bildvorschau['projekt']); - $cachedir = dirname($cachefile); - if(!is_dir($cachedir) && !mkdir($cachedir, 0777,true) && !is_dir($cachedir)) { - return $res; - } - if(empty($bildvorschau['bildvorschau']) || $created || !is_file($cachefile) || filesize($cachefile) === 0) { - @copy($contentfile.'/'.$datei['id'].'_'.$size.'_'.$size, $cachefile); - } - - return $res; - } - - $cachefile = $this->getThumbnailCacheFilename($id, (int)$bildvorschau['projekt']); - $cachedir = dirname($cachefile); - if(!is_dir($cachedir) && !mkdir($cachedir, 0777, true) && !is_dir($cachedir)) { - - } - elseif(!is_file($cachefile) || filesize($cachefile) > 0) { - @file_put_contents($cachefile, ''); - } - - if($bildvorschau['bildvorschau'] !== 'KEINBILD') { - $this->app->DB->Update( - sprintf( - "UPDATE `artikel` SET `bildvorschau` = 'KEINBILD' WHERE `id` = %d LIMIT 1", - $id - ) - ); - $res['reload'] = 1; - } - $res['status'] = 1; - $res['bildvorschau'] = 'KEINBILD'; - - return $res; - } - - public function ArtikelThumbnail() { - - $id = $this->app->Secure->GetGET('id'); - $fileid = $this->app->Secure->GetGET('fileid'); - $size = $this->app->Secure->GetGET('size'); - if(!$size){ - $size = 100; - } - - $cachefolder = $this->app->Conf->WFuserdata . '/dms/' . $this->app->Conf->WFdbname . '/cache'; - if($this->app->Secure->GetPOST('ajaxthumbnail')) { - $res = $this->ajaxGenerateThumbnail($id, $fileid, $size); - echo json_encode($res); - $this->app->ExitXentral(); - } - - $direkt = $this->app->Secure->GetGET('direkt'); - - if($direkt && $id) { - $bildvorschau = $this->app->DB->SelectRow( - sprintf( - 'SELECT `id`, `bildvorschau`, `projekt` FROM `artikel` WHERE `id` = %d LIMIT 1', - $id - ) - ); - $datei = 0; - if($fileid > 0){ - $datei = $this->getPreviewFileFromFileId($fileid); - } - - if(empty($datei)){ - $datei = $this->getPreviewFileFromArticleId($id); - } - if($datei) { - $contentfile = $this->app->erp->GetDMSPath($datei['id'].'_'.$size.'_'.$size, $cachefolder, true) - .'/'.$datei['id'].'_'.$size.'_'.$size; - if(is_file($contentfile) && filesize($contentfile) === 0 && @unlink($contentfile)) { - $contentfileOld = $contentfile; - $contentfile = $this->app->erp->GetDMSPath($datei['id'].'_'.$size.'_'.$size, $cachefolder, true) - .'/'.$datei['id'].'_'.$size.'_'.$size; - if($contentfile !== $contentfileOld && is_file($contentfile) && filesize($contentfile) === 0) { - @unlink($contentfile); - } - } - if(!file_exists($contentfile)) { - $img = new image($this->app); - $img->scaledPicByFileId($datei['id'], $size, $size); - $contentfile = $this->app->erp->GetDMSPath( - $datei['id'].'_'.$size.'_'.$size, $cachefolder, true - ) - .'/'.$datei['id'].'_'.$size.'_'.$size; - $cachefile = $this->getThumbnailCacheFilename($id, (int)$bildvorschau['projekt']); - if(is_file($contentfile) && is_file($cachefile) && filesize($cachefile) === 0) { - @copy($contentfile, $cachefile); - } - } - - if(file_exists($contentfile)) { - $str = file_get_contents($contentfile); - header('Cache-Control: public, max-age=14400, s-maxage=14400'); - header('Pragma: '); - header('Expires: '.date('D, d M Y H:i:s e'), time()+14400); - header('Content-type: image/jpg'); - echo $str; - $this->app->ExitXentral(); - } - } - } - - $vorschau = $this->app->Secure->GetGET('bildvorschau'); - - if(!$vorschau) { - if ($this->app->erp->Firmendaten('iconset_dunkel')) { - $str = file_get_contents(dirname(__DIR__) . '/themes/new/images/keinbild_dunkel.png'); - } else { - $str = file_get_contents(dirname(__DIR__) . '/themes/new/images/keinbild_hell.png'); - } - header('Content-type: image/png'); - echo $str; - $this->app->ExitXentral(); - } - if($vorschau === 'KEINBILD') { - if ($this->app->erp->Firmendaten('iconset_dunkel')) { - $str = file_get_contents(dirname(__DIR__) . '/themes/new/images/keinbild_dunkel.png'); - } else { - $str = file_get_contents(dirname(__DIR__) . '/themes/new/images/keinbild_hell.png'); - } - header('Content-type: image/png'); - echo $str; - $this->app->ExitXentral(); - } - if(file_exists($cachefolder)) { - $vorschaua = explode('_',$vorschau); - if(count($vorschaua) == 3) { - $cachefolderPrev = $cachefolder; - $cachefolder = $this->app->erp->GetDMSPath($vorschau, $cachefolderPrev, true); - if(is_numeric($vorschaua[0]) && is_numeric($vorschaua[1]) && is_numeric($vorschaua[2]) - && file_exists($cachefolder.'/'.$vorschau) && filesize($cachefolder.'/'.$vorschau) === 0) { - if(@unlink($cachefolder.'/'.$vorschau)) { - $cachefolder = $this->app->erp->GetDMSPath($vorschau, $cachefolderPrev, true); - } - } - - if(is_numeric($vorschaua[0]) && is_numeric($vorschaua[1]) && is_numeric($vorschaua[2]) && file_exists($cachefolder.'/'.$vorschau)) { - if($this->app->DB->Select( - sprintf( - "SELECT ds.id - FROM datei_stichwoerter AS ds - INNER JOIN datei_version AS dv ON dv.datei = ds.datei - WHERE ds.objekt LIKE 'artikel' AND ds.parameter = '%d' AND dv.id = %d LIMIT 1", - $id, $vorschaua[0] - ) - ) - ) { - $bildvorschau = $this->app->DB->SelectRow( - "SELECT id, bildvorschau, projekt FROM artikel WHERE id = '$id' LIMIT 1" - ); - $cachefile = $this->getThumbnailCacheFilename($id, (int)$bildvorschau['projekt']); - $cachedir = dirname($cachefile); - if(!is_dir($cachedir) && !mkdir($cachedir, 0777,true) && !is_dir($cachedir)) { - - } elseif(!is_file($cachefile) || filesize($cachefile) === 0) { - @copy($cachefolder.'/'.$vorschau, $cachefile); - } - - $str = file_get_contents($cachefolder.'/'.$vorschau); - header('Content-type: image/jpg'); - echo $str; - $this->app->ExitXentral(); - } - } - } - if($id) { - $this->app->DB->Update(sprintf("UPDATE artikel SET bildvorschau = '' WHERE id = %d", $id)); - } - } - - if ($this->app->erp->Firmendaten('iconset_dunkel')) { - $str = file_get_contents(dirname(__DIR__) . '/themes/new/images/keinbild_dunkel.png'); - } - else { - $str = file_get_contents(dirname(__DIR__) . '/themes/new/images/keinbild_hell.png'); - } - header('Content-type: image/png'); - echo $str; - $this->app->ExitXentral(); - } - - - function ArtikelSchnellanlegen() - { - $submit_barcode = $this->app->Secure->GetPOST('submit_barcode'); - $submit_anlegen = $this->app->Secure->GetPOST('submit_anlegen'); - $barcode = $this->app->Secure->GetPOST('barcode'); - - $this->app->erp->MenuEintrag('index.php?module=artikel&action=list','zurück zur Übersicht'); - $this->app->erp->MenuEintrag('index.php?module=artikel&action=schnellanlegen','Schnell anlegen'); - - if($submit_barcode!='' && $barcode!='') - { - $checkbarcode = $this->app->DB->Select("SELECT id FROM artikel WHERE ean='$barcode' OR herstellernummer='$barcode' OR nummer='$barcode' LIMIT 1"); - - if($checkbarcode > 0) - { - $name_nummer = $this->app->DB->Select("SELECT CONCAT(nummer,' ',name_de) FROM artikel WHERE id='$checkbarcode' LIMIT 1"); - $msg = $this->app->erp->base64_url_encode("
Es gibt bereits einen Artikel mit dieser Nummer ($name_nummer).
"); - $this->app->Location->execute("index.php?module=artikel&action=schnellanlegen&msg=$msg"); - return; - } - - // Default einträge laden wenn vorhanden - $mhd = $this->app->User->GetParameter('artikel_schnellanlegen_mhd'); - $chargen = $this->app->User->GetParameter('artikel_schnellanlegen_chargen'); - - if($mhd=='1') { - $this->app->Tpl->Set('MHD','checked'); - } - if($chargen=='1') { - $this->app->Tpl->Set('CHARGEN','checked'); - } - - $this->app->Tpl->Parse('PAGE','artikel_schnellanlegen_formular.tpl'); - - } - else if ($submit_anlegen=='') { - $this->app->Tpl->Parse('PAGE','artikel_schnellanlegen.tpl'); - } - } - - // Zum Uberladen in Custom - function ArtikelEigenschaftenSuche() - { - } - - - public function ArtikelBaumDetail() - { - $id = (int)$this->app->Secure->GetGET('id'); - $todo = $this->app->Secure->GetGET('todo'); - $artikel = (int)$this->app->Secure->GetGET('artikel'); - if($todo === 'check') - { - if($artikel && $id) - { - $check = $this->app->DB->Select("SELECT id FROM artikelbaum_artikel WHERE artikel = '$artikel' AND kategorie = '$id' LIMIT 1"); - if(!$check) - { - $this->app->DB->Insert("INSERT INTO artikelbaum_artikel (artikel, kategorie) VALUES ('$artikel','$id')"); - } - } - $this->app->ExitXentral(); - } - if($todo === 'uncheck'){ - $this->app->DB->Delete("DELETE FROM artikelbaum_artikel WHERE artikel = '$artikel' AND kategorie = '$id'"); - $this->app->ExitXentral(); - } - echo "

hallo $id

"; - $this->app->ExitXentral(); - } - - function getKategorien(&$kategorien, $parent) - { - $res = $this->app->DB->SelectArr("SELECT id, bezeichnung, parent FROM artikelkategorien WHERE geloescht != 1 AND parent = '$parent' ORDER by bezeichnung"); - if($res) - { - foreach($res as $k => $v) - { - $kategorien[] = $v; - $this->getKategorien($kategorien, $v['id']); - } - } - } - - public function ArtikelBaumAjax() - { - $disabled = true; - if($this->app->Secure->GetGET('enabled') == 1){ - $disabled = false; - } - $id = (int)$this->app->Secure->GetGET('artikel'); - $kategorien = null; - $this->getKategorien($kategorien, 0); - $kategorie = $this->app->DB->SelectArr("SELECT kategorie FROM artikelbaum_artikel WHERE artikel = '$id'"); - - if(!empty($kategorien)) - { - $maxlvl = 0; - foreach($kategorien as $k => $v) - { - $ind[$v['id']] = $k; - - if($v['parent'] == 0) - { - $kategorien[$k]['lvl'] = 0; - $name = 'node'.$k; - $$name = new stdClass(); - $$name->id = $v['id']; - $$name->label = $v['bezeichnung']; - $$name->checkbox = true; - $$name->inode = false; - $$name->radio = false; - if($disabled)$$name->disabled = true; - if($kategorie) - { - foreach($kategorie as $ka) - { - if($ka['kategorie'] == $v['id'])$$name->checked = true; - } - } - $baum[] = $$name; - $kategorien[$k]['node'] = $$name; - }else{ - if(isset($ind[$v['parent']])) - { - $name = 'node'.$k; - $$name = new stdClass(); - $$name->id = $v['id']; - $$name->label = $v['bezeichnung']; - $$name->checkbox = true; - $$name->inode = false; - $$name->radio = false; - if($disabled)$$name->disabled = true; - if($kategorie) - { - foreach($kategorie as $ka) - { - if($ka['kategorie'] == $v['id'])$$name->checked = true; - } - } - $kategorien[$k]['node'] = $$name; - $kategorien[$k]['lvl'] = 1+$kategorien[$ind[$v['parent']]]['lvl']; - if($kategorien[$k]['lvl'] > $maxlvl)$maxlvl = $kategorien[$k]['lvl']; - $kategorien[$ind[$v['parent']]]['inode'] = true; - //$kategorien[$ind[$v['parent']]]['node']->inode = true; - $kategorien[$ind[$v['parent']]]['node']->open = true; - $kategorien[$ind[$v['parent']]]['node']->branch[] = $$name; - } - } - } - echo json_encode($baum); - $this->app->erp->ExitWawi(); - } - echo '[]'; - $this->app->erp->ExitWawi(); - } - - - public function ArtikelBaum() - { - $extraurl = ''; - if($this->app->Secure->GetPOST('enabled')) - { - $extraurl = '&enabled=1'; - $this->app->Tpl->Set('BUTTONBEARBEITEN','
'); - }elseif($this->app->erp->RechteVorhanden('artikel','baumedit')){ - $this->app->Tpl->Set('BUTTONBEARBEITEN', '
'); - } - $id = $this->app->Secure->GetGET('id'); - $url = 'index.php?module=artikel&action=baumajax'.$extraurl.'&artikel='.$id; - $this->ArtikelMenu(); - - - $this->app->Tpl->Set('URL',$url); - $this->app->Tpl->Parse('PAGE','artikel_baum.tpl'); - } - - public function ArtikelBaumEdit() - { - //Rechte - $this->app->ExitXentral(); - } - - - public function ArtikelFreifelder(){ - $this->ArtikelMenu(); - - $artikelid = $this->app->Secure->GetGET('id'); - - if($this->app->Secure->GetPOST('nachladen') != ''){ - $sqla = null; - for ($i = 1; $i <= 40; $i++) { - $sqla[] = ' SELECT '.$i.' as nummer '; - } - $sql = "INSERT INTO artikel_freifelder (artikel, sprache, nummer, wert) - SELECT '$artikelid', s.iso, n.nummer,'' - FROM (SELECT iso FROM sprachen WHERE aktiv = 1 AND iso <> 'DE' AND iso <> '' GROUP BY iso) s - INNER JOIN (".implode(' UNION ', $sqla).") n - LEFT JOIN artikel_freifelder af ON s.iso = af.sprache AND af.artikel = '$artikelid' AND n.nummer = af.nummer - WHERE isnull(af.id) - "; - $this->app->DB->Insert($sql); - } - - $this->app->YUI->TableSearch('TAB1','artikelfreifelder_list', 'show','','',basename(__FILE__), __CLASS__); - $this->app->Tpl->Parse('PAGE','artikelfreifelder_list.tpl'); - } - - public function ArtikelFreifelderEdit(){ - - if($this->app->Secure->GetGET('cmd')==='get'){ - $id = (int)$this->app->Secure->GetPOST('id'); - $sprache = $this->app->Secure->GetPOST('sprache'); - $nummer = (int)$this->app->Secure->GetPOST('nummer'); - - for($i=1; $i<=40; $i++){ - $freifelderfirmendaten[] = '(SELECT '.$i.' AS nummer, if(f.freifeld'.$i." != '', f.freifeld".$i.", CONCAT('Freifeld ',".$i.')) AS bezeichnung FROM firmendaten f)'; - $freifeldtypen[] = '(SELECT '.$i.' AS nummer, wert AS inputtyp FROM firmendaten_werte WHERE name = CONCAT("freifeld",'.$i.',"typ"))'; - } - - if($sprache != '' && $sprache !== 'DE'){ - $data = $this->app->DB->SelectRow('SELECT af.id, af.nummer as nummer, af.wert, af.sprache, f.bezeichnung, ft.inputtyp - FROM artikel_freifelder af - LEFT JOIN ('.implode(' UNION ALL ', $freifelderfirmendaten).") f ON af.nummer = f.nummer - LEFT JOIN (".implode(' UNION ALL ', $freifeldtypen).") ft ON af.nummer = ft.nummer - WHERE af.id = '$id' - LIMIT 1"); - - }elseif($sprache === 'DE'){ - $data = $this->app->DB->SelectRow('SELECT a.id, '.$nummer.' as nummer, a.freifeld'.$nummer." AS wert, 'DE' AS sprache, - (SELECT IF(f.freifeld".$nummer." != '', f.freifeld".$nummer.", CONCAT('Freifeld ',".$nummer.")) FROM firmendaten f) AS bezeichnung, - (SELECT wert AS inputtyp FROM firmendaten_werte ft WHERE name = CONCAT('freifeld',".$nummer.",'typ')) AS inputtyp - FROM artikel a - WHERE a.id = '$id' - LIMIT 1"); - - }else{ - $data = null; - } - - if(empty($data)){ - $data['id'] = 0; - $data['wert'] = ''; - $data['sprache'] = ''; - $data['bezeichnung'] = ''; - $data['nummer'] = ''; - $data['inputtyp'] = 'einzeilig'; - - } - echo json_encode($data); - $this->app->ExitXentral(); - } - - $this->app->Tpl->Parse('PAGE', 'artikelfreifelder_list.tpl'); - } - - public function ArtikelFreifelderSave(){ - - $id = (int)$this->app->Secure->GetPOST('id'); - $inhalt = trim($this->app->Secure->GetPOST('freifeldinhalttext')); - $sprache = $this->app->Secure->GetPOST('sprache'); - $nummer = (int)$this->app->Secure->GetPOST('nummer'); - $error = ''; - if($error == ''){ - if($id){ - if($sprache === 'DE'){ - if($nummer > 0) - $this->app->DB->Update("UPDATE artikel SET freifeld".$nummer." = '$inhalt' WHERE id = '$id'"); - }else{ - $this->app->DB->Update("UPDATE artikel_freifelder SET wert = '$inhalt' WHERE id = '$id'"); - } - echo json_encode(array('status'=>1)); - $this->app->ExitXentral(); - } - if($sprache === 'DE'){ - echo json_encode(array('status'=>0,'statusText'=>'Kein gültiger Artikel')); - $this->app->ExitXentral(); - } - $this->app->DB->Insert("INSERT INTO artikel_freifelder (wert) VALUES ('$inhalt')"); - - echo json_encode(array('status'=>1)); - $this->app->ExitXentral(); - } - echo json_encode(array('status'=>0,'statusText'=>$error)); - $this->app->ExitXentral(); - } - - public function ArtikelFreifelderDelete(){ - $id = (int) $this->app->Secure->GetPOST('id'); - if($id > 0){ - $this->app->DB->Delete("DELETE FROM artikel_freifelder WHERE id = '$id' LIMIT 1"); - } - echo json_encode(array('status'=>1)); - $this->app->ExitXentral(); - } - - public function Install(){ - $this->app->erp->CheckTable('artikel_freifelder'); - $this->app->erp->CheckColumn('id', 'int(11)', 'artikel_freifelder', 'NOT NULL AUTO_INCREMENT'); - $this->app->erp->CheckColumn('artikel', 'int(11)', 'artikel_freifelder', 'NOT NULL DEFAULT 0'); - $this->app->erp->CheckColumn('sprache', 'varchar(255)', 'artikel_freifelder', 'NOT NULL'); - $this->app->erp->CheckColumn('nummer', 'int(11)', 'artikel_freifelder', 'NOT NULL'); - $this->app->erp->CheckColumn('wert', 'text', 'artikel_freifelder', 'NOT NULL'); - $this->app->erp->CheckIndex('artikel_freifelder', 'artikel'); - - $this->app->erp->CheckColumn('lieferzeit_standard_einheit', 'varchar(64)', 'einkaufspreise', 'NOT NULL'); - $this->app->erp->CheckColumn('lieferzeit_aktuell_einheit', 'varchar(64)', 'einkaufspreise', 'NOT NULL'); - - $this->app->erp->CheckAlterTable("ALTER TABLE `artikel_freifelder` CHANGE `wert` `wert` text NOT NULL"); - - $this->app->erp->CheckTable('parts_list_alternative'); - $this->app->erp->CheckColumn('id', 'int(11)', 'parts_list_alternative', 'NOT NULL AUTO_INCREMENT'); - $this->app->erp->CheckColumn('parts_list_id', 'int(11)', 'parts_list_alternative', 'DEFAULT 0 NOT NULL'); - $this->app->erp->CheckColumn('alternative_article_id', 'int(11)', 'parts_list_alternative', 'DEFAULT 0 NOT NULL'); - $this->app->erp->CheckColumn('reason', 'varchar(255)', 'parts_list_alternative', 'DEFAULT "" NOT NULL'); - - $this->app->erp->CheckTable('artikel_cached_fields'); - $this->app->erp->CheckColumn('id','int(11)','artikel_cached_fields','NOT NULL AUTO_INCREMENT'); - $this->app->erp->CheckColumn('artikel','INT(11)','artikel_cached_fields','DEFAULT 0 NOT NULL'); - - $this->app->erp->CheckColumn('project_id','INT(11)','artikel_cached_fields','DEFAULT 0 NOT NULL'); - $this->app->erp->CheckColumn('project_name','VARCHAR(64)','artikel_cached_fields','DEFAULT \'\' NOT NULL'); - - $this->app->erp->CheckColumn('number','VARCHAR(64)','artikel_cached_fields','DEFAULT \'\' NOT NULL'); - $this->app->erp->CheckColumn('ean','VARCHAR(64)','artikel_cached_fields','DEFAULT \'\' NOT NULL'); - $this->app->erp->CheckColumn('factory_number','VARCHAR(64)','artikel_cached_fields','DEFAULT \'\' NOT NULL'); - $this->app->erp->CheckColumn('name','VARCHAR(255)','artikel_cached_fields','DEFAULT \'\' NOT NULL'); - $this->app->erp->CheckColumn('manufactor','VARCHAR(255)','artikel_cached_fields','DEFAULT \'\' NOT NULL'); - $this->app->erp->CheckColumn('customfield1','VARCHAR(255)','artikel_cached_fields','DEFAULT \'\' NOT NULL'); - $this->app->erp->CheckColumn('customfield2','VARCHAR(255)','artikel_cached_fields','DEFAULT \'\' NOT NULL'); - $this->app->erp->CheckColumn('ek_customnumber','VARCHAR(1024)','artikel_cached_fields','DEFAULT \'\' NOT NULL'); - $this->app->erp->CheckColumn('vk_customnumber','VARCHAR(1024)','artikel_cached_fields','DEFAULT \'\' NOT NULL'); - $this->app->erp->CheckColumn('eigenschaften','VARCHAR(1024)','artikel_cached_fields','DEFAULT \'\' NOT NULL'); - - $this->app->erp->CheckColumn('is_storage_article','TINYINT(1)','artikel_cached_fields','DEFAULT 0 NOT NULL'); - $this->app->erp->CheckColumn('is_variant','TINYINT(1)','artikel_cached_fields','DEFAULT 0 NOT NULL'); - $this->app->erp->CheckColumn('variant_from_id','INT(11)','artikel_cached_fields','DEFAULT 0 NOT NULL'); - $this->app->erp->CheckColumn('variant_from_name','VARCHAR(64)','artikel_cached_fields','DEFAULT \'\' NOT NULL'); - $this->app->erp->CheckColumn('is_partlist','TINYINT(1)','artikel_cached_fields','DEFAULT 0 NOT NULL'); - $this->app->erp->CheckColumn('is_shipping','TINYINT(1)','artikel_cached_fields','DEFAULT 0 NOT NULL'); - - $this->app->erp->CheckColumn('locked','TINYINT(1)','artikel_cached_fields','DEFAULT 0 NOT NULL'); - - $this->app->erp->CheckColumn('zeitstempel','TIMESTAMP','artikel_cached_fields','DEFAULT CURRENT_TIMESTAMP NOT NULL'); - $this->app->erp->CheckColumn('lager_verfuegbar','DECIMAL(14,4)','artikel_cached_fields','DEFAULT 0 NOT NULL'); - $this->app->erp->CheckColumn('ek_netto','DECIMAL(14,4)','artikel_cached_fields','DEFAULT 0 NOT NULL'); - $this->app->erp->CheckColumn('ek_brutto','DECIMAL(14,4)','artikel_cached_fields','DEFAULT 0 NOT NULL'); - $this->app->erp->CheckColumn('vk_netto','DECIMAL(14,4)','artikel_cached_fields','DEFAULT 0 NOT NULL'); - $this->app->erp->CheckColumn('vk_brutto','DECIMAL(14,4)','artikel_cached_fields','DEFAULT 0 NOT NULL'); - $this->app->erp->CheckColumn('inzulauf','DECIMAL(14,4)','artikel_cached_fields','DEFAULT 0 NOT NULL'); - $this->app->erp->CheckColumn('imsperrlager','DECIMAL(14,4)','artikel_cached_fields','DEFAULT 0 NOT NULL'); - $this->app->erp->CheckColumn('inproduktion','DECIMAL(14,4)','artikel_cached_fields','DEFAULT 0 NOT NULL'); - $this->app->DB->Select('SELECT lager_gesamt FROM artikel_cached_fields LIMIT 1'); - if($this->app->DB->error()){ - $this->app->erp->CheckColumn('lager_gesamt', 'DECIMAL(14,4)', 'artikel_cached_fields', 'DEFAULT 0 NOT NULL'); - $this->app->DB->Update("UPDATE artikel_cached_fields acf - INNER JOIN artikel a ON acf.artikel = a.id AND a.lagerartikel = 1 - LEFT JOIN ( - SELECT lpi2.artikel, sum(lpi2.menge) as minmenge - FROM lager_platz_inhalt lpi2 - GROUP BY lpi2.artikel - ) verf ON a.id = verf.artikel - SET acf.lager_gesamt = ifnull(verf.minmenge,0) - "); - } - $this->app->erp->CheckIndex('artikel_cached_fields', 'artikel'); - - $this->app->erp->CheckTable('article_label'); - $this->app->erp->CheckColumn('id', 'int(11)', 'article_label', 'NOT NULL AUTO_INCREMENT'); - $this->app->erp->CheckColumn('article_id', 'int(11)', 'article_label', 'DEFAULT 0 NOT NULL'); - $this->app->erp->CheckColumn('label_id', 'int(11)', 'article_label', 'DEFAULT 0 NOT NULL'); - $this->app->erp->CheckColumn('printer_id', 'int(11)', 'article_label', 'DEFAULT 0 NOT NULL'); - $this->app->erp->CheckColumn('amount', 'int(11)', 'article_label', 'DEFAULT 0 NOT NULL'); - $this->app->erp->CheckColumn('type', 'varchar(64)', 'article_label', 'NOT NULL'); - - $this->app->erp->RegisterHook('supersearch_detail', 'artikel', 'ArtikelSupersearchDetail'); - $this->app->erp->RegisterHook('LayouttemplateAttachmentItemsDelete', 'artikel', 'ArtikelDeleteFile'); - - $totalArticles = $this->app->DB->Select('SELECT COUNT(a.id) AS `total` FROM `artikel` AS `a` LIMIT 1'); - if ($totalArticles > 0) { - $this->app->DB->Update('UPDATE `artikel` SET `intern_gesperrt` = `gesperrt` WHERE `gesperrt` = 1'); - } - } - - /** - * @param int $fileId - * @param string $cmd - * - * @return void - */ - public function ArtikelDeleteFile($fileId, $cmd) - { - if ($cmd !== 'artikel') { - return; - } - - $query = sprintf("UPDATE `artikel` AS `a` - INNER JOIN `datei_stichwoerter` AS `ds` ON a.id = ds.parameter - INNER JOIN `datei_version` AS `dv` ON ds.id = dv.datei - INNER JOIN (SELECT MAX(dv.version) AS `version` FROM `datei_version` AS `dv` WHERE dv.datei = %d) AS `v` ON v.version = dv.version - SET a.bildvorschau = '' - WHERE ds.id = %d AND a.bildvorschau = CONCAT(dv.id,'_100_100')", $fileId, $fileId); - $this->app->DB->Update($query); - } - - /** - * @param \Xentral\Widgets\SuperSearch\Query\DetailQuery $detailQuery - * @param \Xentral\Widgets\SuperSearch\Result\ResultDetail $detailResult - * - * @return void - */ - public function ArtikelSupersearchDetail($detailQuery, $detailResult) - { - if ($detailQuery->getGroupKey() !== 'articles') { - return; - } - - $articleId = $detailQuery->getItemIdentifier(); - $sql = sprintf( - "SELECT a.id, CONCAT(a.name_de, ' (', a.nummer, ')') AS title, a.name_de, a.kurztext_de, a.nummer - FROM artikel AS a - WHERE a.id = '%s' LIMIT 1", - $this->app->DB->real_escape_string($articleId) - ); - $article = $this->app->DB->SelectRow($sql); - if (empty($article)) { - return;; - } - - $detailResult->setTitle($article['title']); - $detailResult->addButton('Artikel Details', sprintf('index.php?module=artikel&action=edit&id=%s', $article['id'])); - $detailResult->setDescription(sprintf('

%s

', strip_tags($article['kurztext_de']))); - $detailResult->setMiniDetailUrl(sprintf('index.php?module=artikel&action=minidetail&id=%s', $article['id'])); - } - - public function createNewAricleCache() - { - $this->app->DB->Insert( - "INSERT INTO artikel_cached_fields - (artikel,lager_verfuegbar, ek_netto, vk_netto, ek_brutto, vk_brutto, inzulauf,imsperrlager,inproduktion) - SELECT a.id,0, 0, 0, 0, 0, 0, 0, 0 - FROM artikel a - LEFT JOIN artikel_cached_fields acf ON a.id = acf.artikel - WHERE isnull(acf.id)" - ); - } - - public function createAricleCache() - { - $ermaessigt = (float)$this->app->erp->Firmendaten('steuersatz_ermaessigt'); - if($ermaessigt <= 0) - { - $ermaessigt = 7; - } - $normal = (float)$this->app->erp->Firmendaten('steuersatz_normal'); - if($normal <= 0) - { - $normal = 19; - } - $normal = 1+ $normal / 100; - $ermaessigt = 1+ $ermaessigt / 100; - $this->app->DB->Update( - "UPDATE artikel_cached_fields AS acf - INNER JOIN artikel AS a ON acf.artikel = a.id - LEFT JOIN ( - SELECT artikel, min(preis) as minpreis - FROM einkaufspreise - WHERE (gueltig_bis = '0000-00-00' OR gueltig_bis >= curdate()) - AND preis > 0 - GROUP BY artikel - ) AS ek ON a.id = ek.artikel - LEFT JOIN ( - SELECT artikel, min(preis) as minpreis - FROM einkaufspreise - WHERE (gueltig_bis = '0000-00-00' OR gueltig_bis >= curdate()) - AND preis > 0 - AND (ifnull(waehrung,'EUR') = 'EUR' OR waehrung = '') - GROUP BY artikel - ) AS ek2 ON a.id = ek2.artikel - SET acf.ek_netto = ifnull( ifnull(ek2.minpreis,ek.minpreis),0), - acf.ek_brutto = if(a.umsatzsteuer = 'befreit', 1, if(a.umsatzsteuer = 'ermaessigt', $ermaessigt,$normal)) - *ifnull( ifnull(ek2.minpreis,ek.minpreis),0) - WHERE a.geloescht <> 1" - ); - $this->app->DB->Update( - "UPDATE artikel_cached_fields AS acf - INNER JOIN artikel AS a ON acf.artikel = a.id - LEFT JOIN ( - SELECT artikel, min(preis) as minpreis - FROM verkaufspreise - WHERE (gueltig_bis = '0000-00-00' OR gueltig_bis >= curdate()) - AND (gueltig_ab = '0000-00-00' OR gueltig_ab <= curdate()) - AND art <> 'Gruppe' AND art <> 'gruppe' - AND adresse=0 AND preis > 0 - GROUP BY artikel - ) AS vk ON a.id = vk.artikel - LEFT JOIN ( - SELECT artikel, min(preis) as minpreis - FROM verkaufspreise - WHERE (gueltig_bis = '0000-00-00' OR gueltig_bis >= curdate()) - AND (gueltig_ab = '0000-00-00' OR gueltig_ab <= curdate()) - AND art <> 'Gruppe' AND art <> 'gruppe' - AND adresse=0 AND preis > 0 AND (ifnull(waehrung,'EUR') = 'EUR' OR waehrung = '') - GROUP BY artikel - ) AS vk2 ON a.id = vk2.artikel - LEFT JOIN ( - SELECT artikel, min(preis) as minpreis - FROM verkaufspreise - WHERE (gueltig_bis = '0000-00-00' OR gueltig_bis >= curdate()) - AND (gueltig_ab = '0000-00-00' OR gueltig_ab <= curdate()) - AND art <> 'Gruppe' AND art <> 'gruppe' - AND adresse=0 AND preis > 0 AND (ifnull(waehrung,'EUR') = 'EUR' OR waehrung = '') AND ab_menge = 1 - GROUP BY artikel - ) AS vk3 ON a.id = vk3.artikel - - SET acf.vk_netto = ifnull( ifnull( ifnull(vk3.minpreis,vk2.minpreis),vk.minpreis),0), - acf.vk_brutto = if(a.umsatzsteuer = 'befreit', 1, if(a.umsatzsteuer = 'ermaessigt', $ermaessigt,$normal)) - *ifnull( ifnull( ifnull(vk3.minpreis,vk2.minpreis),vk.minpreis),0) - WHERE a.geloescht <> 1" - ); - - $this->app->DB->Update( - "UPDATE artikel_cached_fields AS acf - INNER JOIN artikel AS a ON acf.artikel = a.id - LEFT JOIN artikel AS a2 ON a.variante_von = a2.id AND a.variante = 1 AND IFNULL(a2.geloescht,0) = 0 AND a2.nummer <> 'DEL' - LEFT JOIN projekt as pr ON a.projekt = pr.id - LEFT JOIN ( - SELECT pos.artikel, SUM(pos.menge) AS produktion - FROM produktion_position pos - LEFT JOIN produktion p ON pos.produktion = p.id - WHERE p.status = 'gestartet' AND pos.sort = 1 - GROUP BY pos.artikel - ) AS prod ON a.id = prod.artikel - LEFT JOIN ( - SELECT artikel, sum(bp.menge - bp.geliefert) as zulauf - FROM bestellung_position AS bp - LEFT JOIN bestellung b ON bp.bestellung=b.id - WHERE b.status!='storniert' AND b.status!='abgeschlossen' AND bp.geliefert 1" - ); - - $ekNumbers = $this->app->DB->Query( - sprintf( - "SELECT DISTINCT artikel, bestellnummer FROM einkaufspreise WHERE IFNULL(bestellnummer,'') <> '' ORDER BY artikel" - ) - ); - if($ekNumbers) { - $lastArtikel = 0; - $numbers = []; - while($row = $this->app->DB->Fetch_Assoc($ekNumbers)) { - if($row['artikel'] != $lastArtikel) { - if($lastArtikel > 0 && !empty($numbers)) { - $this->app->DB->Update( - sprintf( - "UPDATE artikel_cached_fields SET ek_customnumber = '%s' WHERE artikel = %d", - implode(',', $numbers), $lastArtikel - ) - ); - } - $numbers = []; - $lastArtikel = $row['artikel']; - } - $numbers[] = $this->app->DB->real_escape_string($row['bestellnummer']); - } - $this->app->DB->free($ekNumbers); - if($lastArtikel > 0 && !empty($numbers)) { - $this->app->DB->Update( - sprintf( - "UPDATE artikel_cached_fields SET ek_customnumber = '%s' WHERE artikel = %d", - implode(',', $numbers), $lastArtikel - ) - ); - } - } - $ekNumbers = $this->app->DB->Query( - sprintf( - "SELECT DISTINCT artikel, kundenartikelnummer - FROM verkaufspreise WHERE IFNULL(kundenartikelnummer,'') <> '' - ORDER BY artikel" - ) - ); - if($ekNumbers) { - $lastArtikel = 0; - $numbers = []; - while($row = $this->app->DB->Fetch_Assoc($ekNumbers)) { - if($row['artikel'] != $lastArtikel) { - if($lastArtikel > 0 && !empty($numbers)) { - $this->app->DB->Update( - sprintf( - "UPDATE artikel_cached_fields SET vk_customnumber = '%s' WHERE artikel = %d", - implode(',', $numbers), $lastArtikel - ) - ); - } - $numbers = []; - $lastArtikel = $row['artikel']; - } - $numbers[] = $this->app->DB->real_escape_string($row['kundenartikelnummer']); - } - $this->app->DB->free($ekNumbers); - if($lastArtikel > 0 && !empty($numbers)) { - $this->app->DB->Update( - sprintf( - "UPDATE artikel_cached_fields SET vk_customnumber = '%s' WHERE artikel = %d", - implode(',', $numbers), $lastArtikel - ) - ); - } - } - } - - public function updateStorageToAricleCache() - { - $this->app->DB->Update( - "UPDATE artikel_cached_fields AS acf - INNER JOIN artikel AS a ON acf.artikel = a.id AND a.lagerartikel = 1 - LEFT JOIN ( - SELECT lpi2.artikel, sum(lpi2.menge) AS minmenge - FROM lager_platz_inhalt lpi2 - GROUP BY lpi2.artikel - ) AS verf ON a.id = verf.artikel - SET acf.lager_gesamt = ifnull(verf.minmenge,0)" - ); - } - - public function updateAttributesToArticleCache() - { - $this->app->DB->Update( - sprintf( - "UPDATE artikel_cached_fields AS acf - LEFT JOIN artikeleigenschaftenwerte AS aew ON acf.artikel = aew.artikel - LEFT JOIN artikeleigenschaften AS ae - ON aew.artikeleigenschaften = ae.id AND ifnull(ae.geloescht,0) = 0 AND ae.name <> '' - SET acf.eigenschaften = '' - WHERE ISNULL(ae.name)" - ) - ); - $attributes = $this->app->DB->Query( - "SELECT aew.artikel, ae.name,aew.wert - FROM artikeleigenschaftenwerte AS aew - INNER JOIN artikeleigenschaften AS ae - ON aew.artikeleigenschaften = ae.id AND ifnull(ae.geloescht,0) = 0 AND ae.name != '' - ORDER BY aew.artikel, ae.name, aew.wert" - ); - if(!$attributes) { - return; - } - $value = []; - $actAricle = 0; - while($row = $this->app->DB->Fetch_Assoc($attributes)) { - if($actAricle > 0 && $row['artikel'] != $actAricle) { - $this->app->DB->Update( - sprintf( - "UPDATE artikel_cached_fields SET eigenschaften = '%s' WHERE artikel = %d", - implode(', ', $value), $actAricle - ) - ); - $value = []; - } - $actAricle = $row['artikel']; - $value[] = $this->app->DB->real_escape_string($row['name']).': ' - .$this->app->DB->real_escape_string($row['wert']); - } - $this->app->DB->free($attributes); - if(empty($value)) { - return; - } - $this->app->DB->Update( - sprintf( - "UPDATE artikel_cached_fields SET eigenschaften = '%s' WHERE artikel = %d", - implode(', ', $value), $actAricle - ) - ); - } - - /** - * @return int - */ - public function updateArticlePicturePreview($limit = 1000) - { - $articleIds = $this->app->DB->SelectFirstCols( - sprintf( - "SELECT art.id - FROM `artikel` AS `art` - WHERE IFNULL(art.bildvorschau,'') = '' - LIMIT %d", - $limit - ) - ); - $res = 0; - if(empty($articleIds)) { - return 0; - } - $files = $this->app->DB->SelectFirstCols( - sprintf( - "SELECT ds.parameter - FROM `datei_stichwoerter` AS `ds` - WHERE ds.objekt LIKE 'artikel' AND ds.parameter IN ('%s') AND ds.datei > 0", - implode("','", $articleIds) - ) - ); - $toSetNull = array_diff($articleIds, $files); - if(!empty($toSetNull)) { - $this->app->DB->Update( - sprintf( - "UPDATE `artikel` SET `bildvorschau` = 'KEINBILD' WHERE IFNULL(bildvorschau,'') = '' AND `id` IN (%s)", - implode(',', $toSetNull) - ) - ); - $res = $this->app->DB->affected_rows(); - if($res <= 0) { - $res = 0; - } - } - - if(!empty($files)) { - foreach($files as $id) { - try { - $ret = $this->ajaxGenerateThumbnail($id); - } - catch(Exception $e) { - $ret = ['result' => 0]; - } - if(!empty($ret['bildvorschau'])) { - $res++; - } - } - } - - return $res; - } - - public function updateExplodingPartListSellableToAricleCache() - { - $this->app->DB->Update( - "UPDATE artikel_cached_fields AS acf - INNER JOIN artikel AS a ON acf.artikel = a.id AND a.lagerartikel = 1 AND a.juststueckliste = 1 - LEFT JOIN - ( - SELECT s.stuecklistevonartikel, min(FLOOR((ifnull(lpi.menge,0) - if(ifnull(r.menge,0) > ifnull(off.menge,0),ifnull(r.menge,0),ifnull(off.menge,0))) / s.menge)) as minmenge - FROM - ( - SELECT artikel,sum(menge) as menge ,stuecklistevonartikel - FROM stueckliste - WHERE art!='it' - GROUP BY artikel,stuecklistevonartikel - ) AS s - INNER JOIN artikel AS a2 ON s.artikel = a2.id - LEFT JOIN ( - SELECT lpi2.artikel, sum(lpi2.menge) as menge - FROM lager_platz_inhalt lpi2 - INNER JOIN lager_platz lp ON lpi2.lager_platz = lp.id - WHERE lp.sperrlager <> 1 - GROUP BY lpi2.artikel - ) AS lpi ON a2.id = lpi.artikel - LEFT JOIN ( - SELECT artikel, ifnull(sum(menge),0) as menge - FROM lager_reserviert - GROUP BY artikel - ) AS r ON a2.id = r.artikel - LEFT JOIN ( - SELECT ifnull(SUM(ap.menge),0) as menge,ap.artikel - FROM auftrag_position ap - INNER JOIN auftrag a ON a.id=ap.auftrag - WHERE a.status='freigegeben' - GROUP BY ap.artikel - ) AS off ON a2.id = off.artikel - GROUP BY s.stuecklistevonartikel - ) AS verf ON acf.artikel = verf.stuecklistevonartikel - SET acf.lager_verfuegbar = if(ifnull(verf.minmenge,0) <= 0,0, verf.minmenge)" - ); - } - - public function updatePartListJitArticleStorageCache() - { - $jitArticles = $this->app->DB->Query( - 'SELECT `id` - FROM `artikel` - WHERE `juststueckliste` = 1 AND `lagerartikel` = 0 AND (`geloescht` = 0 OR `geloescht` IS NULL)' - ); - while($article = $this->app->DB->Fetch_Assoc($jitArticles)) { - $article = $article['id']; - $inStock = (float)$this->app->erp->ArtikelAnzahlLagerStueckliste($article); - if($inStock < 0) { - $inStock = 0; - } - $this->app->DB->Update( - sprintf( - 'UPDATE `artikel_cached_fields` SET `lager_gesamt` = %f WHERE `artikel` = %d', - $inStock, $article - ) - ); - } - $this->app->DB->free($jitArticles); - } - - public function updatePartListSellableToAricleCache() - { - $this->app->DB->Update( - "UPDATE artikel_cached_fields AS acf - INNER JOIN artikel AS a ON acf.artikel = a.id AND a.lagerartikel = 1 AND a.juststueckliste = 1 - LEFT JOIN - ( - SELECT s.stuecklistevonartikel, min(FLOOR((ifnull(lpi.menge,0) - if(ifnull(r.menge,0) > ifnull(off.menge,0),ifnull(r.menge,0),ifnull(off.menge,0))) / s.menge)) as minmenge - FROM - ( - SELECT artikel,sum(menge) as menge ,stuecklistevonartikel - FROM stueckliste - WHERE art!='it' - GROUP BY artikel,stuecklistevonartikel - ) AS s - INNER JOIN artikel a2 ON s.artikel = a2.id - LEFT JOIN ( - SELECT lpi2.artikel, sum(lpi2.menge) as menge - FROM lager_platz_inhalt lpi2 - INNER JOIN lager_platz lp ON lpi2.lager_platz = lp.id - WHERE lp.sperrlager <> 1 - GROUP BY lpi2.artikel - ) AS lpi ON a2.id = lpi.artikel - LEFT JOIN (SELECT artikel, ifnull(sum(menge),0) as menge FROM lager_reserviert GROUP BY artikel ) r ON a2.id = r.artikel - LEFT JOIN (SELECT ifnull(SUM(ap.menge),0) as menge,ap.artikel FROM auftrag_position ap INNER JOIN auftrag a ON a.id=ap.auftrag WHERE a.status='freigegeben' GROUP BY ap.artikel) off ON a2.id = off.artikel - GROUP BY s.stuecklistevonartikel - ) verf ON acf.artikel = verf.stuecklistevonartikel - LEFT JOIN ( - SELECT artikel, ifnull(sum(menge),0) as menge - FROM lager_reserviert - GROUP BY artikel - ) AS r2 ON acf.artikel = r2.artikel - LEFT JOIN ( - SELECT ifnull(SUM(ap.menge),0) as menge,ap.artikel - FROM auftrag_position ap - INNER JOIN auftrag a ON a.id=ap.auftrag - WHERE a.status='freigegeben' - GROUP BY ap.artikel - ) AS off2 ON acf.artikel = off2.artikel - SET acf.lager_verfuegbar = - if( - ifnull(verf.minmenge,0) - - if( - ifnull(r2.menge,0) > ifnull(off2.menge,0), - ifnull(r2.menge,0), - ifnull(off2.menge,0) - ) <= 0, - 0, - verf.minmenge - - if( - ifnull(r2.menge,0) > ifnull(off2.menge,0), - ifnull(r2.menge,0), - ifnull(off2.menge,0) - ) - ) - "); - } - - public function updateQuarantineStoreToAricleCache() { - $this->app->DB->Update( - "UPDATE artikel_cached_fields acf - INNER JOIN artikel a ON acf.artikel = a.id AND a.lagerartikel = 1 AND a.juststueckliste = 0 - LEFT JOIN ( - SELECT lpi2.artikel, sum(lpi2.menge) as minmenge - FROM lager_platz_inhalt lpi2 - INNER JOIN lager_platz lp ON lpi2.lager_platz = lp.id - WHERE lp.sperrlager = 1 - GROUP BY lpi2.artikel - ) verf ON a.id = verf.artikel - SET acf.imsperrlager = ifnull(verf.minmenge,0)" - ); - } - - public function updateSellableToAricleCache() - { - $this->app->DB->Update( - "UPDATE artikel_cached_fields acf - INNER JOIN artikel a ON acf.artikel = a.id AND a.lagerartikel = 1 AND a.juststueckliste = 0 - LEFT JOIN (SELECT artikel, ifnull(sum(menge),0) as menge FROM lager_reserviert GROUP BY artikel ) r2 ON acf.artikel = r2.artikel - LEFT JOIN (SELECT ifnull(SUM(ap.menge),0) as menge,ap.artikel FROM auftrag_position ap INNER JOIN auftrag a ON a.id=ap.auftrag WHERE a.status='freigegeben' GROUP BY ap.artikel) off2 ON acf.artikel = off2.artikel - LEFT JOIN (SELECT lpi2.artikel, sum(lpi2.menge) as minmenge FROM lager_platz_inhalt lpi2 INNER JOIN lager_platz lp ON lpi2.lager_platz = lp.id WHERE lp.sperrlager <> 1 GROUP BY lpi2.artikel ) verf ON a.id = verf.artikel - SET acf.lager_verfuegbar = - if( - ifnull(verf.minmenge,0) - - if( - ifnull(r2.menge,0) > ifnull(off2.menge,0), - ifnull(r2.menge,0), - ifnull(off2.menge,0) - ) <= 0, - 0, - verf.minmenge - - if( - ifnull(r2.menge,0) > ifnull(off2.menge,0), - ifnull(r2.menge,0), - ifnull(off2.menge,0 - ) - ) - )" - ); - } - - public function ArtikelLagerInfo($artikel) - { - - $summe = $this->app->DB->Select("SELECT SUM(lpi.menge) FROM lager_platz_inhalt lpi LEFT JOIN lager_platz lp ON lp.id=lpi.lager_platz - WHERE lpi.artikel='$artikel' AND lp.sperrlager!=1"); - - $reserviert = $this->app->DB->Select("SELECT SUM(menge) FROM lager_reserviert WHERE artikel='$artikel'");// AND datum >= NOW()"); - - $auftraege = $this->app->DB->Select("SELECT SUM(ap.menge) as menge,ap.bezeichnung FROM auftrag_position ap - LEFT JOIN artikel a ON a.id=ap.artikel LEFT JOIN auftrag auf ON auf.id=ap.auftrag WHERE a.id='$artikel' AND a.lagerartikel=1 AND auf.status='freigegeben'"); - - $liefern= $this->app->DB->Select("SELECT SUM(ap.menge) as menge,ap.bezeichnung FROM auftrag_position ap, auftrag aa, artikel a WHERE a.id=ap.artikel AND aa.id = ap.auftrag AND a.id='$artikel' AND a.lagerartikel=1 AND aa.status='freigegeben'"); - - $reserviert_im_versand = $this->app->DB->Select("SELECT SUM(menge) FROM lager_reserviert WHERE artikel='$artikel' AND objekt='lieferschein'"); - - $berechnet = $summe - $auftraege - $reserviert_im_versand; - - $offenebestellungen = $this->app->DB->Select("SELECT SUM(bp.menge-bp.geliefert) as menge FROM bestellung_position bp, bestellung bs, artikel a WHERE a.id=bp.artikel AND bs.id = bp.bestellung AND a.id='$artikel' AND a.lagerartikel=1 AND (bs.status='freigegeben' OR bs.status='versendet') AND bp.menge > bp.geliefert"); - - $verkaufte = $auftraege + $reserviert_im_versand; - - $berechnetmitoffenebestellungen = $berechnet + $offenebestellungen; - - if($reserviert=='') { - $reserviert =0; - } - if($liefern <=0) { - $liefern=0; - } - - $verkaufbare = $this->app->erp->ArtikelAnzahlVerkaufbar($artikel); - $summe = round($summe, $this->app->erp->GetLagerNachkommastellen()); - $reserviert = round($reserviert ,$this->app->erp->GetLagerNachkommastellen()); - $liefern = round($liefern ,$this->app->erp->GetLagerNachkommastellen()); - $verkaufte = round($verkaufte ,$this->app->erp->GetLagerNachkommastellen()); - $berechnet = round($berechnet ,$this->app->erp->GetLagerNachkommastellen()); - $verkaufbare = round($verkaufbare ,$this->app->erp->GetLagerNachkommastellen()); - $berechnetmitoffenebestellungen = round($berechnetmitoffenebestellungen ,$this->app->erp->GetLagerNachkommastellen()); - - return "
Lagerbestand: $summe  |  Reserviert: $reserviert  | Offene Aufträge: $liefern | Verkaufte: $verkaufte | Berechneter Bestand: $berechnet | Verkaufbare: $verkaufbare | Berechneter Bestand mit offenen Bestellungen: $berechnetmitoffenebestellungen

"; - } -} +app->Secure->GetGET('id'); + $allowed['artikel'] = array('eigenschaften'); + $defaultorder = 1; //Optional wenn andere Reihenfolge gewuenscht + + $defaultorderdesc = 0; + $alignright = array(3,4,5); + $heading = array('Hauptkategorie', 'Unterkategorie (Optional)', 'Wert', 'Einheit (Optional)', 'Menü'); + $width = array('15%', '15%', '12%', '8%', '10%'); + $findcols = array('e.hauptkategorie', 'e.unterkategorie', 'e.wert', 'e.einheit', 'e.id'); + $searchsql = array('e.hauptkategorie', 'e.unterkategorie', 'e.wert', 'e.einheit'); + $menu = "app->Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\">" . " app->Conf->WFconf['defaulttheme']}/images/copy.svg\" border=\"0\">". " app->Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\">"; + + // SQL statement + $sql = "SELECT SQL_CALC_FOUND_ROWS e.id, e.hauptkategorie, e.unterkategorie, CONCAT(e.wert,'  '), + e.einheit, e.id + FROM eigenschaften e "; + $where = "e.artikel='$id' "; + break; + case 'artikel_eigenschaften': + $id = $this->app->Secure->GetGET('id'); + $allowed['artikel'] = array('eigenschaften'); + $defaultorder = 1; //Optional wenn andere Reihenfolge gewuenscht + + $defaultorderdesc = 0; + $alignright = array(3,4,5); + $heading = array('Eigenschaft', 'Wert', 'Einheit (Optional)', 'Menü'); + $width = array('32%', '32%', '20%', '10%'); + $findcols = array('e.name', 'ew.wert', 'ew.einheit', 'ew.id'); + $searchsql = array('e.name', 'ew.wert', 'ew.einheit'); + $menu = "app->Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\">" . " app->Conf->WFconf['defaulttheme']}/images/copy.svg\" border=\"0\">". " app->Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\">"; + + // SQL statement + $sql = "SELECT SQL_CALC_FOUND_ROWS ew.id, e.name, CONCAT(ew.wert,'  '), + ew.einheit, ew.id FROM artikeleigenschaften e INNER JOIN artikeleigenschaftenwerte ew ON e.id = ew.artikeleigenschaften"; + + $where = " ew.artikel='$id' "; + + // gesamt anzahl + $count = "SELECT COUNT(ew.id) FROM artikeleigenschaften e INNER JOIN artikeleigenschaftenwerte ew ON e.id = ew.artikeleigenschaften WHERE $where "; + break; + + case 'artikel_eigenschaften_neu': + $id = $this->app->Secure->GetGET('id'); + $allowed['artikel'] = array('eigenschaften'); + + $heading = array('Eigenschaft DE', 'Wert DE', 'Einheit (Optional)', 'Eigenschaft', 'Wert', 'Sprache', 'Shop', 'Artikelspezifisch', 'Menü', ''); + $width = array('10%', '10%', '10%', '10%', '10%', '4%', '10%', '4%', '1%', '1%'); + + $findcols = array('b.name', 'b.wert', 'b.einheit', 'b.eigenschafts', 'b.werts', 'b.spraches', 'b.shops', 'b.artikelspezifisch', 'b.menux', 'b.menu'); + $searchsql = array('b.name', 'b.wert', 'b.einheit', 'b.eigenschafts', 'b.werts', 'b.spraches', 'b.shops', 'b.artikelspezifisch'); + + $menu = ""; + + $sqla[] = "(SELECT ew.id, e.name, ew.wert, ew.einheit, '' as eigenschafts, '' as werts, 'DE' as spraches, '' as shops, '' as artikelspezifisch, CONCAT('
app->Conf->WFconf[defaulttheme]}/images/edit.svg\" title=\"Bearbeiten\" border=\"0\"> app->Conf->WFconf[defaulttheme]}/images/delete.svg\" title=\"Löschen\" border=\"0\"> ',IF(e.typ='select' AND ew.vorlage>0,'',CONCAT('app->Conf->WFconf[defaulttheme]}/images/copy.svg\" title=\"Kopieren\" border=\"0\">
'))) as menux, '' as menu + FROM artikeleigenschaften e + INNER JOIN artikeleigenschaftenwerte ew ON e.id = ew.artikeleigenschaften + WHERE ew.artikel = '$id')"; + + $sqla[] = "(SELECT ap.id, ae.name, aw.wert, aw.einheit, ap.property_to as eigenschafts, ap.property_value_to as werts, ap.language_to as spraches, s.bezeichnung as shops, IF(ap.article_id > 0, 'ja', '') as artikelspezifisch, IF(ap.article_id = 0, CONCAT('
app->Conf->WFconf[defaulttheme]}/images/forward.svg\" title=\"Eigenschaften Übersetzung\" border=\"0\">'), IF(ap.article_id != 0, CONCAT(''; + + if(count($fehlende_preise) > 0) { + $tpl3 .= "'; + $tpl2 .= ''; + } + else { + $tpl3 .= ''; + $tpl2 .= ''; + } + + $fehlende_artikel_links=''; + $summe_fehlende_preise_max = 0; + $summe_fehlende_preise_min = 0; + + $cfehlende_preise = $fehlende_preise?count($fehlende_preise):0; + for($jj=0;$jj<$cfehlende_preise;$jj++) { + $nummer = $this->app->DB->Select("SELECT nummer FROM artikel WHERE id='".$fehlende_preise[$jj]['artikel']."' LIMIT 1"); + + $menge = $this->app->DB->Select("SELECT SUM(s.menge) FROM stueckliste s LEFT JOIN artikel a ON a.id=s.artikel + WHERE s.stuecklistevonartikel='$id' AND s.artikel='".$fehlende_preise[$jj]['artikel']."'"); + + //TODO VK + $preis_min = $this->app->DB->Select("SELECT MIN(preis) FROM einkaufspreise WHERE artikel='".$fehlende_preise[$jj]['artikel']."' AND geloescht!=1 + AND (gueltig_bis='0000-00-00' OR gueltig_bis >= curdate()) ")*$menge; + + //TODO VK + $preis_max = $this->app->DB->Select("SELECT MAX(preis) FROM einkaufspreise WHERE artikel='".$fehlende_preise[$jj]['artikel']."' AND geloescht!=1 + AND (gueltig_bis='0000-00-00' OR gueltig_bis >= curdate()) ")*$menge; + + $fehlende_artikel_links .="$nummer
"; + //target=\"_blink\">$nummer/$preis_min/$preis_max
"; + + $summe_fehlende_preise_max = $summe_fehlende_preise_max + $preis_max; + $summe_fehlende_preise_min = $summe_fehlende_preise_min + $preis_min; + } + $teile_tpl .=""; + + if(count($fehlende_preise) <=0){ + $tpl22 .=''; + } else { + $tpl22 .='"; + } + //$tpl4 .=''; + //$tpl5 .=''; + } + + $this->app->Tpl->Add('TABELLE',"".$tpl.''); + + $this->app->Tpl->Add('TABELLE',''.$tpl2.''); + + $this->app->Tpl->Add('TABELLE',"".$tpl3.""); + + $this->app->Tpl->Add('TABELLE',"".$tpl22.""); + + if(!empty($artikel_ohne_ek_eins)) { + $this->app->Tpl->Add('TABELLE',"".$teile_tpl.""); + $this->app->Tpl->Set('TAB5'," +
app->Conf->WFconf[defaulttheme]}/images/edit.svg\" title=\"Bearbeiten\" border=\"0\"> app->Conf->WFconf[defaulttheme]}/images/delete.svg\" title=\"Löschen\" border=\"0\">'), '')) as menux, '' as menu + FROM article_property_translation ap + LEFT JOIN shopexport s ON ap.shop_id = s.id + LEFT JOIN artikeleigenschaften ae ON ap.property_from = ae.name + JOIN artikeleigenschaftenwerte aw ON ae.id = aw.artikeleigenschaften AND ap.property_value_from = aw.wert + WHERE ap.language_from = 'DE' AND aw.artikel = '$id' AND (ap.article_id = '$id' OR ap.article_id = 0))"; + + $sql = "SELECT SQL_CALC_FOUND_ROWS b.id, b.name, b.wert, b.einheit, b.eigenschafts, b.werts, b.spraches, b.shops, b.artikelspezifisch, b.menux, b.menu + FROM ( + ".implode(" UNION ALL ", $sqla)." + )b + "; + + break; + + case 'artikel_fremdnummern': + $allowed['artikel'] = array('fremdnummern'); + $id = (int)$this->app->Secure->GetGET('id'); + + $this->app->Tpl->Add('JQUERYREADY', "$('#inaktiv').click( function() { fnFilterColumn1( 0 ); } );"); + + for ($r = 1;$r <= 1;$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 + ); + } + '); + } + $more_data1 = $this->app->Secure->GetGET('more_data1'); + + $heading = array('Aktiv','Bezeichnung','Fremdnummer','Shop','Scanner', 'Menü'); + $width = array('1%','20%','20%','15%','5%','1%'); + $findcols = array("if(af.aktiv = 1,'ja','-')",'af.bezeichnung','af.nummer','s.bezeichnung',"if(af.scannable = 1,'ja','-')",'af.id'); + $searchsql = array("if(af.aktiv = 1,'ja','-')",'af.bezeichnung','af.nummer','s.bezeichnung',"if(af.scannable = 1,'ja','-')"); + $defaultorder = 0; + $defaultorderdesc = 1; + + $menu = "
app->Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\"> app->Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\">
"; + + $sql = "SELECT SQL_CALC_FOUND_ROWS af.id, if(af.aktiv = 1,'ja','-') as aktiv, + af.bezeichnung, + af.nummer, + s.bezeichnung,if(af.scannable = 1,'ja','-') as scannable,af.id + from artikelnummer_fremdnummern af + left join shopexport s on af.shopid = s.id + "; + $where = "af.artikel = '$id' AND af.aktiv = 1"; + if($more_data1 == 1){ + $where = "af.artikel = '$id'"; + } + break; + case 'manuellagerlampe': + $allowed['artikel'] = array('lagerlampe'); + $this->app->Tpl->Add('JQUERYREADY', "$('#green').click( function() { fnFilterColumn1( 0 ); } );"); + $this->app->Tpl->Add('JQUERYREADY', "$('#yellow').click( function() { fnFilterColumn2( 0 ); } );"); + $this->app->Tpl->Add('JQUERYREADY', "$('#red').click( function() { fnFilterColumn3( 0 ); } );"); + $this->app->Tpl->Add('JQUERYREADY', "$('#imlager').click( function() { fnFilterColumn4( 0 ); } );"); + $this->app->Tpl->Add('JQUERYREADY', "$('#nichtimlager').click( function() { fnFilterColumn5( 0 ); } );"); + + // headings + $heading = array('', 'Ampel', 'Nummer', 'Artikel', 'Lieferant', 'Im Lager', 'Projekt', 'Menü'); + $width = array('3%', '5%', '10%', '35%', '20%', '8%', '15%', '10%'); + $findcols = array('wahl', 'a.lieferzeit', 'a.nummer', 'a.name_de', 'a.lieferant', 'lager', 'projekt', 'a.id'); + $searchsql = array('a.name_de', 'a.nummer', 'adr.name', 'p.abkuerzung'); + $menu = "app->Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\">" . ""; + + // SQL statement + + /* CONCAT('') as wahl, + + CONCAT('') as ampel, + */ + $sql = "SELECT SQL_CALC_FOUND_ROWS a.id, + CONCAT('') as wahl, + CONCAT('') as ampel, + + If(a.inaktiv,CONCAT('',a.nummer,''),a.nummer) as nummer, + If(a.inaktiv,CONCAT('',a.name_de,''),a.name_de) as name_de, + If(a.inaktiv,CONCAT('',adr.name,''),adr.name) as lieferant, + + (SELECT SUM(l.menge) FROM lager_platz_inhalt l WHERE l.artikel=a.id) as lager, + + If(a.inaktiv,CONCAT('',p.abkuerzung,''),p.abkuerzung) as projekt, + a.id as menu + FROM artikel a LEFT JOIN projekt p ON p.id=a.projekt LEFT JOIN adresse adr ON a.adresse=adr.id "; + for ($r = 1;$r < 9;$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 + ); + } + '); + } + + // START EXTRA more + $more_data1 = $this->app->Secure->GetGET('more_data1'); + + if ($more_data1 == 1) { + $subwhere[] = " a.lieferzeit='green' "; + } + $more_data2 = $this->app->Secure->GetGET('more_data2'); + + if ($more_data2 == 1) { + $subwhere[] = " a.lieferzeit='yellow' "; + } + $more_data3 = $this->app->Secure->GetGET('more_data3'); + + if ($more_data3 == 1) { + $subwhere[] = " a.lieferzeit='red' "; + } + $more_data4 = $this->app->Secure->GetGET('more_data4'); + + if ($more_data4 == 1) { + $subwhere[] = ' (SELECT SUM(l.menge) FROM lager_platz_inhalt l WHERE l.artikel=a.id) > 0 '; + } + $more_data5 = $this->app->Secure->GetGET('more_data5'); + + if ($more_data5 == 1) { + $subwhere[] = ' (SELECT SUM(l.menge) FROM lager_platz_inhalt l WHERE l.artikel=a.id) IS NULL '; + } + + $tmp = ''; + $csubwhere = !empty($subwhere)?count($subwhere):0; + for ($j = 0;$j < $csubwhere;$j++) { + $tmp.= ' AND ' . $subwhere[$j]; + } + + $where = 'a.geloescht=0 AND a.shop > 0 AND a.lagerartikel=1 AND autolagerlampe!=1 ' . $tmp; + $count = 'SELECT COUNT(id) FROM artikel WHERE geloescht=0 AND shop > 0 AND lagerartikel=1'; + break; + case 'autolagerlampe': + $allowed['artikel'] = array('lagerlampe'); + + // headings + $heading = array('', 'Ampel', 'Art', 'Nummer', 'Artikel', 'Lieferant', 'Im Lager', 'Projekt', 'Menü'); + $width = array('1%', '7%', '3%', '10%', '30%', '20%', '10%', '10%'); + $findcols = array('a.id', 'a.lieferzeit', 'art', 'a.nummer', 'a.name_de', 'lieferant', 'projekt', 'a.id'); + $searchsql = array('a.name_de', 'a.nummer', 'adr.name', 'p.abkuerzung'); + $menu = "app->Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\">" . ""; + + // SQL statement + $sql = "SELECT SQL_CALC_FOUND_ROWS a.id, + + if(a.autolagerlampe,CONCAT(''), + CONCAT('')) as wahl, + CONCAT('') as ampel, + + if(a.autolagerlampe,'auto','manuell') as art, + + If(a.inaktiv,CONCAT('',a.nummer,''),a.nummer) as nummer, + If(a.inaktiv,CONCAT('',a.name_de,''),a.name_de) as name_de, + If(a.inaktiv,CONCAT('',adr.name,''),adr.name) as lieferant, + (SELECT SUM(l.menge) FROM lager_platz_inhalt l WHERE l.artikel=a.id) as lager, + If(a.inaktiv,CONCAT('',p.abkuerzung,''),p.abkuerzung) as projekt, + + a.id as menu + FROM artikel a LEFT JOIN projekt p ON p.id=a.projekt LEFT JOIN adresse adr ON a.adresse=adr.id "; + $where = 'a.geloescht=0 AND a.shop > 0 AND a.lagerartikel=1 '; + $count = 'SELECT COUNT(id) FROM artikel WHERE geloescht=0 AND shop > 0 AND lagerartikel=1'; + break; + case 'artikeltabelleneu': + $allowed['artikel'] = array('lagerlampe'); + + // headings + $heading = array('', 'Nummer', 'Artikel', 'Im Lager', 'Projekt', 'Menü'); + $width = array('5%', '10%', '45%', '8%', '15%', '1%'); + $findcols = array('nummer', 'name_de', 'projekt', 'lager', 'id'); + $searchsql = array('a.nummer', 'a.name_de','p.abkuerzung'); + $menu = "app->Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\">" . ""; + + // SQL statement + + $sql = "SELECT SQL_CALC_FOUND_ROWS a.id, CONCAT('') as wahl, a.nummer as nummer, + a.name_de as name_de, (SELECT SUM(l.menge) FROM lager_platz_inhalt l WHERE l.artikel=a.id) as lager, p.abkuerzung as projekt, a.id as menu + FROM artikel a LEFT JOIN projekt p ON p.id=a.projekt "; + + // fester filter + $where = "a.geloescht=0 AND a.neu='1' AND a.shop >0 " . $this->app->erp->ProjektRechte(); + $count = 'SELECT COUNT(a.id) FROM artikel a WHERE a.geloescht=0 AND a.shop > 0 AND a.neu=1 ' . $this->app->erp->ProjektRechte(); + break; + case 'lieferantartikelpreise': + $id = (int)$this->app->Secure->GetGET('id'); + $allowed['artikel'] = array('profisuche'); + // alle artikel die ein Kunde kaufen kann mit preisen netto brutto + $cmd = $this->app->Secure->GetGET('smodule'); + $adresse = $this->app->DB->Select("SELECT adresse FROM {$cmd} WHERE id='$id' LIMIT 1"); + + // headings + $heading = array('', 'Nummer', 'Artikel', 'Ab', 'Preis', 'Lager', 'Res.', 'Menge', 'Projekt', 'Menü'); + $width = array('1%', '10%', '45%', '10%', '10%', '10%', '10%', '15%', '10%'); + $findcols = array('auswahlbox', 'nummer', 'name_de', 'v.ab_menge', 'v.preis', 'lager', 'reserviert', 'auswahlmenge', 'p.abkuerzung', 'id'); + $searchsql = array('a.name_de', 'a.nummer', 'p.abkuerzung'); + + $alignright = array(4,5,6); + $numbercols = array(4); + + $menu = "app->Conf->WFconf['defaulttheme']}/images/add.png\" border=\"0\">"; + + // SQL statement + $sql = "SELECT SQL_CALC_FOUND_ROWS a.id, + CONCAT('') AS auswahlbox, + a.nummer as nummer, a.name_de as name_de, ".$this->app->erp->FormatMenge('v.ab_menge').' as abmenge,'.$this->app->erp->FormatPreis('v.preis',2).' as preis, + '.$this->app->erp->FormatMenge('(SELECT SUM(l.menge) FROM lager_platz_inhalt l WHERE l.artikel=a.id)').' as lager, + '.$this->app->erp->FormatMenge('(SELECT SUM(l.menge) FROM lager_reserviert l WHERE l.artikel=a.id)')." as reserviert, + CONCAT('app->erp->FormatMenge("v.ab_menge").", '\" autocomplete=\"off\">') AS auswahlmenge, + p.abkuerzung as projekt, v.id as menu + FROM einkaufspreise v, artikel a LEFT JOIN projekt p ON p.id=a.projekt "; + + // fester filter + //$where = "a.geloescht=0 AND v.artikel=a.id AND (v.adresse='' OR v.adresse='$adresse' OR v.adresse='0') AND (v.gueltig_bis='0000-00-00' OR v.gueltig_bis >=NOW()) "; + $where = "a.geloescht=0 AND v.artikel=a.id AND (v.adresse='$adresse') AND (v.gueltig_bis='0000-00-00' OR v.gueltig_bis >=NOW()) "; + //$count = "SELECT COUNT(v.id) FROM einkaufspreise v, artikel a WHERE a.geloescht=0 AND v.artikel=a.id AND (v.adresse='' OR v.adresse='$adresse')"; + $count = "SELECT COUNT(v.id) FROM einkaufspreise v, artikel a WHERE a.geloescht=0 AND v.artikel=a.id AND (v.adresse='$adresse')"; + break; + case 'kundeartikelpreise': + $id = (int)$this->app->Secure->GetGET('id'); + $allowed['artikel'] = array('profisuche'); + // START EXTRA checkboxen + $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 + ); } + '); + } + + // alle artikel die ein Kunde kaufen kann mit preisen netto brutto + $cmd = $this->app->Secure->GetGET('smodule'); + $adresse = $this->app->DB->Select(sprintf('SELECT adresse FROM `%s` WHERE id=%d LIMIT 1',$cmd,$id)); + + $sEcho = (int)$this->app->Secure->GetGET('sEcho'); + if ($sEcho === 1) { + // Beim allerersten Aufruf Filterbaum-Selektion löschen, damit alle Artikel angezeigt werden. + // Ansonsten ist Kategorie-Filter aktiv; die ausgewählte Kategorie ist aber nicht markiert im Baum. + $this->app->User->SetParameter('filterbaum_'.$cmd, ''); + } + + $filterbaum = $this->app->User->GetParameter('filterbaum_'.$cmd); + $baum = null; + if($filterbaum) + { + $this->app->erp->GetArtikelunterbaumids($filterbaum, $baum); + } + $baumids = null; + $typwhere = []; + if($baum) + { + foreach($baum as $v) + { + $baumids[] = " kategorie = '$v' "; + $typwhere[] = ' a.typ = \''.$v.'_kat\' '; + } + } + + // headings + $heading = array('', 'Nummer', 'Artikel', 'Ab', 'Preis','Währung', 'Lager', 'Res.', 'Menge', 'Projekt'); + $width = array('1%', '10%', '45%', '10%', '10%', '10%', '10%', '10%', '15%'); + $findcols = array('auswahlbox', 'nummer', 'name_de', 'v.ab_menge', 'v.preis','v.waehrung', 'l.menge', 'r.menge', 'auswahlmenge', 'p.abkuerzung'); + $fmodul = $this->app->Secure->GetGET('fmodul'); + $searchsql = array('a.name_de', 'a.nummer', 'p.abkuerzung','a.herstellernummer'); + $alignright = array(4,5,7,8); + $numbercols = array(4); + + $artikel_freitext1_suche = $this->app->erp->Firmendaten('artikel_freitext1_suche'); + if($artikel_freitext1_suche=='1') { + $searchsql[]='a.freifeld1'; + } + if($artikel_freitext1_suche=='1') { + $searchsql[]='a.freifeld2'; + } + + $artikel_suche_kurztext = $this->app->erp->Firmendaten('artikel_suche_kurztext'); + if($artikel_suche_kurztext=='1') { + $searchsql[]='a.kurztext_de'; + } + + + + $artikelzusatzfelder = $this->app->erp->getZusatzfelderArtikel(); + $artikelcachedfelder = $this->app->erp->getArtikelCachedfelder(); + $zusatzcols = null; + $joincached = ''; + $joineig = ''; + for($i = 1; $i <= 5; $i++) + { + $zusatzfeld = $this->app->erp->Firmendaten('artikeltabellezusatz'.$i); + if($zusatzfeld && isset($artikelzusatzfelder[$zusatzfeld])) + { + $heading[] = $artikelzusatzfelder[$zusatzfeld]; + $width[] = '10%'; + if(isset($artikelcachedfelder[$zusatzfeld])) + { + $findcols[] = 'cache.'.$zusatzfeld; + switch($artikelcachedfelder[$zusatzfeld]) + { + case 'Menge': + if($zusatzfeld == 'lager_verfuegbar') + { + $zusatzcols[] = 'if(a.lagerartikel=\'1\','.$this->app->erp->FormatMenge('cache.' . $zusatzfeld).',\'\')'; + }else{ + $zusatzcols[] = $this->app->erp->FormatMenge('cache.' . $zusatzfeld); + } + $alignright[] = count($findcols); + break; + case 'Preis': + $zusatzcols[] = $this->app->erp->FormatPreis('cache.'.$zusatzfeld,2); + $alignright[] = count($findcols); + break; + default: + $zusatzcols[] = 'cache.'.$zusatzfeld; + break; + } + $joincached = ' LEFT JOIN artikel_cached_fields cache ON a.id = cache.artikel '; + }else{ + switch($zusatzfeld) + { + case 'vknetto': + case 'eknetto': + case 'vkbrutto': + case 'ekbrutto': + case 'lagerverfuegbar': + $findcols[] = 'a.id'; + $zusatzcols[] = "''"; + break; + case 'eigenschaften': + /*$findcols[] = 'eig.value'; + $zusatzcols[] = 'eig.value'; + $joineig = " + LEFT JOIN ( + SELECT aew.artikel, + GROUP_CONCAT(DISTINCT concat(ae.name,': ',aew.wert) + ORDER BY ae.name SEPARATOR ', ') as value + FROM artikeleigenschaftenwerte aew + INNER JOIN artikeleigenschaften ae ON aew.artikeleigenschaften = ae.id AND ifnull(ae.geloescht,0) = 0 AND ae.name != '' + GROUP BY aew.artikel + ) eig ON a.id = eig.artikel + ";*/ + break; + default: + $findcols[] = 'a.'.$zusatzfeld; + $zusatzcols[] = 'a.'.$zusatzfeld; + break; + } + } + } + } + + $joins = ''; + + $joins .= $joincached; + $joins .= $joineig; + + + $menu = "app->Conf->WFconf['defaulttheme']}/images/add.png\" border=\"0\">"; + + $sql = "SELECT SQL_CALC_FOUND_ROWS a.id, + CONCAT('') AS auswahlbox, + a.nummer as nummer, + CONCAT(a.name_de,' (',v.art,')') + as name_de, trim(v.ab_menge)+0 as abmenge,".$this->app->erp->FormatPreis('v.preis')." as preis,v.waehrung, + trim(l.menge)+0 as lager, + trim(r.menge)+0 as reserviert, + CONCAT('app->erp->FormatMenge('v.ab_menge').", '\" autocomplete=\"off\">') AS auswahlmenge, + p.abkuerzung as projekt, "; + + if($zusatzcols) + { + $sql .= implode(', ', $zusatzcols).', '; + foreach($zusatzcols as $v) + { + if(!in_array($v, $searchsql)){ + $searchsql[] = $v; + } + } + } + + $sql .= "v.id as menu + FROM verkaufspreise v + INNER JOIN artikel a ON v.artikel = a.id AND a.geloescht <> 1 + LEFT JOIN (SELECT artikel, sum(menge) as menge FROM lager_platz_inhalt GROUP BY artikel) l ON l.artikel = a.id + LEFT JOIN (SELECT artikel, sum(menge) as menge FROM lager_reserviert GROUP BY artikel) r ON r.artikel = a.id + LEFT JOIN projekt p ON p.id=a.projekt $joins"; + + $heading[] = 'Menü'; + $width[] = '1%'; + $findcols[] = 'id'; + + $gruppenarr = $this->app->erp->GetGruppen($adresse); + $cgruppenarr = $gruppenarr?count($gruppenarr):0; + $gruppen = ''; + for ($i = 0;$i < $cgruppenarr;$i++) { + + if ($gruppenarr[$i] > 0) { + $gruppen.= " OR v.gruppe='" . $gruppenarr[$i] . "' "; + } + } + + //$more_data1 = $this->app->Secure->GetGET("more_data1"); + + if(!$this->app->Secure->GetGET('more_data1')){ + $tmp_or = " OR ((v.adresse='' OR v.adresse='0') AND v.art='Kunde') "; + } + + $where = "((v.adresse='$adresse' $gruppen) $tmp_or) AND (v.gueltig_bis='0000-00-00' OR v.gueltig_bis>=NOW()) AND a.intern_gesperrt!=1 ".$this->app->erp->ProjektRechte('a.projekt').' '; + if(!empty($baumids)) + { + $sql .= 'LEFT JOIN (SELECT artikel FROM `artikelbaum_artikel` WHERE ('.implode(' OR ', $baumids).') GROUP BY artikel) b ON a.id = b.artikel '; + $where .= 'AND (b.artikel > 0 OR '.implode(' OR ',$typwhere).') '; + } + + //$count = "SELECT COUNT(v.id) FROM verkaufspreise v INNER JOIN artikel a ON v.artikel = a.id AND a.geloescht <> 1 WHERE ((v.adresse='$adresse' $gruppen) $tmp_or) AND (v.gueltig_bis='0000-00-00' OR v.gueltig_bis>=NOW()) "; + + break; + case 'artikel_auftraege_offen': + $id = (int)$this->app->Secure->GetGET('id'); + $allowed['artikel'] = array('offeneauftraege'); + + // headings + $heading = array('Auftrag', 'Datum', 'Status', 'Zahlweise', 'Freigabe', 'Kunde', 'Menge', 'Geliefert', 'Preis', 'Menü'); + $width = array('10%', '10%', '15%', '10%', '10%', '30%', '10%', '10%'); + $findcols = array('a.id', 'a.belegnr', 'a.datum', 'a.status', 'a.zahlungsweise', 'adr.kundenfreigabe', 'adr.name', 'ap.menge', 'ap.geliefert_menge', "FORMAT(ap.preis*(100-ap.rabatt)/100,2)"); + $searchsql = array('a.belegnr', "DATE_FORMAT(a.datum,'%d.%m.%Y')", 'a.status', 'a.zahlungsweise', 'adr.kundenfreigabe', 'adr.name', 'ap.menge', 'ap.geliefert_menge', "FORMAT(ap.preis*(100-ap.rabatt)/100,2)"); + $menu = "app->Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\">"; + $alignright = array(7,8,9); + // SQL statement + $sql = "SELECT SQL_CALC_FOUND_ROWS a.id, CONCAT('',a.belegnr,'') as belegnr, DATE_FORMAT(a.datum,'%d.%m.%Y') as datum, a.status, a.zahlungsweise, adr.kundenfreigabe as freigabe, CONCAT(a.name,'
', a.email) as Kunde, + trim(ap.menge)+0, trim(ap.geliefert_menge)+0 as gelieferte, FORMAT(ap.preis*(100-ap.rabatt)/100,2) as preis, a.id + FROM auftrag_position ap LEFT JOIN auftrag a ON a.id=ap.auftrag, adresse adr"; + + if ($name == 'artikel_auftraege_offen') { + + // fester filter + $where = " adr.id=a.adresse AND ap.artikel='$id' AND ap.geliefert_menge < ap.menge AND a.status='freigegeben'"; + $count = "SELECT COUNT(a.id) FROM auftrag_position ap LEFT JOIN auftrag a ON a.id=ap.auftrag, adresse adr + WHERE adr.id=a.adresse AND ap.artikel='$id' AND ap.geliefert_menge < ap.menge AND a.status='freigegeben'"; + } else { + + // fester filter + $where = " adr.id=a.adresse AND ap.artikel='$id' AND a.status='abgeschlossen'"; + $count = "SELECT COUNT(a.id) FROM auftrag_position ap LEFT JOIN auftrag a ON a.id=ap.auftrag, adresse adr + WHERE adr.id=a.adresse AND ap.artikel='$id' AND a.status='abgeschlossen'"; + } + break; + case 'artikel_auftraege_versendet': + $id = (int)$this->app->Secure->GetGET('id'); + $allowed['artikel'] = array('offeneauftraege'); + $alignright = array(7,8,9); + // headings + $heading = array('Auftrag', 'Datum', 'Status', 'Zahlweise', 'Freigabe', 'Kunde', 'Menge', 'Geliefert', 'Preis', 'Menü'); + $width = array('10%', '10%', '15%', '10%', '10%', '30%', '10%', '10%'); + $findcols = array('a.id', 'a.belegnr', 'a.datum', 'a.status', 'a.zahlungsweise', 'adr.kundenfreigabe', 'adr.name', 'ap.menge', 'ap.geliefert_menge', "FORMAT(ap.preis*(100-ap.rabatt)/100,2)"); + $searchsql = array('a.belegnr', "DATE_FORMAT(a.datum,'%d.%m.%Y')", 'a.status', 'a.zahlungsweise', 'adr.kundenfreigabe', 'adr.name', 'ap.menge', 'ap.geliefert_menge', "FORMAT(ap.preis*(100-ap.rabatt)/100,2)"); + $menu = "app->Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\">"; + + // SQL statement + $sql = "SELECT SQL_CALC_FOUND_ROWS a.id, CONCAT('',a.belegnr,'') as belegnr, DATE_FORMAT(a.datum,'%d.%m.%Y') as datum, a.status, a.zahlungsweise, adr.kundenfreigabe as freigabe, CONCAT(a.name,'
', a.email) as Kunde, + trim(ap.menge)+0, trim(ap.geliefert_menge)+0 as gelieferte, FORMAT(ap.preis*(100-ap.rabatt)/100,2) as preis, a.id + FROM auftrag_position ap LEFT JOIN auftrag a ON a.id=ap.auftrag, adresse adr"; + + // fester filter + $where = " adr.id=a.adresse AND ap.artikel='$id' AND a.status='abgeschlossen'"; + $count = "SELECT COUNT(a.id) FROM auftrag_position ap LEFT JOIN auftrag a ON a.id=ap.auftrag, adresse adr + WHERE adr.id=a.adresse AND ap.artikel='$id' AND a.status='abgeschlossen'"; + break; + case 'verkaufspreise': + $id = (int)$this->app->Secure->GetGET('id'); + $allowed['artikel'] = array('verkauf'); + $this->app->Tpl->Add('JQUERYREADY', "$('#alteverkaufspreise').click( function() { fnFilterColumn1( 0 ); } );"); + $this->app->Tpl->Add('JQUERYREADY', "$('#nurkunde').click( function() { fnFilterColumn2( 0 ); } );"); + $this->app->Tpl->Add('JQUERYREADY', "$('#nurgruppe').click( function() { fnFilterColumn3( 0 ); } );"); + $this->app->Tpl->Add('JQUERYREADY', "$('#nurstandard').click( function() { fnFilterColumn4( 0 ); } );"); + $defaultorder = 3; //Optional wenn andere Reihenfolge gewuenscht + + $alignright=array(3,4,5,6,7); + + $defaultorderdesc = 0; + 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 + ); + } + '); + } + $heading = array('Kunde/Gruppe', 'Hinweis', 'ab', 'Preis', 'Währung', 'Gültig ab', 'Gültig bis', 'Menü'); + $width = array('40%', '15%', '10%', '5%', '10%', '10%','15%'); + $findcols = array("if(v.art='Kunde',if(v.adresse='' or v.adresse=0,'Standardpreis',CONCAT(adr.kundennummer,' ',adr.name)),CONCAT(g.name,' ',g.kennziffer))", 'hinweis', $this->app->erp->FormatMenge('v.ab_menge'), 'preis', 'v.waehrung','gueltig_ab','gueltig_bis', 'id'); + $searchsql = array("if(v.art='Kunde',if(v.adresse='' or v.adresse=0,'Standardpreis',CONCAT(adr.kundennummer,' ',adr.name)),CONCAT(g.name,' ',g.kennziffer))",'adr.name', 'g.name', $this->app->erp->FormatMenge('v.ab_menge'), 'v.waehrung',$this->app->YUI->FormatPreis('v.preis'),"DATE_FORMAT(v.gueltig_bis,'%d.%m.%Y')","DATE_FORMAT(v.gueltig_ab,'%d.%m.%Y')"); + $menu = ''; + $menu .= ''; + $menu .= ''; + $menu .= ''; + $menu .= '
'; + $menu .= ''; + //$menu .= ""; + $menu .= "app->Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\">"; + $menu .= '' . ' '; + $menu .= ""; + $menu .= "app->Conf->WFconf['defaulttheme']}/images/disable.png\" border=\"0\">"; + $menu .= '' . ' '; + $menu .= ""; + $menu .= "app->Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\">"; + $menu .= ' '; + $menu .= ""; + $menu .= "app->Conf->WFconf['defaulttheme']}/images/copy.svg\" border=\"0\">"; + $menu .= ''; + $menu .= '
'; + + $numbercols = array(3); + + // SQL statement + $sql = "SELECT SQL_CALC_FOUND_ROWS v.id, + if(v.art='Kunde',if(v.adresse='' or v.adresse=0,'Standardpreis',CONCAT(adr.kundennummer,' ',adr.name)),CONCAT(g.name,' ',g.kennziffer)) as kunde, + if(v.adresse > 0 OR v.gruppe >0,'','') as hinweis, + ".$this->app->erp->FormatMenge('v.ab_menge').' as ab_menge, '.$this->app->YUI->FormatPreis('v.preis')." as preis, v.waehrung, DATE_FORMAT(v.gueltig_ab, '%d.%m.%Y') as gueltig_ab, DATE_FORMAT(v.gueltig_bis, '%d.%m.%Y') as gueltig_bis, v.id as menu + FROM verkaufspreise v LEFT JOIN adresse adr ON v.adresse=adr.id LEFT JOIN gruppen g ON g.id=v.gruppe "; + $more_data1 = $this->app->Secure->GetGET('more_data1'); + + // kunde + $more_data2 = $this->app->Secure->GetGET('more_data2'); + if($more_data2=='1') { + $subwhere[] = ' v.adresse > 0 AND v.gruppe <= 0 '; + } + + //Gruppe + $more_data3 = $this->app->Secure->GetGET('more_data3'); + if($more_data3=='1') { + $subwhere[] = ' v.gruppe > 0 AND v.adresse<=0 '; + } + + //listenpreise + $more_data4 = $this->app->Secure->GetGET('more_data4'); + if($more_data4=='1') { + $subwhere[] = ' v.adresse = 0 AND v.gruppe=0 '; + } + + $csubwhere = !empty($subwhere)?count($subwhere):0; + $tmp = ''; + for ($j = 0;$j < $csubwhere;$j++) { + $tmp.= ' AND ' . $subwhere[$j]; + } + + if ($more_data1 == 1){ + $where = "v.artikel='$id' " . $tmp; + } + else{ + $where = "v.artikel='$id' AND v.geloescht='0' AND (v.gueltig_bis>NOW() OR v.gueltig_bis='0000-00-00') " . $tmp; + } + + + + // gesamt anzahl + $count = "SELECT COUNT(v.id) FROM verkaufspreise v WHERE $where"; + break; + case 'einkaufspreise': + $id = (int)$this->app->Secure->GetGET('id'); + $allowed['artikel'] = array('einkauf'); + $this->app->Tpl->Add('JQUERYREADY', "$('#alteeinkaufspreise').click( function() { fnFilterColumn1( 0 ); } );"); + $defaultorder = 4; //Optional wenn andere Reihenfolge gewuenscht + + $defaultorderdesc = 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 + $heading = array('Lieferant', 'Bezeichnung', 'Bestellnummer', 'ab', 'VPE', 'Preis', 'Währung', 'bis', 'Rahmenvert.', 'Menü'); + $width = array('35%', '20%', '3%', '3%', '1%', '1%', '1%', '1%', '10%', '10%'); + $findcols = array('adr.name', 'bezeichnunglieferant', 'bestellnummer', 'ab_menge', 'vpe', 'preis', 'e.waehrung', 'e.gueltig_bis', "if(e.rahmenvertrag='1',CONCAT(e.rahmenvertrag_menge,' / ',IFNULL((SELECT trim(SUM(bp.menge)) FROM bestellung b LEFT JOIN bestellung_position bp ON bp.bestellung=b.id WHERE b.datum >=e.rahmenvertrag_von AND b.datum <= e.rahmenvertrag_bis AND b.status!='storniert' AND e.adresse=b.adresse AND bp.artikel=e.artikel),0)),'-')", 'id'); + $searchsql = array('adr.name', 'e.bezeichnunglieferant', 'e.bestellnummer', 'e.ab_menge', 'e.vpe', $this->app->YUI->FormatPreis('e.preis'), 'e.waehrung', "DATE_FORMAT(e.gueltig_bis,'%d.%m.%Y')", "if(e.rahmenvertrag='1',CONCAT(e.rahmenvertrag_menge,' / ',IFNULL((SELECT trim(SUM(bp.menge)) FROM bestellung b LEFT JOIN bestellung_position bp ON bp.bestellung=b.id WHERE b.datum >=e.rahmenvertrag_von AND b.datum <= e.rahmenvertrag_bis AND b.status!='storniert' AND e.adresse=b.adresse AND bp.artikel=e.artikel),0)),'-')"); + + $menu = ''; + //$menu = ""; + $menu .= "app->Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\">"; + $menu .= '" . " '; + $menu .= ""; + $menu .= "app->Conf->WFconf['defaulttheme']}/images/disable.png\" border=\"0\">"; + $menu .= '" . " '; + $menu .= ""; + $menu .= "app->Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\">"; + $menu .= '" . " '; + $menu .= ""; + $menu .= "app->Conf->WFconf['defaulttheme']}/images/copy.svg\" border=\"0\">"; + $menu .= ''; + + // SQL statement + + $datecols = array(7); + $numbercols = array(5); + + $alignright=array(4,5,6,7,8,9); + + $sql = "SELECT SQL_CALC_FOUND_ROWS e.id, CONCAT('',adr.name,'') as lieferant, e.bezeichnunglieferant, e.bestellnummer, + ".$this->app->erp->FormatMenge('e.ab_menge')." as ab_menge ,e.vpe as vpe, ".$this->app->YUI->FormatPreis('e.preis')." as preis,e.waehrung as waehrung, if(e.gueltig_bis='0000-00-00','-',DATE_FORMAT(e.gueltig_bis, '%d.%m.%Y')) as gueltig_bis, + if(e.rahmenvertrag='1',CONCAT(e.rahmenvertrag_menge,' / ',IFNULL((SELECT trim(SUM(bp.menge)) FROM bestellung b LEFT JOIN bestellung_position bp ON bp.bestellung=b.id WHERE b.datum >=e.rahmenvertrag_von AND b.datum <= e.rahmenvertrag_bis AND b.status!='storniert' AND e.adresse=b.adresse AND bp.artikel=e.artikel),0)),'-') as rahmenvertrag, e.id as menu + FROM einkaufspreise e LEFT JOIN projekt p ON p.id=e.projekt LEFT JOIN adresse adr ON e.adresse=adr.id "; + + $more_data1 = $this->app->Secure->GetGET('more_data1'); + // if($tmp!="")$tmp .= " AND e.geloescht='1' "; + + // Fester filter + + + if ($more_data1 == 1){ + $where = "e.artikel='$id' AND e.geloescht='0' "; + } + else{ + $where = "e.artikel='$id' AND e.geloescht='0' AND (e.gueltig_bis>NOW() OR e.gueltig_bis='0000-00-00') "; + } + + // Fester filter + // $where = "e.artikel='$id' AND e.geloescht='0' "; + + + // gesamt anzahl + + $count = "SELECT COUNT(e.id) FROM einkaufspreise e WHERE $where"; + break; + case 'lagerbewegungartikel': + $id = (int)$this->app->Secure->GetGET('id'); + $allowed['artikel'] = array('lager'); + + $heading = array('Datum', 'Lager', 'Menge', 'VPE', 'Richtung', 'Referenz', 'Bearbeiter', 'Projekt', 'Inventur','Menü'); + $width = array('1%', '5%', '5%', '5%', '5%', '40%', '20%', '5%','10%', '1%'); + $findcols = array('lpi.zeit', 'lp.kurzbezeichnung', 'lpi.menge', 'vpe', "if(lpi.eingang,'Eingang','Ausgang')", 'referenz', 'lpi.bearbeiter', 'p.abkuerzung', 'zeitstempel','id'); + $searchsql = array('DATE_FORMAT(lpi.zeit,\'%d.%m.%Y\')', 'lp.kurzbezeichnung', 'lpi.menge', 'vpe', "if(lpi.eingang,'Eingang','Ausgang')", 'lpi.referenz', 'lpi.bearbeiter', 'p.abkuerzung'); + $defaultorder = 10; //Optional wenn andere Reihenfolge gewuenscht + $alignright = array(3); + $defaultorderdesc = 1; + $menu = '-'; + + $datecols = array(0); + + //$menu = "
"; + + //app->Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\" > + + + // $menucol=3; + /* + + SELECT DATE_FORMAT(lpi.zeit,'%d.%m.%Y') as datum, lp.kurzbezeichnung as lager, lpi.menge as menge, lpi.vpe as VPE, if(lpi.eingang,'Eingang','Ausgang') as Richtung, substring(lpi.referenz,1,60) as referenz, lpi.bearbeiter as bearbeiter, p.abkuerzung as projekt, + lpi.id FROM lager_bewegung lpi LEFT JOIN lager_platz as lp ON lpi.lager_platz=lp.id LEFT JOIN projekt p ON lpi.projekt=p.id WHERE lpi.artikel='$id' order by lpi.zeit DESC*/ + + // SQL statement + + if($this->app->erp->GetKonfiguration('artikel_lager_bestandsanzeige')=='1') + { + $sql = "SELECT SQL_CALC_FOUND_ROWS lpi.id, + DATE_FORMAT(lpi.zeit,'%d.%m.%Y') as datum, lp.kurzbezeichnung as lager, + ".$this->app->erp->FormatMenge('lpi.menge')." as menge, + lpi.vpe as VPE, if(lpi.eingang,'Eingang','Ausgang') as Richtung, + CONCAT( + lpi.referenz, + if( + lpi.bestand >= 0 AND DATE_FORMAT(lpi.zeit,'%Y-%m-%d') >='2015-06-07' , + CONCAT( + ' (Neuer Bestand: ', + ".$this->app->erp->FormatMenge('lpi.bestand').", + ')' + ), + '' + ), + IF(art.mindesthaltbarkeitsdatum = 1, + CONCAT('
', + IFNULL( + ( + SELECT CONCAT(IFNULL(mhddatum,''),' ',IFNULL(charge,'') ) + FROM mhd_log + WHERE artikel = art.id AND zeit >= lpi.zeit + ORDER BY id + LIMIT 1 + ),'' + ),'' + ), + IF( + art.chargenverwaltung > 0, + CONCAT('
', + IFNULL( + ( + SELECT IFNULL(bezeichnung,'') + FROM chargen_log + WHERE artikel = art.id AND zeit >= lpi.zeit + ORDER BY id + LIMIT 1 + ), + '' + ),'' + ), + '' + ) + ) + ) as referenz, + lpi.bearbeiter as bearbeiter, p.abkuerzung as projekt, + DATE_FORMAT(api.zeitstempel,'%d.%m.%Y'), + lpi.id + FROM lager_bewegung AS lpi + INNER JOIN `artikel` AS `art` ON lpi.artikel = art.id + LEFT JOIN lager_platz as lp ON lpi.lager_platz=lp.id + LEFT JOIN projekt p ON lpi.projekt=p.id + LEFT JOIN artikel_permanenteinventur api ON api.id=lpi.permanenteinventur"; + } else { + $sql = "SELECT SQL_CALC_FOUND_ROWS lpi.id, + DATE_FORMAT(lpi.zeit,'%d.%m.%Y') as datum, lp.kurzbezeichnung as lager, + ".$this->app->erp->FormatMenge("lpi.menge")." as menge, + lpi.vpe as VPE, if(lpi.eingang,'Eingang','Ausgang') as Richtung, + CONCAT( + lpi.referenz, + IF(art.mindesthaltbarkeitsdatum = 1, + CONCAT('
', + IFNULL( + ( + SELECT CONCAT(IFNULL(mhddatum,''),' ',IFNULL(charge,'') ) + FROM mhd_log + WHERE artikel = art.id AND zeit >= lpi.zeit + ORDER BY id + LIMIT 1 + ),'' + ),'' + ), + IF( + art.chargenverwaltung > 0, + CONCAT('
', + IFNULL( + ( + SELECT IFNULL(bezeichnung,'') + FROM chargen_log + WHERE artikel = art.id AND zeit >= lpi.zeit + ORDER BY id + LIMIT 1 + ), + '' + ),'' + ), + '') + ) + ) as referenz, lpi.bearbeiter as bearbeiter, + p.abkuerzung as projekt, DATE_FORMAT(api.zeitstempel,'%d.%m.%Y'), + lpi.id + FROM lager_bewegung lpi + INNER JOIN `artikel` AS `art` ON lpi.artikel = art.id + LEFT JOIN lager_platz as lp ON lpi.lager_platz=lp.id + LEFT JOIN projekt p ON lpi.projekt=p.id + LEFT JOIN artikel_permanenteinventur api ON api.id=lpi.permanenteinventur"; + + } + // Fester filter + $where = " lpi.artikel='$id' "; + + // gesamt anzahl + $count = "SELECT COUNT(lpi.id) FROM lager_bewegung lpi LEFT JOIN lager_platz as lp ON lpi.lager_platz=lp.id LEFT JOIN projekt p ON lpi.projekt=p.id WHERE lpi.artikel='$id'"; + break; + case 'stueckliste': + $id = (int)$this->app->Secure->GetGET('id'); + $allowed['artikel'] = array('stueckliste'); + $defaultorder = 7; + + // headings + $heading = array('Artikel', 'Nummer','Menge', 'Einheit', 'Lager', 'Reserviert', 'Menü'); + $width = array('50%', '10%', '5%', '5%','5%', '5%', '9%'); + $findcols = array('a.name_de', 'a.nummer', 's.menge','a.einheit', + 'lag.menge', 'CASE WHEN (SELECT SUM(lr.menge) FROM lager_reserviert lr WHERE lr.artikel=a.id) > 0 + THEN (SELECT SUM(lr.menge) FROM lager_reserviert lr WHERE lr.artikel=a.id) + ELSE 0 + END','id'); + $searchsql = array('a.name_de', 'a.nummer','a.einheit', 's.menge','s.art',"CONCAT(IF(s.art='' OR s.art='et','Einkaufsteil',''),IF(s.art='it','Informationsteil/Dienstleistung',''),IF(s.art='bt','Beistellung',''))"); + + $menu = ""; + $menu .= ""; + $menu .= ""; + $menu .= ""; + $menu .= "
"; + $menu .= ''; + //$menu = ""; + $menu .= "app->Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\">"; + $menu .= '' . ' '; + $menu .= ""; + $menu .= "app->Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\">"; + $menu .= '' . ' '; + $menu .= "
"; + + $alignright = array(3,5,6); + // SQL statement + $sql = "SELECT SQL_CALC_FOUND_ROWS s.id, + CONCAT('',a.name_de,' ', + IF(s.art='it','
- Informationsteil/Dienstleistung',''),IF(s.art='bt','
- Beistellung',''), COALESCE((SELECT GROUP_CONCAT('
- ', art.nummer, ' ', art.name_de, ' (', alt.reason, ')', '' SEPARATOR '') FROM parts_list_alternative AS alt INNER JOIN artikel AS art ON art.id = alt.alternative_article_id WHERE alt.parts_list_id = s.id), '')) as artikel, + CONCAT('',a.nummer,'') as nummer, + ".$this->app->erp->FormatMenge('s.menge').' as menge, a.einheit, + + '.$this->app->erp->FormatMenge('ifnull(lag.menge,0)').' as lager, + + CASE WHEN (SELECT SUM(lr.menge) FROM lager_reserviert lr WHERE lr.artikel=a.id) > 0 + THEN (SELECT '.$this->app->erp->FormatMenge('SUM(lr.menge)')." FROM lager_reserviert lr WHERE lr.artikel=a.id) + ELSE 0 + END as reserviert, + + s.id as menu + FROM stueckliste s + INNER JOIN artikel a ON s.artikel=a.id + LEFT JOIN (SELECT sum(lpi.menge) as menge ,lpi.artikel + FROM lager_platz_inhalt AS lpi + INNER JOIN ( + SELECT artikel + FROM stueckliste + WHERE stuecklistevonartikel='$id' GROUP BY artikel + ) AS s2 ON lpi.artikel = s2.artikel + INNER JOIN lager_platz AS lp ON lpi.lager_platz = lp.id AND ifnull(lp.sperrlager,0) = 0 + GROUP BY lpi.artikel) AS lag ON a.id = lag.artikel + "; + + // Fester filter + $where = "s.stuecklistevonartikel='$id' "; + + // gesamt anzahl + $count = "SELECT COUNT(s.id) FROM stueckliste s WHERE s.stuecklistevonartikel='$id' "; + break; + + case 'parts_list_alternatives': + $allowed['artikel'] = array('stueckliste'); + + $heading = array('Nummer','Artikel','Menü'); + $width = array('40%','50%','5%'); + + $findcols = array('a.nummer', 'a.name_de', 'p.id'); + $searchsql = array('a.nummer', 'a.name_de'); + + $id = $app->Secure->GetGET('more_data1'); + + $menu = ""; + $menu .= ""; + $menu .= ""; + $menu .= ""; + $menu .= "
"; + $menu .= ''; + $menu .= "app->Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\">"; + $menu .= ' '; + $menu .= ''; + $menu .= "app->Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\">"; + $menu .= ''; + $menu .= "
"; + + $sql = "SELECT SQL_CALC_FOUND_ROWS p.id, a.nummer, CONCAT(a.name_de, IF(p.reason != '', CONCAT('
- Grund: ',p.reason,''),'')), p.id + FROM parts_list_alternative p + LEFT JOIN stueckliste s ON p.parts_list_id = s.id + LEFT JOIN artikel a ON p.alternative_article_id = a.id"; + + $where = " s.id = '$id'"; + + break; + + case 'artikel_onlineshops': + $id = $this->app->Secure->GetGET('id'); + $disablebuttons=true; + $allowed['artikel'] = array('edit'); + $heading = array('Shop','aktiv','Menü'); + $width = array('50%','10%','1%'); + $findcols = array('ao.id','s.bezeichnung',"if(ao.aktiv = 1, 'ja','-')",'ao.id'); + $searchsql = array('s.bezeichnung',"if(ao.aktiv = 1, 'ja','-')"); + $sql = "SELECT SQL_CALC_FOUND_ROWS ao.id, concat(s.bezeichnung,'',ao.shop,''), if(ao.aktiv = 1, 'ja','-'), ao.id + FROM artikel_onlineshops ao + INNER JOIN shopexport s ON ao.shop = s.id AND ao.artikel = '$id' + "; + //$menu = "
 %value%app->Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\"> app->Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\">
"; + $menu = '
'. + "app->Conf->WFconf['defaulttheme']}/images/forward.svg\" border=\"0\" /> ". + "". + "app->Conf->WFconf['defaulttheme']}/images/back.svg\" border=\"0\" /> ". + "". + "%value%". + "". + "app->Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\"> ". + "app->Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\">". + '
'; + $where = ' ao.id > 0 '.$this->app->erp->ProjektRechte('s.projekt'); +; + $count = "select count(ao.id) FROM artikel_onlineshops ao INNER JOIN shopexport s ON ao.shop = s.id AND ao.artikel = '$id' WHERE $where"; + break; + case 'artikel_zertifikate': + $allowed['artikel'] = array('zertifikate'); + $id = (int)$this->app->Secure->GetGET('id'); + + $heading = array('Datum','Kunden-Nr','Kunde','Artikelnummer','Artikel','Menü'); + $width = array('5%','8%','8%','8%','15%','1%'); + $alignright = array(7); + $findcols = array('z.erstellt_datum','a.kundennummer','a.name','ar.nummer','ar.name_de','z.id'); + $searchsql = array('z.erstellt_datum','a.kundennummer','a.name','ar.nummer','ar.name_de','z.id'); + $menucol = 5; + $menu = "
app->Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\">
"; + $defaultorder = 0; + $defaultorderdesc = 1; + $sql = "SELECT SQL_CALC_FOUND_ROWS z.id, + date_format(z.erstellt_datum,'%d.%m.%Y'), + + a.kundennummer, + a.name, + ar.nummer, + ar.name_de, + z.id + from zertifikatgenerator z + inner join artikel ar on ar.id = z.artikel + left join adresse a on z.adresse_kunde = a.id + "; + $where = "z.artikel = '$id'"; + $count = "SELECT count(z.id) from zertifikatgenerator z where z.artikel = '$id'"; + break; + case 'artikeltabellebilder': + case 'artikeltabelle': + $begrenzen_artikeltabelle = $this->app->erp->Firmendaten('begrenzen_artikeltabelle'); + $bilder = false; + if($name === 'artikeltabellebilder'){ + $bilder = true; + } + $dark = $this->app->erp->Firmendaten('iconset_dunkel')?1:0; + $allowed['artikel'] = array('list'); + + $filterbaum = $this->app->erp->Firmendaten('artikel_baum_uebersicht')?$this->app->User->GetParameter('filterbaum_artikel'):null; + $baum = null; + if($filterbaum) + { + $this->app->erp->GetArtikelunterbaumids($filterbaum, $baum); + } + $baumids = null; + if($baum) + { + foreach($baum as $v) + { + $baumids[] = " kategorie = '$v' "; + } + } + + // headings + $artikel_beschleunigte_suche = $this->app->erp->Firmendaten('artikel_beschleunigte_suche'); + $useLpiCache = $artikel_beschleunigte_suche || $begrenzen_artikeltabelle; + + $heading = array(''); + $width = array('1%'); + $findcols = array('open'); + if($bilder) + { + $heading[] = 'Bild'; + $width[] = '5%'; + $findcols[] = 'bildvorschau'; + } + $heading = array_merge($heading, array('Nummer', 'Artikel')); + $width = array_merge($width, array('10%', '55%')); + $findcols = array_merge($findcols, array('nummer', 'name_de')); + if($this->app->erp->RechteVorhanden("multilevel","list") && $this->app->erp->Firmendaten("modul_mlm")=="1") + { + $mlm = true; + $heading[] = 'Provionspunkte'; + $width[] = '10%'; + $findcols[] = 'mlmpunkte'; + } + $heading = array_merge($heading, array('Lagerbestand', 'Projekt')); + $width = array_merge($width, array('5%', '15%')); + + //$lpicol = 'CAST((SELECT SUM(l.menge) FROM lager_platz_inhalt l WHERE l.artikel=a.id) as SIGNED)'; + $lpicol = '(SELECT TRIM(IFNULL(SUM(l.menge),0))+0 FROM lager_platz_inhalt l WHERE l.artikel=a.id)'; + $lpicol2 = $lpicol; + if($useLpiCache) { + $lpicol = '`cache`.lager_gesamt'; + $lpicol2 = 'trim(cache.lager_gesamt)+0'; + } + + $findcols = array_merge($findcols, array($lpicol, 'p.abkuerzung')); + $alignright = array(count($heading)-1); + $artikelzusatzfelder = $this->app->erp->getZusatzfelderArtikel(); + $artikelcachedfelder = $this->app->erp->getArtikelCachedfelder(); + $zusatzcols = null; + $joincached = ''; + $joineig = ''; + for($i = 1; $i <= 5; $i++) + { + $zusatzfeld = $this->app->erp->Firmendaten('artikeltabellezusatz'.$i); + if($zusatzfeld && isset($artikelzusatzfelder[$zusatzfeld])) + { + $heading[] = $artikelzusatzfelder[$zusatzfeld]; + $width[] = '10%'; + if(isset($artikelcachedfelder[$zusatzfeld])) + { + switch($artikelcachedfelder[$zusatzfeld]) + { + case 'Menge': + if($zusatzfeld === 'lager_verfuegbar') + { + $zusatzcols[] = 'if(a.lagerartikel=\'1\','.$this->app->erp->FormatMenge('cache.' . $zusatzfeld).',\'\')'; + }else{ + $zusatzcols[] = $this->app->erp->FormatMenge('cache.' . $zusatzfeld); + } + $findcols[] = 'cache.'.$zusatzfeld; + $alignright[] = count($findcols); + $numbercols[] = count($findcols) - 1; + break; + case 'Preis': + $findcols[] = 'ROUND(cache.'.$zusatzfeld.',2)'; + $zusatzcols[] = $this->app->erp->FormatPreis('cache.'.$zusatzfeld,2); + $alignright[] = count($findcols); + $numbercols[] = count($findcols) - 1; + break; + default: + $zusatzcols[] = 'cache.'.$zusatzfeld; + $findcols[] = 'cache.'.$zusatzfeld; + break; + } + $joincached = ' LEFT JOIN artikel_cached_fields `cache` ON a.id = `cache`.artikel '; + }else{ + switch($zusatzfeld) + { + case 'vk_netto': + case 'ek_netto': + case 'vk_brutto': + case 'ek_brutto': + case 'lager_verfuegbar': + $findcols[] = 'a.id'; + $zusatzcols[] = "''"; + break; + case 'eigenschaften': + /*$findcols[] = 'eig.value'; + $zusatzcols[] = 'eig.value'; + $joineig = " + LEFT JOIN ( + SELECT aew.artikel, + GROUP_CONCAT(DISTINCT concat(ae.name,': ',aew.wert) + ORDER BY ae.name SEPARATOR ', ') as value + FROM artikeleigenschaftenwerte aew + INNER JOIN artikeleigenschaften ae ON aew.artikeleigenschaften = ae.id AND ifnull(ae.geloescht,0) = 0 AND ae.name != '' + GROUP BY aew.artikel + ) eig ON a.id = eig.artikel + ";*/ + break; + case 'inproduktion': + + "(SELECT SUM(pos.menge) + FROM produktion_position pos + WHERE pos.status = 'gestartet' AND (pos.explodiert=1 or pos.id>0) + GROUP BY pos.artikel + ORDER BY pos.sort, pos.id + LIMIT 1)"; + + break; + default: + $findcols[] = 'a.'.$zusatzfeld; + $zusatzcols[] = 'a.'.$zusatzfeld; + break; + } + } + } + } + $useCacheEkNumbers = false; + if($useLpiCache) { + $joincached = ' LEFT JOIN artikel_cached_fields `cache` ON a.id = cache.artikel '; + $this->app->DB->Select("SELECT ek_customnumber FROM artikel_cached_fields LIMIT 1"); + if(!$this->app->DB->error()) { + $useCacheEkNumbers = true; + } + } + + $heading[] = 'Menü'; + $width[] = '1%'; + $findcols[] = 'a.id'; + $menucol = count($heading) - 1; + + /* + $heading = array('', 'Bild', 'Nummer', 'Artikel', 'Lagerbestand', 'Projekt', 'Menü'); + $width = array('1%', '5%', '10%', '55%', '5%', '15%', '10%'); + $findcols = array('open', 'bildvorschau','nummer', 'name_de', 'CAST((SELECT SUM(l.menge) FROM lager_platz_inhalt l WHERE l.artikel=a.id) as SIGNED)', 'p.abkuerzung', 'id'); + $menucol = 6; + $defaultorder = 7; //Optional wenn andere Reihenfolge gewuenscht + $mlm = false; + $alignright = array(5); + if($this->app->erp->RechteVorhanden("multilevel","list") && $this->app->erp->Firmendaten("modul_mlm")=="1") + { + $mlm = true; + $heading = array('', 'Bild', 'Nummer', 'Artikel','Provionspunkte', 'Lagerbestand', 'Projekt', 'Menü'); + $width = array('1%', '5%', '10%', '45%','10%', '5%', '15%', '10%'); + $findcols = array('open', 'bildvorschau','nummer', 'name_de','mlmpunkte', 'CAST((SELECT SUM(l.menge) FROM lager_platz_inhalt l WHERE l.artikel=a.id) as SIGNED)', 'p.abkuerzung', 'id'); + $menucol = 7; + $defaultorder = 8; + $alignright = array(6); + }*/ + $this->app->Tpl->Add('JQUERYREADY', "$('#f_lagerartikel').click( function() { fnFilterColumn1( 0 ); } );"); + $this->app->Tpl->Add('JQUERYREADY', "$('#f_keinlagerartikel').click( function() { fnFilterColumn2( 0 ); } );"); + $this->app->Tpl->Add('JQUERYREADY', "$('#f_variante').click( function() { fnFilterColumn3( 0 ); } );"); + $this->app->Tpl->Add('JQUERYREADY', "$('#f_stueckliste').click( function() { fnFilterColumn4( 0 ); } );"); + $this->app->Tpl->Add('JQUERYREADY', "$('#f_keinestueckliste').click( function() { fnFilterColumn5( 0 ); } );"); + $this->app->Tpl->Add('JQUERYREADY', "$('#f_gesperrt').click( function() { fnFilterColumn6( 0 ); } );"); + $this->app->Tpl->Add('JQUERYREADY', "$('#f_variantekeine').click( function() { fnFilterColumn7( 0 ); } );"); + $this->app->Tpl->Add('JQUERYREADY', "$('#f_alleartikel').click( function() { fnFilterColumn8( 0 ); } );"); + $this->app->Tpl->Add('JQUERYREADY', "$('#f_nurlagerndeartikel').click( function() { fnFilterColumn9( 0 ); } );"); + for ($r = 1;$r <= 9;$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 + ); + } + '); + } + + // START EXTRA more + $more_data1 = $this->app->Secure->GetGET('more_data1'); + $more_data2 = $this->app->Secure->GetGET('more_data2'); + $more_data3 = $this->app->Secure->GetGET('more_data3'); + $more_data4 = $this->app->Secure->GetGET('more_data4'); + $more_data5 = $this->app->Secure->GetGET('more_data5'); + $more_data6 = $this->app->Secure->GetGET('more_data6'); + $more_data7 = $this->app->Secure->GetGET('more_data7'); + $more_data8 = $this->app->Secure->GetGET('more_data8'); + $more_data9 = $this->app->Secure->GetGET('more_data9'); + + if ($this->app->erp->Firmendaten('iconset_dunkel')) { + $str = ''; + } else { + $str = ''; + } + $loading = ''; + + $defaultorderdesc = 1; + $isArticleDescriptionSearchEnabled = $this->app->erp->Firmendaten('artikel_suche_kurztext') == '1'; + if ($isArticleDescriptionSearchEnabled) { + $searchsql = array('a.nummer','a.name_de','p.abkuerzung','a.kurztext_de', 'a.hersteller', 'a.herstellernummer', 'a.ean', 'a.anabregs_text'); + } else { + $searchsql = array('a.nummer','a.name_de','p.abkuerzung', 'a.hersteller', 'a.herstellernummer', 'a.ean'); + } + if($this->app->erp->Firmendaten('artikel_suche_variante_von') == '1'){ + $searchsql[] = '(SELECT tmp.nummer FROM artikel tmp WHERE a.variante_von=tmp.id LIMIT 1)'; + } + + if($this->app->erp->Firmendaten('artikel_freitext1_suche')){ + $searchsql[] = 'a.freifeld1'; + } + if($this->app->erp->Firmendaten('artikel_freitext1_suche')){ + $searchsql[] = 'a.freifeld2'; + } + $menu = ""; + $menu .= ""; + $menu .= ""; + $menu .= ""; + $menu .= ""; + $menu .= ""; + $menu .= ""; + $menu .= "
"; + $menu .= ""; + $menu .= "app->Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\">"; + $menu .= ""; + $menu .= ""; + $menu .= ""; + $menu .= "app->Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\">"; + $menu .= ""; + $menu .= ""; + $menu .= ""; + $menu .= "app->Conf->WFconf['defaulttheme']}/images/copy.svg\" border=\"0\">"; + $menu .= ""; + $menu .= ""; + $menu .= ""; + $menu .= ""; + $menu .= ""; + $menu .= "
"; + + if($artikel_beschleunigte_suche && $isArticleDescriptionSearchEnabled){ + $searchsql = ['a.nummer','a.name_de','a.ean', 'a.anabregs_text']; + } + elseif($artikel_beschleunigte_suche) { + $searchsql = ['a.nummer','a.name_de','a.ean']; + } + // SQL statement + $sql = "SELECT + a.id, + 'app->Conf->WFconf['defaulttheme']}/images/details_open.png class=details>' as open, + "; + + if($bilder) { + if(!function_exists('imagejpeg')) { + $sql .= "'app->Conf->WFconf['defaulttheme']}/images/icon_img_error.png title=\"Keine GD-Erweiterung installiert\" />' as bild,"; + } + else{ + $sql .=" + IF( + a.bildvorschau = 'KEINBILD', + '$str', + CONCAT( + ' '','',' tocheck'),'\" src=\"index.php?module=artikel&action=thumbnail&id=', + a.id, + '&projectid=',IFNULL(a.projekt,0),'&dark=" + .$dark."&bildvorschau=',a.bildvorschau,'\" style=\"max-width:50px;max-height:50px;\">' + ) + ) as bild,"; + } + } + + $parameter = $this->app->User->GetParameter('table_filter_artikel'); + $parameter = base64_decode($parameter); + $parameter = json_decode($parameter, true); + + $joins = ''; + for($i = 1; $i <= 3; $i++) { + if((isset($parameter['eigenschaftname'.$i]) && $parameter['eigenschaftname'.$i] !== '') + || (isset($parameter['eigenschaftwert'.$i]) && $parameter['eigenschaftwert'.$i] !== '') + ) { + $joins .= ' INNER JOIN artikeleigenschaftenwerte aw'.$i.' ON a.id = aw'.$i.'.artikel + INNER JOIN artikeleigenschaften ae'.$i.' ON ae'.$i.'.id = aw'.$i.'.artikeleigenschaften AND (ae1.geloescht = 0 OR isnull(ae'.$i.".geloescht)) + "; + if(isset($parameter['eigenschaftname'.$i]) && $parameter['eigenschaftname'.$i] !== ''){ + $paramsArray[] = 'ae'.$i.".name LIKE '".$parameter['eigenschaftname'.$i]."' "; + } + if(isset($parameter['eigenschaftwert'.$i]) && $parameter['eigenschaftwert'.$i] !== ''){ + $paramsArray[] = 'aw'.$i.".wert LIKE '".$parameter['eigenschaftwert'.$i]."' "; + } + } + } + + $joins .= $joincached; + $joins .= $joineig; + + if($more_data9 == 1){ + $joins .= ' INNER JOIN (SELECT artikel, SUM(menge) AS menge FROM lager_platz_inhalt WHERE menge>0 GROUP BY artikel) AS lpi ON lpi.artikel = a.id'; + } + + $sql .= " + a.nummer as nummer, + CONCAT( + IF(a.intern_gesperrt,'',''), + name_de, + IF(a.variante AND a.variante_von > 0,CONCAT(' (Variante von ',IFNULL((SELECT tmp.nummer FROM artikel tmp WHERE a.variante_von=tmp.id LIMIT 1),''),')'),''), + IF(a.intern_gesperrt,'','') + ) AS name_de, + ".(!empty($mlm)?" a.mlmpunkte, ":'')." + if(a.lagerartikel=1,$lpicol2,'') as lagerbestand, + p.abkuerzung as projekt, "; + if($zusatzcols) { + $sql .= implode(', ', $zusatzcols).', '; + foreach($zusatzcols as $v) { + if(!in_array($v, $searchsql)){ + $searchsql[] = $v; + } + } + } + + $sql .= ' a.id as menu + FROM artikel a + '; + if($baumids) { + $sql .= ' LEFT JOIN (SELECT artikel FROM `artikelbaum_artikel` WHERE ('.implode(' OR ', $baumids).") GROUP BY artikel) aa ON a.id = aa.artikel "; + } + + $sql .= "LEFT JOIN projekt p ON p.id=a.projekt $joins "; + + + // fester filter + + //if(a.variante,CONCAT('Variante von ',(SELECT tmp.nummer FROM artikel tmp WHERE a.variante_von=tmp.id LIMIT 1),': ',a.name_de),a.name_de) + + //$where = "a.geloescht=0 ".$this->app->erp->ProjektRechte(); + $where = 'a.geloescht=0 ' . $this->app->erp->ProjektRechte('a.projekt'); + $fastcount = " SELECT count(a.id) FROM artikel a LEFT JOIN projekt p ON p.id=a.projekt $joins "; + $extracountjoin = ''; + if($baumids) + { + $extracountjoin = ' LEFT JOIN (SELECT artikel FROM `artikelbaum_artikel` WHERE ('.implode(' OR ', $baumids).") GROUP BY artikel) aa ON a.id = aa.artikel "; + + $fastcount .= $extracountjoin; + $where .= " AND ( NOT isnull(aa.artikel) OR a.typ = '".$filterbaum."_kat' ) "; + } + + + + /* STAMMDATEN */ + if(isset($parameter['name']) && !empty($parameter['name'])) { + $paramsArray[] = "a.name_de LIKE '%".$parameter['name']."%' "; + } + + if(isset($parameter['nummer']) && !empty($parameter['nummer'])) { + $paramsArray[] = "a.nummer LIKE '%".$parameter['nummer']."%' "; + } + + if(isset($parameter['hersteller']) && !empty($parameter['hersteller'])) { + $paramsArray[] = "a.hersteller LIKE '%".$parameter['hersteller']."%' "; + } + + if($more_data1 == 1 || ($more_data1 != 1 && !empty($parameter['lagerartikel']))) { + $paramsArray[] = 'a.lagerartikel = 1 '; + } + + if($more_data2 == 1) + { + $paramsArray[] = 'a.lagerartikel <> 1 '; + } + + if(!empty($parameter['variante']) || $more_data3 == 1) { + $paramsArray[] = 'a.variante = 1 '; + } + + if($more_data7 == 1) { + $paramsArray[] = ' (a.variante <> 1 OR isnull(a.variante)) '; + } + + + + if(isset($parameter['freigabenotwending']) && !empty($parameter['freigabenotwending'])) { + $paramsArray[] = 'a.freigabenotwendig = 1 '; + } + + if(isset($parameter['abverkauf']) && !empty($parameter['abverkauf'])) { + $paramsArray[] = 'a.restmenge > 0 '; + } + + + if(isset($parameter['standardlieferant']) && !empty($parameter['standardlieferant'])) { + if(isset($parameter['standardlieferant']) && !empty($parameter['standardlieferant'])) { + $lieferant = $this->app->DB->Select(' + SELECT + id + FROM + adresse + WHERE + lieferantennummer = "' . reset(explode(' ',trim($parameter['standardlieferant']))) . '" AND geloescht = 0 LIMIT 1 + '); + + $paramsArray[] = "a.adresse = '" . $lieferant . "'"; + } + } + + if($more_data4 == 1 || !empty($parameter['stueckliste'])) { + $paramsArray[] = 'a.stueckliste > 0 '; + } + + if($more_data5 == 1) + { + $paramsArray[] = 'a.stueckliste = 0 '; + } + + if(isset($parameter['justintimestueckliste']) && !empty($parameter['justintimestueckliste'])) { + $paramsArray[] = 'a.juststueckliste > 0 '; + } + + if(isset($parameter['inventursperre']) && !empty($parameter['inventursperre'])) { + $paramsArray[] = 'a.inventursperre > 0 '; + } + + + if(!empty($parameter['gesperrt']) || $more_data6 == 1) { + $paramsArray[] = '(a.intern_gesperrt > 0) '; + }else{ + $paramsArray[] = '(a.intern_gesperrt = 0) '; + } + + if(empty($parameter['unikat'])) { + $paramsArray[] = '(a.unikat = 0) '; + } + + if(isset($parameter['projekt']) && !empty($parameter['projekt'])) { + + $projektData = $this->app->DB->SelectRow(' + SELECT + * + FROM + projekt + WHERE + abkuerzung LIKE "' . $parameter['projekt'] . '" + '); + $paramsArray[] = "a.projekt = '".$projektData['id']."' "; + } + + if(isset($parameter['freifeld1']) && !empty($parameter['freifeld1'])) { + $paramsArray[] = "a.freifeld1 LIKE '%".$parameter['freifeld1']."%' "; + } + + if(isset($parameter['internebemerkung']) && !empty($parameter['internebemerkung'])) { + $paramsArray[] = "a.internerkommentar LIKE '%".$parameter['internebemerkung']."%' "; + } + + if(isset($parameter['ean']) && !empty($parameter['ean'])) { + $paramsArray[] = "a.ean LIKE '%" . $parameter['ean'] . "%' "; + } + + if(isset($parameter['shop']) && !empty($parameter['shop'])) { + $shop = explode(' ', $parameter['shop']); + $shop = (int)reset($shop); + $paramsArray[] = " ((a.shop = '" . $shop . "' OR a.shop2 = '" . $shop . "' OR a.shop3 = '" . $shop . "') OR a.id IN (SELECT artikel FROM artikel_onlineshops WHERE shop = '" . $shop . "')) "; + } + + if(isset($parameter['herstellernummer']) && !empty($parameter['herstellernummer'])) { + $paramsArray[] = "a.herstellernummer LIKE '%" . $parameter['herstellernummer'] . "%' "; + } + + if(isset($parameter['typ']) && !empty($parameter['typ'])) { + + $artikelkategorie = explode(" ", $parameter['typ']); + $artikelkategorieid = $artikelkategorie[0]; + $artikelkategorieid = $app->DB->Select("SELECT id FROM artikelkategorien WHERE id = '$artikelkategorieid' LIMIT 1"); + if($artikelkategorieid != ''){ + $artikelkategorie = $artikelkategorieid; + }else{ + $artikelkategorie = 0; + } + + if($artikelkategorie > 0){ + $joinartikelbaum = ' LEFT JOIN artikelbaum_artikel aba ON a.id = aba.artikel'; + $sql .= $joinartikelbaum; + $groupby = ' GROUP BY a.id '; + } + + } + + if ($paramsArray) { + $where .= ' AND ' . implode(' AND ', $paramsArray); + } + + if($more_data8){ + $where = 'a.geloescht=0 ' . $this->app->erp->ProjektRechte(); + } + + + $moreinfo = true; + $count = "SELECT COUNT(DISTINCT a.id) FROM artikel a $joins"; + $extrawhere = ''; + + if($baumids) + { + $count .= ' LEFT JOIN (SELECT artikel FROM `artikelbaum_artikel` WHERE ('.implode(' OR ', $baumids).') GROUP BY artikel) aa ON a.id = aa.artikel '; + $extrawhere = " AND ( NOT isnull(aa.artikel) OR a.typ = '".$filterbaum."_kat' ) "; + } + + + if($artikelkategorie > 0){ + $count .= $joinartikelbaum; + $where .= " AND (aba.kategorie = '$artikelkategorie' OR a.typ = '".$artikelkategorie."_kat') "; + $extrawhere .= " AND (aba.kategorie = '$artikelkategorie' OR a.typ = '".$artikelkategorie."_kat') "; + $fastcount .= $joinartikelbaum; + } + + + if($this->app->erp->Firmendaten('artikel_artikelnummer_suche') == '1'){ + + /*$maxEinkauf = $this->app->DB->Select( + "SELECT MAX(ct) as mx FROM( + SELECT artikel, COUNT(bestellnummer) as ct FROM einkaufspreise + WHERE bestellnummer IS NOT NULL + AND bestellnummer !='' + GROUP BY artikel + ) as data"); + + $maxVerkauf = $this->app->DB->Select( + "SELECT MAX(ct) as mx FROM( + SELECT artikel, COUNT(kundenartikelnummer) as ct FROM verkaufspreise + WHERE kundenartikelnummer IS NOT NULL + AND kundenartikelnummer !='' + GROUP BY artikel + ) as data"); + + for($i=0;$i<$maxEinkauf;$i++){ + $searchsql[] = '(SELECT bestellnummer FROM einkaufspreise e WHERE e.artikel=a.id AND bestellnummer != "" LIMIT '.$i.',1)'; + } + + for($i=0;$i<$maxVerkauf;$i++){ + $searchsql[] = '(SELECT kundenartikelnummer FROM verkaufspreise v WHERE v.artikel=a.id AND kundenartikelnummer != "" LIMIT '.$i.',1)'; + }*/ + + if($useCacheEkNumbers){ + $searchsql[] = 'cache.ek_customnumber'; + $searchsql[] = 'cache.vk_customnumber'; + } + else{ + $sql .= " LEFT JOIN einkaufspreise AS ekpr ON a.id = ekpr.artikel AND IFNULL(ekpr.bestellnummer,'') <> '' + AND (IFNULL(ekpr.gueltig_bis,'0000-00-00')='0000-00-00' OR ekpr.gueltig_bis >= CURDATE()) "; + $sql .= " LEFT JOIN verkaufspreise AS vkpr ON a.id = vkpr.artikel AND IFNULL(vkpr.kundenartikelnummer,'') <> '' + AND (IFNULL(vkpr.gueltig_bis,'0000-00-00')='0000-00-00' OR vkpr.gueltig_bis >= CURDATE())"; + + $count .= " LEFT JOIN einkaufspreise AS ekpr ON a.id = ekpr.artikel AND IFNULL(ekpr.bestellnummer,'') <> '' + AND (IFNULL(ekpr.gueltig_bis,'0000-00-00')='0000-00-00' OR ekpr.gueltig_bis >= CURDATE()) "; + + $count .= " LEFT JOIN verkaufspreise AS vkpr ON a.id = vkpr.artikel AND IFNULL(vkpr.kundenartikelnummer,'') <> '' + AND (IFNULL(vkpr.gueltig_bis,'0000-00-00')='0000-00-00' OR vkpr.gueltig_bis >= CURDATE())"; + + $fastcount .=" LEFT JOIN einkaufspreise AS ekpr ON a.id = ekpr.artikel AND IFNULL(ekpr.bestellnummer,'') <> '' + AND (IFNULL(ekpr.gueltig_bis,'0000-00-00')='0000-00-00' OR ekpr.gueltig_bis >= CURDATE()) "; + + $fastcount .= " LEFT JOIN verkaufspreise AS vkpr ON a.id = vkpr.artikel AND IFNULL(vkpr.kundenartikelnummer,'') <> '' + AND (IFNULL(vkpr.gueltig_bis,'0000-00-00')='0000-00-00' OR vkpr.gueltig_bis >= CURDATE())"; + $searchsql[] = " IFNULL(ekpr.bestellnummer,'') "; + $searchsql[] = " IFNULL(vkpr.kundenartikelnummer,'') "; + $groupby = ' GROUP BY a.id '; + if(!empty($joincached)){ + $groupby .= ' ,cache.id '; + } + } + } + else { + $groupby = ''; + } + + $count .= " WHERE a.geloescht=0 $extrawhere " . $this->app->erp->ProjektRechte('a.projekt'); + $cached_count = 'SELECT COUNT(id) FROM artikel WHERE geloescht = 0 AND intern_gesperrt <> 1 '.$this->app->erp->ProjektRechte('projekt'); + break; + case 'artikel_offenebestellungen': + $id = (int)$this->app->Secure->GetGET('id'); + $heading = array('Datum', 'Bestellung Nr.', 'Nummer', 'Menge', 'Geliefert', 'VPE','Einzelpreis','Gesamtpreis','Lieferant', 'Name', 'Lieferdatum', 'Status Bestellung', 'Menü'); + $width = array('10%', '10%', '10%', '10%', '10%', '10%', '10%', '10%', '10%','10%','10%', '10%', '1%'); + $findcols = array('b.datum', 'b.belegnr', 'bp.bestellnummer', 'bp.menge', 'bp.geliefert', 'bp.vpe', 'bp.preis','bp.preis*bp.menge', 'a.lieferantennummer', 'a.name', "if(bp.lieferdatum!='0000-00-00', bp.lieferdatum,'sofort')", 'b.status', 'bp.bestellung', 'b.id'); + $searchsql = array("DATE_FORMAT(b.datum,'%d.%m.%Y')", 'b.belegnr', 'bp.bestellnummer', $this->app->erp->FormatMenge("bp.menge"), $this->app->erp->FormatMenge("bp.geliefert"), 'bp.vpe', 'a.lieferantennummer', 'a.name', "if(bp.lieferdatum!='0000-00-00', DATE_FORMAT(bp.lieferdatum,'%d.%m.%Y'),'sofort')", 'b.status', 'bp.bestellung', $this->app->erp->FormatPreis("bp.preis",2), $this->app->erp->FormatPreis("bp.preis*bp.menge",2)); + + $defaultorder = 1; + $defaultorderdesc = 0; + + $menu = ""; + $menu .= ''; + $menu .= ' '; + $menu .= ""; + $menu .= ''; + $menu .= ''; + + $where = " artikel='$id' AND b.status!='storniert'" . $this->app->erp->ProjektRechte("b.id"); + + $alignright=array(4,5,6,7,8); + $numbercols = array(3,4,5,6,7); + $datecols = array(10); + + $sql = "SELECT SQL_CALC_FOUND_ROWS b.id, DATE_FORMAT(b.datum,'%d.%m.%Y') as datum, b.belegnr, bp.bestellnummer, ".$this->app->erp->FormatMenge("bp.menge").", ".$this->app->erp->FormatMenge("bp.geliefert").",bp.vpe, ".$this->app->erp->FormatPreis("bp.preis",2).",".$this->app->erp->FormatPreis("bp.preis*bp.menge",2).",a.lieferantennummer, a.name, if(bp.lieferdatum!='0000-00-00', DATE_FORMAT(bp.lieferdatum,'%d.%m.%Y'),'sofort') as lieferdatum, b.status, bp.bestellung, b.id FROM bestellung_position bp LEFT JOIN bestellung b ON bp.bestellung=b.id LEFT JOIN adresse a ON b.adresse=a.id"; + + //$orderby = " ORDER by b.datum DESC"; + + break; + case 'artikel_belege': + $id = (int)$this->app->Secure->GetGET('id'); + $heading = array('Beleg','Belegnr','Datum','Status','Zahlweise','Kd- / Lf-Nr.','Kunde / Lieferant','Bezeichnung','Menge','Geliefert','Preis' , 'Menü',''); + $width = array('5%','5%','5%','5%','5%','5%','15%','20%','5%','5%','5%', '1%','1%'); + $findcols = array('b.typ', 'b.belegnr' , 'b.datum','b.status','b.zahlungsweise','b.kundennummer','b.name','b.bezeichnung','b.menge','b.geliefert','b.preis','b.id','b.id'); + $searchsql = array('b.typ', 'b.belegnr' , "DATE_FORMAT(b.datum, '%d.%m.%Y')",'b.status','b.zahlungsweise','b.kundennummer','b.name','b.bezeichnung', $this->app->erp->FormatPreis('preis',2), $this->app->erp->FormatMenge('b.menge'), $this->app->erp->FormatMenge('b.geliefert')); + $fstatusoffen = $this->app->YUI->TableSearchFilter($name, 1, 'statusoffen', '0',0,'checkbox'); + $fstatusabgeschlossen = $this->app->YUI->TableSearchFilter($name, 2, 'statusabgeschlossen', '0',0,'checkbox'); + $fauftrag = $this->app->YUI->TableSearchFilter($name, 3, 'auftrag', '0',0,'checkbox'); + $frechnung = $this->app->YUI->TableSearchFilter($name, 4, 'rechnung', '0',0,'checkbox'); + $fgutschrift = $this->app->YUI->TableSearchFilter($name, 5, 'gutschrift', '0',0,'checkbox'); + $fangebot = $this->app->YUI->TableSearchFilter($name, 6, 'angebot', '0',0,'checkbox'); + $flieferschein = $this->app->YUI->TableSearchFilter($name, 7, 'lieferschein', '0',0,'checkbox'); + $fproduktion = $this->app->YUI->TableSearchFilter($name, 8, 'produktion', '0',0,'checkbox'); + $fbestellung = $this->app->YUI->TableSearchFilter($name, 9, 'bestellung', '0', 0, 'checkbox'); + if(!$fstatusoffen && !$fstatusabgeschlossen) + { + $fstatusoffen = 1; + $fstatusabgeschlossen = 1; + } + if(!$fauftrag && !$frechnung && !$fgutschrift && !$fangebot && !$flieferschein && !$fproduktion && !$fbestellung) + { + $fauftrag = 1; + $frechnung = 1; + $fgutschrift = 1; + $fangebot = 1; + $flieferschein = 1; + $fproduktion = 1; + $fbestellung = 1; + } + + $numbercols = array(8,9,10); + + if($fauftrag && $this->app->erp->RechteVorhanden('auftrag','list')) + { + $sqla[] = "(SELECT a.id, 'auftrag' as typ ,a.belegnr, a.datum, a.status, a.zahlungsweise, a.kundennummer, a.name, ap.bezeichnung, ifnull(sum(ap.menge),0) as menge,ifnull(sum(ap.geliefert_menge),0) as geliefert,ifnull(ap.preis*(100-ap.rabatt)/100,0) as preis + FROM auftrag a INNER JOIN auftrag_position ap ON a.id = ap.auftrag AND ap.artikel = '$id' + WHERE a.id > 0 ".(($fstatusabgeschlossen && !$fstatusoffen)?" AND a.status = 'abgeschlossen' ":(($fstatusoffen && !$fstatusabgeschlossen)?" AND a.status != 'abgeschlossen' AND a.status != 'storniert' ":""))." + ".$this->app->erp->ProjektRechte('a.projekt').' GROUP BY a.id)'; + } + if($frechnung && $this->app->erp->RechteVorhanden('rechnung','list')) + { + $sqla[] = "(SELECT a.id, 'rechnung' as typ ,a.belegnr, a.datum, a.status, a.zahlungsweise, a.kundennummer, a.name,ap.bezeichnung, ifnull(sum(ap.menge),0) as menge,0 as geliefert,ifnull(ap.preis*(100-ap.rabatt)/100,0) as preis + FROM rechnung a INNER JOIN rechnung_position ap ON a.id = ap.rechnung AND ap.artikel = '$id' + WHERE a.id > 0 ".(($fstatusabgeschlossen && !$fstatusoffen)?" AND a.status = 'abgeschlossen' ":(($fstatusoffen && !$fstatusabgeschlossen)?" AND a.status != 'abgeschlossen' ":""))." + ".$this->app->erp->ProjektRechte('a.projekt').' GROUP BY a.id )'; + } + if($fgutschrift && $this->app->erp->RechteVorhanden('gutschrift','list')) + { + $sqla[] = "(SELECT a.id, 'gutschrift' as typ ,a.belegnr, a.datum, a.status, a.zahlungsweise, a.kundennummer, a.name,ap.bezeichnung, ifnull(sum(ap.menge),0) as menge,0 as geliefert,ifnull(ap.preis*(100-ap.rabatt)/100,0) as preis + FROM gutschrift a INNER JOIN gutschrift_position ap ON a.id = ap.gutschrift AND ap.artikel = '$id' + WHERE a.id > 0 ".(($fstatusabgeschlossen && !$fstatusoffen)?" AND a.status = 'abgeschlossen' ":(($fstatusoffen && !$fstatusabgeschlossen)?" AND a.status != 'abgeschlossen' AND a.status != 'storniert' ":""))." + ".$this->app->erp->ProjektRechte('a.projekt').' GROUP BY a.id )'; + } + if($flieferschein && $this->app->erp->RechteVorhanden('lieferschein','list')) + { + $sqla[] = "(SELECT a.id, 'lieferschein' as typ ,a.belegnr, a.datum, a.status, '' as zahlungsweise, a.kundennummer, a.name,ap.bezeichnung, ifnull(sum(ap.menge),0) as menge,ifnull(sum(ap.geliefert),0) as geliefert,0 as preis + FROM lieferschein a INNER JOIN lieferschein_position ap ON a.id = ap.lieferschein AND ap.artikel = '$id' + WHERE a.id > 0 ".(($fstatusabgeschlossen && !$fstatusoffen)?" AND a.status = 'versendet' ":(($fstatusoffen && !$fstatusabgeschlossen)?" AND a.status != 'versendet' AND a.status != 'storniert' ":""))." + ".$this->app->erp->ProjektRechte('a.projekt').' GROUP BY a.id )'; + } + if($fangebot && $this->app->erp->RechteVorhanden('angebot','list')) + { + $sqla[] = "(SELECT a.id, 'angebot' as typ ,a.belegnr, a.datum, a.status, a.zahlungsweise, a.kundennummer, a.name,ap.bezeichnung, ifnull(sum(ap.menge),0) as menge,ifnull(sum(ap.geliefert),0) as geliefert,ifnull(ap.preis*(100-ap.rabatt)/100,0) as preis + FROM angebot a INNER JOIN angebot_position ap ON a.id = ap.angebot AND ap.artikel = '$id' + WHERE a.id > 0 ".(($fstatusabgeschlossen && !$fstatusoffen)?" AND a.status = 'abgeschlossen' ":(($fstatusoffen && !$fstatusabgeschlossen)?" AND a.status != 'abgeschlossen' AND a.status != 'storniert' ":""))." + ".$this->app->erp->ProjektRechte('a.projekt').' GROUP BY a.id )'; + } + if($fbestellung && $this->app->erp->RechteVorhanden('bestellung','list')) + { + $sqla[] = "(SELECT a.id, 'bestellung' as typ ,a.belegnr, a.datum, a.status, a.zahlungsweise, a.lieferantennummer as kundennummer, a.name, ap.bezeichnunglieferant as bezeichnung, ifnull(sum(ap.menge),0) as menge,ifnull(sum(ap.geliefert),0) as geliefert,ifnull(ap.preis,0) as preis + FROM bestellung a INNER JOIN bestellung_position ap ON a.id = ap.bestellung AND ap.artikel = '$id' + WHERE a.id > 0 ".(($fstatusabgeschlossen && !$fstatusoffen)?" AND a.status = 'abgeschlossen' ":(($fstatusoffen && !$fstatusabgeschlossen)?" AND a.status != 'abgeschlossen' AND a.status != 'storniert' ":""))." + ".$this->app->erp->ProjektRechte('a.projekt').' GROUP BY a.id )'; + } + if($fproduktion && $this->app->erp->ModulVorhanden('produktion') && $this->app->erp->RechteVorhanden('produktion','list')) + { + $sqla[] = "(SELECT a.id, 'produktion' as typ ,a.belegnr, a.datum, a.status, a.zahlungsweise, a.kundennummer, a.name, ap.bezeichnung, ifnull(sum(ap.menge),0) as menge,ifnull(sum(ap.geliefert),0) as geliefert,ifnull(ap.preis,0) as preis + FROM produktion a INNER JOIN produktion_position ap ON a.id = ap.produktion AND ap.artikel = '$id' + WHERE a.id > 0 ".(($fstatusabgeschlossen && !$fstatusoffen)?" AND a.status = 'abgeschlossen' ":(($fstatusoffen && !$fstatusabgeschlossen)?" AND a.status != 'abgeschlossen' AND a.status != 'storniert' ":""))." + ".$this->app->erp->ProjektRechte('a.projekt').' GROUP BY a.id )'; + } + + $where = 'b.id > 0'; + if(!isset($sqla)) + { + $sqla[] = "(SELECT 0, '' as typ ,a.belegnr, a.datum, a.status, a.zahlungsweise, a.kundennummer, a.name, ap.bezeichnung, ifnull(sum(ap.menge),0) as menge,ifnull(sum(ap.geliefert_menge),0) as geliefert,ifnull(ap.preis*(100-ap.rabatt)/100,0) as preis + FROM auftrag a INNER JOIN auftrag_position ap ON a.id = ap.auftrag AND ap.artikel = '$id' + WHERE a.id < 0 + )"; + $where = '0'; + } + + + $defaultorder = 1; //Optional wenn andere Reihenfolge gewuenscht + $defaultorderdesc=0; + $alignright = array(9,10,11); + $sql = "SELECT SQL_CALC_FOUND_ROWS b.id, b.typ,b.belegnr, DATE_FORMAT(b.datum, '%d.%m.%Y'), b.status, b.zahlungsweise, b.kundennummer, b.name, b.bezeichnung, ".$this->app->erp->FormatMenge("b.menge").", ".$this->app->erp->FormatMenge("b.geliefert").", ".$this->app->erp->FormatPreis("b.preis",2).", + concat('
app->Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\"> app->Conf->WFconf['defaulttheme']}/images/pdf.svg\" border=\"0\">
'),'' + FROM ( + ".implode(' UNION ALL ', $sqla).' + )b + + '; + break; + case 'instueckliste': + $allowed['artikel'] = array('instueckliste'); + $id = (int)$this->app->Secure->GetGET('id'); + // headings + $heading = array('Artikel', 'Nummer', 'Menge', 'Menü'); + $width = array('70%', '10%', '5%', '10%'); + $findcols = array('artikel', 'nummer', 'menge', 'id'); + $searchsql = array('a.name_de', 'a.nummer', 's.menge'); + $defaultorder = 4; + $defaultorderdesc = 1; + $alignright = array(3); + $menu = "app->Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\">"; + + // SQL statement + + if (!empty($this->app->Conf->WFdbType) && $this->app->Conf->WFdbType == 'postgre') { + $sql = 'SELECT s.id, a.name_de as artikel,a.nummer as nummer, trim(s.menge)+0 as menge, + CASE WHEN (SELECT SUM(l.menge) FROM lager_platz_inhalt l WHERE l.artikel=a.id) > 0 + THEN (SELECT SUM(l.menge) FROM lager_platz_inhalt l WHERE l.artikel=a.id) + ELSE 0 + END as lager, s.artikel as menu + FROM stueckliste s LEFT JOIN artikel a ON s.artikel=a.id '; + } else { + $sql = 'SELECT SQL_CALC_FOUND_ROWS s.id, a.name_de as artikel,a.nummer as nummer, trim(s.menge)+0 as menge, + s.stuecklistevonartikel + as menu + FROM stueckliste s LEFT JOIN artikel a ON s.stuecklistevonartikel=a.id '; + } + + // Fester filter + $where = "s.artikel='$id' "; + + // gesamt anzahl + $count = "SELECT COUNT(s.id) FROM stueckliste s WHERE s.stuecklistevonartikel='$id' "; + break; + case 'artikel_etiketten': + $allowed['artikel'] = array('etiketten'); + $artikelId = (int)$this->app->Secure->GetGET('id'); + // headings + $heading = array('Etikett', 'Menge', 'Drucker', 'Art', 'Menü'); + $width = array('30%', '10%', '20%', '20%', '5%'); + + $findcols = array('e.name', 'al.amount', 'd.name', 'al.type', 'al.id'); + $searchsql = array('e.name', 'al.amount', 'd.name', 'al.type'); + + $defaultorder = 0; + $defaultorderdesc = 1; + + $alignright = array(2); + + $menu = ""; + $menu .= ""; + $menu .= ""; + $menu .= ""; + $menu .= "
"; + $menu .= ''; + $menu .= "Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\">"; + $menu .= " "; + $menu .= ''; + $menu .= "Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\">"; + $menu .= ""; + $menu .= "
"; + + $sql = "SELECT SQL_CALC_FOUND_ROWS al.id, e.name, al.amount, d.name, CONCAT(UCASE(LEFT(al.type, 1)), SUBSTRING(al.type, 2)), al.id + FROM article_label al + LEFT JOIN etiketten e ON al.label_id = e.id + LEFT JOIN drucker d ON al.printer_id = d.id"; + + $where = "al.article_id = '$artikelId'"; + + break; + } + + + $erg = []; + foreach($erlaubtevars as $k => $v) + { + if(isset($$v)) + { + $erg[$v] = $$v; + } + } + return $erg; + } + public function __construct($app, $intern = false) { + //parent::GenArtikel($app); + $this->app=$app; + if($intern){ + return; + } + + $this->app->ActionHandlerInit($this); + + $this->app->ActionHandler("create","ArtikelCreate"); + $this->app->ActionHandler("demo","ArtikelDemo"); + $this->app->ActionHandler("edit","ArtikelEdit"); + $this->app->ActionHandler("list","ArtikelList"); + $this->app->ActionHandler("newlist","ArtikelNewList"); + $this->app->ActionHandler("stueckliste","ArtikelStueckliste"); + $this->app->ActionHandler("stuecklisteimport","ArtikelStuecklisteImport"); + $this->app->ActionHandler("stuecklisteupload","ArtikelStuecklisteUpload"); + $this->app->ActionHandler("instueckliste","ArtikelInStueckliste"); + $this->app->ActionHandler("delstueckliste","DelStueckliste"); + $this->app->ActionHandler("stuecklisteempty","ArtikelStuecklisteEmpty"); + $this->app->ActionHandler("stuecklisteexport","ArtikelStuecklisteExport"); + $this->app->ActionHandler("upstueckliste","UpStueckliste"); + $this->app->ActionHandler("downstueckliste","DownStueckliste"); + $this->app->ActionHandler("editstueckliste","ArtikelStuecklisteEditPopup"); + $this->app->ActionHandler("verkauf","ArtikelVerkauf"); + $this->app->ActionHandler("copy","ArtikelCopy"); + $this->app->ActionHandler("copyedit", "ArtikelCopyEdit"); + $this->app->ActionHandler("copysave", "ArtikelCopySave"); + $this->app->ActionHandler("schliessen","ArtikelSchliessen"); + $this->app->ActionHandler("verkaufcopy","ArtikelVerkaufCopy"); + $this->app->ActionHandler("verkaufdelete","ArtikelVerkaufDelete"); + $this->app->ActionHandler("verkaufdisable","ArtikelVerkaufDisable"); + $this->app->ActionHandler("einkauf","ArtikelEinkauf"); + $this->app->ActionHandler("einkaufdelete","ArtikelEinkaufDelete"); + $this->app->ActionHandler("einkaufdisable","ArtikelEinkaufDisable"); + $this->app->ActionHandler("einkaufcopy","ArtikelEinkaufCopy"); + $this->app->ActionHandler("projekte","ArtikelProjekte"); + $this->app->ActionHandler("rabatt","ArtikelRabatt"); + $this->app->ActionHandler("lager","ArtikelLager"); + $this->app->ActionHandler("mindesthaltbarkeitsdatum","ArtikelMHD"); + $this->app->ActionHandler("mhddelete","ArtikelMHDDelete"); + $this->app->ActionHandler("bestbeforeadd","ArticleBestbeforeAdd"); + $this->app->ActionHandler("bestbeforereduce","ArticleBestbeforeReduce"); + $this->app->ActionHandler("batchadd","ArticleBatchAdd"); + $this->app->ActionHandler("batchreduce","ArticleBatchReduce"); + $this->app->ActionHandler("chargedelete","ArtikelChargeDelete"); + $this->app->ActionHandler("chargen","ArtikelChargen"); + $this->app->ActionHandler("wareneingang","ArtikelWareneingang"); + $this->app->ActionHandler("offenebestellungen","ArtikelOffeneBestellungen"); + $this->app->ActionHandler("belege","ArtikelBelege"); + $this->app->ActionHandler("statistik","ArtikelStatistik"); + $this->app->ActionHandler("offeneauftraege","ArtikelOffeneAuftraege"); + $this->app->ActionHandler("dateien","ArtikelDateien"); + + $this->app->ActionHandler("eigenschaften","ArtikelEigenschaften"); + $this->app->ActionHandler("eigenschaftensuche","ArtikelEigenschaftenSuche"); + $this->app->ActionHandler("eigenschaftendelete","ArtikelEigenschaftenDelete"); + $this->app->ActionHandler("eigenschaftencopy","ArtikelEigenschaftenCopy"); + $this->app->ActionHandler("eigenschafteneditpopup","ArtikelEigenschaftenEditPopup"); + + $this->app->ActionHandler("provision","Artikelprovision"); + $this->app->ActionHandler("delete","ArtikelDelete"); + $this->app->ActionHandler("auslagern","ArtikelAuslagern"); + $this->app->ActionHandler("einlagern","ArtikelEinlagern"); + $this->app->ActionHandler("umlagern","ArtikelUmlagern"); + $this->app->ActionHandler("ausreservieren","ArtikelAusreservieren"); + $this->app->ActionHandler("etiketten","ArtikelEtiketten"); + $this->app->ActionHandler("reservierung","ArtikelReservierung"); + $this->app->ActionHandler("onlineshop","ArtikelOnlineShop"); + $this->app->ActionHandler("ajaxwerte","ArtikelAjaxWerte"); + $this->app->ActionHandler("profisuche","ArtikelProfisuche"); + $this->app->ActionHandler("lagerlampe","ArtikelLagerlampe"); + $this->app->ActionHandler("shopexport","ArtikelShopexport"); + $this->app->ActionHandler("shopimport","ArtikelShopimport"); + $this->app->ActionHandler("shopexportfiles","ArtikelShopexportFiles"); + $this->app->ActionHandler("stuecklisteetiketten","ArtikelStuecklisteEtiketten"); + $this->app->ActionHandler("minidetail","ArtikelMiniDetail"); + + $this->app->ActionHandler("artikelfreifelder", "ArtikelFreifelder"); + $this->app->ActionHandler("artikelfreifelderedit", "ArtikelFreifelderEdit"); + $this->app->ActionHandler("artikelfreifeldersave", "ArtikelFreifelderSave"); + $this->app->ActionHandler("artikelfreifelderdelete", "ArtikelFreifelderDelete"); + + $this->app->ActionHandler("lagersync","ArtikelLagerSync"); + $this->app->ActionHandler("thumbnail", "ArtikelThumbnail"); + $this->app->ActionHandler("schnellanlegen", "ArtikelSchnellanlegen"); + + $this->app->ActionHandler("baum", "ArtikelBaum"); + $this->app->ActionHandler("baumajax", "ArtikelBaumAjax"); + $this->app->ActionHandler("baumdetail", "ArtikelBaumDetail"); + $this->app->ActionHandler("baumedit","ArtikelBaumEdit"); + + $id = $this->app->Secure->GetGET('id'); + $nummer = $this->app->Secure->GetPOST('nummer'); + + if(is_numeric($id) && $id > 0) + { + $arr = $this->app->DB->SelectRow("SELECT CONCAT(name_de,' (',nummer,')') as name2, name_de,nummer FROM artikel WHERE id='$id' LIMIT 1"); + if(!empty($arr)){ + $artikel = $arr['name2']; + $nummer = $arr['nummer']; + $namede = $arr['name_de']; + } + } + else{ + $artikel = $nummer; + } + + if($artikel!=''){ + $this->app->Tpl->SetText('UEBERSCHRIFT', 'Artikel: ' . $artikel); + } + else { + $this->app->Tpl->SetText('UEBERSCHRIFT','Artikel'); + } + + $this->app->Tpl->SetText('ANZEIGENUMMER',$nummer); + if(isset($namede)){ + $this->app->Tpl->SetText('ANZEIGENAMEDE',' '.$this->app->erp->LimitChar($namede,65)); + } + $this->app->Tpl->Set('FARBE','[FARBE1]'); + + $this->app->erp->Headlines('Artikel'); + + $this->app->ActionHandlerListen($app); + + $this->app = $app; + } + + public function ArtikelRabatt() + { + $cmd = $this->app->Secure->GetGET('cmd'); + $id = $this->app->Secure->GetGET('id'); + $rabatt = $this->app->Secure->GetGET('rabatt'); + $fmodul = $this->app->Secure->GetGET('fmodul'); + $rabatt = str_replace(',','.',$rabatt); + + if($cmd==='angebot' || $cmd==='auftrag' || $cmd==='rechnung' || $cmd==='gutschrift') + { + $schreibschutz = $this->app->DB->Select("SELECT schreibschutz FROM $cmd WHERE id='$id'"); + if($schreibschutz!='1') + { + $this->app->DB->Update( + "UPDATE `{$cmd}_position` AS `pos` + INNER JOIN `artikel` AS `art` ON pos.artikel = art.id + SET pos.rabatt='{$rabatt}', + pos.keinrabatterlaubt = 1 + WHERE pos.{$cmd} = {$id} + AND (art.keinrabatterlaubt = 0 OR art.keinrabatterlaubt IS NULL)" + ); + } + } + $this->app->Location->execute('index.php?module='.$cmd.'&action=positionen&id='.$id.'&fmodul='.$fmodul); + } + + public function ArtikelDemo() + { + $projekt = $this->app->erp->Firmendaten('projekt'); + if(class_exists('EtikettenPDFCustom')) + { + $Brief = new EtikettenPDFCustom($this->app,$projekt); + }else{ + $Brief = new EtikettenPDF($this->app,$projekt); + } + $Brief->SetXML(' + '); + $Brief->Output('test.pdf','D'); + $this->app->ExitXentral(); + } + + public function ArtikelEinkaufAdd() + { + $bezeichnunglieferant = ''; + $artikel = (int)$this->app->Secure->GetPOST('artikel'); + $lieferant = $this->app->Secure->GetPOST('lieferant'); + $waehrung = $this->app->Secure->GetPOST('waehrung'); + $bestellnummer = $this->app->Secure->GetPOST('bestellnummer'); + $ab_menge = (float)str_replace(',','.',$this->app->Secure->GetPOST('ab_menge')); + $preis = (float)str_replace(',','.',$this->app->Secure->GetPOST('preis')); + if(!$artikel) { + echo json_encode(array('status'=>0,'error'=>'Kein Artikel')); + $this->app->ExitXentral(); + } + $lieferantennummera = explode(' ',$lieferant); + $adresse = $this->app->DB->Select("SELECT id FROM adresse WHERE lieferantennummer <> '' AND lieferantennummer = '".$this->app->DB->real_escape_string($lieferantennummera[0])."' LIMIT 1"); + if(!$adresse) { + echo json_encode(array('status'=>0,'error'=>'Lieferant nicht gefunden')); + $this->app->ExitXentral(); + } + $artikelprojekt = $this->app->DB->Select("SELECT projekt FROM artikel WHERE id = '$artikel' LIMIT 1"); + if($artikelprojekt && !$this->app->erp->UserProjektRecht($artikelprojekt)) + { + echo json_encode(array('status'=>0,'error'=>'Fehlende Projektrechte')); + $this->app->ExitXentral(); + } + $adressprojekt = $this->app->DB->Select("SELECT projekt FROM adresse WHERE id = '$adresse' LIMIT 1"); + if($adressprojekt && !$this->app->erp->UserProjektRecht($adressprojekt)) { + echo json_encode(array('status'=>0,'error'=>'Fehlende Projektrechte')); + $this->app->ExitXentral(); + } + if($ab_menge < 0) { + echo json_encode(array('status'=>0,'error'=>'Menge ist kleiner 0')); + $this->app->ExitXentral(); + } + $this->app->erp->AddEinkaufspreis($artikel,$ab_menge,$adresse,$bestellnummer,$bezeichnunglieferant,$preis,$waehrung); + echo json_encode(array('status'=>1,'html'=>$this->app->erp->EinkaufspreiseTabelle($artikel))); + $this->app->ExitXentral(); + } + + public function ArtikelEigenschaften() + { + if(!$this->app->DB->Select('SELECT id FROM eigenschaften LIMIT 1'))// $this->app->erp->ModulVorhanden('artikeleigenschaften')) + { + $id = $this->app->Secure->GetGET('id'); + $cmd = $this->app->Secure->GetGET('cmd'); + if($cmd === 'save') { + $name = $this->app->Secure->GetPOST('name'); + $wert = trim($this->app->Secure->GetPOST('wert')); + $einheit = $this->app->Secure->GetPOST('einheit'); + $status = 0; + if($name)// && $wert != "") + { + $status = 1; + $checkkategorie = $this->app->DB->Select("SELECT id FROM artikeleigenschaften WHERE name = '$name' AND geloescht <> 1 LIMIT 1"); + if(!$checkkategorie) + { + $this->app->DB->Insert("INSERT INTO artikeleigenschaften (name) values ('$name')"); + $checkkategorie = $this->app->DB->GetInsertID(); + } + $checkwert = $this->app->DB->Select("SELECT id FROM artikeleigenschaftenwerte WHERE artikeleigenschaften = '$checkkategorie' AND artikel = '$id' AND wert = '$wert' LIMIT 1"); + if(!$checkwert)$this->app->DB->Insert("INSERT INTO artikeleigenschaftenwerte (wert, artikeleigenschaften, artikel, einheit) values ('$wert','$checkkategorie','$id','$einheit')"); + } + + echo json_encode(array('status'=>$status)); + $this->app->ExitXentral(); + } + if($cmd === 'get') { + $eigenschaftid = (int)$this->app->Secure->GetPOST('eigenschaftid'); + $erg = $this->app->DB->SelectRow("SELECT ew.id, ew.wert, ew.einheit, e.name, ew.artikeleigenschaften, e.typ, ew.vorlage FROM artikeleigenschaften e INNER JOIN artikeleigenschaftenwerte ew ON e.id = ew.artikeleigenschaften + WHERE ew.id = '$eigenschaftid' AND ew.artikel = '$id' AND e.geloescht <> 1 LIMIT 1"); + + if(!$erg['vorlage']){ + $erg['typ'] = 'einzeilig'; + } + + if($erg['typ'] === 'select'){ + $tmp = $this->app->DB->SelectArr("SELECT wert FROM eigenschaften_vorlagen_werte WHERE name = '".$erg['name']."' AND vorlage='".$erg['vorlage']."'"); + $erlaubteWerte = array(); + foreach ($tmp as $wert){ + $erlaubteWerte[] = $wert['wert']; + } + $erg['erlaubtewerte'] = $erlaubteWerte; + } + + echo json_encode($erg); + $this->app->ExitXentral(); + } + if($cmd === 'update') + { + $name = trim($this->app->Secure->GetPOST('e_name')); + $wert = trim($this->app->Secure->GetPOST('e_wert')); + $einheit = trim($this->app->Secure->GetPOST('e_einheit')); + $eigenschaftid = (int)$this->app->Secure->GetPOST('eigenschaftid'); + + + $error = ""; + + if($name == ""){ + $error .= "Bitte Eigenschaft ausfüllen\n"; + }else{ + $artikeleigenschaftid = $this->app->DB->Select("SELECT id FROM artikeleigenschaften WHERE name = '$name' AND geloescht = 0 LIMIT 1"); + if($artikeleigenschaftid == "" || $artikeleigenschaftid <= 0){ + $this->app->DB->Insert("INSERT INTO artikeleigenschaften (name) VALUES ('$name')"); + $artikeleigenschaftid = $this->app->DB->Select("SELECT id FROM artikeleigenschaften WHERE name = '$name' LIMIT 1"); + } + } + + if($wert == ""){ + $error .= "Bitte Wert ausfüllen\n"; + } + + $eigenschaftvorhanden = $this->app->DB->Select("SELECT ew.id FROM artikeleigenschaften e INNER JOIN artikeleigenschaftenwerte ew ON e.id = ew.artikeleigenschaften WHERE ew.id != '$eigenschaftid' AND ew.artikel = '$id' AND ew.artikeleigenschaften = '$artikeleigenschaftid' AND ew.wert = '$wert' AND e.geloescht = 0 LIMIT 1"); + + if($eigenschaftvorhanden != "" && $eigenschaftvorhanden > 0){ + $error .= 'Eigenschaft ist bereits vorhanden.'; + } + + + if($error == ''){ + if($id && $eigenschaftid){ + $this->app->DB->Update("UPDATE artikeleigenschaftenwerte SET artikeleigenschaften = '$artikeleigenschaftid', wert = '$wert', einheit = '$einheit' WHERE id = '$eigenschaftid' LIMIT 1"); + + echo json_encode(array('status'=>1)); + $this->app->ExitXentral(); + } + if($id){ + $this->app->DB->Insert("INSERT INTO artikeleigenschaftenwerte (artikeleigenschaften, wert, einheit, artikel) + VALUES ('$artikeleigenschaftid', '$wert', '$einheit', '$id')"); + + echo json_encode(array('status'=>1)); + $this->app->ExitXentral(); + } + echo json_encode(array('status'=>0,'statusText'=>"Fehler")); + $this->app->ExitXentral(); + } + echo json_encode(array('status'=>0,'statusText'=>$error)); + $this->app->ExitXentral(); + } + + if($cmd === 'copy'){ + + $name = trim($this->app->Secure->GetPOST('e_name')); + $wert = trim($this->app->Secure->GetPOST('e_wert')); + $einheit = trim($this->app->Secure->GetPOST('e_einheit')); + $eigenschaftid = (int)$this->app->Secure->GetPOST('eigenschaftid'); + + + $error = ""; + + if($name == ""){ + $error .= "Bitte Eigenschaft ausfüllen\n"; + }else{ + $artikeleigenschaftid = $this->app->DB->Select("SELECT id FROM artikeleigenschaften WHERE name = '$name' AND geloescht = 0 LIMIT 1"); + if($artikeleigenschaftid == "" || $artikeleigenschaftid <= 0){ + $this->app->DB->Insert("INSERT INTO artikeleigenschaften (name) VALUES ('$name')"); + $artikeleigenschaftid = $this->app->DB->Select("SELECT id FROM artikeleigenschaften WHERE name = '$name' LIMIT 1"); + } + } + + if($wert == ""){ + $error .= "Bitte Wert ausfüllen\n"; + } + + $eigenschaftvorhanden = $this->app->DB->Select("SELECT ew.id FROM artikeleigenschaften e INNER JOIN artikeleigenschaftenwerte ew ON e.id = ew.artikeleigenschaften WHERE ew.id != '$eigenschaftid' AND ew.artikel = '$id' AND ew.artikeleigenschaften = '$artikeleigenschaftid' AND ew.wert = '$wert' AND e.geloescht = 0 LIMIT 1"); + + if($eigenschaftvorhanden != "" && $eigenschaftvorhanden > 0){ + $error .= 'Eigenschaft ist bereits vorhanden.'; + } + + + if($error == ''){ + if($id && $eigenschaftid == 0){ + $this->app->DB->Insert("INSERT INTO artikeleigenschaftenwerte (artikeleigenschaften, wert, einheit, artikel) + VALUES ('$artikeleigenschaftid', '$wert', '$einheit', '$id')"); + + echo json_encode(array('status'=>1)); + $this->app->ExitXentral(); + } + echo json_encode(array('status'=>0,'statusText'=>"Fehler")); + $this->app->ExitXentral(); + } + echo json_encode(array('status'=>0,'statusText'=>$error)); + $this->app->ExitXentral(); + } + if($cmd === 'delete'){ + $eigenschaftid = (int)$this->app->Secure->GetPOST('eigenschaftid'); + $eigenschaftid = $this->app->DB->Select("SELECT id FROM artikeleigenschaftenwerte + WHERE artikel='$id' AND id='$eigenschaftid' LIMIT 1"); + $status = 0; + if($eigenschaftid > 0) + { + $this->app->DB->Delete("DELETE FROM artikeleigenschaftenwerte WHERE id = '$eigenschaftid'"); + $status = 1; + } + echo json_encode(array('status'=>$status,'statusText'=>'Fehler')); + $this->app->ExitXentral(); + } + if($cmd === 'getuebersetzung'){ + + $uebersetzungid = (int)$this->app->Secure->GetPOST('id'); + + $data = $this->app->DB->SelectRow("SELECT ap.id, ap.article_id, ap.language_to, ap.property_to, ap.property_value_to, + ap.language_from, ap.property_from, ap.property_value_from, ap.shop_id + FROM article_property_translation ap + WHERE ap.id = '$uebersetzungid' AND ap.article_id = '$id' LIMIT 1"); + + if($data){ + if($data['article_id'] > 0){ + $articleNumber = $this->app->DB->Select("SELECT nummer FROM artikel WHERE id = '".$data['article_id']."' LIMIT 1"); + $articleName = $this->app->DB->Select("SELECT name_de FROM artikel WHERE id = '".$data['article_id']."' LIMIT 1"); + if($articleNumber != "" && $articleName != ""){ + $data['article'] = $articleNumber." ".$articleName; + } + } + + if($data['shop_id'] > 0){ + $shopName = $this->app->DB->Select("SELECT bezeichnung FROM shopexport WHERE id = '".$data['shop_id']."' LIMIT 1"); + $data['shop'] = $data['shop_id']." ".$shopName; + }else{ + $data['shop'] = ''; + } + + }else{ + $data['id'] = 0; + $articleNumber = $this->app->DB->Select("SELECT nummer FROM artikel WHERE id = '$id' LIMIT 1"); + $articleName = $this->app->DB->Select("SELECT name_de FROM artikel WHERE id = '$id' LIMIT 1"); + if($articleNumber != "" && $articleName != ""){ + $data['article'] = $articleNumber." ".$articleName; + }else{ + $data['article'] = ''; + } + $data['language_to'] = ''; + $data['property_to'] = ''; + $data['property_value_to'] = ''; + $data['language_from'] = ''; + $data['property_from'] = ''; + $data['property_value_from'] = ''; + $data['shop'] = ''; + } + + echo json_encode($data); + $this->app->ExitXentral(); + } + if($cmd === 'saveuebersetzung'){ + + $eintragid = (int)$this->app->Secure->GetPOST('id'); + $languageTo = trim($this->app->Secure->GetPOST('languageTo')); + $propertyTo = trim($this->app->Secure->GetPOST('propertyTo')); + $propertyValueTo = trim($this->app->Secure->GetPOST('propertyValueTo')); + $languageFrom = trim($this->app->Secure->GetPOST('languageFrom')); + $propertyFrom = trim($this->app->Secure->GetPOST('propertyFrom')); + $propertyValueFrom = trim($this->app->Secure->GetPOST('propertyValueFrom')); + $shop = trim($this->app->Secure->GetPOST('shop')); + + $error = ""; + + if($id != ""){ + $id = (int)$this->app->DB->Select("SELECT id FROM artikel WHERE id = '$id' LIMIT 1"); + if($id === 0){ + $error .= "Bitte gültigen Artikel auswählen"."\n"; + } + } + + if($shop != ""){ + $shop = explode(' ', $shop); + $shopId = $shop[0]; + if($shopId != ""){ + $shopId = (int)$this->app->DB->Select("SELECT id FROM shopexport WHERE id = '$shopId' LIMIT 1"); + if($shopId === 0){ + $error .= "Bitte gültigen Shop auswählen"."\n"; + } + } + }else{ + $shopId = 0; + } + + if($propertyTo == "" && $propertyValueTo == ""){ + $error .= "Bitte Eigenschaft oder Wert der Zielsprache ausfüllen"."\n"; + } + + //shop bedenken + $uebersetzungschonvorhanden = $this->app->DB->Select("SELECT id FROM article_property_translation WHERE article_id = '$id' AND language_from = '$languageFrom' AND language_to = '$languageTo' AND property_from = '$propertyFrom' AND property_to = '$propertyTo' AND property_value_from = '$propertyValueFrom' AND property_value_to = '$propertyValueTo' AND id != '$eintragid' LIMIT 1"); + if($uebersetzungschonvorhanden != "" && $uebersetzungschonvorhanden > 0){ + $error .= "Diese Übersetzung gibt es bereits für diesen Artikel.\n"; + } + + if($error == ''){ + + if($languageFrom === 'DE'){ + if($propertyFrom != ''){ + $propertyFromExists = $this->app->DB->Select("SELECT id FROM artikeleigenschaften WHERE name = '$propertyFrom' LIMIT 1"); + if(!$propertyFromExists){ + $this->app->DB->Insert("INSERT INTO artikeleigenschaften (name) VALUES ('$propertyFrom')"); + } + } + } + + if($eintragid){ + $this->app->DB->Update("UPDATE article_property_translation SET article_id = '$id', language_to = '$languageTo', + property_to = '$propertyTo', property_value_to = '$propertyValueTo', language_from = '$languageFrom', + property_from = '$propertyFrom', property_value_from = '$propertyValueFrom', shop_id = '$shopId' + WHERE id = '$eintragid'"); + + echo json_encode(array('status'=>1)); + $this->app->ExitXentral(); + } + $eigenschaftvorhanden = $this->app->DB->Select("SELECT aw.id FROM artikeleigenschaftenwerte aw JOIN artikeleigenschaften ae ON aw.artikeleigenschaften = ae.id WHERE aw.wert = '$propertyValueFrom' AND ae.name = '$propertyFrom' AND aw.artikel = '$id' LIMIT 1"); + if($eigenschaftvorhanden == "" || $eigenschaftvorhanden <= 0){ + $eigenschaftsid = $this->app->DB->Select("SELECT id FROM artikeleigenschaften WHERE name = '$propertyFrom' LIMIT 1"); + $this->app->DB->Insert("INSERT INTO artikeleigenschaftenwerte (artikeleigenschaften, wert, artikel) VALUES ('$eigenschaftsid', '$propertyValueFrom', '$id')"); + } + + + $this->app->DB->Insert("INSERT INTO article_property_translation (article_id, language_to, property_to, property_value_to, + language_from, property_from, property_value_from, shop_id) + VALUES ('$id', '$languageTo', '$propertyTo', '$propertyValueTo', '$languageFrom', '$propertyFrom', + '$propertyValueFrom', '$shopId')"); + + echo json_encode(array('status'=>1)); + $this->app->ExitXentral(); + } + echo json_encode(array('status'=>0,'statusText'=>$error)); + $this->app->ExitXentral(); + } + if($cmd === 'deleteuebersetzung'){ + $eintragid = (int)$this->app->Secure->GetPOST('id'); + if($eintragid){ + $this->app->DB->Update("DELETE FROM article_property_translation WHERE id = '$eintragid'"); + } + + echo json_encode(array('status'=>1)); + $this->app->ExitXentral(); + } + + //VORLAGE LADEN + $laden = $this->app->Secure->GetPOST('laden'); + if($laden){ + $vorlage = $this->app->Secure->GetPOST('vorlage'); + if(trim($vorlage) !== ''){ + + $vorlagenid = $this->app->DB->Select("SELECT id FROM eigenschaften_vorlagen WHERE bezeichnung = '$vorlage'"); + $query = sprintf("SELECT evw.name, evw.wert, evw.einheit, ae.id FROM eigenschaften_vorlagen_werte evw + LEFT JOIN artikeleigenschaften ae ON evw.name = ae.name + WHERE evw.vorlage=%d AND (ISNULL(ae.name) OR ae.typ<>'select' + AND NOT ae.name IN(SELECT name FROM artikeleigenschaften WHERE geloescht=0 AND typ='select')) + GROUP BY ae.name, evw.wert, evw.einheit", + $vorlagenid); + $alleigenschaften = $this->app->DB->SelectArr($query); + $eigenschaftenNurSelect= $this->app->DB->SelectArr("SELECT evw.name, evw.wert, evw.einheit, ae.id FROM eigenschaften_vorlagen_werte evw JOIN artikeleigenschaften ae ON evw.name = ae.name WHERE ae.geloescht = 0 AND evw.vorlage='$vorlagenid' AND ae.typ='select' GROUP BY evw.name"); + foreach ($eigenschaftenNurSelect as $eigenschaft){ + $alleigenschaften[] = $eigenschaft; + } + + foreach($alleigenschaften as $eigenschaft){ + $eigenschaftid = $this->app->DB->Select("SELECT id FROM artikeleigenschaften WHERE id='$eigenschaft[id]' LIMIT 1"); + if(!$eigenschaftid){ + $this->app->DB->Insert("INSERT INTO artikeleigenschaften (name) values ('".$eigenschaft['name']."')"); + $eigenschaftid = $this->app->DB->GetInsertID(); + } + $checkwert = $this->app->DB->Select("SELECT id FROM artikeleigenschaftenwerte WHERE artikeleigenschaften = '$eigenschaftid' AND artikel = '$id' AND wert = '".$eigenschaft['wert']."' LIMIT 1"); + if(!$checkwert){ + $this->app->DB->Insert("INSERT INTO artikeleigenschaftenwerte (wert, artikeleigenschaften, artikel, einheit, vorlage) values ('".$eigenschaft['wert']."','$eigenschaftid','$id','".$eigenschaft['einheit']."', '$vorlagenid')"); + } + } + } + } + + $sprachen = $this->app->DB->SelectArr("SELECT iso, bezeichnung_de FROM sprachen"); + $select = ''; + foreach($sprachen as $key=>$value){ + $select .= ""; + } + $this->app->Tpl->Add("SPRACHEN", $select); + + $this->app->YUI->AutoComplete('u_propertyFrom', 'artikeleigenschaften'); + $this->app->YUI->AutoComplete('u_propertyValueFrom', 'artikeleigenschaftenwerte'); + $this->app->YUI->AutoComplete('u_shop', 'shopnameid'); + + $this->app->YUI->AutoComplete('e_einheit','artikeleinheit'); + $this->app->YUI->AutoComplete('e_name','artikeleigenschaften'); + $this->app->YUI->AutoComplete('e_textwert', 'artikeleigenschaftenwerte'); + $this->app->YUI->AutoComplete('vorlage','eigenschaften_vorlagen'); + + $this->ArtikelMenu(); + $this->app->YUI->TableSearch('TAB1','artikel_eigenschaften_neu', 'show','','',basename(__FILE__), __CLASS__); + $this->app->Tpl->Parse('PAGE','artikel_artikeleigenschaften.tpl'); + + }else{ + + $this->app->Tpl->Add('UEBERSCHRIFT',' (Verkauf)'); + $this->app->Tpl->Set('SUBSUBHEADING','Verkaufspreise'); $this->ArtikelMenu(); + $id = $this->app->Secure->GetGET('id'); // neues arbeitspaket + + $this->app->YUI->AutoComplete('einheit','artikeleinheit'); + $this->app->YUI->AutoComplete('einheit2','artikeleinheit'); + $this->app->YUI->AutoComplete('einheit3','artikeleinheit'); + + $widget = new WidgetEigenschaften($this->app,'TAB2'); + $widget->form->SpecialActionAfterExecute('none', + "index.php?module=artikel&action=eigenschaften&id=$id"); + if($this->app->Secure->GetPOST('submit')!=''){ + $this->app->erp->EnableTab('tabs-2'); + } + + $widget->Create(); + + $this->app->YUI->TableSearch('TAB1','eigenschaften', 'show','','',basename(__FILE__), __CLASS__); + $this->app->Tpl->Parse('PAGE','eigenschaftenuebersicht.tpl'); + } + } + + public function CheckRights() + { + if($this->app->User->GetType()==='admin'){ + return true; + } + $id = (int)$this->app->Secure->GetGET('id'); + + $action = $this->app->Secure->GetGET('action'); + if($id && ($action == 'verkaufdisable' || $action == 'verkaufcopy' || $action == 'verkaufdelete' || $action == 'verkaufeditpopup')) + { + $projekt = $this->app->DB->Select("SELECT a.projekt FROM artikel a INNER JOIN verkaufspreise v on v.artikel = a.id WHERE v.id = '$id' LIMIT 1"); + if($projekt){ + return $this->app->erp->UserProjektRecht($projekt); + } + }elseif($id && ($action == 'einkaufdisable' || $action == 'einkaufcopy' || $action == 'einkaufdelete' || $action == 'einkaufeditpopup')) + { + $projekt = $this->app->DB->Select("SELECT a.projekt FROM artikel a INNER JOIN einkaufspreise e on e.artikel = a.id WHERE e.id = '$id' LIMIT 1"); + if($projekt){ + return $this->app->erp->UserProjektRecht($projekt); + } + } + return true; + } + + public function ArtikelEigenschaftenEditPopup() + { + $id = $this->app->Secure->GetGET('id'); + $this->app->Tpl->Set('OPENDISABLE',''); + + $this->app->YUI->AutoComplete('einheit','artikeleinheit'); + $this->app->YUI->AutoComplete('einheit2','artikeleinheit'); + $this->app->YUI->AutoComplete('einheit3','artikeleinheit'); + + $sid = $this->app->DB->Select("SELECT artikel FROM eigenschaften WHERE id='$id' LIMIT 1"); + $this->ArtikelMenu($sid); + + $this->app->Tpl->Set('ABBRECHEN',""); + $widget = new WidgetEigenschaften($this->app,'TAB1'); + $widget->form->SpecialActionAfterExecute('close_refresh', + "index.php?module=artikel&action=eigenschaften&id=$sid&&22#tabs-1"); + $widget->Edit(); + $this->app->Tpl->Add('TAB2','Sie bearbeiten gerade eine Eigenschaft. Erst nach dem Speichern können neue Preise angelegt werden.'); + $this->app->Tpl->Add('TAB3','Sie bearbeiten gerade eine Eigenschaft. Erst nach dem Speichern können Statistiken betrachtet werden.'); + $this->app->Tpl->Parse('PAGE','eigenschaftenuebersicht.tpl'); + } + + + public function ArtikelEigenschaftenDelete() + { + $id = $this->app->Secure->GetGET('id'); + $sid = $this->app->DB->Select("SELECT artikel FROM eigenschaften WHERE id='$id' LIMIT 1"); + if($id > 0){ + $this->app->DB->Delete("DELETE FROM eigenschaften WHERE id='$id' LIMIT 1"); + } + $this->app->Location->execute('index.php?module=artikel&action=eigenschaften&id='.$sid); + } + + public function ArtikelLagerSync() + { + $id = $this->app->Secure->GetGET('id'); + if($id > 0){ + $this->app->DB->Update("UPDATE artikel SET cache_lagerplatzinhaltmenge='-100' WHERE id='$id'"); + } + $sync = $this->app->erp->LagerSync($id,true); + if($sync==1) { + echo 'gruen'; + } + else { + echo 'gelb'; + } + $this->app->ExitXentral(); + } + + function Preisrechner() + { + $steuer_normal_komma = ($this->app->erp->GetStandardSteuersatzNormal() + 100)/100.0; + $steuer_ermaessigt_komma = ($this->app->erp->GetStandardSteuersatzErmaessigt() + 100)/100.0; + + $this->app->Tpl->Set('PREISRECHNER',"app->erp->GetStandardSteuersatzNormal()."\" onclick=\"this.form.preis.value=parseFloat(this.form.preis.value.split(',').join('.'))*$steuer_normal_komma;\">"); + $this->app->Tpl->Add('PREISRECHNER',"app->erp->GetStandardSteuersatzNormal()."\" onclick=\"this.form.preis.value=parseFloat(this.form.preis.value.split(',').join('.'))/$steuer_normal_komma;\">"); + if($this->app->erp->Version()!=='stock') + { + $this->app->Tpl->Add('PREISRECHNER',"
app->erp->GetStandardSteuersatzErmaessigt()."\" onclick=\"this.form.preis.value=parseFloat(this.form.preis.value.split(',').join('.'))*$steuer_ermaessigt_komma;\">"); + $this->app->Tpl->Add('PREISRECHNER',"app->erp->GetStandardSteuersatzErmaessigt()."\" onclick=\"this.form.preis.value=parseFloat(this.form.preis.value.split(',').join('.'))/$steuer_ermaessigt_komma;\">"); + } + } + + + public function ArtikelMiniDetail($parsetarget='',$menu=true) + { + $id=$this->app->Secure->GetGET('id'); + + $this->app->Tpl->Set('ID',$id); + + $artikelarr = $this->app->DB->SelectRow("SELECT * FROM artikel WHERE id='$id' LIMIT 1"); + $kurztext_de = ''; + $name_de = ''; + $nummer = ''; + $lagerartikel = 0; + $lager_platz = 0; + $standardbild = 0; + if(!empty($artikelarr)) { + $kurztext_de = $artikelarr['anabregs_text']; + //$kurztext_de = !empty($artikelarr['kurztext_de'])?$artikelarr['kurztext_de']:$artikelarr['anabregs_text']; + $name_de = $artikelarr['name_de']; + $nummer = $artikelarr['nummer']; + $lagerartikel = $artikelarr['lagerartikel']; + $lager_platz = $artikelarr['lager_platz']; + $standardbild = $this->app->erp->GetArtikelStandardbild($id,true); + } + + $this->app->Tpl->Set('NAME_DE',$name_de); + $this->app->Tpl->Set('NUMMER',$nummer); + + if($standardbild > 0) { + //index.php?module=artikel&action=thumbnail&id=2&bildvorschau=62_100_100 + //$this->app->Tpl->Set('ARTIKELBILD', ""); + $this->app->Tpl->Set('ARTIKELBILD', + 'Artikelbild' + ); + } + + if($lagerartikel>0){ + $this->app->Tpl->Set('LAGERLINK', " "); + } + else{ + $this->app->Tpl->Set('LAGERLINK', ''); + } + + $this->app->Tpl->Set('KURZTEXT',$kurztext_de); + + // easy table mit arbeitspaketen YUI als template + $table = new EasyTable($this->app); + $table->Query("SELECT CONCAT(l.bezeichnung,' / ',lp.kurzbezeichnung, if(lp.sperrlager,' (Kein Auto-Versand Lager)',''), + if(lp.poslager,' (POS Lager)',''),if(lp.verbrauchslager,' (Verbrauchslager)',''),if(lp.autolagersperre,' (Nachschublager)','')) as lager, trim(lpi.menge)+0 as menge + FROM lager_platz_inhalt lpi LEFT JOIN lager_platz as lp ON lpi.lager_platz=lp.id LEFT JOIN projekt p ON lpi.projekt=p.id + LEFT JOIN lager l ON l.id=lp.lager WHERE lpi.artikel='$id' "); + + $table->DisplayNew('ARTIKEL','Menge','noAction'); + + if($lager_platz > 0) + { + $lagerarr = $this->app->DB->SelectRow("SELECT lp.lager,lp.kurzbezeichnung,lag.bezeichnung + FROM lager_platz AS lp LEFT JOIN lager AS lag ON lp.lager = lag.id + WHERE lp.id = '$lager_platz' LIMIT 1"); + if(!empty($lagerarr)) + { + $lager = $lagerarr['lager']; + $lagerhauptbezeichung = $lagerarr['bezeichnung']; + $lagerbezeichnung = $lagerarr['kurzbezeichnung']; + }else{ + $lagerhauptbezeichung = ''; + } + }else{ + $lagerhauptbezeichung = ''; + } + if($lagerhauptbezeichung=='') { + $lagerhauptbezeichung='kein Standardlager eingestellt'; + } + $this->app->Tpl->Add('ARTIKEL',"
Standardlager: $lagerhauptbezeichung ".(!empty($lagerbezeichnung)?"/ $lagerbezeichnung":'')."

"); + + $this->app->Tpl->Add('ARTIKEL',$this->ArtikelLagerInfo($id)); + + $table = new EasyTable($this->app); + $table->Query("SELECT adr.name as kunde, adr.kundennummer as kdnr, trim(r.menge)+0 as menge ,p.abkuerzung as projekt,r.grund FROM lager_reserviert r LEFT JOIN artikel a ON a.id=r.artikel LEFT JOIN projekt p ON + p.id=r.projekt LEFT JOIN adresse adr ON r.adresse=adr.id WHERE r.firma='{$this->app->User->GetFirma()}' AND a.id='$id'"); + + $table->DisplayNew('RESERVIERT','Grund','noAction'); + + + $table = new EasyTable($this->app); + $table->Query("SELECT p.belegnr,a.name, a.kundennummer as kdnr, p.status,trim(po.menge)+0 as menge FROM auftrag_position po LEFT JOIN auftrag p ON p.id=po.auftrag LEFT JOIN adresse a ON a.id=p.adresse WHERE po.artikel='$id' AND (p.status!='abgeschlossen' AND p.status!='storniert')"); + + + $table->DisplayNew('AUFTRAG','Menge','noAction'); + + $table = new EasyTable($this->app); + /* $table->Query("SELECT DATE_FORMAT(b.datum,'%d.%m.%Y') as datum, CONCAT('',b.belegnr,'') as 'bestellung Nr.', bp.bestellnummer as Nummer, bp.menge, bp.geliefert, bp.vpe as VPE, a.lieferantennummer as lieferant, a.name as name, if(bp.lieferdatum!='0000-00-00', DATE_FORMAT(bp.lieferdatum,'%d.%m.%Y'),'sofort') as lieferdatum, b.status as status + FROM bestellung_position bp LEFT JOIN bestellung b ON bp.bestellung=b.id LEFT JOIN adresse a ON b.adresse=a.id + WHERE artikel='$id' AND b.status!='storniert' AND b.status!='abgeschlossen' AND bp.geliefertQuery("SELECT DATE_FORMAT(b.datum,'%d.%m.%Y') as datum, CONCAT('',b.belegnr,'') as 'bestellung', trim(bp.menge)+0 as menge, trim(bp.geliefert)+0 as geliefert, a.name as name, if(bp.lieferdatum!='0000-00-00', DATE_FORMAT(bp.lieferdatum,'%d.%m.%Y'),'sofort') as lieferdatum + FROM bestellung_position bp LEFT JOIN bestellung b ON bp.bestellung=b.id LEFT JOIN adresse a ON b.adresse=a.id + WHERE artikel='$id' AND b.status!='storniert' AND b.status!='abgeschlossen' AND bp.geliefertDisplayNew('BESTELLUNG','Lieferdatum','noAction'); + + $table = new EasyTable($this->app); + $table->Query('SELECT a.name as lieferant, trim(e.ab_menge)+0 ab, '.$this->app->erp->FormatPreis("e.preis")." as preis, e.waehrung FROM einkaufspreise e LEFT JOIN adresse a ON a.id=e.adresse + WHERE e.artikel='$id' AND e.geloescht!=1 AND (e.gueltig_bis >= curdate() OR e.gueltig_bis='0000-00-00')"); + + $table->DisplayNew('EINKAUFSPREISE','Waehrung','noAction'); + + $verwendeberechneterek = $this->app->DB->Select("SELECT verwendeberechneterek FROM artikel WHERE id='$id' LIMIT 1"); + $berechneterek = $this->app->DB->Select('SELECT '.$this->app->erp->FormatPreis("berechneterek")." FROM artikel WHERE id='$id' LIMIT 1"); + $berechneterekwaehrung = $this->app->DB->Select("SELECT berechneterekwaehrung FROM artikel WHERE id='$id' LIMIT 1"); + + + if($verwendeberechneterek > 0){ + $this->app->Tpl->Set('KALKULIERTEREK', 'Kalkulierter EK-Preis: ' . $berechneterek . ' ' . $berechneterekwaehrung); + } + + $table = new EasyTable($this->app); + $table->Query("SELECT if(a.name='' OR a.id IS NULL,if(v.gruppe > 0,(SELECT CONCAT(g.name,' ',g.kennziffer) FROM gruppen g WHERE g.id=v.gruppe ),'Alle'),a.name) as kunde, trim(v.ab_menge)+0 ab, ".$this->app->erp->FormatPreis("v.preis")." as preis, v.waehrung FROM verkaufspreise v LEFT JOIN adresse a ON a.id=v.adresse + WHERE v.artikel='$id' AND v.geloescht!=1 AND (v.gueltig_bis >= curdate() OR v.gueltig_bis='0000-00-00')"); + + $table->DisplayNew('VERKAUFSPREISE','Waehrung','noAction'); + + + $table = new EasyTable($this->app); + $table->Query(" + + SELECT e.name, CONCAT(ew.wert,'  ') as wert, ew.einheit FROM artikeleigenschaften e INNER JOIN artikeleigenschaftenwerte ew ON e.id = ew.artikeleigenschaften WHERE ew.artikel='$id' + + + /* SELECT t.hauptkategorie, t.unterkategorie,format(sum(t.wert),2) as wert,t.einheit + FROM ( + + + (SELECT e.hauptkategorie, e.unterkategorie, e.wert, e.einheit + FROM eigenschaften e LEFT JOIN artikel a ON a.id=e.artikel + WHERE a.id='$id')UNION ALL + (SELECT e.hauptkategorie, e.unterkategorie, (s.menge* e.wert) as wert, e.einheit + FROM eigenschaften e LEFT JOIN stueckliste s ON s.artikel=e.artikel + WHERE s.stuecklistevonartikel='$id') + )t GROUP BY t.hauptkategorie, t.unterkategorie,t.einheit*/ + + + ");// ORDER by e.bezeichnung + $table->DisplayNew('EIGENSCHAFTEN','Einheit','noAction'); + + $table = new EasyTable($this->app); + $table->Query('SELECT a.nummer, a.name_de as artikel, '.$this->app->erp->FormatMenge('s.menge')." as menge FROM stueckliste s + LEFT JOIN artikel a ON s.artikel=a.id + WHERE s.stuecklistevonartikel='$id' ORDER by a.nummer"); + $table->DisplayNew('STUECKLISTE','Menge','noAction'); + + $this->app->erp->RunHook('artikel_minidetail_hook1', 1, $id); + + $this->app->Tpl->Output('artikel_minidetail.tpl'); + $this->app->ExitXentral(); + } + + + + + + public function ArtikelShopimport() + { + $id = $this->app->Secure->GetGET('id'); + $shop = $this->app->Secure->GetGET('shop'); + $artikel = array($id); + $artikelshopid = (int)$this->app->Secure->GetGET('artikelshopid'); + + if($artikelshopid > 0) + { + $shop = $this->app->DB->Select("SELECT shop FROM artikel_onlineshops WHERE id = '$artikelshopid' AND artikel = '$id' AND aktiv = 1 LIMIT 1"); + }else{ + if($shop=='1'){ + $shop = $this->app->DB->Select("SELECT shop FROM artikel WHERE id='$id' LIMIT 1"); + } + elseif($shop=='2'){ + $shop = $this->app->DB->Select("SELECT shop2 FROM artikel WHERE id='$id' LIMIT 1"); + } + elseif($shop=='3'){ + $shop = $this->app->DB->Select("SELECT shop3 FROM artikel WHERE id='$id' LIMIT 1"); + } + } + + $nummer = $this->app->DB->Select("SELECT nummer FROM artikel WHERE id='$id' LIMIT 1"); + $extnummer = $this->app->DB->Select("SELECT nummer FROM artikelnummer_fremdnummern WHERE artikel = '$id' AND shopid='$shop' AND aktiv = 1 AND nummer <> '' LIMIT 1"); + if($extnummer){ + $nummer = $extnummer; + } + $result = $this->app->remote->RemoteGetArticle($shop,$nummer); + + $update = $this->updateShopArticle($id, $result); + + $msg = $update['msg_encoded']; + $this->app->Location->execute("index.php?module=artikel&action=edit&id=$id&msg=$msg#tabs-4"); + } + + /** + * @param int $id + * @param array|string $result + * + * @return array + */ + public function updateShopArticle($id, $result) + { + if(is_array($result)) { + $result['uebersicht_de'] = htmlentities($result['uebersicht_de'],ENT_QUOTES, 'UTF-8'); + $result['uebersicht_en'] = htmlentities($result['uebersicht_en'],ENT_QUOTES, 'UTF-8'); + + if($result['name_de']=='' && $result['name']!='') { + $result['name_de']=$result['name']; + } + } + $isOk = false; + $error = ''; + $info = ''; + if(is_array($result) && $result['name_de']!='' && !is_array($result['name_de']) && !empty($result['name_de'])) { + $isOk = true; + //$result['name_de'] = $result['name']; + if($result['aktiv'] !='1'){ + $result['inaktiv']=1; + } + else{ + $result['inaktiv']=0; + } + + $fields = [ + 'name_de','kurztext_de','uebersicht_de','name_en','kurztext_en','uebersicht_en','beschreibung_de', + 'beschreibung_en','metakeywords_de','metakeywords_en','metatitle_de','metatitle_en','metadescription_de', + 'metadescription_en', + 'inaktiv','pseudopreis','lieferzeitmanuell','pseudolager','autolagerlampe','restmenge','gewicht', + 'downloadartikel','ean','herstellernummer','hersteller' + ]; + + if($result['restmenge']!='1') { + $result['restmenge']=0; + } + + // pseudolager + $result['autolagerlampe']=1; + + //name + foreach($fields as $nameofcolumn) { + if(isset($result[$nameofcolumn])) { + if( + ($result[$nameofcolumn]!='' && !is_array($result[$nameofcolumn])) + || $nameofcolumn==='lieferzeitmanuell' || $nameofcolumn==='pseudopreis' + ){ + $this->app->DB->Update( + "UPDATE artikel + SET " . $nameofcolumn . "='" . $this->app->DB->real_escape_string($result[$nameofcolumn]) . "' + WHERE id='$id' LIMIT 1" + ); + } + } + } + + //preis_netto + if($result['preis_netto'] > 0) { + $this->app->erp->AddVerkaufspreis($id,1,0,$result['preis_netto']); + } + $info = 'Der Artikel wurde aus dem Shop geladen und nach Xentral importiert!'; + $msg = $this->app->erp->base64_url_encode('
'.$info.'
'); + } + else { + $check = strpos($result ,'error:'); + + if($check===0) { + $result = str_replace('error:','',$result); + $error = 'Fehlermeldung vom Shop: '.$result; + $msg = $this->app->erp->base64_url_encode('
'.$error.'
'); + } + else { + $error = 'Es gab keine Rückmeldung vom Shop! '.$result; + $msg = $this->app->erp->base64_url_encode('
'.$error.'
'); + } + } + + return ['status'=>$isOk, 'info'=>$info, 'msg_encoded' => $msg, 'error' => $error]; + } + + public function ArtikelShopexport() + { + $id = $this->app->Secure->GetGET('id'); + $shop = $this->app->Secure->GetGET('shop'); + $artikel = array($id); + $artikelshopid = (int)$this->app->Secure->GetGET('artikelshopid'); + + if($artikelshopid > 0) + { + $shop = $this->app->DB->Select("SELECT shop FROM artikel_onlineshops WHERE id = '$artikelshopid' AND artikel = '$id' AND aktiv = 1 LIMIT 1"); + $this->app->User->SetParameter('artikel_shopexport_shop', ''); + }else{ + if($shop=='1'){ + $shop = $this->app->DB->Select("SELECT shop FROM artikel WHERE id='$id' LIMIT 1"); + } + elseif($shop=='2'){ + $shop = $this->app->DB->Select("SELECT shop2 FROM artikel WHERE id='$id' LIMIT 1"); + } + elseif($shop=='3'){ + $shop = $this->app->DB->Select("SELECT shop3 FROM artikel WHERE id='$id' LIMIT 1"); + } + } + + $artikelexport = $this->app->DB->Select("SELECT artikelexport FROM shopexport WHERE id='$shop' LIMIT 1"); + $lagerexport = $this->app->DB->Select("SELECT lagerexport FROM shopexport WHERE id='$shop' LIMIT 1"); + + $externenummer = $this->app->DB->Select("SELECT nummer FROM artikelnummer_fremdnummern WHERE artikel = '$id' AND aktiv = 1 AND shopid = '$shop' AND nummer <> '' ORDER BY bezeichnung = 'SHOPID' DESC LIMIT 1"); + + if($externenummer) + { + $extartikelnummer = array($externenummer); + }else{ + $extartikelnummer = ''; + } + + $pageContents = $this->app->remote->RemoteSendArticleList($shop,$artikel,$extartikelnummer); + $check = strpos($pageContents ,'error:'); + $msg = ''; + if(!empty($pageContents) && is_array($pageContents)) { + if(!empty($pageContents['status']) && !empty($pageContents['message'])) { + $msg = $this->app->erp->base64_url_encode('
'.$pageContents['message'].'
'); + } + elseif(isset($pageContents['status']) && !empty($pageContents['message'])) { + $msg = $this->app->erp->base64_url_encode('
'.$pageContents['message'].'
'); + } + } + elseif($pageContents=='1') { + $pageContents='success'; + } + + if(empty($msg) && $pageContents!='') { + $pageContents = " ($pageContents)"; + } + + $this->app->erp->LogFile($this->app->DB->real_escape_string('manueller Shopexport Artikel: '.$this->app->DB->Select("SELECT nummer FROM artikel WHERE id = '$id' LIMIT 1").' Shop: '.$shop.' Status: '.$pageContents)); + // keine fehlermeldung vom shop + if(empty($msg)) { + $linkToImporterSettings = ''; + if($this->app->erp->RechteVorhanden('onlineshops', 'edit')){ + $url = 'index.php?module=onlineshops&action=edit&id='.$shop; + $linkToImporterSettings = "Zu den Shopeinstellungen"; + } + + if($check === 0){ + $msg = $this->app->erp->base64_url_encode("
Es gab einen Fehler beim Aktualisieren des Artikels im Shop!$pageContents
"); + } + else if($pageContents == ''){ + if($artikelexport != 1 && $lagerexport != 1){ + $msg = $this->app->erp->base64_url_encode("
Der Artikel konnte nicht zum Shop übertragen werden! In den Shopeinstellungen ist festgelegt, dass die Artikelinformation- und Lagerbestandsübertragung nicht erlaubt ist!$pageContents $linkToImporterSettings
"); + } + else{ + if($pageContents === '0' || $pageContents === 0){ + $msg = $this->app->erp->base64_url_encode("
Es gab einen Fehler beim Aktualisieren des Artikels im Shop! Stellen Sie sicher, dass die Zugangsdaten und URL's korrekt sind! Möglicherweise kein Artikelpreis hinterlegt
"); + }else{ + $msg = $this->app->erp->base64_url_encode("
Es gab einen Fehler beim Aktualisieren des Artikels im Shop! Stellen Sie sicher, dass die Zugangsdaten und URL's korrekt sind!$pageContents $linkToImporterSettings
"); + } + } + } + else{ + if($artikelexport != 1 && $lagerexport == 1){ + $msg = $this->app->erp->base64_url_encode("
Es wurde nur der Lagerbestand (nicht die Artikelinfos entsprechend der Einstellungen) im Shop aktualisiert!$pageContents $linkToImporterSettings
"); + } + else if($lagerexport != 1 && $artikelexport == 1){ + $msg = $this->app->erp->base64_url_encode("
Es wurde nur der Artikel (nicht der Lagerbestand entsprechend der Einstellungen) im Shop aktualisiert!$pageContents $linkToImporterSettings
"); + } + else{ + $msg = $this->app->erp->base64_url_encode("
Der Artikel wurde im Shop aktualisiert!$pageContents
"); + } + } + } + $this->app->erp->LagerSync($artikel); + + $this->app->Location->execute("index.php?module=artikel&action=edit&id=$id&msg=$msg#tabs-4"); + } + + public function ArtikelShopexportFiles() + { + $id = $this->app->Secure->GetGET('id'); + $shop = $this->app->Secure->GetGET('shop'); + + if($shop=='1'){ + $shop = $this->app->DB->Select("SELECT shop FROM artikel WHERE id='$id' LIMIT 1"); + } + elseif($shop=='2'){ + $shop = $this->app->DB->Select("SELECT shop2 FROM artikel WHERE id='$id' LIMIT 1"); + } + elseif($shop=='3'){ + $shop = $this->app->DB->Select("SELECT shop3 FROM artikel WHERE id='$id' LIMIT 1"); + } + + if($this->app->remote->RemoteUpdateFilesArtikel($id,$shop)){ + $msg = $this->app->erp->base64_url_encode('
Der Artikel wurde im Shop aktualisiert!
'); + } + else{ + $msg = $this->app->erp->base64_url_encode('
Es gab einen Fehler beim Aktualisieren des Artikels im Shop!
'); + } + + $this->app->Location->execute("index.php?module=artikel&action=edit&id=$id&msg=$msg#tabs-5"); + } + + + public function ArtikelStuecklisteEtiketten() + { + $id = $this->app->Secure->GetGET('id'); + $this->app->erp->ArtikelStuecklisteDrucken($id); + $this->app->Location->execute("index.php?module=artikel&action=stueckliste&id=$id"); + } + + public function ArtikelSchliessen() + { + $id = $this->app->Secure->GetGET('id'); + if($id > 0 && is_numeric($id)){ + $this->app->DB->Update("UPDATE bestellung_position SET abgeschlossen='1' WHERE artikel='$id'"); + } + $referer = $_SERVER['HTTP_REFERER']; + if(empty($referer)) { + $referer = 'index.php'; + } + $this->app->Location->execute($referer); + } + + public function ArtikelLagerlampe() + { + $jetztnichtlagernd = ''; + $aktivieren = $this->app->Secure->GetPOST('aktivieren'); + $deaktivieren = $this->app->Secure->GetPOST('deaktivieren'); + $jetztnichtlagerndrot = ''; + //$jetztnichtlagerndrot = $this->app->Secure->GetPOST('jetztnichtlagerndrot'); + $jetztgruen = $this->app->Secure->GetPOST('jetztgruen'); + $jetztgelb = $this->app->Secure->GetPOST('jetztgelb'); + $jetztrot = $this->app->Secure->GetPOST('jetztrot'); + $tab3gruen = $this->app->Secure->GetPOST('tab3gruen'); + $neuweg = $this->app->Secure->GetPOST('neuweg'); + $artikelmarkiert = $this->app->Secure->GetPOST('artikelmarkiert'); + $artikelmarkierthidden = $this->app->Secure->GetPOST('artikelmarkierthidden'); + + $cartikelmarkiert = count($artikelmarkiert); + if($jetztgruen!='') + { + for($i=0;$i < $cartikelmarkiert; $i++) { + $this->app->DB->Update("UPDATE artikel SET lieferzeit='green',ausverkauft='0' WHERE id='" . $artikelmarkiert[$i] . "' LIMIT 1"); + } + } + + else if($jetztgelb!='') + { + for($i=0;$i < $cartikelmarkiert; $i++) { + $this->app->DB->Update("UPDATE artikel SET lieferzeit='yellow',ausverkauft='0' WHERE id='" . $artikelmarkiert[$i] . "' LIMIT 1"); + } + } + + else if($jetztrot!='') + { + for($i=0;$i < $cartikelmarkiert; $i++) { + $this->app->DB->Update("UPDATE artikel SET lieferzeit='red' WHERE id='" . $artikelmarkiert[$i] . "' LIMIT 1"); + } + } + + else if($aktivieren!='') + { + foreach($artikelmarkierthidden as $key=>$value) + { + if($artikelmarkiert[$key]=='1') + { + $this->app->DB->Update("UPDATE artikel SET autolagerlampe='1' WHERE id='".$key."' LIMIT 1"); + } + else { + $this->app->DB->Update("UPDATE artikel SET autolagerlampe='0' WHERE id='".$key."' LIMIT 1"); + } + } + } + + else if($neuweg!='') + { + for($i=0;$i < $cartikelmarkiert; $i++) { + $this->app->DB->Update("UPDATE artikel SET neu='0' WHERE id='" . $artikelmarkiert[$i] . "' LIMIT 1"); + } + } + + else if($jetztnichtlagernd!='') + { + for($i=0;$i < $cartikelmarkiert; $i++) { + $this->app->DB->Update("UPDATE artikel SET lieferzeit='bestellt' WHERE id='" . $artikelmarkiert[$i] . "' LIMIT 1"); + } + } + else if($jetztnichtlagerndrot!='') + { + for($i=0;$i < $cartikelmarkiert; $i++) { + $this->app->DB->Update("UPDATE artikel SET lieferzeit='nichtlieferbar' WHERE id='" . $artikelmarkiert[$i] . "' LIMIT 1"); + } + } + + // $this->app->erp->MenuEintrag("index.php?module=artikel&action=create","Neuen Artikel anlegen"); + $this->app->erp->MenuEintrag('index.php?module=lager&action=list','zurück zur Übersicht'); + + $this->app->Tpl->Set('TAB1','
Hier werden alle Artikel die als nicht lagernd Online-Shop markierten Artikel angezeigt.
'); + $this->app->Tpl->Set('TAB2','
Hier werden alle Artikel die als lagernd im Online-Shop markiert sind jedoch nicht im Lager liegen.
'); + $this->app->Tpl->Set('TAB3','
Hier werden alle Artikel die als ausverkauf im Online-Shop markierten sind jedoch im Lager liegen.
'); + + $this->app->YUI->TableSearch('TAB1','manuellagerlampe', 'show','','',basename(__FILE__), __CLASS__); + $this->app->YUI->TableSearch('TAB2','autolagerlampe', 'show','','',basename(__FILE__), __CLASS__); + // $this->app->YUI->TableSearch('TAB2','artikeltabellelagerndabernichtlagernd'); + // $this->app->YUI->TableSearch('TAB3','artikeltabellehinweisausverkauft'); + $this->app->YUI->TableSearch('TAB3','artikeltabelleneu', 'show','','',basename(__FILE__), __CLASS__); + + $this->app->erp->Headlines('Lagerlampen berechnen'); + $this->app->Tpl->Set('TABTEXT','Lagerlampen berechnen'); + + $this->app->Tpl->Parse('MANUELLCHECKBOX','checkbox.tpl'); + $this->app->Tpl->Parse('AUTOCHECKBOX','checkbox2.tpl'); + $this->app->Tpl->Parse('PAGE','lagerlampen.tpl'); + } + + + public function ArtikelProfisuche() + { + $id = $this->app->Secure->GetGET('id'); // abhaengig von cmd + $cmd = $this->app->Secure->GetGET('cmd'); + $fmodul = $this->app->Secure->GetGET('fmodul'); + if($cmd === 'filterbaum') + { + $this->app->User->SetParameter('filterbaum_'.$fmodul,$this->app->Secure->GetPOST('id')); + echo json_encode(array('status'=>1)); + $this->app->ExitXentral(); + } + $this->app->User->SetParameter('filterbaum_'.$fmodul,''); + $anlegen = $this->app->Secure->GetPOST('anlegen'); + $bezeichnung = ''; + $projekt = $this->app->Secure->GetPOST('projekt'); + $adresse = $this->app->Secure->GetPOST('adresse'); + $menge = $this->app->Secure->GetPOST('menge'); + $preis = $this->app->Secure->GetPOST('preis'); + $bestellnummer = $this->app->Secure->GetPOST('bestellnummer'); + $bezeichnunglieferant = $this->app->Secure->GetPOST('bezeichnunglieferant'); + $typ = $this->app->Secure->GetPOST('typ'); + $name_de = $this->app->Secure->GetPOST('name_de'); + $kurztext_de = $this->app->Secure->GetPOST('kurztext_de'); + $umsatzsteuer = $this->app->Secure->GetPOST('umsatzsteuer'); + $steuersatz = $this->app->Secure->GetPOST('steuersatz'); + $allelieferanten = $this->app->Secure->GetPOST('allelieferanten'); + $internerkommentar = $this->app->Secure->GetPOST('internerkommentar'); + $lagerartikel = $this->app->Secure->GetPOST('lagerartikel'); + + // Anfang: FIX Batch-Insert übermittelt keine Umsatzsteuer und keinen Steuersatz > Werte aus DB holen + $insert = $this->app->Secure->GetGET('insert'); + if($insert=='true'){ + if(empty($umsatzsteuer)){ + if($cmd != 'bestellung' && $cmd != 'anfrage' && $cmd != 'preisanfrage'){ + $umsatzsteuer = $this->app->DB->Select("SELECT a.umsatzsteuer FROM verkaufspreise AS v INNER JOIN artikel AS a ON v.artikel = a.id WHERE v.id='$id' LIMIT 1"); + }else{ + $umsatzsteuer = $this->app->DB->Select("SELECT a.umsatzsteuer FROM einkaufspreise AS e INNER JOIN artikel AS a ON e.artikel = a.id WHERE e.id='$id' LIMIT 1"); + } + } + if(empty($steuersatz)){ + if($cmd != 'bestellung' && $cmd != 'anfrage' && $cmd != 'preisanfrage'){ + $steuersatz = $this->app->DB->Select("SELECT a.steuersatz FROM verkaufspreise AS v INNER JOIN artikel AS a ON v.artikel = a.id WHERE v.id='$id' LIMIT 1"); + }else{ + $steuersatz = $this->app->DB->Select("SELECT a.steuersatz FROM einkaufspreise AS e INNER JOIN artikel AS a ON e.artikel = a.id WHERE e.id='$id' LIMIT 1"); + } + if ((float)$steuersatz <= 0) { + $steuersatz = null; + } + } + } + // Ende: FIX Batch-Insert übermittelt keine Umsatzsteuer und keinen Steuersatz > Werte aus DB holen + + if (empty($menge)) { + $menge = $this->app->Secure->GetGET('menge'); + } + if (empty($name_de)){ + $name_de = $this->app->Secure->GetGET('name_de'); + } + + if(!in_array($umsatzsteuer, ['normal','ermaessigt','befreit'], true)){ + $umsatzsteuer = 'normal'; + } + if (!empty($steuersatz)) { + $umsatzsteuer = ''; + $steuersatz = (float)$steuersatz; + } else { + $steuersatz = null; + } + $steuersatzSqlValue = empty($steuersatz) ? 'NULL' : "'$steuersatz'"; + + $insert = $this->app->Secure->GetGET('insert'); + + if($insert=='true') + { + // hole alles anhand der verkaufspreis id + + $id = $this->app->Secure->GetGET('sid'); + $vid = $this->app->Secure->GetGET('id'); + $cmd = $this->app->Secure->GetGET('cmd'); + + if($cmd!=='bestellung' && $cmd!=='anfrage' && $cmd!=='preisanfrage') + { + $artikel_id = $this->app->DB->Select("SELECT artikel FROM verkaufspreise WHERE id='$vid' LIMIT 1"); + $preis = $this->app->DB->Select("SELECT preis FROM verkaufspreise WHERE id='$vid' LIMIT 1"); + $projekt = $this->app->DB->Select("SELECT projekt FROM verkaufspreise WHERE id='$vid' LIMIT 1"); + $waehrung = $this->app->DB->Select("SELECT waehrung FROM verkaufspreise WHERE id='$vid' LIMIT 1"); + if (empty($menge)){ + $menge = $this->app->DB->Select("SELECT ab_menge FROM verkaufspreise WHERE id='$vid' LIMIT 1"); + } + } else { + $artikel_id = $this->app->DB->Select("SELECT artikel FROM einkaufspreise WHERE id='$vid' LIMIT 1"); + $preis = $this->app->DB->Select("SELECT preis FROM einkaufspreise WHERE id='$vid' LIMIT 1"); + $projekt = $this->app->DB->Select("SELECT projekt FROM einkaufspreise WHERE id='$vid' LIMIT 1"); + $waehrung = $this->app->DB->Select("SELECT waehrung FROM einkaufspreise WHERE id='$vid' LIMIT 1"); + if (empty($menge)){ + $menge = $this->app->DB->Select("SELECT ab_menge FROM einkaufspreise WHERE id='$vid' LIMIT 1"); + } + } + $lieferdatum = '0000-00-00'; + + $vpe = ''; + + if($projekt <=0 ){ + $projekt = $this->app->DB->Select("SELECT name_de FROM artikel WHERE id='$artikel_id' LIMIT 1"); + } + + if($projekt <=0){ + $projekt = $this->app->DB->Select("SELECT projekt FROM {$cmd} WHERE id='$id' LIMIT 1"); + } + + if($waehrung==''){ + $waehrung = $this->app->DB->Select("SELECT waehrung FROM {$cmd} WHERE id='$id' LIMIT 1"); + } + + if($waehrung==''){ + $waehrung = $this->app->erp->GetStandardWaehrung($projekt); + } + + $sprache = $this->app->DB->Select("SELECT sprache FROM {$cmd} WHERE id='$id' LIMIT 1"); + + if($sprache==='englisch') + { + if($kurztext_de==''){ + $kurztext_de = $this->app->DB->Select("SELECT anabregs_text_en FROM artikel WHERE id='$artikel_id' LIMIT 1"); + } + if($bezeichnung==''){ + $bezeichnung = $this->app->DB->Select("SELECT name_en FROM artikel WHERE id='$artikel_id' LIMIT 1"); + } + } + + if($kurztext_de==''){ + $kurztext_de = $this->app->DB->Select("SELECT anabregs_text FROM artikel WHERE id='$artikel_id' LIMIT 1"); + } + + if($bezeichnung==""){ + $bezeichnung = $this->app->DB->Select("SELECT name_de FROM artikel WHERE id='$artikel_id' LIMIT 1"); + } + + $nummer = $this->app->DB->Select("SELECT nummer FROM artikel WHERE id='$artikel_id' LIMIT 1"); + $allelieferanten = $this->app->DB->Select("SELECT allelieferanten FROM artikel WHERE id='$artikel_id' LIMIT 1"); + + $sort = (int)$this->app->DB->Select("SELECT IFNULL(MAX(sort),0) FROM {$cmd}_position WHERE {$cmd}='$id' LIMIT 1"); + $sort++; + + $mlmpunkte = $this->app->DB->Select("SELECT mlmpunkte FROM artikel WHERE id='$artikel_id' LIMIT 1"); + $mlmbonuspunkte = $this->app->DB->Select("SELECT mlmbonuspunkte FROM artikel WHERE id='$artikel_id' LIMIT 1"); + $mlmdirektpraemie = $this->app->DB->Select("SELECT mlmdirektpraemie FROM artikel WHERE id='$artikel_id' LIMIT 1"); + + if($cmd==='lieferschein') + { + $this->app->DB->Insert("INSERT INTO lieferschein_position (id,{$cmd},artikel,bezeichnung,beschreibung,nummer,menge,sort,lieferdatum, status,projekt,vpe) + VALUES ('','$id','$artikel_id','".$this->app->DB->real_escape_string($bezeichnung)."','$kurztext_de','$nummer','$menge','$sort','$lieferdatum','angelegt','$projekt','$vpe')"); + + $posid = $this->app->DB->GetInsertID(); + } + else if($cmd==='anfrage') + { + $this->app->DB->Insert("INSERT INTO anfrage_position (id,{$cmd},artikel,bezeichnung,beschreibung,nummer,menge,sort,lieferdatum, status,projekt,vpe) + VALUES ('','$id','$artikel_id','".$this->app->DB->real_escape_string($bezeichnung)."','$kurztext_de','$nummer','$menge','$sort','$lieferdatum','angelegt','$projekt','$vpe')"); + $posid = $this->app->DB->GetInsertID(); + } + else if($cmd==='preisanfrage') + { + $this->app->DB->Insert("INSERT INTO preisanfrage_position (id,{$cmd},artikel,bezeichnung,beschreibung,nummer,menge,sort,lieferdatum, projekt,vpe) + VALUES ('','$id','$artikel_id','".$this->app->DB->real_escape_string($bezeichnung)."','$kurztext_de','$nummer','$menge','$sort','$lieferdatum','$projekt','$vpe')"); + + $posid = $this->app->DB->GetInsertID(); + } + else if($cmd==='bestellung') + { + $bestellnummer = $this->app->DB->Select("SELECT bestellnummer FROM einkaufspreise WHERE id='$vid' LIMIT 1"); + $bezeichnunglieferant = $this->app->DB->Select("SELECT bezeichnunglieferant FROM einkaufspreise WHERE id='$vid' LIMIT 1"); + if (empty($bezeichnunglieferant)) { $bezeichnunglieferant = $bezeichnung; } + + $this->app->DB->Insert("INSERT INTO bestellung_position (id,{$cmd},artikel,beschreibung,menge,sort,lieferdatum, status,projekt,vpe,bestellnummer,bezeichnunglieferant,preis,waehrung,umsatzsteuer,steuersatz) + VALUES ('','$id','$artikel_id','$kurztext_de','$menge','$sort','$lieferdatum','angelegt','$projekt','$vpe','$bestellnummer','".$this->app->DB->real_escape_string($bezeichnunglieferant)."','$preis','$waehrung','$umsatzsteuer',$steuersatzSqlValue)"); + + $posid = $this->app->DB->GetInsertID(); + } + else if ($cmd==='auftrag' || $cmd==='angebot' || $cmd==='rechnung') + { + $this->app->DB->Insert("INSERT INTO {$cmd}_position (id,{$cmd},artikel,bezeichnung,beschreibung, + nummer,menge,preis, waehrung, sort,lieferdatum, umsatzsteuer, steuersatz, status,projekt,vpe,punkte,bonuspunkte,mlmdirektpraemie) + VALUES ('','$id','$artikel_id','".$this->app->DB->real_escape_string($bezeichnung)."','$kurztext_de','$nummer','$menge','$preis','$waehrung','$sort', + '$lieferdatum','$umsatzsteuer',$steuersatzSqlValue,'angelegt','$projekt','$vpe','$mlmpunkte','$mlmbonuspunkte','$mlmdirektpraemie')"); + + $posid = $this->app->DB->GetInsertID(); + } + else { + $posid = null; + $this->app->erp->RunHook('artikel_profisuche', 4, $cmd, $id, $artikel_id, $posid); + if($posid === null){ + $this->app->DB->Insert("INSERT INTO {$cmd}_position (id,{$cmd},artikel,bezeichnung,beschreibung,nummer,menge,preis, waehrung, sort,lieferdatum, umsatzsteuer, steuersatz, status,projekt,vpe) + VALUES ('','$id','$artikel_id','".$this->app->DB->real_escape_string($bezeichnung)."','$kurztext_de','$nummer','$menge','$preis','$waehrung','$sort','$lieferdatum','$umsatzsteuer',$steuersatzSqlValue,'angelegt','$projekt','$vpe')"); + + $posid = $this->app->DB->GetInsertID(); + } + } + + if($cmd=="angebot" || $cmd=="auftrag" || $cmd=="rechnung" || $cmd=="gutschrift"){ + $this->app->erp->RunHook("beleg_afterinsertposition", 5, $cmd, $id, $artikel_id, $menge, $posid); + } + + if($cmd!="" && $posid > 0 && $id > 0) + { + $this->app->erp->CheckFreifelderEinzelPos($cmd, $id, true, $posid); + } + + // Batch-Insert wird für Artikelmatrix benötigt + // Pro Artikel der eingefügt werden soll, wird ein AJAX-Request auf diese Methode ausgeführt + $batchInsert = $this->app->Secure->GetGET('batch') === 'true'; + if ($batchInsert === true) { + header('Content-Type: application/json'); + echo json_encode(['success' => true]); + $this->app->erp->ExitWawi(); + } + + $this->app->Location->execute("index.php?module={$cmd}&action=positionen&id=$id&fmodul=$fmodul"); + } + + if($anlegen!='') + { + // speichern ?? + //echo 'speichern'; + + if($cmd==='lieferschein') + { + if($name_de=='' || $menge=='') + { + $this->app->Tpl->Set('MESSAGE',"
Artikel (DE) und Menge sind Pflichtfelder!
"); + $error = 1; + } + } else { + if($name_de=='' || $menge=='' || $preis=='') + { + $this->app->Tpl->Set('MESSAGE',"
Artikel (DE), Preis und Menge sind Pflichtfelder!
"); + $error = 1; + } + } + if($error!=1) + { + $sort = (int)$this->app->DB->Select("SELECT IFNULL(MAX(sort),0) FROM {$cmd}_position WHERE {$cmd}='$id' LIMIT 1"); + $sort++; + + $tmp = trim($adresse); + $rest = $this->app->erp->FirstTillSpace($tmp); + + if($rest > 0){ + $adresse = $this->app->DB->Select("SELECT id FROM adresse WHERE lieferantennummer='$rest' AND geloescht=0 AND firma='" . $this->app->User->GetFirma() . "' AND lieferantennummer!='' LIMIT 1"); + } + else { + $adresse=''; + } + + if($adresse <= 0 && $cmd==='bestellung') + { + $adresse = $this->app->DB->Select("SELECT adresse FROM bestellung WHERE id='$id' LIMIT 1"); + } + + $artikelart = $typ; + $lieferant = $adresse; + $bezeichnung = $name_de; + $waehrung = 'EUR'; + $lieferdatum = '00.00.0000'; + $vpe = ''; + $preis = str_replace(',','.',$preis); + + if($projekt!=''){ + $projekt = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung='$projekt' AND firma='" . $this->app->User->GetFirma() . "' LIMIT 1"); + } + else { + $projekt_bevorzugt = (int)$this->app->DB->Select("SELECT u.projekt_bevorzugen FROM `user` AS u WHERE u.id = '".$this->app->User->GetID()."' LIMIT 1"); + if($projekt_bevorzugt === 1){ + $projekt = $this->app->DB->Select("SELECT u.projekt FROM `user` AS u WHERE u.id = '".$this->app->User->GetID()."' LIMIT 1"); + }else{ + $projekt = $this->app->User->DefaultProjekt(); + } + } + + $neue_nummer = $this->app->erp->GetNextArtikelnummer($artikelart,$this->app->User->GetFirma(),$projekt); + + // anlegen als artikel + $umsatzsteuerArtikel = (empty($umsatzsteuer)) ? 'normal' : $umsatzsteuer; + $this->app->DB->Insert("INSERT INTO artikel (typ,nummer,projekt,name_de,anabregs_text,umsatzsteuer,adresse,firma,internerkommentar,lagerartikel,allelieferanten) + VALUES ('$artikelart','$neue_nummer','$projekt','$bezeichnung','$kurztext_de','$umsatzsteuerArtikel','$lieferant','".$this->app->User->GetFirma()."','$internerkommentar','$lagerartikel','$allelieferanten')"); + + $artikel_id = $this->app->DB->GetInsertID(); + // einkaufspreis anlegen + + $lieferdatum = $this->app->String->Convert($lieferdatum,"%1.%2.%3","%3-%2-%1"); + + if($cmd==="lieferschein") + { + $this->app->DB->Insert("INSERT INTO lieferschein_position (id,{$cmd},artikel,bezeichnung,beschreibung,nummer,menge,sort,lieferdatum, status,projekt,vpe) + VALUES ('','$id','$artikel_id','$bezeichnung','$kurztext_de','$neue_nummer','$menge','$sort','$lieferdatum','angelegt','$projekt','$vpe')"); + } + else if($cmd==="anfrage") + { + $this->app->DB->Insert("INSERT INTO anfrage_position (id,{$cmd},artikel,bezeichnung,beschreibung,nummer,menge,sort,lieferdatum, projekt,vpe) + VALUES ('','$id','$artikel_id','$bezeichnung','$kurztext_de','$neue_nummer','$menge','$sort','$lieferdatum','$projekt','$vpe')"); + + $this->app->erp->AddEinkaufspreis($artikel_id,$menge,$lieferant,$bestellnummer,$bezeichnunglieferant,$preis,$waehrung); + } + else if($cmd=="preisanfrage") + { + $this->app->DB->Insert("INSERT INTO preisanfrage_position (id,{$cmd},artikel,bezeichnung,beschreibung,nummer,menge,sort,lieferdatum, projekt,vpe) + VALUES ('','$id','$artikel_id','$bezeichnung','$kurztext_de','$neue_nummer','$menge','$sort','$lieferdatum','$projekt','$vpe')"); + + $this->app->erp->AddEinkaufspreis($artikel_id,$menge,$lieferant,$bestellnummer,$bezeichnunglieferant,$preis,$waehrung); + } + + + else if($cmd==="bestellung") + { + if($bezeichnunglieferant=="") $bezeichnunglieferant=$bezeichnung; + $this->app->DB->Insert("INSERT INTO bestellung_position ({$cmd},artikel,beschreibung,menge,sort,lieferdatum, status,projekt,vpe,bestellnummer,bezeichnunglieferant,preis,waehrung,umsatzsteuer,steuersatz) + VALUES ('$id','$artikel_id','$kurztext_de','$menge','$sort','$lieferdatum','angelegt','$projekt','$vpe','$bestellnummer','$bezeichnunglieferant','$preis','$waehrung','$umsatzsteuer',$steuersatzSqlValue)"); + + // $this->app->DB->Insert("INSERT INTO einkaufspreise (id,artikel,adresse,objekt,projekt,preis,ab_menge,angelegt_am,bearbeiter,bestellnummer,bezeichnunglieferant) + // VALUES ('','$artikel_id','$lieferant','Standard','$projekt','$preis','$menge',NOW(),'".$this->app->User->GetName()."','$bestellnummer','$bezeichnunglieferant')"); + + $this->app->erp->AddEinkaufspreis($artikel_id,$menge,$lieferant,$bestellnummer,$bezeichnunglieferant,$preis,$waehrung); + + } else { // angebot auftrag rechnung gutschrift + $this->app->DB->Insert("INSERT INTO verkaufspreise (artikel,adresse,objekt,projekt,preis,ab_menge,angelegt_am,bearbeiter) + VALUES ('$artikel_id','0','Standard','$projekt','$preis','$menge',NOW(),'".$this->app->User->GetName()."')"); + + $this->app->DB->Insert("INSERT INTO {$cmd}_position ({$cmd},artikel,bezeichnung,beschreibung,nummer,menge,preis, waehrung, sort,lieferdatum, umsatzsteuer, steuersatz, status,projekt,vpe) + VALUES ('$id','$artikel_id','$bezeichnung','$kurztext_de','$neue_nummer','$menge','$preis','$waehrung','$sort','$lieferdatum','$umsatzsteuer',$steuersatzSqlValue,'angelegt','$projekt','$vpe')"); + } + + $this->app->Location->execute("index.php?module={$cmd}&action=positionen&id=$id"); + } + } + + $umsatzsteuerauswahl = ''; + $umsatzsteuerauswahl .= ''; + $umsatzsteuerauswahl .= ''; + + $this->app->Tpl->Set('UMSATZSTEUERAUSWAHL',$umsatzsteuerauswahl); + $this->app->Tpl->Set('INDIVIDUELLERSTEUERSATZ',$steuersatz); + $this->app->Tpl->Set('PROJEKT',$projekt); + $this->app->Tpl->Set('ADRESSE',$adresse); + $this->app->Tpl->Set('MENGE',$menge); + $this->app->Tpl->Set('PREIS',$preis); + $this->app->Tpl->Set('BESTELLNUMMER',$bestellnummer); + $this->app->Tpl->Set('BEZEICHNUNGLIEFERANT',$bezeichnunglieferant); + $this->app->Tpl->Set('NAME_DE',$name_de); + $this->app->Tpl->Set('KURZTEXT_DE',$kurztext_de); + $this->app->Tpl->Set('INTERNERKOMMENTAR',$internerkommentar); + + if (!empty($steuersatz)) { + $this->app->Tpl->Set('STEUERSATZEINBLENDEN','checked'); + } + if($lagerartikel=='1'){ + $this->app->Tpl->Set('LAGERARTIKEL','checked'); + } + + $this->app->YUI->AutoComplete('projekt','projektname',1); + $this->app->YUI->AutoComplete('adresse','lieferant'); + $this->app->YUI->AutoComplete('steuersatz-individuell','steuersatz',1); + + if($cmd==='auftrag' || $cmd==='rechnung' || $cmd==='lieferschein' || $cmd==='angebot' || $cmd==='gutschrift' || $cmd==='anfrage') + { + $adresse = $this->app->DB->Select("SELECT adresse FROM {$cmd} WHERE id='$id' LIMIT 1"); + $kunde = $this->app->DB->Select("SELECT CONCAT(name,' ',kundennummer,'') FROM adresse WHERE id='$adresse' LIMIT 1"); + } else if ($cmd==='bestellung' || $cmd==='preisanfrage') { + $adresse = $this->app->DB->Select("SELECT adresse FROM {$cmd} WHERE id='$id' LIMIT 1"); + $kunde = $this->app->DB->Select("SELECT CONCAT(name,' ',lieferantennummer,'') FROM adresse WHERE id='$adresse' LIMIT 1"); + } + + + if($cmd==='lieferschein'){ + $this->app->YUI->ParserVarIf('LIEFERSCHEIN', 1); + } + else{ + $this->app->YUI->ParserVarIf('LIEFERSCHEIN', 0); + } + + + $this->app->Tpl->Set('KUNDE',$kunde); + + if($cmd==='bestellung' || $cmd==='preisanfrage'){ + $this->app->YUI->TableSearch('ARTIKEL', 'lieferantartikelpreise', 'show','','',basename(__FILE__), __CLASS__); + } + else{ + $this->app->YUI->TableSearch('ARTIKEL', 'kundeartikelpreise', 'show','','',basename(__FILE__), __CLASS__); + } + + $this->app->Tpl->Set('ID', $id); + $this->app->Tpl->Set('FMODULE', $cmd); + $this->app->Tpl->Set('ARTIKELBAUM',$this->app->Tpl->Parse('return', 'artikel_artikelbaum.tpl',true)); + + $this->app->Tpl->Set('PAGE',"
Sie können hier die Stammdaten durchsuchen oder einen neuen Artikel angelegen Abbrechen
"); + + $artikelart = $this->app->erp->GetArtikelgruppe($projekt); + $typ = $this->app->Secure->GetPOST('typ'); + $this->app->Tpl->Set('ARTIKELGRUPPE',$this->app->erp->GetSelectAsso($artikelart, $typ)); + + if($this->app->erp->Firmendaten('briefhtml')=='1') + { + $this->app->YUI->CkEditor("kurztext_de","belege",array('height'=>'100px')); + $this->app->YUI->CkEditor("internerkommentar","basic",array('height'=>'100px')); + } + + $this->app->Tpl->Add('PROCESSID', $id); + $this->app->Tpl->Add('PROCESSTYPE', $cmd); + + if ($cmd==='bestellung' || $cmd==='preisanfrage'){ + $this->app->Tpl->Parse('PAGE', 'aarlg_artikelbestellungneu.tpl'); + } else{ + $this->app->Tpl->Parse('PAGE', 'aarlg_artikelneu.tpl'); + } + + $this->app->BuildNavigation=false; + } + + public function ArtikelAjaxWerte() + { + $id = $this->app->Secure->GetGET('id', 'base64'); + if(!is_numeric($id)) { + $id = base64_decode($id); + } + $name = $this->app->Secure->GetGET('name'); + $sid = $this->app->Secure->GetGET('sid'); + $smodule = $this->app->Secure->GetGET('smodule'); + $menge = $this->app->Secure->GetGET('menge'); + $mengeold = $menge; + $menge = str_replace(',','.',$menge); + $cmd = $this->app->Secure->GetGET('cmd'); + $adresse = $this->app->Secure->GetGET('adresse'); + $vpe = $this->app->Secure->GetGET('vpe'); + + // wenn plus in Artikelnummer IN GET + //$id = str_replace('++',' ',$id); + + // if($id=="") exit; + + if($smodule==='bestellung') + { + if($name!=''){ + $id = $this->app->DB->Select("SELECT id FROM artikel WHERE name_de='$name' AND geloescht!=1 AND intern_gesperrt!=1 LIMIT 1"); + if($id<=0){ + $id = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer='$name' AND geloescht!=1 AND intern_gesperrt!=1 LIMIT 1"); + } + } else { + $commandline = $id; + $tmp_id = explode(' ',$commandline); + $tmp_id = $tmp_id[0]; + // $id = substr($id,0,6); + if($tmp_id!='') + { + $id = $tmp_id; + $tmp_id = $commandline; + // hole ab menge aus + + $n = strpos($tmp_id, $id.' '); + if ( false!==$n ) { + $tmp_id = substr($tmp_id, 0, $n); + } + $start_pos = strpos ($commandline, 'ab Menge '); + $commandline = substr($commandline,$start_pos + strlen('ab Menge ')); + $end_pos = strpos ($commandline, ' '); + if(trim(substr($commandline,0,$end_pos)) > 0) + $menge = trim(substr($commandline,0,$end_pos)); + + } else { + $this->app->ExitXentral(); + } + $id = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer='$id' AND geloescht!=1 AND intern_gesperrt!=1 LIMIT 1"); + } + if(!is_numeric($id)) + { + echo '#*##*##*##*##*##*##*#'; + $this->app->ExitXentral(); + } + + $waehrung = $this->app->DB->Select("SELECT waehrung FROM $smodule WHERE id='$sid' LIMIT 1"); + if(strtoupper($waehrung)==='EURO') { + $waehrung='EUR'; + } // nur fuer den uebergang damit nicht alte Kunden dauern mit Tickets kommen 2.2.2019 BS + + $adresse = $this->app->DB->Select("SELECT adresse FROM $smodule WHERE id='$sid' LIMIT 1"); + // $id = substr($id,0,6); + + $name = $this->app->DB->Select("SELECT name_de FROM artikel WHERE id='$id' LIMIT 1"); + + $sprache = $this->app->DB->Select("SELECT sprache FROM adresse WHERE id='$adresse' LIMIT 1"); + + $name_en = $this->app->DB->Select("SELECT name_en FROM artikel WHERE id='$id' LIMIT 1"); + + if($sprache==='englisch' && $name_en!=''){ + $name = $name_en; + } + + $bestellnummer = $this->app->DB->Select("SELECT bestellnummer FROM einkaufspreise + WHERE artikel='$id' AND adresse='$adresse' AND ab_menge<='$menge' AND (gueltig_bis>=NOW() OR gueltig_bis='0000-00-00') AND geloescht=0 ORDER by ab_menge DESC LIMIT 1"); + $bezeichnunglieferant = $this->app->DB->Select("SELECT bezeichnunglieferant FROM einkaufspreise + WHERE artikel='$id' AND adresse='$adresse' AND ab_menge<='$menge' AND (gueltig_bis>=NOW() OR gueltig_bis='0000-00-00') AND geloescht=0 ORDER by ab_menge DESC LIMIT 1"); + if(empty($vpe)){ + $vpe = $this->app->DB->Select("SELECT vpe FROM einkaufspreise + WHERE artikel='$id' AND adresse='$adresse' AND ab_menge<='$menge' AND (gueltig_bis>=NOW() OR gueltig_bis='0000-00-00') AND geloescht=0 ORDER by ab_menge DESC LIMIT 1"); + } + if($bestellnummer=="") { + $bestellnummer = $this->app->DB->Select("SELECT bestellnummer FROM einkaufspreise + WHERE artikel='$id' AND adresse='$adresse' AND (gueltig_bis>=NOW() OR gueltig_bis='0000-00-00') AND geloescht=0 LIMIT 1"); + } + + if($bezeichnunglieferant=="") { + $bezeichnunglieferant = $this->app->DB->Select("SELECT bezeichnunglieferant FROM einkaufspreise + WHERE artikel='$id' AND adresse='$adresse' AND (gueltig_bis>=NOW() OR gueltig_bis='0000-00-00') AND geloescht=0 LIMIT 1"); + } + + $nummer = $this->app->DB->Select("SELECT nummer FROM artikel WHERE id='$id' LIMIT 1"); + $projekt = $this->app->DB->Select("SELECT p.abkuerzung FROM artikel a LEFT JOIN projekt p ON p.id=a.projekt WHERE a.id='$id' LIMIT 1"); + //$projekt_id = $this->app->DB->Select("SELECT projekt FROM artikel WHERE id='$id' LIMIT 1"); + //$ab_menge = $this->app->DB->Select("SELECT ab_menge FROM einkaufspreise WHERE artikel='$id' AND adresse='$adresse' AND (gueltig_bis>=NOW() OR gueltig_bis='0000-00-00') AND geloescht=0 LIMIT 1"); + //$vpe = $this->app->DB->Select("SELECT vpe FROM einkaufspreise WHERE artikel='$id' AND adresse='$adresse' AND (gueltig_bis>=NOW() OR gueltig_bis='0000-00-00') AND geloescht=0 LIMIT 1"); + $vpe = str_replace(',','.',$vpe); + + if($vpe == 1){ + $andVpe = ''; + } + else{ + $andVpe = 'AND e.vpe = \''.$vpe.'\''; + } + + if($waehrung=="" || $waehrung=="EUR") + { + + $ek = $this->app->DB->Select( + "SELECT e.preis + FROM `einkaufspreise` AS `e` + WHERE e.artikel='$id' + AND e.adresse='$adresse' + AND e.ab_menge<='$menge' + AND (e.gueltig_bis>=NOW() OR e.gueltig_bis='0000-00-00') + AND e.geloescht=0 + $andVpe + ORDER BY e.ab_menge DESC + LIMIT 1" + ); + + $waehrung = $this->app->DB->Select( + "SELECT e.waehrung + FROM `einkaufspreise` AS `e` + WHERE e.artikel='$id' + AND e.adresse='$adresse' + AND e.ab_menge<='$menge' + AND (e.gueltig_bis>=NOW() OR e.gueltig_bis='0000-00-00') + AND e.geloescht=0 + $andVpe + ORDER BY e.ab_menge DESC + LIMIT 1" + ); + } else{ + $ek = $this->app->DB->Select( + "SELECT e.preis + FROM `einkaufspreise` AS `e` + WHERE e.artikel='$id' + AND e.adresse='$adresse' + AND e.ab_menge<='$menge' + AND (e.gueltig_bis>=NOW() OR e.gueltig_bis='0000-00-00') + AND e.waehrung='$waehrung' + AND e.geloescht=0 + $andVpe + ORDER BY e.ab_menge DESC + LIMIT 1" + ); + + } + + if($bezeichnunglieferant=='') { + $bezeichnunglieferant=$name; + } + + $name = html_entity_decode($name, ENT_QUOTES, 'UTF-8'); + if($vpe > 1) + { + if($menge < $vpe) { + $menge = $vpe; + } + else { + $menge_vpe = $menge / $vpe; + $menge = ceil($menge_vpe)*$vpe; + } + //$ek = $menge*$ek; + } + $menge = (float)$menge; + // bei Bestellung + echo "$name#*#$nummer#*#$projekt#*#$ek#*#$menge#*#$bestellnummer#*#$bezeichnunglieferant#*#$vpe#*#$waehrung"; + } else { + //Pinguio fehler + if($id=='') + { + $name = $this->app->Secure->GetGET('name'); + if(trim($name)!='') + { + $id = $this->app->DB->Select("SELECT nummer FROM artikel WHERE nummer LIKE '$name' AND intern_gesperrt!=1 LIMIT 1"); + if($id =='') + { + $id = $this->app->DB->Select("SELECT nummer FROM artikel WHERE name_de LIKE '$name' AND intern_gesperrt!=1 LIMIT 1"); + + if($id=='') + { + $name = str_replace(' ',' ',$name); + $id = $this->app->DB->Select("SELECT nummer FROM artikel WHERE name_de LIKE '$name' AND intern_gesperrt!=1 LIMIT 1"); + //naechster fall + } + } + } else { + if(trim($name)!='') + { + // wenn name leer ist hole max position id + $id = $this->app->DB->Select("SELECT MAX(id) FROM ".$smodule."_position WHERE $smodule='$sid'"); + $id = $this->app->DB->Select("SELECT artikel FROM ".$smodule."_position WHERE id='$id' LIMIT 1"); + $id = $this->app->DB->Select("SELECT nummer FROM artikel WHERE id='$id' AND intern_gesperrt!=1 LIMIT 1"); + } + + } + if($id ==''){ + $this->app->ExitXentral(); + } + + } + // $id = substr($id,0,6); + //echo $id; + // if(!is_numeric($id)) + // exit; + + $tmp_id = explode(',',$id); + $id = $tmp_id[0]; + + $id = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer='$id' AND intern_gesperrt!=1 LIMIT 1"); + $warnung = 1-(int)$this->app->DB->Select("SELECT if(rabatt=1,1,vkmeldungunterdruecken) FROM artikel WHERE id = '$id' LIMIT 1"); + $adresse = $this->app->DB->Select("SELECT adresse FROM $smodule WHERE id='$sid' LIMIT 1"); + $waehrung = $this->app->DB->Select("SELECT waehrung FROM $smodule WHERE id='$sid' LIMIT 1"); + $posanz = (int)$this->app->DB->Select("SELECT count(id) FROM $smodule"."_position WHERE $smodule = '$sid'"); + //if($posanz == 0){ + // $waehrung = ''; + //} + + $sprache = $this->app->DB->Select("SELECT sprache FROM adresse WHERE id='$adresse' LIMIT 1"); + + $name = $this->app->DB->Select("SELECT name_de FROM artikel WHERE id='$id' LIMIT 1"); + + $name_en = $this->app->DB->Select("SELECT name_en FROM artikel WHERE id='$id' LIMIT 1"); + + if($sprache==='englisch' && $name_en!=''){ + $name = $name_en; + } + + $nummer = $this->app->DB->Select("SELECT nummer FROM artikel WHERE id='$id' LIMIT 1"); + $projekt = $this->app->DB->Select("SELECT p.abkuerzung FROM artikel a LEFT JOIN projekt p ON p.id=a.projekt WHERE a.id='$id' LIMIT 1"); + + //$projekt_id = $this->app->DB->Select("SELECT projekt FROM artikel WHERE id='$id' LIMIT 1"); + + // $ab_menge = $this->app->DB->Select("SELECT ab_menge FROM verkaufspreise WHERE artikel='$id' AND ab_menge=1 AND geloescht=0 LIMIT 1"); + $ab_menge = $menge; + + if($smodule==="inventur") + $preis = $this->app->erp->GetEinkaufspreis($id,$menge,$adresse); + else { + if(method_exists($this->app->erp, 'GetVerkaufspreisMitWaehrung')) + { + $preis = $this->app->erp->GetVerkaufspreisMitWaehrung($id,$menge,$adresse, $waehrung); + }else{ + $preis = $this->app->erp->GetVerkaufspreis($id,$menge,$adresse, $waehrung); + } + } + + if($smodule === 'auftrag' || $smodule === 'rechnung' || $smodule === 'gutschrift' || $smodule === 'angebot' || $smodule === 'proformarechnung') + { + $_anrede = $this->app->DB->Select("SELECT typ FROM $smodule WHERE id = '$sid' LIMIT 1"); + $_projekt = $this->app->DB->Select("SELECT projekt FROM $smodule WHERE id = '$sid' LIMIT 1"); + $_adresse = $this->app->DB->Select("SELECT adresse FROM $smodule WHERE id = '$sid' LIMIT 1"); + $funktion = ucfirst($smodule).'MitUmsatzeuer'; + if($this->app->erp->AnzeigePositionenBrutto($_anrede, $smodule, $_projekt, $_adresse) && $this->app->erp->$funktion($sid)) + { + $umsatzsteuer = $this->app->DB->Select("SELECT umsatzsteuer FROM artikel WHERE id = '$id' LIMIT 1"); + if($umsatzsteuer === 'ermaessigt') + { + $preis = round($preis* (1+ (float)$this->app->DB->Select("SELECT steuersatz_ermaessigt FROM $smodule WHERE id = '$sid' LIMIT 1")/100),7); + }elseif($umsatzsteuer !== 'befreit') + { + $preis = round($preis * (1+ (float)$this->app->DB->Select("SELECT steuersatz_normal FROM $smodule WHERE id = '$sid' LIMIT 1")/100),7); + } + } + } + + $name = html_entity_decode($name, ENT_QUOTES, 'UTF-8'); + + $ab_menge = round((float)$ab_menge,8); + switch($smodule) + { + case 'auftrag': + case 'gutschrift': + case 'angebot': + case 'rechnung': + case 'proformarechnung': + if(!isset($waehrung) || $waehrung == ''){ + $waehrung = $this->app->erp->GetVerkaufspreisWaehrung($id,$menge,$adresse); + } + if(strpos($mengeold, ',') && strpos($ab_menge,'.') && strpos($ab_menge ,',') === false){ + $ab_menge = str_replace('.',',',$ab_menge); + } + $this->app->erp->RunHook('artikel_ajaxwerte',8, $id, $smodule, $name,$nummer, $preis, $ab_menge, $waehrung, $warnung); + echo "$name#*#$nummer#*#$projekt#*#$preis#*#$ab_menge#*#$waehrung#*#$warnung#"; + break; + default: + echo "$name#*#$nummer#*#$projekt#*#$preis#*#$ab_menge"; + break; + } + } + $this->app->ExitXentral(); + } + + public function ArtikelWareneingang() + { + $this->app->Tpl->Add('UEBERSCHRIFT',' (Wareneingang)'); + $this->ArtikelMenu(); + $this->app->Tpl->Set('PAGE','wareneingang'); + } + + public function ArtikelReservierung() + { + $this->app->Tpl->Add('UEBERSCHRIFT',' (Reservierungen)'); + $this->ArtikelMenu(); + $this->app->Tpl->Set('PAGE','reservierung'); + } + + + public function ArtikelOffeneAuftraege() + { + $id = $this->app->Secure->GetGET('id'); + $this->app->Tpl->Add('TABTEXT','Aufträge'); + $this->ArtikelMenu(); + + // easy table mit arbeitspaketen YUI als template + + $this->app->YUI->TableSearch('TAB1','artikel_auftraege_offen', 'show','','',basename(__FILE__), __CLASS__); + + $summe = $this->app->DB->Select("SELECT TRIM(SUM(ap.menge)-SUM(ap.geliefert_menge))+0 FROM auftrag_position ap LEFT JOIN auftrag a ON a.id=ap.auftrag WHERE ap.artikel='$id' AND ap.geliefert_menge < ap.menge AND a.status='freigegeben'"); + $euro= $this->app->DB->Select("SELECT FORMAT(SUM(ap.preis*(100-ap.rabatt)/100*ap.menge),2,'de_DE') FROM auftrag_position ap LEFT JOIN auftrag a ON a.id=ap.auftrag WHERE ap.artikel='$id' AND ap.geliefert_menge < ap.menge AND a.status='freigegeben'"); + + $this->app->Tpl->Add('TAB1',"
Summe offen: $summe Stück (Summe EUR: $euro EUR)
"); + + $this->app->YUI->TableSearch('TAB2','artikel_auftraege_versendet', 'show','','',basename(__FILE__), __CLASS__); + + $this->app->Tpl->Parse('PAGE','artikel_auftraege.tpl'); + } + + public function ArtikelDateien() + { + $id = $this->app->Secure->GetGET('id'); + $this->ArtikelMenu(); + $this->app->Tpl->Add('UEBERSCHRIFT',' (Dateien)'); + $cmd = $this->app->Secure->GetGET('cmd'); + if($cmd === 'down' || $cmd === 'up') { + $this->app->DB->Update( + sprintf( + 'UPDATE artikel SET bildvorschau = \'\' WHERE id = %d LIMIT 1', + (int)$id + ) + ); + } + $this->app->YUI->DateiUpload('PAGE','Artikel',$id); + } + + public function ArtikelCopyWaehrungen($id, $typ = 'verkauf') + { + $res = array('status' => 0); + $dat = $this->app->Secure->GetPOST('dat'); + $menge_ab = (int)$this->app->Secure->GetPOST('menge_ab'); + $art = $this->app->Secure->GetPOST('art'); + $bezeichnunglieferant = $this->app->Secure->GetPOST('bezeichnunglieferant'); + $bestellnummer = $this->app->Secure->GetPOST('bestellnummer'); + + $gruppe = $this->app->erp->ReplaceGruppe(true, $this->app->Secure->GetPOST('gruppe'),true); + $kundenartikelnummer = $this->app->Secure->GetPOST('kundenartikelnummer'); + $gueltig_bis = $this->app->Secure->GetPOST('gueltig_bis'); + if($gueltig_bis){ + $gueltig_bis = $this->app->String->Convert($gueltig_bis,'%1.%2.%3','%3-%2-%1'); + } + $vpe = (int)$this->app->Secure->GetPOST('vpe'); + if($vpe < 1){ + $vpe = 1; + } + if($menge_ab < 1){ + $menge_ab = 1; + } + if(!$dat) + { + echo json_encode($res); + $this->app->ExitXentral(); + } + $data = explode(';',$dat); + foreach($data as $k => $v) + { + $v = trim($v); + if(strpos($v,':')) + { + $va = explode(':',$v); + if(count($va) > 1){ + $waehrung = trim($va[0]); + $preis = (float)str_replace(',','.',trim($va[1])); + if($waehrung) + { + $waehrungen[$waehrung] = $preis; + } + } + } + } + if(!isset($waehrungen)) + { + echo json_encode($res); + $this->app->ExitXentral(); + } + + switch($typ) + { + case 'einkauf': + $adresse = $this->app->erp->ReplaceLieferant(true,$this->app->Secure->GetPOST('adresse'),true); + $artikel = $this->app->DB->Select("SELECT id FROM artikel WHERE id = '$id' LIMIT 1"); + + if(!$artikel) + { + echo json_encode($res); + $this->app->ExitXentral(); + } + foreach($waehrungen as $waehrung => $preis) + { + $this->app->erp->AddEinkaufspreis($artikel,$menge_ab,$adresse,$bestellnummer,$bezeichnunglieferant,$preis,$waehrung,$vpe); + } + $res['status'] = 1; + echo json_encode($res); + $this->app->ExitXentral(); + break; + case 'einkaufeditpopup': + $artikel = $this->app->DB->Select("SELECT artikel FROM einkaufspreise WHERE id = '$id' LIMIT 1"); + if(!$artikel) + { + echo json_encode($res); + $this->app->ExitXentral(); + } + foreach($waehrungen as $waehrung => $preis) + { + $newid = $this->app->DB->MysqlCopyRow("einkaufspreise","id",$id); + $this->app->DB->Update("UPDATE einkaufspreise SET geloescht='0', gueltig_bis='0000-00-00', nichtberechnet = 0,preis = '$preis', waehrung = '".$waehrung."' WHERE id='$newid' LIMIT 1"); + } + $res['status'] = 1; + echo json_encode($res); + $this->app->ExitXentral(); + break; + case 'verkauf': + $adresse = $this->app->erp->ReplaceKunde(true,$this->app->Secure->GetPOST('adresse'),true); + $artikel = $this->app->DB->Select("SELECT id FROM artikel WHERE id = '$id' LIMIT 1"); + if(!$artikel) + { + echo json_encode($res); + $this->app->ExitXentral(); + } + foreach($waehrungen as $waehrung => $preis) + { + $this->app->erp->AddVerkaufspreis($artikel,$menge_ab,$adresse,$preis,$waehrung,$kundenartikelnummer, $gruppe); + } + $res['status'] = 1; + echo json_encode($res); + $this->app->ExitXentral(); + break; + case 'verkaufeditpopup': + $artikel = $this->app->DB->Select("SELECT artikel FROM verkaufspreise WHERE id = '$id' LIMIT 1"); + if(!$artikel) + { + echo json_encode($res); + $this->app->ExitXentral(); + } + foreach($waehrungen as $waehrung => $preis) + { + $newid = $this->app->DB->MysqlCopyRow('verkaufspreise','id',$id); + $this->app->DB->Update("UPDATE verkaufspreise SET geloescht='0', gueltig_bis='0000-00-00', nichtberechnet = 0,preis = '$preis', waehrung = '".$waehrung."' WHERE id='$newid' LIMIT 1"); + } + $res['status'] = 1; + echo json_encode($res); + $this->app->ExitXentral(); + break; + } + + echo json_encode($res); + $this->app->ExitXentral(); + } + + public function ArtikelVerkauf() + { + // rechne gueltig_bis gestern aus + // erstelle array objekt, adressse, ab_menge,preis + // wenn es doppelte gibt rote meldung!!! + //$this->app->Tpl->Set('MESSAGE',"
Achtung es gibt für eine Kundengruppe bei einer gleichen Menge den Preis öfters! Deaktvieren oder löschen Sie doppelte Preise!
"); + if($this->app->Secure->GetPOST('newpreis')) + { + $id = $this->app->Secure->GetGET('id'); + $this->ArtikelCopyWaehrungen($id, 'verkauf'); + } + $waehrungenstringvk = ''; + + $standardwaehrung = $this->app->erp->GetStandardWaehrung(); + + $waehrungenvk = $this->app->DB->SelectArr("SELECT DISTINCT waehrung FROM (SELECT DISTINCT waehrung_von AS waehrung FROM waehrung_umrechnung WHERE (ISNULL(gueltig_bis) OR gueltig_bis >= NOW() OR gueltig_bis = '0000-00-00') UNION SELECT DISTINCT waehrung_nach AS waehrung FROM waehrung_umrechnung WHERE (ISNULL(gueltig_bis) OR gueltig_bis >= NOW() OR gueltig_bis = '0000-00-00')) AS waehrungen"); + if($waehrungenvk != ''){ + $standardwvorhanden = false; + if($standardwaehrung == '') { + $standardwaehrung = $waehrungenvk[0]['waehrung']; + } + foreach($waehrungenvk as $key=>$value) { + if($value['waehrung'] == $standardwaehrung){ + $standardwvorhanden = true; + } + $waehrungenstringvk .= "'; + } + $this->app->Tpl->Set('STANDARDWAEHRUNGV', $standardwaehrung); + if($standardwvorhanden == false){ + $waehrungenstringvk .= "'; + } + }else{ + if($standardwaehrung != ''){ + if($standardwaehrung !== 'EUR' && $standardwaehrung !== 'USD' && $standardwaehrung !== 'CAD' && $standardwaehrung !== 'CHF' && $standardwaehrung !== 'GBP'){ + $waehrungenstringvk .= " + + + + "; + } + + + $this->app->Tpl->Set('WAEHRUNGVERKAUF', $waehrungenstringvk); + + + + $this->app->Tpl->Add('UEBERSCHRIFT',' (Verkauf)'); + $this->app->Tpl->Set('SUBSUBHEADING','Verkaufspreise'); + $this->ArtikelMenu(); + $this->Preisrechner(); + $id = $this->app->Secure->GetGET('id'); + // neues arbeitspaket + $widget = new WidgetVerkaufspreise($this->app,'TAB2'); + $widget->form->SpecialActionAfterExecute('none', + "index.php?module=artikel&action=verkauf&id=$id"); + + //if($this->app->Secure->GetPOST("submit")!="") + //$this->app->erp->EnableTab("tabs-2"); + + //$widget->Create(); + + + $this->app->YUI->TableSearch('TAB1','verkaufspreise', 'show','','',basename(__FILE__), __CLASS__); + $stueckliste = $this->app->DB->Select("SELECT stueckliste FROM artikel WHERE id='$id' LIMIT 1"); + $porto = $this->app->DB->Select("SELECT porto FROM artikel WHERE id='$id' LIMIT 1"); + + if($stueckliste!='1') { + $max_preis = $this->app->DB->Select("SELECT MAX(preis) FROM einkaufspreise WHERE artikel='$id' AND (gueltig_bis='0000-00-00' + OR gueltig_bis >= curdate()) AND geloescht!=1 LIMIT 1"); + + $min_preis = $this->app->DB->Select("SELECT MIN(preis) FROM einkaufspreise WHERE artikel='$id' AND (gueltig_bis='0000-00-00' + OR gueltig_bis >= curdate()) AND geloescht!=1 LIMIT 1"); + + $waehrung = $this->app->DB->Select("SELECT waehrung FROM einkaufspreise WHERE artikel='$id' AND (gueltig_bis='0000-00-00' + OR gueltig_bis >= curdate()) AND geloescht!=1 ORDER by preis LIMIT 1"); + + $max_preis2 = $max_preis; + $min_preis2 = $min_preis; + + $min_preis = $this->app->erp->EUR($min_preis*(($this->app->erp->GetStandardMarge()/100.0)+1.0)*1.0); + $max_preis = $this->app->erp->EUR($max_preis*(($this->app->erp->GetStandardMarge()/100.0)+1.0)*1.0); + + $min_preis2 = $this->app->erp->EUR($min_preis2/(100-$this->app->erp->GetStandardMarge())*100); + $max_preis2 = $this->app->erp->EUR($max_preis2/(100-$this->app->erp->GetStandardMarge())*100); + + } + + if($porto=='1') { + $this->app->Tpl->Add('TAB1',"
Kundenspezifische Preise werden immer priorisiert!
"); + } + else { + + if($this->app->erp->GetStandardMarge() > 0)// && $stueckliste!="1") + { + if($max_preis <>0){ + $this->app->Tpl->Add('TAB1', "
Empfohlener Verkaufspreis netto (für teuersten EK Preis): $max_preis $waehrung bzw. als Aufschlagsrechnung $max_preis2 $waehrung
"); + } + + if($min_preis <>0){ + $this->app->Tpl->Add('TAB1', "
Empfohlener Verkaufspreis netto (für billigsten EK Preis): $min_preis $waehrung bzw. als Aufschlagsrechnung $min_preis2 $waehrung
"); + } + + + if($max_preis <>0){ + $this->app->Tpl->Add('TAB2', "
Empfohlener Verkaufspreis netto (für teuersten EK Preis): $max_preis $waehrung bzw. als Aufschlagsrechnung $max_preis2 $waehrung
"); + } + if($min_preis <>0){ + $this->app->Tpl->Add('TAB2', "
Empfohlener Verkaufspreis netto (für billigsten EK Preis): $min_preis $waehrung bzw. als Aufschlagsrechnung $min_preis2 $waehrung
"); + } + } + } + + if($this->app->Secure->GetGET('cmd')==='popupedit'){ + $eid = (int)$this->app->Secure->GetPOST('id'); + + $data = $this->app->DB->SelectRow("SELECT id, artikel, adresse, preis, waehrung, ab_menge, vpe, vpe_menge, gueltig_bis, bemerkung, kundenartikelnummer, art, gruppe, nichtberechnet, gueltig_ab,if(kurs<0,'',".$this->app->erp->FormatMenge('kurs').") as kurs,IF(ISNULL(kursdatum),'',DATE_FORMAT(kursdatum,'%d.%m.%Y')) as kursdatum, inbelegausblenden FROM verkaufspreise WHERE id = '$eid' LIMIT 1"); + + if($data){ + if($data['adresse'] > 0 && $data['art'] === 'Kunde'){ + $ekundennummer = $this->app->DB->Select("SELECT kundennummer FROM adresse WHERE id = '".$data['adresse']."' LIMIT 1"); + $ekundenname = $this->app->DB->Select("SELECT name FROM adresse WHERE id = '".$data['adresse']."' LIMIT 1"); + $data['adresse'] = $ekundennummer." ".$ekundenname; + $data['gruppe'] = ''; + }elseif($data['adresse'] == 0 && $data['art'] === 'Kunde'){ + $data['adresse'] = ''; + $data['gruppe'] = ''; + } + + if($data['gruppe'] > 0 && $data['art'] === 'Gruppe'){ + $egruppenname = $this->app->DB->Select("SELECT name FROM gruppen WHERE id = '".$data['gruppe']."' LIMIT 1"); + $egruppenkennziffer = $this->app->DB->Select("SELECT kennziffer FROM gruppen WHERE id = '".$data['gruppe']."' LIMIT 1"); + $data['gruppe'] = $egruppenkennziffer." ".$egruppenname; + $data['adresse'] = ''; + } + + $data['ab_menge'] = str_replace('.',',',$data['ab_menge']); + $data['preis'] = str_replace('.',',',$data['preis']); + + if($data['gueltig_ab'] == '0000-00-00' || $data['gueltig_ab'] == '' || is_null($data['gueltig_ab'])){ + $data['gueltig_ab'] = "00.00.0000"; + }else{ + $data['gueltig_ab'] = date('d.m.Y',strtotime($data['gueltig_ab'])); + } + + if($data['gueltig_bis'] == '0000-00-00' || $data['gueltig_bis'] == '' || is_null($data['gueltig_bis'])){ + $data['gueltig_bis'] = "00.00.0000"; + }else{ + $data['gueltig_bis'] = date('d.m.Y',strtotime($data['gueltig_bis'])); + } + + }else{ + //$data['artikel'] = 0; + $data['adresse'] = ''; + $data['gruppe'] = ''; + $data['art'] = "Kunde"; + $data['preis'] = ''; + $data['waehrung'] = "EUR"; + $data['ab_menge'] = ''; + $data['vpe'] = ''; + $data['kundenartikelnummer'] = ''; + $data['gueltig_ab'] = ''; + $data['gueltig_bis'] = ''; + $data['bemerkung'] = ''; + $data['kurs'] = ''; + $data['kurdatum'] = ''; + $data['nichtberechnet'] = 0; + $data['inbelegausblenden'] = 0; + } + + echo json_encode($data); + $this->app->ExitXentral(); + } + + if($this->app->Secure->GetGET('cmd')==='popupsave'){ + $eid = $this->app->Secure->GetPOST('eid'); + $eartikelid = $this->app->Secure->GetPOST('eartikelid'); + $eart = trim($this->app->Secure->GetPOST('eart')); + $eadresse = trim($this->app->Secure->GetPOST('eadresse')); + $egruppe = trim($this->app->Secure->GetPOST('egruppe')); + $ekundenartikelnummer = trim($this->app->Secure->GetPOST('ekundenartikelnummer')); + $eab_menge = trim($this->app->Secure->GetPOST('eab_menge')); + $evpe = trim($this->app->Secure->GetPOST('evpe')); + $epreis = trim($this->app->Secure->GetPOST('epreis')); + $ewaehrung = trim($this->app->Secure->GetPOST('ewaehrung')); + $enichtberechnet = $this->app->Secure->GetPOST('enichtberechnet'); + $inbelegausblenden = $this->app->Secure->GetPOST('inbelegausblenden'); + $egueltig_ab = trim($this->app->Secure->GetPOST('egueltig_ab')); + $egueltig_bis = trim($this->app->Secure->GetPOST('egueltig_bis')); + $ebemerkung = trim($this->app->Secure->GetPOST('ebemerkung')); + + $error = ''; + + $eab_menge = str_replace(',', '.', $eab_menge); + if($eab_menge > 0 && $eab_menge != ''){ + }else{ + $error .= 'Mengef'."\n"; + } + + $kundenname = $eadresse; + if($eadresse != '' && $eart === 'Kunde'){ + $eadresse = explode(' ', $eadresse, 2); + $eadresse = $eadresse[0]; + + $eadresse = $this->app->DB->Select("SELECT id FROM adresse WHERE kundennummer = '$eadresse' AND kundennummer != '' AND geloescht = 0 LIMIT 1"); + if($eadresse != ''){ + }else{ + $error .= 'Adressef'."\n"; + } + }elseif($eadresse == '' || $eadresse <= 0){ + $eadresse = 0; + } + + if($egruppe != '' && $eart === 'Gruppe'){ + $egruppe = explode(' ', $egruppe, 2); + $egruppe = $egruppe[0]; + $egruppe = $this->app->DB->Select("SELECT id FROM gruppen WHERE kennziffer = '$egruppe' AND name != '' LIMIT 1"); + }else{ + if($egruppe == '' && $eart === 'Gruppe'){ + $error .= 'Gruppe ausfüllen'; + } + } + + if($epreis != ''){ + $epreis = str_replace(',', '.', $epreis); + }else{ + $error .= 'Preisf'."\n"; + } + + if($eartikelid > 0 && $eartikelid != ''){ + $eartikelid = $this->app->DB->Select("SELECT id FROM artikel WHERE id = '$eartikelid' LIMIT 1"); + if($eartikelid != ''){ + }else{ + $error .= 'Bitte gültigen Artikel wählen'."\n"; + } + }else{ + $error .= 'Bitte gültigen Artikel wählen'."\n"; + } + + + if($egueltig_ab != '' && $egueltig_ab != '0000-00-00' && $egueltig_ab != '00.00.0000'){ + $egueltig_ab = date('Y-m-d',strtotime($egueltig_ab)); + }else{ + $egueltig_ab = '0000-00-00'; + } + if($egueltig_bis != '' && $egueltig_bis != '0000-00-00' && $egueltig_bis != '00.00.0000'){ + $egueltig_bis = date('Y-m-d',strtotime($egueltig_bis)); + }else{ + $egueltig_bis = '0000-00-00'; + } + + if($ewaehrung == ''){ + $ewaehrung = $this->app->erp->GetStandardWaehrung(); + } + + + if($error == ''){ + if($eid > 0){ + if($eart === 'Kunde'){ + $standardvorhanden = $this->app->DB->Select("SELECT id FROM verkaufspreise WHERE artikel = '$eartikelid' AND ab_menge = '$eab_menge' AND preis = '$epreis' AND art = 'Kunde' AND adresse = '$eadresse' AND gueltig_ab = '$egueltig_ab' AND gueltig_bis = '$egueltig_bis' AND geloescht != 1 AND id != '$eid' LIMIT 1"); + } + + if($eart === 'Gruppe' && $egruppe > 0){ + $gruppenpreisvorhanden = $this->app->DB->Select("SELECT id FROM verkaufspreise WHERE artikel = '$eartikelid' AND ab_menge = '$eab_menge' AND preis = '$epreis' AND art = 'Gruppe' AND gruppe = '$egruppe' AND gueltig_ab = '$egueltig_ab' AND gueltig_bis = '$egueltig_bis' AND geloescht != 1 AND id != '$eid' LIMIT 1"); + } + + if($standardvorhanden != ''){ + $error .= 'Diesen Preis gibt es bereits.'."\n"; + echo json_encode(array('status'=>0,'statusText'=>$error)); + $this->app->ExitXentral(); + } + if($gruppenpreisvorhanden != ''){ + $error .= 'Diesen Preis gibt es bereits.'."\n"; + echo json_encode(array('status'=>0,'statusText'=>$error)); + $this->app->ExitXentral(); + } + $this->app->DB->Update("UPDATE verkaufspreise SET adresse = '$eadresse', preis = '$epreis', waehrung = '$ewaehrung', ab_menge = '$eab_menge', vpe = '$evpe', gueltig_bis = '$egueltig_bis', bemerkung = '$ebemerkung', firma = 1, geloescht = 0, kundenartikelnummer = '$ekundenartikelnummer', art = '$eart', gruppe = '$egruppe', nichtberechnet = '$enichtberechnet', gueltig_ab = '$egueltig_ab', inbelegausblenden = '$inbelegausblenden' WHERE id = '$eid'"); + if($ewaehrung === 'EUR' || $ewaehrung === '') + { + $kurs = -1; + $kursdatum = 'NULL'; + }else{ + $kurs = $this->app->erp->GetWaehrungUmrechnungskurs('EUR', $ewaehrung, true); + } + if($kurs !== false){ + if($kurs !== -1){ + $kursdatum = "'" . date('Y-m-d') . "'"; + } + $this->app->DB->Update("UPDATE verkaufspreise SET kurs = $kurs, kursdatum = $kursdatum WHERE id = $eid LIMIT 1"); + } + echo json_encode(array('status'=>1)); + $this->app->ExitXentral(); + } + + if($eart === 'Kunde'){ + $standardvorhanden = $this->app->DB->Select("SELECT id FROM verkaufspreise WHERE artikel = '$eartikelid' AND ab_menge = '$eab_menge' AND preis = '$epreis' AND art = 'Kunde' AND adresse = '$eadresse' AND gueltig_ab = '$egueltig_ab' AND gueltig_bis = '$egueltig_bis' AND geloescht != 1 LIMIT 1"); + } + + if($eart === 'Gruppe' && $egruppe > 0){ + $gruppenpreisvorhanden = $this->app->DB->Select("SELECT id FROM verkaufspreise WHERE artikel = '$eartikelid' AND ab_menge = '$eab_menge' AND preis = '$epreis' AND art = 'Gruppe' AND gruppe = '$egruppe' AND gueltig_ab = '$egueltig_ab' AND gueltig_bis = '$egueltig_bis' AND geloescht != 1 LIMIT 1"); + } + + if($standardvorhanden != ''){ + $error .= 'Diesen Preis gibt es bereits.'."\n"; + echo json_encode(array('status'=>0,'statusText'=>$error)); + $this->app->ExitXentral(); + } + if($gruppenpreisvorhanden != ''){ + $error .= 'Diesen Preis gibt es bereits.'."\n"; + echo json_encode(array('status'=>0,'statusText'=>$error)); + $this->app->ExitXentral(); + } + $this->app->DB->Insert("INSERT INTO verkaufspreise (artikel, adresse, preis, waehrung, ab_menge, vpe, gueltig_bis, bemerkung, firma, geloescht, kundenartikelnummer, art, gruppe, apichange, nichtberechnet, gueltig_ab, inbelegausblenden) VALUES ('$eartikelid', '$eadresse', '$epreis', '$ewaehrung', '$eab_menge', '$evpe', '$egueltig_bis', '$ebemerkung', 1, 0, '$ekundenartikelnummer', '$eart', '$egruppe', '', '$enichtberechnet', '$egueltig_ab', '$inbelegausblenden')"); + $insid = $this->app->DB->GetInsertID(); + if($ewaehrung === 'EUR' || $ewaehrung === '') + { + $kurs = false; + }else{ + $kurs = $this->app->erp->GetWaehrungUmrechnungskurs('EUR', $ewaehrung, true); + } + if($kurs !== false){ + if($kurs !== -1){ + $kursdatum = "'" . date('Y-m-d') . "'"; + } + $this->app->DB->Update("UPDATE verkaufspreise SET kurs = $kurs, kursdatum = $kursdatum WHERE id = $insid LIMIT 1"); + } + echo json_encode(array('status'=>1)); + $this->app->ExitXentral(); + } + echo json_encode(array('status'=>0,'statusText'=>$error)); + $this->app->ExitXentral(); + } + + $this->app->YUI->AutoComplete('adresse', 'kunde'); + $this->app->YUI->AutoComplete('gruppe', 'gruppekennziffer'); + $this->app->YUI->DatePicker('gueltig_ab'); + $this->app->YUI->DatePicker('gueltig_bis'); + + $this->app->Tpl->Parse('PAGE','verkaufspreiseuebersicht.tpl'); + } + + public function ArtikelVerkaufDisable() + { + $id = $this->app->Secure->GetGET('id'); + if($id > 0){ + $this->app->DB->Update("UPDATE verkaufspreise SET gueltig_bis=DATE_SUB(NOW(),INTERVAL 1 DAY) WHERE id='$id' LIMIT 1"); + $this->app->erp->ObjektProtokoll('verkaufspreise', $id, 'verkaufspreise_edit', 'Verkaufspreis deaktiviert'); + } + $sid = $this->app->DB->Select("SELECT artikel FROM verkaufspreise WHERE id='$id' LIMIT 1"); + $this->app->Location->execute('index.php?module=artikel&action=verkauf&id='.$sid); + } + + public function ArtikelVerkaufDelete() + { + $id = $this->app->Secure->GetGET('id'); + if($id > 0){ + $this->app->DB->Update("UPDATE verkaufspreise SET geloescht='1', gueltig_bis=DATE_SUB(NOW(),INTERVAL 1 DAY), logdatei = now() WHERE id='$id' LIMIT 1"); + } + $sid = $this->app->DB->Select("SELECT artikel FROM verkaufspreise WHERE id='$id' LIMIT 1"); + $this->app->erp->ObjektProtokoll('verkaufspreise', $id, 'verkaufspreise_edit', 'Verkaufspreis gelöscht'); + $this->app->Location->execute('index.php?module=artikel&action=verkauf&id='.$sid); + } + + public function ArtikelVerkaufCopy() + { + $id = $this->app->Secure->GetGET('id'); + + $id = $this->app->DB->MysqlCopyRow('verkaufspreise','id',$id); + $this->app->DB->Update("UPDATE verkaufspreise SET geloescht='0', gueltig_bis='0000-00-00', logdatei = now(), angelegt_am = now() WHERE id='$id' LIMIT 1"); + $this->app->erp->ObjektProtokoll('verkaufspreise', $id, 'verkaufspreise_create', 'Verkaufspreis kopiert'); + $sid = $this->app->DB->Select("SELECT artikel FROM verkaufspreise WHERE id='$id' LIMIT 1"); + $this->app->Location->execute('index.php?module=artikel&action=verkauf&id='.$sid); + } + + public function ArtikelVerkaufEditPopup() + { + $id = $this->app->Secure->GetGET('id'); + + if($this->app->Secure->GetPOST('newpreis')) + { + $id = $this->app->Secure->GetGET('id'); + $this->ArtikelCopyWaehrungen($id, 'verkaufeditpopup'); + } + + $this->app->Tpl->Set('OPENDISABLE',''); + + $this->Preisrechner(); + $sid = $this->app->DB->Select("SELECT artikel FROM verkaufspreise WHERE id='$id' LIMIT 1"); + $this->ArtikelMenu($sid); + $artikel = $this->app->DB->Select("SELECT CONCAT(name_de,' (',nummer,')') FROM artikel WHERE id='$sid' LIMIT 1"); + $this->app->Tpl->Set('UEBERSCHRIFT','Artikel: '.$artikel); + $this->app->Tpl->Add('UEBERSCHRIFT',' (Verkauf)'); + + $this->app->Tpl->Set('ABBRECHEN',""); + + $widget = new WidgetVerkaufspreise($this->app,'TAB1'); + $widget->form->SpecialActionAfterExecute('close_refresh', + "index.php?module=artikel&action=verkauf&id=$sid&&22#tabs-1"); + $widget->Edit(); + + $this->app->Tpl->Add('TAB2','Sie bearbeiten gerade einen Verkaufspreis. Erst nach dem Speichern können neue Preise angelegt werden.'); + $this->app->Tpl->Add('TAB3','Sie bearbeiten gerade einen Verkaufspreis. Erst nach dem Speichern können Statistiken betrachtet werden.'); + $this->app->Tpl->Parse('PAGE','verkaufspreiseuebersicht.tpl'); + } + + public function ArtikelEinkauf() + { + $waehrungenstringek = ''; + if($this->app->Secure->GetPOST('ajaxadd')){ + $this->ArtikelEinkaufAdd(); + } + if($this->app->Secure->GetPOST('newpreis')) + { + $id = $this->app->Secure->GetGET('id'); + $this->ArtikelCopyWaehrungen($id, 'einkauf'); + } + $this->app->Tpl->Add('UEBERSCHRIFT',' (Einkauf)'); + $this->Preisrechner(); + $this->ArtikelMenu(); + $id = $this->app->Secure->GetGET('id'); + + + $standardwaehrung = $this->app->erp->GetStandardWaehrung(); + + $waehrungenek = $this->app->DB->SelectArr("SELECT DISTINCT waehrung FROM (SELECT DISTINCT waehrung_von AS waehrung FROM waehrung_umrechnung WHERE (ISNULL(gueltig_bis) OR gueltig_bis >= NOW() OR gueltig_bis = '0000-00-00') UNION SELECT DISTINCT waehrung_nach AS waehrung FROM waehrung_umrechnung WHERE (ISNULL(gueltig_bis) OR gueltig_bis >= NOW() OR gueltig_bis = '0000-00-00')) AS waehrungen"); + if($waehrungenek != ''){ + $standardwvorhanden = false; + if($standardwaehrung == ''){ + $standardwaehrung = $waehrungenek[0]['waehrung']; + } + foreach($waehrungenek as $key=>$value){ + if($value['waehrung'] == $standardwaehrung){ + $standardwvorhanden = true; + } + $waehrungenstringek .= "'; + } + $this->app->Tpl->Set('STANDARDWAEHRUNG', $standardwaehrung); + if($standardwvorhanden == false){ + $waehrungenstringek .= "'; + } + }else{ + if($standardwaehrung != ""){ + if($standardwaehrung !== 'EUR' && $standardwaehrung !== 'USD' && $standardwaehrung !== 'CAD' && $standardwaehrung !== 'CHF' && $standardwaehrung !== 'GBP'){ + $waehrungenstringek .= ''; + } + $this->app->Tpl->Set('STANDARDWAEHRUNG', $standardwaehrung); + }else{ + $this->app->Tpl->Set('STANDARDWAEHRUNG', 'EUR'); + } + + $waehrungenstringek .= " + + + + "; + } + + $this->app->Tpl->Set('WAEHRUNGEINKAUF', $waehrungenstringek); + + $standardlieferant = $this->app->DB->Select("SELECT CONCAT(adr.lieferantennummer,' ',adr.name) FROM artikel a LEFT + JOIN adresse adr ON adr.id=a.adresse WHERE a.id='$id'"); + + $herstellernummer = $this->app->DB->Select("SELECT herstellernummer FROM artikel WHERE id='$id' LIMIT 1"); + $name_de = $this->app->DB->Select("SELECT name_de FROM artikel WHERE id='$id' LIMIT 1"); + + $bereinigtername = str_replace(''', "\'", $name_de); + + $this->app->Tpl->Set('BUTTONLADEN',""); + + //$this->app->YUI->DatePicker('preis_anfrage_vom'); + + if($this->app->Secure->GetGET('cmd')==='popupedit'){ + $eid = (int)$this->app->Secure->GetPOST('id'); + + $data = $this->app->DB->SelectRow("SELECT id, artikel, adresse, preis, waehrung, ab_menge, vpe, preis_anfrage_vom, + gueltig_bis, lieferzeit_standard, lieferzeit_standard_einheit, lieferzeit_aktuell, lieferzeit_aktuell_einheit, lager_lieferant, datum_lagerlieferant, bestellnummer, + bezeichnunglieferant, sicherheitslager, bemerkung, standard, rahmenvertrag, rahmenvertrag_von, rahmenvertrag_bis, + rahmenvertrag_menge, nichtberechnet + FROM einkaufspreise WHERE id = '$eid' LIMIT 1"); + + if($data){ + $elieferantennummer = $this->app->DB->Select("SELECT lieferantennummer FROM adresse WHERE id = '".$data['adresse']."' LIMIT 1"); + $elieferantenname = $this->app->DB->Select("SELECT name FROM adresse WHERE id = '".$data['adresse']."' LIMIT 1"); + $data['adresse'] = $elieferantennummer." ".$elieferantenname; + + $data['ab_menge'] = str_replace('.',',',$data['ab_menge']); + $data['preis'] = str_replace('.',',',$data['preis']); + + if($data['preis_anfrage_vom'] == '0000-00-00' || $data['preis_anfrage_vom'] == "" || is_null($data['preis_anfrage_vom'])){ + $data['preis_anfrage_vom'] = "00.00.0000"; + }else{ + $data['preis_anfrage_vom'] = date('d.m.Y',strtotime($data['preis_anfrage_vom'])); + } + + if($data['gueltig_bis'] == '0000-00-00' || $data['gueltig_bis'] == "" || is_null($data['gueltig_bis'])){ + $data['gueltig_bis'] = "00.00.0000"; + }else{ + $data['gueltig_bis'] = date('d.m.Y',strtotime($data['gueltig_bis'])); + } + + if($data['datum_lagerlieferant'] == '0000-00-00' || $data['datum_lagerlieferant'] == "" || is_null($data['datum_lagerlieferant'])){ + $data['datum_lagerlieferant'] = "00.00.0000"; + }else{ + $data['datum_lagerlieferant'] = date('d.m.Y',strtotime($data['datum_lagerlieferant'])); + } + + if($data['rahmenvertrag_von'] == '0000-00-00' || $data['rahmenvertrag_von'] == '' || is_null($data['rahmenvertrag_von'])){ + $data['rahmenvertrag_von'] = '00.00.0000'; + }else{ + $data['rahmenvertrag_von'] = date('d.m.Y',strtotime($data['rahmenvertrag_von'])); + } + + if($data['rahmenvertrag_bis'] == '0000-00-00' || $data['rahmenvertrag_bis'] == '' || is_null($data['rahmenvertrag_bis'])){ + $data['rahmenvertrag_bis'] = '00.00.0000'; + }else{ + $data['rahmenvertrag_bis'] = date('d.m.Y',strtotime($data['rahmenvertrag_bis'])); + } + + if($data['lieferzeit_standard_einheit'] == ''){ + $data['lieferzeit_standard_einheit'] = 'wochen'; + } + if($data['lieferzeit_aktuell_einheit'] == ''){ + $data['lieferzeit_aktuell_einheit'] = 'wochen'; + } + + }else{ + //$data['artikel'] = 0; + $data['adresse'] = 0; + $data['preis'] = ''; + $data['waehrung'] = 'EUR'; + $data['ab_menge'] = ''; + $data['vpe'] = ''; + $data['preis_anfrage_vom'] = ''; + $data['gueltig_bis'] = ''; + $data['lieferzeit_standard'] = ''; + $data['lieferzeit_standard_einheit'] = 'wochen'; + $data['lieferzeit_aktuell'] = ''; + $data['lieferzeit_aktuell_einheit'] = 'wochen'; + $data['lager_lieferant'] = ''; + $data['datum_lagerlieferant'] = ''; + $data['bestellnummer'] = ''; + $data['bezeichnunglieferant'] = ''; + $data['sicherheitslager'] = ''; + $data['bemerkung'] = ''; + $data['standard'] = 0; + $data['rahmenvertrag'] = 0; + $data['rahmenvertrag_von'] = ''; + $data['rahmenvertrag_bis'] = ''; + $data['rahmenvertrag_menge'] = ''; + $data['nichtberechnet'] = 0; + } + echo json_encode($data); + $this->app->ExitXentral(); + } + + if($this->app->Secure->GetGET('cmd')==='popupsave'){ + $eid = $this->app->Secure->GetPOST('eid'); + $eartikelid = $this->app->Secure->GetPOST('eartikelid'); + $estandard = $this->app->Secure->GetPOST('estandard'); + $eadresse = $this->app->Secure->GetPOST('eadresse'); + $ebezeichnunglieferant = $this->app->Secure->GetPOST('ebezeichnunglieferant'); + $ebestellnummer = $this->app->Secure->GetPOST('ebestellnummer'); + $eab_menge = $this->app->Secure->GetPOST('eab_menge'); + $evpe = $this->app->Secure->GetPOST('evpe'); + $epreis = $this->app->Secure->GetPOST('epreis'); + $ewaehrung = $this->app->Secure->GetPOST('ewaehrung'); + $elivepreisvpe = $this->app->Secure->GetPOST('elivepreisvpe'); + $enichtberechnet = $this->app->Secure->GetPOST('enichtberechnet'); + $epreis_anfrage_vom = $this->app->Secure->GetPOST('epreis_anfrage_vom'); + $egueltig_bis = $this->app->Secure->GetPOST('egueltig_bis'); + $elager_lieferant = $this->app->Secure->GetPOST('elager_lieferant'); + $edatum_lagerlieferant = $this->app->Secure->GetPOST('edatum_lagerlieferant'); + $esicherheitslager = $this->app->Secure->GetPOST('esicherheitslager'); + $elieferzeit_standard = $this->app->Secure->GetPOST('elieferzeit_standard'); + $elieferzeit_standard_einheit = $this->app->Secure->GetPOST('elieferzeit_standard_einheit'); + $elieferzeit_aktuell = $this->app->Secure->GetPOST('elieferzeit_aktuell'); + $elieferzeit_aktuell_einheit = $this->app->Secure->GetPOST('elieferzeit_aktuell_einheit'); + $erahmenvertrag = $this->app->Secure->GetPOST('erahmenvertrag'); + $erahmenvertrag_menge = $this->app->Secure->GetPOST('erahmenvertrag_menge'); + $erahmenvertrag_von = $this->app->Secure->GetPOST('erahmenvertrag_von'); + $erahmenvertrag_bis = $this->app->Secure->GetPOST('erahmenvertrag_bis'); + $ebemerkung = $this->app->Secure->GetPOST('ebemerkung'); + + $error = ''; + + if($eab_menge != ''){ + $eab_menge = str_replace(',','.',$eab_menge); + }else{ + $error .= 'Mengef'."\n"; + } + + $lieferantenname = $eadresse; + if($eadresse != ''){ + $eadresse = explode(' ', $eadresse, 2); + $eadresse = $eadresse[0]; + + $eadresse = $this->app->DB->Select("SELECT id FROM adresse WHERE lieferantennummer = '$eadresse' AND lieferantennummer != '' AND geloescht = 0 LIMIT 1"); + if($eadresse != ''){ + }else{ + $error .= 'Adressef'."\n"; + } + }else{ + $error .= 'Adressef'."\n"; + } + + if($epreis != ""){ + $epreis = str_replace(',', '.', $epreis); + /*if($epreis > 0){ + }else{ + $error .= 'Preisf'."\n"; + }*/ + }else{ + $error .= 'Preisf'."\n"; + } + + if($eartikelid > 0 && $eartikelid != ''){ + $eartikelid = $this->app->DB->Select("SELECT id FROM artikel WHERE id = '$eartikelid' LIMIT 1"); + if($eartikelid != ''){ + }else{ + $error .= 'Bitte gültigen Artikel wählen'."\n"; + } + }else{ + $error .= 'Bitte gültigen Artikel wählen'."\n"; + } + + + if($epreis_anfrage_vom != '' && $epreis_anfrage_vom != '0000-00-00' && $epreis_anfrage_vom != '00.00.0000'){ + $epreis_anfrage_vom = date('Y-m-d',strtotime($epreis_anfrage_vom)); + }else{ + $epreis_anfrage_vom = '0000-00-00'; + } + if($egueltig_bis != '' && $egueltig_bis != '0000-00-00' && $egueltig_bis != '00.00.0000'){ + $egueltig_bis = date('Y-m-d',strtotime($egueltig_bis)); + }else{ + $egueltig_bis = '0000-00-00'; + } + if($edatum_lagerlieferant != '' && $edatum_lagerlieferant != '0000-00-00' && $edatum_lagerlieferant != '00.00.0000'){ + $edatum_lagerlieferant = date('Y-m-d',strtotime($edatum_lagerlieferant)); + }else{ + $edatum_lagerlieferant = '0000-00-00'; + } + if($erahmenvertrag_von != '' && $erahmenvertrag_von != '0000-00-00' && $erahmenvertrag_von != '00.00.0000'){ + $erahmenvertrag_von = date('Y-m-d',strtotime($erahmenvertrag_von)); + }else{ + $erahmenvertrag_von = '0000-000-00'; + } + if($erahmenvertrag_bis != '' && $erahmenvertrag_bis != '0000-00-00' && $erahmenvertrag_bis != '00.00.0000'){ + $erahmenvertrag_bis = date('Y-m-d',strtotime($erahmenvertrag_bis)); + }else{ + $erahmenvertrag_bis = '0000-00-00'; + } + + if($ewaehrung == ''){ + $ewaehrung = $this->app->erp->GetStandardWaehrung(); + } + + if($elieferzeit_standard_einheit == ''){ + $elieferzeit_standard_einheit = 'wochen'; + } + if($elieferzeit_aktuell_einheit == ''){ + $elieferzeit_aktuell_einheit = 'wochen'; + } + + + if($error == ''){ + if($eid > 0){ + $this->app->DB->Update("UPDATE einkaufspreise SET adresse = '$eadresse', preis = '$epreis', waehrung = '$ewaehrung', + ab_menge = '$eab_menge', vpe = '$evpe', preis_anfrage_vom = '$epreis_anfrage_vom', gueltig_bis = '$egueltig_bis', + lieferzeit_standard = '$elieferzeit_standard', lieferzeit_standard_einheit = '$elieferzeit_standard_einheit', + lieferzeit_aktuell = '$elieferzeit_aktuell', lieferzeit_aktuell_einheit = '$elieferzeit_aktuell_einheit', + lager_lieferant = '$elager_lieferant', datum_lagerlieferant = '$edatum_lagerlieferant', + bestellnummer = '$ebestellnummer', bezeichnunglieferant = '$ebezeichnunglieferant', + sicherheitslager = '$esicherheitslager', bemerkung = '$ebemerkung', logdatei = NOW(), standard = '$estandard', + geloescht = 0, firma = 1, apichange = 0, rahmenvertrag = '$erahmenvertrag', rahmenvertrag_von = '$erahmenvertrag_von', + rahmenvertrag_bis = '$erahmenvertrag_bis', rahmenvertrag_menge = '$erahmenvertrag_menge', + nichtberechnet = '$enichtberechnet' + WHERE id = '$eid'"); + echo json_encode(array('status'=>1)); + $this->app->ExitXentral(); + } + $this->app->DB->Insert("INSERT INTO einkaufspreise (artikel, adresse, preis, waehrung, ab_menge, vpe, preis_anfrage_vom, + gueltig_bis, lieferzeit_standard, lieferzeit_standard_einheit, lieferzeit_aktuell, lieferzeit_aktuell_einheit, + lager_lieferant, datum_lagerlieferant, bestellnummer, bezeichnunglieferant, sicherheitslager, + bemerkung, logdatei, standard, geloescht, firma, apichange, rahmenvertrag, rahmenvertrag_von, + rahmenvertrag_bis, rahmenvertrag_menge, nichtberechnet) + VALUES ('$eartikelid', '$eadresse', '$epreis', '$ewaehrung', '$eab_menge', '$evpe', '$epreis_anfrage_vom', + '$egueltig_bis', '$elieferzeit_standard', '$elieferzeit_standard_einheit', '$elieferzeit_aktuell', + '$elieferzeit_aktuell_einheit', '$elager_lieferant', '$edatum_lagerlieferant', '$ebestellnummer', + '$ebezeichnunglieferant', '$esicherheitslager', '$ebemerkung', NOW(), '$estandard', 0, 1, 0, + '$erahmenvertrag', '$erahmenvertrag_von', '$erahmenvertrag_bis', '$erahmenvertrag_menge', '$enichtberechnet')"); + echo json_encode(array('status'=>1)); + $this->app->ExitXentral(); + } + echo json_encode(array('status'=>0,'statusText'=>$error)); + $this->app->ExitXentral(); + } + + $stueckliste = $this->app->DB->Select("SELECT stueckliste FROM artikel WHERE id='$id' LIMIT 1"); + + if($stueckliste < 1) + { + $nicht_vorhanden = '
Nicht vorhanden, da es keine Stückliste ist.
'; + $this->app->Tpl->Set('TAB5KALKULATION',$nicht_vorhanden); + $this->app->Tpl->Set('TAB5',$nicht_vorhanden); + $this->app->Tpl->Set('TABELLE',$nicht_vorhanden); + } + + $check = $this->app->DB->Select("SELECT id FROM stueckliste WHERE stuecklistevonartikel='$id' AND art='bt' LIMIT 1"); + + // neues arbeitspaket + $widget = new WidgetEinkaufspreise($this->app,'TAB2'); + $widget->form->SpecialActionAfterExecute('none', + "index.php?module=artikel&action=einkauf&id=$id"); + + if($this->app->Secure->GetPOST('submit')!=''){ + $this->app->erp->EnableTab('tabs-2'); + } + + $widget->Create(); + + if($this->app->Secure->GetPOST('objekt')!=''){ + $this->app->Tpl->Set('AKTIV_TAB2', 'selected'); + } + else{ + $this->app->Tpl->Set('AKTIV_TAB1', 'selected'); + } + + + if ($stueckliste=='1') { + + $preis_min_ek = $this->getCalcPriceByMinBasePrice($id); + $preis_max_ek =$this->getCalcPriceByMaxBasePrice($id); + + $this->app->Tpl->Set('TAB5KALKULATION','
Dies ist nur ein grober Richtpreis aus dem kleinsten und größten Einkaufspreis.
'); + + $kalkulationstabelle = ""; + $kalkulationstabelle .= ""; + $kalkulationstabelle .= ""; + $kalkulationstabelle .= ""; + $kalkulationstabelle .= ""; + $kalkulationstabelle .= ""; + $kalkulationstabelle .= ""; + $kalkulationstabelle .= ""; + $kalkulationstabelle .= ""; + $kalkulationstabelle .= ""; + $kalkulationstabelle .= ""; + + $artikelkalkulation = $this->app->DB->SelectArr("SELECT a.id as artikelid, a.name_de as artikelname, a.nummer, trim(s.menge)+0 as menge, + (SELECT l2.name FROM einkaufspreise e LEFT JOIN adresse l2 ON l2.id=e.adresse WHERE e.artikel=a.id AND (e.objekt='Standard' OR e.objekt='') AND (e.gueltig_bis='0000-00-00' OR e.gueltig_bis >= curdate()) AND e.geloescht!=1 ORDER by e.preis ASC LIMIT 1) as lieferant, + (SELECT e.bestellnummer FROM einkaufspreise e WHERE e.artikel=a.id AND (e.objekt='Standard' OR e.objekt='') AND (e.gueltig_bis='0000-00-00' OR e.gueltig_bis >= curdate()) AND e.geloescht!=1 ORDER by e.preis ASC LIMIT 1) as bestellnummer, + + ".$this->app->erp->FormatPreis("if(a.stueckliste, + + (SELECT SUM( + (SELECT MIN(e.preis/ifnull(wt.kurs,if(e.waehrung = 'CHR',$kurschf,if(e.waehrung = 'USD',$kursusd,1)))) FROM einkaufspreise e + LEFT JOIN ( + SELECT max(kurs) as kurs, waehrung_von, waehrung_nach FROM waehrung_umrechnung WHERE (isnull(gueltig_bis) OR gueltig_bis >= now() OR gueltig_bis = '0000-00-00') AND (waehrung_von LIKE 'EUR' OR waehrung_nach LIKE 'EUR') GROUP BY waehrung_von,waehrung_nach + ) wt ON (wt.waehrung_nach <> 'EUR' AND wt.waehrung_nach = e.waehrung) OR (wt.waehrung_von <> 'EUR' AND wt.waehrung_von = e.waehrung) + WHERE e.artikel=s2.artikel AND (e.objekt='Standard' OR e.objekt='') + AND (e.gueltig_bis='0000-00-00' OR e.gueltig_bis >= curdate()) AND e.geloescht!=1) * s2.menge) + FROM stueckliste s2 + WHERE s2.stuecklistevonartikel=s.artikel), + + (SELECT MIN(e.preis/ifnull(wt.kurs,if(e.waehrung = 'CHR',$kurschf,if(e.waehrung = 'USD',$kursusd,1)))) FROM einkaufspreise e + LEFT JOIN ( + SELECT max(kurs) as kurs, waehrung_von, waehrung_nach FROM waehrung_umrechnung WHERE (isnull(gueltig_bis) OR gueltig_bis >= now() OR gueltig_bis = '0000-00-00') AND (waehrung_von LIKE 'EUR' OR waehrung_nach LIKE 'EUR') GROUP BY waehrung_von,waehrung_nach + ) wt ON (wt.waehrung_nach <> 'EUR' AND wt.waehrung_nach = e.waehrung) OR (wt.waehrung_von <> 'EUR' AND wt.waehrung_von = e.waehrung) + WHERE e.artikel=s.artikel AND (e.objekt='Standard' OR e.objekt='') AND (e.gueltig_bis='0000-00-00' OR e.gueltig_bis >= curdate()) AND e.geloescht!=1 ))*s.menge",4)." + + as 'ekmin', + + + ".$this->app->erp->FormatPreis("if(a.stueckliste, + + (SELECT SUM( + (SELECT MAX(e.preis/ifnull(wt.kurs,if(e.waehrung = 'CHR',$kurschf,if(e.waehrung = 'USD',$kursusd,1)))) FROM einkaufspreise e + + LEFT JOIN ( + SELECT max(kurs) as kurs, waehrung_von, waehrung_nach FROM waehrung_umrechnung WHERE (isnull(gueltig_bis) OR gueltig_bis >= now() OR gueltig_bis = '0000-00-00') AND (waehrung_von LIKE 'EUR' OR waehrung_nach LIKE 'EUR') GROUP BY waehrung_von,waehrung_nach + ) wt ON (wt.waehrung_nach <> 'EUR' AND wt.waehrung_nach = e.waehrung) OR (wt.waehrung_von <> 'EUR' AND wt.waehrung_von = e.waehrung) + WHERE e.artikel=s2.artikel AND (e.objekt='Standard' OR e.objekt='') + AND (e.gueltig_bis='0000-00-00' OR e.gueltig_bis >= curdate()) AND e.geloescht!=1) * s2.menge) + FROM stueckliste s2 + WHERE s2.stuecklistevonartikel=s.artikel),(SELECT MAX(e.preis/ifnull(wt.kurs,if(e.waehrung = 'CHR',$kurschf,if(e.waehrung = 'USD',$kursusd,1)))) FROM einkaufspreise e + LEFT JOIN ( + SELECT max(kurs) as kurs, waehrung_von, waehrung_nach FROM waehrung_umrechnung WHERE (isnull(gueltig_bis) OR gueltig_bis >= now() OR gueltig_bis = '0000-00-00') AND (waehrung_von LIKE 'EUR' OR waehrung_nach LIKE 'EUR') GROUP BY waehrung_von,waehrung_nach + ) wt ON (wt.waehrung_nach <> 'EUR' AND wt.waehrung_nach = e.waehrung) OR (wt.waehrung_von <> 'EUR' AND wt.waehrung_von = e.waehrung) + + WHERE e.artikel=s.artikel AND (e.objekt='Standard' OR e.objekt='') AND (e.gueltig_bis='0000-00-00' OR e.gueltig_bis >= curdate()) AND e.geloescht!=1 ))*s.menge",4)." + + as 'ekmax' + + + FROM stueckliste s + LEFT JOIN artikel a ON a.id=s.artikel + LEFT JOIN adresse l ON l.id=a.adresse + WHERE s.stuecklistevonartikel='$id' ORDER by s.sort"); + + + $calculatedPurchasePriceService = $this->app->Container->get('PurchasePriceService'); + + $kalkulierterekgesamt = 0; + + foreach($artikelkalkulation as $artikelindex => $kalkulierterArtikel){ + $kalkulationstabelle .= ""; + $kalkulationstabelle .= ""; + $kalkulationstabelle .= ""; + + $runden = true; + if($kalkulierterArtikel['menge'] != round($kalkulierterArtikel['menge']))$runden = false; + + if($runden) { + $kalkulierterArtikel['menge'] = round($kalkulierterArtikel['menge']); + } + + + $kalkulationstabelle .= ""; + $kalkulationstabelle .= ""; + $kalkulationstabelle .= ""; + $kalkulationstabelle .= ""; + $kalkulationstabelle .= ""; + $berechneterEK = 0; + $berechneterEK += $calculatedPurchasePriceService->calculateCalculatedPurchasePrice($kalkulierterArtikel['artikelid'], $kalkulierterArtikel['menge']); + $kalkulationstabelle .= ""; + $kalkulierterekgesamt += $berechneterEK; + $kalkulationstabelle .= ""; + } + + $kalkulationstabelle .= ""; + $kalkulationstabelle .= ""; + $kalkulationstabelle .= ""; + $kalkulationstabelle .= ""; + $kalkulationstabelle .= ""; + $kalkulationstabelle .= ""; + $kalkulationstabelle .= ""; + $kalkulationstabelle .= ""; + $kalkulationstabelle .= ""; + $kalkulationstabelle .= ""; + + $kalkulationstabelle .= "
ArtikelNummerMengeLieferantBestellnummerBasierend auf EK (Min)Basierend auf EK (Max)Kalkulierter EK
".$kalkulierterArtikel['artikelname']."".$kalkulierterArtikel['nummer']."".$kalkulierterArtikel['menge']."".$kalkulierterArtikel['lieferant']."".$kalkulierterArtikel['bestellnummer']."".$kalkulierterArtikel['ekmin']."".$kalkulierterArtikel['ekmax']."".number_format($berechneterEK,4,',','.')."
Σ ".number_format($preis_min_ek,4,',','.')."Σ ".number_format($preis_max_ek,4,',','.')."Σ ".number_format($kalkulierterekgesamt,4,',','.')."
"; + + $this->app->Tpl->Add('TAB5KALKULATION', $kalkulationstabelle); + + +// $this->app->Tpl->Add('TAB5KALKULATION',"
Stücklisten Grundpreis bei Menge 1: $preis EUR - $preis_max EUR (Anzahl Positionen $pos / Teile $teile)
"); + $this->app->Tpl->Parse('TAB1','rahmen70.tpl'); + + $sql = "SELECT s.artikel, SUM(s.menge) FROM stueckliste s LEFT JOIN artikel a ON a.id=s.artikel WHERE s.stuecklistevonartikel='$id' GROUP by a.id"; + $array_artikel = $this->app->DB->SelectArr($sql); + + $array_mindestmengen = array(); + $runden = true; + $carray_artikel = $array_artikel?count($array_artikel):0; + for($i_stk=0;$i_stk < $carray_artikel;$i_stk++) { + $artikel = $array_artikel[$i_stk]['artikel']; + $menge = $array_artikel[$i_stk]['menge']; + + // gehe einkaufspreis fuer einkaufspreis durch + $einkaufspreise = $this->app->DB->SelectArr("SELECT ab_menge FROM einkaufspreise WHERE artikel='$artikel' AND + (gueltig_bis='0000-00-00' OR gueltig_bis >= curdate()) AND geloescht!=1 AND ab_menge >='$menge' ORDER by ab_menge"); + + // liste mit artikel wo e keinen 1er Preis gibt + $check_ek_eins = $this->app->DB->Select("SELECT id FROM einkaufspreise WHERE artikel='$artikel' AND + (gueltig_bis='0000-00-00' OR gueltig_bis >= curdate()) AND geloescht!=1 AND ab_menge =1 LIMIT 1"); + + if($check_ek_eins <=0) { + $artikel_ohne_ek_eins[]=$artikel; + } + $ceinkaufspreise = $einkaufspreise?count($einkaufspreise):0; + for($i_ek = 0;$i_ek < $ceinkaufspreise; $i_ek++) { + if(!in_array($einkaufspreise[$i_ek]['ab_menge'],$array_mindestmengen)) { + $array_mindestmengen[] = $einkaufspreise[$i_ek]['ab_menge']; + if(round($einkaufspreise[$i_ek]['ab_menge']) != $einkaufspreise[$i_ek]['ab_menge']) { + $runden = false; + } + } + } + } + if($runden) { + foreach($array_mindestmengen as $k => $v){ + $array_mindestmengen[$k] = round($v); + } + } + sort($array_mindestmengen); + $tpl = ''; + $tpl2 = ''; + $tpl3 = ''; + $tpl4 = ''; + $tpl5 = ''; + $tpl22 = ''; + $teile_tpl =''; + $carray_mindestmengen = isset($array_mindestmengen)?count($array_mindestmengen):0; + for($j_am=0;$j_am<$carray_mindestmengen;$j_am++) { + $sql = "SELECT SUM( + (SELECT e.preis FROM einkaufspreise e WHERE e.artikel=s.artikel AND (e.objekt='Standard' OR e.objekt='') + AND e.ab_menge <= ".$array_mindestmengen[$j_am]." AND (e.gueltig_bis='0000-00-00' OR e.gueltig_bis >= curdate()) AND e.geloescht!=1 ORDER by preis ASC LIMIT 1)*s.menge) + FROM stueckliste s + LEFT JOIN artikel a ON a.id=s.artikel + WHERE s.stuecklistevonartikel='$id'"; + + $preis = $this->app->DB->Select($sql); + + $sql = "SELECT s.artikel + FROM stueckliste s + LEFT JOIN artikel a ON a.id=s.artikel + WHERE s.stuecklistevonartikel='$id' AND (SELECT e.preis FROM einkaufspreise e WHERE e.artikel=s.artikel AND (e.objekt='Standard' OR e.objekt='') + AND e.ab_menge <= ".$array_mindestmengen[$j_am]." AND (e.gueltig_bis='0000-00-00' OR e.gueltig_bis >= curdate()) AND e.geloescht!=1 ORDER by preis ASC LIMIT 1) IS NULL GROUP by s.artikel ORDER by s.artikel"; + + $fehlende_preise = $this->app->DB->SelectArr($sql); + + $tpl .= "
".$array_mindestmengen[$j_am].'".count($fehlende_preise).'--'.number_format($preis,2,',','').'$fehlende_artikel_links-'.number_format($summe_fehlende_preise_max+$preis,2,",","")."'.number_format($summe_fehlende_preise_min,2,',','').''.number_format($summe_fehlende_preise_max,2,',','').'
Anzahl
Gesamtpreis
Anzahl fehlende Preise für Staffel 
Zwischensumme (falls Preise fehlen)
Fehlende Preise für Preisstaffel bei Artikel
"); + sort($artikel_ohne_ek_eins); + $cartikel_ohne_ek_eins = count($artikel_ohne_ek_eins); + for($j_am=0;$j_am<$cartikel_ohne_ek_eins;$j_am++) { + if($j_am % 2) { + $color='#e0e0e0'; + } else { + $color='#fff'; + } + $artikel_arr = $this->app->DB->SelectArr("SELECT id,name_de, nummer FROM artikel WHERE id='".$artikel_ohne_ek_eins[$j_am]."' LIMIT 1"); + $this->app->Tpl->Add('TAB5',""); + } + $this->app->Tpl->Add('TAB5','
Artikel-Nr.NameAktion
".$artikel_arr[0]['nummer']."".$artikel_arr[0]['name_de']."
'); + } + if(!$this->app->erp->ModulVorhanden('produktion')) + { + //$this->app->Tpl->Parse(TAB5,"rahmen70.tpl"); + $this->app->Tpl->Set('TABELLE',"
Die Preismatrix (Kosten Stueckzahl abängig von Einkaufspreisen ist nur mit dem Modul Produktion verfügbar"); + } + + //$this->app->Tpl->Parse('PAGE',"einkaufspreiseuebersicht_stueckliste.tpl"); + } + + // easy table mit arbeitspaketen YUI als template + $this->app->YUI->TableSearch('TAB7','einkaufspreise', 'show','','',basename(__FILE__), __CLASS__); + + $adresse = $this->app->DB->Select("SELECT adresse FROM artikel WHERE id='$id' LIMIT 1"); + $hauptlieferant = $this->app->DB->Select("SELECT name FROM adresse WHERE id='$adresse' LIMIT 1"); + /*$min_preis = $this->app->DB->Select("SELECT FORMAT(MIN(preis),2) FROM verkaufspreise WHERE artikel='$id' AND (gueltig_bis='0000-00-00' + OR gueltig_bis >= curdate()) AND (gueltig_ab='0000-00-00' OR gueltig_ab <= curdate()) AND geloescht!=1 LIMIT 1"); + $max_preis = $this->app->DB->Select("SELECT FORMAT(MAX(preis),2) FROM verkaufspreise WHERE artikel='$id' AND (gueltig_bis='0000-00-00' + OR gueltig_bis >= curdate()) AND (gueltig_ab='0000-00-00' OR gueltig_ab <= curdate()) AND geloescht!=1 LIMIT 1");*/ + + $this->app->Tpl->Add('TAB1',"
Der Hauptlieferant ist $hauptlieferant
"); + + //$min_preis = $this->app->erp->EUR($min_preis/(($this->app->erp->GetStandardMarge()/100.0)+1.0)*1.0); + //$max_preis = $this->app->erp->EUR($max_preis/(($this->app->erp->GetStandardMarge()/100.0)+1.0)*1.0); + + $this->app->erp->CheckArtikel($id); + $this->app->Tpl->Parse('PAGE','einkaufspreiseuebersicht.tpl'); + } + + /** + * @param int $articleId + * + * @return float + */ + public function getCalcPriceByMinBasePrice($articleId) + { + $kursusd = (float)$this->app->erp->GetWaehrungUmrechnungskurs('EUR','USD'); + $kurschf = (float)$this->app->erp->GetWaehrungUmrechnungskurs('EUR','CHF'); + $sql = " + SELECT + SUM(if(a.stueckliste, + (SELECT SUM( + (SELECT MIN(e.preis/ifnull(wt.kurs,if(e.waehrung = 'CHR',$kurschf,if(e.waehrung = 'USD',$kursusd,1)))) FROM einkaufspreise e + LEFT JOIN ( + SELECT max(kurs) as kurs, waehrung_von, waehrung_nach FROM waehrung_umrechnung WHERE (isnull(gueltig_bis) OR gueltig_bis >= now() OR gueltig_bis = '0000-00-00') AND (waehrung_von LIKE 'EUR' OR waehrung_nach LIKE 'EUR') GROUP BY waehrung_von,waehrung_nach + ) wt ON (wt.waehrung_nach <> 'EUR' AND wt.waehrung_nach = e.waehrung) OR (wt.waehrung_von <> 'EUR' AND wt.waehrung_von = e.waehrung) + WHERE e.artikel=s2.artikel AND (e.objekt='Standard' OR e.objekt='') + AND (e.gueltig_bis='0000-00-00' OR e.gueltig_bis >= curdate()) AND e.geloescht!=1) * s2.menge) + FROM stueckliste s2 + WHERE s2.stuecklistevonartikel=s.artikel),(SELECT MIN(e.preis/ifnull(wt.kurs,if(e.waehrung = 'CHR',$kurschf,if(e.waehrung = 'USD',$kursusd,1)))) FROM einkaufspreise e + LEFT JOIN ( + SELECT max(kurs) as kurs, waehrung_von, waehrung_nach FROM waehrung_umrechnung WHERE (isnull(gueltig_bis) OR gueltig_bis >= now() OR gueltig_bis = '0000-00-00') AND (waehrung_von LIKE 'EUR' OR waehrung_nach LIKE 'EUR') GROUP BY waehrung_von,waehrung_nach + ) wt ON (wt.waehrung_nach <> 'EUR' AND wt.waehrung_nach = e.waehrung) OR (wt.waehrung_von <> 'EUR' AND wt.waehrung_von = e.waehrung) + WHERE e.artikel=s.artikel AND (e.objekt='Standard' OR e.objekt='') AND (e.gueltig_bis='0000-00-00' OR e.gueltig_bis >= curdate()) AND e.geloescht!=1 ))*s.menge) + FROM stueckliste s + LEFT JOIN artikel a ON a.id=s.artikel + LEFT JOIN adresse l ON l.id=a.adresse + WHERE s.stuecklistevonartikel=$articleId"; + + return (float)$this->app->DB->Select($sql); + } + + /** + * @param int $articleId + * + * @return float mixed + */ + public function getCalcPriceByMaxBasePrice($articleId) + { + $kursusd = (float)$this->app->erp->GetWaehrungUmrechnungskurs('EUR','USD'); + $kurschf = (float)$this->app->erp->GetWaehrungUmrechnungskurs('EUR','CHF'); + $sql = " + SELECT + SUM(if(a.stueckliste, + (SELECT SUM( + (SELECT MAX(e.preis/ifnull(wt.kurs,if(e.waehrung = 'CHR',$kurschf,if(e.waehrung = 'USD',$kursusd,1)))) FROM einkaufspreise e + LEFT JOIN ( + SELECT max(kurs) as kurs, waehrung_von, waehrung_nach FROM waehrung_umrechnung WHERE (isnull(gueltig_bis) OR gueltig_bis >= now() OR gueltig_bis = '0000-00-00') AND (waehrung_von LIKE 'EUR' OR waehrung_nach LIKE 'EUR') GROUP BY waehrung_von,waehrung_nach + ) wt ON (wt.waehrung_nach <> 'EUR' AND wt.waehrung_nach = e.waehrung) OR (wt.waehrung_von <> 'EUR' AND wt.waehrung_von = e.waehrung) + WHERE e.artikel=s2.artikel AND (e.objekt='Standard' OR e.objekt='') + AND (e.gueltig_bis='0000-00-00' OR e.gueltig_bis >= curdate()) AND e.geloescht!=1) * s2.menge) + FROM stueckliste s2 + WHERE s2.stuecklistevonartikel=s.artikel),(SELECT MAX(e.preis/ifnull(wt.kurs,if(e.waehrung = 'CHR',$kurschf,if(e.waehrung = 'USD',$kursusd,1)))) FROM einkaufspreise e + LEFT JOIN ( + SELECT max(kurs) as kurs, waehrung_von, waehrung_nach FROM waehrung_umrechnung WHERE (isnull(gueltig_bis) OR gueltig_bis >= now() OR gueltig_bis = '0000-00-00') AND (waehrung_von LIKE 'EUR' OR waehrung_nach LIKE 'EUR') GROUP BY waehrung_von,waehrung_nach + ) wt ON (wt.waehrung_nach <> 'EUR' AND wt.waehrung_nach = e.waehrung) OR (wt.waehrung_von <> 'EUR' AND wt.waehrung_von = e.waehrung) + WHERE e.artikel=s.artikel AND (e.objekt='Standard' OR e.objekt='') AND (e.gueltig_bis='0000-00-00' OR e.gueltig_bis >= curdate()) AND e.geloescht!=1 ))*s.menge) + FROM stueckliste s + LEFT JOIN artikel a ON a.id=s.artikel + LEFT JOIN adresse l ON l.id=a.adresse + WHERE s.stuecklistevonartikel=$articleId"; + + return (float)$this->app->DB->Select($sql); + } + + public function ArtikelEinkaufEditPopup() + { + if($this->app->Secure->GetPOST('newpreis')) + { + $id = $this->app->Secure->GetGET('id'); + $this->ArtikelCopyWaehrungen($id, 'einkaufeditpopup'); + } + //$frame = $this->app->Secure->GetGET('frame'); + $id = $this->app->Secure->GetGET('id'); + $this->app->Tpl->Set('OPENDISABLE',''); + $this->Preisrechner(); + + + $sid = $this->app->DB->Select("SELECT artikel FROM einkaufspreise WHERE id='$id' LIMIT 1"); + $this->ArtikelMenu($sid); + $artikel = $this->app->DB->Select("SELECT CONCAT(name_de,' (',nummer,')') FROM artikel WHERE id='$sid' LIMIT 1"); + $this->app->Tpl->Set('UEBERSCHRIFT','Artikel: '.$artikel); + $this->app->Tpl->Add('UEBERSCHRIFT',' (Einkauf)'); + + $this->app->Tpl->Set('ABBRECHEN',""); + + $widget = new WidgetEinkaufspreise($this->app,'TAB7'); + $widget->form->SpecialActionAfterExecute('close_refresh', + "index.php?module=artikel&action=einkauf&id=$sid#tabs-1"); + $widget->Edit(); + + + $this->app->Tpl->Add('TAB2','Sie bearbeiten gerade einen Einkaufspreis. Erst nach dem Speichern können neue Preise angelegt werden.'); + $this->app->Tpl->Add('TAB3','Sie bearbeiten gerade einen Einkaufspreis. Erst nach dem Speichern können Statistiken betrachtet werden.'); + $this->app->Tpl->Parse('PAGE','einkaufspreiseuebersicht.tpl'); + } + + public function ArtikelEinkaufDisable() + { + // $this->ArtikelMenu(); + $id = $this->app->Secure->GetGET('id'); + $sid = $this->app->DB->Select("SELECT artikel FROM einkaufspreise WHERE id='$id' LIMIT 1"); + $tagespreise = $this->app->DB->Select("SELECT tagespreise FROM artikel WHERE id = '$sid' LIMIT 1"); + if(!$tagespreise || $this->app->DB->Select("SELECT id FROM einkaufspreise WHERE id='$id' AND (gueltig_bis = '0000-00-00' || isnull(gueltig_bis) || gueltig_bis >= date(now()) LIMIT 1")){ + $this->app->DB->Update("UPDATE einkaufspreise SET gueltig_bis=DATE_SUB(NOW(),INTERVAL 1 DAY), logdatei = now() WHERE id='$id' LIMIT 1"); + } + $this->app->erp->ObjektProtokoll('einkaufspreise', $id, 'einkaufspreise_edit', 'Einkaufspreis deaktiviert'); + $this->app->Location->execute('index.php?module=artikel&action=einkauf&id='.$sid); + } + + public function ArtikelEinkaufDelete() + { + // $this->ArtikelMenu(); + $id = $this->app->Secure->GetGET('id'); + $sid = $this->app->DB->Select("SELECT artikel FROM einkaufspreise WHERE id='$id' LIMIT 1"); + $tagespreise = $this->app->DB->Select("SELECT tagespreise FROM artikel WHERE id = '$sid' LIMIT 1"); + if(!$tagespreise || $this->app->DB->Select("SELECT id FROM einkaufspreise WHERE id='$id' AND (gueltig_bis = '0000-00-00' || isnull(gueltig_bis) || gueltig_bis >= date(now()) LIMIT 1")){ + $this->app->DB->Update("UPDATE einkaufspreise SET geloescht='1',gueltig_bis=DATE_SUB(NOW(),INTERVAL 1 DAY), logdatei = now() WHERE id='$id' LIMIT 1"); + } + $this->app->erp->ObjektProtokoll('einkaufspreise', $id, 'einkaufspreise_edit', 'Einkaufspreis gelöscht'); + $this->app->Location->execute('index.php?module=artikel&action=einkauf&id='.$sid); + } + + + + public function ArtikelEigenschaftenCopy() + { + $id = $this->app->Secure->GetGET('id'); + + $id = $this->app->DB->MysqlCopyRow('eigenschaften','id',$id); + + $this->app->Location->execute('index.php?module=artikel&action=eigenschafteneditpopup&id='.$id); + } + + + public function ArtikelEinkaufCopy() + { + $id = $this->app->Secure->GetGET('id'); + $id = $this->app->DB->MysqlCopyRow('einkaufspreise','id',$id); + $this->app->DB->Update("UPDATE einkaufspreise SET geloescht='0', gueltig_bis='0000-00-00', logdatei = now() WHERE id='$id' LIMIT 1"); + $this->app->erp->ObjektProtokoll('einkaufspreise', $id, 'einkaufspreise_create', 'Einkaufspreis kopiert'); + //$this->app->DB->Update("UPDATE einkaufspreise SET geloescht='1' WHERE id='$id' LIMIT 1"); + $sid = $this->app->DB->Select("SELECT artikel FROM einkaufspreise WHERE id='$id' LIMIT 1"); + $this->app->Location->execute("index.php?module=artikel&action=einkauf&id=".$sid); + } + + + public function ArtikelCopyEdit() + { + //$id = (int)$this->app->Secure->GetGET('id'); + if($this->app->Secure->GetGET('cmd')==='get'){ + $id = (int)$this->app->Secure->GetPOST('id'); + $data = $this->app->DB->SelectRow("SELECT id FROM artikel WHERE id = \"$id\" LIMIT 1 "); + echo json_encode($data); + $this->app->ExitXentral(); + } + $this->app->Tpl->Parse('PAGE', 'artikeluebersicht.tpl'); + } + + public function ArtikelCopySave(){ + $id = (int)$this->app->Secure->GetPOST('editid'); + $einkaufspreise = $this->app->Secure->GetPOST('editeinkaufspreise'); + $verkaufspreise = $this->app->Secure->GetPOST('editverkaufspreise'); + $dateien = $this->app->Secure->GetPOST('editdateien'); + $eigenschaften = $this->app->Secure->GetPOST('editeigenschaften'); + $anweisungen = $this->app->Secure->GetPOST('editanweisungen'); + $stuecklisten = $this->app->Secure->GetPOST('editstuecklisten'); + $freifelderuebersetzung = $this->app->Secure->GetPOST('editfreifelderuebersetzung'); + + if($id == '' || $id <= 0){ + $id = 0; + } + if($einkaufspreise == '' || $einkaufspreise <= 0){ + $einkaufspreise = 0; + } + if($verkaufspreise == '' || $einkaufspreise <= 0){ + $verkaufspreise = 0; + } + if($dateien == '' || $dateien <= 0){ + $dateien = 0; + } + if($eigenschaften == '' || $eigenschaften <= 0){ + $eigenschaften = 0; + } + if($anweisungen == '' || $anweisungen <= 0){ + $anweisungen = 0; + } + if($stuecklisten == '' || $stuecklisten <= 0){ + $stuecklisten = 0; + } + if($freifelderuebersetzung == '' || $freifelderuebersetzung <= 0){ + $freifelderuebersetzung = 0; + } + + $data = array($id, $einkaufspreise, $verkaufspreise, $dateien, $eigenschaften, $anweisungen, $stuecklisten, $freifelderuebersetzung); + + $idnew = $this->ArtikelCopy($data, true); + echo json_encode(array('status'=>1,'url'=>'index.php?module=artikel&action=edit&id='.$idnew)); + $this->app->ExitXentral(); + } + + function ArtikelCopy($data = null, $return = false) + { + //$id = $this->app->Secure->GetGET("id"); + $id = $data[0]; + $einkaufspreise = $data[1]; + $verkaufspreise = $data[2]; + $dateien = $data[3]; + $eigenschaften = $data[4]; + $anweisungen = $data[5]; + $stuecklisten = $data[6]; + $freifelderuebersetzung = $data[7]; + + $this->app->DB->MysqlCopyRow('artikel','id',$id); + + $idnew = $this->app->DB->GetInsertID(); + + $steuersatz = $this->app->DB->Select("SELECT steuersatz FROM artikel WHERE id = '$id' LIMIT 1"); + if($steuersatz == ''){ + $steuersatz = -1.00; + $this->app->DB->Update("UPDATE artikel SET steuersatz = '$steuersatz' WHERE id = '$idnew' LIMIT 1"); + } + + $this->app->DB->Update("UPDATE artikel SET nummer='' WHERE id='$idnew' LIMIT 1"); + if($this->app->DB->Select("SELECT variante_kopie FROM artikel WHERE id = '$id' LIMIT 1"))$this->app->DB->Update("UPDATE artikel SET variante = 1, variante_von = '$id' WHERE id = '$idnew' LIMIT 1"); + + if($stuecklisten == 1){ + // wenn stueckliste + $stueckliste = $this->app->DB->Select("SELECT stueckliste FROM artikel WHERE id='$id' LIMIT 1"); + if($stueckliste==1) + { + $artikelarr = $this->app->DB->SelectArr("SELECT * FROM stueckliste WHERE stuecklistevonartikel='$id'"); + $cartikelarr = $artikelarr?count($artikelarr):0; + for($i=0;$i<$cartikelarr;$i++) + { + $sort = $artikelarr[$i]['sort']; + $artikel = $artikelarr[$i]['artikel']; + $referenz = $artikelarr[$i]['referenz']; + $place = $artikelarr[$i]['place']; + $layer = $artikelarr[$i]['layer']; + $stuecklistevonartikel = $idnew; + $menge = $artikelarr[$i]['menge']; + $firma = $artikelarr[$i]['firma']; + + $this->app->DB->Insert("INSERT INTO stueckliste (id,sort,artikel,referenz,place,layer,stuecklistevonartikel,menge,firma) VALUES + ('','$sort','$artikel','$referenz','$place','$layer','$stuecklistevonartikel','$menge','$firma')"); + } + } + } + + /*$arbeitsanweisungen = $this->app->DB->SelectArr("SELECT id FROM `artikel_arbeitsanweisung` WHERE artikel = '$id'"); + if($arbeitsanweisungen) + { + foreach($arbeitsanweisungen as $arbeitsanweisung) + { + $newarbeitsanweisung = $this->app->DB->MysqlCopyRow('artikel_arbeitsanweisung', 'id', $arbeitsanweisung['id']); + $this->app->DB->Update("UPDATE `artikel_arbeitsanweisung` SET artikel = '$idnew' WHERE id = '$newarbeitsanweisung' LIMIT 1"); + } + }*/ + //TODO hinweis es wuren keine Preise kopiert + + if($einkaufspreise == 1){ + $einkaufspreise = $this->app->DB->SelectArr("SELECT id FROM einkaufspreise WHERE artikel = '$id'"); + if($einkaufspreise){ + foreach($einkaufspreise as $preis){ + $neuereinkaufspreis = $this->app->DB->MysqlCopyRow("einkaufspreise", "id", $preis['id']); + $this->app->DB->Update("UPDATE einkaufspreise SET artikel = '$idnew' WHERE id = '$neuereinkaufspreis' LIMIT 1"); + } + } + } + + if($verkaufspreise == 1){ + $verkaufspreise = $this->app->DB->SelectArr("SELECT id FROM verkaufspreise WHERE artikel = '$id'"); + if($verkaufspreise){ + foreach($verkaufspreise as $preis){ + $neuerverkaufspreis = $this->app->DB->MysqlCopyRow("verkaufspreise", "id", $preis['id']); + $this->app->DB->Update("UPDATE verkaufspreise SET artikel = '$idnew' WHERE id = '$neuerverkaufspreis' LIMIT 1"); + } + } + } + + if($dateien == 1){ + $dateien = $this->app->DB->SelectArr("SELECT DISTINCT datei FROM datei_stichwoerter WHERE parameter = '$id' AND objekt = 'Artikel'"); + $datei_stichwoerter = $this->app->DB->SelectArr("SELECT id,datei FROM datei_stichwoerter WHERE parameter = '$id' AND objekt = 'Artikel'"); + + if($dateien){ + foreach($dateien as $datei){ + $titel = $this->app->DB->Select("SELECT titel FROM datei WHERE id='".$datei['datei']."' LIMIT 1"); + $beschreibung = $this->app->DB->Select("SELECT beschreibung FROM datei WHERE id='".$datei['datei']."' LIMIT 1"); + $nummer = $this->app->DB->Select("SELECT nummer FROM datei WHERE id='".$datei['datei']."' LIMIT 1"); + $name = $this->app->DB->Select("SELECT dateiname FROM datei_version WHERE datei='".$this->app->DB->real_escape_string($datei['datei'])."' ORDER by version DESC LIMIT 1"); + $ersteller = $this->app->User->GetName(); + $tmpnewdateiid = $this->app->erp->CreateDatei($name,$titel,$beschreibung,$nummer,$this->app->erp->GetDateiPfad($datei['datei']),$ersteller); + $datei_mapping[$datei['datei']] = $tmpnewdateiid; + } + } + + if($datei_stichwoerter){ + foreach($datei_stichwoerter as $datei){ + $neuesstichwort = $this->app->DB->MysqlCopyRow("datei_stichwoerter", "id", $datei['id']); + $newdatei = $datei_mapping[$datei['datei']]; + $this->app->DB->Update("UPDATE datei_stichwoerter SET datei='$newdatei', parameter = '$idnew', objekt = 'Artikel' WHERE id = '$neuesstichwort' LIMIT 1"); + } + } + } + + if($eigenschaften == 1){ + $aeigenschaften = $this->app->DB->SelectArr("SELECT id FROM artikeleigenschaftenwerte WHERE artikel = '$id'"); + if($aeigenschaften){ + foreach($aeigenschaften as $eigenschaft){ + $neue_eigenschaft = $this->app->DB->MysqlCopyRow("artikeleigenschaftenwerte", "id", $eigenschaft['id']); + $this->app->DB->Update("UPDATE artikeleigenschaftenwerte SET artikel = '$idnew' WHERE id = '$neue_eigenschaft' LIMIT 1"); + } + } + } + + //WERDEN AUCH SCHON IMMER KOPIERT + if($anweisungen == 1){ + $arbeitsanweisungen = $this->app->DB->SelectArr("SELECT id FROM artikel_arbeitsanweisung WHERE artikel = '$id'"); + if($arbeitsanweisungen){ + foreach($arbeitsanweisungen as $anweisung){ + $neue_anweisung = $this->app->DB->MysqlCopyRow("artikel_arbeitsanweisung", "id", $anweisung['id']); + $this->app->DB->Update("UPDATE artikel_arbeitsanweisung SET artikel = '$idnew' WHERE id = '$neue_anweisung' LIMIT 1"); + } + } + } + + if($freifelderuebersetzung == 1){ + $freifelderuebersetzungen = $this->app->DB->SelectArr("SELECT id FROM artikel_freifelder WHERE artikel = '$id'"); + if($freifelderuebersetzungen){ + $this->app->DB->Insert("INSERT INTO artikel_freifelder (artikel, sprache, nummer, wert) SELECT '$idnew', sprache, nummer, wert FROM artikel_freifelder WHERE artikel = '$id'"); + } + } + + // artikelbilder kopieren + + if($return){ + return $idnew; + } + + // eventuell einkaufspreise verkaufspreise und stueckliste kopieren? + $msg = $this->app->erp->base64_url_encode("
Sie befinden sich in der neuen Kopie des Artikels. Bitte legen Sie Verkaufs- und Einkaufspreise und Bilder bzw. Dateien an! Diese wurden nicht kopiert!
"); + $this->app->Location->execute("index.php?module=artikel&action=edit&msg=$msg&id=".$idnew); + } + + public function ArtikelProjekte() + { + $this->app->Tpl->Add('UEBERSCHRIFT',' (Projekte)'); + $this->ArtikelMenu(); + $this->app->Tpl->Set('PAGE','hier sieht man in welchen projekten es verwendet wird'); + } + + public function ArtikelLager() + { + $id = $this->app->Secure->GetGET('id'); + $cmd = $this->app->Secure->GetGET('cmd'); + if($cmd === 'getvpe') + { + $lpiid = (int)$this->app->Secure->GetPOST('lpiid'); + $erg = $this->app->DB->SelectRow("SELECT lpv.* FROM lager_platz_inhalt lpi LEFT JOIN lager_platz_vpe lpv ON lpi.lager_platz_vpe = lpv.id WHERE lpi.id = '".$lpiid."' LIMIT 1"); + echo json_encode($erg); + $this->app->ExitXentral(); + } + + if($cmd === 'getvpevorlage') + { + $vpeid = (int)$this->app->Secure->GetPOST('vpeid'); + $erg = $this->app->DB->SelectRow("SELECT lpv.* FROM lager_platz_vpe lpv WHERE lpv.id = '".$vpeid."' LIMIT 1"); + echo json_encode($erg); + $this->app->ExitXentral(); + } + + if($cmd === 'savevpe') + { + $lpiid = (int)$this->app->Secure->GetPOST('lpiid'); + $artikel = $this->app->DB->Select("SELECT artikel FROM lager_platz_inhalt WHERE id = '".$lpiid."' LIMIT 1"); + $status = 0; + if($artikel) + { + $status = 1; + $menge = str_replace(',','.',$this->app->Secure->GetPOST('menge')); + $menge2 = str_replace(',','.',$this->app->Secure->GetPOST('menge2')); + $gewicht = str_replace(',','.',$this->app->Secure->GetPOST('gewicht')); + $breite = str_replace(',','.',$this->app->Secure->GetPOST('breite')); + $laenge = str_replace(',','.',$this->app->Secure->GetPOST('laenge')); + $hoehe = str_replace(',','.',$this->app->Secure->GetPOST('hoehe')); + $gewicht2 = str_replace(',','.',$this->app->Secure->GetPOST('gewicht2')); + $breite2 = str_replace(',','.',$this->app->Secure->GetPOST('breite2')); + $laenge2 = str_replace(',','.',$this->app->Secure->GetPOST('laenge2')); + $hoehe2 = str_replace(',','.',$this->app->Secure->GetPOST('hoehe2')); + $check = str_replace(',','.',$this->app->DB->Select("SELECT id FROM lager_platz_vpe WHERE artikel = '$artikel' AND + menge = '$menge' AND menge2 = '$menge2' + AND gewicht = '$gewicht' AND gewicht2 = '$gewicht2' + AND breite = '$breite' AND breite2 = '$breite2' + AND laenge = '$laenge' AND laenge2 = '$laenge2' + AND hoehe = '$hoehe' AND hoehe2 = '$hoehe2' + LIMIT 1 + ")); + if(!$check && ($menge > 0 || $gewicht > 0 || $breite > 0 || $laenge > 0 || $hoehe > 0)) + { + $this->app->DB->Insert("INSERT INTO lager_platz_vpe (artikel, menge, menge2, gewicht, gewicht2, breite, breite2, laenge, laenge2, hoehe, hoehe2) + VALUES ('$artikel','$menge','$menge2','$gewicht','$gewicht2','$breite','$breite2','$laenge','$laenge2','$hoehe','$hoehe2') + "); + $check = $this->app->DB->GetInsertID(); + } + $menge = $this->app->DB->Select("SELECT menge FROM lager_platz_inhalt WHERE id = '$lpiid' LIMIT 1"); + $lager_platz = $this->app->DB->Select("SELECT lager_platz FROM lager_platz_inhalt WHERE id = '$lpiid' LIMIT 1"); + $lager_platz_vpe = $this->app->DB->Select("SELECT lager_platz_vpe FROM lager_platz_inhalt WHERE id = '".$lpiid."' LIMIT 1"); + if(!$lager_platz_vpe) + { + $lagerbewegung = $this->app->DB->SelectArr("SELECT * FROM lager_bewegung WHERE lager_platz = '$lager_platz' AND artikel = '$artikel' AND menge = '$menge' AND eingang = 1 ORDER BY zeit DESC, id DESC LIMIT 1"); + if($lagerbewegung) + { + if(!$lagerbewegung[0]['vpeid']) + { + $this->app->DB->Update("UPDATE lager_bewegung SET vpeid = '$check' WHERE id = '".$lagerbewegung[0]['id']."' LIMIT 1"); + } + if(stripos($lagerbewegung[0]['referenz'],'(VPE') === false) + { + $referenz = $this->app->DB->real_escape_string($lagerbewegung[0]['referenz'].$this->app->erp->GetVPEBezeichnung($check)); + $this->app->DB->Update("UPDATE lager_bewegung SET referenz = '$referenz' WHERE id = '".$lagerbewegung[0]['id']."' LIMIT 1"); + } + } + } + $this->app->DB->Update("UPDATE lager_platz_inhalt SET lager_platz_vpe = '$check' WHERE id = '$lpiid' LIMIT 1"); + } + echo json_encode(array('status'=>$status)); + $this->app->ExitXentral(); + } + + $msg = $this->app->Secure->GetGET('msg'); + + if(!is_numeric($id)) + { + $tmp = explode('_',$id); + $id = $tmp[0]; + if(is_numeric($id)) + { + $this->app->Location->execute("index.php?module=artikel&action=lager&id=$id"); + return; + } + } + $this->app->erp->LagerArtikelZusammenfassen($id); + + if(method_exists($this->app->erp,'GetTmpMessageOut')) + { + $this->app->Tpl->Set('MESSAGE',$this->app->erp->GetTmpMessageOut()); + }else{ + $msg = $this->app->erp->base64_url_decode($msg); + $this->app->Tpl->Set('MESSAGE',$msg); + } + if($this->app->DB->Select("SELECT id FROM lager_platz_inhalt WHERE artikel = '$id' AND lager_platz <> 0 AND NOT isnull(inventur) LIMIT 1")) + { + $this->app->Tpl->Add('MESSAGE','
Für diesen Artikel läuft aktuell eine Inventur
'); + } + $check = $this->app->DB->Select("SELECT trim(SUM(menge))+0 FROM zwischenlager WHERE artikel='$id'"); + if($check > 0) + { + $this->app->Tpl->Add('MESSAGE','
Hinweis: Es befinden sich noch '.$check.' Stück des Artikels im Zwischenlager!
'); + } + + $this->ArtikelMenu(); + $this->app->Tpl->Add('TAB1','

Lagerbestand

'); + + // easy table mit arbeitspaketen YUI als template + $table = new EasyTable($this->app); + $bestbeforeBatchSn = $this->app->DB->SelectRow( + sprintf( + 'SELECT mindesthaltbarkeitsdatum, seriennummern, chargenverwaltung + FROM artikel + WHERE id=%d + LIMIT 1', + $id + ) + ); + $mindesthaltbarkeitsdatum = $bestbeforeBatchSn['mindesthaltbarkeitsdatum']; + $seriennummern = $bestbeforeBatchSn['seriennummern']; + $chargenverwaltung= $bestbeforeBatchSn['chargenverwaltung']; + + $artikelvpe = 'lpi.vpe'; + $artikeljoin = ''; + + + if($seriennummern!=='vomprodukteinlagern' && $chargenverwaltung <1 && $mindesthaltbarkeitsdatum!='1') + { + $table->Query("SELECT CONCAT(l.bezeichnung,' / ',lp.kurzbezeichnung, if(lp.sperrlager,' (Kein Auto-Versand Lager)',''), + if(lp.poslager,' (POS Lager)',''),if(lp.verbrauchslager,' (Verbrauchslager)',''),if(lp.autolagersperre,' (Nachschublager)',''),if(isnull(lpi.inventur),'',concat(' (Inventurwert: ',(trim(lpi.inventur)+0),')'))) as lager , trim(lpi.menge)+0 as menge, + $artikelvpe as VPE, + p.abkuerzung as projekt, + lpi.id FROM lager_platz_inhalt lpi + LEFT JOIN lager_platz as lp ON lpi.lager_platz=lp.id + LEFT JOIN projekt p ON lpi.projekt=p.id + LEFT JOIN lager l ON l.id=lp.lager + $artikeljoin + WHERE lpi.artikel='$id' "); + + $submenu=''; + if($this->app->erp->RechteVorhanden('artikel','auslagern')){ + $submenu .= " 0 && (grund!=null && grund!='')) { window.location.href='index.php?module=artikel&action=auslagern&id=$id&lid=%value%&menge='+menge+'&grund='+grund;}\" href=\"#\">"; + } + + if($this->app->erp->RechteVorhanden('artikel','einlagern')){ + $submenu .= " 0 && (grund!=null && grund!='')) { window.location.href='index.php?module=artikel&action=einlagern&id=$id&lid=%value%&menge='+menge+'&grund='+grund;}\" href=\"#\">"; + } + + + if($this->app->erp->RechteVorhanden('artikel','umlagern')){ + $submenu .=" 0 && (grund!=null && grund!='')) { window.location.href='index.php?module=artikel&action=umlagern&id=$id&lid=%value%&menge='+menge+'&grund='+grund;}\" href=\"#\">"; + } + + if($this->app->erp->RechteVorhanden('artikel','auslagern') || $this->app->erp->RechteVorhanden('artikel','einlagern') + || $this->app->erp->RechteVorhanden('artikel','umlagern')) + { + $table->DisplayNew('INHALT',$submenu); + } + else { + $table->DisplayNew('INHALT',''); + } + } else { + $table->Query("SELECT CONCAT(l.bezeichnung,' / ',lp.kurzbezeichnung, if(lp.sperrlager,' (Kein Auto-Versand Lager)',''), + if(lp.poslager,' (POS Lager)',''),if(lp.verbrauchslager,' (Verbrauchslager)',''),if(lp.autolagersperre,' (Nachschublager)','')) as lager , trim(lpi.menge)+0 as menge, + $artikelvpe as VPE, + p.abkuerzung as projekt + FROM lager_platz_inhalt lpi LEFT JOIN lager_platz as lp ON lpi.lager_platz=lp.id LEFT JOIN projekt p ON lpi.projekt=p.id + LEFT JOIN lager l ON l.id=lp.lager + $artikeljoin + WHERE lpi.artikel='$id'"); + + if($this->app->erp->RechteVorhanden('artikel','auslagern') || $this->app->erp->RechteVorhanden('artikel','einlagern') + || $this->app->erp->RechteVorhanden('artikel','umlagern')){ + $table->DisplayNew('INHALT', 'Projekt', 'noAction'); + } + else{ + $table->DisplayNew('INHALT', ''); + } + } + + $this->app->Tpl->Parse('TAB1','rahmen70.tpl'); + + $this->app->Tpl->Set('INHALT',''); + + $mindesthaltbarkeitsdatum = $this->app->DB->Select("SELECT mindesthaltbarkeitsdatum FROM artikel WHERE id='$id' LIMIT 1"); + $chargenverwaltung = $this->app->DB->Select("SELECT chargenverwaltung FROM artikel WHERE id='$id' LIMIT 1"); + $seriennummern = $this->app->DB->Select("SELECT seriennummern FROM artikel WHERE id='$id' LIMIT 1"); + + if($seriennummern==='vomprodukteinlagern' || $mindesthaltbarkeitsdatum=='1' || $chargenverwaltung=='2') + { + $this->app->Tpl->Add('TAB1',"
+ + + +
"); + } else { + $this->app->Tpl->Add('TAB1',"
"); + } + // $this->app->Tpl->Set('SUBSUBHEADING',"Reservierungen Stand ".date('d.m.Y')); + $this->app->Tpl->Add('TAB1',$this->ArtikelLagerInfo($id)); + + if($this->app->erp->Version()!=='stock') + { + $this->app->Tpl->Add('TAB1','

Reservierungen

'); + + // easy table mit arbeitspaketen YUI als template + $table = new EasyTable($this->app); + $table->Query("SELECT adr.name as kunde, trim(r.menge)+0 as menge, if(r.datum='0000-00-00','Kein Datum hinterlegt',r.datum) as bis, + p.abkuerzung as projekt,r.grund, IF(".$this->app->erp->RechteVorhanden("artikel","ausreservieren")."=1,CONCAT(' 0) window.location.href=\'index.php?module=artikel&action=ausreservieren&id=$id&lid=',r.id,'&menge=\'+menge;\" href=\"#\">'),'') AS Aktion FROM lager_reserviert r LEFT JOIN artikel a ON a.id=r.artikel LEFT JOIN projekt p ON + p.id=r.projekt LEFT JOIN adresse adr ON r.adresse=adr.id WHERE r.artikel='$id'"); + //$summe = round($this->app->DB->Select("SELECT SUM(menge) FROM lager_platz_inhalt WHERE artikel='$id'"),4); + //$reserviert = round($this->app->DB->Select("SELECT SUM(menge) FROM lager_reserviert WHERE artikel='$id'"),4);// AND datum >= NOW()"); + // if($this->app->User->GetType()=="admin") + + + $table->DisplayNew('INHALT'); + + $this->app->Tpl->Parse('TAB1','rahmen70.tpl'); + + $this->app->Tpl->Set('INHALT',''); + + $this->app->Tpl->Add('TAB1','

Offene Aufträge

'); + // easy table mit arbeitspaketen YUI als template + $table = new EasyTable($this->app); + $table->Query("SELECT + CONCAT('',a.belegnr,'') as belegnr, DATE_FORMAT(a.datum,'%d.%m.%Y') as datum, + DATE_FORMAT(a.tatsaechlicheslieferdatum,'%d.%m.%Y') as 'Auslieferung Lager', + trim(SUM(ap.menge))+0 as menge, + CONCAT( + (SELECT trim(SUM(li.menge))+0 FROM lager_reserviert li WHERE li.objekt='auftrag' AND li.parameter=a.id AND li.artikel='$id'),'  + + ') as reserviert, + a.zahlungsweise, adr.kundenfreigabe as freigabe, CONCAT(a.name, ' ',a.ansprechpartner + ,'
', a.email) as Kunde, + if( + (SELECT b.belegnr FROM auftrag sub_a Left Join auftrag_position ap on ap.auftrag=sub_a.id LEFT JOIN bestellung_position bp on ap.id=bp.auftrag_position_id LEFT JOIN bestellung b on b.id= bp.bestellung where sub_a.id=a.id LIMIT 1) + ,CONCAT('', + (SELECT b.belegnr FROM auftrag sub_a Left Join auftrag_position ap on ap.auftrag=sub_a.id LEFT JOIN bestellung_position bp on ap.id=bp.auftrag_position_id LEFT JOIN bestellung b on b.id= bp.bestellung where sub_a.id=a.id LIMIT 1),''),'-') as 'Bestell Nr.', + a.zahlungsweise, + format(ap.geliefert_menge,4) as gelieferte, + FORMAT(ap.preis,2) as preis FROM auftrag_position ap LEFT JOIN auftrag a ON a.id=ap.auftrag, adresse adr WHERE adr.id=a.adresse AND ap.artikel='$id' AND ap.geliefert_menge < ap.menge AND a.status='freigegeben' GROUP by a.belegnr + ORDER by a.tatsaechlicheslieferdatum, a.id + "); + if($table->datasets) + { + $lagerrunden = true; + foreach($table->datasets as $k => $v) + { + if($v['menge'] != round($v['menge'])){ + $lagerrunden = false; + } + if($v['gelieferte'] != round($v['gelieferte'])){ + $lagerrunden = false; + } + } + if($lagerrunden) + { + foreach($table->datasets as $k => $v) + { + $table->datasets[$k]['menge'] = round($v['menge']); + $table->datasets[$k]['gelieferte'] = round($v['gelieferte']); + } + } + } + //$table->DisplayNew('INHALT',"Bestellung"); + $table->DisplayNew('INHALT','Preis','noAction'); + + $this->app->Tpl->Parse('TAB1','rahmen70.tpl'); + + $this->app->Tpl->Set('INHALT',''); + + $this->app->Tpl->Set('INHALT',''); + $this->app->Tpl->Add('TAB1','

Offene Bestellungen

'); + + $table = new EasyTable($this->app); + $table->Query("SELECT DATE_FORMAT(b.datum,'%d.%m.%Y') as datum, CONCAT('',b.belegnr,'') as 'bestellung Nr.', + if( + (SELECT nummer from auftrag_position where id=bp.auftrag_position_id LIMIT 1),CONCAT('', + (SELECT a.belegnr from auftrag a LEFT JOIN auftrag_position ap on a.id=ap.auftrag where ap.id=bp.auftrag_position_id LIMIT 1),''),'-') as 'Auftrag Nr.', + bp.bestellnummer as Nummer, + + bp.menge, bp.geliefert, bp.vpe as VPE, a.lieferantennummer as lieferant, a.name as name, if(bp.lieferdatum!='0000-00-00', DATE_FORMAT(bp.lieferdatum,'%d.%m.%Y'),'sofort') as lieferdatum, + if(b.bestaetigteslieferdatum!='0000-00-00', DATE_FORMAT(b.bestaetigteslieferdatum,'%d.%m.%Y'),'-') as 'best. Lieferdatum', b.status as status_Bestellung, bp.bestellung + FROM bestellung_position bp LEFT JOIN bestellung b ON bp.bestellung=b.id LEFT JOIN adresse a ON b.adresse=a.id + WHERE artikel='$id' AND b.status!='storniert' AND b.status!='abgeschlossen' AND bp.geliefertdatasets) + { + $lagerrunden = true; + foreach($table->datasets as $k => $v) + { + if($v['menge'] != round($v['menge'])){ + $lagerrunden = false; + } + if($v['geliefert'] != round($v['geliefert'])){ + $lagerrunden = false; + } + } + if($lagerrunden) + { + foreach($table->datasets as $k => $v) + { + $table->datasets[$k]['menge'] = round($v['menge']); + $table->datasets[$k]['geliefert'] = round($v['geliefert']); + } + } + } + $table->DisplayNew('INHALT',"  "); + $this->app->Tpl->Parse('TAB1','rahmen70.tpl'); + } + $this->app->Tpl->Set('INHALT',''); + $this->app->Tpl->Add('TAB1','

Lagerplatz Bewegungen

'); + // easy table mit arbeitspaketen YUI als template + $this->app->YUI->TableSearch('TAB1','lagerbewegungartikel', 'show','','',basename(__FILE__), __CLASS__); + + + $this->app->Tpl->Set('INHALT',''); + + //$this->app->Tpl->Set('TABTEXT',"Lagerbestand"); + + $lager_platz_vpe = $this->app->DB->SelectArr("SELECT * FROM lager_platz_vpe WHERE artikel = '$id'"); + if($lager_platz_vpe) + { + foreach($lager_platz_vpe as $v) + { + $this->app->Tpl->Add('SELECTVPE',''); + } + } + $this->app->Tpl->Parse('PAGE','artikel_lager.tpl'); + } + + + public function ArtikelChargeDelete() + { + $id = $this->app->Secure->GetGET('id'); + $sid = $this->app->Secure->GetGET('sid'); + if($sid > 0){ + $data = $this->app->DB->SelectRow("SELECT * FROM lager_charge WHERE id='$sid' LIMIT 1"); + } + if(!empty($data)){ + $lager_platz = $data['lager_platz']; + $artikel = $data['artikel']; + $menge = $data['menge']; + $this->app->DB->Delete("DELETE FROM lager_charge WHERE id='$sid' LIMIT 1"); + if($this->app->DB->Select("SELECT mindesthaltbarkeitsdatum FROM artikel WHERE id = '$artikel' LIMIT 1")) + { + $this->app->erp->Chargenlog($artikel, $lager_platz, 0, $data['charge'], $menge, 'Charge und/oder MHD gelöscht', "", 0); + }else{ + $this->app->erp->Chargenlog($artikel, $lager_platz, 0, $data['charge'], $menge, 'Charge gelöscht', "", 0); + } + } + $this->app->Location->execute("index.php?module=artikel&action=chargen&id=$id"); + } + + + public function ArticleBatchAdd() + { + $id = $this->app->Secure->GetGET('id'); + $lid = $this->app->Secure->GetGET('lid'); + $grund = $this->app->Secure->GetGET('grund'); + $menge = $this->app->erp->ReplaceMenge(1, $this->app->Secure->GetGET('menge'), 1); + if($menge <= 0) { + $this->app->Location->execute('index.php?module=artikel&action=chargen&id='.$id); + } + if($lid > 0){ + $data = $this->app->DB->SelectRow( + sprintf( + 'SELECT * FROM `lager_charge` WHERE `id` = %d LIMIT 1', + $lid + ) + ); + } + if(!empty($data)){ + $lager_platz = $data['lager_platz']; + $artikel = $data['artikel']; + $this->app->erp->LagerEinlagern($artikel, $menge, $lager_platz, 0, $grund); + } + $this->app->Location->execute('index.php?module=artikel&action=chargen&id='.$id); + } + + public function ArticleBestbeforeAdd() + { + $id = $this->app->Secure->GetGET('id'); + $lid = $this->app->Secure->GetGET('lid'); + $grund = $this->app->Secure->GetGET('grund'); + $menge = $this->app->erp->ReplaceMenge(1, $this->app->Secure->GetGET('menge'), 1); + if($menge <= 0) { + $this->app->Location->execute('index.php?module=artikel&action=mindesthaltbarkeitsdatum&id='.$lid); + } + if($lid > 0){ + $data = $this->app->DB->SelectRow( + sprintf( + 'SELECT * FROM `lager_mindesthaltbarkeitsdatum` WHERE `id` = %d LIMIT 1', + $lid + ) + ); + } + if(!empty($data)){ + $lager_platz = $data['lager_platz']; + $artikel = $data['artikel']; + $this->app->erp->LagerEinlagern($artikel, $menge, $lager_platz, 0, $grund); + } + + $this->app->Location->execute('index.php?module=artikel&action=mindesthaltbarkeitsdatum&id='.$id); + } + + public function ArticleBatchReduce() + { + $id = $this->app->Secure->GetGET('id'); + $lid = $this->app->Secure->GetGET('lid'); + $grund = $this->app->Secure->GetGET('grund'); + $menge = $this->app->erp->ReplaceMenge(1, $this->app->Secure->GetGET('menge'), 1); + if($menge <= 0) { + $this->app->Location->execute('index.php?module=artikel&action=chargen&id='.$id); + } + if($lid > 0){ + $data = $this->app->DB->SelectRow( + sprintf( + 'SELECT * FROM `lager_charge` WHERE `id` = %d LIMIT 1', + $lid + ) + ); + } + if(!empty($data)){ + $lager_platz = $data['lager_platz']; + $artikel = $data['artikel']; + $lpi = round((float)$this->app->DB->Select( + sprintf( + 'SELECT SUM(menge) FROM `lager_platz_inhalt` WHERE `artikel` = %d AND `lager_platz` = %d', + $artikel, $lager_platz + ) + ),8); + if($menge > $lpi) { + $menge = $lpi; + } + + $this->app->erp->LagerAuslagernRegal($artikel, $lager_platz, $menge, 0, $grund); + } + $this->app->Location->execute('index.php?module=artikel&action=chargen&id='.$id); + } + + public function ArticleBestbeforeReduce() + { + $id = $this->app->Secure->GetGET('id'); + $lid = $this->app->Secure->GetGET('lid'); + $grund = $this->app->Secure->GetGET('grund'); + $menge = $this->app->erp->ReplaceMenge(1, $this->app->Secure->GetGET('menge'), 1); + if($menge <= 0) { + $this->app->Location->execute('index.php?module=artikel&action=mindesthaltbarkeitsdatum&id='.$id); + } + if($lid > 0){ + $data = $this->app->DB->SelectRow( + sprintf( + 'SELECT * FROM `lager_mindesthaltbarkeitsdatum` WHERE `id` = %d LIMIT 1', + $lid + ) + ); + } + if(!empty($data)){ + $lager_platz = $data['lager_platz']; + $artikel = $data['artikel']; + $lpi = round((float)$this->app->DB->Select( + sprintf( + 'SELECT SUM(menge) FROM `lager_platz_inhalt` WHERE `artikel` = %d AND `lager_platz` = %d', + $artikel, $lager_platz + ) + ),8); + if($menge > $lpi) { + $menge = $lpi; + } + + $this->app->erp->LagerAuslagernRegal($artikel, $lager_platz, $menge, 0, $grund); + } + $this->app->Location->execute('index.php?module=artikel&action=mindesthaltbarkeitsdatum&id='.$id); + } + + public function ArtikelMHDDelete() + { + $id = $this->app->Secure->GetGET('id'); + $sid = $this->app->Secure->GetGET('sid'); + if($sid > 0){ + $data = $this->app->DB->SelectArr("SELECT * FROM lager_mindesthaltbarkeitsdatum WHERE id='$sid' LIMIT 1"); + } + if(!empty($data)){ + $lager_platz = $data[0]['lager_platz']; + $artikel = $data[0]['artikel']; + $menge = $data[0]['menge']; + $charge = $data[0]['charge']; + + $this->app->DB->Delete("DELETE FROM lager_mindesthaltbarkeitsdatum WHERE id='$sid' LIMIT 1"); + if($this->app->DB->Select("SELECT chargenverwaltung FROM artikel WHERE id = '$artikel' LIMIT 1")){ + if(!empty($charge)) + { + $charge = $this->app->DB->real_escape_string($charge); + $amount_mhdcharge = $this->app->DB->Select("SELECT IFNULL(SUM(lm.menge),0) + FROM lager_mindesthaltbarkeitsdatum as lm + WHERE lm.artikel = $artikel AND lm.charge = '$charge'"); + $amount_charge = $this->app->DB->Select("SELECT IFNULL(SUM(lc.menge),0) + FROM lager_charge AS lc + WHERE lc.artikel = $artikel AND lc.charge = '$charge'"); + if($amount_charge >= $amount_mhdcharge + $menge) + { + $chargen = $this->app->DB->SelectArr("SELECT lc.* + FROM lager_charge AS lc + WHERE lc.artikel = $artikel AND lc.charge = '$charge' ORDER BY lc.menge >= $menge DESC"); + $nochmenge = $menge; + foreach($chargen as $chargenrow) + { + if($nochmenge <= 0) + { + break; + } + if($nochmenge >= $chargenrow['menge']) + { + $this->app->DB->Delete("DELETE FROM lager_charge WHERE id = ".$chargenrow['id']); + if($this->app->DB->affected_rows() > 0){ + $nochmenge = round($nochmenge - $chargenrow['menge'], 8); + } + }else{ + $this->app->DB->Update("UPDATE lager_charge SET menge = menge - $nochmenge WHERE id = ".$chargenrow['id']); + if($this->app->DB->affected_rows() > 0){ + $nochmenge = 0; + break; + } + } + } + if($nochmenge < $menge) + { + $this->app->erp->Chargenlog($artikel, $lager_platz, 0, $charge, round($menge-$nochmenge,8), 'Charge und / oder MHD gelöscht'); + } + } + } + $this->app->erp->MHDLog($artikel, $lager_platz, 0, $data[0]['mhddatum'], $menge, 'Charge und / oder MHD gelöscht', "", 0, $data[0]['charge'], 0); + }else{ + $this->app->erp->MHDLog($artikel, $lager_platz, 0, $data[0]['mhddatum'], $menge, 'MHD gelöscht', "", 0, $data[0]['charge'], 0); + } + } + $this->app->Location->execute("index.php?module=artikel&action=mindesthaltbarkeitsdatum&id=$id"); + } + + public function ArtikelChargen() + { + $this->ArtikelMenu(); + $obj = $this->app->erp->LoadModul('chargen'); + if($obj) + { + $obj->ChargenArtikelChargen(); + } + } + + + public function ArtikelMHD() + { + $id = $this->app->Secure->GetGET('id'); + $this->ArtikelMenu(); + //$this->app->Tpl->Set('TABTEXT','Mindesthaltbarkeitsdatum'); + + $this->app->YUI->DatePicker('datum'); + $this->app->YUI->AutoComplete('lagerplatz','lagerplatz'); + + if($this->app->Secure->GetPOST('anlegen')!='') + { + $formmenge = str_replace(',','.',$this->app->Secure->GetPOST('menge')); + $datum = $this->app->Secure->GetPOST('datum'); + $charge = $this->app->Secure->GetPOST('charge'); + $lagerplatz = $this->app->Secure->GetPOST('lagerplatz'); + $datum = $this->app->String->Convert($datum,'%1.%2.%3','%3-%2-%1'); + $lagerplatz = $this->app->DB->Select("SELECT id FROM lager_platz WHERE kurzbezeichnung='$lagerplatz' LIMIT 1"); + + if(is_numeric($formmenge) && is_numeric($lagerplatz) && $datum!='--') + { + if($this->app->DB->Select("SELECT chargenverwaltung FROM artikel WHERE id = '$id' LIMIT 1")) + { + if(!empty($charge)){ + $this->app->erp->AddChargeLagerOhneBewegung( + $id, + $formmenge, + $lagerplatz, + $datum, + $charge, + 'Charge und / oder MHD angelegt'); + } + $this->app->erp->AddMindesthaltbarkeitsdatumLagerOhneBewegung($id,$formmenge,$lagerplatz,$datum,$charge,0 , '', 0, 'Charge und / oder MHD angelegt'); + }else{ + $this->app->erp->AddMindesthaltbarkeitsdatumLagerOhneBewegung($id,$formmenge,$lagerplatz,$datum,$charge,0 , '', 0, 'MHD angelegt'); + } + } else { + $this->app->Tpl->Add('TAB1','
Fehler: Bitte Menge, MHD und Lager angeben!
'); + } + } + + $menge = $this->app->erp->ArtikelImLager($id); + $mhd = $this->app->DB->Select("SELECT SUM(menge) FROM lager_mindesthaltbarkeitsdatum WHERE artikel='$id'"); + if($menge > $mhd) + $this->app->Tpl->Add('TAB1',"
Achtung: Es sind ".($menge-$mhd)." Einträge zu wenig vorhanden!
"); + else if ($menge < $mhd) + $this->app->Tpl->Add('TAB1',"
Achtung: Es sind ".($mhd-$menge)." Einträge zu viel vorhanden!
"); + + $this->app->Tpl->Add('TAB1',"
Menge:  MHD:  Lager:  Charge (optional):  
"); + + + $this->app->YUI->TableSearch('TAB1','mindesthaltbarkeitsdatum', 'show','','','mhdwarning.php', 'Mhdwarning'); + $this->app->Tpl->Parse('PAGE','tabview.tpl'); + } + + + function getStuecklistenbaum(&$sbaum, $parent, $menge = 1) + { + $res = $this->app->DB->SelectArr("SELECT s.id, trim(s.menge)+0 as menge, s.art, s.stuecklistevonartikel, art.nummer, s.artikel, art.name_de FROM stueckliste s INNER JOIN artikel art ON s.artikel = art.id WHERE stuecklistevonartikel = '$parent' ORDER by sort"); + if(!empty($res)) + { + foreach($res as $k => $v) + { + $v['menge'] *= $menge; + $sbaum[] = $v; + $this->getStuecklistenbaum($sbaum, $v['artikel'], $v['menge']); + } + } + } + + public function ArtikelStueckliste() + { + if($this->app->Secure->GetGET('cmd') === 'getbaum') + { + $disabled = false; + $id = (int)$this->app->Secure->GetGET('id'); + $this->getStuecklistenbaum($sbaum, $id); + $maxlvl = 0; + foreach($sbaum as $k => $v) + { + $ind[$v['artikel']] = $k; + + if($v['stuecklistevonartikel'] == $id) + { + $sbaum[$k]['lvl'] = 0; + $name = 'node'.$k; + $$name = new stdClass(); + $$name->id = $v['id']; + $$name->label = ' '.$v['menge'].' x '.$v['nummer'].' '.(strlen($v['name_de']) < 30?$v['name_de']:(mb_substr($v['name_de'],0,27).'...')).''; + $$name->checkbox = false; + $$name->inode = false; + $$name->radio = false; + switch($v['art']) + { + case 'it': + $$name->icon = 'imgit'; + break; + case 'bt': + $$name->icon = 'imgbt'; + break; + default: + $$name->icon = 'imget'; + break; + } + if($disabled)$$name->disabled = true; + /*if($kategorie) + { + foreach($kategorie as $ka) + { + if($ka['kategorie'] == $v['id'])$$name->checked = true; + } + }*/ + $baum[] = $$name; + $sbaum[$k]['node'] = $$name; + }else{ + if(isset($ind[$v['stuecklistevonartikel']])) + { + $name = 'node'.$k; + $$name = new stdClass(); + $$name->id = $v['id']; + $$name->label = ' '.$v['menge'].' x '.$v['nummer'].' '.(strlen($v['name_de']) < 30?$v['name_de']:(mb_substr($v['name_de'],0,27).'...')).''; + $$name->checkbox = false; + $$name->inode = false; + $$name->radio = false; + if($disabled)$$name->disabled = true; + /*if($kategorie) + { + foreach($kategorie as $ka) + { + if($ka['kategorie'] == $v['id'])$$name->checked = true; + } + }*/ + switch($v['art']) + { + case 'it': + $$name->icon = 'imgit'; + break; + case 'bt': + $$name->icon = 'imgbt'; + break; + default: + $$name->icon = 'imget'; + break; + } + $sbaum[$k]['node'] = $$name; + $sbaum[$k]['lvl'] = 1+$sbaum[$ind[$v['stuecklistevonartikel']]]['lvl']; + if($sbaum[$k]['lvl'] > $maxlvl)$maxlvl = $sbaum[$k]['lvl']; + $sbaum[$ind[$v['stuecklistevonartikel']]]['inode'] = true; + //$kategorien[$ind[$v['parent']]]['node']->inode = true; + $sbaum[$ind[$v['stuecklistevonartikel']]]['node']->open = true; + $sbaum[$ind[$v['stuecklistevonartikel']]]['node']->branch[] = $$name; + } + } + } + echo json_encode($baum); + $this->app->ExitXentral(); + } + + + $this->app->Tpl->Add('UEBERSCHRIFT','" (Stückliste)'); + $this->ArtikelMenu(); + $id = $this->app->Secure->GetGET('id'); + + if($this->app->Secure->GetPOST('artikel')!=''){ + $this->app->Tpl->Set('AKTIV_TAB2', 'selected'); + } + else{ + $this->app->Tpl->Set('AKTIV_TAB1', 'selected'); + } + + $this->app->YUI->TableSearch('TAB1','stueckliste', 'show','','',basename(__FILE__), __CLASS__); + + $stueck = $this->app->erp->ArtikelAnzahlLagerStueckliste($id); + + $this->ArtikelStuecklisteImport('TAB3'); + $url = 'index.php?module=artikel&action=stueckliste&cmd=getbaum&id='.$id; + $this->app->Tpl->Set('URL',$url); + $this->app->Tpl->Add('TAB1',"
"); + $this->app->Tpl->Add('TAB1',""); + $this->app->Tpl->Add('TAB1',""); + //$this->app->Tpl->Add('TAB1',""); + $this->app->Tpl->Add('TAB1',""); + //$this->app->Tpl->Add('TAB1',""); + $this->app->Tpl->Add('TAB1',"


"); + + $this->app->Tpl->Add('TAB1',"
Aktuell können $stueck Stück produziert werden (Etiketten für Stückliste drucken)
"); + $this->app->Tpl->Add('TAB1',''); + + if($this->app->erp->IstStuecklistenZirkel($id)) + { + $this->app->Tpl->Add('MESSAGE', '
{|Diese Stückliste enthält Artikel die einen Zirkelbezug verursachen!|}
'); + } + + $addAlternative = ''; + $addAlternative .= "app->Conf->WFconf['defaulttheme']}/images/pluspaket_gruen_kl.png\" border=\"0\">"; + $addAlternative .= ''; + + if($this->app->Secure->GetGET('cmd') === 'getalternative'){ + $id = (int)$this->app->Secure->GetPOST('id'); + + $data = $this->app->DB->SelectRow("SELECT s.id, s.art FROM stueckliste s WHERE s.id = '$id' LIMIT 1"); + + if(empty($data)) { + $data['id'] = 0; + $data['art'] = ''; + } + + echo json_encode($data); + $this->app->ExitXentral(); + + } + elseif($this->app->Secure->GetGET('cmd') === 'getalternativedetails') { + $alternativeId = (int)$this->app->Secure->GetPOST('id'); + + $data = $this->app->DB->SelectArr("SELECT id as alternativeId, alternative_article_id, reason FROM parts_list_alternative WHERE id = '$alternativeId'"); + + if($data){ + $data = reset($data); + $data['article'] = $this->app->DB->Select("SELECT CONCAT(nummer, ' ', name_de) FROM artikel WHERE id = '".$data['alternative_article_id']."' LIMIT 1"); + + + }else{ + $data['id'] = 0; + $data['art'] = ''; + } + + echo json_encode($data); + $this->app->ExitXentral(); + + } + elseif($this->app->Secure->GetGET('cmd') === 'savealternative') { + $id = (int)$this->app->Secure->GetPOST('id'); + $alternativeId = $this->app->Secure->GetPOST('alternativeId'); + $alternativeArticle = trim($this->app->Secure->GetPOST('alternativeArticle')); + $reason = trim($this->app->Secure->GetPOST('reason')); + + $error = ""; + + if($alternativeArticle == ""){ + $error .= "Bitte alternativen Artikel ausfüllen\n"; + }else{ + $alternativeArticleNo = explode(' ', $alternativeArticle); + $alternativeArticleNo = $alternativeArticleNo[0]; + if($alternativeArticleNo != ""){ + $alternativeArticleId = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer = '$alternativeArticleNo' LIMIT 1 "); + if($alternativeArticleId <= 0 || $alternativeArticleId == ''){ + $error .= "Kein gültiger Artikel\n"; + } + }else{ + $error .= "Keine Artikelnummer\n"; + } + } + + if($alternativeArticleId > 0){ + //NOCH PRUEFEN + $alternativeArticleAlreadyExists = $this->app->DB->Select("SELECT id FROM parts_list_alternative WHERE alternative_article_id = '$alternativeArticleId' AND parts_list_id = '$id' AND id != '$alternativeId' LIMIT 1"); + if($alternativeArticleAlreadyExists != '' && $alternativeArticleAlreadyExists > 0){ + $error .= "Alternativer Artikel existiert bereits\n"; + } + } + + if($error == ""){ + if($id){ + if($alternativeId > 0 && $alternativeId != ''){ + $this->app->DB->Update("UPDATE parts_list_alternative SET alternative_article_id = '$alternativeArticleId', reason = '$reason' WHERE id = '$alternativeId'"); + }else{ + $this->app->DB->Insert("INSERT INTO parts_list_alternative (parts_list_id, alternative_article_id, reason) VALUES ('$id', '$alternativeArticleId', '$reason')"); + } + + echo json_encode(array('status'=>1)); + $this->app->ExitXentral(); + }else{ + echo json_encode(array('status'=>0,'statusText'=>'Fehler')); + $this->app->ExitXentral(); + } + }else{ + echo json_encode(array('status'=>0,'statusText'=>$error)); + $this->app->ExitXentral(); + } + + }elseif($this->app->Secure->GetGET('cmd') === 'deletealternative'){ + $id = (int) $this->app->Secure->GetPOST('id'); + if($id) + $this->app->DB->Update("DELETE FROM parts_list_alternative WHERE id = '$id'"); + + echo json_encode(array('status'=>1)); + $this->app->ExitXentral(); + }elseif($this->app->Secure->GetGET('cmd') === 'savetype'){ + $id = (int) $this->app->Secure->GetPOST('id'); + $type = $this->app->Secure->GetPOST('type'); + + if($type != "" && $id > 0){ + $this->app->DB->Update("UPDATE stueckliste SET art = '$type' WHERE id = '$id'"); + echo json_encode(array('status'=>1)); + $this->app->ExitXentral(); + }else{ + echo json_encode(array('status'=>0,'statusText'=>'Fehler')); + $this->app->ExitXentral(); + } + } + + + //$this->app->Tpl->Add('ADDALTERNATIVE', $addAlternative ); + $this->app->YUI->AutoComplete('parts_list_alternative_article', 'artikelnummer'); + + $this->app->YUI->TableSearch('PARTSLISTALTERNATIVES', 'parts_list_alternatives', 'show', '', '', basename(__FILE__), __CLASS__); + + $this->app->Tpl->Parse('PAGE','stuecklisteuebersicht.tpl'); + } + + public function ArtikelStuecklisteEmpty() + { + $id = $this->app->Secure->GetGET('id'); + if($id > 0){ + $this->app->DB->Delete("DELETE FROM stueckliste WHERE stuecklistevonartikel='$id'"); + } + $this->app->Location->execute("index.php?module=artikel&action=stueckliste&id=$id"); + } + + function ArtikelStuecklisteExport() + { + $id = $this->app->Secure->GetGET('id'); + if($id > 0){ + $result = $this->app->DB->SelectArr("SELECT a.nummer, a.name_de, a.hersteller,a.herstellernummer, REPLACE(TRIM(s.menge)+0,'.',',') as menge, s.referenz, s.place, s.layer, s.wert, s.bauform, s.zachse,s.xpos, s.ypos, s.art FROM stueckliste s + LEFT JOIN artikel a ON a.id=s.artikel WHERE s.stuecklistevonartikel='$id'"); + } + header('Content-type: text/csv'); + header('Content-Disposition: attachment; filename=file.csv'); + header('Pragma: no-cache'); + header('Expires: 0'); + + $out = fopen('php://output', 'w'); + $cresult = !empty($result)?count($result):0; + for($i=0;$i<$cresult;$i++) + { + if($i==0) { + foreach($result[$i] as $spalte=>$wert) + echo '"'.$spalte.'";'; + echo "\r\n"; + } + fputcsv($out, $result[$i],';','"'); + } + + fclose($out); + $this->app->ExitXentral(); + } + + public function UpStueckliste() + { + $this->app->YUI->SortListEvent('up','stueckliste','stuecklistevonartikel'); + $this->ArtikelStueckliste(); + } + + public function DownStueckliste() + { + $this->app->YUI->SortListEvent('down','stueckliste','stuecklistevonartikel'); + $this->ArtikelStueckliste(); + } + + + public function DelStueckliste() + { + $id = $this->app->Secure->GetGET('id'); + if($id > 0){ + $sort = $this->app->DB->Select("SELECT sort FROM stueckliste WHERE id='$id' LIMIT 1"); + $sid = $this->app->DB->Select("SELECT stuecklistevonartikel FROM stueckliste WHERE id='$id' LIMIT 1"); + + $this->app->DB->Delete("DELETE FROM stueckliste WHERE id='$id'"); + + $this->app->DB->Delete("UPDATE stueckliste SET sort=sort-1 WHERE stuecklistevonartikel='$sid' AND sort > $sort LIMIT 1"); + } + $this->app->Location->execute('index.php?module=artikel&action=stueckliste&id='.$sid); + } + + + function ArtikelInStueckliste() + { + $this->ArtikelMenu(); + $this->app->Tpl->Set('TABTEXT','In Stückliste von folgenden Artikel vorhanden'); + $this->app->YUI->TableSearch('TAB1','instueckliste', 'show','','',basename(__FILE__), __CLASS__); + $this->app->Tpl->Parse('PAGE','tabview.tpl'); + } + + public function ArtikelStuecklisteEditPopup() + { + $cmd = $this->app->Secure->GetGET('cmd'); + if($cmd === 'edit'){ + + $id = (int)$this->app->Secure->GetPOST('id'); + + $data = $this->app->DB->SelectRow('SELECT s.id, s.artikel, '.$this->app->erp->FormatMenge("s.menge")." as menge, s.art, s.referenz, s.layer, s.place, s.wert, s.bauform, s.zachse, s.xpos, s.ypos FROM stueckliste s WHERE s.id = '$id' LIMIT 1"); + + if($data){ + if($data['artikel'] == 0){ + $data['artikel'] = ''; + }else{ + if($data['artikel'] != ''){ + $artikel = $this->app->DB->SelectRow("SELECT nummer, name_de FROM artikel WHERE id = '".$data['artikel']."' LIMIT 1"); + if(!empty($artikel)){ + $data['artikel'] = $artikel['nummer'].' '.$artikel['name_de']; + } + } + } + + if($data['art'] == ''){ + $data['art'] = 'et'; + } + + /*if($data['alternative'] == 0){ + $data['alternative'] = ''; + }else{ + if($data['alternative'] != ''){ + $alternative = $this->app->DB->SelectRow("SELECT nummer, name_de FROM artikel WHERE id = '".$data['alternative']."' LIMIT 1"); + if(!empty($alternative)){ + $data['alternative'] = $alternative['nummer'].' '.$alternative['name_de']; + } + } + }*/ + + + }else{ + $data['id'] = 0; + $data['artikel'] = ''; + $data['menge'] = ''; + $data['art'] = 'et'; + //$data['alternative'] = ''; + $data['referenz'] = ''; + $data['layer'] = 'Top'; + $data['place'] = 'DP'; + $data['wert'] = ''; + $data['bauform'] = ''; + $data['zachse'] = ''; + $data['xpos'] = ''; + $data['ypos'] = ''; + + } + echo json_encode($data); + $this->app->ExitXentral(); + + } + if($cmd === 'save' || $cmd === 'doppeltsave'){ + + $cmdsave = $cmd; + + $id = (int)$this->app->Secure->GetPOST('eid'); + $startikelid = (int)$this->app->Secure->GetPOST('estartikelid'); + $artikel = trim($this->app->Secure->GetPOST('eartikel')); + $menge = str_replace(',','.',trim($this->app->Secure->GetPOST('emenge'))); + $art = trim($this->app->Secure->GetPOST('eart')); + //$alternative = trim($this->app->Secure->GetPOST('ealternative')); + $referenz = trim($this->app->Secure->GetPOST('ereferenz')); + $layer = trim($this->app->Secure->GetPOST('elayer')); + $place = trim($this->app->Secure->GetPOST('eplace')); + $wert = trim($this->app->Secure->GetPOST('ewert')); + $bauform = trim($this->app->Secure->GetPOST('ebauform')); + $zachse = trim($this->app->Secure->GetPOST('ezachse')); + $xpos = trim($this->app->Secure->GetPOST('expos')); + $ypos = trim($this->app->Secure->GetPOST('eypos')); + + if($cmdsave === 'doppeltsave'){ + $einfuegen = trim($this->app->Secure->GetPOST('eeinfuegen')); + $mengeerhoehen = trim($this->app->Secure->GetPOST('emengeerhoehen')); + + } + + $error = ''; + + if($artikel == ''){ + $error .= "Bitte Artikel ausfüllen\n"; + }else{ + $artikelnr = explode(' ', $artikel); + $artikelnr = $artikelnr[0]; + $artikelid = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer = '$artikelnr' LIMIT 1"); + if($artikelid != ''){ + }else{ + $error .= "Bitte gültigen Artikel ausfüllen\n"; + } + } + + //12.07.19 LG keine menge 0 bei stuecklistenposition + if($menge == '' || $menge <= 0){ + $error .= "Bitte Menge ausfüllen"."\n"; + } + + $errordoppelt = ''; + $doppeltid = ''; + + + $ergebnis = $this->artinsturec($startikelid, $artikelid, $cmdsave, $id); + + $errordoppelt = $ergebnis['errordoppelt']; + $doppeltid = $ergebnis['doppeltid']; + + + /*$alternativeid = 0; + if($alternative != ''){ + $alternativenr = explode(' ', $alternative); + $alternativenr = $alternativenr[0]; + $alternativeid = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer = '$alternativenr' LIMIT 1"); + if($alternativeid != ''){ + }else{ + $error .= "Bitte gültigen Alternativ Artikel ausfüllen\n"; + } + }*/ + + if($this->app->erp->IstStuecklistenZirkel($artikelid, $startikelid)){ + $error .= 'Stückliste enthält Artikel die einen Zirkelbezug verursachen!'; + } + + if($error == "" && $errordoppelt == ''){ + if($cmdsave === 'doppeltsave' && $mengeerhoehen == 1 && $doppeltid > 0){ + $this->app->DB->Update("UPDATE stueckliste SET menge = menge + '$menge' WHERE id = '$doppeltid'"); + echo json_encode(array('status'=>1)); + $this->app->ExitXentral(); + } + if($id){ + $this->app->DB->Update("UPDATE stueckliste SET artikel = '$artikelid', menge = '$menge', art = '$art', referenz = '$referenz', layer = '$layer', place = '$place', wert = '$wert', bauform = '$bauform', zachse = '$zachse', xpos = '$xpos', ypos = '$ypos' WHERE id = '$id'"); + echo json_encode(array('status'=>1)); + $this->app->ExitXentral(); + } + if(($cmdsave === 'doppeltsave' && $einfuegen == 1) || $cmdsave === 'save'){ + $this->app->DB->Insert("INSERT INTO stueckliste (sort, artikel, referenz, place, layer, stuecklistevonartikel, menge, art, firma, wert, bauform, zachse, xpos, ypos) VALUES (0, '$artikelid', '$referenz', '$place', '$layer', '$startikelid', '$menge', '$art', 1, '$wert', '$bauform', '$zachse', '$xpos', '$ypos')"); + echo json_encode(array('status'=>1)); + $this->app->ExitXentral(); + } + echo json_encode(array('status'=>0,'statusText'=>'Fehler')); + $this->app->ExitXentral(); + } + if($error != ''){ + echo json_encode(array('status'=>0,'statusText'=>$error,'doppelt'=>'')); + $this->app->ExitXentral(); + } + if($error == '' && $errordoppelt != ''){ + echo json_encode(array('status' => 0, 'statusText' => '', 'doppelt' => $errordoppelt)); + $this->app->ExitXentral(); + } + } + } + + function artinsturec($hauptartikelid, $unterartikelid, $cmdsave, $id){ + + $stuecklistenunterartikel = $this->app->DB->SelectArr("SELECT id, artikel FROM stueckliste WHERE stuecklistevonartikel = '$hauptartikelid' AND id != '$id'"); + foreach($stuecklistenunterartikel as $key=>$value){ + if($unterartikelid == $value['artikel']){ + $ergebnis['doppeltid'] = $value['id']; + //$doppeltid = $value['id']; + if($cmdsave === 'save'){ + $ergebnis['errordoppelt'] = 'doppelt'; + //$errordoppelt .= "doppelt"; + } + }else{ + $ergebnis = $this->artinsturec($value['artikel'], $unterartikelid, $cmdsave, $id); + } + } + return $ergebnis; + } + + public function ArtikelStatistik() + { + $id = $this->app->Secure->GetGET('id'); + $this->ArtikelMenu(); + + //$this->app->Tpl->Set('TABTEXT',"Statistik"); + //$this->app->Tpl->Set('TAB1',"

Statistik Mengen


"); + + $summe['jahr']='Summe'; + $summe['monat']=''; + + $auftraege = $this->app->DB->SelectArr("SELECT EXTRACT(YEAR FROM a.datum) as jahr, EXTRACT(MONTH FROM a.datum) as monat, TRIM(sum(ap.menge))+0 as menge + FROM auftrag_position ap LEFT JOIN auftrag a ON a.id=ap.auftrag + WHERE ap.artikel='$id' AND (a.status<>'storniert' and a.status <> 'angelegt') GROUP By monat,jahr ORDER by jahr DESC, monat DESC" + ); + $mengeauftraege = 0; + $mengeanfragen = 0; + $mengeangebote = 0; + $mengelieferscheine = 0; + $mengebestellungen = 0; + + if($auftraege) + { + foreach($auftraege as $el) + { + $tab[$el['jahr']][$el['monat']]['auftraege'] = $el['menge']; + $summe['auftrag'] += $el['menge']; + } + } else { + $summe['auftrag']=''; + } + + + $lieferscheine = $this->app->DB->SelectArr( + "SELECT EXTRACT(YEAR FROM l.datum) as jahr, EXTRACT(MONTH FROM l.datum) as monat, TRIM(sum(lp.menge))+0 as menge + from lieferschein l + LEFT JOIN lieferschein_position lp on l.id = lp.lieferschein + WHERE lp.artikel='$id' AND (l.status='versendet') GROUP By monat,jahr ORDER by jahr DESC, monat DESC" + ); + + if($lieferscheine) + { + foreach($lieferscheine as $el) + { + $tab[$el['jahr']][$el['monat']]['lieferscheine'] = $el['menge']; + $summe['lieferscheine'] += $el['menge']; + } + } else { + $summe['lieferschein']=''; + } + + $rechnungen = $this->app->DB->SelectArr( + "SELECT EXTRACT(YEAR FROM r.datum) as jahr, EXTRACT(MONTH FROM r.datum) as monat, TRIM(sum(rp.menge))+0 as menge + from rechnung r + LEFT JOIN rechnung_position rp on r.id = rp.rechnung + WHERE rp.artikel='$id' AND (r.status!='angelegt' AND r.status!='storniert') GROUP By monat,jahr ORDER by jahr DESC, monat DESC" + ); + + if($rechnungen) + { + foreach($rechnungen as $el) + { + $tab[$el['jahr']][$el['monat']]['rechnungen'] = $el['menge']; + $summe['rechnungen'] += $el['menge']; + } + } else { + $summe['rechnungen'] = ''; + } + $angebote = $this->app->DB->SelectArr("SELECT EXTRACT(YEAR FROM a.datum) as jahr, EXTRACT(MONTH FROM a.datum) as monat, TRIM(sum(ap.menge))+0 as menge + FROM angebot_position ap LEFT JOIN angebot a ON a.id=ap.angebot + WHERE ap.artikel='$id' AND (a.status<>'storniert' and a.status <> 'angelegt') GROUP By monat,jahr ORDER by jahr DESC, monat DESC" + ); + + if($angebote) + { + foreach($angebote as $el) + { + $tab[$el['jahr']][$el['monat']]['angebote'] = $el['menge']; + $summe['angebote'] += $el['menge']; + } + } else { + $summe['angebote']=''; + } + + + + $bestellungen = $this->app->DB->SelectArr("SELECT EXTRACT(YEAR FROM a.datum) as jahr, EXTRACT(MONTH FROM a.datum) as monat, TRIM(sum(ap.menge))+0 as menge + FROM bestellung_position ap LEFT JOIN bestellung a ON a.id=ap.bestellung + WHERE ap.artikel='$id' AND (a.status<>'storniert' and a.status <> 'angelegt') GROUP By monat,jahr ORDER by jahr DESC, monat DESC" + ); + + if($bestellungen) + { + foreach($bestellungen as $el) + { + $tab[$el['jahr']][$el['monat']]['bestellungen'] = $el['menge']; + $summe['bestellungen'] += $el['menge']; + } + } else { + $summe['bestellungen']=''; + } + + if($tab) + { + $table = new EasyTable($this->app); + $table->headings = array('Jahr','Monat','Aufträge','Lieferscheine','Rechnungen','Angebote','Bestellungen'); + krsort($tab); + foreach($tab as $jahr => $monate) + { + krsort($monate); + foreach($monate as $monat => $row) + { + + $displayrow[0] = $jahr; + $displayrow[1] = $monat; + $displayrow[2] = isset($row['auftraege'])?$row['auftraege']:''; + $displayrow[6] = isset($row['lieferscheine'])?$row['lieferscheine']:''; + $displayrow[3] = isset($row['rechnungen'])?$row['rechnungen']:''; + $displayrow[4] = isset($row['angebote'])?$row['angebote']:''; + $displayrow[5] = isset($row['bestellungen'])?$row['bestellungen']:''; + $table->AddRow($displayrow); + } + } + $table->AddRow($summe); + //$html .= "
"; + $table->DisplayNew('TAB1','Bestellungen','noAction'); + } else { + $this->app->Tpl->Set('TAB1','
Zu dem Artikel gibt es noch keine Statistiken, da dieser noch nicht verkauft wurde!
'); + } + + $this->app->Tpl->Parse('PAGE','tabview.tpl'); + } + + public function ArtikelBelege() + { + $this->ArtikelMenu(); + $this->app->YUI->TableSearch('TAB1','artikel_belege', 'show','','',basename(__FILE__), __CLASS__); + if(!($this->app->erp->ModulVorhanden('produktion') && $this->app->erp->RechteVorhanden('produktion','list'))) + { + $this->app->Tpl->Set('VORPRODUKTION',''); + } + $belege = array('auftrag','rechnung','angebot','bestellung','lieferschein'); + + foreach($belege as $beleg) + { + if(!$this->app->erp->RechteVorhanden($beleg,'list')) + { + $this->app->Tpl->Set('VOR'.strtoupper($beleg),''); + } + } + $this->app->Tpl->Parse('PAGE','artikel_belege.tpl'); + } + + + public function ArtikelOffeneBestellungen() + { + $this->ArtikelMenu(); + + $this->app->YUI->TableSearch('TAB1', 'artikel_offenebestellungen', 'show','','',basename(__FILE__), __CLASS__); + + $this->app->Tpl->Parse('PAGE','tabview.tpl'); + } + + + public function ArtikelEinlagern() + { + $id = $this->app->Secure->GetGET('id'); + $lid = (int)$this->app->Secure->GetGET('lid'); + $vpeid = $lid?$this->app->DB->Select("SELECT lager_platz_vpe FROM lager_platz_inhalt WHERE id = '$lid' LIMIT 1"):0; + $menge = str_replace(',','.',$this->app->Secure->GetGET('menge')); + $seriennummern = $this->app->DB->Select("SELECT seriennummern FROM artikel WHERE id = '$id' LIMIT 1"); + if($seriennummern != '' && $seriennummern !== 'keine'){ + $menge = (int)$menge; + } + $grund = $this->app->Secure->GetGET('grund'); + + // menge holen in lagerregaplplatz + //$menge_lager = $this->app->DB->Select("SELECT menge FROM lager_platz_inhalt WHERE id='$lid' LIMIT 1"); + $lager_platz = $this->app->DB->Select("SELECT lager_platz FROM lager_platz_inhalt WHERE id='$lid' LIMIT 1"); + $projekt = $this->app->DB->Select("SELECT projekt FROM lager_platz_inhalt WHERE id='$lid' LIMIT 1"); + + //$neuemenge = $menge_lager + $menge; + $name_de = $this->app->DB->Select("SELECT name_de FROM artikel WHERE id='$id' LIMIT 1"); + if(is_numeric($menge) || is_float($menge)) + { + $this->app->erp->LagerEinlagern($id,$menge,$lager_platz,$projekt,'Manuell Bestand angepasst ('.$grund.')','','','',0,$vpeid); + $msg = $this->app->erp->base64_url_encode("
Der Artikel \"$name_de\" wurde $menge mal eingelagert.
"); + } else { + $msg = $this->app->erp->base64_url_encode("
Fehler: Unbekannte oder falsche Menge: $menge bei Artikel \"$name_de\". Die Artikel wurden nicht eingelagert!
"); + } + + + $this->app->Location->execute("index.php?module=artikel&action=lager&id=$id&msg=$msg"); + } + + public function ArtikelUmlagern() + { + $id = $this->app->Secure->GetGET('id'); + $lid = (int)$this->app->Secure->GetGET('lid'); + $vpeid = $this->app->DB->Select("SELECT lager_platz_vpe FROM lager_platz_inhalt WHERE id = '$lid' LIMIT 1"); + $menge = str_replace(',','.',$this->app->Secure->GetGET('menge')); + $grund = $this->app->Secure->GetGET('grund'); + $seriennummern = $this->app->DB->Select("SELECT seriennummern FROM artikel WHERE id = '$id' LIMIT 1"); + if($seriennummern != '' && $seriennummern !== 'keine'){ + $menge = (int)$menge; + } + // menge holen in lagerregaplplatz + $lager_platz = $this->app->DB->Select("SELECT lager_platz FROM lager_platz_inhalt WHERE id='$lid' LIMIT 1"); + //$projekt = $this->app->DB->Select("SELECT projekt FROM lager_platz_inhalt WHERE id='$lid' LIMIT 1"); + $menge_lager = $this->app->erp->ArtikelImLagerPlatz($id,$lager_platz); + + if($menge_lager > 0) + { + if($menge > $menge_lager) + { + $this->app->erp->LagerAuslagernRegal($id, $lager_platz, $menge_lager, 'Manuell Bestand angepasst ('.$grund.')','','','',0,$vpeid); + }else{ + $this->app->erp->LagerAuslagernRegal($id, $lager_platz, $menge, 'Manuell Bestand angepasst ('.$grund.')','','','',0,$vpeid); + } + } + + if($menge_lager < $menge) { + $menge = $menge_lager; + } + + $grund = $this->app->erp->base64_url_encode($grund); + $this->app->Location->execute("index.php?module=lager&action=bucheneinlagern&artikelid=$id&menge=$menge&cmd=umlagern&back=artikel&grund=$grund".($vpeid?"&vpeid=".$vpeid:'')); + } + + + + public function ArtikelAuslagern() + { + $id = $this->app->Secure->GetGET('id'); + $lid = $this->app->Secure->GetGET('lid'); + $vpeid = $lid?$this->app->DB->Select("SELECT lager_platz_vpe FROM lager_platz_inhalt WHERE id = '$lid' LIMIT 1"):0; + $menge = str_replace(',','.',$this->app->Secure->GetGET('menge')); + $seriennummern = $this->app->DB->Select("SELECT seriennummern FROM artikel WHERE id = '$id' LIMIT 1"); + if($seriennummern != '' && $seriennummern !== 'keine'){ + $menge = (int)$menge; + } + $grund = $this->app->Secure->GetGET('grund'); + + // menge holen in lagerregaplplatz + //$menge_lager = $this->app->DB->Select("SELECT menge FROM lager_platz_inhalt WHERE id='$lid' LIMIT 1"); + $lager_platz = $this->app->DB->Select("SELECT lager_platz FROM lager_platz_inhalt WHERE id='$lid' LIMIT 1"); + $projekt = $this->app->DB->Select("SELECT projekt FROM lager_platz_inhalt WHERE id='$lid' LIMIT 1"); + + $name_de = $this->app->DB->Select("SELECT name_de FROM artikel WHERE id='$id' LIMIT 1"); + + if(is_numeric($menge) || is_float($menge)) + { + $result = $this->app->erp->LagerAuslagernRegal($id,$lager_platz,$menge,$projekt,'Manuell Bestand angepasst ('.$grund.')','','',0,$vpeid); + if($result < 0) + { + $msg = $this->app->erp->base64_url_encode("
Der Artikel \"$name_de\" wurde nicht ausgelagert! Er ist nicht so oft im Lager!
"); + } else { + $msg = $this->app->erp->base64_url_encode("
Der Artikel \"$name_de\" wurde $menge mal ausgelagert.
"); + } + } + else { + $msg = $this->app->erp->base64_url_encode("
Fehler: Unbekannte oder falsche Menge: $menge bei Artikel \"$name_de\". Die Artikel wurden nicht ausgelagert!
"); + } + $this->app->Location->execute("index.php?module=artikel&action=lager&id=$id&msg=$msg"); + } + + public function ArtikelAusreservieren() + { + $id = $this->app->Secure->GetGET('id'); + $lid = $this->app->Secure->GetGET('lid'); + $menge = str_replace(',','.',$this->app->Secure->GetGET('menge')); + $seriennummern = $this->app->DB->Select("SELECT seriennummern FROM artikel WHERE id = '$id' LIMIT 1"); + if($seriennummern != '' && $seriennummern !== 'keine'){ + $menge = (int)$menge; + } + // menge holen in lagerregaplplatz + $menge_lager = $this->app->DB->Select("SELECT menge FROM lager_reserviert WHERE id='$lid' LIMIT 1"); + $neuemenge = $menge_lager - $menge; + //echo "menge_lager = $menge_lager; menge raus = $menge; neuemenge = $neuemenge; lid=$lid"; + if($menge_lager <= $menge){ + $this->app->DB->Delete("DELETE FROM lager_reserviert WHERE id='$lid' LIMIT 1"); + } + else{ + $this->app->DB->Update("UPDATE lager_reserviert SET menge='$neuemenge' WHERE id='$lid' LIMIT 1"); + } + if($menge_lager < $menge) { + $menge = $menge_lager; + } + + $name_de = $this->app->DB->Select("SELECT name_de FROM artikel WHERE id='$id' LIMIT 1"); + $msg = $this->app->erp->base64_url_encode("
Die Reservierung \"$name_de\" wurde $menge mal entfernt.
"); + $this->app->Location->execute("index.php?module=artikel&action=lager&id=$id&msg=$msg"); + } + + /** + * @param int $id + * + * @return array + */ + public function isPossibleToDeleteArticle($id) { + $check_tables = array('anfrage','angebot','auftrag','rechnung','gutschrift','lieferschein','produktion','bestellung','retoure'); + $anzahl = 0; + foreach($check_tables as $table) + { + $anzahl = (int)$this->app->DB->Select("SELECT id FROM ".$table."_position WHERE artikel='$id'"); + if($anzahl > 0) { + return ['status'=>false, 'article_in'=>$table]; + } + } + + $anzahl_stueckliste = $this->app->DB->Select("SELECT id FROM stueckliste WHERE artikel='$id'"); + if($anzahl_stueckliste > 0) { + return ['status'=>false, 'article_in'=>'stueckliste']; + } + + $abos = $this->app->DB->Select("SELECT COUNT(id) FROM abrechnungsartikel WHERE artikel='$id'"); + if($abos > 0) { + return ['status'=>false, 'article_in'=>'abrechnungsartikel']; + } + + return ['status'=>true]; + } + + public function deleteArticleById($id, $sperrenbeiLager = false) + { + $name_de = $this->app->DB->Select("SELECT name_de FROM artikel WHERE id='$id' LIMIT 1"); + + $check_tables = array('anfrage','angebot','auftrag','rechnung','gutschrift','lieferschein','produktion','bestellung','retoure'); + $anzahl = 0; + foreach($check_tables as $table) { + $anzahl += (int)$this->app->DB->Select("SELECT COUNT(id) FROM ".$table."_position WHERE artikel='$id'"); + } + + $anzahl_stueckliste = $this->app->DB->Select("SELECT SUM(menge) FROM stueckliste WHERE artikel='$id'"); + + $abos = $this->app->DB->Select("SELECT COUNT(id) FROM abrechnungsartikel WHERE artikel='$id'"); + + $anzahl += (int)$abos; + $sperren = false; + if($sperrenbeiLager){ + if( + $this->app->DB->Select(sprintf('SELECT id FROM lager_platz_inhalt WHERE artikel = %d', $id)) + || $this->app->DB->Select(sprintf('SELECT id FROM lager_mindesthaltbarkeitsdatum WHERE artikel = %d', $id)) + || $this->app->DB->Select(sprintf('SELECT id FROM lager_charge WHERE artikel = %d', $id)) + || $this->app->DB->Select(sprintf('SELECT id FROM lager_seriennummern WHERE artikel = %d', $id)) + || $this->app->DB->Select(sprintf('SELECT id FROM mhd_log WHERE artikel = %d', $id)) + || $this->app->DB->Select(sprintf('SELECT id FROM chargen_log WHERE artikel = %d', $id)) + ) { + $sperren = true; + } + } + + if($anzahl <=0 && $anzahl_stueckliste <=0) { + if($sperren) { + $this->app->DB->Update("UPDATE artikel SET intern_gesperrt = 1 WHERE id='$id'"); + } + else{ + $this->app->DB->Update("UPDATE artikel SET geloescht='1', nummer='DEL' WHERE id='$id'"); + // Lager reseten + $this->app->DB->Delete("DELETE FROM lager_platz_inhalt WHERE artikel='$id'"); + $this->app->DB->Delete("DELETE FROM lager_reserviert WHERE artikel='$id'"); + $this->app->DB->Delete("DELETE FROM lager_charge WHERE artikel='$id'"); + $this->app->DB->Delete("DELETE FROM lager_bewegung WHERE artikel='$id'"); + $this->app->DB->Delete("DELETE FROM lager_mindesthaltbarkeitsdatum WHERE artikel='$id'"); + $this->app->DB->Delete("DELETE FROM einkaufspreise WHERE artikel='$id'"); + $this->app->DB->Delete("DELETE FROM verkaufspreise WHERE artikel='$id'"); + $this->app->DB->Delete("DELETE FROM artikelbaum_artikel WHERE artikel='$id'"); + $this->app->DB->Delete("DELETE FROM artikel_arbeitsanweisung WHERE artikel='$id'"); + $this->app->DB->Delete("DELETE FROM eigenschaften WHERE artikel='$id'"); + $this->app->DB->Delete( + sprintf('DELETE FROM shopexport_artikel WHERE artikel = %d', $id) + ); + $this->app->DB->Delete( + sprintf('DELETE FROM shopexport_artikeluebertragen WHERE artikel = %d', $id) + ); + + //TODO vielleicht besser machen? mit Hinweis oder so + } + $this->app->DB->Update("UPDATE artikel SET variante=0,variante_von=0 WHERE variante_von='$id' AND variante_von > 0"); + + $this->app->erp->RunHook('article_delete', 1, $id); + + return ['success'=>true, 'msg'=>["
Der Artikel \"$name_de\" und der Lagerbestand wurde gelöscht
"]]; + } + $msg = []; + if($anzahl > 0){ + + $msg[] = "
Der Artikel \"$name_de\" ist Belegen eingebucht. Gefunden: $anzahl
"; + } + + if($anzahl_stueckliste > 0){ + $msg[] = "
Der Artikel \"$name_de\" ist in $anzahl_stueckliste Stückliste(n) vorhanden.
"; + } + + return ['success'=>true, 'msg'=>$msg]; + } + + /** + * @param null|int $id + * + * @return bool|void + */ + public function ArtikelDelete($id = null) + { + $intern = false; + if($id !== null) { + $intern = true; + } else{ + $id = $this->app->Secure->GetGET('id'); + } + + $ret = $this->deleteArticleById($id); + if($intern) { + return $ret; + } + $msg = ''; + foreach($ret['msg'] as $m) { + $msg .= $this->app->erp->base64_url_encode($m); + } + $this->app->Location->execute('index.php?module=artikel&action=list&msg='.$msg); + } + + public function ArtikelCreate() + { + $cmd = $this->app->Secure->GetGET('cmd'); + if($cmd === 'getkategorien') + { + $projekttmp = $this->app->Secure->GetPOST('projekt'); + if($projekttmp) + { + $projekttmp = explode(' ', $projekttmp); + $projekttmp = reset($projekttmp); + $projekttmp = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung = '$projekttmp' LIMIT 1"); + } + $_artikelart = $this->app->erp->GetArtikelgruppe($projekttmp); + foreach($_artikelart as $k => $v){ + echo ''; + } + $this->app->ExitXentral(); + } + $this->app->Tpl->Add('JQUERYREADY',' + $(\'#projekt\').on("change",function(){ + $.ajax({ + url: \'index.php?module=artikel&action=create&cmd=getkategorien\', + type: \'POST\', + dataType: \'text\', + data: {projekt:$("#projekt").val() }, + success: function(data) { + $(\'select[name="typ"]\').html(data); + }}); + }); + $(\'#projekt\').on("focusout",function(){ + $.ajax({ + url: \'index.php?module=artikel&action=create&cmd=getkategorien\', + type: \'POST\', + dataType: \'text\', + data: {projekt:$("#projekt").val() }, + success: function(data) { + $(\'select[name="typ"]\').html(data); + }}); + + }); + '); + + $this->app->Tpl->Set('UEBERSCHRIFT','Artikel (Neu anlegen)'); + $this->app->Tpl->Set('ABBRECHEN',""); + // $this->app->Tpl->Set(KURZUEBERSCHRIFT,"Artikel anlegen"); + $this->app->erp->MenuEintrag('index.php?module=artikel&action=list','Zurück zur Übersicht'); + parent::ArtikelCreate(); + } + + function ArtikelListMenu() + { + $this->app->erp->MenuEintrag('index.php?module=artikel&action=list','Übersicht'); + $this->app->erp->MenuEintrag('index.php?module=artikel&action=create','Neuen Artikel anlegen'); + } + + protected function formatArticleList($articleListStr, $delimiter = ';') + { + $articleListStr = explode($delimiter, $articleListStr); + foreach($articleListStr as $key => $value) { + if((int)$value > 0) { + $articleListStr[$key] = (int)$value; + } else { + unset($articleListStr[$key]); + } + } + + return array_unique($articleListStr); + } + + public function ArtikelList() + { + $cmd = $this->app->Secure->GetGET('cmd'); + if($cmd === 'delete') { + $ret = ['success' => 0]; + if($this->app->erp->RechteVorhanden('artikel', 'delete')) { + $articleList = $this->formatArticleList($this->app->Secure->GetPOST('list')); + if(!empty($articleList)) { + foreach($articleList as $article) { + $r = $this->deleteArticleById($article, true); + if($r['success']){ + $ret['success'] = 1; + } else { + $ret['error'] = reset($r['msg']); + } + } + } else { + $ret['error'] = 'Es sind keine Artikel ausgewählt worden'; + } + }else{ + $ret['error'] = 'Sie haben nicht die Rechte Artikel zu löschen'; + } + + echo json_encode($ret); + $this->app->ExitXentral(); + } + + if($cmd === 'getshopuebertragung') + { + $liste = $this->formatArticleList($this->app->Secure->GetPOST('list')); + $ret = array('html'=>'','success'=>0); + if(!empty($liste)) + { + $ret['articlelist'] = implode(';', $liste); + foreach($liste as $v) + { + $this->app->erp->CheckShopTabelle($v); + } + $shops = $this->app->DB->SelectArr('SELECT s.id,s.bezeichnung FROM artikel_onlineshops AS ao + INNER JOIN shopexport s ON ao.shop = s.id AND s.aktiv = 1 AND (s.lagerexport = 1 OR s.artikelexport = 1) + WHERE ao.aktiv = 1 AND ao.artikel IN ('.implode(', ',$liste).') + GROUP BY s.id, s.bezeichnung + '); + if(empty($shops)) + { + $ret['error'] = 'Es sind keine aktiven Shops verknüpft'; + }else{ + $ret['success'] = 1; + foreach($shops as $shop) + { + $this->app->Tpl->Add('LISTE','
'.$shop['bezeichnung'].':
'.$this->app->Tpl->Parse('return', 'artikel_artikelbaum.tpl',true).''); + } + $this->app->User->SetParameter('filterbaum_artikel',''); + + if($this->app->erp->Firmendaten('artikel_bilder_uebersicht')=='1') + { + $this->app->YUI->TableSearch('TAB1','artikeltabellebilder', 'show','','',basename(__FILE__), __CLASS__); + + $this->app->Tpl->Add('JSSCRIPTS'," + + "); + + + } else { + $this->app->YUI->TableSearch('TAB1','artikeltabelle', 'show','','',basename(__FILE__), __CLASS__); + } + + if($this->app->erp->Firmendaten('schnellsuche')){ + $this->app->YUI->EnterSearch('SCHNELLSUCHE', 'artikeltabelle'); + } + $this->app->YUI->MassenbearbeitungsWidget('massenedit','artikel',array('width'=>'90%')); + $this->app->Tpl->Parse('PAGE','artikeluebersicht.tpl'); + } + + function ArtikelgenEigenschaften(&$hw, &$produkte, $found = null, $lvl = 0) + { + if($produkte) + { + if($found === null) + { + foreach($produkte as $kp => $produkt) + { + $found[$produkt['id']] = true; + } + } + } + $keys = array_keys($hw); + $html = ''; + $html .= ''; + + foreach($hw[$keys[$lvl]] as $k => $v) + { + $html .= ''; + } + + $html .= '
'.$k.''; + + if($found !== null) + { + $where = 'and (0 '; + foreach($found as $kf => $el) + { + if($el)$where .= " or artikel = ".$kf; + } + if($where !== 'and (0 ') + { + $where .= ')'; + $artikel = $this->app->DB->SelectArr("select artikel from eigenschaften where hauptkategorie = '".$keys[$lvl]."' and wert = '".$k."' ".$where); + foreach($found as $kf => $el) + { + $foundnew[$kf] = false; + } + if($artikel) + { + + foreach($artikel as $ka => $art) + { + $foundnew[$art['artikel']] = true; + } + } + } + + } + if($lvl == count($hw) -1) + { + if($found !== null) + { + foreach($foundnew as $kf => $gef) + { + if($gef) + { + foreach($produkte as $kp => $produkt) + { + if($kf == $produkt['id']) + { + $html .= $produkt['nummer']; + break; + } + } + } + } + } + + } elseif($lvl < count($hw) -1) { + + $html .= $this->ArtikelgenEigenschaften($hw, $produkte, $foundnew , $lvl +1); + } + $html .= '
'; + return $html; + } + + + public function ArtikelMenu($id='') + { + if(!is_numeric($id)){ + $id = $this->app->Secure->GetGET('id'); + } + + //$action = $this->app->Secure->GetGET('action'); + + if($id) + { + $tmp = $this->app->DB->SelectArr("SELECT * FROM artikel WHERE id='$id' LIMIT 1"); + if($tmp) + { + $nummer = $tmp[0]['nummer']; + $name_de = $tmp[0]['name_de']; + + $this->app->Tpl->SetText('KURZUEBERSCHRIFT2',$this->app->erp->LimitChar($name_de,100)." (Artikel $nummer)"); + $this->app->erp->MenuEintrag("index.php?module=artikel&action=edit&id=$id",'Details'); + + $anzahldateien = $this->app->erp->AnzahlDateien("Artikel",$id); + if($anzahldateien > 0) { + $anzahldateien = ' ('.$anzahldateien.')'; + } else { + $anzahldateien=''; + } + + $this->app->erp->MenuEintrag("index.php?module=artikel&action=dateien&id=$id",'Dateien'.$anzahldateien); + + if($tmp[0]['stueckliste']==1){ + $this->app->erp->MenuEintrag("index.php?module=artikel&action=stueckliste&id=$id", 'Stückliste'); + } + + + if($tmp[0]['rohstoffe']==1){ + $this->app->erp->MenuEintrag("index.php?module=artikel&action=rohstoffe&id=$id", 'Rohstoffe'); + } + + + $rabatt = $this->app->DB->Select("SELECT rabatt FROM artikel WHERE id='$id' LIMIT 1"); + + $this->app->erp->MenuEintrag("index.php?module=artikel&action=artikelfreifelder&id=$id", 'Freifelder'); + + if($this->app->erp->Version()!=='stock' && $rabatt!='1'){ + $this->app->erp->MenuEintrag('index.php?module=artikel&action=eigenschaften&id='.$id, 'Eigenschaften'); + } + + if($rabatt!='1'){ + $this->app->erp->MenuEintrag("index.php?module=artikel&action=einkauf&id=$id",'Einkauf'); + if($this->app->erp->RechteVorhanden('einkaufabgleich','einkaufapi')) + { + $this->app->erp->MenuEintrag("index.php?module=einkaufabgleich&action=einkaufapi&id=$id",'EK API'); + } + } + + if($this->app->erp->Version()!='stock' && $rabatt!='1') + { + $this->app->erp->MenuEintrag("index.php?module=artikel&action=verkauf&id=$id",'Verkauf'); + $this->app->erp->MenuEintrag("index.php?module=artikel&action=statistik&id=$id",'Statistik'); + } + if($tmp[0]['lagerartikel']=='1') + { + $this->app->erp->MenuEintrag("index.php?module=artikel&action=lager&id=$id",'Lager'); + } + + + if($tmp[0]['mindesthaltbarkeitsdatum']=='1' && $tmp[0]['chargenverwaltung']<=0) + { + $this->app->erp->MenuEintrag("index.php?module=artikel&action=mindesthaltbarkeitsdatum&id=$id",'Mindesthalt.'); + } + + if($tmp[0]['mindesthaltbarkeitsdatum']=='1' && $tmp[0]['chargenverwaltung']>0) + { + $this->app->erp->MenuEintrag("index.php?module=artikel&action=mindesthaltbarkeitsdatum&id=$id",'Mindesthalt. + Charge'); + } + + + if($tmp[0]['chargenverwaltung']>0 && $tmp[0]['mindesthaltbarkeitsdatum']!='1') + { + $this->app->erp->MenuEintrag("index.php?module=artikel&action=chargen&id=$id",'Chargen'); + } + + + if($this->app->DB->Select("SELECT COUNT(id) FROM stueckliste WHERE artikel='$id' AND stuecklistevonartikel!='$id'") > 0){ + $this->app->erp->MenuEintrag("index.php?module=artikel&action=instueckliste&id=$id",'In Stückliste'); + } + + + $this->app->erp->MenuEintrag("index.php?module=artikel&action=etiketten&id=$id",'Etikett'); + + $this->app->erp->MenuEintrag("index.php?module=artikel&action=offenebestellungen&id=$id",'Bestellungen'); + + if($this->app->erp->Version()!=='stock') + { + if($this->app->erp->RechteVorhanden('auftrag','list') + || $this->app->erp->RechteVorhanden('rechnung','list') + || $this->app->erp->RechteVorhanden('gutschrift','list') + || $this->app->erp->RechteVorhanden('angebot','list') + || $this->app->erp->RechteVorhanden('lieferschein','list') + || $this->app->erp->RechteVorhanden('produktion','list') + || $this->app->erp->RechteVorhanden('bestellung','list') + ){ + $this->app->erp->MenuEintrag("index.php?module=artikel&action=belege&id=$id",'Belege'); + } + } + + $this->app->erp->MenuEintrag('index.php?module=artikel&action=list','Zurück zur Übersicht'); + $this->app->erp->InsertMenuAfter("index.php?module=artikel&action=baum&id=$id",'Artikelbaum','artikel','eigenschaften'); + } + } + $this->app->erp->MenuEintrag('index.php?module=artikel&action=create','Neuen Artikel anlegen'); + $this->app->erp->RunMenuHook('artikel'); + } + + + public function ArtikelEdit() + { + if(!$this->app->erp->RechteVorhanden('matrixprodukt','artikel')) + { + $this->app->Tpl->Set('VORMATRIX',''); + } + if(!$this->app->erp->ModulVorhanden('tagespreise')) + { + $this->app->Tpl->Set('VORTAGESPREISE',''); + } + $id = $this->app->Secure->GetGET('id'); + $cmd = $this->app->Secure->GetGET('cmd'); + if($id || $cmd === 'getshopbuttons') + { + if($cmd === 'getonlineshop') + { + $sid = (int)$this->app->Secure->GetPOST('sid'); + $arr = null; + if($sid){ + $arr = $this->app->DB->SelectRow("SELECT * FROM artikel_onlineshops WHERE id = '$sid' AND artikel = '$id' LIMIT 1"); + } + + $felder = array( + 'lagerkorrekturwert', + 'pseudolager', + 'autolagerlampe', + 'restmenge', + 'lieferzeitmanuell', + 'pseudopreis', + 'generierenummerbeioption', + 'variante_kopie', + 'unikat', + 'unikatbeikopie', + 'autoabgeleicherlaubt' + ); + if($arr) + { + $arr['sid'] = $arr['id']; + $arr['shop'] = $arr['shop']?($arr['shop'].' '.$this->app->DB->Select("SELECT bezeichnung FROM shopexport WHERE id = '".$arr['shop']."' LIMIT 1")):''; + echo json_encode($arr); + $this->app->ExitXentral(); + } + foreach($felder as $feld){ + $arr[$feld] = ''; + } + $arr['artikel'] = $id; + $arr['aktiv'] = 1; + $arr['ausartikel'] = 1; + echo json_encode($arr); + $this->app->ExitXentral(); + } + if($cmd === 'saveonlineshops') + { + $sid = $this->app->Secure->GetPOST('sid'); + $felder = array( + 'lagerkorrekturwert', + 'pseudolager', + 'autolagerlampe', + 'restmenge', + 'ausartikel', + 'lieferzeitmanuell', + 'pseudopreis', + 'generierenummerbeioption', + 'variante_kopie', + 'unikat', + 'unikatbeikopie', + 'autoabgeleicherlaubt', + 'aktiv' + ); + $shop = explode(' ', $this->app->Secure->GetPOST('shop')); + $shop = (int)reset($shop); + if($this->app->DB->Select("SELECT id FROM artikel_onlineshops WHERE aktiv = 1 AND shop = '$shop' AND id <> '$sid' AND artikel = '$id' LIMIT 1")) + { + echo json_encode(array('status'=>0,'Error'=>'Es existiert bereits ein Eintrag mit diesem Shop')); + $this->app->ExitXentral(); + } + if($sid && !$this->app->DB->Select("SELECT id FROM artikel_onlineshops WHERE artikel = '$id' AND id = '$sid'")) + { + echo json_encode(array('status'=>0,'Error'=>'Der Eintrag wurde nicht gefunden oder passt nicht zum Artikel')); + $this->app->ExitXentral(); + } + if(!$sid) + { + $this->app->DB->Insert("INSERT INTO artikel_onlineshops (artikel,autolagerlampe,ausartikel) VALUES ('$id',0,1)"); + $sid = $this->app->DB->GetInsertID(); + } + if($sid) + { + + $this->app->DB->Update("UPDATE artikel_onlineshops SET shop = '$shop' WHERE id = '$sid' LIMIT 1"); + $inhalt = null; + foreach($felder as $feld) + { + $inhalt[] = " $feld = '".$this->app->Secure->GetPOST($feld)."'"; + } + $this->app->DB->Update('UPDATE artikel_onlineshops SET '.implode(', ', $inhalt)." WHERE id = '$sid' LIMIT 1"); + if(!$this->app->DB->error()) + { + $shop = $this->app->DB->Select("SELECT shop FROM artikel_onlineshops WHERE artikel = '$id' AND id = '$sid' LIMIT 1"); + if($this->app->DB->Select("SELECT id FROM artikel_onlineshops WHERE artikel = '$id' AND shop = '$shop' AND aktiv = 1 LIMIT 1")){ + $shop = null; + } + if($shop) + { + $this->app->DB->Update("UPDATE artikel SET shop = 0 WHERE id = '$id' AND shop = '$shop' LIMIT 1"); + $this->app->DB->Update("UPDATE artikel SET shop2 = 0 WHERE id = '$id' AND shop2 = '$shop' LIMIT 1"); + $this->app->DB->Update("UPDATE artikel SET shop3 = 0 WHERE id = '$id' AND shop3 = '$shop' LIMIT 1"); + } + } + echo json_encode(array('status'=>1)); + $this->app->ExitXentral(); + } + echo json_encode(array('status'=>0,'Error'=>'Der Eintrag konnte nicht angelegt werden')); + $this->app->ExitXentral(); + } + if($cmd === 'deleteonlineshop') + { + $sid = $this->app->Secure->GetPOST("sid"); + $shop = $this->app->DB->Select("SELECT shop FROM artikel_onlineshops WHERE artikel = '$id' AND id = '$sid' LIMIT 1"); + if($shop) + { + $this->app->DB->Update("UPDATE artikel SET shop = 0 WHERE id = '$id' AND shop = '$shop' LIMIT 1"); + $this->app->DB->Update("UPDATE artikel SET shop2 = 0 WHERE id = '$id' AND shop2 = '$shop' LIMIT 1"); + $this->app->DB->Update("UPDATE artikel SET shop3 = 0 WHERE id = '$id' AND shop3 = '$shop' LIMIT 1"); + } + $this->app->DB->Delete("DELETE FROM artikel_onlineshops WHERE artikel = '$id' AND id = '$sid' LIMIT 1"); + echo json_encode(array('status'=>1)); + $this->app->ExitXentral(); + } + if($cmd === 'getshopbuttons') + { + $ids = explode(',',$this->app->Secure->GetPOST('ids')); + $firstid = (int)$this->app->Secure->GetPOST('firstid'); + $html = ''; + if(!empty($ids)) + { + $wherea = []; + foreach($ids as $sid) + { + $sid = (int)$sid; + if($sid > 0) + { + $wherea[] = $sid; + } + } + if(!empty($wherea)) + { + $shops = $this->app->DB->SelectArr("SELECT ao.* FROM artikel_onlineshops ao INNER JOIN shopexport s ON ao.shop = s.id + WHERE ao.id IN (".implode(',', $wherea).") AND s.shoptyp = 'intern' AND s.modulename != '' ORDER BY s.shoptyp"); + if(!empty($shops)) + { + foreach($shops as $shop) + { + $buttontarget = 'SHOPTABELLE'; + $nr = 'ONLINESHOPBUTTON'.$shop['id']; + $this->app->erp->RunHook('artikel_shopbutton',4, $nr, $shop['shop'], $shop['artikel'],$buttontarget); + } + if(!empty($this->app->Tpl->VARARRAY['SHOPTABELLE'])){ + $html = $this->app->Tpl->VARARRAY['SHOPTABELLE']; + } + } + } + } + $return = array('html'=>$html); + if($firstid > 0 && $artikel = $this->app->DB->Select("SELECT artikel FROM artikel_onlineshops WHERE id = ".$firstid)) + { + $shops = $this->app->DB->SelectArr("SELECT ao.id, s.shoptyp, s.modulename FROM artikel_onlineshops AS ao INNER JOIN shopexport AS s ON ao.shop = s.id WHERE ao.artikel = $artikel ORDER BY s.modulename"); + if(!empty($shops)) + { + $canimport = 0; + $canexport = 0; + foreach ($shops as $shop) + { + if(empty($shop['modulename']) || $shop['shoptyp'] !== 'intern') + { + $return['canimport'][] = $shop['id']; + $canimport++; + $return['canexport'][] = $shop['id']; + $canexport++; + }else{ + $obj = $this->app->erp->LoadModul($shop['modulename']); + if(empty($obj) || !method_exists($obj,'importerCanImport') || $obj->importerCanImport()) + { + $return['canimport'][] = $shop['id']; + $canimport++; + } + if(empty($obj) || !method_exists($obj,'importerCanExport') || $obj->importerCanExport()) + { + $return['canexport'][] = $shop['id']; + $canexport++; + } + } + } + if($canimport === 0 || $canimport === count($shops)) + { + $return['hideallimportplaceholder']; + } + if($canexport === 0 || $canexport === count($shops)) + { + $return['hideallexportplaceholder']; + } + } + } + + echo json_encode($return); + $this->app->ExitXentral(); + } + $this->app->YUI->Autocomplete('onlinshopspopup_shop','shopnameid'); + //$this->app->YUI->HideFormular('onlinshopspopup_ausartikel', array('unchecked'=>'dummy','checked'=>'onlineshopeditdis')); + + + $this->app->Tpl->Set('NEUERONLINESHOPBUTTON',''); + $this->app->erp->CheckShopTabelle($id); + } + + $this->app->YUI->TableSearch('SHOPTABELLE','artikel_onlineshops', 'show','','',basename(__FILE__), __CLASS__); + + $shop1export =$this->app->Secure->GetPOST('shop1export'); + $shop2export =$this->app->Secure->GetPOST('shop2export'); + $shop3export =$this->app->Secure->GetPOST('shop3export'); + + if($this->app->erp->Version()==='stock') + { + $this->app->DB->Update("UPDATE artikel SET lagerartikel=1 WHERE id='$id' LIMIT 1"); + } + // 18.05 heute entfernt + //$this->app->DB->Update("UPDATE artikel SET herkunftsland='".$this->app->erp->Firmendaten('land')."' WHERE id='$id' AND herkunftsland='' LIMIT 1"); + + $nummer = $this->app->DB->Select("SELECT nummer FROM artikel WHERE id = '$id' LIMIT 1"); + + if(strpos($nummer, ' ') !== false) + { + $nummer = $this->app->DB->real_escape_string(str_replace(' ','', trim($nummer))); + if($nummer=='') { + $artikelart = $this->app->DB->Select("SELECT projekt,typ FROM artikel WHERE id='$id'"); + $nummer=$this->app->erp->GetNextArtikelnummer($artikelart[0]['typ'],$this->app->User->GetFirma(),$artikelart[0]['projekt']); + } + $this->app->DB->Update("UPDATE artikel SET nummer = '$nummer' WHERE id = '$id' LIMIT 1"); + } + + $this->app->erp->CheckArtikel($id); + + if($shop1export!=''){ + $this->app->User->SetParameter('artikel_shopexport_shop1', 1); + } + + if($shop2export!=''){ + $this->app->User->SetParameter('artikel_shopexport_shop2', 1); + } + + if($shop3export!=''){ + $this->app->User->SetParameter('artikel_shopexport_shop3', 1); + } + + $shop1import =$this->app->Secure->GetPOST('shop1import'); + if($shop1import!='') + { + $this->app->Location->execute("index.php?module=artikel&action=shopimport&id=$id&shop=1"); + return; + } + $shop2import =$this->app->Secure->GetPOST('shop2import'); + if($shop2import!='') + { + $this->app->Location->execute("index.php?module=artikel&action=shopimport&id=$id&shop=2"); + return; + } + $shop3import =$this->app->Secure->GetPOST('shop3import'); + if($shop3import!='') + { + $this->app->Location->execute("index.php?module=artikel&action=shopimport&id=$id&shop=3"); + return; + } + + $POST = $this->app->Secure->POST; + + if($POST && is_array($POST)) + { + foreach($POST as $key => $value) + { + if(!empty($value)){ + if(strpos($key, 'shopimport') === 0){ + $shopid = (int)substr($key, 11); + if($shopid){ + $this->app->Location->execute("index.php?module=artikel&action=shopimport&id=$id&artikelshopid=" . $shopid); + return; + } + } + if(strpos($key, 'shopexport') === 0){ + $shopid = (int)substr($key, 11); + if($shopid){ + $this->app->User->SetParameter('artikel_shopexport_shop', $shopid); + } + } + } + } + } + + if($this->app->erp->Version()==='stock') + { + $this->app->Tpl->Set('DISABLEOPENTEXTE',''); + $this->app->Tpl->Set('DISABLEOPENSHOP',''); + $this->app->Tpl->Set('DISABLEOPENSTOCK',''); + } + + if($this->app->erp->DisableModul('artikel',$id)) + { + $this->ArtikelMenu(); + return; + } // Einzelposten im gleichen LagerRegal zusammenführen + + + $this->app->YUI->SaveReally(); + $this->app->erp->LagerArtikelZusammenfassen($id); + + $nummer = $this->app->Secure->GetGET('nummer'); + if(!is_numeric($id) && $nummer!='') + { + $id = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer='".$nummer."' LIMIT 1"); + $this->app->Location->execute("index.php?module=artikel&action=edit&id=$id"); + return; + } + + $mark = $this->app->Secure->GetPOST('bookmark'); + if($mark!='' && !in_array($id, $_SESSION['bookmarked'])) { + $_SESSION['bookmarked'][] = $id; + } + + $articleArr = $this->app->DB->SelectRow( + sprintf( + "SELECT juststueckliste, lagerartikel,name_de, kurztext_de,anabregs_text + FROM artikel + WHERE id=%d + LIMIT 1", + $id + ) + ); + $juststueckliste = $articleArr['juststueckliste']; + $lagerartikel = $articleArr['lagerartikel']; + + $shops = $this->app->DB->SelectArr("SELECT * FROM artikel_onlineshops WHERE artikel = '$id' ORDER BY aktiv DESC, shop"); + if($shops) + { + $exshops = null; + foreach($shops as $shop) + { + if($shop['shop'] && !isset($exshops[$shop['shop']])) + { + $buttontarget = 'SHOPTABELLE'; + $nr = 'ONLINESHOPBUTTON'.$shop['id']; + $this->app->erp->RunHook('artikel_shopbutton',4, $nr, $shop['shop'], $id,$buttontarget); + } + } + + $this->app->Tpl->Parse('SHOPTABELLE','artikel_onlineshopbuttons.tpl'); + + } + $this->app->Tpl->Add('SHOPTABELLE',''); + + //$shop= $this->app->DB->Select("SELECT shop FROM artikel WHERE id='$id' LIMIT 1"); + + $this->app->Tpl->Set('ABBRECHEN',""); + + if($lagerartikel=='1' && $juststueckliste=='1') + { + $this->app->Tpl->Add('MESSAGE','
Dieser Artikel ist als Lagerartikel und Explodiert im Auftrag markiert. Bitte nur eine Option wählen!
'); + } + + $artikel_de_anzeige = $articleArr['name_de']; + $kurztext_de_anzeige = $articleArr['kurztext_de']; + $artikelbeschreibung_de_anzeige = $articleArr['anabregs_text']; + + $this->app->YUI->CkEditor('artikelbeschreibung_de_anzeige','belege'); + + $this->app->Tpl->Set('ARTIKEL_DE_ANZEIGE',''); + $this->app->Tpl->Set('KURZTEXT_DE_ANZEIGE',''); + $this->app->Tpl->Set('ARTIKELBESCHREIBUNG_DE_ANZEIGE',''); + + parent::ArtikelEdit(); + + /* anzeige formular */ + $this->ArtikelMenu(); + $artikel = $this->app->DB->Select("SELECT CONCAT(name_de,' (',nummer,')') FROM artikel WHERE id='$id' LIMIT 1"); + $this->app->Tpl->Set('UEBERSCHRIFT','Artikel: '.$artikel); + + $shop1export = $this->app->User->GetParameter('artikel_shopexport_shop1'); + $shop2export = $this->app->User->GetParameter('artikel_shopexport_shop2'); + $shop3export = $this->app->User->GetParameter('artikel_shopexport_shop3'); + $artikel_shopexport_shop = (int)$this->app->User->GetParameter('artikel_shopexport_shop'); + if($artikel_shopexport_shop > 0) + { + $this->app->User->SetParameter('artikel_shopexport_shop',''); + $this->app->Location->execute("index.php?module=artikel&action=shopexport&id=$id&artikelshopid=".$artikel_shopexport_shop); + return; + } + + if($shop1export!='') + { + $this->app->User->SetParameter('artikel_shopexport_shop1',''); + $this->app->Location->execute("index.php?module=artikel&action=shopexport&id=$id&shop=1"); + return; + } + + if($shop2export!='') + { + $this->app->User->SetParameter('artikel_shopexport_shop2',''); + $this->app->Location->execute("index.php?module=artikel&action=shopexport&id=$id&shop=2"); + return; + } + + if($shop3export!='') + { + $this->app->User->SetParameter('artikel_shopexport_shop3',''); + $this->app->Location->execute("index.php?module=artikel&action=shopexport&id=$id&shop=3"); + return; + } + + $this->app->erp->MessageHandlerStandardForm(); + + /* sperrmeldung */ + $intern_gesperrt = $this->app->DB->Select("SELECT intern_gesperrt FROM artikel WHERE id='$id' LIMIT 1"); + if($intern_gesperrt) + { + if($this->app->erp->CheckSamePage()) + { + $intern_gesperrtgrund = $this->app->DB->Select("SELECT intern_gesperrtgrund FROM artikel WHERE id='$id' LIMIT 1"); + if($intern_gesperrtgrund=='') { + $intern_gesperrtgrund='Artikel gesperrt'; + } + $this->app->erp->SeitenSperrAuswahl('Wichtiger Hinweis',$intern_gesperrtgrund); + } + } + + $this->app->YUI->AutoComplete('herkunftsland', 'laender', 1); + + } + + public function ArtikelEtiketten() + { + $this->app->Tpl->Add('UEBERSCHRIFT',' (Etiketten)'); + $id = (int)$this->app->Secure->GetGET('id'); + $external= $this->app->Secure->GetGET('external'); + $menge = $this->app->Secure->GetPOST('menge'); + $mhd = $this->app->Secure->GetPOST('mhd'); + $charge = $this->app->Secure->GetPOST('charge'); + $speichern = $this->app->Secure->GetPOST('speichern'); + $seriennummer = $this->app->Secure->GetPOST('seriennummer'); + $etikettenauswahl = $this->app->Secure->GetPOST('etikettenauswahl'); + $etikettendrucker = $this->app->Secure->GetPOST('etikettendrucker'); + $this->ArtikelMenu(); + + if($speichern!='') + { + $formetikettautodruck = $this->app->Secure->GetPOST('etikettautodruck'); + if($formetikettautodruck) { + $this->app->DB->Update("UPDATE artikel SET etikettautodruck='1' WHERE id='$id' LIMIT 1"); + } + else { + $this->app->DB->Update("UPDATE artikel SET etikettautodruck='0' WHERE id='$id' LIMIT 1"); + } + $formautodrucketikett = $this->app->Secure->GetPOST('autodrucketikett'); + $this->app->DB->Update("UPDATE artikel SET autodrucketikett='$formautodrucketikett' WHERE id='$id' LIMIT 1"); + } + + $etikettautodruck = $this->app->DB->Select("SELECT etikettautodruck FROM artikel WHERE id='$id' LIMIT 1"); + if($etikettautodruck) { + $this->app->Tpl->Set('ETIKETTAUTODRUCK','checked'); + } + + $autodrucketikett = $this->app->DB->Select("SELECT autodrucketikett FROM artikel WHERE id='$id' LIMIT 1"); + $etiketten_tmp = $this->app->DB->SelectArr("SELECT * FROM etiketten WHERE verwendenals='artikel_klein' ORDER by name"); + $autodrucketiketttpl = ''; + $cetiketten_tmp = $etiketten_tmp?count($etiketten_tmp):0; + for($i=0;$i<$cetiketten_tmp;$i++) + { + if($etiketten_tmp[$i]['id']==$autodrucketikett) { + $mark='selected'; + } else { + $mark=''; + } + $autodrucketiketttpl .=""; + } + $this->app->Tpl->Set('AUTODRUCKETIKETT',$autodrucketiketttpl); + + $etiketten = $this->app->erp->GetSelectEtiketten('artikel_klein',$etikettenauswahl); + if($etiketten=='') { + $etiketten=''; + } + + $drucker = $this->app->erp->GetSelectEtikettenDrucker($etikettendrucker); + + $this->app->Tpl->Set('FORMULAR',"
+ + + "); + $mhdartikel = $this->app->DB->Select("SELECT mindesthaltbarkeitsdatum FROM artikel WHERE id = '$id' LIMIT 1"); + if($mhdartikel) + { + $this->app->Tpl->Add('FORMULAR',""); + $this->app->YUI->DatePicker('mhd'); + $this->app->YUI->AutoComplete('mhd', 'lagermindesthaltbarkeitsdatum',0,"&artikel=$id"); + } + $chargenverwaltung = $this->app->DB->Select("SELECT chargenverwaltung FROM artikel WHERE id = '$id' LIMIT 1"); + if($chargenverwaltung) + { + $this->app->Tpl->Add('FORMULAR',""); + $this->app->YUI->AutoComplete('charge', 'lagercharge',0,"&artikel=$id"); + } + + $seriennummern = $this->app->DB->Select("SELECT seriennummern FROM artikel WHERE id = '$id' LIMIT 1"); + if($seriennummern==='eigene' || $seriennummern==='vomprodukt' || $seriennummern==='vomprodukteinlagern') + { + $this->app->Tpl->Add('FORMULAR',""); + $this->app->YUI->AutoComplete('seriennummer', 'lagerseriennummern',0,"&artikel=$id"); + } + $this->app->Tpl->Add('FORMULAR',"
Menge: 
Etikett:
Drucker:
Mindeshaltbarkeitsdatum:
Charge:
Seriennummer:


"); + + $standardbild = $this->app->erp->GetEtikettenbild($id,true); + + if($standardbild==''){ + $standardbild = $this->app->DB->Select("SELECT datei FROM datei_stichwoerter WHERE subjekt='Shopbild' AND objekt='Artikel' AND parameter='$id' LIMIT 1"); + } + + if($standardbild > 0){ + //$this->app->Tpl->Add('BILD', ""); + $this->app->Tpl->Set('BILD', + 'Artikelbild' + ); + } + + if($external=='1') + { + $menge = $this->app->Secure->GetGET('menge'); + } + + + if($menge!='') + { + //$nummer = $this->app->DB->Select("SELECT nummer FROM artikel WHERE id='$id' LIMIT 1"); + //$projekt = $this->app->DB->Select("SELECT projekt FROM artikel WHERE id='$id' LIMIT 1"); + $name_de = $this->app->erp->UmlauteEntfernen($this->app->DB->Select("SELECT name_de FROM artikel WHERE id='$id' LIMIT 1")); + //$name_de_base64 = $this->app->erp->base64_url_encode($name_de); + + if(!is_numeric($etikettenauswahl)) { + $etikettenauswahl = 'artikel_klein'; + } + + $variablen = null; + if($mhd){ + $variablen['mhd'] = $this->app->String->Convert($mhd,'%3.%2.%1','%1-%2-%3'); + $variablen['mhd2'] = $mhd; + $variablen['mhd3'] = date('ymd',strtotime($mhd)); + } + if($charge){ + $variablen['charge'] = $charge; + } + if($seriennummer){ + $variablen['seriennummer'] = $seriennummer; + } + $this->app->erp->EtikettenDrucker($etikettenauswahl,$menge,'artikel',$id,$variablen,'',$etikettendrucker); + } + + if($external=='1') + { + $this->app->Location->execute($_SERVER['HTTP_REFERER']); + } + + $cmd = $this->app->Secure->GetGET('cmd'); + + if($cmd === 'get'){ + $id = (int)$this->app->Secure->GetPOST('id'); + + $data = $this->app->DB->SelectRow("SELECT al.id, e.id as label, al.type, al.amount, d.id as printer + FROM article_label al + LEFT JOIN etiketten e ON al.label_id = e.id + LEFT JOIN drucker d ON al.printer_id = d.id + WHERE al.id = '$id' LIMIT 1"); + + if(empty($data)) { + $data['id'] = 0; + $data['labelname'] = ''; + $data['type'] = ''; + $data['amount'] = ''; + $data['printername'] = 1; + + } + echo json_encode($data); + $this->app->ExitXentral(); + } + elseif($cmd === 'save'){ + $id = (int)$this->app->Secure->GetPOST('id'); + $articleId = $this->app->Secure->GetPOST('article'); + $label = trim($this->app->Secure->GetPOST('label')); + $type = trim($this->app->Secure->GetPOST('type')); + $amount = trim($this->app->Secure->GetPOST('amount')); + $printer = $this->app->Secure->GetPOST('printer'); + + $error = ""; + + if($label == ""){ + $error .= "Bitte ein Etikett auswählen\n"; + }else{ + $labelId = $this->app->DB->Select("SELECT id FROM etiketten WHERE id = '$label' LIMIT 1"); + if($labelId <= 0 || $labelId == ''){ + $error .= "Bitte gültiges Etikett auswählen\n"; + } + } + + if($type == ""){ + $error .= "Bitte Art auswählen"."\n"; + } + + if($amount == "" || $amount <= 0){ + $error .= "Mindestmenge ist 1"."\n"; + }else{ + $amount = (int)$amount; + } + + //PFLICHTFELD? + if($printer == ""){ + $error .= "Bitte einen Drucker auswählen"."\n"; + }else{ + $printerId = $this->app->DB->Select("SELECT id FROM drucker WHERE id = '$printer' LIMIT 1"); + if($printerId <= 0 || $printerId == ''){ + $error .= "Bitte gültigen Drucker auswählen\n"; + } + } + + $labelAlreadyExists = $this->app->DB->Select("SELECT id + FROM article_label + WHERE label_id = '$labelId' AND type = '$type' AND article_id = '$articleId' + AND id != '$id' LIMIT 1"); + if($labelAlreadyExists != '' && $labelAlreadyExists > 0){ + $error .= "Dieses Label gibt es bereits für diesen Artikel mit dieser Art"; + } + + if($error == ""){ + if($id){ + $this->app->DB->Update("UPDATE article_label SET label_id = '$labelId', type = '$type', amount = '$amount', printer_id = '$printerId' WHERE id = '$id'"); + + echo json_encode(array('status'=>1)); + $this->app->ExitXentral(); + }else{ + $this->app->DB->Insert("INSERT INTO article_label (article_id, label_id, type, amount, printer_id) + VALUES ('$articleId', '$labelId', '$type', '$amount', '$printerId')"); + + echo json_encode(array('status'=>1)); + $this->app->ExitXentral(); + } + }else{ + echo json_encode(array('status'=>0,'statusText'=>$error)); + $this->app->ExitXentral(); + } + }elseif($cmd == 'delete'){ + $id = (int) $this->app->Secure->GetPOST('id'); + if($id) + $this->app->DB->Update("DELETE FROM article_label WHERE id = '$id'"); + + echo json_encode(array('status'=>1)); + $this->app->ExitXentral(); + } + + $articleLabels = $this->app->erp->GetSelectEtiketten('artikel_klein',$etikettenauswahl); + $this->app->Tpl->Set("ARTICLELABELS", $articleLabels); + + $articleLabelPrinter = $this->app->DB->SelectArr("SELECT id, name FROM drucker WHERE aktiv='1' AND art='2'"); + $articleLabelPrinterSelection = ""; + for($i=0;$i".$articleLabelPrinter[$i]['name'].""; + } + $this->app->Tpl->Set("ARTICLELABELPRINTER", $articleLabelPrinterSelection); + + $this->app->YUI->TableSearch('TAB1','artikel_etiketten', "show","","",basename(__FILE__), __CLASS__); + + + $this->app->Tpl->Parse('PAGE','artikel_etiketten.tpl'); + } + + public function ArtikelOnlineShop() + { + $id = $this->app->Secure->GetGET('id'); + + // neue warengruppe hinzugefuegt + $artikelgruppe = $this->app->Secure->GetPOST('artikelgruppe'); + $ok= $this->app->Secure->GetPOST('ok'); + if($artikelgruppe!='' && $ok=='') { + $this->app->DB->Insert("INSERT INTO artikel_artikelgruppe (id,artikel,artikelgruppe) VALUES ('','$id','$artikelgruppe')"); + } + //warengruppe geloescht + $sid= $this->app->Secure->GetGET('sid'); + $cmd= $this->app->Secure->GetGET('cmd'); + if($sid!='' && $cmd==='del') { + $this->app->DB->DELETE("DELETE FROM artikel_artikelgruppe WHERE id='$sid' LIMIT 1"); + } + if($sid!='' && $cmd==='image') { + $this->app->DB->DELETE("UPDATE artikel SET standardbild='$sid' WHERE id='$id' LIMIT 1"); + } + + $name = $this->app->DB->Select("SELECT name_de FROM artikel WHERE id='$id' LIMIT 1"); + $nummer = $this->app->DB->Select("SELECT nummer FROM artikel WHERE id='$id' LIMIT 1"); + $this->app->Tpl->Set('SUBSUBHEADING',"Online-Shop Attribute: $name ($nummer)"); + $this->app->Tpl->Set('AKTIV_TAB1','selected'); + + //Warengruppen + $tmp = new EasyTable($this->app); + $tmp->Query("SELECT a.bezeichnung, aa.id FROM artikel_artikelgruppe aa LEFT JOIN artikelgruppen a ON a.id=aa.artikelgruppe WHERE artikel='$id'"); + $tmp->DisplayNew('WARENGRUPPEN',""); + + $shop = $this->app->DB->Select("SELECT shop FROM artikel WHERE id='$id' LIMIT 1"); + + $arr = $this->app->DB->SelectArr("SELECT bezeichnung,id FROM artikelgruppen WHERE shop='$shop'"); + $html = ''; + if(!empty($arr)){ + foreach ($arr as $key => $value) { + $html .= ""; + } + } + + $this->app->Tpl->Add('WARENGRUPPEN',"
"); + $this->app->Tpl->Add('WARENGRUPPEN',"
"); + + // standard bild + $standardbild = $this->app->DB->Select("SELECT standardbild FROM artikel WHERE id='$id'"); + $tmp = new EasyTable($this->app); + $tmp->Query("SELECT d.titel, d.id FROM datei d LEFT JOIN datei_stichwoerter s ON d.id=s.datei + LEFT JOIN datei_version v ON v.datei=d.id + WHERE s.objekt='Artikel' AND s.parameter='$id' AND s.subjekt='Shopbild' AND d.geloescht=0"); + + $tmp->DisplayNew('HAUPTBILD', + ""); + + $standardbild_name = $this->app->DB->Select("SELECT titel FROM datei WHERE id='$standardbild'"); + $this->app->Tpl->Add('HAUPTBILD',"
Standardbild: $standardbild_name"); + + $this->app->Tpl->Parse('PAGE','onlineshop.tpl'); + + $this->app->BuildNavigation=false; + } + + function ArtikelNewList() + { + $this->app->Tpl->Parse('PAGE','datatable.tpl'); + } + + function ArtikelStuecklisteUpload() + { + + $this->app->Tpl->Set('TAB1',' + +
Datei:
'); + $this->app->Tpl->Parse('PAGE','tabview.tpl'); + } + + function ArtikelStuecklisteImport($parsetarget='') + { + $id = $this->app->Secure->GetGET('id'); + //$this->app->BuildNavigation=false; + + $vorlage = $this->app->Secure->GetPOST('vorlage'); + if($vorlage==='altium'){ + $result = $this->StuecklisteImport( + array('menge'=>'Menge','nummer'=>'Artikelnummer','wert'=>'Wert','bauform'=>'Package','referenz'=>'Referenz'), + array('menge'=>2,'nummer'=>13,'bauform'=>5,'wert'=>6,'referenz'=>3), + ';',$parsetarget); + + } + else if($vorlage==='solidedgest2'){ + $result = $this->StuecklisteImport( + array('nummer'=>'Artikelnummer','menge'=>'Menge'), + array('nummer'=>2,'menge'=>5), + ';',$parsetarget); + } + else if($vorlage==='minimal'){ + $result = $this->StuecklisteImport( + array('nummer'=>'Artikelnummer','menge'=>'Menge'), + array('nummer'=>1,'menge'=>2), + ';',$parsetarget); + } + else { + $result = $this->StuecklisteImport( + array('nummer'=>'Artikelnummer','menge'=>'Menge'), + array('nummer'=>1,'menge'=>2), + ';',$parsetarget); + } + + if(is_array($result)) + { + $fehlerhaftes_bauteil = ''; + $this->app->DB->Delete("DELETE FROM stueckliste WHERE stuecklistevonartikel='$id'"); + foreach($result as $key=>$value) + { + $value['menge'] = str_replace(',','.',$value['menge']); + $artikelid = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer='".$value['nummer']."' AND nummer!='' LIMIT 1"); + $maxsort = $this->app->DB->Select("SELECT MAX(sort) FROM stueckliste WHERE stuecklistevonartikel='".$id."'") + 1; + if($artikelid > 0) + { + if(!$this->app->erp->IstStuecklistenZirkel($artikelid, $id)) + { + $this->app->DB->Insert("INSERT INTO stueckliste + (id,sort,artikel,menge,wert,bauform,referenz,stuecklistevonartikel,firma) VALUE ('','$maxsort','$artikelid','".$value['menge']."', + '".$value['wert']."','".$value['bauform']."','".$value['referenz']."','$id','".$this->app->User->GetFirma()."')"); + }else{ + $fehlerhaftes_bauteil .= 'Stückliste enthält Artikel die einen Zirkelbezug verursachen!
'; + } + }else { + if($value['nummer']!=''){ + $fehlerhaftes_bauteil .= 'Unbekannte Artikelnummer: ' . $value['nummer'] . ' (Menge ' . $value['menge'] . ' Stück)
'; + } + } + } + if($fehlerhaftes_bauteil!='') + { + $this->app->Tpl->Set($parsetarget,"
$fehlerhaftes_bauteil
"); + } + } + } + + function StuecklisteImport($fields, $preselected="",$startdelimititer=";",$parsetarget) + { + + $stueckliste_csv = $this->app->erp->GetTMP().'stueckliste'.$this->app->User->GetID(); + + $quote = htmlentities($this->app->Secure->GetPOST('quote')); + $delimiter = htmlentities($this->app->Secure->GetPOST('delimiter')); + $cancel = $this->app->Secure->GetPOST('cancel'); + + if($cancel!='') + { + unlink($stueckliste_csv); + $this->app->User->SetParameter("artikel_stueckliste_importfilename",""); + } + + $import = $this->app->Secure->GetPOST('import'); + if($import!='') + { + $findcols = ''; + $row_post = $this->app->Secure->GetPOST('row'); + $cols = $this->app->Secure->GetPOST('cols'); + + $importerror=0; + if($row_post=='') + { + $findcols .= '
Zeile wählen
'; + $importerror++; + } + $ccols = !empty($cols)?count($cols):0; + $colcounter = 0; + for($i=0;$i<$ccols;$i++) + { + if($cols[$i]!='') $colcounter++; + } + if($colcounterapp->User->GetParameter("artikel_stueckliste_delimiter"))) !== FALSE) { + $rowcounter++; + $num = count($data); + + if($rowcounter > $row_post){ + for ($c=0; $c < $num; $c++) { + // wenn schluessel vorhanden feld uebernehmen + if($cols[$c]!='') + $singlerow[$cols[$c]]=$data[$c]; + } + $result[] = $singlerow; + $singlerow=array(); + } + } + } + fclose($handle); + unlink($stueckliste_csv); + $this->app->User->SetParameter("artikel_stueckliste_importfilename",""); + // $this->app->Tpl->Set('PAGE',$findcols); + } + } + + + //$_SESSION['quote']=$quote; + $this->app->User->SetParameter("artikel_stueckliste_quote",$quote); + //$_SESSION['delimiter']=$delimiter; + $this->app->User->SetParameter("artikel_stueckliste_delimiter",$delimiter); + + + if (move_uploaded_file($_FILES['userfile']['tmp_name'], $stueckliste_csv)) { + //$_SESSION['importfilename'] = $_FILES['userfile']['name']; + $this->app->User->SetParameter("artikel_stueckliste_importfilename",$_FILES['userfile']['name']); + } + + $row = 1; + if (($handle = fopen($stueckliste_csv, "r")) !== FALSE) { + $findcols .= " +
+

Datei: ".$this->app->User->GetParameter("artikel_stueckliste_importfilename")."

(Die Anzeige ist limitiert auf max 10 Zeilen)
+ +
+ + + +
+ Trennzeichen:  app->User->GetParameter("artikel_stueckliste_delimiter"))."\" name=\"delimiter\">  + + +
+ "; + + + $findcols .= " +
+ "; + while (($data = fgetcsv($handle, 1000, $this->app->User->GetParameter("artikel_stueckliste_delimiter"))) !== FALSE) { + $num = count($data); + + if($row==1) + { + $findcols .= ""; + $findcols .= ""; + for ($c=0; $c < $num; $c++) { + $findcols .= "'; + } + $findcols .= ''; + } + if($row_post==$row) $checked="checked"; else $checked=""; + $findcols .= ""; + $row++; + for ($c=0; $c < $num; $c++) { + $findcols .= ""; + } + $findcols .= ''; + if($row > 10) { + break; + } + } + fclose($handle); + $findcols .= "
 Spalten auswählen
 Erste Zeile mit Daten 
 auswählen
+    
+ ".$data[$c] . " 
+
+

+ Bitte wählen Sie aus: +
  • Die erste Zeile die Daten Ihrer Stueckliste enthält
  • +
  • Die Spalten: Menge und Artikelnummer
  • +
+ + +
+ + "; + } else { + $findcols .= " +
+
+ Datei:  + + + Vorlage: + + Trennzeichen:    + + +
+
"; + + + + } + $this->app->Tpl->Set($parsetarget,$findcols); + if(!empty($result)) { + return $result; + } + } + + function getArtikelThumbnailDateiVersion($id) + { + $datei = $this->app->DB->SelectArr(' + SELECT + datei_version.id + FROM + datei_stichwoerter + INNER JOIN datei_version ON datei_version.datei = datei_stichwoerter.datei + WHERE + datei_stichwoerter.objekt LIKE "artikel" + AND + datei_stichwoerter.parameter = "' . $id . '" + AND + (datei_stichwoerter.subjekt like "Shopbild" OR datei_stichwoerter.subjekt like "Druckbild" OR datei_stichwoerter.subjekt like "Bild" OR datei_stichwoerter.subjekt like "Gruppenbild") + ORDER BY datei_stichwoerter.subjekt like "Shopbild" DESC,subjekt like "Druckbild" DESC, datei_stichwoerter.subjekt like "Bild" DESC,datei_stichwoerter.sort, datei_version.version DESC + '); + if(empty($datei)){ + return; + } + foreach($datei as $v) + { + $pfad = $this->app->erp->GetDateiPfadVersion($v['id']); + if(file_exists($pfad)){ + return $v['id']; + } + } + } + + /** + * @param int $articleId + * @param int $projectId + * @param int $size + * + * @return string + */ + public function getThumbnailCacheFilename($articleId, $projectId, $size = 100) + { + return $this->app->getTmpFolder().$this->app->Conf->WFdbname + .'/'.implode('/',str_split($articleId)).'/'.$articleId.'_'.$projectId.'_'.$size.'_'.$size; + } + + public function ArtikelThumbnailCache() + { + $ajaxthumbnail = !empty($this->app->Secure->POST['ajaxthumbnail'])?(int)$this->app->Secure->POST['ajaxthumbnail']:''; + if(!empty($ajaxthumbnail)) { + return; + } + + $direct = !empty($this->app->Secure->GET['direkt'])?(int)$this->app->Secure->GET['direkt']:''; + if(!empty($direct)) { + return; + } + + $vorschau = !empty($this->app->Secure->GET['bildvorschau'])?$this->app->Secure->GET['bildvorschau']:''; + $dark = !empty($this->app->Secure->GET['dark']); + $projectid = !empty($this->app->Secure->GET['projectid'])?(int)$this->app->Secure->GET['projectid']:0; + $noPicture = $vorschau === 'KEINBILD' || $vorschau == ''; + $projectOk = null; + if(!$noPicture) { + $projectOk = $this->app->User->projectOk($projectid); + if($projectOk === null) { + return; + } + } + if($noPicture || !$projectOk){ + if($dark) { + $str = file_get_contents(dirname(__DIR__) . '/themes/new/images/keinbild_dunkel.png'); + }else{ + $str = file_get_contents(dirname(__DIR__) . '/themes/new/images/keinbild_hell.png'); + } + header('Content-type: image/png'); + if($vorschau === 'KEINBILD') { + header('Cache-Control: public, max-age=14400, s-maxage=14400'); + header('Pragma: '); + header('Expires: '.date('D, d M Y H:i:s e'), time()+14400); + header('Content-type: image/jpg'); + } + echo $str; + exit; //kein ExitXentral, damit die Datenbank nicht geladen wird (mit isset) + } + $id = !empty($this->app->Secure->GET['id'])?(int)$this->app->Secure->GET['id']:0; + if($id <= 0) { + return; + } + + $file = $this->getThumbnailCacheFilename($id, $projectid); + if(!file_exists($file) || filesize($file) === 0) { + return; + } + + $type = mime_content_type($file); + switch($type) { + case 'image/png': + case 'png': + header('Content-type: image/png'); + break; + case 'image/gif': + case 'gif': + header('Content-type: image/gif'); + break; + default: + header('Content-type: image/jpg'); + break; + } + header('Cache-Control: public, max-age=14400, s-maxage=14400'); + header('Pragma: '); + header('Expires: '.date('D, d M Y H:i:s e'), time()+14400); + header('Content-type: image/jpg'); + echo file_get_contents($file); + exit; + } + + /** + * @param int $fileId + * + * @return array|null + */ + public function getPreviewFileFromFileId($fileId) + { + if($fileId <= 0) { + return null; + } + + return $this->app->DB->SelectRow( + sprintf( + 'SELECT dv.* + FROM `datei_version` AS `dv` + WHERE dv.datei = %d + ORDER BY dv.version DESC + LIMIT 1', + $fileId + ) + ); + } + + /** + * @param int $articleId + * + * @return array|null + */ + public function getPreviewFileFromArticleId($articleId) + { + if($articleId <= 0) { + return null; + } + return $this->app->DB->SelectRow( + sprintf( + "SELECT dv.* + FROM `datei_stichwoerter` AS `ds` + INNER JOIN `datei_version` AS `dv` ON dv.datei = ds.datei + INNER JOIN `datei` AS `d` ON dv.datei = d.id AND IFNULL(d.geloescht, 0) = 0 + WHERE ds.objekt LIKE 'artikel' AND ds.parameter = '%d' + AND + ( + ds.subjekt like 'Shopbild' + OR ds.subjekt like 'Druckbild' + OR ds.subjekt like 'Bild' + OR ds.subjekt like 'Gruppenbild' + ) + ORDER BY ds.subjekt like 'Shopbild' DESC, + ds.subjekt like 'Druckbild' DESC, + ds.subjekt like 'Bild' DESC, + ds.sort, + dv.version DESC + LIMIT 1", + $articleId + ) + ); + } + + /** + * @param int $id + * @param int $fileId + * @param int $size + * + * @return array + */ + public function ajaxGenerateThumbnail($id, $fileid = 0, $size = 100) + { + $res = ['result' => 0]; + if($id <= 0) { + return $res; + } + + $bildvorschau = $this->app->DB->SelectRow( + sprintf( + 'SELECT `id`, `bildvorschau`, `projekt` FROM `artikel` WHERE `id` = %d LIMIT 1', + $id + ) + ); + + if(empty($bildvorschau)) { + return $res; + } + + if(!$size){ + $size = 100; + } + $cachefolder = $this->app->Conf->WFuserdata . '/dms/' . $this->app->Conf->WFdbname . '/cache'; + $datei = 0; + if($fileid > 0){ + $datei = $this->getPreviewFileFromFileId($fileid); + } + + if(empty($datei)) { + $datei = $this->getPreviewFileFromArticleId($id); + } + if(!empty($datei)) { + $contentfile = $this->app->erp->GetDMSPath($datei['id'].'_'.$size.'_'.$size, $cachefolder, true); + $created = false; + if(file_exists($contentfile.'/'.$datei['id'].'_'.$size.'_'.$size) + && filesize($contentfile.'/'.$datei['id'].'_'.$size.'_'.$size) === 0 + && @unlink($contentfile.'/'.$datei['id'].'_'.$size.'_'.$size)) { + $contentfile = $this->app->erp->GetDMSPath($datei['id'].'_'.$size.'_'.$size, $cachefolder, true); + } + if(!file_exists($contentfile.'/'.$datei['id'].'_'.$size.'_'.$size)) { + if(!class_exists('image')){ + include dirname(__DIR__).'/lib/class.image.php'; + } + $img = new image($this->app); + $img->scaledPicByFileId($datei['id'], $size, $size); + $created = true; + } + if(!file_exists($contentfile.'/'.$datei['id'].'_'.$size.'_'.$size)) { + return $res; + } + + if($bildvorschau['bildvorschau'] != $datei['id'].'_'.$size.'_'.$size) { + $this->app->DB->Update( + sprintf( + "UPDATE `artikel` + SET `bildvorschau` = '%d_%d_%d' + WHERE `id` = %d + LIMIT 1", + $datei['id'], $size, $size, $id + ) + ); + $res['reload'] = 1; + } + $res['status'] = 1; + $res['bildvorschau'] = $datei['id'].'_'.$size.'_'.$size; + $cachefile = $this->getThumbnailCacheFilename($id, (int)$bildvorschau['projekt']); + $cachedir = dirname($cachefile); + if(!is_dir($cachedir) && !mkdir($cachedir, 0777,true) && !is_dir($cachedir)) { + return $res; + } + if(empty($bildvorschau['bildvorschau']) || $created || !is_file($cachefile) || filesize($cachefile) === 0) { + @copy($contentfile.'/'.$datei['id'].'_'.$size.'_'.$size, $cachefile); + } + + return $res; + } + + $cachefile = $this->getThumbnailCacheFilename($id, (int)$bildvorschau['projekt']); + $cachedir = dirname($cachefile); + if(!is_dir($cachedir) && !mkdir($cachedir, 0777, true) && !is_dir($cachedir)) { + + } + elseif(!is_file($cachefile) || filesize($cachefile) > 0) { + @file_put_contents($cachefile, ''); + } + + if($bildvorschau['bildvorschau'] !== 'KEINBILD') { + $this->app->DB->Update( + sprintf( + "UPDATE `artikel` SET `bildvorschau` = 'KEINBILD' WHERE `id` = %d LIMIT 1", + $id + ) + ); + $res['reload'] = 1; + } + $res['status'] = 1; + $res['bildvorschau'] = 'KEINBILD'; + + return $res; + } + + public function ArtikelThumbnail() { + + $id = $this->app->Secure->GetGET('id'); + $fileid = $this->app->Secure->GetGET('fileid'); + $size = $this->app->Secure->GetGET('size'); + if(!$size){ + $size = 100; + } + + $cachefolder = $this->app->Conf->WFuserdata . '/dms/' . $this->app->Conf->WFdbname . '/cache'; + if($this->app->Secure->GetPOST('ajaxthumbnail')) { + $res = $this->ajaxGenerateThumbnail($id, $fileid, $size); + echo json_encode($res); + $this->app->ExitXentral(); + } + + $direkt = $this->app->Secure->GetGET('direkt'); + + if($direkt && $id) { + $bildvorschau = $this->app->DB->SelectRow( + sprintf( + 'SELECT `id`, `bildvorschau`, `projekt` FROM `artikel` WHERE `id` = %d LIMIT 1', + $id + ) + ); + $datei = 0; + if($fileid > 0){ + $datei = $this->getPreviewFileFromFileId($fileid); + } + + if(empty($datei)){ + $datei = $this->getPreviewFileFromArticleId($id); + } + if($datei) { + $contentfile = $this->app->erp->GetDMSPath($datei['id'].'_'.$size.'_'.$size, $cachefolder, true) + .'/'.$datei['id'].'_'.$size.'_'.$size; + if(is_file($contentfile) && filesize($contentfile) === 0 && @unlink($contentfile)) { + $contentfileOld = $contentfile; + $contentfile = $this->app->erp->GetDMSPath($datei['id'].'_'.$size.'_'.$size, $cachefolder, true) + .'/'.$datei['id'].'_'.$size.'_'.$size; + if($contentfile !== $contentfileOld && is_file($contentfile) && filesize($contentfile) === 0) { + @unlink($contentfile); + } + } + if(!file_exists($contentfile)) { + $img = new image($this->app); + $img->scaledPicByFileId($datei['id'], $size, $size); + $contentfile = $this->app->erp->GetDMSPath( + $datei['id'].'_'.$size.'_'.$size, $cachefolder, true + ) + .'/'.$datei['id'].'_'.$size.'_'.$size; + $cachefile = $this->getThumbnailCacheFilename($id, (int)$bildvorschau['projekt']); + if(is_file($contentfile) && is_file($cachefile) && filesize($cachefile) === 0) { + @copy($contentfile, $cachefile); + } + } + + if(file_exists($contentfile)) { + $str = file_get_contents($contentfile); + header('Cache-Control: public, max-age=14400, s-maxage=14400'); + header('Pragma: '); + header('Expires: '.date('D, d M Y H:i:s e'), time()+14400); + header('Content-type: image/jpg'); + echo $str; + $this->app->ExitXentral(); + } + } + } + + $vorschau = $this->app->Secure->GetGET('bildvorschau'); + + if(!$vorschau) { + if ($this->app->erp->Firmendaten('iconset_dunkel')) { + $str = file_get_contents(dirname(__DIR__) . '/themes/new/images/keinbild_dunkel.png'); + } else { + $str = file_get_contents(dirname(__DIR__) . '/themes/new/images/keinbild_hell.png'); + } + header('Content-type: image/png'); + echo $str; + $this->app->ExitXentral(); + } + if($vorschau === 'KEINBILD') { + if ($this->app->erp->Firmendaten('iconset_dunkel')) { + $str = file_get_contents(dirname(__DIR__) . '/themes/new/images/keinbild_dunkel.png'); + } else { + $str = file_get_contents(dirname(__DIR__) . '/themes/new/images/keinbild_hell.png'); + } + header('Content-type: image/png'); + echo $str; + $this->app->ExitXentral(); + } + if(file_exists($cachefolder)) { + $vorschaua = explode('_',$vorschau); + if(count($vorschaua) == 3) { + $cachefolderPrev = $cachefolder; + $cachefolder = $this->app->erp->GetDMSPath($vorschau, $cachefolderPrev, true); + if(is_numeric($vorschaua[0]) && is_numeric($vorschaua[1]) && is_numeric($vorschaua[2]) + && file_exists($cachefolder.'/'.$vorschau) && filesize($cachefolder.'/'.$vorschau) === 0) { + if(@unlink($cachefolder.'/'.$vorschau)) { + $cachefolder = $this->app->erp->GetDMSPath($vorschau, $cachefolderPrev, true); + } + } + + if(is_numeric($vorschaua[0]) && is_numeric($vorschaua[1]) && is_numeric($vorschaua[2]) && file_exists($cachefolder.'/'.$vorschau)) { + if($this->app->DB->Select( + sprintf( + "SELECT ds.id + FROM datei_stichwoerter AS ds + INNER JOIN datei_version AS dv ON dv.datei = ds.datei + WHERE ds.objekt LIKE 'artikel' AND ds.parameter = '%d' AND dv.id = %d LIMIT 1", + $id, $vorschaua[0] + ) + ) + ) { + $bildvorschau = $this->app->DB->SelectRow( + "SELECT id, bildvorschau, projekt FROM artikel WHERE id = '$id' LIMIT 1" + ); + $cachefile = $this->getThumbnailCacheFilename($id, (int)$bildvorschau['projekt']); + $cachedir = dirname($cachefile); + if(!is_dir($cachedir) && !mkdir($cachedir, 0777,true) && !is_dir($cachedir)) { + + } elseif(!is_file($cachefile) || filesize($cachefile) === 0) { + @copy($cachefolder.'/'.$vorschau, $cachefile); + } + + $str = file_get_contents($cachefolder.'/'.$vorschau); + header('Content-type: image/jpg'); + echo $str; + $this->app->ExitXentral(); + } + } + } + if($id) { + $this->app->DB->Update(sprintf("UPDATE artikel SET bildvorschau = '' WHERE id = %d", $id)); + } + } + + if ($this->app->erp->Firmendaten('iconset_dunkel')) { + $str = file_get_contents(dirname(__DIR__) . '/themes/new/images/keinbild_dunkel.png'); + } + else { + $str = file_get_contents(dirname(__DIR__) . '/themes/new/images/keinbild_hell.png'); + } + header('Content-type: image/png'); + echo $str; + $this->app->ExitXentral(); + } + + + function ArtikelSchnellanlegen() + { + $submit_barcode = $this->app->Secure->GetPOST('submit_barcode'); + $submit_anlegen = $this->app->Secure->GetPOST('submit_anlegen'); + $barcode = $this->app->Secure->GetPOST('barcode'); + + $this->app->erp->MenuEintrag('index.php?module=artikel&action=list','zurück zur Übersicht'); + $this->app->erp->MenuEintrag('index.php?module=artikel&action=schnellanlegen','Schnell anlegen'); + + if($submit_barcode!='' && $barcode!='') + { + $checkbarcode = $this->app->DB->Select("SELECT id FROM artikel WHERE ean='$barcode' OR herstellernummer='$barcode' OR nummer='$barcode' LIMIT 1"); + + if($checkbarcode > 0) + { + $name_nummer = $this->app->DB->Select("SELECT CONCAT(nummer,' ',name_de) FROM artikel WHERE id='$checkbarcode' LIMIT 1"); + $msg = $this->app->erp->base64_url_encode("
Es gibt bereits einen Artikel mit dieser Nummer ($name_nummer).
"); + $this->app->Location->execute("index.php?module=artikel&action=schnellanlegen&msg=$msg"); + return; + } + + // Default einträge laden wenn vorhanden + $mhd = $this->app->User->GetParameter('artikel_schnellanlegen_mhd'); + $chargen = $this->app->User->GetParameter('artikel_schnellanlegen_chargen'); + + if($mhd=='1') { + $this->app->Tpl->Set('MHD','checked'); + } + if($chargen=='1') { + $this->app->Tpl->Set('CHARGEN','checked'); + } + + $this->app->Tpl->Parse('PAGE','artikel_schnellanlegen_formular.tpl'); + + } + else if ($submit_anlegen=='') { + $this->app->Tpl->Parse('PAGE','artikel_schnellanlegen.tpl'); + } + } + + // Zum Uberladen in Custom + function ArtikelEigenschaftenSuche() + { + } + + + public function ArtikelBaumDetail() + { + $id = (int)$this->app->Secure->GetGET('id'); + $todo = $this->app->Secure->GetGET('todo'); + $artikel = (int)$this->app->Secure->GetGET('artikel'); + if($todo === 'check') + { + if($artikel && $id) + { + $check = $this->app->DB->Select("SELECT id FROM artikelbaum_artikel WHERE artikel = '$artikel' AND kategorie = '$id' LIMIT 1"); + if(!$check) + { + $this->app->DB->Insert("INSERT INTO artikelbaum_artikel (artikel, kategorie) VALUES ('$artikel','$id')"); + } + } + $this->app->ExitXentral(); + } + if($todo === 'uncheck'){ + $this->app->DB->Delete("DELETE FROM artikelbaum_artikel WHERE artikel = '$artikel' AND kategorie = '$id'"); + $this->app->ExitXentral(); + } + echo "

hallo $id

"; + $this->app->ExitXentral(); + } + + function getKategorien(&$kategorien, $parent) + { + $res = $this->app->DB->SelectArr("SELECT id, bezeichnung, parent FROM artikelkategorien WHERE geloescht != 1 AND parent = '$parent' ORDER by bezeichnung"); + if($res) + { + foreach($res as $k => $v) + { + $kategorien[] = $v; + $this->getKategorien($kategorien, $v['id']); + } + } + } + + public function ArtikelBaumAjax() + { + $disabled = true; + if($this->app->Secure->GetGET('enabled') == 1){ + $disabled = false; + } + $id = (int)$this->app->Secure->GetGET('artikel'); + $kategorien = null; + $this->getKategorien($kategorien, 0); + $kategorie = $this->app->DB->SelectArr("SELECT kategorie FROM artikelbaum_artikel WHERE artikel = '$id'"); + + if(!empty($kategorien)) + { + $maxlvl = 0; + foreach($kategorien as $k => $v) + { + $ind[$v['id']] = $k; + + if($v['parent'] == 0) + { + $kategorien[$k]['lvl'] = 0; + $name = 'node'.$k; + $$name = new stdClass(); + $$name->id = $v['id']; + $$name->label = $v['bezeichnung']; + $$name->checkbox = true; + $$name->inode = false; + $$name->radio = false; + if($disabled)$$name->disabled = true; + if($kategorie) + { + foreach($kategorie as $ka) + { + if($ka['kategorie'] == $v['id'])$$name->checked = true; + } + } + $baum[] = $$name; + $kategorien[$k]['node'] = $$name; + }else{ + if(isset($ind[$v['parent']])) + { + $name = 'node'.$k; + $$name = new stdClass(); + $$name->id = $v['id']; + $$name->label = $v['bezeichnung']; + $$name->checkbox = true; + $$name->inode = false; + $$name->radio = false; + if($disabled)$$name->disabled = true; + if($kategorie) + { + foreach($kategorie as $ka) + { + if($ka['kategorie'] == $v['id'])$$name->checked = true; + } + } + $kategorien[$k]['node'] = $$name; + $kategorien[$k]['lvl'] = 1+$kategorien[$ind[$v['parent']]]['lvl']; + if($kategorien[$k]['lvl'] > $maxlvl)$maxlvl = $kategorien[$k]['lvl']; + $kategorien[$ind[$v['parent']]]['inode'] = true; + //$kategorien[$ind[$v['parent']]]['node']->inode = true; + $kategorien[$ind[$v['parent']]]['node']->open = true; + $kategorien[$ind[$v['parent']]]['node']->branch[] = $$name; + } + } + } + echo json_encode($baum); + $this->app->erp->ExitWawi(); + } + echo '[]'; + $this->app->erp->ExitWawi(); + } + + + public function ArtikelBaum() + { + $extraurl = ''; + if($this->app->Secure->GetPOST('enabled')) + { + $extraurl = '&enabled=1'; + $this->app->Tpl->Set('BUTTONBEARBEITEN','
'); + }elseif($this->app->erp->RechteVorhanden('artikel','baumedit')){ + $this->app->Tpl->Set('BUTTONBEARBEITEN', '
'); + } + $id = $this->app->Secure->GetGET('id'); + $url = 'index.php?module=artikel&action=baumajax'.$extraurl.'&artikel='.$id; + $this->ArtikelMenu(); + + + $this->app->Tpl->Set('URL',$url); + $this->app->Tpl->Parse('PAGE','artikel_baum.tpl'); + } + + public function ArtikelBaumEdit() + { + //Rechte + $this->app->ExitXentral(); + } + + + public function ArtikelFreifelder(){ + $this->ArtikelMenu(); + + $artikelid = $this->app->Secure->GetGET('id'); + + if($this->app->Secure->GetPOST('nachladen') != ''){ + $sqla = null; + for ($i = 1; $i <= 40; $i++) { + $sqla[] = ' SELECT '.$i.' as nummer '; + } + $sql = "INSERT INTO artikel_freifelder (artikel, sprache, nummer, wert) + SELECT '$artikelid', s.iso, n.nummer,'' + FROM (SELECT iso FROM sprachen WHERE aktiv = 1 AND iso <> 'DE' AND iso <> '' GROUP BY iso) s + INNER JOIN (".implode(' UNION ', $sqla).") n + LEFT JOIN artikel_freifelder af ON s.iso = af.sprache AND af.artikel = '$artikelid' AND n.nummer = af.nummer + WHERE isnull(af.id) + "; + $this->app->DB->Insert($sql); + } + + $this->app->YUI->TableSearch('TAB1','artikelfreifelder_list', 'show','','',basename(__FILE__), __CLASS__); + $this->app->Tpl->Parse('PAGE','artikelfreifelder_list.tpl'); + } + + public function ArtikelFreifelderEdit(){ + + if($this->app->Secure->GetGET('cmd')==='get'){ + $id = (int)$this->app->Secure->GetPOST('id'); + $sprache = $this->app->Secure->GetPOST('sprache'); + $nummer = (int)$this->app->Secure->GetPOST('nummer'); + + for($i=1; $i<=40; $i++){ + $freifelderfirmendaten[] = '(SELECT '.$i.' AS nummer, if(f.freifeld'.$i." != '', f.freifeld".$i.", CONCAT('Freifeld ',".$i.')) AS bezeichnung FROM firmendaten f)'; + $freifeldtypen[] = '(SELECT '.$i.' AS nummer, wert AS inputtyp FROM firmendaten_werte WHERE name = CONCAT("freifeld",'.$i.',"typ"))'; + } + + if($sprache != '' && $sprache !== 'DE'){ + $data = $this->app->DB->SelectRow('SELECT af.id, af.nummer as nummer, af.wert, af.sprache, f.bezeichnung, ft.inputtyp + FROM artikel_freifelder af + LEFT JOIN ('.implode(' UNION ALL ', $freifelderfirmendaten).") f ON af.nummer = f.nummer + LEFT JOIN (".implode(' UNION ALL ', $freifeldtypen).") ft ON af.nummer = ft.nummer + WHERE af.id = '$id' + LIMIT 1"); + + }elseif($sprache === 'DE'){ + $data = $this->app->DB->SelectRow('SELECT a.id, '.$nummer.' as nummer, a.freifeld'.$nummer." AS wert, 'DE' AS sprache, + (SELECT IF(f.freifeld".$nummer." != '', f.freifeld".$nummer.", CONCAT('Freifeld ',".$nummer.")) FROM firmendaten f) AS bezeichnung, + (SELECT wert AS inputtyp FROM firmendaten_werte ft WHERE name = CONCAT('freifeld',".$nummer.",'typ')) AS inputtyp + FROM artikel a + WHERE a.id = '$id' + LIMIT 1"); + + }else{ + $data = null; + } + + if(empty($data)){ + $data['id'] = 0; + $data['wert'] = ''; + $data['sprache'] = ''; + $data['bezeichnung'] = ''; + $data['nummer'] = ''; + $data['inputtyp'] = 'einzeilig'; + + } + echo json_encode($data); + $this->app->ExitXentral(); + } + + $this->app->Tpl->Parse('PAGE', 'artikelfreifelder_list.tpl'); + } + + public function ArtikelFreifelderSave(){ + + $id = (int)$this->app->Secure->GetPOST('id'); + $inhalt = trim($this->app->Secure->GetPOST('freifeldinhalttext')); + $sprache = $this->app->Secure->GetPOST('sprache'); + $nummer = (int)$this->app->Secure->GetPOST('nummer'); + $error = ''; + if($error == ''){ + if($id){ + if($sprache === 'DE'){ + if($nummer > 0) + $this->app->DB->Update("UPDATE artikel SET freifeld".$nummer." = '$inhalt' WHERE id = '$id'"); + }else{ + $this->app->DB->Update("UPDATE artikel_freifelder SET wert = '$inhalt' WHERE id = '$id'"); + } + echo json_encode(array('status'=>1)); + $this->app->ExitXentral(); + } + if($sprache === 'DE'){ + echo json_encode(array('status'=>0,'statusText'=>'Kein gültiger Artikel')); + $this->app->ExitXentral(); + } + $this->app->DB->Insert("INSERT INTO artikel_freifelder (wert) VALUES ('$inhalt')"); + + echo json_encode(array('status'=>1)); + $this->app->ExitXentral(); + } + echo json_encode(array('status'=>0,'statusText'=>$error)); + $this->app->ExitXentral(); + } + + public function ArtikelFreifelderDelete(){ + $id = (int) $this->app->Secure->GetPOST('id'); + if($id > 0){ + $this->app->DB->Delete("DELETE FROM artikel_freifelder WHERE id = '$id' LIMIT 1"); + } + echo json_encode(array('status'=>1)); + $this->app->ExitXentral(); + } + + public function Install(){ + $this->app->erp->CheckTable('artikel_freifelder'); + $this->app->erp->CheckColumn('id', 'int(11)', 'artikel_freifelder', 'NOT NULL AUTO_INCREMENT'); + $this->app->erp->CheckColumn('artikel', 'int(11)', 'artikel_freifelder', 'NOT NULL DEFAULT 0'); + $this->app->erp->CheckColumn('sprache', 'varchar(255)', 'artikel_freifelder', 'NOT NULL'); + $this->app->erp->CheckColumn('nummer', 'int(11)', 'artikel_freifelder', 'NOT NULL'); + $this->app->erp->CheckColumn('wert', 'text', 'artikel_freifelder', 'NOT NULL'); + $this->app->erp->CheckIndex('artikel_freifelder', 'artikel'); + + $this->app->erp->CheckColumn('lieferzeit_standard_einheit', 'varchar(64)', 'einkaufspreise', 'NOT NULL'); + $this->app->erp->CheckColumn('lieferzeit_aktuell_einheit', 'varchar(64)', 'einkaufspreise', 'NOT NULL'); + + $this->app->erp->CheckAlterTable("ALTER TABLE `artikel_freifelder` CHANGE `wert` `wert` text NOT NULL"); + + $this->app->erp->CheckTable('parts_list_alternative'); + $this->app->erp->CheckColumn('id', 'int(11)', 'parts_list_alternative', 'NOT NULL AUTO_INCREMENT'); + $this->app->erp->CheckColumn('parts_list_id', 'int(11)', 'parts_list_alternative', 'DEFAULT 0 NOT NULL'); + $this->app->erp->CheckColumn('alternative_article_id', 'int(11)', 'parts_list_alternative', 'DEFAULT 0 NOT NULL'); + $this->app->erp->CheckColumn('reason', 'varchar(255)', 'parts_list_alternative', 'DEFAULT "" NOT NULL'); + + $this->app->erp->CheckTable('artikel_cached_fields'); + $this->app->erp->CheckColumn('id','int(11)','artikel_cached_fields','NOT NULL AUTO_INCREMENT'); + $this->app->erp->CheckColumn('artikel','INT(11)','artikel_cached_fields','DEFAULT 0 NOT NULL'); + + $this->app->erp->CheckColumn('project_id','INT(11)','artikel_cached_fields','DEFAULT 0 NOT NULL'); + $this->app->erp->CheckColumn('project_name','VARCHAR(64)','artikel_cached_fields','DEFAULT \'\' NOT NULL'); + + $this->app->erp->CheckColumn('number','VARCHAR(64)','artikel_cached_fields','DEFAULT \'\' NOT NULL'); + $this->app->erp->CheckColumn('ean','VARCHAR(64)','artikel_cached_fields','DEFAULT \'\' NOT NULL'); + $this->app->erp->CheckColumn('factory_number','VARCHAR(64)','artikel_cached_fields','DEFAULT \'\' NOT NULL'); + $this->app->erp->CheckColumn('name','VARCHAR(255)','artikel_cached_fields','DEFAULT \'\' NOT NULL'); + $this->app->erp->CheckColumn('manufactor','VARCHAR(255)','artikel_cached_fields','DEFAULT \'\' NOT NULL'); + $this->app->erp->CheckColumn('customfield1','VARCHAR(255)','artikel_cached_fields','DEFAULT \'\' NOT NULL'); + $this->app->erp->CheckColumn('customfield2','VARCHAR(255)','artikel_cached_fields','DEFAULT \'\' NOT NULL'); + $this->app->erp->CheckColumn('ek_customnumber','VARCHAR(1024)','artikel_cached_fields','DEFAULT \'\' NOT NULL'); + $this->app->erp->CheckColumn('vk_customnumber','VARCHAR(1024)','artikel_cached_fields','DEFAULT \'\' NOT NULL'); + $this->app->erp->CheckColumn('eigenschaften','VARCHAR(1024)','artikel_cached_fields','DEFAULT \'\' NOT NULL'); + + $this->app->erp->CheckColumn('is_storage_article','TINYINT(1)','artikel_cached_fields','DEFAULT 0 NOT NULL'); + $this->app->erp->CheckColumn('is_variant','TINYINT(1)','artikel_cached_fields','DEFAULT 0 NOT NULL'); + $this->app->erp->CheckColumn('variant_from_id','INT(11)','artikel_cached_fields','DEFAULT 0 NOT NULL'); + $this->app->erp->CheckColumn('variant_from_name','VARCHAR(64)','artikel_cached_fields','DEFAULT \'\' NOT NULL'); + $this->app->erp->CheckColumn('is_partlist','TINYINT(1)','artikel_cached_fields','DEFAULT 0 NOT NULL'); + $this->app->erp->CheckColumn('is_shipping','TINYINT(1)','artikel_cached_fields','DEFAULT 0 NOT NULL'); + + $this->app->erp->CheckColumn('locked','TINYINT(1)','artikel_cached_fields','DEFAULT 0 NOT NULL'); + + $this->app->erp->CheckColumn('zeitstempel','TIMESTAMP','artikel_cached_fields','DEFAULT CURRENT_TIMESTAMP NOT NULL'); + $this->app->erp->CheckColumn('lager_verfuegbar','DECIMAL(14,4)','artikel_cached_fields','DEFAULT 0 NOT NULL'); + $this->app->erp->CheckColumn('ek_netto','DECIMAL(14,4)','artikel_cached_fields','DEFAULT 0 NOT NULL'); + $this->app->erp->CheckColumn('ek_brutto','DECIMAL(14,4)','artikel_cached_fields','DEFAULT 0 NOT NULL'); + $this->app->erp->CheckColumn('vk_netto','DECIMAL(14,4)','artikel_cached_fields','DEFAULT 0 NOT NULL'); + $this->app->erp->CheckColumn('vk_brutto','DECIMAL(14,4)','artikel_cached_fields','DEFAULT 0 NOT NULL'); + $this->app->erp->CheckColumn('inzulauf','DECIMAL(14,4)','artikel_cached_fields','DEFAULT 0 NOT NULL'); + $this->app->erp->CheckColumn('imsperrlager','DECIMAL(14,4)','artikel_cached_fields','DEFAULT 0 NOT NULL'); + $this->app->erp->CheckColumn('inproduktion','DECIMAL(14,4)','artikel_cached_fields','DEFAULT 0 NOT NULL'); + $this->app->DB->Select('SELECT lager_gesamt FROM artikel_cached_fields LIMIT 1'); + if($this->app->DB->error()){ + $this->app->erp->CheckColumn('lager_gesamt', 'DECIMAL(14,4)', 'artikel_cached_fields', 'DEFAULT 0 NOT NULL'); + $this->app->DB->Update("UPDATE artikel_cached_fields acf + INNER JOIN artikel a ON acf.artikel = a.id AND a.lagerartikel = 1 + LEFT JOIN ( + SELECT lpi2.artikel, sum(lpi2.menge) as minmenge + FROM lager_platz_inhalt lpi2 + GROUP BY lpi2.artikel + ) verf ON a.id = verf.artikel + SET acf.lager_gesamt = ifnull(verf.minmenge,0) + "); + } + $this->app->erp->CheckIndex('artikel_cached_fields', 'artikel'); + + $this->app->erp->CheckTable('article_label'); + $this->app->erp->CheckColumn('id', 'int(11)', 'article_label', 'NOT NULL AUTO_INCREMENT'); + $this->app->erp->CheckColumn('article_id', 'int(11)', 'article_label', 'DEFAULT 0 NOT NULL'); + $this->app->erp->CheckColumn('label_id', 'int(11)', 'article_label', 'DEFAULT 0 NOT NULL'); + $this->app->erp->CheckColumn('printer_id', 'int(11)', 'article_label', 'DEFAULT 0 NOT NULL'); + $this->app->erp->CheckColumn('amount', 'int(11)', 'article_label', 'DEFAULT 0 NOT NULL'); + $this->app->erp->CheckColumn('type', 'varchar(64)', 'article_label', 'NOT NULL'); + + $this->app->erp->RegisterHook('supersearch_detail', 'artikel', 'ArtikelSupersearchDetail'); + $this->app->erp->RegisterHook('LayouttemplateAttachmentItemsDelete', 'artikel', 'ArtikelDeleteFile'); + + $totalArticles = $this->app->DB->Select('SELECT COUNT(a.id) AS `total` FROM `artikel` AS `a` LIMIT 1'); + if ($totalArticles > 0) { + $this->app->DB->Update('UPDATE `artikel` SET `intern_gesperrt` = `gesperrt` WHERE `gesperrt` = 1'); + } + } + + /** + * @param int $fileId + * @param string $cmd + * + * @return void + */ + public function ArtikelDeleteFile($fileId, $cmd) + { + if ($cmd !== 'artikel') { + return; + } + + $query = sprintf("UPDATE `artikel` AS `a` + INNER JOIN `datei_stichwoerter` AS `ds` ON a.id = ds.parameter + INNER JOIN `datei_version` AS `dv` ON ds.id = dv.datei + INNER JOIN (SELECT MAX(dv.version) AS `version` FROM `datei_version` AS `dv` WHERE dv.datei = %d) AS `v` ON v.version = dv.version + SET a.bildvorschau = '' + WHERE ds.id = %d AND a.bildvorschau = CONCAT(dv.id,'_100_100')", $fileId, $fileId); + $this->app->DB->Update($query); + } + + /** + * @param \Xentral\Widgets\SuperSearch\Query\DetailQuery $detailQuery + * @param \Xentral\Widgets\SuperSearch\Result\ResultDetail $detailResult + * + * @return void + */ + public function ArtikelSupersearchDetail($detailQuery, $detailResult) + { + if ($detailQuery->getGroupKey() !== 'articles') { + return; + } + + $articleId = $detailQuery->getItemIdentifier(); + $sql = sprintf( + "SELECT a.id, CONCAT(a.name_de, ' (', a.nummer, ')') AS title, a.name_de, a.kurztext_de, a.nummer + FROM artikel AS a + WHERE a.id = '%s' LIMIT 1", + $this->app->DB->real_escape_string($articleId) + ); + $article = $this->app->DB->SelectRow($sql); + if (empty($article)) { + return;; + } + + $detailResult->setTitle($article['title']); + $detailResult->addButton('Artikel Details', sprintf('index.php?module=artikel&action=edit&id=%s', $article['id'])); + $detailResult->setDescription(sprintf('

%s

', strip_tags($article['kurztext_de']))); + $detailResult->setMiniDetailUrl(sprintf('index.php?module=artikel&action=minidetail&id=%s', $article['id'])); + } + + public function createNewAricleCache() + { + $this->app->DB->Insert( + "INSERT INTO artikel_cached_fields + (artikel,lager_verfuegbar, ek_netto, vk_netto, ek_brutto, vk_brutto, inzulauf,imsperrlager,inproduktion) + SELECT a.id,0, 0, 0, 0, 0, 0, 0, 0 + FROM artikel a + LEFT JOIN artikel_cached_fields acf ON a.id = acf.artikel + WHERE isnull(acf.id)" + ); + } + + public function createAricleCache() + { + $ermaessigt = (float)$this->app->erp->Firmendaten('steuersatz_ermaessigt'); + if($ermaessigt <= 0) + { + $ermaessigt = 7; + } + $normal = (float)$this->app->erp->Firmendaten('steuersatz_normal'); + if($normal <= 0) + { + $normal = 19; + } + $normal = 1+ $normal / 100; + $ermaessigt = 1+ $ermaessigt / 100; + $this->app->DB->Update( + "UPDATE artikel_cached_fields AS acf + INNER JOIN artikel AS a ON acf.artikel = a.id + LEFT JOIN ( + SELECT artikel, min(preis) as minpreis + FROM einkaufspreise + WHERE (gueltig_bis = '0000-00-00' OR gueltig_bis >= curdate()) + AND preis > 0 + GROUP BY artikel + ) AS ek ON a.id = ek.artikel + LEFT JOIN ( + SELECT artikel, min(preis) as minpreis + FROM einkaufspreise + WHERE (gueltig_bis = '0000-00-00' OR gueltig_bis >= curdate()) + AND preis > 0 + AND (ifnull(waehrung,'EUR') = 'EUR' OR waehrung = '') + GROUP BY artikel + ) AS ek2 ON a.id = ek2.artikel + SET acf.ek_netto = ifnull( ifnull(ek2.minpreis,ek.minpreis),0), + acf.ek_brutto = if(a.umsatzsteuer = 'befreit', 1, if(a.umsatzsteuer = 'ermaessigt', $ermaessigt,$normal)) + *ifnull( ifnull(ek2.minpreis,ek.minpreis),0) + WHERE a.geloescht <> 1" + ); + $this->app->DB->Update( + "UPDATE artikel_cached_fields AS acf + INNER JOIN artikel AS a ON acf.artikel = a.id + LEFT JOIN ( + SELECT artikel, min(preis) as minpreis + FROM verkaufspreise + WHERE (gueltig_bis = '0000-00-00' OR gueltig_bis >= curdate()) + AND (gueltig_ab = '0000-00-00' OR gueltig_ab <= curdate()) + AND art <> 'Gruppe' AND art <> 'gruppe' + AND adresse=0 AND preis > 0 + GROUP BY artikel + ) AS vk ON a.id = vk.artikel + LEFT JOIN ( + SELECT artikel, min(preis) as minpreis + FROM verkaufspreise + WHERE (gueltig_bis = '0000-00-00' OR gueltig_bis >= curdate()) + AND (gueltig_ab = '0000-00-00' OR gueltig_ab <= curdate()) + AND art <> 'Gruppe' AND art <> 'gruppe' + AND adresse=0 AND preis > 0 AND (ifnull(waehrung,'EUR') = 'EUR' OR waehrung = '') + GROUP BY artikel + ) AS vk2 ON a.id = vk2.artikel + LEFT JOIN ( + SELECT artikel, min(preis) as minpreis + FROM verkaufspreise + WHERE (gueltig_bis = '0000-00-00' OR gueltig_bis >= curdate()) + AND (gueltig_ab = '0000-00-00' OR gueltig_ab <= curdate()) + AND art <> 'Gruppe' AND art <> 'gruppe' + AND adresse=0 AND preis > 0 AND (ifnull(waehrung,'EUR') = 'EUR' OR waehrung = '') AND ab_menge = 1 + GROUP BY artikel + ) AS vk3 ON a.id = vk3.artikel + + SET acf.vk_netto = ifnull( ifnull( ifnull(vk3.minpreis,vk2.minpreis),vk.minpreis),0), + acf.vk_brutto = if(a.umsatzsteuer = 'befreit', 1, if(a.umsatzsteuer = 'ermaessigt', $ermaessigt,$normal)) + *ifnull( ifnull( ifnull(vk3.minpreis,vk2.minpreis),vk.minpreis),0) + WHERE a.geloescht <> 1" + ); + + $this->app->DB->Update( + "UPDATE artikel_cached_fields AS acf + INNER JOIN artikel AS a ON acf.artikel = a.id + LEFT JOIN artikel AS a2 ON a.variante_von = a2.id AND a.variante = 1 AND IFNULL(a2.geloescht,0) = 0 AND a2.nummer <> 'DEL' + LEFT JOIN projekt as pr ON a.projekt = pr.id + LEFT JOIN ( + SELECT pos.artikel, SUM(pos.menge) AS produktion + FROM produktion_position pos + LEFT JOIN produktion p ON pos.produktion = p.id + WHERE p.status = 'gestartet' AND pos.sort = 1 + GROUP BY pos.artikel + ) AS prod ON a.id = prod.artikel + LEFT JOIN ( + SELECT artikel, sum(bp.menge - bp.geliefert) as zulauf + FROM bestellung_position AS bp + LEFT JOIN bestellung b ON bp.bestellung=b.id + WHERE b.status!='storniert' AND b.status!='abgeschlossen' AND bp.geliefert 1" + ); + + $ekNumbers = $this->app->DB->Query( + sprintf( + "SELECT DISTINCT artikel, bestellnummer FROM einkaufspreise WHERE IFNULL(bestellnummer,'') <> '' ORDER BY artikel" + ) + ); + if($ekNumbers) { + $lastArtikel = 0; + $numbers = []; + while($row = $this->app->DB->Fetch_Assoc($ekNumbers)) { + if($row['artikel'] != $lastArtikel) { + if($lastArtikel > 0 && !empty($numbers)) { + $this->app->DB->Update( + sprintf( + "UPDATE artikel_cached_fields SET ek_customnumber = '%s' WHERE artikel = %d", + implode(',', $numbers), $lastArtikel + ) + ); + } + $numbers = []; + $lastArtikel = $row['artikel']; + } + $numbers[] = $this->app->DB->real_escape_string($row['bestellnummer']); + } + $this->app->DB->free($ekNumbers); + if($lastArtikel > 0 && !empty($numbers)) { + $this->app->DB->Update( + sprintf( + "UPDATE artikel_cached_fields SET ek_customnumber = '%s' WHERE artikel = %d", + implode(',', $numbers), $lastArtikel + ) + ); + } + } + $ekNumbers = $this->app->DB->Query( + sprintf( + "SELECT DISTINCT artikel, kundenartikelnummer + FROM verkaufspreise WHERE IFNULL(kundenartikelnummer,'') <> '' + ORDER BY artikel" + ) + ); + if($ekNumbers) { + $lastArtikel = 0; + $numbers = []; + while($row = $this->app->DB->Fetch_Assoc($ekNumbers)) { + if($row['artikel'] != $lastArtikel) { + if($lastArtikel > 0 && !empty($numbers)) { + $this->app->DB->Update( + sprintf( + "UPDATE artikel_cached_fields SET vk_customnumber = '%s' WHERE artikel = %d", + implode(',', $numbers), $lastArtikel + ) + ); + } + $numbers = []; + $lastArtikel = $row['artikel']; + } + $numbers[] = $this->app->DB->real_escape_string($row['kundenartikelnummer']); + } + $this->app->DB->free($ekNumbers); + if($lastArtikel > 0 && !empty($numbers)) { + $this->app->DB->Update( + sprintf( + "UPDATE artikel_cached_fields SET vk_customnumber = '%s' WHERE artikel = %d", + implode(',', $numbers), $lastArtikel + ) + ); + } + } + } + + public function updateStorageToAricleCache() + { + $this->app->DB->Update( + "UPDATE artikel_cached_fields AS acf + INNER JOIN artikel AS a ON acf.artikel = a.id AND a.lagerartikel = 1 + LEFT JOIN ( + SELECT lpi2.artikel, sum(lpi2.menge) AS minmenge + FROM lager_platz_inhalt lpi2 + GROUP BY lpi2.artikel + ) AS verf ON a.id = verf.artikel + SET acf.lager_gesamt = ifnull(verf.minmenge,0)" + ); + } + + public function updateAttributesToArticleCache() + { + $this->app->DB->Update( + sprintf( + "UPDATE artikel_cached_fields AS acf + LEFT JOIN artikeleigenschaftenwerte AS aew ON acf.artikel = aew.artikel + LEFT JOIN artikeleigenschaften AS ae + ON aew.artikeleigenschaften = ae.id AND ifnull(ae.geloescht,0) = 0 AND ae.name <> '' + SET acf.eigenschaften = '' + WHERE ISNULL(ae.name)" + ) + ); + $attributes = $this->app->DB->Query( + "SELECT aew.artikel, ae.name,aew.wert + FROM artikeleigenschaftenwerte AS aew + INNER JOIN artikeleigenschaften AS ae + ON aew.artikeleigenschaften = ae.id AND ifnull(ae.geloescht,0) = 0 AND ae.name != '' + ORDER BY aew.artikel, ae.name, aew.wert" + ); + if(!$attributes) { + return; + } + $value = []; + $actAricle = 0; + while($row = $this->app->DB->Fetch_Assoc($attributes)) { + if($actAricle > 0 && $row['artikel'] != $actAricle) { + $this->app->DB->Update( + sprintf( + "UPDATE artikel_cached_fields SET eigenschaften = '%s' WHERE artikel = %d", + implode(', ', $value), $actAricle + ) + ); + $value = []; + } + $actAricle = $row['artikel']; + $value[] = $this->app->DB->real_escape_string($row['name']).': ' + .$this->app->DB->real_escape_string($row['wert']); + } + $this->app->DB->free($attributes); + if(empty($value)) { + return; + } + $this->app->DB->Update( + sprintf( + "UPDATE artikel_cached_fields SET eigenschaften = '%s' WHERE artikel = %d", + implode(', ', $value), $actAricle + ) + ); + } + + /** + * @return int + */ + public function updateArticlePicturePreview($limit = 1000) + { + $articleIds = $this->app->DB->SelectFirstCols( + sprintf( + "SELECT art.id + FROM `artikel` AS `art` + WHERE IFNULL(art.bildvorschau,'') = '' + LIMIT %d", + $limit + ) + ); + $res = 0; + if(empty($articleIds)) { + return 0; + } + $files = $this->app->DB->SelectFirstCols( + sprintf( + "SELECT ds.parameter + FROM `datei_stichwoerter` AS `ds` + WHERE ds.objekt LIKE 'artikel' AND ds.parameter IN ('%s') AND ds.datei > 0", + implode("','", $articleIds) + ) + ); + $toSetNull = array_diff($articleIds, $files); + if(!empty($toSetNull)) { + $this->app->DB->Update( + sprintf( + "UPDATE `artikel` SET `bildvorschau` = 'KEINBILD' WHERE IFNULL(bildvorschau,'') = '' AND `id` IN (%s)", + implode(',', $toSetNull) + ) + ); + $res = $this->app->DB->affected_rows(); + if($res <= 0) { + $res = 0; + } + } + + if(!empty($files)) { + foreach($files as $id) { + try { + $ret = $this->ajaxGenerateThumbnail($id); + } + catch(Exception $e) { + $ret = ['result' => 0]; + } + if(!empty($ret['bildvorschau'])) { + $res++; + } + } + } + + return $res; + } + + public function updateExplodingPartListSellableToAricleCache() + { + $this->app->DB->Update( + "UPDATE artikel_cached_fields AS acf + INNER JOIN artikel AS a ON acf.artikel = a.id AND a.lagerartikel = 1 AND a.juststueckliste = 1 + LEFT JOIN + ( + SELECT s.stuecklistevonartikel, min(FLOOR((ifnull(lpi.menge,0) - if(ifnull(r.menge,0) > ifnull(off.menge,0),ifnull(r.menge,0),ifnull(off.menge,0))) / s.menge)) as minmenge + FROM + ( + SELECT artikel,sum(menge) as menge ,stuecklistevonartikel + FROM stueckliste + WHERE art!='it' + GROUP BY artikel,stuecklistevonartikel + ) AS s + INNER JOIN artikel AS a2 ON s.artikel = a2.id + LEFT JOIN ( + SELECT lpi2.artikel, sum(lpi2.menge) as menge + FROM lager_platz_inhalt lpi2 + INNER JOIN lager_platz lp ON lpi2.lager_platz = lp.id + WHERE lp.sperrlager <> 1 + GROUP BY lpi2.artikel + ) AS lpi ON a2.id = lpi.artikel + LEFT JOIN ( + SELECT artikel, ifnull(sum(menge),0) as menge + FROM lager_reserviert + GROUP BY artikel + ) AS r ON a2.id = r.artikel + LEFT JOIN ( + SELECT ifnull(SUM(ap.menge),0) as menge,ap.artikel + FROM auftrag_position ap + INNER JOIN auftrag a ON a.id=ap.auftrag + WHERE a.status='freigegeben' + GROUP BY ap.artikel + ) AS off ON a2.id = off.artikel + GROUP BY s.stuecklistevonartikel + ) AS verf ON acf.artikel = verf.stuecklistevonartikel + SET acf.lager_verfuegbar = if(ifnull(verf.minmenge,0) <= 0,0, verf.minmenge)" + ); + } + + public function updatePartListJitArticleStorageCache() + { + $jitArticles = $this->app->DB->Query( + 'SELECT `id` + FROM `artikel` + WHERE `juststueckliste` = 1 AND `lagerartikel` = 0 AND (`geloescht` = 0 OR `geloescht` IS NULL)' + ); + while($article = $this->app->DB->Fetch_Assoc($jitArticles)) { + $article = $article['id']; + $inStock = (float)$this->app->erp->ArtikelAnzahlLagerStueckliste($article); + if($inStock < 0) { + $inStock = 0; + } + $this->app->DB->Update( + sprintf( + 'UPDATE `artikel_cached_fields` SET `lager_gesamt` = %f WHERE `artikel` = %d', + $inStock, $article + ) + ); + } + $this->app->DB->free($jitArticles); + } + + public function updatePartListSellableToAricleCache() + { + $this->app->DB->Update( + "UPDATE artikel_cached_fields AS acf + INNER JOIN artikel AS a ON acf.artikel = a.id AND a.lagerartikel = 1 AND a.juststueckliste = 1 + LEFT JOIN + ( + SELECT s.stuecklistevonartikel, min(FLOOR((ifnull(lpi.menge,0) - if(ifnull(r.menge,0) > ifnull(off.menge,0),ifnull(r.menge,0),ifnull(off.menge,0))) / s.menge)) as minmenge + FROM + ( + SELECT artikel,sum(menge) as menge ,stuecklistevonartikel + FROM stueckliste + WHERE art!='it' + GROUP BY artikel,stuecklistevonartikel + ) AS s + INNER JOIN artikel a2 ON s.artikel = a2.id + LEFT JOIN ( + SELECT lpi2.artikel, sum(lpi2.menge) as menge + FROM lager_platz_inhalt lpi2 + INNER JOIN lager_platz lp ON lpi2.lager_platz = lp.id + WHERE lp.sperrlager <> 1 + GROUP BY lpi2.artikel + ) AS lpi ON a2.id = lpi.artikel + LEFT JOIN (SELECT artikel, ifnull(sum(menge),0) as menge FROM lager_reserviert GROUP BY artikel ) r ON a2.id = r.artikel + LEFT JOIN (SELECT ifnull(SUM(ap.menge),0) as menge,ap.artikel FROM auftrag_position ap INNER JOIN auftrag a ON a.id=ap.auftrag WHERE a.status='freigegeben' GROUP BY ap.artikel) off ON a2.id = off.artikel + GROUP BY s.stuecklistevonartikel + ) verf ON acf.artikel = verf.stuecklistevonartikel + LEFT JOIN ( + SELECT artikel, ifnull(sum(menge),0) as menge + FROM lager_reserviert + GROUP BY artikel + ) AS r2 ON acf.artikel = r2.artikel + LEFT JOIN ( + SELECT ifnull(SUM(ap.menge),0) as menge,ap.artikel + FROM auftrag_position ap + INNER JOIN auftrag a ON a.id=ap.auftrag + WHERE a.status='freigegeben' + GROUP BY ap.artikel + ) AS off2 ON acf.artikel = off2.artikel + SET acf.lager_verfuegbar = + if( + ifnull(verf.minmenge,0) - + if( + ifnull(r2.menge,0) > ifnull(off2.menge,0), + ifnull(r2.menge,0), + ifnull(off2.menge,0) + ) <= 0, + 0, + verf.minmenge - + if( + ifnull(r2.menge,0) > ifnull(off2.menge,0), + ifnull(r2.menge,0), + ifnull(off2.menge,0) + ) + ) + "); + } + + public function updateQuarantineStoreToAricleCache() { + $this->app->DB->Update( + "UPDATE artikel_cached_fields acf + INNER JOIN artikel a ON acf.artikel = a.id AND a.lagerartikel = 1 AND a.juststueckliste = 0 + LEFT JOIN ( + SELECT lpi2.artikel, sum(lpi2.menge) as minmenge + FROM lager_platz_inhalt lpi2 + INNER JOIN lager_platz lp ON lpi2.lager_platz = lp.id + WHERE lp.sperrlager = 1 + GROUP BY lpi2.artikel + ) verf ON a.id = verf.artikel + SET acf.imsperrlager = ifnull(verf.minmenge,0)" + ); + } + + public function updateSellableToAricleCache() + { + $this->app->DB->Update( + "UPDATE artikel_cached_fields acf + INNER JOIN artikel a ON acf.artikel = a.id AND a.lagerartikel = 1 AND a.juststueckliste = 0 + LEFT JOIN (SELECT artikel, ifnull(sum(menge),0) as menge FROM lager_reserviert GROUP BY artikel ) r2 ON acf.artikel = r2.artikel + LEFT JOIN (SELECT ifnull(SUM(ap.menge),0) as menge,ap.artikel FROM auftrag_position ap INNER JOIN auftrag a ON a.id=ap.auftrag WHERE a.status='freigegeben' GROUP BY ap.artikel) off2 ON acf.artikel = off2.artikel + LEFT JOIN (SELECT lpi2.artikel, sum(lpi2.menge) as minmenge FROM lager_platz_inhalt lpi2 INNER JOIN lager_platz lp ON lpi2.lager_platz = lp.id WHERE lp.sperrlager <> 1 GROUP BY lpi2.artikel ) verf ON a.id = verf.artikel + SET acf.lager_verfuegbar = + if( + ifnull(verf.minmenge,0) - + if( + ifnull(r2.menge,0) > ifnull(off2.menge,0), + ifnull(r2.menge,0), + ifnull(off2.menge,0) + ) <= 0, + 0, + verf.minmenge - + if( + ifnull(r2.menge,0) > ifnull(off2.menge,0), + ifnull(r2.menge,0), + ifnull(off2.menge,0 + ) + ) + )" + ); + } + + public function ArtikelLagerInfo($artikel) + { + + $summe = $this->app->DB->Select("SELECT SUM(lpi.menge) FROM lager_platz_inhalt lpi LEFT JOIN lager_platz lp ON lp.id=lpi.lager_platz + WHERE lpi.artikel='$artikel' AND lp.sperrlager!=1"); + + $reserviert = $this->app->DB->Select("SELECT SUM(menge) FROM lager_reserviert WHERE artikel='$artikel'");// AND datum >= NOW()"); + + $auftraege = $this->app->DB->Select("SELECT SUM(ap.menge) as menge,ap.bezeichnung FROM auftrag_position ap + LEFT JOIN artikel a ON a.id=ap.artikel LEFT JOIN auftrag auf ON auf.id=ap.auftrag WHERE a.id='$artikel' AND a.lagerartikel=1 AND auf.status='freigegeben'"); + + $liefern= $this->app->DB->Select("SELECT SUM(ap.menge) as menge,ap.bezeichnung FROM auftrag_position ap, auftrag aa, artikel a WHERE a.id=ap.artikel AND aa.id = ap.auftrag AND a.id='$artikel' AND a.lagerartikel=1 AND aa.status='freigegeben'"); + + $reserviert_im_versand = $this->app->DB->Select("SELECT SUM(menge) FROM lager_reserviert WHERE artikel='$artikel' AND objekt='lieferschein'"); + + $berechnet = $summe - $auftraege - $reserviert_im_versand; + + $offenebestellungen = $this->app->DB->Select("SELECT SUM(bp.menge-bp.geliefert) as menge FROM bestellung_position bp, bestellung bs, artikel a WHERE a.id=bp.artikel AND bs.id = bp.bestellung AND a.id='$artikel' AND a.lagerartikel=1 AND (bs.status='freigegeben' OR bs.status='versendet') AND bp.menge > bp.geliefert"); + + $verkaufte = $auftraege + $reserviert_im_versand; + + $berechnetmitoffenebestellungen = $berechnet + $offenebestellungen; + + if($reserviert=='') { + $reserviert =0; + } + if($liefern <=0) { + $liefern=0; + } + + $verkaufbare = $this->app->erp->ArtikelAnzahlVerkaufbar($artikel); + $summe = round($summe, $this->app->erp->GetLagerNachkommastellen()); + $reserviert = round($reserviert ,$this->app->erp->GetLagerNachkommastellen()); + $liefern = round($liefern ,$this->app->erp->GetLagerNachkommastellen()); + $verkaufte = round($verkaufte ,$this->app->erp->GetLagerNachkommastellen()); + $berechnet = round($berechnet ,$this->app->erp->GetLagerNachkommastellen()); + $verkaufbare = round($verkaufbare ,$this->app->erp->GetLagerNachkommastellen()); + $berechnetmitoffenebestellungen = round($berechnetmitoffenebestellungen ,$this->app->erp->GetLagerNachkommastellen()); + + return "
Lagerbestand: $summe  |  Reserviert: $reserviert  | Offene Aufträge: $liefern | Verkaufte: $verkaufte | Berechneter Bestand: $berechnet | Verkaufbare: $verkaufbare | Berechneter Bestand mit offenen Bestellungen: $berechnetmitoffenebestellungen

"; + } +} diff --git a/www/themes/new/templates/popup.tpl b/www/themes/new/templates/popup.tpl index 0418f314..f02f6f90 100644 --- a/www/themes/new/templates/popup.tpl +++ b/www/themes/new/templates/popup.tpl @@ -223,23 +223,28 @@ function fillArtikel(id,menge) menge = res.substr(0,first_space) id = tmp[0]; - strSource = "./index.php"; - id = $.base64Encode( id); - strData = "module=artikel&action=ajaxwerte&id="+id+"&smodule=[MODULE]&sid=[KID]&menge="+menge; - intType= 0; //GET - intID = 0; - command = 'fillArtikel'; - sendRequest(strSource,strData,intType,intID); - } else { - strSource = "./index.php"; - id = $.base64Encode( id); - strData = "module=artikel&action=ajaxwerte&id="+id+"&smodule=[MODULE]&sid=[KID]&menge="+menge; - intType= 0; //GET - intID = 0; - command = 'fillArtikel'; - sendRequest(strSource,strData,intType,intID); - } + strSource = "./index.php"; + // Force string type + id = ""+id; + id = $.base64Encode(id); + + strData = "module=artikel&action=ajaxwerte&id="+id+"&smodule=[MODULE]&sid=[KID]&menge="+menge; + intType= 0; //GET + intID = 0; + command = 'fillArtikel'; + sendRequest(strSource,strData,intType,intID); + } else { + strSource = "./index.php"; + // Force string type + id = ""+id; + id = $.base64Encode( id); + strData = "module=artikel&action=ajaxwerte&id="+id+"&smodule=[MODULE]&sid=[KID]&menge="+menge; + intType= 0; //GET + intID = 0; + command = 'fillArtikel'; + sendRequest(strSource,strData,intType,intID); + } }