public function initTable()
 {
     //this needs to be loaded before the period, because we need the variant_id for the startperiod
     if ($this->Request['idta_variante'] != '') {
         $this->Variante = $this->Request['idta_variante'];
     } else {
         $this->Variante = VarianteRecord::finder()->findByvar_default(1)->idta_variante;
         $this->Variante == "" ? $this->Variante = 1 : '';
     }
     if ($this->Request['periode'] != '') {
         $this->Periode = $this->Request['periode'];
     } else {
         $sec_per = $this->Periode;
         $this->Periode = VarianteRecord::finder()->findByidta_variante($this->Variante)->idta_perioden;
         $this->Periode == '' ? $this->Periode = $sec_per : '';
     }
     if ($this->Request['idtm_struktur'] != '') {
         $this->idtm_struktur = $this->Request['idtm_struktur'];
     } else {
         $this->idtm_struktur = $this->user->getStartNode($this->user->getUserId($this->user->Name), "tm_struktur");
         $this->idtm_struktur == '' ? $this->idtm_struktur = 1 : '';
     }
     if ($this->Request['per_single'] != '') {
         $this->SinglePeriode = $this->Request['per_single'];
     }
     if ($this->Request['idta_struktur_bericht'] != '') {
         $this->idta_struktur_bericht = $this->Request['idta_struktur_bericht'];
     } else {
         $this->idta_struktur_bericht = StrukturBerichtRecord::finder()->findBysb_startbericht(1)->idta_struktur_bericht;
     }
     $this->ccom_id->Text = $this->idtm_struktur;
     $this->cidta_variante->Text = $this->Variante;
     $this->cidta_periode->Text = $this->Periode;
     //setting up the db-connection
     $myDBConnection = new TDbConnection($this->Application->getModule('db1')->database->getConnectionString(), $this->Application->getModule('db1')->database->getUsername(), $this->Application->getModule('db1')->database->getPassword());
     $myDBConnection->Active = true;
     //this calculator is used to build the subcats
     $mySubcatsCalculator = new PFCalculator();
     $mySubcatsCalculator->setDBConnection($myDBConnection);
     $mySubcatsCalculator->setStartNode($this->idtm_struktur, 1);
     if (!$this->Nested) {
         $mySubcatsCalculator->load_all_cats();
         $mySubcatsCalculator->setsubcats($mySubcatsCalculator->getsubcats());
     }
     //THE REPORT HEADER
     $this->sheetrow++;
     $this->StrukturPfad->Text = $mySubcatsCalculator->getCurrentPath($this->idtm_struktur);
     //here we build the statements nthat a stored inside the database
     $Report = StrukturBerichtRecord::finder()->findByPK($this->idta_struktur_bericht);
     $this->ttpivot_struktur_name->Text = $Report->pivot_struktur_name;
     $ColumnCriteria = new TActiveRecordCriteria();
     $ColumnCriteria->Condition = "idta_struktur_bericht = :suchtextcolumn";
     $ColumnCriteria->Parameters[':suchtextcolumn'] = $this->idta_struktur_bericht;
     $ColumnCriteria->OrdersBy['sbs_order'] = 'ASC';
     $ReportColumns = StrukturBerichtSpaltenRecord::finder()->findAll($ColumnCriteria);
     $idta_struktur_bericht_spalten = array();
     foreach ($ReportColumns as $ReportColumn) {
         $this->GraphOffset++;
         $this->InputBericht = $ReportColumn->sbs_input;
         $this->StrukturBerichtSaveButton->Visible = $this->InputBericht;
         $this->StrukturBerichtSaveImageButton->Visible = $this->InputBericht;
         //wenn die Variante fix uebergeben wurde
         if ($ReportColumn->sbs_idta_variante_fix) {
             $this->Varianten[$ReportColumn->idta_struktur_bericht_spalten] = $ReportColumn->idta_variante;
         } else {
             $this->Varianten[$ReportColumn->idta_struktur_bericht_spalten] = $this->Variante;
         }
         //hier befuelle ich die variablenliste pro
         if ($ReportColumn->sbs_struktur_switch_type == 1) {
             $mySubcatsCalculator->setStartNode($ReportColumn->sbs_idtm_struktur, $this->Nested);
         } else {
             $mySubcatsCalculator->setStartNode($this->idtm_struktur, $this->Nested);
         }
         //das brauchen wir, fuer den fall dass wir die nested informationen noch nicht im modell haben
         if (!$this->Nested) {
             $ChildrenNodes[$ReportColumn->idta_struktur_bericht_spalten] = $mySubcatsCalculator->ChildrenNodes;
             $tmpInString = '';
             if (count($ChildrenNodes[$ReportColumn->idta_struktur_bericht_spalten]) > 0) {
                 $counter = 0;
                 foreach ($ChildrenNodes[$ReportColumn->idta_struktur_bericht_spalten] as $key => $value) {
                     if ($value != '') {
                         $counter == 0 ? $tmpInString .= "'" . $value . "' " : ($tmpInString .= ",'" . $value . "' ");
                         $counter++;
                         $this->STRcounter == 0 ? $this->ReportIDsInStringAll .= "'" . $value . "' " : ($this->ReportIDsInStringAll .= ",'" . $value . "' ");
                         $this->STRcounter++;
                     }
                 }
             }
             $this->ReportIDsInString[$ReportColumn->idta_struktur_bericht_spalten] = $tmpInString;
         } else {
             if ($ReportColumn->sbs_struktur_switch_type == 1) {
                 $StartRecord = StrukturRecord::finder()->findByidtm_struktur($ReportColumn->sbs_idtm_struktur);
             } else {
                 $StartRecord = StrukturRecord::finder()->findByidtm_struktur($this->idtm_struktur);
             }
             $this->ReportIDsLeft[$ReportColumn->idta_struktur_bericht_spalten] = $StartRecord->struktur_lft;
             $this->ReportIDsRight[$ReportColumn->idta_struktur_bericht_spalten] = $StartRecord->struktur_rgt;
         }
         //falls eine zeitliche abweichung festgestellt wurde
         if ($ReportColumn->sbs_perioden_fix == 1 or !$ReportColumn->idta_perioden_gap == 0 and !$ReportColumn->idta_perioden_gap == '') {
             $mySubcatsCalculator->setStartPeriod($ReportColumn->idta_perioden_gap, $ReportColumn->sbs_perioden_fix);
             $this->ReportPerioden[$ReportColumn->idta_struktur_bericht_spalten] = $mySubcatsCalculator->Perioden;
         } else {
             $mySubcatsCalculator->setStartPeriod($this->Periode, $this->SinglePeriode);
             $this->ReportPerioden[$ReportColumn->idta_struktur_bericht_spalten] = $mySubcatsCalculator->Perioden;
         }
         $this->ReportOperator[$ReportColumn->idta_struktur_bericht_spalten] = $ReportColumn->sbs_bericht_operator;
     }
     foreach ($this->ReportPerioden as $tempPerioden) {
         foreach ($tempPerioden as $key => $value) {
             $this->Perioden[] = $value[0];
         }
     }
     //print_r($this->Perioden);
     if ($this->InputBericht || !$this->page->isCallback && !$this->page->isPostBack) {
         $criteria = new TActiveRecordCriteria();
         $criteria->Condition = "idta_struktur_bericht = :suchbedingung1";
         $criteria->Parameters[':suchbedingung1'] = $this->idta_struktur_bericht;
         $criteria->OrdersBy['sbz_order'] = "ASC";
         $ReportRows = StrukturBerichtZeilenRecord::finder()->findAll($criteria);
         $rowcounter = 0;
         foreach ($ReportRows as $SingleRow) {
             ${$SingleRow->idta_struktur_bericht_zeilen . "RObj"} = new PFCalculator();
             ${$SingleRow->idta_struktur_bericht_zeilen . "RObj"}->setDBConnection($myDBConnection);
             //${$SingleRow->idta_struktur_bericht_zeilen."RObj"}->setsubcats($mySubcats);
             ${$SingleRow->idta_struktur_bericht_zeilen . "RObj"}->setInputReport($this->InputBericht);
             //Perioden muss vor CALCCOLUMNS kommen, sonst ergebnis nicht richtig
             ${$SingleRow->idta_struktur_bericht_zeilen . "RObj"}->Varianten = $this->Varianten;
             //aus der zeile
             ${$SingleRow->idta_struktur_bericht_zeilen . "RObj"}->Perioden = $this->ReportPerioden;
             //aus der zeile
             //this needs to be set, before we calc the number of columns
             ${$SingleRow->idta_struktur_bericht_zeilen . "RObj"}->setColumns($ReportColumns);
             ${$SingleRow->idta_struktur_bericht_zeilen . "RObj"}->calcColumns();
             ${$SingleRow->idta_struktur_bericht_zeilen . "RObj"}->setFeldFunktion($SingleRow->idta_feldfunktion);
             ${$SingleRow->idta_struktur_bericht_zeilen . "RObj"}->setVariante($this->Variante);
             //muss noch aus der definition der spalte geholt werden
             ${$SingleRow->idta_struktur_bericht_zeilen . "RObj"}->idta_struktur_bericht_spalten = $idta_struktur_bericht_spalten;
             //aus der zeile
             ${$SingleRow->idta_struktur_bericht_zeilen . "RObj"}->ReportOperator = $this->ReportOperator;
             //uebergabe des operators an den calculator
             //hier uebergeben wir die entsprechenden spaltenwerte...
             if ($this->Nested) {
                 ${$SingleRow->idta_struktur_bericht_zeilen . "RObj"}->ReportIDsLeft = $this->ReportIDsLeft;
                 ${$SingleRow->idta_struktur_bericht_zeilen . "RObj"}->ReportIDsRight = $this->ReportIDsRight;
             } else {
                 ${$SingleRow->idta_struktur_bericht_zeilen . "RObj"}->ReportIDsInString = $this->ReportIDsInString;
                 ${$SingleRow->idta_struktur_bericht_zeilen . "RObj"}->ReportIDsInStringAll = $this->ReportIDsInStringAll;
                 ${$SingleRow->idta_struktur_bericht_zeilen . "RObj"}->ChildrenNodes = $ChildrenNodes;
                 //aus der zeile
             }
             //${$SingleRow->idta_struktur_bericht_zeilen."RObj"}->setStartNode($this->Request['idtm_struktur']);
             if ($rowcounter == 0) {
                 $this->load_header(${$SingleRow->idta_struktur_bericht_zeilen . "RObj"});
                 $rowcounter++;
             }
             if ($SingleRow->sbz_spacer_label != "" or !$SingleRow->sbz_spacer_label == 0) {
                 if ($SingleRow->sbz_type == 4) {
                 } else {
                     $this->draw_spacer(${$SingleRow->idta_struktur_bericht_zeilen . "RObj"}, $SingleRow->sbz_spacer_label);
                 }
             }
             if ($SingleRow->sbz_type == 0) {
                 //type == 0 bedeutet die normale listenabfrage
                 $this->draw_cells(${$SingleRow->idta_struktur_bericht_zeilen . "RObj"}, $SingleRow->sbz_label, $SingleRow->sbz_detail);
             }
             if ($SingleRow->sbz_type == 1) {
                 //type == 1 bedeutet die dimensionsabfrage
                 ${$SingleRow->idta_struktur_bericht_zeilen . "RObj"}->dimension = $SingleRow->idtm_stammdaten;
                 $this->draw_cells_dimension(${$SingleRow->idta_struktur_bericht_zeilen . "RObj"}, $SingleRow->sbz_label, $SingleRow->sbz_order, $SingleRow->sbz_detail);
             }
             if ($SingleRow->sbz_type == 3) {
                 //type == 3 Bedeutet eine Berechnung auf bereits existierende Objekte
                 $this->build_difference_zwischenergebnisse($SingleRow->idta_struktur_bericht_zeilen, $SingleRow->sbz_label);
             }
             if ($SingleRow->sbz_type == 4) {
                 //type == 4 bedeutet einen graphen
                 $this->draw_graph(${$SingleRow->idta_struktur_bericht_zeilen . "RObj"}, $SingleRow->sbz_label, $SingleRow->sbz_spacer_label);
             }
         }
     }
 }
 public function onPreInit($param)
 {
     $myTheme = $this->User->getUserTheme($this->User->getUserId(), 'mod_theme');
     $this->setTheme($myTheme);
     parent::onPreInit($param);
     $this->workbook = new PHPExcel();
     $this->sheet = $this->workbook->getActiveSheet();
     $this->sheet->getPageSetup()->setOrientation(PHPExcel_Worksheet_PageSetup::ORIENTATION_DEFAULT);
     $this->sheet->getPageSetup()->setPaperSize(PHPExcel_Worksheet_PageSetup::PAPERSIZE_A4);
     if ($this->Request['periode'] != '') {
         $this->Periode = $this->Request['periode'];
     }
     if ($this->Request['idtm_struktur'] != '') {
         $this->idtm_struktur = $this->Request['idtm_struktur'];
     } else {
         $this->idtm_struktur = $this->user->getStartNode($this->user->getUserId($this->user->Name), "idtm_struktur");
         $this->idtm_struktur == '' ? $this->idtm_struktur = 1 : '';
     }
     if ($this->Request['per_single'] != '') {
         $this->SinglePeriode = $this->Request['per_single'];
     }
     if ($this->Request['idta_variante'] != '') {
         $this->Variante = $this->Request['idta_variante'];
     }
     if ($this->Request['idta_struktur_bericht'] != '') {
         $this->idta_struktur_bericht = $this->Request['idta_struktur_bericht'];
     } else {
         $this->idta_struktur_bericht = StrukturBerichtRecord::finder()->findBysb_startbericht(1)->idta_struktur_bericht;
     }
     //setting up the db-connection
     $myDBConnection = new TDbConnection($this->Application->getModule('db1')->database->getConnectionString(), $this->Application->getModule('db1')->database->getUsername(), $this->Application->getModule('db1')->database->getPassword());
     $myDBConnection->Active = true;
     //this calculator is used to build the subcats
     $mySubcatsCalculator = new PFCalculator();
     $mySubcatsCalculator->setDBConnection($myDBConnection);
     $mySubcatsCalculator->setStartNode($this->idtm_struktur, 1);
     if (!$this->Nested) {
         $mySubcatsCalculator->load_all_cats();
         $mySubcatsCalculator->setsubcats($mySubcatsCalculator->getsubcats());
     }
     //THE REPORT HEADER
     $this->sheetrow++;
     $local_column = $this->sheetleftgap;
     $local_cell = '';
     $local_cell = $this->ColumnArray[$local_column] . $this->sheetrow;
     $this->sheet->setCellValue($local_cell, $mySubcatsCalculator->getCurrentPath($this->idtm_struktur));
     $this->workbook->getActiveSheet()->getStyle($local_cell)->getFont()->setSize(14);
     $this->workbook->getActiveSheet()->getStyle($local_cell)->getFont()->getColor()->setRGB('999900');
     $this->sheetrow++;
     //Adjusting the size
     $this->sheet->getColumnDimension($this->ColumnArray[$local_column])->setWidth(30);
     $local_column++;
     for ($ii = $local_column; $ii < count($this->ColumnArray); $ii++) {
         $this->sheet->getColumnDimension($this->ColumnArray[$ii])->setWidth(12);
     }
     //here we build the statements nthat a stored inside the database
     $Report = StrukturBerichtRecord::finder()->findByPK($this->idta_struktur_bericht);
     $this->sheet->setTitle($Report->pivot_struktur_name);
     $ReportColumns = StrukturBerichtSpaltenRecord::finder()->findAllByidta_struktur_bericht($this->idta_struktur_bericht);
     $idta_struktur_bericht_spalten = array();
     foreach ($ReportColumns as $ReportColumn) {
         $this->GraphOffset++;
         $this->InputBericht = $ReportColumn->sbs_input;
         //$this->StrukturBerichtSaveButton->Visible = $this->InputBericht;
         //wenn die Variante fix uebergeben wurde
         if ($ReportColumn->sbs_idta_variante_fix) {
             $this->Variante = $ReportColumn->idta_variante;
         }
         //hier befuelle ich die variablenliste pro
         if ($ReportColumn->sbs_struktur_switch_type == 1) {
             $mySubcatsCalculator->setStartNode($ReportColumn->sbs_idtm_struktur, $this->Nested);
         } else {
             $mySubcatsCalculator->setStartNode($this->idtm_struktur, $this->Nested);
         }
         //das brauchen wir, fuer den fall dass wir die nested informationen noch nicht im modell haben
         if (!$this->Nested) {
             $ChildrenNodes[$ReportColumn->idta_struktur_bericht_spalten] = $mySubcatsCalculator->ChildrenNodes;
             $tmpInString = '';
             if (count($ChildrenNodes[$ReportColumn->idta_struktur_bericht_spalten]) > 0) {
                 $counter = 0;
                 foreach ($ChildrenNodes[$ReportColumn->idta_struktur_bericht_spalten] as $key => $value) {
                     if ($value != '') {
                         $counter == 0 ? $tmpInString .= "'" . $value . "' " : ($tmpInString .= ",'" . $value . "' ");
                         $counter++;
                         $this->STRcounter == 0 ? $this->ReportIDsInStringAll .= "'" . $value . "' " : ($this->ReportIDsInStringAll .= ",'" . $value . "' ");
                         $this->STRcounter++;
                     }
                 }
             }
             $this->ReportIDsInString[$ReportColumn->idta_struktur_bericht_spalten] = $tmpInString;
         } else {
             if ($ReportColumn->sbs_struktur_switch_type == 1) {
                 $StartRecord = StrukturRecord::finder()->findByidtm_struktur($ReportColumn->sbs_idtm_struktur);
             } else {
                 $StartRecord = StrukturRecord::finder()->findByidtm_struktur($this->idtm_struktur);
             }
             $this->ReportIDsLeft[$ReportColumn->idta_struktur_bericht_spalten] = $StartRecord->struktur_lft;
             $this->ReportIDsRight[$ReportColumn->idta_struktur_bericht_spalten] = $StartRecord->struktur_rgt;
         }
         //falls eine zeitliche abweichung festgestellt wurde
         if ($ReportColumn->sbs_perioden_fix == 1 or !$ReportColumn->idta_perioden_gap == 0 and !$ReportColumn->idta_perioden_gap == '') {
             $mySubcatsCalculator->setStartPeriod($ReportColumn->idta_perioden_gap, $ReportColumn->sbs_perioden_fix);
             $this->ReportPerioden[$ReportColumn->idta_struktur_bericht_spalten] = $mySubcatsCalculator->Perioden;
         } else {
             $mySubcatsCalculator->setStartPeriod($this->Periode, $this->SinglePeriode);
             $this->ReportPerioden[$ReportColumn->idta_struktur_bericht_spalten] = $mySubcatsCalculator->Perioden;
         }
         $this->ReportOperator[$ReportColumn->idta_struktur_bericht_spalten] = $ReportColumn->sbs_bericht_operator;
     }
     foreach ($this->ReportPerioden as $tempPerioden) {
         foreach ($tempPerioden as $key => $value) {
             $this->Perioden[] = $value[0];
         }
     }
     //print_r($this->Perioden);
     if ($this->InputBericht || !$this->page->isCallback && !$this->page->isPostBack) {
         $criteria = new TActiveRecordCriteria();
         $criteria->Condition = "idta_struktur_bericht = :suchbedingung1";
         $criteria->Parameters[':suchbedingung1'] = $this->idta_struktur_bericht;
         $criteria->OrdersBy['sbz_order'] = "ASC";
         $ReportRows = StrukturBerichtZeilenRecord::finder()->findAll($criteria);
         $rowcounter = 0;
         foreach ($ReportRows as $SingleRow) {
             ${$SingleRow->idta_struktur_bericht_zeilen . "RObj"} = new PFCalculator();
             ${$SingleRow->idta_struktur_bericht_zeilen . "RObj"}->setDBConnection($myDBConnection);
             //${$SingleRow->idta_struktur_bericht_zeilen."RObj"}->setsubcats($mySubcats);
             ${$SingleRow->idta_struktur_bericht_zeilen . "RObj"}->setInputReport($this->InputBericht);
             //hier immer auf 1, da sonst die formate nicht passen...
             //Perioden muss vor CALCCOLUMNS kommen, sonst ergebnis nicht richtig
             ${$SingleRow->idta_struktur_bericht_zeilen . "RObj"}->Perioden = $this->ReportPerioden;
             //aus der zeile
             //this needs to be set, before we calc the number of columns
             ${$SingleRow->idta_struktur_bericht_zeilen . "RObj"}->setColumns($ReportColumns);
             ${$SingleRow->idta_struktur_bericht_zeilen . "RObj"}->calcColumns();
             ${$SingleRow->idta_struktur_bericht_zeilen . "RObj"}->setFeldFunktion($SingleRow->idta_feldfunktion);
             ${$SingleRow->idta_struktur_bericht_zeilen . "RObj"}->setVariante($this->Variante);
             //muss noch aus der definition der spalte geholt werden
             ${$SingleRow->idta_struktur_bericht_zeilen . "RObj"}->idta_struktur_bericht_spalten = $idta_struktur_bericht_spalten;
             //aus der zeile
             ${$SingleRow->idta_struktur_bericht_zeilen . "RObj"}->ReportOperator = $this->ReportOperator;
             //uebergabe des operators an den calculator
             //hier uebergeben wir die entsprechenden spaltenwerte...
             if ($this->Nested) {
                 ${$SingleRow->idta_struktur_bericht_zeilen . "RObj"}->ReportIDsLeft = $this->ReportIDsLeft;
                 ${$SingleRow->idta_struktur_bericht_zeilen . "RObj"}->ReportIDsRight = $this->ReportIDsRight;
             } else {
                 ${$SingleRow->idta_struktur_bericht_zeilen . "RObj"}->ReportIDsInString = $this->ReportIDsInString;
                 ${$SingleRow->idta_struktur_bericht_zeilen . "RObj"}->ReportIDsInStringAll = $this->ReportIDsInStringAll;
                 ${$SingleRow->idta_struktur_bericht_zeilen . "RObj"}->ChildrenNodes = $ChildrenNodes;
                 //aus der zeile
             }
             //${$SingleRow->idta_struktur_bericht_zeilen."RObj"}->setStartNode($this->Request['idtm_struktur']);
             if ($rowcounter == 0) {
                 $this->load_header(${$SingleRow->idta_struktur_bericht_zeilen . "RObj"});
                 $rowcounter++;
             }
             if ($SingleRow->sbz_spacer_label != "" or !$SingleRow->sbz_spacer_label == 0) {
                 if ($SingleRow->sbz_type == 4) {
                 } else {
                     $this->draw_spacer(${$SingleRow->idta_struktur_bericht_zeilen . "RObj"}, $SingleRow->sbz_spacer_label);
                 }
             }
             if ($SingleRow->sbz_type == 0) {
                 //type == 0 bedeutet die normale listenabfrage
                 $this->draw_cells(${$SingleRow->idta_struktur_bericht_zeilen . "RObj"}, $SingleRow->sbz_label, $SingleRow->sbz_detail);
             }
             if ($SingleRow->sbz_type == 1) {
                 //type == 1 bedeutet die dimensionsabfrage
                 ${$SingleRow->idta_struktur_bericht_zeilen . "RObj"}->dimension = $SingleRow->idtm_stammdaten;
                 $this->draw_cells_dimension(${$SingleRow->idta_struktur_bericht_zeilen . "RObj"}, $SingleRow->sbz_label, $SingleRow->sbz_order, $SingleRow->sbz_detail);
             }
             if ($SingleRow->sbz_type == 3) {
                 //type == 3 Bedeutet eine Berechnung auf bereits existierende Objekte
                 $this->build_difference_zwischenergebnisse($SingleRow->idta_struktur_bericht_zeilen, $SingleRow->sbz_label);
             }
             if ($SingleRow->sbz_type == 4) {
                 //type == 4 bedeutet einen graphen
                 //$this->draw_graph(${$SingleRow->idta_struktur_bericht_zeilen."RObj"},$SingleRow->sbz_label,$SingleRow->sbz_spacer_label);
             }
         }
     }
     $this->generate('Excel5', 'planlogIQ');
 }