private static function getDbh()
 {
     if (empty(self::$dbh)) {
         self::$dbh = DBManager::create();
         self::$dbh->connect();
     }
     return self::$dbh;
 }
 public static function convertToABC_ADT($listeVonTeilen)
 {
     $listeVonABC_ADT = array();
     foreach ($listeVonTeilen as $teil) {
         $abc_adt = ABC_Analyse::createABC_ADT($teil->getTeileNr(), $teil->getBezeichnung(), $teil->getPreis(), AuftragsVerfolgung::getBedarfeVonTeil($teil->getBezeichnung()));
         array_push($listeVonABC_ADT, $abc_adt);
     }
     return $listeVonABC_ADT;
 }
    public function showPage(Request $request)
    {
        // creating MainPage and modifing header information
        $page = MainPage::create();
        $page->getLayoutElem("header")->addHeaderElem('<link rel="stylesheet" type="text/css" href="' . Registry::$settings['config']['CSS_PATH'] . 'adminpanel_view_layout.css">');
        $page->getLayoutElem("header")->addHeaderElem('
        <script type="text/javascript">
               var old_color = "white";
               function highlight_row($divElem){
                    if(old_color == "white") old_color = $divElem.style.backgroundColor;
                    $divElem.style.backgroundColor = "#FFF2D5";
               }

               function unhighlight_row($divElem){
                    $divElem.style.backgroundColor = old_color;
               }

               function stueckListeVonAnfordern(){
                    var produkt = document.getElementById("stueckliste_produkt").value;
                    window.location.href = "adminpanel?stuecklisteVon="+produkt;
               }

               function teil_hinzufuegen(){
                        var bezeichnung,preis,kategorie,wirdAngeboten,bild,beschreibung;
                        bezeichnung = document.getElementById("teil_bezeichnung").value;
                        preis = document.getElementById("teil_preis").value;
                        kategorie = document.getElementById("teil_typ").value;
                        wirdAngeboten = document.getElementById("teil_angeboten").value;
                        bild = document.getElementById("teil_bild").value;
                        beschreibung = document.getElementById("teil_beschreibung").value;
                        window.location.href = "adminpanel?teil_bezeichnung="+bezeichnung+
                                               "&teil_preis="+preis+
                                               "&teil_typ="+kategorie+
                                               "&teil_angeboten="+wirdAngeboten+
                                               "&teil_bild="+bild+
                                               "&teil_beschreibung="+beschreibung;
               }

               /*
               *          <input type="text" id="struktur_otnr" value="OTNR">
                        <input type="text" id="struktur_utnr" value="UTNR">
                        <input type="text" id="struktur_menge" value="Menge">
                        <button onclick="javascript:struktur_hinzufuegen()">Eintragen</button>*/
               function struktur_hinzufuegen(){
                     var otnr,utnr,menge;
                        otnr = document.getElementById("struktur_otnr").value;
                        utnr = document.getElementById("struktur_utnr").value;
                        menge = document.getElementById("struktur_menge").value;

                         window.location.href = "adminpanel?struktur_otnr="+otnr+
                                               "&struktur_utnr="+utnr+
                                               "&struktur_menge="+menge;

               }

               function berechnen(){

                    var glaettungsfaktor = parseFloat(document.getElementById("glaettungsfaktor").value);
                    var monat = document.getElementById("monat").value;
                    var jahr = document.getElementById("jahr").value;
                    var teilName = document.getElementById("teilname").value;

                     window.location.href = "adminpanel?monat="+monat+
                                             "&jahr="+jahr+
                                             "&teilname="+teilName+
                                             "&faktor="+glaettungsfaktor;

               }

               function kunde_hinzufuegen(){
//                                       <input type="text" id="kunde_Name" value="Name">
//                        <input type="text" id="kunde_Vorname" value="Vorname">
//                        <input type="text" id="kunde_eMail" value="eMail">
                    var name,vorname,email;
                    name = document.getElementById("kunde_Name").value;
                    vorname = document.getElementById("kunde_Vorname").value;
                    email = document.getElementById("kunde_eMail").value;

                    window.location.href = "adminpanel?kunde_Name="+name+
                                               "&kunde_Vorname="+vorname+
                                               "&kunde_eMail="+email;

               }

       </script>');
        // deciding which content to build
        // this $request->get doesnt mean get, its the PHP $_GET which is wraped in Request class
        ErrorReporter::logVarExport(__CLASS__ . "::showPage(request) => request get export", $request->get);
        ErrorReporter::logVarExport(__CLASS__ . "::showPage(request) => request post export", $request->post);
        $stuecklisteProdukt = $request->get["stuecklisteVon"];
        $teil_bezeichnung = $request->get["teil_bezeichnung"];
        $teil_preis = $request->get["teil_preis"];
        $teil_typ = $request->get["teil_typ"];
        $teil_angeboten = $request->get["teil_angeboten"];
        $teil_bild = $request->get["teil_bild"];
        $teil_beschreibung = $request->get["teil_beschreibung"];
        $struktur_otnr = $request->get["struktur_otnr"];
        $struktur_utnr = $request->get["struktur_utnr"];
        $struktur_menge = $request->get["struktur_menge"];
        $kunde_name = $request->get["kunde_Name"];
        $kunde_vorname = $request->get["kunde_Vorname"];
        $kunde_email = $request->get["kunde_eMail"];
        if (isset($teil_bezeichnung) && isset($teil_preis) && isset($teil_typ) && isset($teil_angeboten) && isset($teil_beschreibung)) {
            TeileMapperImpl::make()->teilErstellen($teil_bezeichnung, $teil_preis, $teil_typ, $teil_angeboten, "application/view/images/" . $teil_bild, $teil_beschreibung);
        }
        if (isset($struktur_otnr) && isset($struktur_utnr) && isset($struktur_menge)) {
            StrukturMapperImpl::make()->strukturAnlegen($struktur_otnr, $struktur_utnr, $struktur_menge);
        }
        if (isset($kunde_name) && isset($kunde_vorname) && isset($kunde_email)) {
            KundeMapperImpl::make()->kundeHinzufuegen($kunde_name, $kunde_vorname, $kunde_email);
        }
        //testdaten initialisieren
        if (isset($stuecklisteProdukt)) {
            StrukturMapperImpl::make()->getAlleStrukturen();
            //listeVonTeilen und ListeVonStrukturen wird in getAlleStrukuren erzeugt
            Stueckliste::bestimmeOberUndUnterteile(Stueckliste::$listeVonTeilen, Stueckliste::$listeVonStrukturen);
            //          Stueckliste::stueckliste_test();
            $stuecklisteProdukt = Stueckliste::getProdukt($stuecklisteProdukt);
            //AuftragsVerfolgung::teilHinzufuegen($stuecklisteProdukt,200,AuftragsVerfolgung::getTimestamp(5,12,2012));
        }
        //        $abc_analyse_result = ABC_Analyse::abc_analyse_test();
        $abc_analyse_result = ABC_Analyse::analyse(ABC_Analyse::convertToABC_ADT(TeileMapperImpl::make()->getAlleTeile()));
        //var_dump(BestellungMapperImpl::make()->getBestellungenByKundenID(1));
        $bedarfs_daten = AuftragsVerfolgung::getAlleBedarfe();
        $bedarfsableitungs_daten = AuftragsVerfolgung::getAlleBedarfsAbleitungen();
        $faktor = $request->get["faktor"];
        $monat = $request->get["monat"];
        $jahr = $request->get["jahr"];
        $teilname = $request->get["teilname"];
        if (isset($teilname) and isset($jahr) and isset($monat) and isset($faktor)) {
            $bedarfsanalyse_ergebnis = PrimaerbedarfsAnalyse::calcZukuenftigenBedarf($teilname, $monat, $jahr, $faktor);
        } else {
            $bedarfsanalyse_ergebnis = " ";
            $teilname = "Aircar";
            $monat = "12";
            $jahr = "2012";
            $faktor = "0.20";
        }
        //        PrimaerbedarfsAnalyse::primaerbedarfstest();
        // fetch view and apply data to view
        $page->setContentView(AdminPanel_View::create());
        $page->getLayoutElem("contentview")->applyData(array("stueckliste_produkt" => $stuecklisteProdukt, "abc_analyse_array" => $abc_analyse_result, "bedarfs_daten" => $bedarfs_daten, "bedarfsableitungs_daten" => $bedarfsableitungs_daten, "bedarfsanalyse_ergebnis" => $bedarfsanalyse_ergebnis, "bedarfsanalyse_teilname" => $teilname, "bedarfsanalyse_monat" => $monat, "bedarfsanalyse_jahr" => $jahr, "bedarfsanalyse_faktor" => $faktor));
        // show view
        $page->showPage($page->layoutElementMap);
    }
 public static function primaerbedarfstest()
 {
     echo "Dezember 2012:: " . AuftragsVerfolgung::getBedarfeVonTeilInMonatJahr("Aircar", AuftragsVerfolgung::getTimestamp(5, 12, 2012)) . "<br>";
     $bedarfeVormonate = array(50, 50, 50, 90);
     echo PrimaerbedarfsAnalyse::exponentielleGlaettung(0.2, 90, PrimaerbedarfsAnalyse::arithmetischesMittel($bedarfeVormonate));
 }
    public function showPage(Request $request)
    {
        // creating MainPage and modifing header information
        $page = MainPage::create();
        $page->getLayoutElem("header")->addHeaderElem('<link rel="stylesheet" type="text/css" href="' . Registry::$settings['config']['CSS_PATH'] . 'basketoverview_view_layout.css">');
        $page->getLayoutElem("header")->addHeaderElem('<script type="text/javascript">
            function removeItems(itemID,oldCount){
                var count_field = document.getElementById("product_"+itemID+"_count");
                var currentCount = count_field.value;
                if(currentCount >= 0 && currentCount < oldCount){
                    if(confirm("Sie sind dabei "+(oldCount-currentCount)+" Artikel von diesem Artikel entfernen")){
                          window.location.href = "basketoverview?itemID="+itemID+"&count="+currentCount;
                    }else{

                    }
                }else{
                    if(currentCount == oldCount){
                        alert("Zum entfernen die neue Menge die Sie behalten wollen eintragen.")
                    }
                    count_field.value=oldCount;
                }
            }

            function bestellen(){
                var day = document.getElementById("day").value;
                var month = document.getElementById("month").value;
                var year = document.getElementById("year").value;
                var gesamtpreis = document.getElementById("gesamtpreis").innerHTML;
                if(confirm("Sie sind dabei ihre Bestellung im Wert von "+gesamtpreis+" abzuschicken, bestätigen Sie dies bitte!")){
                   window.location.href = "basketoverview?bestellen=1&day="+day+"&month="+month+"&year="+year;
                }
            }

        </script>');
        // deciding which content to build
        // this $request->get doesnt mean get, its the PHP $_GET which is wraped in Request class
        ErrorReporter::logVarExport(__CLASS__ . "::showPage(request) => request get export", $request->get);
        ErrorReporter::logVarExport(__CLASS__ . "::showPage(request) => request post export", $request->post);
        $basketItem = $request->get["itemID"];
        $count = $request->get["count"];
        if (isset($basketItem) && isset($count)) {
            $basketItem = mysql_real_escape_string($basketItem);
            $count = mysql_real_escape_string($count);
            if ($_SESSION["basket"][$basketItem] > $count) {
                if (!($count <= 0)) {
                    $_SESSION["basket"][$basketItem] = $count;
                } else {
                    $_SESSION["basket"] = array_diff_key($_SESSION["basket"], array($basketItem => $count));
                }
            }
        }
        $products = array();
        if (isset($_SESSION["basket"])) {
            foreach ($_SESSION["basket"] as $productID => $count) {
                array_push($products, TeileMapperImpl::make()->getTeileById($productID));
            }
        }
        $month = $request->get["month"];
        $day = $request->get["day"];
        $year = $request->get["year"];
        if (isset($request->get["bestellen"]) and isset($month) and isset($day) and isset($year)) {
            StrukturMapperImpl::make()->getAlleStrukturen();
            //listeVonTeilen und ListeVonStrukturen wird in getAlleStrukuren erzeugt
            Stueckliste::bestimmeOberUndUnterteile(Stueckliste::$listeVonTeilen, Stueckliste::$listeVonStrukturen);
            //          Stueckliste::stueckliste_test();
            $lieferdatum = AuftragsVerfolgung::getTimestamp($day, $month, $year);
            foreach ($products as $product) {
                $teil = Stueckliste::getProdukt($product->getBezeichnung());
                AuftragsVerfolgung::teilHinzufuegen($teil, $_SESSION["basket"][$teil->id()], $lieferdatum);
            }
            $_SESSION["basket"] = array();
            $products = array();
        }
        // fetch view and apply data to view
        $page->setContentView(BasketOverview_View::create());
        $page->getLayoutElem("contentview")->applyData(array("basket" => $_SESSION['basket'], "products" => $products));
        // show view
        $page->showPage($page->layoutElementMap);
    }
    public function show()
    {
        ?>
        <div id="adminpanel">
              <div id="stueckliste">
                  <div style='float: left;'>
                      Erstelle Stueckliste von <input id='stueckliste_produkt' type='text' value='<?php 
        if (isset($this->dataMap["stueckliste_produkt"])) {
            echo $this->dataMap["stueckliste_produkt"]->name();
        } else {
            echo "Produkt1";
        }
        ?>
'>
                  </div>
                  <div style='float:left;cursor: pointer;' onclick='javascript:stueckListeVonAnfordern();'>
                       Erstellen
                  </div>
                  <?php 
        if (!empty($this->dataMap["stueckliste_produkt"])) {
            Stueckliste::printTeil($this->dataMap["stueckliste_produkt"]);
        }
        ?>
</div>
              <div id="abc_analyse">
                  ABC Analyse
                  <?php 
        echo "<div class='abc_row'><div class='abc_col'> TeilID </div> <div class='abc_col'> TeilBezeichnung </div><div class='abc_col'> Preis </div><div class='abc_col'> Kategorie</div></div>";
        foreach ($this->dataMap["abc_analyse_array"] as $abc_adt) {
            echo "<div class='abc_row' onmouseout='javascript:unhighlight_row(this);' onmouseover='javascript:highlight_row(this);'>\r\n                                <div class='abc_col'>" . $abc_adt->productID() . "</div>" . "<div class='abc_col' style='cursor:pointer;' onclick=\"location.href='products?search=" . $abc_adt->productName() . "'\">" . $abc_adt->productName() . "</div>" . "<div class='abc_col'>" . number_format($abc_adt->wholePrice(), 2, ',', '.') . "</div>" . "<div class='abc_col'>" . $abc_adt->categorie() . "</div>\r\n                           </div>";
        }
        //            echo("Name: ".$abc_adt->productName() ." :: Kategorie: ".$abc_adt->categorie()." :: Preis: ".number_format($abc_adt->wholePrice(),2,',','.')."<br>");
        ?>
</div>
              <div id="bedarfs_analyse">

                  <div>
                      <div> Primaerbedarfs Analyse </div>
                      <div>TeilName<input id="teilname" value="<?php 
        echo $this->dataMap["bedarfsanalyse_teilname"];
        ?>
"></div>
                      <div>Letzter Monat<input id="monat" value="<?php 
        echo $this->dataMap["bedarfsanalyse_monat"];
        ?>
"></div>
                      <div>Jahr<input id="jahr" value="<?php 
        echo $this->dataMap["bedarfsanalyse_jahr"];
        ?>
"></div>
                      <div>Glaettungfaktor <input id="glaettungsfaktor" value="<?php 
        echo $this->dataMap["bedarfsanalyse_faktor"];
        ?>
"></div>
                      <button onclick="javascript:berechnen()">Berechnen</button>
                      <div>Ergebnis <input id="ergebnis" value="<?php 
        echo $this->dataMap["bedarfsanalyse_ergebnis"];
        ?>
"></div>

                  </div>
              </div>
              <div id="operationen">
                <div id ="einfuegen">
                    <div id="teil">
                        Teil erstellen
                        <input type="text" id="teil_bezeichnung" value="Produkt1">
                        <input type="text" id="teil_preis" value="Preis">
                        <input type="text" id="teil_typ" value="Kategorie">
                        <input type="text" id="teil_angeboten" value="wird es angeboten?">
                        <input type="text" id="teil_bild" value="bildurl">
                        <input type="text" id="teil_beschreibung" value="beschreibung" size="94">
                        <button onclick="javascript:teil_hinzufuegen()">Eintragen</button>
                    </div>
                    <div id="struktur">
                        Struktur erstellen
                        <input type="text" id="struktur_otnr" value="OTNR">
                        <input type="text" id="struktur_utnr" value="UTNR">
                        <input type="text" id="struktur_menge" value="Menge">
                        <button onclick="javascript:struktur_hinzufuegen()">Eintragen</button>
                    </div>
                    <div id="kunde">
                        Kunde erstellen
                        <input type="text" id="kunde_Name" value="Name">
                        <input type="text" id="kunde_Vorname" value="Vorname">
                        <input type="text" id="kunde_eMail" value="eMail">
                        <button onclick="javascript:kunde_hinzufuegen()">Eintragen</button>
                    </div>
                    <div id="bestellung">
                        Bestellung erstellen
                        <input type="text" id="bestellung_KundenNr" value="KundenNr">
                        <button onclick="javascript:bestllung_hinzufuegen()">Eintragen</button>
                        Artikel der Bestellung hinzufuegen
                        <input type="text" id="bestellung_BestellungsNr" value="BestellungsNr">
                        <input type="text" id="bestellung_TNr" value="TeileNr">

                        <button onclick="javascript:artikel_bestellung_hinzufuegen()">Eintragen</button>
                    </div>
                    <div id="pagehits">
                        Seiten Statistik
                         <?php 
        MonitorEntry::showPageHits();
        ?>
                    </div>

                    <div id="artikelhits">

                    </div>

                    <div id="bedarfs_daten">
                        Bedarfs Daten
                        <?php 
        AuftragsVerfolgung::printBedarfTabelle($this->dataMap["bedarfs_daten"]);
        ?>
                    </div>
                    <div id="bedarfsableitungs_daten">
                        Bedarfsableitungen
                        <?php 
        AuftragsVerfolgung::printBedarfAbleitungsTabelle($this->dataMap["bedarfsableitungs_daten"]);
        ?>
                    </div>

                </div>
               </div>
        </div>

    <?php 
    }