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

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] [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}"); var eventDetails = APIClient.GetRequest<EventViewModel>($"api/main/GetEvent?EventId={id}");
@ -282,11 +282,11 @@ namespace EventVisitorClientApp.Controllers
Subject = "Ðåãèñòðàöèÿ íà ìåðîïðèÿòèå", Subject = "Ðåãèñòðàöèÿ íà ìåðîïðèÿòèå",
Text = "Âû çàðåãåñòðèðîâàíû íà ìåðîïðèÿòèå " + eventDetails.Name + ", êîòîðîå ïðîéäåò " + eventDetails.TimeStart + ". Ïî àäðåñó: " + eventDetails.Address + " ã. " + eventDetails.City + ".\n" + "Ïî âñåì âîïðîñàì ìîæíî îáðàùàòüñÿ ïî òåëåôîíó: " + eventDetails.ContactPhone + " èëè ïî ïî÷òå: " + eventDetails.ContactEmail + ".\n" + "Áóäåì æäàòü Âàñ íà íàøèõ ìåðîïðèÿòèÿõ!" 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 else
{ {
return Json(new { success = false }); Response.Redirect("MyEvents");
} }
} }
@ -361,12 +361,16 @@ namespace EventVisitorClientApp.Controllers
[HttpPost] [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) if (APIClient.Client == null)
{ {
throw new Exception("Íåîáõîäèìà àâòîðèçàöèÿ"); 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 APIClient.PostRequest("api/main/UpdateEvent", new EventBindingModel
{ {
Id = id, Id = id,
@ -378,13 +382,14 @@ namespace EventVisitorClientApp.Controllers
City = city, City = city,
Status = status, Status = status,
ContactEmail = email, ContactEmail = email,
TimeEnd = timeend.ToUniversalTime(), TimeEnd = end,
TimeStart = timestart.ToUniversalTime(), TimeStart = start,
Date = DateTime.Now.ToUniversalTime(), Date = DateTime.Now.ToUniversalTime(),
CountVisitors = count, CountVisitors = count,
FreePlaces = count - countRegisterPlace,
OrganizerId = APIClient.Client.Id OrganizerId = APIClient.Client.Id
}); });
Response.Redirect("MyEvents"); Response.Redirect("/Home/MyEvents");
} }
public IActionResult GetWordFile() public IActionResult GetWordFile()
@ -392,6 +397,12 @@ namespace EventVisitorClientApp.Controllers
return new PhysicalFileResult("F:\\EventVisitor\\wordfile.docx", "application/vnd.openxmlformats-officedocument.wordprocessingml.document"); 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() public IActionResult GetExcelFile()
{ {
return new PhysicalFileResult("F:\\EventVisitor\\excelfile.xlsx", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); 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.Status)</td>
<td>@Html.DisplayFor(modelItem => item.FreePlaces)</td> <td>@Html.DisplayFor(modelItem => item.FreePlaces)</td>
<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-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> <a class="btn btn btn-secondary btn-sm" asp-action="ViewEvent" asp-route-id="@item.Id">Посмотреть</a>
</td> </td>

View File

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

View File

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

View File

@ -29,7 +29,7 @@
</li> </li>
<ul class="navbar-nav ms-auto"> <ul class="navbar-nav ms-auto">
<li class="nav-item"> <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> <button type="submit" class="nav-link btn btn-link text-dark">Выход</button>
</form> </form>
</li> </li>