From ed7c28feacfed2966f7e49011abbb0cc22b91673 Mon Sep 17 00:00:00 2001 From: MarcoE Date: Thu, 29 Oct 2026 15:40:20 +0100 Subject: [PATCH 1/3] Aggiorna IntegryApiClient alla 2.6.0 Con la 2.0.1 il login poteva fallire con WrongAccessTokenJsonException: il token del server non contiene piu' la proprieta' 'web' che la vecchia versione considerava obbligatoria. - IntegryApiClient.Core, .MAUI e .Blazor: 2.0.1 -> 2.6.0. - La 2.6.0 richiede dipendenze piu' recenti, che il restore segnalava come downgrade (NU1605): System.IdentityModel.Tokens.Jwt 8.17.0 -> 8.18.0, Microsoft.Extensions.Logging e .Logging.Debug 10.0.7 -> 10.0.8. Co-Authored-By: Claude Opus 5.5 --- SteUp.Maui/SteUp.Maui.csproj | 6 +++--- SteUp.Shared/SteUp.Shared.csproj | 4 ++-- SteUp.Web/SteUp.Web.csproj | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/SteUp.Maui/SteUp.Maui.csproj b/SteUp.Maui/SteUp.Maui.csproj index 96ca097..0704bd4 100644 --- a/SteUp.Maui/SteUp.Maui.csproj +++ b/SteUp.Maui/SteUp.Maui.csproj @@ -116,12 +116,12 @@ - - + + - + diff --git a/SteUp.Shared/SteUp.Shared.csproj b/SteUp.Shared/SteUp.Shared.csproj index 297ae74..6107cce 100644 --- a/SteUp.Shared/SteUp.Shared.csproj +++ b/SteUp.Shared/SteUp.Shared.csproj @@ -11,13 +11,13 @@ - + - + diff --git a/SteUp.Web/SteUp.Web.csproj b/SteUp.Web/SteUp.Web.csproj index 56b2975..8a71632 100644 --- a/SteUp.Web/SteUp.Web.csproj +++ b/SteUp.Web/SteUp.Web.csproj @@ -7,7 +7,7 @@ - + From 495f335b72341b4cacb927e1bc6d544d44903ce1 Mon Sep 17 00:00:00 2001 From: MarcoE Date: Thu, 29 Oct 2026 15:40:20 +0100 Subject: [PATCH 2/3] Evita articoli persi o doppi con griglia e scanner insieme Nella scheda, scegliendo alcuni articoli dalla griglia e sparandone altri, non tutti i barcode arrivavano al salvataggio. - La selezione dalla griglia modificava Scheda.Articoli da un thread del pool, mentre le scansioni lo fanno sul thread della UI: le due modifiche potevano sovrapporsi e far perdere articoli. Ora passa da InvokeAsync. - La griglia non scartava i barcode gia' sparati, e lo scanner controllava solo il codice letto, non quello restituito dal server (che puo' essere il barcode principale, lo stesso della griglia). Un doppione rompe il @key della lista e il salvataggio locale (indice unico SchedaId+Barcode). Ora entrambi i percorsi aggiungono solo barcode non ancora presenti. Co-Authored-By: Claude Opus 5.5 --- .../Modal/ModalFormScheda.razor | 44 ++++++++++++------- 1 file changed, 27 insertions(+), 17 deletions(-) diff --git a/SteUp.Shared/Components/SingleElements/Modal/ModalFormScheda.razor b/SteUp.Shared/Components/SingleElements/Modal/ModalFormScheda.razor index 5e3de39..f1c9f65 100644 --- a/SteUp.Shared/Components/SingleElements/Modal/ModalFormScheda.razor +++ b/SteUp.Shared/Components/SingleElements/Modal/ModalFormScheda.razor @@ -896,29 +896,32 @@ var modal = await WithChildDialog(() => Dialog.OpenSelectArt(articoli)); + // Gli articoli si aggiungono sul thread della UI, come fanno le scansioni: + // toccare Scheda.Articoli da qui mentre arriva una lettura (o mentre la + // lista viene disegnata) puo' far perdere articoli. await InvokeAsync(() => { OnLoading = false; TextLoading = null; + if (modal is { Canceled: false, Data: List articoliSelezionati }) + { + // Quelli gia' sparati non si aggiungono di nuovo. + Scheda.Articoli.InsertRange(0, articoliSelezionati + .DistinctBy(x => x.Barcode) + .Where(x => !ContainsBarcode(x.Barcode)) + .Select(x => new SchedaArticolo + { + Barcode = x.Barcode, + Descrizione = x.Descrizione + }) + ); + + RecalcDirty(); + } + StateHasChanged(); }); - - if (modal is { Canceled: false, Data: List articoliSelezionati }) - { - Scheda.Articoli.InsertRange(0, articoliSelezionati.ConvertAll(x => new SchedaArticolo - { - Barcode = x.Barcode, - Descrizione = x.Descrizione - }) - ); - - await InvokeAsync(() => - { - RecalcDirty(); - StateHasChanged(); - }); - } }); } @@ -984,7 +987,7 @@ try { if (value is null) return; - if (Scheda.Articoli.Any(x => x.Barcode.Equals(value))) return; + if (ContainsBarcode(value)) return; await InvokeAsync(() => { @@ -999,6 +1002,11 @@ OnLoading = false; StateHasChanged(); + // Il controllo va ripetuto sul barcode restituito: il server puo' rispondere + // con un barcode diverso da quello letto (lo stesso gia' scelto dalla griglia), + // e due letture ravvicinate superano entrambe il controllo iniziale. + if (art != null && ContainsBarcode(art.Barcode)) return; + if (art != null) { Scheda.Articoli.Insert(0, new SchedaArticolo @@ -1032,6 +1040,8 @@ private void OnErrorScan(string? value) => OnError(new Exception(value), value); + private bool ContainsBarcode(string barcode) => Scheda.Articoli.Any(x => x.Barcode.Equals(barcode)); + #endregion private void OnError(Exception? e, string? errorMessage) From 817cd606b62209fd418f68d7e32738ae1df3300d Mon Sep 17 00:00:00 2001 From: MarcoE Date: Thu, 29 Oct 2026 15:48:01 +0100 Subject: [PATCH 3/3] -> 1.2.4 (10) --- 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 0704bd4..99fb7f2 100644 --- a/SteUp.Maui/SteUp.Maui.csproj +++ b/SteUp.Maui/SteUp.Maui.csproj @@ -30,8 +30,8 @@ it.integry.SteUp - 1.2.3 - 9 + 1.2.4 + 10 15.0