Контроллеры: фулл круд
Через сайт: показ, удаление Ошибка: что то там ограчение планпитания id Ну и дезигн сомо сабой сделан :3
This commit is contained in:
parent
031c9815d7
commit
b0cde0c395
@ -1,5 +1,6 @@
|
||||
using HostrelHeadwaiterApp.Models;
|
||||
using HotelContracts.BindingModels;
|
||||
using HotelContracts.SearchModels;
|
||||
using HotelContracts.ViewModels;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using System.Diagnostics;
|
||||
@ -137,6 +138,159 @@ namespace HostrelHeadwaiterApp.Controllers
|
||||
return View(APIClient.GetRequest<List<DinnerViewModel>>($"api/main/getdinnerlist?headwaiterId={APIClient.Headwaiter.Id}"));
|
||||
}
|
||||
|
||||
public IActionResult CreateRoom()
|
||||
{
|
||||
if (APIClient.Headwaiter == null)
|
||||
{
|
||||
return Redirect("~/Home/Enter");
|
||||
}
|
||||
return View();
|
||||
}
|
||||
|
||||
[HttpPost]
|
||||
public void CreateRoom(string roomName, double roomPrice, string roomFrame)
|
||||
{
|
||||
if (APIClient.Headwaiter == null)
|
||||
{
|
||||
throw new Exception("Необходима авторизация");
|
||||
}
|
||||
if (string.IsNullOrEmpty(roomName))
|
||||
{
|
||||
throw new Exception("Введите название");
|
||||
}
|
||||
if (string.IsNullOrEmpty(roomPrice.ToString()))
|
||||
{
|
||||
throw new Exception("Введите цену");
|
||||
}
|
||||
APIClient.PostRequest("api/main/createroom", new RoomBindingModel
|
||||
{
|
||||
RoomName = roomName,
|
||||
RoomPrice = roomPrice,
|
||||
RoomFrame = roomFrame,
|
||||
HeadwaiterId = APIClient.Headwaiter.Id,
|
||||
});
|
||||
Response.Redirect("ListRooms");
|
||||
}
|
||||
|
||||
public IActionResult DeleteRoom()
|
||||
{
|
||||
if (APIClient.Headwaiter == null)
|
||||
{
|
||||
return Redirect("~/Home/Enter");
|
||||
}
|
||||
ViewBag.Rooms = APIClient.GetRequest<List<RoomViewModel>>($"api/main/getroomlist?headwaiterId={APIClient.Headwaiter.Id}");
|
||||
return View();
|
||||
}
|
||||
|
||||
[HttpPost]
|
||||
public void DeleteRoom(int room)
|
||||
{
|
||||
if (APIClient.Headwaiter == null)
|
||||
{
|
||||
throw new Exception("Необходима авторизация");
|
||||
}
|
||||
APIClient.PostRequest("api/main/deleteroom", new RoomBindingModel
|
||||
{
|
||||
Id = room
|
||||
});
|
||||
Response.Redirect("ListRooms");
|
||||
}
|
||||
|
||||
public IActionResult UpdateRoom()
|
||||
{
|
||||
if (APIClient.Headwaiter == null)
|
||||
{
|
||||
return Redirect("~/Home/Enter");
|
||||
}
|
||||
ViewBag.Rooms = APIClient.GetRequest<List<RoomViewModel>>($"api/main/getroomlist?headwaiterId={APIClient.Headwaiter.Id}");
|
||||
return View();
|
||||
}
|
||||
|
||||
[HttpPost]
|
||||
public void UpdateRoom(int room, string roomName, double roomPrice, string roomFrame)
|
||||
{
|
||||
if (APIClient.Headwaiter == null)
|
||||
{
|
||||
throw new Exception("Необходима авторизация");
|
||||
}
|
||||
if (string.IsNullOrEmpty(roomName))
|
||||
{
|
||||
throw new Exception("Введите название");
|
||||
}
|
||||
if (string.IsNullOrEmpty(roomPrice.ToString()))
|
||||
{
|
||||
throw new Exception("Введите цену");
|
||||
}
|
||||
APIClient.PostRequest("api/main/updateroom", new RoomBindingModel
|
||||
{
|
||||
Id = room,
|
||||
RoomName = roomName,
|
||||
RoomPrice = roomPrice,
|
||||
RoomFrame = roomFrame,
|
||||
HeadwaiterId = APIClient.Headwaiter.Id
|
||||
});
|
||||
Response.Redirect("ListRooms");
|
||||
}
|
||||
|
||||
[HttpGet]
|
||||
public Tuple<RoomViewModel, string>? GetRoom(int roomId)
|
||||
{
|
||||
if (APIClient.Headwaiter == null)
|
||||
{
|
||||
throw new Exception("Необходима авторизация");
|
||||
}
|
||||
var result = APIClient.GetRequest<Tuple<RoomViewModel, List<Tuple<string, string>>>>($"api/main/getroom?roomId={roomId}");
|
||||
if (result == null)
|
||||
{
|
||||
return default;
|
||||
}
|
||||
string table = "";
|
||||
for (int i = 0; i < result.Item2.Count; i++)
|
||||
{
|
||||
var dinnerName = result.Item2[i].Item1;
|
||||
var dinnerPrice = result.Item2[i].Item2;
|
||||
table += "<tr style=\"height: 44px\">";
|
||||
table += $"<td class=\"u-border-1 u-border-grey-30 u-table-cell\">{dinnerName}</td>";
|
||||
table += $"<td class=\"u-border-1 u-border-grey-30 u-table-cell\">{dinnerPrice}</td>";
|
||||
table += "</tr>";
|
||||
}
|
||||
return Tuple.Create(result.Item1, table);
|
||||
}
|
||||
|
||||
public IActionResult AddDinnerToRoom()
|
||||
{
|
||||
if (APIClient.Headwaiter == null)
|
||||
{
|
||||
return Redirect("~/Home/Enter");
|
||||
}
|
||||
ViewBag.Rooms = APIClient.GetRequest<List<RoomViewModel>>($"api/main/getroomlist?headwaiterId={APIClient.Headwaiter.Id}");
|
||||
ViewBag.Dinners = APIClient.GetRequest<List<DinnerViewModel>>($"api/main/getdinnerlist?headwaiterId={APIClient.Headwaiter.Id}");
|
||||
return View();
|
||||
}
|
||||
|
||||
[HttpPost]
|
||||
public void AddDinnerToRoom(int room, int dinner)
|
||||
{
|
||||
if (APIClient.Headwaiter == null)
|
||||
{
|
||||
throw new Exception("Необходима авторизация");
|
||||
}
|
||||
APIClient.PostRequest("api/main/AddDinnerToRoom", Tuple.Create(
|
||||
new RoomSearchModel() { Id = room },
|
||||
new DinnerViewModel() { Id = dinner }
|
||||
));
|
||||
Response.Redirect("ListRooms");
|
||||
}
|
||||
|
||||
public IActionResult ListRooms()
|
||||
{
|
||||
if (APIClient.Headwaiter == null)
|
||||
{
|
||||
return Redirect("~/Home/Enter");
|
||||
}
|
||||
return View(APIClient.GetRequest<List<RoomViewModel>>($"api/main/getroomlist?headwaiterId={APIClient.Headwaiter.Id}"));
|
||||
}
|
||||
|
||||
[HttpGet]
|
||||
public IActionResult Privacy()
|
||||
{
|
||||
|
27
Hotel/HostrelHeadwaiterApp/Views/Home/AddDinnerToRoom.cshtml
Normal file
27
Hotel/HostrelHeadwaiterApp/Views/Home/AddDinnerToRoom.cshtml
Normal file
@ -0,0 +1,27 @@
|
||||
@using HotelContracts.ViewModels;
|
||||
@using HotelDataModels.Models;
|
||||
|
||||
@{
|
||||
ViewData["Title"] = "AddDinnerToRoom";
|
||||
}
|
||||
|
||||
@model Dictionary<int, IDinnerModel>
|
||||
|
||||
<form method="post">
|
||||
<div class="u-form-group u-form-name u-label-top">
|
||||
<label class="u-label u-text-custom-color-1 u-label-1">Комнаты: </label>
|
||||
<div class="u-input u-input-rectangle">
|
||||
<select id="room" name="room" class="form-control" asp-items="@(new SelectList(@ViewBag.Rooms, "Id", "RoomName"))"></select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="u-form-group u-form-name u-label-top">
|
||||
<label class="u-label u-text-custom-color-1 u-label-1">Обеды: </label>
|
||||
<div class="u-input u-input-rectangle">
|
||||
<select id="dinner" name="dinner" class="form-control" asp-items="@(new SelectList(@ViewBag.Dinners, "Id", "DinnerName"))"></select>
|
||||
</div>
|
||||
</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>
|
36
Hotel/HostrelHeadwaiterApp/Views/Home/CreateRoom.cshtml
Normal file
36
Hotel/HostrelHeadwaiterApp/Views/Home/CreateRoom.cshtml
Normal file
@ -0,0 +1,36 @@
|
||||
@{
|
||||
ViewData["Title"] = "CreateRoom";
|
||||
}
|
||||
|
||||
<form method="post">
|
||||
<div class="form-group">
|
||||
<label class="u-label u-text-custom-color-1 u-label-1">Название комнаты</label>
|
||||
</div>
|
||||
<input
|
||||
type="text"
|
||||
placeholder="Введите название комнаты"
|
||||
name="roomName"
|
||||
class="form-control"/>
|
||||
<br>
|
||||
<div class="form-group">
|
||||
<label class="u-label u-text-custom-color-1 u-label-2">Цена комнаты</label>
|
||||
</div>
|
||||
<input
|
||||
type="number"
|
||||
placeholder="Введите цену комнаты"
|
||||
name="roomPrice"
|
||||
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="roomFrame"
|
||||
class="form-control"/>
|
||||
|
||||
<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>
|
18
Hotel/HostrelHeadwaiterApp/Views/Home/DeleteRoom.cshtml
Normal file
18
Hotel/HostrelHeadwaiterApp/Views/Home/DeleteRoom.cshtml
Normal file
@ -0,0 +1,18 @@
|
||||
@{
|
||||
ViewData["Title"] = "DeleteRoom";
|
||||
}
|
||||
|
||||
<form method="post">
|
||||
<div class="container d-flex justify-content-center align-items-center0">
|
||||
<div class="card-body">
|
||||
<div class="form-group">
|
||||
<label class="u-label u-text-custom-color-1 u-label-1">Комнаты: </label>
|
||||
<select id="room" name="room" class="form-control" asp-items="@(new SelectList(@ViewBag.Rooms, "Id", "RoomName"))"></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>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
95
Hotel/HostrelHeadwaiterApp/Views/Home/ListRooms.cshtml
Normal file
95
Hotel/HostrelHeadwaiterApp/Views/Home/ListRooms.cshtml
Normal file
@ -0,0 +1,95 @@
|
||||
@using HotelContracts.ViewModels
|
||||
|
||||
@model List<RoomViewModel>
|
||||
|
||||
@{
|
||||
ViewData["Title"] = "ListRooms";
|
||||
}
|
||||
|
||||
<section class="u-clearfix u-section-1" id="sec-e38b">
|
||||
<div class="u-clearfix u-sheet u-sheet-1">
|
||||
<div class="u-clearfix u-layout-wrap u-layout-wrap-1">
|
||||
<div class="u-layout">
|
||||
<div class="u-layout-row">
|
||||
<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="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>
|
||||
</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.RoomFrame)
|
||||
</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.RoomName)
|
||||
</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.RoomPrice)
|
||||
</td>
|
||||
</tr>
|
||||
}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
class="u-container-style u-layout-cell u-size-12 u-layout-cell-2"
|
||||
>
|
||||
<div class="u-container-layout u-container-layout-2">
|
||||
<a
|
||||
asp-area="" asp-controller="Home" asp-action="CreateRoom"
|
||||
class="btn btn-outline-dark text-center d-flex justify-content-md-center"
|
||||
>Добавить</a>
|
||||
|
||||
<a
|
||||
asp-area="" asp-controller="Home" asp-action="UpdateRoom"
|
||||
class="btn btn-outline-dark text-center d-flex justify-content-md-center"
|
||||
>Изменить</a>
|
||||
|
||||
<a
|
||||
asp-area="" asp-controller="Home" asp-action="DeleteRoom"
|
||||
class="btn btn-outline-dark text-center d-flex justify-content-md-center"
|
||||
>Удалить</a>
|
||||
|
||||
<a
|
||||
asp-area="" asp-controller="Home" asp-action="AddDinnerToRoom"
|
||||
style="padding: 10 px"
|
||||
class="btn btn-outline-dark text-center d-flex justify-content-md-center"
|
||||
>Добавить комнату</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
@ -5,9 +5,6 @@
|
||||
ViewData["Title"] = "UpdateDinner";
|
||||
}
|
||||
|
||||
<head>
|
||||
<link rel="stylesheet" href="~/css/createdinner.css" asp-append-version="true" />
|
||||
</head>
|
||||
|
||||
<form method="post">
|
||||
<div class="container d-flex justify-content-center align-items-center">
|
||||
|
92
Hotel/HostrelHeadwaiterApp/Views/Home/UpdateRoom.cshtml
Normal file
92
Hotel/HostrelHeadwaiterApp/Views/Home/UpdateRoom.cshtml
Normal file
@ -0,0 +1,92 @@
|
||||
@using HotelContracts.ViewModels;
|
||||
@using HotelDataModels.Models;
|
||||
|
||||
@{
|
||||
ViewData["Title"] = "UpdateRoom";
|
||||
}
|
||||
|
||||
|
||||
<form method="post">
|
||||
<div class="container d-flex justify-content-center align-items-center">
|
||||
<div class="card-body">
|
||||
<div class="form-group">
|
||||
<label class="u-label u-text-custom-color-1 u-label-1">Комнаты: </label>
|
||||
<select id="room" name="room" class="form-control" asp-items="@(new SelectList(@ViewBag.Rooms, "Id", "RoomName"))"></select>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="u-label u-text-custom-color-1 u-label-1">Название комнаты</label>
|
||||
<input
|
||||
type="text"
|
||||
id="roomName"
|
||||
placeholder="Введите название конференции"
|
||||
name="roomName"
|
||||
class="form-control"/>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="u-label u-text-custom-color-1 u-label-2">Цена комнаты</label>
|
||||
<input
|
||||
type="number"
|
||||
id="roomPrice"
|
||||
placeholder="Выберите начало конференции"
|
||||
name="roomPrice"
|
||||
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="roomFrame"
|
||||
placeholder="Введите название конференции"
|
||||
name="roomFrame"
|
||||
class="form-control"/>
|
||||
</div>
|
||||
<div class="u-table u-table-responsive u-table-1">
|
||||
<label class="u-label u-text-custom-color-1 u-label-1">Участники конференции</label>
|
||||
<table class="u-table-entity">
|
||||
<thead class="u-custom-color-1 u-table-header u-table-header-1">
|
||||
<tr style="height: 44px">
|
||||
<th class="u-border-1 u-border-black u-table-cell">
|
||||
Участники
|
||||
</th>
|
||||
<th class="u-border-1 u-border-black u-table-cell">
|
||||
Гражданство
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody class="u-table-body" id="table-elements">
|
||||
|
||||
</tbody>
|
||||
</table>
|
||||
</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>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
@section Scripts
|
||||
{
|
||||
<script>
|
||||
function check() {
|
||||
var room = $('#room').val();
|
||||
if (room) {
|
||||
$.ajax({
|
||||
method: "GET",
|
||||
url: "/Home/GetRoom",
|
||||
data: { roomId: room },
|
||||
success: function (result) {
|
||||
$('#roomName').val(result.item1.roomName);
|
||||
$('#startDate').val(result.item1.startDate);
|
||||
$('#table-elements').html(result.item2);
|
||||
}
|
||||
});
|
||||
};
|
||||
}
|
||||
check();
|
||||
$('#room').on('change', function () {
|
||||
check();
|
||||
});
|
||||
</script>
|
||||
}
|
@ -29,7 +29,7 @@
|
||||
|
||||
<a class="nav-link " asp-area="" asp-controller="Home" asp-action="ListDinners">Обеды</a>
|
||||
|
||||
<a class="nav-link " asp-area="" asp-controller="Home" asp-action="ShapingDinnerIntoRooms">Комната</a>
|
||||
<a class="nav-link " asp-area="" asp-controller="Home" asp-action="ListRooms">Комнаты</a>
|
||||
|
||||
<a class="nav-link " asp-area="" asp-controller="Home" asp-action="FormationOfDinnerInConferenceBookings">Бронирование конференций</a>
|
||||
|
||||
|
@ -3,6 +3,7 @@ using HotelContracts.BusinessLogicsContracts;
|
||||
using HotelContracts.SearchModels;
|
||||
using HotelContracts.StoragesContracts;
|
||||
using HotelContracts.ViewModels;
|
||||
using HotelDataModels.Models;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
@ -25,6 +26,7 @@ namespace HotelBusinessLogic.BusinessLogics
|
||||
public bool Create(RoomBindingModel model)
|
||||
{
|
||||
CheckModel(model);
|
||||
model.RoomDinners = new();
|
||||
|
||||
if (_roomStorage.Insert(model) == null)
|
||||
{
|
||||
@ -89,6 +91,40 @@ namespace HotelBusinessLogic.BusinessLogics
|
||||
return list;
|
||||
}
|
||||
|
||||
public bool AddDinnerToRoom(RoomSearchModel model, IDinnerModel dinner)
|
||||
{
|
||||
if (model == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(model));
|
||||
}
|
||||
|
||||
_logger.LogInformation("AddDinnerToRoom. RoomName:{RoomName}.Id:{ Id}", model.RoomName, model.Id);
|
||||
var element = _roomStorage.GetElement(model);
|
||||
|
||||
if (element == null)
|
||||
{
|
||||
_logger.LogWarning("AddDinnerToRoom element not found");
|
||||
return false;
|
||||
}
|
||||
|
||||
_logger.LogInformation("AddDinnerToRoom find. Id:{Id}", element.Id);
|
||||
|
||||
element.RoomDinners[dinner.Id] = dinner;
|
||||
|
||||
_roomStorage.Update(new()
|
||||
{
|
||||
Id = element.Id,
|
||||
RoomName = element.RoomName,
|
||||
RoomPrice = element.RoomPrice,
|
||||
RoomFrame = element.RoomFrame,
|
||||
MealPlanId = element.MealPlanId,
|
||||
HeadwaiterId = element.HeadwaiterId,
|
||||
RoomDinners = element.RoomDinners,
|
||||
});
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public bool Update(RoomBindingModel model)
|
||||
{
|
||||
CheckModel(model);
|
||||
|
@ -15,6 +15,6 @@ namespace HotelContracts.BindingModels
|
||||
public int MealPlanId { get; set; }
|
||||
|
||||
public int Id { get; set; }
|
||||
public Dictionary<int, IDinnerModel> RoomDinners { get; set; }
|
||||
public Dictionary<int, IDinnerModel> RoomDinners { get; set; } = new();
|
||||
}
|
||||
}
|
||||
|
@ -1,6 +1,7 @@
|
||||
using HotelContracts.BindingModels;
|
||||
using HotelContracts.SearchModels;
|
||||
using HotelContracts.ViewModels;
|
||||
using HotelDataModels.Models;
|
||||
|
||||
namespace HotelContracts.BusinessLogicsContracts
|
||||
{
|
||||
@ -8,6 +9,7 @@ namespace HotelContracts.BusinessLogicsContracts
|
||||
{
|
||||
List<RoomViewModel>? ReadList(RoomSearchModel? model);
|
||||
RoomViewModel? ReadElement(RoomSearchModel model);
|
||||
bool AddDinnerToRoom(RoomSearchModel model, IDinnerModel dinner);
|
||||
bool Create(RoomBindingModel model);
|
||||
bool Update(RoomBindingModel model);
|
||||
bool Delete(RoomBindingModel model);
|
||||
|
@ -21,7 +21,7 @@ namespace HotelContracts.ViewModels
|
||||
|
||||
public MealPlanViewModel() { }
|
||||
|
||||
[JsonConstructor]
|
||||
//[JsonConstructor]
|
||||
public MealPlanViewModel(Dictionary<int, MemberViewModel> MealPlanMembers)
|
||||
{
|
||||
this.MealPlanMembers = MealPlanMembers.ToDictionary(x => x.Key, x => x.Value as IMemberModel);
|
||||
|
@ -1,6 +1,7 @@
|
||||
|
||||
using HotelDataModels.Models;
|
||||
using System.ComponentModel;
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace HotelContracts.ViewModels
|
||||
{
|
||||
@ -20,7 +21,14 @@ namespace HotelContracts.ViewModels
|
||||
|
||||
[DisplayName("Стоимость комнаты")]
|
||||
public double RoomPrice { get; set; }
|
||||
public Dictionary<int, IDinnerModel> RoomDinners { get; set; }
|
||||
public Dictionary<int, IDinnerModel> RoomDinners { get; set; } = new();
|
||||
|
||||
public RoomViewModel() { }
|
||||
|
||||
[JsonConstructor]
|
||||
public RoomViewModel(Dictionary<int, DinnerViewModel> RoomMembers)
|
||||
{
|
||||
this.RoomDinners = RoomDinners.ToDictionary(x => x.Key, x => x.Value as IDinnerModel);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -9,7 +9,7 @@ namespace HotelDataBaseImplement
|
||||
{
|
||||
if (optionsBuilder.IsConfigured == false)
|
||||
{
|
||||
optionsBuilder.UseSqlServer(@"Data Source=DESKTOP-VG5USAH\SQLEXPRESS;Initial Catalog=HotelDataBaseFull;Integrated Security=True;MultipleActiveResultSets=True;;TrustServerCertificate=True");
|
||||
optionsBuilder.UseSqlServer(@"Data Source=DESKTOP-V0ON61E\SQLEXPRESS;Initial Catalog=HotelDataBaseFul;Integrated Security=True;MultipleActiveResultSets=True;;TrustServerCertificate=True");
|
||||
}
|
||||
base.OnConfiguring(optionsBuilder);
|
||||
}
|
||||
|
@ -44,7 +44,7 @@ namespace HotelDataBaseImplement.Implemets
|
||||
return context.ConferenceBookings
|
||||
.Include(x => x.Dinners)
|
||||
.ThenInclude(x => x.Dinner)
|
||||
.ThenInclude(x => x.RoomDinner)
|
||||
.ThenInclude(x => x.RoomDinners)
|
||||
.ThenInclude(x => x.Room)
|
||||
.Include(x => x.Conference)
|
||||
.Include(x => x.Headwaiter)
|
||||
@ -65,7 +65,7 @@ namespace HotelDataBaseImplement.Implemets
|
||||
return context.ConferenceBookings
|
||||
.Include(x => x.Dinners)
|
||||
.ThenInclude(x => x.Dinner)
|
||||
.ThenInclude(x => x.RoomDinner)
|
||||
.ThenInclude(x => x.RoomDinners)
|
||||
.ThenInclude(x => x.Room)
|
||||
.Include(x => x.Conference)
|
||||
.Include(x => x.Headwaiter)
|
||||
@ -77,7 +77,7 @@ namespace HotelDataBaseImplement.Implemets
|
||||
return context.ConferenceBookings
|
||||
.Include(x => x.Dinners)
|
||||
.ThenInclude(x => x.Dinner)
|
||||
.ThenInclude(x => x.RoomDinner)
|
||||
.ThenInclude(x => x.RoomDinners)
|
||||
.ThenInclude(x => x.Room)
|
||||
.Include(x => x.Conference)
|
||||
.Include(x => x.Headwaiter)
|
||||
@ -88,7 +88,7 @@ namespace HotelDataBaseImplement.Implemets
|
||||
return context.ConferenceBookings
|
||||
.Include(x => x.Dinners)
|
||||
.ThenInclude(x => x.Dinner)
|
||||
.ThenInclude(x => x.RoomDinner)
|
||||
.ThenInclude(x => x.RoomDinners)
|
||||
.ThenInclude(x => x.Room)
|
||||
.Include(x => x.Conference)
|
||||
.Include(x => x.Headwaiter)
|
||||
@ -104,7 +104,7 @@ namespace HotelDataBaseImplement.Implemets
|
||||
return context.ConferenceBookings
|
||||
.Include(x => x.Dinners)
|
||||
.ThenInclude(x => x.Dinner)
|
||||
.ThenInclude(x => x.RoomDinner)
|
||||
.ThenInclude(x => x.RoomDinners)
|
||||
.ThenInclude(x => x.Room)
|
||||
.Include(x => x.Conference)
|
||||
.Include(x => x.Headwaiter)
|
||||
@ -128,7 +128,7 @@ namespace HotelDataBaseImplement.Implemets
|
||||
return context.ConferenceBookings
|
||||
.Include(x => x.Dinners)
|
||||
.ThenInclude(x => x.Dinner)
|
||||
.ThenInclude(x => x.RoomDinner)
|
||||
.ThenInclude(x => x.RoomDinners)
|
||||
.ThenInclude(x => x.Room)
|
||||
.Include(x => x.Conference)
|
||||
.Include(x => x.Headwaiter)
|
||||
@ -144,7 +144,7 @@ namespace HotelDataBaseImplement.Implemets
|
||||
var conferenceBooking = context.ConferenceBookings
|
||||
.Include(x => x.Dinners)
|
||||
.ThenInclude(x => x.Dinner)
|
||||
.ThenInclude(x => x.RoomDinner)
|
||||
.ThenInclude(x => x.RoomDinners)
|
||||
.ThenInclude(x => x.Room)
|
||||
.Include(x => x.Conference)
|
||||
.Include(x => x.Headwaiter)
|
||||
|
@ -41,7 +41,7 @@ namespace HotelDataBaseImplement.Implemets
|
||||
using var context = new HotelDataBase();
|
||||
|
||||
return context.Dinners
|
||||
.Include(x => x.RoomDinner)
|
||||
.Include(x => x.RoomDinners)
|
||||
.ThenInclude(x => x.Room)
|
||||
.Include(x => x.ConferenceBookingDinner)
|
||||
.ThenInclude(x => x.ConferenceBooking)
|
||||
@ -61,25 +61,23 @@ namespace HotelDataBaseImplement.Implemets
|
||||
if (model.HeadwaiterId.HasValue)
|
||||
{
|
||||
return context.Dinners
|
||||
.Include(x => x.RoomDinner)
|
||||
.Include(x => x.RoomDinners)
|
||||
.ThenInclude(x => x.Room)
|
||||
.Include(x => x.ConferenceBookingDinner)
|
||||
.ThenInclude(x => x.ConferenceBooking)
|
||||
.Include(x => x.Headwaiter)
|
||||
.Where(x => x.HeadwaiterId == model.HeadwaiterId)
|
||||
.ToList()
|
||||
.Select(x => x.GetViewModel)
|
||||
.ToList();
|
||||
}
|
||||
|
||||
return context.Dinners
|
||||
.Include(x => x.RoomDinner)
|
||||
.Include(x => x.RoomDinners)
|
||||
.ThenInclude(x => x.Room)
|
||||
.Include(x => x.ConferenceBookingDinner)
|
||||
.ThenInclude(x => x.ConferenceBooking)
|
||||
.Include(x => x.Headwaiter)
|
||||
.Where(x => x.DinnerName.Contains(model.DinnerName))
|
||||
.ToList()
|
||||
.Select(x => x.GetViewModel)
|
||||
.ToList();
|
||||
}
|
||||
@ -89,12 +87,11 @@ namespace HotelDataBaseImplement.Implemets
|
||||
using var context = new HotelDataBase();
|
||||
|
||||
return context.Dinners
|
||||
.Include(x => x.RoomDinner)
|
||||
.Include(x => x.RoomDinners)
|
||||
.ThenInclude(x => x.Room)
|
||||
.Include(x => x.ConferenceBookingDinner)
|
||||
.ThenInclude(x => x.ConferenceBooking)
|
||||
.Include(x => x.Headwaiter)
|
||||
.ToList()
|
||||
.Select(x => x.GetViewModel)
|
||||
.ToList();
|
||||
}
|
||||
|
@ -19,6 +19,7 @@ namespace HotelDataBaseImplement.Implemets
|
||||
using var context = new HotelDataBase();
|
||||
|
||||
var element = context.Rooms
|
||||
.Include(x => x.Dinners)
|
||||
.FirstOrDefault(rec => rec.Id == model.Id);
|
||||
|
||||
if (element != null)
|
||||
@ -34,13 +35,33 @@ namespace HotelDataBaseImplement.Implemets
|
||||
|
||||
public RoomViewModel? GetElement(RoomSearchModel model)
|
||||
{
|
||||
if (!model.Id.HasValue && !model.HeadwaiterId.HasValue)
|
||||
if (!model.Id.HasValue && string.IsNullOrEmpty(model.RoomName))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
using var context = new HotelDataBase();
|
||||
|
||||
return context.Rooms
|
||||
.Include(x => x.Dinners)
|
||||
.ThenInclude(x => x.Dinner)
|
||||
.ThenInclude(x => x.ConferenceBookingDinner)
|
||||
.ThenInclude(x => x.ConferenceBooking)
|
||||
.Include(x => x.MealPlan)
|
||||
.Include(x => x.Headwaiter)
|
||||
.FirstOrDefault(x => (!string.IsNullOrEmpty(model.RoomName) && x.RoomName == model.RoomName) || (model.Id.HasValue && x.Id == model.Id))?
|
||||
.GetViewModel;
|
||||
}
|
||||
|
||||
public List<RoomViewModel> GetFilteredList(RoomSearchModel model)
|
||||
{
|
||||
if (!model.Id.HasValue && !model.HeadwaiterId.HasValue)
|
||||
{
|
||||
return new();
|
||||
}
|
||||
|
||||
using var context = new HotelDataBase();
|
||||
|
||||
if (model.HeadwaiterId.HasValue)
|
||||
{
|
||||
return context.Rooms
|
||||
@ -50,30 +71,12 @@ namespace HotelDataBaseImplement.Implemets
|
||||
.ThenInclude(x => x.ConferenceBooking)
|
||||
.Include(x => x.MealPlan)
|
||||
.Include(x => x.Headwaiter)
|
||||
.FirstOrDefault(x => (model.Id.HasValue && x.Id == model.Id))?
|
||||
.GetViewModel;
|
||||
.Where(x => x.HeadwaiterId == model.HeadwaiterId)
|
||||
.ToList()
|
||||
.Select(x => x.GetViewModel)
|
||||
.ToList();
|
||||
}
|
||||
|
||||
return context.Rooms
|
||||
.Include(x => x.Dinners)
|
||||
.ThenInclude(x => x.Dinner)
|
||||
.ThenInclude(x => x.ConferenceBookingDinner)
|
||||
.ThenInclude(x => x.ConferenceBooking)
|
||||
.Include(x => x.MealPlan)
|
||||
.Include(x => x.Headwaiter)
|
||||
.FirstOrDefault(x => (model.Id.HasValue && x.Id == model.Id))?
|
||||
.GetViewModel;
|
||||
}
|
||||
|
||||
public List<RoomViewModel> GetFilteredList(RoomSearchModel model)
|
||||
{
|
||||
if (string.IsNullOrEmpty(model.RoomName))
|
||||
{
|
||||
return new();
|
||||
}
|
||||
|
||||
using var context = new HotelDataBase();
|
||||
|
||||
return context.Rooms
|
||||
.Include(x => x.Dinners)
|
||||
.ThenInclude(x => x.Dinner)
|
||||
@ -82,6 +85,7 @@ namespace HotelDataBaseImplement.Implemets
|
||||
.Include(x => x.MealPlan)
|
||||
.Include(x => x.Headwaiter)
|
||||
.Where(x => x.RoomName.Contains(model.RoomName))
|
||||
.ToList()
|
||||
.Select(x => x.GetViewModel)
|
||||
.ToList();
|
||||
}
|
||||
@ -96,6 +100,7 @@ namespace HotelDataBaseImplement.Implemets
|
||||
.ThenInclude(x => x.ConferenceBooking)
|
||||
.Include(x => x.MealPlan)
|
||||
.Include(x => x.Headwaiter)
|
||||
.ToList()
|
||||
.Select(x => x.GetViewModel)
|
||||
.ToList();
|
||||
}
|
||||
@ -112,20 +117,41 @@ namespace HotelDataBaseImplement.Implemets
|
||||
|
||||
context.Rooms.Add(newRoom);
|
||||
context.SaveChanges();
|
||||
return newRoom.GetViewModel;
|
||||
|
||||
return context.Rooms
|
||||
.Include(x => x.Dinners)
|
||||
.ThenInclude(x => x.Dinner)
|
||||
.ThenInclude(x => x.ConferenceBookingDinner)
|
||||
.ThenInclude(x => x.ConferenceBooking)
|
||||
.Include(x => x.MealPlan)
|
||||
.Include(x => x.Headwaiter)
|
||||
.FirstOrDefault(x => x.Id == newRoom.Id)
|
||||
?.GetViewModel;
|
||||
}
|
||||
|
||||
public RoomViewModel? Update(RoomBindingModel model)
|
||||
{
|
||||
using var context = new HotelDataBase();
|
||||
var room = context.Rooms.FirstOrDefault(x => x.Id == model.Id);
|
||||
if (room == null)
|
||||
using var transaction = context.Database.BeginTransaction();
|
||||
try
|
||||
{
|
||||
return null;
|
||||
var elem = context.Rooms.FirstOrDefault(rec => rec.Id == model.Id);
|
||||
if (elem == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
elem.Update(model);
|
||||
context.SaveChanges();
|
||||
if (model.RoomDinners != null)
|
||||
elem.UpdateDinners(context, model);
|
||||
transaction.Commit();
|
||||
return elem.GetViewModel;
|
||||
}
|
||||
catch
|
||||
{
|
||||
transaction.Rollback();
|
||||
throw;
|
||||
}
|
||||
room.Update(model);
|
||||
context.SaveChanges();
|
||||
return room.GetViewModel;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -24,6 +24,7 @@ namespace HotelDataBaseImplement.Models
|
||||
|
||||
private Dictionary<int, IDinnerModel> _conferenceBookingDinners = null;
|
||||
|
||||
[NotMapped]
|
||||
public Dictionary<int, IDinnerModel> ConferenceBookingDinners
|
||||
{
|
||||
get
|
||||
|
@ -25,7 +25,7 @@ namespace HotelDataBaseImplement.Models
|
||||
public virtual Headwaiter Headwaiter { get; set; }
|
||||
|
||||
[ForeignKey("DinnerId")]
|
||||
public virtual List<RoomDinner> RoomDinner { get; set; }
|
||||
public virtual List<RoomDinner> RoomDinners { get; set; } = new();
|
||||
|
||||
[ForeignKey("DinnercId")]
|
||||
public virtual List<ConferenceBookingDinner> ConferenceBookingDinner { get; set; }
|
||||
|
@ -30,13 +30,17 @@ namespace HotelDataBaseImplement.Models
|
||||
public virtual List<RoomDinner> Dinners { get; set; }
|
||||
|
||||
private Dictionary<int, IDinnerModel> _roomDinners = null;
|
||||
[NotMapped]
|
||||
public Dictionary<int, IDinnerModel> RoomDinners
|
||||
{
|
||||
get
|
||||
{
|
||||
if (_roomDinners == null)
|
||||
{
|
||||
_roomDinners = Dinners.ToDictionary(recPC => recPC.DinnerId, recPC => (recPC.Dinner as IDinnerModel));
|
||||
using var context = new HotelDataBase();
|
||||
_roomDinners = Dinners
|
||||
.ToDictionary(x => x.DinnerId, x => (context.Dinners
|
||||
.FirstOrDefault(y => y.Id == x.DinnerId)! as IDinnerModel));
|
||||
}
|
||||
return _roomDinners;
|
||||
}
|
||||
@ -83,10 +87,16 @@ namespace HotelDataBaseImplement.Models
|
||||
{
|
||||
var roomDinners = context.RoomDinners.Where(rec => rec.RoomId == model.Id).ToList();
|
||||
|
||||
if (roomDinners != null)
|
||||
if (roomDinners != null && roomDinners.Count > 0)
|
||||
{
|
||||
context.RoomDinners.RemoveRange(roomDinners.Where(rec => !model.RoomDinners.ContainsKey(rec.DinnerId)));
|
||||
context.SaveChanges();
|
||||
|
||||
foreach (var updateDinner in roomDinners)
|
||||
{
|
||||
model.RoomDinners.Remove(updateDinner.DinnerId);
|
||||
}
|
||||
context.SaveChanges();
|
||||
}
|
||||
|
||||
var room = context.Rooms.First(x => x.Id == Id);
|
||||
@ -96,7 +106,7 @@ namespace HotelDataBaseImplement.Models
|
||||
context.RoomDinners.Add(new RoomDinner
|
||||
{
|
||||
Room = room,
|
||||
Dinner = context.Dinners.First(x => x.Id == cm.Key)
|
||||
Dinner = context.Dinners.First(x => x.Id == cm.Key),
|
||||
});
|
||||
context.SaveChanges();
|
||||
}
|
||||
|
@ -15,7 +15,7 @@ namespace HotelDataBaseImplement.Models
|
||||
|
||||
[Required]
|
||||
public int Count { get; set; }
|
||||
public virtual Room Room { get; set; }
|
||||
public virtual Dinner Dinner { get; set; }
|
||||
public virtual Room Room { get; set; } = new();
|
||||
public virtual Dinner Dinner { get; set; } = new();
|
||||
}
|
||||
}
|
||||
|
@ -118,7 +118,7 @@ namespace HotelRestApi.Controllers
|
||||
}
|
||||
|
||||
[HttpGet]
|
||||
public List<RoomViewModel>? GetRoomPlanList(int headwaiterId)
|
||||
public List<RoomViewModel>? GetRoomList(int headwaiterId)
|
||||
{
|
||||
try
|
||||
{
|
||||
@ -427,5 +427,65 @@ namespace HotelRestApi.Controllers
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
[HttpPost]
|
||||
public void UpdateRoom(RoomBindingModel model)
|
||||
{
|
||||
try
|
||||
{
|
||||
model.RoomDinners = null!;
|
||||
_room.Update(model);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "Ошибка обновления данных");
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
[HttpGet]
|
||||
public Tuple<RoomViewModel, List<Tuple<string, double>>>? GetRoom(int roomId)
|
||||
{
|
||||
try
|
||||
{
|
||||
var elem = _room.ReadElement(new RoomSearchModel { Id = roomId });
|
||||
if (elem == null)
|
||||
return null;
|
||||
return Tuple.Create(elem, elem.RoomDinners.Select(x => Tuple.Create(x.Value.DinnerName, x.Value.DinnerPrice)).ToList());
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "Ошибка получения конференции по id={Id}", roomId);
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
[HttpPost]
|
||||
public void DeleteRoom(RoomBindingModel model)
|
||||
{
|
||||
try
|
||||
{
|
||||
_room.Delete(model);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "Ошибка удаления конференции");
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
[HttpPost]
|
||||
public void AddDinnerToRoom(Tuple<RoomSearchModel, DinnerViewModel> model)
|
||||
{
|
||||
try
|
||||
{
|
||||
_room.AddDinnerToRoom(model.Item1, model.Item2);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "Ошибка добавления участника в конференцию.");
|
||||
throw;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk.Web">
|
||||
<Project Sdk="Microsoft.NET.Sdk.Web">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
@ -7,6 +7,10 @@
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="7.0.5">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Microsoft.Extensions.Logging.Log4Net.AspNetCore" Version="6.1.0" />
|
||||
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.2.3" />
|
||||
</ItemGroup>
|
||||
|
Loading…
Reference in New Issue
Block a user