From 30d2984add0089d040c973c9bb91677b789dbf6b Mon Sep 17 00:00:00 2001
From: Piotr Kus
Date: Tue, 17 Jun 2025 22:05:15 +0200
Subject: [PATCH] * Further improvements
---
.../Controllers/WzRowMeyleController.cs | 7 +
.../Components/Pages/WarehousePackList.razor | 133 ++++++++++--------
OrdersManagement/Models/TransactionModel.cs | 29 ++++
OrdersManagement/Services/WarehouseService.cs | 14 +-
.../Services/IMaterialTransactionService.cs | 1 +
.../Services/MaterialTransactionService.cs | 7 +
6 files changed, 133 insertions(+), 58 deletions(-)
create mode 100644 OrdersManagement/Models/TransactionModel.cs
diff --git a/FaKrosnoApi/Controllers/WzRowMeyleController.cs b/FaKrosnoApi/Controllers/WzRowMeyleController.cs
index 97d7305..265176d 100644
--- a/FaKrosnoApi/Controllers/WzRowMeyleController.cs
+++ b/FaKrosnoApi/Controllers/WzRowMeyleController.cs
@@ -41,6 +41,13 @@ public class WzRowMeyleController(IWzRowMeyleService service, IMaterialTransacti
return Ok(materialTransaction);
}
+ [HttpGet("transactions-with-part-number")]
+ public async Task> GetTransactionsWithPartNumber()
+ {
+ IEnumerable materialTransactions = await materialTransactionService.GetWithPartNumber();
+ return Ok(materialTransactions);
+ }
+
[HttpPut]
public async Task UpdateRows([FromBody] IEnumerable rows)
{
diff --git a/OrdersManagement/Components/Pages/WarehousePackList.razor b/OrdersManagement/Components/Pages/WarehousePackList.razor
index 7103e87..8237e42 100644
--- a/OrdersManagement/Components/Pages/WarehousePackList.razor
+++ b/OrdersManagement/Components/Pages/WarehousePackList.razor
@@ -30,9 +30,6 @@
Zeskanowana wartość:
- Zeskanowane wartości:
-
Błąd: Nie Wszystkie linie mają wypełniony NUMER PALETY . Packing List nie zostanie
wygenerowany!
}
+ else if (!_notValidatedNumber)
+ {
+ Błąd: Proszę zeskanować poprawny Numer Partii SL (istniejący w tabeli) lub poprawny numer Partii Meyle zaczynający się od @($"{DateTime.Now.Year - 2001}X") !
+ }
+
+
+
+
+
+
+
+
+
+
+ Błąd: Proszę zeskanować poprawny Numer Partii SL (istniejący w tabeli) lub poprawny numer Partii Meyle zaczynający się od @($"{DateTime.Now.Year - 2000}X") !
@@ -120,21 +132,22 @@
[Parameter] public Guid WzHeader { get; set; }
private SfGrid _grid;
- private List WzRowsMeyle { get; set; } = new List();
+ private List WzRowsMeyle { get; set; } = new();
+ private IDictionary> TransactionModelsByPartNumber { get; set; } = new Dictionary>();
+ private List ChangedRecords = new();
private WzHeaderDto _wzHeader;
private SfTextBox _scanner;
private WzRowMeyleDto? SelectedRow { get; set; }
private bool _isValid;
+ private bool _notValidatedNumber;
private bool Visibility { get; set; }
+ private bool VisibilityValidation { get; set; }
private string? EmailAddresses { get; set; } = string.Empty;
private string PalletNumber { get; set; } = "0";
- private string ScannedValues { get; set; } = string.Empty;
-
- private IDictionary ScannedValuesWithItems { get; set; } = new Dictionary();
private string LastScannedValue { get; set; } = string.Empty;
private string ScannedValue { get; set; } = string.Empty;
@@ -142,6 +155,7 @@
private void HideModal()
{
Visibility = false;
+ VisibilityValidation = false;
}
protected override async Task OnAfterRenderAsync(bool firstRender)
@@ -150,15 +164,9 @@
{
_wzHeader = await WarehouseService.GetWzHeaderByIdAsync(WzHeader);
WzRowsMeyle = (await WarehouseService.GetWzRowsByWzHeaderId(WzHeader)).ToList();
-
- WzRowsMeyle.ToList().ForEach(x => ScannedValuesWithItems.Add(new RowMeyleModel
- {
- ItemNumber = x.ItemNumber.Replace(" ", "").Replace("-", ""),
- PartNumberSl = x.PartNumberSl,
- TransactionNumber = x.TransactionNumber,
- WzNumber = x.WzNumber
- }, null));
-
+
+ TransactionModelsByPartNumber = await GetTransactionModels();
+
EmailAddresses = _wzHeader.EmailAddresses;
await _scanner.FocusAsync();
@@ -167,29 +175,15 @@
}
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)
+ if (ChangedRecords.Any())
{
- WzRowMeyleDto rowMeyleDto = WzRowsMeyle.First(r => r.ItemNumber.Replace(" ", "").Replace("-", "").Trim() == scannedValueWithNotNullValue.Key.ItemNumber && r.PartNumberSl == scannedValueWithNotNullValue.Key.PartNumberSl && r.WzNumber == scannedValueWithNotNullValue.Key.WzNumber);
-
- rowMeyleDto.PalletNumber = int.Parse(PalletNumber);
- rowMeyleDto.PartNumber = scannedValueWithNotNullValue.Value;
-
- changedRecords.Add(rowMeyleDto);
- }
-
- if (changedRecords.Any())
- {
- await UpdateRows(changedRecords);
+ await UpdateRows(ChangedRecords);
}
await _grid.EndEditAsync();
@@ -223,55 +217,75 @@
private async Task ScanValue(ChangedEventArgs obj)
{
+ _notValidatedNumber = false;
+
if (string.IsNullOrWhiteSpace(obj.Value)) return;
- MaterialTransactionDto? materialTransactionByPartNumber = await GetMaterialTransactionByPartNumber(ScannedValue).ConfigureAwait(false);
+ TransactionModelsByPartNumber.TryGetValue(obj.Value.Trim(), out List? materialTransactionsByPartNumber);
+
+ TransactionModel? materialTransactionByPartNumber = materialTransactionsByPartNumber?.FirstOrDefault();
if (materialTransactionByPartNumber != null)
{
- var rowIndex = WzRowsMeyle.FindIndex(x => x.FaIndex == materialTransactionByPartNumber.Item && x.Quantity == materialTransactionByPartNumber.Qty);
- rowIndex = WzRowsMeyle.FindIndex(x => x.FaIndex == "FA24278.18" && x.Quantity == 70);
+ var rowIndex = WzRowsMeyle.FindIndex(x => x.FaIndex == materialTransactionByPartNumber.ItemNumber && x.Quantity == materialTransactionByPartNumber.Quantity);
+ rowIndex = WzRowsMeyle.FindIndex(x => x.FaIndex == "FA23956.18" && x.Quantity == 130);
+
+ SelectedRow = WzRowsMeyle[rowIndex];
+
+ SelectedRow.PartNumberSl = ScannedValue;
+
+ 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).ConfigureAwait(false);
+ await _grid.GoToPageAsync(targetPage);
rowIndex %= pageSize;
}
-
- await _grid.SelectRowAsync(rowIndex).ConfigureAwait(false);
- await _grid.ScrollIntoViewAsync(rowIndex: rowIndex).ConfigureAwait(false);
- await _grid.FocusAsync().ConfigureAwait(false);
-
- SelectedRow = WzRowsMeyle[rowIndex];
+
+ await _grid.SelectRowAsync(rowIndex);
+ await _grid.ScrollIntoViewAsync(rowIndex: rowIndex);
+ await _grid.FocusAsync();
+
+ ChangedRecords.Clear();
}
else if (ValidateScannedValue(obj.Value) && SelectedRow != null)
{
SelectedRow.PartNumber = obj.Value.Trim();
- await InvokeAsync(StateHasChanged).ConfigureAwait(false);
- await _grid.Refresh().ConfigureAwait(false);
+
+ if (ChangedRecords.All(x => x.TransactionNumber != SelectedRow.TransactionNumber))
+ {
+ ChangedRecords.Add(SelectedRow);
+ }
+
+ await SaveChanges();
+ await InvokeAsync(StateHasChanged);
+ await _grid.Refresh();
+
+ ChangedRecords.Clear();
}
else
{
+ _notValidatedNumber = true;
+ VisibilityValidation = true;
+
ScannedValue = obj.Value.Trim();
SelectedRow = null;
}
- // if (ScannedValuesWithItems.All(x => x.Key.ItemNumber != ScannedValue.Replace(" ", "").Trim()) && ScannedValuesWithItems.Any(x => x.Key.ItemNumber == LastScannedValue.Replace(" ", "").Trim()))
- // {
- // RowMeyleModel key = ScannedValuesWithItems.First(x => x.Key.ItemNumber == LastScannedValue).Key;
- // ScannedValuesWithItems[key] = ScannedValue.Trim();
- // ScannedValues += $"{ScannedValue}\n";
- // }
- // else if (!string.IsNullOrWhiteSpace(ScannedValue))
- // {
- // ScannedValues += $"{ScannedValue}: ";
- // }
-
LastScannedValue = ScannedValue;
ScannedValue = string.Empty;
+
+ await _scanner.FocusAsync();
}
private bool ValidateScannedValue(string scannedValue)
@@ -290,12 +304,17 @@
return materialTransaction;
}
+ private async Task>> GetTransactionModels()
+ {
+ return await WarehouseService.GetTransactionsModels();
+ }
+
private async Task UpdateRows(IList changedRecords)
{
await WarehouseService.UpdateWzRowsMeyleAsync(changedRecords);
WzRowsMeyle = (await WarehouseService.GetWzRowsByWzHeaderId(WzHeader)).ToList();
- StateHasChanged();
+ await InvokeAsync(StateHasChanged);
await _grid.Refresh();
}
}
\ No newline at end of file
diff --git a/OrdersManagement/Models/TransactionModel.cs b/OrdersManagement/Models/TransactionModel.cs
new file mode 100644
index 0000000..5348642
--- /dev/null
+++ b/OrdersManagement/Models/TransactionModel.cs
@@ -0,0 +1,29 @@
+namespace OrdersManagement.Models;
+
+public class TransactionModel : IEquatable
+{
+ public string? PartNumber { get; set; }
+ public string? ItemNumber { get; set; }
+ public decimal? Quantity { get; set; }
+
+
+ public bool Equals(TransactionModel? other)
+ {
+ if (other is null) return false;
+ if (ReferenceEquals(this, other)) return true;
+ return PartNumber == other.PartNumber;
+ }
+
+ 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((TransactionModel)obj);
+ }
+
+ public override int GetHashCode()
+ {
+ return PartNumber.GetHashCode();
+ }
+}
\ No newline at end of file
diff --git a/OrdersManagement/Services/WarehouseService.cs b/OrdersManagement/Services/WarehouseService.cs
index f9321ae..c05c99f 100644
--- a/OrdersManagement/Services/WarehouseService.cs
+++ b/OrdersManagement/Services/WarehouseService.cs
@@ -1,5 +1,6 @@
using System.Net;
using System.Web;
+using OrdersManagement.Models;
using SytelineSaAppEfDataModel.Dtos;
namespace OrdersManagement.Services;
@@ -100,7 +101,18 @@ public class WarehouseService(IHttpClientFactory httpClientFactory)
response.EnsureSuccessStatusCode();
return await response.Content.ReadFromJsonAsync>();
}
-
+
+ public async Task>> GetTransactionsModels()
+ {
+ var response = await _httpClient.GetAsync($"api/WzRowMeyle/transactions-with-part-number");
+ response.EnsureSuccessStatusCode();
+ IEnumerable materialTransactions =
+ await response.Content.ReadFromJsonAsync>();
+
+ return materialTransactions.GroupBy(x => x.NR_KARTY_KONTROLNEJ).ToDictionary(x => x.Key ?? "",
+ y => y.Select(z => new TransactionModel() { ItemNumber = z.Item, PartNumber = z.NR_KARTY_KONTROLNEJ, Quantity = z.Qty }).ToList());
+ }
+
public async Task UpdateWzRowsMeyleAsync(IEnumerable wzRowsMeyle)
{
if (wzRowsMeyle == null || !wzRowsMeyle.Any())
diff --git a/SytelineSaAppEfDataModel/Services/IMaterialTransactionService.cs b/SytelineSaAppEfDataModel/Services/IMaterialTransactionService.cs
index ccae08a..b7709ce 100644
--- a/SytelineSaAppEfDataModel/Services/IMaterialTransactionService.cs
+++ b/SytelineSaAppEfDataModel/Services/IMaterialTransactionService.cs
@@ -11,4 +11,5 @@ public interface IMaterialTransactionService
Task> GetOrderNumbersByWz(ISet wzNumbers);
Task> GetByCustomerNumber(string customerNumber, int customerSequence);
Task GetByPartNumber(string partNumber);
+ Task> GetWithPartNumber();
}
\ No newline at end of file
diff --git a/SytelineSaAppEfDataModel/Services/MaterialTransactionService.cs b/SytelineSaAppEfDataModel/Services/MaterialTransactionService.cs
index 46e5ffb..2ff8933 100644
--- a/SytelineSaAppEfDataModel/Services/MaterialTransactionService.cs
+++ b/SytelineSaAppEfDataModel/Services/MaterialTransactionService.cs
@@ -90,4 +90,11 @@ public class MaterialTransactionService(SytelineSaAppDbContext context, IMapper
.Where(x => x.NR_KARTY_KONTROLNEJ == partNumber)
.Select(x => mapper.Map(x)).FirstOrDefaultAsync();
}
+
+ public async Task> GetWithPartNumber()
+ {
+ return await context.MaterialTransactions
+ .Where(x => x.NR_KARTY_KONTROLNEJ != null)
+ .Select(x => mapper.Map(x)).ToListAsync();
+ }
}
\ No newline at end of file