Реализован выход, исправлено редактирование, добавлены корректные ссылки

This commit is contained in:
EkaterinaR 2024-11-13 21:45:17 +04:00
parent 44cfe0a90b
commit c5eaf380d1
6 changed files with 80 additions and 96 deletions

View File

@ -238,7 +238,7 @@ namespace EventVisitorClientApp.Controllers
}
[HttpPost]
public JsonResult RegistrationOnEvent(int id, string name, string phone, string email, DateTime dayBirth)
public void RegistrationOnEvent(int id, string name, string phone, string email, DateTime dayBirth)
{
var eventDetails = APIClient.GetRequest<EventViewModel>($"api/main/GetEvent?EventId={id}");
@ -282,11 +282,11 @@ namespace EventVisitorClientApp.Controllers
Subject = "Ðåãèñòðàöèÿ íà ìåðîïðèÿòèå",
Text = "Âû çàðåãåñòðèðîâàíû íà ìåðîïðèÿòèå " + eventDetails.Name + ", êîòîðîå ïðîéäåò " + eventDetails.TimeStart + ". Ïî àäðåñó: " + eventDetails.Address + " ã. " + eventDetails.City + ".\n" + "Ïî âñåì âîïðîñàì ìîæíî îáðàùàòüñÿ ïî òåëåôîíó: " + eventDetails.ContactPhone + " èëè ïî ïî÷òå: " + eventDetails.ContactEmail + ".\n" + "Áóäåì æäàòü Âàñ íà íàøèõ ìåðîïðèÿòèÿõ!"
});
return Json(new { success = true });
Response.Redirect("/Home/ResultRegistration");
}
else
{
return Json(new { success = false });
Response.Redirect("MyEvents");
}
}
@ -361,12 +361,16 @@ namespace EventVisitorClientApp.Controllers
[HttpPost]
public void UpdateEvent(int id, string name, string description, string type, string phone, string email, string address, string city, string status, int count, DateTime timestart, DateTime timeend)
public void UpdateEvent(int id, string name, string description, string type, string phone, string email, string address, string city, string status, int count, DateTime? timestart, DateTime? timeend)
{
if (APIClient.Client == null)
{
throw new Exception("Íåîáõîäèìà àâòîðèçàöèÿ");
}
var existingEvent = APIClient.GetRequest<EventViewModel>($"api/main/GetEvent?EventId={id}");
DateTime start = (timestart.HasValue) ? DateTime.SpecifyKind(timestart.Value, DateTimeKind.Utc) : existingEvent.TimeStart.ToUniversalTime();
DateTime end = (timeend.HasValue) ? DateTime.SpecifyKind(timeend.Value, DateTimeKind.Utc) : existingEvent.TimeEnd.ToUniversalTime();
int countRegisterPlace = existingEvent.CountVisitors - existingEvent.FreePlaces;
APIClient.PostRequest("api/main/UpdateEvent", new EventBindingModel
{
Id = id,
@ -378,13 +382,14 @@ namespace EventVisitorClientApp.Controllers
City = city,
Status = status,
ContactEmail = email,
TimeEnd = timeend.ToUniversalTime(),
TimeStart = timestart.ToUniversalTime(),
TimeEnd = end,
TimeStart = start,
Date = DateTime.Now.ToUniversalTime(),
CountVisitors = count,
FreePlaces = count - countRegisterPlace,
OrganizerId = APIClient.Client.Id
});
Response.Redirect("MyEvents");
Response.Redirect("/Home/MyEvents");
}
public IActionResult GetWordFile()
@ -392,6 +397,12 @@ namespace EventVisitorClientApp.Controllers
return new PhysicalFileResult("F:\\EventVisitor\\wordfile.docx", "application/vnd.openxmlformats-officedocument.wordprocessingml.document");
}
public IActionResult Logout()
{
APIClient.Client = null;
return Redirect("~/Home/Enter");
}
public IActionResult GetExcelFile()
{
return new PhysicalFileResult("F:\\EventVisitor\\excelfile.xlsx", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");

View File

@ -35,7 +35,14 @@
<td>@Html.DisplayFor(modelItem => item.Status)</td>
<td>@Html.DisplayFor(modelItem => item.FreePlaces)</td>
<td>
<a class="btn btn-success btn-sm" asp-action="UpdateEvent" asp-route-id="@item.Id">Редактировать</a>
@if (item.TimeStart < DateTime.Now)
{
<button class="btn btn-success btn-sm" disabled>Редактировать</button>
}
else
{
<a class="btn btn-success btn-sm" asp-action="UpdateEvent" asp-route-id="@item.Id">Редактировать</a>
}
<a class="btn btn-danger btn-sm" asp-action="DeleteEvent" asp-route-id="@item.Id">Удалить</a>
<a class="btn btn btn-secondary btn-sm" asp-action="ViewEvent" asp-route-id="@item.Id">Посмотреть</a>
</td>

View File

@ -80,22 +80,7 @@
</div>
</div>
</div>
<div class="modal fade" id="registrationSuccessModal" tabindex="-1" aria-labelledby="registrationSuccessModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="registrationSuccessModalLabel">Успешно зарегистрировано!</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Закрыть"></button>
</div>
<div class="modal-body">
Вы зарегистрировались успешно! Проверьте почту. Мы прислали вам сообщение с информацией о мероприятии.
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Закрыть</button>
</div>
</div>
</div>
</div>
</html>
@ -109,26 +94,4 @@
}
</style>
<script src="~/lib/jquery/dist/jquery.min.js"></script>
<script>
$('#registrationForm').on('submit', function (e) {
e.preventDefault(); // Предотвращаем стандартное поведение формы
$.ajax({
type: "POST",
url: '@Url.Action("RegistrationOnEvent", "Home")',
data: $(this).serialize(), // Сериализуем данные формы
success: function (response) {
// Если регистрация успешна
if (response.success) {
$('#registrationSuccessModal').modal('show'); // Показываем модальное окно
} else {
alert("Нет свободных мест!"); // Или обработка ошибки
}
},
error: function () {
alert("Произошла ошибка при регистрации.");
}
});
});
</script>

View File

@ -2,6 +2,7 @@
Layout = null;
ViewData["Title"] = "Успешная регистрация";
}
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
@ -10,38 +11,33 @@
<link rel="stylesheet" href="~/css/site.css" asp-append-version="true" />
<link rel="stylesheet" href="~/EventVisitorClientApp.styles.css" asp-append-version="true" />
</head>
<div class="container enter mt-5">
<div class="row">
<div class="col-md-12">
<div class="card h-90">
<div class="card-header bg-secondary text-light">
<h2>Успешная регистрация</h2>
</div>
<div class="card-body">
<p>Вы успешно зарегистрированы на мероприятие. Проверьте почту, мы отправили вам всю информацию туда.</p>
<p>Спасибо за регистрацию!</p>
</div>
<body>
<div class="container mt-5">
<div class="row align-items-center justify-content-center">
<div class="col-md-6 text-center">
<h1 class="display-4">Спасибо за регистрацию</h1>
<p class="lead">Проверьте свою электронную почту</p>
</div>
<div class="col-md-6 text-center">
<img src="https://www.pngkey.com/png/full/20-207091_happy-people-cartoon-transparent.png" alt="Счастливые люди" class="img-fluid" />
</div>
</div>
</div>
</div>
<style>
body {
background-color: #f8f9fa;
}
<style>
body {
margin-top: 100px;
background-color: #f8f9fa;
}
.card {
margin-top: 20px;
padding: 20px;
}
h1 {
margin-bottom: 20px; /* Отступ ниже заголовка */
font-weight: bold;
}
.btn-black {
background-color: black; /* Цвет кнопки */
color: white; /* Цвет текста кнопки */
}
.btn-block {
width: 100%; /* Широкая кнопка */
}
</style>
p {
margin: 0; /* Убираем отступы для абзацев */
}
</style>
</body>

View File

@ -3,7 +3,6 @@
@{
ViewData["Title"] = "UpdateEvent";
}
<div class="container mt-5">
<h2 class="text-center mb-4">Редактирование мероприятия</h2>
<form method="post" class="needs-validation" novalidate>
@ -18,7 +17,7 @@
<label for="timestart" class="col-sm-4 col-form-label">Дата и время начала:</label>
<div class="col-sm-8">
<input type="datetime-local" class="form-control" id="timestart" name="timestart"
value="@Model.TimeStart" required>
value="@Model.TimeStart.ToString("yyyy-MM-ddTHH:mm")" required>
<div class="invalid-feedback">Пожалуйста, выберите дату и время начала.</div>
</div>
</div>
@ -26,7 +25,7 @@
<label for="timeend" class="col-sm-4 col-form-label">Дата и время конца:</label>
<div class="col-sm-8">
<input type="datetime-local" class="form-control" id="timeend" name="timeend"
value="@Model.TimeEnd" required>
value="@Model.TimeEnd.ToString("yyyy-MM-ddTHH:mm")" required>
<div class="invalid-feedback">Пожалуйста, выберите дату и время окончания.</div>
</div>
</div>
@ -39,16 +38,20 @@
<div class="row mb-3">
<label for="type" class="col-sm-4 col-form-label">Тип:</label>
<div class="col-sm-8">
<select class="form-select" id="type" name="type">
<option value="">@Html.DisplayFor(model => model.Type)</option>
<option value="Конференция">Конференция</option>
<option value="Встреча">Встреча</option>
<option value="Семинар">Семинар</option>
<option value="Тренинг">Тренинг</option>
<option value="Фестиваль">Фестиваль</option>
<option value="Соревнование">Соревнование</option>
<option value="Другое">Другое</option>
</select>
@Html.DropDownListFor(model => model.Type,
new List<SelectListItem>
{
new SelectListItem { Text = "Конференция", Value = "Конференция" },
new SelectListItem { Text = "Встреча", Value = "Встреча" },
new SelectListItem { Text = "Семинар", Value = "Семинар" },
new SelectListItem { Text = "Тренинг", Value = "Тренинг" },
new SelectListItem { Text = "Фестиваль", Value = "Фестиваль" },
new SelectListItem { Text = "Соревнование", Value = "Соревнование" },
new SelectListItem { Text = "Другое", Value = "Другое" },
},
"Выберете тип",
new { @class = "form-control" }
)
<div class="invalid-feedback">Пожалуйста, выберите тип мероприятия.</div>
</div>
</div>
@ -83,19 +86,23 @@
<div class="row mb-3">
<label for="status" class="col-sm-4 col-form-label">Статус:</label>
<div class="col-sm-8">
<select class="form-select" id="status" name="status" value="@Html.DisplayFor(model => model.Status)">
<option value="">@Html.DisplayFor(model => model.Status)</option>
<option value="Регистрация открыта">Регистрация открыта</option>
<option value="Регистрация закрыта">Регистрация закрыта</option>
</select>
@Html.DropDownListFor(model => model.Status,
new List<SelectListItem>
{
new SelectListItem { Text = "Регистрация открыта", Value = "Регистрация открыта" },
new SelectListItem { Text = "Регистрация закрыта", Value = "Регистрация закрыта" },
},
"Выберете статус",
new { @class = "form-control" }
)
<div class="invalid-feedback">Пожалуйста, выберите статус мероприятия.</div>
</div>
</div>
<div class="row mb-3">
<label for="count" class="col-sm-4 col-form-label">Количество посетителей:</label>
<div class="col-sm-8">
<input type="number" class="form-control" id="count" name="count" value="@Html.DisplayFor(model => model.CountVisitors)" required>
<div class="invalid-feedback">Пожалуйста, введите количество посетителей.</div>
<input type="number" class="form-control" id="count" name="count" value="@Html.DisplayFor(model => model.CountVisitors)" required min="0" />
<div class="invalid-feedback">Пожалуйста, введите количество посетителей. Минимальное количество: 0.</div>
</div>
</div>
<div class="row">

View File

@ -29,7 +29,7 @@
</li>
<ul class="navbar-nav ms-auto">
<li class="nav-item">
<form method="post" asp-area="" asp-controller="Account" asp-action="Logout" id="logoutForm" class="d-inline">
<form method="post" asp-area="" asp-controller="Home" asp-action="Logout" id="logoutForm" class="d-inline">
<button type="submit" class="nav-link btn btn-link text-dark">Выход</button>
</form>
</li>