diff --git a/FruitBank.Common/Entities/CargoPartner.cs b/FruitBank.Common/Entities/CargoPartner.cs index 12aa2d43..cd3042a7 100644 --- a/FruitBank.Common/Entities/CargoPartner.cs +++ b/FruitBank.Common/Entities/CargoPartner.cs @@ -17,4 +17,5 @@ public sealed class CargoPartner : PartnerBase, ICargoPartner //[Association(ThisKey = nameof(Id), OtherKey = nameof(Shipping.CargoPartnerId), CanBeNull = true)] public List? Shippings { get; set; } + //public decimal DecProp{get; set; } } \ No newline at end of file diff --git a/FruitBank.Common/Entities/CargoTruck.cs b/FruitBank.Common/Entities/CargoTruck.cs index 3a150dd6..bc4524ba 100644 --- a/FruitBank.Common/Entities/CargoTruck.cs +++ b/FruitBank.Common/Entities/CargoTruck.cs @@ -11,5 +11,7 @@ namespace FruitBank.Common.Entities; public sealed class CargoTruck: MgEntityBase//, ICargoPartner { public int CargoPartnerId { get; set; } + public string CountryCode { get; set; } public string LicencePlate { get; set; } + } diff --git a/FruitBankHybrid.Shared/Components/GridShippingDocument.razor b/FruitBankHybrid.Shared/Components/GridShippingDocument.razor index d71cabfc..c8cdbd3d 100644 --- a/FruitBankHybrid.Shared/Components/GridShippingDocument.razor +++ b/FruitBankHybrid.Shared/Components/GridShippingDocument.razor @@ -276,15 +276,13 @@ private async Task Callback(ToolbarItemClickEventArgs obj) { - if (windowVisible) - await windowRef.CloseAsync(); - else - await windowRef.ShowAsync(); + if (windowVisible) await windowRef.CloseAsync(); + else await windowRef.ShowAsync(); } private void Callback2(WindowClosingEventArgs obj) { - ReloadDataFromDb(true).Forget(); + ReloadDataFromDb(true).Forget(_logger); } } diff --git a/FruitBankHybrid.Shared/Components/Grids/Cargos/GridCargoPartner.razor b/FruitBankHybrid.Shared/Components/Grids/Cargos/GridCargoPartner.razor index 181dc188..8c025799 100644 --- a/FruitBankHybrid.Shared/Components/Grids/Cargos/GridCargoPartner.razor +++ b/FruitBankHybrid.Shared/Components/Grids/Cargos/GridCargoPartner.razor @@ -29,7 +29,7 @@ - + @@ -41,7 +41,7 @@ - + @if (IsMasterGrid) { var partner = ((CargoPartner)context.DataItem); @@ -51,8 +51,8 @@ @{ - // var observableShippingDocuments = new AcObservableCollection(cargoTrucks); - // + var observableShippingDocuments = new AcObservableCollection(cargoTrucks); + } @@ -66,13 +66,13 @@ } - @if (IsMasterGrid) - { - - } - - - + @if (IsMasterGrid) + { + + } + + + @code { diff --git a/FruitBankHybrid.Shared/Components/Grids/Cargos/GridCargoTruck.razor b/FruitBankHybrid.Shared/Components/Grids/Cargos/GridCargoTruck.razor new file mode 100644 index 00000000..c264877d --- /dev/null +++ b/FruitBankHybrid.Shared/Components/Grids/Cargos/GridCargoTruck.razor @@ -0,0 +1,99 @@ +@using System.Collections.ObjectModel +@using AyCode.Blazor.Components.Components.Grids +@using AyCode.Core.Helpers +@using AyCode.Core.Interfaces +@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.Services.Loggers +@using FruitBankHybrid.Shared.Services.SignalRs + +@inject IEnumerable LogWriters +@inject FruitBankSignalRClient FruitBankSignalRClient + + + + + + + + + + + + + + + + @if (IsMasterGrid) + { + + } + + + + + +@code { + //[Inject] public required ObjectLock ObjectLock { get; set; } + [Inject] public required DatabaseClient Database { get; set; } + + [Parameter] public AcObservableCollection? CargoTrucks { get; set; } + + const string ExportFileName = "ExportResult"; + string GridSearchText = ""; + bool EditItemsEnabled { get; set; } + int FocusedRowVisibleIndex { get; set; } + public GridCargoTruckBase Grid { get; set; } + string GridCss => !IsMasterGrid ? "hide-toolbar" : string.Empty; + + [Parameter] public IId? ParentDataItem { get; set; } + + public bool IsMasterGrid => ParentDataItem == null; + public bool ParentDataItemIsCargoPartner => (ParentDataItem is CargoPartner); + + + 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; + + 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; + } +} + diff --git a/FruitBankHybrid.Shared/Components/Grids/Cargos/GridCargoTruckBase.cs b/FruitBankHybrid.Shared/Components/Grids/Cargos/GridCargoTruckBase.cs new file mode 100644 index 00000000..2c1f1513 --- /dev/null +++ b/FruitBankHybrid.Shared/Components/Grids/Cargos/GridCargoTruckBase.cs @@ -0,0 +1,85 @@ +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.Cargos; + +public class GridCargoTruckBase: FruitBankGridBase, IGrid +{ + private bool _isFirstInitializeParameterCore; + private bool _isFirstInitializeParameters; + + public GridCargoTruckBase() : base() + { + //GetAllMessageTag = SignalRTags.GetCargoTrucks; + AddMessageTag = SignalRTags.AddCargoTruck; + UpdateMessageTag = SignalRTags.UpdateCargoTruck; + + //RemoveMessageTag = SignalRTags.; + } + + protected override async Task OnInitializedAsync() + { + if (GetAllMessageTag > 0) return; + + if (IsMasterGrid) GetAllMessageTag = SignalRTags.GetCargoTrucks; + else + { + if (ContextIds == null || ContextIds.Length == 0) ContextIds = [ParentDataItem!.Id]; + + switch (ParentDataItem) + { + case ICargoPartner: + GetAllMessageTag = SignalRTags.GetCargoTrucks; + if (KeyFieldNameToParentId.IsNullOrWhiteSpace()) KeyFieldNameToParentId = nameof(CargoTruck.CargoPartnerId); + + 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/Databases/DatabaseClient.cs b/FruitBankHybrid.Shared/Databases/DatabaseClient.cs index 29ba205c..7c7e3531 100644 --- a/FruitBankHybrid.Shared/Databases/DatabaseClient.cs +++ b/FruitBankHybrid.Shared/Databases/DatabaseClient.cs @@ -1,5 +1,7 @@ using AyCode.Core.Extensions; +using AyCode.Core.Helpers; using AyCode.Core.Interfaces; +using AyCode.Core.Loggers; using AyCode.Interfaces.Entities; using AyCode.Services.SignalRs; using AyCode.Utils.Extensions; @@ -15,7 +17,6 @@ using Nop.Core.Domain.Orders; using System.Collections.Concurrent; using System.Collections.ObjectModel; using System.Threading; -using AyCode.Core.Helpers; namespace FruitBankHybrid.Shared.Databases; @@ -42,13 +43,12 @@ public class ShippingItemTable : SignalRDataSourceList { private static readonly SignalRCrudTags SignalRCrudTags = new(SignalRTags.GetShippingItems, 0, SignalRTags.AddShippingItem, SignalRTags.UpdateShippingItem, 0); - public ShippingItemTable(AcSignalRClientBase signalRClient, params object[]? contextIds) - : this(signalRClient, SignalRCrudTags, contextIds) + public ShippingItemTable(AcSignalRClientBase signalRClient, IAcLoggerBase? logger, params object[]? contextIds) : this(signalRClient, SignalRCrudTags, logger, contextIds) { } - public ShippingItemTable(AcSignalRClientBase signalRClient, SignalRCrudTags signalRCrudTags, params object[]? contextIds) : base(signalRClient, signalRCrudTags, contextIds) + public ShippingItemTable(AcSignalRClientBase signalRClient, SignalRCrudTags signalRCrudTags, IAcLoggerBase? logger, params object[]? contextIds) : base(signalRClient, signalRCrudTags, logger, contextIds) { } } @@ -108,7 +108,7 @@ public class OrderDtoTable(FruitBankSignalRClient fruitBankSignalRClient) : AcOb public abstract class DatabaseTableBase : SignalRDataSourceObservable where TDataItem : class, IId { - protected DatabaseTableBase(AcSignalRClientBase signalRClient, SignalRCrudTags signalRCrudTags, params object[]? contextIds) : base(signalRClient, signalRCrudTags, contextIds) + protected DatabaseTableBase(AcSignalRClientBase signalRClient, SignalRCrudTags signalRCrudTags, IAcLoggerBase? logger, params object[]? contextIds) : base(signalRClient, signalRCrudTags, logger, contextIds) { } @@ -168,7 +168,7 @@ public class DatabaseClient : DatabaseClientBase _fruitBankSignalRClient = fruitBankSignalRClient; AddTable(new ProductDtoTable(_fruitBankSignalRClient)); - AddTable(new ShippingItemTable(_fruitBankSignalRClient)); + AddTable(new ShippingItemTable(_fruitBankSignalRClient, null)); AddTable(new OrderDtoTable(_fruitBankSignalRClient)); } diff --git a/FruitBankHybrid.Shared/Services/SignalRs/SignalRDataSource.cs b/FruitBankHybrid.Shared/Services/SignalRs/SignalRDataSource.cs index 897376a9..211341b0 100644 --- a/FruitBankHybrid.Shared/Services/SignalRs/SignalRDataSource.cs +++ b/FruitBankHybrid.Shared/Services/SignalRs/SignalRDataSource.cs @@ -1,18 +1,19 @@ -using System.Collections.ObjectModel; +using AyCode.Core.Helpers; using AyCode.Core.Interfaces; +using AyCode.Core.Loggers; using AyCode.Services.Server.SignalRs; using AyCode.Services.SignalRs; +using System.Collections.ObjectModel; using System.Diagnostics; -using AyCode.Core.Helpers; namespace FruitBankHybrid.Shared.Services.SignalRs; [Serializable] [DebuggerDisplay("Count = {Count}")] -public class SignalRDataSourceList(AcSignalRClientBase signalRClient, SignalRCrudTags signalRCrudTags, params object[]? contextIds) - : AcSignalRDataSource>(signalRClient, signalRCrudTags, contextIds) where TDataItem : class, IId; +public class SignalRDataSourceList(AcSignalRClientBase signalRClient, SignalRCrudTags signalRCrudTags, IAcLoggerBase? logger, params object[]? contextIds) + : AcSignalRDataSource>(signalRClient, signalRCrudTags, logger, contextIds) where TDataItem : class, IId; [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 +public class SignalRDataSourceObservable(AcSignalRClientBase signalRClient, SignalRCrudTags signalRCrudTags, IAcLoggerBase? logger, params object[]? contextIds) + : AcSignalRDataSource>(signalRClient, signalRCrudTags, logger, contextIds) where TDataItem : class, IId; \ No newline at end of file