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_betrag, $para_beschreibung, $para_datum_ausgegeben) { $stmt = $para_pdo->prepare("INSERT INTO kontobewegung (konto_id, betrag, beschreibung, datum_ausgegeben) VALUES(:konto_id, :betrag, :beschreibung, :datum_ausgegeben);"); $stmt->execute(['konto_id' => $para_konto_id, 'betrag' => $para_betrag, 'beschreibung' => $para_beschreibung, 'datum_ausgegeben' => $para_datum_ausgegeben]); /*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_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]); $kontobewegung = $stmt->fetchAll(PDO::FETCH_ASSOC); if(count($kontobewegung) > 1) throw new Exception('Mehr als eine Kontobewegung gefunden'); $konto_id_vorher = $kontobewegung[0]['konto_id']; $datum_abgebucht_vorher = $kontobewegung[0]['datum_abgebucht']; $kontostand_vorher_konto_vorher = $kontobewegung[0]['kontostand']; $betrag_vorher = $kontobewegung[0]['betrag']; $stmt = $para_pdo->prepare("SELECT kontostand FROM konto WHERE id = :konto_id;"); $stmt->execute(['konto_id' => $para_konto_id]); $konto_nachher = $stmt->fetchAll(PDO::FETCH_ASSOC); $kontostand_vorher_konto_nachher = $konto_nachher[0]['kontostand']; $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 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]); $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]); $kontobewegung = $stmt->fetchAll(PDO::FETCH_ASSOC); try { if(count($kontobewegung) > 1) throw new Exception("Multiple Kontobewegungen gefunden"); $datum_abgebucht = $kontobewegung[0]['datum_abgebucht']; $betrag = $kontobewegung[0]['betrag']; $konto_id = $kontobewegung[0]['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]); $monat = $stmt->fetchAll(PDO::FETCH_ASSOC)[0]; $monat_id = $monat['id']; $jahr = $monat['jahr']; $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]); $hist_restguthaben = $stmt->fetchAll(PDO::FETCH_ASSOC); if(isset($hist_restguthaben)) { $betrag = $hist_restguthaben[0]['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; } } ?>