Adds Kasse (Cash Register) module and related components

Introduces comprehensive cash management functionality with multiple view components for tracking daily transactions, filtering, and reconciliation

Implements:
- Cash calculation and difference tracking
- Dynamic tab switching
- Checkbox selection and row expansion
- Date filtering and approval mechanisms
This commit is contained in:
Janus C. H. Knudsen 2026-01-11 21:08:56 +01:00
parent 12869e35bf
commit 754681059d
31 changed files with 2904 additions and 28 deletions

View file

@ -0,0 +1,93 @@
@page "/kasse"
@using PlanTempus.Application.Features.Kasse.Pages
@model PlanTempus.Application.Features.Kasse.Pages.IndexModel
@{
ViewData["Title"] = "Kasse";
}
<!-- Sticky Header (Stats + Tabs) -->
<swp-kasse-sticky-header>
<!-- Context Stats (changes based on active tab) -->
<swp-kasse-header>
<!-- Stats for Oversigt tab -->
<swp-kasse-stats data-for-tab="oversigt" class="active">
<swp-kasse-stat>
<swp-kasse-stat-value>12</swp-kasse-stat-value>
<swp-kasse-stat-label>Afstemninger i periode</swp-kasse-stat-label>
</swp-kasse-stat>
<swp-kasse-stat class="highlight">
<swp-kasse-stat-value>186.450 kr</swp-kasse-stat-value>
<swp-kasse-stat-label>Total omsætning</swp-kasse-stat-label>
</swp-kasse-stat>
<swp-kasse-stat>
<swp-kasse-stat-value>42.340 kr</swp-kasse-stat-value>
<swp-kasse-stat-label>Kontantsalg</swp-kasse-stat-label>
</swp-kasse-stat>
<swp-kasse-stat class="warning">
<swp-kasse-stat-value>-75 kr</swp-kasse-stat-value>
<swp-kasse-stat-label>Samlet difference</swp-kasse-stat-label>
</swp-kasse-stat>
</swp-kasse-stats>
<!-- Stats for Dagens afstemning tab -->
<swp-kasse-stats data-for-tab="afstemning">
<swp-kasse-stat>
<swp-kasse-stat-value>47</swp-kasse-stat-value>
<swp-kasse-stat-label>Transaktioner i dag</swp-kasse-stat-label>
</swp-kasse-stat>
<swp-kasse-stat class="highlight">
<swp-kasse-stat-value>18.865 kr</swp-kasse-stat-value>
<swp-kasse-stat-label>Omsætning i dag</swp-kasse-stat-label>
</swp-kasse-stat>
<swp-kasse-stat>
<swp-kasse-stat-value>29. dec 17:45</swp-kasse-stat-value>
<swp-kasse-stat-label>Sidste afstemning</swp-kasse-stat-label>
</swp-kasse-stat>
<swp-kasse-stat>
<swp-kasse-stat-value>Anna J.</swp-kasse-stat-value>
<swp-kasse-stat-label>Åbnede kassen 29. dec 09:05</swp-kasse-stat-label>
</swp-kasse-stat>
</swp-kasse-stats>
</swp-kasse-header>
<!-- Tab Bar -->
<swp-tab-bar>
<swp-tab class="active" data-tab="oversigt">
<i class="ph ph-list-checks"></i>
Oversigt
</swp-tab>
<swp-tab data-tab="afstemning">
<i class="ph ph-cash-register"></i>
Kasseafstemning
</swp-tab>
</swp-tab-bar>
</swp-kasse-sticky-header>
<!-- Tab Content: Oversigt -->
<swp-tab-content data-tab="oversigt" class="active">
<swp-page-container>
@await Component.InvokeAsync("KasseFilterBar")
@await Component.InvokeAsync("KasseTable")
</swp-page-container>
</swp-tab-content>
<!-- Tab Content: Dagens Afstemning -->
<swp-tab-content data-tab="afstemning">
<swp-page-container>
<swp-kasse-grid>
<swp-kasse-column>
@await Component.InvokeAsync("KasseDagensTal")
@await Component.InvokeAsync("KasseKontanter")
@await Component.InvokeAsync("KasseDifference")
</swp-kasse-column>
<swp-kasse-column>
@await Component.InvokeAsync("KasseDagsoplysninger")
@await Component.InvokeAsync("KasseNote")
@await Component.InvokeAsync("KasseGodkendelse")
</swp-kasse-column>
</swp-kasse-grid>
<swp-system-note>Systemet gemmer hvornår og af hvem der er godkendt enkelt kontrolspor.</swp-system-note>
</swp-page-container>
</swp-tab-content>

View file

@ -0,0 +1,10 @@
using Microsoft.AspNetCore.Mvc.RazorPages;
namespace PlanTempus.Application.Features.Kasse.Pages;
public class IndexModel : PageModel
{
public void OnGet()
{
}
}