From 448428a756c98cd69bf5eace1c8fa201747589bb Mon Sep 17 00:00:00 2001 From: Adam Date: Sun, 23 Jun 2024 22:45:11 +0200 Subject: [PATCH] cars, drivers, permissions --- TIAM.Database/DataLayers/Admins/AdminDal.cs | 1 + TIAM.Services/SignalRTags.cs | 2 + .../User/SysAdmins/AddressGridComponent.razor | 4 +- .../SysAdmins/CarDetailGridComponent.razor | 186 +++++++++++ .../User/SysAdmins/CarGridComponent.razor | 171 ++++++++++ .../User/SysAdmins/DriverGridComponent.razor | 297 ++++++++++++++++++ .../Pages/User/SysAdmins/ManageCars.razor | 186 +++++++++++ .../Pages/User/SysAdmins/ManageDrivers.razor | 78 +++++ .../Pages/User/SysAdmins/ManageProducts.razor | 4 +- .../SysAdmins/ManageServiceProviders.razor | 17 +- .../User/SysAdmins/ManageTransfers.razor | 7 +- .../SysAdmins/ManageUserProductMappings.razor | 5 +- .../Pages/User/SysAdmins/ManageUsers.razor | 2 +- .../ProductDetailByIdGridComponent.razor | 193 ------------ .../ProductDetailGridComponent.razor | 26 +- .../UserProductMappingGridComponent.razor | 81 +++-- .../Shared/Components/Grids/CarDetailGrid.cs | 31 ++ .../Shared/Components/Grids/CarGrid.cs | 31 ++ .../Grids/UserProductMappingDriverGrid.cs | 31 ++ TIAMSharedUI/Shared/Users/AdminNavMenu.razor | 11 +- .../ServiceProviderAPIController.cs | 60 +++- TIAMWebApp/Shared/Models/APIUrls.cs | 14 +- 22 files changed, 1169 insertions(+), 269 deletions(-) create mode 100644 TIAMSharedUI/Pages/User/SysAdmins/CarDetailGridComponent.razor create mode 100644 TIAMSharedUI/Pages/User/SysAdmins/CarGridComponent.razor create mode 100644 TIAMSharedUI/Pages/User/SysAdmins/DriverGridComponent.razor create mode 100644 TIAMSharedUI/Pages/User/SysAdmins/ManageCars.razor create mode 100644 TIAMSharedUI/Pages/User/SysAdmins/ManageDrivers.razor delete mode 100644 TIAMSharedUI/Pages/User/SysAdmins/ProductDetailByIdGridComponent.razor create mode 100644 TIAMSharedUI/Shared/Components/Grids/CarDetailGrid.cs create mode 100644 TIAMSharedUI/Shared/Components/Grids/CarGrid.cs create mode 100644 TIAMSharedUI/Shared/Components/Grids/UserProductMappingDriverGrid.cs diff --git a/TIAM.Database/DataLayers/Admins/AdminDal.cs b/TIAM.Database/DataLayers/Admins/AdminDal.cs index 96ef74ba..2f07b2fb 100644 --- a/TIAM.Database/DataLayers/Admins/AdminDal.cs +++ b/TIAM.Database/DataLayers/Admins/AdminDal.cs @@ -33,6 +33,7 @@ namespace TIAM.Database.DataLayers.Admins } #region Car + public Task> GetAllCarsAsync() => SessionAsync(ctx => ctx.Cars.OrderBy(x => x.Manufacture).ThenBy(x => x.CarModel).ToList()); public Car? GetCarById(Guid carId) => Session(ctx => ctx.Cars.FirstOrDefault(x => x.Id == carId)); public List GetCarByUserProductMappingId(Guid userProductMappingId) => Session(ctx => ctx.Cars.Where(x => x.UserProductMappingId == userProductMappingId).ToList()); public Task AddCarAsync(Car car) => TransactionAsync(ctx => ctx.Cars.Add(car).State == EntityState.Added); diff --git a/TIAM.Services/SignalRTags.cs b/TIAM.Services/SignalRTags.cs index 279e69c1..7e15e654 100644 --- a/TIAM.Services/SignalRTags.cs +++ b/TIAM.Services/SignalRTags.cs @@ -52,11 +52,13 @@ public class SignalRTags : AcSignalRTags public const int GetAllUserProductMappings = 43; public const int GetUserProductMappingsByProductId = 44; public const int GetUserProductMappingsByUserId = 45; + public const int GetUserProductMappingById = 46; public const int GetCarsForUserProductMapping = 50; public const int CreateCar = 51; public const int UpdateCar = 52; public const int DeleteCar = 53; + public const int GetAllCars = 54; public const int GetMessagesByContextId = 60; public const int GetAllMessages = 61; diff --git a/TIAMSharedUI/Pages/User/SysAdmins/AddressGridComponent.razor b/TIAMSharedUI/Pages/User/SysAdmins/AddressGridComponent.razor index 532c8c49..6cdde6e2 100644 --- a/TIAMSharedUI/Pages/User/SysAdmins/AddressGridComponent.razor +++ b/TIAMSharedUI/Pages/User/SysAdmins/AddressGridComponent.razor @@ -24,9 +24,7 @@ KeyboardNavigationEnabled="KeyboardNavigationEnabled" KeyFieldName="Id" ValidationEnabled="false" - CustomizeEditModel="CustomizeEditModel" - EditModelSaving="EditModelSaving" - DataItemDeleting="DataItemDeleting" + CustomizeEditModel="CustomizeEditModel" EditMode="GridEditMode.EditForm" ColumnResizeMode="GridColumnResizeMode.NextColumn" ShowFilterRow="true"> diff --git a/TIAMSharedUI/Pages/User/SysAdmins/CarDetailGridComponent.razor b/TIAMSharedUI/Pages/User/SysAdmins/CarDetailGridComponent.razor new file mode 100644 index 00000000..0da339c5 --- /dev/null +++ b/TIAMSharedUI/Pages/User/SysAdmins/CarDetailGridComponent.razor @@ -0,0 +1,186 @@ +@using TIAM.Entities.Products +@using TIAM.Entities.Transfers +@using TIAM.Entities.Drivers +@using TIAM.Entities.Users +@using TIAM.Models.Dtos.Users +@using TIAM.Services +@using TIAMSharedUI.Shared.Components.Grids +@using TIAMWebApp.Shared.Application.Interfaces +@using TIAMWebApp.Shared.Application.Services +@using TIAMWebApp.Shared.Application.Utility +@using TIAM.Core.Loggers +@using AyCode.Core.Loggers +@using AyCode.Services.Loggers +@using AyCode.Core +@inject IServiceProviderDataService ServiceProviderDataService +@inject IEnumerable LogWriters +@inject AdminSignalRClient AdminSignalRClient + + + + + + + + + + + + + + + + + + @{ + if (ShowNestedRows) + { + + + + + + + + } + } + + + + @{ + var car = (Car)UserEditFormContext.EditModel; + } + + + @UserEditFormContext.GetEditor("CountryCode") + + + @UserEditFormContext.GetEditor("LicencePlate") + + + @UserEditFormContext.GetEditor("Color") + + + @UserEditFormContext.GetEditor("Manufacture") + + + @UserEditFormContext.GetEditor("CarModel") + + + @UserEditFormContext.GetEditor("YearOfMake") + + + @UserEditFormContext.GetEditor("SeatNumber") + + + @UserEditFormContext.GetEditor("CarMotorType") + + + + + + + + + +@code { + [Parameter] + public bool KeyboardNavigationEnabled { get; set; } + + [Parameter] public ICarRelation ParentData { get; set; } = null!; + + [Parameter] public int GetAllTag { get; set; } = SignalRTags.GetAllCars; + + [Parameter] public bool ShowNestedRows { get; set; } = false; + + [Parameter] public Guid? ContextId { get; set; } + + private Guid[] ContextIds = new Guid[0]; + + private LoggerClient _logger; + + protected override void OnParametersSet() + { + if (ContextId != null) + { + ContextIds = new Guid[1]; + ContextIds[0] = (Guid)ContextId; + } + base.OnParametersSet(); + } + + protected override async Task OnInitializedAsync() + { + _logger = new LoggerClient(LogWriters.ToArray()); + + + //_logger.Info($"DetailGridData: {_detailGridData.Count}"); + } + + void CustomizeEditModel(GridCustomizeEditModelEventArgs e) + { + if (e.IsNew) + { + var newCar = new Car + { + Id = Guid.NewGuid(), + UserProductMappingId = (Guid)ContextId, + CountryCode = 1, + LicencePlate = "ABC123", + Color = "White", + Manufacture = "Manufacturer", + CarModel = "Car model", + YearOfMake = DateTime.Now.Year, + SeatNumber = 5, + CarMotorType = TIAM.Core.Enums.CarMotorType.Electric + }; + + e.EditModel = newCar; + } + + else + { + // + } + + + } + + + async Task EditModelSaving(GridEditModelSavingEventArgs e) + { + if (e.IsNew) + + _logger.Info("New orderData added"); + else + _logger.Info("orderData updated"); + + await UpdateDataAsync(); + } + + async Task DataItemDeleting(GridDataItemDeletingEventArgs e) + { + + _logger.Info("orderData deleted"); + + } + + async Task UpdateDataAsync() + { + //refresh grid + _logger.Info("orderData grid refreshed"); + } + +} \ No newline at end of file diff --git a/TIAMSharedUI/Pages/User/SysAdmins/CarGridComponent.razor b/TIAMSharedUI/Pages/User/SysAdmins/CarGridComponent.razor new file mode 100644 index 00000000..3c1ad166 --- /dev/null +++ b/TIAMSharedUI/Pages/User/SysAdmins/CarGridComponent.razor @@ -0,0 +1,171 @@ +@using TIAM.Entities.Products +@using TIAM.Entities.Transfers +@using TIAM.Entities.Drivers +@using TIAM.Entities.Users +@using TIAM.Models.Dtos.Users +@using TIAM.Services +@using TIAMSharedUI.Shared.Components.Grids +@using TIAMWebApp.Shared.Application.Interfaces +@using TIAMWebApp.Shared.Application.Services +@using TIAMWebApp.Shared.Application.Utility +@using TIAM.Core.Loggers +@using AyCode.Core.Loggers +@using AyCode.Services.Loggers +@using AyCode.Core +@inject IServiceProviderDataService ServiceProviderDataService +@inject IEnumerable LogWriters +@inject AdminSignalRClient AdminSignalRClient + + + + + + + + + + + + + + + + + + @{ + if (ShowNestedRows) + { + + + + + + + + } + } + + + + @{ + var car = (Car)UserEditFormContext.EditModel; + } + + + @UserEditFormContext.GetEditor("CountryCode") + + + @UserEditFormContext.GetEditor("LicencePlate") + + + @UserEditFormContext.GetEditor("Color") + + + @UserEditFormContext.GetEditor("Manufacture") + + + @UserEditFormContext.GetEditor("CarModel") + + + @UserEditFormContext.GetEditor("YearOfMake") + + + @UserEditFormContext.GetEditor("SeatNumber") + + + @UserEditFormContext.GetEditor("CarMotorType") + + + + + + + + + +@code { + [Parameter] + public bool KeyboardNavigationEnabled { get; set; } + + [Parameter] public ICarRelation ParentData { get; set; } = null!; + + [Parameter] public int GetAllTag { get; set; } = SignalRTags.GetAllCars; + + [Parameter] public bool ShowNestedRows { get; set; } = false; + + [Parameter] public Guid? ContextId { get; set; } + + private Guid[] ContextIds = new Guid[0]; + + private LoggerClient _logger; + + protected override void OnParametersSet() + { + if (ContextId != null) + { + ContextIds = new Guid[1]; + ContextIds[0] = (Guid)ContextId; + } + base.OnParametersSet(); + } + + protected override async Task OnInitializedAsync() + { + _logger = new LoggerClient(LogWriters.ToArray()); + + + //_logger.Info($"DetailGridData: {_detailGridData.Count}"); + } + + void CustomizeEditModel(GridCustomizeEditModelEventArgs e) + { + if (!e.IsNew) return; + + // var newProductMapping = new UserProductMapping + // { + // ProductId = Guid.NewGuid(), + // UserId = UserModelDtoDetail.Id, + // Permissions = 1 + // }; + + //e.EditModel = newProductMapping; + } + + + async Task EditModelSaving(GridEditModelSavingEventArgs e) + { + if (e.IsNew) + + _logger.Info("New orderData added"); + else + _logger.Info("orderData updated"); + + await UpdateDataAsync(); + } + + async Task DataItemDeleting(GridDataItemDeletingEventArgs e) + { + + _logger.Info("orderData deleted"); + + } + + async Task UpdateDataAsync() + { + //refresh grid + _logger.Info("orderData grid refreshed"); + } + +} \ No newline at end of file diff --git a/TIAMSharedUI/Pages/User/SysAdmins/DriverGridComponent.razor b/TIAMSharedUI/Pages/User/SysAdmins/DriverGridComponent.razor new file mode 100644 index 00000000..86ce0ae8 --- /dev/null +++ b/TIAMSharedUI/Pages/User/SysAdmins/DriverGridComponent.razor @@ -0,0 +1,297 @@ +@using TIAM.Entities.Products +@using TIAM.Entities.Transfers +@using TIAM.Entities.Drivers +@using TIAM.Entities.Users +@using TIAM.Models.Dtos.Users +@using TIAM.Services +@using TIAMSharedUI.Shared.Components.Grids +@using TIAMWebApp.Shared.Application.Interfaces +@using TIAMWebApp.Shared.Application.Services +@using TIAMWebApp.Shared.Application.Utility +@using TIAM.Core.Loggers +@using AyCode.Core.Loggers +@using AyCode.Services.Loggers +@using AyCode.Core +@inject IServiceProviderDataService ServiceProviderDataService +@inject IEnumerable LogWriters +@inject AdminSignalRClient AdminSignalRClient +@inject IWizardProcessor WizardProcessor +@inject IUserDataService UserDataService + + + + + + +

User not found, type another email please

+ + + + + +
+ + + +
+ + + + + + + + + + @{ + if (ShowNestedRows) + { + + + + + + + + + + } + } + + + + + + @{ + var transfer2 = (UserProductMapping)UserEditFormContext.EditModel; + } + + + + @transfer2.UserId + @{ + var a = UserEditFormContext.GetEditor("UserId"); + } + @* Select user *@ + Select user + + + + @UserEditFormContext.GetEditor("Permissions") + + + + + + + + + +@code { + [Parameter] + public bool KeyboardNavigationEnabled { get; set; } + + [Parameter] public IProductRelation ParentData { get; set; } = null!; + + [Parameter] public int GetAllTag { get; set; } = SignalRTags.GetAllUserProductMappings; + + [Parameter] public bool ShowNestedRows { get; set; } = false; + + [Parameter] public Guid? ContextId { get; set; } + + private Guid[] ContextIds = new Guid[0]; + + private LoggerClient _logger; + + List _availableProducts; + + private UserProductMappingDriverGrid _driverGrid; + + private UserProductMapping tempProductMapping; + + bool PopupVisible { get; set; } + private DxMaskedInput emailInput; + private DxButton button1; + private ElementReference errorMessage; + private string errorCss = "display: none;"; + private List FoundUsers { get; set; } = new List(); + + + private string Email { get; set; } = "email@email.com"; + string EmailMask { get; set; } = @"(\w|[.-])+@(\w|-)+\.(\w|-){2,4}"; + UserModelDto ChosenUser = null; + + protected override void OnParametersSet() + { + if (ContextId != null) + { + ContextIds = new Guid[1]; + ContextIds[0] = (Guid)ContextId; + } + base.OnParametersSet(); + } + + protected override async Task OnInitializedAsync() + { + _logger = new LoggerClient(LogWriters.ToArray()); + + + //_logger.Info($"DetailGridData: {_detailGridData.Count}"); + } + + void CustomizeEditModel(GridCustomizeEditModelEventArgs e) + { + if (!e.IsNew) return; + UserProductMapping newUPM = (UserProductMapping)e.EditModel; + newUPM.ProductId = (Guid)ContextId!; + var newProductMapping = new UserProductMapping + { + Id = Guid.NewGuid(), + ProductId = (Guid)ContextId, + Permissions = 2 + }; + + //e.EditModel = newProductMapping; + } + + + async Task EditModelSaving(GridEditModelSavingEventArgs e) + { + if (e.IsNew) + + _logger.Info("New orderData added"); + else + _logger.Info("orderData updated"); + + await UpdateDataAsync(); + } + + async Task DataItemDeleting(GridDataItemDeletingEventArgs e) + { + + _logger.Info("orderData deleted"); + + } + + async Task UpdateDataAsync() + { + //refresh grid + _logger.Info("orderData grid refreshed"); + } + + async Task FindUser() + { + + + + var userModelDto = await UserDataService.GetUserByEmailAsync(Email); + if (userModelDto != null) + { + ChosenUser = userModelDto; + FoundUsers.Add(ChosenUser); + emailInput.Enabled = false; + button1.Visible = false; + } + else + { + emailInput.Value = "email@email.com"; + errorCss = "display: block"; + } + } + + void CancelCreateClick() + { + PopupVisible = false; + } + + void SelectDriverPopupClosed() + { + //cancel clicked + } + + void SelectDriverPopupClosing(PopupClosingEventArgs args) + { + //myModel = new TransferWizardModel(); + + } + + public async Task SubmitForm(object result) + { + + + _logger.Info($"Submitted nested form: {result.GetType().FullName}"); + } + + public async Task ShowPopup(UserProductMapping emptyProductMapping) + { + tempProductMapping = emptyProductMapping; + PopupVisible = true; + } + + private async Task OnUserSelected(Guid userId) + { + // Logic after the user is selected + await Task.Run(() => Console.WriteLine($"Selected User ID: {userId}")); + } + + private async Task OnRowClick(GridRowClickEventArgs e) + { + await SelectUser((Guid)e.Grid.GetRowValue(e.VisibleIndex, "Id")); + } + private async Task SelectUser(Guid id) + { + PopupVisible = false; + tempProductMapping.UserId = id; + await OnUserSelected(id); + } + + void Grid_CustomizeElement(GridCustomizeElementEventArgs e) + { + if (e.ElementType == GridElementType.DataRow && (int)e.Grid.GetRowValue(e.VisibleIndex, "Permissions") == 1) + { + e.Style="display: none"; + } + // else if (e.ElementType == GridElementType.HeaderCell) + // { + // e.Style = "background-color: rgba(0, 0, 0, 0.08); font-style=bold"; + + // } + } + + + +} \ No newline at end of file diff --git a/TIAMSharedUI/Pages/User/SysAdmins/ManageCars.razor b/TIAMSharedUI/Pages/User/SysAdmins/ManageCars.razor new file mode 100644 index 00000000..69320bed --- /dev/null +++ b/TIAMSharedUI/Pages/User/SysAdmins/ManageCars.razor @@ -0,0 +1,186 @@ +@page "/sysadmin/cars" +@using BlazorAnimation +@using TIAM.Models.Dtos.Users +@using TIAM.Resources +@using TIAM.Services +@using TIAMSharedUI.Pages.Components +@using TIAMSharedUI.Shared +@using TIAMWebApp.Shared.Application.Interfaces +@using TIAMWebApp.Shared.Application.Models.ClientSide.UI.WizardModels +@using TIAMWebApp.Shared.Application.Models.PageModels +@using TIAMWebApp.Shared.Application.Utility +@using AyCode.Services.Loggers +@layout AdminLayout +@inject IEnumerable LogWriters +@inject IStringLocalizer Localizer +@inject ISessionService SessionService +@inject IWizardProcessor WizardProcessor +@inject IUserDataService UserDataService +Car list + +
+

Car list

+

Manage cars here!

+
+ + +
+
+
+ +
+
+
+ +
+ + + +
+ +
+
+
+ +
+
+ +
+
+ +@code { + private LoggerClient _logger; + //public UserModelDtoDetail UserModelDtoDetail = new(); + + + bool PopupVisible { get; set; } + + IGrid Grid { get; set; } + //object? MasterGridData { get; set; } + bool AutoCollapseDetailRow { get; set; } + + public List IgnoreList = + [ + "ReceiverEmailAddress", + "ReceiverId", + "SenderEmailAddress", + "SenderId", + "ContextId" + ]; + + + + void Grid_CustomizeElement(GridCustomizeElementEventArgs e) + { + if (e.ElementType == GridElementType.DataRow && e.VisibleIndex % 2 == 1) + { + e.CssClass = "bg-alt"; + } + else 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) return; + + var userEditModel = (UserModelDtoDetail)e.EditModel; //TODO not valid cast + userEditModel.Id = Guid.NewGuid(); + + userEditModel.UserDto = new UserDtoDetail + { + AffiliateId = Guid.NewGuid(), + EmailAddress = "", + PhoneNumber = "" + }; + + userEditModel.ProfileDto = new TIAM.Entities.Profiles.Profile + { + Name = "New user" + }; + + userEditModel.Products = []; + userEditModel.ServiceProviders = []; + userEditModel.UserProductMappings = []; + } + + async Task Grid_EditModelSaving(GridEditModelSavingEventArgs e) + { + var userModelDtoDetail = ((UserModelDtoDetail)e.EditModel); + + if (e.IsNew) + { + //add new orderData to orderData array + var registration = new RegistrationModel(); + //TODO: Refractor to userDataService + + var random = new Random(); + const string chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"; + var password = new string(Enumerable.Repeat(chars, 10) + .Select(s => s[random.Next(s.Length)]).ToArray()); + + registration.Email = userModelDtoDetail.UserDto.EmailAddress; + registration.PhoneNumber = userModelDtoDetail.UserDto.PhoneNumber; + registration.Password = password; + registration.ReferralId = null; + + await UserDataService.CreateGuestUser(registration); + _logger.Info("New user created added"); + } + else + { + _logger.Info("orderData updated at id " + userModelDtoDetail.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; + // } + // } + + //TODO: ne a teljes grid-et refresh-eljük, elég lenne csak az adott sort! - J. + await UpdateDataAsync(); + } + + async Task Grid_DataItemDeleting(GridDataItemDeletingEventArgs e) + { + //await NwindDataService.RemoveEmployeeAsync((EditableEmployee)e.DataItem); + //remove orderData from orderData array + _logger.Info("orderData deleted"); + //await UpdateDataAsync(); + } + + async Task UpdateDataAsync() + { + //refresh grid + + _logger.Info("orderData grid refreshed"); + } + + protected override async Task OnInitializedAsync() + { + _logger = new LoggerClient(LogWriters.ToArray()); + + base.OnInitialized(); + } + + void ColumnChooserButton_Click() + { + Grid.ShowColumnChooser(); + } + +} diff --git a/TIAMSharedUI/Pages/User/SysAdmins/ManageDrivers.razor b/TIAMSharedUI/Pages/User/SysAdmins/ManageDrivers.razor new file mode 100644 index 00000000..6a08e108 --- /dev/null +++ b/TIAMSharedUI/Pages/User/SysAdmins/ManageDrivers.razor @@ -0,0 +1,78 @@ +@page "/sysadmin/drivers" +@using BlazorAnimation +@using TIAM.Entities.Users +@using TIAM.Models.Dtos.Users +@using TIAM.Resources +@using TIAM.Services +@using TIAMSharedUI.Pages.Components +@using TIAMSharedUI.Shared +@using TIAMWebApp.Shared.Application.Interfaces +@using TIAMWebApp.Shared.Application.Models.ClientSide.UI.WizardModels +@using TIAMWebApp.Shared.Application.Models.PageModels +@using TIAMWebApp.Shared.Application.Utility +@using AyCode.Services.Loggers +@layout AdminLayout +@inject IEnumerable LogWriters +@inject IStringLocalizer Localizer +@inject ISessionService SessionService + +User permissions + +
+

Drivers

+

Manage drivers here!

+
+ + +
+
+
+ +
+
+
+ +
+ + + +
+ +
+
+
+ +
+
+ +
+
+ +@code { + private LoggerClient _logger; + //public UserModelDtoDetail UserModelDtoDetail = new(); + + private string TransferProductId = "814b5495-c2e9-4f1d-a73f-37cd5d353078"; + + + IGrid Grid { get; set; } + //object? MasterGridData { get; set; } + bool AutoCollapseDetailRow { get; set; } + + + protected override async Task OnInitializedAsync() + { + _logger = new LoggerClient(LogWriters.ToArray()); + + base.OnInitialized(); + } + + void ColumnChooserButton_Click() + { + Grid.ShowColumnChooser(); + } + +} diff --git a/TIAMSharedUI/Pages/User/SysAdmins/ManageProducts.razor b/TIAMSharedUI/Pages/User/SysAdmins/ManageProducts.razor index d8148c09..2bfd8000 100644 --- a/TIAMSharedUI/Pages/User/SysAdmins/ManageProducts.razor +++ b/TIAMSharedUI/Pages/User/SysAdmins/ManageProducts.razor @@ -1,4 +1,6 @@ -@page "/user/products" +@* Deprecated *@ + +@page "/user/products" @using TIAM.Resources @using TIAMSharedUI.Shared @using TIAMWebApp.Shared.Application.Models.ClientSide.UI.WizardModels diff --git a/TIAMSharedUI/Pages/User/SysAdmins/ManageServiceProviders.razor b/TIAMSharedUI/Pages/User/SysAdmins/ManageServiceProviders.razor index b7e2c325..d535be92 100644 --- a/TIAMSharedUI/Pages/User/SysAdmins/ManageServiceProviders.razor +++ b/TIAMSharedUI/Pages/User/SysAdmins/ManageServiceProviders.razor @@ -1,7 +1,8 @@ -@page "/user/companies" +@page "/sysadmin/companies" @using BlazorAnimation @using TIAM.Entities.ServiceProviders @using TIAM.Resources +@using TIAM.Services @using TIAMSharedUI.Pages.Components @using TIAMSharedUI.Shared @using TIAMWebApp.Shared.Application.Interfaces @@ -26,8 +27,8 @@ Admin - Companies
-

Company management

-

Manage transfers here!

+

Partners

+

Manage partners here!

- + @@ -196,7 +197,7 @@ DateTime StartDate { get; set; } = DateTime.Today; DxSchedulerDataStorage _dataStorage = new(); - + void SendMail(Company item) { @@ -223,7 +224,7 @@ var userModelDto = await userDataService.GetUserByEmailAsync(Email); //overwrite ServiceProvider ownerid - //var target = await serviceProviderDataService.GetServiceProviderByIdAsync(CompanyToSetOwner.Id); + //var target = await serviceProviderDataService.GetServiceProviderByIdAsync(CompanyToSetOwner.Id); if (_companyToSetOwner == null) { return null; @@ -320,7 +321,7 @@ { _logger.Error($"OnProductGridItemSaving; company == null || company.OwnerId.IsNullOrEmpty(); company.OwnerId: {company?.OwnerId}"); return; - } + } var product = ((Product)e.EditModel); diff --git a/TIAMSharedUI/Pages/User/SysAdmins/ManageTransfers.razor b/TIAMSharedUI/Pages/User/SysAdmins/ManageTransfers.razor index 04800547..0a77047f 100644 --- a/TIAMSharedUI/Pages/User/SysAdmins/ManageTransfers.razor +++ b/TIAMSharedUI/Pages/User/SysAdmins/ManageTransfers.razor @@ -1,4 +1,4 @@ -@page "/user/transfers" +@page "/sysadmin/transfers" @using BlazorAnimation @using TIAM.Core.Enums @using TIAM.Entities.Emails @@ -121,6 +121,7 @@ + @@ -187,6 +188,10 @@ @EditFormContext.GetEditor("PassengerCount") + + @EditFormContext.GetEditor("Payed") + + @EditFormContext.GetEditor("TransferStatusType") diff --git a/TIAMSharedUI/Pages/User/SysAdmins/ManageUserProductMappings.razor b/TIAMSharedUI/Pages/User/SysAdmins/ManageUserProductMappings.razor index 79f9ef00..bc673523 100644 --- a/TIAMSharedUI/Pages/User/SysAdmins/ManageUserProductMappings.razor +++ b/TIAMSharedUI/Pages/User/SysAdmins/ManageUserProductMappings.razor @@ -1,7 +1,8 @@ -@page "/user/userproductmappings" +@page "/sysadmin/userproductmappings" @using BlazorAnimation @using TIAM.Models.Dtos.Users @using TIAM.Resources +@using TIAM.Services @using TIAMSharedUI.Pages.Components @using TIAMSharedUI.Shared @using TIAMWebApp.Shared.Application.Interfaces @@ -36,7 +37,7 @@ Click="ColumnChooserButton_Click" />
- + diff --git a/TIAMSharedUI/Pages/User/SysAdmins/ManageUsers.razor b/TIAMSharedUI/Pages/User/SysAdmins/ManageUsers.razor index ac85eec0..90537e02 100644 --- a/TIAMSharedUI/Pages/User/SysAdmins/ManageUsers.razor +++ b/TIAMSharedUI/Pages/User/SysAdmins/ManageUsers.razor @@ -1,4 +1,4 @@ -@page "/user/users" +@page "/sysadmin/users" @using BlazorAnimation @using TIAM.Models.Dtos.Users @using TIAM.Resources diff --git a/TIAMSharedUI/Pages/User/SysAdmins/ProductDetailByIdGridComponent.razor b/TIAMSharedUI/Pages/User/SysAdmins/ProductDetailByIdGridComponent.razor deleted file mode 100644 index eeeac381..00000000 --- a/TIAMSharedUI/Pages/User/SysAdmins/ProductDetailByIdGridComponent.razor +++ /dev/null @@ -1,193 +0,0 @@ -@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 TIAM.Resources -@using TIAMWebApp.Shared.Application.Interfaces -@using TIAMWebApp.Shared.Application.Utility -@using AyCode.Services.Loggers -@using TIAM.Core.Loggers -@using Address = TIAM.Entities.Addresses.Address -@using Profile = TIAM.Entities.Profiles.Profile -@using TIAMSharedUI.Shared.Components.Grids -@using TIAMSharedUI.Pages.Components.EditComponents -@using TIAMWebApp.Shared.Application.Services -@using AyCode.Interfaces.Addresses -@inject IStringLocalizer Localizer -@inject IServiceProviderDataService serviceProviderDataService -@inject IUserDataService userDataService -@inject ITransferDataService transferDataService -@inject IEnumerable LogWriters -@inject AdminSignalRClient AdminSignalRClient; - - - - - - - - - - - - - - - - - - - - - @{ - var transfer2 = (Product)EditFormContext.EditModel; - } - - - @EditFormContext.GetEditor("Name") - - - @EditFormContext.GetEditor("ProductType") - - - @EditFormContext.GetEditor("Price") - - - @EditFormContext.GetEditor("Description") - - - - - - - - -@code { - [Parameter] public bool KeyboardNavigationEnabled { get; set; } - [Parameter] public Guid? ContextId { get; set; } = null; - [Parameter] public IProductsRelation ParentData { get; set; } = null!; - [Parameter] public EventCallback OnGridEditModelSaving { get; set; } - - private ProductDetailGrid _productGrid; - private List productList = new List(); - private LoggerClient _logger = null!; - protected override void OnInitialized() - { - _logger = new LoggerClient(LogWriters.ToArray()); - //DataSource = new List
(); - - } - - protected override async Task OnParametersSetAsync() - { - // if (ParentData != null) - // { - // productList.AddRange(ParentData.Products); - // } - // else if (ContextId != null) - // { - // //_productGrid.ContextIds = new Guid[1]; - // //_productGrid.ContextIds[0] = (Guid)ContextId; - // var data = await serviceProviderDataService.GetProductByIdAsync((Guid)ContextId); - // List result = new List(); - // result.Add(data); - // _productGrid.DataSource = result; - // } - // else - - base.OnParametersSet(); - } - - protected override async Task OnAfterRenderAsync(bool firstRender) - { - // if(firstRender) - // { - - // var a = _productGrid; - - // if (ParentData != null) - // { - // _productGrid.DataSource = new List(); - // _productGrid.DataSource = ParentData.Products; - // } - - - // } - } - - private void DataItemChanged(GridDataItemChangedEventArgs args) - { - _logger.Debug($"Saving: {args.DataItem.Name}, {args.DataItem.ServiceProviderId}"); - - //ProductGrid.SaveChangesAsync(); - } - - public async Task DataItemSaving(GridEditModelSavingEventArgs e) - { - await OnGridEditModelSaving.InvokeAsync(e); - - if (e.Cancel) return; - - var product = ((Product)e.EditModel); - - if (e.IsNew) - { - _logger.Debug($"DataItemSaving"); - - var profileId = Guid.NewGuid(); - product.Profile = new Profile(profileId, product.Name); - product.ProfileId = profileId; - - var addressId = Guid.NewGuid(); - product.Profile.Address = new Address(addressId); - product.Profile.AddressId = addressId; - - //((Product)e.EditModel).UserProductMappings.Add(new UserProductMapping(Guid.NewGuid, ParentData.)); - } - else - { - - } - - _logger.Debug($"Saving: {product.Name}, {product.ServiceProviderId}"); - - //var result = serviceProviderDataService.CreateProductAsync((Product)e.EditModel); - //_logger.Debug($"saved product: {product.ServiceProviderId}"); - } - - private void DataItemDeleting(GridDataItemDeletingEventArgs obj) - { - _logger.Debug($"DataItemDeleting"); - } - - void CustomizeEditModel(GridCustomizeEditModelEventArgs e) - { - if (!e.IsNew) return; - - var newProduct = (Product)e.EditModel; - newProduct.Id = Guid.NewGuid(); - newProduct.Name = "Type a name"; - newProduct.ServiceProviderId = (Guid)ContextId!; - newProduct.Price = 0; - newProduct.ProductType = TIAM.Core.Enums.ProductType.Hotel; - newProduct.Description = "Type a description"; - } - -} \ No newline at end of file diff --git a/TIAMSharedUI/Pages/User/SysAdmins/ProductDetailGridComponent.razor b/TIAMSharedUI/Pages/User/SysAdmins/ProductDetailGridComponent.razor index ece9a5bb..319f7f2d 100644 --- a/TIAMSharedUI/Pages/User/SysAdmins/ProductDetailGridComponent.razor +++ b/TIAMSharedUI/Pages/User/SysAdmins/ProductDetailGridComponent.razor @@ -5,6 +5,7 @@ @using TIAM.Entities.Users @using TIAM.Models.Dtos.Users @using TIAM.Resources +@using TIAM.Services @using TIAMWebApp.Shared.Application.Interfaces @using TIAMWebApp.Shared.Application.Utility @using AyCode.Services.Loggers @@ -25,6 +26,7 @@ + + + + @@ -86,7 +92,7 @@ [Parameter] public Guid? ContextId { get; set; } = null; [Parameter] public IProductsRelation ParentData { get; set; } = null!; [Parameter] public EventCallback OnGridEditModelSaving { get; set; } - [Parameter] public int GetAllTag { get; set; } + [Parameter] public int GetAllTag { get; set; } = SignalRTags.GetProductsByContextId; private ProductDetailGrid _productGrid; private List productList = new List(); @@ -120,19 +126,19 @@ protected override async Task OnAfterRenderAsync(bool firstRender) { - if(firstRender) - { + // if(firstRender) + // { - _productGrid.GetAllMessageTag = GetAllTag; + // _productGrid.GetAllMessageTag = GetAllTag; - // if (ParentData != null) - // { - // _productGrid.DataSource = new List(); - // _productGrid.DataSource = ParentData.Products; - // } + // // if (ParentData != null) + // // { + // // _productGrid.DataSource = new List(); + // // _productGrid.DataSource = ParentData.Products; + // // } - } + // } } private void DataItemChanged(GridDataItemChangedEventArgs args) diff --git a/TIAMSharedUI/Pages/User/SysAdmins/UserProductMappingGridComponent.razor b/TIAMSharedUI/Pages/User/SysAdmins/UserProductMappingGridComponent.razor index 5d857c72..72eb9293 100644 --- a/TIAMSharedUI/Pages/User/SysAdmins/UserProductMappingGridComponent.razor +++ b/TIAMSharedUI/Pages/User/SysAdmins/UserProductMappingGridComponent.razor @@ -17,18 +17,19 @@ @inject AdminSignalRClient AdminSignalRClient - + @@ -37,14 +38,21 @@ - - - - - - - + @{ + if (ShowNestedRows) + { + + + + + + + + + } + } + @{ var transfer2 = (UserProductMapping)UserEditFormContext.EditModel; @@ -71,7 +79,15 @@ [Parameter] public bool KeyboardNavigationEnabled { get; set; } - [Parameter] public IUserProductMappingForeignKey ParentData { get; set; } = null!; + [Parameter] public IProductRelation ParentData { get; set; } = null!; + + [Parameter] public int GetAllTag { get; set; } = SignalRTags.GetAllUserProductMappings; + + [Parameter] public bool ShowNestedRows { get; set; } = false; + + [Parameter] public Guid? ContextId { get; set; } + + private Guid[] ContextIds = new Guid[0]; private LoggerClient _logger; @@ -79,6 +95,16 @@ private ProductDetailGridComponent bleh; + protected override void OnParametersSet() + { + if (ContextId != null) + { + ContextIds = new Guid[1]; + ContextIds[0] = (Guid)ContextId; + } + base.OnParametersSet(); + } + protected override async Task OnInitializedAsync() { _logger = new LoggerClient(LogWriters.ToArray()); @@ -101,20 +127,11 @@ //e.EditModel = newProductMapping; } - protected override void OnAfterRender(bool firstRender) - { - if(firstRender) - { - bleh.GetAllTag = SignalRTags.GetProductsById; - } - - base.OnAfterRender(firstRender); - } async Task EditModelSaving(GridEditModelSavingEventArgs e) { if (e.IsNew) - + _logger.Info("New orderData added"); else _logger.Info("orderData updated"); @@ -124,9 +141,9 @@ async Task DataItemDeleting(GridDataItemDeletingEventArgs e) { - + _logger.Info("orderData deleted"); - + } async Task UpdateDataAsync() diff --git a/TIAMSharedUI/Shared/Components/Grids/CarDetailGrid.cs b/TIAMSharedUI/Shared/Components/Grids/CarDetailGrid.cs new file mode 100644 index 00000000..88ab6566 --- /dev/null +++ b/TIAMSharedUI/Shared/Components/Grids/CarDetailGrid.cs @@ -0,0 +1,31 @@ +using Microsoft.AspNetCore.Components; +using TIAM.Entities.Drivers; +using TIAM.Entities.Products; +using TIAM.Services; + +namespace TIAMSharedUI.Shared.Components.Grids; + +public class CarDetailGrid : CarGrid +{ + public CarDetailGrid() : base() + { + GetAllMessageTag = SignalRTags.GetAllCars; + AddMessageTag = SignalRTags.CreateCar; + UpdateMessageTag = SignalRTags.UpdateCar; + RemoveMessageTag = SignalRTags.DeleteCar; + } + + protected override Task SetParametersAsyncCore(ParameterView parameters) + { + if (!IsFirstInitializeParameters) + { + //ShowFilterRow = true; + //ShowGroupPanel = true; + //AllowSort = false; + + //etc... + } + + return base.SetParametersAsyncCore(parameters); + } +} \ No newline at end of file diff --git a/TIAMSharedUI/Shared/Components/Grids/CarGrid.cs b/TIAMSharedUI/Shared/Components/Grids/CarGrid.cs new file mode 100644 index 00000000..60db5b36 --- /dev/null +++ b/TIAMSharedUI/Shared/Components/Grids/CarGrid.cs @@ -0,0 +1,31 @@ +using Microsoft.AspNetCore.Components; +using TIAM.Entities.Drivers; +using TIAM.Entities.Products; +using TIAM.Services; + +namespace TIAMSharedUI.Shared.Components.Grids; + +public class CarGrid : TiamGrid +{ + public CarGrid() : base() + { + GetAllMessageTag = SignalRTags.GetAllCars; + AddMessageTag = SignalRTags.CreateCar; + UpdateMessageTag = SignalRTags.UpdateCar; + RemoveMessageTag = SignalRTags.DeleteCar; + } + + protected override Task SetParametersAsyncCore(ParameterView parameters) + { + if (!IsFirstInitializeParameters) + { + //ShowFilterRow = true; + //ShowGroupPanel = true; + //AllowSort = false; + + //etc... + } + + return base.SetParametersAsyncCore(parameters); + } +} \ No newline at end of file diff --git a/TIAMSharedUI/Shared/Components/Grids/UserProductMappingDriverGrid.cs b/TIAMSharedUI/Shared/Components/Grids/UserProductMappingDriverGrid.cs new file mode 100644 index 00000000..5dbebbfc --- /dev/null +++ b/TIAMSharedUI/Shared/Components/Grids/UserProductMappingDriverGrid.cs @@ -0,0 +1,31 @@ +using Microsoft.AspNetCore.Components; +using TIAM.Entities.ServiceProviders; +using TIAM.Entities.Users; +using TIAM.Services; + +namespace TIAMSharedUI.Shared.Components.Grids; + +public class UserProductMappingDriverGrid : TiamGrid +{ + public UserProductMappingDriverGrid() : base() + { + GetAllMessageTag = SignalRTags.GetAllUserProductMappings; + AddMessageTag = SignalRTags.CreateUserProductMapping; + UpdateMessageTag = SignalRTags.UpdateUserProductMapping; + RemoveMessageTag = SignalRTags.DeleteUserProductMapping; + } + + protected override Task SetParametersAsyncCore(ParameterView parameters) + { + if (!IsFirstInitializeParameters) + { + //ShowFilterRow = true; + //ShowGroupPanel = true; + //AllowSort = false; + + //etc... + } + + return base.SetParametersAsyncCore(parameters); + } +} \ No newline at end of file diff --git a/TIAMSharedUI/Shared/Users/AdminNavMenu.razor b/TIAMSharedUI/Shared/Users/AdminNavMenu.razor index 5bcadbdc..b90709e3 100644 --- a/TIAMSharedUI/Shared/Users/AdminNavMenu.razor +++ b/TIAMSharedUI/Shared/Users/AdminNavMenu.razor @@ -15,10 +15,13 @@ - - - - + + + + + + + diff --git a/TIAMWebApp/Server/Controllers/ServiceProviderAPIController.cs b/TIAMWebApp/Server/Controllers/ServiceProviderAPIController.cs index e06e9160..95d79644 100644 --- a/TIAMWebApp/Server/Controllers/ServiceProviderAPIController.cs +++ b/TIAMWebApp/Server/Controllers/ServiceProviderAPIController.cs @@ -213,9 +213,9 @@ namespace TIAMWebApp.Server.Controllers //23. [AllowAnonymous] [HttpPost] - [Route(APIUrls.GetUserProductMappingsByProductRouteName)] + [Route(APIUrls.GetUserProductMappingsByProductIdRouteName)] [SignalR(SignalRTags.GetUserProductMappingsByProductId)] - public async Task GetUserProductMappingsForProduct(Guid productId) + public async Task GetUserProductMappingsByProductId(Guid productId) { _logger.Info($@"GetUserProductMappingsByUserId called with serviceProviderId: {productId}"); @@ -229,9 +229,9 @@ namespace TIAMWebApp.Server.Controllers [AllowAnonymous] [HttpPost] - [Route(APIUrls.GetUserProductMappingsByUserRouteName)] + [Route(APIUrls.GetUserProductMappingsByUserIdRouteName)] [SignalR(SignalRTags.GetUserProductMappingsByUserId)] - public async Task GetUserProductMappingsByProduct(Guid userId) + public async Task GetUserProductMappingsByUserId(Guid userId) { _logger.Info($@"GetUserProductMappingsByUserId called with userId: {userId}"); @@ -243,6 +243,22 @@ namespace TIAMWebApp.Server.Controllers return myUserProductMappings.ToJson(); } + [AllowAnonymous] + [HttpPost] + [Route(APIUrls.GetUserProductMappingByIdRouteName)] + [SignalR(SignalRTags.GetUserProductMappingById)] + public async Task GetUserProductMappingById(Guid id) + { + _logger.Info($@"GetUserProductMappingsByUserId called with userId: {id}"); + + var userProductMappings = adminDal.GetAllUserProductMappings(); + + var myUserProductMappings = userProductMappings.Where(x => x.Id == id).ToList(); + //put serviceprovider id and name into a dictionary + + return myUserProductMappings.ToJson(); + } + [AllowAnonymous] [HttpPost] [Route(APIUrls.GetAllUserProductMappingsRouteName)] @@ -263,11 +279,24 @@ namespace TIAMWebApp.Server.Controllers [HttpGet] [Route(APIUrls.GetCarsForUserProductMappingRouteName + "/{userProductMappingId}")] [SignalR(SignalRTags.GetCarsForUserProductMapping)] - public async Task> GetCarsForUserProductMapping(string userProductMappingId) + public async Task> GetCarsForUserProductMapping(Guid userProductMappingId) { _logger.Info($@"GetCarsForUserProductMapping called with userProductMappingId: {userProductMappingId}"); - var cars = adminDal.GetCarByUserProductMappingId(Guid.Parse(userProductMappingId)); + var cars = adminDal.GetCarByUserProductMappingId(userProductMappingId); + + return cars; + } + + [AllowAnonymous] + [HttpGet] + [Route(APIUrls.GetAllCarsRouteName)] + [SignalR(SignalRTags.GetAllCars)] + public async Task> GetAllCars() + { + _logger.Info($@"GetAllCars called "); + + var cars = await adminDal.GetAllCarsAsync(); return cars; } @@ -310,8 +339,13 @@ namespace TIAMWebApp.Server.Controllers [Tags("Finished", "Cars")] [EndpointSummary("Create car")] [SignalR(SignalRTags.CreateCar)] - public async Task CreateCar(Car car) - => await CarDataChanging(car, TrackingState.Add) ? Ok(car) : BadRequest("Invalid request"); + public async Task CreateCar(Car car) + { + var result = await CarDataChanging(car, TrackingState.Add); + if (result) + return car; + else return null; + } [AllowAnonymous] [HttpPost] @@ -319,8 +353,14 @@ namespace TIAMWebApp.Server.Controllers [Tags("Finished", "Cars")] [EndpointSummary("Update car")] [SignalR(SignalRTags.UpdateCar)] - public async Task UpdateCar(Car car) - => await CarDataChanging(car, TrackingState.Update) ? Ok(car) : BadRequest("Invalid request"); + public async Task UpdateCar(Car car) + { + var result = await CarDataChanging(car, TrackingState.Update); + if (result) + return car; + else return null; + } + [AllowAnonymous] [HttpPost] diff --git a/TIAMWebApp/Shared/Models/APIUrls.cs b/TIAMWebApp/Shared/Models/APIUrls.cs index 61433433..097f6a0b 100644 --- a/TIAMWebApp/Shared/Models/APIUrls.cs +++ b/TIAMWebApp/Shared/Models/APIUrls.cs @@ -159,11 +159,14 @@ namespace TIAMWebApp.Shared.Application.Models public const string GetAllUserProductMappingsRouteName = "GetAllUserProductMappings"; public const string GetAllUserProductMappings = ServiceProviderAPI + GetAllUserProductMappingsRouteName; - public const string GetUserProductMappingsByProductRouteName = "GetUserProductMappingsByProduct"; - public const string GetUserProductMappingsByProduct = ServiceProviderAPI + GetUserProductMappingsByProductRouteName; + public const string GetUserProductMappingsByProductIdRouteName = "GetUserProductMappingsByProductId"; + public const string GetUserProductMappingsByProductId = ServiceProviderAPI + GetUserProductMappingsByProductIdRouteName; - public const string GetUserProductMappingsByUserRouteName = "GetUserProductMappingsByUser"; - public const string GetUserProductMappingsByUser = ServiceProviderAPI + GetUserProductMappingsByUserRouteName; + public const string GetUserProductMappingsByUserIdRouteName = "GetUserProductMappingsByUserId"; + public const string GetUserProductMappingsByUserId = ServiceProviderAPI + GetUserProductMappingsByUserIdRouteName; + + public const string GetUserProductMappingByIdRouteName = "GetUserProductMappingById"; + public const string GetUserProductMappingById = ServiceProviderAPI + GetUserProductMappingByIdRouteName; public const string GetCarsForUserProductMappingRouteName = "GetCarsForUserProductMapping"; public const string GetCarsForUserProductMapping = ServiceProviderAPI + GetCarsForUserProductMappingRouteName; @@ -177,6 +180,9 @@ namespace TIAMWebApp.Shared.Application.Models public const string DeleteCarRouteName = "DeleteCar"; public const string DeleteCar = ServiceProviderAPI + DeleteCarRouteName; + public const string GetAllCarsRouteName = "GetAllCars"; + public const string GetAllCars = ServiceProviderAPI + GetAllCarsRouteName; + public const string GetProfileByIdRouteName = "GetProfileById"; public const string GetProfileById = ProfileAPI + GetProfileByIdRouteName;