20251216: Korrektur gegenkonto_id, erste Version diagramme
This commit is contained in:
parent
2a307c2bda
commit
6e0322c636
239
diagramme.php
239
diagramme.php
@ -1,11 +1,151 @@
|
||||
<?php
|
||||
|
||||
require_once __DIR__ . '/includes/db_connect.php';
|
||||
$labels = ["Jan", "Feb", "Mrz", "Apr"];
|
||||
$reiheA = [10, 20, 15, 30];
|
||||
$reiheB = [5, 12, 18, 25];
|
||||
$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>
|
||||
@ -13,7 +153,7 @@ $reiheB = [5, 12, 18, 25];
|
||||
|
||||
<head>
|
||||
<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>
|
||||
|
||||
<body>
|
||||
@ -27,33 +167,78 @@ $reiheB = [5, 12, 18, 25];
|
||||
<img src="img\home.svg" alt="Home" class="menue">
|
||||
</a>
|
||||
</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>
|
||||
const labels = <?php echo json_encode($labels); ?>;
|
||||
const reiheA = <?php echo json_encode($reiheA); ?>;
|
||||
const reiheB = <?php echo json_encode($reiheB); ?>;
|
||||
<script>
|
||||
const monate = <?= $monateJson ?>;
|
||||
const konten = <?= $kontenJson ?>;
|
||||
const gesamt = <?= $gesamtJson ?>;
|
||||
const farben = <?= $farbenJson ?>;
|
||||
|
||||
const data = [
|
||||
{
|
||||
x: labels,
|
||||
y: reiheA,
|
||||
type: "scatter",
|
||||
mode: "lines",
|
||||
name: "Reihe A"
|
||||
const tracesKonten = [];
|
||||
const tracesGesamt = [];
|
||||
|
||||
var layout = {
|
||||
margin: { t: 20 },
|
||||
xaxis: {
|
||||
title: { text: 'Monat'},
|
||||
showgrid: true,
|
||||
zeroline: true
|
||||
},
|
||||
{
|
||||
x: labels,
|
||||
y: reiheB,
|
||||
type: "scatter",
|
||||
mode: "lines",
|
||||
name: "Reihe B"
|
||||
}
|
||||
];
|
||||
yaxis: {
|
||||
title: { text: 'Kontostand Monatsende'},
|
||||
showgrid: true,
|
||||
showline: true,
|
||||
separatethousands: false
|
||||
},
|
||||
plot_bgcolor: '#b9b9b9',
|
||||
paper_bgcolor: '#b9b9b9'
|
||||
};
|
||||
|
||||
Plotly.newPlot("chart", data, {
|
||||
margin: { t: 20 }
|
||||
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
|
||||
}
|
||||
});
|
||||
</script>
|
||||
}
|
||||
|
||||
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>
|
||||
@ -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,
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -339,6 +339,14 @@ button.datum_leeren {
|
||||
font-size: 1.5rem;
|
||||
}
|
||||
|
||||
/****************************************/
|
||||
/* Diagramme */
|
||||
/****************************************/
|
||||
|
||||
div.diagramm {
|
||||
width:100%;
|
||||
}
|
||||
|
||||
/****************************************/
|
||||
/****************************************/
|
||||
/****************************************/
|
||||
Loading…
Reference in New Issue
Block a user