@using AyCode.Utils.Extensions @using FruitBank.Common.Dtos @using FruitBank.Common.Entities @using FruitBankHybrid.Shared.Components.FileUploads @using FruitBankHybrid.Shared.Components.Toolbars @using FruitBankHybrid.Shared.Databases @using FruitBankHybrid.Shared.Services.SignalRs @using System.Text @using AyCode.Core.Extensions @using FruitBank.Common.Models @inject FruitBankSignalRClient FruitBankSignalRClient @if (IsMasterGrid) { var shippingDocument = ((ShippingDocument)context.DataItem); @{ var shippingItemPallets = shippingDocument?.ShippingItems?.SelectMany(oi => oi.ShippingItemPallets ?? []).ToList() ?? []; } } @if (IsMasterGrid) { @* *@ } @code { //[Inject] public required ObjectLock ObjectLock { get; set; } [Inject] public required DatabaseClient Database { get; set; } [Inject] public required LoggedInModel LoggedInModel { get; set; } [Parameter] public bool IsMasterGrid { get; set; } = false; [Parameter] public List? Shippings { get; set; } [Parameter] public List? Partners { get; set; } [Parameter] public List? ShippingDocuments { get; set; } [Parameter] public Func?, Task>? OnUploadedFileParsed { get; set; } string GridCss => !IsMasterGrid ? "hide-toolbar" : string.Empty; const string ExportFileName = "ExportResult"; string _localStorageKey = "GridShippingDocument_"; string GridSearchText = ""; bool EditItemsEnabled { get; set; } = true; int FocusedRowVisibleIndex { get; set; } public MgGridBase Grid { get; set; } private int _activeTabIndex; protected override async Task OnInitializedAsync() { _localStorageKey += LoggedInModel.CustomerDto!.Id; await ReloadDataFromDb(); } private async Task ReloadDataFromDb(bool forceReload = false) { if (!IsMasterGrid) return; //ProductDtos ??= await FruitBankSignalRClient.GetProductDtos() ?? []; //ProductDtos ??= await Database.ProductDtoTable.LoadDataAsync(true); using (await ObjectLock.GetSemaphore().UseWaitAsync()) { if (Partners == null) Partners = await FruitBankSignalRClient.GetPartners() ?? []; else if (Partners.Count == 0 || forceReload) { Partners.Clear(); Partners.AddRange(await FruitBankSignalRClient.GetPartners() ?? []); } } using (await ObjectLock.GetSemaphore().UseWaitAsync()) { if (Shippings == null) Shippings = await FruitBankSignalRClient.GetShippings() ?? []; else if (Shippings.Count == 0 || forceReload) { Shippings.Clear(); Shippings.AddRange(await FruitBankSignalRClient.GetShippings() ?? []); } } using (await ObjectLock.GetSemaphore().UseWaitAsync()) { if (ShippingDocuments == null) ShippingDocuments = await FruitBankSignalRClient.GetShippingDocuments() ?? []; else if (ShippingDocuments.Count == 0 || forceReload) { ShippingDocuments.Clear(); ShippingDocuments.AddRange(await FruitBankSignalRClient.GetShippingDocuments() ?? []); } } if (forceReload) Grid?.Reload(); } private async Task OnFileUploaded(byte[] arg) { var utfString = Encoding.UTF8.GetString(arg, 0, arg.Length); var result = await FruitBankSignalRClient.ProcessAndSaveFullShippingJson(utfString, LoggedInModel.CustomerDto!.Id); if (result != null) { foreach (var shippingDocument in result.SelectMany(partner => partner.ShippingDocuments ?? [])) { ShippingDocuments!.Add(shippingDocument); } } Grid.Reload(); if (OnUploadedFileParsed != null) await OnUploadedFileParsed(result); //await InvokeAsync(StateHasChanged); } async Task Grid_FocusedRowChanged(GridFocusedRowChangedEventArgs args) { if (Grid != null && Grid.IsEditing() && !Grid.IsEditingNewRow()) await Grid.SaveChangesAsync(); FocusedRowVisibleIndex = args.VisibleIndex; EditItemsEnabled = true; } async Task Grid_DataItemDeleting(GridDataItemDeletingEventArgs e) { // await NwindDataService.RemoveEmployeeAsync((EditableEmployee)e.DataItem); // await LoadGridDataAsync(); // if(Data.Length == 0) // UpdateEditItemsEnabled(false); } async Task Grid_EditModelSaving(GridEditModelSavingEventArgs e) { ShippingDocument? resultShippingDocument = null; if (!e.IsNew) { resultShippingDocument = await FruitBankSignalRClient.UpdateShippingDocument((ShippingDocument)e.EditModel); } else { resultShippingDocument = await FruitBankSignalRClient.AddShippingDocument((ShippingDocument)e.EditModel); EditItemsEnabled = true; } if (resultShippingDocument != null) ShippingDocuments!.UpdateCollection(resultShippingDocument, false); // if(e.IsNew) { // await NwindDataService.InsertEmployeeAsync((EditableEmployee)e.EditModel); // } else // await NwindDataService.UpdateEmployeeAsync((EditableEmployee)e.DataItem, (EditableEmployee)e.EditModel); // await LoadGridDataAsync(); EditItemsEnabled = true; } async Task NewItem_Click() { EditItemsEnabled = false; await Grid.StartEditNewRowAsync(); } async Task EditItem_Click() { EditItemsEnabled = false; await Grid.StartEditRowAsync(FocusedRowVisibleIndex); } void DeleteItem_Click() { EditItemsEnabled = false; Grid.ShowRowDeleteConfirmation(FocusedRowVisibleIndex); } void ColumnChooserItem_Click(ToolbarItemClickEventArgs e) { Grid.ShowColumnChooser(); } async Task ExportXlsxItem_Click() { await Grid.ExportToXlsxAsync(ExportFileName); } async Task ExportXlsItem_Click() { await Grid.ExportToXlsAsync(ExportFileName); } async Task ExportCsvItem_Click() { await Grid.ExportToCsvAsync(ExportFileName); } async Task ExportPdfItem_Click() { await Grid.ExportToPdfAsync(ExportFileName); } protected async Task OnActiveTabChanged(int activeTabIndex) { _activeTabIndex = activeTabIndex; return; // switch (_activeTabIndex) // { // case 0: // if(ProductDtos == null) // ProductDtos = (await FruitBankSignalRClient.GetProductDtos() ?? []); //.Where(o => o.HasMeasuringAccess(LoggedInModel.CustomerDto?.Id, LoggedInModel.IsRevisor)).OrderBy(o => o.DateOfReceipt).ToList(); // break; // case 1: // if(OrderDtos == null) // OrderDtos = (await FruitBankSignalRClient.GetAllOrderDtos() ?? []).OrderByDescending(o => o.Id).ToList(); //.Where(o => o.HasMeasuringAccess(LoggedInModel.CustomerDto?.Id, LoggedInModel.IsRevisor)).OrderBy(o => o.DateOfReceipt).ToList(); // break; // case 2: // if (OrderItemDtos == null) // OrderItemDtos = (await FruitBankSignalRClient.GetAllOrderItemDtos() ?? []).OrderByDescending(o => o.Id).ToList(); //.Where(o => o.HasMeasuringAccess(LoggedInModel.CustomerDto?.Id, LoggedInModel.IsRevisor)).OrderBy(o => o.DateOfReceipt).ToList(); // break; // } } }