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 WHERE monat >= '2018-01-01' 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()) { $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']; if($akt_zulage > $obergrenze){ # echo "$row_chk[did]: $row_chk[monat] -> $akt_zulage | "; // Schleife bis die maximale Zulage größer ist, als die Summe der Zulagen // Gestrichen werden die fiktiven Zulagen LZ // Testfall: Zwei Zulagen kurz vor dem Ruhestand extrem erhö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ü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 #echo "$obergrenze | $akt_zulage: $row_zulbz[wert_bz] + $row_chk[wert_lz] | $row_chk[monat]
"; $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ü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ä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
"; } } #} $dauer2 = number_format(microtime(true)-$beginn_ges, 2, ',', '.'); # echo"
$dauer2"; } #func_LB_obergrenze_Limit_stufe2(1000); ?>