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 GetTransfersByProductId = 5;
public const int GetTransfersByCompanyId = 6;
public const int GetTransfersByUserProductMappingId = 701;
public const int GetTransfersByFilterText = 301;

View File

@ -18,6 +18,7 @@
@inject IJSRuntime JSRuntime
@inject IEnumerable<IAcLogWriterClientBase> LogWriters
@inject IUserDataService UserDataService
@inject IServiceProviderDataService ServiceProviderDataService
@inject ISecureStorageHandler SecureStorageHandler
@inject ISessionService sessionService;
@inject HttpClient http;
@ -109,7 +110,7 @@
string _userId = jsontoken.Claims.First(claim => claim.Type == JwtRegisteredClaimNames.NameId).Value;
string _email = jsontoken.Claims.First(claim => claim.Type == JwtRegisteredClaimNames.Email).Value;
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");
//NavManager.NavigateTo("/");
@ -123,12 +124,13 @@
}
protected void SaveToSessionInfo(UserSessionModel user)
protected async Task SaveToSessionInfo(UserSessionModel user)
{
sessionService.User = user;
sessionService.IsAuthenticated = true;
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])
{
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}");
}
public bool CheckIfDriver(List<UserProductMapping> Permissions)
public async Task<bool> CheckIfDriver(List<UserProductMapping> Permissions)
{
bool _isDriver = false;
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;
sessionService.DriverPersmissionId = Permission.Id;
@ -157,10 +163,16 @@
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
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()

View File

@ -1,5 +1,6 @@
@page "/driver/cars/{driverId}"
@page "/driver/cars/{driverId:guid}"
@using BlazorAnimation
@using TIAM.Entities.Drivers
@using TIAM.Models.Dtos.Users
@using TIAM.Resources
@using TIAM.Services
@ -31,14 +32,9 @@
<Animation Effect="@Effect.FadeInUp" Speed="@Speed.Fast" Delay="@TimeSpan.FromMilliseconds(250)">
<div class="card">
<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>
@ -54,126 +50,11 @@
@code {
[Parameter] public string driverId { get; set; }
[Parameter] public Guid driverId { get; set; }
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()
{
_logger = new LoggerClient<DriverManageCars>(LogWriters.ToArray());
@ -181,9 +62,4 @@
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 TIAM.Core.Enums
@using TIAM.Entities.Emails
@using TIAM.Entities.Transfers
@using TIAM.Resources
@using TIAM.Services
@using TIAMSharedUI.Pages.Components
@using TIAMSharedUI.Pages.User.SysAdmins
@using TIAMSharedUI.Shared
@using TIAMWebApp.Shared.Application.Interfaces
@using TIAMWebApp.Shared.Application.Models.ClientSide.UI
@ -80,22 +82,22 @@
</div>
<TransferDetailGrid @ref="_gridTransfer"
Logger="_logger"
SignalRClient="AdminSignalRClient"
ContextIds="new object[] {DriverId}"
FilterText="@_filterText"
OnDataSourceChanged="DataSourceChanged"
OnGridItemChanging="DataSourceItemChanging"
OnGridItemChanged="DataSourceItemChanged"
OnGridItemDeleting="DataItemDeleting"
OnGridEditModelSaving="DataItemSaving"
CustomizeElement="Grid_CustomizeElement"
CustomizeEditModel="Grid_CustomizeEditModel"
EditMode="GridEditMode.EditForm"
ColumnResizeMode="GridColumnResizeMode.NextColumn"
AllowSelectRowByClick="false"
PageSize="13"
ShowFilterRow="true">
Logger="_logger"
GetAllMessageTag="SignalRTags.GetTransfersByUserProductMappingId"
SignalRClient="AdminSignalRClient"
ContextIds="new object[] {driverId}"
OnDataSourceChanged="DataSourceChanged"
OnGridItemChanging="DataSourceItemChanging"
OnGridItemChanged="DataSourceItemChanged"
OnGridItemDeleting="DataItemDeleting"
OnGridEditModelSaving="DataItemSaving"
CustomizeElement="Grid_CustomizeElement"
CustomizeEditModel="Grid_CustomizeEditModel"
EditMode="GridEditMode.EditForm"
ColumnResizeMode="GridColumnResizeMode.NextColumn"
AllowSelectRowByClick="false"
PageSize="13"
ShowFilterRow="true">
<Columns>
<DxGridCommandColumn NewButtonVisible="false" DeleteButtonVisible="AcDomain.IsDeveloperVersion" Width="80" MinWidth="80" FixedPosition="GridColumnFixedPosition.Left" />
@ -196,14 +198,7 @@
</DxFormLayout>
</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>
</div>
</DxTabPage>
@ -238,14 +233,12 @@
@code {
[Parameter] public Guid DriverId { get; set; }
private Guid driverId;
private LoggerClient<DriverManageTransfers> _logger;
private bool _popupVisible;
private TransferGrid _gridTransfer;
private DxTagBox<TransferStatusModel, TransferStatusModel> _filterTag;
public List<string> IgnoreList =
[
"ReceiverEmailAddress",
@ -260,14 +253,14 @@
private static readonly List<TransferStatusModel> Statuses =
[
new(Convert.ToByte(TransferStatusType.OrderSubmitted), "Order submitted"),
new(Convert.ToByte(TransferStatusType.OrderConfirmed), "Order confirmed"),
new(Convert.ToByte(TransferStatusType.AssignedToDriver), "Assigned to driver"),
new(Convert.ToByte(TransferStatusType.DriverConfirmed), "Driver confirmed"),
new(Convert.ToByte(TransferStatusType.DriverEnRoute), "Driver enroute"),
new(Convert.ToByte(TransferStatusType.PassengerPickup), "Passenger in car"),
new(Convert.ToByte(TransferStatusType.Finished), "Finished"),
new(Convert.ToByte(TransferStatusType.UserCanceled), "User cancelled"),
new(Convert.ToByte(TransferStatusType.AdminDenied), "Admin cancelled")
new(Convert.ToByte(TransferStatusType.OrderConfirmed), "Order confirmed"),
new(Convert.ToByte(TransferStatusType.AssignedToDriver), "Assigned to driver"),
new(Convert.ToByte(TransferStatusType.DriverConfirmed), "Driver confirmed"),
new(Convert.ToByte(TransferStatusType.DriverEnRoute), "Driver enroute"),
new(Convert.ToByte(TransferStatusType.PassengerPickup), "Passenger in car"),
new(Convert.ToByte(TransferStatusType.Finished), "Finished"),
new(Convert.ToByte(TransferStatusType.UserCanceled), "User 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();
@ -280,6 +273,11 @@
DateTime StartDate { get; set; } = DateTime.Today;
DxSchedulerDataStorage _dataStorage = new();
protected override Task OnParametersSetAsync()
{
driverId = DriverId;
return base.OnParametersSetAsync();
}
void SendMail(Transfer item)
{
@ -325,7 +323,7 @@
return $@"
<html>
<body>
<p>Dear {messageModel.SenderFullName},</p>
<p>Dear {messageModel.ReceiverFullName},</p>
<p>{messageModel.Content}:</p>
<p>Best regards,<br/>Tour I Am team</p>
</body>

View File

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

View File

@ -556,6 +556,7 @@ namespace TIAMWebApp.Server.Controllers
return result;
}
[NonAction]
[SignalR(SignalRTags.GetTransfersByFilterText)]
public async Task<List<Transfer>> GetTransfersByFilterText(string criteriaOperatorText)
{
@ -575,6 +576,17 @@ namespace TIAMWebApp.Server.Controllers
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]
[HttpPost]

View File

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

View File

@ -111,6 +111,12 @@ namespace TIAMWebApp.Shared.Application.Models
public const string GetTransferByIdRouteName = "GetTransferById";
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 CreateTransfer = TransferDataAPI + CreateTransferRouteName;

View File

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