driver transfers

This commit is contained in:
Adam 2024-07-03 10:25:42 +02:00
parent d3714d491d
commit 70105d5d9c
9 changed files with 93 additions and 178 deletions

View File

@ -11,6 +11,7 @@ public class SignalRTags : AcSignalRTags
public const int GetTransfersByDriverId = 4; public const int GetTransfersByDriverId = 4;
public const int GetTransfersByProductId = 5; public const int GetTransfersByProductId = 5;
public const int GetTransfersByCompanyId = 6; public const int GetTransfersByCompanyId = 6;
public const int GetTransfersByUserProductMappingId = 701;
public const int GetTransfersByFilterText = 301; public const int GetTransfersByFilterText = 301;

View File

@ -18,6 +18,7 @@
@inject IJSRuntime JSRuntime @inject IJSRuntime JSRuntime
@inject IEnumerable<IAcLogWriterClientBase> LogWriters @inject IEnumerable<IAcLogWriterClientBase> LogWriters
@inject IUserDataService UserDataService @inject IUserDataService UserDataService
@inject IServiceProviderDataService ServiceProviderDataService
@inject ISecureStorageHandler SecureStorageHandler @inject ISecureStorageHandler SecureStorageHandler
@inject ISessionService sessionService; @inject ISessionService sessionService;
@inject HttpClient http; @inject HttpClient http;
@ -109,9 +110,9 @@
string _userId = jsontoken.Claims.First(claim => claim.Type == JwtRegisteredClaimNames.NameId).Value; string _userId = jsontoken.Claims.First(claim => claim.Type == JwtRegisteredClaimNames.NameId).Value;
string _email = jsontoken.Claims.First(claim => claim.Type == JwtRegisteredClaimNames.Email).Value; string _email = jsontoken.Claims.First(claim => claim.Type == JwtRegisteredClaimNames.Email).Value;
var user = await UserDataService.IsLoggedInAsync(Guid.Parse(_userId)); var user = await UserDataService.IsLoggedInAsync(Guid.Parse(_userId));
SaveToSessionInfo(user); await SaveToSessionInfo(user);
_logger.Info($"Saved user in db is: {user.DisplayName}, setting autenthicated state"); _logger.Info($"Saved user in db is: {user.DisplayName}, setting autenthicated state");
//NavManager.NavigateTo("/"); //NavManager.NavigateTo("/");
} }
else else
@ -123,12 +124,13 @@
} }
protected void SaveToSessionInfo(UserSessionModel user) protected async Task SaveToSessionInfo(UserSessionModel user)
{ {
sessionService.User = user; sessionService.User = user;
sessionService.IsAuthenticated = true; sessionService.IsAuthenticated = true;
sessionService.HasCompany = user.UserModelDto.UserProductMappings.Count > 0; sessionService.HasCompany = user.UserModelDto.UserProductMappings.Count > 0;
sessionService.IsDriver = CheckIfDriver(user.UserModelDto.UserProductMappings); _logger.Debug($"Checking driver for: {user.UserModelDto.UserProductMappings.Count} mapping");
sessionService.IsDriver = await CheckIfDriver(user.UserModelDto.UserProductMappings);
if (user.UserModelDto.Id == TiamConstClient.DevAdminIds[0] || user.UserModelDto.Id == TiamConstClient.DevAdminIds[1]) if (user.UserModelDto.Id == TiamConstClient.DevAdminIds[0] || user.UserModelDto.Id == TiamConstClient.DevAdminIds[1])
{ {
sessionService.IsDevAdmin = true; sessionService.IsDevAdmin = true;
@ -143,12 +145,16 @@
_logger.Debug($"Saved to session: IsAuthenticated: {sessionService.IsAuthenticated}, HasCompany: {sessionService.HasCompany}, IsDriver: {sessionService.IsDriver}, IsDevAdmin: {sessionService.IsDevAdmin}, IsSysAdmin: {sessionService.IsSysAdmin}"); _logger.Debug($"Saved to session: IsAuthenticated: {sessionService.IsAuthenticated}, HasCompany: {sessionService.HasCompany}, IsDriver: {sessionService.IsDriver}, IsDevAdmin: {sessionService.IsDevAdmin}, IsSysAdmin: {sessionService.IsSysAdmin}");
} }
public bool CheckIfDriver(List<UserProductMapping> Permissions) public async Task<bool> CheckIfDriver(List<UserProductMapping> Permissions)
{ {
bool _isDriver = false; bool _isDriver = false;
foreach (UserProductMapping Permission in Permissions) foreach (UserProductMapping Permission in Permissions)
{ {
if (IsPowerOfTwoInSum(2, Permission.Permissions)) var permissionToCheck = await ServiceProviderDataService.GetUserProductMappingByIdAsync(Permission.Id);
_logger.Debug($"calling IsPowerOf with values: {Permission.Id}, {Permission.Permissions}, {permissionToCheck.Permissions}, {3}");
var driverPermissionResult = IsBitSet(permissionToCheck.Permissions, 3);
if (driverPermissionResult)
{ {
_isDriver = true; _isDriver = true;
sessionService.DriverPersmissionId = Permission.Id; sessionService.DriverPersmissionId = Permission.Id;
@ -157,10 +163,16 @@
return _isDriver; return _isDriver;
} }
public static bool IsPowerOfTwoInSum(int number, int power) public bool IsBitSet(int number, int power)
{ {
_logger.Debug($"called IsBitSet with values: {number}, {power}");
int powerOfTwo = 1 << power; // Calculate 2^power int powerOfTwo = 1 << power; // Calculate 2^power
return (number & powerOfTwo) != 0; // Check if the bit at position `power` is set
_logger.Debug($"powerOfTwo: {powerOfTwo}, {power}");
bool result = (number & powerOfTwo) != 0; // Check if the bit at position `power` is set
return result;
} }
public async Task<(string, string)> GetLocalSettings() public async Task<(string, string)> GetLocalSettings()

View File

@ -1,5 +1,6 @@
@page "/driver/cars/{driverId}" @page "/driver/cars/{driverId:guid}"
@using BlazorAnimation @using BlazorAnimation
@using TIAM.Entities.Drivers
@using TIAM.Models.Dtos.Users @using TIAM.Models.Dtos.Users
@using TIAM.Resources @using TIAM.Resources
@using TIAM.Services @using TIAM.Services
@ -31,14 +32,9 @@
<Animation Effect="@Effect.FadeInUp" Speed="@Speed.Fast" Delay="@TimeSpan.FromMilliseconds(250)"> <Animation Effect="@Effect.FadeInUp" Speed="@Speed.Fast" Delay="@TimeSpan.FromMilliseconds(250)">
<div class="card"> <div class="card">
<div class="d-flex flex-column mb-4 pb-2"> <div class="d-flex flex-column mb-4 pb-2">
<div class="align-self-end pl-2 pb-2">
<DxButton Text="Column Chooser"
RenderStyle="ButtonRenderStyle.Secondary"
IconCssClass="btn-column-chooser"
Click="ColumnChooserButton_Click" />
</div>
<CarDetailGridComponent DetailExpandButtonDisplayMode="GridDetailExpandButtonDisplayMode.Auto" ContextId="Guid.Parse(driverId)" GetAllTag="SignalRTags.GetCarsForUserProductMapping"></CarDetailGridComponent> <CarDetailGridComponent DetailExpandButtonDisplayMode="GridDetailExpandButtonDisplayMode.Auto" ContextId="driverId" GetAllTag="SignalRTags.GetCarsForUserProductMapping"></CarDetailGridComponent>
</div> </div>
@ -54,126 +50,11 @@
@code { @code {
[Parameter] public string driverId { get; set; } [Parameter] public Guid driverId { get; set; }
private LoggerClient<DriverManageCars> _logger; private LoggerClient<DriverManageCars> _logger;
//public UserModelDtoDetail UserModelDtoDetail = new();
bool PopupVisible { get; set; }
IGrid Grid { get; set; }
//object? MasterGridData { get; set; }
public List<string> 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<Transfer>)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() protected override async Task OnInitializedAsync()
{ {
_logger = new LoggerClient<DriverManageCars>(LogWriters.ToArray()); _logger = new LoggerClient<DriverManageCars>(LogWriters.ToArray());
@ -181,9 +62,4 @@
base.OnInitialized(); base.OnInitialized();
} }
void ColumnChooserButton_Click()
{
Grid.ShowColumnChooser();
}
} }

View File

@ -1,10 +1,12 @@
@page "/driver/transfers/{driverId}" @page "/driver/transfers/{driverId:guid}"
@using BlazorAnimation @using BlazorAnimation
@using TIAM.Core.Enums @using TIAM.Core.Enums
@using TIAM.Entities.Emails @using TIAM.Entities.Emails
@using TIAM.Entities.Transfers @using TIAM.Entities.Transfers
@using TIAM.Resources @using TIAM.Resources
@using TIAM.Services
@using TIAMSharedUI.Pages.Components @using TIAMSharedUI.Pages.Components
@using TIAMSharedUI.Pages.User.SysAdmins
@using TIAMSharedUI.Shared @using TIAMSharedUI.Shared
@using TIAMWebApp.Shared.Application.Interfaces @using TIAMWebApp.Shared.Application.Interfaces
@using TIAMWebApp.Shared.Application.Models.ClientSide.UI @using TIAMWebApp.Shared.Application.Models.ClientSide.UI
@ -80,22 +82,22 @@
</div> </div>
<TransferDetailGrid @ref="_gridTransfer" <TransferDetailGrid @ref="_gridTransfer"
Logger="_logger" Logger="_logger"
SignalRClient="AdminSignalRClient" GetAllMessageTag="SignalRTags.GetTransfersByUserProductMappingId"
ContextIds="new object[] {DriverId}" SignalRClient="AdminSignalRClient"
FilterText="@_filterText" ContextIds="new object[] {driverId}"
OnDataSourceChanged="DataSourceChanged" OnDataSourceChanged="DataSourceChanged"
OnGridItemChanging="DataSourceItemChanging" OnGridItemChanging="DataSourceItemChanging"
OnGridItemChanged="DataSourceItemChanged" OnGridItemChanged="DataSourceItemChanged"
OnGridItemDeleting="DataItemDeleting" OnGridItemDeleting="DataItemDeleting"
OnGridEditModelSaving="DataItemSaving" OnGridEditModelSaving="DataItemSaving"
CustomizeElement="Grid_CustomizeElement" CustomizeElement="Grid_CustomizeElement"
CustomizeEditModel="Grid_CustomizeEditModel" CustomizeEditModel="Grid_CustomizeEditModel"
EditMode="GridEditMode.EditForm" EditMode="GridEditMode.EditForm"
ColumnResizeMode="GridColumnResizeMode.NextColumn" ColumnResizeMode="GridColumnResizeMode.NextColumn"
AllowSelectRowByClick="false" AllowSelectRowByClick="false"
PageSize="13" PageSize="13"
ShowFilterRow="true"> ShowFilterRow="true">
<Columns> <Columns>
<DxGridCommandColumn NewButtonVisible="false" DeleteButtonVisible="AcDomain.IsDeveloperVersion" Width="80" MinWidth="80" FixedPosition="GridColumnFixedPosition.Left" /> <DxGridCommandColumn NewButtonVisible="false" DeleteButtonVisible="AcDomain.IsDeveloperVersion" Width="80" MinWidth="80" FixedPosition="GridColumnFixedPosition.Left" />
@ -196,14 +198,7 @@
</DxFormLayout> </DxFormLayout>
</EditFormTemplate> </EditFormTemplate>
<ToolbarTemplate>
<div>
<DxTagBox Data="@Statuses" Values="@_selectedCategories" @ref="_filterTag"
ValuesChanged="(IEnumerable<TransferStatusModel> values) => TagBox_ValuesChanged(values)"
ValueFieldName="StatusValue" TextFieldName="StatusName" NullText="Select status type..."
ClearButtonDisplayMode="DataEditorClearButtonDisplayMode.Auto" aria-label="Select status type" />
</div>
</ToolbarTemplate>
</TransferDetailGrid> </TransferDetailGrid>
</div> </div>
</DxTabPage> </DxTabPage>
@ -238,14 +233,12 @@
@code { @code {
[Parameter] public Guid DriverId { get; set; } [Parameter] public Guid DriverId { get; set; }
private Guid driverId;
private LoggerClient<DriverManageTransfers> _logger; private LoggerClient<DriverManageTransfers> _logger;
private bool _popupVisible; private bool _popupVisible;
private TransferGrid _gridTransfer; private TransferGrid _gridTransfer;
private DxTagBox<TransferStatusModel, TransferStatusModel> _filterTag;
public List<string> IgnoreList = public List<string> IgnoreList =
[ [
"ReceiverEmailAddress", "ReceiverEmailAddress",
@ -260,14 +253,14 @@
private static readonly List<TransferStatusModel> Statuses = private static readonly List<TransferStatusModel> Statuses =
[ [
new(Convert.ToByte(TransferStatusType.OrderSubmitted), "Order submitted"), new(Convert.ToByte(TransferStatusType.OrderSubmitted), "Order submitted"),
new(Convert.ToByte(TransferStatusType.OrderConfirmed), "Order confirmed"), new(Convert.ToByte(TransferStatusType.OrderConfirmed), "Order confirmed"),
new(Convert.ToByte(TransferStatusType.AssignedToDriver), "Assigned to driver"), new(Convert.ToByte(TransferStatusType.AssignedToDriver), "Assigned to driver"),
new(Convert.ToByte(TransferStatusType.DriverConfirmed), "Driver confirmed"), new(Convert.ToByte(TransferStatusType.DriverConfirmed), "Driver confirmed"),
new(Convert.ToByte(TransferStatusType.DriverEnRoute), "Driver enroute"), new(Convert.ToByte(TransferStatusType.DriverEnRoute), "Driver enroute"),
new(Convert.ToByte(TransferStatusType.PassengerPickup), "Passenger in car"), new(Convert.ToByte(TransferStatusType.PassengerPickup), "Passenger in car"),
new(Convert.ToByte(TransferStatusType.Finished), "Finished"), new(Convert.ToByte(TransferStatusType.Finished), "Finished"),
new(Convert.ToByte(TransferStatusType.UserCanceled), "User cancelled"), new(Convert.ToByte(TransferStatusType.UserCanceled), "User cancelled"),
new(Convert.ToByte(TransferStatusType.AdminDenied), "Admin cancelled") new(Convert.ToByte(TransferStatusType.AdminDenied), "Admin cancelled")
]; ];
private static List<TransferStatusModel> _selectedCategories = Statuses.Where(x => /* x.StatusValue != (byte)TransferStatusType.OrderSubmitted && */ x.StatusValue != (byte)TransferStatusType.Finished && x.StatusValue != (byte)TransferStatusType.UserCanceled && x.StatusValue != (byte)TransferStatusType.AdminDenied).ToList(); private static List<TransferStatusModel> _selectedCategories = Statuses.Where(x => /* x.StatusValue != (byte)TransferStatusType.OrderSubmitted && */ x.StatusValue != (byte)TransferStatusType.Finished && x.StatusValue != (byte)TransferStatusType.UserCanceled && x.StatusValue != (byte)TransferStatusType.AdminDenied).ToList();
@ -280,6 +273,11 @@
DateTime StartDate { get; set; } = DateTime.Today; DateTime StartDate { get; set; } = DateTime.Today;
DxSchedulerDataStorage _dataStorage = new(); DxSchedulerDataStorage _dataStorage = new();
protected override Task OnParametersSetAsync()
{
driverId = DriverId;
return base.OnParametersSetAsync();
}
void SendMail(Transfer item) void SendMail(Transfer item)
{ {
@ -325,7 +323,7 @@
return $@" return $@"
<html> <html>
<body> <body>
<p>Dear {messageModel.SenderFullName},</p> <p>Dear {messageModel.ReceiverFullName},</p>
<p>{messageModel.Content}:</p> <p>{messageModel.Content}:</p>
<p>Best regards,<br/>Tour I Am team</p> <p>Best regards,<br/>Tour I Am team</p>
</body> </body>

View File

@ -26,10 +26,13 @@
<DxMenuItem Text="Driver" Visible="@IsDriver" IconCssClass="menu-icon-products menu-icon"> <DxMenuItem Text="Driver" Visible="@IsDriver" IconCssClass="menu-icon-products menu-icon">
<Items> <Items>
<DxMenuItem NavigateUrl="driver/dashboard" Text="Dashboard" /> <DxMenuItem NavigateUrl="driver/dashboard" Text="Dashboard" />
<DxMenuItem NavigateUrl="driver/transfers" Text="My transfers" />
@{ @{
string url = $"driver/cars/{SessionService.DriverPersmissionId.ToString()}"; string url1 = $"driver/transfers/{SessionService.DriverPersmissionId}";
<DxMenuItem NavigateUrl="@url" Text="My cars" /> string url2 = $"driver/cars/{SessionService.DriverPersmissionId}";
<DxMenuItem NavigateUrl="@url1" Text="My transfers" />
<DxMenuItem NavigateUrl="@url2" Text="My cars" />
} }
<DxMenuItem NavigateUrl="sysadmin/users" Text="Users" /> <DxMenuItem NavigateUrl="sysadmin/users" Text="Users" />

View File

@ -556,6 +556,7 @@ namespace TIAMWebApp.Server.Controllers
return result; return result;
} }
[NonAction]
[SignalR(SignalRTags.GetTransfersByFilterText)] [SignalR(SignalRTags.GetTransfersByFilterText)]
public async Task<List<Transfer>> GetTransfersByFilterText(string criteriaOperatorText) public async Task<List<Transfer>> GetTransfersByFilterText(string criteriaOperatorText)
{ {
@ -575,6 +576,17 @@ namespace TIAMWebApp.Server.Controllers
return result; return result;
} }
[Authorize]
[HttpGet]
[Route(APIUrls.GetTransfersByUserProductMappingIdRouteName)]
[SignalR(SignalRTags.GetTransfersByUserProductMappingId)]
public async Task<string> GetTransfersByDriverId(Guid userProductMappingId)
{
_logger.Debug($"GetTransferByDriverId called!!!");
var result = await _adminDal.GetTransfersByUserProductMappingIdAsync(userProductMappingId);
return result.ToJson();
}
[AllowAnonymous] [AllowAnonymous]
[HttpPost] [HttpPost]

View File

@ -39,6 +39,7 @@ namespace TIAMWebApp.Shared.Application.Interfaces
//23. (IServiceProviderDataService) Get Assigned Users By ProductId //23. (IServiceProviderDataService) Get Assigned Users By ProductId
public Task<List<UserProductMapping>> GetUserProductMappingsByProductIdAsync(Guid productId); public Task<List<UserProductMapping>> GetUserProductMappingsByProductIdAsync(Guid productId);
public Task<UserProductMapping> GetUserProductMappingByIdAsync(Guid productId);
//24. (IServiceProviderDataService) Remove Assigned Users from Product //24. (IServiceProviderDataService) Remove Assigned Users from Product
public Task RemoveUserProductMappingsByContextIdAsync(Guid productId); public Task RemoveUserProductMappingsByContextIdAsync(Guid productId);

View File

@ -111,6 +111,12 @@ namespace TIAMWebApp.Shared.Application.Models
public const string GetTransferByIdRouteName = "GetTransferById"; public const string GetTransferByIdRouteName = "GetTransferById";
public const string GetTransferById = TransferDataAPI + GetTransferByIdRouteName; public const string GetTransferById = TransferDataAPI + GetTransferByIdRouteName;
public const string GetTransfersByDriverIdRouteName = "GetTransfersByDriverId";
public const string GetTransfersByDriverId = TransferDataAPI + GetTransfersByDriverIdRouteName;
public const string GetTransfersByUserProductMappingIdRouteName = "GetTransfersByUserProductMappingId";
public const string GetTransfersByUserProductMappingId = TransferDataAPI + GetTransfersByUserProductMappingIdRouteName;
public const string CreateTransferRouteName = "CreateTransfer"; public const string CreateTransferRouteName = "CreateTransfer";
public const string CreateTransfer = TransferDataAPI + CreateTransferRouteName; public const string CreateTransfer = TransferDataAPI + CreateTransferRouteName;

View File

@ -109,7 +109,13 @@ namespace TIAMWebApp.Shared.Application.Services
{ {
throw new NotImplementedException(); throw new NotImplementedException();
} }
public async Task<UserProductMapping> GetUserProductMappingByIdAsync(Guid userProductMappingId)
{
var result = await _adminSignalRClient.GetByIdAsync<UserProductMapping>(SignalRTags.GetUserProductMappingById, userProductMappingId);
return result;
}
//17. //17.
public Task GetPropertiesByOwnerIdAsync(Guid id, Action<Dictionary<Guid, string>?> callback) public Task GetPropertiesByOwnerIdAsync(Guid id, Action<Dictionary<Guid, string>?> callback)
{ {