prognose_ludwigsburg/func_grundgehalt.php
2023-04-26 13:17:21 +02:00

117 lines
6.0 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
$result_last_wert = $db->query("SELECT betrag
FROM prog_tmp_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);
?>