This commit is contained in:
jozsef.b@aycode.com 2024-05-27 20:01:16 +02:00
commit 07a36c2329
14 changed files with 282 additions and 101 deletions

View File

@ -236,7 +236,12 @@ namespace TIAM.Database.DataLayers.Admins
public Task<List<Company>> GetServiceProvidersAsync()
{
return Context.ServiceProviders.ToListAsync();
return SessionAsync(ctx => ctx.ServiceProviders.ToList());
}
public Task<string> GetServiceProvidersAsyncJson()
{
return SessionAsync(ctx => ctx.ServiceProviders.ToJson());
}
public virtual Task<Company?> GetServiceProviderByIdAsync(Guid id)

View File

@ -43,14 +43,24 @@ namespace TIAMMobileApp.Services
if (userModelDto != null)
{
Dictionary<Guid, string> userProperties = new Dictionary<Guid, string>();
//get user's properties
var hasProperties = await serviceProviderDataService.GetPropertiesByOwnerIdAsync(userModelDto.Id);
bool hasProperties = userModelDto.ServiceProviders.Count > 0 ? true : userModelDto.ServiceProviders.Count == 0 ? false : false;
if (hasProperties)
{
if (hasProperties != null)
_logger.Info($"{hasProperties.Count} properties found");
//var Properties = await serviceProviderDataService.GetPropertiesByOwnerIdAsync(userModelDto.Id);
var Properties = userModelDto.ServiceProviders;
_logger.Info($"{Properties.Count} properties found");
foreach ( var property in Properties )
{
userProperties.Add(property.Id, property.Name);
}
}
//create user session model
var user = new UserSessionModel(userModelDto.Id, UserType.User, userModelDto, hasProperties, 1);
var user = new UserSessionModel(userModelDto.Id, UserType.User, userModelDto, userProperties, 1);
return user;
}
else

View File

@ -422,6 +422,7 @@ new HeroSliderItem
"Destination",
"PickupAddress",
"ProductId",
"PaymentId",
"FlightNumber",
"TripDate",
"FirstName",

View File

@ -130,7 +130,8 @@
{
"Id",
"UserId",
"ProductId",
"ProductId",
"PaymentId",
"FirstName",
"LastName",
"UserProductMappingId",

View File

@ -97,6 +97,7 @@ new HeroSliderItem
"Id",
"UserId",
"ProductId",
"PaymentId",
"TripDate",
"FirstName",
"LastName",

View File

@ -0,0 +1,119 @@
@using TIAM.Entities.Products
@using TIAM.Entities.ServiceProviders
@using TIAM.Entities.Transfers
@using TIAM.Entities.Drivers
@using TIAM.Entities.Users
@using TIAM.Models.Dtos.Users
@using TIAMWebApp.Shared.Application.Interfaces
@using TIAMWebApp.Shared.Application.Utility
@using AyCode.Services.Loggers
@using TIAM.Core.Loggers
@inject IServiceProviderDataService ServiceProviderDataService
@inject IEnumerable<IAcLogWriterClientBase> LogWriters
<div class="mb-2">
UserProductMapping
</div>
<DxGrid Data="_detailGridData"
PageSize="5"
AutoExpandAllGroupRows="true"
KeyboardNavigationEnabled="KeyboardNavigationEnabled"
KeyFieldName="Id"
ValidationEnabled="false"
CustomizeEditModel="CustomizeEditModel"
EditModelSaving="EditModelSaving"
DataItemDeleting="DataItemDeleting"
EditMode="GridEditMode.EditForm"
ColumnResizeMode="GridColumnResizeMode.NextColumn"
ShowFilterRow="true">
<Columns>
<DxGridCommandColumn NewButtonVisible="true" Width="8%" FixedPosition="GridColumnFixedPosition.Left" />
<DxGridDataColumn FieldName="Id" GroupIndex="0" />
<DxGridDataColumn FieldName="UserId" />
<DxGridDataColumn FieldName="ServiceProviderId" Width="40%" />
@* <DxGridDataColumn FieldName="Permissions" /> *@
</Columns>
<EditFormTemplate Context="EditFormContext">
@{
var transfer2 = (UserToCompany)EditFormContext.EditModel;
}
<DxFormLayout CssClass="w-100">
<DxFormLayoutItem Caption="UserId" ColSpanMd="4">
@EditFormContext.GetEditor("UserId")
</DxFormLayoutItem>
<DxFormLayoutItem Caption="User:" ColSpanMd="4">
<DxComboBox Data="@_availableUsers" TextFieldName="Name" @bind-Value="((UserToCompany)EditFormContext.EditModel).UserId" />
</DxFormLayoutItem>
@* <DxFormLayoutItem Caption="Permissions" ColSpanMd="4">
@EditFormContext.GetEditor("Permissions")
</DxFormLayoutItem> *@
</DxFormLayout>
</EditFormTemplate>
</DxGrid>
@code {
[Parameter]
public bool KeyboardNavigationEnabled { get; set; }
[Parameter]
public Company CurrentCompany { get; set; }
List<UserToCompany> _detailGridData;
List<User> _availableUsers;
public UserModelDtoDetail UserInfo;
ILogger _logger;
protected override async Task OnInitializedAsync()
{
_logger = new LoggerClient<CompaniesNestedUserProductMapping>(LogWriters.ToArray());
_detailGridData = CurrentCompany.UserToServiceProviders ?? new List<UserToCompany>();
_logger.Info($"DetailGridData: {_detailGridData.Count}");
}
void CustomizeEditModel(GridCustomizeEditModelEventArgs e)
{
if (!e.IsNew) return;
var newProductMapping = new UserToCompany
{
ServiceProviderId = CurrentCompany.Id,
UserId = Guid.Empty
};
e.EditModel = newProductMapping;
}
async Task EditModelSaving(GridEditModelSavingEventArgs e)
{
if (e.IsNew)
//add new orderData to orderData array
_logger.Info("New user added to the company");
else
_logger.Info("orderData updated");
await UpdateDataAsync();
}
async Task DataItemDeleting(GridDataItemDeletingEventArgs e)
{
//remove orderData from orderData array
_logger.Info("orderData deleted");
//await UpdateDataAsync();
}
async Task UpdateDataAsync()
{
//refresh grid
_logger.Info("orderData grid refreshed");
}
}

View File

@ -1,9 +1,11 @@
@page "/user/companies"
@using AyCode.Core.Helpers
@using BlazorAnimation
@using TIAM.Core.Enums
@using TIAM.Entities.ServiceProviders
@using TIAM.Entities.Transfers
@using TIAM.Resources
@using TIAM.Services
@using TIAMSharedUI.Pages.Components
@using TIAMSharedUI.Shared
@using TIAMWebApp.Shared.Application.Interfaces
@ -22,6 +24,7 @@
@inject IStringLocalizer<TIAMResources> localizer
@inject IWizardProcessor wizardProcessor
@inject IServiceProviderDataService serviceProviderDataService
@inject IUserDataService userDataService
@inject ISessionService sessionService
@inject DevAdminSignalClient devAdminSignalClient;
<PageTitle>Admin - Companies</PageTitle>
@ -31,9 +34,24 @@
<h2 style="font-size:small">Manage transfers here!</h2>
</div>
<DxPopup
@bind-Visible="@SetOwnerPopupVisible"
ShowFooter="true"
HeaderText="Set owner"
>
<BodyContentTemplate>
<DxTextBox CssClass="form-field" @Bind-Text="@UpdateOwnerIdText">
</DxTextBox>
</BodyContentTemplate>
<FooterContentTemplate>
<DxButton CssClass="popup-button my-1 ms-2" RenderStyle="ButtonRenderStyle.Primary" Text="OK" Click="@(() => SetOwnerPopupVisible = false)" />
@* <DxButton CssClass="popup-button my-1 ms-2" RenderStyle="ButtonRenderStyle.Secondary" Text="Cancel" Click="@(() => SetOwnerPopupVisible = false)" /> *@
</FooterContentTemplate>
</DxPopup>
<DxPopup CssClass="popup-demo-events"
@bind-Visible="@PopupVisible"
@bind-Visible="@SendMailPopupVisible"
ShowFooter="true"
CloseOnEscape="true"
CloseOnOutsideClick="false"
@ -77,38 +95,44 @@
KeyFieldName="Id">
<Columns>
<DxGridCommandColumn NewButtonVisible="false" Width="8%" FixedPosition="GridColumnFixedPosition.Left" />
<DxGridCommandColumn NewButtonVisible="true" Width="8%" FixedPosition="GridColumnFixedPosition.Left" />
<DxGridDataColumn FieldName="Id" ShowInColumnChooser="false" SortIndex="0" Visible="false" />
<DxGridDataColumn FieldName="Name" />
<DxGridDataColumn FieldName="OwnerId" />
<DxGridDataColumn FieldName="OwnerId">
<CellDisplayTemplate>
@{
var keyField = context.Value;
var keyItem = (Company)context.DataItem;
string buttonText = "Set owner";
if(keyField == null)
{
<DxButton Click="() => SetOwnerPopup(keyItem)" Text="@buttonText" RenderStyle="ButtonRenderStyle.Primary" />
}
}
</CellDisplayTemplate>
</DxGridDataColumn>
<DxGridDataColumn FieldName="AffiliateId" />
<DxGridDataColumn FieldName="CommissionPercent" />
<DxGridDataColumn FieldName="Created" />
@* <DxGridDataColumn FieldName="ContactEmail">
<CellDisplayTemplate>
@{
var keyField = context.Value;
var keyItem = (TiamServiceProvider)context.DataItem;
string buttonText = "Contact";
<DxButton Click="() => SendMail(keyItem.)" Text="@buttonText" RenderStyle="ButtonRenderStyle.Primary" />
}
</CellDisplayTemplate>
</DxGridDataColumn> *@
<DxGridDataColumn FieldName="PassengerCount" />
</DxGridDataColumn> *@
</Columns>
<DetailRowTemplate>
<Grid_MasterDetail_NestedGrid_DetailContent Customer="(TIAM.Entities.Transfers.Transfer)context.DataItem" KeyboardNavigationEnabled="true" />
<CompaniesNestedUserProductMapping CurrentCompany="(TIAM.Entities.ServiceProviders.Company)context.DataItem" KeyboardNavigationEnabled="true" />
</DetailRowTemplate>
<EditFormTemplate Context="EditFormContext">
@{
var transfer2 = (Transfer)EditFormContext.EditModel;
var transfer2 = (Company)EditFormContext.EditModel;
}
<DxFormLayout CssClass="w-100">
<DxFormLayoutItem Caption=@localizer.GetString(ResourceKeys.LastName) ColSpanMd="6" ColSpanLg="6" ColSpanSm="12">
@EditFormContext.GetEditor("Name")
</DxFormLayoutItem>
<DxFormLayoutItem Caption=@localizer.GetString(ResourceKeys.LastName) ColSpanMd="6" ColSpanLg="6" ColSpanSm="12">
@EditFormContext.GetEditor("CommissionPercent")
</DxFormLayoutItem>
</DxFormLayout>
@ -116,7 +140,7 @@
</DxGrid>
</div>
@ -135,9 +159,10 @@
//public Transfer myModel = new Transfer();
public Dictionary<Guid, string> ServiceProviderDataList { get; set; }
public List<Company> ServiceProviderDataList { get; set; }
bool PopupVisible { get; set; }
bool SendMailPopupVisible { get; set; }
bool SetOwnerPopupVisible { get; set; }
public List<string> IgnoreList =
[
"ReceiverEmailAddress",
@ -149,23 +174,8 @@
"ContextId",
];
public List<TransferStatusModel> Statuses { get; set; } =
[
new(Convert.ToInt16(TransferStatusType.OrderSubmitted), "Order submitted"),
new(Convert.ToInt16(TransferStatusType.OrderConfirmed), "Order confirmed"),
new(Convert.ToInt16(TransferStatusType.AssignedToDriver), "Assigned to driver"),
new(Convert.ToInt16(TransferStatusType.DriverConfirmed), "Driver confirmed"),
new(Convert.ToInt16(TransferStatusType.DriverEnRoute), "Driver enroute"),
new(Convert.ToInt16(TransferStatusType.PassengerPickup), "Passenger in car"),
new(Convert.ToInt16(TransferStatusType.Finished), "Finished"),
new(Convert.ToInt16(TransferStatusType.UserCanceled), "User cancelled"),
new(Convert.ToInt16(TransferStatusType.AdminDenied), "Admin cancelled")
];
private MessageWizardModel _messageWizardModel = new();
public List<AppointmentModel> AppointmentModels { get; set; }
private string UpdateOwnerIdText;
DateTime StartDate { get; set; } = DateTime.Today;
DxSchedulerDataStorage _dataStorage = new();
@ -178,13 +188,41 @@
_messageWizardModel.SenderEmailAddress = "";
_messageWizardModel.ReceiverEmailAddress = "";
_messageWizardModel.ReceiverFullName = "";
PopupVisible = true;
SendMailPopupVisible = true;
}
void SetOwnerPopup(Company item)
{
_logger.Info($"Setting owner of {item.OwnerId}, {item.Id}");
SetOwnerPopupVisible = true;
}
async Task<bool> SetOwner(Guid CompanyId)
{
//get user id from DB
var userModelDto = await userDataService.GetUserByEmailAsync(UpdateOwnerIdText);
//overwrite ServiceProvider ownerid
var target = await serviceProviderDataService.GetServiceProviderByIdAsync(CompanyId);
if (target == null)
{
return false;
}
else
{
target.OwnerId = userModelDto.Id;
var result = await serviceProviderDataService.UpdateServiceProviderAsync(target);
return result;
}
}
void CancelCreateClick()
{
PopupVisible = false;
SendMailPopupVisible = false;
}
void EulaPopupClosed()
{
@ -204,7 +242,7 @@
{
var messageModel = result as MessageWizardModel;
messageModel.ContextId = _messageWizardModel.ContextId;
//messageModel.SenderId = sessionService.User.UserId;
//messageModel.SenderId = sessionService.User.UserId;
string FormatEmailContent()
{
@ -212,7 +250,7 @@
<html>
<body>
<p>Dear {messageModel.SenderFullName},</p>
<p>{messageModel.Content}:</p>
<p>{messageModel.Content}:</p>
<p>Best regards,<br/>Tour I Am team</p>
</body>
</html>";
@ -227,43 +265,26 @@
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";
}
//TODO mark non active partners
}
void Grid_CustomizeEditModel(GridCustomizeEditModelEventArgs e)
{
if (!e.IsNew) return;
if (!e.IsNew)
{
}
else
{
var transferEditModel = (Company)e.EditModel; //TODO not valid cast
transferEditModel.Id = Guid.NewGuid();
transferEditModel.AffiliateId = Guid.NewGuid();
transferEditModel.Name = "Company name";
transferEditModel.OwnerId = Guid.Empty;
transferEditModel.ProfileId = Guid.NewGuid();
}
var transferEditModel = (Transfer)e.EditModel; //TODO not valid cast
transferEditModel.Id = Guid.NewGuid();
transferEditModel.ToAddress = "Where to?";
transferEditModel.FromAddress = "From where?";
transferEditModel.Appointment = DateTime.UtcNow.AddDays(3);
transferEditModel.PassengerCount = 1;
transferEditModel.FirstName = "John";
transferEditModel.LastName = "Doe";
transferEditModel.ContactPhone = "+00000000000";
transferEditModel.ContactEmail = "your@email.address";
}
async Task Grid_EditModelSaving(GridEditModelSavingEventArgs e)
@ -311,7 +332,8 @@
async Task UpdateDataAsync()
{
ServiceProviderDataList = await serviceProviderDataService.GetPropertiesByOwnerIdAsync(sessionService.User.UserId);
ServiceProviderDataList = await serviceProviderDataService.GetServiceProvidersAsync();
//StateHasChanged();
_logger.Info("orderData grid refreshed");
}
@ -319,19 +341,20 @@
{
_logger = new LoggerClient<ManageServiceProviders>(LogWriters.ToArray());
// devAdminSignalClient.SendRequestToServerAsync(SignalRTags.GetTransfersAsync, responseBytes =>
// {
// var transfers = responseBytes.MessagePackTo<string>(ContractlessStandardResolver.Options).JsonTo<List<Transfer>>();
await UpdateDataAsync();
// ServiceProviderDataList = transfers;
// StateHasChanged();
// }).Forget();
//var transfers = await devAdminSignalClient.GetAllAsync<List<Transfer>>(SignalRTags.GetTransfersAsync);
//InitializeDataSources(transfers ?? []);
base.OnInitialized();
//InitializeDataSources(await transferDataService.GetTransfersAsync());
base.OnInitializedAsync();
}
void ColumnChooserButton_Click()
{

View File

@ -94,6 +94,7 @@
<DxGridCommandColumn NewButtonVisible="false" Width="8%" FixedPosition="GridColumnFixedPosition.Left" />
<DxGridDataColumn FieldName="Id" ShowInColumnChooser="false" SortIndex="0" Visible="false" />
<DxGridDataColumn FieldName="OrderId" />
<DxGridDataColumn FieldName="PaymentId" />
<DxGridDataColumn FieldName="FromAddress" />
<DxGridDataColumn FieldName="ToAddress" />
<DxGridDataColumn FieldName="Appointment" DisplayFormat="f" />
@ -352,8 +353,8 @@
{
_logger.Info("orderData updated at id " + ((Transfer)e.EditModel).Id);
transfer = await devAdminSignalClient.UpdateAsync(SignalRTags.UpdateTransferAsync, (Transfer)e.EditModel);
//transfer = await transferDataService.UpdateTransferAsync((Transfer)e.EditModel);
//transfer = await devAdminSignalClient.UpdateAsync(SignalRTags.UpdateTransferAsync, (Transfer)e.EditModel);
transfer = await transferDataService.UpdateTransferAsync((Transfer)e.EditModel);
}
//get transfer from TransferData by Id

View File

@ -66,6 +66,11 @@
Transfers
</NavLink>
</div>
<div class="nav-item px-3">
<NavLink class="nav-link" href="user/companies">
Destinations
</NavLink>
</div>
<div class="nav-item px-3">
<NavLink class="nav-link" href="user/users">
Users

View File

@ -52,14 +52,24 @@ namespace TIAMWebApp.Client.Services
if (userModelDto != null)
{
Dictionary<Guid, string> userProperties = new Dictionary<Guid, string>();
//get user's properties
var hasProperties = await serviceProviderDataService.GetPropertiesByOwnerIdAsync(userModelDto.Id);
bool hasProperties = userModelDto.ServiceProviders.Count > 0 ? true : userModelDto.ServiceProviders.Count == 0 ? false : false;
if (hasProperties)
{
if (hasProperties != null)
_logger.Info($"{hasProperties.Count} properties found");
//var Properties = await serviceProviderDataService.GetPropertiesByOwnerIdAsync(userModelDto.Id);
var Properties = userModelDto.ServiceProviders;
_logger.Info($"{Properties.Count} properties found");
foreach ( var property in Properties )
{
userProperties.Add(property.Id, property.Name);
}
}
//create user session model
var user = new UserSessionModel(userModelDto.Id, UserType.User, userModelDto, hasProperties, 1);
var user = new UserSessionModel(userModelDto.Id, UserType.User, userModelDto, userProperties, 1);
return user;
}
else

View File

@ -79,11 +79,9 @@ namespace TIAMWebApp.Server.Controllers
[AllowAnonymous]
[HttpGet]
[Route(APIUrls.GetServiceProvidersRouteName)]
public Task<List<Company>> GetServiceProviders()
{
//var users = await _serviceProviderDal.Ctx.Users.ToListAsync();//.GetUsersAsync();
//return users;
return _adminDal.GetServiceProvidersAsync();
public async Task<string> GetServiceProviders()
{
return await _adminDal.GetServiceProvidersAsyncJson();
}
//18.

View File

@ -405,7 +405,7 @@ namespace TIAMWebApp.Server.Controllers
[Route(APIUrls.UpdateTransferRouteName)]
public async Task<Transfer> UpdateTransfer(Transfer transferToModify)
{
_logger.Info("UpdateTransfer called!");
_logger.Info($"UpdateTransfer called! + {Request.ReadFormAsync()}");
await _adminDal.UpdateTransferAsync(transferToModify);
return transferToModify;

View File

@ -81,6 +81,10 @@ public class DevAdminSignalRHub(AdminDal adminDal, ServiceProviderAPIController
await transferDataAPIController.UpdateTransfer(transfer);
await ResponseToCaller(messageTag, new SignalResponseMessage<string>(SignalResponseStatus.Success, transfer.ToJson()), requestId);
}
else if (messageTag == SignalRTags.GetCompaniesAsync)
{
await ResponseToCaller(messageTag, new SignalResponseMessage<string>(SignalResponseStatus.Success, await serviceProviderAPIController.GetServiceProviders()), requestId);
}
return;
}
catch (Exception ex)

View File

@ -123,9 +123,12 @@ namespace TIAMWebApp.Shared.Application.Services
}
//16.
public Task<List<Company>> GetServiceProvidersAsync()
public async Task<List<Company>> GetServiceProvidersAsync()
{
throw new NotImplementedException();
var companies = await _devAdminSignalClient.GetAllAsync<List<Company>>(SignalRTags.GetCompaniesAsync);
if (companies != null) _logger.DetailConditional($"companies: {string.Join("; ", companies.Count)}");
return companies;
}
//24.