TourIAm/TIAMSharedUI/Pages/Formula1.razor

505 lines
24 KiB
Plaintext

@page "/formulaone"
@using AyCode.Interfaces.StorageHandlers;
@using BlazorAnimation
@using Newtonsoft.Json;
@using TIAM.Entities.Transfers
@using TIAMSharedUI.Shared.Components
@using TIAMWebApp.Shared.Application.Interfaces
@using TIAMWebApp.Shared.Application.Models.ClientSide;
@using AyCode.Blazor.Components;
@using TIAMWebApp.Shared.Application.Models;
@using TIAMWebApp.Shared.Application.Models.ClientSide.UI
@using TIAMWebApp.Shared.Application.Models.PageModels
@using TIAMWebApp.Shared.Application.Utility;
@using System.IdentityModel.Tokens.Jwt;
@using TIAMSharedUI.Pages.Components;
@using TIAMSharedUI.Shared
@using TIAMWebApp.Shared.Application.Models.ClientSide.UI.WizardModels
@inject NavigationManager NavManager
@inject IUserDataService UserDataService;
@inject IJSRuntime jsRuntime;
@inject ISecureStorageHandler SecureStorageHandler
@inject ISessionService sessionService;
@inject IStringLocalizer<MyResources> localizer;
@inject NavigationManager navManager
@inject LogToBrowserConsole logToBrowserConsole
@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>
<CallToActionComponent />
@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 = "https://cdn.discordapp.com/attachments/1009417752978661446/1223738909545201734/adam_the_walking_dad_on_the_racetrack_in_epic_scene_with_sunset_949f618b-40f6-460c-80c8-b1acb1dd609e.png?ex=661af2ac&is=66087dac&hm=a65227652da3b9c165b197f58d031cbdbbea392290a1bca53fc8c768d732b53e&"
},
new HeroSliderItem
{
Title = "Welcome to TIAM",
ImageUrl = "https://cdn.discordapp.com/attachments/1009417752978661446/1223720528544792687/adam_the_walking_dad_a_formula_1_race_track_with_a_formula_1_ra_f9ca52cb-6e1a-4458-929d-99d08bce7c1f.png?ex=661ae18d&is=66086c8d&hm=aa9ef7d602f1f9e42884469b0c556886540400c0a46131d9b06e855e85523140&"
},
new HeroSliderItem
{
Title = "Welcome to TIAM",
ImageUrl = "https://cdn.discordapp.com/attachments/1009417752978661446/1223734873504616580/adam_the_walking_dad_a_formula_1_race_track_with_a_formula_1_ra_09b9f360-9660-41bc-840a-5b0b7a189ef7.png?ex=661aeee9&is=660879e9&hm=6e07a2da7d6de8767f56b4d62e5a268975b62d417e96cd5ed723dcb88f299d65&"
},
};
public TransferWizardModel myModel = new TransferWizardModel();
public List<string> TransferIgnorList = new List<string>
{
"Id",
"UserId",
"Destination",
"PickupAddress",
"ProductId",
"TripDate",
"UserProductMappingId",
"UserProductToCarId",
"ReferralId",
"Price",
"Driver",
"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)
{
//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;
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());
RegistrationModel regModel = new RegistrationModel
{
PhoneNumber = orderModel.PhoneNumber,
Email = orderModel.EmailAddress,
Password = password,
ReferralId = Guid.Empty
};
var bleh = await UserDataService.CreateGuestUser(regModel);
orderModel.UserId = bleh.user.Id;
}
}
await ProcessTransfers(orderModel);
}
protected override void OnInitialized()
{
bool IsLoggedIn = sessionService.IsAuthenticated;
if (IsLoggedIn)
{
logToBrowserConsole.LogToBC("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>();
foreach (var date in OrderDates)
{
TransferWizardModel transfer = orderModel.Clone();
transfer.TripDate = new DateTime(2024, 07, date);
// Outbound trip
transfer.PickupAddress = OrderLocation;
transfer.Destination = "Hungaroring";
TransferList.Add(transfer);
// Return trip
transfer = orderModel.Clone();
transfer.TripDate = new DateTime(2024, 07, date);
transfer.PickupAddress = "Hungaroring";
transfer.Destination = OrderLocation;
TransferList.Add(transfer);
}
var transferResult = await transferDataService.CreateTransfers(TransferList);
logToBrowserConsole.LogToBC($"Submitted nested form: {transferResult.GetType().FullName}, {transferResult.Count}");
return transferResult;
}
}