<?php
/*
**** 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\Components\Pdf\Exception\PdfComponentExceptionInterface;
use Xentral\Components\Pdf\PdfMerger;
use Xentral\Components\Http\Session\SessionHandler;
use Xentral\Modules\Article\Gateway\ArticleGateway;
use Xentral\Modules\ScanArticle\Service\ScanArticleService;
use Xentral\Modules\ScanArticle\Exception\ArticleNotFoundException;

include '_gen/bestellung.php';

class Bestellung extends GenBestellung
{
  /** @var Application $app */

  /**
   * Bestellung constructor.
   *
   * @param Application $app
   * @param bool        $intern
   */
  public function __construct($app, $intern = false)
  {
    $this->app=$app;
    if($intern) {
      return;
    }
    $this->app->ActionHandlerInit($this);

    $this->app->ActionHandler("list","BestellungList");
    $this->app->ActionHandler("create","BestellungCreate");
    $this->app->ActionHandler("positionen","BestellungPositionen");
    $this->app->ActionHandler("upbestellungposition","UpBestellungPosition");
    $this->app->ActionHandler("delbestellungposition","DelBestellungPosition");
    $this->app->ActionHandler("copybestellungposition","CopyBestellungPosition");
    $this->app->ActionHandler("downbestellungposition","DownBestellungPosition");
    $this->app->ActionHandler("positioneneditpopup","BestellungPositionenEditPopup");
    $this->app->ActionHandler("edit","BestellungEdit");
    $this->app->ActionHandler("copy","BestellungCopy");
    $this->app->ActionHandler("auftrag","BestellungAuftrag");
    $this->app->ActionHandler("delete","BestellungDelete");
    $this->app->ActionHandler("undelete","BestellungUndelete");
    $this->app->ActionHandler("freigabe","BestellungFreigabe");
    $this->app->ActionHandler("freigegeben","BestellungFreigegeben");
    $this->app->ActionHandler("abschicken","BestellungAbschicken");
    $this->app->ActionHandler("dateien","BestellungDateien");
    $this->app->ActionHandler("pdf","BestellungPDF");
    $this->app->ActionHandler("inlinepdf","BestellungInlinePDF");
    $this->app->ActionHandler("protokoll","BestellungProtokoll");
    $this->app->ActionHandler("minidetail","BestellungMiniDetail");
    $this->app->ActionHandler("editable","BestellungEditable");
    $this->app->ActionHandler("livetabelle","BestellungLiveTabelle");
    $this->app->ActionHandler("schreibschutz","BestellungSchreibschutz");
    $this->app->ActionHandler("abschliessen","BestellungAbschliessen");
    $this->app->ActionHandler("alsversendet","BestellungAlsversendet");
    $this->app->ActionHandler("pdffromarchive","BestellungPDFfromArchiv");
    $this->app->ActionHandler("archivierepdf","BestellungArchivierePDF");
    $this->app->ActionHandler("einlagern","BestellungEinlagern");
    $this->app->ActionHandler("offenepositionen","BestellungOffenePositionen");
    $this->app->ActionHandler("steuer","BestellungSteuer");
    $this->app->ActionHandler("adressebestellungcopy", "AdresseBestellungCopy");
    $this->app->ActionHandler("ean","BestellungEAN");
    $this->app->DefaultActionHandler("list");

    $id = (int)$this->app->Secure->GetGET('id');
    $nummer = $this->app->Secure->GetPOST('adresse');

    if($id > 0){
      $bestRow = $this->app->DB->Select(
        sprintf(
          'SELECT a.name, b.belegnr 
        FROM bestellung b 
        LEFT JOIN adresse a ON b.adresse = a.id 
        WHERE b.id=%d 
        LIMIT 1',
          $id
        )
      );
    }

    if($nummer=='' && !empty($bestRow) && gettype($bestRow) == 'array'){
      $adresse = $bestRow['name'];
    }
    else{
      $adresse = $nummer;
    }

	if (gettype($bestRow) == 'array') {
	    $nummer = !empty($bestRow)?$bestRow['belegnr']:'';
	    if($nummer=='' || $nummer=='0') {
	      $nummer='ohne Nummer';
	    }
	}

    $this->app->Tpl->Set('UEBERSCHRIFT','Bestellung:&nbsp;'.$adresse.' ('.$nummer.')');
    $this->app->Tpl->Set('FARBE','[FARBE2]');

    $this->app->erp->Headlines('Bestellung');

    $this->app->ActionHandlerListen($app);
  }

  function BestellungSteuer()
  {
    
  }
  
  function BestellungUndelete()
  {
    $id = (int)$this->app->Secure->GetGET('id');
    $bestellungRow = $this->app->DB->SelectRow(
      sprintf("SELECT status, belegnr, name FROM bestellung WHERE id=%d LIMIT 1", $id)
    );
    $status = $bestellungRow['status'];
    $belegnr = $bestellungRow['belegnr'];
    $name = $bestellungRow['name'];

    if($status==='storniert')
    { 
      $this->app->erp->BestellungProtokoll($id,"Bestellung Storno rückgängig");
      $this->app->DB->Update("UPDATE bestellung SET status='freigegeben' WHERE id='$id' LIMIT 1");
      $msg = $this->app->erp->base64_url_encode("<div class=\"info\">Bestellung \"$name\" ($belegnr) wurde wieder freigegeben!</div>  ");
    } else {
      $msg = $this->app->erp->base64_url_encode("<div class=\"error\">Bestellung \"$name\" ($belegnr) kann nicht wieder freigegeben werden, da sie nicht storniert ist.</div>  ");
    }
    //header("Location: ".$_SERVER['HTTP_REFERER']."&msg=$msg");
    $this->app->Location->execute('index.php?module=bestellung&action=list&msg='.$msg);
  }

  function BestellungEinlagern($id = null, $lagerplatz = null)
  {
    if($id === null)
    {
      $intern = false;
      $id = (int)$this->app->Secure->GetGET('id');
    }else{
      $intern = true;
    }
    if($id)
    {
      $arr = $this->app->DB->SelectRow("SELECT projekt,belegnr,status FROM bestellung WHERE id = '$id' LIMIT 1");
      if(!empty($arr)){
        $projekt = $arr['projekt'];
        $belegnr = $arr['belegnr'];
        $status = $arr['status'];
        if(($status === 'versendet' || $status === 'freigegeben')){
          $standardlager = $this->app->DB->Select("SELECT id FROM lager_platz WHERE geloescht <> 1 AND sperrlager <> 1 AND poslager <> 1 ORDER BY id LIMIT 1");
          $positionen = $this->app->DB->SelectArr("SELECT id,artikel,menge,geliefert FROM bestellung_position WHERE geliefert < menge AND bestellung='$id'");
          if($positionen){
            foreach ($positionen as $position) {
              if($lagerplatz){
                $lager = $lagerplatz;
              }else{
                $lager = $this->app->DB->Select("SELECT lager_platz FROM artikel WHERE id = '" . $position['artikel'] . "' LIMIT 1");
                if(!$this->app->DB->Select("SELECT id FROM lager_platz WHERE id = '$lager' AND geloescht <> 1 LIMIT 1")) {
                  $lager = $standardlager;
                }
                if(!$lager) {
                  $lager = $standardlager;
                }
              }
              if($lager){
                $this->app->erp->LagerEinlagern(
                  $position['artikel'], $position['menge'] - $position['geliefert'], $lager, $projekt,
                  'Wareneingang von Bestellung ' . $belegnr,'','','bestellung',$id
                );
                $this->app->DB->Update("UPDATE bestellung_position SET geliefert = menge WHERE id = '" . $position['id'] . "' LIMIT 1");
              } else {
                $dataartikel = $this->app->DB->SelectRow("SELECT nummer,name_de FROM artikel WHERE id='".$position['artikel']."'");
                $msg = $this->app->erp->base64_url_encode("<div class=\"error\">Abbruch beim Einlagern da für den Artikel \"".$dataartikel['nummer']." ".$dataartikel['name_de']."\" kein Standard Lagerplatz definiert wurde oder alle Lager Sperr- oder POS-Lager sind!</div>");
                $this->app->Location->execute('index.php?module=bestellung&action=edit&id=' . $id . "&msg=" . $msg);
              }
            }
            $this->app->erp->BestellungProtokoll($id,"Bestellung manuell eingelagert");
            $this->checkAbschliessen($id);
            if($intern) {
              return true;
            }
            $msg = $this->app->erp->base64_url_encode("<div class=\"info\">Die Bestellung wurde eingelagert!</div>");
            $this->app->Location->execute('index.php?module=bestellung&action=edit&id=' . $id . "&msg=" . $msg);
          }
        }
      }
      if($intern) {
        return false;
      }
      $this->app->Location->execute('index.php?module=bestellung&action=edit&id='.$id);
    }
    if($intern) {
      return false;
    }
    $this->app->Location->execute('index.php?module=bestellung&action=list');
  }

  function checkAbschliessen($id = 0)
  {
    if(!$id) {
      $id = $this->app->Secure->GetGET('id');
    }
    $id = (int)$id;
    if($id <= 0) {
      return;
    }
    $status = $this->app->DB->Select("SELECT status FROM bestellung WHERE id = '$id' LIMIT 1");
    if(($status === 'versendet' || $status === 'freigegeben'))
    {
      $sql = "SELECT bp.id FROM bestellung_position bp LEFT JOIN artikel a ON a.id=bp.artikel WHERE bp.bestellung = '$id' AND a.lagerartikel=1";
      $alleLagerArtikelVonBestellung = $this->app->DB->SelectArr($sql);

      //nur wenn auch Lagerartikel enthalten sind, soll automatisch abgeschlossen werden können.
      if((!empty($alleLagerArtikelVonBestellung)?count($alleLagerArtikelVonBestellung):0)>0){
        $lagerArtikelIds = [];
        foreach ($alleLagerArtikelVonBestellung as $l){
          $lagerArtikelIds[] = $l['id'];
        }
        $sql = "SELECT bp.id FROM bestellung_position bp LEFT JOIN artikel a ON a.id=bp.artikel WHERE bp.geliefert < bp.menge AND bp.id IN (".implode(',',$lagerArtikelIds).")";
        $offenePositionen = $this->app->DB->SelectArr($sql);

        if(empty($offenePositionen)){
          $this->BestellungAbschliessen($id,true);
        }
      }
    }
  }

  function BestellungOffenePositionen()
  {
    $this->BestellungListMenu();

    $this->app->YUI->TableSearch('TAB1','bestellung_offenepositionen');
    $this->app->Tpl->Parse('PAGE','bestellung_offenepositionen.tpl');
  }
  
  function BestellungArchivierePDF()
  {
    $id = (int)$this->app->Secure->GetGET('id');
    $projektbriefpapier = $this->app->DB->Select("SELECT projekt FROM bestellung WHERE id = '$id' LIMIT 1");
    if(class_exists('BestellungPDFCustom'))
    {
      $Brief = new BestellungPDFCustom($this->app,$projektbriefpapier);
    }else{
      $Brief = new BestellungPDF($this->app,$projektbriefpapier);
    }
    $Brief->GetBestellung($id);
    $tmpfile = $Brief->displayTMP();
    $Brief->ArchiviereDocument(1);
    unlink($tmpfile);
    $this->app->DB->Update("UPDATE bestellung SET schreibschutz='1' WHERE id='$id'");
    $this->app->Location->execute('index.php?module=bestellung&action=edit&id='.$id);
  }
  
  function BestellungEditable()
  {
    $this->app->YUI->AARLGEditable();
  }

  function BestellungSchreibschutz()
  {
    $id = (int)$this->app->Secure->GetGET('id');
    $this->app->DB->Update(sprintf('UPDATE bestellung SET zuarchivieren=1, schreibschutz = 0 WHERE id=%d', $id));
    $this->app->erp->BestellungProtokoll($id,'Schreibschutz entfernt');
    $this->app->Location->execute('index.php?module=bestellung&action=edit&id='.$id);
  }

  function BestellungPDFfromArchiv()
  {
    $id = $this->app->Secure->GetGET('id');
    $archiv = $this->app->DB->Select("SELECT table_id from pdfarchiv where id = '$id' LIMIT 1");
    if($archiv)
    {
      $projekt = $this->app->DB->Select("SELECT projekt from bestellung where id = '".(int)$archiv."'");
    }
    if(class_exists('BestellungPDFCustom'))
    {
      if($archiv) {
        $Brief = new BestellungPDFCustom($this->app,$projekt);
      }
    }else{
      if($archiv) {
        $Brief = new BestellungPDF($this->app,$projekt);
      }
    }
    if($archiv && $content = $Brief->getArchivByID($id))
    {
      header('Content-type: application/pdf');
      header('Content-Disposition: attachment; filename="'.$content['belegnr'].'.pdf"');
      echo $content['file'];
      $this->app->ExitXentral();
    }
    header('Content-type: application/pdf');
    header('Content-Disposition: attachment; filename="Fehler.pdf"');
    $this->app->ExitXentral();
  }  
  
  function BestellungMiniDetail($parsetarget='',$menu=true)
  {
    $id = (int)$this->app->Secure->GetGET('id');
    $cmd = $this->app->Secure->GetGET('cmd');
    if($cmd === 'lager')
    {
      if($this->app->DB->Select("SELECT id FROM artikel WHERE id = '$id' AND lagerartikel = 1 LIMIT 1"))
      {
        $table = new EasyTable($this->app);
        $table->Query("SELECT ".$this->app->erp->FormatMenge("sum(lpi.menge)")." as menge, l.bezeichnung as Lager 
        FROM lager l 
        INNER JOIN lager_platz lp ON l.id = lp.lager AND l.geloescht = 0 
        INNER JOIN lager_platz_inhalt lpi ON lp.id = lpi.lager_platz AND lpi.artikel = $id 
        GROUP BY l.id
        ORDER BY l.bezeichnung");
        $table->align[0] = 'right';
        $table->align[1] = 'left';
        echo json_encode(array('inhalt'=>'<div class="inlinetooltiptable"><style> div.inlinetooltiptable > table.mkTable > tbody > tr:nth-child(2n+1) td {background-color:#e0e0e0;} </style>'.$table->DisplayNew('return','Lager','noAction').'</div>'));
      }else{
        echo json_encode(array('inhalt'=>'<div class="inlinetooltiptable">kein Lagerartikel</div>'));
      }
      $this->app->ExitXentral();
    }

    if($cmd === 'zuordnungAuftragZuBestellung')
    {
      $bid = $this->app->Secure->GetGet("id");
      $belegnummer = $this->app->DB->Select("SELECT belegnr FROM bestellung WHERE id='$bid'");
      $auftragPost = explode(" ",$this->app->Secure->GetPOST("auftrag"));
      $auftragsnummer = $auftragPost[0];

      $auftrag_positionen = $this->app->DB->SelectArr("SELECT ap.id,ap.artikel,ap.menge FROM auftrag_position ap LEFT JOIN auftrag a on a.id=ap.auftrag WHERE a.belegnr='$auftragsnummer' AND a.belegnr!=''");
       foreach($auftrag_positionen as $value){
        $a_positionen[$value['artikel']]['id'] = $value['id'];
        $a_positionen[$value['artikel']]['menge'] = $value['menge'];
      }
      //jetzt holen wir alle Bestellpositonen für diese Bestellung
      $bestellung_positionen = $this->app->DB->SelectArr("SELECT bp.id,bp.artikel,bp.menge FROM bestellung_position bp WHERE bp.bestellung='$bid'");
        foreach($bestellung_positionen as $position){
          // prüfen ob beide artikel gleich sind und ob die menge passt
          if( (is_array($a_positionen[$position['artikel']]))  &&  ($position['menge'] == $a_positionen[$position['artikel']]['menge']) )  {
            // wenn wir den Artikel haben und die Anzahl passt
            $wert = $a_positionen[$position['artikel']]['id'];
            $this->app->DB->Update("UPDATE bestellung_position SET auftrag_position_id='$wert' WHERE id='{$position['id']}' AND bestellung='$bid' LIMIT 1");
          } else{
            // wenn wir den Artikel haben aber die Anzahl nicht passt nehmen wir die Position vom ersten Auffinden des Artikel
            if($position['artikel'] == $a_positionen[$position['artikel']]){
              $wert = $a_positionen[$position['artikel']]['id'];

              $this->app->DB->Update("UPDATE bestellung_position SET auftrag_position_id='$wert' WHERE id='{$position['id']}' AND bestellung='$bid' LIMIT 1");
            }else{
              // wenn wir keinen Artikel haben nehmen wir den ersten Artikel zum verknüpfen
              $wert = $a_positionen[0]['id'];
              $this->app->DB->Update("UPDATE bestellung_position SET auftrag_position_id='$wert' WHERE id='{$position['id']}' AND bestellung='$bid' LIMIT 1");
            }
          }
        }

      $zugeordnet = $this->app->DB->Select("SELECT count(id) FROM bestellung_position WHERE bestellung='$bid' AND auftrag_position_id != '0'");;
      $nichtzugeordnet = $this->app->DB->Select("SELECT count(id) FROM bestellung_position WHERE bestellung='$bid' AND auftrag_position_id = '0'");
      $gesamtpositionen = $this->app->DB->Select("SELECT count(id) FROM bestellung_position WHERE bestellung='$bid'");

      $data['gesamtpositionen'] = $gesamtpositionen;
      $data['belegnummer'] = $belegnummer;
      $data['zugeordnet'] = $zugeordnet;
      $data['nichtzugeordnet'] = $nichtzugeordnet;
      $data['error'] = false;
      echo json_encode($data);
      $this->app->ExitXentral();
    }


    if($cmd === 'checkmenge')
    {
      $bpid = $this->app->Secure->GetPOST("bp");
      $ab_menge = round(str_replace(',','.',$this->app->Secure->GetPOST("ab_menge")),8);
      $data = $this->app->DB->SelectArr("SELECT *, TRIM(menge)+0 as menge FROM bestellung_position WHERE id = '$bpid' LIMIT 1");
      if($data)
      {
        $data = reset($data);
        $bestellung = $data['bestellung'];
        $adresse = $this->app->DB->Select("SELECT adresse FROM bestellung WHERE id = '$bestellung' LIMIT 1");
        $ek = $this->app->erp->GetEinkaufspreisArr($data['artikel'], $ab_menge, $adresse, $data['waehrung']);
        if($ek)
        {
          $data = array('menge'=>$ab_menge, 'ab_menge'=>round($ek['ab_menge'],8));
        }else{
          $data = array('menge'=>$ab_menge, 'ab_menge'=>$ab_menge);
        }
      }
      echo json_encode($data);
      $this->app->ExitXentral();
    }
    if($cmd === 'getpreis')
    {
      $bpid = $this->app->Secure->GetPOST("bp");
      $data = $this->app->DB->SelectArr("SELECT *, TRIM(menge)+0 as menge FROM bestellung_position WHERE id = '$bpid' LIMIT 1");
      if($data)
      {
        $data = reset($data);
        $data['menge'] = round((float)$data['menge'], 8);
        $bestellung = $data['bestellung'];
        $adresse = $this->app->DB->Select("SELECT adresse FROM bestellung WHERE id = '$bestellung' LIMIT 1");
        $ek = $this->app->erp->GetEinkaufspreisArr($data['artikel'], $data['menge'], $adresse, $data['waehrung']);
        if($ek)$data['ab_menge'] = round($ek['ab_menge'], 8);
        $data['preis'] = number_format(round($data['preis'],8),2,',','.');
        $data['auchinstammdaten'] = $this->app->User->GetParameter('bestellung_auchinstammdaten')?1:0;
      }
      echo json_encode($data);
      $this->app->ExitXentral();
    }
    if($cmd === 'savepreis')
    {
      $bpid = (int)$this->app->Secure->GetPOST('bp');
      $bpRow = $this->app->DB->SelectRow(
        sprintf(
          'SELECT artikel, bestellung FROM bestellung_position WHERE id = %d LIMIT 1'
          ,$bpid
        )
      );
      $artikel = $bpRow['artikel'];
      $preis = str_replace(',','.',$this->app->Secure->GetPOST('preis'));
      $auchinstammdaten = $this->app->Secure->GetPOST('auchinstammdaten');
      $this->app->User->SetParameter('bestellung_auchinstammdaten', $auchinstammdaten);
      $waehrung = $this->app->Secure->GetPOST('waehrung');
      $bestellnummer = $this->app->Secure->GetPOST('bestellnummer');
      $bezeichnung = $this->app->Secure->GetPOST('bezeichnung');
      $ab_menge = str_replace(',','.',$this->app->Secure->GetPOST('ab_menge'));
      $menge = str_replace(',','.',$this->app->Secure->GetPOST('menge'));
      $bestellung = $bpRow['bestellung'];
      
      // Schreibschutz entfernen
      $this->app->DB->Update("UPDATE bestellung SET schreibschutz=0 WHERE id='$bestellung' LIMIT 1");
      $bRow = $this->app->DB->SelectRow(
        sprintf(
          'SELECT schreibschutz, adresse FROM bestellung WHERE id=%d LIMIT 1',
          (int)$bestellung
        )
      );
      $schreibschutz = $bRow['schreibschutz'];
      $adresse = $bRow['adresse'];
      if(!$schreibschutz)
      {
        $this->app->DB->Update(
          sprintf(
            'UPDATE bestellung_position SET preis = %f WHERE id = %d LIMIT 1',
            (float)$preis, $bpid
          )
        );
        if((String)$bestellnummer !== '') {
          $this->app->DB->Update(
            sprintf(
              "UPDATE bestellung_position SET bestellnummer = '%s' WHERE id = %d LIMIT 1",
              $bestellnummer, $bpid
            )
          );
        }
        if((String)$bezeichnung !== '') {
          $this->app->DB->Update(
            sprintf(
              "UPDATE bestellung_position SET bezeichnunglieferant = '%s' WHERE id = %d LIMIT 1",
              $bezeichnung, $bpid
            )
          );
        }
        if($menge) {
          $this->app->DB->Update(
            sprintf(
              "UPDATE bestellung_position SET menge = %f WHERE id = %d LIMIT 1",
              (float)$menge, $bpid
            )
          );
        }
        $this->app->erp->ANABREGSNeuberechnen($bestellung,'bestellung');
      }
      if($auchinstammdaten && $artikel && $adresse)
      {
        $this->app->erp->AddEinkaufspreis($artikel,$ab_menge,$adresse,$bestellnummer,$bezeichnung, $preis, $waehrung);
      }
      $data = $this->app->DB->SelectRow(
        sprintf(
          'SELECT id, %s as preis, bestellnummer, trim(menge)+0 as menge 
            FROM bestellung_position 
            WHERE id = %d 
            LIMIT 1',
          $this->app->erp->FormatPreis('preis'),$bpid
        )
      );
      if(!empty($data))
      {
        $data['menge'] = round($data['menge'], 8);
        $data['preis'] .= '&nbsp;<a href="#" onclick="changepreis'.$this->app->Secure->getPOST('md5').'('.$bpid.');"><img src="themes/'.$this->app->Conf->WFconf['defaulttheme'].'/images/edit.svg" border="0"></a>';
      }
      echo json_encode($data);
      $this->app->ExitXentral();
    }
    $bestRow = $this->app->DB->SelectRow(
      sprintf(
        'SELECT belegnr, name, status, zahlungsweise, adresse, verbindlichkeiteninfo,preisanfrageid, 
          DATE_FORMAT(gewuenschteslieferdatum,\'%%d.%%m.%%Y\') as gewuenschteslieferdatum, bestellungbestaetigtabnummer,
          DATE_FORMAT(bestaetigteslieferdatum,\'%%d.%%m.%%Y\') as bestaetigteslieferdatum, datum, projekt
          FROM bestellung 
          WHERE id=%d 
          LIMIT 1',
        $id
      )
    );
    $belegnr = $bestRow['belegnr'];
    $name = $bestRow['name'];
    $status = $bestRow['status'];
    //$schreibschutz = $this->app->DB->Select("SELECT schreibschutz FROM bestellung WHERE id='$id' LIMIT 1");
    $zahlweise = $bestRow['zahlungsweise'];
    $bestaetigteslieferdatum = $bestRow['bestaetigteslieferdatum'];
    $wunschlieferdatum = $bestRow['gewuenschteslieferdatum'];
    $ablieferant = $bestRow['bestellungbestaetigtabnummer'];
    $verbindlichkeiteninfo = $bestRow['verbindlichkeiteninfo'];
    $preisanfrageid = $bestRow['preisanfrageid'];
    $preisanfrage = $this->app->DB->Select("SELECT belegnr FROM preisanfrage WHERE id = '$preisanfrageid' LIMIT 1");
    $adresse = (int)$bestRow['adresse'];
    $lieferantennummer = $this->app->DB->Select("SELECT lieferantennummer FROM adresse WHERE id = '$adresse' LIMIT 1");
    $datum = (int)$bestRow['datum'];
    $projekt = (int)$bestRow['projekt'];
    $this->app->Tpl->Set('VERBINDLICHKEITENINFO',$verbindlichkeiteninfo);

    if($belegnr=='0' || $belegnr=='') {
      $belegnr = 'ENTWURF';
    }

    $this->app->Tpl->Set('BELEGNR',$belegnr);
    $this->app->Tpl->Set('LIEFERANT',"<a href=\"index.php?module=adresse&action=edit&id=".$adresse."\" target=\"_blank\">".$lieferantennummer."</a> ".$name);
    $this->app->Tpl->Set('STATUS',$status);
    $this->app->Tpl->Set('ZAHLWEISE',$zahlweise);
    $this->app->Tpl->Set('BESTELLUNGID',$id);
    if($preisanfrageid > 0)
    {
      $this->app->Tpl->Set('PREISANFRAGE','<a href="index.php?module=preisanfrage&action=edit&id='.$preisanfrageid.'" target="_blank">'.$preisanfrage.'</a>&nbsp;<a href="index.php?module=preisanfrage&action=pdf&id='.$preisanfrageid.'" target="_blank"><img src="./themes/new/images/pdf.svg" title="Preisanfrage PDF" border="0" target="_blank"></a>&nbsp;<a href="index.php?module=preisanfrage&action=edit&id='.$preisanfrageid.'" target="_blank"><img src="./themes/new/images/edit.svg" title="Preisanfrage bearbeiten" border="0" target="_blank"></a>');
    }

    if($bestaetigteslieferdatum=="00.00.0000") $bestaetigteslieferdatum="warte auf Datum";
    $this->app->Tpl->Set('BESTAETIGTESLIEFERDATUM',$bestaetigteslieferdatum);

    if($wunschlieferdatum=="00.00.0000") $wunschlieferdatum="warte auf Datum";
    $this->app->Tpl->Set('WUNSCHLIEFERDATUM',$wunschlieferdatum);
    $this->app->Tpl->Set('ABLIEFERANT',$ablieferant);

    $nettogewicht = $this->app->erp->BestellungNettoGewicht($id);
    if($nettogewicht!='') {
      $nettogewicht = number_format($nettogewicht, 2, ',','.');
      $gewichtbezeichnung = $this->app->erp->Firmendaten('gewichtbezeichnung');
      if($gewichtbezeichnung == '') {
        $gewichtbezeichnung = 'Kg';
      }

      $this->app->Tpl->Set("GEWICHT", $nettogewicht . " ".$gewichtbezeichnung);
    }

    $projektabkuerzung = $this->app->DB->Select("SELECT abkuerzung FROM projekt WHERE id='$projekt' LIMIT 1");
    if($this->app->erp->RechteVorhanden("projekt","dashboard"))
      $this->app->Tpl->Set('PROJEKT',"<a href=\"index.php?module=projekt&action=dashboard&id=".$projekt."\" target=\"_blank\">$projektabkuerzung</a>");
    else
      $this->app->Tpl->Set('PROJEKT',$projekt);

    $md5 = md5(microtime(true));
    
    $table = new EasyTable($this->app);

    $anzahlzeichen = 200;
    $artikelIdList = [];
    $artikelArr = $this->app->DB->SelectArr(sprintf('SELECT DISTINCT artikel FROM bestellung_position WHERE bestellung = %d', $id));
    if(!empty($artikelArr))
    {
      foreach($artikelArr as $row)
      {
        $artikelIdList[] = $row['artikel'];
      }
    }
    $table->Query("SELECT CONCAT(SUBSTRING(ap.bezeichnunglieferant,1,$anzahlzeichen),'<br>Best-Nr.:<span id=\"spanbestellnummer".$md5."',ap.id,'\">',ap.bestellnummer,'</span>') as artikel, 
        CONCAT('<a href=\"index.php?module=artikel&action=edit&id=',a.id,'\"  target=\"_blank\">',a.nummer,'</a>') as nummer, 
        CONCAT('<span id=\"spanmenge".$md5."',ap.id,'\">',(TRIM(ap.menge)+0),'</span>') as Menge,
        TRIM(ap.geliefert)+0 as geliefert,
        IF(a.lagerartikel = 1,CONCAT( ".$this->app->erp->FormatMenge('IFNULL(lag.menge,0)').",'lagermehr(',ap.artikel,')'),'-') as Lager,
        if(ap.lieferdatum!='0000-00-00',DATE_FORMAT(ap.lieferdatum,'%d.%m.%Y'),'sofort') as lieferdatum, 
        concat('<span id=\"spanpreis".$md5."',ap.id,'\">',FORMAT(ap.preis,2,'de_DE'),'".
        "&nbsp;<a href=\"#\" onclick=\"changepreis".$md5."(',ap.id,');\"><img src=\"themes/{$this->app->Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\"></a>"
        ."','</span>') as preis
        FROM bestellung_position AS ap
        INNER JOIN artikel AS a ON ap.artikel = a.id
        LEFT JOIN (
          SELECT SUM(lpi.menge) as menge, lpi.artikel 
          FROM lager_platz_inhalt AS lpi
          INNER JOIN lager_platz AS lp ON lpi.lager_platz = lp.id AND IFNULL(lp.sperrlager,0) = 0 AND IFNULL(lp.autolagersperre,0) = 0
          ".(!empty($artikelIdList)?' AND lpi.artikel IN ('.implode(',', $artikelIdList).')':'')."
          GROUP BY lpi.artikel
        ) as lag ON a.id = lag.artikel 
        WHERE ap.bestellung='$id' 
        ORDER by ap.sort");
    foreach($table->datasets as $tablerowKey => $tableRow)
    {
      foreach($tableRow as $columName =>  $columnValue)
      {
        if(preg_match_all('/^(.*)lagermehr\((.*)\)(.*)$/', $columnValue, $matches,PREG_OFFSET_CAPTURE))
        {
          $table->datasets[$tablerowKey][$columName] = $matches[1][0][0].'&nbsp;'.$this->app->YUI->ContentTooltip('return','index.php?module=auftrag&action=minidetail&cmd=lager&id='.$matches[2][0][0],'url').$matches[3][0][0];
        }
      }
    }

    foreach($table->datasets as $k => $row)
    {
      if(strip_tags($table->datasets[$k]['geliefert']) == strip_tags($table->datasets[$k]['Menge']))
      {
        $table->datasets[$k]['geliefert'] = '<b>'.$table->datasets[$k]['geliefert'].'</b>';
        $table->datasets[$k]['Menge'] = '<b>'.$table->datasets[$k]['Menge'].'</b>';
        
      } else {
        $table->datasets[$k]['geliefert'] = '<b style="color:red;">'.$table->datasets[$k]['geliefert'].'</b>';
        $table->datasets[$k]['Menge'] = '<b style="color:red;">'.$table->datasets[$k]['Menge'].'</b>';
      }
      
      
      $table->datasets[$k]['preis'] = '<div style="float:right;text-align:right;"><b>'.$table->datasets[$k]['preis'];
      if(preg_match("/&id=([0-9]*)/",$row['nummer'],$treffer)){
        $artid = (int)$treffer[1];
        if($epreise = $this->app->DB->SelectArr("SELECT ab_menge, preis FROM einkaufspreise WHERE artikel='".$artid."' AND adresse='$adresse' AND (gueltig_bis>='".$datum."' OR gueltig_bis='0000-00-00') and (preis_anfrage_vom = '0000-00-00' or preis_anfrage_vom <= '".$datum."') and ab_menge > ".(int)strip_tags($row['Menge'])." order by ab_menge"))
        {
          $table->datasets[$k]['preis'] .= '</b>&nbsp;&nbsp;<br /><table style="float:right;">';
          foreach($epreise as $key => $pr)
          {
            $table->datasets[$k]['preis'] .= "<tr style=\"background-color: transparent;text-align:right;\"><td><small>(".floatval($pr['ab_menge']).":</small></td><td><small>".number_format($pr['preis'],2,',','.').")</small></td></tr>";
            
          }
          $table->datasets[$k]['preis'] .= '</table>';
        }
      } else {
        $table->datasets[$k]['preis'] .= '</b>';
      }
      $table->datasets[$k]['preis'] .= "</div>";
      
    }

    $check = $this->app->DB->SelectArr("SELECT a.belegnr, a.id  
    FROM auftrag_position ap
    INNER JOIN auftrag a ON ap.auftrag = a.id
    INNER JOIN bestellung_position bp ON ap.id = bp.auftrag_position_id
    WHERE bp.bestellung='$id' GROUP BY a.belegnr, a.id ORDER BY a.belegnr, a.id");
    if($check)
    {
      $auftraege = null;
      $lieferscheine = [];
      $rechnungen = [];
      foreach($check as $row)
      {
        $auftraege[] = '<a href="index.php?module=auftrag&action=edit&id='.$row['id'].'" target="_blank">'.($row['belegnr']?$row['belegnr']:'Entwurf').'</a>
                            <a href="index.php?module=auftrag&action=pdf&id='.$row['id'].'" target="_blank"><img src="./themes/new/images/pdf.svg" title="Auftrag PDF" border="0"></a>
                            <a href="index.php?module=auftrag&action=edit&id='.$row['id'].'" target="_blank"><img src="./themes/new/images/edit.svg" title="Auftrag bearbeiten" border="0"></a>';

        $lieferscheineTemp = $this->app->DB->SelectPairs(
          "SELECT 
            l.id, 
            CONCAT(
            '<a href=\"index.php?module=lieferschein&action=edit&id=',
            l.id,'\" target=\"_blank\"',
            if(l.status='storniert',' title=\"Lieferschein storniert\"><s>','>'),
            if(l.belegnr='0' OR l.belegnr='','ENTWURF',l.belegnr),
            if(l.status='storniert','</s>',''),
            '</a>&nbsp;<a href=\"index.php?module=lieferschein&action=pdf&id=',l.id,
            '\" target=\"_blank\"><img src=\"./themes/new/images/pdf.svg\" title=\"Lieferschein PDF\" border=\"0\"></a>&nbsp;
            <a href=\"index.php?module=lieferschein&action=edit&id=',
            l.id,
            '\" target=\"_blank\"><img src=\"./themes/new/images/edit.svg\" title=\"Lieferschein bearbeiten\" border=\"0\"></a>'
            ) as lieferschein
            FROM lieferschein l 
            WHERE l.auftragid='".$row['id']."'"
        );

        if(!empty($lieferscheineTemp)){
          foreach ($lieferscheineTemp as $k => $v){
            $lieferscheine[$k] = $v;
          }
        }

        $rechnungenTemp = $this->app->DB->SelectPairs(
          "SELECT 
          r.id, 
          CONCAT(
          '<a href=\"index.php?module=rechnung&action=edit&id=',
          r.id,
          '\" target=\"_blank\"',
          if(r.status='storniert',' title=\"Rechnung storniert\"><s>','>'),
          if(r.belegnr='0' OR r.belegnr='','ENTWURF',r.belegnr),
          if(r.status='storniert','</s>',''),
          '</a>&nbsp;<a href=\"index.php?module=rechnung&action=pdf&id=',
          r.id,
          '\" target=\"_blank\"><img src=\"./themes/new/images/pdf.svg\" title=\"Rechnung PDF\" border=\"0\"></a>&nbsp;
          <a href=\"index.php?module=rechnung&action=edit&id=',
          r.id,
          '\" target=\"_blank\"><img src=\"./themes/new/images/edit.svg\" title=\"Rechnung bearbeiten\" border=\"0\"></a>'
          ) as rechnung
          FROM rechnung r 
          WHERE r.auftragid='".$row['id']."'"
        );

        if(!empty($rechnungenTemp)){
          foreach ($rechnungenTemp as $k => $v){
            $rechnungen[$k] = $v;
          }
        }
      }

      if(!empty($auftraege)){
        $this->app->Tpl->Set('AUFTRAG', implode('<br />', $auftraege));
      }

      if(!empty($lieferscheine)){
        $this->app->Tpl->Set('LIEFERSCHEIN', implode('<br />', $lieferscheine));
      }

      if(!empty($rechnungen)){
        $this->app->Tpl->Set('RECHNUNG', implode('<br />', $rechnungen));
      }
    }

    // $nowarp-Parameter (letzter Parameter) auf false setzen, damit lange Artikeltitel umbrechen können
    $artikel = $table->DisplayNew("return", "Preis", "noAction", false, 0, 0, false);

    if($menu)
    {
      $menu = $this->BestellungIconMenu($id);
      $this->app->Tpl->Set('MENU',$menu);
    }

    $this->app->Tpl->Set('ARTIKEL',$artikel);


    $tmp = new EasyTable($this->app);
    $tmp->Query("SELECT zeit,bearbeiter,grund FROM bestellung_protokoll WHERE bestellung='$id' ORDER by id DESC");
    $tmp->DisplayNew('PROTOKOLL',"Protokoll","noAction");

    $this->app->Tpl->Set('RECHNUNGLIEFERADRESSE',$this->BestellungRechnungsLieferadresse($id));
    
    if(class_exists('BestellungPDFCustom'))
    {
      $Brief = new BestellungPDFCustom($this->app,$projekt);
    }else{
      $Brief = new BestellungPDF($this->app,$projekt);
    }
    
    $Dokumentenliste = $Brief->getArchivedFiles($id, 'bestellung');
    if(!empty($Dokumentenliste))
    {
      $tmp3 = new EasyTable($this->app);
      $tmp3->headings = array('Datum','Belegnr','Bearbeiter','Men&uuml;');
      foreach($Dokumentenliste as $k => $v)
      {
        if(!$v['erstesoriginal'])
        {
          $tmpr['datum'] = date('d.m.Y H:i:s',strtotime($v['zeitstempel']));
          $tmpr['belegnr'] = str_replace('.pdf','',$v['file']);
          $tmpr['belegnr'] = substr($tmpr['belegnr'],strrpos($tmpr['belegnr'],'_')+1);
          if(isset($v['belegnummer']) && $v['belegnummer']) {
            $tmpr['belegnr'] = $v['belegnummer'];
          }
          $tmpr['bearbeiter'] = $v['bearbeiter'];
          $tmpr['menu'] = '<a href="index.php?module=bestellung&action=pdffromarchive&id='.$v['id'].'"><img src="themes/'.$this->app->Conf->WFconf['defaulttheme'].'/images/pdf.svg" /></a>';
          $tmp3->datasets[] = $tmpr;
        }
      }
      
      $tmp3->DisplayNew('PDFARCHIV','Men&uuml;',"noAction");
    }

/*
    $wareneingangsbelege = $this->app->DB->SelectFirstCols("SELECT 
        CONCAT('<a href=\"index.php?module=receiptdocument&action=edit&id=',r.id,'\" target=\"_blank\"',if(r.status='storniert',' title=\"Wareneingangsbeleg storniert\"><s>','>'),if(r.document_number='0' OR document_number='','ENTWURF',r.document_number),if(r.status='storniert','</s>',''),'</a>&nbsp;<a href=\"index.php?module=receiptdocument&action=pdf&id=',r.id,'\" target=\"_blank\"><img src=\"./themes/new/images/pdf.svg\" title=\"Wareneingangsbeleg PDF\" border=\"0\"></a>&nbsp;
          <a href=\"index.php?module=receiptdocument&action=edit&id=',r.id,'\" target=\"_blank\"><img src=\"./themes/new/images/edit.svg\" title=\"Wareneingangsbeleg bearbeiten\" border=\"0\"></a>') as wareneingangsbeleg
        FROM receiptdocument r WHERE r.supplier_order_id='$id'");

    if(!empty($wareneingangsbelege)){
      $this->app->Tpl->Add('WARENEINGANGSBELEG', implode('<br />', $wareneingangsbelege));
    }
    else{
      $this->app->Tpl->Set('WARENEINGANGSBELEG', '-');
    }
  */
  
    $sql = "SELECT
    CONCAT('<a href =\"index.php?module=wareneingang&action=distriinhalt&id=',pa.id,'\">',pa.id,'</a>') as wareneingang
FROM
    paketannahme pa
INNER JOIN paketdistribution pd ON
    pd.paketannahme = pa.id
INNER JOIN bestellung_position bp ON
    pd.bestellung_position = bp.id
INNER JOIN bestellung b ON
    b.id = bp.bestellung
WHERE
    b.id = $id
GROUP BY
    pa.id";    			
//	 echo($sql);        
	 $wareneingangsbelege = $this->app->DB->SelectArr($sql);     
    if(!empty($wareneingangsbelege)){
      $this->app->Tpl->Add('WARENEINGANGSBELEG', implode('<br />', array_column($wareneingangsbelege , 'wareneingang' )));
    }
    else{
      $this->app->Tpl->Set('WARENEINGANGSBELEG', '-');
    }
    

    $this->app->Tpl->Set('ID', $id);
    $this->app->Tpl->Set('MD5', $md5);
    $this->app->Tpl->Parse('ARTIKEL', 'bestellung_minidetail_popup.tpl');
   
    
    if($parsetarget=='')
    {
      $this->app->Tpl->Output("bestellung_minidetail.tpl");
      $this->app->ExitXentral();
    }
    $this->app->Tpl->Parse($parsetarget,"bestellung_minidetail.tpl");
  }


  function BestellungAlsversendet($id = 0)
  {
    if($id)
    {
      $intern = true;
    }else{
      $intern = false;
      $id = $this->app->Secure->GetGET('id');
    }

    if($id > 0)
    {
      $this->app->DB->Update("UPDATE bestellung SET status='versendet' WHERE id='$id' LIMIT 1");
      $this->app->erp->BestellungProtokoll($id,"Bestellung als versendet markiert");
    }
    if($intern) {
      return;
    }
    $msg = $this->app->erp->base64_url_encode("<div class=\"info\">Die Bestellung wurde als versendet markiert!</div>");
    $this->app->Location->execute('index.php?module=bestellung&action=list&msg='.$msg);
  }

  function BestellungAbschliessen($id = 0,$auto=false)
  {
    if($id)
    {
      $intern = true;
    }else{
      $intern = false;
      $id = (int)$this->app->Secure->GetGET('id');
    }

    if($id > 0)
    {
      $this->app->DB->Update("UPDATE bestellung SET status='abgeschlossen',schreibschutz=1 WHERE id='$id' LIMIT 1");
      $this->app->DB->Update("UPDATE verbindlichkeit SET freigabe='1' WHERE bestellung='$id'");
      $this->app->erp->BestellungProtokoll($id,'Bestellung '.($auto?'automatisch ':'').'abgeschlossen');
      $this->app->erp->RunHook("bestellung_abschliessen",1,$id);
    }
    if($intern) {
      return;
    }
    $msg = $this->app->erp->base64_url_encode("<div class=\"info\">Die Bestellung wurde als abgeschlossen markiert!</div>");
    $this->app->Location->execute('index.php?module=bestellung&action=list&msg='.$msg);
  }

  function BestellungFreigegeben($id = '')
  {
    if($id<=0){
      $intern = false;
      $id = (int)$this->app->Secure->GetGET('id');
    }else{
      $intern = true;
    }
    if($id)
    {
      if($this->app->DB->Select("SELECT id FROM bestellung WHERE status = 'abgeschlossen' AND id = '$id' LIMIT 1"))
      {
        $this->app->DB->Update("UPDATE bestellung SET status = 'freigegeben', schreibschutz = 0 WHERE id = '$id' LIMIT 1");
        $msg = $this->app->erp->base64_url_encode("<div class=\"error2\">Die Bestellung wurde auf freigegeben gesetzt!</div>");
      }else{
        $msg = $this->app->erp->base64_url_encode("<div class=\"error\">Die Bestellung ist nicht abgeschlossen!</div>");
      }
    }else{
      $msg = $this->app->erp->base64_url_encode("<div class=\"error\">Es wurde keine Bestellung angeben!</div>");
      $this->app->Location->execute('index.php?module=bestellung&action=list&msg='.$msg);
    }
    if($intern)
    {
      return $id;
    }
    $this->app->Location->execute('index.php?module=bestellung&action=edit&id='.$id.'&msg='.$msg);
  }

  function BestellungFreigabe($id='')
  {
    if($id<=0)
    {
      $intern = false;
      $id = (int)$this->app->Secure->GetGET('id');
      $freigabe= $this->app->Secure->GetGET('freigabe');
      $weiter= $this->app->Secure->GetPOST('weiter');
      $this->app->Tpl->Set('TABTEXT','Freigabe');
    } else {
      $intern = true;
      $freigabe=$intern;
    }
    $allowedFrm = true;
    $showDefault = true;
    $doctype = 'bestellung';
    if(empty($intern)){
      $this->app->erp->RunHook('beleg_freigabe', 4, $doctype, $id, $allowedFrm, $showDefault);
    }
    if($weiter!='')
    {
      $this->app->Location->execute('index.php?module=bestellung&action=abschicken&id='.$id);
    }
    if($allowedFrm && $freigabe==$id)
    {
      //$projekt = $this->app->DB->Select("SELECT projekt FROM bestellung WHERE id='$id' LIMIT 1");
      $belegnr = $this->app->DB->Select("SELECT belegnr FROM bestellung WHERE id='$id' LIMIT 1");
      if($belegnr=='')
      {
        $this->app->erp->BelegFreigabe('bestellung',$id);
        if($intern) {
          return 1;
        }
        $msg = $this->app->erp->base64_url_encode("<div class=\"error2\">Die Bestellung wurde freigegeben und kann jetzt versendet werden!</div>");
        $this->app->Location->execute("index.php?module=bestellung&action=edit&id=$id&msg=$msg");
      }
      if($intern) {
        return 0;
      }
      $msg = $this->app->erp->base64_url_encode("<div class=\"error\">Die Bestellung wurde bereits freigegeben!</div>");
      $this->app->Location->execute("index.php?module=bestellung&action=edit&id=$id&msg=$msg");
    }
    if($showDefault){
      $name = $this->app->DB->Select("SELECT a.name FROM bestellung b LEFT JOIN adresse a ON a.id=b.adresse WHERE b.id='$id' LIMIT 1");
      $summe = $this->app->DB->Select("SELECT SUM(menge*preis) FROM bestellung_position
        WHERE bestellung='$id'");
      $waehrung = $this->app->DB->Select("SELECT waehrung FROM bestellung_position
        WHERE bestellung='$id' LIMIT 1");

      $summe = $this->app->erp->EUR($summe);

      $extra = $this->app->erp->CheckboxEntwurfsmodus("bestellung", $id);


      if($this->app->erp->Firmendaten("oneclickrelease")=="1" && $extra=="")
      {
        $this->app->Location->execute("index.php?module=bestellung&action=freigabe&id=$id&freigabe=$id");
      } else {
        $this->app->Tpl->Set('TAB1', "<div class=\"info\">Soll die Bestellung an <b>$name</b> im Wert von <b>$summe $waehrung</b> 
        jetzt freigegeben werden? <input type=\"button\" class=\"btnImportantLarge\" value=\"Jetzt freigeben\" onclick=\"window.location.href='index.php?module=bestellung&action=freigabe&id=$id&freigabe=$id'\">&nbsp;$extra
        </div>");
      }
    }
    $this->BestellungMenu();
    $this->app->Tpl->Parse('PAGE','tabview.tpl');
  }


  function BestellungCopy()
  {
    $id = $this->app->Secure->GetGET('id');
    $newid = $this->app->erp->CopyBestellung($id);

    $this->app->Location->execute('Location: index.php?module=bestellung&action=edit&id='.$newid);
  }

  function AdresseBestellungCopy()
  {
    $id = $this->app->Secure->GetGET('id');
    $newid = $this->app->erp->CopyBestellung($id);

    echo json_encode(array('status'=>1, 'newid'=>$newid));
    $this->app->ExitXentral();
  }


  function BestellungLiveTabelle()
  {
    $id = (int)$this->app->Secure->GetGET('id');
    $status = $this->app->DB->Select("SELECT status FROM bestellung WHERE id='$id' LIMIT 1");

    $table = new EasyTable($this->app);

    if($status==='freigegeben')
    {
      $anzahlzeichen = 200;
      $table->Query("SELECT SUBSTRING(ap.bezeichnung,1,$anzahlzeichen) as artikel, ap.nummer as Nummer, ap.menge as M,
          if(a.porto,'-',if((SELECT SUM(l.menge) FROM lager_platz_inhalt l WHERE l.artikel=ap.artikel) > ap.menge,(SELECT SUM(l.menge) FROM lager_platz_inhalt l WHERE l.artikel=ap.artikel),
              if((SELECT SUM(l.menge) FROM lager_platz_inhalt l WHERE l.artikel=ap.artikel)>0,CONCAT('<font color=red><b>',(SELECT SUM(l.menge) FROM lager_platz_inhalt l WHERE l.artikel=ap.artikel),'</b></font>'),
                '<font color=red><b>aus</b></font>'))) as L
          FROM bestellung_position ap, artikel a WHERE ap.bestellung='$id' AND a.id=ap.artikel");
      $artikel = $table->DisplayNew("return","A","noAction");
    } else {
      $table->Query("SELECT SUBSTRING(ap.bezeichnung,1,$anzahlzeichen) as artikel, ap.nummer as Nummer, ap.menge as M
          FROM bestellung_position ap, artikel a WHERE ap.bestellung='$id' AND a.id=ap.artikel");
      $artikel = $table->DisplayNew("return","Menge","noAction");
    }
    echo $artikel;
    $this->app->ExitXentral();
  }


  function BestellungAuftrag()
  {
    $id = $this->app->Secure->GetGET('id');

    $newid = $this->app->erp->WeiterfuehrenBestellungZuAuftrag($id);

    $this->app->Location->execute('index.php?module=auftrag&action=edit&id='.$newid);
  }


  function BestellungAbschicken()
  {
    $this->BestellungMenu();
    $this->app->erp->DokumentAbschicken();
  }

  function BestellungDelete()
  {
    $id = $this->app->Secure->GetGET("id");

    $belegnr = $this->app->DB->Select("SELECT belegnr FROM bestellung WHERE id='$id' LIMIT 1");
    $name = $this->app->DB->Select("SELECT name FROM bestellung WHERE id='$id' LIMIT 1");
    $status = $this->app->DB->Select("SELECT status FROM bestellung WHERE id='$id' LIMIT 1");

    if($belegnr=='0' || $belegnr=='')
    {
      $this->app->erp->DeleteBestellung($id);
      $belegnr='ENTWURF';
      $msg = $this->app->erp->base64_url_encode("<div class=\"error\">Die Bestellung \"$name\" ($belegnr) wurde gel&ouml;scht!</div>");
      //header("Location: ".$_SERVER['HTTP_REFERER']."&msg=$msg");
      $this->app->Location->execute('index.php?module=bestellung&action=list&msg='.$msg);
    }

    if($status==='storniert')
    {
      $maxbelegnr = $this->app->DB->Select("SELECT MAX(belegnr) FROM bestellung");
      if(0)//$maxbelegnr == $belegnr)
      {
        $this->app->DB->Delete("DELETE FROM bestellung_position WHERE bestellung='$id'");
        $this->app->DB->Delete("DELETE FROM bestellung_protokoll WHERE bestellung='$id'");
        $this->app->DB->Delete("DELETE FROM bestellung WHERE id='$id'");
        $msg = $this->app->erp->base64_url_encode("<div class=\"error\">Rechnung \"$name\" ($belegnr) wurde ge&ouml;scht !</div>");
      } else
      {
        $msg = $this->app->erp->base64_url_encode("<div class=\"error\">Bestellung \"$name\" ($belegnr) kann nicht storniert werden da sie bereits storniert ist!</div>");
      }
      $this->app->Location->execute('index.php?module=bestellung&action=list&msg='.$msg);
    }

    $this->app->DB->Update("UPDATE bestellung SET status='storniert' WHERE id='$id' LIMIT 1");
    $this->app->erp->BestellungProtokoll($id,"Bestellung storniert");
    $msg = $this->app->erp->base64_url_encode("<div class=\"error\">Die Bestellung \"$name\" ($belegnr) wurde storniert!</div>");
    $this->app->Location->execute("Location: index.php?module=bestellung&action=list&msg=$msg#tabs-1");
  }

  function BestellungProtokoll()
  {
    $this->BestellungMenu();
    $id = (int)$this->app->Secure->GetGET('id');

    $this->app->Tpl->Set('TABTEXT','Protokoll');
    $tmp = new EasyTable($this->app);
    $tmp->Query("SELECT zeit,bearbeiter,grund FROM bestellung_protokoll WHERE bestellung=$id ORDER by zeit DESC");
    $tmp->DisplayNew('TAB1','Protokoll','noAction');

    $this->app->Tpl->Parse('PAGE','tabview.tpl');
  }

  function BestellungInlinePDF()
  {
    $id = (int)$this->app->Secure->GetGET('id');

    $frame = $this->app->Secure->GetGET('frame');
    if($frame != '') {
      $file = urlencode('../../../../index.php?module=bestellung&action=inlinepdf&id='.$id);
      echo "<iframe width=\"100%\" height=\"100%\" style=\"height:calc(100vh - 110px)\" src=\"./js/production/generic/web/viewer.html?file=$file\"></iframe>";
      $this->app->ExitXentral();
    }

    $projekt = $this->app->DB->Select("SELECT projekt FROM bestellung WHERE id=$id LIMIT 1");

    if(class_exists('BestellungPDFCustom'))
    {
      $Brief = new BestellungPDFCustom($this->app,$projekt);
    }else{
      $Brief = new BestellungPDF($this->app,$projekt);
    }
    $Brief->GetBestellung($id);
    $Brief->inlineDocument();
  }

  function BestellungPDF()
  {
    $id = (int)$this->app->Secure->GetGET('id');

    //$belegnr = $this->app->DB->Select("SELECT belegnr FROM bestellung WHERE id='$id' LIMIT 1");
    $projekt = $this->app->DB->Select("SELECT projekt FROM bestellung WHERE id='$id' LIMIT 1");

    //    if(is_numeric($belegnr) && $belegnr!=0)
    {
      if(class_exists('BestellungPDFCustom'))
      {
        $Brief = new BestellungPDFCustom($this->app,$projekt);
      }else{
        $Brief = new BestellungPDF($this->app,$projekt);
      }
      $Brief->GetBestellung($id);
      $Brief->displayDocument(); 
    } //else
    //     $this->app->Tpl->Set(MESSAGE,"<div class=\"error\">Noch nicht freigegebene Bestellungen k&ouml;nnen nicht als PDF betrachtet werden.!</div>");


    $this->BestellungList();
  }


  function BestellungMenu()
  {
    $id = (int)$this->app->Secure->GetGET('id');

    $bestellungRow = $this->app->DB->SelectRow(sprintf('SELECT belegnr, name,status FROM bestellung WHERE id=%d LIMIT 1', $id));
    $belegnr = !empty($bestellungRow)?$bestellungRow['belegnr']:'';
    $name = !empty($bestellungRow)?$bestellungRow['name']:'';

    $this->app->erp->BestellungNeuberechnen($id);


    if($belegnr=='0' || $belegnr=='') {
      $belegnr ='(Entwurf)';
    }
    $this->app->Tpl->Set('KURZUEBERSCHRIFT2',"$name Bestellung $belegnr");

    $status = !empty($bestellungRow)?$bestellungRow['status']:'';
    if($status==="angelegt")
    {
      $this->app->erp->MenuEintrag("index.php?module=bestellung&action=freigabe&id=$id","Freigabe");
    }

    $this->app->erp->MenuEintrag("index.php?module=bestellung&action=edit&id=$id","Details");

    if($status==='bestellt')
    { 
      $this->app->erp->MenuEintrag("index.php?module=bestellung&action=wareneingang&id=$id","Wareneingang<br>R&uuml;ckst&auml;nde");
      $this->app->erp->MenuEintrag("index.php?module=bestellung&action=wareneingang&id=$id","Mahnstufen");
    } 
    //    $this->app->erp->MenuEintrag("index.php?module=bestellung&action=abschicken&id=$id","Abschicken / Protokoll");
    //    $this->app->erp->MenuEintrag("index.php?module=bestellung&action=protokoll&id=$id","Protokoll");

    $anzahldateien = $this->app->erp->AnzahlDateien("Bestellung",$id);
    if($anzahldateien > 0) $anzahldateien = " (".$anzahldateien.")"; else $anzahldateien="";

    $this->app->erp->MenuEintrag("index.php?module=bestellung&action=dateien&id=$id","Dateien".$anzahldateien);

    if($this->app->erp->Firmendaten('auftrag_eantab')=='1'){
      $this->app->erp->MenuEintrag('index.php?module=bestellung&action=ean&id='.$id, 'Barcodescanner');
    }

    if($this->app->Secure->GetGET("action")==="abschicken")
      $this->app->erp->MenuEintrag("index.php?module=bestellung&action=edit&id=$id","Zur&uuml;ck zur Bestellung");
    else
    {
      $backlink = $this->app->Secure->GetGET('backlink');
      // Prüfen ob Backlink mit index.php? beginnt; ansonsten ist Open Redirect möglich
      if (!empty($backlink) && strpos($backlink, 'index.php?') !== 0){
        unset($backlink);
      }
      if($backlink)
      {
        $this->app->erp->MenuEintrag($backlink,"Zur&uuml;ck zur &Uuml;bersicht");
      }else{
        $this->app->erp->MenuEintrag("index.php?module=bestellung&action=list","Zur&uuml;ck zur &Uuml;bersicht");
      }
    }
      

    $this->app->erp->RunMenuHook('bestellung');
    $this->app->Tpl->Parse('MENU',"bestellung_menu.tpl");
  }


  function BestellungDateien()
  {
    $id = $this->app->Secure->GetGET("id");
    $this->BestellungMenu();
    $this->app->Tpl->Add('UEBERSCHRIFT'," (Dateien)");
    $this->app->YUI->DateiUpload('PAGE',"Bestellung",$id);
  }



  function BestellungPositionen()
  {
    $id = $this->app->Secure->GetGET("id");
    $this->app->erp->AuftragNeuberechnen($id);
    $this->app->YUI->AARLGPositionen(false);
  }
  
  function CopyBestellungPosition()
  {
    $this->app->YUI->SortListEvent("copy","bestellung_position","bestellung");
    $this->BestellungPositionen();
  }

  function DelBestellungPosition()
  {
    $this->app->YUI->SortListEvent("del","bestellung_position","bestellung");
    $this->BestellungPositionen();
  }

  function UpBestellungPosition()
  {
    $this->app->YUI->SortListEvent("up","bestellung_position","bestellung");
    $this->BestellungPositionen();
  }

  function DownBestellungPosition()
  {
    $this->app->YUI->SortListEvent("down","bestellung_position","bestellung");
    $this->BestellungPositionen();
  }


  function BestellungPositionenEditPopup()
  {
    $id = $this->app->Secure->GetGET("id");

    // nach page inhalt des dialogs ausgeben
    $filename = "widgets/widget.bestellung_position_custom.php";
    if(is_file($filename))
    {
      include_once($filename);
      $widget = new WidgetBestellung_positionCustom($this->app,'PAGE');
    } else {
      $widget = new WidgetBestellung_position($this->app,'PAGE');
    }

    $sid= $this->app->DB->Select("SELECT bestellung FROM bestellung_position WHERE id='$id' LIMIT 1");
    $widget->form->SpecialActionAfterExecute("close_refresh",
        "index.php?module=bestellung&action=positionen&id=$sid");
    $widget->Edit();
    $this->app->BuildNavigation=false;
  }



  function BestellungIconMenu($id,$prefix="")
  {
    $supplierOrder = $this->app->DB->SelectRow("SELECT status, belegnr FROM bestellung WHERE id='$id' LIMIT 1");
    $status = $supplierOrder['status'];
    $belegnr = $supplierOrder['belegnr'];
    $freigegeben = '';
    if($status=="angelegt" || $status=="")
      $freigabe = "<option value=\"freigabe\">Bestellung freigeben</option>";

    if($status!="angelegt" && $status!="abgeschlossen")
      $abschliessen = "<option value=\"abschliessen\">Bestellung abschliessen</option>";

    $einlagern = '';

    if(($status === 'versendet' || $status === 'freigegeben')
      && $this->app->erp->RechteVorhanden("bestellung", "einlagern")
      && $this->app->DB->Select("SELECT id FROM bestellung_position WHERE bestellung = '$id' AND geliefert < menge LIMIT 1")) {
      $standardlager = $this->app->DB->Select("SELECT kurzbezeichnung FROM lager_platz WHERE geloescht <> 1 AND sperrlager <> 1 AND poslager <> 1 ORDER BY id LIMIT 1");
      $nichtlager = $this->app->DB->Select("SELECT art.id FROM bestellung_position bp INNER JOIN artikel art ON bp.artikel = art.id WHERE bp.bestellung = '$id' AND art.porto <> 1 AND lagerartikel <> 1 AND stueckliste <> 1 LIMIT 1");
      if($nichtlager) {
        $standardlager .= ' (Achtung Es gibt Positionen die keine Lagerartikel sind, diese werden nicht eingelagert)';
      }
      $einlagern = '<option value="einlagern">Bestellung einlagern</option>';
    }

    if($status === 'abgeschlossen') {
      $freigegeben = "<option value=\"freigegeben\">als freigegeben markieren</option>";
    }
    if($status === 'abgeschlossen' || $status=="freigegeben")
      $alsversendet = "<option value=\"alsversendet\">als versendet markieren</option>";



    if($status=="storniert")
      $storno = "<option value=\"unstorno\">Bestellung Storno r&uuml;ckg&auml;ngig</option>";
    else if($status!="storniert")
      $storno = "<option value=\"storno\">Bestellung stornieren</option>";

    if($this->app->erp->RechteVorhanden('belegeimport', 'belegcsvexport'))
    {  
      $casebelegeimport = "case 'belegeimport':  window.location.href='index.php?module=belegeimport&action=belegcsvexport&cmd=bestellung&id=%value%'; break;";
      $optionbelegeimport = "<option value=\"belegeimport\">Export als CSV</option>";
    }
    

    $hookoption = '';
    $hookcase = '';
    $this->app->erp->RunHook("Bestellung_Aktion_option",3, $id, $status, $hookoption);
    $this->app->erp->RunHook("Bestellung_Aktion_case",3, $id, $status, $hookcase);
    $abschliessentext = '{|Wirklich abschliessen?|}';
    if($this->app->DB->Select("SELECT id FROM bestellung_position WHERE bestellung = '$id' AND mengemanuellgeliefertaktiviert = 0 AND geliefert < menge LIMIT 1"))
      $abschliessentext = "{|Zu dieser Bestellung gibt es noch offene Postitionen, möchten Sie diese wirklich als abgeschlossen markieren? Eine Warenannahme ist dann nicht mehr möglich für diese Bestellung.|}";
    $menu ="

      <script type=\"text/javascript\">
      function onchangebestellung(cmd)
      {
        switch(cmd)
        {
          case 'storno': if(!confirm('Wirklich stornieren?')) return document.getElementById('aktion$prefix').selectedIndex = 0; else window.location.href='index.php?module=bestellung&action=delete&id=%value%'; break;
          case 'unstorno':    if(!confirm('Wirklich stornierte Bestellung wieder freigeben?')) return document.getElementById('aktion$prefix').selectedIndex = 0; else window.location.href='index.php?module=bestellung&action=undelete&id=%value%'; break; 
          case 'copy': if(!confirm('Wirklich kopieren?')) return document.getElementById('aktion$prefix').selectedIndex = 0; else window.location.href='index.php?module=bestellung&action=copy&id=%value%'; break;
          case 'pdf': window.location.href='index.php?module=bestellung&action=pdf&id=%value%'; document.getElementById('aktion$prefix').selectedIndex = 0; break;
          case 'abschicken':  ".$this->app->erp->DokumentAbschickenPopup()." break;
          case 'freigabe': window.location.href='index.php?module=bestellung&action=freigabe&id=%value%'; break;
          case 'alsversendet': window.location.href='index.php?module=bestellung&action=alsversendet&id=%value%'; break;
          case 'freigegeben': if(!confirm('Wirklich auf freigegeben setzen?')) return document.getElementById('aktion$prefix').selectedIndex = 0; else window.location.href='index.php?module=bestellung&action=freigegeben&id=%value%'; break;
          case 'abschliessen': if(!confirm('$abschliessentext')) return document.getElementById('aktion$prefix').selectedIndex = 0; else window.location.href='index.php?module=bestellung&action=abschliessen&id=%value%'; break;
          case 'einlagern': if(!confirm('Wirklich einlagern? Die Artikel werden in den voreingestellten Lagerplätzen eingelagert andersfalls in das Lager $standardlager')) return document.getElementById('aktion$prefix').selectedIndex = 0; else window.location.href='index.php?module=bestellung&action=einlagern&id=%value%'; break;
          $hookcase
          $casebelegeimport
        }

      }
    </script>

      &nbsp;Aktion:&nbsp;<select id=\"aktion$prefix\" onchange=\"onchangebestellung(this.value);\">
      <option>bitte w&auml;hlen ...</option>
      $storno
      <option value=\"copy\">Bestellung kopieren</option>
      <option value=\"abschicken\">Bestellung abschicken</option>
      $freigabe
      $alsversendet
      $freigegeben
      $abschliessen
      $einlagern
      $hookoption
      $optionbelegeimport
      <option value=\"pdf\">PDF &ouml;ffnen</option>
      </select>&nbsp;

    <a href=\"index.php?module=bestellung&action=pdf&id=%value%\"><img border=\"0\" src=\"./themes/new/images/pdf.svg\"></a>
      <!--        <a href=\"index.php?module=bestellung&action=edit&id=%value%\"><img border=\"0\" src=\"./themes/new/images/edit.svg\"></a>
      <a onclick=\"if(!confirm('Wirklich stornieren?')) return false; else window.location.href='index.php?module=bestellung&action=delete&id=%value%';\">
      <img src=\"./themes/new/images/delete.svg\" border=\"0\"></a>
      <a onclick=\"if(!confirm('Wirklich kopieren?')) return false; else window.location.href='index.php?module=bestellung&action=copy&id=%value%';\">
      <img src=\"./themes/new/images/copy.svg\" border=\"0\"></a>
      <a onclick=\"if(!confirm('Wirklich Auftrag abschicken?')) return false; else window.location.href='index.php?module=bestellung&action=abschicken&id=%value%';\">
      <img src=\"./themes/new/images/lieferung.png\" border=\"0\" alt=\"Auftrag abeschicken\"></a>-->";

    //$tracking = $this->AuftragTrackingTabelle($id);

    $menu = str_replace('%value%',$id,$menu);
    return $menu;
  }

  function BestellungEdit()
  {
    //$action = $this->app->Secure->GetGET("action");
    $id = $this->app->Secure->GetGET("id");
    $this->app->erp->BestellungNeuberechnen($id);
    $cmd = $this->app->Secure->GetGET('cmd');
    if($cmd === 'dadown')
    {
      $erg['status'] = 0;
      $daid = $this->app->Secure->GetPOST("da_id");
      $check = $this->app->DB->SelectArr("SELECT ds.* FROM datei_stichwoerter ds INNER JOIN datei d on ds.datei = d.id WHERE ds.id = '$daid' and d.geloescht <> 1 LIMIT 1");
      if($check)
      {
        $sort = $check[0]['sort']+1;
        if($sort > 1)
        {
          $check2 = $this->app->DB->SelectArr("SELECT ds.* FROM datei_stichwoerter ds INNER JOIN datei d on ds.datei = d.id WHERE ds.objekt like 'angebot' AND ds.sort = '$sort' AND d.geloescht <> 1 AND ds.parameter = '$id' LIMIT 1");
          if($check2)
          {
            $erg['status'] = 1;
            $erg['from'] = $check2[0]['id'];
            $this->app->DB->Update("UPDATE datei_stichwoerter SET sort = sort + 1 WHERE id = '$daid' LIMIT 1");
            $this->app->DB->Update("UPDATE datei_stichwoerter SET sort = sort - 1 WHERE id = '".$check2[0]['id']."' LIMIT 1");
          }
        }
      }
      echo json_encode($erg);
      $this->app->ExitXentral();
    }
    
    if($cmd === 'daup')
    {
      $erg['status'] = 0;
      $daid = $this->app->Secure->GetPOST("da_id");
      $check = $this->app->DB->SelectArr("SELECT ds.* FROM datei_stichwoerter ds INNER JOIN datei d on ds.datei = d.id WHERE ds.id = '$daid' and d.geloescht <> 1 LIMIT 1");
      if($check)
      {
        $sort = $check[0]['sort']-1;
        if($sort > 0)
        {
          $check2 = $this->app->DB->SelectArr("SELECT ds.* FROM datei_stichwoerter ds INNER JOIN datei d on ds.datei = d.id WHERE ds.objekt like 'angebot' AND ds.sort = '$sort' AND d.geloescht <> 1 AND ds.parameter = '$id' LIMIT 1");
          if($check2)
          {
            $erg['status'] = 1;
            $erg['from'] = $check2[0]['id'];
            $this->app->DB->Update("UPDATE datei_stichwoerter SET sort = sort - 1 WHERE id = '$daid' LIMIT 1");
            $this->app->DB->Update("UPDATE datei_stichwoerter SET sort = sort + 1 WHERE id = '".$check2[0]['id']."' LIMIT 1");
          }
        }
      }
      echo json_encode($erg);
      $this->app->ExitXentral();
    }

    if($this->app->erp->DisableModul("bestellung",$id))
    {
      //$this->app->erp->MenuEintrag("index.php?module=auftrag&action=list","Zur&uuml;ck zur &Uuml;bersicht");
      $this->BestellungMenu();
      return;
    }
    $this->app->YUI->AARLGPositionen();

    //$storno = $this->app->Secure->GetGET("storno");

    $speichern = $this->app->Secure->GetPOST("speichern");
    $verbindlichkeiteninfo = $this->app->Secure->GetPOST("verbindlichkeiteninfo");

    if($verbindlichkeiteninfo!="" && $speichern!="" && $id > 0)
      $this->app->DB->Update("UPDATE bestellung SET verbindlichkeiteninfo='$verbindlichkeiteninfo' WHERE id='$id' LIMIT 1");

    //$this->BestellungMiniDetail(MINIDETAIL,false);
    $arr = $this->app->DB->SelectArr(
      "SELECT b.belegnr, b.adresse, b.status, b.schreibschutz, b.langeartikelnummern, b.zuarchivieren 
        FROM `bestellung` AS `b`
        WHERE b.id = '$id' LIMIT 1"
    );
    if($arr){
      $arr = reset($arr);
      $belegnr = $arr['belegnr'];
      $nummer = $arr['belegnr'];
      $adresse = $arr['adresse'];
      $status = $arr['status'];
      $schreibschutz = $arr['schreibschutz'];
      $zuArchivieren = $arr['zuarchivieren'];
      $lieferantennummer = $this->app->DB->Select("SELECT lieferantennummer FROM adresse WHERE id='$adresse' LIMIT 1");
    }

    if($id > 0 && $zuArchivieren == 1 && $schreibschutz == 1) {
      $this->app->erp->PDFArchivieren('bestellung', $id, true);
    }

    if($status !== "angelegt" && $status !== "angelegta" && $status !== "a")
    {
/*
      $laenge = $this->app->DB->SelectArr("SELECT LENGTH(bestellnummer) as length,bestellnummer FROM bestellung_position WHERE bestellung='$id' ORDER by length DESC");
      $pdf=new FPDFWAWISION();
      $pdf->SetFontClassic($this->app->erp->Firmendaten("schriftart"),'',$this->app->erp->Firmendaten("tabellenhinhalt"));
      $laengepdf = $pdf->GetStringWidth($laenge[0]['bestellnummer']);
      if(floor($laengepdf) > $this->app->erp->Firmendaten("breite_nummer")+11 && $arr['langeartikelnummern']!="1")
      {
        $this->app->Tpl->Add('MESSAGE',"<div class=\"error\">Eventuell ist die Artikelnummer zu lang. Sie können die Funktion \"Lange Artikelnummer\" weiter unten aktivieren.</div>");
      }
*/
      $Brief = new Briefpapier($this->app);
      if($Brief->zuArchivieren($id, "bestellung"))
      {
        $this->app->Tpl->Add('MESSAGE',"<div class=\"error\">Die Bestellung ist noch nicht archiviert! Bitte versenden oder manuell archivieren. <input type=\"button\" onclick=\"if(!confirm('Soll das Dokument archiviert werden?')) return false;else window.location.href='index.php?module=bestellung&action=archivierepdf&id=$id';\" value=\"Manuell archivieren\" /> <input type=\"button\" value=\"Dokument versenden\" onclick=\"DokumentAbschicken('bestellung',$id)\"></div>");
      }elseif(!$this->app->DB->Select("SELECT versendet FROM bestellung WHERE id = '$id' LIMIT 1"))
      {

        $this->app->Tpl->Add('MESSAGE',"<div class=\"error\">Die Bestellung wurde noch nicht versendet! <input type=\"button\" value=\"Dokument versenden\" onclick=\"DokumentAbschicken('bestellung',$id)\"></div>");
      }
    }
    
    if($schreibschutz!="1")// && $this->app->erp->RechteVorhanden("bestellung","schreibschutz"))    {      
    {
      $this->app->erp->AnsprechpartnerButton($adresse);      
      $this->app->erp->LieferadresseButton($adresse);
      $this->app->erp->AnsprechpartnerAlsLieferadresseButton($adresse);
      $this->app->erp->AdresseAlsLieferadresseButton($adresse);
    }


    $this->app->Tpl->Set('ICONMENU',$this->BestellungIconMenu($id));
    $this->app->Tpl->Set('ICONMENU2',$this->BestellungIconMenu($id,2));

    if($nummer!="")
    {
      $this->app->Tpl->Set('NUMMER',$nummer);
      if($this->app->erp->RechteVorhanden("adresse","edit"))
        $this->app->Tpl->Set('LIEFERANT',"&nbsp;&nbsp;&nbsp;Lf-Nr. <a href=\"index.php?module=adresse&action=edit&id=$adresse\" target=\"_blank\">".$lieferantennummer."</a>");
      else
        $this->app->Tpl->Set('LIEFERANT',"&nbsp;&nbsp;&nbsp;Lf-Nr. ".$lieferantennummer);
    }

    $check = $this->app->DB->SelectArr("SELECT a.belegnr, a.id, a.name
    FROM bestellung_position bp 
    INNER JOIN auftrag_position ap ON ap.id = bp.auftrag_position_id
    INNER JOIN auftrag a ON ap.auftrag = a.id
    WHERE bp.bestellung='$id' GROUP BY a.belegnr, a.id ORDER BY a.belegnr, a.id");
    if($check)
    {
      $this->app->Tpl->Add('MESSAGE',"<div class=\"info\">Zu dieser Bestellung geh&ouml;r".((!empty($check)?count($check):0) == 1?'t der Auftrag':'en die Auftr&auml;ge:'));
      foreach($check as $row)
      {
        $this->app->Tpl->Add('MESSAGE','&nbsp;<a href="index.php?module=auftrag&action=edit&id='.$row['id'].'" target="_blank"><input type="button" value="'.($row['belegnr']?$row['belegnr']:'Entwurf')." (".$row['name'].')" /></a>');
      }
      $this->app->Tpl->Add('MESSAGE',"</div>");
    }

    if($this->app->Secure->GetPOST("speichern")!="")
    {
      $abweichenderechnungsadresse = $this->app->Secure->GetPOST("abweichenderechnungsadresse");
      $abweichendelieferadresse = $this->app->Secure->GetPOST("abweichendelieferadresse");
    } else {
      $abweichenderechnungsadresse = $this->app->DB->Select("SELECT abweichende_rechnungsadresse FROM adresse WHERE id='$adresse' LIMIT 1");
      $abweichendelieferadresse = $this->app->DB->Select("SELECT abweichendelieferadresse FROM bestellung WHERE id='$id' LIMIT 1");
    }
    if($abweichenderechnungsadresse) $this->app->Tpl->Set('RECHNUNGSADRESSE',"visible"); else $this->app->Tpl->Set('RECHNUNGSADRESSE',"none");
    if($abweichendelieferadresse) $this->app->Tpl->Set('LIEFERADRESSE',"visible"); else $this->app->Tpl->Set('LIEFERADRESSE',"none");

    if($belegnr=="" || $belegnr=="0")
    {
      $this->app->Tpl->Set('LOESCHEN',"<input type=\"button\" value=\"Abbrechen\" onclick=\"if(!confirm('Wirklich löschen?')) return false; else window.location.href='index.php?module=bestellung&action=delete&id=$id';\">");
    }
    $status= $this->app->DB->Select("SELECT status FROM bestellung WHERE id='$id' LIMIT 1");
    if($status=="")
      $this->app->DB->Update("UPDATE bestellung SET status='angelegt' WHERE id='$id' LIMIT 1");

    if($schreibschutz=="1" && $this->app->erp->RechteVorhanden("bestellung","schreibschutz"))
    {
      $this->app->Tpl->Add('MESSAGE',"<div class=\"warning\">Diese Bestellung ist schreibgesch&uuml;tzt und darf daher nicht mehr bearbeitet werden!&nbsp;<input type=\"button\" value=\"Schreibschutz entfernen\" onclick=\"if(!confirm('Soll der Schreibschutz f&uuml;r diese Bestellung wirklich entfernt werden?')) return false;else window.location.href='index.php?module=bestellung&action=schreibschutz&id=$id';\"></div>");
      //      $this->app->erp->CommonReadonly();
    }
    if($schreibschutz=="1")
    {

      $this->app->erp->RemoveReadonly("bestellung_bestaetigt");
      $this->app->erp->RemoveReadonly("bestaetigteslieferdatum");
      $this->app->erp->RemoveReadonly("bestellungbestaetigtabnummer");
      $this->app->erp->RemoveReadonly("bestellungbestaetigtper");

      $speichern = $this->app->Secure->GetPOST("speichern");
      if($speichern!="")
      { 
        $bestellung_bestaetigt = $this->app->Secure->GetPOST("bestellung_bestaetigt");
        $bestaetigteslieferdatum = $this->app->Secure->GetPOST("bestaetigteslieferdatum");
        $bestellungbestaetigtabnummer = $this->app->Secure->GetPOST("bestellungbestaetigtabnummer");
        $bestellungbestaetigtper = $this->app->Secure->GetPOST("bestellungbestaetigtper");
        
        if($bestellung_bestaetigt!="1") $bestellung_bestaetigt="0";

        $bestaetigteslieferdatum = $this->app->String->Convert($bestaetigteslieferdatum,"%1.%2.%3","%3-%2-%1");

        $this->app->DB->Update("UPDATE bestellung SET bestellung_bestaetigt='$bestellung_bestaetigt',bestaetigteslieferdatum='$bestaetigteslieferdatum',
          bestellungbestaetigtabnummer='$bestellungbestaetigtabnummer',bestellungbestaetigtper='$bestellungbestaetigtper' WHERE id='$id' LIMIT 1");

        // alle positonen ebenso anpassen
        $this->app->DB->Update("UPDATE bestellung_position SET lieferdatum='$bestaetigteslieferdatum' WHERE bestellung='$id' AND lieferdatum='0000-00-00'");
      }
      $this->app->erp->CommonReadonly();
    } else {
      $portofreilieferant_aktiv = $this->app->DB->Select("SELECT portofreilieferant_aktiv FROM adresse WHERE id='$adresse' LIMIT 1");
      $portofreiablieferant = $this->app->DB->Select("SELECT portofreiablieferant FROM adresse WHERE id='$adresse' LIMIT 1");
      $gesamtsumme = $this->app->erp->BEGesamtsummeOhnePorto($id,"bestellung");
      if($portofreilieferant_aktiv == 1 && $portofreiablieferant > 0 && $gesamtsumme <= $portofreiablieferant)
      {
        $this->app->Tpl->Add('MESSAGE',"<div class=\"warning\">Die Lieferung wird ab ".number_format($portofreiablieferant,2,',','.')." EUR (netto) Portofrei. 
            Aktuell sind nur ".number_format($gesamtsumme,2,',','.')." EUR (netto) in der Bestellung.</div>");
      }
    }

    if($schreibschutz != '1'){
      if($this->app->erp->Firmendaten("schnellanlegen") == "1"){
        $this->app->Tpl->Set('BUTTON_UEBERNEHMEN', '      <input type="button" value="&uuml;bernehmen" onclick="document.getElementById(\'uebernehmen\').value=1; document.getElementById(\'eprooform\').submit();"/><input type="hidden" id="uebernehmen" name="uebernehmen" value="0">
          ');
      }else{
        $this->app->Tpl->Set('BUTTON_UEBERNEHMEN', '
          <input type="button" value="&uuml;bernehmen" onclick="if(!confirm(\'Soll der neue Lieferant wirklich &uuml;bernommen werden? Es werden alle Felder &uuml;berladen.\')) return false;else document.getElementById(\'uebernehmen\').value=1; document.getElementById(\'eprooform\').submit();"/><input type="hidden" id="uebernehmen" name="uebernehmen" value="0">
          ');
      }
    }

    // immer wenn sich der lieferant genändert hat standartwerte setzen
    if($this->app->Secure->GetPOST("adresse")!="")
    {
      $tmp = $this->app->Secure->GetPOST("adresse");
      $lieferantennummer = $this->app->erp->FirstTillSpace($tmp);

      //$name = substr($tmp,6);
      
      $filter_projekt = $this->app->DB->Select("SELECT projekt FROM bestellung WHERE id = '$id' LIMIT 1");
      //if($filter_projekt)$filter_projekt = $this->app->DB->Select("SELECT id FROM projekt WHERE id= '$filter_projekt' and eigenernummernkreis = 1 LIMIT 1");
      $adresse =  $this->app->DB->Select("SELECT a.id FROM adresse a 
      LEFT JOIN adresse_rolle ar ON a.id = ar.adresse AND ar.projekt > 0 ".$this->app->erp->ProjektRechte("ar.projekt")."
      WHERE a.lieferantennummer='$lieferantennummer' AND a.geloescht=0 AND
      (1 ".$this->app->erp->ProjektRechte("a.projekt")." OR not isnull(ar.id))
      ORDER by ".($filter_projekt?" a.projekt = '$filter_projekt' DESC, ":"")." a.projekt LIMIT 1");

      $uebernehmen =$this->app->Secure->GetPOST("uebernehmen");
      if($schreibschutz != '1' && $uebernehmen=="1" && $adresse > 0) // nur neuladen bei tastendruck auf uebernehmen // FRAGEN!!!!
      {
        $this->app->erp->LoadBestellungStandardwerte($id,$adresse);
        $this->app->Location->execute('index.php?module=bestellung&action=edit&id='.$id);
      }
    }



    /* 
       $table = new EasyTable($this->app);
       $table->Query("SELECT a.bezeichnung as artikel, a.nummer as Nummer, b.menge, b.vpe as VPE, FORMAT(b.preis,4) as preis
       FROM bestellung_position b LEFT JOIN artikel a ON a.id=b.artikel
       WHERE b.bestellung='$id'");
       $table->DisplayNew(POSITIONEN,"Preis","noAction");
     */
    $arr = $this->app->DB->SelectArr("SELECT bearbeiter, belegnr, status, zahlungsweise,abweichendelieferadresse FROM bestellung WHERE id = '$id' LIMIT 1");
    if($arr){
      $arr = reset($arr);
      $bearbeiter = $arr['bearbeiter'];
      $status = $arr['status'];
      $bestellung = $arr['belegnr'];
      $zahlungsweise = $arr['zahlungsweise'];
      $abweichendelieferadresse = $arr['abweichendelieferadresse'];
    }

    $this->app->Tpl->Set('BEARBEITER',"<input type=\"text\" value=\"".$this->app->erp->GetAdressName($bearbeiter)."\" readonly>");

    $this->app->Tpl->Set('STATUS',"<input type=\"text\" size=\"30\" value=\"".$status."\" readonly [COMMONREADONLYINPUT]>");

    if($bestellung!='') $bestellung="keine Nummer";
    $this->app->Tpl->Set('ANGEBOT',"<input type=\"text\" value=\"".$bestellung."\" readonly>");

    if($this->app->Secure->GetPOST("zahlungsweise")!="") $zahlungsweise = $this->app->Secure->GetPOST("zahlungsweise");
    $zahlungsweise = strtolower($zahlungsweise);
    $this->app->Tpl->Set('RECHNUNG',"none");
    $this->app->Tpl->Set('KREDITKARTE',"none");
    $this->app->Tpl->Set('VORKASSE',"none");
    $this->app->Tpl->Set('PAYPAL',"none");
    $this->app->Tpl->Set('EINZUGSERMAECHTIGUNG',"none");
    if($zahlungsweise=="rechnung") $this->app->Tpl->Set('RECHNUNG',"");
    if($zahlungsweise=="paypal") $this->app->Tpl->Set('PAYPAL',"");
    if($zahlungsweise=="kreditkarte") $this->app->Tpl->Set('KREDITKARTE',"");
    if($zahlungsweise=="einzugsermaechtigung" || $zahlungsweise=="lastschrift") $this->app->Tpl->Set('EINZUGSERMAECHTIGUNG',"");
    if($zahlungsweise=="vorkasse" || $zahlungsweise=="kreditkarte" || $zahlungsweise=="paypal" || $zahlungsweise=="bar") $this->app->Tpl->Set('VORKASSE',"");

    if($this->app->Secure->GetPOST("abweichendelieferadresse")!="") $versandart = $this->app->Secure->GetPOST("abweichendelieferadresse");
    $this->app->Tpl->Set('ABWEICHENDELIEFERADRESSESTYLE',"none");
    if($abweichendelieferadresse=="1") $this->app->Tpl->Set('ABWEICHENDELIEFERADRESSESTYLE',"");

    $this->app->Tpl->Set('AKTIV_TAB1',"selected");
    parent::BestellungEdit();

    $this->app->erp->MessageHandlerStandardForm();	
    /*
       if($this->app->Secure->GetPOST("speichern")!="" && $storno=="")
       {
       if($this->app->Secure->GetGET("msg")=="")
       {
       $msg = $this->app->Tpl->Get(MESSAGE);
       $msg = $this->app->erp->base64_url_encode($msg);
       } else {
       $msg = $this->app->erp->base64_url_encode($msg);
       }

       header("Location: index.php?module=bestellung&action=edit&id=$id&msg=$msg");
       exit;

       } 
     */

    /*
       $summe = $this->app->DB->Select("SELECT SUM(menge*preis) FROM bestellung_position
       WHERE bestellung='$id'");

       $waehrung = $this->app->DB->Select("SELECT waehrung FROM bestellung_position
       WHERE bestellung='$id' LIMIT 1");

       $ust_befreit_check = $this->app->DB->Select("SELECT ust_befreit FROM bestellung WHERE id='$id' LIMIT 1");
       $summebrutto  = $summe *1.19;

       if($ust_befreit_check==0)
       $tmp = "Kunde zahlt mit UST";
       else if($ust_befreit_check==1)
       $tmp = "Kunde ist UST befreit";
       else
       $tmp = "Kunde zahlt keine UST";


       if($summe > 0)
       $this->app->Tpl->Add(POSITIONEN, "<br><center>Zu zahlen: <b>$summe (netto) $summebrutto (brutto) $waehrung</b> ($tmp)&nbsp;&nbsp;");

     */
    if($this->app->Secure->GetPOST('weiter')!='')
    {
      $this->app->Location->execute('index.php?module=bestellung&action=positionen&id='.$id);
    }
    $this->BestellungMenu();

  }

  function BestellungCreate()
  {
    //$this->app->Tpl->Add(TABS,"<li><h2>Bestellung</h2></li>");
    $this->app->erp->Headlines('Bestellung anlegen');
    $this->app->erp->MenuEintrag("index.php?module=bestellung&action=list","Zur&uuml;ck zur &Uuml;bersicht");


    $anlegen = $this->app->Secure->GetGET("anlegen");

    if($this->app->erp->Firmendaten("schnellanlegen")=="1" && $anlegen!="1")
    {
      $this->app->Location->execute('index.php?module=bestellung&action=create&anlegen=1');
    }

    if($anlegen != "")
    {
      $id = $this->app->erp->CreateBestellung();
      $this->app->erp->BestellungProtokoll($id,"Bestellung angelegt");


      $this->app->Location->execute('index.php?module=bestellung&action=edit&id='.$id);
    }
    $this->app->Tpl->Add('MESSAGE',"<div class=\"warning\">M&ouml;chten Sie eine Bestellung jetzt anlegen? &nbsp;
        <input type=\"button\" onclick=\"window.location.href='index.php?module=bestellung&action=create&anlegen=1'\" value=\"Ja - Bestellung jetzt anlegen\"></div><br>");
    $this->app->Tpl->Set('TAB1',"
        <table width=\"100%\" style=\"background-color: #fff; border: solid 1px #000;\" align=\"center\">
        <tr>
        <td align=\"center\">
        <br><b style=\"font-size: 14pt\">Bestellungen in Bearbeitung</b>
        <br>
        <br>
        Offene Bestellunge, die durch andere Mitarbeiter in Bearbeitung sind.
        <br>
        </td>
        </tr>
        </table>
        <br>
        [ANGEBOTE]");


    $this->app->Tpl->Set('AKTIV_TAB1',"selected");

    $this->app->YUI->TableSearch('ANGEBOTE',"bestellungeninbearbeitung");
    /*
       $table = new EasyTable($this->app);
       $table->Query("SELECT DATE_FORMAT(datum,'%d.%m.%y') as vom, if(belegnr,belegnr,'ohne Nummer') as beleg, name, status, id
       FROM bestellung WHERE status='angelegt' order by datum DESC, id DESC");
       $table->DisplayNew(ANGEBOTE, "<a href=\"index.php?module=bestellung&action=edit&id=%value%\"><img border=\"0\" src=\"./themes/new/images/edit.svg\"></a>
       <a onclick=\"if(!confirm('Wirklich löschen?')) return false; else window.location.href='index.php?module=bestellung&action=delete&id=%value%';\">
       <img src=\"./themes/new/images/delete.svg\" border=\"0\"></a>
       <a onclick=\"if(!confirm('Wirklich kopieren?')) return false; else window.location.href='index.php?module=bestellung&action=copy&id=%value%';\">
       <img src=\"./themes/new/images/copy.svg\" border=\"0\"></a>
       ");
     */

    $this->app->Tpl->Set('TABTEXT',"Bestellung anlegen");
    $this->app->Tpl->Parse('PAGE',"tabview.tpl");
    //parent::BestellungCreate();
  }

  function BestellungListMenu()
  {
    $backurl = $this->app->Secure->GetGET("backurl");
    $backurl = $this->app->erp->base64_url_decode($backurl);

    //$this->app->Tpl->Add(TABS,"<li><h2 class=\"allgemein\" style=\"background-color: [FARBE2]\">Allgemein</h2></li>");
    $this->app->erp->MenuEintrag("index.php?module=bestellung&action=list","&Uuml;bersicht");
    $this->app->erp->MenuEintrag("index.php?module=bestellung&action=create","Neue Bestellung anlegen");
    $this->app->erp->MenuEintrag("index.php?module=bestellung&action=offenepositionen","Offene Positionen");
    //$this->app->erp->MenuEintrag("index.php?module=bestellvorschlag&action=ausgehend","Bestellvorschlag");

    if(strlen($backurl)>5){
      $this->app->erp->MenuEintrag((string)$backurl, 'Zur&uuml;ck zur &Uuml;bersicht');
    }
    else{
      $this->app->erp->MenuEintrag('index.php', 'Zur&uuml;ck zur &Uuml;bersicht');
    }
  }


  function BestellungList()
  {
    //    $this->app->Tpl->Set(UEBERSCHRIFT,"Bestellungssuche");
    //   $this->app->Tpl->Set(KURZUEBERSCHRIFT,"Bestellungssuche");

    if($this->app->Secure->GetPOST('ausfuehren') && $this->app->erp->RechteVorhanden('bestellung', 'edit'))
    {
      $drucker = $this->app->Secure->GetPOST('seldrucker');
      $aktion = $this->app->Secure->GetPOST('sel_aktion');
      $auswahl = $this->app->Secure->GetPOST('auswahl');

      if($drucker > 0) $this->app->erp->BriefpapierHintergrundDisable($drucker);
      if(is_array($auswahl))
      {
        switch($aktion)
        {
          case 'mail':
            foreach($auswahl as $v)
            {
              $v = (int)$v;
              if($v){
                $bestellungarr = $this->app->DB->SelectRow("SELECT email,adresse,projekt,name,sprache FROM bestellung WHERE id = '$v' LIMIT 1");
                if(!empty($bestellungarr))
                {
                  $email = (String)$bestellungarr['email'];//$this->app->DB->Select("SELECT email FROM auftrag WHERE id = '$v' LIMIT 1");
                  $adresse = $bestellungarr['adresse'];//$this->app->DB->Select("SELECT adresse FROM auftrag WHERE id = '$v' LIMIT 1");
                  $projekt = $bestellungarr['projekt'];//$this->app->DB->Select("SELECT projekt FROM auftrag WHERE id = '$v' LIMIT 1");
                  $name = $bestellungarr['name'];// $this->app->DB->Select("SELECT name FROM auftrag WHERE id = '$v' LIMIT 1");
                  $sprache = $bestellungarr['sprache'];// $this->app->DB->Select("SELECT sprache FROM auftrag WHERE id='$v' LIMIT 1");
                }else{
                  $email = '';
                  $adresse = 0;
                  $projekt = 0;
                  $name = '';
                  $sprache = '';
                }

                if($sprache==''){
                  $sprache = $this->app->DB->Select("SELECT sprache FROM adresse WHERE id='$adresse' AND geloescht=0 LIMIT 1");
                }

                if($sprache=='') {
                  $sprache='de';
                }

                $emailtext = $this->app->erp->Geschaeftsbriefvorlage($sprache,'bestellung',$projekt,$name,$v);

                if($email === '')
                {
                  $email = (String)$this->app->DB->Select("SELECT email FROM adresse WHERE id = '$adresse' LIMIT 1");
                }
                if($email !== '')
                {
                  $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable;
                  if(class_exists('BestellungPDFCustom'))
                  {
                    $Brief = new BestellungPDFCustom($this->app,$projekt);
                  }else{
                    $Brief = new BestellungPDF($this->app,$projekt);
                  }
                  $Brief->GetBestellung($v);
                  $_tmpfile = $Brief->displayTMP();
                  $Brief->ArchiviereDocument();
                  unlink($_tmpfile);
                  $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable;
                  if(class_exists('BestellungPDFCustom'))
                  {
                    $Brief = new BestellungPDFCustom($this->app,$projekt);
                  }else{
                    $Brief = new BestellungPDF($this->app,$projekt);
                  }
                  $Brief->GetBestellung($v);
                  $tmpfile = $Brief->displayTMP();
                  $Brief->ArchiviereDocument();

                  $fileid = $this->app->erp->CreateDatei($Brief->filename,'bestellung','','',$tmpfile,$this->app->User->GetName());
                  $this->app->erp->AddDateiStichwort($fileid,'bestellung','bestellung',$v);
                  $this->app->erp->DokumentSend($adresse,'bestellung', $v, 'email',$emailtext['betreff'],$emailtext['text'],array($tmpfile),"","",$projekt,$email, $name);
                  $ansprechpartner = $name." <".$email.">";
                  $this->app->DB->Insert("INSERT INTO dokumente_send
                      (id,dokument,zeit,bearbeiter,adresse,parameter,art,betreff,text,projekt,ansprechpartner,versendet,dateiid) VALUES ('','bestellung',NOW(),'".$this->app->DB->real_escape_string($this->app->User->GetName())."',
                        '$adresse','$v','email','".$this->app->DB->real_escape_string($emailtext['betreff'])."','".$this->app->DB->real_escape_string($emailtext['text'])."','$projekt','$ansprechpartner',1,'$fileid')");
                  $tmpid = $this->app->DB->GetInsertID();
                  unlink($tmpfile);
                  $this->app->DB->Update("UPDATE bestellung SET versendet=1, versendet_am=NOW(),
                    versendet_per='email',versendet_durch='".$this->app->DB->real_escape_string($this->app->User->GetName())."',schreibschutz='1' WHERE id='$v' LIMIT 1");
                  $this->app->erp->BestellungProtokoll($v,'Bestellung versendet');
                }
              }
            }
            break;
          case 'freigeben':
            foreach($auswahl as $v)
            {
              $v = (int)$v;
              if($v){
                if($this->app->DB->Select("SELECT id FROM bestellung WHERE id = '$v' AND status <> 'storniert' LIMIT 1")){
                  $this->BestellungFreigegeben($v);
                }
              }
            }
            break;
          case 'versendet':
            foreach($auswahl as $v)
            {
              $v = (int)$v;
              if($v) {
                $projekt = $this->app->DB->Select("SELECT projekt FROM bestellung WHERE id='$v' LIMIT 1");
                if(class_exists('BestellungPDFCustom'))
                {
                  $Brief = new BestellungPDFCustom($this->app,$projekt);
                }else{
                  $Brief = new BestellungPDF($this->app,$projekt);
                }
                $Brief->GetBestellung($v);
                $tmpfile = $Brief->displayTMP();
                $Brief->ArchiviereDocument();
                $this->app->erp->BestellungProtokoll($v,"Bestellung versendet");
                $this->app->erp->closeInvoice($v);
                $this->app->DB->Update("UPDATE bestellung SET schreibschutz=1, versendet = 1, status='versendet' WHERE id = '$v' LIMIT 1");
              }
            }
            break;
          case 'abgeschlossen':
            foreach($auswahl as $v)
            {
              $v = (int)$v;
              if($v){
                if($this->app->DB->Select("SELECT id FROM bestellung WHERE id = '$v' AND status != 'angelegt' AND status != 'abgeschlossen' LIMIT 1")){
                  $this->BestellungAbschliessen($v);
                }
              }
            }
            break;
          case 'drucken':
            if($drucker)
            {
              foreach($auswahl as $v)
              {
                $v = (int)$v;
                if($v){
                  $bestellungsdaten = $this->app->DB->Select("SELECT projekt, adresse FROM bestellung WHERE id='$v' LIMIT 1");
                  $projekt = $bestellungsdaten['projekt'];
                  $adressId = $bestellungsdaten['adresse'];
                  $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable;
                  if(class_exists('BestellungPDFCustom'))
                  {
                    $Brief = new BestellungPDFCustom($this->app,$projekt);
                  }else{
                    $Brief = new BestellungPDF($this->app,$projekt);
                  }
                  $Brief->GetBestellung($v);
                  $_tmpfile = $Brief->displayTMP();
                  $Brief->ArchiviereDocument();
                  unlink($_tmpfile);
                  $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable;
                  if(class_exists('BestellungPDFCustom'))
                  {
                    $Brief = new BestellungPDFCustom($this->app,$projekt);
                  }else{
                    $Brief = new BestellungPDF($this->app,$projekt);
                  }
                  $Brief->GetBestellung($v);
                  $tmpfile = $Brief->displayTMP();
                  $Brief->ArchiviereDocument();
                  $this->app->printer->Drucken($drucker,$tmpfile);
                  $doctype = 'bestellung';
                  $this->app->erp->RunHook('dokumentsend_ende', 5, $doctype, $v, $projekt, $adressId, $aktion);
                  $this->app->erp->BestellungProtokoll($v,"Bestellung versendet");
                  unlink($tmpfile);
                }
              }
            }
            break;
          case 'pdf':
            foreach($auswahl as $v)
            {
              $v = (int)$v;
              if($v){
                $projekt = $this->app->DB->Select("SELECT projekt FROM bestellung WHERE id='$v' LIMIT 1");
                $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable;
                if(class_exists('BestellungPDFCustom'))
                {
                  $Brief = new BestellungPDFCustom($this->app,$projekt);
                }else{
                  $Brief = new BestellungPDF($this->app,$projekt);
                }
                $Brief->GetBestellung($v);
                $_tmpfile = $Brief->displayTMP();
                $Brief->ArchiviereDocument();
                unlink($_tmpfile);
                $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable;
                if(class_exists('BestellungPDFCustom'))
                {
                  $Brief = new BestellungPDFCustom($this->app,$projekt);
                }else{
                  $Brief = new BestellungPDF($this->app,$projekt);
                }
                $Brief->GetBestellung($v);
                $tmpfile[] = $Brief->displayTMP();
                //$Brief->ArchiviereDocument();
              }
            }

            if((!empty($tmpfile)?count($tmpfile):0) > 0){
              try {
                /** @var PdfMerger $pdfMerger */
                $pdfMerger = $this->app->Container->get('PdfMerger');
                $mergeOutputPath = realpath($this->app->erp->GetTMP()) . '/' . uniqid('sammelpdf_', true) . '.pdf';
                $pdfMerger->merge($tmpfile, $mergeOutputPath);

                foreach($tmpfile as $key=>$value) {
                  unlink($value);
                }

                header('Content-type:application/pdf');
                header('Content-Disposition: attachment;filename='.md5(microtime(true)).'.pdf');
                readfile($mergeOutputPath);
                $this->app->ExitXentral();
              } catch (PdfComponentExceptionInterface $exception) {
                echo 'Fehler beim Generieren der Sammelpdf: ' . htmlspecialchars($exception->getMessage());
                $this->app->ExitXentral();
              }
            }
            break;
        }
      }
    }
    
    $speichern = $this->app->Secure->GetPOST("speichern");
    $verbindlichkeiteninfo = $this->app->Secure->GetPOST("verbindlichkeiteninfo");
    $bestellungid = $this->app->Secure->GetPOST("bestellungid");

    if($this->app->erp->Firmendaten("bestellungabschliessen"))
    {
      $offene = $this->app->DB->SelectArr("SELECT id FROM bestellung WHERE status='freigegeben' OR status='versendet'");
      foreach($offene as $order)
      {
        $this->checkAbschliessen($order['id']);
      }
    }

    if($verbindlichkeiteninfo!="" && $speichern!="" && $bestellungid > 0)
      $this->app->DB->Update("UPDATE bestellung SET verbindlichkeiteninfo='$verbindlichkeiteninfo' WHERE id='$bestellungid' LIMIT 1");

    $this->BestellungListMenu();

      $zahlungsweisen = $this->app->DB->SelectArr('
      SELECT
        zahlungsweise
      FROM
        bestellung
      GROUP BY
        zahlungsweise
    ');

    $zahlungsweiseStr = '';
    if ($zahlungsweisen) {
      foreach ($zahlungsweisen as $zahlungsweise) {
        if (empty($zahlungsweise['zahlungsweise'])) {
          continue;
        }
        $zahlungsweiseStr .= '<option name="' . $zahlungsweise['zahlungsweise'] . '">' . ucfirst($zahlungsweise['zahlungsweise']) . '</option>';
      }
    }

    $status = $this->app->DB->SelectArr('
      SELECT
        status
      FROM
        bestellung
      GROUP BY
        status
    ');

    $statusStr = '';
    if ($status) {
      foreach ($status as $statusE) {
        if (empty($statusE['status'])) {
          continue;
        }
        $statusStr .= '<option name="' . $statusE['status'] . '">' . ucfirst($statusE['status']) . '</option>';
      }
    }

    $versandarten = $this->app->DB->SelectArr('
      SELECT
        versandart
      FROM
        bestellung
      GROUP BY
        versandart
    ');

    $versandartenStr = '';
    if ($versandarten) {
      foreach ($versandarten as $versandart) {
        if (empty($versandart['versandart'])) {
          continue;
        }
        $versandartenStr .= '<option name="' . $versandart['versandart'] . '">' . ucfirst($versandart['versandart']) . '</option>';
      }
    }

    $laender = $this->app->erp->GetSelectLaenderliste();
    $laenderStr = '';
    foreach ($laender as $landKey => $land) {
      $laenderStr .= '<option value="' . $landKey . '">' . $land . '</option>';
    }

    $this->app->Tpl->Set('AKTIV_TAB1',"selected");
    $this->app->Tpl->Set('INHALT',"");

    // $this->app->Tpl->Add(STATUS,$statusStr);
    // $this->app->Tpl->Add(VERSANDARTEN,$versandartenStr);

    $this->app->YUI->DatePicker("datumVon");
    $this->app->YUI->DatePicker("datumBis");
    $this->app->YUI->AutoComplete("projekt", "projektname", 1);
    $this->app->YUI->AutoComplete("lieferantennummer", "lieferant", 1);
    $this->app->YUI->AutoComplete("artikel", "artikelnummer", 1);
    $this->app->YUI->AutoComplete("bestellungnummer", "bestellung", 1);

    $this->app->Tpl->Add('ZAHLUNGSWEISEN',$zahlungsweiseStr);
    $this->app->Tpl->Add('STATUS',$statusStr);
    $this->app->Tpl->Add('VERSANDARTEN',$versandartenStr);
    $this->app->Tpl->Add('LAENDER',$laenderStr);
    $this->app->Tpl->Parse('TAB1',"bestellung_table_filter.tpl");

    $this->app->YUI->TableSearch('TAB1',"bestellungen");
    $this->app->YUI->TableSearch('TAB2',"bestellungeninbearbeitung");

    $this->app->Tpl->Set('SELDRUCKER', $this->app->erp->GetSelectDrucker($this->app->User->GetParameter('rechnung_list_drucker')));

    $this->app->Tpl->Parse('PAGE',"bestellunguebersicht.tpl");

    return;

    /*
    // suche
    $sql = $this->app->erp->BestellungSuche();

    // offene Bestellungen
    $this->app->Tpl->Set(SUBSUBHEADING,"Offene Bestellunge");

    $table = new EasyTable($this->app);
    $table->Query($sql,$_SESSION[bestellungtreffer]);

    //$table->Query("SELECT DATE_FORMAT(a.datum,'%d.%m.%Y') as vom, if(a.belegnr,a.belegnr,'ohne Nummer') as Bestellung, a.name, p.abkuerzung as projekt, a.id
    //  FROM bestellung a, projekt p WHERE (a.status='freigegeben' OR a.status='versendet') AND p.id=a.projekt order by a.datum DESC, a.id DESC",10);


    $table->DisplayOwn(INHALT, "<a href=\"index.php?module=bestellung&action=edit&id=%value%\"><img border=\"0\" src=\"./themes/new/images/edit.svg\"></a>
    <a href=\"index.php?module=bestellung&action=pdf&id=%value%\"><img border=\"0\" src=\"./themes/new/images/pdf.svg\"></a>
    <a onclick=\"if(!confirm('Wirklich kopieren?')) return false; else window.location.href='index.php?module=bestellung&action=copy&id=%value%';\">
    <img src=\"./themes/new/images/copy.svg\" border=\"0\"></a>
    <a onclick=\"if(!confirm('Weiterf&uuml;fhren als Auftrag?')) return false; else window.location.href='index.php?module=bestellung&action=auftrag&id=%value%';\">
    <img src=\"./themes/new/images/right.png\" border=\"0\"></a>

    ");
    $this->app->Tpl->Parse(TAB1,"rahmen70.tpl");

    $this->app->Tpl->Set(INHALT,"");
    // wartende Bestellungen

    $table = new EasyTable($this->app);
    $table->Query("SELECT DATE_FORMAT(a.datum,'%d.%m.%y') as vom, if(a.belegnr,a.belegnr,'ohne Nummer') as Bestellung, ad.lieferantennummer as kunde, a.name, p.abkuerzung as projekt, a.id
    FROM bestellung a, projekt p, adresse ad WHERE (a.status='freigegeben' OR a.status='versendet') AND p.id=a.projekt AND a.adresse=ad.id order by a.datum DESC, a.id DESC");
    $table->DisplayNew(INHALT, "<a href=\"index.php?module=bestellung&action=edit&id=%value%\"><img border=\"0\" src=\"./themes/new/images/edit.svg\"></a>
    <a href=\"index.php?module=bestellung&action=pdf&id=%value%\"><img border=\"0\" src=\"./themes/new/images/pdf.svg\"></a>
    <a onclick=\"if(!confirm('Wirklich kopieren?')) return false; else window.location.href='index.php?module=bestellung&action=copy&id=%value%';\">
    <img src=\"./themes/new/images/copy.svg\" border=\"0\"></a>
    ");
    $this->app->Tpl->Parse(TAB2,"rahmen70.tpl");


    $this->app->Tpl->Set(INHALT,"");
    // In Bearbeitung
    $this->app->Tpl->Set(SUBSUBHEADING,"In Bearbeitung");
    $table = new EasyTable($this->app);
    $table->Query("SELECT DATE_FORMAT(datum,'%d.%m.%y') as vom, if(belegnr,belegnr,'ohne Nummer') as auftrag, name, vertrieb, status, id
    FROM bestellung WHERE status='angelegt' order by datum DESC, id DESC");
    $table->DisplayNew(INHALT, "<a href=\"index.php?module=bestellung&action=edit&id=%value%\"><img border=\"0\" src=\"./themes/new/images/edit.svg\"></a>
    <a onclick=\"if(!confirm('Wirklich löschen?')) return false; else window.location.href='index.php?module=bestellung&action=delete&id=%value%';\">
    <img src=\"./themes/new/images/delete.svg\" border=\"0\"></a>
    <a onclick=\"if(!confirm('Wirklich kopieren?')) return false; else window.location.href='index.php?module=bestellung&action=copy&id=%value%';\">
    <img src=\"./themes/new/images/copy.svg\" border=\"0\"></a>
    ");

    $this->app->Tpl->Parse(TAB3,"rahmen70.tpl");
     */


    /*
       $this->app->Tpl->Set(TAB2,"lieferant, bestellung, waehrung, sprache, liefertermin, steuersatz, einkäufer, freigabe<br>
       <br>Bestellung (NR),Bestellart (NB), Bestelldatum
       <br>Projekt
       <br>Kostenstelle pro Position
       <br>Terminbestellung (am xx.xx.xxxx raus damit)
       <br>vorschlagsdaten für positionen
       <br>proposition reinklicken zum ändern und reihenfolge tabelle 
       <br>Bestellung muss werden wie bestellung (bestellung beschreibung = allgemein)
       <br>Positionen (wie stueckliste)
       <br>Wareneingang / Rückstand
       <br>Etiketten
       <br>Freigabe
       <br>Dokument direkt faxen
       ");
     */
  }
  function BestellungRechnungsLieferadresse($auftragid)
  {
    $data = $this->app->DB->SelectArr("SELECT * FROM bestellung WHERE id='$auftragid' LIMIT 1");

    foreach($data[0] as $key=>$value)
    {
      if($data[0][$key]!='' && $key!=='abweichendelieferadresse' && $key!=='land' && $key!=='plz' && $key!=='lieferland' && $key!=='lieferplz') {
        $data[0][$key] = $data[0][$key].'<br>';
      }
    }


    $rechnungsadresse = $data[0]['name']."".$data[0]['ansprechpartner']."".$data[0]['abteilung']."".$data[0]['unterabteilung'].
      "".$data[0]['strasse']."".$data[0]['adresszusatz']."".$data[0]['land']."-".$data[0]['plz']." ".$data[0]['ort'];

    if($data[0]['abweichendelieferadresse']!=0){

      $lieferadresse = $data[0]['liefername']."".$data[0]['lieferansprechpartner']."".$data[0]['lieferabteilung']."".$data[0]['lieferunterabteilung'].
        "".$data[0]['lieferstrasse']."".$data[0]['lieferadresszusatz']."".$data[0]['lieferland']."-".$data[0]['lieferplz']." ".$data[0]['lieferort'];


    } else {
      $lieferadresse = "keine abweichende Lieferadresse";
    }

    return "<table width=\"100%\">
      <tr valign=\"top\"><td width=\"50%\"><b>Bestellt bei:</b><br><br>$rechnungsadresse<br></td></tr>
      <tr><td><b>Lieferadresse:</b><br><br>$lieferadresse</td></tr></table>";
  }

  public function BestellungNeuberechnen($id)
  {
    $summeV = $this->app->DB->Select(
      "SELECT IFNULL(SUM(menge*preis), 0) 
       FROM bestellung_position 
       WHERE umsatzsteuer!='ermaessigt' AND umsatzsteuer!='befreit' AND bestellung='$id' AND (isnull(steuersatz) OR steuersatz < 0)"
    );
    $summeR = $this->app->DB->Select("SELECT IFNULL(SUM(menge*preis), 0) FROM bestellung_position WHERE umsatzsteuer='ermaessigt' AND bestellung='$id' AND (isnull(steuersatz) OR steuersatz < 0)");
    $summeS = (float)$this->app->DB->Select("SELECT 
    IFNULL(
      SUM(menge*preis * 
        if(umsatzsteuer = 'befreit',
          0,
          IF(steuersatz < 0 OR isnull(steuersatz),0,steuersatz / 100)
        )
      )
    ,0) 
    FROM bestellung_position WHERE bestellung='$id' AND umsatzsteuer!='ermaessigt' AND umsatzsteuer!='normal'
          AND ((steuersatz IS NOT NULL AND steuersatz >= 0) OR umsatzsteuer='befreit')");

    $summeNetto = $this->app->DB->Select("SELECT IFNULL(SUM(menge*preis),0) FROM bestellung_position WHERE bestellung='$id'");

    $ust_befreit = $this->app->DB->Select("SELECT ust_befreit FROM bestellung WHERE id='$id' LIMIT 1");

    if($ust_befreit>0)
    {
      $rechnungsbetrag = $summeNetto;
    } else {
      $rechnungsbetrag = $summeNetto + ($summeV*$this->app->erp->GetSteuersatzNormal(true,$id,'bestellung')-$summeV)+ ($summeR*$this->app->erp->GetSteuersatzErmaessigt(true,$id,'bestellung')-$summeR)+$summeS;
    }
    $this->app->DB->Update("UPDATE bestellung SET gesamtsumme='$rechnungsbetrag' WHERE id='$id' LIMIT 1");
  }

  public function DeleteBestellung($id)
  {
    if($id <= 0)
    {
      return;
    }
    $belegnr = $this->app->DB->Select("SELECT belegnr FROM bestellung WHERE id='$id' LIMIT 1");
    if($belegnr=='' || $belegnr=='0')
    {
      $this->app->DB->Delete("DELETE FROM bestellung_position WHERE bestellung='$id'");
      $this->app->DB->Delete("DELETE FROM bestellung_protokoll WHERE bestellung='$id'");
      $this->app->DB->Delete("DELETE FROM bestellung WHERE id='$id' LIMIT 1");
    }
  }

  public function CreateBestellung($adresse='')
  {
    $projekt = $this->app->erp->GetCreateProjekt($adresse);
    $belegmax = '';
    $ohnebriefpapier = $this->app->erp->Firmendaten('bestellung_ohnebriefpapier');
    $bestellungohnepreis = $this->app->erp->Firmendaten('bestellungohnepreis');

    $eigenartikelnummer = $this->app->erp->Firmendaten('bestellungeigeneartikelnummer');
    $bestellunglangeartikelnummern = $this->app->erp->Firmendaten('bestellunglangeartikelnummern');

    $this->app->DB->Insert("INSERT INTO bestellung (datum,bearbeiter,firma,belegnr,adresse,status,artikelnummerninfotext,ohne_briefpapier,bestellungohnepreis,projekt,langeartikelnummern)
            VALUES (NOW(),'".$this->app->User->GetName()."','".$this->app->User->GetFirma()."','$belegmax','$adresse','angelegt',".($eigenartikelnummer?'1':'0').",'".$ohnebriefpapier."','".$bestellungohnepreis."','".$projekt."',".($bestellunglangeartikelnummern?'1':'0').')');
    $id = $this->app->DB->GetInsertID();

    $this->app->erp->ObjektProtokoll('bestellung',$id,'bestellung_create','Bestellung angelegt');
    $this->app->erp->SchnellFreigabe('bestellung',$id);

    $this->app->erp->LoadSteuersaetzeWaehrung($id,'bestellung');
    $this->app->erp->EventAPIAdd('EventBestellungCreate',$id,'bestellung','create');
    return $id;
  }

  public function AddBestellungPosition($bestellung, $einkauf,$menge,$datum, $beschreibung = '',$artikel='',$einheit='', $waehrung = '')
  {
    $beschreibung = $this->app->DB->real_escape_string($beschreibung);

    if($artikel<=0)
    {
      if($einkauf > 0){
        $einkaufarr = $this->app->DB->SelectRow("SELECT * FROM einkaufspreise WHERE id='$einkauf' LIMIT 1");
      }
      if(!empty($einkaufarr))
      {
        $artikel = $einkaufarr['artikel'];
        $article = $this->app->DB->SelectRow(
          "SELECT `nummer`, `name_de`, `name_en`, `umsatzsteuer` 
          FROM `artikel` WHERE `id` = {$artikel}"
        );
        $preis = $einkaufarr['preis'];
        $projekt = $einkaufarr['projekt'];
        $waehrung = $einkaufarr['waehrung'];
        $vpe = $einkaufarr['vpe'];
        $bezeichnunglieferant = $this->app->DB->real_escape_string($einkaufarr['bezeichnunglieferant']);
        $bestellnummer = $this->app->DB->real_escape_string($einkaufarr['bestellnummer']);
      }else{
        $artikel = 0;
        $preis = 0;
        $projekt = 0;
        $waehrung = '';
        $vpe = '';
        $bezeichnunglieferant = '';
        $bestellnummer = '';
      }
    }else{
      $article = $this->app->DB->SelectRow(
        "SELECT `nummer`, `name_de`, `name_en`, `umsatzsteuer` 
        FROM `artikel` WHERE `id` = {$artikel}"
      );
      $bestellnummer = $article['nummer'];
      $bezeichnunglieferant = $this->app->DB->real_escape_string($article['name_de']);
      $projekt = $projekt = $this->app->DB->Select("SELECT projekt FROM bestellung WHERE id='$bestellung' LIMIT 1");
      $preis = 0;
    }

    if($projekt <= 0) {
      $projekt = $this->app->DB->Select("SELECT projekt FROM bestellung WHERE id='$bestellung' LIMIT 1");
    }

    if($bezeichnunglieferant==''){
      $languageIso = $this->app->erp->GetSpracheBelegISO('bestellung', $bestellung);

      if($languageIso === 'EN'){
        $bezeichnunglieferant = $this->app->DB->real_escape_string($article['name_en']);
      }

      if(empty($bezeichnunglieferant)){
        $bezeichnunglieferant = $this->app->DB->real_escape_string($article['name_de']);
      }
    }

    $umsatzsteuer = $article['umsatzsteuer'];
    if($umsatzsteuer=='') {
      $umsatzsteuer='normal';
    }
    $sort = $this->app->DB->Select("SELECT MAX(sort) FROM bestellung_position WHERE bestellung='$bestellung' LIMIT 1");
    $sort++;
    $this->app->DB->Insert("INSERT INTO bestellung_position (bestellung,artikel,bezeichnunglieferant,bestellnummer,menge,preis, waehrung, sort,lieferdatum, umsatzsteuer, status,projekt,vpe, beschreibung,einheit)
            VALUES ('$bestellung','$artikel','$bezeichnunglieferant','$bestellnummer','$menge','$preis','$waehrung','$sort','$datum','$umsatzsteuer','angelegt','$projekt','$vpe','$beschreibung','$einheit')");
    return $this->app->DB->GetInsertID();
  }

  public function CopyBestellung($id)
  {
    $this->app->DB->Insert('INSERT INTO bestellung (id) VALUES (NULL)');
    $newid = $this->app->DB->GetInsertID();
    $arr = $this->app->DB->SelectRow("SELECT NOW() as datum,projekt,bodyzusatz,freitext,adresse,name,abteilung,unterabteilung,strasse,adresszusatz,plz,ort,land,ustid,email,telefon,telefax,betreff,kundennummer,versandart,einkaeufer,zahlungsweise,zahlungszieltage,'angelegt' as status,typ,
            zahlungszieltageskonto,zahlungszielskonto,firma,'angelegt' as status,abweichendelieferadresse,liefername,lieferabteilung,lieferunterabteilung,ust_befreit,
            lieferland,lieferstrasse,lieferort,lieferplz,lieferadresszusatz,lieferansprechpartner,sprache,anzeigesteuer,waehrung,kostenstelle FROM bestellung WHERE id='$id' LIMIT 1");
    $arr['bundesstaat'] = $this->app->DB->Select("SELECT bundesstaat FROM bestellung WHERE id='$id' LIMIT 1");
    $this->app->DB->UpdateArr('bestellung',$newid,'id',$arr, true);
    $pos = $this->app->DB->SelectArr("SELECT * FROM bestellung_position WHERE bestellung='$id'");
    $cpos = !empty($pos)?count($pos):0;
    for($i=0;$i<$cpos;$i++){
      $this->app->DB->Insert("INSERT INTO bestellung_position (bestellung) VALUES ($newid)");
      $newposid = $this->app->DB->GetInsertID();
      $pos[$i]['bestellung']=$newid;
      $pos[$i]['auftrag_position_id']=0;
      $this->app->DB->UpdateArr('bestellung_position',$newposid,'id',$pos[$i], true);
      if(is_null($pos[$i]['steuersatz'])){
        $this->app->DB->Update("UPDATE bestellung_position SET steuersatz = null WHERE id = '$newposid' LIMIT 1");
      }
    }

    $this->app->erp->CheckFreifelder('bestellung',$newid);
    $this->app->erp->CopyBelegZwischenpositionen('bestellung',$id,'bestellung',$newid);

    $this->app->DB->Update("UPDATE bestellung_position SET geliefert=0, mengemanuellgeliefertaktiviert=0,abgeschlossen='0',abgerechnet='0' WHERE bestellung='$newid'");
    $this->app->erp->LoadSteuersaetzeWaehrung($newid,'bestellung');

    $this->app->erp->SchnellFreigabe('bestellung',$newid);

    return $newid;
  }

  public function LoadBestellungStandardwerte($id,$adresse)
  {
    // standard adresse von lieferant
    $arr = $this->app->DB->SelectArr("SELECT * FROM adresse WHERE id='$adresse' AND geloescht=0 LIMIT 1");
    $rolle_projekt = $this->app->DB->Select("SELECT parameter FROM adresse_rolle WHERE adresse='$adresse' AND subjekt='Lieferant' AND objekt='Projekt' AND (bis ='0000-00-00' OR bis <= NOW()) LIMIT 1");

    if($rolle_projekt > 0)
    {
      $arr[0]['projekt'] = $rolle_projekt;
    }
    $field = array('anschreiben','name','abteilung','unterabteilung','strasse','adresszusatz','plz','ort','land','ustid','email','telefon','telefax','lieferantennummer','projekt','ust_befreit','titel','lieferbedingung','ansprechpartner');
    foreach($field as $key=>$value)
    {
      if($value==='projekt' && $this->app->Secure->POST[$value]!=''&&0)
      {
        $uparr[$value] = $this->app->Secure->POST[$value];
      } else {
        $this->app->Secure->POST[$value] = str_replace("'", '&apos;',$arr[0][$value]);
        $uparr[$value] = str_replace("'", '&apos;',$arr[0][$value]);
      }
      //$this->app->Secure->POST[$value] = $arr[0][$value];
      //$uparr[$value] = $arr[0][$value];
    }
    $uparr['adresse'] = $adresse;
    $this->app->DB->UpdateArr('bestellung',$id,'id',$uparr);
    $uparr=null;

    //liefernantenvorlage
    $arr = $this->app->DB->SelectArr("SELECT
            kundennummerlieferant as kundennummer,
            zahlungsweiselieferant as zahlungsweise,
            zahlungszieltagelieferant as zahlungszieltage,
            zahlungszieltageskontolieferant as zahlungszieltageskonto,
            zahlungszielskontolieferant as zahlungszielskonto,
            versandartlieferant as versandart,
            waehrung
            FROM adresse WHERE id='$adresse' LIMIT 1");

    // falls von Benutzer projekt ueberladen werden soll
    $projekt_bevorzugt=$this->app->DB->Select("SELECT projekt_bevorzugen FROM user WHERE id='".$this->app->User->GetID()."' LIMIT 1");
    if($projekt_bevorzugt=='1')
    {
      $uparr['projekt'] = $this->app->DB->Select("SELECT projekt FROM user WHERE id='".$this->app->User->GetID()."' LIMIT 1");
      $arr[0]['projekt'] = $uparr['projekt'];
      $this->app->Secure->POST['projekt']=$this->app->DB->Select("SELECT abkuerzung FROM projekt WHERE id='".$arr[0]['projekt']."' AND id > 0 LIMIT 1");
    }

    $field = array('kundennummer','zahlungsweise','zahlungszieltage','zahlungszieltageskonto','zahlungszielskonto','versandart','waehrung');
    foreach($field as $key=>$value)
    {
      $uparr[$value] = $arr[0][$value];
      $this->app->Secure->POST[$value] = $arr[0][$value];
    }


    $this->app->DB->UpdateArr('bestellung',$id,'id',$uparr);

    //standardprojekt
    //$projekt = $this->app->DB->Select("SELECT projekt FROM adresse WHERE id='$adresse' AND geloescht=0 LIMIT 1");
    //$this->app->Secure->POST[projekt] = $projekt;
    $this->app->erp->LoadAdresseStandard('bestellung',$id,$adresse);
  }

  public function BestellungEAN()
  {
    $id=$this->app->Secure->GetGET("id");
    $scanner=$this->app->Secure->GetPOST("scanner");
    $menge=$this->app->Secure->GetPOST("menge");
    $posAdd = $this->app->Secure->GetPOST('posadd');
    $posDel = $this->app->Secure->GetPost('posdel');

    /** @var ScanArticleService  $scanArticleService */
    $scanArticleService = $this->app->Container->get('ScanArticleService');

    $this->BestellungMenu();
    $schreibschutz = $this->app->DB->Select("SELECT schreibschutz FROM bestellung WHERE id='$id' LIMIT 1");

    if($scanner!="" && $schreibschutz!="1")
    {
      if(!is_numeric($menge)){
        $menge=1;
      }
      $adresse = $this->app->DB->Select("SELECT adresse FROM bestellung WHERE id='$id' LIMIT 1");
      try{
        $scanArticleService->writeArticleToSession('bestellung',$scanner,$menge,$id);
      } catch(ArticleNotFoundException $e){
        $this->app->Tpl->Set('TAB1',"<div class=\"error\">{|Der Artikel wurde nicht gefunden|}: ".$scanner."</div>");
      } catch(InvalidArgumentException $e){
        $this->app->Tpl->Set('TAB1',"<div class=\"error\">{|Fehler beim Schreiben in die Session|}</div>");
      }
    }

    if($schreibschutz=="1"){
      $this->app->Tpl->Set('TAB1',"<div class=\"info\">Der Schreibschutz ist aktiviert. Bitte entfernen Sie diesen.</div>");
    }
    else{

      if(!empty($posAdd)){
        try{
          $scanArticleService->savePositions('bestellung',$id);
          $this->app->Tpl->Set('MESSAGE',"<div class=\"info\">{|Positionen hinzugefügt|}</div>");
        } catch(Exception $e){
          $this->app->Tpl->Set('MESSAGE',"<div class=\"error\">{|Positionen nicht gespeichert|}!</div>");
        }
      }

      if(!empty($posDel)){
        $scanArticleService->clearAllArticleDataInSession('bestellung');
      }

      $gescannteArtikel = $scanArticleService->getAllArticleDataFromSession('bestellung');
      if(!empty($gescannteArtikel)){

        $table = new EasyTable($this->app);
        $table->headings = ['Artikelnummer','Artikel','Menge','Preis'];

        foreach($gescannteArtikel as $a){

          $row['nummer'] = $a['number'];
          $row['name'] = $a['name'];
          $row['menge'] = $a['amount'];
          $row['preis'] = $a['price'];

          if(!empty($row)){
            $table->AddRow($row);
          }
        }
        $table->DisplayNew('GESCANNTEARTIKEL','Preis','noAction');
        $this->app->Tpl->Set('POSITIONENSPEICHERN','<input type="submit" id="posadd" name="posadd" value="Positionen hinzufügen"><input type="submit" id="posdel" name="posdel" value="Löschen">');
      }

      $this->app->Tpl->Parse('TAB1',"bestellung_ean.tpl");
    }
    $this->app->Tpl->Parse('PAGE',"tabview.tpl");
  }
}