496 lines
18 KiB
PHP
Executable File
496 lines
18 KiB
PHP
Executable File
<?php
|
|
/*
|
|
##################################################################################
|
|
## Vorgehensweise basierend auf "190605 Muster Excel mit Formeln.xlsx":
|
|
1) IST erfassen Zeile 7
|
|
2) SOLL erfassen Zeile 8
|
|
3) Über-Unterdeputat lfd Jahr berechnen Zeile 9: Zeile 7-8
|
|
4) Ist Ergebnis aus 3 negativ
|
|
JA: (Zeile 11-17) Schauen, ob in den letzten 5 Jahren ob ein Überdeputat vorhanden ist, welches verwendet werden kann. Es gilt: Das äteste ÜD muss zuerst verbraucht werden
|
|
Ggf: Vorhandene Stunden bis zum SOLL aufrechnen
|
|
(Nein: Ist Ergebnis 3 (Zeile 9) 0 oder Positiv muss nichts gemacht werden. Dieser Wert wird 1:1 in Zeile 18 übertragen Differenz)
|
|
4a) Differenz bilden (Rechenerleichterung): Differenz ist bei JA: 3 + Summe aus 4ja; Nein: Ergebnis aus 3 (Zeile 9)
|
|
|
|
5) Über- bzw. Unterdeputat aus dem Vorjahr übernehmen? (Zeile 19)
|
|
6) Summe 4a und 5 bilden (Zeile 20)
|
|
7) Gibt es noch Std, die verfallen, also die, die 5 Jahre alt sind (Zeile 22)
|
|
8) Jahresabschluss gesamtstand (Zeile 24): Übertrag ins nächste Jahr (Zeile 20-22)
|
|
9) Berechnung des Überdeputatverbrauchs mit Restwerten der Vorjahre (Zeile 25-29)
|
|
10) Übertrag des Rests des aktuellen Jahres
|
|
Wenn: 5 (Zeile 19) kleiner 0, dann Wert aus 6 (Zeile 20) sonst Wert aus 18
|
|
##################################################################################
|
|
*/
|
|
require_once("config.inc.php");
|
|
require_once("functions.php");
|
|
|
|
|
|
function jahresabschlussberechnung($uid, $jahrgang, $soll, $ist, $debug=0)
|
|
{
|
|
$vorjahr1 = $jahrgang - 1;
|
|
|
|
if ($debug == 1) {
|
|
$jahrgang_next = $jahrgang+1;
|
|
echo "<h1>$jahrgang/$jahrgang_next</h1>";
|
|
}
|
|
|
|
# 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 "<table border=1>
|
|
<tr>
|
|
<td>Bezeichnung</td>
|
|
<td>Wert</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Ist</td>
|
|
<td>$ist</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Soll</td>
|
|
<td>$soll</td>
|
|
</tr>";
|
|
}
|
|
$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 "
|
|
<tr>
|
|
<td>Überdeputatsverfall nach Jahren</td>
|
|
<td>$anz_vj</td>
|
|
</tr>";
|
|
}
|
|
|
|
# Punkt 3: Ergebnis laufendes Jahr
|
|
$deperg_aktjahr = $ist - $soll;
|
|
|
|
if ($debug == 1) {
|
|
echo "
|
|
<tr>
|
|
<td>Über-Unterdeputat (Zeile 9)</td>
|
|
<td>$deperg_aktjahr</td>
|
|
</tr>";
|
|
}
|
|
|
|
# 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 "
|
|
<tr>
|
|
<td>Überdeputat abbauen $akt_vorjahr</td>
|
|
<td>$genommene_std</td>
|
|
</tr>";
|
|
}
|
|
}
|
|
|
|
if ($debug == 1) {
|
|
echo "
|
|
<tr>
|
|
<td>Genommene Gesamtstd (Zeile 11)</td>
|
|
<td>$genommene_stdges</td>
|
|
</tr>";
|
|
}
|
|
# 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 "
|
|
<tr>
|
|
<td>Differenz (Zeile 18)</td>
|
|
<td>$differenz</td>
|
|
</tr>";
|
|
}
|
|
|
|
#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 "
|
|
<tr>
|
|
<td>Vorjahreswert (Zeile 19)</td>
|
|
<td>$vorjahresendwert</td>
|
|
</tr>";
|
|
}
|
|
#6) Über- Unterdeputat gesamt (Zeile 20)
|
|
$deputat_gesamt = $differenz + $vorjahresendwert;
|
|
|
|
if ($debug == 1) {
|
|
echo "
|
|
<tr>
|
|
<td>Deputat gesamt (Zeile 20)</td>
|
|
<td>$deputat_gesamt</td>
|
|
</tr>";
|
|
}
|
|
|
|
# 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 "
|
|
<tr>
|
|
<td>Verfall (Zeile 22)</td>
|
|
<td>$verfall</td>
|
|
</tr>";
|
|
}
|
|
# 8) Jahresabschluss gesamtstand: Zeile 20-22
|
|
$jahresabschluss_gesamt = $deputat_gesamt - $verfall;
|
|
|
|
if ($debug == 1) {
|
|
echo "
|
|
<tr>
|
|
<td>Rest nach Verfall (Zeile 24)</td>
|
|
<td>$jahresabschluss_gesamt</td>
|
|
</tr>";
|
|
}
|
|
|
|
# 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 "
|
|
<tr>
|
|
<td>Endwert1 $vorjahr_rest (Zeile 25-28)</td>
|
|
<td>$endwert</td>
|
|
</tr>";
|
|
}
|
|
} 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 "<tr>
|
|
<td>Endwert2 $vorjahr_rest (Zeile 25-28)</td>
|
|
<td>$endwert</td>
|
|
</tr>";
|
|
}
|
|
}
|
|
|
|
}
|
|
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 "
|
|
<tr>
|
|
<td>Übertrag $jahrgang (Zeile 29)</td>
|
|
<td>$jahresendwert_uebertrag</td>
|
|
</tr>";
|
|
}
|
|
|
|
|
|
$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');
|
|
|
|
*/
|
|
?>
|