Участники

This commit is contained in:
Анна Забродина 2024-03-31 22:00:39 +04:00
parent a7ea872d30
commit 17b9a01260
10 changed files with 409 additions and 30 deletions

View File

@ -10,11 +10,12 @@ namespace HotelDataBaseImplement
{ {
if (optionsBuilder.IsConfigured == false) if (optionsBuilder.IsConfigured == false)
{ {
optionsBuilder.UseSqlServer(@"Data Source=LAPTOP-M2G96S06\SQLEXPRESS;Initial Catalog=HotelDataBase;Integrated Security=True;MultipleActiveResultSets=True;;TrustServerCertificate=True"); optionsBuilder.UseSqlServer(@"Data Source=DESKTOP-7DB3VEN\SQLEXPRESS;Initial Catalog=HotelDataBase;Integrated Security=True;MultipleActiveResultSets=True;;TrustServerCertificate=True");
} }
base.OnConfiguring(optionsBuilder); base.OnConfiguring(optionsBuilder);
} }
// DESKTOP-7DB3VEN
// LAPTOP-M2G96S06
public virtual DbSet<Conference> Conferences { set; get; } public virtual DbSet<Conference> Conferences { set; get; }
public virtual DbSet<MealPlan> MealPlans { set; get; } public virtual DbSet<MealPlan> MealPlans { set; get; }
public virtual DbSet<Member> Members { set; get; } public virtual DbSet<Member> Members { set; get; }

View File

@ -29,7 +29,6 @@ namespace HotelHeadwaiterApp.Controllers
return View(); return View();
} }
[HttpGet]
public IActionResult Register() public IActionResult Register()
{ {
return View(); return View();
@ -57,7 +56,6 @@ namespace HotelHeadwaiterApp.Controllers
return; return;
} }
[HttpGet]
public IActionResult Enter() public IActionResult Enter()
{ {
return View(); return View();
@ -78,7 +76,6 @@ namespace HotelHeadwaiterApp.Controllers
Response.Redirect("Index"); Response.Redirect("Index");
} }
[HttpGet]
public IActionResult Privacy() public IActionResult Privacy()
{ {
if (APIClient.Headwaiter == null) if (APIClient.Headwaiter == null)

View File

@ -1,4 +1,5 @@
using HotelContracts.BindingModels; using DocumentFormat.OpenXml.Wordprocessing;
using HotelContracts.BindingModels;
using HotelContracts.ViewModels; using HotelContracts.ViewModels;
using HotelOrganiserApp.Models; using HotelOrganiserApp.Models;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
@ -56,6 +57,7 @@ namespace HotelOrganiserApp.Controllers
return View(); return View();
} }
[HttpPost]
public void Enter(string login, string password) public void Enter(string login, string password)
{ {
if (string.IsNullOrEmpty(login) || string.IsNullOrEmpty(password)) if (string.IsNullOrEmpty(login) || string.IsNullOrEmpty(password))
@ -70,37 +72,180 @@ namespace HotelOrganiserApp.Controllers
Response.Redirect("Index"); Response.Redirect("Index");
} }
public IActionResult Report() public IActionResult Privacy()
{ {
if (APIClient.Organiser == null)
{
return Redirect("~/Home/Enter");
}
return View(APIClient.Organiser);
}
[HttpPost]
public void Privacy(string login, string email, string password, string surname, string name, string patronymic, string telephone)
{
if (APIClient.Organiser == null)
{
throw new Exception("Вы как сюда попали? Сюда вход только авторизованным");
}
if (string.IsNullOrEmpty(login) || string.IsNullOrEmpty(password) || string.IsNullOrEmpty(surname) || string.IsNullOrEmpty(name) || string.IsNullOrEmpty(patronymic))
{
throw new Exception("Введите логин, пароль, фамилию, имя и отчество");
}
APIClient.PostRequest("api/organiser/updatedata", new OrganiserBindingModel
{
Id = APIClient.Organiser.Id,
OrganiserSurname = surname,
OrganiserName = name,
OrganiserPatronymic = patronymic,
OrganiserLogin = login,
OrganiserPassword = password,
OrganiserEmail = email,
OrganiserPhoneNumber = telephone
});
APIClient.Organiser.OrganiserSurname = surname;
APIClient.Organiser.OrganiserName = name;
APIClient.Organiser.OrganiserPatronymic = patronymic;
APIClient.Organiser.OrganiserLogin = login;
APIClient.Organiser.OrganiserPassword = password;
APIClient.Organiser.OrganiserEmail = email;
APIClient.Organiser.OrganiserPhoneNumber = telephone;
Response.Redirect("Index");
}
public IActionResult ListMembers()
{
if (APIClient.Organiser == null)
{
return Redirect("~/Home/Enter");
}
return View(APIClient.GetRequest<List<MemberViewModel>>($"api/member/getmemberlist?organiserId={APIClient.Organiser.Id}"));
}
public IActionResult CreateMember()
{
if (APIClient.Organiser == null)
{
return Redirect("~/Home/Enter");
}
return View(); return View();
} }
public IActionResult BindingRoomAndMealPlan() [HttpPost]
public void CreateMember(string memberSurname, string memberName, string memberPatronymic, string memberPhoneNumber)
{ {
return View(); if (APIClient.Organiser == null)
{
throw new Exception("Необходима авторизация");
}
if (string.IsNullOrEmpty(memberSurname) || string.IsNullOrEmpty(memberName) || string.IsNullOrEmpty(memberPatronymic) || string.IsNullOrEmpty(memberPhoneNumber))
{
throw new Exception("Введите фамилию, имя, отчество и номер телефона");
}
APIClient.PostRequest("api/member/createmember", new MemberBindingModel
{
MemberSurname = memberSurname,
MemberName = memberName,
MemberPatronymic = memberPatronymic,
MemberPhoneNumber = memberPhoneNumber,
OrganiserId = APIClient.Organiser.Id,
});
Response.Redirect("ListMembers");
} }
public IActionResult FormationLunch() public IActionResult UpdateMember()
{ {
return View(); if (APIClient.Organiser == null)
} {
return Redirect("~/Home/Enter");
}
ViewBag.Members = APIClient.GetRequest<List<MemberViewModel>>($"api/member/getmemberlist?organiserId={APIClient.Organiser.Id}");
return View();
}
public IActionResult ShapingLunchIntoRooms() [HttpPost]
{ public void UpdateMember(int member, string memberSurname, string memberName, string memberPatronymic, string memberPhoneNumber)
return View(); {
} if (APIClient.Organiser == null)
{
throw new Exception("Необходима авторизация");
}
if (string.IsNullOrEmpty(memberSurname))
{
throw new Exception("Фамилия не может быть пустая");
}
if (string.IsNullOrEmpty(memberName))
{
throw new Exception("Имя не может быть пустым");
}
if (string.IsNullOrEmpty(memberPatronymic))
{
throw new Exception("Отчество не может быть пустым");
}
if (string.IsNullOrEmpty(memberPhoneNumber))
{
throw new Exception("Номер телефона не может быть пустым");
}
public IActionResult FormationOfLunchInConferenceBookings() APIClient.PostRequest("api/member/updatemember", new MemberBindingModel
{ {
return View(); Id = member,
MemberSurname = memberSurname,
MemberName = memberName,
MemberPatronymic = memberPatronymic,
MemberPhoneNumber = memberPhoneNumber,
OrganiserId = APIClient.Organiser.Id,
});
} Response.Redirect("ListMembers");
public IActionResult ListOfMealPlans() }
{
return View();
}
[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)] public IActionResult DeleteMember()
{
if (APIClient.Organiser == null)
{
return Redirect("~/Home/Enter");
}
ViewBag.Members = APIClient.GetRequest<List<MemberViewModel>>($"api/member/getmemberlist?organiserId={APIClient.Organiser.Id}");
return View();
}
[HttpPost]
public void DeleteMember(int member)
{
if (APIClient.Organiser == null)
{
throw new Exception("Необходима авторизация");
}
APIClient.PostRequest("api/member/deletemember", new MemberBindingModel
{
Id = member
});
Response.Redirect("ListMembers");
}
[HttpGet]
public MemberViewModel? GetMember(int memberId)
{
if (APIClient.Organiser == null)
{
throw new Exception("Необходима авторизация");
}
var result = APIClient.GetRequest<MemberViewModel>($"api/member/getmember?memberid={memberId}");
if (result == null)
{
return default;
}
var memberSurname = result.MemberSurname;
var memberName = result.MemberName;
var memberPatronymic = result.MemberPatronymic;
var memberPhoneNumber = result.MemberPhoneNumber;
return result;
}
[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
public IActionResult Error() public IActionResult Error()
{ {
return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier }); return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });

View File

@ -0,0 +1,47 @@
@{
ViewData["Title"] = "CreateMember";
}
<form method="post">
<div class="text-center">
<h2 class="display-4">Добавление участника</h2>
</div>
<div class="form-group">
<label class="u-label u-text-custom-color-1 u-label-2">Фамилия участника</label>
</div>
<input type="text"
placeholder="Введите фамилию участника"
name="memberSurname"
class="form-control" />
<br>
<div class="form-group">
<label class="u-label u-text-custom-color-1 u-label-2">Имя участника</label>
</div>
<input type="text"
placeholder="Введите имя участника"
name="memberName"
class="form-control"
step="1" />
<br>
<div class="form-group">
<label class="u-label u-text-custom-color-1 u-label-2">Отчество участника</label>
</div>
<input type="text"
placeholder="Введите отчество участника"
name="memberPatronymic"
class="form-control"
step="1" />
<br>
<div class="form-group">
<label class="u-label u-text-custom-color-1 u-label-2">Номер телефона участника</label>
</div>
<input type="text"
placeholder="Введите номер телефона участника"
name="memberPhoneNumber"
class="form-control"
step="1" />
<br>
<div class="u-container-layout u-container-layout-2">
<input type="submit" value="Сохранить" class="btn btn-outline-dark text-center d-flex justify-content-md-center" />
</div>
</form>

View File

@ -0,0 +1,22 @@
@{
ViewData["Title"] = "DeleteMember";
}
<form method="post">
<div class="text-center">
<h2 class="display-4">Удаление участника</h2>
</div>
<div class="form-group">
<label class="u-label u-text-custom-color-1 u-label-1">Участник: </label>
<select id="member" name="member" class="form-control">
@foreach (var member in ViewBag.Members)
{
<option value="@member.Id">@($"{member.MemberSurname} {member.MemberName} {member.MemberPatronymic}")</option>
}
</select>
</div>
<br>
<div class="u-container-layout u-container-layout-2">
<input type="submit" value="Удалить" class="btn btn-outline-dark text-center d-flex justify-content-md-center" />
</div>
</form>

View File

@ -0,0 +1,79 @@
@using HotelContracts.ViewModels
@model List<MemberViewModel>
@{
ViewData["Title"] = "ListMembers";
}
<div class="text-center">
<h2 class="display-4">Список участников</h2>
</div>
<section class="u-clearfix u-section-1" id="sec-e38b">
<div class="u-clearfix u-sheet u-sheet-1">
<div class="u-container-style u-layout-cell u-size-48 u-layout-cell-1">
<div class="u-container-layout u-container-layout-1">
<div class="btn-group" role="group" aria-label="Basic example">
<a asp-area="" asp-controller="Home" asp-action="CreateMember"
class="btn btn-outline-dark mr-2">Добавить</a>
<a asp-area="" asp-controller="Home" asp-action="UpdateMember"
class="btn btn-outline-dark mr-2">Изменить</a>
<a asp-area="" asp-controller="Home" asp-action="DeleteMember"
class="btn btn-outline-dark">Удалить</a>
</div>
<div class="u-table u-table-responsive u-table-1">
<table class="table">
<thead class="thead-dark">
<tr style="height: 31px">
<th class="u-border-1 u-border-grey-50 u-table-cell">
Номер
</th>
<th class="u-border-1 u-border-grey-50 u-table-cell">
Фамилия участника
</th>
<th class="u-border-1 u-border-grey-50 u-table-cell">
Имя участника
</th>
<th class="u-border-1 u-border-grey-50 u-table-cell">
Отчество участника
</th>
<th class="u-border-1 u-border-grey-50 u-table-cell">
Номер телефона
</th>
</tr>
</thead>
<tbody class="u-table-body">
@foreach (var item in Model)
{
<tr style="height: 75px">
<td class="u-border-1 u-border-grey-40 u-border-no-left u-border-no-right u-table-cell">
@Html.DisplayFor(modelItem => item.Id)
</td>
<td class="u-border-1 u-border-grey-40 u-border-no-left u-border-no-right u-table-cell">
@Html.DisplayFor(modelItem => item.MemberSurname)
</td>
<td class="u-border-1 u-border-grey-40 u-border-no-left u-border-no-right u-table-cell">
@Html.DisplayFor(modelItem => item.MemberName)
</td>
<td class="u-border-1 u-border-grey-40 u-border-no-left u-border-no-right u-table-cell">
@Html.DisplayFor(modelItem => item.MemberPatronymic)
</td>
<td class="u-border-1 u-border-grey-40 u-border-no-left u-border-no-right u-table-cell">
@Html.DisplayFor(modelItem => item.MemberPhoneNumber)
</td>
</tr>
}
</tbody>
</table>
</div>
</div>
</div>
</div>
</section>
<style>
.btn-group > .btn {
margin-right: 10px;
}
</style>

View File

@ -34,7 +34,7 @@
<label class="u-label u-text-custom-color-1 u-label-3">Фамилия</label> <label class="u-label u-text-custom-color-1 u-label-3">Фамилия</label>
<input type="text" <input type="text"
placeholder="Введите фамилию" placeholder="Введите фамилию"
name="fio" name="surname"
value="@Model.OrganiserSurname" value="@Model.OrganiserSurname"
class="form-control" /> class="form-control" />
</div> </div>
@ -44,7 +44,7 @@
<label class="u-label u-text-custom-color-1 u-label-3">Имя</label> <label class="u-label u-text-custom-color-1 u-label-3">Имя</label>
<input type="text" <input type="text"
placeholder="Введите имя" placeholder="Введите имя"
name="fio" name="name"
value="@Model.OrganiserName" value="@Model.OrganiserName"
class="form-control" /> class="form-control" />
</div> </div>
@ -54,7 +54,7 @@
<label class="u-label u-text-custom-color-1 u-label-3">Отчество</label> <label class="u-label u-text-custom-color-1 u-label-3">Отчество</label>
<input type="text" <input type="text"
placeholder="Введите отчество" placeholder="Введите отчество"
name="fio" name="patronymic"
value="@Model.OrganiserPatronymic" value="@Model.OrganiserPatronymic"
class="form-control" /> class="form-control" />
</div> </div>

View File

@ -0,0 +1,86 @@
@using HotelContracts.ViewModels;
@using HotelDataModels.Models;
@{
ViewData["Title"] = "UpdateMember";
}
<form method="post">
<div class="text-center">
<h2 class="display-4">Изменение участника</h2>
</div>
<div class="form-group">
<label class="u-label u-text-custom-color-1 u-label-1">Участник: </label>
<div class="u-input u-input-rectangle">
<select id="member" name="member" class="form-control">
@foreach (var member in ViewBag.Members)
{
<option value="@member.Id">@($"{member.MemberSurname} {member.MemberName} {member.MemberPatronymic}")</option>
}
</select>
</div>
</div>
<div class="form-group">
<label class="u-label u-text-custom-color-1 u-label-1">Фамилия участника</label>
<input type="text"
id="memberSurname"
placeholder="Введите фамилию участника"
name="memberSurname"
class="form-control" />
</div>
<div class="form-group">
<label class="u-label u-text-custom-color-1 u-label-1">Имя участника</label>
<input type="text"
id="memberName"
placeholder="Введите имя участника"
name="memberName"
class="form-control" />
</div>
<div class="form-group">
<label class="u-label u-text-custom-color-1 u-label-1">Отчество участника</label>
<input type="text"
id="memberPatronymic"
placeholder="Введите отчество участника"
name="memberPatronymic"
class="form-control" />
</div>
<div class="form-group">
<label class="u-label u-text-custom-color-1 u-label-1">Номер телефона участника</label>
<input type="text"
id="memberPhoneNumber"
placeholder="Введите номер телефона участника"
name="memberPhoneNumber"
class="form-control" />
</div>
<div class="u-align-right u-form-group u-form-submit u-label-top">
<div class="col-8"></div>
<div class="col-4"><input type="submit" value="Сохранить" class="u-active-custom-color-6 u-border-none u-btn u-btn-submit u-button-style u-custom-color-1 u-hover-custom-color-2 u-btn-1" /></div>
</div>
</form>
@section Scripts
{
<script>
function check() {
var member = $('#member').val();
if (member) {
$.ajax({
method: "GET",
url: "/Home/GetMember",
data: { memberId: member },
success: function (result) {
$('#memberSurname').val(result.memberSurname);
$('#memberName').val(result.memberName);
$('#memberPatronymic').val(result.memberPatronymic);
$('#memberPhoneNumber').val(result.memberPhoneNumber);
}
});
};
}
check();
$('#member').on('change', function () {
check();
});
</script>
}

View File

@ -6,5 +6,5 @@
} }
}, },
"AllowedHosts": "*", "AllowedHosts": "*",
"IPAddress": "https://localhost:7093" "IPAddress": "https://localhost:7093/"
} }

View File

@ -6,6 +6,8 @@ using Microsoft.AspNetCore.Mvc;
namespace HotelRestApi.Controllers namespace HotelRestApi.Controllers
{ {
[Route("api/[controller]/[action]")]
[ApiController]
public class MemberController : Controller public class MemberController : Controller
{ {
private readonly ILogger _logger; private readonly ILogger _logger;