Работает фильтрация
This commit is contained in:
parent
9b09498ab2
commit
01ea8b36ca
@ -20,6 +20,7 @@ using DocumentFormat.OpenXml.Bibliography;
|
|||||||
using DocumentFormat.OpenXml.Drawing.Diagrams;
|
using DocumentFormat.OpenXml.Drawing.Diagrams;
|
||||||
using DocumentFormat.OpenXml.Office2016.Drawing.ChartDrawing;
|
using DocumentFormat.OpenXml.Office2016.Drawing.ChartDrawing;
|
||||||
using DocumentFormat.OpenXml.Wordprocessing;
|
using DocumentFormat.OpenXml.Wordprocessing;
|
||||||
|
using Microsoft.EntityFrameworkCore.Metadata.Conventions;
|
||||||
|
|
||||||
namespace EventVisitorClientApp.Controllers
|
namespace EventVisitorClientApp.Controllers
|
||||||
{
|
{
|
||||||
@ -186,14 +187,39 @@ namespace EventVisitorClientApp.Controllers
|
|||||||
/// Óïðàâëåíèå ìåðîïðèÿòèÿìè
|
/// Óïðàâëåíèå ìåðîïðèÿòèÿìè
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public IActionResult MyEvents()
|
public IActionResult MyEvents(string statusFilter, string typeFilter)
|
||||||
{
|
{
|
||||||
if (APIClient.Client == null)
|
if (APIClient.Client == null)
|
||||||
{
|
{
|
||||||
return Redirect("~/Home/Enter");
|
return Redirect("~/Home/Enter");
|
||||||
}
|
}
|
||||||
return View(APIClient.GetRequest<List<EventViewModel>>($"api/main/GetEventList?OrganizerId={APIClient.Client.Id}"));
|
|
||||||
|
var events = APIClient.GetRequest<List<EventViewModel>>($"api/main/GetEventList?OrganizerId={APIClient.Client.Id}");
|
||||||
|
|
||||||
|
var currentDateTime = DateTime.Now;
|
||||||
|
|
||||||
|
// Ôèëüòðàöèÿ ïî ñòàòóñó
|
||||||
|
if (!string.IsNullOrEmpty(statusFilter))
|
||||||
|
{
|
||||||
|
if (statusFilter == "past")
|
||||||
|
{
|
||||||
|
events = events.Where(e => e.TimeStart < currentDateTime).ToList();
|
||||||
}
|
}
|
||||||
|
else if (statusFilter == "future")
|
||||||
|
{
|
||||||
|
events = events.Where(e => e.TimeStart > currentDateTime).ToList();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ôèëüòðàöèÿ ïî òèïó
|
||||||
|
if (!string.IsNullOrEmpty(typeFilter))
|
||||||
|
{
|
||||||
|
events = events.Where(e => e.Type.Equals(typeFilter, StringComparison.OrdinalIgnoreCase)).ToList();
|
||||||
|
}
|
||||||
|
|
||||||
|
return View(events);
|
||||||
|
}
|
||||||
|
|
||||||
public IActionResult CreateEvent()
|
public IActionResult CreateEvent()
|
||||||
{
|
{
|
||||||
if (APIClient.Client == null)
|
if (APIClient.Client == null)
|
||||||
@ -284,10 +310,46 @@ namespace EventVisitorClientApp.Controllers
|
|||||||
DateTime start = (timestart.HasValue) ? DateTime.SpecifyKind(timestart.Value, DateTimeKind.Utc) : existingEvent.TimeStart.ToUniversalTime();
|
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();
|
DateTime end = (timeend.HasValue) ? DateTime.SpecifyKind(timeend.Value, DateTimeKind.Utc) : existingEvent.TimeEnd.ToUniversalTime();
|
||||||
int countRegisterPlace = existingEvent.CountVisitors - existingEvent.FreePlaces;
|
int countRegisterPlace = existingEvent.CountVisitors - existingEvent.FreePlaces;
|
||||||
|
var visitorList = APIClient.GetRequest<List<VisitorViewModel>>($"api/main/GetVisitorList?EventId={id}");
|
||||||
|
string msg = "";
|
||||||
|
if (existingEvent.TimeStart != timestart && existingEvent.Address != address)
|
||||||
|
{
|
||||||
|
msg = $"Âíèìàíèå! Èçìåíèëàñü äàòà íà÷àëà è àäðåññ ìåðîïðèÿòèÿ {existingEvent.Name}. Ìåðîïðèÿòèå íà÷íåòñÿ: {timestart} è ïðîéäåò ïî àäðåññó {address}";
|
||||||
|
|
||||||
|
}
|
||||||
|
else if(existingEvent.TimeStart == timestart && existingEvent.Address != address)
|
||||||
|
{
|
||||||
|
msg = $"Âíèìàíèå! Èçìåíèëñÿ àäðåññ ìåðîïðèÿòèÿ {existingEvent.Name}. Ìåðîïðèÿòèå ïðîéäåò ïî àäðåññó {address}";
|
||||||
|
}
|
||||||
|
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 != "")
|
||||||
|
{
|
||||||
|
if (visitorList.Count != 0)
|
||||||
|
{
|
||||||
|
foreach (var visitor in visitorList)
|
||||||
|
{
|
||||||
|
APIClient.PostRequest("api/main/SendToMail", new MailSendInfoBindingModel
|
||||||
|
{
|
||||||
|
MailAddress = visitor.Email,
|
||||||
|
Subject = "Èçìåíåíèÿ â ìåðîïðèÿòèè",
|
||||||
|
Text = msg
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
APIClient.PostRequest("api/main/UpdateEvent", new EventBindingModel
|
APIClient.PostRequest("api/main/UpdateEvent", new EventBindingModel
|
||||||
{
|
{
|
||||||
Id = id,
|
Id = id,
|
||||||
Name = name,
|
Name = existingEvent.Name,
|
||||||
Description = description,
|
Description = description,
|
||||||
Type = type,
|
Type = type,
|
||||||
ContactPhone = phone,
|
ContactPhone = phone,
|
||||||
|
@ -12,10 +12,35 @@
|
|||||||
|
|
||||||
<div class="text-center mt-4">
|
<div class="text-center mt-4">
|
||||||
@{
|
@{
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
<a class="btn btn-light" asp-action="CreateEvent">Создать мероприятие</a>
|
<a class="btn btn-light" asp-action="CreateEvent">Создать мероприятие</a>
|
||||||
</p>
|
</p>
|
||||||
|
<form method="get" class="row">
|
||||||
|
<div class="col-md-4 mb-3">
|
||||||
|
<label for="statusFilter">Фильтр по статусу:</label>
|
||||||
|
<select class="form-control" id="statusFilter" name="statusFilter">
|
||||||
|
<option value="">Все</option>
|
||||||
|
<option value="future">Будущие</option>
|
||||||
|
<option value="past">Прошедшие</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-4 mb-3">
|
||||||
|
<label for="typeFilter">Фильтр по типу:</label>
|
||||||
|
<select class="form-control" id="typeFilter" name="typeFilter">
|
||||||
|
<option value="">Все</option>
|
||||||
|
<option value="Конференция">Конференция</option>
|
||||||
|
<option value="Встреча">Встреча</option>
|
||||||
|
<option value="Семинар">Семинар</option>
|
||||||
|
<option value="Тренинг">Тренинг</option>
|
||||||
|
<option value="Фестиваль">Фестиваль</option>
|
||||||
|
<option value="Соревнование">Соревнование</option>
|
||||||
|
<option value="Другое">Другое</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-4">
|
||||||
|
<button type="submit" class="btn btn-primary btn-block">Применить фильтр</button>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
<table class="table table-striped table-bordered mt-4">
|
<table class="table table-striped table-bordered mt-4">
|
||||||
<thead class="thead-light">
|
<thead class="thead-light">
|
||||||
<tr>
|
<tr>
|
||||||
@ -75,4 +100,20 @@
|
|||||||
.btn-light:hover {
|
.btn-light:hover {
|
||||||
background-color: #d3d3d3; /* Более тёмный светло-серый при наведении */
|
background-color: #d3d3d3; /* Более тёмный светло-серый при наведении */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.row {
|
||||||
|
display: flex; /* Включаем Flexbox */
|
||||||
|
flex-wrap: wrap; /* Разрешаем перенос на следующую строку при необходимости */
|
||||||
|
align-items: center; /* Выравнивание по вертикали */
|
||||||
|
}
|
||||||
|
|
||||||
|
.col-md-4 {
|
||||||
|
flex: 1; /* Делаем элементы одинаковой ширины */
|
||||||
|
margin-right: 10px; /* Добавляем отступ между элементами */
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-block {
|
||||||
|
width: 100%;
|
||||||
|
background-color:black;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
@ -9,8 +9,7 @@
|
|||||||
<div class="row mb-3">
|
<div class="row mb-3">
|
||||||
<label for="name" class="col-sm-4 col-form-label">Название мероприятия:</label>
|
<label for="name" class="col-sm-4 col-form-label">Название мероприятия:</label>
|
||||||
<div class="col-sm-8">
|
<div class="col-sm-8">
|
||||||
<input type="text" class="form-control" id="name" name="name" value="@Html.DisplayFor(model => model.Name)" required>
|
<input type="text" class="form-control" id="name" name="name" value="@Html.DisplayFor(model => model.Name)" disabled>
|
||||||
<div class="invalid-feedback">Пожалуйста, введите название мероприятия.</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row mb-3">
|
<div class="row mb-3">
|
||||||
|
@ -38,7 +38,6 @@ namespace EventVisitorDatabase.Implements
|
|||||||
public List<EventViewModel> GetFilteredList(EventBindingModel model)
|
public List<EventViewModel> GetFilteredList(EventBindingModel model)
|
||||||
{
|
{
|
||||||
using var context = new EventVisitorDbContext();
|
using var context = new EventVisitorDbContext();
|
||||||
|
|
||||||
return context.Events
|
return context.Events
|
||||||
.Include(x => x.Organizer)
|
.Include(x => x.Organizer)
|
||||||
.Where(x => x.OrganizerId == model.OrganizerId).Select(x => x.GetViewModel).ToList();
|
.Where(x => x.OrganizerId == model.OrganizerId).Select(x => x.GetViewModel).ToList();
|
||||||
|
Loading…
Reference in New Issue
Block a user