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 "
Mindestens 1 Professor verwendet $row2[besoldung] Stufe: $row2[stufe]. Besoldung zum Datum " . $cur->format('01.m.Y') . " nacherfassen"; } } 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 €
"; } 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] €
"; } } } } } $result_modify = $db->query("UPDATE prog_grundgehalt SET modify_date = NULL "); } // Ende, wenn es keine Änderungen gibt } #func_grundgehalt(2); ?>