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