@page "/management-cockpit"
@using TrafagSalesExporter.Models
@using TrafagSalesExporter.Services
@inject IManagementCockpitService CockpitService
@inject ISnackbar Snackbar
Management Cockpit
Management Cockpit
@foreach (var file in _files)
{
@file.DisplayName
}
Dateien laden
@(_analyzing ? "Analysiere..." : "Cockpit erzeugen")
@if (_result is not null)
{
Land@_result.Summary.Land
TSC@_result.Summary.Tsc
Umsatz@_result.Summary.SalesValueTotal.ToString("N2")
Geschätzte Marge@($"{_result.Summary.EstimatedMarginPercent:F1}%")
Management Aussagen
@foreach (var finding in _result.Findings)
{
@finding.Title: @finding.Detail
}
Top Kunden
@foreach (var item in _result.TopCustomers)
{
@($"{item.Label}: {item.Value:N2} ({item.SharePercent:F1}%)")
}
Top Produktgruppen
@foreach (var item in _result.TopProductGroups)
{
@($"{item.Label}: {item.Value:N2} ({item.SharePercent:F1}%)")
}
Top Sales Owner
@foreach (var item in _result.TopSalesEmployees)
{
@($"{item.Label}: {item.Value:N2} ({item.SharePercent:F1}%)")
}
Datenqualität
@foreach (var entry in _result.DataQualityCounts.OrderByDescending(x => x.Value))
{
@($"{entry.Key}: {entry.Value}")
}
}
@code {
private List _files = [];
private string? _selectedFilePath;
private ManagementCockpitResult? _result;
private bool _loadingFiles;
private bool _analyzing;
protected override async Task OnInitializedAsync()
{
await ReloadFiles();
}
private async Task ReloadFiles()
{
_loadingFiles = true;
try
{
_files = await CockpitService.GetAvailableFilesAsync();
_selectedFilePath ??= _files.FirstOrDefault()?.Path;
}
finally
{
_loadingFiles = false;
}
}
private async Task Analyze()
{
if (string.IsNullOrWhiteSpace(_selectedFilePath))
return;
_analyzing = true;
try
{
_result = await CockpitService.AnalyzeAsync(_selectedFilePath);
}
catch (Exception ex)
{
Snackbar.Add($"Cockpit konnte nicht erzeugt werden: {ex.Message}", Severity.Error);
}
finally
{
_analyzing = false;
}
}
private static Severity MapSeverity(string severity) => severity switch
{
"Warning" => Severity.Warning,
"Error" => Severity.Error,
_ => Severity.Info
};
}