Compare commits

...

1 Commits

Author SHA1 Message Date
Tokk 83f377cfa0 Ânzeige von Summen im Graph 2026-05-29 16:49:08 +02:00
+42 -5
View File
@@ -226,13 +226,45 @@
if (!_fakten.Any() || _selectedWorkspace == null || !_selectedChartDimensions.Any()) if (!_fakten.Any() || _selectedWorkspace == null || !_selectedChartDimensions.Any())
{ {
_shouldRenderChart = true; // NEU: Nur noch Flag setzen _shouldRenderChart = true;
return; return;
} }
var selectedDims = _selectedChartDimensions.ToList(); var selectedDims = _selectedChartDimensions.ToList();
var workspaceLabel = GetUniqueLabel(_selectedWorkspace.Name, _selectedWorkspace.Name);
// --- 1. DURCHGANG: Gesamtsummen pro eindeutigem Pfad berechnen ---
var pathAmounts = new Dictionary<string, decimal>();
decimal totalWorkspaceAmount = 0;
foreach (var fakt in _fakten)
{
totalWorkspaceAmount += fakt.Amount;
var currentFullPath = _selectedWorkspace.Name;
foreach (var dimName in selectedDims)
{
var val = GetDimensionValue(fakt, dimName);
var levels = string.IsNullOrWhiteSpace(val)
? new[] { $"Ohne {dimName}" }
: val.Split(new[] { " / " }, StringSplitOptions.RemoveEmptyEntries).Select(s => s.Trim()).ToArray();
foreach (var level in levels)
{
var targetFullPath = $"{currentFullPath} / {level}";
if (!pathAmounts.ContainsKey(targetFullPath))
pathAmounts[targetFullPath] = 0;
pathAmounts[targetFullPath] += fakt.Amount;
currentFullPath = targetFullPath;
}
}
}
// Hauptknoten (Workspace) mit Gesamtsumme versehen
var workspaceLabel = GetUniqueLabel(_selectedWorkspace.Name, $"{_selectedWorkspace.Name} ({totalWorkspaceAmount.ToString("N2")} €)");
// --- 2. DURCHGANG: Diagramm-Daten mit den summierten Labels bauen ---
foreach (var fakt in _fakten) foreach (var fakt in _fakten)
{ {
var currentFullPath = _selectedWorkspace.Name; var currentFullPath = _selectedWorkspace.Name;
@@ -241,7 +273,6 @@
foreach (var dimName in selectedDims) foreach (var dimName in selectedDims)
{ {
var val = GetDimensionValue(fakt, dimName); var val = GetDimensionValue(fakt, dimName);
var levels = string.IsNullOrWhiteSpace(val) var levels = string.IsNullOrWhiteSpace(val)
? new[] { $"Ohne {dimName}" } ? new[] { $"Ohne {dimName}" }
: val.Split(new[] { " / " }, StringSplitOptions.RemoveEmptyEntries).Select(s => s.Trim()).ToArray(); : val.Split(new[] { " / " }, StringSplitOptions.RemoveEmptyEntries).Select(s => s.Trim()).ToArray();
@@ -249,7 +280,13 @@
foreach (var level in levels) foreach (var level in levels)
{ {
var targetFullPath = $"{currentFullPath} / {level}"; var targetFullPath = $"{currentFullPath} / {level}";
var targetLabel = GetUniqueLabel(targetFullPath, level);
// Wir holen den berechneten Gesamtbetrag für diesen spezifischen Knoten
var nodeAmount = pathAmounts[targetFullPath];
var shortNameWithAmount = $"{level} ({nodeAmount.ToString("N2")} €)";
// Unser Zero-Width-Space Hack sorgt weiterhin für die Trennung im Hintergrund
var targetLabel = GetUniqueLabel(targetFullPath, shortNameWithAmount);
AddSankeyLink(currentSourceLabel, targetLabel, fakt.Amount); AddSankeyLink(currentSourceLabel, targetLabel, fakt.Amount);
@@ -259,7 +296,7 @@
} }
} }
_shouldRenderChart = true; // NEU: Nur noch Flag setzen _shouldRenderChart = true;
} }
// --- NEU: Die Magie, die unsichtbare Leerzeichen für eindeutige IDs anhängt --- // --- NEU: Die Magie, die unsichtbare Leerzeichen für eindeutige IDs anhängt ---