359 lines
13 KiB
Plaintext
359 lines
13 KiB
Plaintext
@using AyCode.Core.Enums
|
|
@using AyCode.Services.Loggers
|
|
@using BlazorAnimation
|
|
@using TIAM.Core.Consts
|
|
@using TIAM.Core.Enums
|
|
@using TIAM.Entities.Transfers
|
|
@using TIAM.Models.Dtos.Users
|
|
@using TIAM.Services
|
|
@using TIAMSharedUI.Pages.Components.EditComponents
|
|
@using TIAMSharedUI.Pages.User.SysAdmins
|
|
@using TIAMSharedUI.Shared.Components.Cards
|
|
@using TIAMWebApp.Shared.Application.Interfaces
|
|
@using TIAMWebApp.Shared.Application.Models.ClientSide.UI
|
|
@using TIAMWebApp.Shared.Application.Models.ClientSide.UI.WizardModels
|
|
@using TIAMWebApp.Shared.Application.Services
|
|
@using TIAMWebApp.Shared.Application.Utility
|
|
@inject IEnumerable<IAcLogWriterClientBase> LogWriters
|
|
@inject IServiceProviderDataService ServiceProviderDataService
|
|
@inject AdminSignalRClient AdminSignalRClient;
|
|
@inject IWizardProcessor wizardProcessor
|
|
|
|
<DxPopup CssClass="popup-demo-events"
|
|
@bind-Visible="@_popupVisible"
|
|
ShowFooter="true"
|
|
CloseOnEscape="true"
|
|
CloseOnOutsideClick="false"
|
|
ShowCloseButton="false"
|
|
HeaderText="MessageBox"
|
|
Closing="EmailPopupClosing"
|
|
Closed="EmailPopupClosed"
|
|
SizeMode="SizeMode.Large">
|
|
<BodyContentTemplate>
|
|
@{
|
|
if (showResultMessage)
|
|
{
|
|
<h5>@resultMessage</h5>
|
|
}
|
|
else
|
|
{
|
|
<DynamicEditForm Data=@_messageWizardModel
|
|
OnSubmit="SubmitForm"
|
|
TitleString="New message"
|
|
ButtonTextString="Send message"
|
|
isEditing="true"
|
|
IgnoreReflection=@IgnoreList></DynamicEditForm>
|
|
}
|
|
}
|
|
|
|
</BodyContentTemplate>
|
|
<FooterContentTemplate Context="Context">
|
|
@{
|
|
if (showResultMessage)
|
|
{
|
|
<div class="popup-demo-events-footer">
|
|
<!--DxCheckBox CssClass="popup-demo-events-checkbox" @bind-Checked="@EulaAccepted">I accept the terms of the EULA</!--DxCheckBox-->
|
|
<!--DxButton CssClass="popup-demo-events-button ms-2" RenderStyle="ButtonRenderStyle.Primary" Text="OK" Click="Context.CloseCallback" /-->
|
|
<DxButton CssClass="popup-demo-events-button ms-2" RenderStyle="ButtonRenderStyle.Secondary" Text="Ok" Click="CancelCreateClick" />
|
|
</div>
|
|
}
|
|
else
|
|
{
|
|
<div class="popup-demo-events-footer">
|
|
<!--DxCheckBox CssClass="popup-demo-events-checkbox" @bind-Checked="@EulaAccepted">I accept the terms of the EULA</!--DxCheckBox-->
|
|
<!--DxButton CssClass="popup-demo-events-button ms-2" RenderStyle="ButtonRenderStyle.Primary" Text="OK" Click="Context.CloseCallback" /-->
|
|
<DxButton CssClass="popup-demo-events-button ms-2" RenderStyle="ButtonRenderStyle.Secondary" Text="Cancel" Click="CancelCreateClick" />
|
|
</div>
|
|
}
|
|
}
|
|
|
|
</FooterContentTemplate>
|
|
</DxPopup>
|
|
|
|
<DxTabs CssClass="no-padding">
|
|
<DxTabPage Text="Details">
|
|
|
|
<div class="e-card cw-480 p-3">
|
|
<div class="e-main d-flex align-items-center">
|
|
<div class="flex-shrink-0">
|
|
<img class="e-photo" src="_content/TIAMSharedUI/images/defaultavatar_60.png" alt="" />
|
|
</div>
|
|
<div class="e-info flex-grow-1 ms-3">
|
|
<div class="e-name">@($"{Context.FullName}")</div>
|
|
<p class="e-title"><i class="fa-solid fa-at"></i> @Context.ContactEmail</p>
|
|
<p class="e-title"><i class="fa-solid fa-phone"></i> @Context.ContactPhone</p>
|
|
</div>
|
|
</div>
|
|
|
|
<hr class="hr" />
|
|
|
|
<div class="row">
|
|
<div class="col-12 col-md-6">
|
|
@RenderDetailsItem("fa-solid fa-location-dot", "From", Context.FromAddress)
|
|
</div>
|
|
<div class="col-12 col-md-6">
|
|
@RenderDetailsItem("fa-solid fa-location-dot", "To", Context.ToAddress)
|
|
</div>
|
|
<hr class="hr" />
|
|
<div class="col-12 col-md-4">
|
|
@RenderDetailsItem("fa-solid fa-users", "Passengers", Context.PassengerCount.ToString())
|
|
</div>
|
|
<div class="col-12 col-md-4">
|
|
@RenderDetailsItem("fa-solid fa-suitcase-rolling", "Luggage", Context.LuggageCount.ToString())
|
|
</div>
|
|
<div class="col-12 col-md-4">
|
|
@RenderDetailsItem("fa-solid fa-hashtag", "Flight number", Context.FlightNumber)
|
|
</div>
|
|
<hr class="hr" />
|
|
<div class="col-12">
|
|
@RenderDetailsItem("fa-solid fa-hashtag", "Comment", Context.Comment)
|
|
</div>
|
|
<div class="col-12 col-md-6">
|
|
@RenderDetailsItem("fa-solid fa-list-check", "Status", TransferStatusModel.GetStatusModel(Context.TransferStatusType).StatusName)
|
|
</div>
|
|
<div class="col-9 col-md-5">
|
|
<DxComboBox Data="@DriverStatuses"
|
|
@bind-Value="@CurrentStatusType"
|
|
NullText="Select new status"
|
|
CssClass="form-field"
|
|
ValueFieldName="@nameof(TransferStatusModel.StatusValue)"
|
|
TextFieldName="@nameof(TransferStatusModel.StatusName)" />
|
|
|
|
</div>
|
|
<div class="col-3 col-md-1">
|
|
<DxButton CssClass="btn btn-primary" Click="SaveStatus" Enabled="@isSaveActive"> Save</DxButton>
|
|
</div>
|
|
@if (!Context.Paid)
|
|
{
|
|
<hr class="hr" />
|
|
<div class="col-3 col-md-1">
|
|
<DxButton CssClass="btn btn-primary" Click="PaidByCash">Paid in car</DxButton>
|
|
</div>
|
|
<div class="col-9 col-md-1">
|
|
<p>To be paid:</p>
|
|
<h5 class="text-danger"> €@Context.Price</h5>
|
|
</div>
|
|
}
|
|
|
|
<p>@msg</p>
|
|
</div>
|
|
</div>
|
|
</DxTabPage>
|
|
<DxTabPage Text="Messages">
|
|
<div style="margin-top: 10px; margin-bottom: 10px;">
|
|
<DxButton Click="() => SendMail(Context)" Text="Send a message" RenderStyle="ButtonRenderStyle.Primary" />
|
|
</div>
|
|
<MessageDetailGridComponent ContextId="Context.Id" IsSenderEmailVisible="false" IsMessageTextVisible="false"></MessageDetailGridComponent>
|
|
</DxTabPage>
|
|
|
|
</DxTabs>
|
|
|
|
|
|
@code {
|
|
[Parameter] public Transfer Context { get; set; }
|
|
|
|
[Parameter] public EventCallback<string> DataChanged { get; set; }
|
|
|
|
[Parameter] public string Role { get; set; }
|
|
|
|
private LoggerClient<TransferCardComponent> _logger = null!;
|
|
|
|
//Email
|
|
private bool showResultMessage = false;
|
|
private string resultMessage = string.Empty;
|
|
private List<UserModelDtoDetail> sysAdmins = [];
|
|
|
|
|
|
private MessageWizardModel _messageWizardModel = new();
|
|
|
|
private bool displayCard = true;
|
|
|
|
private bool _popupVisible;
|
|
|
|
public List<string> IgnoreList =
|
|
[
|
|
"ReceiverEmailAddress",
|
|
"ReceiverFullName",
|
|
"ReceiverId",
|
|
"SenderEmailAddress",
|
|
"SenderFullName",
|
|
"SenderId",
|
|
"ContextId",
|
|
"ContextType"
|
|
];
|
|
|
|
|
|
|
|
private static readonly IEnumerable<TransferStatusModel> DriverStatuses = TransferStatusModel.AllStatuses.Values.Where(x => x.StatusValue is TransferStatusType.DriverConfirmed or
|
|
TransferStatusType.DriverEnRoute or TransferStatusType.PassengerPickup or TransferStatusType.Finished or TransferStatusType.UserCanceled);
|
|
|
|
// private static readonly IEnumerable<TransferStatusModel> Statuses = new[]
|
|
// {
|
|
// new TransferStatusModel(TransferStatusType.DriverConfirmed, "Driver confirmed"),
|
|
// new TransferStatusModel(TransferStatusType.DriverEnRoute, "Driver enroute"),
|
|
// new TransferStatusModel(TransferStatusType.PassengerPickup, "Passenger in car"),
|
|
// new TransferStatusModel(TransferStatusType.Finished, "Finished"),
|
|
// new TransferStatusModel(TransferStatusType.UserCanceled, "User cancelled"),
|
|
// };
|
|
|
|
|
|
private TransferStatusModel _currentStatusType;
|
|
public TransferStatusModel CurrentStatusType
|
|
{
|
|
get => _currentStatusType;
|
|
set
|
|
{
|
|
if (_currentStatusType != value)
|
|
{
|
|
_currentStatusType = value;
|
|
OnSelectedStatusChanged(value);
|
|
}
|
|
}
|
|
}
|
|
|
|
string msg;
|
|
private bool isSaveActive = false;
|
|
|
|
void OnSelectedStatusChanged(TransferStatusModel status)
|
|
{
|
|
|
|
if (status == null)
|
|
{
|
|
isSaveActive = false;
|
|
msg = "Status is null";
|
|
}
|
|
else
|
|
{
|
|
isSaveActive = true;
|
|
Context.TransferStatusType = (TransferStatusType)(Convert.ToInt16(status.StatusValue));
|
|
msg = $"Status changed: {status.StatusName} - {Context.TransferStatusType} !";
|
|
}
|
|
|
|
}
|
|
|
|
protected async Task SaveStatus()
|
|
{
|
|
|
|
isSaveActive = false;
|
|
var result = await AdminSignalRClient.PostDataAsync<Transfer>(SignalRTags.UpdateTransfer, Context);
|
|
if (result != null)
|
|
{
|
|
if (TransferStatusModel.GetStatusModel(result.TransferStatusType) == CurrentStatusType)
|
|
{
|
|
msg = $"Stataus saved";
|
|
StateHasChanged();
|
|
}
|
|
else
|
|
{
|
|
msg = "Some error occured, please try again later";
|
|
}
|
|
}
|
|
else
|
|
{
|
|
msg = "Some error occured during saving, please try again later";
|
|
}
|
|
await DataChanged.InvokeAsync(msg);
|
|
}
|
|
|
|
protected async Task PaidByCash()
|
|
{
|
|
Context.Paid = true;
|
|
var result = await AdminSignalRClient.PostDataAsync<Transfer>(SignalRTags.UpdateTransfer, Context);
|
|
if (result != null)
|
|
{
|
|
msg = $"Payment status saved";
|
|
StateHasChanged();
|
|
}
|
|
else
|
|
{
|
|
msg = "Some error occured during saving, please try again later";
|
|
}
|
|
await DataChanged.InvokeAsync(msg);
|
|
}
|
|
|
|
protected override async Task OnInitializedAsync()
|
|
{
|
|
_logger = new LoggerClient<TransferCardComponent>(LogWriters.ToArray());
|
|
sysAdmins = (await AdminSignalRClient.GetByIdAsync<List<UserModelDtoDetail>>(SignalRTags.GetAllUserModelDtoDetails, TiamConstClient.SysAdmins[0]))!;
|
|
|
|
await base.OnInitializedAsync();
|
|
}
|
|
|
|
protected override Task OnParametersSetAsync()
|
|
{
|
|
CurrentStatusType = TransferStatusModel.GetStatusModel(Context.TransferStatusType);
|
|
|
|
return base.OnParametersSetAsync();
|
|
}
|
|
|
|
RenderFragment RenderDetailsItem(string iconCssClass, string caption, string value)
|
|
{
|
|
return @<div class="d-flex m-1 align-items-center">
|
|
<div class="icon-container flex-shrink-0">
|
|
<span class="dxbl-image m-1 @iconCssClass"></span>
|
|
</div>
|
|
<div class="text-container m-1 flex-grow-1 ms-2">
|
|
<label>@caption:</label>
|
|
<div>@value</div>
|
|
</div>
|
|
</div>;
|
|
}
|
|
|
|
|
|
void SendMail(Transfer item)
|
|
{
|
|
_logger.Info($"Preparing mail to {item.ContactEmail}, {item.Id}");
|
|
_messageWizardModel.Subject = $"[#{item.OrderId}] New message from {Role}";
|
|
_messageWizardModel.ReceiverId = TiamConstClient.SysAccounts["SystemEmailSender"];
|
|
//get first sysadmin
|
|
|
|
_messageWizardModel.ReceiverEmailAddress = sysAdmins[0].UserDto.EmailAddress;
|
|
_messageWizardModel.ReceiverFullName = "Admin user";
|
|
|
|
_messageWizardModel.SenderId = item.UserId;
|
|
_messageWizardModel.SenderEmailAddress = TiamConstClient.SystemEmailAddress;
|
|
|
|
_messageWizardModel.ContextId = item.Id;
|
|
_messageWizardModel.ContextType = MessageContextType.Transfer;
|
|
_popupVisible = true;
|
|
}
|
|
|
|
void CancelCreateClick()
|
|
{
|
|
showResultMessage = false;
|
|
resultMessage = "";
|
|
_popupVisible = false;
|
|
}
|
|
|
|
void EmailPopupClosed()
|
|
{
|
|
//cancel clicked
|
|
|
|
}
|
|
|
|
void EmailPopupClosing(PopupClosingEventArgs args)
|
|
{
|
|
//myModel = new TransferWizardModel();
|
|
_messageWizardModel = new MessageWizardModel();
|
|
}
|
|
|
|
public async Task SubmitForm(object result)
|
|
{
|
|
var messageModel = (result as MessageWizardModel)!;
|
|
_logger.Info(messageModel.Content);
|
|
var email = await wizardProcessor.ProcessWizardAsync<MessageWizardModel>(result.GetType(), messageModel);
|
|
if (email != null)
|
|
{
|
|
resultMessage = "Message sent";
|
|
}
|
|
else
|
|
{
|
|
resultMessage = $"Something went wrong, please try again later, or contact us by regular email at {TiamConstClient.SystemEmailAddress}!";
|
|
}
|
|
showResultMessage = true;
|
|
_logger.Info($"Submitted nested form: {result.GetType().FullName}");
|
|
|
|
}
|
|
|
|
}
|