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 +