diff --git a/TIAM.Services/AcSignalRTags.cs b/TIAM.Services/AcSignalRTags.cs index 6472bacc..6540239b 100644 --- a/TIAM.Services/AcSignalRTags.cs +++ b/TIAM.Services/AcSignalRTags.cs @@ -6,4 +6,5 @@ public class SignalRTags : AcSignalRTags { public const int GetTransfersAsync = 5; public const int GetPropertiesByOwnerIdAsync = 6; + public const int UpdateTransferAsync = 7; } \ No newline at end of file diff --git a/TIAMSharedUI/Pages/EditTransfers.razor b/TIAMSharedUI/Pages/EditTransfers.razor index ef9085b1..d4c37d54 100644 --- a/TIAMSharedUI/Pages/EditTransfers.razor +++ b/TIAMSharedUI/Pages/EditTransfers.razor @@ -265,14 +265,14 @@ else { try { - var result = await transferDataService.UpdateTransferAsync(transfer); - if (result) + var responseTransfer = await transferDataService.UpdateTransferAsync(transfer); + if (responseTransfer != null) { navManager.NavigateTo("/mytransfers"); // Redirect to a list or another page after successful update } else { - errorMessage = $"Error updating transfer: {result.ToString()}"; + errorMessage = $"Error updating transfer: {transfer.Id}"; } } catch (Exception ex) diff --git a/TIAMSharedUI/Pages/User/MyServiceProviders.razor b/TIAMSharedUI/Pages/User/MyServiceProviders.razor index 219169d2..664b6a0f 100644 --- a/TIAMSharedUI/Pages/User/MyServiceProviders.razor +++ b/TIAMSharedUI/Pages/User/MyServiceProviders.razor @@ -10,7 +10,7 @@ @using AyCode.Services.Loggers @using TIAMWebApp.Shared.Application.Services @layout AdminLayout -@inject IAcLogWriterClientBase BrowserConsoleLogWriter +@inject IEnumerable LogWriters @inject IStringLocalizer localizer @inject ISessionService SessionService @inject IServiceProviderDataService ServiceProviderDataService @@ -104,6 +104,7 @@ @code { + private LoggerClient _logger; IGrid Grid { get; set; } Company[]? ServiceProviderData { get; set; } @@ -136,7 +137,7 @@ public async Task SubmitForm(object Result) { //await WizardProcessor.ProcessWizardAsync(Result.GetType(), Result); - BrowserConsoleLogWriter.Info($"Submitted nested form: {Result.GetType().FullName}"); + _logger.Info($"Submitted nested form: {Result.GetType().FullName}"); } @@ -160,10 +161,10 @@ { if (e.IsNew) //add new orderData to orderData array - BrowserConsoleLogWriter.Info("New orderData added"); + _logger.Info("New orderData added"); //await NwindDataService.InsertEmployeeAsync((EditableEmployee)e.EditModel); else - BrowserConsoleLogWriter.Info("orderData updated"); + _logger.Info("orderData updated"); //modify orderData where orderData.Name == e.EditModel.Name //await NwindDataService.UpdateEmployeeAsync((EditableEmployee)e.DataItem, (EditableEmployee)e.EditModel); @@ -174,21 +175,27 @@ { //await NwindDataService.RemoveEmployeeAsync((EditableEmployee)e.DataItem); //remove orderData from orderData array - BrowserConsoleLogWriter.Info("orderData deleted"); + _logger.Info("orderData deleted"); //await UpdateDataAsync(); } async Task UpdateDataAsync() { //DataSource = await NwindDataService.GetEmployeesEditableAsync(); //refresh grid - BrowserConsoleLogWriter.Info("orderData grid refreshed"); + _logger.Info("orderData grid refreshed"); } - protected override void OnInitialized() + protected override Task OnInitializedAsync() { - base.OnInitialized(); + _logger = new LoggerClient(LogWriters.ToArray()); + var myId = SessionService.User.UserId; - var companyPropertiesByOwner = ServiceProviderDataService.GetPropertiesByOwnerIdAsync(myId); + ServiceProviderDataService.GetPropertiesByOwnerIdAsync(myId, companyPropertiesByOwner => + { + _logger.DetailConditional($"companyPropertiesByOwner count: {companyPropertiesByOwner?.Count.ToString() ?? "NULL"}"); + }); + + return base.OnInitializedAsync(); } } diff --git a/TIAMSharedUI/Pages/User/SysAdmins/ManageTransfers.razor b/TIAMSharedUI/Pages/User/SysAdmins/ManageTransfers.razor index 7fc202ba..a195117c 100644 --- a/TIAMSharedUI/Pages/User/SysAdmins/ManageTransfers.razor +++ b/TIAMSharedUI/Pages/User/SysAdmins/ManageTransfers.razor @@ -212,25 +212,25 @@ public List IgnoreList = [ "ReceiverEmailAddress", - "ReceiverFullName", - "ReceiverId", - "SenderEmailAddress", - "SenderFullName", - "SenderId", - "ContextId", + "ReceiverFullName", + "ReceiverId", + "SenderEmailAddress", + "SenderFullName", + "SenderId", + "ContextId", ]; public List Statuses { get; set; } = [ new(Convert.ToInt16(TransferStatusType.OrderSubmitted), "Order submitted"), - new(Convert.ToInt16(TransferStatusType.OrderConfirmed), "Order confirmed"), - new(Convert.ToInt16(TransferStatusType.AssignedToDriver), "Assigned to driver"), - new(Convert.ToInt16(TransferStatusType.DriverConfirmed), "Driver confirmed"), - new(Convert.ToInt16(TransferStatusType.DriverEnRoute), "Driver enroute"), - new(Convert.ToInt16(TransferStatusType.PassengerPickup), "Passenger in car"), - new(Convert.ToInt16(TransferStatusType.Finished), "Finished"), - new(Convert.ToInt16(TransferStatusType.UserCanceled), "User cancelled"), - new(Convert.ToInt16(TransferStatusType.AdminDenied), "Admin cancelled") + new(Convert.ToInt16(TransferStatusType.OrderConfirmed), "Order confirmed"), + new(Convert.ToInt16(TransferStatusType.AssignedToDriver), "Assigned to driver"), + new(Convert.ToInt16(TransferStatusType.DriverConfirmed), "Driver confirmed"), + new(Convert.ToInt16(TransferStatusType.DriverEnRoute), "Driver enroute"), + new(Convert.ToInt16(TransferStatusType.PassengerPickup), "Passenger in car"), + new(Convert.ToInt16(TransferStatusType.Finished), "Finished"), + new(Convert.ToInt16(TransferStatusType.UserCanceled), "User cancelled"), + new(Convert.ToInt16(TransferStatusType.AdminDenied), "Admin cancelled") ]; private MessageWizardModel _messageWizardModel = new(); @@ -340,6 +340,8 @@ async Task Grid_EditModelSaving(GridEditModelSavingEventArgs e) { bool success = false; + Transfer? transfer = null; + if (e.IsNew) { //add new orderData to orderData array @@ -350,7 +352,8 @@ { _logger.Info("orderData updated at id " + ((Transfer)e.EditModel).Id); - success = await transferDataService.UpdateTransferAsync((Transfer)e.EditModel); + //transfer = await devAdminSignalClient.UpdateAsync(SignalRTags.UpdateTransferAsync, (Transfer)e.EditModel); + transfer = await transferDataService.UpdateTransferAsync((Transfer)e.EditModel); } //get transfer from TransferData by Id @@ -365,11 +368,29 @@ // } // } - if (success) + //if (success) + if (transfer != null) { - //TODO: ne a teljes grid-et refresh-eljük, elég lenne csak az adott sort! - J. - await UpdateDataAsync(); + UpdateDataSources(transfer); + + //e.Reload = true; } + else await UpdateAllDataAsync(); + + //StateHasChanged(); + } + + private void UpdateDataSources(Transfer transfer) + { + var transferIndex = TransferDataList.FindIndex(x => x.Id == transfer.Id); + if (transferIndex > -1) TransferDataList[transferIndex] = transfer; + else TransferDataList.Add(transfer); + + var appointment = CreateAppointmentModel(transfer); + var appointmentIndex = AppointmentModels.FindIndex(x => x.SourceId == transfer.Id); + + if (appointmentIndex > -1) AppointmentModels[appointmentIndex] = appointment; + else AppointmentModels.Add(appointment); } async Task Grid_DataItemDeleting(GridDataItemDeletingEventArgs e) @@ -380,17 +401,11 @@ //await UpdateDataAsync(); } - async Task UpdateDataAsync() + public Task UpdateAllDataAsync() { - TransferDataList = await transferDataService.GetTransfersAsync(); - _logger.Info("orderData grid refreshed"); - } + _logger.Info("UpdateAllDataAsync called"); - protected override async Task OnInitializedAsync() - { - _logger = new LoggerClient(LogWriters.ToArray()); - - devAdminSignalClient.SendMessageToServerAsync>(SignalRTags.GetTransfersAsync, response => + devAdminSignalClient.GetAllAsync>(SignalRTags.GetTransfersAsync, response => { if (response.Status == SignalResponseStatus.Error) return; @@ -400,12 +415,22 @@ }).Forget(); - //var transfers = await devAdminSignalClient.SendRequestToServerAsync>(SignalRTags.GetTransfersAsync); + //var transfers = await devAdminSignalClient.GetAllAsync>(SignalRTags.GetTransfersAsync); //InitializeDataSources(transfers ?? []); - - + + //InitializeDataSources(await transferDataService.GetTransfersAsync()); - base.OnInitialized(); + + return Task.CompletedTask; + } + + protected override Task OnInitializedAsync() + { + _logger = new LoggerClient(LogWriters.ToArray()); + + UpdateAllDataAsync().Forget(); + + return base.OnInitializedAsync(); } private void InitializeDataSources(List transferDataList) @@ -421,7 +446,7 @@ // bnm.Location = transfer.FromAddress; // bnm.Subject = "Simple transfer"; - AppointmentModels.Add(new AppointmentModel { StartDate = transfer.Appointment, EndDate=transfer.Appointment.AddMinutes(30), Description = $"{transfer.FullName}, {transfer.ToAddress}", Location = transfer.FromAddress, Caption = "Simple transfer" }); + AppointmentModels.Add(CreateAppointmentModel(transfer)); } _dataStorage = new DxSchedulerDataStorage @@ -444,6 +469,11 @@ }; } + public AppointmentModel CreateAppointmentModel(Transfer transfer) + { + return new AppointmentModel { SourceId = transfer.Id, StartDate = transfer.Appointment, EndDate = transfer.Appointment.AddMinutes(30), Description = $"{transfer.FullName}, {transfer.ToAddress}", Location = transfer.FromAddress, Caption = "Simple transfer" }; + } + void ColumnChooserButton_Click() { Grid2.ShowColumnChooser(); diff --git a/TIAMWebApp/Server/Controllers/TransferDataAPIController.cs b/TIAMWebApp/Server/Controllers/TransferDataAPIController.cs index 5303159b..f35980e7 100644 --- a/TIAMWebApp/Server/Controllers/TransferDataAPIController.cs +++ b/TIAMWebApp/Server/Controllers/TransferDataAPIController.cs @@ -403,10 +403,12 @@ namespace TIAMWebApp.Server.Controllers [AllowAnonymous] [HttpPost] [Route(APIUrls.UpdateTransferRouteName)] - public async Task UpdateTransfer(Transfer transferToModify) + public async Task UpdateTransfer(Transfer transferToModify) { _logger.Info("UpdateTransfer called!"); - return await _adminDal.UpdateTransferAsync(transferToModify); + await _adminDal.UpdateTransferAsync(transferToModify); + + return transferToModify; } } diff --git a/TIAMWebApp/Server/Services/DevAdminSignalRhub.cs b/TIAMWebApp/Server/Services/DevAdminSignalRhub.cs index 29393e19..f0139c6e 100644 --- a/TIAMWebApp/Server/Services/DevAdminSignalRhub.cs +++ b/TIAMWebApp/Server/Services/DevAdminSignalRhub.cs @@ -8,6 +8,7 @@ using MessagePack; using MessagePack.Resolvers; using AyCode.Services.Server.SignalRs; using System.ServiceModel.Channels; +using TIAM.Entities.Transfers; using TIAM.Services; using TIAMWebApp.Server.Controllers; @@ -31,7 +32,7 @@ public class DevAdminSignalRHub(AdminDal adminDal, ServiceProviderAPIController public override async Task OnDisconnectedAsync(Exception? exception) { - _logger.Error($"Server OnDisconnectedAsync; ConnectionId: {Context.ConnectionId}; UserIdentifier: {Context.UserIdentifier}", exception); + _logger.ErrorConditional($"Server OnDisconnectedAsync; ConnectionId: {Context.ConnectionId}; UserIdentifier: {Context.UserIdentifier}", exception); //await Groups.RemoveFromGroupAsync(Context.ConnectionId, "SignalR Users"); await base.OnDisconnectedAsync(exception); @@ -60,12 +61,20 @@ public class DevAdminSignalRHub(AdminDal adminDal, ServiceProviderAPIController } else if (messageTag == SignalRTags.GetPropertiesByOwnerIdAsync) { - var ownerId = message.MessagePackTo().Id; + var ownerId = message!.MessagePackTo().Id; var json = (await serviceProviderAPIController.GetServiceProvidersByOwnerId(ownerId)).ToJson(); await ResponseToCaller(messageTag, new SignalResponseMessage(SignalResponseStatus.Success, json), requestId); } + else if (messageTag == SignalRTags.UpdateTransferAsync) + { + var signalPostJsonDataMessage = message!.MessagePackTo(); + var transfer = signalPostJsonDataMessage.PostData.JsonTo()!; + await transferDataAPIController.UpdateTransfer(transfer); + + await ResponseToCaller(messageTag, new SignalResponseMessage(SignalResponseStatus.Success, transfer.ToJson()), requestId); + } return; } catch (Exception ex) diff --git a/TIAMWebApp/Shared/Interfaces/IServiceProviderDataService.cs b/TIAMWebApp/Shared/Interfaces/IServiceProviderDataService.cs index 971d1451..5b94fceb 100644 --- a/TIAMWebApp/Shared/Interfaces/IServiceProviderDataService.cs +++ b/TIAMWebApp/Shared/Interfaces/IServiceProviderDataService.cs @@ -14,7 +14,7 @@ namespace TIAMWebApp.Shared.Application.Interfaces public interface IServiceProviderDataService { //17. (IServiceProviderDataService) get service providers by ownerId - public Task?> GetPropertiesByOwnerIdAsync(Guid id); + public Task?> GetPropertiesByOwnerIdAsync(Guid id, Action?>? callback = null); //13. delete service provider public Task DeleteServiceProviderAsync(Guid serviceProviderId); diff --git a/TIAMWebApp/Shared/Interfaces/ITransferDataService.cs b/TIAMWebApp/Shared/Interfaces/ITransferDataService.cs index 51c0ad8d..d26a7794 100644 --- a/TIAMWebApp/Shared/Interfaces/ITransferDataService.cs +++ b/TIAMWebApp/Shared/Interfaces/ITransferDataService.cs @@ -18,6 +18,6 @@ namespace TIAMWebApp.Shared.Application.Interfaces Task GetTransferByIdAsync(Guid id); Task> GetTransfersAsync(); - Task UpdateTransferAsync(Transfer model); + Task UpdateTransferAsync(Transfer model); } } diff --git a/TIAMWebApp/Shared/Models/PageModels/AppointmentModel.cs b/TIAMWebApp/Shared/Models/PageModels/AppointmentModel.cs index f680b54b..a066407e 100644 --- a/TIAMWebApp/Shared/Models/PageModels/AppointmentModel.cs +++ b/TIAMWebApp/Shared/Models/PageModels/AppointmentModel.cs @@ -10,6 +10,8 @@ namespace TIAMWebApp.Shared.Application.Models.PageModels public class AppointmentModel { public AppointmentModel() { } + + public Guid SourceId { get; set; } //pl: TransferId, stb... - J; public int AppointmentType { get; set; } public DateTime StartDate { get; set; } public DateTime EndDate { get; set; } diff --git a/TIAMWebApp/Shared/Services/AcSignalRClientBase.cs b/TIAMWebApp/Shared/Services/AcSignalRClientBase.cs index feee21e4..4f96351a 100644 --- a/TIAMWebApp/Shared/Services/AcSignalRClientBase.cs +++ b/TIAMWebApp/Shared/Services/AcSignalRClientBase.cs @@ -15,6 +15,7 @@ using Microsoft.AspNetCore.SignalR.Client; using Microsoft.Extensions.DependencyInjection; using Microsoft.IdentityModel.Tokens; using TIAM.Entities.Transfers; +using TIAM.Services; using TIAMWebApp.Shared.Application.Models.ClientSide; using TIAMWebApp.Shared.Application.Utility; @@ -91,6 +92,24 @@ namespace TIAMWebApp.Shared.Application.Services HubConnection.SendAsync(nameof(IAcSignalRHubClient.OnReceiveMessage), messageTag, message?.ToMessagePack(ContractlessStandardResolver.Options), requestId).Forget(); } + #region CRUD + public virtual Task GetByIdAsync(int messageTag, Guid id) where TResponse : class + => SendMessageToServerAsync(messageTag, new SignalRequestByIdMessage(id), AcDomain.NextUniqueInt32); + public virtual Task GetByIdAsync(int messageTag, Guid id, Action> responseCallback) + => SendMessageToServerAsync(messageTag, new SignalRequestByIdMessage(id), responseCallback); + + public virtual Task GetAllAsync(int messageTag) where TResponse : class + => SendMessageToServerAsync(messageTag); + public virtual Task GetAllAsync(int messageTag, Action> responseCallback) + => SendMessageToServerAsync(messageTag, null, responseCallback); + + public virtual Task UpdateAsync(int messageTag, TPostData postData) where TPostData : class + => SendMessageToServerAsync(messageTag, new SignalPostJsonDataMessage(postData), AcDomain.NextUniqueInt32); + public virtual Task UpdateAsync(int messageTag, TPostData postData, Action> responseCallback) + => SendMessageToServerAsync(messageTag, new SignalPostJsonDataMessage(postData!), responseCallback); + + #endregion CRUD + public virtual Task SendMessageToServerAsync(int messageTag) where TResponse : class => SendMessageToServerAsync(messageTag, null, AcDomain.NextUniqueInt32); @@ -128,7 +147,7 @@ namespace TIAMWebApp.Shared.Application.Services } public virtual Task SendMessageToServerAsync(int messageTag, Action> responseCallback) - => SendMessageToServerAsync(messageTag, null, responseCallback); + => SendMessageToServerAsync(messageTag, null, responseCallback); public virtual Task SendMessageToServerAsync(int messageTag, ISignalRMessage? message, Action> responseCallback) { diff --git a/TIAMWebApp/Shared/Services/ServiceProviderDataService.cs b/TIAMWebApp/Shared/Services/ServiceProviderDataService.cs index 382eec30..94783b3f 100644 --- a/TIAMWebApp/Shared/Services/ServiceProviderDataService.cs +++ b/TIAMWebApp/Shared/Services/ServiceProviderDataService.cs @@ -75,21 +75,22 @@ namespace TIAMWebApp.Shared.Application.Services } //17. - public async Task?> GetPropertiesByOwnerIdAsync(Guid id) + public async Task?> GetPropertiesByOwnerIdAsync(Guid id, Action?>? callback = null) { - Dictionary? companyPropertiesByOwner; + if (callback != null) + { + _devAdminSignalClient.GetByIdAsync>(SignalRTags.GetPropertiesByOwnerIdAsync, id, response => + { + if (response.Status == SignalResponseStatus.Error) + callback.Invoke(null); - //_devAdminSignalClient.SendMessageToServerAsync>(SignalRTags.GetPropertiesByOwnerIdAsync, new SignalRequestByIdMessage(id), response => - //{ - // if (response.Status == SignalResponseStatus.Error) - // return; + _logger.DetailConditional($"companyPropertiesByOwner async: {string.Join("; ", response.ResponseData!.Values)}"); - // companyPropertiesByOwner = response.ResponseData; - // if (companyPropertiesByOwner != null) _logger.DetailConditional($"companyPropertiesByOwner async: {string.Join("; ", companyPropertiesByOwner.Values)}"); - //}).Forget(); + callback.Invoke(response.ResponseData); + }).Forget(); + } - - companyPropertiesByOwner = await _devAdminSignalClient.SendMessageToServerAsync>(SignalRTags.GetPropertiesByOwnerIdAsync, new SignalRequestByIdMessage(id)); + var companyPropertiesByOwner = await _devAdminSignalClient.GetByIdAsync>(SignalRTags.GetPropertiesByOwnerIdAsync, id); if (companyPropertiesByOwner != null) _logger.DetailConditional($"companyPropertiesByOwner: {string.Join("; ", companyPropertiesByOwner.Values)}"); return companyPropertiesByOwner; diff --git a/TIAMWebApp/Shared/Services/TransferDataService.cs b/TIAMWebApp/Shared/Services/TransferDataService.cs index da98b4d7..a75dc678 100644 --- a/TIAMWebApp/Shared/Services/TransferDataService.cs +++ b/TIAMWebApp/Shared/Services/TransferDataService.cs @@ -183,7 +183,7 @@ namespace TIAMWebApp.Shared.Application.Services return response; } - public async Task UpdateTransferAsync(Transfer model) + public async Task UpdateTransferAsync(Transfer model) { var url = $"{Setting.ApiBaseUrl}/{APIUrls.UpdateTransfer}"; var response = await _http.PostAsJsonAsync(url, model); @@ -197,9 +197,9 @@ namespace TIAMWebApp.Shared.Application.Services //} if (!response.IsSuccessStatusCode) - return false; + return null; - var result = (bool)(await response.Content.ReadFromJsonAsync(typeof(bool)))!; + var result = (Transfer)(await response.Content.ReadFromJsonAsync(typeof(Transfer)))!; return result; }