public function saveSplashingValue($sender, $param)
 {
     //holen der perioden
     $Taschenrechner = new PFCalculator();
     $Taschenrechner->setStartPeriod($this->DWH_idta_perioden->Text);
     $MyRecords = StammdatenRecord::finder()->findAllByidta_stammdaten_group($this->to_idta_stammdaten_group->Text);
     foreach ($Taschenrechner->Perioden as $Periode) {
         $PerMonat = $Periode[0];
         $PerJahr = $Taschenrechner->getYearByMonth($Periode[0]);
         foreach ($MyRecords as $StammdatenRC) {
             $TTWerteRecord = TTSplasherRecord::finder()->find('spl_jahr = ? AND spl_monat=? AND idta_variante = ? AND idta_feldfunktion = ? AND idtm_stammdaten = ? AND to_idtm_stammdaten = ?', $PerJahr, $PerMonat, $this->DWH_idta_variante->Text, $this->to_idta_feldfunktion->Text, $this->From_idtm_stammdaten->Text, $StammdatenRC->idtm_stammdaten);
             $UniqueID = 'xxx' . $PerJahr . 'xxx' . $PerMonat . 'xxx' . $this->From_idtm_stammdaten->Text . 'xxx' . $StammdatenRC->idtm_stammdaten;
             if (count($TTWerteRecord) == 1) {
                 $TTWerteRecord->spl_faktor = number_format($this->page->ACTPanel->FindControl($UniqueID)->Text, 2, '.', '');
                 $TTWerteRecord->save();
                 $this->RAMRecord[$UniqueID] = number_format($TTWerteRecord->spl_faktor, 2, '.', '');
             }
         }
     }
     $sender->Text = "saved";
 }
Example #2
0
 public static function calculateSplasherYear()
 {
     //erst einmal holen wir uns alle Werte...
     $sql = "SELECT idta_variante, spl_jahr, idtm_stammdaten, idta_feldfunktion,to_idtm_stammdaten, SUM(spl_faktor) AS spl_faktor FROM `tt_splasher` GROUP BY idta_variante, spl_jahr, idtm_stammdaten, idta_feldfunktion,to_idtm_stammdaten WHERE spl_monat < 9999";
     $SplasherYearRecords = TTSplasherRecord::finder()->findAllBySQL($sql);
     foreach ($SplasherYearRecords as $SplasherYearRecord) {
         //checken, ob bereits ein Datensatz existiert
         $CheckRecord = TTSplasherRecord::finder()->find('idta_variante = ? AND spl_jahr = ? AND spl_monat = ? AND idtm_stammdaten = ? AND idta_feldfunktion = ? AND to_idtm_stammdaten = ?', $SplasherYearRecord->idta_variante, $SplasherYearRecord->spl_jahr, $SplasherYearRecord->spl_jahr, $SplasherYearRecord->idtm_stammdaten, $SplasherYearRecord->idta_feldfunktion, $SplasherYearRecord->to_idtm_stammdaten);
         if (!is_object($CheckRecord)) {
             $CheckRecord = new TTSplasherRecord();
         }
         $CheckRecord->idta_variante = $SplasherYearRecord->idta_variante;
         $CheckRecord->spl_jahr = $SplasherYearRecord->spl_jahr;
         $CheckRecord->spl_monat = $SplasherYearRecord->spl_jahr;
         $CheckRecord->idtm_stammdaten = $SplasherYearRecord->idtm_stammdaten;
         $CheckRecord->idta_feldfunktion = $SplasherYearRecord->idta_feldfunktion;
         $CheckRecord->to_idtm_stammdaten = $SplasherYearRecord->to_idtm_stammdaten;
         $CheckRecord->spl_faktor = $SplasherYearRecord->spl_faktor;
         $CheckRecord->save();
         unset($CheckRecord);
     }
 }
 private function calc_splasher($local_ff, $local_monat, $local_jahr, $local_id, $newValue)
 {
     //die eingabe erfolgt auf monatsebene
     //Holen der Stammdateninfo
     $StrukturWechselKnoten = StrukturRecord::finder()->findByPK($local_id);
     $StammdatenID = $StrukturWechselKnoten->idtm_stammdaten;
     //Ermitteln des Gesamtwertes der entsprechenden Verteilung
     $sql = "SELECT spl_monat, sum(spl_faktor) AS spl_faktor FROM tt_splasher WHERE idta_variante = '" . $this->GLOBALVARIANTE . "' AND idtm_stammdaten='" . $StammdatenID . "' AND spl_monat='" . $local_monat . "'";
     $Gesamtwert = TTSplasherRecord::finder()->findBySql($sql)->spl_faktor;
     //Ermitteln der Faktoren für die Verteilung, dabei holen wir auch die Zieldimension
     $sql = "SELECT to_idtm_stammdaten,spl_monat,idta_feldfunktion, sum(spl_faktor) AS spl_faktor FROM tt_splasher WHERE idta_variante = " . $this->GLOBALVARIANTE . " AND idtm_stammdaten=" . $StammdatenID . " AND spl_monat=" . $local_monat . " GROUP BY to_idtm_stammdaten,spl_monat,idta_feldfunktion";
     $Einzelwerte = TTSplasherRecord::finder()->findAllBySql($sql);
     //wenn wir einen treffer haben, koennen wir nach der standardverteilung arbeiten
     if (is_array($Einzelwerte) and $Gesamtwert != 0) {
         foreach ($Einzelwerte as $Einzelwert) {
             $sql = "SELECT idtm_struktur FROM tm_struktur WHERE idtm_stammdaten = '" . $Einzelwert->to_idtm_stammdaten . "'";
             $sql .= " AND (struktur_lft BETWEEN " . $StrukturWechselKnoten->struktur_lft . " AND " . $StrukturWechselKnoten->struktur_rgt . ")";
             $UpdateStrukturId = StrukturRecord::finder()->findBySQL($sql)->idtm_struktur;
             $Einzelfaktor = $Einzelwert->spl_faktor;
             $td_startvalue = $Einzelfaktor / $Gesamtwert * $newValue;
             //hier startet jetzt der Part, wo ich nur eine Periode habe -> entweder SubJahr oder Jahr...
             $PFBackCalculator = new PFBackCalculator();
             /* Folgende Parameter sind zur Berechnung der Werte notwendig...
              * @param idta_periode -> die interne Periodenbezeichnung -> 10001 für 1. Jahr oder 1 für 1 Monat (Bsp)
              * @param idtm_struktur -> die Struktur ID, auf der die Werte nachher gespreichert werden sollen
              * @param w_dimkey -> der Schlüssel, der angehängt werden soll...
              * @param assoc_array(feldbezug=>wert) -> array mit den Werten, die als "neu" betrachtet werden sollen...
              */
             $PFBackCalculator->setStartPeriod($Einzelwert->spl_monat);
             $PFBackCalculator->setStartNode($UpdateStrukturId);
             //vorbereiten des Wertearrays, damit die bestehenden Werte in der Datenbank, mit den neuen Uerberschrieben werden koennen
             //jetzt laden wir die einzelnen Werte
             $w_wert[$Einzelwert->idta_feldfunktion] = $td_startvalue;
             $PFBackCalculator->setNewValues($w_wert);
             $PFBackCalculator->setVariante($this->GLOBALVARIANTE);
             $PFBackCalculator->run();
             unset($PFBackCalculator);
             unset($UpdateStrukturId);
         }
     } else {
         unset($EinzelWerte);
         //zuerst muss ich die Anzahl der Knoten ermitteln, die in der Zieldimensionsgruppe vorhanden sind...
         $idta_stammdaten_group = StammdatenRecord::finder()->findByPK($StammdatenID)->idta_stammdaten_group;
         $SplasherInfo = SplasherRecord::finder()->find('from_idta_stammdaten_group = ? AND from_idta_feldfunktion = ?', $idta_stammdaten_group, $local_ff);
         $to_idta_stammdaten_group = $SplasherInfo->to_idta_stammdaten_group;
         $to_idta_feldfunktion = $SplasherInfo->to_idta_feldfunktion;
         //hier ermitteln wir die anzahl der zielwerte
         $AnzahlZielWerte = StammdatenRecord::finder()->count('idta_stammdaten_group = ?', $to_idta_stammdaten_group);
         $sql = "SELECT idtm_stammdaten FROM tm_stammdaten WHERE idta_stammdaten_group = '" . $to_idta_stammdaten_group . "'";
         $Einzelwerte = StammdatenRecord::finder()->findAllBySql($sql);
         if (is_array($Einzelwerte)) {
             foreach ($Einzelwerte as $Einzelwert) {
                 $sql = "SELECT idtm_struktur FROM tm_struktur WHERE idtm_stammdaten = '" . $Einzelwert->idtm_stammdaten . "'";
                 $sql .= " AND (struktur_lft BETWEEN " . $StrukturWechselKnoten->struktur_lft . " AND " . $StrukturWechselKnoten->struktur_rgt . ")";
                 $UpdateStrukturId = StrukturRecord::finder()->findBySQL($sql)->idtm_struktur;
                 $Einzelfaktor = 1 / $AnzahlZielWerte;
                 $td_startvalue = $Einzelfaktor * $newValue;
                 //hier startet jetzt der Part, wo ich nur eine Periode habe -> entweder SubJahr oder Jahr...
                 $PFBackCalculator = new PFBackCalculator();
                 /* Folgende Parameter sind zur Berechnung der Werte notwendig...
                  * @param idta_periode -> die interne Periodenbezeichnung -> 10001 für 1. Jahr oder 1 für 1 Monat (Bsp)
                  * @param idtm_struktur -> die Struktur ID, auf der die Werte nachher gespreichert werden sollen
                  * @param w_dimkey -> der Schlüssel, der angehängt werden soll...
                  * @param assoc_array(feldbezug=>wert) -> array mit den Werten, die als "neu" betrachtet werden sollen...
                  */
                 $PFBackCalculator->setStartPeriod($local_monat);
                 $PFBackCalculator->setStartNode($UpdateStrukturId);
                 //vorbereiten des Wertearrays, damit die bestehenden Werte in der Datenbank, mit den neuen Uerberschrieben werden koennen
                 //jetzt laden wir die einzelnen Werte
                 $w_wert[$to_idta_feldfunktion] = $td_startvalue;
                 $PFBackCalculator->setNewValues($w_wert);
                 $PFBackCalculator->setVariante($this->GLOBALVARIANTE);
                 $PFBackCalculator->run();
                 unset($PFBackCalculator);
                 unset($UpdateStrukturId);
             }
         }
     }
 }