@using System.Collections.ObjectModel @using AyCode.Blazor.Components.Components.Grids @using AyCode.Core.Helpers @using AyCode.Core.Loggers @using AyCode.Utils.Extensions @using FruitBank.Common.Dtos @using FruitBank.Common.Entities @using FruitBankHybrid.Shared.Components.Grids.Shippings @using FruitBankHybrid.Shared.Databases @using FruitBankHybrid.Shared.Extensions @using FruitBankHybrid.Shared.Services.Loggers @using FruitBankHybrid.Shared.Services.SignalRs @inject IEnumerable LogWriters @inject FruitBankSignalRClient FruitBankSignalRClient @* *@ @if (IsMasterGrid) { var shipping = ((Shipping)context.DataItem); var shippingDocuments = shipping?.ShippingDocuments ?? []; @{ var observableShippingDocuments = new AcObservableCollection(shippingDocuments); } @{ var observableShippingItems = new AcObservableCollection(shippingDocuments.SelectMany(sd => sd.ShippingItems ?? [])); } } @if (IsMasterGrid) { } @code { //[Inject] public required ObjectLock ObjectLock { get; set; } [Inject] public required DatabaseClient Database { get; set; } [Parameter] public bool IsMasterGrid { get; set; } = false; [Parameter] public AcObservableCollection? Partners { get; set; } [Parameter] public AcObservableCollection? CargoPartners { get; set; } [Parameter] public AcObservableCollection? Shippings { get; set; } [Inject] public required IDialogService DialogService { get; set; } = null!; public List CargoTrucks { get; set; } = []; const string ExportFileName = "ExportResult"; string GridSearchText = ""; bool EditItemsEnabled { get; set; } int FocusedRowVisibleIndex { get; set; } public GridShippingBase Grid { get; set; } string GridCss => !IsMasterGrid ? "hide-toolbar" : string.Empty; private int _activeTabIndex; private LoggerClient _logger; protected override async Task OnInitializedAsync() { _logger = new LoggerClient(LogWriters.ToArray()); await ReloadDataFromDb(false); } private async Task ReloadDataFromDb(bool forceReload = false) { using (await ObjectLock.GetSemaphore().UseWaitAsync()) { if (CargoPartners == null) CargoPartners = new AcObservableCollection(await FruitBankSignalRClient.GetCargoPartners() ?? []); else if (CargoPartners.Count == 0 || forceReload) { CargoPartners.Replace(await FruitBankSignalRClient.GetCargoPartners() ?? []); } } CargoTrucks = CargoPartners.Where(x => x.CargoTrucks != null).SelectMany(x => { if (x.CargoTrucks == null) return null; foreach (var cargoTruck in x.CargoTrucks) cargoTruck.CargoPartner = x; return x.CargoTrucks; }).ToList(); if (!IsMasterGrid) return; 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 (Grid == null) return; using (await ObjectLock.GetSemaphore().UseWaitAsync()) if (forceReload) await Grid.ReloadDataSourceAsync(); if (forceReload) Grid.Reload(); } async Task Grid_FocusedRowChanged(GridFocusedRowChangedEventArgs args) { if (Grid == null) return; if (Grid.IsEditing() && !Grid.IsEditingNewRow()) await Grid.SaveChangesAsync(); FocusedRowVisibleIndex = args.VisibleIndex; EditItemsEnabled = true; } async Task Grid_EditModelSaving(GridEditModelSavingEventArgs e) { var shipping = (Shipping)e.EditModel; // a szerkesztett sor if (ValidateCargoConsistency(shipping, out var error)) return; e.Cancel = true; await DialogService.ShowMessageBoxAsync("Hibás adat", error!, MessageBoxRenderStyle.Danger); // e.IsNew → add vs update // ... before-save logika (validáció, számított mezők, CargoTrailer beállítás stb.) // megszakítás, ha kell: // e.Cancel = true; } async protected 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; // } } private bool ValidateCargoConsistency(Shipping shipping, out string? error) { error = null; if (shipping.CargoTruckId != null) { var truck = CargoTrucks.FirstOrDefault(t => t.Id == shipping.CargoTruckId); if (truck == null || truck.CargoPartnerId != shipping.CargoPartnerId) { error = $"A vontató ({truck?.LicencePlate}) nem a kiválasztott fuvarozóhoz tartozik!"; return false; } } if (shipping.CargoTrailerId == null) return true; var trailer = CargoTrucks.FirstOrDefault(t => t.Id == shipping.CargoTrailerId); if (trailer != null && trailer.CargoPartnerId == shipping.CargoPartnerId) return true; error = $"Az utánfutó ({trailer?.LicencePlate}) nem a kiválasztott fuvarozóhoz tartozik!"; return false; } }