diff --git a/TIAM.Database/DataLayers/Admins/AdminDal.cs b/TIAM.Database/DataLayers/Admins/AdminDal.cs index fcd1bc8e..07a45f3a 100644 --- a/TIAM.Database/DataLayers/Admins/AdminDal.cs +++ b/TIAM.Database/DataLayers/Admins/AdminDal.cs @@ -31,6 +31,7 @@ using DevExpress.Data.Linq.Helpers; using TIAM.Database.DbSets.Drivers; using AyCode.Entities.Server.LogItems; using AyCode.Interfaces.Entities; +using TIAM.Models.Dtos.Users; namespace TIAM.Database.DataLayers.Admins { @@ -41,7 +42,6 @@ namespace TIAM.Database.DataLayers.Admins } #region Car - public Task> GetAllCarsAsync() => SessionAsync(ctx => ctx.Cars.OrderBy(x => x.Manufacture).ThenBy(x => x.CarModel).ToList()); public Task> GetAllCarsbyProductIdAsync(Guid productId) => SessionAsync(ctx => ctx.Cars.Where(x => x.UserProductMapping.ProductId == productId).OrderBy(x => x.Manufacture).ThenBy(x => x.CarModel).ToList()); public Car? GetCarById(Guid carId) => Session(ctx => ctx.Cars.FirstOrDefault(x => x.Id == carId)); @@ -217,9 +217,11 @@ namespace TIAM.Database.DataLayers.Admins public Task UpdateUserAsync(User user) => TransactionAsync(ctx => ctx.UpdateUser(user)); public Task RemoveUserAsync(Guid userId) => TransactionAsync(ctx => ctx.RemoveUser(userId)); + #region Product public Product? GetProductById(Guid contextId, bool includeUsers = true) => Session(ctx => ctx.GetProductById(contextId, includeUsers)); public Task GetProductByIdAsync(Guid contextId, bool includeUsers = true) => SessionAsync(ctx => ctx.GetProductById(contextId, includeUsers)); - + + public Task> GetProductModelDtoNamesAsync() => SessionAsync(ctx => ctx.Products.Select(x => new ProductModelDtoName(x)).ToList()); public string GetProductsJson(bool includeUsers = true) => Session(ctx => ctx.ProductsWithUserRelations(includeUsers).ToJson()); public List GetProductsByServiceProviderId(Guid serviceProviderId, bool includeUsers = true) => Session(ctx => ctx.GetProductsByCompanyId(serviceProviderId, includeUsers).ToList()); public string GetProductsJsonByServiceProviderId(Guid serviceProviderId, bool includeUsers = true) => Session(ctx => ctx.GetProductsByCompanyId(serviceProviderId, includeUsers).ToJson()); @@ -228,6 +230,7 @@ namespace TIAM.Database.DataLayers.Admins public Task UpdateProductAsync(Product product) => UpdateSafeAsync(product, (ctx, safeProduct) => ctx.UpdateProduct(safeProduct)); public Task RemoveProductAsync(Product product) => RemoveProductAsync(product.Id); public Task RemoveProductAsync(Guid productId) => TransactionAsync(ctx => ctx.RemoveProduct(productId)); + #endregion Product public UserProductMapping? GetUserProductMappingById(Guid userProductMappingId, bool autoInclude = true) => Session(ctx => ctx.GetUserProductMappingById(userProductMappingId, autoInclude)); public Task GetUserProductMappingByIdAsync(Guid userProductMappingId, bool autoInclude = true) => SessionAsync(ctx => ctx.GetUserProductMappingById(userProductMappingId, autoInclude)); diff --git a/TIAM.Database/DataLayers/Users/UserDal.cs b/TIAM.Database/DataLayers/Users/UserDal.cs index b6ec58eb..d95fffe3 100644 --- a/TIAM.Database/DataLayers/Users/UserDal.cs +++ b/TIAM.Database/DataLayers/Users/UserDal.cs @@ -6,6 +6,7 @@ using TIAM.Entities.Emails; using TIAM.Entities.Profiles; using TIAM.Entities.ServiceProviders; using TIAM.Entities.Users; +using TIAM.Models.Dtos.Users; namespace TIAM.Database.DataLayers.Users { @@ -20,6 +21,8 @@ namespace TIAM.Database.DataLayers.Users { } + public Task> GetUserModelDtoEmailsAsync() => SessionAsync(ctx => ctx.Users.Select(x => new UserModelDtoEmail(x)).ToList()); + public async Task CreateUserAsync(User user) { Context.Users.Add(user); diff --git a/TIAM.Models/Dtos/Products/ProductModelDtoName.cs b/TIAM.Models/Dtos/Products/ProductModelDtoName.cs new file mode 100644 index 00000000..728271df --- /dev/null +++ b/TIAM.Models/Dtos/Products/ProductModelDtoName.cs @@ -0,0 +1,21 @@ +using AyCode.Interfaces; +using TIAM.Entities.Products; + +namespace TIAM.Models.Dtos.Products; + +public class ProductModelDtoName : IAcModelDtoBase +{ + public Guid Id { get; set; } + public string Name { get; set; } + + public ProductModelDtoName() + { } + public ProductModelDtoName(Product product) : this(product.Id, product.Name) + { } + + public ProductModelDtoName(Guid id, string name) : this() + { + Id = id; + Name = name; + } +} \ No newline at end of file diff --git a/TIAM.Models/Dtos/Users/UserModelDto.cs b/TIAM.Models/Dtos/Users/UserModelDto.cs index c50d7bd3..de93ccfe 100644 --- a/TIAM.Models/Dtos/Users/UserModelDto.cs +++ b/TIAM.Models/Dtos/Users/UserModelDto.cs @@ -1,5 +1,6 @@ using System.ComponentModel.DataAnnotations.Schema; using System.Text.Json.Serialization; +using AyCode.Core.Interfaces; using AyCode.Interfaces; using AyCode.Models.Users; using TIAM.Entities.Products; diff --git a/TIAM.Models/Dtos/Users/UserModelDtoEmail.cs b/TIAM.Models/Dtos/Users/UserModelDtoEmail.cs new file mode 100644 index 00000000..eeb35ab9 --- /dev/null +++ b/TIAM.Models/Dtos/Users/UserModelDtoEmail.cs @@ -0,0 +1,22 @@ +using AyCode.Interfaces; +using AyCode.Interfaces.Users; +using TIAM.Entities.Users; + +namespace TIAM.Models.Dtos.Users; + +public class UserModelDtoEmail : IAcEmailAddress, IAcModelDtoBase +{ + public Guid Id { get; set; } + public string EmailAddress { get; set; } + + public UserModelDtoEmail() + { } + public UserModelDtoEmail(User user) : this(user.Id, user.EmailAddress) + { } + + public UserModelDtoEmail(Guid id, string emailAddress) : this() + { + Id = id; + EmailAddress = emailAddress; + } +} \ No newline at end of file diff --git a/TIAM.Services/SignalRTags.cs b/TIAM.Services/SignalRTags.cs index b617a802..27304211 100644 --- a/TIAM.Services/SignalRTags.cs +++ b/TIAM.Services/SignalRTags.cs @@ -85,6 +85,8 @@ public class SignalRTags : AcSignalRTags public const int RemoveProduct = 75; public const int GetProductsById = 76; public const int GetAllProducts = 77; + public const int GetAllProductModelDtoNames = 78; + public const int GetTransferDestinationById = 80; public const int GetAllTransferDestinations = 81; @@ -101,6 +103,7 @@ public class SignalRTags : AcSignalRTags public const int GetTransferDestinationToProductsByTransferDestinationId = 96; public const int GetAllUsers = 120; + public const int GetAllUserModelDtoEmails = 125; public const int GetAllLogItemsByFilterText = 1000; } diff --git a/TIAMSharedUI/Pages/User/SysAdmins/LogViewerGridComponent.razor b/TIAMSharedUI/Pages/User/SysAdmins/LogViewerGridComponent.razor index 25680fd9..7746ba15 100644 --- a/TIAMSharedUI/Pages/User/SysAdmins/LogViewerGridComponent.razor +++ b/TIAMSharedUI/Pages/User/SysAdmins/LogViewerGridComponent.razor @@ -168,7 +168,7 @@ _takeCount = value; _contextParams[0] = _takeCount; - await _logViewerGrid.LoadDataSourceAsync(); + await _logViewerGrid.ReloadDataSourceAsync(); } private async Task OnValueChangedStartDate(DateTime value) @@ -181,7 +181,7 @@ _contextParams[1] = _fromDate; if (_fromDate.Date > _toDate.Date) return; - await _logViewerGrid.LoadDataSourceAsync(); + await _logViewerGrid.ReloadDataSourceAsync(); } private async Task OnValueChangedEndDate(DateTime value) @@ -192,7 +192,7 @@ _contextParams[2] = _toDate; if (_fromDate.Date > _toDate.Date) return; - await _logViewerGrid.LoadDataSourceAsync(); + await _logViewerGrid.ReloadDataSourceAsync(); } void Grid_CustomizeElement(GridCustomizeElementEventArgs e) diff --git a/TIAMSharedUI/Pages/User/SysAdmins/TransferToDriverGridComponent.razor b/TIAMSharedUI/Pages/User/SysAdmins/TransferToDriverGridComponent.razor index 2cf730b4..629a257d 100644 --- a/TIAMSharedUI/Pages/User/SysAdmins/TransferToDriverGridComponent.razor +++ b/TIAMSharedUI/Pages/User/SysAdmins/TransferToDriverGridComponent.razor @@ -146,11 +146,41 @@ _logger.Info($"DetailGridData: {ParentData.TransferToDrivers.Count}"); + await base.OnInitializedAsync(); + } + + protected override async Task OnAfterRenderAsync(bool firstRender) + { + if (firstRender) + { + LoadComboBoxItems().Forget(); + } + + await base.OnAfterRenderAsync(firstRender); + } + + void CustomizeEditModel(GridCustomizeEditModelEventArgs e) + { + if (!e.IsNew) return; + + var newDriver = (TransferToDriver)e.EditModel; + newDriver.Id = Guid.NewGuid(); + newDriver.CarId = Guid.Empty; + newDriver.LicencePlate = ""; + newDriver.Car = new Car(); + newDriver.Price = 0; + newDriver.TransferId = ParentData.Id; + } + + private Task LoadComboBoxItems() + { // _cars.AddRange((await AdminSignalRClient.GetAllAsync>(SignalRTags.GetAllCarsByProductId, [TiamConstClient.TransferProductId])) ?? []); // _drivers.AddRange(_cars.DistinctBy(x => x.UserProductMappingId).Select(x => x.UserProductMapping)); //AdminSignalRClient.GetAllIntoAsync(_cars, SignalRTags.GetAllCarsByProductId, [TiamConstClient.TransferProductId]) - AdminSignalRClient.GetAllAsync>(SignalRTags.GetAllCarsByProductId, async response => + + //TODO: CarModelDtoMin-t megcsinálni és azt lekérni a ComboBox-hoz! - J. + return AdminSignalRClient.GetAllAsync>(SignalRTags.GetAllCarsByProductId, async response => { if (response.Status != SignalResponseStatus.Success || response.ResponseData == null) { @@ -159,35 +189,13 @@ } _cars.Clear(); - _drivers.Clear(); - _cars.AddRange(response.ResponseData); + + _drivers.Clear(); _drivers.AddRange(_cars.DistinctBy(x => x.UserProductMappingId).Select(x => x.UserProductMapping)); await InvokeAsync(StateHasChanged); - }, [TiamConstClient.TransferProductId]).Forget(); - - await base.OnInitializedAsync(); - } - - protected override async Task OnAfterRenderAsync(bool firstRender) - { - if (firstRender) - { - // _transferToDriversGrid.BeginUpdate(); - // _cars.AddRange((await AdminSignalRClient.GetAllAsync>(SignalRTags.GetAllCars))!); - // _transferToDriversGrid.EndUpdate(); - - // AdminSignalRClient.GetAllAsync>(SignalRTags.GetAllCars, response => - // { - // if (response is { Status: SignalResponseStatus.Success, ResponseData: not null }) - // _cars.AddRange(response.ResponseData); - - // return Task.CompletedTask; - // }).Forget(); - } - - await base.OnAfterRenderAsync(firstRender); + }, [TiamConstClient.TransferProductId]); } private void DataItemChanged(GridDataItemChangedEventArgs args) @@ -222,17 +230,4 @@ { _logger.Debug($"DataItemDeleting"); } - - void CustomizeEditModel(GridCustomizeEditModelEventArgs e) - { - if (!e.IsNew) return; - - var newDriver = (TransferToDriver)e.EditModel; - newDriver.Id = Guid.NewGuid(); - newDriver.CarId = Guid.Empty; - newDriver.LicencePlate = ""; - newDriver.Car = new Car(); - newDriver.Price = 0; - newDriver.TransferId = ParentData.Id; - } } \ No newline at end of file diff --git a/TIAMSharedUI/Pages/User/SysAdmins/UserProductMappingGridComponent.razor b/TIAMSharedUI/Pages/User/SysAdmins/UserProductMappingGridComponent.razor index e5234478..3b56832e 100644 --- a/TIAMSharedUI/Pages/User/SysAdmins/UserProductMappingGridComponent.razor +++ b/TIAMSharedUI/Pages/User/SysAdmins/UserProductMappingGridComponent.razor @@ -17,6 +17,7 @@ @using AyCode.Models.Users @using AyCode.Services.SignalRs @using TIAM.Core.Consts +@using TIAM.Models.Dtos.Products @inject IServiceProviderDataService ServiceProviderDataService @inject IEnumerable LogWriters @inject AdminSignalRClient AdminSignalRClient @@ -24,6 +25,7 @@ @@ -62,7 +64,7 @@ var userProductMappingEditModel = (UserProductMapping)context.EditModel; } - @@ -99,22 +101,32 @@ private bool? _isNewState = null; private LoggerClient _logger; - private static List _users = []; - private static List _products = []; - + private List _userProductMapping = []; //TODO: kell a UserProductMappingDetailGridComponent és utána ez is static lehet! - J. + private static List _userModelDtoEmails = []; + private static List _productModelDtoNames = []; + protected override async Task OnInitializedAsync() { _logger = new LoggerClient(LogWriters.ToArray()); - AdminSignalRClient.GetAllIntoAsync(_products, SignalRTags.GetAllProducts).Forget(); - AdminSignalRClient.GetAllIntoAsync(_users, SignalRTags.GetAllUsers).Forget(); - await base.OnInitializedAsync(); } + protected override void OnAfterRender(bool firstRender) + { + if (firstRender) + { + AdminSignalRClient.GetAllIntoAsync(_userModelDtoEmails, SignalRTags.GetAllUserModelDtoEmails).Forget(); + AdminSignalRClient.GetAllIntoAsync(_productModelDtoNames, SignalRTags.GetAllProductModelDtoNames).Forget(); + } + + base.OnAfterRender(firstRender); + } + void CustomizeEditModel(GridCustomizeEditModelEventArgs e) { _isNewState = e.IsNew; + if (!e.IsNew) return; // var newProductMapping = new UserProductMapping diff --git a/TIAMSharedUI/Shared/Components/Cards/CardBase.cs b/TIAMSharedUI/Shared/Components/Cards/CardBase.cs index 816ab1c5..e7cc258e 100644 --- a/TIAMSharedUI/Shared/Components/Cards/CardBase.cs +++ b/TIAMSharedUI/Shared/Components/Cards/CardBase.cs @@ -85,7 +85,13 @@ namespace TIAMSharedUI.Shared.Components.Cards return _dataSource!; } - set => _dataSourceParam = value; + set + { + _dataSourceParam = value; + + if (_dataSource != null! && _dataSourceParam is List workingReferenceList) + _dataSource.SetWorkingReferenceList(workingReferenceList); + } } protected override async Task OnInitializedAsync() @@ -125,7 +131,7 @@ namespace TIAMSharedUI.Shared.Components.Cards if (firstRender) { - if (_dataSourceParam.Count > 0) await _dataSource.LoadDataSource(_dataSourceParam); + if (_dataSourceParam != null!) await _dataSource.LoadDataSource(_dataSourceParam, true, true); else _dataSource.LoadDataSourceAsync(true).Forget(); } } diff --git a/TIAMSharedUI/Shared/Components/Grids/TiamGrid.cs b/TIAMSharedUI/Shared/Components/Grids/TiamGrid.cs index ba8a25f8..05ff2ce9 100644 --- a/TIAMSharedUI/Shared/Components/Grids/TiamGrid.cs +++ b/TIAMSharedUI/Shared/Components/Grids/TiamGrid.cs @@ -46,7 +46,7 @@ namespace TIAMSharedUI.Shared.Components.Grids if (_dataSource != null! && _dataSource.FilterText != value) { _dataSource.FilterText = value; - LoadDataSourceAsync().Forget(); + ReloadDataSourceAsync().Forget(); } } } @@ -89,7 +89,13 @@ namespace TIAMSharedUI.Shared.Components.Grids return _dataSource!; } - set => _dataSourceParam = value; + set + { + _dataSourceParam = value; + + if (_dataSource != null! && _dataSourceParam is List workingReferenceList) + _dataSource.SetWorkingReferenceList(workingReferenceList); + } } protected override async Task OnInitializedAsync() @@ -142,13 +148,13 @@ namespace TIAMSharedUI.Shared.Components.Grids protected override async Task OnAfterRenderAsync(bool firstRender) { - await base.OnAfterRenderAsync(firstRender); - if (firstRender) { - if (_dataSourceParam.Count > 0) await _dataSource.LoadDataSource(_dataSourceParam); + if (_dataSourceParam != null!) await _dataSource.LoadDataSource(_dataSourceParam, true, true); else _dataSource.LoadDataSourceAsync(true).Forget(); } + + await base.OnAfterRenderAsync(firstRender); } public Task AddDataItem(TDataItem dataItem) @@ -326,7 +332,7 @@ namespace TIAMSharedUI.Shared.Components.Grids return _dataSource.Remove(dataItem, true); } - public Task LoadDataSourceAsync() + public Task ReloadDataSourceAsync() { return _dataSource.LoadDataSourceAsync(false); } diff --git a/TIAMWebApp/Server/Controllers/ServiceProviderAPIController.cs b/TIAMWebApp/Server/Controllers/ServiceProviderAPIController.cs index a8a1a548..685efd52 100644 --- a/TIAMWebApp/Server/Controllers/ServiceProviderAPIController.cs +++ b/TIAMWebApp/Server/Controllers/ServiceProviderAPIController.cs @@ -19,6 +19,8 @@ using AyCode.Utils.Extensions; using TIAM.Entities.Drivers; using TIAM.Services; using TIAM.Entities.Products; +using TIAM.Models.Dtos.Products; +using TIAM.Models.Dtos.Users; namespace TIAMWebApp.Server.Controllers { @@ -455,6 +457,15 @@ namespace TIAMWebApp.Server.Controllers return products; } + [NonAction] + [SignalR(SignalRTags.GetAllProductModelDtoNames)] + public async Task> GetProductModelDtoNames() + { + _logger.Info("GetUserModelDtoEmails called"); + return await adminDal.GetProductModelDtoNamesAsync(); + } + + [AllowAnonymous] [HttpPost] [Route(APIUrls.GetProductByIdRouteName)] diff --git a/TIAMWebApp/Server/Controllers/UserAPIController.cs b/TIAMWebApp/Server/Controllers/UserAPIController.cs index b01aaf5c..cac6ddca 100644 --- a/TIAMWebApp/Server/Controllers/UserAPIController.cs +++ b/TIAMWebApp/Server/Controllers/UserAPIController.cs @@ -371,11 +371,17 @@ namespace TIAMWebApp.Server.Controllers public async Task> GetAllUsers() { _logger.Info("GetAllUsers called"); - //var users = await _userDal.Ctx.Users.ToListAsync();//.GetUsersAsync(); - //return users; return await userDal.GetUsersAsync(); } + [NonAction] + [SignalR(SignalRTags.GetAllUserModelDtoEmails)] + public async Task> GetUserModelDtoEmails() + { + _logger.Info("GetUserModelDtoEmails called"); + return await userDal.GetUserModelDtoEmailsAsync(); + } + [AllowAnonymous] [HttpGet] [Route(APIUrls.GetUserByEmailRouteName + "/{email}")]