583 lines
27 KiB
Plaintext
583 lines
27 KiB
Plaintext
@page "/formulaone"
|
|
@using AyCode.Interfaces.StorageHandlers;
|
|
@using TIAM.Entities.Transfers
|
|
@using TIAMSharedUI.Shared.Components
|
|
@using TIAMWebApp.Shared.Application.Interfaces
|
|
@using TIAMWebApp.Shared.Application.Models.ClientSide.UI
|
|
@using TIAMWebApp.Shared.Application.Models.PageModels
|
|
@using AyCode.Services.Loggers
|
|
@using TIAMSharedUI.Pages.Components;
|
|
@using TIAMSharedUI.Shared
|
|
@using TIAMWebApp.Shared.Application.Models.ClientSide.UI.WizardModels
|
|
@using AyCode.Core.Helpers
|
|
@using AyCode.Core.Consts
|
|
@using TIAMSharedUI.Shared.Components.BaseComponents
|
|
@inherits BasePageComponent
|
|
@inject NavigationManager NavManager
|
|
@inject IUserDataService UserDataService;
|
|
@inject IJSRuntime jsRuntime;
|
|
@inject ISecureStorageHandler SecureStorageHandler
|
|
@inject ISessionService sessionService;
|
|
@inject IStringLocalizer<MyResources> localizer;
|
|
@inject NavigationManager navManager
|
|
@inject IAcLogWriterClientBase BrowserConsoleLogWriter
|
|
|
|
@inject ITransferDataService transferDataService
|
|
|
|
<PageTitle>Index</PageTitle>
|
|
|
|
<AuthComponent />
|
|
|
|
<HeroSlider SliderItems="@sliders" PBottom="200px" Height="70vh"></HeroSlider>
|
|
<div class="container" style="position: relative; z-index: 2;">
|
|
<div class="row d-flex justify-content-center">
|
|
<div class="col-12">
|
|
|
|
@{
|
|
if (!showWizard)
|
|
{
|
|
|
|
<DxTabs>
|
|
|
|
<DxTabPage CssClass="text-white" Text="From Budapest">
|
|
<div class="row d-flex justify-content-center p-5 text-white">
|
|
<h2>BUDAPEST - HUNGARORING</h2>
|
|
|
|
<div class="col-lg-3 col-12">
|
|
<div class="card bg-gradient p-3 my-3">
|
|
<div class="card-header">
|
|
|
|
<h5>Early bird sale</h5>
|
|
|
|
</div>
|
|
<div class="card-body text-center">
|
|
<h3>Friday</h3>
|
|
<h4>round trip</h4>
|
|
<img src="_content/TIAMSharedUI/images/f1_b.png" class="img-fluid py-3" />
|
|
<span>Budapest </span> <i class="fa-solid fa-right-left"></i> <span>Hungaroring</span>
|
|
</div>
|
|
<div class="card-footer">
|
|
<div class="row">
|
|
<div class="col-6">
|
|
<p>07.19.2024</p>
|
|
</div>
|
|
<div class="col-6">
|
|
<DxButton CssClass="float-end" Click="() => Book(new int[1] {19}, true, _location1)">Book now</DxButton>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="col-lg-3 col-12">
|
|
<div class="card bg-gradient p-3 my-3">
|
|
<div class="card-header">
|
|
|
|
<h5>Early bird sale</h5>
|
|
|
|
</div>
|
|
<div class="card-body text-center">
|
|
<h3>Saturday</h3>
|
|
<h4>round trip</h4>
|
|
<img src="_content/TIAMSharedUI/images/f1_b.png" class="img-fluid py-3" />
|
|
<span>Budapest </span> <i class="fa-solid fa-right-left"></i> <span>Hungaroring</span>
|
|
</div>
|
|
<div class="card-footer">
|
|
<div class="row">
|
|
<div class="col-6">
|
|
<p>07.20.2024</p>
|
|
</div>
|
|
<div class="col-6">
|
|
<DxButton CssClass="float-end" Click="() => Book(new int[1] {20}, true, _location1)">Book now</DxButton>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="col-lg-3 col-12">
|
|
<div class="card bg-gradient p-3 my-3">
|
|
<div class="card-header">
|
|
|
|
<h5>Early bird sale</h5>
|
|
|
|
</div>
|
|
<div class="card-body text-center">
|
|
<h3>Sunday</h3>
|
|
<h4>round trip</h4>
|
|
<img src="_content/TIAMSharedUI/images/f1_b.png" class="img-fluid py-3" />
|
|
<span>Budapest </span> <i class="fa-solid fa-right-left"></i> <span>Hungaroring</span>
|
|
</div>
|
|
<div class="card-footer">
|
|
<div class="row">
|
|
<div class="col-6">
|
|
<p>07.21.2024</p>
|
|
</div>
|
|
<div class="col-6">
|
|
<DxButton CssClass="float-end" Click="() => Book(new int[1] {21}, true, _location1)">Book now</DxButton>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="col-lg-3 col-12">
|
|
<div class="card bg-gradient p-3 my-3">
|
|
<div class="card-header">
|
|
|
|
<h5>Early bird sale</h5>
|
|
|
|
</div>
|
|
<div class="card-body text-center">
|
|
<h3>3 days</h3>
|
|
<h4>round trip</h4>
|
|
<img src="_content/TIAMSharedUI/images/f1_b.png" class="img-fluid py-3" />
|
|
<span>Budapest </span> <i class="fa-solid fa-right-left"></i> <span>Hungaroring</span>
|
|
</div>
|
|
<div class="card-footer">
|
|
<div class="row">
|
|
<div class="col-6">
|
|
<p>07.19-21.2024</p>
|
|
</div>
|
|
<div class="col-6">
|
|
<DxButton CssClass="float-end" Click="() => Book(new int[3] {19,20,21}, true, _location1)">Book now</DxButton>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</DxTabPage>
|
|
<DxTabPage CssClass="text-white" Text="Liszt Ferenc Airport">
|
|
<div class="row d-flex justify-content-center p-5 text-white">
|
|
<h2>AIRPORT - HUNGARORING</h2>
|
|
|
|
<div class="col-lg-3 col-12">
|
|
<div class="card bg-white p-3 my-3">
|
|
<div class="card-body">
|
|
<h3>One way transfer</h3>
|
|
</div>
|
|
<div class="card-footer">
|
|
<div class="row">
|
|
<div class="col-5">
|
|
<p>07.19.2024</p>
|
|
</div>
|
|
<div class="col-7">
|
|
<DxButton CssClass="float-end" Click="() => Book(new int[1] {19}, false, _location2)">Book now</DxButton>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="col-lg-3 col-12">
|
|
<div class="card bg-white p-3 my-3">
|
|
<div class="card-body">
|
|
<h3>One way transfer</h3>
|
|
</div>
|
|
<div class="card-footer">
|
|
<div class="row">
|
|
<div class="col-5">
|
|
<p>07.20.2024</p>
|
|
</div>
|
|
<div class="col-7">
|
|
<DxButton CssClass="float-end" Click="() => Book(new int[1] {20}, false, _location2)">Book now</DxButton>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="col-lg-3 col-12">
|
|
<div class="card bg-white p-3 my-3">
|
|
<div class="card-body">
|
|
<h3>One way transfer</h3>
|
|
</div>
|
|
<div class="card-footer">
|
|
<div class="row">
|
|
<div class="col-5">
|
|
<p>07.21.2024</p>
|
|
</div>
|
|
<div class="col-7">
|
|
<DxButton CssClass="float-end" Click="() => Book(new int[1] {21}, false, _location2)">Book now</DxButton>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
</DxTabPage>
|
|
<DxTabPage CssClass="text-white" Text="Other than Budapest">
|
|
<div class="row d-flex justify-content-center p-5 text-white">
|
|
<h2>FROM LOCATION OUTSIDE OF BUDAPEST</h2>
|
|
|
|
<div class="col-lg-3 col-12">
|
|
<div class="card bg-white p-3 my-3">
|
|
<div class="card-body">
|
|
<h3>Friday round trip</h3>
|
|
<i class="fa-solid fa-right-left"></i>
|
|
</div>
|
|
<div class="card-footer">
|
|
<div class="row">
|
|
<div class="col-5">
|
|
<p>07.19.2024</p>
|
|
</div>
|
|
<div class="col-7">
|
|
<DxButton CssClass="float-end" Click="() => Book(new int[1] {19}, true, _location3)">Book now</DxButton>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="col-lg-3 col-12">
|
|
<div class="card bg-white p-3 my-3">
|
|
<div class="card-body">
|
|
<h3>Saturday round trip</h3>
|
|
<i class="fa-solid fa-right-left"></i>
|
|
</div>
|
|
<div class="card-footer">
|
|
<div class="row">
|
|
<div class="col-5">
|
|
<p>07.20.2024</p>
|
|
</div>
|
|
<div class="col-7">
|
|
<DxButton CssClass="float-end" Click="() => Book(new int[1] {20}, true, _location3)">Book now</DxButton>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="col-lg-3 col-12">
|
|
<div class="card bg-white p-3 my-3">
|
|
<div class="card-body">
|
|
<h3>Sunday round trip</h3>
|
|
<i class="fa-solid fa-right-left"></i>
|
|
</div>
|
|
<div class="card-footer">
|
|
<div class="row">
|
|
<div class="col-5">
|
|
<p>07.21.2024</p>
|
|
</div>
|
|
<div class="col-7">
|
|
<DxButton CssClass="float-end" Click="() => Book(new int[1] {21}, true, _location3)">Book now</DxButton>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="col-lg-3 col-12">
|
|
<div class="card bg-white p-3 my-3">
|
|
<div class="card-body">
|
|
<h3>3 days round trip bundle</h3>
|
|
<i class="fa-solid fa-right-left"></i>
|
|
</div>
|
|
<div class="card-footer">
|
|
<div class="row">
|
|
<div class="col-5">
|
|
<p>07.19-21.2024</p>
|
|
</div>
|
|
<div class="col-7">
|
|
<DxButton CssClass="float-end" Click="() => Book(new int[3] {19,20,21}, true, _location3)">Book now</DxButton>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</DxTabPage>
|
|
|
|
|
|
</DxTabs>
|
|
|
|
//six cards for the six available services
|
|
|
|
|
|
|
|
}
|
|
else
|
|
{
|
|
<div class="row">
|
|
<div class="col-sm-6 col-12">
|
|
</div>
|
|
<div class="col-sm-6 col-12">
|
|
|
|
<div class="card bg-white p-3">
|
|
<div class="card-header">
|
|
<div class="row">
|
|
<div class="col-9">
|
|
<h5>Early bird sale</h5>
|
|
|
|
</div>
|
|
<div class="col-3">
|
|
<DxButton CssClass="float-end" Click="() => showWizard = false">
|
|
<i class="fa-solid fa-times"></i>
|
|
</DxButton>
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
<div class="card-body">
|
|
<InputWizard Data=@myModel
|
|
OnSubmit="SubmitForm"
|
|
IgnoreReflection="@TransferIgnorList"
|
|
SubmitButtonText="ButtonSend"
|
|
TitleResourceString="TransferTitle"
|
|
SubtitleResourceString="TransferSubtitle"
|
|
CssClass="text-white"></InputWizard>
|
|
</div>
|
|
|
|
|
|
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
}
|
|
}
|
|
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="container mt-5">
|
|
<div class="row align-items-center">
|
|
<div class="col-6 col-xs-12 p-5">
|
|
<h1>Book a Transfer Now for Hungaroring Formula 1</h1>
|
|
<p>Planning to attend the Hungaroring Formula 1 race on July 19-21? Avoid the hassle of finding a taxi on race days and book your transfer with Tour I Am now. Enjoy a stress-free journey with our reliable service and get an exclusive 20% discount!</p>
|
|
|
|
<h2>Why Book with Tour I Am?</h2>
|
|
<ul class="list-unstyled">
|
|
<li><strong>Hard to Find Taxis:</strong> Taxis are scarce on race days. Secure your ride in advance.</li>
|
|
<li><strong>20% Discount:</strong> Book now and enjoy a 20% discount on all transfers.</li>
|
|
<li><strong>Reliable Service:</strong> Count on our punctual and professional drivers to get you to the race on time.</li>
|
|
<li><strong>Comfortable Vehicles:</strong> Travel in comfort with our clean and well-maintained cars.</li>
|
|
<li><strong>Easy Booking:</strong> Simple online booking process. Confirm your ride in minutes.</li>
|
|
</ul>
|
|
|
|
</div>
|
|
<div class="col-6 col-xs-12 p-5">
|
|
<img class="img-fluid" src="_content/TIAMSharedUI/images/f1_1.png" />
|
|
</div>
|
|
<div class="col-6 col-xs-12 p-5">
|
|
<img class="img-fluid" src="_content/TIAMSharedUI/images/f1_2.png" />
|
|
</div>
|
|
<div class="col-6 col-xs-12 p-5">
|
|
|
|
<h2>How to Book</h2>
|
|
<p>Booking your transfer is quick and easy. Visit our <a href="https://touriam.com/booking">booking page</a>, select your dates (July 19-21), and enter the promo code <strong>HUNGARORING20</strong> to get your 20% discount. You can also contact us at <a href="mailto:info@touriam.com">info@touriam.com</a> or call us at (123) 456-7890 for group bookings and inquiries.</p>
|
|
|
|
<h2>Experience the Hungaroring Formula 1 with Ease</h2>
|
|
<p>Don't miss a moment of the action. Book your airport transfer with Tour I Am and enjoy a smooth, hassle-free experience. Travel with peace of mind knowing your transportation is taken care of.</p>
|
|
|
|
<p><a href="https://touriam.com/booking" class="btn btn-primary btn-lg">Book Your Transfer Now</a></p>
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
@code {
|
|
|
|
[CascadingParameter]
|
|
private PopupMessageBox PopupMessageBox { get; set; } = default!;
|
|
|
|
public bool showWizard = false;
|
|
|
|
public string _location1 = "Budapest";
|
|
public string _location2 = "Airport";
|
|
public string _location3 = "Other";
|
|
|
|
public int[] OrderDates;
|
|
public bool OrderIsReturn;
|
|
public string OrderLocation;
|
|
|
|
|
|
public List<HeroSliderItem> sliders = new List<HeroSliderItem>
|
|
{
|
|
new HeroSliderItem
|
|
{
|
|
Title = "Welcome to TIAM",
|
|
ImageUrl = "_content/TIAMSharedUI/images/f1_1.png"
|
|
},
|
|
new HeroSliderItem
|
|
{
|
|
Title = "Welcome to TIAM",
|
|
ImageUrl = "_content/TIAMSharedUI/images/f1_2.png"
|
|
},
|
|
new HeroSliderItem
|
|
{
|
|
Title = "Welcome to TIAM",
|
|
ImageUrl = "_content/TIAMSharedUI/images/f1_3.png"
|
|
},
|
|
};
|
|
|
|
public TransferWizardModel myModel = new TransferWizardModel();
|
|
|
|
public List<string> TransferIgnorList = new List<string>
|
|
{
|
|
"Id",
|
|
"UserId",
|
|
"Destination",
|
|
"PickupAddress",
|
|
"ProductId",
|
|
"PaymentId",
|
|
"FlightNumber",
|
|
"TripDate",
|
|
"FirstName",
|
|
"LastName",
|
|
"UserProductMappingId",
|
|
"UserProductToCarId",
|
|
"ReferralId",
|
|
"Price",
|
|
"Comment"
|
|
};
|
|
|
|
/*protected override void OnAfterRender(bool isFirst)
|
|
{
|
|
message = " Target destination is " + slider.SliderElementId.ToString();
|
|
}*/
|
|
|
|
public async Task SubmitForm(object result)
|
|
{
|
|
var orderModel = result as TransferWizardModel;
|
|
|
|
//check if user exists
|
|
if (sessionService.IsAuthenticated && sessionService.User != null)
|
|
{
|
|
//Basic settings
|
|
orderModel.UserId = sessionService.User.UserModelDto.Id;
|
|
orderModel.ProductId = sessionService.User.UserModelDto.Products.FirstOrDefault()?.Id;
|
|
}
|
|
else
|
|
{
|
|
//cherck if user exists
|
|
var user = await UserDataService.GetUserByEmailAsync(orderModel.EmailAddress);
|
|
|
|
if (user.Id == Guid.Empty)
|
|
user = null;
|
|
|
|
if (user != null)
|
|
{
|
|
orderModel.UserId = user.Id;
|
|
|
|
if (user.Products != null)
|
|
orderModel.ProductId = user.Products.FirstOrDefault()?.Id;
|
|
}
|
|
else
|
|
{
|
|
//if not, create user
|
|
|
|
// Random random = new Random();
|
|
// string chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
|
|
// string password = new string(Enumerable.Repeat(chars, 10)
|
|
// .Select(s => s[random.Next(s.Length)]).ToArray());
|
|
|
|
var password = AcCharsGenerator.NewPassword(AcConst.MinPasswordLength, 16);
|
|
|
|
RegistrationModel regModel = new RegistrationModel
|
|
{
|
|
PhoneNumber = orderModel.PhoneNumber,
|
|
Email = orderModel.EmailAddress,
|
|
Password = password,
|
|
ReferralId = null
|
|
};
|
|
|
|
var bleh = await UserDataService.CreateGuestUser(regModel);
|
|
orderModel.UserId = bleh.user.Id;
|
|
|
|
}
|
|
}
|
|
|
|
await ProcessTransfers(orderModel);
|
|
}
|
|
|
|
protected override void OnInitialized()
|
|
{
|
|
var isLoggedIn = sessionService.IsAuthenticated;
|
|
if (isLoggedIn)
|
|
{
|
|
|
|
BrowserConsoleLogWriter.Info("logged in" + sessionService.User?.UserModelDto.Products.FirstOrDefault()?.Id);
|
|
|
|
}
|
|
}
|
|
|
|
public void Book(int[] dates, bool isReturn, string location)
|
|
{
|
|
myModel.TripDate = new DateTime(2024, 07, dates[0]);
|
|
myModel.Destination = "Hungaroring";
|
|
myModel.PickupAddress = location;
|
|
OrderDates = dates;
|
|
OrderIsReturn = isReturn;
|
|
OrderLocation = location;
|
|
showWizard = true;
|
|
}
|
|
|
|
public async Task<List<Transfer>> ProcessTransfers(TransferWizardModel orderModel)
|
|
{
|
|
List<TransferWizardModel> transferList = new List<TransferWizardModel>();
|
|
double _transferPrice = 0.0f;
|
|
if(orderModel.NumberOfPassengers < 5) {
|
|
switch (OrderDates.Length)
|
|
{
|
|
case (1):
|
|
_transferPrice = 119/2;
|
|
break;
|
|
case (2):
|
|
_transferPrice = 199 / 4;
|
|
break;
|
|
case (3):
|
|
_transferPrice = 269 / 6;
|
|
break;
|
|
}
|
|
}
|
|
else if (orderModel.NumberOfPassengers > 5 && orderModel.NumberOfPassengers <= 8) {
|
|
switch (OrderDates.Length)
|
|
{
|
|
case (1):
|
|
_transferPrice = 219f /2;
|
|
break;
|
|
case (2):
|
|
_transferPrice = 359 / 4;
|
|
break;
|
|
case (3):
|
|
_transferPrice = 489 / 6;
|
|
break;
|
|
}
|
|
}
|
|
|
|
foreach (var date in OrderDates)
|
|
{
|
|
|
|
TransferWizardModel transfer = orderModel.Clone();
|
|
transfer.TripDate = new DateTime(2024, 07, date);
|
|
|
|
|
|
// Outbound trip
|
|
transfer.PickupAddress = OrderLocation;
|
|
transfer.Destination = "Hungaroring";
|
|
transfer.PhoneNumber = orderModel.PhoneNumber;
|
|
transfer.EmailAddress = orderModel.EmailAddress;
|
|
transfer.Price = _transferPrice;
|
|
transferList.Add(transfer);
|
|
|
|
// Return trip
|
|
transfer = orderModel.Clone();
|
|
transfer.TripDate = new DateTime(2024, 07, date);
|
|
transfer.PickupAddress = "Hungaroring";
|
|
transfer.Destination = OrderLocation;
|
|
transfer.PhoneNumber = orderModel.PhoneNumber;
|
|
transfer.EmailAddress = orderModel.EmailAddress;
|
|
transfer.Price = _transferPrice;
|
|
transferList.Add(transfer);
|
|
}
|
|
|
|
var transferResult = await transferDataService.CreateTransfers(transferList);
|
|
BrowserConsoleLogWriter.Info($"Submitted nested form: {transferResult.GetType().FullName}, {transferResult.Count}");
|
|
return transferResult;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|