From 0cf8a4d4ccb5e32c9967112a807824638fa8933b Mon Sep 17 00:00:00 2001 From: Adam Date: Sat, 6 Apr 2024 12:53:06 +0200 Subject: [PATCH 1/4] Whatthefack --- .../User/SysAdmins/TransferManagement.razor | 203 ++++++------------ .../Shared/Interfaces/ITransferDataService.cs | 1 + .../Shared/Services/TransferDataService.cs | 5 + 3 files changed, 74 insertions(+), 135 deletions(-) diff --git a/TIAMSharedUI/Pages/User/SysAdmins/TransferManagement.razor b/TIAMSharedUI/Pages/User/SysAdmins/TransferManagement.razor index 361d8676..bd6a158c 100644 --- a/TIAMSharedUI/Pages/User/SysAdmins/TransferManagement.razor +++ b/TIAMSharedUI/Pages/User/SysAdmins/TransferManagement.razor @@ -26,12 +26,44 @@

Manage transfers here!

+ + + + + + + + +
+
+ +
- + + + + + @{ + var keyField = context.Value; + var keyItem = (Transfer)context.DataItem; + string buttonText = "Contact"; + + } + + @{ TransferStatusModel keyField = Statuses.FirstOrDefault(x => x.StatusValue == Convert.ToInt16(context.Value)); - string driverText = keyField.StatusName; -

@driverText

+ string transferStatusText = keyField.StatusName; +

@transferStatusText

}
@@ -97,120 +140,6 @@
- -
-
- -
- - - - - - - - - - - - @{ - var keyField = context.Value; - @context.Value - } - - - - - - @* *@ - @* - - - @{ - var keyField = context.Value; - var keyItem = (TransferWizardModel)context.DataItem; - string buttonText = "Contact"; - - } - - *@ - @* - - @{ - DriverModel keyField = (DriverModel)context.Value; - string driverText = keyField.Name; -

@driverText

- } -
-
*@ - -
- - - @{ - var transfer = (TransferWizardModel)EditFormContext.EditModel; - } - - - @EditFormContext.GetEditor("ToAddress") - - - @EditFormContext.GetEditor("FromAddress") - - - @EditFormContext.GetEditor("Appointment") - - - @EditFormContext.GetEditor("PassengerCount") - - @* - @EditFormContext.GetEditor("FullName") - - - @EditFormContext.GetEditor("PhoneNumber") - - - @EditFormContext.GetEditor("EmailAddress") - *@ - @* - - - *@ - - - - -
- - -
- - - -
@@ -224,8 +153,6 @@ @code { - IGrid Grid { get; set; } - //object? TransferData { get; set; } public TransferWizardModel myModel = new TransferWizardModel(); @@ -241,16 +168,16 @@ "ContextId" }; - public List Statuses { get; set; } + public List? Statuses { get; set; } public MessageWizardModel messageWizardModel = new MessageWizardModel(); //IEnumerable drivers { get; set; } - void SendMail(TransferWizardModel Item) + void SendMail(Transfer Item) { - logToBrowserConsole.LogToBC($"Sending mail to {Item.EmailAddress}"); + logToBrowserConsole.LogToBC($"Sending mail to {Item.ContactEmail}"); PopupVisible = true; } @@ -291,27 +218,33 @@ { if (e.IsNew) { - var newEmployee = (TransferWizardModel)e.EditModel; - newEmployee.Id = Guid.NewGuid(); - newEmployee.Destination = "ghjgkg hkgh ghjkghgkjgh"; - newEmployee.PickupAddress = "ghjgkg hkgh ghjkghgkjgh"; - newEmployee.TripDate = DateTime.UtcNow.AddDays(3); - newEmployee.NumberOfPassengers = 1; - newEmployee.FullName = "ghjgkg hkgh ghjkghgkjgh"; - newEmployee.PhoneNumber = "+13021234567"; - newEmployee.EmailAddress = "ghjgkg hkgh ghjkghgkjgh"; + var transferEditModel = (Transfer)e.EditModel; //TODO not valid cast + transferEditModel.Id = Guid.NewGuid(); + transferEditModel.ToAddress = "Where to?"; + transferEditModel.FromAddress = "From where?"; + transferEditModel.Appointment = DateTime.UtcNow.AddDays(3); + transferEditModel.PassengerCount = 1; + transferEditModel.ContactName = "Full name"; + transferEditModel.ContactPhone = "+00000000000"; + transferEditModel.ContactEmail = "your@email.address"; } } async Task Grid_EditModelSaving(GridEditModelSavingEventArgs e) { if (e.IsNew) + { //add new orderData to orderData array logToBrowserConsole.LogToBC("New orderData added"); - //await NwindDataService.InsertEmployeeAsync((EditableEmployee)e.EditModel); + //await transferDataService.CreateTransfer((TransferWizardModel)e.EditModel); + } else - logToBrowserConsole.LogToBC("orderData updated"); - //modify transferData where transferData.Id == e.EditModel.Id + { + logToBrowserConsole.LogToBC("orderData updated at id " + ((TransferWizardModel)e.EditModel).Id); + + //await transferDataService.UpdateTransferAsync((TransferWizardModel)e.EditModel); + //modify transferData where transferData.Id == e.EditModel.Id + } //get transfer from TransferData by Id foreach (var transferToModify in (List)TransferData) @@ -336,8 +269,8 @@ } async Task UpdateDataAsync() { - //DataSource = await NwindDataService.GetEmployeesEditableAsync(); //refresh grid + //DataSource = await NwindDataService.GetEmployeesEditableAsync(); logToBrowserConsole.LogToBC("orderData grid refreshed"); } diff --git a/TIAMWebApp/Shared/Interfaces/ITransferDataService.cs b/TIAMWebApp/Shared/Interfaces/ITransferDataService.cs index d80559fe..9e0b2ef9 100644 --- a/TIAMWebApp/Shared/Interfaces/ITransferDataService.cs +++ b/TIAMWebApp/Shared/Interfaces/ITransferDataService.cs @@ -18,5 +18,6 @@ namespace TIAMWebApp.Shared.Application.Interfaces Task GetTransferByIdAsync(Guid id); Task> GetTransfersAsync(); + Task UpdateTransferAsync(TransferWizardModel model); } } diff --git a/TIAMWebApp/Shared/Services/TransferDataService.cs b/TIAMWebApp/Shared/Services/TransferDataService.cs index 3a109aad..e0ead92f 100644 --- a/TIAMWebApp/Shared/Services/TransferDataService.cs +++ b/TIAMWebApp/Shared/Services/TransferDataService.cs @@ -178,5 +178,10 @@ namespace TIAMWebApp.Shared.Application.Services return new List(); return response; } + + public Task UpdateTransferAsync(TransferWizardModel model) + { + return null; + } } } From 7ae59a30db925ab77c877fdd7a4f0427147e8326 Mon Sep 17 00:00:00 2001 From: Adam Date: Wed, 10 Apr 2024 00:22:53 +0200 Subject: [PATCH 2/4] trasnfer user and product management updates --- TIAM.Database/DataLayers/Users/UserDal.cs | 1 + .../Services/UserDataServiceMobile.cs | 9 +- ...asterDetail_NestedGrid_DetailContent.razor | 3 +- .../{Products.razor => ManageProducts.razor} | 4 +- ...ducts.razor.cs => ManageProducts.razor.cs} | 13 +- ...Management.razor => ManageTransfers.razor} | 62 +++- .../Pages/User/SysAdmins/ManageUsers.razor | 325 ++++++++++++++++++ ...Detail_NestedGrid_UserProductMapping.razor | 121 +++++++ TIAMSharedUI/Shared/Users/AdminNavMenu.razor | 5 + TIAMSharedUI/wwwroot/css/TourIAm.css | 17 + .../Client/Services/UserDataServiceWeb.cs | 17 +- .../ServiceProviderAPIController.cs | 20 ++ .../Controllers/TransferDataAPIController.cs | 10 + .../Server/Controllers/UserAPIController.cs | 53 +++ .../Interfaces/IServiceProviderDataService.cs | 2 + .../Shared/Interfaces/ITransferDataService.cs | 2 +- .../Shared/Interfaces/IUserDataService.cs | 4 +- TIAMWebApp/Shared/Models/APIUrls.cs | 14 +- .../Shared/Models/ClientSide/Setting.cs | 2 + .../TransferWizardModelExtensions.cs | 2 +- .../Services/ServiceProviderDataService.cs | 15 + .../Shared/Services/TransferDataService.cs | 20 +- 22 files changed, 685 insertions(+), 36 deletions(-) rename TIAMSharedUI/Pages/User/SysAdmins/{Products.razor => ManageProducts.razor} (98%) rename TIAMSharedUI/Pages/User/SysAdmins/{Products.razor.cs => ManageProducts.razor.cs} (97%) rename TIAMSharedUI/Pages/User/SysAdmins/{TransferManagement.razor => ManageTransfers.razor} (85%) create mode 100644 TIAMSharedUI/Pages/User/SysAdmins/ManageUsers.razor create mode 100644 TIAMSharedUI/Pages/User/SysAdmins/UserGrid_MasterDetail_NestedGrid_UserProductMapping.razor diff --git a/TIAM.Database/DataLayers/Users/UserDal.cs b/TIAM.Database/DataLayers/Users/UserDal.cs index 57f9b025..3c6a0052 100644 --- a/TIAM.Database/DataLayers/Users/UserDal.cs +++ b/TIAM.Database/DataLayers/Users/UserDal.cs @@ -37,6 +37,7 @@ namespace TIAM.Database.DataLayers.Users public Task GetUserModelDtoByIdAsync(Guid userId) => SessionAsync(x => x.GetUserModelDtoById(userId)); public Task GetUserModelDtoByEmailAsync(string email) => SessionAsync(x => x.GetUserModelDtoByEmail(email)); public Task> GetAllUsersModelDtoAsync() => SessionAsync(x => x.GetAllUsersModelDto().ToList()); + public Task> GetAllUsersModelDtoDetailAsync() => SessionAsync(x => x.GetAllUsersModelDetailDto().ToList()); public Task GetUserByPhoneNumberAsync(string phoneNumber) { diff --git a/TIAMMobileApp/Services/UserDataServiceMobile.cs b/TIAMMobileApp/Services/UserDataServiceMobile.cs index 5e6dd506..85c7cb81 100644 --- a/TIAMMobileApp/Services/UserDataServiceMobile.cs +++ b/TIAMMobileApp/Services/UserDataServiceMobile.cs @@ -147,9 +147,14 @@ namespace TIAMMobileApp.Services return (isSuccess, user); } - public async Task?> GetUsersAsync() + public async Task?> GetUsersAsync() { - return await http.GetFromJsonAsync>(APIUrls.GetUsers); + return await http.GetFromJsonAsync>(APIUrls.GetUsers); + } + + public async Task?> GetUsersWithDetailsAsync() + { + return await http.GetFromJsonAsync>(APIUrls.GetUsersWithDetails); } public async Task GetUserByEmailAsync(string email) diff --git a/TIAMSharedUI/Pages/User/SysAdmins/Grid_MasterDetail_NestedGrid_DetailContent.razor b/TIAMSharedUI/Pages/User/SysAdmins/Grid_MasterDetail_NestedGrid_DetailContent.razor index 677472de..ede9c097 100644 --- a/TIAMSharedUI/Pages/User/SysAdmins/Grid_MasterDetail_NestedGrid_DetailContent.razor +++ b/TIAMSharedUI/Pages/User/SysAdmins/Grid_MasterDetail_NestedGrid_DetailContent.razor @@ -25,6 +25,7 @@ ColumnResizeMode="GridColumnResizeMode.NextColumn" ShowFilterRow="true"> + @@ -35,7 +36,7 @@ [Parameter] public bool KeyboardNavigationEnabled { get; set; } [Parameter] - public TIAM.Entities.Transfers.Transfer Customer { get; set; } + public Transfer Customer { get; set; } List DetailGridData { get; set; } diff --git a/TIAMSharedUI/Pages/User/SysAdmins/Products.razor b/TIAMSharedUI/Pages/User/SysAdmins/ManageProducts.razor similarity index 98% rename from TIAMSharedUI/Pages/User/SysAdmins/Products.razor rename to TIAMSharedUI/Pages/User/SysAdmins/ManageProducts.razor index 1861d934..42e8227d 100644 --- a/TIAMSharedUI/Pages/User/SysAdmins/Products.razor +++ b/TIAMSharedUI/Pages/User/SysAdmins/ManageProducts.razor @@ -1,4 +1,4 @@ - +@page "/user/products" @using AyCode.Models.Messages @using TIAM.Entities.ServiceProviders @using TIAM.Resources @@ -8,6 +8,7 @@ @using TIAMWebApp.Shared.Application.Models.ClientSide.UI.WizardModels @using TIAMWebApp.Shared.Application.Models.ClientSide.Messages @using TIAMWebApp.Shared.Application.Utility +@layout AdminLayout @inject LogToBrowserConsole logToBrowserConsole @inject IStringLocalizer localizer @@ -97,5 +98,6 @@ @code { + } diff --git a/TIAMSharedUI/Pages/User/SysAdmins/Products.razor.cs b/TIAMSharedUI/Pages/User/SysAdmins/ManageProducts.razor.cs similarity index 97% rename from TIAMSharedUI/Pages/User/SysAdmins/Products.razor.cs rename to TIAMSharedUI/Pages/User/SysAdmins/ManageProducts.razor.cs index 3bd7c8ba..a1df12ff 100644 --- a/TIAMSharedUI/Pages/User/SysAdmins/Products.razor.cs +++ b/TIAMSharedUI/Pages/User/SysAdmins/ManageProducts.razor.cs @@ -11,15 +11,21 @@ using Microsoft.AspNetCore.Components; using TIAM.Entities.ServiceProviders; using TIAM.Core.Enums; using TIAMWebApp.Shared.Application.Services; +using TIAMWebApp.Shared.Application.Utility; namespace TIAMSharedUI.Pages.User.SysAdmins { - public partial class Products :ComponentBase + public partial class ManageProducts :ComponentBase { IGrid Grid { get; set; } object? ProductData { get; set; } + public void ColumnChooserButton_Click() + { + Grid.ShowColumnChooser(); + } + public ProductWizardModel myModel = new ProductWizardModel(); @@ -158,10 +164,5 @@ namespace TIAMSharedUI.Pages.User.SysAdmins } } - void ColumnChooserButton_Click() - { - Grid.ShowColumnChooser(); - } - } } diff --git a/TIAMSharedUI/Pages/User/SysAdmins/TransferManagement.razor b/TIAMSharedUI/Pages/User/SysAdmins/ManageTransfers.razor similarity index 85% rename from TIAMSharedUI/Pages/User/SysAdmins/TransferManagement.razor rename to TIAMSharedUI/Pages/User/SysAdmins/ManageTransfers.razor index bd6a158c..1e256e24 100644 --- a/TIAMSharedUI/Pages/User/SysAdmins/TransferManagement.razor +++ b/TIAMSharedUI/Pages/User/SysAdmins/ManageTransfers.razor @@ -69,6 +69,7 @@ Data="TransferData" AutoCollapseDetailRow="AutoCollapseDetailRow" KeyboardNavigationEnabled="true" + CustomizeElement="Grid_CustomizeElement" CustomizeEditModel="Grid_CustomizeEditModel" EditModelSaving="Grid_EditModelSaving" DataItemDeleting="Grid_DataItemDeleting" @@ -78,12 +79,13 @@ KeyFieldName="Id"> - - + + + @@ -154,7 +156,7 @@ @code { - public TransferWizardModel myModel = new TransferWizardModel(); + public Transfer myModel = new Transfer(); public List TransferData { get; set; } @@ -207,6 +209,30 @@ logToBrowserConsole.LogToBC($"Submitted nested form: {Result.GetType().FullName}"); } + void Grid_CustomizeElement(GridCustomizeElementEventArgs e) + { + if (e.ElementType == GridElementType.DataRow && (System.Byte)e.Grid.GetRowValue(e.VisibleIndex, "TransferStatusType") == 5) + { + e.CssClass = "bg-important"; + } + else if (e.ElementType == GridElementType.DataRow && (System.Byte)e.Grid.GetRowValue(e.VisibleIndex, "TransferStatusType") > 5 && (System.Byte)e.Grid.GetRowValue(e.VisibleIndex, "TransferStatusType") < 35) + { + e.CssClass = "bg-attention"; + } + else if (e.ElementType == GridElementType.DataRow && (System.Byte)e.Grid.GetRowValue(e.VisibleIndex, "TransferStatusType") == 35) + { + e.CssClass = "bg-finished"; + } + else if (e.ElementType == GridElementType.DataRow && (System.Byte)e.Grid.GetRowValue(e.VisibleIndex, "TransferStatusType") > 35) + { + e.CssClass = "bg-cancel"; + } + if (e.ElementType == GridElementType.HeaderCell) + { + e.Style = "background-color: rgba(0, 0, 0, 0.08)"; + e.CssClass = "header-bold"; + } + } protected override async Task OnAfterRenderAsync(bool firstRender) { @@ -232,6 +258,7 @@ async Task Grid_EditModelSaving(GridEditModelSavingEventArgs e) { + bool success = false; if (e.IsNew) { //add new orderData to orderData array @@ -240,25 +267,24 @@ } else { - logToBrowserConsole.LogToBC("orderData updated at id " + ((TransferWizardModel)e.EditModel).Id); + logToBrowserConsole.LogToBC("orderData updated at id " + ((Transfer)e.EditModel).Id); - //await transferDataService.UpdateTransferAsync((TransferWizardModel)e.EditModel); - //modify transferData where transferData.Id == e.EditModel.Id + success = await transferDataService.UpdateTransferAsync((Transfer)e.EditModel); + } //get transfer from TransferData by Id - foreach (var transferToModify in (List)TransferData) - { - myModel = (TransferWizardModel)e.EditModel; + // foreach (var transferToModify in (List)TransferData) + // { + // myModel = (Transfer)e.EditModel; - if (transferToModify.Id == myModel.Id) - { - //transferToModify.Driver = myModel.Driver; - } - } - - //await NwindDataService.UpdateEmployeeAsync((EditableEmployee)e.DataItem, (EditableEmployee)e.EditModel); - await UpdateDataAsync(); + // if (transferToModify.Id == myModel.Id) + // { + // //transferToModify.Driver = myModel.Driver; + // } + // } + if(success) + await UpdateDataAsync(); } async Task Grid_DataItemDeleting(GridDataItemDeletingEventArgs e) { @@ -270,7 +296,7 @@ async Task UpdateDataAsync() { //refresh grid - //DataSource = await NwindDataService.GetEmployeesEditableAsync(); + TransferData = await transferDataService.GetTransfersAsync(); logToBrowserConsole.LogToBC("orderData grid refreshed"); } diff --git a/TIAMSharedUI/Pages/User/SysAdmins/ManageUsers.razor b/TIAMSharedUI/Pages/User/SysAdmins/ManageUsers.razor new file mode 100644 index 00000000..4c2377f0 --- /dev/null +++ b/TIAMSharedUI/Pages/User/SysAdmins/ManageUsers.razor @@ -0,0 +1,325 @@ +@page "/user/users" +@using AyCode.Models.Messages +@using BlazorAnimation +@using TIAM.Core.Enums +@using TIAM.Entities.Products +@using TIAM.Entities.ServiceProviders +@using TIAM.Entities.Transfers +@using TIAM.Entities.Users +@using TIAM.Models.Dtos.Profiles +@using TIAM.Models.Dtos.Users +@using TIAM.Resources +@using TIAMSharedUI.Pages.Components +@using TIAMSharedUI.Shared +@using TIAMWebApp.Shared.Application.Interfaces +@using TIAMWebApp.Shared.Application.Models +@using TIAMWebApp.Shared.Application.Models.ClientSide.UI +@using TIAMWebApp.Shared.Application.Models.ClientSide.UI.WizardModels +@using TIAMWebApp.Shared.Application.Models.ClientSide.Messages +@using TIAMWebApp.Shared.Application.Models.PageModels +@using TIAMWebApp.Shared.Application.Utility +@layout AdminLayout +@inject LogToBrowserConsole logToBrowserConsole +@inject IStringLocalizer localizer +@inject IWizardProcessor wizardProcessor +@inject IUserDataService userDataService +Transfers + +
+

Transfer management

+

Manage transfers here!

+
+ + + + + + + + + + +
+
+
+ +
+
+
+ +
+ + + + + + + + + + + + + + @{ + var keyField = context.Value; + var keyItem = (UserModelDtoDetail)context.DataItem; + + string buttonText = "Contact"; + + } + + + + + + + + @{ + var transfer2 = (UserModelDtoDetail)EditFormContext.EditModel; + } + + + @EditFormContext.GetEditor("UserDto.EmailAddress") + + + @EditFormContext.GetEditor("UserDto.EmailConfirmed") + + + @EditFormContext.GetEditor("UserDto.PhoneNumber") + + + @EditFormContext.GetEditor("Profile.Name") + + + + + + + + + +
+ +
+
+
+ +
+
+ +
+
+ +@code { + public UserModelDtoDetail myModel = new UserModelDtoDetail(); + + public List? UserData { get; set; } + + bool PopupVisible { get; set; } + + IGrid? Grid { get; set; } + object? MasterGridData { get; set; } + bool AutoCollapseDetailRow { get; set; } + + public List ignoreList = new List + { + "ReceiverEmailAddress", + "ReceiverId", + "SenderEmailAddress", + "SenderId", + "ContextId" + }; + + public MessageWizardModel messageWizardModel = new MessageWizardModel(); + + + + + async void SendMail(UserModelDtoDetail Item) + { + var user = await userDataService.GetUserDetailByIdAsync(Item.Id); + logToBrowserConsole.LogToBC($"Sending mail to {user.UserDto.EmailAddress}"); + + PopupVisible = true; + } + + void CancelCreateClick() + { + + PopupVisible = false; + } + void EulaPopupClosed() + { + //cancel clicked + + } + void EulaPopupClosing(PopupClosingEventArgs args) + { + //myModel = new TransferWizardModel(); + messageWizardModel = new MessageWizardModel(); + } + + //----------------------------------------------------------------------------------- + + + public async Task SubmitForm(object Result) + { + var email = await wizardProcessor.ProcessWizardAsync(Result.GetType(), Result); + + logToBrowserConsole.LogToBC($"Submitted nested form: {Result.GetType().FullName}"); + } + + void Grid_CustomizeElement(GridCustomizeElementEventArgs e) + { + if (e.ElementType == GridElementType.DataRow && e.VisibleIndex % 2 == 1) + { + e.CssClass = "bg-alt"; + } + if (e.ElementType == GridElementType.HeaderCell) + { + e.Style = "background-color: rgba(0, 0, 0, 0.08); font-style=bold"; + + } + } + + + void Grid_CustomizeEditModel(GridCustomizeEditModelEventArgs e) + { + if (e.IsNew) + { + var userEditModel = (UserModelDtoDetail)e.EditModel; //TODO not valid cast + userEditModel.Id = Guid.NewGuid(); + + userEditModel.UserDto = new UserDtoDetail(); + userEditModel.UserDto.AffiliateId = Guid.NewGuid(); + userEditModel.UserDto.EmailAddress = ""; + userEditModel.UserDto.PhoneNumber = ""; + userEditModel.Profile = new ProfileDto(); + userEditModel.Profile.Name = "New user"; + + userEditModel.Products = new List(); + + userEditModel.ServiceProviders = new List(); + + userEditModel.UserProductMappings = new List(); + } + } + + async Task Grid_EditModelSaving(GridEditModelSavingEventArgs e) + { + if (e.IsNew) + { + //add new orderData to orderData array + RegistrationModel registration = new RegistrationModel(); + //TODO: Refractor to userDataService + Random random = new Random(); + string chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"; + string password = new string(Enumerable.Repeat(chars, 10) + .Select(s => s[random.Next(s.Length)]).ToArray()); + + registration.Email = ((UserModelDtoDetail)e.EditModel).UserDto.EmailAddress; + registration.PhoneNumber = ((UserModelDtoDetail)e.EditModel).UserDto.PhoneNumber; + registration.Password = password; + registration.ReferralId = null; + + + await userDataService.CreateGuestUser(registration); + logToBrowserConsole.LogToBC("New user created added"); + } + else + { + logToBrowserConsole.LogToBC("orderData updated at id " + ((UserModelDtoDetail)e.EditModel).Id); + + //await transferDataService.UpdateTransferAsync((TransferWizardModel)e.EditModel); + //modify transferData where transferData.Id == e.EditModel.Id + } + //get transfer from TransferData by Id + + // foreach (var transferToModify in (List)TransferData) + // { + // myModel = (Transfer)e.EditModel; + + // if (transferToModify.Id == myModel.Id) + // { + // //transferToModify.Driver = myModel.Driver; + // } + // } + + await UpdateDataAsync(); + } + async Task Grid_DataItemDeleting(GridDataItemDeletingEventArgs e) + { + //await NwindDataService.RemoveEmployeeAsync((EditableEmployee)e.DataItem); + //remove orderData from orderData array + logToBrowserConsole.LogToBC("orderData deleted"); + //await UpdateDataAsync(); + } + async Task UpdateDataAsync() + { + //refresh grid + UserData = await userDataService.GetUsersWithDetailsAsync(); + logToBrowserConsole.LogToBC("orderData grid refreshed"); + } + + protected override async Task OnInitializedAsync() + { + UserData = (await userDataService.GetUsersWithDetailsAsync())?.OrderBy(x => x.Profile?.Name).ToList(); + base.OnInitialized(); + } + + void ColumnChooserButton_Click() + { + Grid?.ShowColumnChooser(); + } + + protected override void OnAfterRender(bool firstRender) + { + if (firstRender) + { + Grid?.ExpandDetailRow(0); + } + } + void AutoCollapseDetailRow_Changed(bool newValue) + { + AutoCollapseDetailRow = newValue; + if (newValue) + { + Grid?.BeginUpdate(); + Grid?.CollapseAllDetailRows(); + Grid?.ExpandDetailRow(0); + Grid?.EndUpdate(); + } + } +} diff --git a/TIAMSharedUI/Pages/User/SysAdmins/UserGrid_MasterDetail_NestedGrid_UserProductMapping.razor b/TIAMSharedUI/Pages/User/SysAdmins/UserGrid_MasterDetail_NestedGrid_UserProductMapping.razor new file mode 100644 index 00000000..52b7990d --- /dev/null +++ b/TIAMSharedUI/Pages/User/SysAdmins/UserGrid_MasterDetail_NestedGrid_UserProductMapping.razor @@ -0,0 +1,121 @@ +@using TIAM.Entities.Products +@using TIAM.Entities.Transfers +@using TIAM.Entities.Drivers +@using TIAM.Entities.Users +@using TIAM.Models.Dtos.Users +@using TIAMWebApp.Shared.Application.Interfaces +@using TIAMWebApp.Shared.Application.Utility +@inject IUserDataService NwindDataService +@inject IServiceProviderDataService serviceProviderDataService +@inject LogToBrowserConsole logToBrowserConsole + +
+ UserProductMapping +
+ + + + + + + + + + @{ + var transfer2 = (UserProductMapping)EditFormContext.EditModel; + } + + + @EditFormContext.GetEditor("UserId") + + + + + + @EditFormContext.GetEditor("Permissions") + + + + + + + + + +@code { + [Parameter] + public bool KeyboardNavigationEnabled { get; set; } + [Parameter] + public UserModelDtoDetail Customer { get; set; } + + List DetailGridData; + + List AvailableProducts; + + public UserModelDtoDetail UserInfo; + + protected override async Task OnInitializedAsync() + { + + //get userproductmappings by customer id + if (Customer.UserProductMappings == null) + DetailGridData = new List(); + else + DetailGridData = Customer.UserProductMappings; + + AvailableProducts = await serviceProviderDataService.GetAllProductsAsync(); + logToBrowserConsole.LogToBC($"DetailGridData: {DetailGridData.Count}"); + } + + void CustomizeEditModel(GridCustomizeEditModelEventArgs e) + { + if (e.IsNew) + { + UserProductMapping newProductMapping = new UserProductMapping(); + newProductMapping.ProductId = Guid.NewGuid(); + newProductMapping.UserId = Customer.Id; + newProductMapping.Permissions = 1; + + e.EditModel = newProductMapping; + } + } + + async Task EditModelSaving(GridEditModelSavingEventArgs e) + { + if (e.IsNew) + //add new orderData to orderData array + logToBrowserConsole.LogToBC("New orderData added"); + //await NwindDataService.InsertEmployeeAsync((EditableEmployee)e.EditModel); + else + logToBrowserConsole.LogToBC("orderData updated"); + + //await NwindDataService.UpdateEmployeeAsync((EditableEmployee)e.DataItem, (EditableEmployee)e.EditModel); + + await UpdateDataAsync(); + } + async Task DataItemDeleting(GridDataItemDeletingEventArgs e) + { + //await NwindDataService.RemoveEmployeeAsync((EditableEmployee)e.DataItem); + //remove orderData from orderData array + logToBrowserConsole.LogToBC("orderData deleted"); + //await UpdateDataAsync(); + } + async Task UpdateDataAsync() + { + //DataSource = await NwindDataService.GetEmployeesEditableAsync(); + //refresh grid + logToBrowserConsole.LogToBC("orderData grid refreshed"); + } + +} \ No newline at end of file diff --git a/TIAMSharedUI/Shared/Users/AdminNavMenu.razor b/TIAMSharedUI/Shared/Users/AdminNavMenu.razor index 0be24562..a214d2e5 100644 --- a/TIAMSharedUI/Shared/Users/AdminNavMenu.razor +++ b/TIAMSharedUI/Shared/Users/AdminNavMenu.razor @@ -66,6 +66,11 @@ Transfers
+ +
- +
-
-
- -
- + - - - - - - - - - - - + +
+
+ +
+ + + + + + + + + + + + + + + @{ + var keyField = context.Value; + var keyItem = (Transfer)context.DataItem; + string buttonText = "Contact"; + + } + + + + + + @{ + + TransferStatusModel keyField = Statuses.FirstOrDefault(x => x.StatusValue == Convert.ToInt16(context.Value)); + string transferStatusText = keyField.StatusName; +

@transferStatusText

+ } +
+
+
+ + + + @{ - var keyField = context.Value; - var keyItem = (Transfer)context.DataItem; - string buttonText = "Contact"; - + var transfer2 = (Transfer)EditFormContext.EditModel; } - - - - - - @{ - - TransferStatusModel keyField = Statuses.FirstOrDefault(x => x.StatusValue == Convert.ToInt16(context.Value)); - string transferStatusText = keyField.StatusName; -

@transferStatusText

- } -
-
- - - - - - @{ - var transfer2 = (Transfer)EditFormContext.EditModel; - } - - - @EditFormContext.GetEditor("ToAddress") - - - @EditFormContext.GetEditor("FromAddress") - - - @EditFormContext.GetEditor("Appointment") - - - @EditFormContext.GetEditor("PassengerCount") - + + + @EditFormContext.GetEditor("FirstName") + + + @EditFormContext.GetEditor("LastName") + + + @EditFormContext.GetEditor("ToAddress") + + + @EditFormContext.GetEditor("FromAddress") + + + + + - - @EditFormContext.GetEditor("TransferStatusType") - + + + @EditFormContext.GetEditor("PassengerCount") + - - + + @EditFormContext.GetEditor("TransferStatusType") + + + +
-
+ -
+
+ + + +
+ + + + + + + + + + +
+
+ + + + +
+ +
@@ -170,11 +212,14 @@ "ContextId" }; - public List? Statuses { get; set; } + public List? Statuses { get; set; } public MessageWizardModel messageWizardModel = new MessageWizardModel(); - //IEnumerable drivers { get; set; } + public List? AppoinmentData { get; set; } + + DateTime StartDate { get; set; } = DateTime.Today; + DxSchedulerDataStorage DataStorage = new DxSchedulerDataStorage(); void SendMail(Transfer Item) @@ -234,12 +279,6 @@ } } - protected override async Task OnAfterRenderAsync(bool firstRender) - { - //if (firstRender) - // await Grid.StartEditRowAsync(0); - } - void Grid_CustomizeEditModel(GridCustomizeEditModelEventArgs e) { if (e.IsNew) @@ -250,7 +289,8 @@ transferEditModel.FromAddress = "From where?"; transferEditModel.Appointment = DateTime.UtcNow.AddDays(3); transferEditModel.PassengerCount = 1; - transferEditModel.ContactName = "Full name"; + transferEditModel.FirstName = "John"; + transferEditModel.LastName = "Doe"; transferEditModel.ContactPhone = "+00000000000"; transferEditModel.ContactEmail = "your@email.address"; } @@ -264,13 +304,13 @@ //add new orderData to orderData array logToBrowserConsole.LogToBC("New orderData added"); //await transferDataService.CreateTransfer((TransferWizardModel)e.EditModel); - } + } else { logToBrowserConsole.LogToBC("orderData updated at id " + ((Transfer)e.EditModel).Id); - + success = await transferDataService.UpdateTransferAsync((Transfer)e.EditModel); - + } //get transfer from TransferData by Id @@ -283,7 +323,7 @@ // //transferToModify.Driver = myModel.Driver; // } // } - if(success) + if (success) await UpdateDataAsync(); } async Task Grid_DataItemDeleting(GridDataItemDeletingEventArgs e) @@ -315,6 +355,35 @@ new TransferStatusModel(Convert.ToInt16(TransferStatusType.AdminDenied), "Admin cancelled") }; TransferData = (await transferDataService.GetTransfersAsync()).OrderBy(x => x.TransferStatusType).ThenByDescending(x => x.OrderId).ToList(); + AppoinmentData = new List(); + foreach (var transfer in TransferData) + { + // var bnm = DataStorage.CreateAppointmentItem(); + // bnm.Start = transfer.Appointment; + // bnm.Description = $"{transfer.FullName}, {transfer.ToAddress}"; + // bnm.Location = transfer.FromAddress; + // bnm.Subject = "Simple transfer"; + + AppoinmentData.Add(new AppointmentModel { StartDate = transfer.Appointment, EndDate=transfer.Appointment.AddMinutes(30), Description = $"{transfer.FullName}, {transfer.ToAddress}", Location = transfer.FromAddress, Caption = "Simple transfer" }); + } + + DataStorage = new DxSchedulerDataStorage(); + DataStorage.AppointmentMappings = new DxSchedulerAppointmentMappings() + { + Type = "AppointmentType", + Start = "StartDate", + End = "EndDate", + Subject = "Caption", + AllDay = "AllDay", + Location = "Location", + Description = "Description", + LabelId = "Label", + StatusId = "Status", + RecurrenceInfo = "Recurrence" + }; + DataStorage.AppointmentsSource = AppoinmentData; + + base.OnInitialized(); } diff --git a/TIAMSharedUI/Pages/User/SysAdmins/ManageUsers.razor b/TIAMSharedUI/Pages/User/SysAdmins/ManageUsers.razor index 4c2377f0..67ddf023 100644 --- a/TIAMSharedUI/Pages/User/SysAdmins/ManageUsers.razor +++ b/TIAMSharedUI/Pages/User/SysAdmins/ManageUsers.razor @@ -21,12 +21,13 @@ @layout AdminLayout @inject LogToBrowserConsole logToBrowserConsole @inject IStringLocalizer localizer +@inject ISessionService sessionService @inject IWizardProcessor wizardProcessor @inject IUserDataService userDataService Transfers
-

Transfer management

+

User management

Manage transfers here!

@@ -85,7 +86,7 @@ - + @@ -110,6 +111,9 @@ var transfer2 = (UserModelDtoDetail)EditFormContext.EditModel; } + + @EditFormContext.GetEditor("UserDto.EmailAddress") + @EditFormContext.GetEditor("UserDto.EmailAddress") @@ -119,8 +123,11 @@ @EditFormContext.GetEditor("UserDto.PhoneNumber") - - @EditFormContext.GetEditor("Profile.Name") + + @EditFormContext.GetEditor("Profile.FirstName") + + + @EditFormContext.GetEditor("Profile.LastName") @@ -172,6 +179,11 @@ var user = await userDataService.GetUserDetailByIdAsync(Item.Id); logToBrowserConsole.LogToBC($"Sending mail to {user.UserDto.EmailAddress}"); + messageWizardModel.ReceiverId = user.Id; + messageWizardModel.ReceiverEmailAddress = user.UserDto.EmailAddress; + messageWizardModel.SenderId = sessionService.User.UserId; + messageWizardModel.SenderEmailAddress = sessionService.User.Email; + logToBrowserConsole.LogToBC($"Sending mail to {messageWizardModel.ReceiverEmailAddress} from {messageWizardModel.SenderId}"); PopupVisible = true; } diff --git a/TIAMSharedUI/Pages/User/SysAdmins/UserGrid_MasterDetail_NestedGrid_ServiceProviders.razor b/TIAMSharedUI/Pages/User/SysAdmins/UserGrid_MasterDetail_NestedGrid_ServiceProviders.razor new file mode 100644 index 00000000..3ceb542f --- /dev/null +++ b/TIAMSharedUI/Pages/User/SysAdmins/UserGrid_MasterDetail_NestedGrid_ServiceProviders.razor @@ -0,0 +1,122 @@ +@using TIAM.Entities.Products +@using TIAM.Entities.ServiceProviders +@using TIAM.Entities.Transfers +@using TIAM.Entities.Drivers +@using TIAM.Entities.Users +@using TIAM.Models.Dtos.Users +@using TIAMWebApp.Shared.Application.Interfaces +@using TIAMWebApp.Shared.Application.Utility +@inject IUserDataService NwindDataService +@inject IServiceProviderDataService serviceProviderDataService +@inject LogToBrowserConsole logToBrowserConsole + +
+ UserProductMapping +
+ + + + + + + + + + @{ + var transfer2 = (UserProductMapping)EditFormContext.EditModel; + } + + + @EditFormContext.GetEditor("UserId") + + + + + + @EditFormContext.GetEditor("Permissions") + + + + + + + + + +@code { + [Parameter] + public bool KeyboardNavigationEnabled { get; set; } + [Parameter] + public UserModelDtoDetail Customer { get; set; } + + List DetailGridData; + + List AvailableServices; + + public UserModelDtoDetail UserInfo; + + protected override async Task OnInitializedAsync() + { + + //get userproductmappings by customer id + if (Customer.ServiceProviders == null) + DetailGridData = new List(); + else + DetailGridData = Customer.ServiceProviders; + + AvailableServices = await serviceProviderDataService.GetServiceProvidersAsync(); + logToBrowserConsole.LogToBC($"DetailGridData: {DetailGridData.Count}"); + } + + void CustomizeEditModel(GridCustomizeEditModelEventArgs e) + { + if (e.IsNew) + { + UserProductMapping newProductMapping = new UserProductMapping(); + newProductMapping.ProductId = Guid.NewGuid(); + newProductMapping.UserId = Customer.Id; + newProductMapping.Permissions = 1; + + e.EditModel = newProductMapping; + } + } + + async Task EditModelSaving(GridEditModelSavingEventArgs e) + { + if (e.IsNew) + //add new orderData to orderData array + logToBrowserConsole.LogToBC("New orderData added"); + //await NwindDataService.InsertEmployeeAsync((EditableEmployee)e.EditModel); + else + logToBrowserConsole.LogToBC("orderData updated"); + + //await NwindDataService.UpdateEmployeeAsync((EditableEmployee)e.DataItem, (EditableEmployee)e.EditModel); + + await UpdateDataAsync(); + } + async Task DataItemDeleting(GridDataItemDeletingEventArgs e) + { + //await NwindDataService.RemoveEmployeeAsync((EditableEmployee)e.DataItem); + //remove orderData from orderData array + logToBrowserConsole.LogToBC("orderData deleted"); + //await UpdateDataAsync(); + } + async Task UpdateDataAsync() + { + //DataSource = await NwindDataService.GetEmployeesEditableAsync(); + //refresh grid + logToBrowserConsole.LogToBC("orderData grid refreshed"); + } + +} \ No newline at end of file diff --git a/TIAMSharedUI/wwwroot/css/TourIAm.css b/TIAMSharedUI/wwwroot/css/TourIAm.css index d263b0e6..3550125d 100644 --- a/TIAMSharedUI/wwwroot/css/TourIAm.css +++ b/TIAMSharedUI/wwwroot/css/TourIAm.css @@ -60,10 +60,9 @@ select { .card { border-radius: 16px; - box-shadow: 0 8px 32px 0 rgba( 31, 38, 135, 0.57 ); - -webkit-box-shadow: 0 8px 32px 0 rgba( 31, 38, 135, 0.57 ); + overflow: hidden; - min-height: 300px; + /*min-height: 300px;*/ background-color: rgba( 255, 255, 255, 0.15 ); /*color: #58457b;*/ font-size: small; @@ -75,6 +74,8 @@ select { background: rgba( 255, 255, 255, 0.25 ) !important; backdrop-filter: blur( 8px ); -webkit-backdrop-filter: blur( 8px ); + box-shadow: 0 8px 32px 0 rgba( 31, 38, 135, 0.57 ); + -webkit-box-shadow: 0 8px 32px 0 rgba( 31, 38, 135, 0.57 ); --dxbl-fl-caption-color: #fff !important; /*color: #58457b;*/ } diff --git a/TIAMWebApp/Client/Services/UserDataServiceWeb.cs b/TIAMWebApp/Client/Services/UserDataServiceWeb.cs index cb338a26..b53de8fa 100644 --- a/TIAMWebApp/Client/Services/UserDataServiceWeb.cs +++ b/TIAMWebApp/Client/Services/UserDataServiceWeb.cs @@ -40,7 +40,7 @@ namespace TIAMWebApp.Client.Services public async Task IsLoggedInAsync(Guid id) { //api call to get user - var userModelDto = await GetUserByIdAsync(id); + var userModelDto = await GetUserDetailByIdAsync(id); if (userModelDto != null) { diff --git a/TIAMWebApp/Client/Services/WizardProcessor.cs b/TIAMWebApp/Client/Services/WizardProcessor.cs index 7a914030..77059d5f 100644 --- a/TIAMWebApp/Client/Services/WizardProcessor.cs +++ b/TIAMWebApp/Client/Services/WizardProcessor.cs @@ -1,8 +1,8 @@ using AyCode.Interfaces.Enums; using AyCode.Interfaces.Messages; -using AyCode.Models.Messages; using System.Diagnostics; using TIAM.Entities.Transfers; +using TIAM.Entities.Emails; //using TIAM.Entities.TransferDestinations; using TIAMWebApp.Shared.Application.Interfaces; using TIAMWebApp.Shared.Application.Models.ClientSide.UI.WizardModels; @@ -40,7 +40,8 @@ namespace TIAMWebApp.Client.Services return transferResult as TModelType; case "MessageWizardModel": - var messageResult = await MessageSenderService.SendNoticeAsync((EmailMessage)data, 1); + EmailMessage emailMessage = ((MessageWizardModel)data).CopyToEmailMessage(); + var messageResult = await MessageSenderService.SendNoticeAsync(emailMessage, 1); return messageResult as TModelType; case "ServiceProvider": diff --git a/TIAMWebApp/Server/Controllers/EmailAPIController.cs b/TIAMWebApp/Server/Controllers/MessageAPIController.cs similarity index 81% rename from TIAMWebApp/Server/Controllers/EmailAPIController.cs rename to TIAMWebApp/Server/Controllers/MessageAPIController.cs index d17acc15..6b2999db 100644 --- a/TIAMWebApp/Server/Controllers/EmailAPIController.cs +++ b/TIAMWebApp/Server/Controllers/MessageAPIController.cs @@ -28,6 +28,7 @@ using TIAMWebApp.Shared.Application.Models.ClientSide.Messages; using AyCode.Models.Messages; using AyCode.Models.Enums; using TIAM.Database.DataLayers.Admins; +using TIAM.Models.Dtos.Users; namespace TIAMWebApp.Server.Controllers { @@ -56,19 +57,22 @@ namespace TIAMWebApp.Server.Controllers [AllowAnonymous] [HttpPost] - [Route("SendEmail")] - public async Task SendEmail([FromBody] EmailMessageSenderModel SerializedMessageSenderModel) + [Route(APIUrls.SendEmailRouteName)] + public async Task SendEmail([FromBody] JsonElement SerializedMessageSenderModel) { + Console.WriteLine("SendEmail called!"); + var message = JObject.Parse(SerializedMessageSenderModel.GetRawText()).ToObject>(); - if (SerializedMessageSenderModel != null) + if (message != null) { - if (SerializedMessageSenderModel.MessageType == MessageTypesEnum.email && SerializedMessageSenderModel.Message is EmailMessage) + if (message.MessageType == MessageTypesEnum.email) { Console.WriteLine($"EmailMessage!!!"); - - var result = await _messageSenderService.SendMessageAsync(SerializedMessageSenderModel.Message, (int)SerializedMessageSenderModel.MessageType); + var messageElement = message.Message; + Console.WriteLine(message.Message); + var result = await _messageSenderService.SendMessageAsync(messageElement, (int)message.MessageType); //_adminDal.AddEmailMessageAsync((TIAM.Entities.Emails.EmailMessage)SerializedMessageSenderModel.Message); Console.WriteLine("SendEmail result: " + result); return Ok(result); diff --git a/TIAMWebApp/Server/Controllers/UserAPIController.cs b/TIAMWebApp/Server/Controllers/UserAPIController.cs index 8d70aa5a..5fe37fa3 100644 --- a/TIAMWebApp/Server/Controllers/UserAPIController.cs +++ b/TIAMWebApp/Server/Controllers/UserAPIController.cs @@ -328,11 +328,10 @@ namespace TIAMWebApp.Server.Controllers if (user != null) { var userId = user.Id; - var email = user.Email; - var phoneNumber = user.PhoneNumber; - var password = user.Password; + var email = user.UserDto.EmailAddress; + var phoneNumber = user.UserDto.PhoneNumber; - if (email is null || phoneNumber is null || password is null) + if (email is null || phoneNumber is null) { return BadRequest("Invalid request"); } @@ -340,10 +339,9 @@ namespace TIAMWebApp.Server.Controllers { Console.WriteLine($"User to be updated: {userId}"); Console.WriteLine($"User to be updated: {email}"); - Console.WriteLine($"User to be updated: {phoneNumber}"); - Console.WriteLine($"User to be updated: {password}"); + Console.WriteLine($"User to be updated: {phoneNumber}"); - await _userDal.UpdateUserAsync(new User(userId, email, phoneNumber, password)); + await _userDal.UpdateUserAsync(new User(userId, email, phoneNumber)); } } diff --git a/TIAMWebApp/Server/Services/NoticeSenderService.cs b/TIAMWebApp/Server/Services/NoticeSenderService.cs index c0a71416..63c06561 100644 --- a/TIAMWebApp/Server/Services/NoticeSenderService.cs +++ b/TIAMWebApp/Server/Services/NoticeSenderService.cs @@ -5,6 +5,7 @@ using AyCode.Models.Enums; using AyCode.Entities.Messages; using AyCode.Models.Messages; using TIAM.Database.DataLayers.Users; +using TIAMWebApp.Shared.Application.Models.ClientSide.Messages; namespace TIAMWebApp.Server.Services @@ -27,12 +28,12 @@ namespace TIAMWebApp.Server.Services switch (messageType) { case (int)MessageTypesEnum.email: - if (message is EmailMessage emailMessage) + if (message is MessageSenderModel emailMessage) { Console.WriteLine($"EmailMessage!!!"); // Access DerivedClass properties - var _subject = emailMessage.Subject; - result = await SendMailWithSendgrid(emailMessage); + var _subject = emailMessage.Message.Subject; + result = await SendMailWithSendgrid(emailMessage.Message); } else { diff --git a/TIAMWebApp/Shared/Interfaces/IClientNoticeSenderService.cs b/TIAMWebApp/Shared/Interfaces/IClientNoticeSenderService.cs index f0fcdbff..0a84cddb 100644 --- a/TIAMWebApp/Shared/Interfaces/IClientNoticeSenderService.cs +++ b/TIAMWebApp/Shared/Interfaces/IClientNoticeSenderService.cs @@ -1,4 +1,5 @@ using AyCode.Interfaces.Messages; +using TIAM.Entities.Emails; using System; using System.Collections.Generic; using System.Linq; @@ -10,7 +11,7 @@ namespace TIAMWebApp.Shared.Application.Interfaces { public interface IClientNoticeSenderService { - public Task SendNoticeAsync(TNotice message, int messageType) where TNotice : class, INoticeBase; + public Task SendNoticeAsync(TNotice message, int messageType) where TNotice : EmailMessage; } } diff --git a/TIAMWebApp/Shared/Models/APIUrls.cs b/TIAMWebApp/Shared/Models/APIUrls.cs index 1d6b9e7e..15dc408a 100644 --- a/TIAMWebApp/Shared/Models/APIUrls.cs +++ b/TIAMWebApp/Shared/Models/APIUrls.cs @@ -14,6 +14,7 @@ namespace TIAMWebApp.Shared.Application.Models public const string ServiceProviderAPI = BaseUrlWithSlashAndVersion + "ServiceProviderAPI/"; public const string UserPermissionAPI = BaseUrlWithSlashAndVersion + "UserPermissionAPI/"; public const string FileAPI = BaseUrlWithSlashAndVersion + "FileAPI/"; + public const string MessageAPI = BaseUrlWithSlashAndVersion + "MessageAPI/"; //userdata public const string UserTestRouteName = "test1"; @@ -150,5 +151,9 @@ namespace TIAMWebApp.Shared.Application.Models public const string GetImageRouteName = "GetImage"; public const string GetImage = FileAPI+GetImageRouteName; + //email + public const string SendEmailRouteName = "SendEmail"; + public const string SendEmail = MessageAPI+SendEmailRouteName; + } } diff --git a/TIAMWebApp/Shared/Models/ClientSide/Messages/EmaiMessageSenderModel.cs b/TIAMWebApp/Shared/Models/ClientSide/Messages/EmaiMessageSenderModel.cs index 4e9ab9b3..ab22935d 100644 --- a/TIAMWebApp/Shared/Models/ClientSide/Messages/EmaiMessageSenderModel.cs +++ b/TIAMWebApp/Shared/Models/ClientSide/Messages/EmaiMessageSenderModel.cs @@ -4,7 +4,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; -using AyCode.Models.Messages; +using TIAM.Entities.Emails; namespace TIAMWebApp.Shared.Application.Models.ClientSide.Messages { diff --git a/TIAMWebApp/Shared/Models/ClientSide/UI/WizardModels/MessageWizardModel.cs b/TIAMWebApp/Shared/Models/ClientSide/UI/WizardModels/MessageWizardModel.cs index 70ff0a95..04a50091 100644 --- a/TIAMWebApp/Shared/Models/ClientSide/UI/WizardModels/MessageWizardModel.cs +++ b/TIAMWebApp/Shared/Models/ClientSide/UI/WizardModels/MessageWizardModel.cs @@ -21,7 +21,7 @@ namespace TIAMWebApp.Shared.Application.Models.ClientSide.UI.WizardModels public Guid ContextId { get; set; } [Required(ErrorMessage = "The subject value should be specified.")] [DataType(DataType.Text)] - [Display(Name = "Subject", ResourceType = typeof(TIAMResources))] + [Display(Name = ResourceKeys.Subject, ResourceType = typeof(TIAMResources))] public string Subject { get; set; } [Required(ErrorMessage = "The content value should be specified.")] [DataType(DataType.MultilineText)] @@ -37,24 +37,6 @@ namespace TIAMWebApp.Shared.Application.Models.ClientSide.UI.WizardModels SenderId = senderId; Subject = subject; Content = content; - } - - public static EmailMessage ConvertToNewEmailMessage(MessageWizardModel message) - { - var id = Guid.NewGuid(); - - - return new EmailMessage - { - Id = id, - SenderId = message.SenderId, - ContextId = message.ContextId, - Subject = message.Subject, - Text = message.Content, - EmailAddress = message.SenderEmailAddress, - Recipients = new List { new EmailRecipient( - Guid.NewGuid(), message.ReceiverId, id, "recipient@aycode.com") } - }; - } + } } } diff --git a/TIAMWebApp/Shared/Models/ClientSide/UI/WizardModels/MessageWizardModelExtensions.cs b/TIAMWebApp/Shared/Models/ClientSide/UI/WizardModels/MessageWizardModelExtensions.cs new file mode 100644 index 00000000..3fa3d4f0 --- /dev/null +++ b/TIAMWebApp/Shared/Models/ClientSide/UI/WizardModels/MessageWizardModelExtensions.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using TIAM.Entities.Emails; + +namespace TIAMWebApp.Shared.Application.Models.ClientSide.UI.WizardModels +{ + public static class MessageWizardModelExtensions + { + + public static MessageWizardModel Clone(this MessageWizardModel obj) + { + return new MessageWizardModel() + { + ReceiverEmailAddress = obj.ReceiverEmailAddress, + ReceiverId = obj.ReceiverId, + SenderEmailAddress = obj.SenderEmailAddress, + SenderId = obj.SenderId, + ContextId = obj.ContextId, + Subject = obj.Subject, + Content = obj.Content + }; + } + + + public static EmailMessage CopyToEmailMessage(this MessageWizardModel obj) + { + var id = Guid.NewGuid(); + + return new EmailMessage + { + Id = id, + SenderId = obj.SenderId, + ContextId = obj.ContextId, + Subject = obj.Subject, + Text = obj.Content, + EmailAddress = obj.SenderEmailAddress, + Recipients = new List { new EmailRecipient( + Guid.NewGuid(), obj.ReceiverId, id, "recipient@aycode.com") } + }; + } + + } +} diff --git a/TIAMWebApp/Shared/Models/ClientSide/UI/WizardModels/TransferWizardModel.cs b/TIAMWebApp/Shared/Models/ClientSide/UI/WizardModels/TransferWizardModel.cs index 90a6de3d..aa5987e6 100644 --- a/TIAMWebApp/Shared/Models/ClientSide/UI/WizardModels/TransferWizardModel.cs +++ b/TIAMWebApp/Shared/Models/ClientSide/UI/WizardModels/TransferWizardModel.cs @@ -23,8 +23,6 @@ namespace TIAMWebApp.Shared.Application.Models.ClientSide.UI.WizardModels public Guid? ReferralId { get; set; } - public string ? Comment { get; set; } - #region wizard fields [Destination(ErrorMessage = "The destination value is invalid.")] [DataType("TransferDestination")] @@ -36,6 +34,11 @@ namespace TIAMWebApp.Shared.Application.Models.ClientSide.UI.WizardModels [Display(Name = ResourceKeys.PickupAddress, ResourceType = typeof(TIAMResources))] public string? PickupAddress { get; set; } + //Flight number + [DataType(DataType.Text)] + [Display(Name = ResourceKeys.FlightNumber + " " + ResourceKeys.Optional, ResourceType = typeof(TIAMResources))] + public string? FlightNumber { get; set; } + [Required(ErrorMessage = "The pickup time should be specified.")] [DataType(DataType.Date)] [Display(Name = ResourceKeys.PickupTime, ResourceType = typeof(TIAMResources))] @@ -46,11 +49,19 @@ namespace TIAMWebApp.Shared.Application.Models.ClientSide.UI.WizardModels [Display(Name = ResourceKeys.NumberOfPassengers, ResourceType = typeof(TIAMResources))] public int NumberOfPassengers { get; set; } = 1; + [Required(ErrorMessage = "The amount of luggage should be specified.")] + [DataType("Int")] + [Display(Name = ResourceKeys.NumberOfLuggage, ResourceType = typeof(TIAMResources))] + public int NumberOfLuggage { get; set; } = 1; + //full name - [Required(ErrorMessage = "The full name should be specified.")] - [DataType(DataType.Text)] + [Required(ErrorMessage = "The name should be specified.")] + [DataType("FullName")] [Display(Name = ResourceKeys.FullName, ResourceType = typeof(TIAMResources))] - public string? FullName { get; set; } + public string? FullName => GetFullName(); + + public string? FirstName { get; set; } + public string? LastName { get; set; } //phone number [Required(ErrorMessage = "The phone number should be specified.")] @@ -68,6 +79,10 @@ namespace TIAMWebApp.Shared.Application.Models.ClientSide.UI.WizardModels [Display(Name = ResourceKeys.Price, ResourceType = typeof(TIAMResources))] public double? Price { get; set;} + [DataType(DataType.MultilineText)] + [Display(Name = ResourceKeys.Comment, ResourceType = typeof(TIAMResources))] + public string? Comment { get; set; } + //[DataType("Driver")] //[Display(Name = ResourceKeys.Driver, ResourceType = typeof(TIAMResources))] //public DriverModel Driver { get; set; } @@ -83,39 +98,44 @@ namespace TIAMWebApp.Shared.Application.Models.ClientSide.UI.WizardModels PickupAddress = pickupAddress; } - public TransferWizardModel(string destination, string pickupAddress, DateTime tripDate, int numberOfPassengers, string fullName, string phoneNumber, string emailAddress) : this(Guid.NewGuid(), destination, pickupAddress, tripDate, numberOfPassengers, fullName, phoneNumber, emailAddress) { } + public TransferWizardModel(string destination, string pickupAddress, DateTime tripDate, int numberOfPassengers, string firstName, string lastName, string phoneNumber, string emailAddress) : this(Guid.NewGuid(), destination, pickupAddress, tripDate, numberOfPassengers, firstName, lastName, phoneNumber, emailAddress) { } - public TransferWizardModel(Guid id, string destination, string pickupAddress, DateTime tripDate, int numberOfPassengers, string fullName, string phoneNumber, string emailAddress) + public TransferWizardModel(Guid id, string destination, string pickupAddress, DateTime tripDate, int numberOfPassengers, string firstName, string lastName, string phoneNumber, string emailAddress) { Id = id; Destination = destination; PickupAddress = pickupAddress; TripDate = tripDate; NumberOfPassengers = numberOfPassengers; - FullName = fullName; + FirstName = firstName; + LastName = lastName; PhoneNumber = phoneNumber; EmailAddress = emailAddress; } - public TransferWizardModel(string destination, string pickupAddress, DateTime tripDate, int numberOfPassengers, string fullName, string phoneNumber, string emailAddress, DriverModel driver) : this(Guid.NewGuid(), destination, pickupAddress, tripDate, numberOfPassengers, fullName, phoneNumber, emailAddress, driver) { } + public TransferWizardModel(string destination, string pickupAddress, DateTime tripDate, int numberOfPassengers, string firstName, string lastName, string phoneNumber, string emailAddress, DriverModel driver) : this(Guid.NewGuid(), destination, pickupAddress, tripDate, numberOfPassengers, firstName, lastName, phoneNumber, emailAddress, driver) { } - public TransferWizardModel(Guid id, string destination, string pickupAddress, DateTime tripDate, int numberOfPassengers, string fullName, string phoneNumber, string emailAddress, DriverModel driver) + public TransferWizardModel(Guid id, string destination, string pickupAddress, DateTime tripDate, int numberOfPassengers, string firstName, string lastName, string phoneNumber, string emailAddress, DriverModel driver) { Id = id; Destination = destination; PickupAddress = pickupAddress; TripDate = tripDate; NumberOfPassengers = numberOfPassengers; - FullName = fullName; + FirstName = firstName; + LastName = lastName; PhoneNumber = phoneNumber; EmailAddress = emailAddress; //Driver = driver; } - - + public string GetFullName() + { + return FirstName + " " + LastName; + } + } [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter, AllowMultiple = false)] diff --git a/TIAMWebApp/Shared/Models/ClientSide/UI/WizardModels/TransferWizardModelExtensions.cs b/TIAMWebApp/Shared/Models/ClientSide/UI/WizardModels/TransferWizardModelExtensions.cs index 7fbc1625..e7492943 100644 --- a/TIAMWebApp/Shared/Models/ClientSide/UI/WizardModels/TransferWizardModelExtensions.cs +++ b/TIAMWebApp/Shared/Models/ClientSide/UI/WizardModels/TransferWizardModelExtensions.cs @@ -24,7 +24,10 @@ namespace TIAMWebApp.Shared.Application.Models.ClientSide.UI.WizardModels PickupAddress = obj.PickupAddress, TripDate = obj.TripDate, NumberOfPassengers = obj.NumberOfPassengers, - FullName = obj.FullName, + NumberOfLuggage = obj.NumberOfLuggage, + FlightNumber = obj.FlightNumber, + FirstName = obj.FirstName, + LastName = obj.LastName, PhoneNumber = obj.PhoneNumber, EmailAddress = obj.EmailAddress, Price = obj.Price, @@ -43,10 +46,12 @@ namespace TIAMWebApp.Shared.Application.Models.ClientSide.UI.WizardModels FromAddress = obj.PickupAddress, Appointment = obj.TripDate, PassengerCount = Convert.ToByte(obj.NumberOfPassengers), - ContactName = obj.FullName, + FirstName = obj.FirstName, + LastName = obj.LastName, ContactPhone = obj.PhoneNumber, ContactEmail = obj.EmailAddress, Price = obj.Price, + LuggageCount = Convert.ToByte(obj.NumberOfLuggage), //UserProductMappingId = Guid.NewGuid(), TransferStatusType = TIAM.Core.Enums.TransferStatusType.OrderSubmitted, Comment = "Transfer order", @@ -55,5 +60,10 @@ namespace TIAMWebApp.Shared.Application.Models.ClientSide.UI.WizardModels return transfer; } + + public static string GetFullName(this TransferWizardModel obj) + { + return obj.FirstName + " " + obj.LastName; + } } } diff --git a/TIAMWebApp/Shared/Models/PageModels/AppointmentModel.cs b/TIAMWebApp/Shared/Models/PageModels/AppointmentModel.cs new file mode 100644 index 00000000..f680b54b --- /dev/null +++ b/TIAMWebApp/Shared/Models/PageModels/AppointmentModel.cs @@ -0,0 +1,42 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace TIAMWebApp.Shared.Application.Models.PageModels +{ + + public class AppointmentModel + { + public AppointmentModel() { } + public int AppointmentType { get; set; } + public DateTime StartDate { get; set; } + public DateTime EndDate { get; set; } + public string Caption { get; set; } + public string Description { get; set; } + public string Location { get; set; } + public int? Label { get; set; } + public int Status { get; set; } + public bool AllDay { get; set; } + public string Recurrence { get; set; } + public int? ResourceId { get; set; } + public bool Accepted { get; set; } + + public AppointmentModel(int appointmentType, DateTime startDate, DateTime endDate, string caption, string description, string location, int? label, int status, bool allDay, string recurrence, int? resourceId, bool accepted) + { + AppointmentType = appointmentType; + StartDate = startDate; + EndDate = endDate; + Caption = caption; + Description = description; + Location = location; + Label = label; + Status = status; + AllDay = allDay; + Recurrence = recurrence; + ResourceId = resourceId; + Accepted = accepted; + } + } +} diff --git a/TIAMWebApp/Shared/Models/UserSessionModel.cs b/TIAMWebApp/Shared/Models/UserSessionModel.cs index 50eb0c90..31368bf8 100644 --- a/TIAMWebApp/Shared/Models/UserSessionModel.cs +++ b/TIAMWebApp/Shared/Models/UserSessionModel.cs @@ -1,4 +1,5 @@ using System.Collections.Generic; +using AyCode.Models.Messages; using Microsoft.IdentityModel.Tokens; using TIAM.Entities.Users; using TIAM.Models.Dtos.Users; @@ -8,8 +9,10 @@ namespace TIAMWebApp.Shared.Application.Models public class UserSessionModel { //TODO: add user class - public UserModelDto UserModelDto { get; set; } + public UserModelDtoDetail UserModelDto { get; set; } public Guid UserId { get; set; } + + public string Email => UserModelDto.UserDto.EmailAddress; public UserType UserType { get; set; } public string? UserName => UserModelDto?.Profile?.Name; public string DisplayName => string.IsNullOrWhiteSpace(UserName) ? UserId.ToString() : UserName; @@ -18,9 +21,9 @@ namespace TIAMWebApp.Shared.Application.Models public int UserRoles { get; set; } public Dictionary UserRolesDictionary { get; set; } - public UserSessionModel(Guid userId, UserType userType, UserModelDto userModelDto, Dictionary? hasProperties, int userRoles) + public UserSessionModel(Guid userId, UserType userType, UserModelDtoDetail userModelDto, Dictionary? hasProperties, int userRoles) { - UserId = userId; + UserId = userId; UserType = userType; UserModelDto = userModelDto; HasProperties = hasProperties; diff --git a/TIAMWebApp/Shared/Services/ClientNoticeSenderService.cs b/TIAMWebApp/Shared/Services/ClientNoticeSenderService.cs index bf3655c2..e6a66f46 100644 --- a/TIAMWebApp/Shared/Services/ClientNoticeSenderService.cs +++ b/TIAMWebApp/Shared/Services/ClientNoticeSenderService.cs @@ -3,15 +3,67 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using TIAM.Entities.Transfers; using TIAMWebApp.Shared.Application.Interfaces; +using static System.Net.WebRequestMethods; +using TIAMWebApp.Shared.Application.Models.ClientSide; +using TIAMWebApp.Shared.Application.Models; +using System.Net.Http.Json; +//using AyCode.Models.Messages; +using TIAM.Entities.Emails; +using TIAMWebApp.Shared.Application.Utility; +using TIAMWebApp.Shared.Application.Models.ClientSide.Messages; namespace TIAMWebApp.Shared.Application.Services { public class ClientNoticeSenderService : IClientNoticeSenderService { - Task IClientNoticeSenderService.SendNoticeAsync(TNotice message, int messageType) + private readonly HttpClient http; + + public ClientNoticeSenderService(HttpClient http) { - throw new NotImplementedException(); + this.http = http; + } + + public async Task SendNoticeAsync(TNotice message, int messageType) where TNotice : TIAM.Entities.Emails.EmailMessage + { + var url = $"{Setting.ApiBaseUrl}/{APIUrls.SendEmail}"; + + + if (message != null) + { + EmailMessage? bleh = new EmailMessage(); + bleh.Subject = message.Subject; + bleh.SenderId = message.SenderId; + + + if(messageType == (int)AyCode.Models.Enums.MessageTypesEnum.email) + { + MessageSenderModel messageModel = new EmailMessageSenderModel(bleh, (AyCode.Models.Enums.MessageTypesEnum)messageType); + + messageModel.Message = message as EmailMessage; + + var response = await http.PostAsJsonAsync(url, messageModel); + if (!response.IsSuccessStatusCode) + return null; + + var result = (string)(await response.Content.ReadFromJsonAsync(typeof(string))); + return result; + + } + + else + { + return "Error sending the message"; + } + } + + else + { + return "Error sending the message"; + } + + } } } diff --git a/TIAMWebApp/Shared/Utility/ResourceKeys.cs b/TIAMWebApp/Shared/Utility/ResourceKeys.cs index 3b7e47fe..ad30d472 100644 --- a/TIAMWebApp/Shared/Utility/ResourceKeys.cs +++ b/TIAMWebApp/Shared/Utility/ResourceKeys.cs @@ -10,6 +10,9 @@ public const string ButtonDelete = "ButtonDelete"; public const string ButtonEdit = "ButtonEdit"; public const string FullName = "FullName"; + public const string FirstName = "FirstName"; + public const string LastName = "LastName"; + public const string Comment = "Comment"; public const string EmailAddress = "EmailAddress"; public const string PhoneNumber = "PhoneNumber"; public const string Password = "Password"; @@ -45,11 +48,17 @@ public const string Destination = "Destination"; public const string PickupTime = "PickupTime"; public const string NumberOfPassengers = "NumberOfPassengers"; + public const string NumberOfLuggage = "NumberOfLuggage"; + public const string FlightNumber = "FlightNumber"; + public const string Optional = "Optional"; public const string ProductType = "ProductType"; public const string ProductName = "ProductName"; public const string ProductDescription = "ProductDescription"; + public const string Subject = "Subject"; + public const string HtmlContent = "HtmlContent"; + } From 4d9650be0dcac7fffb92810ea91df7bc790b7410 Mon Sep 17 00:00:00 2001 From: Adam Date: Wed, 24 Apr 2024 18:24:09 +0200 Subject: [PATCH 4/4] messagepi namespace fix --- TIAMWebApp/Server/Controllers/MessageAPIController.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/TIAMWebApp/Server/Controllers/MessageAPIController.cs b/TIAMWebApp/Server/Controllers/MessageAPIController.cs index 6b2999db..0d27248a 100644 --- a/TIAMWebApp/Server/Controllers/MessageAPIController.cs +++ b/TIAMWebApp/Server/Controllers/MessageAPIController.cs @@ -17,7 +17,7 @@ using System.Text; using Microsoft.AspNetCore.Hosting; using Microsoft.EntityFrameworkCore; using TIAM.Database.DataLayers.Users; -using AyCode.Utils.Helpers; +using AyCode.Core.Helpers; using TIAM.Entities.Users; using TIAMWebApp.Server.ModelsTIAMWebApp.Shared.Application.Models; using TIAMWebApp.Shared.Application.Utility;