+ @if (!Luogo.IsNullOrEmpty())
+ {
+ @Luogo
+ }
+
+ @if (Aperta)
+ {
+ @* Toccando si riapre l'ispezione di oggi invece di crearne una
+ nuova: meglio dirlo prima del tocco. *@
+
+
+
+ }
+
+
+
+
@code {
[Parameter] public PuntoVenditaDto PuntoVendita { get; set; } = null!;
[Parameter] public EventCallback OnStarting { get; set; }
+ /// Vero se il rilevatore ha gia' un'ispezione aperta oggi su questo punto vendita.
+ [Parameter] public bool Aperta { get; set; }
+
+ private static readonly StatusBadgeHelper.BadgeSpec ApertaBadge =
+ new("info", "ri-play-circle-line", "Ispezione di oggi");
+
// Indirizzo, citta', CAP e provincia su una riga sola con separatore " · ":
// sono metadati, non meritano tre chip che fanno rumore.
private string Luogo => string.Join(" · ", new[]
@@ -30,6 +55,10 @@
}
.Where(x => !x.IsNullOrEmpty()));
+ private string AriaLabel => Aperta
+ ? $"Riprendi l'ispezione di oggi su {PuntoVendita.CodMdep} {PuntoVendita.Descrizione}"
+ : $"Apri ispezione su {PuntoVendita.CodMdep} {PuntoVendita.Descrizione}";
+
private async Task StartInspection()
{
await OnStarting.InvokeAsync();
diff --git a/SteUp.Shared/Components/SingleElements/Modal/ModalSelectShop.razor b/SteUp.Shared/Components/SingleElements/Modal/ModalSelectShop.razor
index 935d4ca..f4ca912 100644
--- a/SteUp.Shared/Components/SingleElements/Modal/ModalSelectShop.razor
+++ b/SteUp.Shared/Components/SingleElements/Modal/ModalSelectShop.razor
@@ -1,6 +1,9 @@
@using SteUp.Shared.Components.Layout
@using SteUp.Shared.Components.SingleElements.Card
@using SteUp.Shared.Core.Dto
+@using SteUp.Shared.Core.Enum
+@using SteUp.Shared.Core.Interface.LocalDb
+@inject IIspezioniService IspezioniService
@*
Scelta del punto vendita: schermata intera, non un riquadro. L'elenco e'
@@ -60,7 +63,9 @@
{
-
+
}
@@ -83,9 +88,30 @@
? null
: FilteredList.Count == 1 ? "1 punto vendita" : $"{FilteredList.Count} punti vendita";
+ // I codici su cui il rilevatore ha gia' un'ispezione aperta oggi. Si legge
+ // una volta sola: toccare una di quelle righe riapre l'ispezione esistente
+ // invece di crearne una nuova, e la riga deve poterlo dire.
+ private HashSet _aperteOggi = [];
+
private void Cancel() => MudDialog.Cancel();
- protected override void OnInitialized() => ApplyFilters();
+ private bool HaIspezioneOggi(PuntoVenditaDto pv) =>
+ pv.CodMdep is not null && _aperteOggi.Contains(pv.CodMdep);
+
+ protected override async Task OnInitializedAsync()
+ {
+ ApplyFilters();
+
+ var oggi = DateTime.Today;
+ var ispezioni = await IspezioniService.GetAllIspezioni(UserSession.User.Username);
+
+ _aperteOggi = ispezioni
+ .Where(x => x.Data.Date == oggi && x.Stato != StatusEnum.Completata && x.CodMdep is not null)
+ .Select(x => x.CodMdep!)
+ .ToHashSet(StringComparer.OrdinalIgnoreCase);
+
+ StateHasChanged();
+ }
private void OnFilterInput(ChangeEventArgs e)
{
diff --git a/SteUp.Shared/wwwroot/css/mudblazor-overrides.css b/SteUp.Shared/wwwroot/css/mudblazor-overrides.css
index 122263f..5643563 100644
--- a/SteUp.Shared/wwwroot/css/mudblazor-overrides.css
+++ b/SteUp.Shared/wwwroot/css/mudblazor-overrides.css
@@ -318,6 +318,27 @@
width: calc(100vw - 48px);
}
+/* La misura da riquadro qui sopra vale per i dialog di conferma. Le schermate
+ aperte a tutto schermo (scelta punto vendita, scelta articoli) sono
+ schermate: devono riempire il display, non restare in una scatola con lo
+ sfondo che si vede ai lati. */
+.mud-dialog.mud-dialog-fullscreen {
+ max-width: 100%;
+ width: 100%;
+ height: 100%;
+ max-height: 100%;
+ margin: 0;
+ border-radius: 0 !important;
+ background-color: var(--workspace);
+}
+
+.mud-dialog.mud-dialog-fullscreen .mud-dialog-content {
+ padding: 0;
+ height: 100%;
+ max-height: 100%;
+ color: var(--ink);
+}
+
.mud-dialog-title {
padding: var(--space-lg) var(--space-lg) 0;
font-family: var(--font-sans);