From 0d5b48b89154c5bfbb8c0f8d5997a780c6c294a3 Mon Sep 17 00:00:00 2001 From: Marco Date: Thu, 23 Apr 2026 00:11:00 +0200 Subject: [PATCH] feat: enhance timesheet summary with today highlighting and improved CSS styles Co-authored-by: Copilot --- Components/Pages/MonthlySummary.razor | 18 ++++++++++++++--- .../WorkDays/CouchbaseLiteWorkDayService.cs | 3 ++- wwwroot/app.css | 20 +++++++++++++++++++ 3 files changed, 37 insertions(+), 4 deletions(-) diff --git a/Components/Pages/MonthlySummary.razor b/Components/Pages/MonthlySummary.razor index 06b89ec..6debd76 100644 --- a/Components/Pages/MonthlySummary.razor +++ b/Components/Pages/MonthlySummary.razor @@ -294,12 +294,24 @@ else if (viewMode == SummaryViewMode.Timesheet && timesheet is not null) private static string GetDayColumnClass(global::WorkTracker.Domain.MonthlyTimesheetDayModel day) { - if (day.IsWeekend || day.IsHoliday) + var classes = new List(); + + if (day.Date == DateOnly.FromDateTime(DateTime.Today)) { - return "timesheet-summary-day-danger"; + classes.Add("timesheet-summary-day-today"); } - return day.IsClosure ? "timesheet-summary-day-closure" : string.Empty; + if (day.IsWeekend || day.IsHoliday) + { + classes.Add("timesheet-summary-day-danger"); + } + + if (day.IsClosure) + { + classes.Add("timesheet-summary-day-closure"); + } + + return string.Join(" ", classes); } private static string GetDayPopupClass(int index, int totalDays) diff --git a/Services/WorkDays/CouchbaseLiteWorkDayService.cs b/Services/WorkDays/CouchbaseLiteWorkDayService.cs index 6b1888e..fac5d8e 100644 --- a/Services/WorkDays/CouchbaseLiteWorkDayService.cs +++ b/Services/WorkDays/CouchbaseLiteWorkDayService.cs @@ -601,7 +601,8 @@ public sealed class CouchbaseLiteWorkDayService : IWorkDayService var weekdayDaytimeHours = isWeekend ? 0m : Math.Max(0m, totalHours - nightHours); var suppressVacation = isWeekend || explicitHoliday || isAutomaticHoliday || illness; var hasNonWorkingEvent = explicitHoliday || illness || dayOff || closure; - var permitHours = !isWeekend && !isAutomaticHoliday && !hasNonWorkingEvent && totalHours < standardHours + var isFutureEmptyDay = date > DateOnly.FromDateTime(DateTime.Today) && includedUnits.Count == 0; + var permitHours = !isWeekend && !isAutomaticHoliday && !hasNonWorkingEvent && !isFutureEmptyDay && totalHours < standardHours ? standardHours - totalHours : 0m; diff --git a/wwwroot/app.css b/wwwroot/app.css index 843d605..9996a06 100644 --- a/wwwroot/app.css +++ b/wwwroot/app.css @@ -958,6 +958,26 @@ h1:focus { background-color: #e2e3e5 !important; } +.timesheet-summary-table .timesheet-summary-day-today { + box-shadow: + inset 0.15rem 0 0 var(--wt-calendar-today-ring), + inset -0.15rem 0 0 var(--wt-calendar-today-ring); +} + +.timesheet-summary-table thead .timesheet-summary-day-today { + box-shadow: + inset 0.15rem 0 0 var(--wt-calendar-today-ring), + inset -0.15rem 0 0 var(--wt-calendar-today-ring), + inset 0 0.15rem 0 var(--wt-calendar-today-ring); +} + +.timesheet-summary-table tbody tr:last-child .timesheet-summary-day-today { + box-shadow: + inset 0.15rem 0 0 var(--wt-calendar-today-ring), + inset -0.15rem 0 0 var(--wt-calendar-today-ring), + inset 0 -0.15rem 0 var(--wt-calendar-today-ring); +} + [data-bs-theme=dark] .timesheet-summary-table .timesheet-summary-day-danger { background-color: #5b2833 !important; }