361 lines
19 KiB
Plaintext
361 lines
19 KiB
Plaintext
@page
|
||
@using System.Globalization
|
||
@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"/>
|
||
|
||
<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">
|
||
<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">
|
||
<input class="ticket-input-lastname" type="text" placeholder="Прізвище" @(HttpContext.Session.GetInt32("UserId").HasValue ? "" : "readonly") asp-for="PassengerLastName"/>
|
||
<div class="ticket-validation-error"><span asp-validation-for="PassengerLastName"></span></div>
|
||
</div>
|
||
<div class="ticket-input-item" style="margin-left: 0.5rem; margin-right: 0.5rem">
|
||
<input class="ticket-input-firstname" type="text" placeholder="Ім'я" @(HttpContext.Session.GetInt32("UserId").HasValue ? "" : "readonly") asp-for="PassengerFirstName"/>
|
||
<div class="ticket-validation-error"><span asp-validation-for="PassengerFirstName"></span></div>
|
||
</div>
|
||
<div class="ticket-input-item" style="margin-left: 0.5rem">
|
||
<select class="ticket-place-select" required @(HttpContext.Session.GetInt32("UserId").HasValue ? "" : "disabled") asp-for="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">@i</option>
|
||
}
|
||
}
|
||
</select>
|
||
<div class="ticket-validation-error"><span asp-validation-for="PassengerPlace"></span></div>
|
||
</div>
|
||
</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(),
|
||
</div>
|
||
<div class="ticket-info-line-right-block">
|
||
@route.Cities.Last().ArrivalTime?.ToString("dd.MM.yyyy"),
|
||
</div>
|
||
<div class="ticket-info-line-right-block">
|
||
@route.Cities.Last().ArrivalTime?.ToString("HH:mm"),
|
||
</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>
|
||
<input class="popup-footer-button" type="submit" form="ticket-form-@route.Id" value="Купити">
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
}
|
||
} |