20251216: Korrektur gegenkonto_id, erste Version diagramme

This commit is contained in:
p3t3rp1Lz 2025-12-16 14:36:43 +01:00
parent 2a307c2bda
commit 6e0322c636
4 changed files with 228 additions and 33 deletions

View File

@ -1,11 +1,151 @@
<?php <?php
require_once __DIR__ . '/includes/db_connect.php'; require_once __DIR__ . '/includes/db_connect.php';
$labels = ["Jan", "Feb", "Mrz", "Apr"]; $system = getenv('POSTGRES_SYSTEM') ?? 'test';
$reiheA = [10, 20, 15, 30];
$reiheB = [5, 12, 18, 25];
$stmt = $pdo->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);
?> ?>
<!DOCTYPE html> <!DOCTYPE html>
@ -13,7 +153,7 @@ $reiheB = [5, 12, 18, 25];
<head> <head>
<link rel="stylesheet" href="style.css"> <link rel="stylesheet" href="style.css">
<script src="https://cdn.plot.ly/plotly-latest.min.js"></script> <script src="https://cdn.plot.ly/plotly-3.3.1.min.js"></script>
</head> </head>
<body> <body>
@ -27,33 +167,78 @@ $reiheB = [5, 12, 18, 25];
<img src="img\home.svg" alt="Home" class="menue"> <img src="img\home.svg" alt="Home" class="menue">
</a> </a>
</div> </div>
<div id="chart" style="width:600px;height:300px;"></div> <div class="inhalt">
<div class="diagramm" id="chartKonten"></div>
<div class="diagramm" id="chartGesamt"></div>
</div>
<script> <script>
const labels = <?php echo json_encode($labels); ?>; const monate = <?= $monateJson ?>;
const reiheA = <?php echo json_encode($reiheA); ?>; const konten = <?= $kontenJson ?>;
const reiheB = <?php echo json_encode($reiheB); ?>; const gesamt = <?= $gesamtJson ?>;
const farben = <?= $farbenJson ?>;
const data = [ const tracesKonten = [];
{ const tracesGesamt = [];
x: labels,
y: reiheA, var layout = {
type: "scatter", margin: { t: 20 },
mode: "lines", xaxis: {
name: "Reihe A" title: { text: 'Monat'},
}, showgrid: true,
{ zeroline: true
x: labels, },
y: reiheB, yaxis: {
type: "scatter", title: { text: 'Kontostand Monatsende'},
mode: "lines", showgrid: true,
name: "Reihe B" showline: true,
separatethousands: false
},
plot_bgcolor: '#b9b9b9',
paper_bgcolor: '#b9b9b9'
};
var modeBar = {modeBarButtonsToRemove: ['lasso2d', 'select2d', 'zoom2d', 'pan2d', 'autoScale2d'],
displaylogo: false
} }
];
Plotly.newPlot("chart", data, { for (const kontoId in konten) {
margin: { t: 20 } tracesKonten.push({
}); x: monate,
</script> y: konten[kontoId],
type: 'scatter',
mode: 'lines+markers',
name: kontoId,
hovertemplate: "%{y:,.2f} €<extra></extra>",
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} €<extra></extra>",
line: {
color: farben[gesamtId],
width: 2
}
});
}
Plotly.newPlot('chartGesamt', tracesGesamt, layout, modeBar);
</script>
<?= $system === 'test' ? '<div class="menue"><h2 class="seitentitel">Testsystem</h2></div>' : '' ?>
</body> </body>
</html> </html>

View File

@ -34,6 +34,7 @@
case 'hinzufügen': case 'hinzufügen':
$returnOfFunction += insertKontobewegung($pdo, $returnOfFunction += insertKontobewegung($pdo,
$konto_id, $konto_id,
$gegenkonto_id,
$betrag, $betrag,
$beschreibung, $beschreibung,
$datum_ausgegeben, $datum_ausgegeben,
@ -41,6 +42,7 @@
if(!empty($gegenkonto_id)) { if(!empty($gegenkonto_id)) {
$returnOfFunction += insertKontobewegung($pdo, $returnOfFunction += insertKontobewegung($pdo,
$gegenkonto_id, $gegenkonto_id,
$konto_id,
$betrag * -1, $betrag * -1,
$beschreibung, $beschreibung,
$datum_ausgegeben, $datum_ausgegeben,
@ -77,16 +79,16 @@
function insertKontobewegung($para_pdo, function insertKontobewegung($para_pdo,
$para_konto_id, $para_konto_id,
$para_gegenkonto_id,
$para_betrag, $para_betrag,
$para_beschreibung, $para_beschreibung,
$para_datum_ausgegeben, $para_datum_ausgegeben,
$para_bei_restguthaben_ignorieren) { $para_bei_restguthaben_ignorieren) {
//$ignrorieren $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 = $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->execute(['konto_id' => $para_konto_id, $stmt->execute(['konto_id' => $para_konto_id,
'gegenkonto_id' => $para_gegenkonto_id,
'betrag' => $para_betrag, 'betrag' => $para_betrag,
'beschreibung' => $para_beschreibung, 'beschreibung' => $para_beschreibung,
'datum_ausgegeben' => $para_datum_ausgegeben, 'datum_ausgegeben' => $para_datum_ausgegeben,

View File

@ -11,7 +11,7 @@
(date_trunc('month', CURRENT_DATE::date) - interval '2 month')::date AS von, (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 (date_trunc('month', CURRENT_DATE::date) + interval '1 month' - interval '1 day')::date AS bis
FROM konto FROM konto
WHERE id = $G_konto_id"); WHERE id = $G_konto_id;");
$row = $stmt->fetch(PDO::FETCH_ASSOC); $row = $stmt->fetch(PDO::FETCH_ASSOC);
$konto_id = $row ? $row['id'] : -1; $konto_id = $row ? $row['id'] : -1;

View File

@ -339,6 +339,14 @@ button.datum_leeren {
font-size: 1.5rem; font-size: 1.5rem;
} }
/****************************************/
/* Diagramme */
/****************************************/
div.diagramm {
width:100%;
}
/****************************************/ /****************************************/
/****************************************/ /****************************************/
/****************************************/ /****************************************/