public function TSavedButtonClicked($sender, $param) { $tempus = $this->primarykey; if ($this->splasher_edit_status->Text == '1') { $AEditRecord = SplasherRecord::finder()->findByPK($this->{$tempus}->Text); } else { $AEditRecord = new SplasherRecord(); } //HIDDEN foreach ($this->hiddenfields as $recordfield) { $edrecordfield = $recordfield; $AEditRecord->{$recordfield} = $this->{$edrecordfield}->Value; } //DATUM foreach ($this->datfields as $recordfield) { $edrecordfield = $recordfield; $AEditRecord->{$recordfield} = date('Y-m-d', $this->{$edrecordfield}->TimeStamp); } //LIST foreach ($this->listfields as $recordfield) { $edrecordfield = $recordfield; $AEditRecord->{$recordfield} = $this->{$edrecordfield}->Text; } //BOOL foreach ($this->boolfields as $recordfield) { $edrecordfield = $recordfield; $AEditRecord->{$recordfield} = $this->{$edrecordfield}->Checked ? 1 : 0; } foreach ($this->timefields as $recordfield) { $edrecordfield = $recordfield; $AEditRecord->{$recordfield} = $this->{$edrecordfield}->Text; } foreach ($this->fields as $recordfield) { $edrecordfield = $recordfield; $AEditRecord->{$recordfield} = $this->{$edrecordfield}->Text; } $AEditRecord->save(); $this->bindListSplasher(); $this->splasher_edit_status->Text = 1; $this->idta_splasher->Text = $AEditRecord->idta_splasher; }
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); } } } }