Haushaltsbuch/forms/fixkosten.php
2025-11-18 20:37:13 +01:00

248 lines
9.8 KiB
PHP

<?php
require_once __DIR__ . '/../includes/db_connect.php';
session_start();
$kostenfix_id = $_POST['kostenfix_id'] ?? -1;
$fixkosten_submit = $_POST['fixkosten_submit'] ?? 'c';
$zahlungsmonate_id = $_POST['zahlungsmonate_id'] ?? '';
$zahlungstag_id = $_POST['zahlungstag_id'] ?? '';
$konto_id = $_POST['konto_id'] ?? '';
$gegenkonto_id = $_POST['gegenkonto_id'] ?? '';
$beschreibung = $_POST['beschreibung'] ?? '';
$betrag = $_POST['betrag'] ?? '';
$monat_id = $_POST['monat_id'] ?? '';
$jahr = $_POST['jahr'] ?? '';
$monat_wert = $_POST['monat_wert'] ?? '';
$returnOfFunction = 0;
switch($fixkosten_submit) {
case 'hinzufügen':
$returnOfFunction += insertFixkosten($pdo,
$zahlungsmonate_id,
$zahlungstag_id,
$konto_id,
$beschreibung,
$betrag);
if(!empty($gegenkonto_id)) {
$returnOfFunction += insertFixkosten($pdo,
$zahlungsmonate_id,
$zahlungstag_id,
$gegenkonto_id,
$beschreibung,
$betrag * -1);
}
break;
case 'speichern':
$returnOfFunction += UpdateFixkosten($pdo,
$kostenfix_id,
$zahlungsmonate_id,
$zahlungstag_id,
$konto_id,
$beschreibung,
$betrag);
break;
case 'löschen':
$returnOfFunction += removeFixkosten($pdo,
$kostenfix_id);
break;
case 'zuKontobewegung':
$returnOfFunction += fixkostenZuKontobewegung($pdo,
$monat_id,
$jahr);
$returnOfFunction += leereTempTabelle($pdo);
break;
case 'aktualisieren':
$returnOfFunction += aktualisiereTempTabelle($pdo,
$monat_wert);
$_SESSION['formdata'] = $_POST;
echo json_encode(['success' => true, 'monat_wert' => $monat_wert]);
exit;
}
if($returnOfFunction > 0) {
$fehler[] = "Fehler bei Datenbankoperation";
$_SESSION['errors'] = $fehler;
$_SESSION['formdata'] = $_POST;
}
header("Location: /../fixkosten.php");
//header("Location: /../fix_zuKontobewegung.php");
exit;
function insertFixkosten($para_pdo,
$para_zahlungsmonate_id,
$para_zahlungstag_id,
$para_konto_id,
$para_beschreibung,
$para_betrag) {
try {
$para_pdo->beginTransaction();
$stmt = $para_pdo->prepare("INSERT INTO kostenfix (zahlungsmonate_id, zahlungstag_id, konto_id, beschreibung, betrag)
VALUES (:zahlungsmonate_id, :zahlungstag_id, :konto_id, :beschreibung, :betrag);");
$stmt->execute(['zahlungsmonate_id' => $para_zahlungsmonate_id,
'zahlungstag_id' => $para_zahlungstag_id,
'konto_id' => $para_konto_id,
'beschreibung' => $para_beschreibung,
'betrag' => $para_betrag]);
$para_pdo->commit();
return 0;
} catch(Exception $e) {
$para_pdo->rollBack();
echo "Fehler: " . $e->getMessage();
return 1;
}
}
function updateFixkosten($para_pdo,
$para_kostenfix_id,
$para_zahlungsmonate_id,
$para_zahlungstag_id,
$para_konto_id,
$para_beschreibung,
$para_betrag) {
try {
$para_pdo->beginTransaction();
$stmt = $para_pdo->prepare("UPDATE kostenfix
SET zahlungstag_id = :zahlungstag_id,
zahlungsmonate_id = :zahlungsmonate_id,
beschreibung = :beschreibung,
konto_id = :konto_id,
betrag = :betrag
WHERE id = :kostenfix_id;");
$stmt->execute(['zahlungstag_id' => $para_zahlungstag_id,
'zahlungsmonate_id' => $para_zahlungsmonate_id,
'beschreibung' => $para_beschreibung,
'konto_id' => $para_konto_id,
'betrag' => $para_betrag,
'kostenfix_id' => $para_kostenfix_id]);
$para_pdo->commit();
return 0;
} catch(Exception $e) {
$para_pdo->rollBack();
echo "Fehler: " . $e->getMessage();
return 1;
}
}
function removeFixkosten($para_pdo,
$para_kostenfix_id, ) {
try {
$para_pdo->beginTransaction();
$stmt = $para_pdo->prepare("UPDATE kontobewegung
SET kostenfix_id = NULL
WHERE kostenfix_id = :kostenfix_id;");
$stmt->execute(['kostenfix_id' => $para_kostenfix_id]);
$stmt = $para_pdo->prepare("DELETE FROM kostenfix
WHERE id = :kostenfix_id");
$stmt->execute(['kostenfix_id' => $para_kostenfix_id]);
$para_pdo->commit();
return 0;
} catch(Exception $e) {
$para_pdo->rollBack();
echo "Fehler: " . $e->getMessage();
return 1;
}
}
function fixkostenZuKontobewegung($para_pdo,
$para_monat_id,
$para_jahr) {
try {
$para_pdo->beginTransaction();
$stmt = $para_pdo->prepare("SELECT wert
FROM monat
WHERE id = :monat_id;");
$stmt->execute([':monat_id' => $para_monat_id]);
$monat_wert = $stmt->fetchAll(PDO::FETCH_ASSOC);
$stmt = $para_pdo->prepare("INSERT INTO kontobewegung (konto_id, betrag, beschreibung, datum_ausgegeben, kostenfix_id, datum_fixkosten_uebernommen)
SELECT kf.konto_id,
kf.betrag,
kf.beschreibung,
TO_DATE(:jahr || '-' || :monat_wert || '-' || zt.name, 'YYYY-MM-DD'),
kf.id,
CURRENT_DATE
FROM kostenfix kf
JOIN zahlungstag zt ON zt.id = kf.zahlungstag_id
JOIN zahlungsmonate zm ON zm.id = kf.zahlungsmonate_id
WHERE zm.name LIKE '%' || CAST(:monat_wert AS INT) || '%'
AND NOT EXISTS (SELECT *
FROM kontobewegung kb_inner
WHERE kb_inner.kostenfix_id = kf.id
AND EXTRACT(MONTH FROM kb_inner.datum_ausgegeben) = CAST(:monat_wert AS INT)
AND EXTRACT(YEAR FROM kb_inner.datum_ausgegeben) = CAST(:jahr AS INT));");
$stmt->execute(['monat_wert' => $monat_wert[0]['wert'],
'jahr' => $para_jahr]);
$para_pdo->commit();
return 0;
} catch(Exception $e) {
$para_pdo->rollBack();
echo "Fehler: " . $e->getMessage();
return 1;
}
}
function aktualisiereTempTabelle($para_pdo,
$para_monat_wert) {
try {
$para_pdo->beginTransaction();
$para_pdo->query("DELETE FROM temp_daten;");
$stmt = $para_pdo->prepare("INSERT INTO temp_daten(monat_wert)
VALUES(:monat_wert);");
$stmt->execute(['monat_wert' => $para_monat_wert]);
$para_pdo->commit();
return 0;
} catch(Exception $e) {
$para_pdo->rollBack();
echo "Fehler: " . $e->getMessage();
return 1;
}
}
function leereTempTabelle($para_pdo) {
try {
$para_pdo->beginTransaction();
$para_pdo->query("DELETE FROM temp_daten;");
$para_pdo->commit();
return 0;
} catch(Exception $e) {
$para_pdo->rollBack();
echo "Fehler: " . $e->getMessage();
return 1;
}
}
?>