@using AyCode.Blazor.Components.Components.Grids @using AyCode.Utils.Extensions @using FruitBank.Common.Dtos @using FruitBank.Common.Entities @* @using FruitBankHybrid.Shared.Components.FileUploads *@ @using FruitBankHybrid.Shared.Components.Grids.ShippingDocuments @using FruitBankHybrid.Shared.Databases @using FruitBankHybrid.Shared.Services.SignalRs @using System.Text @using AyCode.Core.Extensions @using AyCode.Core.Helpers @using AyCode.Core.Interfaces @using AyCode.Core.Loggers @using FruitBank.Common @using FruitBank.Common.Enums @using FruitBank.Common.Models @using FruitBankHybrid.Shared.Services.Loggers @inject IEnumerable LogWriters @inject FruitBankSignalRClient FruitBankSignalRClient @{ var sdPd = (ShippingDocument)context.DataItem; @(PartnersDictById.GetValueOrDefault(sdPd.PartnerId)?.Name) } @{ var sdPe = (ShippingDocument)context.EditModel; } @{ var sdD = (ShippingDocument)context.DataItem; var depotD = PartnersDictById.GetValueOrDefault(sdD.PartnerId)?.PartnerDepots?.FirstOrDefault(d => d.Id == sdD.PartnerDepotId);
@depotD?.Name
}
@{ var sdE = (ShippingDocument)context.EditModel; var depotsE = PartnersDictById.GetValueOrDefault(sdE.PartnerId)?.PartnerDepots ?? new List(); }
@if (IsMasterGrid) { var shippingDocument = ((ShippingDocument)context.DataItem); @{ var observableShippingItem = new AcObservableCollection(shippingDocument?.ShippingItems ?? []); } @{ var shippingItemPallets = shippingDocument?.ShippingItems?.SelectMany(oi => oi.ShippingItemPallets ?? []).ToList() ?? []; } } @if (IsMasterGrid) { @* *@ }
@* *@ @code { [Inject] public required DatabaseClient Database { get; set; } [Inject] public required LoggedInModel LoggedInModel { get; set; } [Parameter] public AcObservableCollection? Shippings { get; set; } [Parameter] public AcObservableCollection? Partners { get; set; } [Parameter] public AcObservableCollection? ShippingDocuments { get; set; } [Parameter] public Func?, Task>? OnUploadedFileParsed { get; set; } [Parameter] public IId? ParentDataItem { get; set; } public bool IsMasterGrid => ParentDataItem == null; public bool ParentDataItemIsShipping => (ParentDataItem is Shipping); public bool ParentDataItemIsPartner => (ParentDataItem is Partner); string GridCss => !IsMasterGrid ? "hide-toolbar" : string.Empty; MgGridToolbarTemplate toolbar; const string ExportFileName = "ExportResult"; string _localStorageKey = "GridShippingDocument_"; string GridSearchText = ""; bool EditItemsEnabled { get; set; } = true; int FocusedRowVisibleIndex { get; set; } private DxWindow windowRef; private bool windowVisible; public GridShippingDocumentBase Grid { get; set; } private LoggerClient _logger = null!; private int _activeTabIndex; // Partner-lookup ID szerint a cella-templatekhez (a ReloadDataFromDb tölti) — renderenkénti lineáris keresés helyett. private Dictionary PartnersDictById = new(); protected override async Task OnInitializedAsync() { _logger = new LoggerClient(LogWriters.ToArray()); _localStorageKey += LoggedInModel.CustomerDto!.Id; await ReloadDataFromDb(); } private async Task ReloadDataFromDb(bool forceReload = false) { if (!ParentDataItemIsPartner) { using (await ObjectLock.GetSemaphore().UseWaitAsync()) { if (Partners == null) Partners = new AcObservableCollection(await FruitBankSignalRClient.GetPartners() ?? []); else if (Partners.Count == 0 || forceReload) { Partners.Replace(await FruitBankSignalRClient.GetPartners() ?? []); } } } if (!ParentDataItemIsShipping) { using (await ObjectLock.GetSemaphore().UseWaitAsync()) { if (Shippings == null) Shippings = new AcObservableCollection(await FruitBankSignalRClient.GetShippings() ?? []); else if (Shippings.Count == 0 || forceReload) { Shippings.Replace(await FruitBankSignalRClient.GetShippings() ?? []); } } } if (!IsMasterGrid) { if (Shippings == null && ParentDataItem is Shipping shippingParent) Shippings = [shippingParent]; if (Partners == null && ParentDataItem is Partner partnerParent) Partners = [partnerParent]; } // Partner-lookup ID szerint a cella-templatekhez (O(1) a renderenkénti FirstOrDefault helyett), a Partners véglegesülése után. PartnersDictById = Partners?.ToDictionary(p => p.Id) ?? new(); if (!IsMasterGrid) return; if (Grid == null) return; using (await ObjectLock.GetSemaphore().UseWaitAsync()) if (forceReload) await Grid.ReloadDataSourceAsync(); 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); } async Task Grid_FocusedRowChanged(GridFocusedRowChangedEventArgs args) { if (Grid != null && Grid.IsEditing() && !Grid.IsEditingNewRow()) await Grid.SaveChangesAsync(); if (toolbar != null) { var shippingDocument = (args.DataItem as ShippingDocument)!; toolbar.EnableDelete = shippingDocument.ShippingItems?.All(x => x.MeasuringStatus == MeasuringStatus.NotStarted) ?? true; } FocusedRowVisibleIndex = args.VisibleIndex; EditItemsEnabled = true; } // Cascade: a Partner-combo ValueChanged-je. Beírjuk az új partnert; ha a partnernek PONTOSAN EGY telephelye van, // arra auto-állunk, különben nullázzuk (a régi nem az új partneré); majd újrarenderelünk → a Telephely-combo frissül. void OnPartnerChanged(ShippingDocument sd, int partnerId) { sd.PartnerId = partnerId; var depots = PartnersDictById.GetValueOrDefault(partnerId)?.PartnerDepots; sd.PartnerDepotId = depots?.Count == 1 ? depots[0].Id : null; StateHasChanged(); } protected async Task OnActiveTabChanged(int activeTabIndex) { _activeTabIndex = activeTabIndex; } private async Task Callback(ToolbarItemClickEventArgs obj) { if (windowVisible) await windowRef.CloseAsync(); else await windowRef.ShowAsync(); } private void Callback2(WindowClosingEventArgs obj) { ReloadDataFromDb(true).Forget(_logger); } }