@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
Adresy Email do Wysyłki raportu:
Wprowadź numer palety:
Zeskanowana wartość:
@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: Proszę zeskanować poprawny Numer Partii SL (istniejący w tabeli) lub poprawny numer Partii Meyle zaczynający się od @($"{DateTime.Now.Year - 2000}X") !
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 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 void HideModal()
{
Visibility = false;
VisibilityValidation = 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;
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)
{
VisibilityValidation = true;
LastScannedValue = ScannedValue;
ScannedValue = string.Empty;
await _scanner.FocusAsync();
return;
}
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);
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 GetMaterialTransactionByPartNumber(string partNumber)
{
MaterialTransactionDto? materialTransaction = await WarehouseService.GetMaterialTransactionByPartNumberAsync(partNumber).ConfigureAwait(false);
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();
await InvokeAsync(StateHasChanged);
await _grid.Refresh();
}
}