From 9cb7210aa54a46a40f2a998cc774fbd6b0fe3d58 Mon Sep 17 00:00:00 2001 From: Piotr Kus Date: Thu, 12 Jun 2025 21:18:37 +0200 Subject: [PATCH] * Added TransactionNumber to have unique values in Dictionary * Added Saving scanned values --- .../Components/Pages/Warehouse.razor | 3 +- .../Components/Pages/WarehousePackList.razor | 87 ++++++++++++++----- OrdersManagement/Models/RowMeyleModel.cs | 28 ++++++ .../Dtos/WzRowMeyleDto.cs | 1 + .../Entities/WzRowMeyle.cs | 1 + .../SytelineSaAppDbContext.cs | 5 ++ 6 files changed, 101 insertions(+), 24 deletions(-) create mode 100644 OrdersManagement/Models/RowMeyleModel.cs diff --git a/OrdersManagement/Components/Pages/Warehouse.razor b/OrdersManagement/Components/Pages/Warehouse.razor index d858eb3..d76474c 100644 --- a/OrdersManagement/Components/Pages/Warehouse.razor +++ b/OrdersManagement/Components/Pages/Warehouse.razor @@ -206,7 +206,8 @@ ItemNumber = item.CustItem, OrderNumber = customerOrder.CustPo, WzNumber = materialTransactionDto.MTGroupNum ?? string.Empty, - FK_Header = wzHeader.ID + FK_Header = wzHeader.ID, + TransactionNumber = (int?)materialTransactionDto.TransNum ?? 0 }); } diff --git a/OrdersManagement/Components/Pages/WarehousePackList.razor b/OrdersManagement/Components/Pages/WarehousePackList.razor index 7c0035d..05d98ef 100644 --- a/OrdersManagement/Components/Pages/WarehousePackList.razor +++ b/OrdersManagement/Components/Pages/WarehousePackList.razor @@ -1,4 +1,5 @@ @page "/Warehouse/PackList/{WzHeader:guid}" +@using OrdersManagement.Models @using Syncfusion.Blazor.Cards @using Syncfusion.Blazor.Grids @using SytelineSaAppEfDataModel.Dtos @@ -17,17 +18,21 @@ - + - + - + - + Packing List został wygenerowany i wysłany!

} - else if(string.IsNullOrWhiteSpace(EmailAddresses)) + else if (string.IsNullOrWhiteSpace(EmailAddresses)) {

Błąd: Proszę wprowadzić przynajmniej jeden ADRES EMAIL do wysyłki raportu!

} else if (!_isValid) { -

Błąd: Nie Wszystkie linie mają wypełniony NUMER PALETY.
Packing List nie zostanie wygenerowany!

+

Błąd: Nie Wszystkie linie mają wypełniony NUMER PALETY.
Packing List nie zostanie + wygenerowany!

} @@ -99,7 +105,7 @@ - + FA Krosno Manager © @(DateTime.Now.Year) @@ -112,6 +118,7 @@ private SfGrid _grid; private IEnumerable _wzRowsMeyle { get; set; } = new List(); private WzHeaderDto _wzHeader; + private SfTextBox _scanner; private bool _isValid; @@ -121,7 +128,7 @@ private string PalletNumber { get; set; } = "0"; private string ScannedValues { get; set; } = string.Empty; - private IDictionary ScannedValuesWithItems { get; set; } = new Dictionary(); + private IDictionary ScannedValuesWithItems { get; set; } = new Dictionary(); private string LastScannedValue { get; set; } = string.Empty; private string ScannedValue { get; set; } = string.Empty; @@ -137,22 +144,47 @@ { _wzHeader = await WarehouseService.GetWzHeaderByIdAsync(WzHeader); _wzRowsMeyle = await WarehouseService.GetWzRowsByWzHeaderId(WzHeader); - - _wzRowsMeyle.ToList().ForEach(x => ScannedValuesWithItems.Add(x.ItemNumber.Replace(" ", ""), null)); + + _wzRowsMeyle.ToList().ForEach(x => ScannedValuesWithItems.Add(new RowMeyleModel + { + ItemNumber = x.ItemNumber.Replace(" ", "").Replace("-", ""), + TransactionNumber = x.TransactionNumber, + WzNumber = x.WzNumber + }, null)); EmailAddresses = _wzHeader.EmailAddresses; + await _scanner.FocusAsync(); StateHasChanged(); } } private async Task SaveChanges() { + List changedRecords = new List(); + if (!string.IsNullOrWhiteSpace(EmailAddresses)) { await WarehouseService.AddEmailsToWzHeaderAsync(WzHeader, EmailAddresses); } + IDictionary scannedValuesWithNotNullValues = ScannedValuesWithItems.Where(x => x.Value is not null).ToDictionary(x => x.Key, y => y.Value); + + foreach (KeyValuePair scannedValueWithNotNullValue in scannedValuesWithNotNullValues) + { + WzRowMeyleDto rowMeyleDto = _wzRowsMeyle.First(r => r.ItemNumber.Replace(" ", "").Replace("-", "").Trim() == scannedValueWithNotNullValue.Key.ItemNumber && r.TransactionNumber == scannedValueWithNotNullValue.Key.TransactionNumber && r.WzNumber == scannedValueWithNotNullValue.Key.WzNumber); + + rowMeyleDto.PalletNumber = int.Parse(PalletNumber); + rowMeyleDto.PartNumber = scannedValueWithNotNullValue.Value; + + changedRecords.Add(rowMeyleDto); + } + + if (changedRecords.Any()) + { + await UpdateRows(changedRecords); + } + await _grid.EndEditAsync(); } @@ -163,11 +195,7 @@ if (!changedRecords.Any()) return; - await WarehouseService.UpdateWzRowsMeyleAsync(changedRecords); - - _wzRowsMeyle = await WarehouseService.GetWzRowsByWzHeaderId(WzHeader); - StateHasChanged(); - await _grid.Refresh(); + await UpdateRows(changedRecords); } private async Task ExportXls() @@ -186,20 +214,33 @@ Visibility = true; } - private void ScanValue(KeyboardEventArgs obj) + private void ScanValue(ChangedEventArgs obj) { - if (obj.Key != "Enter") return; + if (string.IsNullOrWhiteSpace(obj.Value)) return; - LastScannedValue = ScannedValue.Trim(); - - if (!ScannedValuesWithItems.ContainsKey(ScannedValues.Replace(" ", "").Trim()) && ScannedValuesWithItems.ContainsKey(LastScannedValue.Replace(" ", "").Trim())) + ScannedValue = obj.Value.Replace(" ", "").Replace("-", "").Replace("http://qr.meyle.com/", "").Trim(); + ScannedValue = ScannedValue.Replace("40409100006", "1409100076"); + if (ScannedValuesWithItems.All(x => x.Key.ItemNumber != ScannedValue.Replace(" ", "").Trim()) && ScannedValuesWithItems.Any(x => x.Key.ItemNumber == LastScannedValue.Replace(" ", "").Trim())) { - ScannedValuesWithItems[LastScannedValue] = ScannedValue.Trim(); - ScannedValues += $"{ScannedValue})\n"; + RowMeyleModel key = ScannedValuesWithItems.First(x => x.Key.ItemNumber == LastScannedValue).Key; + ScannedValuesWithItems[key] = ScannedValue.Trim(); + ScannedValues += $"{ScannedValue}\n"; } - else if(!string.IsNullOrWhiteSpace(ScannedValue)) + else if (!string.IsNullOrWhiteSpace(ScannedValue)) { ScannedValues += $"{ScannedValue}: "; } + + LastScannedValue = ScannedValue; + ScannedValue = string.Empty; + } + + private async Task UpdateRows(IList changedRecords) + { + await WarehouseService.UpdateWzRowsMeyleAsync(changedRecords); + + _wzRowsMeyle = await WarehouseService.GetWzRowsByWzHeaderId(WzHeader); + StateHasChanged(); + await _grid.Refresh(); } } \ No newline at end of file diff --git a/OrdersManagement/Models/RowMeyleModel.cs b/OrdersManagement/Models/RowMeyleModel.cs new file mode 100644 index 0000000..365532f --- /dev/null +++ b/OrdersManagement/Models/RowMeyleModel.cs @@ -0,0 +1,28 @@ +namespace OrdersManagement.Models; + +public class RowMeyleModel : IEquatable +{ + public string ItemNumber {get; set;} = string.Empty; + public string WzNumber { get; set; } = string.Empty; + public int? TransactionNumber { get; set; } + + public bool Equals(RowMeyleModel? other) + { + if (other is null) return false; + if (ReferenceEquals(this, other)) return true; + return ItemNumber == other.ItemNumber && WzNumber == other.WzNumber && TransactionNumber == other.TransactionNumber; + } + + public override bool Equals(object? obj) + { + if (obj is null) return false; + if (ReferenceEquals(this, obj)) return true; + if (obj.GetType() != GetType()) return false; + return Equals((RowMeyleModel)obj); + } + + public override int GetHashCode() + { + return HashCode.Combine(ItemNumber, WzNumber, TransactionNumber); + } +} \ No newline at end of file diff --git a/SytelineSaAppEfDataModel/Dtos/WzRowMeyleDto.cs b/SytelineSaAppEfDataModel/Dtos/WzRowMeyleDto.cs index c53f11c..53e6f47 100644 --- a/SytelineSaAppEfDataModel/Dtos/WzRowMeyleDto.cs +++ b/SytelineSaAppEfDataModel/Dtos/WzRowMeyleDto.cs @@ -10,4 +10,5 @@ public class WzRowMeyleDto public int? PalletNumber { get; set; } public string WzNumber { get; set; } public string? PartNumber { get; set; } + public int? TransactionNumber { get; set; } } \ No newline at end of file diff --git a/SytelineSaAppEfDataModel/Entities/WzRowMeyle.cs b/SytelineSaAppEfDataModel/Entities/WzRowMeyle.cs index dfeaffd..679a4f2 100644 --- a/SytelineSaAppEfDataModel/Entities/WzRowMeyle.cs +++ b/SytelineSaAppEfDataModel/Entities/WzRowMeyle.cs @@ -10,6 +10,7 @@ public class WzRowMeyle public int? PalletNumber { get; set; } public string WzNumber { get; set; } public string? PartNumber { get; set; } + public int? TransactionNumber { get; set; } // Navigation property public WzHeader Header { get; set; } diff --git a/SytelineSaAppEfDataModel/SytelineSaAppDbContext.cs b/SytelineSaAppEfDataModel/SytelineSaAppDbContext.cs index da3081d..4397d3a 100644 --- a/SytelineSaAppEfDataModel/SytelineSaAppDbContext.cs +++ b/SytelineSaAppEfDataModel/SytelineSaAppDbContext.cs @@ -995,6 +995,11 @@ namespace SytelineSaAppEfDataModel .HasColumnName("part_number") .HasMaxLength(100) .IsRequired(false); + + entity.Property(e => e.TransactionNumber) + .HasColumnName("trans_num") + .HasColumnType("int") + .IsRequired(false); // Relationship entity.HasOne(e => e.Header)