email fixes, transfer send email user, isMobile fix

This commit is contained in:
Adam 2024-08-20 15:29:46 +02:00
parent a3a2106be9
commit 4b180ee28e
6 changed files with 136 additions and 78 deletions

View File

@ -35,6 +35,11 @@
<link href="TIAMMobileApp.styles.css" rel="stylesheet" /> <link href="TIAMMobileApp.styles.css" rel="stylesheet" />
<link href="_content/TIAMSharedUI/css/animate.css" rel="stylesheet" /> <link href="_content/TIAMSharedUI/css/animate.css" rel="stylesheet" />
<link href="_content/TIAMSharedUI/css/TourIAm.css" rel="stylesheet" /> <link href="_content/TIAMSharedUI/css/TourIAm.css" rel="stylesheet" />
<script>
function isDevice() {
return /android|webos|iphone|ipad|ipod|blackberry|iemobile|opera mini|mobile/i.test(navigator.userAgent);
}
</script>
</head> </head>
<body> <body>

View File

@ -22,7 +22,7 @@
<DataAnnotationsValidator /> <DataAnnotationsValidator />
<div class="card"> <div class="card">
<div class="card-header text-center py-3"> <div class="card-header text-center py-3">
<h4>Edit Your Details</h4> <h4>@TitleString</h4>
</div> </div>
<div class="card-body"> <div class="card-body">
@CreateEditFormFields() @CreateEditFormFields()
@ -54,6 +54,8 @@ else
[Parameter] public bool userAvailable { get; set; } [Parameter] public bool userAvailable { get; set; }
[Parameter] public UserModelDtoDetail userModelDtodetail { get; set; } [Parameter] public UserModelDtoDetail userModelDtodetail { get; set; }
[Parameter] public Product? CurrentProduct { get; set; } = null; [Parameter] public Product? CurrentProduct { get; set; } = null;
[Parameter] public string TitleString { get; set; } = "Edit your details";
[Parameter] public string ButtonTextString { get; set; } = "Submit";
string _formSubmitResult = ""; string _formSubmitResult = "";
private string _spinnerClass = ""; private string _spinnerClass = "";
@ -365,7 +367,7 @@ else
{ {
editor.OpenComponent<DxButton>(i++); editor.OpenComponent<DxButton>(i++);
editor.AddAttribute(i++, "SubmitFormOnClick", true); editor.AddAttribute(i++, "SubmitFormOnClick", true);
editor.AddAttribute(i++, "Text", "Save"); editor.AddAttribute(i++, "Text", ButtonTextString);
editor.CloseComponent(); editor.CloseComponent();
}))); })));

View File

@ -1,7 +1,13 @@
@page "/mytransfers/{transferId:guid}" @page "/mytransfers/{transferId:guid}"
@using AyCode.Core.Enums
@using AyCode.Core.Extensions @using AyCode.Core.Extensions
@using TIAM.Core.Consts
@using TIAM.Entities.Drivers
@using TIAM.Entities.Transfers @using TIAM.Entities.Transfers
@using TIAM.Models.Dtos.Users
@using TIAM.Resources @using TIAM.Resources
@using TIAM.Services
@using TIAMSharedUI.Pages.Components.EditComponents
@using TIAMSharedUI.Shared.Components.BaseComponents @using TIAMSharedUI.Shared.Components.BaseComponents
@using TIAMWebApp.Shared.Application.Interfaces @using TIAMWebApp.Shared.Application.Interfaces
@using AyCode.Services.Loggers @using AyCode.Services.Loggers
@ -36,22 +42,47 @@
CloseOnOutsideClick="false" CloseOnOutsideClick="false"
ShowCloseButton="false" ShowCloseButton="false"
HeaderText="MessageBox" HeaderText="MessageBox"
Closing="EulaPopupClosing" Closing="EmailPopupClosing"
Closed="EulaPopupClosed"> Closed="EmailPopupClosed"
SizeMode="SizeMode.Large">
<BodyContentTemplate> <BodyContentTemplate>
<InputWizard Data=@_messageWizardModel @{
OnSubmit="SubmitForm" if(showResultMessage)
IgnoreReflection=@IgnoreList {
TitleResourceString="NewMessage" <h5>@resultMessage</h5>
SubtitleResourceString="NewMessageSubtitle" }
SubmitButtonText="@localizer.GetString("ButtonSend")"></InputWizard> else
{
<DynamicEditForm Data=@_messageWizardModel
OnSubmit="SubmitForm"
TitleString="New message"
ButtonTextString="Send message"
isEditing="true"
IgnoreReflection=@IgnoreList></DynamicEditForm>
}
}
</BodyContentTemplate> </BodyContentTemplate>
<FooterContentTemplate Context="Context"> <FooterContentTemplate Context="Context">
<div class="popup-demo-events-footer"> @{
<!--DxCheckBox CssClass="popup-demo-events-checkbox" @bind-Checked="@EulaAccepted">I accept the terms of the EULA</!--DxCheckBox--> if(showResultMessage)
<!--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 class="popup-demo-events-footer">
</div> <!--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> </FooterContentTemplate>
</DxPopup> </DxPopup>
@ -85,7 +116,7 @@ else
<div class="card-header py-3 px-4"> <div class="card-header py-3 px-4">
<div class="d-flex justify-content-between align-items-center"> <div class="d-flex justify-content-between align-items-center">
<div> <div>
<span class="fw-bold text-body">Transfer identifier: @_transfer.Id</span> <span class="fw-bold text-body">Transfer identifier: #@_transfer.OrderId</span>
<p class="text-muted mb-0">@_transfer.ContactPhone</p> <p class="text-muted mb-0">@_transfer.ContactPhone</p>
</div> </div>
</div> </div>
@ -94,19 +125,35 @@ else
<div class="mb-4 pb-2"> <div class="mb-4 pb-2">
<div class="mb-3"> <div class="mb-3">
<h4 class="fw-bold">Passenger: @_transfer.FullName</h4> <h4 class="fw-bold">Passenger: @_transfer.FullName</h4>
<h4 class="fw-bold">E-mail address: @_transfer.ContactEmail</h4> <h5 class="fw-bold">E-mail address: @_transfer.ContactEmail</h5>
<h5 class="text-muted">From: @_transfer.FromAddress</h5> <p class="text-muted">From: @_transfer.FromAddress</p>
<h5 class="text-muted">To: @_transfer.ToAddress</h5> <p class="text-muted">To: @_transfer.ToAddress</p>
<hr />
<h5>@_transfer.Appointment.ToString("MMMM dd, yyyy")</h5> <h5>@_transfer.Appointment.ToString("MMMM dd, yyyy")</h5>
<h5 class="mb-3 text-muted">@_transfer.Appointment.ToString("hh:mm tt")</h5> <h5 class="mb-3 text-muted">@_transfer.Appointment.ToString("hh:mm tt")</h5>
<p>Passengers: @_transfer.PassengerCount</p> <p>Passengers: @_transfer.PassengerCount</p>
<p>Luggage: @_transfer.LuggageCount</p> <p>Luggage: @_transfer.LuggageCount</p>
<p>Flight number (optional): @_transfer.FlightNumber</p> <p>Flight number (optional): @_transfer.FlightNumber</p>
<hr /> <hr />
<h3>License plate: POX-382</h3> @{
<p class="text-muted">Car looks: Silver, Toyota, Prius</p> if(_drivers.Count < 1)
{
<p>No car information available yet</p>
}
else
{
foreach (var _car in _cars)
{
<h4>License plate: @_car.LicencePlate</h4>
<p class="text-muted">Car looks: @_car.Color, @_car.Manufacture, @_car.CarModel</p>
}
}
}
<hr /> <hr />
<p class="text-muted">Status on: <span class="text-body">@DateTime.Now.ToString("hh:mm tt"), @DateTime.Today.ToString("MMMM dd, yyyy")</span></p> <p class="text-muted">Status on: <span class="text-body">@DateTime.Now.ToString("hh:mm tt"), @DateTime.Today.ToString("MMMM dd, yyyy")</span></p>
<h5 class="text-muted">@Enum.GetName(typeof(TransferStatusType), _transfer.TransferStatusType)</h5>
</div> </div>
</div> </div>
<div class="d-flex justify-content-between align-items-center"> <div class="d-flex justify-content-between align-items-center">
@ -197,30 +244,12 @@ else
<DxFormLayoutItem ColSpanLg="12" CssClass="form-field" Caption="Flight Number"> <DxFormLayoutItem ColSpanLg="12" CssClass="form-field" Caption="Flight Number">
<DxTextBox @bind-Text="_transfer.FlightNumber" /> <DxTextBox @bind-Text="_transfer.FlightNumber" />
</DxFormLayoutItem> </DxFormLayoutItem>
<hr />
<h4>License plate: POX-382</h4>
<p class="text-muted">Car looks: Silver, Toyota, Prius</p>
<hr />
<p class="text-muted">Status on: <span class="text-body">@DateTime.Now.TimeOfDay, @DateTime.Today.Date</span></p>
</div> </div>
</div> </div>
<!--ul id="progressbar-1" class="mx-0 mt-0 mb-5 px-0 pt-0 pb-4">
<li class="step0 active" id="step1">
<span style="margin-left: 22px; margin-top: 12px;">PLACED</span>
</li>
<li class="step0 active text-center" id="step2"><span>WAITING FOR PICK UP</span></li>
<li class="step0 text-muted text-end" id="step3">
<span style="margin-right: 22px;">ARRIVED</span>
</li>
</ul-->
<div class="d-flex flex-row mb-4 pb-2">
<h4> EUR @_transfer.Price <span class="small text-muted"> via (COD) </span></h4>
</div>
<div class="d-flex flex-row mb-4 pb-2"> <div class="d-flex flex-row mb-4 pb-2">
<DxFormLayoutItem ColSpanLg="12" CssClass="form-field" Caption="Comment"> <DxFormLayoutItem ColSpanLg="12" CssClass="form-field" Caption="Comment">
<DxMemo @bind-Text="_transfer.Comment" /> <DxMemo @bind-Text="_transfer.Comment" />
@ -255,9 +284,15 @@ else
[Parameter] public Guid transferId { get; set; } = Guid.Empty; [Parameter] public Guid transferId { get; set; } = Guid.Empty;
private Transfer _transfer = new Transfer(); private Transfer _transfer = new Transfer();
private List<TransferToDriver> _drivers = new List<TransferToDriver>();
private List<Car> _cars = new List<Car>();
private bool _isLoading = true; private bool _isLoading = true;
private string _errorMessage = string.Empty; private string _errorMessage = string.Empty;
private bool showResultMessage = false;
private string resultMessage = string.Empty;
private List<UserModelDtoDetail> sysAdmins = [];
private LoggerClient<EditTransfers> _logger = null!; private LoggerClient<EditTransfers> _logger = null!;
private MessageWizardModel _messageWizardModel = new(); private MessageWizardModel _messageWizardModel = new();
@ -274,6 +309,7 @@ else
"SenderFullName", "SenderFullName",
"SenderId", "SenderId",
"ContextId", "ContextId",
"ContextType"
]; ];
private bool _editMode = false; private bool _editMode = false;
@ -281,29 +317,36 @@ else
void SendMail(Transfer item) void SendMail(Transfer item)
{ {
_logger.Info($"Sending mail to {item.ContactEmail}, {item.Id}"); _logger.Info($"Preparing mail to {item.ContactEmail}, {item.Id}");
_messageWizardModel.Subject = $"[#{item.OrderId}] New message from guest";
_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.ReceiverId = item.UserId;
_messageWizardModel.ContextId = item.Id; _messageWizardModel.ContextId = item.Id;
_messageWizardModel.SenderEmailAddress = "info@touriam.com"; _messageWizardModel.ContextType = MessageContextType.Transfer;
_messageWizardModel.ReceiverEmailAddress = item.ContactEmail;
_messageWizardModel.ReceiverFullName = item.FullName;
_popupVisible = true; _popupVisible = true;
} }
void CancelCreateClick() void CancelCreateClick()
{ {
showResultMessage = false;
resultMessage = "";
_popupVisible = false; _popupVisible = false;
} }
void EulaPopupClosed() void EmailPopupClosed()
{ {
//cancel clicked //cancel clicked
} }
void EulaPopupClosing(PopupClosingEventArgs args) void EmailPopupClosing(PopupClosingEventArgs args)
{ {
//myModel = new TransferWizardModel(); //myModel = new TransferWizardModel();
_messageWizardModel = new MessageWizardModel(); _messageWizardModel = new MessageWizardModel();
@ -311,28 +354,20 @@ else
public async Task SubmitForm(object result) public async Task SubmitForm(object result)
{ {
var messageModel = result as MessageWizardModel; var messageModel = (result as MessageWizardModel)!;
messageModel.ContextId = _messageWizardModel.ContextId;
//messageModel.SenderId = sessionService.User.UserId;
string FormatEmailContent()
{
return $@"
<html>
<body>
<p>Dear {messageModel.SenderFullName},</p>
<p>{messageModel.Content}:</p>
<p>Best regards,<br/>Tour I Am team</p>
</body>
</html>";
}
messageModel.Content = FormatEmailContent();
_logger.Info(messageModel.Content); _logger.Info(messageModel.Content);
var email = await wizardProcessor.ProcessWizardAsync<MessageWizardModel>(result.GetType(), messageModel); 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}"); _logger.Info($"Submitted nested form: {result.GetType().FullName}");
} }
private async Task Pay() private async Task Pay()
@ -374,6 +409,7 @@ else
_logger.Info($"parameter: {transferId.ToString()}"); _logger.Info($"parameter: {transferId.ToString()}");
await LoadTransfer(); await LoadTransfer();
sysAdmins = await _adminSignalRClient.GetByIdAsync<List<UserModelDtoDetail>>(SignalRTags.GetAllUserModelDtoDetails, TiamConstClient.SysAdmins[0]);
var test = _transfer.UserId; var test = _transfer.UserId;
if (!_transfer.UserId.IsNullOrEmpty()) if (!_transfer.UserId.IsNullOrEmpty())
{ {
@ -389,7 +425,7 @@ else
{ {
//I am logged in, and this is my transfer //I am logged in, and this is my transfer
await UserDataService.SetEmailConfirmed(_transfer.UserId); await UserDataService.SetEmailConfirmed(_transfer.UserId);
} }
else else
{ {
@ -402,7 +438,7 @@ else
} }
} }
} }
} }
} }
@ -427,6 +463,15 @@ else
if (response != null) if (response != null)
{ {
_transfer = response; _transfer = response;
_drivers = await _adminSignalRClient.GetByIdAsync<List<TransferToDriver>>(SignalRTags.GetTransferDriversByTransferId, _transfer.Id);
if(_drivers.Count > 0)
{
foreach (var _transferToDriver in _drivers)
{
_cars.Add(_transferToDriver.Car);
}
_logger.DebugConditional($"{_drivers.FirstOrDefault().Id}");
}
} }
else else

View File

@ -37,7 +37,14 @@ namespace TIAMWebApp.Client.Services
case nameof(MessageWizardModel): case nameof(MessageWizardModel):
EmailMessage emailMessage = ((MessageWizardModel)data).CopyToEmailMessage(); EmailMessage emailMessage = ((MessageWizardModel)data).CopyToEmailMessage();
var messageResult = await MessageSenderService.SendNoticeAsync(emailMessage, 1); var messageResult = await MessageSenderService.SendNoticeAsync(emailMessage, 1);
return messageResult as TModelType; if (messageResult == "OK")
{
return data as TModelType;
}
else
{
return null;
}
//case nameof(ServiceProvider): //case nameof(ServiceProvider):
// return null; // return null;

View File

@ -36,7 +36,11 @@
<link href="_content/TIAMSharedUI/css/TourIAm.css" rel="stylesheet" /> <link href="_content/TIAMSharedUI/css/TourIAm.css" rel="stylesheet" />
<link rel="icon" type="image/png" href="_content/TIAMSharedUI/favicon.png" /> <link rel="icon" type="image/png" href="_content/TIAMSharedUI/favicon.png" />
<link href="TIAMWebApp.Client.styles.css" rel="stylesheet" /> <link href="TIAMWebApp.Client.styles.css" rel="stylesheet" />
<script>
function isDevice() {
return /android|webos|iphone|ipad|ipod|blackberry|iemobile|opera mini|mobile/i.test(navigator.userAgent);
}
</script>
</head> </head>
<body> <body>
@ -53,11 +57,7 @@
<a href="" class="reload">Reload</a> <a href="" class="reload">Reload</a>
<a class="dismiss">🗙</a> <a class="dismiss">🗙</a>
</div> </div>
<script>
function isDevice() {
return /android|webos|iphone|ipad|ipod|blackberry|iemobile|opera mini|mobile/i.test(navigator.userAgent);
}
</script>
<script src="https://kit.fontawesome.com/12c469cb8f.js" crossorigin="anonymous"></script> <script src="https://kit.fontawesome.com/12c469cb8f.js" crossorigin="anonymous"></script>
<script src="_content/TIAMSharedUI/blazorAnimationInterop.js"></script> <script src="_content/TIAMSharedUI/blazorAnimationInterop.js"></script>
<script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.9.2/dist/umd/popper.min.js" integrity="sha384-IQsoLXl5PILFhosVNubq5LC7Qb9DXgDA9i+tQ8Zj3iwWAwPtgFTxbJ8NT4GN1R8p" crossorigin="anonymous"></script> <script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.9.2/dist/umd/popper.min.js" integrity="sha384-IQsoLXl5PILFhosVNubq5LC7Qb9DXgDA9i+tQ8Zj3iwWAwPtgFTxbJ8NT4GN1R8p" crossorigin="anonymous"></script>

View File

@ -51,7 +51,6 @@ namespace TIAMWebApp.Shared.Application.Services
var result = (string)(await response.Content.ReadAsStringAsync()); var result = (string)(await response.Content.ReadAsStringAsync());
return result; return result;
} }
else else