@page "/Warehouse/PackList/{WzHeader:guid}" @using OrdersManagement.Models @using Syncfusion.Blazor.Cards @using Syncfusion.Blazor.Grids @using SytelineSaAppEfDataModel.Dtos @using Syncfusion.Blazor.Navigations @using Syncfusion.Blazor.Popups @using Syncfusion.Blazor.Inputs @inject WarehouseService WarehouseService

Packing List

@if (_isValid) {

Packing List został wygenerowany i wysłany!

} 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 skanowania! Wystąpił jeden z wyjątków:

  • 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

FA Krosno Manager © @(DateTime.Now.Year)
@code { [Parameter] public Guid WzHeader { get; set; } private SfGrid _grid; 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 Visibility { get; set; } private bool VisibilityValidation { get; set; } private bool VisibilityLineSplitter { get; set; } private string? EmailAddresses { get; set; } = string.Empty; private string PalletNumber { get; set; } = "0"; private string LastScannedValue { get; set; } = string.Empty; private string ScannedValue { get; set; } = string.Empty; private string NewQuantity { get; set; } = "0"; private bool IsDisabled => SelectedRow == null; private void HideModal() { Visibility = false; VisibilityValidation = false; VisibilityLineSplitter = false; } protected override async Task OnAfterRenderAsync(bool firstRender) { if (firstRender) { _wzHeader = await WarehouseService.GetWzHeaderByIdAsync(WzHeader); WzRowsMeyle = (await WarehouseService.GetWzRowsByWzHeaderId(WzHeader)).ToList(); TransactionModelsByPartNumber = await GetTransactionModels(); EmailAddresses = _wzHeader.EmailAddresses; await _scanner.FocusAsync(); StateHasChanged(); } } private async Task SaveChanges() { if (!string.IsNullOrWhiteSpace(EmailAddresses)) { await WarehouseService.AddEmailsToWzHeaderAsync(WzHeader, EmailAddresses); } if (ChangedRecords.Any()) { await UpdateRows(ChangedRecords); } await _grid.EndEditAsync(); } private async Task OnBatchSave(BeforeBatchSaveArgs obj) { var changes = obj.BatchChanges; List changedRecords = changes.ChangedRecords; if (!changedRecords.Any()) return; await UpdateRows(changedRecords); } private async Task ExportXls() { int count = WzRowsMeyle.Count(x => x.PalletNumber == null); _isValid = count == 0; _isValid = _isValid && !string.IsNullOrWhiteSpace(EmailAddresses); if (_isValid) { await WarehouseService.AddEmailsToWzHeaderAsync(WzHeader, EmailAddresses); await WarehouseService.GenerateXlsForMeyleAsync(WzHeader); } Visibility = true; } private async Task ScanValue(ChangedEventArgs obj) { if (string.IsNullOrWhiteSpace(obj.Value)) return; int palletNumber = int.Parse(PalletNumber); TransactionModelsByPartNumber.TryGetValue(obj.Value.Trim(), out List? materialTransactionsByPartNumber); TransactionModel? materialTransactionByPartNumber = materialTransactionsByPartNumber?.FirstOrDefault(); 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(); } else if (ValidateScannedValue(obj.Value) && SelectedRow != 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(); } else { VisibilityValidation = true; ScannedValue = obj.Value.Trim(); SelectedRow = null; } LastScannedValue = ScannedValue; ScannedValue = string.Empty; await _scanner.FocusAsync(); } private bool ValidateScannedValue(string scannedValue) { int year = DateTime.Now.Year - 2000; string format = $"{year}X"; return scannedValue.StartsWith(format); } private async Task>> GetTransactionModels() { return await WarehouseService.GetTransactionsModels(); } private async Task UpdateRows(IList changedRecords) { await WarehouseService.UpdateWzRowsMeyleAsync(changedRecords); WzRowsMeyle = (await WarehouseService.GetWzRowsByWzHeaderId(WzHeader)).ToList(); await InvokeAsync(StateHasChanged); await _grid.Refresh(); } private async Task SplitLine(MouseEventArgs arg) { int newQuantity = int.Parse(NewQuantity); if (newQuantity > 0 && SelectedRow != null) { WzRowMeyleDto splitRow = new WzRowMeyleDto { ID = Guid.NewGuid(), FK_Header = SelectedRow.FK_Header, Quantity = newQuantity, FaIndex = SelectedRow.FaIndex, ItemNumber = SelectedRow.ItemNumber, OrderNumber = SelectedRow.OrderNumber, PalletNumber = SelectedRow.PalletNumber, WzNumber = SelectedRow.WzNumber, TransactionNumber = SelectedRow.TransactionNumber }; WzRowsMeyle.Add(splitRow); SelectedRow.Quantity -= newQuantity; ChangedRecords.Add(SelectedRow); await WarehouseService.CreateWzRowsMeyleAsync(new List { splitRow }); await UpdateRows(ChangedRecords); } VisibilityLineSplitter = false; } private void ShowSplitDialog(ClickEventArgs obj) { VisibilityLineSplitter = true; NewQuantity = "0"; } private void OnRowSelected(RowSelectEventArgs obj) { SelectedRow = obj.Data; } }