$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 "
Bezeichnung |
Wert |
Ist |
$ist |
Soll |
$soll |
";
}
$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 "
Überdeputatsverfall nach Jahren |
$anz_vj |
";
}
# Punkt 3: Ergebnis laufendes Jahr
$deperg_aktjahr = $ist - $soll;
if ($debug == 1) {
echo "
Über-Unterdeputat (Zeile 9) |
$deperg_aktjahr |
";
}
# 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 "
Überdeputat abbauen $akt_vorjahr |
$genommene_std |
";
}
}
if ($debug == 1) {
echo "
Genommene Gesamtstd (Zeile 11) |
$genommene_stdges |
";
}
# 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 "
Differenz (Zeile 18) |
$differenz |
";
}
#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 "
Vorjahreswert (Zeile 19) |
$vorjahresendwert |
";
}
#6) Über- Unterdeputat gesamt (Zeile 20)
$deputat_gesamt = $differenz + $vorjahresendwert;
if ($debug == 1) {
echo "
Deputat gesamt (Zeile 20) |
$deputat_gesamt |
";
}
# 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 "
Verfall (Zeile 22) |
$verfall |
";
}
# 8) Jahresabschluss gesamtstand: Zeile 20-22
$jahresabschluss_gesamt = $deputat_gesamt - $verfall;
if ($debug == 1) {
echo "
Rest nach Verfall (Zeile 24) |
$jahresabschluss_gesamt |
";
}
# 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 "
Endwert1 $vorjahr_rest (Zeile 25-28) |
$endwert |
";
}
} 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 "
Endwert2 $vorjahr_rest (Zeile 25-28) |
$endwert |
";
}
}
}
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 "
Übertrag $jahrgang (Zeile 29) |
$jahresendwert_uebertrag |
";
}
$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');
*/
?>