181 lines
6.8 KiB
Plaintext
181 lines
6.8 KiB
Plaintext
@page "/hr-kpi"
|
|
@using Microsoft.Extensions.Options
|
|
@using TrafagSalesExporter.Components.HrKpi
|
|
@using TrafagSalesExporter.Services
|
|
@inject IHrKpiService HrKpiService
|
|
@inject IOptions<HrKpiDataSourceOptions> DataSourceOptions
|
|
@inject ISnackbar Snackbar
|
|
@inject IUiTextService UiText
|
|
|
|
<PageTitle>@T("HR KPI", "HR KPI")</PageTitle>
|
|
|
|
<MudText Typo="Typo.h4" Class="mb-4">@T("HR KPI", "HR KPI")</MudText>
|
|
|
|
<MudPaper Class="pa-4 mb-4" Elevation="1">
|
|
<MudGrid>
|
|
<MudItem xs="12" md="5">
|
|
<MudTextField @bind-Value="_dataFolder" Label="@T("Datenordner", "Data folder")" />
|
|
</MudItem>
|
|
<MudItem xs="6" md="2">
|
|
<MudSelect T="int?" @bind-Value="_year" Label="@T("Austrittsjahr", "Leaver year")" Dense Clearable>
|
|
@foreach (var option in _result?.ExitYearOptions ?? [])
|
|
{
|
|
<MudSelectItem Value="@((int?)option)">@option</MudSelectItem>
|
|
}
|
|
</MudSelect>
|
|
</MudItem>
|
|
<MudItem xs="12" md="3">
|
|
<MudSelect T="string" @bind-Value="_organisation" Label="@T("Organisation", "Organisation")" Dense Clearable>
|
|
@foreach (var option in _result?.OrganisationOptions ?? [])
|
|
{
|
|
<MudSelectItem Value="@option">@option</MudSelectItem>
|
|
}
|
|
</MudSelect>
|
|
</MudItem>
|
|
<MudItem xs="12" md="2">
|
|
<MudButton Variant="Variant.Filled" Color="Color.Primary" OnClick="LoadAsync"
|
|
StartIcon="@Icons.Material.Filled.Refresh" Disabled="_loading" FullWidth>
|
|
@(_loading ? T("Lade...", "Loading...") : T("Laden", "Load"))
|
|
</MudButton>
|
|
</MudItem>
|
|
<MudItem xs="12" md="3">
|
|
<MudDatePicker @bind-Date="_fromDate" Label="@T("Von Austritt", "Exit from")" Clearable DateFormat="dd.MM.yyyy" />
|
|
</MudItem>
|
|
<MudItem xs="12" md="3">
|
|
<MudDatePicker @bind-Date="_toDate" Label="@T("Bis Austritt", "Exit to")" Clearable DateFormat="dd.MM.yyyy" />
|
|
</MudItem>
|
|
<MudItem xs="12" md="2">
|
|
<MudSelect T="int?" @bind-Value="_entryYear" Label="@T("Eintrittsjahr", "Entry year")" Dense Clearable>
|
|
@foreach (var option in _result?.EntryYearOptions ?? [])
|
|
{
|
|
<MudSelectItem Value="@((int?)option)">@option</MudSelectItem>
|
|
}
|
|
</MudSelect>
|
|
</MudItem>
|
|
<MudItem xs="12" md="4">
|
|
<MudTextField @bind-Value="_searchText" Label="@T("Suche Name / Personalnr.", "Search name / personnel no.")" />
|
|
</MudItem>
|
|
<MudItem xs="12" md="3">
|
|
<MudSelect T="string" @bind-Value="_kostenstelle" Label="@T("Kostenstelle", "Cost center")" Dense Clearable>
|
|
@foreach (var option in _result?.KostenstelleOptions ?? [])
|
|
{
|
|
<MudSelectItem Value="@option">@option</MudSelectItem>
|
|
}
|
|
</MudSelect>
|
|
</MudItem>
|
|
<MudItem xs="12" md="3">
|
|
<MudSelect T="string" @bind-Value="_mitarbeitertyp" Label="@T("Mitarbeitertyp", "Employee type")" Dense Clearable>
|
|
@foreach (var option in _result?.MitarbeitertypOptions ?? [])
|
|
{
|
|
<MudSelectItem Value="@option">@option</MudSelectItem>
|
|
}
|
|
</MudSelect>
|
|
</MudItem>
|
|
<MudItem xs="12" md="2">
|
|
<MudSelect T="string" @bind-Value="_fluktuationFilter" Label="@T("Fluktuation", "Turnover")" Dense>
|
|
@foreach (var option in _fluktuationOptions)
|
|
{
|
|
<MudSelectItem Value="@option.Key">@option.Label</MudSelectItem>
|
|
}
|
|
</MudSelect>
|
|
</MudItem>
|
|
<MudItem xs="6" md="2">
|
|
<MudSelect T="string" @bind-Value="_glzAmpel" Label="@T("GLZ", "Time")" Dense Clearable>
|
|
@foreach (var option in _ampelOptions)
|
|
{
|
|
<MudSelectItem Value="@option">@option</MudSelectItem>
|
|
}
|
|
</MudSelect>
|
|
</MudItem>
|
|
<MudItem xs="6" md="2">
|
|
<MudSelect T="string" @bind-Value="_restferienAmpel" Label="@T("Restferien", "Vacation")" Dense Clearable>
|
|
@foreach (var option in _restferienOptions)
|
|
{
|
|
<MudSelectItem Value="@option">@option</MudSelectItem>
|
|
}
|
|
</MudSelect>
|
|
</MudItem>
|
|
</MudGrid>
|
|
</MudPaper>
|
|
|
|
@if (_result is not null)
|
|
{
|
|
@if (_result.Notices.Count > 0)
|
|
{
|
|
<MudPaper Class="pa-4 mb-4" Elevation="1">
|
|
@foreach (var notice in _result.Notices)
|
|
{
|
|
<MudAlert Severity="Severity.Warning" Dense Variant="Variant.Outlined" Class="mb-2">@notice</MudAlert>
|
|
}
|
|
</MudPaper>
|
|
}
|
|
|
|
<HrKpiDashboardTabs Result="_result" />
|
|
|
|
}
|
|
|
|
@code {
|
|
private string _dataFolder = HrKpiDataSourceOptions.DefaultFolder;
|
|
private int? _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<string> _ampelOptions = ["Gruen", "Gelb", "Rot"];
|
|
private readonly List<string> _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);
|
|
}
|