118 lines
6.2 KiB
PHP
Executable File
118 lines
6.2 KiB
PHP
Executable File
<?php
|
|
require_once("config.inc.php");
|
|
|
|
function func_grundgehalt($prozentsatz)
|
|
{
|
|
|
|
// Abhängige Funktion vorab: func_doz_nachbes.php
|
|
// Daher die erfassten werte übernehmen, 1 Jahr nach dem letzten Wert eine Steigerung um 2%
|
|
// Ab jedem neuen Jahr eine Steigerung von 2%
|
|
$db = dbconnect();
|
|
|
|
$query_countchange = $db->query("SELECT count(*) Anz
|
|
FROM `prog_grundgehalt`
|
|
WHERE modify_date != '0000-00-00 00:00:00'
|
|
");
|
|
$row_change = $query_countchange->fetch_array();
|
|
|
|
// Gibt es überhaupt Änderungen
|
|
if($row_change['Anz'] > 0){
|
|
$db = dbconnect();
|
|
$result_truncate = $db->query("TRUNCATE TABLE prog_tmp_grundgehalt");
|
|
$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'));
|
|
$fehler = array();
|
|
|
|
foreach (new DatePeriod($start, new DateInterval('P1M'), $end) as $cur) {
|
|
$akt_mon = $cur->format('Y-m');
|
|
$mon = $cur->format('m');
|
|
|
|
// Schleife über alle vorhandenen Besoldungen ab diesem Zeitpunkt. Where Bedingung evtl. kritisch. Alternativ müssten alle späteren Besoldungsstufen auf 01.01.2016 nachgetragen werden - auch nicht besser
|
|
$query2 = "SELECT DISTINCT besoldung, stufe
|
|
FROM prog_tmp_professor_besoldung
|
|
WHERE date_format(startdat, '%Y-%m') <= '$akt_mon'
|
|
";
|
|
|
|
$result2 = $db->query($query2) or die("Cannot execute query2");
|
|
while ($row2 = $result2->fetch_array()) {
|
|
|
|
// Was ist das höchste Datum, bis wann der Grundgehalt erfasst wurde? Ggf. muss der Wert fiktiv hochgerechnet werden
|
|
$result_proz = $db->query("SELECT date_format(max(startdat), '%Y-%m') proz_dat
|
|
FROM prog_grundgehalt
|
|
WHERE besoldung='$row2[besoldung]'
|
|
AND stufe ='$row2[stufe]'
|
|
");
|
|
$row_proz = $result_proz->fetch_array();
|
|
|
|
if ($row_proz['proz_dat'] >= $akt_mon) {
|
|
// Gehaltsstufe ist noch erfasst. Kein fiktiver Wert
|
|
|
|
$result_akt_wert = $db->query("SELECT gid, besoldung, betrag, stufe
|
|
FROM prog_grundgehalt
|
|
WHERE date_format(startdat, '%Y-%m') <= '$akt_mon'
|
|
AND besoldung = '$row2[besoldung]'
|
|
AND stufe = '$row2[stufe]'
|
|
ORDER BY startdat desc
|
|
LIMIT 1");
|
|
$row_akt_wert = $result_akt_wert->fetch_array();
|
|
$result_insert = $db->query("INSERT INTO prog_tmp_grundgehalt (gid, startdat, besoldung, betrag, stufe, art) VALUES ($row_akt_wert[gid], '$akt_mon-01', '$row_akt_wert[besoldung]', '$row_akt_wert[betrag]', '$row_akt_wert[stufe]', 'B')");
|
|
|
|
} else {
|
|
if ($row_proz['proz_dat'] == NULL) {
|
|
// Es wurde kein Grundgehalt erfasst: In Tabelle prog_tmp_professor_besoldung hat ein Professor eine Besoldungsstufe, für die es kein Grundgehalt gibt
|
|
$fehler_cur = "$row2[besoldung]$row2[stufe]";
|
|
if(!in_array($fehler_cur, $fehler)){
|
|
$fehler[] .= "$fehler_cur";
|
|
echo "<br><font size=1>Mindestens 1 Professor verwendet $row2[besoldung] Stufe: $row2[stufe]. Besoldung zum Datum " . $cur->format('01.m.Y') . " nacherfassen</font>";
|
|
}
|
|
|
|
} else {
|
|
// Fiktiver Gehaltswert; ab neuem Jahr + 2%
|
|
|
|
// Letzter Wert ermitteln
|
|
// Nachtrag: von prog_tmp_grundgehalt auf prog_grundgehalt geändert. Wenn im Startjahr keine Gehälter im Grundgehalt erfasst sind, dann gibt es kein letzter Wert in tmp
|
|
$result_last_wert = $db->query("SELECT betrag
|
|
FROM prog_grundgehalt
|
|
WHERE date_format(startdat, '%Y-%m') <= '$akt_mon'
|
|
AND besoldung = '$row2[besoldung]'
|
|
AND stufe = '$row2[stufe]'
|
|
ORDER BY startdat desc
|
|
LIMIT 1");
|
|
$row_last_wert = $result_last_wert->fetch_array();
|
|
|
|
if ($mon == '01') { //Erhöhung im Januar um 2 Prozent
|
|
$prozent = $row_last_wert['betrag'] * $prozentsatz / 100;
|
|
$next_wert = round($row_last_wert['betrag'] + $prozent, 2);
|
|
|
|
$result_insert = $db->query("INSERT INTO prog_tmp_grundgehalt (startdat, besoldung, betrag, stufe, art) VALUES ('$akt_mon-01', '$row2[besoldung]', '$next_wert', '$row2[stufe]', 'F')");
|
|
#echo "Fiktiver Grundgehalt erfasst für $row2[besoldung] Stufe: $row2[stufe] zum Datum $akt_mon: $next_wert €<br>";
|
|
} else {
|
|
$result_insert = $db->query("INSERT INTO prog_tmp_grundgehalt (startdat, besoldung, betrag, stufe, art) VALUES ('$akt_mon-01', '$row2[besoldung]', '$row_last_wert[betrag]', '$row2[stufe]', 'F')");
|
|
#echo "Fiktiver Grundgehalt erfasst für $row2[besoldung] Stufe: $row2[stufe] zum Datum $akt_mon: $row_last_wert[betrag] €<br>";
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
$result_modify = $db->query("UPDATE prog_grundgehalt
|
|
SET modify_date = NULL
|
|
");
|
|
} // Ende, wenn es keine Änderungen gibt
|
|
}
|
|
|
|
#func_grundgehalt(2);
|
|
|
|
?>
|