<?php

/*
 * SPDX-FileCopyrightText: 2019 Xentral ERP Software GmbH, Fuggerstrasse 11, D-86150 Augsburg
 * SPDX-FileCopyrightText: 2023 Andreas Palm
 *
 * SPDX-License-Identifier: LicenseRef-EGPL-3.1
 */

/*
**** COPYRIGHT & LICENSE NOTICE *** DO NOT REMOVE ****
* 
* Xentral (c) Xentral ERP Sorftware GmbH, Fuggerstrasse 11, D-86150 Augsburg, * Germany 2019
*
* This file is licensed under the Embedded Projects General Public License *Version 3.1. 
*
* You should have received a copy of this license from your vendor and/or *along with this file; If not, please visit www.wawision.de/Lizenzhinweis 
* to obtain the text of the corresponding license version.  
*
**** END OF COPYRIGHT & LICENSE NOTICE *** DO NOT REMOVE ****
*/
?>
<?php

use Xentral\Widgets\SuperSearch\Result\ResultGroup;
use Xentral\Widgets\SuperSearch\Result\ResultItem;

include '_gen/artikel.php';

class Artikel extends GenArtikel {
  /** @var Application $app */
  var $app;
  const MODULE_NAME = 'Article';
  protected \Xentral\Modules\Article\Service\ArticleService $service;

  public function TableSearch($app, $name, $erlaubtevars)
  {
    switch($name) {
      case '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('Hauptkategorie', 'Unterkategorie (Optional)', 'Wert', 'Einheit (Optional)', 'Men&uuml;');
        $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 = "<a href=\"index.php?module=artikel&action=eigenschafteneditpopup&id=%value%\"><img src=\"themes/{$this->app->Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\"></a>" . "&nbsp;<a href=\"#\" onclick=CopyDialog(\"index.php?module=artikel&action=eigenschaftencopy&id=%value%\");><img src=\"themes/{$this->app->Conf->WFconf['defaulttheme']}/images/copy.svg\" border=\"0\"></a>". "&nbsp;<a href=\"#\" onclick=DeleteDialog(\"index.php?module=artikel&action=eigenschaftendelete&id=%value%\");><img src=\"themes/{$this->app->Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\"></a>";

        // SQL statement
        $sql = "SELECT SQL_CALC_FOUND_ROWS e.id, e.hauptkategorie, e.unterkategorie, CONCAT(e.wert,'&nbsp;&nbsp;'),
                                     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&uuml;');
        $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 = "<a href=\"#\" onclick=\"editeigenschaft(%value%)\"><img src=\"themes/{$this->app->Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\"></a>" . "&nbsp;<a href=\"#\" onclick=\"copyeigenschaft(%value%)\");><img src=\"themes/{$this->app->Conf->WFconf['defaulttheme']}/images/copy.svg\" border=\"0\"></a>". "&nbsp;<a href=\"#\" onclick=\"deleteeigenschaft(%value%)\";><img src=\"themes/{$this->app->Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\"></a>";

        // SQL statement
        $sql = "SELECT SQL_CALC_FOUND_ROWS ew.id, e.name,  CONCAT(ew.wert,'&nbsp;&nbsp;'),
                                     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&uuml;', '');
        $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('<table cellpadding=0 cellspacing=0><tr><td nowrap><a href=\"#\" onclick=\"editeigenschaft(',ew.id,')\"><img src=\"themes/{$this->app->Conf->WFconf['defaulttheme']}/images/edit.svg\" title=\"Bearbeiten\" border=\"0\"></a>&nbsp;<a href=\"#\" onclick=\"deleteeigenschaft(',ew.id,')\";><img src=\"themes/{$this->app->Conf->WFconf['defaulttheme']}/images/delete.svg\" title=\"L&ouml;schen\" border=\"0\"></a>&nbsp;',IF(e.typ='select' AND ew.vorlage>0,'',CONCAT('<a href=\"#\" onclick=\"copyeigenschaft(',ew.id,')\";><img src=\"themes/{$this->app->Conf->WFconf['defaulttheme']}/images/copy.svg\" title=\"Kopieren\" border=\"0\"></a></td></tr></table>'))) 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('<table cellpadding=0 cellspacing=0><tr><td nowrap><a href=\"index.php?module=propertytranslation&action=list\"><img src=\"themes/{$this->app->Conf->WFconf['defaulttheme']}/images/forward.svg\" title=\"Eigenschaften &Uuml;bersetzung\" border=\"0\"></a>'), IF(ap.article_id != 0, CONCAT('<table cellpadding=0 cellspacing=0><tr><td nowrap><a href=\"#\" onclick=\"editUebersetzung(',ap.id,');\"><img src=\"themes/{$this->app->Conf->WFconf['defaulttheme']}/images/edit.svg\" title=\"Bearbeiten\" border=\"0\"></a>&nbsp;<a href=\"#\" onclick=\"deleteUebersetzung(',ap.id,');\"><img src=\"themes/{$this->app->Conf->WFconf['defaulttheme']}/images/delete.svg\" title=\"L&ouml;schen\" border=\"0\"></a>'), '')) 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&uuml;');
        $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 = "<table cellpadding=0 cellspacing=0><tr><td nowrap><a href=\"javascript:;\" onclick=\"ArtikelFremdnummernEdit(%value%);\"><img src=\"themes/{$this->app->Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\"></a>&nbsp;<a href=\"javascript:;\" onclick=\"ArtikelFremdnummernDelete(%value%);\"><img src=\"themes/{$this->app->Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\"></a></tr></table>";

        $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&uuml;');
        $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 = "<a href=\"index.php?module=artikel&action=edit&id=%value%\"><img src=\"themes/{$this->app->Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\"></a>" . "<!--&nbsp;<a href=\"#\" onclick=DeleteDialog(\"index.php?module=artikel&action=delete&id=%value%\");><img src=\"themes/{$this->app->Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\"></a>" . "&nbsp;<a href=\"#\" onclick=CopyDialog(\"index.php?module=artikel&action=copy&id=%value%\");><img src=\"themes/{$this->app->Conf->WFconf['defaulttheme']}/images/copy.svg\" border=\"0\"></a>-->";

        // SQL statement

        /*                      CONCAT('<input type=\"checkbox\" class=\"chcktbl2\" name=\"artikelmarkiert[]\" value=\"',a.id,'\">') as wahl,

                                    CONCAT('<img src=./themes/new/images/shop_stock',a.lieferzeit,'.png>') as ampel,
        */
        $sql = "SELECT SQL_CALC_FOUND_ROWS a.id, 
              CONCAT('<input type=\"checkbox\" class=\"chcktbl\" name=\"artikelmarkiert[]\" value=\"',a.id,'\">') as wahl, 
              CONCAT('<img src=./themes/new/images/shop_stock',a.lieferzeit,'.png>') as ampel, 

              If(a.inaktiv,CONCAT('<strike>',a.nummer,'</strike>'),a.nummer) as nummer, 
              If(a.inaktiv,CONCAT('<strike>',a.name_de,'</strike>'),a.name_de) as name_de, 
              If(a.inaktiv,CONCAT('<strike>',adr.name,'</strike>'),adr.name) as lieferant, 

              (SELECT SUM(l.menge) FROM lager_platz_inhalt l WHERE l.artikel=a.id) as lager, 

              If(a.inaktiv,CONCAT('<strike>',p.abkuerzung,'</strike>'),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&uuml;');
        $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 = "<a href=\"index.php?module=artikel&action=edit&id=%value%\"><img src=\"themes/{$this->app->Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\"></a>" . "<!--&nbsp;<a href=\"#\" onclick=DeleteDialog(\"index.php?module=artikel&action=delete&id=%value%\");><img src=\"themes/{$this->app->Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\"></a>" . "&nbsp;<a href=\"#\" onclick=CopyDialog(\"index.php?module=artikel&action=copy&id=%value%\");><img src=\"themes/{$this->app->Conf->WFconf['defaulttheme']}/images/copy.svg\" border=\"0\"></a>-->";

        // SQL statement
        $sql = "SELECT SQL_CALC_FOUND_ROWS a.id, 

              if(a.autolagerlampe,CONCAT('<input type=\"checkbox\" class=\"chcktbl2\" name=\"artikelmarkiert[',a.id,']\" checked value=\"1\"><input type=\"hidden\" name=\"artikelmarkierthidden[',a.id,']\" value=\"1\">'),
                  CONCAT('<input type=\"checkbox\" class=\"chcktbl2\" name=\"artikelmarkiert[',a.id,']\" value=\"1\"><input type=\"hidden\" name=\"artikelmarkierthidden[',a.id,']\" value=\"0\">')) as wahl, 
                CONCAT('<img src=./themes/new/images/shop_stock',a.lieferzeit,'.png>') as ampel, 

                  if(a.autolagerlampe,'auto','manuell') as art,

                    If(a.inaktiv,CONCAT('<strike>',a.nummer,'</strike>'),a.nummer) as nummer, 
                      If(a.inaktiv,CONCAT('<strike>',a.name_de,'</strike>'),a.name_de) as name_de, 
                      If(a.inaktiv,CONCAT('<strike>',adr.name,'</strike>'),adr.name) as lieferant, 
                      (SELECT SUM(l.menge) FROM lager_platz_inhalt l WHERE l.artikel=a.id) as lager, 
                      If(a.inaktiv,CONCAT('<strike>',p.abkuerzung,'</strike>'),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&uuml;');
        $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 = "<a href=\"index.php?module=artikel&action=edit&id=%value%\"><img src=\"themes/{$this->app->Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\"></a>" . "<!--&nbsp;<a href=\"#\" onclick=DeleteDialog(\"index.php?module=artikel&action=delete&id=%value%\");><img src=\"themes/{$this->app->Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\"></a>" . "&nbsp;<a href=\"#\" onclick=CopyDialog(\"index.php?module=artikel&action=copy&id=%value%\");><img src=\"themes/{$this->app->Conf->WFconf['defaulttheme']}/images/copy.svg\" border=\"0\"></a>-->";

        // SQL statement

        $sql = "SELECT SQL_CALC_FOUND_ROWS a.id, CONCAT('<input type=\"checkbox\" name=\"artikelmarkiert[]\" value=\"',a.id,'\">') 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');
    
        $cmd = $this->app->Secure->GetGET('cmd');            
        $module = $this->app->Secure->GetGET('module');
        if ($module == 'artikel') {
            $table = $cmd;
        } else {
            $table = $this->app->Secure->GetGET('smodule');
        }
        $adresse = $this->app->DB->Select(sprintf('SELECT adresse FROM `%s` WHERE id=%d LIMIT 1',$table,$id));

        // headings
        $heading = array('', 'Nummer', 'Artikel', 'Ab', 'Preis', 'Lager', 'Res.', 'Menge', 'Projekt', 'Men&uuml;');
        $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 = "<a href=\"#\" class=\"articlematrix-quickadd\" data-id=\"%value%\" data-insert-url=\"index.php?module=artikel&action=profisuche&id=%value%&cmd=$cmd&sid=$id&insert=true\"><img src=\"themes/{$this->app->Conf->WFconf['defaulttheme']}/images/add.png\" border=\"0\"></a>";

        // SQL statement
        $sql = "SELECT SQL_CALC_FOUND_ROWS a.id,
              CONCAT('<input type=\"checkbox\" name=\"auswahl[', v.id, ']\" class=\"articlematrix-checkbox\" id=\"articlematrix-checkbox-', v.id, '\" data-id=\"', v.id, '\">') 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('<input type=\"text\" size=\"5\" name=\"menge[', v.id, ']\" class=\"articlematrix-quantity\" id=\"articlematrix-quantity-', v.id, '\" data-id=\"', v.id, '\" data-default-quantity=\"', ".$this->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('cmd');            
        $module = $this->app->Secure->GetGET('module');
        if ($module == 'artikel') {
            $table = $cmd;
        } else {
            $table = $this->app->Secure->GetGET('frommodule');
            $table = substr($table , 0, strpos($table, "."));
        }
        $adresse = $this->app->DB->Select(sprintf('SELECT adresse FROM `%s` WHERE id=%d LIMIT 1',$table,$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&auml;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[] = (!empty($findcols)?count($findcols):0);
                  break;
                case 'Preis':
                  $zusatzcols[] = $this->app->erp->FormatPreis('cache.'.$zusatzfeld,2);
                  $alignright[] = (!empty($findcols)?count($findcols):0);
                  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 = "<a href=\"#\" class=\"articlematrix-quickadd\" data-id=\"%value%\" data-insert-url=\"index.php?module=artikel&action=profisuche&id=%value%&cmd=$cmd&sid=$id&insert=true&fmodul=$fmodul\"><img src=\"themes/{$this->app->Conf->WFconf['defaulttheme']}/images/add.png\" border=\"0\"></a>";

        $sql = "SELECT SQL_CALC_FOUND_ROWS a.id, 
            CONCAT('<input type=\"checkbox\" name=\"auswahl[', v.id, ']\" class=\"articlematrix-checkbox\" id=\"articlematrix-checkbox-', v.id, '\" data-id=\"', v.id, '\">') 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('<input type=\"text\" size=\"5\" name=\"menge[', v.id, ']\" class=\"articlematrix-quantity\" id=\"articlematrix-quantity-', v.id, '\" data-id=\"', v.id, '\" data-default-quantity=\"', ".$this->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&uuml;';
        $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&uuml;');
        $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 = "<a href=\"index.php?module=auftrag&action=edit&id=%value%\"><img src=\"themes/{$this->app->Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\"></a>";
        $alignright = array(7,8,9);
        // SQL statement
        $sql = "SELECT SQL_CALC_FOUND_ROWS a.id, CONCAT('<a href=\"index.php?module=auftrag&action=edit&id=',a.id,'\">',a.belegnr,'</a>') as belegnr, DATE_FORMAT(a.datum,'%d.%m.%Y') as datum, a.status, a.zahlungsweise, adr.kundenfreigabe as freigabe, CONCAT(a.name,'<br>', 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&uuml;');
        $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 = "<a href=\"index.php?module=auftrag&action=edit&id=%value%\"><img src=\"themes/{$this->app->Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\"></a>";

        // SQL statement
        $sql = "SELECT SQL_CALC_FOUND_ROWS a.id, CONCAT('<a href=\"index.php?module=auftrag&action=edit&id=',a.id,'\">',a.belegnr,'</a>') as belegnr, DATE_FORMAT(a.datum,'%d.%m.%Y') as datum, a.status, a.zahlungsweise, adr.kundenfreigabe as freigabe, CONCAT(a.name,'<br>', 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&auml;hrung', 'G&uuml;ltig ab', 'G&uuml;ltig bis', 'Men&uuml;');
        $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 = '<table cellpadding=0 cellspacing=0>';
        $menu .= '<tr>';
        $menu .= '<td nowrap>';
        $menu .= '<a href="javascript:;" onclick="VerkaufspreiseEdit(%value%);">';
        //$menu .= "<a href=\"index.php?module=artikel&action=verkaufeditpopup&id=%value%\">";
        $menu .= "<img src=\"themes/{$this->app->Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\">";
        $menu .= '</a>' . '&nbsp;';
        $menu .= "<a href=\"#\" onclick=DisableDialog(\"index.php?module=artikel&action=verkaufdisable&id=%value%\");>";
        $menu .= "<img src=\"themes/{$this->app->Conf->WFconf['defaulttheme']}/images/disable.png\" border=\"0\">";
        $menu .= '</a>' . '&nbsp;';
        $menu .= "<a href=\"#\" onclick=DeleteDialog(\"index.php?module=artikel&action=verkaufdelete&id=%value%\");>";
        $menu .= "<img src=\"themes/{$this->app->Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\">";
        $menu .= '</a>&nbsp;';
        $menu .= "<a href=\"#\" onclick=CopyDialog(\"index.php?module=artikel&action=verkaufcopy&id=%value%\");>";
        $menu .= "<img src=\"themes/{$this->app->Conf->WFconf['defaulttheme']}/images/copy.svg\" border=\"0\">";
        $menu .= '</a>';
        $menu .= '</td>';
        $menu .= '</tr>';
        $menu .= '</table>';

        $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&auml;hrung', 'bis', 'Rahmenvert.', 'Men&uuml;');
        $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 = '<a href="javascript:;" onclick="EinkaufspreiseEdit(%value%);">';
        //$menu = "<a href=\"index.php?module=artikel&action=einkaufeditpopup&id=%value%\">";
        $menu .= "<img src=\"themes/{$this->app->Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\">";
        $menu .= '</a>" . "&nbsp;';
        $menu .= "<a href=\"#\" onclick=DisableDialog(\"index.php?module=artikel&action=einkaufdisable&id=%value%\");>";
        $menu .= "<img src=\"themes/{$this->app->Conf->WFconf['defaulttheme']}/images/disable.png\" border=\"0\">";
        $menu .= '</a>" . "&nbsp;';
        $menu .= "<a href=\"#\" onclick=DeleteDialog(\"index.php?module=artikel&action=einkaufdelete&id=%value%\");>";
        $menu .= "<img src=\"themes/{$this->app->Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\">";
        $menu .= '</a>" . "&nbsp;';
        $menu .= "<a href=\"#\" onclick=CopyDialog(\"index.php?module=artikel&action=einkaufcopy&id=%value%\");>";
        $menu .= "<img src=\"themes/{$this->app->Conf->WFconf['defaulttheme']}/images/copy.svg\" border=\"0\">";
        $menu .= '</a>';

        // 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('<a href=\"index.php?module=adresse&action=edit&id=',adr.id,'\" target=\"_blank\">',adr.name,'</a>') 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&uuml;');
        $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 = "<table cellpadding=0 cellspacing=0><tr><td nowrap></td></tr></table>";

        //<a href=\"#\"onclick=\"if(!confirm('Wirklich löschen?')) return false; else window.location.href='index.php?module=dateien&action=delete&id=%value%';\"><img src=\"./themes/{$this->app->Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\" ></a>


        //            $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(' <br /><i style=\"color:#aaa;\">', 
                        IFNULL(
                          (
                            SELECT CONCAT(IFNULL(mhddatum,''),' ',IFNULL(charge,'') ) 
                            FROM mhd_log 
                            WHERE artikel = art.id AND zeit >= lpi.zeit 
                            ORDER BY id 
                            LIMIT 1
                          ),''
                        ),'</i>'
                      ),
                      IF(
                        art.chargenverwaltung > 0,
                        CONCAT(' <br /><i style=\"color:#aaa;\">',
                          IFNULL(
                            (
                              SELECT IFNULL(bezeichnung,'') 
                              FROM chargen_log 
                              WHERE artikel = art.id AND zeit >= lpi.zeit 
                              ORDER BY id 
                              LIMIT 1
                            ),
                          ''
                          ),'</i>'
                        ),
                        ''
                      )
                     )
                   ) 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(' <br /><i style=\"color:#aaa;\">', 
                        IFNULL(
                          (
                            SELECT CONCAT(IFNULL(mhddatum,''),' ',IFNULL(charge,'') ) 
                            FROM mhd_log 
                            WHERE artikel = art.id AND zeit >= lpi.zeit 
                            ORDER BY id 
                            LIMIT 1
                          ),''
                        ),'</i>'
                      ),
                      IF(
                        art.chargenverwaltung > 0,
                        CONCAT(' <br /><i style=\"color:#aaa;\">',
                          IFNULL(
                            (
                              SELECT IFNULL(bezeichnung,'') 
                              FROM chargen_log 
                              WHERE artikel = art.id AND zeit >= lpi.zeit 
                              ORDER BY id 
                              LIMIT 1
                            ),
                          ''
                          ),'</i>'
                        ),
                        '')
                      )
                     ) 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','Referenz','Menge', 'Einheit', 'Lager', 'Reserviert', 'Men&uuml;');
        $width = array('50%', '10%', '5%', '5%', '5%','5%', '5%', '9%');
        $findcols = array('a.name_de', 'a.nummer','s.referenz', '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','s.referenz','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 = "<table cellpadding=0 cellspacing=0>";
          $menu .= "<tr>";
            $menu .= "<td>";
              $menu .= '<a href="javascript:;" onclick="StuecklisteNeuePositionEdit(%value%);" title="Bearbeiten">';
              //$menu = "<a href=\"index.php?module=artikel&action=editstueckliste&id=%value%\">";
                $menu .= "<img src=\"themes/{$this->app->Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\">";
              $menu .= '</a>' . '&nbsp;';
              $menu .= "<a href=\"#\" onclick=DeleteDialog(\"index.php?module=artikel&action=delstueckliste&id=%value%\"); title=\"L&ouml;schen\">";
                $menu .= "<img src=\"themes/{$this->app->Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\">";
              $menu .= '</a>' . '&nbsp;';
            $menu .= "</td>";
          $menu .= "</tr>";
        $menu .= "</table>";

        $alignright = array(3,5,6);
        // SQL statement
        $sql = "SELECT SQL_CALC_FOUND_ROWS 
                    s.id,  
                    CONCAT('<a href=\"index.php?module=artikel&action=edit&id=',a.id,'\" target=\"_blank\">',a.name_de,'</a>&nbsp;',
                    IF(s.art='it','<br><i style=color:#999>- Informationsteil/Dienstleistung</i>',''),IF(s.art='bt','<br><i style=color:#999>- Beistellung</i>',''), COALESCE((SELECT GROUP_CONCAT('<br><i style=color:#999>- ', art.nummer, ' ', art.name_de, ' (', alt.reason, ')', '</i>' 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 href=\"index.php?module=artikel&action=edit&id=',a.id,'\" target=\"_blank\">',a.nummer,'</a>') as nummer,
                    s.referenz,
                    trim(s.menge)+0 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&uuml;');
        $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 = "<table cellpadding=0 cellspacing=0>";
          $menu .= "<tr>";
            $menu .= "<td nowrap>";
              $menu .= '<a href="javascript:;" onclick="PartsListAlternativeEditEntry(%value%);">';
                $menu .= "<img src=\"themes/{$this->app->Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\">";
              $menu .= '</a>&nbsp;';
              $menu .= '<a href="javascript:;" onclick="PartsListAlternativeDelete(%value%);">';
                $menu .= "<img src=\"themes/{$this->app->Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\">";
              $menu .= '</a>';
            $menu .= "</td>";
          $menu .= "</tr>";
        $menu .= "</table>";
        
        $sql = "SELECT SQL_CALC_FOUND_ROWS p.id, a.nummer, CONCAT(a.name_de, IF(p.reason != '', CONCAT('<br><i style=color:#999>- Grund: ',p.reason,'</i>'),'')), 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&uuml;');
        $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,'<span style=\"display:none;\" class=\"shopid\">',ao.shop,'</span>'), 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 = "<table><tr><td nowrap><input type=\"submit\" value=\"Export\" name=\"shopexport_%value%\" onclick=\"this.form.action += &apos;#tabs-4&apos;;\"><input type=\"submit\" value=\"Import\" name=\"shopimport_%value%\" onclick=\"this.form.action += &apos;#tabs-4&apos;\">&nbsp;<span class=\"aftershop\" style=\"display:none;\">%value%</span><a href=\"#\" onclick=\"editonlineshop(%value%);\" style=\"position:relative;top:5px;\"><img src=\"themes/{$this->app->Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\"></a>&nbsp;<a href=\"#\" onclick=\"deleteonlineshop(%value%);\" style=\"position:relative;top:5px;\"><img src=\"themes/{$this->app->Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\"></a></td></tr></table>";
        $menu = '<table><tr><td nowrap class="idtd" data-id="%value%">'.
          "<input type=\"hidden\" name=\"shopexport_%value%\" value=\"\" /><img title=\"Artikel exportieren\" class=\"exportbutton hidden\" src=\"themes/{$this->app->Conf->WFconf['defaulttheme']}/images/forward.svg\" border=\"0\" />&nbsp;".
          "<span class=\"placeholderexport hidden\"></span>".
          "<input type=\"hidden\" name=\"shopimport_%value%\" value=\"\" /><img title=\"Artikel importieren\" class=\"importbutton hidden\" src=\"themes/{$this->app->Conf->WFconf['defaulttheme']}/images/back.svg\" border=\"0\" />&nbsp;".
          "<span class=\"placeholderimport hidden\"></span>".
          "<span class=\"aftershop hidden\">%value%</span>".
          "<span class=\"placeholderaftershop\"></span>".
          "<a class=\"editbutton\" href=\"#\" onclick=\"editonlineshop(%value%);\" ><img title=\"Shopverkn&uuml;pfung editieren\" src=\"themes/{$this->app->Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\"></a>&nbsp;".
          "<a class=\"delbutton\" href=\"#\" onclick=\"deleteonlineshop(%value%);\" ><img title=\"Shopverkn&uuml;pfung l&ouml;schen\" src=\"themes/{$this->app->Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\"></a>".
          '</td></tr></table>';
        $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&uuml;');
        $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 = "<table cellpadding=0 cellspacing=0><tr><td nowrap><a href=\"index.php?module=zertifikatgenerator&action=edit&id=%value%\"><img src=\"themes/{$this->app->Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\"></a></td></tr></table>";
        $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((!empty($heading)?count($heading):0)-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[] = (!empty($findcols)?count($findcols):0);
                  $numbercols[] = (!empty($findcols)?count($findcols):0) - 1;
                  break;
                case 'Preis':
                  $findcols[] = 'ROUND(cache.'.$zusatzfeld.',2)';
                  $zusatzcols[] = $this->app->erp->FormatPreis('cache.'.$zusatzfeld,2);
                  $alignright[] = (!empty($findcols)?count($findcols):0);
                  $numbercols[] = (!empty($findcols)?count($findcols):0) - 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&uuml;';
        $width[] = '1%';
        $findcols[] = 'a.id';
        $menucol = (!empty($heading)?count($heading):0) - 1;

        /*
        $heading = array('', 'Bild', 'Nummer', 'Artikel', 'Lagerbestand', 'Projekt', 'Men&uuml;');
        $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&uuml;');
          $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 = '<img src="./themes/'.$this->app->Conf->WFconf['defaulttheme'].'/images/keinbild_dunkel.png" width=50>';
        } else {
          $str = '<img src="./themes/'.$this->app->Conf->WFconf['defaulttheme'].'/images/keinbild_hell.png" width=50>';
        }
        $loading = '<img src="./images/ui-anim_basic_16x16.gif" width=50>';

        $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 = "<table class=\"nopadding\" cellpadding=\"0\" cellspacing=\"0\">";
        $menu .= "<tr>";
        $menu .= "<td>";
        $menu .= "<a href=\"index.php?module=artikel&action=edit&id=%value%\">";
        $menu .= "<img src=\"themes/{$this->app->Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\">";
        $menu .= "</a>";
        $menu .= "</td>";
        $menu .= "<td>";
        $menu .= "<a href=\"#\" onclick=DeleteDialog(\"index.php?module=artikel&action=delete&id=%value%\");>";
        $menu .= "<img src=\"themes/{$this->app->Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\">";
        $menu .= "</a>";
        $menu .= "</td>";
        $menu .= "<td>";
        $menu .= "<a href=\"javascript:;\" onclick=\"ArtikelCopyEdit(%value%);\">";
        $menu .= "<img src=\"themes/{$this->app->Conf->WFconf['defaulttheme']}/images/copy.svg\" border=\"0\">";
        $menu .= "</a>";
        $menu .= "</td>";
        $menu .= "<td>";
        $menu .= "<a href=\"#\" class=\"label-manager\" data-label-column-number=\"4\" data-label-reference-id=\"%value%\" data-label-reference-table=\"artikel\">";
        $menu .= "<span class=\"label-manager-icon\"></span>";
        $menu .= "</a>";
        $menu .= "</td>";
        $menu .= "</tr>";
        $menu .= "</table>";

        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, 
              '<img src=./themes/{$this->app->Conf->WFconf['defaulttheme']}/images/details_open.png class=details>' as open, 
              ";
    
        if($bilder) {
          if(!function_exists('imagejpeg')) {
            $sql .= "'<img src=./themes/{$this->app->Conf->WFconf['defaulttheme']}/images/icon_img_error.png title=\"Keine GD-Erweiterung installiert\" />' as bild,";
          }
          else{
            $sql .="
            IF(
              a.bildvorschau = 'KEINBILD',
              '$str',
              CONCAT(
                '<img class=\"thumbnails',
                if(a.bildvorschau <> '','',' 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,'<strike>',''),
                name_de,
                IF(a.variante AND a.variante_von > 0,CONCAT(' <a href=\"index.php?module=artikel&action=edit&id=',a.variante_von,'\"><font color=#848484>(Variante von ',IFNULL((SELECT tmp.nummer FROM artikel tmp WHERE a.variante_von=tmp.id LIMIT 1),''),')</font></a>'),''),
                IF(a.intern_gesperrt,'</strike>','') 
              ) 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&uuml;');
        $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 = "<a href=\"index.php?module=bestellung&action=pdf&id=%value%\">";
        $menu .= '<img src="./themes/new/images/pdf.svg" border="0">';
        $menu .= '</a>&nbsp;';
        $menu .= "<a href=\"index.php?module=bestellung&action=edit&id=%value%\">";
        $menu .= '<img src="./themes/new/images/edit.svg" border="0">';
        $menu .= '</a>';

        $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&uuml;','');
        $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('<table cellpadding=0 cellspacing=0><tr><td nowrap><a href=\"index.php?module=',b.typ,'&action=edit&id=',b.id,'\" target\"_blank\" ><img src=\"themes/{$this->app->Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\"></a>&nbsp;<a href=\"index.php?module=',b.typ,'&action=pdf&id=',b.id,'\" target\"_blank\" ><img src=\"themes/{$this->app->Conf->WFconf['defaulttheme']}/images/pdf.svg\" border=\"0\"></a></td></tr></table>'),''
            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&uuml;');
        $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 = "<a href=\"index.php?module=artikel&action=edit&id=%value%\"><img src=\"themes/{$this->app->Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\"></a>";

        // 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(SUM(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(SUM(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' ";

        $groupby = " GROUP BY a.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&uuml;');
        $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 = "<table cellpadding=0 cellspacing=0>";
        $menu .= "<tr>";
        $menu .= "<td nowrap>";
        $menu .= '<a href="javascript:;" onclick="ArticleLabelEdit(%value%);">';
        $menu .= "<img src=\"themes/{$app->Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\">";
        $menu .= "</a>&nbsp;";
        $menu .= '<a href="javascript:;" onclick="ArticleLabelDelete(%value%);">';
        $menu .= "<img src=\"themes/{$app->Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\">";
        $menu .= "</a>";
        $menu .= "</td>";
        $menu .= "</tr>";
        $menu .= "</table>";

        $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->service = $this->app->Container->get('ArticleService');

    $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('<label><settings width="30" height="15" distance="3" offsetx="0" offsety="16" />
                <barcode y="1" x="3" size="4" type="1">NUMMER</barcode>
                <line x="3" y="7" size="2">NR NUMMER</line>
                <line x="3" y="10" size="2">NAME_DE</line>
                </label>
    ');
    $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 .= "<option value='".$value['iso']."'>".$value['bezeichnung_de']."</option>";           
      }
      $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->Tpl->Set('CLOSEDISABLE','-->');

    $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',"<input type=\"button\" value=\"Abbrechen\" onclick=\"window.location.href='index.php?module=artikel&action=eigenschaften&id=$sid';\">");
    $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&ouml;nnen neue Preise angelegt werden.');
    $this->app->Tpl->Add('TAB3','Sie bearbeiten gerade eine Eigenschaft. Erst nach dem Speichern k&ouml;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',"<input style='width:5em' type=\"button\" class=\"button button-secondary\" value=\"+".$this->app->erp->GetStandardSteuersatzNormal()."\" onclick=\"this.form.preis.value=parseFloat(this.form.preis.value.split(',').join('.'))*$steuer_normal_komma;\">");
    $this->app->Tpl->Add('PREISRECHNER',"<input style='width:5em' type=\"button\" class=\"button button-secondary\" value=\"-".$this->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',"<br><input style='width:5em' type=\"button\" class=\"button button-secondary\" value=\"+".$this->app->erp->GetStandardSteuersatzErmaessigt()."\" onclick=\"this.form.preis.value=parseFloat(this.form.preis.value.split(',').join('.'))*$steuer_ermaessigt_komma;\">");
      $this->app->Tpl->Add('PREISRECHNER',"<input style='width:5em' type=\"button\" class=\"button button-secondary\" value=\"-".$this->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&amp;action=thumbnail&amp;id=2&amp;bildvorschau=62_100_100
      //$this->app->Tpl->Set('ARTIKELBILD', "<img src=\"index.php?module=dateien&action=send&id=$standardbild\" align=\"left\" width=\"200\" style=\"margin-right:10px; margin-bottom:10px;\">");
      $this->app->Tpl->Set('ARTIKELBILD',
        '<img alt="Artikelbild" src="index.php?module=artikel&action=thumbnail&id='.$id.'&fileid='.$standardbild.'&size=200&direkt=1" align="left" width="200" style="margin-right:10px; margin-bottom:10px;" />'
      );
    }

    if($lagerartikel>0){
      $this->app->Tpl->Set('LAGERLINK', "&nbsp;<a href=\"index.php?module=artikel&action=lager&id=$id\">&rArr;</a>");
    }
    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',"<br>Standardlager: $lagerhauptbezeichung ".(!empty($lagerbezeichnung)?"/ $lagerbezeichnung":'')."<br><br>");

    $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('<a href=\"index.php?module=bestellung&action=edit&id=',b.id,'\" target=\"_blank\">',b.belegnr,'</a>') 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.geliefert<bp.menge ORDER by bp.lieferdatum DESC");
     */

    $table->Query("SELECT DATE_FORMAT(b.datum,'%d.%m.%Y') as datum, CONCAT('<a href=\"index.php?module=bestellung&action=edit&id=',b.id,'\" target=\"_blank\">',b.belegnr,'</a>') 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.geliefert<bp.menge ORDER by bp.lieferdatum DESC");

    $table->DisplayNew('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,'&nbsp;&nbsp;') 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('<div class="info">'.$info.'</div>');
    }
    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('<div class="error">'.$error.'</div>');
      }
      else {
        $error = 'Es gab keine R&uuml;ckmeldung vom Shop! '.$result;
        $msg = $this->app->erp->base64_url_encode('<div class="error">'.$error.'</div>');
      }
    }

    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 = '';
        }
             
        $remote_result = $this->app->remote->RemoteSendArticleList($shop, $artikel, $extartikelnummer);

        if (is_array($remote_result)) {
            $remote_status = $remote_result['status'];
            $remote_message = $remote_result['message'];
        } else if (is_numeric($remote_result)) {
            if ($remote_result == 1) {
                $remote_status = true;
            } else {
                $remote_status = false;
                $remote_message = "Der Artikel konnte nicht zum Shop &uuml;bertragen werden!";
            }
        } else if ($remote_result === null) {
            $remote_status = false;
            $remote_message = "Keine Aktion durchgef&uuml;hrt";
        } else {
            $remote_message = $remote_result;
            if (strpos((string) $remote_result, 'error:') === 0) {
                $remote_status = false;
            } else {
                $remote_status = true;
            }
        }

        if ($remote_status) {
            $msg = $this->app->erp->base64_url_encode('<div class="info">' . $remote_message . '</div>');
        } else {
            $msg = $this->app->erp->base64_url_encode('<div class="error">' . $remote_message . '</div>');
        }

        $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: '.((int) $remote_status)), $remote_message);

        // keine fehlermeldung vom shop
        if ($remote_status) {
            $linkToImporterSettings = '';
            if ($this->app->erp->RechteVorhanden('onlineshops', 'edit')) {
                $url = 'index.php?module=onlineshops&action=edit&id=' . $shop;
                $linkToImporterSettings = "<a href='$url' class='button button-primary'>Zu den Shopeinstellungen</a>";
            }
        }

        $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('<div class="info">Der Artikel wurde im Shop aktualisiert!</div>');
    }
    else{
      $msg = $this->app->erp->base64_url_encode('<div class="error">Es gab einen Fehler beim Aktualisieren des Artikels im Shop!</div>');
    }

    $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 = (!empty($artikelmarkiert)?count($artikelmarkiert):0);
    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&uuml;ck zur &Uuml;bersicht');

    $this->app->Tpl->Set('TAB1','<div class="info">Hier werden alle Artikel die als nicht lagernd Online-Shop markierten Artikel angezeigt.</div>');
    $this->app->Tpl->Set('TAB2','<div class="info">Hier werden alle Artikel die als lagernd im Online-Shop markiert sind jedoch nicht im Lager liegen.</div>');
    $this->app->Tpl->Set('TAB3','<div class="info">Hier werden alle Artikel die als ausverkauf im Online-Shop markierten sind jedoch im Lager liegen.</div>');

    $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 projekt 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',"<div class=\"error\">Artikel (DE) und Menge sind Pflichtfelder!</div>");
          $error = 1;
        }
      } else {
        if($name_de=='' || $menge=='' || $preis=='')
        {
          $this->app->Tpl->Set('MESSAGE',"<div class=\"error\">Artikel (DE), Preis und Menge sind Pflichtfelder!</div>");
          $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 = '<option value="normal"'.(($umsatzsteuer === 'normal') ? ' selected="selected"' : '').'>Standard</option>';
    $umsatzsteuerauswahl .= '<option value="ermaessigt"'.(($umsatzsteuer === 'ermaessigt') ? ' selected="selected"' : '').'>Erm&auml;&szlig;igt</option>';
    $umsatzsteuerauswahl .= '<option value="befreit"'.(($umsatzsteuer === 'befreit') ? ' selected="selected"' : '').'>Befreit</option>';

    $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',"<div class='info'>Sie können hier die Stammdaten durchsuchen oder einen neuen Artikel angelegen <a class='button' id='profisuche-back-button' href='index.php?module={$cmd}&action=positionen&id={$id}'>Abbrechen</a></div>");

    $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(' ','&nbsp;',$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");

	if (!is_null($id)) {
	      $adresse = $this->app->DB->Select("SELECT adresse FROM $smodule WHERE id='$sid' LIMIT 1");
	}

	if (!is_null($module)) {
		if ($this->app->DB->Select("SHOW COLUMNS FROM `$module` LIKE 'waehrung'")) {
		      $waehrung = $this->app->DB->Select("SELECT waehrung FROM $smodule WHERE id='$sid' LIMIT 1");
		}
	}

	if (!is_null($id)) {
	      $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&auml;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',"<table width=\"100%\"><tr><td align=\"right\">Summe offen: $summe St&uuml;ck (Summe EUR: $euro EUR)</td></tr></table>");

    $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((!empty($va)?count($va):0) > 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',"<div class=\"error\">Achtung es gibt f&uuml;r eine Kundengruppe bei einer gleichen Menge den Preis &ouml;fters! Deaktvieren oder l&ouml;schen Sie doppelte Preise!</div>");
    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 .= "<option value=\"".$value['waehrung']."\">".$value['waehrung'].'</option>';
      }
      $this->app->Tpl->Set('STANDARDWAEHRUNGV', $standardwaehrung);
      if($standardwvorhanden == false){
        $waehrungenstringvk .= "<option value=\"".$standardwaehrung.'>'.$standardwaehrung.'</option>';
      }      
    }else{
      if($standardwaehrung != ''){
        if($standardwaehrung !== 'EUR' && $standardwaehrung !== 'USD' && $standardwaehrung !== 'CAD' && $standardwaehrung !== 'CHF' && $standardwaehrung !== 'GBP'){
          $waehrungenstringvk .= "<option value=".$standardwaehrung.' selected>'.$standardwaehrung.'</option>';
        }
        $this->app->Tpl->Set('STANDARDWAEHRUNGV', $standardwaehrung);
      }else{
          $this->app->Tpl->Set('STANDARDWAEHRUNGV', 'EUR');
      }

      $waehrungenstringvk .= "<option value='EUR'>EUR</option>
                              <option value='USD'>USD</option>
                              <option value='CAD'>CAD</option>
                              <option value='CHF'>CHF</option>
                              <option value='GBP'>GBP</option>";
    }

    
    $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',"<div class=\"warning\">Kundenspezifische Preise werden immer priorisiert!</div>");
    } 
    else {

      if($this->app->erp->GetStandardMarge() > 0)// && $stueckliste!="1")
      {
        if($max_preis <>0){
          $this->app->Tpl->Add('TAB1', "<div class=\"warning\">Empfohlener Verkaufspreis netto (f&uuml;r teuersten EK Preis): <b>$max_preis $waehrung</b> bzw. als Aufschlagsrechnung $max_preis2 $waehrung</div>");
        }

        if($min_preis <>0){
          $this->app->Tpl->Add('TAB1', "<div class=\"warning\">Empfohlener Verkaufspreis netto (f&uuml;r billigsten EK Preis): <b>$min_preis $waehrung</b> bzw. als Aufschlagsrechnung $min_preis2 $waehrung</div>");
        }
        
        
        if($max_preis <>0){
          $this->app->Tpl->Add('TAB2', "<div class=\"warning\">Empfohlener Verkaufspreis netto (f&uuml;r teuersten EK Preis): <b>$max_preis $waehrung</b> bzw. als Aufschlagsrechnung $max_preis2 $waehrung</div>");
        }
        if($min_preis <>0){
          $this->app->Tpl->Add('TAB2', "<div class=\"warning\">Empfohlener Verkaufspreis netto (f&uuml;r billigsten EK Preis): <b>$min_preis $waehrung</b> bzw. als Aufschlagsrechnung $min_preis2 $waehrung</div>");
        }
      }
    }

    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&ouml;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->app->Tpl->Set('CLOSEDISABLE','-->');

    $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',"<input type=\"button\" value=\"Abbrechen\" onclick=\"window.location.href='index.php?module=artikel&action=verkauf&id=$sid';\">");

    $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&ouml;nnen neue Preise angelegt werden.');
    $this->app->Tpl->Add('TAB3','Sie bearbeiten gerade einen Verkaufspreis. Erst nach dem Speichern k&ouml;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 .= "<option value=\"".$value['waehrung']."\">".$value['waehrung'].'</option>';
      }
      $this->app->Tpl->Set('STANDARDWAEHRUNG', $standardwaehrung);
      if($standardwvorhanden == false){
        $waehrungenstringek .= "<option value=\"".$standardwaehrung.">".$standardwaehrung.'</option>';
      }      
    }else{
      if($standardwaehrung != ""){
        if($standardwaehrung !== 'EUR' && $standardwaehrung !== 'USD' && $standardwaehrung !== 'CAD' && $standardwaehrung !== 'CHF' && $standardwaehrung !== 'GBP'){
          $waehrungenstringek .= '<option value='.$standardwaehrung.' selected>'.$standardwaehrung.'</option>';
        }
        $this->app->Tpl->Set('STANDARDWAEHRUNG', $standardwaehrung);
      }else{
          $this->app->Tpl->Set('STANDARDWAEHRUNG', 'EUR');
      }

      $waehrungenstringek .= "<option value='EUR'>EUR</option>
                              <option value='USD'>USD</option>
                              <option value='CAD'>CAD</option>
                              <option value='CHF'>CHF</option>
                              <option value='GBP'>GBP</option>";
    }

    $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('&apos;', "\'", $name_de);

    $this->app->Tpl->Set('BUTTONLADEN',"<input type=\"button\" class=\"button button-secondary\" value=\"Standard laden\" 
        onclick=\"
        $('#editEinkaufspreis').find('#adresse').val('$standardlieferant');
        $('#editEinkaufspreis').find('#standard').prop('checked', 1);
        $('#editEinkaufspreis').find('#bezeichnunglieferant').val('".htmlspecialchars($bereinigtername)."');
        $('#editEinkaufspreis').find('#ab_menge').val('1');
        var today = new Date();
        var dd = today.getDate();
        var mm = today.getMonth()+1; //January is 0!
        var yyyy = today.getFullYear();
        if(dd<10){dd='0'+dd} if(mm<10){mm='0'+mm} today = dd+'.'+mm+'.'+yyyy;
        $('#editEinkaufspreis').find('#preis_anfrage_vom').val(today);
        $('#editEinkaufspreis').find('#bestellnummer').val('$herstellernummer');
        \">");

    //$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 = '<br><div class="info">Nicht vorhanden, da es keine St&uuml;ckliste ist.</div>';
      $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);

	if (empty($kursusd)) {
		$kursusd = 0;
	}	
	if (empty($kurschf)) {
		$kurschf = 0;
	}	
          
      $this->app->Tpl->Set('TAB5KALKULATION','<div class="info">Dies ist nur ein grober Richtpreis aus dem kleinsten und größten Einkaufspreis.</div>');

      $kalkulationstabelle = "<table class='mkTable'>";
      $kalkulationstabelle .= "<tr>";
      $kalkulationstabelle .= "<td><b>Artikel</b></td>";
      $kalkulationstabelle .= "<td><b>Nummer</b></td>";
      $kalkulationstabelle .= "<td><b>Menge</b></td>";
      $kalkulationstabelle .= "<td><b>Lieferant</b></td>";
      $kalkulationstabelle .= "<td><b>Bestellnummer</b></td>";
      $kalkulationstabelle .= "<td><b>Basierend auf EK (Min)</b></td>";
      $kalkulationstabelle .= "<td><b>Basierend auf EK (Max)</b></td>";
      $kalkulationstabelle .= "<td><b>Kalkulierter EK</b></td>";
      $kalkulationstabelle .= "</tr>";

	$sql_query = "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";

      $artikelkalkulation = $this->app->DB->SelectArr($sql_query);

      $calculatedPurchasePriceService = $this->app->Container->get('PurchasePriceService');

      $kalkulierterekgesamt = 0;

      foreach($artikelkalkulation as $artikelindex => $kalkulierterArtikel){
        $kalkulationstabelle .= "<tr>";
        $kalkulationstabelle .= "<td>".$kalkulierterArtikel['artikelname']."</td>";
        $kalkulationstabelle .= "<td>".$kalkulierterArtikel['nummer']."</td>";

        $runden = true;
        if($kalkulierterArtikel['menge'] != round($kalkulierterArtikel['menge']))$runden = false;

        if($runden) {
          $kalkulierterArtikel['menge'] = round($kalkulierterArtikel['menge']);
        }


        $kalkulationstabelle .= "<td>".$kalkulierterArtikel['menge']."</td>";
        $kalkulationstabelle .= "<td>".$kalkulierterArtikel['lieferant']."</td>";
        $kalkulationstabelle .= "<td>".$kalkulierterArtikel['bestellnummer']."</td>";
        $kalkulationstabelle .= "<td align='right'>".$kalkulierterArtikel['ekmin']."</td>";
        $kalkulationstabelle .= "<td align='right'>".$kalkulierterArtikel['ekmax']."</td>";
        $berechneterEK = 0;
        $berechneterEK += $calculatedPurchasePriceService->calculateCalculatedPurchasePrice($kalkulierterArtikel['artikelid'], $kalkulierterArtikel['menge']);
        $kalkulationstabelle .= "<td align='right'>".number_format($berechneterEK,4,',','.')."</td>";
        $kalkulierterekgesamt += $berechneterEK;
        $kalkulationstabelle .= "</tr>";
      }

      $kalkulationstabelle .= "<tr>";
      $kalkulationstabelle .= "<td></td>";
      $kalkulationstabelle .= "<td></td>";
      $kalkulationstabelle .= "<td></td>";
      $kalkulationstabelle .= "<td></td>";
      $kalkulationstabelle .= "<td></td>";
      $kalkulationstabelle .= "<td align='right'>&Sigma; ".number_format($preis_min_ek,4,',','.')."</td>";
      $kalkulationstabelle .= "<td align='right'>&Sigma; ".number_format($preis_max_ek,4,',','.')."</td>";
      $kalkulationstabelle .= "<td align='right'>&Sigma; ".number_format($kalkulierterekgesamt,4,',','.')."</td>";
      $kalkulationstabelle .= "</tr>";

      $kalkulationstabelle .= "</table>";

      $this->app->Tpl->Add('TAB5KALKULATION', $kalkulationstabelle);


//        $this->app->Tpl->Add('TAB5KALKULATION',"<div class=\"info\">St&uuml;cklisten Grundpreis bei Menge 1: <b>$preis EUR - $preis_max EUR (Anzahl Positionen $pos / Teile $teile)</b></div>");
      $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 .= "<td class=\"gentable\">".$array_mindestmengen[$j_am].'</td>';

        if((!empty($fehlende_preise)?count($fehlende_preise):0) > 0) {
          $tpl3 .= "<td class=\"gentable;\"><font color=red>".(!empty($fehlende_preise)?count($fehlende_preise):0).'</font></td>';
          $tpl2 .= '<td class="gentable">-</td>';
        }
        else {
          $tpl3 .= '<td class="gentable">-</td>';
          $tpl2 .= '<td class="gentable">'.number_format($preis,2,',','').'</td>';
        }

        $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 .="<a style=\"font-weight:normal;font-size:6pt;\" href=\"index.php?module=artikel&action=einkauf&id=".$fehlende_preise[$jj]['artikel']."\" 
            target=\"_blink\">$nummer</a><br>";
            //target=\"_blink\">$nummer/$preis_min/$preis_max</a><br>";

          $summe_fehlende_preise_max = $summe_fehlende_preise_max + $preis_max;
          $summe_fehlende_preise_min = $summe_fehlende_preise_min + $preis_min;
        }
        $teile_tpl .="<td nowrap>$fehlende_artikel_links</td>";

        if((!empty($fehlende_preise)?count($fehlende_preise):0) <=0){
          $tpl22 .='<td>-</td>';
        } else {
          $tpl22 .='<td><s>'.number_format($summe_fehlende_preise_max+$preis,2,",","")."</s></td>";
        }
        //$tpl4 .='<td>'.number_format($summe_fehlende_preise_min,2,',','').'</td>';
        //$tpl5 .='<td>'.number_format($summe_fehlende_preise_max,2,',','').'</td>';
      }

      $this->app->Tpl->Add('TABELLE',"<tr style=\"background-color:#e0e0e0;display:;\"><td>Anzahl</td>".$tpl.'</tr>');

      $this->app->Tpl->Add('TABELLE','<tr><td>Gesamtpreis</td>'.$tpl2.'</tr>');

      $this->app->Tpl->Add('TABELLE',"<tr style=\"background-color:#e0e0e0;display:;\"><td nowrap>Anzahl fehlende Preise f&uuml;r Staffel&nbsp;</td>".$tpl3."</tr>");

      $this->app->Tpl->Add('TABELLE',"<tr><td>Zwischensumme (falls Preise fehlen)</td>".$tpl22."</tr>");

      if(!empty($artikel_ohne_ek_eins)) {
        $this->app->Tpl->Add('TABELLE',"<tr valign=\"top\"><td>Fehlende Preise f&uuml;r Preisstaffel bei Artikel</td>".$teile_tpl."</tr>");
        $this->app->Tpl->Set('TAB5',"
            <table width=\"100%\"><tr><td width=\"100\"><b>Artikel-Nr.</b></td><td><b>Name</b></td><td width=100><b>Aktion</b></td></tr>");
        sort($artikel_ohne_ek_eins);
        $cartikel_ohne_ek_eins = (!empty($artikel_ohne_ek_eins)?count($artikel_ohne_ek_eins):0);
        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',"<tr style=\"background-color:$color;\"><td>".$artikel_arr[0]['nummer']."</td><td>".$artikel_arr[0]['name_de']."</td><td><a href=\"index.php?module=artikel&action=einkauf&id=".$artikel_arr[0]['id']."\" target=\"_blank\"><img src=\"./themes/new/images/edit.svg\"></a></td></tr>");
        }
        $this->app->Tpl->Add('TAB5','</table>');
      }
      if(!$this->app->erp->ModulVorhanden('produktion'))
      {
        //$this->app->Tpl->Parse(TAB5,"rahmen70.tpl");
        $this->app->Tpl->Set('TABELLE',"<div class=\"info\">Die Preismatrix (Kosten Stueckzahl ab&auml;ngig von Einkaufspreisen ist nur mit dem Modul Produktion verf&uuml;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',"<div class=\"info\">Der Hauptlieferant ist <b>$hauptlieferant</b></div>");

    //$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->app->Tpl->Set('CLOSEDISABLE','-->');
    $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',"<input type=\"button\" value=\"Abbrechen\" onclick=\"window.location.href='index.php?module=artikel&action=einkauf&id=$sid';\">");

    $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&ouml;nnen neue Preise angelegt werden.');
    $this->app->Tpl->Add('TAB3','Sie bearbeiten gerade einen Einkaufspreis. Erst nach dem Speichern k&ouml;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&ouml;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;
    }

    $idnew = $this->service->CopyArticle($id, $einkaufspreise, $verkaufspreise, $dateien, $eigenschaften, $anweisungen, $stuecklisten, $freifelderuebersetzung);
    echo json_encode(array('status'=>1,'url'=>'index.php?module=artikel&action=edit&id='.$idnew));
    $this->app->ExitXentral();
  }

  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','<div class="warning">F&uuml;r diesen Artikel l&auml;uft aktuell eine Inventur</div>');
    }
    $check = $this->app->DB->Select("SELECT trim(SUM(menge))+0 FROM zwischenlager WHERE artikel='$id'");
    if($check > 0)
    { 
      $this->app->Tpl->Add('MESSAGE','<div class="warning">Hinweis: Es befinden sich noch '.$check.' St&uuml;ck des Artikels im Zwischenlager!</div>');
    }

    $this->ArtikelMenu();
    $this->app->Tpl->Add('TAB1','<h2>Lagerbestand</h2>');

    // 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(' <i style=\"color:red;\">(Inventurwert: ',(trim(lpi.inventur)+0),')</i>'))) 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 .= "<a onclick=\"var menge =  prompt('St&uuml;ckzahl der Artikel die aus diesem Regal genommen werden sollen:',1); var grund =  prompt('Auslagerungsgrund:','Korrektur'); if(parseFloat(menge.replace(',','.')) > 0 && (grund!=null && grund!='')) { window.location.href='index.php?module=artikel&action=auslagern&id=$id&lid=%value%&menge='+menge+'&grund='+grund;}\" href=\"#\"><img src=\"./themes/[THEME]/images/loeschen.png\" border=\"0\"></a>";
      }

      if($this->app->erp->RechteVorhanden('artikel','einlagern')){
        $submenu .= "<a onclick=\"var menge =  prompt('St&uuml;ckzahl der Artikel in dieses Regal legen:',1); var grund =  prompt('Einlagerungsgrund:','Anpassung im Artikel'); if(parseFloat(menge.replace(',','.')) > 0 && (grund!=null && grund!='')) { window.location.href='index.php?module=artikel&action=einlagern&id=$id&lid=%value%&menge='+menge+'&grund='+grund;}\" href=\"#\"><img src=\"./themes/[THEME]/images/einlagern.png\" border=\"0\"></a>";
      }


      if($this->app->erp->RechteVorhanden('artikel','umlagern')){
        $submenu .="<a onclick=\"var menge =  prompt('St&uuml;ckzahl der Artikel in dieses Regal umlagern:',%field1%); var grund =  prompt('Grund:','Anpassung im Artikel'); if(parseFloat(menge.replace(',','.')) > 0 && (grund!=null && grund!='')) { window.location.href='index.php?module=artikel&action=umlagern&id=$id&lid=%value%&menge='+menge+'&grund='+grund;}\" href=\"#\"><img src=\"./themes/[THEME]/images/forward.svg\" border=\"0\"></a>";
      }

      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',"<center>
          <input type=\"button\" value=\"Einlagern\" onclick=\"window.location.href='index.php?module=lager&action=bucheneinlagern&artikelid=$id&back=artikel'\">
          <input type=\"button\" value=\"Auslagern\" onclick=\"window.location.href='index.php?module=lager&action=buchenauslagern&artikelid=$id&back=artikel'\">
          <input type=\"button\" value=\"Umlagern\" onclick=\"window.location.href='index.php?module=lager&action=buchenauslagern&cmd=umlagern&artikelid=$id&back=artikel'\">
          </center>");
    } else {
      $this->app->Tpl->Add('TAB1',"<center><input type=\"button\" value=\"Artikel in neuen Lagerplatz einlagern\" onclick=\"window.location.href='index.php?module=lager&action=bucheneinlagern&artikelid=$id&back=artikel'\"></center>");
    }
    //    $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','<h2>Reservierungen</h2>');

      // 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('<a onclick=\"var menge = prompt(\'Anzahl Artikel aus Reservierung entfernen:\',',(trim(r.menge)+0),'); if(parseFloat(menge.replace(\',\',\'.\')) > 0) window.location.href=\'index.php?module=artikel&action=ausreservieren&id=$id&lid=',r.id,'&menge=\'+menge;\" href=\"#\"><img src=\"./themes/[THEME]/images/delete.svg\" border=\"0\"></a>'),'') 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','<h2>Offene Auftr&auml;ge</h2>');
      // easy table mit arbeitspaketen YUI als template 
      $table = new EasyTable($this->app);
      $table->Query("SELECT 
          CONCAT('<a href=\"index.php?module=auftrag&action=edit&id=',a.id,'\">',a.belegnr,'</a>') 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'),'&nbsp;
            <!--<a onclick=\"var menge =  prompt(\'Anzahl Artikel aus Reservierung entfernen:\',1); if(menge > 0) window.location.href=\'index.php?module=artikel&action=ausreservieren&id=$id&lid=',
            (SELECT li.id FROM lager_reserviert li WHERE li.objekt='auftrag' AND li.parameter=a.id AND li.artikel='$id' LIMIT 1)
            ,'&menge=\'+menge;\" href=\"#\"><img src=\"./themes/[THEME]/images/delete.svg\" border=\"0\"></a>-->
            ') as reserviert,
          a.zahlungsweise, adr.kundenfreigabe as freigabe, CONCAT(a.name, ' ',a.ansprechpartner
            ,'<br>', 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('<a href=\"index.php?module=bestellung&action=edit&id=',
            (SELECT b.id 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)
            ,'\" target=\"_blank\">',
            (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),'</a>'),'-') 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',"<a href=\"index.php?module=bestellung&action=edit&id=%value%\">Bestellung</a>");
      $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','<h2>Offene Bestellungen</h2>');

      $table = new EasyTable($this->app);
      $table->Query("SELECT DATE_FORMAT(b.datum,'%d.%m.%Y') as datum, CONCAT('<a href=\"index.php?module=bestellung&action=edit&id=',b.id,'\" target=\"_blank\">',b.belegnr,'</a>') as 'bestellung Nr.', 
      if(
      (SELECT nummer from auftrag_position where id=bp.auftrag_position_id LIMIT 1),CONCAT('<a href=\"index.php?module=auftrag&action=edit&id=',
      (SELECT auftrag from auftrag_position where id=bp.auftrag_position_id LIMIT 1),'\" target=\"_blank\">',
      (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),'</a>'),'-') 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.geliefert<bp.menge ORDER by bp.lieferdatum DESC");
      if($table->datasets)
      {
        $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',"<a href=\"index.php?module=bestellung&action=pdf&id=%value%\"><img src=\"./themes/new/images/pdf.svg\" border=\"0\"></a>&nbsp;      <a href=\"index.php?module=bestellung&action=edit&id=%value%\" target=\"_blank\"><img src=\"./themes/new/images/edit.svg\" border=\"0\"></a>");
      $this->app->Tpl->Parse('TAB1','rahmen70.tpl');
    }   
    $this->app->Tpl->Set('INHALT','');
    $this->app->Tpl->Add('TAB1','<h2>Lagerplatz Bewegungen</h2>');
    // 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','<option value="'.$v['id'].'">'.round($v['menge'],2).': '.round($v['gewicht'],2).' kg '.
        round($v['breite'],2).' x '.round($v['laenge'],2).' x '.round($v['hoehe'],2).' cm'.(
        $v['menge2'] > 1?' (in VPE '.round($v['menge2'],2).': '.round($v['gewicht2'],2).' kg '.
        round($v['breite2'],2).' x '.round($v['laenge2'],2).' x '.round($v['hoehe2'],2).' cm'.')':''
        ).'</option>');
      }
    }
    $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&ouml;scht', "", 0);
      }else{
        $this->app->erp->Chargenlog($artikel, $lager_platz, 0, $data['charge'], $menge, 'Charge gel&ouml;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&ouml;scht');
            }
          }
        }
        $this->app->erp->MHDLog($artikel, $lager_platz, 0, $data[0]['mhddatum'], $menge, 'Charge und / oder MHD gel&ouml;scht', "", 0, $data[0]['charge'], 0);
      }else{
        $this->app->erp->MHDLog($artikel, $lager_platz, 0, $data[0]['mhddatum'], $menge, 'MHD gel&ouml;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','<div class="error">Fehler: Bitte Menge, MHD und Lager angeben!</div>');        
      }
    }

    $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',"<div class=error>Achtung: Es sind ".($menge-$mhd)." Eintr&auml;ge zu wenig vorhanden!</div>"); 
    else if ($menge < $mhd)
      $this->app->Tpl->Add('TAB1',"<div class=error>Achtung: Es sind ".($mhd-$menge)." Eintr&auml;ge zu viel vorhanden!</div>");  

    $this->app->Tpl->Add('TAB1',"<br><center><form method=\"post\" action=\"\">Menge:&nbsp;<input name=\"menge\" type=\"text\" size=\"5\" value=\"1\">&nbsp;MHD:&nbsp;<input type=text size=\"15\" id=\"datum\" name=\"datum\">&nbsp;Lager:&nbsp;<input type=\"text\" size=\"20\" id=\"lagerplatz\" name=\"lagerplatz\">&nbsp;Charge (optional):&nbsp;<input type=text size=\"15\" id=\"charge\" name=\"charge\">&nbsp;<input type=\"submit\" value=\"fehlende Eintr&auml;ge anlegen\" name=\"anlegen\"></form></center>");


    $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 <a target="_blank" href="index.php?module=artikel&action=edit&id='.$v['artikel'].'">'.$v['nummer'].' '.(strlen($v['name_de']) < 30?$v['name_de']:(mb_substr($v['name_de'],0,27).'...')).'</a>';
          $$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 <a target="_blank" href="index.php?module=artikel&action=edit&id='.$v['artikel'].'">'.$v['nummer'].' '.(strlen($v['name_de']) < 30?$v['name_de']:(mb_substr($v['name_de'],0,27).'...')).'</a>';
            $$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&uuml;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',"<center>");
    $this->app->Tpl->Add('TAB1',"<input type='button' name='neuestueckliste' class='btnGreen' style='width:10em; height:3em; text-align:center; line-height:1em' onclick=\"StuecklisteNeuePositionEdit(0)\" value='&#10010; Neue Position'>");
    $this->app->Tpl->Add('TAB1',"<input type='button' style='width:10em; height:3em; text-align: center; line-height:1em' onclick=\"if(!confirm('Wirklich St&uuml;ckliste leeren?')) return false; else window.location.href='index.php?module=artikel&action=stuecklisteempty&id=$id';\" value='St&uuml;ckliste leeren'>");
    //$this->app->Tpl->Add('TAB1',"<button onclick=\"if(!confirm('Wirklich St&uuml;ckliste leeren?')) return false; else window.location.href='index.php?module=artikel&action=stuecklisteempty&id=$id';\">St&uuml;ckliste leeren</button>");
    $this->app->Tpl->Add('TAB1',"<input type='button' style='width:10em; height:3em; text-align: center; line-height:1em' onclick=\"window.location.href='index.php?module=artikel&action=stuecklisteexport&id=$id';\" value='St&uuml;ckliste als CSV'>");
    //$this->app->Tpl->Add('TAB1',"<button onclick=\"window.location.href='index.php?module=artikel&action=stuecklisteexport&id=$id';\">St&uuml;ckliste als CSV</button>");
    $this->app->Tpl->Add('TAB1',"</center><br><br>");

    $this->app->Tpl->Add('TAB1',"<div class=\"info\">Aktuell k&ouml;nnen $stueck St&uuml;ck produziert werden (<a href=\"index.php?module=artikel&action=stuecklisteetiketten&id=".$id."\">Etiketten f&uuml;r St&uuml;ckliste drucken</a>)</div>");
    $this->app->Tpl->Add('TAB1','<style>');
    $icons = array('et'=>'./themes/'.$this->app->Conf->WFconf['defaulttheme'].'/images/dokumentoffen.png','it'=>'./themes/'.$this->app->Conf->WFconf['defaulttheme'].'/images/dokumentok.png','bt'=>'./themes/'.$this->app->Conf->WFconf['defaulttheme'].'/images/dialog_o.gif');
    foreach($icons as $k => $icon)
    {
      $this->app->Tpl->Add('TAB1','
      span.img'.$k.' {
        background-image:url('.$icon.') !important;
        
      }
      ');
      
    }

    $this->app->YUI->AutoComplete('artikel', 'artikelnummerstueckliste');
    //$this->app->YUI->AutoComplete('alternative', 'artikelnummer');

    $this->app->Tpl->Add('TAB1','</style>');
    
    if($this->app->erp->IstStuecklistenZirkel($id))
    {
      $this->app->Tpl->Add('MESSAGE', '<div class="error">{|Diese St&uuml;ckliste enth&auml;lt Artikel die einen Zirkelbezug verursachen!|}</div>');
    }

    $addAlternative = '<a href="javascript:;" onclick="PartsListAlternativeEditSave();">';
    $addAlternative .= "<img src=\"themes/{$this->app->Conf->WFconf['defaulttheme']}/images/pluspaket_gruen_kl.png\" border=\"0\">";
    $addAlternative .= '</a>';

    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){
      $sql = "SELECT avon.nummer as stuecklistevon, 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 LEFT JOIN artikel avon ON avon.id=s.stuecklistevonartikel WHERE s.stuecklistevonartikel='$id'";
      $result = $this->app->DB->SelectArr($sql);
    }
    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&uuml;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, trim(s.menge)+0 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',"<h2>Statistik Mengen</h2><br>");

    $summe['jahr']='<b>Summe</b>';
    $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&auml;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>";
      $table->DisplayNew('TAB1','Bestellungen','noAction');
    } else {
      $this->app->Tpl->Set('TAB1','<div class="info">Zu dem Artikel gibt es noch keine Statistiken, da dieser noch nicht verkauft wurde!</div>');
    }

    $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','<!--');
      $this->app->Tpl->Set('NACHPRODUKTION','-->');
    }
    $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->Set('NACH'.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("<div class=\"warning\">Der Artikel \"$name_de\" wurde $menge mal eingelagert.</div>");
    } else {
      $msg = $this->app->erp->base64_url_encode("<div class=\"error\">Fehler: Unbekannte oder falsche Menge: $menge bei Artikel \"$name_de\". Die Artikel wurden nicht eingelagert!</div>");
    }
    

    $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("<div class=\"error\">Der Artikel \"$name_de\" wurde nicht ausgelagert! Er ist nicht so oft im Lager!</div>");
      } else {
        $msg = $this->app->erp->base64_url_encode("<div class=\"warning\">Der Artikel \"$name_de\" wurde $menge mal ausgelagert.</div>");
      }
    }
    else {
      $msg = $this->app->erp->base64_url_encode("<div class=\"error\">Fehler: Unbekannte oder falsche Menge: $menge bei Artikel \"$name_de\". Die Artikel wurden nicht ausgelagert!</div>");
    }
    $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("<div class=\"error\">Die Reservierung \"$name_de\" wurde $menge mal entfernt.</div>");                                                                                                  
    $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'=>["<div class=\"error\">Der Artikel \"$name_de\" und der Lagerbestand wurde gel&ouml;scht</div>"]];
    }
    $msg = [];
    if($anzahl > 0){

      $msg[] = "<div class=\"error\">Der Artikel \"$name_de\" ist Belegen eingebucht. Gefunden: $anzahl</div>";
    }

    if($anzahl_stueckliste > 0){
      $msg[] = "<div class=\"error\">Der Artikel \"$name_de\" ist in $anzahl_stueckliste St&uuml;ckliste(n) vorhanden.</div>";
    }

    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 '<option value="'.$k.'">'.$v.'</option>';
      }
      $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',"<input type=\"button\" value=\"Abbrechen\" onclick=\"window.location.href='index.php?module=artikel&action=list';\">");
    //    $this->app->Tpl->Set(KURZUEBERSCHRIFT,"Artikel anlegen");
    $this->app->erp->MenuEintrag('index.php?module=artikel&action=list','Zur&uuml;ck zur &Uuml;bersicht');
    parent::ArtikelCreate();
  }

  function ArtikelListMenu()
  {
    $this->app->erp->MenuEintrag('index.php?module=artikel&action=list','&Uuml;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','<tr><td>'.$shop['bezeichnung'].':</td><td><input type="checkbox" name="shop[]" value="'.$shop['id'].'" /></td></tr>');
          }
          $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('<div class="info">Es wurden '.($anz > 0?$anz:'keine') .' Artikel zum &Uuml;bertragen &uuml;bergeben'.($allready > 0?' (Es sind bereits '. $allready.' Eintr&auml;ge vorhanden)':'').'.</div>');
      $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');

    $this->app->YUI->AutoComplete('typ', 'artikelkategorienfull');

    $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','<table width="100%"><tr><td valign="top">'.$this->app->Tpl->Parse('return', 'artikel_artikelbaum.tpl',true).'</td><td valign="top">');
    }
    $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',"
      <script>
      var ttimeouthandle = null;
      var tintervalhandle = null;
      function donextthumb()
      {
        if(tintervalhandle)clearInterval(tintervalhandle);
        if(ttimeouthandle)clearTimeout(ttimeouthandle);
        
        $('#artikeltabellebilder').find('img.tocheck').first().each(function()
        {
          var el = this;
          var aid = 0;
          var todo = false;
          var isrc = $(this).attr('src');
          var urla = isrc.split('?');
          var vorschau = '';
          if(typeof urla[1] != 'undefined')
          {
            var urlattr = urla[1].split('&');
            $.each(urlattr, function(k,v){
              var kv = v.split('=');
              if(kv[0] === 'bildvorschau')
              {
                if(typeof kv[1] != 'undefined')
                {
                  if(kv[1] == '')
                  {
                    vorschau = kv[1];
                    todo = true;
                  }
                }else{
                  todo = true;
                }
              }
              if(kv[0] === 'id')
              {
                if(typeof kv[1] != 'undefined')
                {
                  if(kv[1] != '')
                  {
                    aid = kv[1];
                  }
                }
              }
            });
          }
          
          if(todo && aid > 0)
          {
            $(this).toggleClass('tocheck',false);
            $.ajax({
            url: 'index.php?module=artikel&action=thumbnail&id='+aid,
            type: 'POST',
            dataType: 'json',
            data: {ajaxthumbnail:1, bildvorschau:vorschau}
            }).done( function(data) {
              if (typeof data == 'undefined' || data == null || typeof data.status == 'undefined' || data.status == 0)
              {
                //$('#artikeltabellebilder').after(aid+' fehler ');
                $(el).toggleClass('tocheck',false);
              } else {
                if(typeof data.reload != 'undefined' && data.reload == 1 && typeof data.bildvorschau != 'undefined')
                {
                  var zusatz = data.bildvorschau;
                  $(el).attr('src','index.php?module=artikel&action=thumbnail&id='+aid+'&bildvorschau='+ zusatz);
                  $(el).toggleClass('tocheck',false);
                  ttimeouthandle = setTimeout(function(){donextthumb();},750);
                  return;
                }else{
                  if(typeof data.bildvorschau != 'undefined')
                  {
                    var zusatz = data.bildvorschau;
                    $(el).attr('src','index.php?module=artikel&action=thumbnail&id='+aid+'&bildvorschau='+ zusatz);
                    $(el).toggleClass('tocheck',false);
                  }
                }
              }
            }).fail( function( jqXHR, textStatus ) {
              
              $(el).toggleClass('tocheck',false);
            });
            ttimeouthandle = setTimeout(function(){donextthumb();},1000);
            return;
          }else{
            
          }
        });
        tintervalhandle = setInterval(function(){donextthumb();},2000);
      }
      $(document).ready(function() {
        tintervalhandle = setInterval(function(){donextthumb();},1000);
      });
      </script>
      ");
      
      
    } 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 .= '<table class="mkTable">';

    foreach($hw[$keys[$lvl]] as $k => $v)
    {
      $html .= '<tr><td>'.$k.'</td><td>';

      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 == (!empty($hw)?count($hw):0) -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 < (!empty($hw)?count($hw):0) -1) {

        $html .= $this->ArtikelgenEigenschaften($hw, $produkte, $foundnew , $lvl +1);
      }
      $html .= '</td></tr>';
    }

    $html .= '</table>';
    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&uuml;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 ($tmp[0]['matrixprodukt']==1) {
          $this->app->erp->MenuEintrag("index.php?module=matrixprodukt&action=artikel&id=$id", 'Matrixprodukt');
        }
        $this->app->erp->MenuEintrag("index.php?module=artikeltexte&action=list&artikel=$id",'&Uuml;bersetzung');

        $this->app->erp->MenuEintrag("index.php?module=artikel&action=baum&id=$id",'Artikelbaum');

        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&uuml;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&uuml;ck zur &Uuml;bersicht');

      }
    }
    $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','<!--');
      $this->app->Tpl->Set('NACHMATRIX','-->');
    }
    if(!$this->app->erp->ModulVorhanden('tagespreise'))
    {
      $this->app->Tpl->Set('VORTAGESPREISE','<!--');
      $this->app->Tpl->Set('NACHTAGESPREISE','-->');
    }
    $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 === (!empty($shops)?count($shops):0))
            {
              $return['hideallimportplaceholder'];
            }
            if($canexport === 0 || $canexport === (!empty($shops)?count($shops):0))
            {
              $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','<input type="button" class="btnGreen" value="{|Neuer Eintrag|}" onclick="editonlineshop(0);" />');
      $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('DISABLECLOSETEXTE','-->');
      $this->app->Tpl->Set('DISABLEOPENSHOP','<!--');
      $this->app->Tpl->Set('DISABLECLOSESHOP','-->');
      $this->app->Tpl->Set('DISABLEOPENSTOCK','<!--');
      $this->app->Tpl->Set('DISABLECLOSESTOCK','-->');
    }

    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','<span id="shoptabelleafter"></span>');
    
    //$shop= $this->app->DB->Select("SELECT shop FROM artikel WHERE id='$id' LIMIT 1");

    $this->app->Tpl->Set('ABBRECHEN',"<input type=\"button\" value=\"Abbrechen\" onclick=\"window.location.href='index.php?module=artikel&action=list';\">");

    if($lagerartikel=='1' && $juststueckliste=='1')
    {
      $this->app->Tpl->Add('MESSAGE','<div class="error">Dieser Artikel ist als Lagerartikel und <i>Explodiert im Auftrag</i> markiert. Bitte nur eine Option w&auml;hlen!</div>');
    }

    $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','<input type="text" name="" readonly style="background-color:#eee; border-color:#ddd;" size="70" maxlength="60" value="'.$artikel_de_anzeige.'">');
    $this->app->Tpl->Set('KURZTEXT_DE_ANZEIGE','<textarea readonly rows="2" cols="70" readonly style="background-color:#eee; border-color:#ddd;">'.$kurztext_de_anzeige.'</textarea>');
    $this->app->Tpl->Set('ARTIKELBESCHREIBUNG_DE_ANZEIGE','<textarea style="background-color:#eee; border-color:#ddd;" readonly rows="5" cols="70" style="color:grey" name="artikelbeschreibung_de_anzeige" id="artikelbeschreibung_de_anzeige">'.$artikelbeschreibung_de_anzeige.'</textarea>');

    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 = '<option value="0">-</option>';
    $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 .="<option value=\"{$etiketten_tmp[$i]['id']}\" $mark>{$etiketten_tmp[$i]['name']}</option>";
    }
    $this->app->Tpl->Set('AUTODRUCKETIKETT',$autodrucketiketttpl);

    $etiketten = $this->app->erp->GetSelectEtiketten('artikel_klein',$etikettenauswahl);
    if($etiketten=='') {
      $etiketten='<option>Standard</option>';
    }

    $drucker = $this->app->erp->GetSelectEtikettenDrucker($etikettendrucker); 

    $this->app->Tpl->Set('FORMULAR',"<form action=\"\" method=\"post\"><table class=\"mkTableFormular\">
      <tr><td>Menge:</td><td><input type=\"text\" name=\"menge\" value=\"1\">&nbsp;<input type=\"submit\" value=\"Drucken\" class=\"btnBlue\"></td></tr>
      <tr><td>Etikett:</td><td><select name=\"etikettenauswahl\">".$etiketten."</select></td></tr>
      <tr><td>Drucker:</td><td><select name=\"etikettendrucker\">".$drucker."</select></td></tr>");
    $mhdartikel = $this->app->DB->Select("SELECT mindesthaltbarkeitsdatum FROM artikel WHERE id = '$id' LIMIT 1");
    if($mhdartikel)
    {
      $this->app->Tpl->Add('FORMULAR',"<tr><td>Mindeshaltbarkeitsdatum:</td><td><input type=\"text\" id=\"mhd\" name=\"mhd\" value=\"\"></td></tr>");
      $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',"<tr><td>Charge:</td><td><input type=\"text\" id=\"charge\" name=\"charge\" value=\"\" size=\"40\"></td></tr>");
      $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',"<tr><td>Seriennummer:</td><td><input type=\"text\" id=\"seriennummer\" name=\"seriennummer\" value=\"\" size=\"40\"></td></tr>");
      $this->app->YUI->AutoComplete('seriennummer', 'lagerseriennummern',0,"&artikel=$id");
    }    
    $this->app->Tpl->Add('FORMULAR',"</table></form><br><br>");

    $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', "<img src=\"index.php?module=dateien&action=send&id=$standardbild\" width=\"200\">");
      $this->app->Tpl->Set('BILD',
        '<img alt="Artikelbild" src="index.php?module=artikel&action=thumbnail&id='.$id.'&fileid='.$standardbild.'&size=200&direkt=1" align="left" width="200" style="margin-right:10px; margin-bottom:10px;" />'
      );
    }

    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<(!empty($articleLabelPrinter)?count($articleLabelPrinter):0);$i++)
    {
      $articleLabelPrinterSelection .="<option value='".$articleLabelPrinter[$i]['id']."'>".$articleLabelPrinter[$i]['name']."</option>";
    }
    $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',"<a href=\"#\" onclick=\"if(!confirm('Wirklich löschen?')) return false; else window.location.href='index.php?module=artikel&cmd=del&action=onlineshop&id=$id&sid=%value%';\"><img src=\"./themes/[THEME]/images/delete.svg\" border=\"0\"></a>");

    $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 .= "<option value=\"{$value['id']}\">{$value['bezeichnung']}</option>";
      }
    }

    $this->app->Tpl->Add('WARENGRUPPEN',"<center><select name=\"artikelgruppe\">$html</select>");
    $this->app->Tpl->Add('WARENGRUPPEN',"<input type=submit value=\"hinzuf&uuml;gen\"></center>");

    // 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',
        "<a href=\"#\" onclick=\"if(!confirm('Als Standard definieren?')) return false; else window.location.href='index.php?module=artikel&action=onlineshop&cmd=image&id=$id&sid=%value%';\"><img src=\"./themes/[THEME]/images/ack.png\" border=\"0\"></a>");

    $standardbild_name = $this->app->DB->Select("SELECT titel FROM datei WHERE id='$standardbild'");
    $this->app->Tpl->Add('HAUPTBILD',"<br>Standardbild: <b>$standardbild_name</b>");

    $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','

        <table><tr><td>Datei:</td><td><input type="file"></td></tr></table>');        
    $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&uuml;ckliste enth&auml;lt Artikel die einen Zirkelbezug verursachen!<br>';
          }
        }else {
          if($value['nummer']!=''){
            $fehlerhaftes_bauteil .= 'Unbekannte Artikelnummer: ' . $value['nummer'] . ' (Menge ' . $value['menge'] . ' St&uuml;ck)<br>';
          }
        } 
      }
      if($fehlerhaftes_bauteil!='')
      {
        $this->app->Tpl->Set($parsetarget,"<div class=\"error\">$fehlerhaftes_bauteil</div>");
      }
    }
  }

  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 .= '<div class="error">Zeile wählen</div>';
        $importerror++;
      } 
      $ccols = !empty($cols)?count($cols):0;
      $colcounter = 0;
      for($i=0;$i<$ccols;$i++)
      {
        if($cols[$i]!='') $colcounter++;
      }
      if($colcounter<(!empty($fields)?count($fields):0))
      {
        $findcols .= '<div class="error">Alle Spalten müssen auswählt werden</div>';
        $importerror++;
      }

      if($importerror==0)
      {
        $findcols .= '<div class="info">Erfolgreich importiert</div>';
        if (($handle = fopen($stueckliste_csv, 'r')) !== FALSE) {
          $rowcounter = 1;
          while (($data = fgetcsv($handle, 1000, $this->app->User->GetParameter("artikel_stueckliste_delimiter"))) !== FALSE) {
            $rowcounter++;
            $num = (!empty($data)?count($data):0);

            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 .= "
        <table width=\"1070\"><tr><td>
        <h2>Datei: ".$this->app->User->GetParameter("artikel_stueckliste_importfilename")."</h2> (Die Anzeige ist limitiert auf max 10 Zeilen)</td><td>

        <form action=\"#tabs-3\" method=\"post\" enctype=\"multipart/form-data\">
        <input type=\"hidden\" name=\"MAX_FILE_SIZE\" value=\"30000\" />
        <input name=\"userfile\" type=\"file\" />

        </td><td align=\"right\">
        Trennzeichen: &nbsp;<input type=\"text\" size=\"3\" value=\"".html_entity_decode($this->app->User->GetParameter("artikel_stueckliste_delimiter"))."\" name=\"delimiter\">&nbsp;
      <!--Daten: &nbsp;<input type=\"text\" size=\"3\" value=\"".html_entity_decode($this->app->User->GetParameter("artikel_stueckliste_quote"))."\" name=\"quote\">&nbsp;-->
        <input type=\"submit\" value=\"aktualisieren\">
        </td></tr></table>
        ";


      $findcols .= "
        <div style=\"background: #eeeeee;
height: 350px;
overflow: scroll;
          font-size:7pt;
width: 1050px;
border: 1px solid #000;
padding: 10px;\">
           <table border=0 cellpadding=0 cellspacing=0>";       
           while (($data = fgetcsv($handle, 1000, $this->app->User->GetParameter("artikel_stueckliste_delimiter"))) !== FALSE) {
             $num = (!empty($data)?count($data):0);

             if($row==1)
             {
               $findcols .= "<tr><td></td><td colspan=\"".($num)."\" 
                 style=\"border: 1px solid black; background-color:#ffcc00;font-size:10pt;\">&nbsp;Spalten ausw&auml;hlen</td></tr>";
               $findcols .= "<tr><td style=\"border: 1px solid black; background-color:#ff6666; font-size:10pt;\" nowrap>&nbsp;Erste Zeile mit Daten&nbsp;<br>&nbsp;ausw&auml;hlen</td>";
               for ($c=0; $c < $num; $c++) {
                 $findcols .= "<td style=\"border: 1px solid black; background-color:#FFCC00; padding:5px;\">
                   &nbsp;&nbsp;<select name=\"cols[$c]\"><option></option>";

                 foreach($fields as $key=>$value){
                   if((!empty($cols)?count($cols):0)==0) { 
                     if($preselected[$key]==($c+1)) {
                       $selected='selected';
                     } else $selected='';
                   } else {
                     if($cols[$c]==$key) {
                       $selected='selected';
                     } else $selected='';
                   }    
                   $findcols .="<option value=\"$key\" $selected>$value</option>";
                 }

                 $findcols .='</select>&nbsp;</td>';
               }
               $findcols .= '</tr>';
             }
             if($row_post==$row) $checked="checked"; else $checked="";
             $findcols .= "<tr><td style=\"border: 1px solid black; background-color:#ff6666; padding:5px;\" align=\"center\">
               <input type=\"radio\" value=\"$row\" name=\"row\" $checked></td>";
             $row++;
             for ($c=0; $c < $num; $c++) {
               $findcols .= "<td style=\"border: 1px solid black;\">".$data[$c] . "&nbsp;</td>";
             }
             $findcols .= '</tr>';
             if($row > 10) {
               break;
             }
           }
         fclose($handle);
         $findcols .= "</table></div>
           <table width=\"1080\"><tr><td>
           <br><br>
           Bitte w&auml;hlen Sie aus:
           <ul><li>Die erste Zeile die Daten Ihrer Stueckliste enthält</li>
           <li>Die Spalten: Menge und Artikelnummer</li>
           </ul></td><td align=\"right\">
           <input type=\"submit\" value=\"Import abbrechen\" name=\"cancel\">
           <input type=\"submit\" value=\"Jetzt importieren\" name=\"import\">
           </td></tr></table>
           </form>
           ";
    } else {
      $findcols .= "
        <form action=\"#tabs-3\" method=\"post\" enctype=\"multipart/form-data\">
        <table width=\"1070\"><tr><td>
        Datei:&nbsp;
      <input type=\"hidden\" name=\"MAX_FILE_SIZE\" value=\"30000\" />
        <input name=\"userfile\" type=\"file\" />
        Vorlage: <select name=\"vorlage\">
        <!--<option></option>-->
        <option value=\"minimal\">Artikelnummer; Menge</option>
        <option value=\"altium\">Altium Designer</option>
        <option value=\"solidedgest2\">Solid Edge ST2</option>
        <!--<option value=\"eagle\">Eagle (Cadsoft) </option>-->
        </select> 
        </td><td align=\"right\">
        Trennzeichen: &nbsp;<input type=\"text\" size=\"3\" name=\"delimiter\" value=\";\">&nbsp;
      <!--Daten: &nbsp;<input type=\"text\" size=\"3\" value=\"&quot;\" name=\"quote\">&nbsp;-->
        <input type=\"submit\" value=\"St&uuml;ckliste laden\">
        </td></tr></table>
        </form>";



    }
    $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 d.geloescht = 0
              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((!empty($vorschaua)?count($vorschaua):0) == 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&uuml;ck zur &Uuml;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("<div class=info>Es gibt bereits einen Artikel mit dieser Nummer ($name_nummer).</div>");
        $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 "<h1>hallo $id</h1>";
    $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','<form method="post"><input type="submit" name="disable" value="Bearbeitung deaktivieren" /></form>');
    }elseif($this->app->erp->RechteVorhanden('artikel','baumedit')){
      $this->app->Tpl->Set('BUTTONBEARBEITEN', '<form method="post"><input type="submit" name="enabled" value="Bearbeitung aktivieren" /></form>');
    }
    $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('<p>%s</p>', 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<bp.menge 
        GROUP BY bp.artikel
      ) AS zul ON a.id = zul.artikel
      SET acf.name = a.name_de,
          acf.number = a.nummer,
          acf.ean = a.ean,
          acf.customfield1 = a.freifeld1,
          acf.customfield2 = a.freifeld2,
          acf.is_variant = IFNULL(a.variante,0),
          acf.variant_from_id = IFNULL(a.variante_von,0),
          acf.variant_from_name = IFNULL(a2.name_de,''),
          acf.factory_number = IFNULL(a.herstellernummer,''),
          acf.manufactor = IFNULL(a.hersteller,''),
          acf.is_storage_article = a.lagerartikel,
          acf.is_partlist = a.stueckliste,
          acf.locked = a.intern_gesperrt,
          acf.is_shipping = a.porto,
          acf.project_id = a.projekt,
          acf.project_name = IFNULL(pr.abkuerzung,''),
          acf.inzulauf = ifnull(zul.zulauf,0),
          acf.inproduktion = ifnull(prod.produktion,0),
          acf.inzulauf = ifnull(zul.zulauf,0)
      WHERE a.geloescht <> 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 "<br>Lagerbestand: $summe &nbsp;| &nbsp;Reserviert: $reserviert &nbsp;|&nbsp;Offene Auftr&auml;ge: $liefern&nbsp;| Verkaufte: $verkaufte | Berechneter Bestand: $berechnet | Verkaufbare: $verkaufbare | Berechneter Bestand mit offenen Bestellungen: $berechnetmitoffenebestellungen<br><br>";
  }
}