From 264ad6256fb1e223b93ba071164379c1cde1708f Mon Sep 17 00:00:00 2001 From: Loretta Date: Fri, 21 Nov 2025 07:20:26 +0100 Subject: [PATCH 1/3] improvements --- .../IFruitBankDataControllerCommon.cs | 1 + FruitBank.Common/SignalRs/SignalRTags.cs | 1 + .../Components/GridShipping.razor | 183 ------------------ .../Components/GridShippingDocument.razor | 11 +- .../Components/GridShippingItemTemplate.razor | 42 ++-- ...{FruitBankGrid.cs => FruitBankGridBase.cs} | 2 +- ....cs => GridStockQuantityHistoryDtoBase.cs} | 21 +- .../GridStockQuantityHistoryDtoTemplate.razor | 14 +- ...hippingItem.cs => GridShippingItemBase.cs} | 21 +- .../Grids/Shippings/GridShipping.razor | 143 ++++++++++++++ .../Grids/Shippings/GridShippingBase.cs | 67 +++++++ .../Databases/DatabaseClient.cs | 4 +- .../Pages/ShippingsAdmin.razor | 1 + .../Pages/ShippingsAdmin.razor.cs | 5 +- .../SignalRs/FruitBankSignalRClient.cs | 3 + 15 files changed, 276 insertions(+), 243 deletions(-) delete mode 100644 FruitBankHybrid.Shared/Components/GridShipping.razor rename FruitBankHybrid.Shared/Components/Grids/{FruitBankGrid.cs => FruitBankGridBase.cs} (97%) rename FruitBankHybrid.Shared/Components/Grids/Products/{GridStockQuantityHistoryDto.cs => GridStockQuantityHistoryDtoBase.cs} (51%) rename FruitBankHybrid.Shared/Components/Grids/ShippingItems/{GridShippingItem.cs => GridShippingItemBase.cs} (74%) create mode 100644 FruitBankHybrid.Shared/Components/Grids/Shippings/GridShipping.razor create mode 100644 FruitBankHybrid.Shared/Components/Grids/Shippings/GridShippingBase.cs diff --git a/FruitBank.Common/Interfaces/IFruitBankDataControllerCommon.cs b/FruitBank.Common/Interfaces/IFruitBankDataControllerCommon.cs index e7e5fd1..5e17273 100644 --- a/FruitBank.Common/Interfaces/IFruitBankDataControllerCommon.cs +++ b/FruitBank.Common/Interfaces/IFruitBankDataControllerCommon.cs @@ -26,6 +26,7 @@ public interface IFruitBankDataControllerCommon #region ShippingItem public Task?> GetShippingItems(); + public Task?> GetShippingItemsByShippingId(int shippingId); public Task?> GetShippingItemsByDocumentId(int shippingDocumentId); public Task GetShippingItemById(int id); public Task AddShippingItem(ShippingItem shippingItem); diff --git a/FruitBank.Common/SignalRs/SignalRTags.cs b/FruitBank.Common/SignalRs/SignalRTags.cs index 3fd5465..c10418e 100644 --- a/FruitBank.Common/SignalRs/SignalRTags.cs +++ b/FruitBank.Common/SignalRs/SignalRTags.cs @@ -25,6 +25,7 @@ public class SignalRTags : AcSignalRTags public const int GetShippingItems = 50; public const int GetShippingItemById = 51; public const int GetShippingItemsByDocumentId = 52; + public const int GetShippingItemsByShippingId = 53; public const int AddShippingItem = 55; public const int UpdateShippingItem = 56; public const int UpdateMeasuredShippingItem = 57; diff --git a/FruitBankHybrid.Shared/Components/GridShipping.razor b/FruitBankHybrid.Shared/Components/GridShipping.razor deleted file mode 100644 index 87cbd73..0000000 --- a/FruitBankHybrid.Shared/Components/GridShipping.razor +++ /dev/null @@ -1,183 +0,0 @@ -@using AyCode.Core.Helpers -@using AyCode.Utils.Extensions -@using FruitBank.Common.Dtos -@using FruitBank.Common.Entities -@using FruitBankHybrid.Shared.Databases -@using FruitBankHybrid.Shared.Services.SignalRs - -@inject FruitBankSignalRClient FruitBankSignalRClient - - - - - - - - - - - - - - - @if (IsMasterGrid) - { - var shipping = ((Shipping)context.DataItem); - var shippingDocuments = new AcFastObservableCollection(); - shippingDocuments.AddRange(shipping?.ShippingDocuments ?? []); - - - - @{ - - - } - - - - - - - } - - - - - - - - - - - - - - - - @* - - - *@ - - - - - - - - -@code { - //[Inject] public required ObjectLock ObjectLock { get; set; } - [Inject] public required DatabaseClient Database { get; set; } - - [Parameter] public bool IsMasterGrid { get; set; } = false; - //[Parameter] public OrderDto? OrderDto { get; set; } - [Parameter] public List? Shippings{ get; set; } - - const string ExportFileName = "ExportResult"; - string GridSearchText = ""; - bool EditItemsEnabled { get; set; } - int FocusedRowVisibleIndex { get; set; } - public MgGridBase Grid { get; set; } - - private int _activeTabIndex; - protected override async Task OnInitializedAsync() - { - await ReloadDataFromDb(false); - } - - 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 (Shippings == null) Shippings = await FruitBankSignalRClient.GetShippings() ?? []; - else if (Shippings.Count == 0 || forceReload) - { - Shippings.Clear(); - Shippings.AddRange(await FruitBankSignalRClient.GetShippings() ?? []); - } - } - - if (forceReload) Grid?.Reload(); - } - - 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) { - // if(e.IsNew) { - // await NwindDataService.InsertEmployeeAsync((EditableEmployee)e.EditModel); - // UpdateEditItemsEnabled(true); - // } else - // await NwindDataService.UpdateEmployeeAsync((EditableEmployee)e.DataItem, (EditableEmployee)e.EditModel); - // await LoadGridDataAsync(); - } - async Task NewItem_Click() { - await Grid.StartEditNewRowAsync(); - } - async Task EditItem_Click() { - await Grid.StartEditRowAsync(FocusedRowVisibleIndex); - } - void DeleteItem_Click() { - 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; - // } - } -} - diff --git a/FruitBankHybrid.Shared/Components/GridShippingDocument.razor b/FruitBankHybrid.Shared/Components/GridShippingDocument.razor index 888d88d..978137b 100644 --- a/FruitBankHybrid.Shared/Components/GridShippingDocument.razor +++ b/FruitBankHybrid.Shared/Components/GridShippingDocument.razor @@ -17,7 +17,7 @@ EditModelSaving="Grid_EditModelSaving" FocusedRowChanged="Grid_FocusedRowChanged"> - + ? Shippings { get; set; } + [Parameter] public AcObservableCollection? Shippings { get; set; } [Parameter] public List? Partners { get; set; } - [Parameter] public AcFastObservableCollection? ShippingDocuments { get; set; } + [Parameter] public AcObservableCollection? ShippingDocuments { get; set; } [Parameter] public Func?, Task>? OnUploadedFileParsed { get; set; } @@ -180,11 +180,10 @@ using (await ObjectLock.GetSemaphore().UseWaitAsync()) { - if (Shippings == null) Shippings = await FruitBankSignalRClient.GetShippings() ?? []; + if (Shippings == null) Shippings = new AcObservableCollection(await FruitBankSignalRClient.GetShippings() ?? []); else if (Shippings.Count == 0 || forceReload) { - Shippings.Clear(); - Shippings.AddRange(await FruitBankSignalRClient.GetShippings() ?? []); + Shippings.Replace(await FruitBankSignalRClient.GetShippings() ?? []); } } diff --git a/FruitBankHybrid.Shared/Components/GridShippingItemTemplate.razor b/FruitBankHybrid.Shared/Components/GridShippingItemTemplate.razor index 91e3372..3b3362a 100644 --- a/FruitBankHybrid.Shared/Components/GridShippingItemTemplate.razor +++ b/FruitBankHybrid.Shared/Components/GridShippingItemTemplate.razor @@ -15,21 +15,12 @@ @inject IEnumerable LogWriters @inject FruitBankSignalRClient FruitBankSignalRClient -@* Data="ShippingItems" IsMasterGrid="IsMasterGrid" CssClass="@GridCss" AutoSaveLayoutName="GridShippingItem" -ValidationEnabled="false" EditMode="GridEditMode.EditRow" -EditModelSaving="Grid_EditModelSaving" -FocusedRowChanged="Grid_FocusedRowChanged" *@ - - - @* *@ + - + @@ -95,7 +86,7 @@ FocusedRowChanged="Grid_FocusedRowChanged" *@ -@* + @* @{ if (context.DataColumn.FieldName == nameof(ShippingItem.ShippingDocumentId)) { @@ -131,7 +122,7 @@ FocusedRowChanged="Grid_FocusedRowChanged" *@ FieldName="MeasuredNetWeight" FooterColumnName="NetWeight" /> - + @* *@ @code { @@ -143,7 +134,7 @@ FocusedRowChanged="Grid_FocusedRowChanged" *@ [Parameter] public IEnumerable? ProductDtos { get; set; } [Parameter] public List? ShippingItems { get; set; } - [Parameter] public AcFastObservableCollection? ShippingDocuments { get; set; } + [Parameter] public AcObservableCollection? ShippingDocuments { get; set; } public bool IsMasterGrid => ParentDataItem == null; public bool ParentDataItemIsShippingDocument => (ParentDataItem is ShippingDocument); @@ -156,7 +147,7 @@ FocusedRowChanged="Grid_FocusedRowChanged" *@ bool EditItemsEnabled { get; set; } = true; int FocusedRowVisibleIndex { get; set; } - public GridShippingItem Grid { get; set; } + public GridShippingItemBase Grid { get; set; } private LoggerClient _logger; protected override async Task OnInitializedAsync() @@ -198,15 +189,14 @@ FocusedRowChanged="Grid_FocusedRowChanged" *@ using (await ObjectLock.GetSemaphore().UseWaitAsync()) if (forceReload) await Grid.ReloadDataSourceAsync(); - if (forceReload) - Grid.Reload(); + if (forceReload) Grid.Reload(); } async Task Grid_FocusedRowChanged(GridFocusedRowChangedEventArgs args) { - if (Grid != null && Grid.IsEditing() && !Grid.IsEditingNewRow()) - await Grid.SaveChangesAsync(); - + if ((args.Grid.IsEditing() || args.Grid.IsEditingNewRow()) && (args.DataItem as IId).Id > 0) + await args.Grid.SaveChangesAsync(); + FocusedRowVisibleIndex = args.VisibleIndex; EditItemsEnabled = true; } @@ -234,10 +224,4 @@ FocusedRowChanged="Grid_FocusedRowChanged" *@ EditItemsEnabled = true; } - - private void EditModelSaving(GridEditModelSavingEventArgs obj) - { - //obj. - } - } \ No newline at end of file diff --git a/FruitBankHybrid.Shared/Components/Grids/FruitBankGrid.cs b/FruitBankHybrid.Shared/Components/Grids/FruitBankGridBase.cs similarity index 97% rename from FruitBankHybrid.Shared/Components/Grids/FruitBankGrid.cs rename to FruitBankHybrid.Shared/Components/Grids/FruitBankGridBase.cs index 0a267a4..70c8a39 100644 --- a/FruitBankHybrid.Shared/Components/Grids/FruitBankGrid.cs +++ b/FruitBankHybrid.Shared/Components/Grids/FruitBankGridBase.cs @@ -14,7 +14,7 @@ namespace FruitBankHybrid.Shared.Components.Grids; //var a = new GridDevExtremeDataSource(DataSource.AsQueryable().Where(x=>x.IsMeasurable)); -public class FruitBankListGridBase : MgGridBase, TDataItem, int, LoggerClient> where TDataItem : class, IId +public class FruitBankGridBase : MgGridBase, TDataItem, int, LoggerClient> where TDataItem : class, IId { [Inject] public required LoggedInModel LoggedInModel { get; set; } [Inject] public required IJSRuntime JSRuntime { get; set; } diff --git a/FruitBankHybrid.Shared/Components/Grids/Products/GridStockQuantityHistoryDto.cs b/FruitBankHybrid.Shared/Components/Grids/Products/GridStockQuantityHistoryDtoBase.cs similarity index 51% rename from FruitBankHybrid.Shared/Components/Grids/Products/GridStockQuantityHistoryDto.cs rename to FruitBankHybrid.Shared/Components/Grids/Products/GridStockQuantityHistoryDtoBase.cs index e8b3973..d654b00 100644 --- a/FruitBankHybrid.Shared/Components/Grids/Products/GridStockQuantityHistoryDto.cs +++ b/FruitBankHybrid.Shared/Components/Grids/Products/GridStockQuantityHistoryDtoBase.cs @@ -1,24 +1,29 @@ using DevExpress.Blazor; using FruitBank.Common.Dtos; +using FruitBank.Common.Interfaces; using FruitBank.Common.SignalRs; using Microsoft.AspNetCore.Components; namespace FruitBankHybrid.Shared.Components.Grids.Products; -public class GridStockQuantityHistoryDto : FruitBankListGridBase, IGrid +public class GridStockQuantityHistoryDtoBase : FruitBankGridBase, IGrid { - public GridStockQuantityHistoryDto() : base() + public GridStockQuantityHistoryDtoBase() : base() { - GetAllMessageTag = IsMasterGrid ? SignalRTags.GetStockQuantityHistoryDtos : SignalRTags.GetStockQuantityHistoryDtosByProductId; - - //AddMessageTag = SignalRTags.AddShippingItem; - //UpdateMessageTag = SignalRTags.UpdateShippingItem; - //RemoveMessageTag = SignalRTags.; } protected override async Task OnInitializedAsync() { - GetAllMessageTag = IsMasterGrid ? SignalRTags.GetStockQuantityHistoryDtos : SignalRTags.GetStockQuantityHistoryDtosByProductId; + if (GetAllMessageTag > 0) return; + + if (IsMasterGrid) GetAllMessageTag = SignalRTags.GetStockQuantityHistoryDtos; + else + { + if (ContextIds == null || ContextIds.Length == 0) ContextIds = [ParentDataItem!.Id]; + + if (ParentDataItem is IProductDto) GetAllMessageTag = SignalRTags.GetStockQuantityHistoryDtosByProductId; + //else if (ParentDataItem is IShipping) GetAllMessageTag = SignalRTags.GetShippingItemsByShippingId; + } await base.OnInitializedAsync(); } diff --git a/FruitBankHybrid.Shared/Components/Grids/Products/GridStockQuantityHistoryDtoTemplate.razor b/FruitBankHybrid.Shared/Components/Grids/Products/GridStockQuantityHistoryDtoTemplate.razor index 53a18d1..e705510 100644 --- a/FruitBankHybrid.Shared/Components/Grids/Products/GridStockQuantityHistoryDtoTemplate.razor +++ b/FruitBankHybrid.Shared/Components/Grids/Products/GridStockQuantityHistoryDtoTemplate.razor @@ -11,11 +11,11 @@ @inject IEnumerable LogWriters @inject FruitBankSignalRClient FruitBankSignalRClient - + - + @@ -35,7 +35,7 @@ @if (IsMasterGrid) { - + } @* @@ -49,7 +49,7 @@ FieldName="MeasuredNetWeight" FooterColumnName="NetWeight" /> *@ - + @code { [Inject] public required DatabaseClient Database { get; set; } @@ -63,7 +63,7 @@ public bool IsMasterGrid => ParentDataItem == null; string GridCss => !IsMasterGrid ? "hide-toolbar" : string.Empty; - public GridStockQuantityHistoryDto Grid { get; set; } + public GridStockQuantityHistoryDtoBase Grid { get; set; } private LoggerClient _logger = null!; protected override async Task OnInitializedAsync() diff --git a/FruitBankHybrid.Shared/Components/Grids/ShippingItems/GridShippingItem.cs b/FruitBankHybrid.Shared/Components/Grids/ShippingItems/GridShippingItemBase.cs similarity index 74% rename from FruitBankHybrid.Shared/Components/Grids/ShippingItems/GridShippingItem.cs rename to FruitBankHybrid.Shared/Components/Grids/ShippingItems/GridShippingItemBase.cs index f9fa907..a098d73 100644 --- a/FruitBankHybrid.Shared/Components/Grids/ShippingItems/GridShippingItem.cs +++ b/FruitBankHybrid.Shared/Components/Grids/ShippingItems/GridShippingItemBase.cs @@ -8,12 +8,12 @@ using Microsoft.AspNetCore.Components; namespace FruitBankHybrid.Shared.Components.Grids.ShippingItems; -public class GridShippingItem : FruitBankListGridBase, IGrid +public class GridShippingItemBase : FruitBankGridBase, IGrid { private bool _isFirstInitializeParameterCore; private bool _isFirstInitializeParameters; - public GridShippingItem () : base() + public GridShippingItemBase () : base() { AddMessageTag = SignalRTags.AddShippingItem; UpdateMessageTag = SignalRTags.UpdateShippingItem; @@ -23,13 +23,24 @@ public class GridShippingItem : FruitBankListGridBase, IGrid protected override async Task OnInitializedAsync() { + if (GetAllMessageTag > 0) return; + if (IsMasterGrid) GetAllMessageTag = SignalRTags.GetShippingItems; else { - ContextIds = [ParentDataItem!.Id]; + if (ContextIds == null || ContextIds.Length == 0) ContextIds = [ParentDataItem!.Id]; - if (ParentDataItem is IShippingDocument) GetAllMessageTag = SignalRTags.GetShippingItemsByDocumentId; - //else if (ParentDataItem is IShipping) GetAllMessageTag = SignalRTags.GetShippingItemsByShippingId; + switch (ParentDataItem) + { + case IShippingDocument: + GetAllMessageTag = SignalRTags.GetShippingItemsByDocumentId; + break; + case IShipping: + AddMessageTag = SignalRTags.None; + + GetAllMessageTag = SignalRTags.GetShippingItemsByShippingId; + break; + } } await base.OnInitializedAsync(); diff --git a/FruitBankHybrid.Shared/Components/Grids/Shippings/GridShipping.razor b/FruitBankHybrid.Shared/Components/Grids/Shippings/GridShipping.razor new file mode 100644 index 0000000..c0cebb0 --- /dev/null +++ b/FruitBankHybrid.Shared/Components/Grids/Shippings/GridShipping.razor @@ -0,0 +1,143 @@ +@using System.Collections.ObjectModel +@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.Components.Toolbars +@using FruitBankHybrid.Shared.Databases +@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); + + } + + + + + + + } + + + @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 OrderDto? OrderDto { get; set; } + [Parameter] public AcObservableCollection? Shippings { 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) + { + if (!IsMasterGrid) return; + + //ProductDtos ??= await FruitBankSignalRClient.GetProductDtos() ?? []; + //ProductDtos ??= await Database.ProductDtoTable.LoadDataAsync(true); + + 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; + } + + 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; + // } + } +} + diff --git a/FruitBankHybrid.Shared/Components/Grids/Shippings/GridShippingBase.cs b/FruitBankHybrid.Shared/Components/Grids/Shippings/GridShippingBase.cs new file mode 100644 index 0000000..94d51b3 --- /dev/null +++ b/FruitBankHybrid.Shared/Components/Grids/Shippings/GridShippingBase.cs @@ -0,0 +1,67 @@ +using AyCode.Core.Interfaces; +using DevExpress.Blazor; +using FruitBank.Common.Entities; +using FruitBank.Common.Interfaces; +using FruitBank.Common.SignalRs; +using FruitBankHybrid.Shared.Pages; +using Microsoft.AspNetCore.Components; + +namespace FruitBankHybrid.Shared.Components.Grids.Shippings; + +public class GridShippingBase: FruitBankGridBase, IGrid +{ + private bool _isFirstInitializeParameterCore; + private bool _isFirstInitializeParameters; + + public GridShippingBase() : base() + { + GetAllMessageTag = SignalRTags.GetShippings; + AddMessageTag = SignalRTags.AddShipping; + UpdateMessageTag = SignalRTags.UpdateShipping; + + //RemoveMessageTag = SignalRTags.; + } + + protected override async Task OnInitializedAsync() + { + await base.OnInitializedAsync(); + } + + protected override void OnParametersSet() + { + base.OnParametersSet(); + + if (!_isFirstInitializeParameters) + { + //if (!IsMasterGrid && (ContextIds == null || ContextIds.Length == 0)) + //{ + // ContextIds = [ParentDataItem!.Id]; + // GetAllMessageTag = SignalRTags.GetShippingItemsByDocumentId; + //} + + _isFirstInitializeParameters = false; + } + } + + protected override async Task SetParametersAsyncCore(ParameterView parameters) + { + await base.SetParametersAsyncCore(parameters); + + if (!_isFirstInitializeParameterCore) + { + //if (!IsMasterGrid && (ContextIds == null || ContextIds.Length == 0)) + //{ + // ContextIds = [ParentDataItem!.Id]; + // GetAllMessageTag = SignalRTags.GetShippingItemsByDocumentId; + //} + + //ShowFilterRow = true; + //ShowGroupPanel = true; + //AllowSort = false; + + //etc... + + _isFirstInitializeParameterCore = false; + } + } +} \ No newline at end of file diff --git a/FruitBankHybrid.Shared/Databases/DatabaseClient.cs b/FruitBankHybrid.Shared/Databases/DatabaseClient.cs index 26fd044..afd0311 100644 --- a/FruitBankHybrid.Shared/Databases/DatabaseClient.cs +++ b/FruitBankHybrid.Shared/Databases/DatabaseClient.cs @@ -56,7 +56,7 @@ public class ShippingItemTable : SignalRDataSourceList } } -public class ProductDtoTable(FruitBankSignalRClient fruitBankSignalRClient) : AcFastObservableCollection +public class ProductDtoTable(FruitBankSignalRClient fruitBankSignalRClient) : AcObservableCollection { private readonly SemaphoreSlim _semaphoreSlim = new(1); public async Task LoadDataAsync(bool onlyIfEmpty = true) @@ -81,7 +81,7 @@ public class ProductDtoTable(FruitBankSignalRClient fruitBankSignalRClient) : Ac return this; } } -public class OrderDtoTable(FruitBankSignalRClient fruitBankSignalRClient) : AcFastObservableCollection +public class OrderDtoTable(FruitBankSignalRClient fruitBankSignalRClient) : AcObservableCollection { private readonly SemaphoreSlim _semaphoreSlim = new(1); diff --git a/FruitBankHybrid.Shared/Pages/ShippingsAdmin.razor b/FruitBankHybrid.Shared/Pages/ShippingsAdmin.razor index 1e50c57..4aeb411 100644 --- a/FruitBankHybrid.Shared/Pages/ShippingsAdmin.razor +++ b/FruitBankHybrid.Shared/Pages/ShippingsAdmin.razor @@ -1,6 +1,7 @@ @page "/ShippingsAdmin" @using FruitBank.Common.Dtos @using FruitBankHybrid.Shared.Components +@using FruitBankHybrid.Shared.Components.Grids.Shippings @using FruitBankHybrid.Shared.Databases

Szállítmányok - Adminisztrátor

diff --git a/FruitBankHybrid.Shared/Pages/ShippingsAdmin.razor.cs b/FruitBankHybrid.Shared/Pages/ShippingsAdmin.razor.cs index bc54f56..7ade4cd 100644 --- a/FruitBankHybrid.Shared/Pages/ShippingsAdmin.razor.cs +++ b/FruitBankHybrid.Shared/Pages/ShippingsAdmin.razor.cs @@ -8,6 +8,7 @@ using FruitBank.Common.Interfaces; using FruitBank.Common.Models; using FruitBankHybrid.Shared.Components; using FruitBankHybrid.Shared.Components.Grids.ShippingItems; +using FruitBankHybrid.Shared.Components.Grids.Shippings; using FruitBankHybrid.Shared.Databases; using FruitBankHybrid.Shared.Services.Loggers; using FruitBankHybrid.Shared.Services.SignalRs; @@ -31,8 +32,8 @@ public partial class ShippingsAdmin : ComponentBase private GridShippingItemTemplate gridShippingItemTemplate; private GridShippingItemPallets gridShippingItemPallet; - public List Shippings { get; set; } = []; - public AcFastObservableCollection ShippingDocuments { get; set; } = []; + public AcObservableCollection Shippings { get; set; } = []; + public AcObservableCollection ShippingDocuments { get; set; } = []; public List ShippingItems { get; set; } = []; public List ShippingItemPallets { get; set; } = []; diff --git a/FruitBankHybrid.Shared/Services/SignalRs/FruitBankSignalRClient.cs b/FruitBankHybrid.Shared/Services/SignalRs/FruitBankSignalRClient.cs index 8c0e8e1..594a2e7 100644 --- a/FruitBankHybrid.Shared/Services/SignalRs/FruitBankSignalRClient.cs +++ b/FruitBankHybrid.Shared/Services/SignalRs/FruitBankSignalRClient.cs @@ -99,6 +99,9 @@ namespace FruitBankHybrid.Shared.Services.SignalRs public Task?> GetShippingItemsByDocumentId(int shippingDocumentId) => GetAllAsync>(SignalRTags.GetShippingItemsByDocumentId, [shippingDocumentId]); + public Task?> GetShippingItemsByShippingId(int shippingId) + => GetAllAsync>(SignalRTags.GetShippingItemsByShippingId, [shippingId]); + public Task GetShippingItemById(int id) => GetByIdAsync(SignalRTags.GetShippingItemById, id); From 34be547e852084253f700b89e67cc571796f744e Mon Sep 17 00:00:00 2001 From: Loretta Date: Fri, 21 Nov 2025 16:28:49 +0100 Subject: [PATCH 2/3] improvements --- .../IFruitBankDataControllerCommon.cs | 4 + FruitBank.Common/SignalRs/SignalRTags.cs | 3 + .../Components/GridProductDtoTemplate.razor | 2 +- .../Components/GridShippingDocument.razor | 133 +++++------------- .../Components/GridShippingItemTemplate.razor | 6 +- .../Components/Grids/FruitBankGridBase.cs | 2 +- .../GridShippingDocumentBase.cs | 93 ++++++++++++ .../ShippingItems/GridShippingItemBase.cs | 2 +- .../Grids/Shippings/GridShipping.razor | 22 ++- .../Pages/ShippingsAdmin.razor | 7 +- .../Pages/ShippingsAdmin.razor.cs | 13 +- .../SignalRs/FruitBankSignalRClient.cs | 12 ++ .../Services/SignalRs/SignalRDataSource.cs | 3 +- 13 files changed, 180 insertions(+), 122 deletions(-) create mode 100644 FruitBankHybrid.Shared/Components/Grids/ShippingDocuments/GridShippingDocumentBase.cs diff --git a/FruitBank.Common/Interfaces/IFruitBankDataControllerCommon.cs b/FruitBank.Common/Interfaces/IFruitBankDataControllerCommon.cs index 5e17273..da1582e 100644 --- a/FruitBank.Common/Interfaces/IFruitBankDataControllerCommon.cs +++ b/FruitBank.Common/Interfaces/IFruitBankDataControllerCommon.cs @@ -21,6 +21,7 @@ public interface IFruitBankDataControllerCommon public Task?> GetShippings(); Task?> GetNotMeasuredShippings(); public Task GetShippingById(int id); + public Task AddShipping(Shipping shipping); public Task UpdateShipping(Shipping shipping); #endregion Shipping @@ -44,6 +45,9 @@ public interface IFruitBankDataControllerCommon #region ShippingDocument public Task?> GetShippingDocuments(); public Task GetShippingDocumentById(int id); + public Task?> GetShippingDocumentsByShippingId(int shippingId); + public Task?> GetShippingDocumentsByProductId(int productId); + public Task?> GetShippingDocumentsByPartnerId(int partnerId); public Task AddShippingDocument(ShippingDocument shippingDocument); public Task UpdateShippingDocument(ShippingDocument shippingDocument); #endregion ShippingDocument diff --git a/FruitBank.Common/SignalRs/SignalRTags.cs b/FruitBank.Common/SignalRs/SignalRTags.cs index c10418e..b7d0c9c 100644 --- a/FruitBank.Common/SignalRs/SignalRTags.cs +++ b/FruitBank.Common/SignalRs/SignalRTags.cs @@ -32,6 +32,9 @@ public class SignalRTags : AcSignalRTags public const int GetShippingDocuments = 60; public const int GetShippingDocumentById = 61; + public const int GetShippingDocumentsByShippingId = 62; + public const int GetShippingDocumentsByProductId = 63; + public const int GetShippingDocumentsByPartnerId = 64; public const int AddShippingDocument = 65; public const int UpdateShippingDocument = 66; diff --git a/FruitBankHybrid.Shared/Components/GridProductDtoTemplate.razor b/FruitBankHybrid.Shared/Components/GridProductDtoTemplate.razor index 1e7a83a..5540b9a 100644 --- a/FruitBankHybrid.Shared/Components/GridProductDtoTemplate.razor +++ b/FruitBankHybrid.Shared/Components/GridProductDtoTemplate.razor @@ -12,7 +12,7 @@ @inject LoggedInModel LoggedInModel; @inject FruitBankSignalRClient FruitBankSignalRClient - diff --git a/FruitBankHybrid.Shared/Components/GridShippingDocument.razor b/FruitBankHybrid.Shared/Components/GridShippingDocument.razor index 978137b..99783c5 100644 --- a/FruitBankHybrid.Shared/Components/GridShippingDocument.razor +++ b/FruitBankHybrid.Shared/Components/GridShippingDocument.razor @@ -1,21 +1,23 @@ @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.Components.Toolbars @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.Models +@using FruitBankHybrid.Shared.Services.Loggers +@inject IEnumerable LogWriters @inject FruitBankSignalRClient FruitBankSignalRClient - + @@ -36,7 +38,7 @@
- + - +
@if (IsMasterGrid) @@ -74,12 +76,15 @@ - + @{ + var observableShippingItem = new AcObservableCollection(shippingDocument?.ShippingItems ?? []); + + } @{ var shippingItemPallets = shippingDocument?.ShippingItems?.SelectMany(oi => oi.ShippingItemPallets ?? []).ToList() ?? []; - + } @@ -125,7 +130,7 @@ FieldName="PriceInclTax" FooterColumnName="PriceInclTax" /> - + @code { //EditRow dblClick @@ -135,39 +140,38 @@ [Inject] public required DatabaseClient Database { get; set; } [Inject] public required LoggedInModel LoggedInModel { get; set; } - [Parameter] public bool IsMasterGrid { get; set; } = false; - [Parameter] public AcObservableCollection? Shippings { get; set; } [Parameter] public List? 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); 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; } - + public GridShippingDocumentBase Grid { get; set; } + private LoggerClient _logger = null!; private int _activeTabIndex; protected override async Task OnInitializedAsync() { + _logger = new LoggerClient(LogWriters.ToArray()); + _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() ?? []; @@ -178,6 +182,12 @@ } } + if (!IsMasterGrid) + { + if (Shippings == null && ParentDataItem is Shipping shippingParent) Shippings = [shippingParent]; + return; + } + using (await ObjectLock.GetSemaphore().UseWaitAsync()) { if (Shippings == null) Shippings = new AcObservableCollection(await FruitBankSignalRClient.GetShippings() ?? []); @@ -187,20 +197,12 @@ } } - using (await ObjectLock.GetSemaphore().UseWaitAsync()) - { - if (ShippingDocuments == null) - { - ShippingDocuments = []; - ShippingDocuments.AddRange(await FruitBankSignalRClient.GetShippingDocuments() ?? []); - } - else if (ShippingDocuments.Count == 0 || forceReload) - { - ShippingDocuments.Replace(await FruitBankSignalRClient.GetShippingDocuments() ?? []); - } - } + if (Grid == null) return; - if (forceReload) Grid?.Reload(); + using (await ObjectLock.GetSemaphore().UseWaitAsync()) + if (forceReload) await Grid.ReloadDataSourceAsync(); + + if (forceReload) Grid.Reload(); } private async Task OnFileUploaded(byte[] arg) @@ -232,73 +234,6 @@ 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; diff --git a/FruitBankHybrid.Shared/Components/GridShippingItemTemplate.razor b/FruitBankHybrid.Shared/Components/GridShippingItemTemplate.razor index 3b3362a..a1209e5 100644 --- a/FruitBankHybrid.Shared/Components/GridShippingItemTemplate.razor +++ b/FruitBankHybrid.Shared/Components/GridShippingItemTemplate.razor @@ -133,7 +133,7 @@ [Parameter] public IId? ParentDataItem { get; set; } [Parameter] public IEnumerable? ProductDtos { get; set; } - [Parameter] public List? ShippingItems { get; set; } + [Parameter] public AcObservableCollection? ShippingItems { get; set; } [Parameter] public AcObservableCollection? ShippingDocuments { get; set; } public bool IsMasterGrid => ParentDataItem == null; @@ -167,7 +167,6 @@ if (!IsMasterGrid) { if (ShippingDocuments == null && ParentDataItem is ShippingDocument shippingDocumentParent) ShippingDocuments = [shippingDocumentParent]; - return; } @@ -175,8 +174,7 @@ { if (ShippingDocuments == null) { - ShippingDocuments = []; - ShippingDocuments.AddRange(await FruitBankSignalRClient.GetShippingDocuments() ?? []); + ShippingDocuments = new AcObservableCollection(await FruitBankSignalRClient.GetShippingDocuments() ?? []); } else if (ShippingDocuments.Count == 0 || forceReload) { diff --git a/FruitBankHybrid.Shared/Components/Grids/FruitBankGridBase.cs b/FruitBankHybrid.Shared/Components/Grids/FruitBankGridBase.cs index 70c8a39..6cc8554 100644 --- a/FruitBankHybrid.Shared/Components/Grids/FruitBankGridBase.cs +++ b/FruitBankHybrid.Shared/Components/Grids/FruitBankGridBase.cs @@ -14,7 +14,7 @@ namespace FruitBankHybrid.Shared.Components.Grids; //var a = new GridDevExtremeDataSource(DataSource.AsQueryable().Where(x=>x.IsMeasurable)); -public class FruitBankGridBase : MgGridBase, TDataItem, int, LoggerClient> where TDataItem : class, IId +public class FruitBankGridBase : MgGridBase, TDataItem, int, LoggerClient> where TDataItem : class, IId { [Inject] public required LoggedInModel LoggedInModel { get; set; } [Inject] public required IJSRuntime JSRuntime { get; set; } diff --git a/FruitBankHybrid.Shared/Components/Grids/ShippingDocuments/GridShippingDocumentBase.cs b/FruitBankHybrid.Shared/Components/Grids/ShippingDocuments/GridShippingDocumentBase.cs new file mode 100644 index 0000000..e84e019 --- /dev/null +++ b/FruitBankHybrid.Shared/Components/Grids/ShippingDocuments/GridShippingDocumentBase.cs @@ -0,0 +1,93 @@ +using AyCode.Core.Interfaces; +using AyCode.Utils.Extensions; +using DevExpress.Blazor; +using FruitBank.Common.Entities; +using FruitBank.Common.Interfaces; +using FruitBank.Common.SignalRs; +using FruitBankHybrid.Shared.Pages; +using Microsoft.AspNetCore.Components; + +namespace FruitBankHybrid.Shared.Components.Grids.ShippingDocuments; + +public class GridShippingDocumentBase : FruitBankGridBase, IGrid +{ + private bool _isFirstInitializeParameterCore; + private bool _isFirstInitializeParameters; + + public GridShippingDocumentBase () : base() + { + AddMessageTag = SignalRTags.AddShippingDocument; + UpdateMessageTag = SignalRTags.UpdateShippingDocument; + + //RemoveMessageTag = SignalRTags.; + } + + protected override async Task OnInitializedAsync() + { + if (GetAllMessageTag > 0) return; + + if (IsMasterGrid) GetAllMessageTag = SignalRTags.GetShippingDocuments; + else + { + if (ContextIds == null || ContextIds.Length == 0) ContextIds = [ParentDataItem!.Id]; + + switch (ParentDataItem) + { + case IShipping: + GetAllMessageTag = SignalRTags.GetShippingDocumentsByShippingId; + if (KeyFieldNameToParentId.IsNullOrWhiteSpace()) KeyFieldNameToParentId = nameof(ShippingDocument.ShippingId); + break; + + case IProductDto: + AddMessageTag = 0;//SignalRTags.None; + GetAllMessageTag = SignalRTags.GetShippingDocumentsByProductId; + break; + + case IPartner: + GetAllMessageTag = SignalRTags.GetShippingDocumentsByPartnerId; + if (KeyFieldNameToParentId.IsNullOrWhiteSpace()) KeyFieldNameToParentId = nameof(ShippingDocument.PartnerId); + break; + } + } + + await base.OnInitializedAsync(); + } + + protected override void OnParametersSet() + { + base.OnParametersSet(); + + if (!_isFirstInitializeParameters) + { + //if (!IsMasterGrid && (ContextIds == null || ContextIds.Length == 0)) + //{ + // ContextIds = [ParentDataItem!.Id]; + // GetAllMessageTag = SignalRTags.GetShippingItemsByDocumentId; + //} + + _isFirstInitializeParameters = false; + } + } + + protected override async Task SetParametersAsyncCore(ParameterView parameters) + { + await base.SetParametersAsyncCore(parameters); + + if (!_isFirstInitializeParameterCore) + { + //if (!IsMasterGrid && (ContextIds == null || ContextIds.Length == 0)) + //{ + // ContextIds = [ParentDataItem!.Id]; + // GetAllMessageTag = SignalRTags.GetShippingItemsByDocumentId; + //} + + //ShowFilterRow = true; + //ShowGroupPanel = true; + //AllowSort = false; + + //etc... + + _isFirstInitializeParameterCore = false; + } + } +} \ No newline at end of file diff --git a/FruitBankHybrid.Shared/Components/Grids/ShippingItems/GridShippingItemBase.cs b/FruitBankHybrid.Shared/Components/Grids/ShippingItems/GridShippingItemBase.cs index a098d73..068c9bc 100644 --- a/FruitBankHybrid.Shared/Components/Grids/ShippingItems/GridShippingItemBase.cs +++ b/FruitBankHybrid.Shared/Components/Grids/ShippingItems/GridShippingItemBase.cs @@ -36,7 +36,7 @@ public class GridShippingItemBase : FruitBankGridBase, IGrid GetAllMessageTag = SignalRTags.GetShippingItemsByDocumentId; break; case IShipping: - AddMessageTag = SignalRTags.None; + AddMessageTag = 0;//SignalRTags.None; GetAllMessageTag = SignalRTags.GetShippingItemsByShippingId; break; diff --git a/FruitBankHybrid.Shared/Components/Grids/Shippings/GridShipping.razor b/FruitBankHybrid.Shared/Components/Grids/Shippings/GridShipping.razor index c0cebb0..af07c04 100644 --- a/FruitBankHybrid.Shared/Components/Grids/Shippings/GridShipping.razor +++ b/FruitBankHybrid.Shared/Components/Grids/Shippings/GridShipping.razor @@ -19,7 +19,7 @@ CssClass="@GridCss" ValidationEnabled="false" FocusedRowChanged="Grid_FocusedRowChanged"> - + @@ -39,12 +39,15 @@ @{ var observableShippingDocuments = new AcObservableCollection(shippingDocuments); - + } - + @{ + var observableShippingItems = new AcObservableCollection(shippingDocuments.SelectMany(sd => sd.ShippingItems ?? [])); + + } } @@ -73,7 +76,7 @@ [Inject] public required DatabaseClient Database { get; set; } [Parameter] public bool IsMasterGrid { get; set; } = false; - //[Parameter] public OrderDto? OrderDto { get; set; } + [Parameter] public List? Partners { get; set; } [Parameter] public AcObservableCollection? Shippings { get; set; } const string ExportFileName = "ExportResult"; @@ -96,8 +99,15 @@ { 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() ?? []); + } + } if (Grid == null) return; diff --git a/FruitBankHybrid.Shared/Pages/ShippingsAdmin.razor b/FruitBankHybrid.Shared/Pages/ShippingsAdmin.razor index 4aeb411..1386f01 100644 --- a/FruitBankHybrid.Shared/Pages/ShippingsAdmin.razor +++ b/FruitBankHybrid.Shared/Pages/ShippingsAdmin.razor @@ -1,5 +1,6 @@ @page "/ShippingsAdmin" @using FruitBank.Common.Dtos +@using FruitBank.Common.Entities @using FruitBankHybrid.Shared.Components @using FruitBankHybrid.Shared.Components.Grids.Shippings @using FruitBankHybrid.Shared.Databases @@ -16,15 +17,15 @@ Text="Adatok szinkronizálása folyamatban..."> @* @bind-ActiveTabIndex="@ActiveTabIndex" *@ - + - + - + diff --git a/FruitBankHybrid.Shared/Pages/ShippingsAdmin.razor.cs b/FruitBankHybrid.Shared/Pages/ShippingsAdmin.razor.cs index 7ade4cd..30cdf5a 100644 --- a/FruitBankHybrid.Shared/Pages/ShippingsAdmin.razor.cs +++ b/FruitBankHybrid.Shared/Pages/ShippingsAdmin.razor.cs @@ -34,8 +34,9 @@ public partial class ShippingsAdmin : ComponentBase public AcObservableCollection Shippings { get; set; } = []; public AcObservableCollection ShippingDocuments { get; set; } = []; - public List ShippingItems { get; set; } = []; + public AcObservableCollection ShippingItems { get; set; } = []; public List ShippingItemPallets { get; set; } = []; + public List Partners { get; set; } = []; public bool AutoCollapseDetailRow { get; set; } @@ -74,7 +75,7 @@ public partial class ShippingsAdmin : ComponentBase { case 0: //await Database.ProductDtoTable.LoadDataAsync(true); - gridProductDtoTemplate.Grid.Reload(); + //gridProductDtoTemplate.Grid.Reload(); break; case 1: if (Shippings.Count == 0) @@ -82,7 +83,7 @@ public partial class ShippingsAdmin : ComponentBase //Shippings.AddRange((await FruitBankSignalRClient.GetShippings() ?? []).OrderByDescending(o => o.Id)); //.Where(o => o.HasMeasuringAccess(LoggedInModel.CustomerDto?.Id, LoggedInModel.IsRevisor)).OrderBy(o => o.DateOfReceipt).ToList();} } - gridShipping.Grid.Reload(); + //gridShipping.Grid.Reload(); break; case 2: @@ -91,14 +92,14 @@ public partial class ShippingsAdmin : ComponentBase //ShippingDocuments.AddRange((await FruitBankSignalRClient.GetShippingDocuments() ?? []).OrderByDescending(o => o.Id)); //.Where(o => o.HasMeasuringAccess(LoggedInModel.CustomerDto?.Id, LoggedInModel.IsRevisor)).OrderBy(o => o.DateOfReceipt).ToList(); } - gridShippingDocument.Grid.Reload(); + //gridShippingDocument.Grid.Reload(); break; case 3: - gridShippingItemTemplate.Grid.Reload(); + //gridShippingItemTemplate.Grid.Reload(); //if(ShippingItems.Count=0) ShippingItems.AddRange((await FruitBankSignalRClient.GetShippingItems() ?? []).OrderByDescending(o => o.Id)); //.Where(o => o.HasMeasuringAccess(LoggedInModel.CustomerDto?.Id, LoggedInModel.IsRevisor)).OrderBy(o => o.DateOfReceipt).ToList(); break; case 4: - gridShippingItemPallet.gridOrderItemPallet.Reload(); + //gridShippingItemPallet.gridOrderItemPallet.Reload(); break; } diff --git a/FruitBankHybrid.Shared/Services/SignalRs/FruitBankSignalRClient.cs b/FruitBankHybrid.Shared/Services/SignalRs/FruitBankSignalRClient.cs index 594a2e7..eb2e101 100644 --- a/FruitBankHybrid.Shared/Services/SignalRs/FruitBankSignalRClient.cs +++ b/FruitBankHybrid.Shared/Services/SignalRs/FruitBankSignalRClient.cs @@ -83,6 +83,9 @@ namespace FruitBankHybrid.Shared.Services.SignalRs public Task GetShippingById(int id) => GetByIdAsync(SignalRTags.GetShippingById, id); + public Task AddShipping(Shipping shipping) + => PostDataAsync(SignalRTags.AddShipping, shipping); + public Task UpdateShipping(Shipping shipping) => PostDataAsync(SignalRTags.UpdateShipping, shipping); @@ -139,6 +142,15 @@ namespace FruitBankHybrid.Shared.Services.SignalRs public Task GetShippingDocumentById(int id) => GetByIdAsync(SignalRTags.GetShippingDocumentById, id); + public Task?> GetShippingDocumentsByShippingId(int shippingId) + => GetAllAsync>(SignalRTags.GetShippingDocumentsByShippingId, [shippingId]); + + public Task?> GetShippingDocumentsByProductId(int productId) + => GetAllAsync>(SignalRTags.GetShippingDocumentsByShippingId, [productId]); + + public Task?> GetShippingDocumentsByPartnerId(int partnerId) + => GetAllAsync>(SignalRTags.GetShippingDocumentsByShippingId, [partnerId]); + public Task AddShippingDocument(ShippingDocument shippingDocument) => PostDataAsync(SignalRTags.AddShippingDocument, shippingDocument); diff --git a/FruitBankHybrid.Shared/Services/SignalRs/SignalRDataSource.cs b/FruitBankHybrid.Shared/Services/SignalRs/SignalRDataSource.cs index 112ce2b..897376a 100644 --- a/FruitBankHybrid.Shared/Services/SignalRs/SignalRDataSource.cs +++ b/FruitBankHybrid.Shared/Services/SignalRs/SignalRDataSource.cs @@ -3,6 +3,7 @@ using AyCode.Core.Interfaces; using AyCode.Services.Server.SignalRs; using AyCode.Services.SignalRs; using System.Diagnostics; +using AyCode.Core.Helpers; namespace FruitBankHybrid.Shared.Services.SignalRs; @@ -14,4 +15,4 @@ public class SignalRDataSourceList(AcSignalRClientBase signalRClient, [Serializable] [DebuggerDisplay("Count = {Count}")] public class SignalRDataSourceObservable(AcSignalRClientBase signalRClient, SignalRCrudTags signalRCrudTags, params object[]? contextIds) - : AcSignalRDataSource>(signalRClient, signalRCrudTags, contextIds) where TDataItem : class, IId; \ No newline at end of file + : AcSignalRDataSource>(signalRClient, signalRCrudTags, contextIds) where TDataItem : class, IId; \ No newline at end of file From 7c1cd6574e8fc9389220a95f08f20874054f4d54 Mon Sep 17 00:00:00 2001 From: Loretta Date: Fri, 21 Nov 2025 17:16:59 +0100 Subject: [PATCH 3/3] OrderItemGrid improvement, fixes --- .../Components/GridDetailOrderItemDto.razor | 53 +++++++++---------- 1 file changed, 24 insertions(+), 29 deletions(-) diff --git a/FruitBankHybrid.Shared/Components/GridDetailOrderItemDto.razor b/FruitBankHybrid.Shared/Components/GridDetailOrderItemDto.razor index bf0da5f..5a879d2 100644 --- a/FruitBankHybrid.Shared/Components/GridDetailOrderItemDto.razor +++ b/FruitBankHybrid.Shared/Components/GridDetailOrderItemDto.razor @@ -10,7 +10,7 @@ @inject FruitBankSignalRClient FruitBankSignalRClient ().UseWaitAsync()) + + using (await ObjectLock.GetSemaphore().UseWaitAsync()) { - // if (ProductDtos == null || !ProductDtos.Any()) - // { - // ProductDtos = await Database.ProductDtoTable.LoadDataAsync(!forceReload); - - // // Database.ProductDtoTable.LoadDataAsync(!forceReload).ContinueWith(x => - // // { - // // ProductDtos = x.Result; - // // }).Forget(); - // } + if (ProductDtos == null || !ProductDtos.Any() || forceReload) ProductDtos = await Database.ProductDtoTable.LoadDataAsync(!forceReload); } - if (!IsMasterGrid) return; - - using (await ObjectLock.GetSemaphore().UseWaitAsync()) + if (IsMasterGrid) { - if (OrderItemDtos == null) OrderItemDtos = await FruitBankSignalRClient.GetAllOrderItemDtos() ?? []; - else if (OrderItemDtos.Count == 0 || forceReload) + using (await ObjectLock.GetSemaphore().UseWaitAsync()) { - OrderItemDtos.Clear(); - OrderItemDtos.AddRange(await FruitBankSignalRClient.GetAllOrderItemDtos() ?? []); + if (OrderItemDtos == null) OrderItemDtos = await FruitBankSignalRClient.GetAllOrderItemDtos() ?? []; + else if (OrderItemDtos.Count == 0 || forceReload) + { + OrderItemDtos.Clear(); + OrderItemDtos.AddRange(await FruitBankSignalRClient.GetAllOrderItemDtos() ?? []); + } } - } - //if (forceReload) + // if (ProductDtos == null || !ProductDtos.Any() || forceReload) + // { + // //ProductDtos = await Database.ProductDtoTable.LoadDataAsync(!forceReload); + + // Database.ProductDtoTable.LoadDataAsync(!forceReload).ContinueWith(x => + // { + // ProductDtos = x.Result; + // }).Forget(); + // } + + //if (forceReload) Grid?.Reload(); - - if (ProductDtos == null || !ProductDtos.Any() || forceReload) - { - //ProductDtos = await Database.ProductDtoTable.LoadDataAsync(!forceReload); - - Database.ProductDtoTable.LoadDataAsync(!forceReload).ContinueWith(x => - { - ProductDtos = x.Result; - }).Forget(); } + LoadingPanelVisibility.Visible = false; } } \ No newline at end of file