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']; ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Mit Stufe 2 wird diese Obergrenze nur noch bis 31.12.2017 angewendet. Dann gilt Stufe 2 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// $ende = "2017-12-31"; $end = date_create($ende, new DateTimeZone('GMT')); $diff = $start->diff($end); $monate = ($diff->y*12)+$diff->m; // Differenz in Jahren, Tagen und Monaten #echo "Differenz: " . $diff->y . " Jahr(e), " . $diff->m . " Monat(e), " . $diff->d . " Tag(e)
" . PHP_EOL; // Differenz in Tagen #echo "Differenz: $monate Monate
" . PHP_EOL; #printf('Jahr(e), %u Monat(e), %u Tag(e)', $diff->m, $diff->d); #exit; #$progress=new ProgressClass(); #$progress->setWidth(800); #$progress->make(); #$ln_zaehler = 0; foreach(new DatePeriod($start, new DateInterval('P1M') , $end) as $cur) { $akt_mon = $cur->format('Y-m-01'); #echo "Start $row_minjahr[jahr]-01-01 | Ende $ende | AktMon $akt_mon
"; #$akt_mon_for = $cur->format('M Y'); #$ln_zaehler = $ln_zaehler+1; #$progress->setPerX($ln_zaehler,$monate); #$iproz = 90/$monate*$ln_zaehler; #$progress->setBarColor('#'.dechex(100-$iproz+156).dechex($iproz+80).'00'); #$progress->setLabel('max. LBZ berechnen - Monat: '.$akt_mon_for); // Hier müsste die Zulage BZ noch berücksichtigt werden: prog_tmp_lb_bz c $query_chk = "SELECT a.monat, did, sum(wert) wert, a.art, tlblzid, w2, c3, max_zulage, b.art FROM prog_tmp_lb_lz a, prog_tmp_lb_obergrenze b WHERE a.monat=b.ab_datum AND a.monat='$akt_mon' GROUP by did "; $result_chk = $db->query($query_chk) or die("Cannot execute query_chk"); while ($row_chk = $result_chk->fetch_array()) { if ($row_chk['wert'] > $row_chk['max_zulage']) { $akt_zulage = $row_chk['wert']; // 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 werden: // update prog_tmp_lb_lz set wert = 5000 where did = 12 and lblzid in (1005,1006); for ($i = $row_chk['max_zulage']; $i < $akt_zulage; $i++) { $query_letztezul = $db->query("SELECT max(lblzid) lblzid FROM `prog_tmp_lb_lz` WHERE wert != 0 AND monat = '$akt_mon' AND art = 'F' AND did=$row_chk[did] "); $row_letztezul = $query_letztezul->fetch_array(); // Die komplette Zulage streichen und Kenner O=Obergrenze setzen // Nur bis zum Enddatum in Stufe 1: if($row_letztezul['lblzid'] != ''){ $result_zul = $db->query("UPDATE prog_tmp_lb_lz SET wert = '0' ,art = 'O' WHERE lblzid = $row_letztezul[lblzid] AND did=$row_chk[did] AND monat <= '$ende' "); } // 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 = '$akt_mon' AND did=$row_chk[did] "); $row_aktzul = $query_aktzul->fetch_array(); $akt_zulage = $row_aktzul['wert']; } } } } #$progress->hide(); } #func_LB_obergrenze_Limit_stufe1(); ?>