query("SELECT lvs, sw, sws FROM dep_kat_lvs WHERE jahr <= '$jahr' ORDER BY jahr DESC LIMIT 1 "); $row_startlvs = $query_startlvs->fetch_array(); $start_lvs = $row_startlvs['lvs']; $start_sw = $row_startlvs['sw']; # Ermäßigte LVS auf 0 setzen. Wird folgend neu berechnet in while Schleife # Wird auch neu berechnet, wenn sie davor nicht auf 0 gesetzt wurden # Mutterschutz wird z.B. nicht berechnet. Das trägt der Admin ein #$result_init = $db->query("UPDATE dep_deputat_ermaessigung # SET lvs = 0 # WHERE imtuid = $imtuid # AND jahr=$jahr # "); $query0 = "SELECT deid, art, funktion, beginn, ende, sws, lvs, prozent, sort_order FROM dep_deputat_ermaessigung WHERE imtuid=$imtuid AND jahr=$jahr ORDER BY sort_order ASC, beginn ASC"; $result0 = $db->query($query0) or die("Cannot execute query 0"); while ($row0 = $result0->fetch_array()) { # Summe der bisherigen Ermäßigungen herausfinden: < sort_order $query_starterm = $db->query("SELECT sum(lvs) erm_ges FROM dep_deputat_ermaessigung WHERE jahr = '$jahr' AND imtuid = $imtuid AND sort_order < $row0[sort_order] "); $row_starterm = $query_starterm->fetch_array(); $sumerm = $row_starterm['erm_ges']; ######################################## # Schwerbehinderung ######################################## if ($row0['prozent'] > 0 and $row0['art'] == 'Schwerbehinderung') { $lvs = ""; $start = new DateTime($row0['beginn']); # Endtag definiert? # --> Beginn der nächsten Schwerbehinderungs wenn kleiner 31.8 im Jahr2 sonst 31.8 vom Jahr2. Wenn nichts definiert, dann 31.8 Jahr2 $query_endnext = $db->query("SELECT date_sub(beginn, INTERVAL 1 DAY) ende FROM dep_deputat_ermaessigung WHERE jahr = '$jahr' AND imtuid = $imtuid AND art = 'Schwerbehinderung' and beginn > '$row0[beginn]' ORDER BY beginn ASC LIMIT 1 "); $row_endnext = $query_endnext->fetch_array(); if ($row_endnext['ende'] == '') { # keine weitere Schwerbehinderung im aktuellen Jahr, dann 31.8 Jahr2 $ende = $jahr2 . '-08-31'; } elseif ($row_endnext['ende'] >= $jahr2 . '-08-31') { # Wenn das nächste Datum höher als der 31.8 im Folgejahr ist, dann 31.8 Jahr2 als Enddatum setzen $ende = $jahr2 . '-08-31'; } else { # Ende ist der Tag vor der nächsten beginnenden Schwerbehinderung $ende = $row_endnext['ende']; } #echo $ende."
"; $end = date_create($ende, new DateTimeZone('GMT')); $anz_mon = 0; $anz_mon2 = 0; foreach (new DatePeriod($start, new DateInterval('P1M'), $end) as $cur) { # Schleife läuft alle Monate des Studienjahrs durch und prüft monatliche Schwerbehinderung $akt_mon = $cur->format('Y-m'); $sperre = erm_sperre($imtuid, $akt_mon); if (!$sperre) { $anz_mon++; $bish_lvs = $db->query("SELECT sum(lvs) bish_lvs FROM dep_deputat_ermaessigung WHERE jahr = '$jahr' AND imtuid = $imtuid AND sort_order < $row0[sort_order] "); $row_bish_lvs = $bish_lvs->fetch_array(); $cur_lvs = $start_lvs - $row_bish_lvs['bish_lvs']; # Monatliche Ermäßigung } else { $anz_mon2++; } #Ende Sperrmonate } $result_umf = $db->query("SELECT prozent FROM dep_deputat_ermaessigung WHERE date_format(beginn, '%Y-%m') <= '$akt_mon' AND imtuid = $imtuid AND art = 'Schwerbehinderung' AND jahr = '$jahr' ORDER BY beginn desc LIMIT 1 "); $row_umf = $result_umf->fetch_array(); $lvs_ber = $cur_lvs * $row_umf['prozent'] / (12 - $anz_mon2) * $anz_mon; #echo $akt_mon." - $row_umf[prozent] - $cur_lvs - $lvs_ber
"; # Summe LVS - Während der Dauer der Schwerbehinderung $lvs = $lvs + $lvs_ber; $result = $db->query("UPDATE dep_deputat_ermaessigung SET lvs = '$lvs' ,monate = $anz_mon WHERE imtuid = $imtuid AND art = 'Schwerbehinderung' AND jahr=$jahr AND deid = $row0[deid] "); } # Ende Schwerbehinderung ######################################## # Teilzeit ######################################## if ($row0['prozent'] > 0 and $row0['art'] == 'Teilzeit') { $lvs = ""; $start = new DateTime($row0['beginn']); # Endtag definiert? # --> Beginn der nächsten Teilzeit wenn kleiner 31.8 im Jahr2 sonst 31.8 vom Jahr2. Wenn nichts definiert, dann 31.8 Jahr2 $query_endnext = $db->query("SELECT date_sub(beginn, INTERVAL 1 DAY) ende FROM dep_deputat_ermaessigung WHERE jahr = '$jahr' AND imtuid = $imtuid AND art = 'Teilzeit' and beginn > '$row0[beginn]' ORDER BY beginn ASC LIMIT 1 "); $row_endnext = $query_endnext->fetch_array(); if ($row_endnext['ende'] == '') { # keine weitere Teilzeit im aktuellen Jahr, dann 31.8 Jahr2 $ende = $jahr2 . '-08-31'; } elseif ($row_endnext['ende'] >= $jahr2 . '-08-31') { # Wenn das nächste Datum höher als der 31.8 im Folgejahr ist, dann 31.8 Jahr2 als Enddatum setzen $ende = $jahr2 . '-08-31'; } else { # Ende ist der Tag vor der nächsten beginnenden Teilzeit $ende = $row_endnext['ende']; } #echo $ende."
"; $end = date_create($ende, new DateTimeZone('GMT')); $anz_mon = 0; foreach (new DatePeriod($start, new DateInterval('P1M'), $end) as $cur) { # Schleife läuft alle Monate des Studienjahrs durch und prüft monatliche Teilzeit $akt_mon = $cur->format('Y-m'); $sperre = erm_sperre($imtuid, $akt_mon); if (!$sperre) { $anz_mon++; } } # Berechnung im Zeitraum $lvs = $start_lvs * (1 - $row0['prozent']) / 12 * $anz_mon; $result = $db->query("UPDATE dep_deputat_ermaessigung SET lvs = '$lvs' ,monate = $anz_mon WHERE imtuid = $imtuid AND art = 'Teilzeit' AND jahr=$jahr AND deid = $row0[deid] "); } # Ende Teilzeit ######################################## # Mutterschutz / Elternzeit ######################################## # Trägt Admin ein ######################################## # Ermäßigung/Freistellung Rektorat/Dekanat (§§ 7, 8 LVVO) ######################################## if ($row0['sws'] > 0 and strpos($row0['art'], "§§ 7, 8 LVVO") !== false) { $lvs = ""; $start = new DateTime($row0['beginn']); # Endtag definiert? # Das meiste wird bei der Erfassung vom Prof. abgefangen. Es wird bis max 31.8 erfasst. Wenn leer, dann auch 31.8. Keine mehrjährigen Erfassungen möglich. # Somit ist eigentlich immer ein Ende definiert. # --> Beginn der nächsten Teilzeit wenn kleiner 31.8 im Jahr2 sonst 31.8 vom Jahr2. Wenn nichts definiert, dann 31.8 Jahr2 if ($row0['ende'] == '') { # keine weitere Ermäßigung/Freistellung Rektorat/Dekanat (§§ 7, 8 LVVO) im aktuellen Jahr, dann 31.8 Jahr2 $ende = $jahr2 . '-08-31'; } elseif ($row0['ende'] >= $jahr2 . '-08-31') { # Wenn das nächste Datum höher als der 31.8 im Folgejahr ist, dann 31.8 Jahr2 als Enddatum setzen $ende = $jahr2 . '-08-31'; } else { # Ende ist der Tag vor der nächsten beginnenden Ermäßigung/Freistellung Rektorat/Dekanat (§§ 7, 8 LVVO) $ende = $row0['ende']; } #echo $ende."
"; $end = date_create($ende, new DateTimeZone('GMT')); $anz_mon = 0; foreach (new DatePeriod($start, new DateInterval('P1M'), $end) as $cur) { $akt_mon = $cur->format('Y-m'); $sperre = erm_sperre($imtuid, $akt_mon); if (!$sperre) { $anz_mon++; } #Ende Sperrmonate } $lvs = $row0['sws'] * $start_sw / 12 * $anz_mon; $result = $db->query("UPDATE dep_deputat_ermaessigung SET lvs = '$lvs' ,monate = $anz_mon WHERE imtuid = $imtuid AND art like '%7, 8 LVVO%' AND jahr=$jahr AND deid = $row0[deid] "); } # Ende Ermäßigung/Freistellung Rektorat/Dekanat (§§ 7, 8 LVVO) ######################################## # Ermäßigung/Freistellung Funktion/Beauftragung (§ 11 LVVO) ######################################## if ($row0['sws'] > 0 and strpos($row0['art'], "§ 11 LVVO") !== false) { $lvs = ""; $start = new DateTime($row0['beginn']); # Endtag definiert? # Das meiste wird bei der Erfassung vom Prof. abgefangen. Es wird bis max 31.8 erfasst. Wenn leer, dann auch 31.8. Keine mehrjährigen Erfassungen möglich. # Somit ist eigentlich immer ein Ende definiert. # --> Beginn der nächsten Teilzeit wenn kleiner 31.8 im Jahr2 sonst 31.8 vom Jahr2. Wenn nichts definiert, dann 31.8 Jahr2 if ($row0['ende'] == '') { # keine weitere Ermäßigung/Freistellung Rektorat/Dekanat (§ 11 LVVO) im aktuellen Jahr, dann 31.8 Jahr2 $ende = $jahr2 . '-08-31'; } elseif ($row0['ende'] >= $jahr2 . '-08-31') { # Wenn das nächste Datum höher als der 31.8 im Folgejahr ist, dann 31.8 Jahr2 als Enddatum setzen $ende = $jahr2 . '-08-31'; } else { # Ende ist der Tag vor der nächsten beginnenden Ermäßigung/Freistellung Rektorat/Dekanat (§ 11 LVVO) $ende = $row0['ende']; } #echo $ende."
"; $end = date_create($ende, new DateTimeZone('GMT')); $anz_mon = 0; foreach (new DatePeriod($start, new DateInterval('P1M'), $end) as $cur) { $akt_mon = $cur->format('Y-m'); $sperre = erm_sperre($imtuid, $akt_mon); if (!$sperre) { $anz_mon++; } #Ende Sperrmonate } $lvs = $row0['sws'] * $start_sw / 12 * $anz_mon; $result = $db->query("UPDATE dep_deputat_ermaessigung SET lvs = '$lvs' ,monate = $anz_mon WHERE imtuid = $imtuid AND art like '%11 LVVO%' AND jahr=$jahr AND deid = $row0[deid] "); } # Ende Ermäßigung/Freistellung Rektorat/Dekanat (§ 11 LVVO) ######################################## # Ermäßigung/Freistellung Forschungs- und Entwicklungsaufgaben ($ 2 Abs. 8, 9 LVVO) ######################################## if ($row0['sws'] > 0 and strpos($row0['art'], "§ 2 Abs. 8, 9 LVVO") !== false) { $lvs = ""; $start = new DateTime($row0['beginn']); # Endtag definiert? # Das meiste wird bei der Erfassung vom Prof. abgefangen. Es wird bis max 31.8 erfasst. Wenn leer, dann auch 31.8. Keine mehrjährigen Erfassungen möglich. # Somit ist eigentlich immer ein Ende definiert. # --> Beginn der nächsten Teilzeit wenn kleiner 31.8 im Jahr2 sonst 31.8 vom Jahr2. Wenn nichts definiert, dann 31.8 Jahr2 if ($row0['ende'] == '') { # keine weitere Ermäßigung/Freistellung Forschung- und Enwicklungsaufgaben (§ 2 Abs. 8, 9 LVVO) im aktuellen Jahr, dann 31.8 Jahr2 $ende = $jahr2 . '-08-31'; } elseif ($row0['ende'] >= $jahr2 . '-08-31') { # Wenn das nächste Datum höher als der 31.8 im Folgejahr ist, dann 31.8 Jahr2 als Enddatum setzen $ende = $jahr2 . '-08-31'; } else { # Ende ist der Tag vor der nächsten beginnenden Ermäßigung/Freistellung Forschung- und Enwicklungsaufgaben (§ 2 Abs. 8, 9 LVVO) $ende = $row0['ende']; } #echo $ende."
"; $end = date_create($ende, new DateTimeZone('GMT')); $anz_mon = 0; foreach (new DatePeriod($start, new DateInterval('P1M'), $end) as $cur) { $akt_mon = $cur->format('Y-m'); $sperre = erm_sperre($imtuid, $akt_mon); if (!$sperre) { $anz_mon++; } } $lvs = $row0['sws'] * $start_sw / 12 * $anz_mon; $result = $db->query("UPDATE dep_deputat_ermaessigung SET lvs = '$lvs' ,monate = $anz_mon WHERE imtuid = $imtuid AND art like '%§ 2 Abs. 8, 9 LVVO%' AND jahr=$jahr AND deid = $row0[deid] "); } # Ende Ermäßigung/Freistellung Forschungs- und Entwicklungsaufgaben (§ 2 Abs. 8, 9 LVVO) ######################################## # Ermäßigung Forschungssemester/Praxissemester/Abordnungen ######################################## if (($row0['beginn'] != '' OR $row0['beginn'] != '0000-00-00') and strpos($row0['art'], "Forschungssemester/Praxissemester/Abordnungen") !== false) { $lvs = ""; $start = new DateTime($row0['beginn']); # Endtag definiert? # Das meiste wird bei der Erfassung vom Prof. abgefangen. Es wird bis max 31.8 erfasst. Wenn leer, dann auch 31.8. Keine mehrjährigen Erfassungen möglich. # Somit ist eigentlich immer ein Ende definiert. # --> Beginn der nächsten Teilzeit wenn kleiner 31.8 im Jahr2 sonst 31.8 vom Jahr2. Wenn nichts definiert, dann 31.8 Jahr2 if ($row0['ende'] == '') { # keine weitere Ermäßigung Forschungssemester/Praxissemester/Abordnungen im aktuellen Jahr, dann 31.8 Jahr2 $ende = $jahr2 . '-08-31'; } elseif ($row0['ende'] >= $jahr2 . '-08-31') { # Wenn das nächste Datum höher als der 31.8 im Folgejahr ist, dann 31.8 Jahr2 als Enddatum setzen $ende = $jahr2 . '-08-31'; } else { # Ende ist der Tag vor der nächsten beginnenden ErmäßigungForschungssemester/Praxissemester/Abordnungen $ende = $row0['ende']; } #echo $ende."
"; $end = date_create($ende, new DateTimeZone('GMT')); $anz_mon = 0; foreach (new DatePeriod($start, new DateInterval('P1M'), $end) as $cur) { $anz_mon++; } $bish_lvs = $db->query("SELECT sum(lvs) bish_lvs FROM dep_deputat_ermaessigung WHERE jahr = '$jahr' AND imtuid = $imtuid AND sort_order < $row0[sort_order] "); $row_bish_lvs = $bish_lvs->fetch_array(); $cur_lvs = $start_lvs - $row_bish_lvs['bish_lvs']; $lvs = $cur_lvs / 12 * $anz_mon; $result = $db->query("UPDATE dep_deputat_ermaessigung SET lvs = '$lvs' ,monate = $anz_mon WHERE imtuid = $imtuid AND art like '%Forschungssemester/Praxissemester/Abordnungen%' AND jahr=$jahr AND deid = $row0[deid] "); } # Ende Ermäßigung Forschungssemester/Praxissemester/Abordnungen ######################################## # Ermäßigung Ruhestand ######################################## if (($row0['beginn'] != '' OR $row0['beginn'] != '0000-00-00') and strpos($row0['art'], "Ruhestand") !== false) { $lvs = ""; # Erfasst wird der letzte Arbeitstag. Programm setzt das immer auf den Monatsletzten. Daher muss für den Beginn 1 Tag addiert werden. Erfasst wurde 28.2 Beginn ist dann 01.03 $newDate = new DateTime($row0['beginn']); $newDate->add(new DateInterval('P1D')); // P1D means a period of 1 day $newDateForm= $newDate->format('Y-m-d'); $start = new DateTime($newDateForm); # Endtag definiert? # Das meiste wird bei der Erfassung vom Prof. abgefangen. Es wird bis max 31.8 erfasst. Wenn leer, dann auch 31.8. Keine mehrjährigen Erfassungen möglich. # Somit ist eigentlich immer ein Ende definiert. # --> Beginn der nächsten Teilzeit wenn kleiner 31.8 im Jahr2 sonst 31.8 vom Jahr2. Wenn nichts definiert, dann 31.8 Jahr2 if ($row0['ende'] == '' or $row0['ende'] == '0000-00-00') { # keine weitere Ermäßigung Forschungssemester/Praxissemester/Abordnungen im aktuellen Jahr, dann 31.8 Jahr2 $ende = $jahr2 . '-08-31'; } elseif ($row0['ende'] >= $jahr2 . '-08-31') { # Wenn das nächste Datum höher als der 31.8 im Folgejahr ist, dann 31.8 Jahr2 als Enddatum setzen $ende = $jahr2 . '-08-31'; } else { # Ende ist der Tag vor der nächsten beginnenden ErmäßigungForschungssemester/Praxissemester/Abordnungen $ende = $row0['ende']; } #echo $ende."
"; $end = date_create($ende, new DateTimeZone('GMT')); $anz_mon = 0; foreach (new DatePeriod($start, new DateInterval('P1M'), $end) as $cur) { $anz_mon++; } $bish_lvs = $db->query("SELECT sum(lvs) bish_lvs FROM dep_deputat_ermaessigung WHERE jahr = '$jahr' AND imtuid = $imtuid AND sort_order < $row0[sort_order] "); $row_bish_lvs = $bish_lvs->fetch_array(); $cur_lvs = $start_lvs - $row_bish_lvs['bish_lvs']; $lvs = $cur_lvs / 12 * $anz_mon; $result = $db->query("UPDATE dep_deputat_ermaessigung SET lvs = '$lvs' ,monate = $anz_mon WHERE imtuid = $imtuid AND art like '%Ruhestand%' AND jahr=$jahr AND deid = $row0[deid] "); } # Ende Ermäßigung Ruhestand } # Ende äußere While Schleife $bish_lvs = $db->query("SELECT sum(lvs) bish_lvs FROM dep_deputat_ermaessigung WHERE jahr = '$jahr' AND imtuid = $imtuid "); $row_bish_lvs = $bish_lvs->fetch_array(); $cur_lvs = $start_lvs - $row_bish_lvs['bish_lvs']; #echo $cur_lvs."
"; } #echo jahresabschluss_erm(1,2019); ?>