first commit
This commit is contained in:
125
func_LB_obergrenze_Limit_stufe1.php
Executable file
125
func_LB_obergrenze_Limit_stufe1.php
Executable file
@ -0,0 +1,125 @@
|
||||
<?php
|
||||
require_once ("config.inc.php");
|
||||
#require("progress/ProgressClass.php");
|
||||
|
||||
function func_LB_obergrenze_Limit_stufe1()
|
||||
{
|
||||
|
||||
|
||||
|
||||
// Die Professoren k<>nnen nur maximal so viele Zulagen erhalten, bis sie zum Grundgehalt C3 kommen
|
||||
// Die Entwicklung der Grundgeh<65>lter wird in prog_tmp_lb_obergrenze vermerkt.
|
||||
// Die Differenz aus W2 und C3 darf maximal als Zulage gew<65>hrt werden.
|
||||
// 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
|
||||
// BZ kann derzeit nicht gepr<70>ft werden, da dort nur ein Jahreswert erfasst wird, ohne Aufsplittung auf die Professoren.
|
||||
// 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'];
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// 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)<br>" . PHP_EOL;
|
||||
|
||||
// Differenz in Tagen
|
||||
#echo "Differenz: $monate Monate<br>" . 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<br>";
|
||||
#$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<65>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<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 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<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 = '$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();
|
||||
?>
|
Reference in New Issue
Block a user