first commit
This commit is contained in:
113
func_LB_BZ.php
Executable file
113
func_LB_BZ.php
Executable file
@ -0,0 +1,113 @@
|
||||
<?php
|
||||
require_once ("config.inc.php");
|
||||
|
||||
function func_LB_BZ($prozentsatz)
|
||||
{
|
||||
// Berechnung der Leistungszulagen BZ in die Zukunft sowie die fiktiven Zulagen.
|
||||
|
||||
$db = dbconnect();
|
||||
$result_truncate = $db->query("TRUNCATE TABLE prog_tmp_lb_bz");
|
||||
|
||||
// Teil 1: Vorhandene Leistungsbez<65>ge monatlich hochrechnen
|
||||
|
||||
$query = "SELECT lbbzid, date_format(startdat,'%Y-%m-01') startdat_form, date_format(enddat,'%Y-%m-28') enddat_form, wert, anpassung, did
|
||||
FROM prog_lb_bz
|
||||
ORDER BY did, startdat ASC";
|
||||
$result = $db->query($query) or die("Cannot execute query");
|
||||
while ($row = $result->fetch_array()) {
|
||||
// Wenn kein Enddatum vorhanden ist, dann wird das Auschscheidedatum/Ruhestandsdatum verwendet
|
||||
|
||||
# 1 Monat abziehen, da man wissen m<>chte, in welchem Monat der Prof seine letzte Zulage bekommt. In der DB steht der erste Tag der Pension
|
||||
$result_weggang = $db->query("SELECT date_format(date_sub(weggang, INTERVAL 1 MONTH) ,'%Y-%m-28') enddat_form
|
||||
FROM prog_tmp_professor
|
||||
WHERE did = $row[did]
|
||||
");
|
||||
$row_weggang = $result_weggang->fetch_array();
|
||||
|
||||
$ende = $row['enddat_form'];
|
||||
|
||||
# Wenn in prog_lb_bz kein Enddatum definiert, dann maximal bis zum Ruhestand
|
||||
if ($ende == '0000-00-28') {
|
||||
$ende = $row_weggang['enddat_form'];
|
||||
}
|
||||
|
||||
# Wenn in prob_lb_bz das Enddatum <20>ber den Ruhestand geht, dann auch max. bis zum Ruhestand rechnen
|
||||
if ($ende > $row_weggang['enddat_form']) {
|
||||
$ende = $row_weggang['enddat_form'];
|
||||
}
|
||||
|
||||
|
||||
$end = date_create($ende, new DateTimeZone('GMT'));
|
||||
|
||||
# Hat der Professor eine dynamische Anpassung=Y und kein Enddatum, dann wird im Folgejahr die Zulage um 2 % erh<72>ht
|
||||
# Bis wann sind die Zulagen Bestandszulagen und ab wann fiktive Zulagen?
|
||||
# Bestandszulagen sind die Zulagen auf jeden Fall, solange diese im System erfasst sind: MaxDatum des Professors in prog_lb_bz
|
||||
# Ab dem Folgejahr (01.01) dieses MaxDatums wird eine Zulage fiktiv mit 2% Erh<72>hung bei dynamischer Anpassung
|
||||
# Hat der Professor keine dynamische Anpassung=N und kein Enddatum (Regel), dann wird bis zum Ruhestandsdatum mit demselben Betrag gerechnet
|
||||
# Kann ein Dozent der keine dynamische Anpassung hat, auch fiktive Zulagen bekommen? -> Fr. Gottwald?
|
||||
|
||||
$result_letztezul = $db->query("SELECT DATE_ADD(date_format(startdat,'%Y-01-01'),INTERVAL 1 YEAR) fikt_date, wert
|
||||
FROM prog_lb_bz
|
||||
WHERE did = $row[did]
|
||||
and enddat='0000-00-00'
|
||||
ORDER BY startdat DESC
|
||||
LIMIT 1
|
||||
");
|
||||
$row_letztezul = $result_letztezul->fetch_array();
|
||||
|
||||
|
||||
# Letzter Wert, von dem der fiktive Wert berechnet wird
|
||||
$wert = $row_letztezul['wert'];
|
||||
$wert2 = $row_letztezul['wert'];
|
||||
|
||||
// echo "<pre>".print_r($end)."</pre><br />";
|
||||
|
||||
$start = date_create_from_format('Y-m-d', $row['startdat_form'], new DateTimeZone('GMT'));
|
||||
|
||||
// Foreach Schleife dauert lange. Ggf.
|
||||
// Es scheint so, dass DateInterval den letzten Monat wegl<67>sst wenn jmd z.B. am 01. August in Ruhestand , dann rechnet die foreach-Schleife nur bis Juli. Daher wird oben im Select der 28 als Monatsende eingetragen
|
||||
|
||||
foreach(new DatePeriod($start, new DateInterval('P1M') , $end) as $cur) {
|
||||
|
||||
if($row['anpassung'] == 'Y'){
|
||||
|
||||
if( $row_letztezul['fikt_date'] <= $cur->format('Y-m-01') AND $row_letztezul['fikt_date'] != ''){
|
||||
# Werte werden fiktiv, wenn ab dem neuen Jahr, wenn kein Wert mehr in prog_lb_bz erfasst ist
|
||||
# Im Januar erh<72>ht sich der Wert um 2%
|
||||
if($cur->format('m') == '01'){
|
||||
$prozent = $wert * $prozentsatz / 100;
|
||||
$wert = $wert + $prozent;
|
||||
$wert2 = round($wert,2);
|
||||
|
||||
}else{
|
||||
$wert2 = $wert2;
|
||||
}
|
||||
#echo "JA ->".$row_letztezul['fikt_date']."|".$cur->format('Y-m-01')." -> $wert | $wert2 | ".round(909.46586808 , 2)."<br>";
|
||||
$result_insert = $db->query("INSERT INTO prog_tmp_lb_bz (lbbzid, monat, did, wert, anpassung, art) VALUES (0, '" . $cur->format('Y-m-01') . "', $row[did], $wert2, '$row[anpassung]', 'F')");
|
||||
|
||||
|
||||
}else{
|
||||
# werte sind nicht fiktiv, sondern fix aus prog_lb_bz <20>bernehmen. art=B
|
||||
# Insert mit
|
||||
|
||||
|
||||
$result_insert = $db->query("INSERT INTO prog_tmp_lb_bz (lbbzid, monat, did, wert, anpassung, art) VALUES ($row[lbbzid], '" . $cur->format('Y-m-01') . "', $row[did], $row[wert], '$row[anpassung]', 'B')");
|
||||
#echo "INSERT INTO prog_tmp_lb_bz (lbbzid, monat, did, wert, anpassung, art) VALUES ($row[lbbzid], '" . $cur->format('Y-m-01') . "', $row[did], $row[wert], '$row[anpassung]', 'B')<br />";
|
||||
}
|
||||
}
|
||||
|
||||
if($row['anpassung'] == 'N'){
|
||||
# Es erfolgt bis zum Ruhestand keine Anpassung
|
||||
$result_insert = $db->query("INSERT INTO prog_tmp_lb_bz (lbbzid, monat, did, wert, anpassung, art) VALUES ($row[lbbzid], '" . $cur->format('Y-m-01') . "', $row[did], $row[wert], '$row[anpassung]', 'B')");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
} // Ende Funktion
|
||||
|
||||
#func_LB_BZ(2);
|
||||
|
||||
?>
|
Reference in New Issue
Block a user