first commit
This commit is contained in:
136
func_LB_obergrenze_Limit.php
Executable file
136
func_LB_obergrenze_Limit.php
Executable file
@ -0,0 +1,136 @@
|
||||
<?php
|
||||
require_once ("config.inc.php");
|
||||
require("progress/ProgressClass.php");
|
||||
|
||||
function func_LB_obergrenze_Limit($obergrenze)
|
||||
{
|
||||
$beginn_ges = microtime(true);
|
||||
|
||||
|
||||
// Die Professoren k<>nnen nur maximal 1000<30> Zulagen haben aus BZ und LZ
|
||||
// Diese Funktion <20>berpr<70>ft, ob das Limit <20>berschritten wurde und setzt die Zulage LZ ggf. auf 0
|
||||
// Es m<>ssen Leistungszulagen LZ und BZ verglichen werden, dass die Summe der beiden nicht gr<67><72>er ist als die maximale Zulage
|
||||
// Vorgehensweise:
|
||||
// Schleife <20>ber alle Professoren
|
||||
|
||||
$db = dbconnect();
|
||||
$query_minjahr = $db->query("SELECT min(jahr) jahr
|
||||
FROM `prog_vergaberahmen`
|
||||
");
|
||||
$row_minjahr = $query_minjahr->fetch_array();
|
||||
$start = new DateTime($row_minjahr['jahr'] . '-01-01');
|
||||
$query_maxjahr = $db->query("SELECT date_format(max(date_sub(weggang, INTERVAL 1 MONTH)),'%Y-%m-28') enddat_form
|
||||
FROM `prog_tmp_professor`
|
||||
");
|
||||
$row_maxjahr = $query_maxjahr->fetch_array();
|
||||
$ende = $row_maxjahr['enddat_form'];
|
||||
$end = date_create($ende, new DateTimeZone('GMT'));
|
||||
|
||||
# foreach(new DatePeriod($start, new DateInterval('P1M') , $end) as $cur) {
|
||||
# $akt_mon = $cur->format('Y-m-01');
|
||||
|
||||
|
||||
$query_chk = "SELECT did, sum(wert) wert_lz, monat
|
||||
FROM prog_tmp_lb_lz
|
||||
GROUP BY did, monat
|
||||
ORDER BY did
|
||||
";
|
||||
$result_chk = $db->query($query_chk) or die("Cannot execute query_chk");
|
||||
while ($row_chk = $result_chk->fetch_array()) {
|
||||
|
||||
/* Schleifeninhalte
|
||||
10 125.00 2017-12-01
|
||||
10 125.00 2018-01-01
|
||||
10 125.00 2018-02-01
|
||||
*/
|
||||
|
||||
$query_zulbz = $db->query("SELECT sum(wert) wert_bz
|
||||
FROM prog_tmp_lb_bz a
|
||||
WHERE did='$row_chk[did]'
|
||||
AND a.monat='$row_chk[monat]'
|
||||
GROUP by did
|
||||
");
|
||||
$row_zulbz = $query_zulbz->fetch_array();
|
||||
$akt_zulage = $row_zulbz['wert_bz'] + $row_chk['wert_lz'];
|
||||
# wert_bz: 954.7100
|
||||
# wert_lz: 125.00
|
||||
# akt_zulage: 1079,74
|
||||
|
||||
if($akt_zulage > $obergrenze){
|
||||
# echo "$row_chk[did]: $row_chk[monat] -> $akt_zulage | ";
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// Schleife bis die maximale Zulage gr<67><72>er ist, als die Summe der Zulagen
|
||||
// Gestrichen werden die fiktiven Zulagen LZ
|
||||
// Testfall: Zwei Zulagen kurz vor dem Ruhestand extrem erh<72>hen, diese m<>ssten beide gestrichen werdne:
|
||||
// update prog_tmp_lb_lz set wert = 5000 where did = 12 and lblzid in (1005,1006);
|
||||
|
||||
for ($i = $obergrenze; $i < $akt_zulage; $i++) {
|
||||
# Es kann eine Dauerschleife entstehen, wenn kein Wert mehr gek<65>rzt werden kann, also keine fiktiven Leistungszulagen mehr. Dann muss der Wert akt_zulage unter Obergrenze gesetzt werden, damit es weitergeht
|
||||
$query_letztezul = $db->query("SELECT max(lblzid) lblzid
|
||||
FROM `prog_tmp_lb_lz`
|
||||
WHERE wert != 0
|
||||
AND monat = '$row_chk[monat]'
|
||||
AND art = 'F'
|
||||
AND did=$row_chk[did]
|
||||
");
|
||||
$row_letztezul = $query_letztezul->fetch_array();
|
||||
|
||||
// Die komplette Zulage streichen und Kenner O=Obergrenze setzen
|
||||
|
||||
$result_zul = $db->query("UPDATE prog_tmp_lb_lz
|
||||
SET wert = '0'
|
||||
,art = 'O'
|
||||
WHERE lblzid = $row_letztezul[lblzid]
|
||||
AND monat = '$row_chk[monat]'
|
||||
AND did=$row_chk[did]
|
||||
");
|
||||
|
||||
// Pr<50>fen, ob wie hoch die aktuelle Zulage ist, damit aus der Schleife ausgestiegen werden kann
|
||||
|
||||
$query_aktzul = $db->query("SELECT sum(wert) wert
|
||||
FROM `prog_tmp_lb_lz`
|
||||
WHERE monat = '$row_chk[monat]'
|
||||
AND did=$row_chk[did]
|
||||
");
|
||||
$row_aktzul = $query_aktzul->fetch_array();
|
||||
|
||||
# Gibt es noch K<>rzungspotential? Damti keine Dauerschleife entsteht, wenn kein Update auf fiktive Betr<74>ge mehr gemacht werden kann
|
||||
$query_ds = $db->query("SELECT count(*) Anz
|
||||
FROM `prog_tmp_lb_lz`
|
||||
WHERE monat = '$row_chk[monat]'
|
||||
AND did=$row_chk[did]
|
||||
AND wert != '0.00'
|
||||
AND art='F'
|
||||
");
|
||||
$row_ds = $query_ds->fetch_array();
|
||||
|
||||
if($row_ds['Anz'] == 0){
|
||||
$akt_zulage = $obergrenze - 1;
|
||||
}else{
|
||||
$akt_zulage = $row_aktzul['wert']+$row_zulbz['wert_bz'];
|
||||
}
|
||||
|
||||
}
|
||||
# echo "summe neu $akt_zulage<br>";
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
#}
|
||||
$dauer2 = number_format(microtime(true)-$beginn_ges, 2, ',', '.');
|
||||
# echo"<hr><b>$dauer2</b>";
|
||||
}
|
||||
|
||||
#func_LB_obergrenze_Limit(1000);
|
||||
?>
|
Reference in New Issue
Block a user