@page "/summary" @page "/summary/{YearMonth}" @attribute [Authorize] @rendermode InteractiveServer @inject IWorkDayService WorkDayService Monthly Summary

Monthly Summary

@currentMonth.ToString("MMMM yyyy")

@if (loading) {

Loading...

} else if (summary is not null) {
Working Days
@summary.TotalWorkingDays
Total Worked Hours
@summary.TotalWorkedHours.ToString("N1")h
Hours Off
@summary.TotalHoursOff.ToString("N1")h
Gross Income
€@summary.TotalGrossIncome.ToString("N2")
Net Income
€@summary.TotalNetIncome.ToString("N2")
Office Days
@summary.OfficeDays
Home Days
@summary.HomeDays
Holidays
@summary.HolidayDays
Sick Days
@summary.SickDays
Days Off
@summary.DaysOff
Closure Days
@summary.ClosureDays
} @code { [Parameter] public string? YearMonth { get; set; } private DateOnly currentMonth; private bool loading = true; private MonthlySummaryModel? summary; protected override async Task OnInitializedAsync() { if (!string.IsNullOrEmpty(YearMonth) && DateTime.TryParseExact(YearMonth, "yyyy-MM", null, System.Globalization.DateTimeStyles.None, out var parsed)) { currentMonth = new DateOnly(parsed.Year, parsed.Month, 1); } else { currentMonth = new DateOnly(DateTime.Today.Year, DateTime.Today.Month, 1); } await LoadSummary(); } private async Task LoadSummary() { loading = true; summary = await WorkDayService.GetMonthlySummaryAsync(currentMonth.Year, currentMonth.Month); loading = false; } private async Task PreviousMonth() { currentMonth = currentMonth.AddMonths(-1); await LoadSummary(); } private async Task NextMonth() { currentMonth = currentMonth.AddMonths(1); await LoadSummary(); } }