$jahrgang/$jahrgang_next"; } # Funktion um das Array aufsteigend zu sortieren /* # In functions.php function sortArrayByFields($arr, $fields) { $sortFields = array(); $args = array(); foreach ($arr as $key => $row) { foreach ($fields as $field => $order) { $sortFields[$field][$key] = $row[$field]; } } foreach ($fields as $field => $order) { $args[] = $sortFields[$field]; if (is_array($order)) { foreach ($order as $pt) { $args[$pt]; } } else { $args[] = $order; } } $args[] =& $arr; call_user_func_array('array_multisort', $args); return $arr; } */ if ($debug == 1) { echo ""; } $db = dbconnect(); # Jahrgang bereinigen $sql0 = $db->query("DELETE FROM dep_jahresabschluss WHERE imtuid =$uid AND jahr=$jahrgang"); $sql0 = $db->query("DELETE FROM dep_jahresabschluss_restdeputate WHERE imtuid =$uid AND jahr=$jahrgang"); # Anzahl der zu berücksichtigenden Verfallsjahre $result_verfall = $db->query("SELECT abjahr, jahre FROM dep_kat_depverfall WHERE abjahr <= $jahrgang ORDER BY abjahr DESC limit 1"); $row_verfall = $result_verfall->fetch_array(); $anz_vj = $row_verfall['jahre']; if ($debug == 1) { echo " "; } # Punkt 3: Ergebnis laufendes Jahr $deperg_aktjahr = $ist - $soll; if ($debug == 1) { echo " "; } # Punkt 4: Bewertung des Ergebnisses if ($deperg_aktjahr < 0) { # 4JA: Ergebnis ist negativ # Die letzten 5 Jahre holen $result_vj1 = $db->query("SELECT deperg_aktjahr FROM dep_jahresabschluss WHERE jahr = $vorjahr1 AND imtuid=$uid"); $row_vj1 = $result_vj1->fetch_array(); $vorjahre[0]['vorjahr'] = $vorjahr1; $vorjahre[0]['startwert'] = 0; $vorjahre[0]['differenz'] = 0; $vorjahre[0]['differenzjahr'] = 0; $vorjahre[0]['endwert'] = $row_vj1[deperg_aktjahr]; for ($i = 0; $i < $anz_vj; $i++) { if ($i >= 1) { $vorjahr = $vorjahr1 - $i; $result_vj = $db->query("SELECT startwert, differenz, differenzjahr, endwert FROM dep_jahresabschluss_restdeputate WHERE jahr = $vorjahr1 AND imtuid=$uid AND vorjahr= $vorjahr"); $row_vj = $result_vj->fetch_array(); $vorjahre[$i]['vorjahr'] = $vorjahr; $vorjahre[$i]['startwert'] = $row_vj[startwert]; $vorjahre[$i]['differenz'] = $row_vj[differenz]; $vorjahre[$i]['differenzjahr'] = $row_vj[differenzjahr]; $vorjahre[$i]['endwert'] = $row_vj[endwert]; } } if(isset($vorjahre)){ $sorted_vj = sortArrayByFields($vorjahre, array( 'vorjahr' => SORT_ASC )); } #$vorjahre = ksort($vorjahre); #print_r($sorted_vj); # Vorjahre durchlaufen, wo man das Unterdeputat ausgleichen kann $unterdeputat = $deperg_aktjahr * -1; $genommene_stdges = 0; for ($k = 0; $k < count($sorted_vj); $k++) { $akt_vorjahr = $sorted_vj[$k][vorjahr]; $akt_endwert = $sorted_vj[$k][endwert]; if ($sorted_vj[$k][endwert] > 0) { ## Dann kann man ausgleichen, die Frage ist, ob es für das Unterdeputat ($deperg_aktjahr) ausreicht: if ($akt_endwert >= $unterdeputat) { # Endwert passt voll $rest = $akt_endwert - $unterdeputat; $genommene_std = $unterdeputat; $genommene_stdges = $genommene_stdges + $genommene_std; $unterdeputat = 0; $aktjahr[$k]['vorjahr'] = $akt_vorjahr; $aktjahr[$k]['startwert'] = $akt_endwert; $aktjahr[$k]['differenz'] = $genommene_std * -1; $aktjahr[$k]['differenzjahr'] = $jahrgang; $aktjahr[$k]['endwert'] = $rest; $test = 1; } else { # vorhandenes Überdeputat reicht nicht aus. Es bleibt ein Restunterdeputat $unterdeputat = $unterdeputat - $akt_endwert; $genommene_std = $akt_endwert; $genommene_stdges = $genommene_stdges + $genommene_std; $rest = 0; $test = 2; $aktjahr[$k]['vorjahr'] = $akt_vorjahr; $aktjahr[$k]['startwert'] = $akt_endwert; $aktjahr[$k]['differenz'] = $genommene_std * -1; $aktjahr[$k]['differenzjahr'] = $jahrgang; $aktjahr[$k]['endwert'] = $rest; } } else { # Nichts zu holen in diesem Jahr $aktjahr[$k]['vorjahr'] = $akt_vorjahr; $aktjahr[$k]['startwert'] = 0; $aktjahr[$k]['differenz'] = 0; $aktjahr[$k]['differenzjahr'] = 0; $aktjahr[$k]['endwert'] = 0; $genommene_std = 0; $genommene_stdges = $genommene_stdges + $genommene_std; } if ($debug == 1) { echo " "; } } if ($debug == 1) { echo " "; } # Zeile 18: Differenz if ($deperg_aktjahr > 0) { $differenz = 0 + $deperg_aktjahr; } else { $differenz = $genommene_stdges + $deperg_aktjahr; } if(isset($aktjahr)){ $sorted_aj = sortArrayByFields($aktjahr, array( 'vorjahr' => SORT_ASC )); } } else { # 4Nein: Ergebnis ist positiv, dann ist es der gleiche Wert wie Zeile 9 $differenz = $deperg_aktjahr; } if ($debug == 1) { echo " "; } #5) Über- Unterdeputat aus Vorjahr übernehmen $result_vj_ende = $db->query("SELECT dep_gesamt_nach_verfall FROM dep_jahresabschluss WHERE jahr = $vorjahr1 AND imtuid=$uid"); $row_vj_ende = $result_vj_ende->fetch_array(); $vorjahresendwert = $row_vj_ende[dep_gesamt_nach_verfall] - $genommene_stdges; if ($vorjahresendwert == '') { $vorjahresendwert = 0; } if ($debug == 1) { echo " "; } #6) Über- Unterdeputat gesamt (Zeile 20) $deputat_gesamt = $differenz + $vorjahresendwert; if ($debug == 1) { echo " "; } # 7) verfallene Stunden prüfen # Es verfallen Stunden, die Älter als 5 Jahre sind. Entweder sind diese im aktuellen Jahr genommen worden # Welches Jahr ist das betroffene Jahr $verfall_jahr = $jahrgang - $anz_vj; $key = strval(@array_search($verfall_jahr, array_column($sorted_aj, 'vorjahr'))); # Wenn eine arraykey gefunden wird, dann den endwert, sonst den Wert aus DB, da dieser Verfallswert dann im aktuellen Jahr nicht angefasst wurde if ($key != '') { # im aktuellen Jahr wurde etwas verwendet um ein Unterdeputat auszugleichen. Dann verfällt nur der Restwert $verfall = $sorted_aj[$key]['endwert']; } else { # Wert wurde nicht angefasst, dann ist der letzte Wert in der Datenbank maßgebend für den Verfall $result_verfall = $db->query("SELECT endwert FROM dep_jahresabschluss_restdeputate WHERE jahr = $vorjahr1 AND imtuid=$uid AND vorjahr= $verfall_jahr"); $row_verfall = $result_verfall->fetch_array(); $verfall = $row_verfall['endwert']; } if ($debug == 1) { echo " "; } # 8) Jahresabschluss gesamtstand: Zeile 20-22 $jahresabschluss_gesamt = $deputat_gesamt - $verfall; if ($debug == 1) { echo " "; } # 9) Restdeputate übernehmen: Zeile 25-29; Tabelle "dep_jahresabschluss_restdeputate" # Sind Überdeputate verbraucht worden, dann sind sie in array $sorted_aj, sonst verganene Werte nehmen # Vorjahre durchlaufen # 02.06.2022: -1 gelöscht. Ansicht ist sonst nicht 5 Jahre im Jahresabschluss # for ($i = 0; $i < $anz_vj - 1; $i++) { for ($i = 0; $i < $anz_vj; $i++) { $vorjahr_rest = $vorjahr1 - $i; $rest_nach_jahren[$i][jahr] = $vorjahr_rest; $key_rest = strval(@array_search($vorjahr_rest, array_column($sorted_aj, 'vorjahr'))); # Wenn eine arraykey gefunden wird, dann den endwert, sonst den Wert aus DB, da dieser Verfallswert dann im aktuellen Jahr nicht angefasst wurde if ($key_rest != '') { # Endwert aus array holen $startwert = $sorted_aj[$key_rest]['startwert']; $differenz1 = $sorted_aj[$key_rest]['differenz']; $differenzjahr1 = $sorted_aj[$key_rest]['differenzjahr']; $endwert = $sorted_aj[$key_rest]['endwert']; $rest_nach_jahren[$i][startwert] = $startwert; $rest_nach_jahren[$i][differenz] = $differenz1; $rest_nach_jahren[$i][differenzjahr] = $differenzjahr1; $rest_nach_jahren[$i][endwert] = $endwert; if ($debug == 1) { echo " "; } } else { # letzte Endwert auslesen if ($vorjahr1 == $vorjahr_rest) { $result_endwert = $db->query("SELECT deperg_aktjahr FROM dep_jahresabschluss WHERE jahr = $vorjahr1"); $row_endwert = $result_endwert->fetch_array(); $rest_nach_jahren[$i][startwert] = 0; $rest_nach_jahren[$i][differenz] = 0; $rest_nach_jahren[$i][differenzjahr] = 0; $endwert = $row_endwert['deperg_aktjahr']; if ($endwert <= 0) { $endwert = 0; $rest_nach_jahren[$i][endwert] = 0; } else { $rest_nach_jahren[$i][endwert] = $endwert; } } else { $result_endwert = $db->query("SELECT endwert FROM dep_jahresabschluss_restdeputate WHERE jahr = $vorjahr1 AND imtuid=$uid AND vorjahr= $vorjahr_rest"); $row_endwert = $result_endwert->fetch_array(); $rest_nach_jahren[$i][startwert] = 0; $rest_nach_jahren[$i][differenz] = 0; $rest_nach_jahren[$i][differenzjahr] = 0; $endwert = $row_endwert['endwert']; if ($endwert <= 0) { $endwert = 0; $rest_nach_jahren[$i][endwert] = 0; } else { $rest_nach_jahren[$i][endwert] = $endwert; } } if ($debug == 1) { echo ""; } } } if(isset($rest_nach_jahren)){ $sorted_rest_nach_jahren = sortArrayByFields($rest_nach_jahren, array( 'jahr' => SORT_ASC )); } for ($k = 0; $k < count($sorted_rest_nach_jahren); $k++) { $vorjahr = $sorted_rest_nach_jahren[$k][jahr]; $startwert = $sorted_rest_nach_jahren[$k][startwert]; $differenz2 = $sorted_rest_nach_jahren[$k][differenz]; $differenzjahr2 = $sorted_rest_nach_jahren[$k][differenzjahr]; $endwert = $sorted_rest_nach_jahren[$k][endwert]; $sql1 = $db->query("INSERT INTO dep_jahresabschluss_restdeputate ( imtuid , jahr , vorjahr , startwert , differenz , differenzjahr , endwert ) VALUES ( '$uid' , '$jahrgang' , '$vorjahr' , '$startwert' , '$differenz2' , '$differenzjahr2' , '$endwert' ) "); } # 10) Vorjaresendwert if ($vorjahresendwert < 0) { # Zeile 20 $jahresendwert_uebertrag = $deputat_gesamt; } else { # Zeile 18 $jahresendwert_uebertrag = $differenz; } if ($debug == 1) { echo " "; } $sql1 = $db->query("INSERT INTO dep_jahresabschluss ( imtuid , jahr , soll , ist , dep_gesamt , dep_verfall_jahr , dep_verfall , dep_gesamt_nach_verfall , deperg_aktjahr ) VALUES ( '$uid' , '$jahrgang' , '$soll' , '$ist' , '$deputat_gesamt' , '$verfall_jahr' , '$verfall' , '$jahresabschluss_gesamt' , '$jahresendwert_uebertrag' ) "); } #echo jahresabschlussberechnung(1, 2024, 594, 500, 1); #echo jahresabschlussberechnung(1, 2023, 594, 450, 1); #echo jahresabschlussberechnung(1, 2022, 594, 500, 1); #echo jahresabschlussberechnung(1, 2021, 594, 800, 1); #echo jahresabschlussberechnung(1, 2020, 594, 600, 1); #echo jahresabschlussberechnung(1, 2019, 594, 694, 1); #echo jahresabschlussberechnung(1, 2018, 594, 129.15, 1); #echo jahresabschlussberechnung(1, 2017, 594, 694, 1); #echo jahresabschlussberechnung(1, 2016, 594, 694, 1); #echo jahresabschlussberechnung(1, 2015, 594, 750, 1); #echo jahresabschlussberechnung(1, 2014, 594, 603.6, 1); #echo jahresabschlussberechnung(1, 2013, 594, 500, 1); #echo jahresabschlussberechnung(1, 2012, 594, 500, 1); /* TRUNCATE TABLE `dep_jahresabschluss`; TRUNCATE TABLE `dep_jahresabschluss_restdeputate`; DELETE FROM `dep_jahresabschluss` where jahr > 2011; DELETE FROM `dep_jahresabschluss_restdeputate` where jahr > 2011; # Dummy 2011 INSERT INTO `dep_jahresabschluss_restdeputate` (`drdid`, `jahr`, `imtuid`, `vorjahr`, `startwert`, `differenz`, `differenzjahr`, `endwert`) VALUES (2, 2011, 1, 2010, '0.00', '0.00', 0, '0.00'); INSERT INTO `dep_jahresabschluss` (`djaid`, `imtuid`, `jahr`, `soll`, `ist`, `dep_gesamt`, `dep_verfall`, `dep_gesamt_nach_verfall`, `deperg_aktjahr`) VALUES (1, 1, 2011, '0.00', '0.00', '0.00', '0.00', '0.00', '0.00'); INSERT INTO `dep_jahresabschluss` (`djaid`, `imtuid`, `jahr`, `soll`, `ist`, `dep_gesamt`, `dep_verfall`, `dep_gesamt_nach_verfall`, `deperg_aktjahr`) VALUES (1, 1, 2015, '0.00', '0.00', '72.80', '0.00', '72.80', '72.80'); INSERT INTO `dep_jahresabschluss_restdeputate` (`drdid`, `jahr`, `imtuid`, `vorjahr`, `startwert`, `differenz`, `differenzjahr`, `endwert`) VALUES (1, 2015, 1, 2011, '0.00', '0.00', 0, '0.00'), (2, 2015, 1, 201, '0.00', '0.00', 0, '0.00'); */ ?>
Bezeichnung Wert
Ist $ist
Soll $soll
Überdeputatsverfall nach Jahren $anz_vj
Über-Unterdeputat (Zeile 9) $deperg_aktjahr
Überdeputat abbauen $akt_vorjahr $genommene_std
Genommene Gesamtstd (Zeile 11) $genommene_stdges
Differenz (Zeile 18) $differenz
Vorjahreswert (Zeile 19) $vorjahresendwert
Deputat gesamt (Zeile 20) $deputat_gesamt
Verfall (Zeile 22) $verfall
Rest nach Verfall (Zeile 24) $jahresabschluss_gesamt
Endwert1 $vorjahr_rest (Zeile 25-28) $endwert
Endwert2 $vorjahr_rest (Zeile 25-28) $endwert
Übertrag $jahrgang (Zeile 29) $jahresendwert_uebertrag