244 lines
8.4 KiB
PHP
244 lines
8.4 KiB
PHP
<?php
|
|
|
|
require_once __DIR__ . '/includes/db_connect.php';
|
|
$system = getenv('POSTGRES_SYSTEM') ?? 'test';
|
|
|
|
$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>
|
|
<html>
|
|
|
|
<head>
|
|
<link rel="stylesheet" href="style.css">
|
|
<script src="https://cdn.plot.ly/plotly-3.3.1.min.js"></script>
|
|
</head>
|
|
|
|
<body>
|
|
<div class="header">
|
|
<h2 class="seitentitel">
|
|
Diagramme
|
|
</h2>
|
|
<a href="index.php"
|
|
class="konto_header"
|
|
id="konto_navigationRechts">
|
|
<img src="img\home.svg" alt="Home" class="menue">
|
|
</a>
|
|
</div>
|
|
<div class="inhalt">
|
|
<div class="diagramm" id="chartKonten"></div>
|
|
<div class="diagramm" id="chartGesamt"></div>
|
|
</div>
|
|
|
|
<script>
|
|
const monate = <?= $monateJson ?>;
|
|
const konten = <?= $kontenJson ?>;
|
|
const gesamt = <?= $gesamtJson ?>;
|
|
const farben = <?= $farbenJson ?>;
|
|
|
|
const tracesKonten = [];
|
|
const tracesGesamt = [];
|
|
|
|
var layout = {
|
|
margin: { t: 20 },
|
|
xaxis: {
|
|
title: { text: 'Monat'},
|
|
showgrid: true,
|
|
zeroline: true
|
|
},
|
|
yaxis: {
|
|
title: { text: 'Kontostand Monatsende'},
|
|
showgrid: true,
|
|
showline: true,
|
|
separatethousands: false
|
|
},
|
|
plot_bgcolor: '#b9b9b9',
|
|
paper_bgcolor: '#b9b9b9'
|
|
};
|
|
|
|
var modeBar = {modeBarButtonsToRemove: ['lasso2d', 'select2d', 'zoom2d', 'pan2d', 'autoScale2d'],
|
|
displaylogo: false
|
|
}
|
|
|
|
for (const kontoId in konten) {
|
|
tracesKonten.push({
|
|
x: monate,
|
|
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>
|
|
</html>
|