From d3e6c815ac0fcc8172078c4b8c9ef92db8233604 Mon Sep 17 00:00:00 2001 From: Piotr Kus Date: Sun, 29 Jun 2025 09:50:13 +0200 Subject: [PATCH] * Further improvements of scanning data --- .../Pages/Shared/ScheduleOrdersGrid.razor | 2 +- .../Components/Pages/WarehousePackList.razor | 222 ++++++++++++------ 2 files changed, 149 insertions(+), 75 deletions(-) diff --git a/OrdersManagement/Components/Pages/Shared/ScheduleOrdersGrid.razor b/OrdersManagement/Components/Pages/Shared/ScheduleOrdersGrid.razor index d1a4194..62e5425 100644 --- a/OrdersManagement/Components/Pages/Shared/ScheduleOrdersGrid.razor +++ b/OrdersManagement/Components/Pages/Shared/ScheduleOrdersGrid.razor @@ -210,7 +210,7 @@ private void OnRowDataBound(RowDataBoundEventArgs args) { - if (args.Data.QtyType == "83" || args.Data.QtyType == "84") + if (new[] { "54", "83", "84" }.Any(x => x == args.Data.QtyType)) { args.Row.AddClass(["highlight-red"]); } diff --git a/OrdersManagement/Components/Pages/WarehousePackList.razor b/OrdersManagement/Components/Pages/WarehousePackList.razor index fefa77e..1bbf3a8 100644 --- a/OrdersManagement/Components/Pages/WarehousePackList.razor +++ b/OrdersManagement/Components/Pages/WarehousePackList.razor @@ -1,4 +1,5 @@ @page "/Warehouse/PackList/{WzHeader:guid}" +@using System.Diagnostics @using OrdersManagement.Models @using Syncfusion.Blazor.Cards @using Syncfusion.Blazor.Grids @@ -6,6 +7,7 @@ @using Syncfusion.Blazor.Navigations @using Syncfusion.Blazor.Popups @using Syncfusion.Blazor.Inputs +@using Action = System.Action @inject WarehouseService WarehouseService @@ -22,6 +24,12 @@ CssClass="e-outline"/> + + + + + + @@ -64,8 +72,6 @@ HeaderText="Ilość w Dostawie" Width="80"> - -

Błąd skanowania! Wystąpił jeden z wyjątków:

+

Błąd skanowania! Wystąpił jeden z wyjątków (Zeskanowana wartość '@ScannedValue'):

  • Zeskanowano niepoprawny Numer Partii SL (nieistniejący w tabeli)

  • Zeskanowano niepoprawny numer Partii Meyle (niezaczynający się od @($"{DateTime.Now.Year - 2000}X"))

  • -
  • Numer Palety nie jest większy niż 0

  • +
  • Numer Palety nie jest większy niż 0 (aktualnie wybrany numer palety: '@PalletNumber')

@@ -156,7 +162,10 @@ private SfTextBox _scanner; private WzRowMeyleDto? SelectedRow { get; set; } + private List SelectedRows { get; set; } = new(); + private string WzNumber { get; set; } = string.Empty; + private bool _isValid; private bool Visibility { get; set; } @@ -178,6 +187,11 @@ Visibility = false; VisibilityValidation = false; VisibilityLineSplitter = false; + + LastScannedValue = ScannedValue; + ScannedValue = string.Empty; + + _scanner.FocusAsync(); } protected override async Task OnAfterRenderAsync(bool firstRender) @@ -191,6 +205,8 @@ EmailAddresses = _wzHeader.EmailAddresses; + WzNumber = _wzHeader.WzNumbers ?? string.Empty; + await _scanner.FocusAsync(); StateHasChanged(); } @@ -237,91 +253,51 @@ Visibility = true; } - private async Task ScanValue(ChangedEventArgs obj) + private void ScanValue(ChangedEventArgs obj) { if (string.IsNullOrWhiteSpace(obj.Value)) return; + if (int.Parse(PalletNumber) <= 0) + { + ShowValidationMessage(); + return; + } - int palletNumber = int.Parse(PalletNumber); + ScannedValue = obj.Value.Trim(); + + StateHasChanged(); TransactionModelsByPartNumber.TryGetValue(obj.Value.Trim(), out List? materialTransactionsByPartNumber); - TransactionModel? materialTransactionByPartNumber = materialTransactionsByPartNumber?.FirstOrDefault(); + if (materialTransactionByPartNumber == null && IsValidScannedValue(obj.Value)) + { + FillMeylePartNumber(ScannedValue); + + LastScannedValue = ScannedValue; + ScannedValue = string.Empty; + + return; + } + if (materialTransactionByPartNumber != null) { - var rowIndex = WzRowsMeyle.FindIndex(x => x.FaIndex == materialTransactionByPartNumber.ItemNumber && x.Quantity == materialTransactionByPartNumber.Quantity); - //rowIndex = WzRowsMeyle.FindIndex(x => x.FaIndex == "FA23956.18" && x.Quantity == 130); - - if (rowIndex == -1 || palletNumber <= 0) - { - VisibilityValidation = true; - LastScannedValue = ScannedValue; - ScannedValue = string.Empty; - - await _scanner.FocusAsync(); - - return; - } - - SelectedRow = WzRowsMeyle[rowIndex]; - - SelectedRow.PartNumberSl = ScannedValue; - SelectedRow.PalletNumber = palletNumber; - - if (ChangedRecords.All(x => x.TransactionNumber != SelectedRow.TransactionNumber)) - { - ChangedRecords.Add(SelectedRow); - } - - await SaveChanges(); - await InvokeAsync(StateHasChanged); - await _grid.Refresh(); - - if (_grid.AllowPaging) - { - int pageSize = _grid.PageSettings.PageSize; - int targetPage = (rowIndex / pageSize) + 1; - await _grid.GoToPageAsync(targetPage); - - rowIndex %= pageSize; - } - - await _grid.SelectRowAsync(rowIndex); - await _grid.ScrollIntoViewAsync(rowIndex: rowIndex); - await _grid.FocusAsync(); - - ChangedRecords.Clear(); + SelectedRows.Clear(); + FillFaPartNumberAndPalletNumber(materialTransactionByPartNumber, obj.Value.Trim()); } - else if (ValidateScannedValue(obj.Value) && SelectedRow != null) + + if (materialTransactionByPartNumber == null) { - SelectedRow.PartNumber = obj.Value.Trim(); - - if (ChangedRecords.All(x => x.TransactionNumber != SelectedRow.TransactionNumber)) - { - ChangedRecords.Add(SelectedRow); - } - - await SaveChanges(); - await InvokeAsync(StateHasChanged); - await _grid.Refresh(); - - ChangedRecords.Clear(); + ShowValidationMessage(); + return; } - else - { - VisibilityValidation = true; - - ScannedValue = obj.Value.Trim(); - SelectedRow = null; - } - + LastScannedValue = ScannedValue; ScannedValue = string.Empty; - - await _scanner.FocusAsync(); + + _scanner.FocusAsync(); } - private bool ValidateScannedValue(string scannedValue) + private bool IsValidScannedValue(string scannedValue) { int year = DateTime.Now.Year - 2000; @@ -330,6 +306,104 @@ return scannedValue.StartsWith(format); } + private void FillMeylePartNumber(string scannedValue) + { + if (SelectedRow != null) + { + SelectedRow.PartNumber = scannedValue; + ChangedRecords.Add(SelectedRow); + } + + foreach (WzRowMeyleDto wzRowMeyleDto in SelectedRows) + { + wzRowMeyleDto.PartNumber = scannedValue; + ChangedRecords.Add(wzRowMeyleDto); + } + + SaveChanges(); + InvokeAsync(StateHasChanged); + _grid.Refresh(); + _scanner.FocusAsync(); + ChangedRecords.Clear(); + } + + private void FillFaPartNumberAndPalletNumber(TransactionModel materialTransactionByPartNumber, string scannedValue) + { + var rowIndex = WzRowsMeyle.FindIndex(x => x.FaIndex == materialTransactionByPartNumber.ItemNumber && x.Quantity == materialTransactionByPartNumber.Quantity); + + switch (rowIndex) + { + case -1 when int.Parse(PalletNumber) <= 0: + ShowValidationMessage(); + LastScannedValue = ScannedValue; + ScannedValue = string.Empty; + return; + case -1: + { + SelectedRows = WzRowsMeyle.Where(x => x.FaIndex == materialTransactionByPartNumber.ItemNumber).ToList(); + + if (SelectedRows.Count == 0) + { + ShowValidationMessage(); + return; + } + + foreach (WzRowMeyleDto wzRowMeyleDto in SelectedRows) + { + wzRowMeyleDto.PartNumberSl = scannedValue; + ChangedRecords.Add(wzRowMeyleDto); + } + + break; + } + default: + { + SelectedRow = WzRowsMeyle[rowIndex]; + + SelectedRow.PartNumberSl = ScannedValue; + SelectedRow.PalletNumber = int.Parse(PalletNumber); + + if (ChangedRecords.All(x => x.TransactionNumber != SelectedRow.TransactionNumber)) + { + ChangedRecords.Add(SelectedRow); + } + + FocusGridRow(rowIndex); + break; + } + } + + SaveChanges(); + InvokeAsync(StateHasChanged); + _grid.Refresh(); + _scanner.FocusAsync(); + ChangedRecords.Clear(); + } + + private void FocusGridRow(int rowIndex) + { + if (_grid.AllowPaging) + { + int pageSize = _grid.PageSettings.PageSize; + int targetPage = (rowIndex / pageSize) + 1; + _grid.GoToPageAsync(targetPage); + + rowIndex %= pageSize; + } + + _grid.SelectRowAsync(rowIndex); + _grid.ScrollIntoViewAsync(rowIndex: rowIndex); + _grid.FocusAsync(); + } + + private void ShowValidationMessage() + { + VisibilityValidation = true; + + ChangedRecords.Clear(); + _scanner.FocusAsync(); + } + private async Task>> GetTransactionModels() { return await WarehouseService.GetTransactionsModels(); @@ -360,7 +434,7 @@ OrderNumber = SelectedRow.OrderNumber, PalletNumber = SelectedRow.PalletNumber, WzNumber = SelectedRow.WzNumber, - TransactionNumber = SelectedRow.TransactionNumber + TransactionNumber = SelectedRow.TransactionNumber += 10000 }; WzRowsMeyle.Add(splitRow);