auto.bus_razor/TicketOffice/Pages/Routes/Index.cshtml
2022-05-12 18:39:29 +03:00

395 lines
21 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

@page
@using System.Globalization
@using TicketOffice.Models
@model TicketOffice.Pages.Routes.IndexModel
@{
Layout = "~/Pages/Shared/_Layout.cshtml";
ViewData["Title"] = "Пошу маршрутів";
CultureInfo.CurrentCulture = CultureInfo.GetCultureInfo("uk-UA");
}
<link rel="stylesheet" href="~/css/Routes.css"/>
<link rel="stylesheet" href="~/css/Popup.css"/>
<div class="wrapper">
<form class="search-block">
<div class="opt">
<div class="station">
<div class="title">
Звідки
</div>
<input class="search-input" type="text" autocomplete="off" asp-for="From">
</div>
<a class="change-dir"></a>
<div class="station">
<div class="title">
Куди
</div>
<input class="search-input" type="text" autocomplete="off" asp-for="To">
</div>
<div class="date">
<div class="title">
Дата відправлення
</div>
<input class="search-input" type="date" value="@Model.Date.ToString("yyyy-MM-dd")" asp-for="Date">
</div>
<div class="search-btn">
<input type="submit" class="search-btn" value="Пошук"/>
</div>
</div>
</form>
@if (Model.Routes != null && Model.Routes.Count > 0)
{
<div class="route-list">
<table>
<thead>
<tr>
<th>
№ автобуса
@if (Model.SortString == "increasingNumber")
{
<a class="link-btn-sort" asp-page-handler="SortByNumber" asp-route-SortString="descendingNumber" asp-route-From=@Model.From a in a asp-route-To=@Model.To asp-route-Date=@Model.Date.ToString("yyyy-MM-dd")>🠕</a>
}
else if (Model.SortString == "descendingNumber")
{
<a class="link-btn-sort" asp-page-handler="SortByNumber" asp-route-SortString="increasingNumber" asp-route-From=@Model.From a in a asp-route-To=@Model.To asp-route-Date=@Model.Date.ToString("yyyy-MM-dd")>🠗</a>
}
else
{
<a class="link-btn-sort" asp-page-handler="SortByNumber" asp-route-SortString="increasingNumber" asp-route-From=@Model.From a in a asp-route-To=@Model.To asp-route-Date=@Model.Date.ToString("yyyy-MM-dd")>⮁</a>
}
</th>
<th>
Звідки / Куди
</th>
<th>
Дата
</th>
<th>
<div class="departure">
Відправлення
@if (Model.SortString == "increasingDeparture")
{
<a class="link-btn-sort" asp-page-handler="SortByDeparture" asp-route-SortString="descendingDeparture" asp-route-From=@Model.From a in a asp-route-To=@Model.To asp-route-Date=@Model.Date.ToString("yyyy-MM-dd")>🠕</a>
}
else if (Model.SortString == "descendingDeparture")
{
<a class="link-btn-sort" asp-page-handler="SortByDeparture" asp-route-SortString="increasingDeparture" asp-route-From=@Model.From a in a asp-route-To=@Model.To asp-route-Date=@Model.Date.ToString("yyyy-MM-dd")>🠗</a>
}
else
{
<a class="link-btn-sort" asp-page-handler="SortByDeparture" asp-route-SortString="increasingDeparture" asp-route-From=@Model.From a in a asp-route-To=@Model.To asp-route-Date=@Model.Date.ToString("yyyy-MM-dd")>⮁</a>
}
</div>
<div class="arrival">
Прибуття
@if (Model.SortString == "increasingArrival")
{
<a class="link-btn-sort" asp-page-handler="SortByArrival" asp-route-SortString="descendingArrival" asp-route-From=@Model.From a in a asp-route-To=@Model.To asp-route-Date=@Model.Date.ToString("yyyy-MM-dd")>🠕</a>
}
else if (Model.SortString == "descendingArrival")
{
<a class="link-btn-sort" asp-page-handler="SortByArrival" asp-route-SortString="increasingArrival" asp-route-From=@Model.From a in a asp-route-To=@Model.To asp-route-Date=@Model.Date.ToString("yyyy-MM-dd")>🠗</a>
}
else
{
<a class="link-btn-sort" asp-page-handler="SortByArrival" asp-route-SortString="increasingArrival" asp-route-From=@Model.From a in a asp-route-To=@Model.To asp-route-Date=@Model.Date.ToString("yyyy-MM-dd")>⮁</a>
}
</div>
</th>
<th>
Тривалість
@if (Model.SortString == "increasingDuration")
{
<a class="link-btn-sort" asp-page-handler="SortByDuration" asp-route-SortString="descendingDuration" asp-route-From=@Model.From a in a asp-route-To=@Model.To asp-route-Date=@Model.Date.ToString("yyyy-MM-dd")>🠕</a>
}
else if (Model.SortString == "descendingDuration")
{
<a class="link-btn-sort" asp-page-handler="SortByDuration" asp-route-SortString="increasingDuration" asp-route-From=@Model.From a in a asp-route-To=@Model.To asp-route-Date=@Model.Date.ToString("yyyy-MM-dd")>🠗</a>
}
else
{
<a class="link-btn-sort" asp-page-handler="SortByDuration" asp-route-SortString="increasingDuration" asp-route-From=@Model.From a in a asp-route-To=@Model.To asp-route-Date=@Model.Date.ToString("yyyy-MM-dd")>⮁</a>
}
</th>
<th>
Вільніих місць
</th>
<th>
Дії
</th>
</tr>
</thead>
<tbody>
@foreach (var route in Model.Routes)
{
<tr class="table-row">
<td class="num">
<div>@route.Number</div>
<div class="city-list-btn"><a class="city-list-btn" onclick="document.getElementById('popup-city-list-@route.Id').style.display = 'inherit'">Маршрут</a></div>
</td>
<td class="city">
<div>@route.Cities.First().Name</div>
<div>@route.Cities.Last().Name</div>
</td>
<td>
<div class="route-date">
<span>
Відправлення
</span>
<span>
@route.Cities.First().ArrivalTime?.ToString("f").Split(",")[0].ToLower(),
@route.Cities.First().DepartureTime?.ToString("dd.MM.yyyy")
</span>
</div>
<div class="route-date">
<span>Прибуття</span>
<span>
@route.Cities.Last().ArrivalTime?.ToString("f").Split(",")[0].ToLower(),
@route.Cities.Last().ArrivalTime?.ToString("dd.MM.yyyy")
</span>
</div>
</td>
<td class="time">
<div>@route.Cities.First().DepartureTime?.ToString("HH:mm")</div>
<div>@route.Cities.Last().ArrivalTime?.ToString("HH:mm")</div>
</td>
<td class="duration">
@{ TimeSpan? duration = route.Cities.Last().ArrivalTime - route.Cities.First().DepartureTime; }
@($"{duration?.TotalHours.ToString().Split(",")[0]}:{duration?.Minutes}")
</td>
<td class="capacity">
@(route.Capacity - route.Tickets.Count)
</td>
<td class="action">
<a class="link-btn-choose" onclick="document.getElementById('popup-ticket-@route.Id').style.display = 'inherit'">Обрати</a>
</td>
</tr>
}
</tbody>
</table>
</div>
}
else if (Model.Routes == null)
{
<div class="search-error">
<p>Уведіть дату й місто відправлення або прибуття</p>
</div>
}
else
{
<div class="search-error">
<p>По заданому Вами напрямку місць немає</p>
</div>
}
</div>
@if (Model.Routes != null)
{
foreach (var route in Model.Routes)
{
<div class="popup-container" id="popup-city-list-@route.Id">
<div class="popup">
<div class="popup-header">
Автобус №@route.Number
</div>
<div class="popup-body">
<div class="popup-body-main">
<table>
<thead>
<tr class="tr-intermediate">
<th class="th-route">
Інформація
</th>
<th class="th-route">
Місто
</th>
<th class="th-route">
Час прибуття
</th>
<th class="th-route">
Час відправлення
</th>
</tr>
</thead>
<tbody>
<tr class="tr-departure">
<td class="td-route">
Відправлення
</td>
<td class="td-route">
@route.Cities.First().Name
</td>
<td class="td-route">
-
</td>
<td class="td-route">
@route.Cities.First().DepartureTime?.ToString("HH:mm")
</td>
</tr>
@for (int i = 1; i < route.Cities.Count - 1; i++)
{
<tr class="tr-intermediate">
<td class="td-route">
Проміжна станція
</td>
<td class="td-route">
@route.Cities.ToList()[i].Name
</td>
<td class="td-route">
@route.Cities.ToList()[i].ArrivalTime?.ToString("HH:mm")
</td>
<td class="td-route">
@route.Cities.ToList()[i].DepartureTime?.ToString("HH:mm")
</td>
</tr>
}
<tr class="tr-arrival">
<td class="td-route">
Прибуття
</td>
<td class="td-route">
@route.Cities.Last().Name
</td>
<td class="td-route">
@route.Cities.Last().ArrivalTime?.ToString("HH:mm")
</td>
<td class="td-route">
-
</td>
</tr>
</tbody>
</table>
</div>
<div class="popup-body-footer">
<a class="popup-footer-button" onclick="document.getElementById('popup-city-list-@route.Id').style.display = 'none'">Закрити</a>
</div>
</div>
</div>
</div>
}
}
@if (Model.Routes != null)
{
foreach (var route in Model.Routes)
{
<div class="popup-container" id="popup-ticket-@route.Id" style='display:@(Model.Ticket is not null && Model.Ticket.RouteId == route
.Id
? "inherit" : "none")'>
<div class="ticket">
<div class="ticket-header">
Купити квиток
</div>
<div class="ticket-body">
<div class="ticket-body-main">
<form class="ticket-form" method="post" id="ticket-form-@route.Id" novalidate>
<div class="ticket-input-item" style="margin-right: 0.5rem">
@if (HttpContext.Session.GetInt32("UserId").HasValue)
{
<input class="ticket-input-lastname" type="text" placeholder="Прізвище" asp-for="Ticket.PassengerLastName"/>
}
else
{
<input class="ticket-input-lastname" type="text" placeholder="Прізвище" readonly/>
}
<div
class="ticket-validation-error"><span>@(Model.Ticket is not null && Model.Ticket.RouteId == route.Id ? Model.PassengerLastNameValidationError : "")</span></div>
</div>
<div class="ticket-input-item" style="margin-left: 0.5rem; margin-right: 0.5rem">
@if (HttpContext.Session.GetInt32("UserId").HasValue)
{
<input class="ticket-input-firstname" type="text" placeholder="Ім'я" asp-for="Ticket.PassengerFirstName"/>
}
else
{
<input class="ticket-input-firstname" type="text" placeholder="Ім'я" readonly/>
}
<div
class="ticket-validation-error"><span>@(Model.Ticket is not null && Model.Ticket.RouteId == route.Id ? Model.PassengerFirstNameValidationError : "")</span></div>
</div>
<div class="ticket-input-item" style="margin-left: 0.5rem">
<select class="ticket-place-select" required asp-for="Ticket.PassengerPlace">
<option selected disabled value="">Місце</option>
@for (int i = 1; i <= route.Capacity; i++)
{
if (route.Tickets.Any(t => t.PassengerPlace == i))
{
<option value="@i" disabled>@i - Місце зайняте</option>
}
else
{
<option value="@i">@i</option>
}
}
</select>
<div
class="ticket-validation-error"><span>@(Model.Ticket is not null && Model.Ticket.RouteId == route.Id ? Model.PassengerPlaceValidationError : "")</span></div>
</div>
<input type="number" value="@route.Id" style="display: none;" asp-for="Ticket.RouteId"/>
<input type="number" value="@HttpContext.Session.GetInt32("UserId")" style="display: none;" asp-for="Ticket.UserId"/>
</form>
<div class="ticket-info">
<div class="ticket-info-line">
<div class="ticket-info-line-left">
Номер маршруту
</div>
<div class="ticket-info-line-right">
№ @route.Number
</div>
</div>
<div class="ticket-info-line">
<div class="ticket-info-line-left">
Дата відправлення
</div>
<div class="ticket-info-line-right">
@route.Cities.First().DepartureTime?.ToString("f").Split(",")[0].ToLower(),
@route.Cities.First().DepartureTime?.ToString("dd.MM.yyyy"),
@route.Cities.First().DepartureTime?.ToString("HH:mm"),
@route.Cities.First().Name
</div>
</div>
<div class="ticket-info-line">
<div class="ticket-info-line-left">
Дата прибуття
</div>
<div class="ticket-info-line-right">
<div class="ticket-info-line-right-block">
@route.Cities.Last().ArrivalTime?.ToString("f").Split(",")[0].ToLower(),&nbsp;
</div>
<div class="ticket-info-line-right-block">
@route.Cities.Last().ArrivalTime?.ToString("dd.MM.yyyy"),&nbsp;
</div>
<div class="ticket-info-line-right-block">
@route.Cities.Last().ArrivalTime?.ToString("HH:mm"),&nbsp;
</div>
<div class="ticket-info-line-right-block">
@route.Cities.Last().Name
</div>
</div>
</div>
</div>
</div>
<div class="ticket-body-footer">
<a class="popup-footer-link-button" onclick="document.getElementById('popup-ticket-@route.Id').style.display = 'none'">Закрити</a>
@if (HttpContext.Session.GetString("UserId") != null)
{
<input class="popup-footer-button" type="submit" form="ticket-form-@route.Id" value="Купити">
}
else
{
<a class="popup-footer-link-button" href="/Auth/Login">Авторизуватись</a>
}
</div>
</div>
</div>
</div>
}
}