Merge branch 'master' of http://git2.aycode.com/Adam/TourIAm
This commit is contained in:
commit
b421cae621
|
|
@ -22,6 +22,7 @@ public static class TiamConstClient
|
||||||
public static string NewTransferEmailTemplateName = "NewTransferEmailTemplate";
|
public static string NewTransferEmailTemplateName = "NewTransferEmailTemplate";
|
||||||
public static string TransferModifiedEmailTemplateName = "TramsferModifiedEmailTemplate";
|
public static string TransferModifiedEmailTemplateName = "TramsferModifiedEmailTemplate";
|
||||||
public static string ForgotPasswordEmailTemplateName = "ForgotPasswordEmailTemplate";
|
public static string ForgotPasswordEmailTemplateName = "ForgotPasswordEmailTemplate";
|
||||||
|
public static string GeneralEmailTemplateName = "GeneralEmailTemplate";
|
||||||
|
|
||||||
public static List<string> WelcomeEmailParameters = new List<string>()
|
public static List<string> WelcomeEmailParameters = new List<string>()
|
||||||
{
|
{
|
||||||
|
|
@ -53,6 +54,15 @@ public static class TiamConstClient
|
||||||
"TransferId"
|
"TransferId"
|
||||||
};
|
};
|
||||||
|
|
||||||
|
public static List<string> GeneralEmailParameters = new List<string>()
|
||||||
|
{
|
||||||
|
//string userName, string settingBaseUrl, string userId, string token
|
||||||
|
"UserName",
|
||||||
|
"MessageBody",
|
||||||
|
"SettingBaseUrl",
|
||||||
|
"UserId"
|
||||||
|
};
|
||||||
|
|
||||||
#if RELEASE
|
#if RELEASE
|
||||||
public static string SystemEmailAddress = "system@touriam.com";
|
public static string SystemEmailAddress = "system@touriam.com";
|
||||||
public static LogLevel DefaultLogLevelClient = LogLevel.Debug;
|
public static LogLevel DefaultLogLevelClient = LogLevel.Debug;
|
||||||
|
|
|
||||||
|
|
@ -102,5 +102,20 @@ namespace TIAM.Services.Server
|
||||||
return EmailTemplateHelper.ReplacePlaceholders(template, placeholders);
|
return EmailTemplateHelper.ReplacePlaceholders(template, placeholders);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static string GenerateGeneralEmail(string userName, string messageBody, string settingBaseUrl, string userId)
|
||||||
|
{
|
||||||
|
string template = EmailTemplateHelper.GetTemplate(TiamConstClient.GeneralEmailTemplateName);
|
||||||
|
|
||||||
|
var placeholders = new Dictionary<string, string>
|
||||||
|
{
|
||||||
|
{ TiamConstClient.GeneralEmailParameters[0], userName },
|
||||||
|
{ TiamConstClient.GeneralEmailParameters[1], messageBody },
|
||||||
|
{ TiamConstClient.GeneralEmailParameters[2], settingBaseUrl },
|
||||||
|
{ TiamConstClient.GeneralEmailParameters[3], userId }
|
||||||
|
};
|
||||||
|
|
||||||
|
return EmailTemplateHelper.ReplacePlaceholders(template, placeholders);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,13 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>Welcome</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>Hello, {{UserName}}!</h1>
|
||||||
|
<p>You have received a message in the TourIam System: </p>
|
||||||
|
<p>{{MessageBody}}</p>
|
||||||
|
<hr/>
|
||||||
|
<p>You can check out your messages <a href="{{SettingBaseUrl}}/user/messages/{{UserId}}">here</a></p>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
@ -8,6 +8,7 @@
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Remove="EmbeddedResources\EmailTemplates\ForgotPasswordEmailTemplate.html" />
|
<None Remove="EmbeddedResources\EmailTemplates\ForgotPasswordEmailTemplate.html" />
|
||||||
|
<None Remove="EmbeddedResources\EmailTemplates\GeneralEmailTemplate.html" />
|
||||||
<None Remove="EmbeddedResources\EmailTemplates\NewTransferEmailTemplate.html" />
|
<None Remove="EmbeddedResources\EmailTemplates\NewTransferEmailTemplate.html" />
|
||||||
<None Remove="EmbeddedResources\EmailTemplates\TransferModifiedEmailTemplate.html" />
|
<None Remove="EmbeddedResources\EmailTemplates\TransferModifiedEmailTemplate.html" />
|
||||||
<None Remove="EmbeddedResources\EmailTemplates\WelcomeEmailTemplate.html" />
|
<None Remove="EmbeddedResources\EmailTemplates\WelcomeEmailTemplate.html" />
|
||||||
|
|
@ -23,6 +24,9 @@
|
||||||
<EmbeddedResource Include="EmbeddedResources\EmailTemplates\TransferModifiedEmailTemplate.html">
|
<EmbeddedResource Include="EmbeddedResources\EmailTemplates\TransferModifiedEmailTemplate.html">
|
||||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
</EmbeddedResource>
|
</EmbeddedResource>
|
||||||
|
<EmbeddedResource Include="EmbeddedResources\EmailTemplates\GeneralEmailTemplate.html">
|
||||||
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
|
</EmbeddedResource>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|
|
||||||
|
|
@ -27,12 +27,15 @@ namespace TIAM.Services.Server
|
||||||
|
|
||||||
public double GetTransferPrice(Product product, TransferDestination fromTransferDestination, TransferDestination toTransferDestination, in byte seatNumber)
|
public double GetTransferPrice(Product product, TransferDestination fromTransferDestination, TransferDestination toTransferDestination, in byte seatNumber)
|
||||||
{
|
{
|
||||||
|
//ha from vagy to null, akkor a product price-t kellene kivenni (és majd vizsgálni, hogy buda vagy pest)
|
||||||
var baseDestination = product.Profile.AddressId == fromTransferDestination.AddressId ? toTransferDestination : fromTransferDestination;
|
var baseDestination = product.Profile.AddressId == fromTransferDestination.AddressId ? toTransferDestination : fromTransferDestination;
|
||||||
|
|
||||||
var transferDestinationToProduct = adminDal.GetTransferDestinationToProduct(product.Id, baseDestination.Id);
|
var transferDestinationToProduct = adminDal.GetTransferDestinationToProduct(product.Id, baseDestination.Id);
|
||||||
|
|
||||||
var tranferDestinationPrice = transferDestinationToProduct ?? baseDestination as ITransfeDestinationPrices;
|
var tranferDestinationPrice = transferDestinationToProduct ?? baseDestination as ITransfeDestinationPrices;
|
||||||
|
|
||||||
|
//product commission-t nem kellene hozzáadni, mivel a transferDestination árából lejön a transferdestination commission-je (ha van gondolom)
|
||||||
|
|
||||||
var price = GetSeatNumberPrice(in tranferDestinationPrice, seatNumber) + tranferDestinationPrice.ProductCommis + GetExtraPrice(in fromTransferDestination);
|
var price = GetSeatNumberPrice(in tranferDestinationPrice, seatNumber) + tranferDestinationPrice.ProductCommis + GetExtraPrice(in fromTransferDestination);
|
||||||
|
|
||||||
//TODO: ExtraPrice - J. seatnum percent price, FirstName, LastName, CascadeDelete
|
//TODO: ExtraPrice - J. seatnum percent price, FirstName, LastName, CascadeDelete
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
using TIAM.Entities.Transfers;
|
using TIAM.Entities.Transfers;
|
||||||
|
using TIAM.Entities.Emails;
|
||||||
|
//using TIAM.Entities.TransferDestinations;
|
||||||
using TIAMWebApp.Shared.Application.Interfaces;
|
using TIAMWebApp.Shared.Application.Interfaces;
|
||||||
using TIAMWebApp.Shared.Application.Models;
|
|
||||||
using TIAMWebApp.Shared.Application.Models.ClientSide.UI.WizardModels;
|
using TIAMWebApp.Shared.Application.Models.ClientSide.UI.WizardModels;
|
||||||
|
|
||||||
namespace TIAMMobileApp.Services
|
namespace TIAMMobileApp.Services
|
||||||
|
|
@ -8,29 +9,37 @@ namespace TIAMMobileApp.Services
|
||||||
public class WizardProcessor : IWizardProcessor
|
public class WizardProcessor : IWizardProcessor
|
||||||
{
|
{
|
||||||
|
|
||||||
public ITransferDataService transferDataService { get; set; }
|
public ITransferDataService TransferDataService { get; set; }
|
||||||
public IUserDataService userDataService { get; set; }
|
public IUserDataService UserDataService { get; set; }
|
||||||
|
public IClientNoticeSenderService MessageSenderService { get; set; }
|
||||||
|
|
||||||
public WizardProcessor(ITransferDataService transferDataService, IUserDataService userDataService)
|
public WizardProcessor(ITransferDataService transferDataService, IUserDataService userDataService, IClientNoticeSenderService messageSenderService)
|
||||||
{
|
{
|
||||||
this.transferDataService = transferDataService;
|
this.TransferDataService = transferDataService;
|
||||||
this.userDataService = userDataService;
|
this.UserDataService = userDataService;
|
||||||
|
this.MessageSenderService = messageSenderService;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<TModelType?> ProcessWizardAsync<TModelType>(Type type, object data) where TModelType: class
|
public async Task<TModelType?> ProcessWizardAsync<TModelType>(Type type, object data) where TModelType: class
|
||||||
{
|
{
|
||||||
switch (type.Name)
|
switch (type.Name)
|
||||||
{
|
{
|
||||||
case "TransferDestinationWizardModel":
|
case nameof(TransferDestinationWizardModel):
|
||||||
var result = await transferDataService.CreateTransferDestination((TransferDestination)data);
|
var result = await TransferDataService.CreateTransferDestination((TransferDestination)data);
|
||||||
return result as TModelType;
|
return result as TModelType;
|
||||||
|
|
||||||
//var a = new WizardProcessorResult<TransferDestination>();
|
case nameof(TransferWizardModel):
|
||||||
//a.Model = result;
|
Console.WriteLine(@"TransferWizardModel");
|
||||||
//return a as TResult;
|
var transferResult = await TransferDataService.CreateTransfer((TransferWizardModel)data);
|
||||||
|
return transferResult as TModelType;
|
||||||
|
|
||||||
case "ServiceProvider":
|
case nameof(MessageWizardModel):
|
||||||
return null;
|
TIAM.Entities.Emails.EmailMessage emailMessage = ((MessageWizardModel)data).CopyToEmailMessage();
|
||||||
|
var messageResult = await MessageSenderService.SendNoticeAsync(emailMessage, 1);
|
||||||
|
return messageResult as TModelType;
|
||||||
|
|
||||||
|
//case nameof(ServiceProvider):
|
||||||
|
// return null;
|
||||||
default:
|
default:
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@
|
||||||
@using AyCode.Core.Extensions
|
@using AyCode.Core.Extensions
|
||||||
@using TIAM.Entities.Transfers
|
@using TIAM.Entities.Transfers
|
||||||
@using TIAM.Resources
|
@using TIAM.Resources
|
||||||
|
@using TIAMSharedUI.Shared.Components.BaseComponents
|
||||||
@using TIAMWebApp.Shared.Application.Interfaces
|
@using TIAMWebApp.Shared.Application.Interfaces
|
||||||
@using AyCode.Services.Loggers
|
@using AyCode.Services.Loggers
|
||||||
@using TIAM.Core.Enums
|
@using TIAM.Core.Enums
|
||||||
|
|
@ -10,6 +11,7 @@
|
||||||
@using TIAMWebApp.Shared.Application.Utility
|
@using TIAMWebApp.Shared.Application.Utility
|
||||||
@using TIAMSharedUI.Pages.User.SysAdmins
|
@using TIAMSharedUI.Pages.User.SysAdmins
|
||||||
@using TIAMSharedUI.Pages.Components
|
@using TIAMSharedUI.Pages.Components
|
||||||
|
@inherits BasePageComponent
|
||||||
@inject HttpClient Http
|
@inject HttpClient Http
|
||||||
@inject NavigationManager navManager
|
@inject NavigationManager navManager
|
||||||
@inject IEnumerable<IAcLogWriterClientBase> LogWriters
|
@inject IEnumerable<IAcLogWriterClientBase> LogWriters
|
||||||
|
|
@ -19,6 +21,7 @@
|
||||||
@inject NavigationManager navigationManager
|
@inject NavigationManager navigationManager
|
||||||
@inject IStringLocalizer<TIAMResources> localizer
|
@inject IStringLocalizer<TIAMResources> localizer
|
||||||
@inject IWizardProcessor wizardProcessor
|
@inject IWizardProcessor wizardProcessor
|
||||||
|
@inject AdminSignalRClient _adminSignalRClient
|
||||||
|
|
||||||
<PageTitle>Transfer details</PageTitle>
|
<PageTitle>Transfer details</PageTitle>
|
||||||
<div class="text-center m-5">
|
<div class="text-center m-5">
|
||||||
|
|
@ -69,7 +72,7 @@ else
|
||||||
{
|
{
|
||||||
<div class="container mt-4">
|
<div class="container mt-4">
|
||||||
<DxTabs>
|
<DxTabs>
|
||||||
<DxTabPage Text="Details">
|
<DxTabPage Visible="@displayCard" Text="Details">
|
||||||
|
|
||||||
|
|
||||||
@if (!_editMode)
|
@if (!_editMode)
|
||||||
|
|
@ -238,12 +241,12 @@ else
|
||||||
}
|
}
|
||||||
|
|
||||||
</DxTabPage>
|
</DxTabPage>
|
||||||
<DxTabPage Text="Messages">
|
<DxTabPage Visible="@displayCard" Text="Messages">
|
||||||
<div style="margin-top: 10px; margin-bottom: 10px;">
|
<div style="margin-top: 10px; margin-bottom: 10px;">
|
||||||
<DxButton Click="() => SendMail(_transfer)" Text="Send a message" RenderStyle="ButtonRenderStyle.Primary" />
|
<DxButton Click="() => SendMail(_transfer)" Text="Send a message" RenderStyle="ButtonRenderStyle.Primary" />
|
||||||
</div>
|
</div>
|
||||||
<MessageDetailGridComponent ContextId="transferId" IsSenderEmailVisible="false" IsMessageTextVisible="false"></MessageDetailGridComponent>
|
<MessageDetailGridComponent ContextId="transferId" IsSenderEmailVisible="false" IsMessageTextVisible="false"></MessageDetailGridComponent>
|
||||||
</DxTabPage>
|
</DxTabPage>
|
||||||
</DxTabs>
|
</DxTabs>
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
|
|
@ -258,6 +261,8 @@ else
|
||||||
private LoggerClient<EditTransfers> _logger = null!;
|
private LoggerClient<EditTransfers> _logger = null!;
|
||||||
private MessageWizardModel _messageWizardModel = new();
|
private MessageWizardModel _messageWizardModel = new();
|
||||||
|
|
||||||
|
private bool displayCard = true;
|
||||||
|
|
||||||
private bool _popupVisible;
|
private bool _popupVisible;
|
||||||
|
|
||||||
public List<string> IgnoreList =
|
public List<string> IgnoreList =
|
||||||
|
|
@ -361,6 +366,7 @@ else
|
||||||
|
|
||||||
protected override async Task OnInitializedAsync()
|
protected override async Task OnInitializedAsync()
|
||||||
{
|
{
|
||||||
|
|
||||||
foreach (var t in Enum.GetValues(typeof(TransferStatusType)).OfType<TransferStatusType>().ToList())
|
foreach (var t in Enum.GetValues(typeof(TransferStatusType)).OfType<TransferStatusType>().ToList())
|
||||||
_statusTypes.Add(t.ToString());
|
_statusTypes.Add(t.ToString());
|
||||||
|
|
||||||
|
|
@ -368,9 +374,35 @@ else
|
||||||
_logger.Info($"parameter: {transferId.ToString()}");
|
_logger.Info($"parameter: {transferId.ToString()}");
|
||||||
|
|
||||||
await LoadTransfer();
|
await LoadTransfer();
|
||||||
if (_transfer.UserId.IsNullOrEmpty())
|
var test = _transfer.UserId;
|
||||||
|
if (!_transfer.UserId.IsNullOrEmpty())
|
||||||
{
|
{
|
||||||
await UserDataService.SetEmailConfirmed(_transfer.UserId);
|
//get transfer user details
|
||||||
|
var transferUser = await UserDataService.GetUserByEmailAsync(_transfer.ContactEmail);
|
||||||
|
if(transferUser != null)
|
||||||
|
{
|
||||||
|
if(_sessionService.IsAuthenticated)
|
||||||
|
{
|
||||||
|
if (_sessionService.User != null)
|
||||||
|
{
|
||||||
|
if (transferUser.Id == _sessionService.User.UserId)
|
||||||
|
{
|
||||||
|
//I am logged in, and this is my transfer
|
||||||
|
await UserDataService.SetEmailConfirmed(_transfer.UserId);
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//this is not my transfer, if I am not sysadmin, I should not see the transfer details
|
||||||
|
if(!_sessionService.IsSysAdmin || !_sessionService.IsDevAdmin)
|
||||||
|
{
|
||||||
|
displayCard = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -389,7 +421,8 @@ else
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var response = await transferDataService.GetTransferByIdAsync(transferId);
|
//var response = await transferDataService.GetTransferByIdAsync(transferId);
|
||||||
|
var response = await _adminSignalRClient.GetTransferById(transferId);
|
||||||
|
|
||||||
if (response != null)
|
if (response != null)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,24 @@
|
||||||
@page "/transfer"
|
@page "/transfer"
|
||||||
|
@using AyCode.Core.Consts
|
||||||
|
@using AyCode.Core.Helpers
|
||||||
|
@using TIAM.Models.Dtos.Users
|
||||||
|
@using TIAM.Services
|
||||||
@using TIAMSharedUI.Pages.Components
|
@using TIAMSharedUI.Pages.Components
|
||||||
@using TIAMSharedUI.Pages.Components.EditComponents
|
@using TIAMSharedUI.Pages.Components.EditComponents
|
||||||
@using TIAMSharedUI.Shared
|
@using TIAMSharedUI.Shared
|
||||||
|
@using TIAMSharedUI.Shared.Components.BaseComponents
|
||||||
@using TIAMWebApp.Shared.Application.Interfaces
|
@using TIAMWebApp.Shared.Application.Interfaces
|
||||||
@using TIAMWebApp.Shared.Application.Models.ClientSide.UI
|
@using TIAMWebApp.Shared.Application.Models.ClientSide.UI
|
||||||
@using TIAMWebApp.Shared.Application.Models.ClientSide.UI.WizardModels
|
@using TIAMWebApp.Shared.Application.Models.ClientSide.UI.WizardModels
|
||||||
@using AyCode.Services.Loggers
|
@using AyCode.Services.Loggers
|
||||||
|
@using TIAMWebApp.Shared.Application.Models.PageModels
|
||||||
|
@using TIAMWebApp.Shared.Application.Services
|
||||||
|
@inherits BasePageComponent
|
||||||
@inject NavigationManager navManager
|
@inject NavigationManager navManager
|
||||||
@inject IAcLogWriterClientBase BrowserConsoleLogWriter
|
@inject IAcLogWriterClientBase BrowserConsoleLogWriter
|
||||||
@inject IWizardProcessor WizardProcessor
|
@inject IWizardProcessor WizardProcessor
|
||||||
|
@inject IUserDataService UserDataService
|
||||||
|
@inject AdminSignalRClient _adminSignalRClient
|
||||||
<PageTitle>Transfer</PageTitle>
|
<PageTitle>Transfer</PageTitle>
|
||||||
|
|
||||||
<HeroSlider SliderItems="sliders" Height="30vh"></HeroSlider>
|
<HeroSlider SliderItems="sliders" Height="30vh"></HeroSlider>
|
||||||
|
|
@ -113,13 +123,93 @@ new HeroSliderItem
|
||||||
|
|
||||||
public async Task SubmitForm(object Result)
|
public async Task SubmitForm(object Result)
|
||||||
{
|
{
|
||||||
|
TransferWizardModel resModel = (TransferWizardModel)Result;
|
||||||
|
//let's check if user exists with this email
|
||||||
|
var user = await UserDataService.GetUserByEmailAsync(resModel.EmailAddress!);
|
||||||
|
if (user != null && user.Id != Guid.Empty)
|
||||||
|
{
|
||||||
|
resModel.UserId = user.Id;
|
||||||
|
//user exists already
|
||||||
|
|
||||||
|
if(_sessionService.User != null)
|
||||||
|
{
|
||||||
|
if(_sessionService.User.UserId == user.Id)
|
||||||
|
{
|
||||||
|
|
||||||
|
//I have ordered for myself
|
||||||
|
resModel.ReferralId = null;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//if I am logged in and different user I become referrer (if no referrer already)
|
||||||
|
var transferUserDetail = await UserDataService.GetUserDetailByIdAsync(user.Id);
|
||||||
|
var userDetail = await UserDataService.GetUserDetailByIdAsync(_sessionService.User.UserId);
|
||||||
|
|
||||||
|
if (transferUserDetail.UserDto.RefferalId != null)
|
||||||
|
{
|
||||||
|
//user has aready a referrer so we use that
|
||||||
|
resModel.ReferralId = transferUserDetail.UserDto.RefferalId;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//user has no referrer so I am the referrer
|
||||||
|
resModel.ReferralId = userDetail.UserDto.RefferalId;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//create a guest user and set referralId
|
||||||
|
var registration = new RegistrationModel();
|
||||||
|
|
||||||
|
var password = AcCharsGenerator.NewPassword(AcConst.MinPasswordLength, 16);
|
||||||
|
|
||||||
|
registration.Email = resModel.EmailAddress;
|
||||||
|
registration.PhoneNumber = resModel.PhoneNumber;
|
||||||
|
registration.Password = password;
|
||||||
|
//get list with one member!
|
||||||
|
|
||||||
|
var createResult = await UserDataService.CreateGuestUser(registration);
|
||||||
|
if (createResult.isSuccess)
|
||||||
|
{
|
||||||
|
if (createResult.user != null)
|
||||||
|
{
|
||||||
|
if (_sessionService.User != null)
|
||||||
|
{
|
||||||
|
//if I am logged in user I become referrer
|
||||||
|
var userDetail = await UserDataService.GetUserDetailByIdAsync(_sessionService.User.UserId);
|
||||||
|
var createdUserDetail = await UserDataService.GetUserDetailByIdAsync(createResult.user.Id);
|
||||||
|
if(createdUserDetail != null)
|
||||||
|
{
|
||||||
|
createdUserDetail.UserDto.RefferalId = userDetail.UserDto.RefferalId;
|
||||||
|
var updatedNewUser = await _adminSignalRClient.PostDataAsync<UserModelDtoDetail>(SignalRTags.UpdateUserModelDtoDetail, userDetail);
|
||||||
|
if (updatedNewUser != null)
|
||||||
|
{
|
||||||
|
//referral set
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//something wrong
|
||||||
|
}
|
||||||
|
}
|
||||||
|
resModel.ReferralId = userDetail.UserDto.RefferalId;
|
||||||
|
}
|
||||||
|
|
||||||
|
resModel.UserId = createResult.user.Id;
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//some error handling
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
var transfer = await WizardProcessor.ProcessWizardAsync<TransferWizardModel>(Result.GetType(), Result);
|
var transfer = await WizardProcessor.ProcessWizardAsync<TransferWizardModel>(Result.GetType(), Result);
|
||||||
BrowserConsoleLogWriter.Info($"Submitted nested form: {Result.GetType().FullName}");
|
BrowserConsoleLogWriter.Info($"Submitted nested form: {Result.GetType().FullName}");
|
||||||
navManager.NavigateTo("/transfer2/"+transfer.Id);
|
navManager.NavigateTo($"/transfer2/{resModel.Id}");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
@page "/sysadmin/transfers"
|
@page "/sysadmin/transfers"
|
||||||
@using BlazorAnimation
|
@using BlazorAnimation
|
||||||
|
@using TIAM.Core.Consts
|
||||||
@using TIAM.Core.Enums
|
@using TIAM.Core.Enums
|
||||||
@using TIAM.Entities.Emails
|
@using TIAM.Entities.Emails
|
||||||
@using TIAM.Entities.Transfers
|
@using TIAM.Entities.Transfers
|
||||||
|
|
@ -250,19 +251,20 @@
|
||||||
"SenderFullName",
|
"SenderFullName",
|
||||||
"SenderId",
|
"SenderId",
|
||||||
"ContextId",
|
"ContextId",
|
||||||
|
"ContextType"
|
||||||
];
|
];
|
||||||
|
|
||||||
private static readonly List<TransferStatusModel> Statuses =
|
private static readonly List<TransferStatusModel> Statuses =
|
||||||
[
|
[
|
||||||
new(Convert.ToByte(TransferStatusType.OrderSubmitted), "Order submitted"),
|
new(Convert.ToByte(TransferStatusType.OrderSubmitted), "Order submitted"),
|
||||||
new(Convert.ToByte(TransferStatusType.OrderConfirmed), "Order confirmed"),
|
new(Convert.ToByte(TransferStatusType.OrderConfirmed), "Order confirmed"),
|
||||||
new(Convert.ToByte(TransferStatusType.AssignedToDriver), "Assigned to driver"),
|
new(Convert.ToByte(TransferStatusType.AssignedToDriver), "Assigned to driver"),
|
||||||
new(Convert.ToByte(TransferStatusType.DriverConfirmed), "Driver confirmed"),
|
new(Convert.ToByte(TransferStatusType.DriverConfirmed), "Driver confirmed"),
|
||||||
new(Convert.ToByte(TransferStatusType.DriverEnRoute), "Driver enroute"),
|
new(Convert.ToByte(TransferStatusType.DriverEnRoute), "Driver enroute"),
|
||||||
new(Convert.ToByte(TransferStatusType.PassengerPickup), "Passenger in car"),
|
new(Convert.ToByte(TransferStatusType.PassengerPickup), "Passenger in car"),
|
||||||
new(Convert.ToByte(TransferStatusType.Finished), "Finished"),
|
new(Convert.ToByte(TransferStatusType.Finished), "Finished"),
|
||||||
new(Convert.ToByte(TransferStatusType.UserCanceled), "User cancelled"),
|
new(Convert.ToByte(TransferStatusType.UserCanceled), "User cancelled"),
|
||||||
new(Convert.ToByte(TransferStatusType.AdminDenied), "Admin 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();
|
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();
|
||||||
|
|
@ -278,11 +280,13 @@
|
||||||
|
|
||||||
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 regarding your transfer";
|
||||||
_messageWizardModel.ReceiverId = item.UserId;
|
_messageWizardModel.ReceiverId = item.UserId;
|
||||||
_messageWizardModel.ContextId = item.Id;
|
_messageWizardModel.ContextId = item.Id;
|
||||||
_messageWizardModel.SenderEmailAddress = "info@touriam.com";
|
_messageWizardModel.ContextType = MessageContextType.Transfer;
|
||||||
|
_messageWizardModel.SenderId = TiamConstClient.SysAccounts["SystemEmailSender"];
|
||||||
|
_messageWizardModel.SenderEmailAddress = TiamConstClient.SystemEmailAddress;
|
||||||
_messageWizardModel.ReceiverEmailAddress = item.ContactEmail;
|
_messageWizardModel.ReceiverEmailAddress = item.ContactEmail;
|
||||||
_messageWizardModel.ReceiverFullName = item.FullName;
|
_messageWizardModel.ReceiverFullName = item.FullName;
|
||||||
_popupVisible = true;
|
_popupVisible = true;
|
||||||
|
|
@ -311,28 +315,11 @@
|
||||||
|
|
||||||
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);
|
||||||
|
|
||||||
_logger.Info($"Submitted nested form: {result.GetType().FullName}");
|
_logger.Info($"Submitted nested form: {result.GetType().FullName}");
|
||||||
|
CancelCreateClick();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Grid_CustomizeElement(GridCustomizeElementEventArgs e)
|
void Grid_CustomizeElement(GridCustomizeElementEventArgs e)
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,9 @@ using TIAM.Entities.Products;
|
||||||
using AyCode.Core.Consts;
|
using AyCode.Core.Consts;
|
||||||
using AyCode.Core;
|
using AyCode.Core;
|
||||||
using TIAM.Core.Consts;
|
using TIAM.Core.Consts;
|
||||||
|
using TIAM.Entities.Users;
|
||||||
|
using TIAM.Services.Server;
|
||||||
|
using TIAMWebApp.Shared.Application.Models.ClientSide;
|
||||||
|
|
||||||
namespace TIAMWebApp.Server.Controllers
|
namespace TIAMWebApp.Server.Controllers
|
||||||
{
|
{
|
||||||
|
|
@ -48,6 +51,23 @@ namespace TIAMWebApp.Server.Controllers
|
||||||
{
|
{
|
||||||
_logger.Debug($"SendEmail called!");
|
_logger.Debug($"SendEmail called!");
|
||||||
var message = JObject.Parse(serializedMessageSenderModel.GetRawText()).ToObject<MessageSenderModel<EmailMessage>>();
|
var message = JObject.Parse(serializedMessageSenderModel.GetRawText()).ToObject<MessageSenderModel<EmailMessage>>();
|
||||||
|
var receiver = _adminDal.GetUserById(message.Message.Recipients[0].RecipientId);
|
||||||
|
string receiverFullName = "";
|
||||||
|
if (receiver != null) {
|
||||||
|
if (receiver.FullName != null)
|
||||||
|
{
|
||||||
|
receiverFullName = receiver.FullName;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
receiverFullName = "TourIam User";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//wrong userId?
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
if (message == null) return BadRequest("Invalid request");
|
if (message == null) return BadRequest("Invalid request");
|
||||||
|
|
||||||
|
|
@ -58,6 +78,21 @@ namespace TIAMWebApp.Server.Controllers
|
||||||
var messageElement = message.Message;
|
var messageElement = message.Message;
|
||||||
_logger.Debug(message.Message.Subject);
|
_logger.Debug(message.Message.Subject);
|
||||||
messageElement.EmailAddress = TiamConstClient.SystemEmailAddress;
|
messageElement.EmailAddress = TiamConstClient.SystemEmailAddress;
|
||||||
|
|
||||||
|
var htmlContent = EmailTemplateHelper.GenerateGeneralEmail(
|
||||||
|
receiverFullName,
|
||||||
|
messageElement.Text,
|
||||||
|
Setting.BaseUrl,
|
||||||
|
messageElement.Recipients[0].RecipientId.ToString()
|
||||||
|
);
|
||||||
|
message.Message.Text = htmlContent;
|
||||||
|
|
||||||
|
foreach (var admin in TiamConstClient.SysAdmins)
|
||||||
|
{
|
||||||
|
var adminUser = _adminDal.GetUserById(admin, true);
|
||||||
|
message.Message.Recipients.Add(new EmailRecipient(Guid.NewGuid(), admin, message.Message.Id, adminUser.EmailAddress));
|
||||||
|
}
|
||||||
|
|
||||||
await _adminDal.AddEmailMessageAsync(messageElement);
|
await _adminDal.AddEmailMessageAsync(messageElement);
|
||||||
var result = await _messageSenderService.SendMessageAsync(messageElement, (int)message.MessageType);
|
var result = await _messageSenderService.SendMessageAsync(messageElement, (int)message.MessageType);
|
||||||
//_adminDal.AddEmailMessageAsync((TIAM.Entities.Emails.EmailMessage)SerializedMessageSenderModel.Message);
|
//_adminDal.AddEmailMessageAsync((TIAM.Entities.Emails.EmailMessage)SerializedMessageSenderModel.Message);
|
||||||
|
|
|
||||||
|
|
@ -154,7 +154,7 @@ namespace TIAMWebApp.Server.Controllers
|
||||||
return result ? transferDestination : null;
|
return result ? transferDestination : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//[AllowAnonymous]
|
//[AllowAnonymous]
|
||||||
//[HttpPost]
|
//[HttpPost]
|
||||||
|
|
@ -380,289 +380,165 @@ namespace TIAMWebApp.Server.Controllers
|
||||||
public async Task<Transfer?> AddTransfer(Transfer transfer)
|
public async Task<Transfer?> AddTransfer(Transfer transfer)
|
||||||
{
|
{
|
||||||
_logger.Info(@"CreateTransfer via SignalR called!");
|
_logger.Info(@"CreateTransfer via SignalR called!");
|
||||||
|
|
||||||
if (transfer != null)
|
|
||||||
{
|
|
||||||
|
|
||||||
var id = Guid.NewGuid();
|
if (transfer == null || string.IsNullOrEmpty(transfer.FromAddress) || string.IsNullOrEmpty(transfer.ToAddress))
|
||||||
//TransferDestination transferDestination = new TransferDestination(id, transferDestinationModel.Name, transferDestinationModel.Description, transferDestinationModel.AddressString);
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
await ProcessTransferAsync(transfer);
|
||||||
|
await SendTransferEmailAsync(transfer);
|
||||||
|
|
||||||
if (string.IsNullOrEmpty(transfer.FromAddress) || string.IsNullOrEmpty(transfer.ToAddress))
|
return transfer;
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
_logger.Info($@"TransferDestination to be created: {id}");
|
|
||||||
_logger.Info($@"TransferDestination to be created: {transfer.FromAddress}");
|
|
||||||
_logger.Info($@"TransferDestination to be created: {transfer.ToAddress}");
|
|
||||||
_logger.Info($@"TransferDestination to be created: {transfer.ProductId}");
|
|
||||||
_logger.Info($@"TransferDestination to be created: {transfer.Price}");
|
|
||||||
|
|
||||||
var destList = _adminDal.GetTransferDestinations();
|
|
||||||
var from = destList.FirstOrDefault(x => x.AddressString == transfer.FromAddress);
|
|
||||||
var to = destList.FirstOrDefault(x => x.AddressString == transfer.ToAddress);
|
|
||||||
|
|
||||||
////TODO
|
|
||||||
//if (!transfer.ProductId.IsNullOrEmpty())
|
|
||||||
// transfer.Price = _transferBackendService.GetTransferPrice(transfer.ProductId.Value, from, to, transfer.PassengerCount);
|
|
||||||
|
|
||||||
Product? product = null;
|
|
||||||
//TODO
|
|
||||||
if (!transfer.ProductId.IsNullOrEmpty())
|
|
||||||
{
|
|
||||||
product = await _adminDal.GetProductByIdAsync((Guid)transfer.ProductId);
|
|
||||||
transfer.Price = _transferBackendService.GetTransferPrice(transfer.ProductId.Value, from, to, transfer.PassengerCount);
|
|
||||||
}
|
|
||||||
|
|
||||||
transfer.TransferStatusType = TransferStatusType.OrderSubmitted;
|
|
||||||
if (transfer.Price != null && transfer.Price > 0 && product != null)
|
|
||||||
{
|
|
||||||
if (product.ServiceProvider.CommissionPercent != null)
|
|
||||||
{
|
|
||||||
transfer.Revenue = transfer.Price * product.ServiceProvider.CommissionPercent / 100;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
transfer.Revenue = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
await _adminDal.AddTransferAsync(transfer);
|
|
||||||
|
|
||||||
|
|
||||||
_logger.Info($"Created transfer, send emailMessage!!!");
|
|
||||||
var message = new MessageSenderModel<EmailMessage>();
|
|
||||||
message.Message = new EmailMessage();
|
|
||||||
message.Message.Id = Guid.NewGuid();
|
|
||||||
message.Message.Subject = "[Tour I Am] New transfer in Budapest";
|
|
||||||
message.Message.ContextId = transfer.Id;
|
|
||||||
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();
|
|
||||||
_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;
|
|
||||||
var result = await _messageSenderService.SendMessageAsync(messageElement, (int)message.MessageType);
|
|
||||||
await _adminDal.AddEmailMessageAsync(messageElement);
|
|
||||||
_logger.Info("SendEmail result: " + result);
|
|
||||||
|
|
||||||
|
|
||||||
return transfer;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
[AllowAnonymous]
|
[AllowAnonymous]
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
[Route(APIUrls.CreateTransferRouteName)]
|
[Route(APIUrls.CreateTransferRouteName)]
|
||||||
public async Task<IActionResult> CreateTransfer([FromBody] JsonElement serializedTransferModel)
|
public async Task<IActionResult> CreateTransfer([FromBody] JsonElement serializedTransferModel)
|
||||||
{
|
{
|
||||||
_logger.Info(@"CreateTransfer called!");
|
_logger.Info(@"CreateTransfer called!");
|
||||||
|
|
||||||
if (string.IsNullOrEmpty(serializedTransferModel.GetRawText()))
|
if (string.IsNullOrEmpty(serializedTransferModel.GetRawText()))
|
||||||
{
|
{
|
||||||
return BadRequest("SerializedTramsferDestinationWizardModel is required");
|
return BadRequest("SerializedTransferModel is required");
|
||||||
}
|
}
|
||||||
else
|
|
||||||
|
var transfer = DeserializeTransfer(serializedTransferModel);
|
||||||
|
if (transfer == null || string.IsNullOrEmpty(transfer.FromAddress) || string.IsNullOrEmpty(transfer.ToAddress))
|
||||||
{
|
{
|
||||||
Transfer? transfer = JObject.Parse(serializedTransferModel.GetRawText()).ToObject<Transfer>();
|
return BadRequest("Invalid request");
|
||||||
|
|
||||||
if (transfer != null)
|
|
||||||
{
|
|
||||||
|
|
||||||
var id = Guid.NewGuid();
|
|
||||||
//TransferDestination transferDestination = new TransferDestination(id, transferDestinationModel.Name, transferDestinationModel.Description, transferDestinationModel.AddressString);
|
|
||||||
|
|
||||||
|
|
||||||
if (string.IsNullOrEmpty(transfer.FromAddress) || string.IsNullOrEmpty(transfer.ToAddress))
|
|
||||||
{
|
|
||||||
return BadRequest("Invalid request");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
_logger.Info($@"TransferDestination to be created: {id}");
|
|
||||||
_logger.Info($@"TransferDestination to be created: {transfer.FromAddress}");
|
|
||||||
_logger.Info($@"TransferDestination to be created: {transfer.ToAddress}");
|
|
||||||
_logger.Info($@"TransferDestination to be created: {transfer.ProductId}");
|
|
||||||
_logger.Info($@"TransferDestination to be created: {transfer.Price}");
|
|
||||||
|
|
||||||
var from = await _adminDal.Context.TransferDestinations.FirstOrDefaultAsync(x => x.AddressString == transfer.FromAddress);
|
|
||||||
var to = await _adminDal.Context.TransferDestinations.FirstOrDefaultAsync(x => x.AddressString == transfer.ToAddress);
|
|
||||||
Product? product = null;
|
|
||||||
//TODO
|
|
||||||
if (!transfer.ProductId.IsNullOrEmpty())
|
|
||||||
{
|
|
||||||
product = await _adminDal.GetProductByIdAsync((Guid)transfer.ProductId);
|
|
||||||
transfer.Price = _transferBackendService.GetTransferPrice(transfer.ProductId.Value, from, to, transfer.PassengerCount);
|
|
||||||
|
|
||||||
if (transfer.Price != null && transfer.Price > 0)
|
|
||||||
{
|
|
||||||
transfer.Revenue = _transferBackendService.GetCommission((Guid)transfer.ProductId, (double)transfer.Price, to);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
transfer.Revenue = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
transfer.TransferStatusType = TransferStatusType.OrderSubmitted;
|
|
||||||
|
|
||||||
await _adminDal.AddTransferAsync(transfer);
|
|
||||||
|
|
||||||
|
|
||||||
_logger.Info($"Created transfer, send emailMessage!!!");
|
|
||||||
var message = new MessageSenderModel<EmailMessage>();
|
|
||||||
message.Message = new EmailMessage();
|
|
||||||
message.Message.Id = Guid.NewGuid();
|
|
||||||
message.Message.EmailAddress = TiamConstClient.SystemEmailAddress;
|
|
||||||
message.MessageType = AyCode.Models.Enums.MessageTypesEnum.email;
|
|
||||||
message.Message.Subject = $"[#{transfer.OrderId}][Tour I Am] New transfer in Budapest";
|
|
||||||
message.Message.ContextId = transfer.Id;
|
|
||||||
message.Message.ContextType = MessageContextType.Transfer;
|
|
||||||
message.Message.SenderId = TiamConstClient.SysAccounts["SystemEmailSender"];
|
|
||||||
message.Message.Recipients.Add(new EmailRecipient(Guid.NewGuid(), transfer.UserId, message.Message.Id, transfer.ContactEmail));
|
|
||||||
foreach(var admin in TiamConstClient.SysAdmins)
|
|
||||||
{
|
|
||||||
var adminUser = _adminDal.GetUserById(admin, true);
|
|
||||||
message.Message.Recipients.Add(new EmailRecipient(Guid.NewGuid(), admin, message.Message.Id, adminUser.EmailAddress));
|
|
||||||
}
|
|
||||||
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;
|
|
||||||
var result = await _messageSenderService.SendMessageAsync(messageElement, (int)message.MessageType);
|
|
||||||
await _adminDal.AddEmailMessageAsync(messageElement);
|
|
||||||
_logger.Info("SendEmail result: " + result);
|
|
||||||
|
|
||||||
|
|
||||||
return Ok(transfer);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return BadRequest("Invalid request");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
await ProcessTransferAsync(transfer);
|
||||||
|
await SendTransferEmailAsync(transfer);
|
||||||
|
|
||||||
|
return Ok(transfer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
[AllowAnonymous]
|
[AllowAnonymous]
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
[Route(APIUrls.CreateTransfersRouteName)]
|
[Route(APIUrls.CreateTransfersRouteName)]
|
||||||
public async Task<IActionResult> CreateTransfers([FromBody] JsonElement serializedTransferList)
|
public async Task<IActionResult> CreateTransfers([FromBody] JsonElement serializedTransferList)
|
||||||
{
|
{
|
||||||
_logger.Info(@"CreateTransfers called!");
|
_logger.Info(@"CreateTransfers called!");
|
||||||
|
|
||||||
if (string.IsNullOrEmpty(serializedTransferList.GetRawText()))
|
if (string.IsNullOrEmpty(serializedTransferList.GetRawText()))
|
||||||
{
|
{
|
||||||
return BadRequest("SerializedTramsferDestinationWizardModel is required");
|
return BadRequest("SerializedTransferList is required");
|
||||||
}
|
}
|
||||||
else
|
|
||||||
|
var transfers = DeserializeTransfers(serializedTransferList);
|
||||||
|
if (transfers == null || !transfers.Any())
|
||||||
{
|
{
|
||||||
_logger.Info($@"Serialized model: {serializedTransferList.GetRawText()}");
|
return BadRequest("Invalid request");
|
||||||
|
}
|
||||||
|
|
||||||
var settings = new JsonSerializerSettings
|
var createdTransfers = new List<Transfer>();
|
||||||
|
foreach (var transfer in transfers)
|
||||||
|
{
|
||||||
|
await ProcessTransferAsync(transfer);
|
||||||
|
await SendTransferEmailAsync(transfer);
|
||||||
|
createdTransfers.Add(transfer);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Ok(createdTransfers);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Helper method to deserialize a single transfer
|
||||||
|
[NonAction]
|
||||||
|
private Transfer? DeserializeTransfer(JsonElement serializedTransferModel)
|
||||||
|
{
|
||||||
|
return JObject.Parse(serializedTransferModel.GetRawText()).ToObject<Transfer>();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Helper method to deserialize a list of transfers
|
||||||
|
[NonAction]
|
||||||
|
private List<Transfer>? DeserializeTransfers(JsonElement serializedTransferList)
|
||||||
|
{
|
||||||
|
var settings = new JsonSerializerSettings
|
||||||
|
{
|
||||||
|
ContractResolver = new CamelCasePropertyNamesContractResolver()
|
||||||
|
};
|
||||||
|
|
||||||
|
return JsonConvert.DeserializeObject<List<Transfer>>(serializedTransferList.GetRawText(), settings);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Helper method to process a transfer
|
||||||
|
[NonAction]
|
||||||
|
private async Task ProcessTransferAsync(Transfer transfer)
|
||||||
|
{
|
||||||
|
var from = await _adminDal.Context.TransferDestinations.FirstOrDefaultAsync(x => x.AddressString == transfer.FromAddress);
|
||||||
|
var to = await _adminDal.Context.TransferDestinations.FirstOrDefaultAsync(x => x.AddressString == transfer.ToAddress);
|
||||||
|
|
||||||
|
if (!transfer.ProductId.IsNullOrEmpty())
|
||||||
|
{
|
||||||
|
var product = await _adminDal.GetProductByIdAsync((Guid)transfer.ProductId);
|
||||||
|
transfer.Price = _transferBackendService.GetTransferPrice(transfer.ProductId.Value, from, to, transfer.PassengerCount);
|
||||||
|
|
||||||
|
if (transfer.Price.HasValue && transfer.Price > 0)
|
||||||
{
|
{
|
||||||
ContractResolver = new CamelCasePropertyNamesContractResolver()
|
transfer.Revenue = _transferBackendService.GetCommission((Guid)transfer.ProductId, (double)transfer.Price, to);
|
||||||
};
|
|
||||||
|
|
||||||
List<Transfer>? transfers = JsonConvert.DeserializeObject<List<Transfer>>(serializedTransferList.GetRawText(), settings);
|
|
||||||
|
|
||||||
//List<Transfer>? transfers = JObject.Parse(serializedTransferModel.GetRawText()).ToObject<List<Transfer>>();
|
|
||||||
List<Transfer> createdTransfers = new List<Transfer>();
|
|
||||||
if (transfers != null)
|
|
||||||
{
|
|
||||||
foreach (var transfer in transfers)
|
|
||||||
{
|
|
||||||
var id = Guid.NewGuid();
|
|
||||||
var result = await _adminDal.AddTransferAsync(transfer);
|
|
||||||
if (result)
|
|
||||||
{
|
|
||||||
createdTransfers.Add(transfer);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach (var createdTransfer in createdTransfers)
|
|
||||||
{
|
|
||||||
_logger.Info($"Created transfer, send emailMessage!!!");
|
|
||||||
var message = new MessageSenderModel<EmailMessage>();
|
|
||||||
message.Message = new EmailMessage();
|
|
||||||
message.Message.Id = Guid.NewGuid();
|
|
||||||
message.Message.EmailAddress = TiamConstClient.SystemEmailAddress;
|
|
||||||
message.MessageType = AyCode.Models.Enums.MessageTypesEnum.email;
|
|
||||||
message.Message.Subject = $"[#{createdTransfer.OrderId}][Tour I Am] New transfer in Budapest";
|
|
||||||
message.Message.ContextId = createdTransfer.Id;
|
|
||||||
message.Message.ContextType = MessageContextType.Transfer;
|
|
||||||
message.Message.SenderId = TiamConstClient.SysAccounts["SystemEmailSender"];
|
|
||||||
message.Message.Recipients.Add(new EmailRecipient(Guid.NewGuid(), createdTransfer.UserId, Guid.NewGuid(), createdTransfer.ContactEmail));
|
|
||||||
foreach (var admin in TiamConstClient.SysAdmins)
|
|
||||||
{
|
|
||||||
var adminUser = _adminDal.GetUserById(admin, true);
|
|
||||||
message.Message.Recipients.Add(new EmailRecipient(Guid.NewGuid(), admin, message.Message.Id, adminUser.EmailAddress));
|
|
||||||
}
|
|
||||||
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);
|
|
||||||
var result = await _messageSenderService.SendMessageAsync(messageElement, (int)message.MessageType);
|
|
||||||
await _adminDal.AddEmailMessageAsync(messageElement);
|
|
||||||
_logger.Info("SendEmail result: " + result);
|
|
||||||
}
|
|
||||||
|
|
||||||
return Ok(createdTransfers);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
return BadRequest("Invalid request");
|
transfer.Revenue = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
transfer.TransferStatusType = TransferStatusType.OrderSubmitted;
|
||||||
|
await _adminDal.AddTransferAsync(transfer);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Helper method to find or create user
|
||||||
|
[NonAction]
|
||||||
|
private async Task FindOrCreateUser(string Email)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// Helper method to send an email for the transfer
|
||||||
|
[NonAction]
|
||||||
|
private async Task SendTransferEmailAsync(Transfer transfer)
|
||||||
|
{
|
||||||
|
_logger.Info($"Created transfer, sending email...");
|
||||||
|
|
||||||
|
var message = new MessageSenderModel<EmailMessage>
|
||||||
|
{
|
||||||
|
Message = new EmailMessage
|
||||||
|
{
|
||||||
|
Id = Guid.NewGuid(),
|
||||||
|
EmailAddress = TiamConstClient.SystemEmailAddress,
|
||||||
|
Subject = $"[#{transfer.OrderId}][Tour I Am] New transfer in Budapest",
|
||||||
|
ContextId = transfer.Id,
|
||||||
|
ContextType = MessageContextType.Transfer,
|
||||||
|
SenderId = TiamConstClient.SysAccounts["SystemEmailSender"],
|
||||||
|
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())
|
||||||
|
},
|
||||||
|
MessageType = AyCode.Models.Enums.MessageTypesEnum.email
|
||||||
|
};
|
||||||
|
|
||||||
|
message.Message.Recipients.Add(new EmailRecipient(Guid.NewGuid(), transfer.UserId, message.Message.Id, transfer.ContactEmail));
|
||||||
|
|
||||||
|
foreach (var admin in TiamConstClient.SysAdmins)
|
||||||
|
{
|
||||||
|
var adminUser = _adminDal.GetUserById(admin, true);
|
||||||
|
message.Message.Recipients.Add(new EmailRecipient(Guid.NewGuid(), admin, message.Message.Id, adminUser.EmailAddress));
|
||||||
|
}
|
||||||
|
|
||||||
|
var result = await _messageSenderService.SendMessageAsync(message.Message, (int)message.MessageType);
|
||||||
|
await _adminDal.AddEmailMessageAsync(message.Message);
|
||||||
|
|
||||||
|
_logger.Info("SendEmail result: " + result);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Authorize]
|
[Authorize]
|
||||||
|
|
@ -703,7 +579,7 @@ namespace TIAMWebApp.Server.Controllers
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
[NonAction]
|
[NonAction]
|
||||||
[SignalR(SignalRTags.GetTransfersByOrderingProductId)]
|
[SignalR(SignalRTags.GetTransfersByOrderingProductId)]
|
||||||
public async Task<List<Transfer>> GetTransfersByProductId(Guid productId)
|
public async Task<List<Transfer>> GetTransfersByProductId(Guid productId)
|
||||||
{
|
{
|
||||||
|
|
@ -758,7 +634,7 @@ namespace TIAMWebApp.Server.Controllers
|
||||||
public async Task<Transfer?> UpdateTransfer(Transfer transfer)
|
public async Task<Transfer?> UpdateTransfer(Transfer transfer)
|
||||||
{
|
{
|
||||||
_logger.Info($"UpdateTransfer called! transferId: {transfer.Id}");
|
_logger.Info($"UpdateTransfer called! transferId: {transfer.Id}");
|
||||||
|
|
||||||
return await _adminDal.UpdateTransferAsync(transfer);
|
return await _adminDal.UpdateTransferAsync(transfer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -790,7 +666,7 @@ namespace TIAMWebApp.Server.Controllers
|
||||||
public async Task<Transfer?> RemoveTransfer(Transfer transfer)
|
public async Task<Transfer?> RemoveTransfer(Transfer transfer)
|
||||||
{
|
{
|
||||||
_logger.Info($"RemoveTransfer called! transferId: {transfer.Id}");
|
_logger.Info($"RemoveTransfer called! transferId: {transfer.Id}");
|
||||||
|
|
||||||
var result = await _adminDal.RemoveTransferAsync(transfer);
|
var result = await _adminDal.RemoveTransferAsync(transfer);
|
||||||
return result ? transfer : null;
|
return result ? transfer : null;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
using System.ComponentModel.DataAnnotations;
|
using AyCode.Core.Enums;
|
||||||
|
using System.ComponentModel.DataAnnotations;
|
||||||
using TIAM.Resources;
|
using TIAM.Resources;
|
||||||
|
|
||||||
namespace TIAMWebApp.Shared.Application.Models.ClientSide.UI.WizardModels
|
namespace TIAMWebApp.Shared.Application.Models.ClientSide.UI.WizardModels
|
||||||
|
|
@ -13,6 +14,8 @@ namespace TIAMWebApp.Shared.Application.Models.ClientSide.UI.WizardModels
|
||||||
public string SenderFullName { get; set; }
|
public string SenderFullName { get; set; }
|
||||||
public Guid SenderId { get; set; }
|
public Guid SenderId { get; set; }
|
||||||
public Guid ContextId { get; set; }
|
public Guid ContextId { get; set; }
|
||||||
|
public MessageContextType ContextType { get; set; }
|
||||||
|
|
||||||
[Required(ErrorMessage = "The subject value should be specified.")]
|
[Required(ErrorMessage = "The subject value should be specified.")]
|
||||||
[DataType(DataType.Text)]
|
[DataType(DataType.Text)]
|
||||||
[Display(Name = ResourceKeys.Subject, ResourceType = typeof(TIAMResources))]
|
[Display(Name = ResourceKeys.Subject, ResourceType = typeof(TIAMResources))]
|
||||||
|
|
@ -23,11 +26,12 @@ namespace TIAMWebApp.Shared.Application.Models.ClientSide.UI.WizardModels
|
||||||
public string Content { get; set; }
|
public string Content { get; set; }
|
||||||
|
|
||||||
public MessageWizardModel() { }
|
public MessageWizardModel() { }
|
||||||
public MessageWizardModel(string receiverEmailAddress, string receiverFullName, Guid contextId, Guid receiverId, string senderEmailAddress, Guid senderId, string subject, string content)
|
public MessageWizardModel(string receiverEmailAddress, string receiverFullName, Guid contextId, MessageContextType contextType, Guid receiverId, string senderEmailAddress, Guid senderId, string subject, string content)
|
||||||
{
|
{
|
||||||
ReceiverEmailAddress = receiverEmailAddress;
|
ReceiverEmailAddress = receiverEmailAddress;
|
||||||
ReceiverFullName = receiverFullName;
|
ReceiverFullName = receiverFullName;
|
||||||
ContextId = contextId;
|
ContextId = contextId;
|
||||||
|
ContextType = contextType;
|
||||||
ReceiverId = receiverId;
|
ReceiverId = receiverId;
|
||||||
SenderEmailAddress = senderEmailAddress;
|
SenderEmailAddress = senderEmailAddress;
|
||||||
SenderId = senderId;
|
SenderId = senderId;
|
||||||
|
|
|
||||||
|
|
@ -27,19 +27,17 @@ namespace TIAMWebApp.Shared.Application.Models.ClientSide.UI.WizardModels
|
||||||
return new EmailMessage
|
return new EmailMessage
|
||||||
{
|
{
|
||||||
Id = id,
|
Id = id,
|
||||||
SenderId = obj.SenderId,
|
SenderId = obj.SenderId,
|
||||||
ContextId = obj.ContextId,
|
ContextId = obj.ContextId,
|
||||||
|
ContextType = obj.ContextType,
|
||||||
Subject = obj.Subject,
|
Subject = obj.Subject,
|
||||||
Text = obj.Content,
|
Text = obj.Content,
|
||||||
EmailAddress = obj.SenderEmailAddress,
|
EmailAddress = obj.SenderEmailAddress,
|
||||||
Recipients = new List<EmailRecipient> {
|
Recipients = new List<EmailRecipient> {
|
||||||
new EmailRecipient(
|
new EmailRecipient(
|
||||||
Guid.NewGuid(), obj.ReceiverId, id, obj.ReceiverEmailAddress),
|
Guid.NewGuid(), obj.ReceiverId, id, obj.ReceiverEmailAddress)
|
||||||
new EmailRecipient(
|
|
||||||
Guid.NewGuid(), Guid.Parse("4CBAED43-2465-4D99-84F1-C8BC6B7025F7"), id, "wsdservers@gmail.com")
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue