From de889ef8c7318fc5540e232ba1bb9f5868f85ff7 Mon Sep 17 00:00:00 2001 From: MarcoE Date: Tue, 29 Sep 2026 10:27:22 +0200 Subject: [PATCH 1/3] Mostra nell'ispezione le bozze senza reparto Co-Authored-By: Claude Opus 5.5 (1M context) --- .../Components/Pages/IspezionePage.razor | 36 ++++++++++++------- .../SingleElements/Card/SchedaCard.razor | 4 +-- 2 files changed, 26 insertions(+), 14 deletions(-) diff --git a/SteUp.Shared/Components/Pages/IspezionePage.razor b/SteUp.Shared/Components/Pages/IspezionePage.razor index 94296bb..0174ae1 100644 --- a/SteUp.Shared/Components/Pages/IspezionePage.razor +++ b/SteUp.Shared/Components/Pages/IspezionePage.razor @@ -157,6 +157,7 @@ @foreach (var group in SchedeGrouped) { var reparto = group.Key; + var senzaReparto = ReferenceEquals(reparto, SenzaReparto); var chiuso = IsCollapsed(reparto); var daInviare = group.Value.CountDaInviare(); @@ -172,7 +173,9 @@
- @if (!IsCompleted) + @* Il gruppo "Senza reparto" raccoglie solo bozze da + sistemare: non ha un "+" ne' un invio suo. *@ + @if (!IsCompleted && !senzaReparto) { @* Da qui la scheda nasce gia' con il suo reparto: e' l'unica differenza con il "+" della barra. *@ @@ -326,13 +329,15 @@ // schermata, non del documento. private readonly HashSet _collapsed = new(StringComparer.OrdinalIgnoreCase); - private bool IsCollapsed(JtbFasiDto reparto) => - reparto.CodJfas is not null && _collapsed.Contains(reparto.CodJfas); + // Il gruppo "Senza reparto" non ha codice: la chiave vuota e' la sua. + private static string CollapseKey(JtbFasiDto reparto) => reparto.CodJfas ?? string.Empty; + + private bool IsCollapsed(JtbFasiDto reparto) => _collapsed.Contains(CollapseKey(reparto)); private void Toggle(JtbFasiDto reparto) { - if (reparto.CodJfas is null) return; - if (!_collapsed.Remove(reparto.CodJfas)) _collapsed.Add(reparto.CodJfas); + var key = CollapseKey(reparto); + if (!_collapsed.Remove(key)) _collapsed.Add(key); } private static string Conteggi(List schede) @@ -542,15 +547,22 @@ StateHasChanged(); }); + // Una bozza si puo' salvare anche senza reparto: senza questo gruppo + // sparirebbe dall'elenco pur restando sul dispositivo e contata fra le bozze. + private static readonly JtbFasiDto SenzaReparto = new() { Descrizione = "Senza reparto" }; + private void GroupSchede() { - SchedeGrouped = SchedeList - .Where(s => s.Reparto != null) - .GroupBy(s => s.CodJfas) - .ToDictionary( - g => g.First().Reparto!, - g => g.ToList() - ); + var grouped = new Dictionary>(); + + // In testa: sono schede a meta' che chiedono di essere completate. + var senzaReparto = SchedeList.FindAll(s => s.Reparto == null); + if (senzaReparto.Count > 0) grouped[SenzaReparto] = senzaReparto; + + foreach (var g in SchedeList.Where(s => s.Reparto != null).GroupBy(s => s.CodJfas)) + grouped[g.First().Reparto!] = g.ToList(); + + SchedeGrouped = grouped; } private void OnSchedaModified(Scheda obj) diff --git a/SteUp.Shared/Components/SingleElements/Card/SchedaCard.razor b/SteUp.Shared/Components/SingleElements/Card/SchedaCard.razor index aefaf54..f1c2411 100644 --- a/SteUp.Shared/Components/SingleElements/Card/SchedaCard.razor +++ b/SteUp.Shared/Components/SingleElements/Card/SchedaCard.razor @@ -16,7 +16,7 @@
-
@Scheda.DescrizioneReparto
+
@(Scheda.DescrizioneReparto ?? "Senza reparto")

@Titolo

@@ -125,7 +125,7 @@ }; private string SemanticLabel => - $"Scheda {Titolo}, reparto {Scheda.DescrizioneReparto}, {SyncState.ToBadge().Label}, {ArticoliLabel}, {FotoLabel}"; + $"Scheda {Titolo}, reparto {Scheda.DescrizioneReparto ?? "non indicato"},{SyncState.ToBadge().Label}, {ArticoliLabel}, {FotoLabel}"; private async Task SetBusy(bool value) { From e524c12a96f528603bede47432622d4a43aa136f Mon Sep 17 00:00:00 2001 From: MarcoE Date: Tue, 29 Sep 2026 10:33:01 +0200 Subject: [PATCH 2/3] Riporta a bozza le schede non inviate senza reparto o motivo Co-Authored-By: Claude Opus 5.5 (1M context) --- .../EntityServices/IspezioniService.cs | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/SteUp.Data/LocalDb/EntityServices/IspezioniService.cs b/SteUp.Data/LocalDb/EntityServices/IspezioniService.cs index cf3a1be..5a9a4b5 100644 --- a/SteUp.Data/LocalDb/EntityServices/IspezioniService.cs +++ b/SteUp.Data/LocalDb/EntityServices/IspezioniService.cs @@ -155,14 +155,29 @@ public class IspezioniService(AppDbContext db) : IIspezioniService await db.SaveChangesAsync(); } - public Task> GetAllSchedeOfIspezioneAsync(string codMdep, DateTime data, string rilevatore) => - db.Schede + public async Task> GetAllSchedeOfIspezioneAsync(string codMdep, DateTime data, string rilevatore) + { + // Le versioni precedenti dell'app hanno lasciato schede non bozza senza + // reparto o motivo: risultano inviabili ma il server le rifiuta, e + // bloccano la conclusione dell'ispezione. Tornano bozze, cosi' il + // rilevatore le completa. Quelle gia' inviate non si toccano. + await db.Schede + .Where(x => x.CodMdep == codMdep && + x.Data == data && + x.Rilevatore == rilevatore && + !x.Bozza && + x.ActivityId == null && + (string.IsNullOrEmpty(x.CodJfas) || string.IsNullOrEmpty(x.ActivityTypeId))) + .ExecuteUpdateAsync(s => s.SetProperty(x => x.Bozza, true)); + + return await db.Schede .AsNoTracking() .Include(s => s.Articoli) .Where(x => x.CodMdep == codMdep && x.Data == data && x.Rilevatore == rilevatore) .ToListAsync(); + } public Task GetSchedaAsync(int schedaId) => db.Schede From 92271e20fb2a3b46b61b61da5616c30b46b337a7 Mon Sep 17 00:00:00 2001 From: MarcoE Date: Tue, 29 Sep 2026 10:34:40 +0200 Subject: [PATCH 3/3] -> v1.2.2 (8) --- SteUp.Maui/SteUp.Maui.csproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/SteUp.Maui/SteUp.Maui.csproj b/SteUp.Maui/SteUp.Maui.csproj index 6fcb45a..55069ac 100644 --- a/SteUp.Maui/SteUp.Maui.csproj +++ b/SteUp.Maui/SteUp.Maui.csproj @@ -30,8 +30,8 @@ it.integry.SteUp - 1.2.1 - 7 + 1.2.2 + 8 15.0