diff --git a/Components/Pages/Auswertung.razor b/Components/Pages/Auswertung.razor index e297b77..d6186c5 100644 --- a/Components/Pages/Auswertung.razor +++ b/Components/Pages/Auswertung.razor @@ -226,13 +226,45 @@ if (!_fakten.Any() || _selectedWorkspace == null || !_selectedChartDimensions.Any()) { - _shouldRenderChart = true; // NEU: Nur noch Flag setzen + _shouldRenderChart = true; return; } var selectedDims = _selectedChartDimensions.ToList(); - var workspaceLabel = GetUniqueLabel(_selectedWorkspace.Name, _selectedWorkspace.Name); + // --- 1. DURCHGANG: Gesamtsummen pro eindeutigem Pfad berechnen --- + var pathAmounts = new Dictionary(); + 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) { var currentFullPath = _selectedWorkspace.Name; @@ -241,7 +273,6 @@ 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(); @@ -249,7 +280,13 @@ foreach (var level in levels) { 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); @@ -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 ---