293 lines
13 KiB
PHP
293 lines
13 KiB
PHP
<?php
|
|
require_once __DIR__ . '/../includes/db_connect.php';
|
|
|
|
session_start();
|
|
|
|
$return = $_POST['return'] ?? 'index.php';
|
|
$kontobewegung_id = $_POST['kontobewegung_id'] ?? -1;
|
|
$kontobewegung_submit = $_POST['kontobewegung_submit'] ?? 'c';
|
|
|
|
$datum_ausgegeben = $_POST['datum_ausgegeben'] ?? '';
|
|
$datum_abgebucht = $_POST['datum_abgebucht'] ?? '';
|
|
$konto_id = $_POST['konto_id'] ?? '';
|
|
$gegenkonto_id = $_POST['gegenkonto_id'] ?? '';
|
|
$beschreibung = $_POST['beschreibung'] ?? '';
|
|
$betrag = $_POST['betrag'] ?? '';
|
|
|
|
$fehler = [];
|
|
|
|
if($datum_ausgegeben === '') $fehler[] = "Kein Datum eingegeben";
|
|
if($konto_id === '') $fehler[] = "Kein Konto ausgewählt";
|
|
if($beschreibung === '') $fehler[] = "Keine Beschreibung eingegeben";
|
|
if($betrag === '') $fehler[] = "Kein Betrag eingegeben";
|
|
|
|
if($fehler) {
|
|
$_SESSION['errors'] = $fehler;
|
|
$_SESSION['formdata'] = $_POST;
|
|
header("LOCATION: /../kontobewegung_neu.php");
|
|
exit;
|
|
} else {
|
|
$returnOfFunction = 0;
|
|
|
|
switch($kontobewegung_submit) {
|
|
case 'hinzufügen':
|
|
$returnOfFunction += insertKontobewegung($pdo,
|
|
$konto_id,
|
|
$betrag,
|
|
$beschreibung,
|
|
$datum_ausgegeben);
|
|
if(!empty($gegenkonto_id)) {
|
|
$returnOfFunction += insertKontobewegung($pdo,
|
|
$gegenkonto_id,
|
|
$betrag * -1,
|
|
$beschreibung,
|
|
$datum_ausgegeben);
|
|
}
|
|
break;
|
|
case 'speichern':
|
|
$returnOfFunction += updateKontobewegung($pdo,
|
|
$kontobewegung_id,
|
|
$konto_id,
|
|
$betrag,
|
|
$beschreibung,
|
|
$datum_ausgegeben,
|
|
$datum_abgebucht);
|
|
break;
|
|
case 'löschen':
|
|
$returnOfFunction += deleteKontobewegung($pdo,
|
|
$kontobewegung_id);
|
|
break;
|
|
}
|
|
|
|
if($returnOfFunction > 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;
|
|
}
|
|
}
|
|
?>
|