20251216: Korrektur gegenkonto_id, erste Version diagramme
This commit is contained in:
parent
2a307c2bda
commit
6e0322c636
235
diagramme.php
235
diagramme.php
@ -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
|
||||||
},
|
},
|
||||||
{
|
yaxis: {
|
||||||
x: labels,
|
title: { text: 'Kontostand Monatsende'},
|
||||||
y: reiheB,
|
showgrid: true,
|
||||||
type: "scatter",
|
showline: true,
|
||||||
mode: "lines",
|
separatethousands: false
|
||||||
name: "Reihe B"
|
},
|
||||||
}
|
plot_bgcolor: '#b9b9b9',
|
||||||
];
|
paper_bgcolor: '#b9b9b9'
|
||||||
|
};
|
||||||
|
|
||||||
Plotly.newPlot("chart", data, {
|
var modeBar = {modeBarButtonsToRemove: ['lasso2d', 'select2d', 'zoom2d', 'pan2d', 'autoScale2d'],
|
||||||
margin: { t: 20 }
|
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>
|
</script>
|
||||||
|
<?= $system === 'test' ? '<div class="menue"><h2 class="seitentitel">Testsystem</h2></div>' : '' ?>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
@ -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,
|
||||||
|
|||||||
@ -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;
|
||||||
|
|||||||
@ -339,6 +339,14 @@ button.datum_leeren {
|
|||||||
font-size: 1.5rem;
|
font-size: 1.5rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/****************************************/
|
||||||
|
/* Diagramme */
|
||||||
|
/****************************************/
|
||||||
|
|
||||||
|
div.diagramm {
|
||||||
|
width:100%;
|
||||||
|
}
|
||||||
|
|
||||||
/****************************************/
|
/****************************************/
|
||||||
/****************************************/
|
/****************************************/
|
||||||
/****************************************/
|
/****************************************/
|
||||||
Loading…
Reference in New Issue
Block a user