0) { $fehler[] = "Fehler bei Datenbankoperation"; $_SESSION['errors'] = $fehler; $_SESSION['formdata'] = $_POST; header("LOCATION: /../umsatz_neu.php"); exit; } header("Location: /../$return"); exit; } function insertKontobewegung($para_pdo, $para_konto_id, $para_gegenkonto_id, $para_betrag, $para_beschreibung, $para_datum_ausgegeben, $para_bei_restguthaben_ignorieren) { $stmt = $para_pdo->prepare("INSERT INTO kontobewegung (konto_id, gegenkonto_id, betrag, beschreibung, datum_ausgegeben, bei_restguthaben_ignorieren) VALUES(:konto_id, :gegenkonto_id, :betrag, :beschreibung, :datum_ausgegeben, :bei_restguthaben_ignorieren);"); $gegenkontoBereinigt = $para_gegenkonto_id ?: null; $stmt->execute(['konto_id' => $para_konto_id, 'gegenkonto_id' => $gegenkontoBereinigt, 'betrag' => $para_betrag, 'beschreibung' => $para_beschreibung, 'datum_ausgegeben' => $para_datum_ausgegeben, 'bei_restguthaben_ignorieren' => $para_bei_restguthaben_ignorieren]); /*updateHistRestguthaben($para_pdo, $para_datum_ausgegeben, $para_betrag, false);*/ return 0; } function updateKontobewegung($para_pdo, $para_kontobewegung_id, $para_konto_id, $para_betrag, $para_beschreibung, $para_datum_ausgegeben, $para_datum_abgebucht, $para_bei_restguthaben_ignorieren) { $para_datum_abgebucht = $para_datum_abgebucht ?: null; try { $para_pdo->beginTransaction(); $stmt = $para_pdo->prepare("SELECT kb.datum_abgebucht, kb.betrag, k.kontostand, kb.konto_id FROM kontobewegung kb JOIN konto k ON k.id = kb.konto_id WHERE kb.id = :kontobewegung_id;"); $stmt->execute(['kontobewegung_id' => $para_kontobewegung_id]); $row = $stmt->fetch(PDO::FETCH_ASSOC); $kontobewegung = $row ?: null; $konto_id_vorher = $kontobewegung['konto_id']; $datum_abgebucht_vorher = $kontobewegung['datum_abgebucht']; $kontostand_vorher_konto_vorher = $kontobewegung['kontostand']; $betrag_vorher = $kontobewegung['betrag']; $stmt = $para_pdo->prepare("SELECT kontostand FROM konto WHERE id = :konto_id;"); $stmt->execute(['konto_id' => $para_konto_id]); $row = $stmt->fetch(PDO::FETCH_ASSOC); $kontostand_vorher_konto_nachher = $row ? $row['kontostand'] : 0; $kontostand_nachher_konto_vorher = $kontostand_vorher_konto_vorher; if($konto_id_vorher == $para_konto_id) { if(isset($datum_abgebucht_vorher) && isset($para_datum_abgebucht)) { $kontostand_nachher_konto_vorher = $kontostand_vorher_konto_vorher - $betrag_vorher + $para_betrag; } elseif(isset($datum_abgebucht_vorher) && !isset($para_datum_abgebucht)) { $kontostand_nachher_konto_vorher = $kontostand_vorher_konto_vorher - $betrag_vorher; } elseif(!isset($datum_abgebucht_vorher) && isset($para_datum_abgebucht)) { $kontostand_nachher_konto_vorher = $kontostand_vorher_konto_vorher + $para_betrag; } elseif(!isset($datum_abgebucht_vorher) && !isset($para_datum_abgebucht)) { $kontostand_nachher_konto_vorher = $kontostand_vorher_konto_vorher; } } else { if(isset($datum_abgebucht_vorher)) { $kontostand_nachher_konto_vorher = $kontostand_vorher_konto_vorher - $betrag_vorher; $kontostand_nachher_konto_nachher = $kontostand_vorher_konto_nachher + $para_betrag; $stmt = $para_pdo->prepare("UPDATE konto SET kontostand = :kontostand_neu WHERE id = :konto_id;"); $stmt->execute(['kontostand_neu' => $kontostand_nachher_konto_nachher, 'konto_id' => $para_konto_id]); } } $stmt = $para_pdo->prepare("UPDATE kontobewegung SET konto_id = :konto_id, betrag = :betrag, beschreibung = :beschreibung, datum_ausgegeben = :datum_ausgegeben, datum_abgebucht = :datum_abgebucht, bei_restguthaben_ignorieren = :bei_restguthaben_ignorieren WHERE id = :kontobewegung_id;"); $stmt->execute(['konto_id' => $para_konto_id, 'betrag' => $para_betrag, 'beschreibung' => $para_beschreibung, 'datum_ausgegeben' => $para_datum_ausgegeben, 'datum_abgebucht' => $para_datum_abgebucht, 'kontobewegung_id' => $para_kontobewegung_id, 'bei_restguthaben_ignorieren' => $para_bei_restguthaben_ignorieren]); $stmt = $para_pdo->prepare("UPDATE konto SET kontostand = :kontostand_neu WHERE id = :konto_id;"); $stmt->execute(['kontostand_neu' => $kontostand_nachher_konto_vorher, 'konto_id' => $konto_id_vorher]); //TODO /*updateHistRestguthaben($para_pdo, $para_datum_ausgegeben, $para_betrag, false);*/ $para_pdo->commit(); return 0; } catch (Exception $e) { $para_pdo->rollBack(); echo "Fehler: " . $e->getMessage(); return 1; } } function deleteKontobewegung($para_pdo, $para_kontobewegung_id) { $stmt = $para_pdo->prepare("SELECT datum_abgebucht, betrag, konto_id FROM kontobewegung WHERE id = :kontobewegung_id;"); $stmt->execute(['kontobewegung_id' => $para_kontobewegung_id]); $row = $stmt->fetch(PDO::FETCH_ASSOC); $kontobewegung = $row ?: null; try { $datum_abgebucht = $kontobewegung['datum_abgebucht']; $betrag = $kontobewegung['betrag']; $konto_id = $kontobewegung['konto_id']; $para_pdo->beginTransaction(); if(isset($datum_abgebucht)) { $stmt = $para_pdo->prepare("UPDATE konto SET kontostand = kontostand - :betrag WHERE id = :konto_id;"); $stmt->execute(['konto_id' => $konto_id, 'betrag' => $betrag]); } $stmt = $para_pdo->prepare("DELETE FROM kontobewegung WHERE id = :kontobewegung_id;"); $stmt->execute(['kontobewegung_id' => $para_kontobewegung_id]); //TODO /*updateHistRestguthaben($para_pdo, $para_datum_ausgegeben, $para_betrag, false);*/ $para_pdo->commit(); return 0; } catch (Exception $e) { $para_pdo->rollBack(); echo "Fehler: " . $e->getMessage(); return 1; } } function updateHistRestguthaben($para_pdo, $para_datum_ausgegeben, $para_betrag, $para_delete) { try { $para_pdo->beginTransaction(); $stmt = $para_pdo->prepare("SELECT EXTRACT(YEAR FROM CAST(:datum_ausgegeben AS DATE)) AS jahr, id FROM monat WHERE EXTRACT(MONTH FROM CAST(:datum_ausgegeben AS DATE)) = CAST(wert AS INT);"); $stmt->execute(['datum_ausgegeben' => $para_datum_ausgegeben]); $row = $stmt->fetch(PDO::FETCH_ASSOC); $monat_id = $row ? $row['id'] : -1; $jahr = $row ? $row['jahr'] : 2000; $stmt = $para_pdo->prepare("SELECT betrag FROM hist_restguthaben WHERE monat_id = :monat_id AND jahr = :jahr;"); $stmt->execute(['monat_id' => $monat_id, 'jahr' => $jahr]); $row = $stmt->fetch(PDO::FETCH_ASSOC); $hist_restguthaben = $row ?: null; if(isset($hist_restguthaben)) { $betrag = $hist_restguthaben['betrag'] + $para_betrag; $stmt = $para_pdo->prepare("UPDATE hist_restguthaben SET betrag = :betrag WHERE monat_id = :monat_id AND jahr = :jahr;"); $stmt->execute(['betrag' => $betrag, 'monat_id' => $monat_id, 'jahr' => $jahr]); } elseif(!$para_delete) { $stmt = $para_pdo->prepare("INSERT INTO hist_restguthaben (monat_id, jahr, betrag) VALUES (:monat_id, :jahr, :betrag);"); $stmt->execute(['monat_id' => $monat_id, 'jahr' => $jahr, 'betrag' => $para_betrag]); } $para_pdo->commit(); return 0; } catch (Exception $e) { $para_pdo->rollBack(); echo "Fehler: " . $e->getMessage(); return 1; } } ?>