@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!

}
FA Krosno Manager © @(DateTime.Now.Year)
@code { [Parameter] public Guid WzHeader { get; set; } private SfGrid _grid; private List WzRowsMeyle { get; set; } = new List(); private WzHeaderDto _wzHeader; private SfTextBox _scanner; private WzRowMeyleDto? SelectedRow { get; set; } private bool _isValid; private bool Visibility { 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; private void HideModal() { Visibility = false; } protected override async Task OnAfterRenderAsync(bool firstRender) { if (firstRender) { _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)); 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.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 _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; MaterialTransactionDto? materialTransactionByPartNumber = await GetMaterialTransactionByPartNumber(ScannedValue).ConfigureAwait(false); 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); if (_grid.AllowPaging) { int pageSize = _grid.PageSettings.PageSize; int targetPage = (rowIndex / pageSize) + 1; await _grid.GoToPageAsync(targetPage).ConfigureAwait(false); rowIndex %= pageSize; } await _grid.SelectRowAsync(rowIndex).ConfigureAwait(false); await _grid.ScrollIntoViewAsync(rowIndex: rowIndex).ConfigureAwait(false); await _grid.FocusAsync().ConfigureAwait(false); SelectedRow = WzRowsMeyle[rowIndex]; } else if (ValidateScannedValue(obj.Value) && SelectedRow != null) { SelectedRow.PartNumber = obj.Value.Trim(); await InvokeAsync(StateHasChanged).ConfigureAwait(false); await _grid.Refresh().ConfigureAwait(false); } else { 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; } private bool ValidateScannedValue(string scannedValue) { int year = DateTime.Now.Year - 2000; string format = $"{year}X"; return scannedValue.StartsWith(format); } private async Task GetMaterialTransactionByPartNumber(string partNumber) { MaterialTransactionDto? materialTransaction = await WarehouseService.GetMaterialTransactionByPartNumberAsync(partNumber).ConfigureAwait(false); return materialTransaction; } private async Task UpdateRows(IList changedRecords) { await WarehouseService.UpdateWzRowsMeyleAsync(changedRecords); WzRowsMeyle = (await WarehouseService.GetWzRowsByWzHeaderId(WzHeader)).ToList(); StateHasChanged(); await _grid.Refresh(); } }