diff --git a/EventVisitor/EventVisitorClientApp/Controllers/HomeController.cs b/EventVisitor/EventVisitorClientApp/Controllers/HomeController.cs index 8481174..c7c8186 100644 --- a/EventVisitor/EventVisitorClientApp/Controllers/HomeController.cs +++ b/EventVisitor/EventVisitorClientApp/Controllers/HomeController.cs @@ -44,20 +44,27 @@ namespace EventVisitorClientApp.Controllers return View(); } [HttpPost] - public void Enter(string login, string password) - { - if (string.IsNullOrEmpty(login) || string.IsNullOrEmpty(password)) - { - throw new Exception("Введите логин и пароль"); - } - APIClient.Client = APIClient.GetRequest($"api/Organizer/login?login={login}&password={password}"); - if (APIClient.Client == null) - { - throw new Exception("Неверный логин/пароль"); - } - Response.Redirect("Index"); - } - [HttpGet] + public IActionResult Enter(string login, string password) + { + string returnUrl = HttpContext.Request.Headers["Referer"].ToString(); + + if (string.IsNullOrEmpty(login) || string.IsNullOrEmpty(password)) + { + return RedirectToAction("Error", new { errorMessage = "Введите логин и пароль.", returnUrl }); + } + + APIClient.Client = APIClient.GetRequest($"api/Organizer/login?login={login}&password={password}"); + + if (APIClient.Client == null) + { + return RedirectToAction("Error", new { errorMessage = "Неверный логин/пароль.", returnUrl }); + } + + return RedirectToAction("Index"); + } + + + [HttpGet] public IActionResult Privacy() { if (APIClient.Client == null) @@ -123,34 +130,34 @@ namespace EventVisitorClientApp.Controllers /// Методы для организатора /// /// - [HttpGet] - public IActionResult Register() - { - return View(); - } + public IActionResult Logout() { APIClient.Client = null; return Redirect("~/Home/Enter"); } - - public static string GenerateRandomString() + [HttpGet] + public IActionResult Register() { - const string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; - return new string(Enumerable.Repeat(chars, 6) - .Select(s => s[_random.Next(s.Length)]).ToArray()); + return View(); } [HttpPost] - public void Register(string login, string password, string surname, string name, string lastname, string organizationName, string phone, string code) - { - //var confirmationCode = GenerateRandomString(); - //APIClient.PostRequest("api/main/SendToMail", new MailSendInfoBindingModel - //{ - // MailAddress = login, - // Subject = "Код для подтверждения регистрации", - // Text = $"Ваш код для подтверждения регистрации: {confirmationCode}" - //}); + public IActionResult Register(string login, string password, string surname, string name, string lastname, string organizationName, string phone, string code) + { + // Получаем URL страницы, с которой пришли + string returnUrl = HttpContext.Request.Headers["Referer"].ToString(); + + // Проверяем, существует ли пользователь с таким логином + var existingUser = APIClient.GetRequest($"api/Organizer/GetOrganizer?login={login}"); + + // Если пользователь существует, перенаправляем на страницу ошибки + if (existingUser != null) + { + return RedirectToAction("Error", new { errorMessage = "Пользователь с таким email уже существует.", returnUrl }); + } + + // Если пользователя нет, продолжаем с регистрацией APIClient.PostRequest("api/Organizer/Register", new OrganizerBindingModel { Name = name, @@ -161,27 +168,11 @@ namespace EventVisitorClientApp.Controllers Email = login, Password = password }); - Response.Redirect("Enter"); - return; + + return RedirectToAction("Enter"); // Перенаправление на страницу входа } - [HttpPost] - public void CheckCode(string confirmationCode, string login, string password, string surname, string name, string lastname, string organizationName, string phone) - { - // Получаем сохранённый код из сессии - var storedCode = HttpContext.Session.GetString("ConfirmationCode"); - if (storedCode == confirmationCode) - { - - } - else - { - // Обработка неправильного кода, например, ошибка 400 - Response.StatusCode = 400; - return; - } - } /// /// Управление мероприятиями @@ -242,15 +233,23 @@ namespace EventVisitorClientApp.Controllers } [HttpPost] - public void CreateEvent(string name, string description, string type, string phone, string email, string address, string city, string status, int count, DateTime timestart, DateTime timeend) + public IActionResult CreateEvent(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) + string returnUrl = HttpContext.Request.Headers["Referer"].ToString(); + + if (timestart < DateTime.UtcNow) { - throw new Exception("Вы как сюда попали? Сюда вход только авторизованным"); + return RedirectToAction("Error", new { errorMessage = "Дата начала не может быть в прошлом.", returnUrl }); } - string eventId = Guid.NewGuid().ToString(); // Генерация уникального идентификатора для мероприятия - string registrationLink = $"https://localhost:7186/registrationonevent?EventId={eventId}"; // Формирование ссылки на регистрацию + if (timestart >= timeend) + { + return RedirectToAction("Error", new { errorMessage = "Дата начала не может быть позже или равна дате окончания.", returnUrl }); + } + + string eventId = Guid.NewGuid().ToString(); + string registrationLink = $"https://localhost:7186/registrationonevent?EventId={eventId}"; + APIClient.PostRequest("api/main/createevent", new EventBindingModel { @@ -264,27 +263,23 @@ namespace EventVisitorClientApp.Controllers ContactEmail = email, TimeEnd = timeend.ToUniversalTime(), TimeStart = timestart.ToUniversalTime(), - Date = DateTime.Now.ToUniversalTime(), + Date = DateTime.UtcNow, // Используйте UtcNow для текущей даты CountVisitors = count, FreePlaces = count, OrganizerId = APIClient.Client.Id, Link = registrationLink }); - Response.Redirect("MyEvents"); + + return RedirectToAction("MyEvents"); } public IActionResult DeleteEvent(int id) { - // Проверка на авторизацию пользователя if (APIClient.Client == null) { return Redirect("~/Home/Enter"); } - - // Выполнение запроса на удаление мероприятия APIClient.PostRequest($"api/main/DeleteEvent", new EventBindingModel { Id = id }); - - // Перенаправление обратно на страницу с мероприятиями return RedirectToAction("MyEvents"); } @@ -300,7 +295,7 @@ 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 IActionResult 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) { @@ -312,6 +307,19 @@ namespace EventVisitorClientApp.Controllers int countRegisterPlace = existingEvent.CountVisitors - existingEvent.FreePlaces; var visitorList = APIClient.GetRequest>($"api/main/GetVisitorList?EventId={id}"); string msg = ""; + + string returnUrl = HttpContext.Request.Headers["Referer"].ToString(); + + if (timestart < DateTime.UtcNow) + { + return RedirectToAction("Error", new { errorMessage = "Дата начала не может быть в прошлом.", returnUrl }); + } + + if (timestart >= timeend) + { + return RedirectToAction("Error", new { errorMessage = "Дата начала не может быть позже или равна дате окончания.", returnUrl }); + } + if (existingEvent.TimeStart != timestart && existingEvent.Address != address) { msg = $"Внимание! Изменилась дата начала и адресс мероприятия {existingEvent.Name}. Мероприятие начнется: {timestart} и пройдет по адрессу {address}"; @@ -324,12 +332,6 @@ namespace EventVisitorClientApp.Controllers else if(existingEvent.TimeStart != timestart && existingEvent.Address == address) { msg = $"Внимание! Изменилось время начала мероприятия мероприятия {existingEvent.Name}. Мероприятие начнется: {timestart}"; - APIClient.PostRequest("api/main/SendToMail", new MailSendInfoBindingModel - { - MailAddress = email, - Subject = "Изменения в мероприятии", - Text = msg - }); } if (msg != "") { @@ -364,7 +366,7 @@ namespace EventVisitorClientApp.Controllers FreePlaces = count - countRegisterPlace, OrganizerId = APIClient.Client.Id }); - Response.Redirect("/Home/MyEvents"); + return RedirectToAction("MyEvents"); } /// @@ -388,13 +390,16 @@ namespace EventVisitorClientApp.Controllers { // Получите всех посетителей var visitors = APIClient.GetRequest>($"api/main/GetVisitorList?EventId={id}"); + var visitorsFiltered = new List(); + // Обработка поиска if (action == "search" && !string.IsNullOrEmpty(searchTerm)) { - visitors = visitors.Where(v => v.Name.Contains(searchTerm, StringComparison.OrdinalIgnoreCase) || + visitorsFiltered = visitors.Where(v => v.Name.Contains(searchTerm, StringComparison.OrdinalIgnoreCase) || v.Email.Contains(searchTerm, StringComparison.OrdinalIgnoreCase)).ToList(); } + // Обработка сохранения статусов if (action == "save") { foreach (var visitor in visitors) @@ -407,13 +412,23 @@ namespace EventVisitorClientApp.Controllers }); } + // Высвечивание статуса сохранения + TempData["SuccessMessage"] = "Статусы посетителей успешно обновлены."; + // После сохранения перенаправляем обратно на этот же метод с id return RedirectToAction("Visitors", new { id }); } - return View(visitors); // Вернуть представление с отфильтрованным списком + // Если ничего не найдено, вернем всё + if (visitorsFiltered.Any()) + { + return View(visitorsFiltered); + } + + return View(visitors); } + public IActionResult DeleteVisitor(int id) { if (APIClient.Client == null) @@ -459,11 +474,16 @@ namespace EventVisitorClientApp.Controllers } [HttpPost] - public async Task RegistrationOnEventAsync(int id, string name, string phone, string email, DateTime dayBirth) + public async Task RegistrationOnEventAsync(int id, string name, string phone, string email, DateTime dayBirth) { var eventDetails = APIClient.GetRequest($"api/main/GetEvent?EventId={id}"); + string returnUrl = HttpContext.Request.Headers["Referer"].ToString(); - if (eventDetails != null && eventDetails.FreePlaces > 0) + if (dayBirth >= DateTime.Now) + { + return RedirectToAction("Error", new { errorMessage = "Неверная дата рождения.", returnUrl }); + } + if (eventDetails != null && eventDetails.FreePlaces > 0) { int updatedFreePlaces = eventDetails.FreePlaces - 1; var visitorId = await APIClient.PostRequestAsync("api/main/registrationonevent", new VisitorBindingModel @@ -505,11 +525,11 @@ namespace EventVisitorClientApp.Controllers Subject = "Регистрация на мероприятие", Text = "Вы зарегестрированы на мероприятие " + eventDetails.Name + ", которое пройдет " + eventDetails.TimeStart + ". По адресу: " + eventDetails.Address + " г. " + eventDetails.City + ".\n" + "Чтобы отменить регистрацию, нажмите на следующую ссылку:" + cancelLink + ".\n" + "По всем вопросам можно обращаться по телефону: " + eventDetails.ContactPhone + " или по почте: " + eventDetails.ContactEmail + ".\n" + "Будем ждать Вас на наших мероприятиях!" }); - Response.Redirect("/Home/ResultRegistration"); + return Redirect("/Home/ResultRegistration"); } else { - Response.Redirect("MyEvents"); + return Redirect("MyEvents"); } } @@ -569,14 +589,15 @@ namespace EventVisitorClientApp.Controllers } [HttpPost] - public void ViewEvent(int id, string subject, string message) + public IActionResult ViewEvent(int id, string subject, string message) { if (APIClient.Client == null) { throw new Exception("Необходима авторизация"); } var visitorList = APIClient.GetRequest>($"api/main/GetVisitorList?EventId={id}"); - if (visitorList != null) + string returnUrl = HttpContext.Request.Headers["Referer"].ToString(); + if (visitorList.Count != 0) { foreach (var visitor in visitorList) { @@ -588,6 +609,10 @@ namespace EventVisitorClientApp.Controllers }); } } + else + { + return RedirectToAction("Error", new { errorMessage = "Еще нет зарегистрированных пользователей", returnUrl }); + } APIClient.PostRequest("api/main/CreateMessage", new SentMessageBindingModel { Subject = subject, @@ -596,7 +621,7 @@ namespace EventVisitorClientApp.Controllers OrganizerId = APIClient.Client.Id, SentDate = DateTime.Now.ToUniversalTime() }); - Response.Redirect($"/Home/ViewEvent/{id}"); + return Redirect($"/Home/ViewEvent/{id}"); } public IActionResult MessageHistory(int id) @@ -616,7 +641,14 @@ namespace EventVisitorClientApp.Controllers /// public IActionResult GetWordFile() { - return new PhysicalFileResult("F:\\EventVisitor\\wordfile.docx", "application/vnd.openxmlformats-officedocument.wordprocessingml.document"); + var filePath = "F:\\EventVisitor\\wordfile.docx"; + + if (!System.IO.File.Exists(filePath)) + { + return NotFound(); + } + + return new PhysicalFileResult(filePath, "application/vnd.openxmlformats-officedocument.wordprocessingml.document"); } @@ -626,27 +658,31 @@ namespace EventVisitorClientApp.Controllers } - //[HttpPost] - //public void ReportWord(int[] Ids, int id) - //{ - // if (APIClient.Client == null) - // { - // throw new Exception("Вы как суда попали? Суда вход только авторизованным"); - // } + [HttpPost] + public IActionResult ReportWord(int id) + { + if (APIClient.Client == null) + { + throw new Exception("Вы как суда попали? Суда вход только авторизованным"); + } - // List registeredVisitorsIds = APIClient.GetRequest>($"api/main/GetVisitorList?EventId={id}"); + APIClient.PostRequest("api/main/createreporttowordfile", new ReportVisitorsBindingModel + { + EventId = id, + FileName = "F:\\EventVisitor\\wordfile.docx" + }); + return RedirectToAction("GetWordFile"); + + } + + [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)] + public IActionResult Error(string errorMessage, string returnUrl) + { + ViewBag.ErrorMessage = errorMessage ?? "Произошла неизвестная ошибка."; // Дефолтное сообщение + ViewBag.ReturnUrl = returnUrl; // Сохраняем returnUrl + return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier }); + } - // foreach (var item in Ids) - // { - // res.Add(item); - // } - // APIClient.PostRequest("api/main/createreporttowordfile", new ReportVisitorsBindingModel - // { - // Ids = res, - // FileName = "F:\\EventVisitor\\wordfile.docx" - // }); - // Response.Redirect("GetWordFile"); - //} } } diff --git a/EventVisitor/EventVisitorClientApp/Views/Home/CancellationSuccess.cshtml b/EventVisitor/EventVisitorClientApp/Views/Home/CancellationSuccess.cshtml index 1b44ffa..e44f4be 100644 --- a/EventVisitor/EventVisitorClientApp/Views/Home/CancellationSuccess.cshtml +++ b/EventVisitor/EventVisitorClientApp/Views/Home/CancellationSuccess.cshtml @@ -1,6 +1,6 @@ п»ї@{ Layout = null; - ViewData["Title"] = "Успешная регистрация"; + ViewData["Title"] = "Отмена регистрации"; } @@ -16,7 +16,7 @@
-

Вы успещно отменили регистрацию на мероприятие!

+

Вы успешно отменили регистрацию на мероприятие!

diff --git a/EventVisitor/EventVisitorClientApp/Views/Home/CreateEvent.cshtml b/EventVisitor/EventVisitorClientApp/Views/Home/CreateEvent.cshtml index b9aac81..2c6cf27 100644 --- a/EventVisitor/EventVisitorClientApp/Views/Home/CreateEvent.cshtml +++ b/EventVisitor/EventVisitorClientApp/Views/Home/CreateEvent.cshtml @@ -4,7 +4,7 @@
- +
Пожалуйста, введите название мероприятия.
diff --git a/EventVisitor/EventVisitorClientApp/Views/Home/MyEvents.cshtml b/EventVisitor/EventVisitorClientApp/Views/Home/MyEvents.cshtml index 06bb93a..694ddcd 100644 --- a/EventVisitor/EventVisitorClientApp/Views/Home/MyEvents.cshtml +++ b/EventVisitor/EventVisitorClientApp/Views/Home/MyEvents.cshtml @@ -68,7 +68,7 @@ { Редактировать } - Удалить + Удалить Посмотреть diff --git a/EventVisitor/EventVisitorClientApp/Views/Home/RegistrationOnEvent.cshtml b/EventVisitor/EventVisitorClientApp/Views/Home/RegistrationOnEvent.cshtml index a7c5d05..16c6be9 100644 --- a/EventVisitor/EventVisitorClientApp/Views/Home/RegistrationOnEvent.cshtml +++ b/EventVisitor/EventVisitorClientApp/Views/Home/RegistrationOnEvent.cshtml @@ -62,26 +62,22 @@
- +
Пожалуйста, введите e-mail.
- + -
Пожалуйста, введите дату рождения.
- +
- - -