3 Commits
Author SHA1 Message Date
MarcoEandClaude Opus 5.5 495f335b72 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 <noreply@anthropic.com>
2026-10-29 15:40:20 +01:00
MarcoEandClaude Opus 5.5 ed7c28feac 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 <noreply@anthropic.com>
2026-10-29 15:40:20 +01:00
MarcoE f59c8d3aaf Finish v1.2.3(9) 2026-10-21 08:51:50 +02:00
4 changed files with 24 additions and 14 deletions

No files matched your search

+3 -3
View File
@@ -116,12 +116,12 @@
<ItemGroup>
<PackageReference Include="CommunityToolkit.Maui" Version="14.1.0" />
<PackageReference Include="CommunityToolkit.Mvvm" Version="8.4.2" />
<PackageReference Include="IntegryApiClient.MAUI" Version="2.0.1" />
<PackageReference Include="Microsoft.Extensions.Logging" Version="10.0.7" />
<PackageReference Include="IntegryApiClient.MAUI" Version="2.6.0" />
<PackageReference Include="Microsoft.Extensions.Logging" Version="10.0.8" />
<PackageReference Include="Microsoft.Maui.Controls" Version="10.0.51" />
<PackageReference Include="Microsoft.Maui.Controls.Compatibility" Version="10.0.51" />
<PackageReference Include="Microsoft.AspNetCore.Components.WebView.Maui" Version="10.0.51" />
<PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="10.0.7" />
<PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="10.0.8" />
<PackageReference Include="Sentry.Maui" Version="6.4.1" />
<PackageReference Include="SkiaSharp" Version="3.119.2" />
</ItemGroup>
@@ -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;
StateHasChanged();
});
if (modal is { Canceled: false, Data: List<ArticoliInGrigliaDto> articoliSelezionati })
{
Scheda.Articoli.InsertRange(0, articoliSelezionati.ConvertAll(x => new SchedaArticolo
// 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
})
);
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)
+2 -2
View File
@@ -11,13 +11,13 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="IntegryApiClient.Core" Version="2.0.1" />
<PackageReference Include="IntegryApiClient.Core" Version="2.6.0" />
<PackageReference Include="Microsoft.AspNetCore.Components.Web" Version="10.0.7" />
<PackageReference Include="CommunityToolkit.Mvvm" Version="8.4.2" />
<PackageReference Include="MudBlazor" Version="9.0.0" />
<PackageReference Include="CodeBeam.MudBlazor.Extensions" Version="9.0.1" />
<PackageReference Include="Sentry" Version="6.4.1" />
<PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="8.17.0" />
<PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="8.18.0" />
<PackageReference Include="Microsoft.AspNetCore.Components.Authorization" Version="10.0.7" />
<PackageReference Include="Microsoft.Maui.Essentials" Version="10.0.51" />
</ItemGroup>
+1 -1
View File
@@ -7,7 +7,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="IntegryApiClient.Blazor" Version="2.0.1" />
<PackageReference Include="IntegryApiClient.Blazor" Version="2.6.0" />
<PackageReference Include="Microsoft.AspNetCore.Components.Authorization" Version="10.0.7" />
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="10.0.7" />
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="10.0.7" />