@page "/hr-kpi" @using Microsoft.Extensions.Options @using TrafagSalesExporter.Components.HrKpi @using TrafagSalesExporter.Services @inject IHrKpiService HrKpiService @inject IOptions DataSourceOptions @inject ISnackbar Snackbar @inject IUiTextService UiText @T("HR KPI", "HR KPI") @T("HR KPI", "HR KPI") @foreach (var option in _result?.OrganisationOptions ?? []) { @option } @(_loading ? T("Lade...", "Loading...") : T("Laden", "Load")) @foreach (var option in _result?.EntryYearOptions ?? []) { @option } @foreach (var option in _result?.KostenstelleOptions ?? []) { @option } @foreach (var option in _result?.MitarbeitertypOptions ?? []) { @option } @foreach (var option in _fluktuationOptions) { @option.Label } @foreach (var option in _ampelOptions) { @option } @foreach (var option in _restferienOptions) { @option } @if (_result is not null) { @if (_result.Notices.Count > 0) { @foreach (var notice in _result.Notices) { @notice } } } @code { private string _dataFolder = HrKpiDataSourceOptions.DefaultFolder; private int _year = DateTime.Today.Year; private DateTime? _fromDate; private DateTime? _toDate; private int? _entryYear; private string? _organisation; private string? _kostenstelle; private string? _mitarbeitertyp; private string _fluktuationFilter = "Alle"; private string? _glzAmpel; private string? _restferienAmpel; private string? _searchText; private bool _loading; private HrKpiResult? _result; private readonly List<(string Key, string Label)> _fluktuationOptions = [ ("Alle", "Alle"), ("Fluktuationsrelevant", "Relevant"), ("Arbeitnehmerkuendigung", "Arbeitnehmerkuendigung"), ("Ausgeschlossen", "Ausgeschlossen") ]; private readonly List _ampelOptions = ["Gruen", "Gelb", "Rot"]; private readonly List _restferienOptions = ["Gruen", "Rot"]; protected override async Task OnInitializedAsync() { _dataFolder = DataSourceOptions.Value.Normalize().DataFolder; await LoadAsync(); } private async Task LoadAsync() { _loading = true; try { _result = await HrKpiService.BuildAsync(new HrKpiOptions { DataFolder = _dataFolder, Year = _year, FromDate = _fromDate, ToDate = _toDate, EntryYear = _entryYear, Organisationseinheit = _organisation, KostenstelleText = _kostenstelle, Mitarbeitertyp = _mitarbeitertyp, FluktuationFilter = _fluktuationFilter, GlzAmpel = _glzAmpel, RestferienAmpel = _restferienAmpel, SearchText = _searchText }); } catch (Exception ex) { Snackbar.Add(ex.Message, Severity.Error); } finally { _loading = false; } } private string T(string german, string english) => UiText.Text(german, english); }