Compare commits

...

3 Commits

Author SHA1 Message Date
Adam 9418e52eed navbar fix, transfer changes, emailmessage context type 2024-08-18 15:58:03 +02:00
Adam fd002486cb merge 2024-08-17 09:44:21 +02:00
Adam 7e9bb7939a address search fix 2024-08-17 09:43:03 +02:00
13 changed files with 276 additions and 128 deletions

View File

@ -1,27 +1,29 @@
@using AyCode.Blazor.Components.Components
@using AyCode.Core.Helpers
@using TIAMWebApp.Shared.Application.Services
@inject GooglePlacesService GooglePlacesService
<h4>
@NullText
</h4>
<DxTextBox @bind-Text="Address"
@oninput="OnInputChanged"
BindValueMode="BindValueMode.OnDelayedInput"
InputDelay="500">
</DxTextBox>
@if (Predictions.Count > 0)
{
<DxComboBox Data="@Predictions"
ValueFieldName="Description"
TextFieldName="Description"
@bind-Value="SelectedPrediction">
</DxComboBox>
}
<div class="p-3">
<DxTextBox @bind-Text="Address"
CssClass="@CssClass"
@oninput="OnInputChanged"
BindValueMode="BindValueMode.OnDelayedInput"
InputDelay="700">
</DxTextBox>
@if (Predictions.Count > 0)
{
<DxComboBox Data="@Predictions"
ValueFieldName="Description"
TextFieldName="Description"
@bind-Value="SelectedPrediction">
</DxComboBox>
}
else
{
<p>No address found</p>
}
</div>
@code {
@ -29,9 +31,25 @@
[Parameter] public EventCallback<string> AddressChanged { get; set; }
[Parameter] public string CssClass { get; set; }
private string Address { get; set; }
private List<PredictionItem> Predictions { get; set; } = new();
private PredictionItem SelectedPrediction { get; set; }
private PredictionItem selectedPrediction { get; set; }
public PredictionItem SelectedPrediction
{
get => selectedPrediction;
set
{
SetNewDestination(value.Description).Forget();
selectedPrediction = value;
}
}
public async Task SetNewDestination(string address)
{
await AddressChanged.InvokeAsync(address);
}
private async Task OnInputChanged(ChangeEventArgs e)
{
@ -48,7 +66,7 @@
}
}
private class PredictionItem
public class PredictionItem
{
public string Description { get; set; }
}

View File

@ -4,10 +4,14 @@
@using AyCode.Services.Loggers
@using System.Reflection
@using AyCode.Blazor.Components.Components
@using TIAM.Entities.Products
@using TIAM.Entities.Transfers
@using TIAM.Models.Dtos.Users
@using TIAMSharedUI.Shared
@using TIAMWebApp.Shared.Application.Interfaces
@using TIAMWebApp.Shared.Application.Utility
@inject IEnumerable<IAcLogWriterClientBase> LogWriters
@inject ISessionService _sessionService
@if (isEditing)
{
@ -47,6 +51,9 @@ else
[Parameter] public List<string> IgnoreReflection { get; set; }
[Parameter] public EventCallback<object> OnSubmit { get; set; }
[Parameter] public bool isEditing { get; set; } = false;
[Parameter] public bool userAvailable { get; set; }
[Parameter] public UserModelDtoDetail userModelDtodetail { get; set; }
[Parameter] public Product? CurrentProduct { get; set; } = null;
string _formSubmitResult = "";
private string _spinnerClass = "";
@ -62,6 +69,12 @@ else
base.OnInitialized();
}
protected override void OnParametersSet()
{
StateHasChanged();
base.OnParametersSet();
}
// void HandleValidSubmit()
// {
// FormSubmitResult = "You have been registered successfully.";
@ -238,9 +251,14 @@ else
}
else if (property.PropertyType == typeof(string) && string.Compare(attrList.CustomDataType, "TransferDestination", true) == 0)
{
editor.OpenComponent<ComboboxItemSelector>(j);
editor.AddAttribute(j++, "TextValue", property.GetValue(Data));
editor.AddAttribute(j++, "CssClass", "form-field");
if (CurrentProduct != null)
{
editor.AddAttribute(j++, "ProductId", CurrentProduct.Id);
}
// editor.AddAttribute(j++, "ValExpression", lambda);
editor.AddAttribute(j++, "OnSliderChanged", EventCallback.Factory.Create<string>(this, result =>
{

View File

@ -24,8 +24,8 @@
<AuthComponent />
<HeroSlider SliderItems="@sliders" PBottom="50px" Height="50vh"></HeroSlider>
<div class="container" style="position: relative; z-index: 2;">
<HeroSlider SliderItems="@sliders" PBottom="50px" Height="30vh"></HeroSlider>
@* <div class="container-fluid" style="position: relative; z-index: 2;">
<div class="row d-flex justify-content-center">
<div class="col-12 col-lg-6">
<div class="card bg-white p-3">
@ -35,16 +35,14 @@
SubmitButtonText="ButtonSend"
TitleResourceString="TransferTitle"
SubtitleResourceString="TransferSubtitle"></InputWizard>
</div>
</div>
</div>
</div>
</div> *@
<div class="container" style="align-content: center;">
<div class="container-fluid" style="align-content: center;">

View File

@ -1,4 +1,4 @@
@page "/transfer2"
@page "/transfer2/{transferId:guid}"
<PageTitle>Transferdetails</PageTitle>
@inject NavigationManager navManager
@ -67,6 +67,8 @@
@code {
[Parameter] public Guid? transferId { get; set; }
public void next() => navManager.NavigateTo("/transfer");
public void previous() => navManager.NavigateTo("/transfer3");
}

View File

@ -1,5 +1,6 @@
@page "/transfer"
@using TIAMSharedUI.Pages.Components
@using TIAMSharedUI.Pages.Components.EditComponents
@using TIAMSharedUI.Shared
@using TIAMWebApp.Shared.Application.Interfaces
@using TIAMWebApp.Shared.Application.Models.ClientSide.UI
@ -10,18 +11,18 @@
@inject IWizardProcessor WizardProcessor
<PageTitle>Transfer</PageTitle>
<HeroSlider SliderItems="sliders"></HeroSlider>
<div class="container" style="position: relative; z-index: 2;">
<HeroSlider SliderItems="sliders" Height="30vh"></HeroSlider>
<div class="container-fluid" style="position: relative; z-index: 2;">
<div class="row d-flex justify-content-center">
<div class="col-12 col-lg-6">
<div class="card bg-white p-3">
<InputWizard Data=@myModel
@* <InputWizard Data=@myModel
OnSubmit="SubmitForm"
IgnoreReflection="@TransferIgnorList"
SubmitButtonText="ButtonSend"
TitleResourceString="TransferTitle"
SubtitleResourceString="TransferSubtitle"></InputWizard>
SubtitleResourceString="TransferSubtitle"></InputWizard> *@
<DynamicEditForm Data="myModel" isEditing="true" IgnoreReflection="TransferIgnorList" OnSubmit="SubmitForm"></DynamicEditForm>
</div>
</div>

View File

@ -17,7 +17,6 @@
@inherits BasePageComponent
@layout AdminLayout
@inject IPopulationStructureDataProvider DataProvider
@inject ISessionService SessionService
@inject IUserDataService UserDataService
@inject IEnumerable<IAcLogWriterClientBase> LogWriters
@inject AdminSignalRClient _adminSignalRClient
@ -50,7 +49,7 @@
<div class="row py-3">
<DynamicEditForm Data="Data" isEditing="true" IgnoreReflection="TransferIgnorList" OnSubmit="SubmitForm"></DynamicEditForm>
<DynamicEditForm Data="Data" CurrentProduct="@SelectedHotel" isEditing="true" IgnoreReflection="TransferIgnorList" OnSubmit="SubmitForm"></DynamicEditForm>
</div>
<div class="row py-3">
@ -68,7 +67,20 @@
private LoggerClient<CreateAndManageTransfer> _logger;
private TransferWizardModel Data = new();
private List<Product> Hotels = new List<Product>();
private Product SelectedHotel;
private Product selectedHotel { get; set; }
public Product SelectedHotel
{
get
{
return selectedHotel;
}
set
{
selectedHotel = value;
StateHasChanged();
}
}
public List<string> TransferIgnorList = new List<string>
{
nameof(TransferWizardModel.Id),
@ -82,17 +94,25 @@
nameof(TransferWizardModel.Price)
};
private bool isReloadVisible = false;
private bool SelectedHotelInitialized = false;
protected override void OnInitialized()
{
_logger = new LoggerClient<CreateAndManageTransfer>(LogWriters.ToArray());
if (SessionService.User.UserModelDto.Products.Count() > 0)
if (_sessionService.User != null)
{
if (SessionService.User.UserModelDto.Products.Any(x => x.ProductType == TIAM.Core.Enums.ProductType.Hotel))
if (_sessionService.User.UserModelDto.Products.Count() > 0)
{
Hotels = SessionService.GetHotels();
SelectedHotel = Hotels[0];
if (_sessionService.User.UserModelDto.Products.Any(x => x.ProductType == TIAM.Core.Enums.ProductType.Hotel))
{
Hotels = _sessionService.GetHotels();
if (!SelectedHotelInitialized)
{
SelectedHotel = Hotels[0];
SelectedHotelInitialized = true;
}
}
}
}
@ -157,6 +177,7 @@
{
Data = new TransferWizardModel();
isReloadVisible = false;
StateHasChanged();
}

View File

@ -1,10 +1,13 @@
@using System.Linq.Expressions
@using AyCode.Core.Extensions
@using AyCode.Core.Loggers
@using AyCode.Services.Loggers
@using TIAM.Core.Loggers
@using TIAM.Entities.Products
@using TIAM.Entities.Transfers
@using TIAM.Services
@using TIAMSharedUI.Pages
@using TIAMSharedUI.Pages.Components
@using TIAMSharedUI.Pages.User.SysAdmins
@using TIAMWebApp.Shared.Application.Interfaces
@using TIAMWebApp.Shared.Application.Services
@ -12,19 +15,46 @@
@inject IEnumerable<IAcLogWriterClientBase> LogWriters
@inject AdminSignalRClient _adminSignalRClient
@inject ITransferDataService TransferDataService
@using TIAMWebApp.Shared.Application.Services
@inject GooglePlacesService GooglePlacesService
<DxTabs CssClass="bg-light">
<DxTabPage Text="Preset addresses">
<DxComboBox Data="@Data"
CssClass="p-3"
InputCssClass="@CssClass"
@bind-Value="@SelectedDestination"
SearchMode="@ListSearchMode.AutoSearch"
SearchFilterCondition="@ListSearchFilterCondition.Contains"
ListRenderMode="ListRenderMode.Virtual"
TextFieldName="@nameof(TransferDestination.Name)"
InputId="cbOverview" />
</DxTabPage>
<DxTabPage Text="Address locator">
<AddressSearchAndSelectComponent AddressChanged="@OnSelectedAddressChanged" CssClass="@CssClass">
</AddressSearchAndSelectComponent>
@* <DxFormLayoutItem Caption="Type a custom address">
<DxTextBox @bind-Text="Address" />
</DxFormLayoutItem>
<DxFormLayoutItem>
<DxButton Context="ButtonContext" Click="ValidateAddress">Validate Address</DxButton>
</DxFormLayoutItem>
<DxFormLayoutItem>
<p>@ValidationMessage</p>
</DxFormLayoutItem> *@
</DxTabPage>
</DxTabs>
<p>Selected address: @Address</p>
<label for="cbOverview" class="demo-text cw-480 mb-1">
Select a destination
</label>
<DxComboBox Data="@Data"
InputCssClass="@CssClass"
@bind-Value="@SelectedDestination"
SearchMode="@ListSearchMode.AutoSearch"
SearchFilterCondition="@ListSearchFilterCondition.Contains"
ListRenderMode="ListRenderMode.Virtual"
TextFieldName="@nameof(TransferDestination.Name)"
CssClass="cw-480"
InputId="cbOverview" />
@* <p class="demo-text cw-480 mt-3">
@GetSelectedItemDescription()
@ -46,6 +76,8 @@
[Parameter] public string CssClass { get; set; } = "";
[Parameter] public Guid? ProductId { get; set; }
public List<TransferDestination> Destinations = new List<TransferDestination>();
public DxTextBox TextField;
@ -56,6 +88,9 @@
IEnumerable<TransferDestination> Data { get; set; }
private string Address { get; set; }
private string ValidationMessage { get; set; }
private TransferDestination _selectedDestination;
public TransferDestination SelectedDestination
{
@ -65,14 +100,14 @@
if (_selectedDestination != value)
{
_selectedDestination = value;
SetNewDestination(value);
SetNewDestination(value.AddressString!);
}
}
}
protected override void OnParametersSet()
{
// StateHasChanged();
}
protected override async Task OnInitializedAsync()
@ -80,8 +115,29 @@
_logger = new LoggerClient<ComboboxItemSelector>(LogWriters.ToArray());
Data = await _adminSignalRClient.GetAllAsync<List<TransferDestination>>(SignalRTags.GetAllTransferDestinations);
Guid? productAddressId = Guid.Empty;
if (!ProductId.IsNullOrEmpty())
{
var currentProduct = await _adminSignalRClient.GetByIdAsync<Product>(SignalRTags.GetProductById, ProductId);
if (currentProduct != null)
{
if (!currentProduct.Profile.AddressId.IsNullOrEmpty())
{
productAddressId = currentProduct.Profile.AddressId;
}
}
}
_logger.Debug($"List length: {Data.Count().ToString()}");
SelectedDestination = Data.FirstOrDefault();
if (Data.Any(x => x.AddressId == (Guid)productAddressId))
{
SelectedDestination = Data.Where(x => x.AddressId == (Guid)productAddressId).FirstOrDefault()!;
}
else
{
SelectedDestination = Data.FirstOrDefault();
}
}
// RenderFragment GetSelectedItemDescription()
// {
@ -100,9 +156,16 @@
// }
public void SetNewDestination(TransferDestination destination)
public void OnSelectedAddressChanged(string address)
{
OnSliderChanged.InvokeAsync(destination.AddressString);
Address = address;
OnSliderChanged.InvokeAsync(address);
}
public void SetNewDestination(string address)
{
Address = address;
OnSliderChanged.InvokeAsync(address);
}
// RenderFragment GetFieldDescription(string fieldName, object value)

View File

@ -12,10 +12,10 @@
<img height="25" src="_content/TIAMSharedUI/images/logo_wide.png" alt="TourIam Logo" title="TourIAm Logo" />
</NavLink>
<button @onclick="ToggleNavMenu" class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="@expandNavMenu" aria-label="Toggle navigation">
<button @onclick="ToggleNavMenu" class="navbar-toggler">
<img src="_content/TIAMSharedUI/images/navbar-toggler.png" width="40" />
</button>
<div class="collapse navbar-collapse" id="navbarSupportedContent">
<div class="@NavMenuCssClass navbar-collapse" id="navbarSupportedContent">
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<li class="nav-item">
<!--NavLink class="nav-link" href="" Match="NavLinkMatch.All"-->
@ -131,7 +131,7 @@
}
<li class="nav-item">
<div class="btn-nav">
<NavLink class="btn btn-primary btn-small navbar-btn" href="#" @onclick="SignOut">
<NavLink class="btn btn-primary btn-small navbar-btn" href="#" @onclick="SignOut" data-bs-target=".navbar-collapse.show">
@localizer.GetString("NavMenu.SignOut")
</NavLink>
</div>
@ -149,7 +149,7 @@
</div>
</nav>
<script>
@* <script>
function toggleBootstrapNavMenu(isExpanded) {
var navMenu = document.getElementById('navbarNav');
if (navMenu) {
@ -165,7 +165,7 @@
}
}
}
</script>
</script> *@
@code {

View File

@ -58,7 +58,8 @@ namespace TIAMSharedUI.Shared.Components
private bool enableApi = true;
private bool enableChat = true;
private bool expandNavMenu = true;
private string? NavMenuCssClass => collapseNavMenu ? "collapse" : "show";
private bool collapseNavMenu = true;
private bool myUser = false;
private bool hasProperty = false;
@ -71,11 +72,6 @@ namespace TIAMSharedUI.Shared.Components
}
private async Task ExpandNavMenu()
{
await JsRuntime.InvokeVoidAsync("toggleBootstrapNavMenu");
}
private void RefreshMe()
{
_logger.Debug($"Navbar refresh called! {DateTime.Now} ");
@ -87,9 +83,9 @@ namespace TIAMSharedUI.Shared.Components
private void ToggleNavMenu()
{
expandNavMenu = !expandNavMenu;
JsRuntime.InvokeVoidAsync("toggleBootstrapNavMenu", expandNavMenu);
collapseNavMenu = !collapseNavMenu;
_logger.Debug($"{NavMenuCssClass}");
//JsRuntime.InvokeVoidAsync("toggleBootstrapNavMenu", expandNavMenu);
}
private async Task SignOut()
@ -127,10 +123,10 @@ namespace TIAMSharedUI.Shared.Components
private void OnLocationChanged(object sender, LocationChangedEventArgs e)
{
// Collapse the navbar on navigation
expandNavMenu = false;
JsRuntime.InvokeVoidAsync("toggleBootstrapNavMenu", false);
collapseNavMenu=true;
_logger.Debug($"{NavMenuCssClass}");
//JsRuntime.InvokeVoidAsync("toggleBootstrapNavMenu", false);
StateHasChanged();
}
public void Dispose()

View File

@ -1,8 +1,8 @@
@using BlazorAnimation
@using TIAMWebApp.Shared.Application.Models.ClientSide.UI
<header style="padding-bottom: @PBottom;">
<Animation Effect="@Effect.FadeIn" Speed="@Speed.Fast" Delay="@TimeSpan.FromMilliseconds(250)">
<div id="owl-demo" class="owl-carousel owl-theme" style="position:absolute; z-index: 1;">
<div id="owl-demo" class="owl-carousel owl-theme" style="/* position:absolute; */ z-index: 1;">
@{
foreach (var slider in SliderItems)
@ -15,7 +15,6 @@
</div>
</Animation>
</header>

View File

@ -213,7 +213,7 @@ select {
/*box-shadow: 0 8px 32px 0 rgba( 31, 38, 135, 0.37 );
backdrop-filter: blur( 6px );*/
-webkit-backdrop-filter: blur( 6px );
border-radius: 10px;
/*border-radius: 10px;*/
}
.dxbl-modal > .dxbl-modal-root > .dxbl-popup > .dxbl-modal-content {
@ -530,7 +530,7 @@ select:focus-visible {
}
#owl-demo .item {
height: 50vh;
height: 30vh;
overflow-y: hidden;
flex-wrap: wrap;
vertical-align: middle;

View File

@ -31,6 +31,7 @@ using System;
using TIAM.Database.DbSets.Transfers;
using TIAM.Services.Interfaces;
using TIAM.Entities.Products;
using AyCode.Core.Enums;
namespace TIAMWebApp.Server.Controllers
{
@ -536,28 +537,39 @@ namespace TIAMWebApp.Server.Controllers
message.Message.Id = Guid.NewGuid();
message.Message.Subject = "[Tour I Am] New transfer in Budapest";
message.Message.ContextId = transfer.Id;
message.Message.ContextType = MessageContextType.Transfer;
message.Message.SenderId = Guid.Empty;
message.Message.Recipients.Add(new EmailRecipient(Guid.NewGuid(), transfer.UserId, Guid.NewGuid(), transfer.ContactEmail));
string FormatEmailContent()
{
return $@"
<html>
<body>
<p>Dear {transfer.FullName},</p>
<p>We are pleased to inform you that a transfer order has been placed. Below are the details of the transfer:</p>
<p>{transfer.FromAddress} - {transfer.ToAddress}</p>
<p>{transfer.Appointment}</p>
<p>{transfer.FullName}</p>
<p>{transfer.PassengerCount}</p>
<p>Please confirm the transfer by clicking on the following link:</p>
<p><a href=""{Setting.BaseUrl}/mytransfers/{transfer.Id}"">Confirm Transfer</a></p>
<p>If you did not request this transfer, please disregard this email.</p>
<p>Thank you,<br/>Tour I Am team</p>
</body>
</html>";
}
message.Message.Text = FormatEmailContent();
//string FormatEmailContent()
//{
// return $@"
// <html>
// <body>
// <p>Dear {transfer.FullName},</p>
// <p>We are pleased to inform you that a transfer order has been placed. Below are the details of the transfer:</p>
// <p>{transfer.FromAddress} - {transfer.ToAddress}</p>
// <p>{transfer.Appointment}</p>
// <p>{transfer.FullName}</p>
// <p>{transfer.PassengerCount}</p>
// <p>Please confirm the transfer by clicking on the following link:</p>
// <p><a href=""{Setting.BaseUrl}/mytransfers/{transfer.Id}"">Confirm Transfer</a></p>
// <p>If you did not request this transfer, please disregard this email.</p>
// <p>Thank you,<br/>Tour I Am team</p>
// </body>
// </html>";
//}
//message.Message.Text = FormatEmailContent();
message.Message.Text = EmailTemplateHelper.GenerateNewTransferEmail(
transfer.FullName,
transfer.FromAddress,
transfer.ToAddress,
transfer.Appointment.ToString(),
transfer.FullName,
transfer.PassengerCount.ToString(),
transfer.LuggageCount.ToString(),
Setting.BaseUrl,
transfer.Id.ToString());
_logger.Info(message.Message.Text);
//message.Message.Text = $"Dear {transfer.FullName}! /n We have received an order from you, please confirm the details here: https://www.touriam.com/mytransfer?{transfer.Id}";
var messageElement = message.Message;
@ -625,28 +637,41 @@ namespace TIAMWebApp.Server.Controllers
message.MessageType = AyCode.Models.Enums.MessageTypesEnum.email;
message.Message.Subject = "[Tour I Am] New transfer in Budapest";
message.Message.ContextId = createdTransfer.Id;
message.Message.ContextType = MessageContextType.Transfer;
message.Message.SenderId = Guid.Empty;
message.Message.Recipients.Add(new EmailRecipient(Guid.NewGuid(), createdTransfer.UserId, Guid.NewGuid(), createdTransfer.ContactEmail));
string FormatEmailContent()
{
return $@"
<html>
<body>
<p>Dear {createdTransfer.FullName},</p>
<p>We are pleased to inform you that a transfer order has been placed. Below are the details of the transfer:</p>
<p>
{createdTransfer.FromAddress} - {createdTransfer.ToAddress}</p>
<p>{createdTransfer.Appointment}</p>
<p>{createdTransfer.FullName}</p>
<p>{createdTransfer.PassengerCount}</p>
<p>Please confirm the transfer by clicking on the following link:</p>
<p><a href=""{Setting.BaseUrl}/mytransfers/{createdTransfer.Id}"">Confirm Transfer</a></p>
<p>If you did not request this transfer, please disregard this email.</p>
<p>Thank you,<br/>Tour I Am team</p>
</body>
</html>";
}
message.Message.Text = FormatEmailContent();
//string FormatEmailContent()
//{
// return $@"
// <html>
// <body>
// <p>Dear {createdTransfer.FullName},</p>
// <p>We are pleased to inform you that a transfer order has been placed. Below are the details of the transfer:</p>
// <p>
// {createdTransfer.FromAddress} - {createdTransfer.ToAddress}</p>
// <p>{createdTransfer.Appointment}</p>
// <p>{createdTransfer.FullName}</p>
// <p>{createdTransfer.PassengerCount}</p>
// <p>Please confirm the transfer by clicking on the following link:</p>
// <p><a href=""{Setting.BaseUrl}/mytransfers/{createdTransfer.Id}"">Confirm Transfer</a></p>
// <p>If you did not request this transfer, please disregard this email.</p>
// <p>Thank you,<br/>Tour I Am team</p>
// </body>
// </html>";
//}
//message.Message.Text = FormatEmailContent();
message.Message.Text = EmailTemplateHelper.GenerateNewTransferEmail(
createdTransfer.FullName,
createdTransfer.FromAddress,
createdTransfer.ToAddress,
createdTransfer.Appointment.ToString(),
createdTransfer.FullName,
createdTransfer.PassengerCount.ToString(),
createdTransfer.LuggageCount.ToString(),
Setting.BaseUrl,
createdTransfer.Id.ToString());
_logger.Info(message.Message.Text);
var messageElement = message.Message;
Console.WriteLine(message.Message);

View File

@ -24,6 +24,8 @@ using System.Net;
using TIAM.Services.Server;
using TIAM.Services.Server.Logins;
using TIAMWebApp.Server.Services;
using AyCode.Core.Enums;
using AyCode.Models.Enums;
namespace TIAMWebApp.Server.Controllers
{
@ -471,13 +473,18 @@ namespace TIAMWebApp.Server.Controllers
message.Message = new EmailMessage();
message.Message.EmailAddress = email;
message.Message.Id = Guid.NewGuid();
message.MessageType = AyCode.Models.Enums.MessageTypesEnum.email;
message.MessageType = MessageTypesEnum.email;
message.Message.Subject = "[Tour I Am] New transfer in Budapest";
message.Message.ContextId = user.Id;
message.Message.ContextType = MessageContextType.System;
message.Message.SenderId = Guid.Empty;
message.Message.Recipients.Add(new EmailRecipient(Guid.NewGuid(), user.Id, Guid.NewGuid(), email));
message.Message.Text = EmailTemplateHelper.GenerateForgotPasswordEmail(user.FullName, Setting.BaseUrl, user.Id.ToString(), user.ConfirmToken);
message.Message.Text = EmailTemplateHelper.GenerateForgotPasswordEmail(
user.FullName,
Setting.BaseUrl,
user.Id.ToString(),
user.ConfirmToken);
_logger.Info(message.Message.Text);
var messageElement = message.Message;
Console.WriteLine(message.Message);