From 6e0322c6363c760fcff37abe2d4798bbb4ca6353 Mon Sep 17 00:00:00 2001 From: p3t3rp1Lz Date: Tue, 16 Dec 2025 14:36:43 +0100 Subject: [PATCH] 20251216: Korrektur gegenkonto_id, erste Version diagramme --- diagramme.php | 241 +++++++++++++++++++++++++++++++++++----- forms/kontobewegung.php | 10 +- konto.php | 2 +- style.css | 8 ++ 4 files changed, 228 insertions(+), 33 deletions(-) diff --git a/diagramme.php b/diagramme.php index 9fd1738..43b5eb9 100644 --- a/diagramme.php +++ b/diagramme.php @@ -1,11 +1,151 @@ query("SELECT DISTINCT EXTRACT(YEAR FROM CAST(kb.datum_abgebucht AS DATE)) AS jahr, + m.name_kurz, + m.wert + FROM kontobewegung kb + JOIN monat m ON 1=1 + WHERE kb.datum_abgebucht IS NOT NULL + ORDER BY jahr, m.wert;"); +$zeitraeume = $stmt->fetchAll(PDO::FETCH_ASSOC); +$xAchse = []; +foreach($zeitraeume as $zeitraum) { + $xAchse[] = $zeitraum['name_kurz'] . ' ' . $zeitraum['jahr']; +} + +$konten = []; +$farben = ['gesamt Thomas' => '#007bffff', 'gesamt Caro' => '#fcd3daff', 'gesamt Emil' => '#91c89aff']; +$gesamt = []; +$gesamtThomas = []; +$gesamtCaro = []; +$gesamtEmil = []; + +$relevantFuerGesamtThomas = false; +$relevantFuerGesamtCaro = false; +$relevantFuerGesamtEmil = false; + +$kontenRelevantFuerDiagramm = [1, 2, 3, 4, 5, 6, 9, 10]; + +foreach($kontenRelevantFuerDiagramm as $konto) { + switch($konto) { + case 1: + $relevantFuerGesamtThomas = true; + $relevantFuerGesamtCaro = true; + $relevantFuerGesamtEmil = false; + break; + case 2: + $relevantFuerGesamtThomas = true; + $relevantFuerGesamtCaro = true; + $relevantFuerGesamtEmil = false; + break; + case 3: + $relevantFuerGesamtThomas = true; + $relevantFuerGesamtCaro = true; + $relevantFuerGesamtEmil = false; + break; + case 4: + $relevantFuerGesamtThomas = true; + $relevantFuerGesamtCaro = true; + $relevantFuerGesamtEmil = false; + break; + case 5: + $relevantFuerGesamtThomas = false; + $relevantFuerGesamtCaro = false; + $relevantFuerGesamtEmil = true; + break; + case 6: + $relevantFuerGesamtThomas = false; + $relevantFuerGesamtCaro = false; + $relevantFuerGesamtEmil = true; + break; + case 9: + $relevantFuerGesamtThomas = false; + $relevantFuerGesamtCaro = true; + $relevantFuerGesamtEmil = false; + break; + case 10: + $relevantFuerGesamtThomas = true; + $relevantFuerGesamtCaro = false; + $relevantFuerGesamtEmil = false; + break; + } + + $stmt = $pdo->query("SELECT SUM(kb.betrag) AS monatsbetrag, + m.name_kurz || ' ' || EXTRACT(YEAR FROM CAST(kb.datum_abgebucht AS DATE)) AS jahr, + k.bezeichnung, + COALESCE(ad.startbetrag, 0) AS startbetrag, + m.wert, + k.darstellungsfarbe + FROM kontobewegung kb + JOIN konto k ON k.id = kb.konto_id + JOIN monat m ON m.wert = CASE WHEN EXTRACT(MONTH FROM CAST(kb.datum_abgebucht AS DATE)) < 10 THEN '0' || EXTRACT(MONTH FROM CAST(kb.datum_abgebucht AS DATE)) + WHEN EXTRACT(MONTH FROM CAST(kb.datum_abgebucht AS DATE)) >= 10 THEN '' || EXTRACT(MONTH FROM CAST(kb.datum_abgebucht AS DATE)) + END + LEFT OUTER JOIN ausgangsdaten ad ON ad.konto_id = k.id + WHERE kb.konto_id = $konto + AND kb.datum_abgebucht IS NOT NULL + GROUP BY EXTRACT(YEAR FROM CAST(kb.datum_abgebucht AS DATE)), + m.wert, + m.name_kurz, + k.bezeichnung, + startbetrag, + k.darstellungsfarbe + ORDER BY k.bezeichnung, + EXTRACT(YEAR FROM CAST(kb.datum_abgebucht AS DATE)), + m.wert;"); + $rows = $stmt->fetchAll(PDO::FETCH_ASSOC); + + $kontoBezeichnung = $rows[0]['bezeichnung']; + $vormonatsBetrag = $rows[0]['startbetrag']; + $farben[$kontoBezeichnung] = $rows[0]['darstellungsfarbe']; + + $konten[$kontoBezeichnung] = []; + + foreach($xAchse as $x) { + if($relevantFuerGesamtThomas) { + if(!isset($gesamtThomas[$x])) $gesamtThomas[$x] = $vormonatsBetrag; + else $gesamtThomas[$x] += $vormonatsBetrag; + } + if($relevantFuerGesamtCaro) { + if(!isset($gesamtCaro[$x])) $gesamtCaro[$x] = $vormonatsBetrag; + else $gesamtCaro[$x] += $vormonatsBetrag; + } + if($relevantFuerGesamtEmil) { + if(!isset($gesamtEmil[$x])) $gesamtEmil[$x] = $vormonatsBetrag; + else $gesamtEmil[$x] += $vormonatsBetrag; + } + $enthalten = false; + + foreach($rows as $row) { + if($x == $row['jahr']) { + $vormonatsBetrag += $row['monatsbetrag']; + $konten[$kontoBezeichnung][] = $vormonatsBetrag; + $enthalten = true; + } + } + + if(!$enthalten) $konten[$kontoBezeichnung][] = $vormonatsBetrag; + } +} + +foreach($gesamtThomas as $g => $f) { + $gesamt['gesamt Thomas'][] = $f; +} +foreach($gesamtCaro as $g => $f) { + $gesamt['gesamt Caro'][] = $f; +} +foreach($gesamtEmil as $g => $f) { + $gesamt['gesamt Emil'][] = $f; +} + +$monateJson = json_encode($xAchse); +$kontenJson = json_encode($konten); +$gesamtJson = json_encode($gesamt); +$farbenJson = json_encode($farben); ?> @@ -13,7 +153,7 @@ $reiheB = [5, 12, 18, 25]; - + @@ -27,33 +167,78 @@ $reiheB = [5, 12, 18, 25]; Home -
+
+
+
+
- + for (const kontoId in konten) { + tracesKonten.push({ + x: monate, + y: konten[kontoId], + type: 'scatter', + mode: 'lines+markers', + name: kontoId, + hovertemplate: "%{y:,.2f} €", + + line: { + color: farben[kontoId], + width: 2 + } + }); + } + + Plotly.newPlot('chartKonten', tracesKonten, layout, modeBar); + + + for (const gesamtId in gesamt) { + tracesGesamt.push({ + x: monate, + y: gesamt[gesamtId], + type: 'scatter', + mode: 'lines+markers', + name: gesamtId, + hovertemplate: "%{y:,.2f} €", + + line: { + color: farben[gesamtId], + width: 2 + } + }); + } + + Plotly.newPlot('chartGesamt', tracesGesamt, layout, modeBar); + +

Testsystem

' : '' ?> \ No newline at end of file diff --git a/forms/kontobewegung.php b/forms/kontobewegung.php index 5ce5324..36a83a3 100644 --- a/forms/kontobewegung.php +++ b/forms/kontobewegung.php @@ -34,6 +34,7 @@ case 'hinzufügen': $returnOfFunction += insertKontobewegung($pdo, $konto_id, + $gegenkonto_id, $betrag, $beschreibung, $datum_ausgegeben, @@ -41,6 +42,7 @@ if(!empty($gegenkonto_id)) { $returnOfFunction += insertKontobewegung($pdo, $gegenkonto_id, + $konto_id, $betrag * -1, $beschreibung, $datum_ausgegeben, @@ -77,16 +79,16 @@ function insertKontobewegung($para_pdo, $para_konto_id, + $para_gegenkonto_id, $para_betrag, $para_beschreibung, $para_datum_ausgegeben, $para_bei_restguthaben_ignorieren) { - //$ignrorieren - - $stmt = $para_pdo->prepare("INSERT INTO kontobewegung (konto_id, betrag, beschreibung, datum_ausgegeben, bei_restguthaben_ignorieren) - VALUES(:konto_id, :betrag, :beschreibung, :datum_ausgegeben, :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);"); $stmt->execute(['konto_id' => $para_konto_id, + 'gegenkonto_id' => $para_gegenkonto_id, 'betrag' => $para_betrag, 'beschreibung' => $para_beschreibung, 'datum_ausgegeben' => $para_datum_ausgegeben, diff --git a/konto.php b/konto.php index d8bfcad..eebc31a 100644 --- a/konto.php +++ b/konto.php @@ -11,7 +11,7 @@ (date_trunc('month', CURRENT_DATE::date) - interval '2 month')::date AS von, (date_trunc('month', CURRENT_DATE::date) + interval '1 month' - interval '1 day')::date AS bis FROM konto - WHERE id = $G_konto_id"); + WHERE id = $G_konto_id;"); $row = $stmt->fetch(PDO::FETCH_ASSOC); $konto_id = $row ? $row['id'] : -1; diff --git a/style.css b/style.css index 53b63f6..5d21de2 100644 --- a/style.css +++ b/style.css @@ -339,6 +339,14 @@ button.datum_leeren { font-size: 1.5rem; } +/****************************************/ +/* Diagramme */ +/****************************************/ + +div.diagramm { + width:100%; +} + /****************************************/ /****************************************/ /****************************************/ \ No newline at end of file