diff --git a/Hotel/HostrelHeadwaiterApp/Controllers/HomeController.cs b/Hotel/HostrelHeadwaiterApp/Controllers/HomeController.cs index 7309559..f0c0b29 100644 --- a/Hotel/HostrelHeadwaiterApp/Controllers/HomeController.cs +++ b/Hotel/HostrelHeadwaiterApp/Controllers/HomeController.cs @@ -382,5 +382,177 @@ namespace HostrelHeadwaiterApp.Controllers Response.Redirect("Enter"); return; } + + public IActionResult CreateConferenceBooking() + { + if (APIClient.Headwaiter == null) + { + return Redirect("~/Home/Enter"); + } + return View(); + } + + [HttpPost] + public void CreateConferenceBooking(string nameHall) + { + if (string.IsNullOrEmpty(nameHall)) + { + throw new Exception("Введите название"); + } + if (APIClient.Headwaiter == null) + { + throw new Exception("Необходима авторизация"); + } + + APIClient.PostRequest("api/main/createconferenceBooking", new ConferenceBookingBindingModel + { + NameHall = nameHall, + HeadwaiterId = APIClient.Headwaiter.Id, + }); + Response.Redirect("ListConferenceBookings"); + } + + public IActionResult DeleteConferenceBooking() + { + if (APIClient.Headwaiter == null) + { + return Redirect("~/Home/Enter"); + } + ViewBag.ConferenceBookings = APIClient.GetRequest>($"api/main/getconferenceBookinglist?headwaiterId={APIClient.Headwaiter.Id}"); + return View(); + } + + [HttpPost] + public void DeleteConferenceBooking(int conferenceBooking) + { + if (APIClient.Headwaiter == null) + { + throw new Exception("Необходима авторизация"); + } + APIClient.PostRequest("api/main/deleteconferenceBooking", new ConferenceBookingBindingModel + { + Id = conferenceBooking + }); + Response.Redirect("ListConferenceBookings"); + } + + public IActionResult UpdateConferenceBooking() + { + if (APIClient.Headwaiter == null) + { + return Redirect("~/Home/Enter"); + } + ViewBag.ConferenceBookings = APIClient.GetRequest>($"api/main/getconferenceBookinglist?headwaiterId={APIClient.Headwaiter.Id}"); + return View(); + } + + [HttpPost] + public void UpdateConferenceBooking(int conferenceBooking, string nameHall) + { + if (APIClient.Headwaiter == null) + { + throw new Exception("Необходима авторизация"); + } + if (string.IsNullOrEmpty(nameHall)) + { + throw new Exception("Название не может быть пустым"); + } + APIClient.PostRequest("api/main/updateconferenceBooking", new ConferenceBookingBindingModel + { + Id = conferenceBooking, + NameHall = nameHall, + HeadwaiterId = APIClient.Headwaiter.Id + }); + Response.Redirect("ListConferenceBookings"); + } + + [HttpGet] + public Tuple? GetConferenceBooking(int conferenceBookingId) + { + if (APIClient.Headwaiter == null) + { + throw new Exception("Необходима авторизация"); + } + var result = APIClient.GetRequest>>>($"api/main/getconferenceBooking?conferenceBookingId={conferenceBookingId}"); + 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 += ""; + table += $"{dinnerName}"; + table += $"{dinnerPrice}"; + table += ""; + } + return Tuple.Create(result.Item1, table); + } + + public IActionResult AddDinnerToConferenceBooking() + { + if (APIClient.Headwaiter == null) + { + return Redirect("~/Home/Enter"); + } + ViewBag.ConferenceBookings = APIClient.GetRequest>($"api/main/getconferenceBookinglist?headwaiterId={APIClient.Headwaiter.Id}"); + ViewBag.Dinners = APIClient.GetRequest>($"api/main/getdinnerlist?headwaiterId={APIClient.Headwaiter.Id}"); + return View(); + } + + [HttpPost] + public void AddDinnerToConferenceBooking(int conferenceBooking, int dinner) + { + if (APIClient.Headwaiter == null) + { + throw new Exception("Необходима авторизация"); + } + APIClient.PostRequest("api/main/AddDinnerToConferenceBooking", Tuple.Create( + new ConferenceBookingSearchModel() { Id = conferenceBooking }, + new DinnerViewModel() { Id = dinner } + )); + Response.Redirect("ListConferenceBookings"); + } + + public IActionResult ListConferenceBookings() + { + if (APIClient.Headwaiter == null) + { + return Redirect("~/Home/Enter"); + } + return View(APIClient.GetRequest>($"api/main/getconferenceBookinglist?headwaiterId={APIClient.Headwaiter.Id}")); + } + + [HttpGet] + public IActionResult AddConferenceBookingToConference() + { + if (APIClient.Headwaiter == null) + { + return Redirect("~/Home/Enter"); + } + ViewBag.Conferences = APIClient.GetRequest>($"api/main/getconferencelist?organiserId={APIClient.Headwaiter.Id}"); + ViewBag.ConferenceBookings = APIClient.GetRequest>($"api/main/getconferenceBookings"); + return View(); + } + + [HttpPost] + public void AddConferenceBookingToConference(int conference, int conferenceBooking) + { + if (APIClient.Headwaiter == null) + { + throw new Exception("Вы как сюда попали? Сюда вход только авторизованным"); + } + var conferenceBookingElem = APIClient.GetRequest($"api/main/getconferenceBookingbyid?conferenceBookingId={conferenceBooking}"); + APIClient.PostRequest("api/main/updateconferenceBooking", new ConferenceBookingBindingModel + { + Id = conferenceBooking, + ConferenceId = conference, + NameHall = conferenceBookingElem.NameHall, + HeadwaiterId = conferenceBookingElem.HeadwaiterId, + }); + Response.Redirect("ListConferences"); + } } } \ No newline at end of file diff --git a/Hotel/HostrelHeadwaiterApp/Views/Home/AddConferenceBookingToConference.cshtml b/Hotel/HostrelHeadwaiterApp/Views/Home/AddConferenceBookingToConference.cshtml new file mode 100644 index 0000000..8137624 --- /dev/null +++ b/Hotel/HostrelHeadwaiterApp/Views/Home/AddConferenceBookingToConference.cshtml @@ -0,0 +1,25 @@ +@using HotelContracts.ViewModels; +@using HotelDataModels.Models; + +@{ + ViewData["Title"] = "AddConferenceBookingToConference"; +} + +
+
+ +
+ +
+
+
+ +
+ +
+
+
+
+
+
+
\ No newline at end of file diff --git a/Hotel/HostrelHeadwaiterApp/Views/Home/AddDinnerToConferenceBooking.cshtml b/Hotel/HostrelHeadwaiterApp/Views/Home/AddDinnerToConferenceBooking.cshtml new file mode 100644 index 0000000..8b1e886 --- /dev/null +++ b/Hotel/HostrelHeadwaiterApp/Views/Home/AddDinnerToConferenceBooking.cshtml @@ -0,0 +1,27 @@ +@using HotelContracts.ViewModels; +@using HotelDataModels.Models; + +@{ + ViewData["Title"] = "AddDinnerToConferenceBooking"; +} + +@model Dictionary + +
+
+ +
+ +
+
+
+ +
+ +
+
+
+
+ +
+
\ No newline at end of file diff --git a/Hotel/HostrelHeadwaiterApp/Views/Home/CreateConferenceBooking.cshtml b/Hotel/HostrelHeadwaiterApp/Views/Home/CreateConferenceBooking.cshtml new file mode 100644 index 0000000..d1be56e --- /dev/null +++ b/Hotel/HostrelHeadwaiterApp/Views/Home/CreateConferenceBooking.cshtml @@ -0,0 +1,18 @@ +@{ + ViewData["Title"] = "CreateConferenceBooking"; +} + + +
+
+ +
+ +
+
+
+
\ No newline at end of file diff --git a/Hotel/HostrelHeadwaiterApp/Views/Home/DeleteConferenceBooking.cshtml b/Hotel/HostrelHeadwaiterApp/Views/Home/DeleteConferenceBooking.cshtml new file mode 100644 index 0000000..c132833 --- /dev/null +++ b/Hotel/HostrelHeadwaiterApp/Views/Home/DeleteConferenceBooking.cshtml @@ -0,0 +1,18 @@ +@{ + ViewData["Title"] = "DeleteConferenceBooking"; +} + +
+
+
+
+ + +
+
+
+ +
+
+
+
\ No newline at end of file diff --git a/Hotel/HostrelHeadwaiterApp/Views/Home/ListConferenceBookings.cshtml b/Hotel/HostrelHeadwaiterApp/Views/Home/ListConferenceBookings.cshtml new file mode 100644 index 0000000..e44ea20 --- /dev/null +++ b/Hotel/HostrelHeadwaiterApp/Views/Home/ListConferenceBookings.cshtml @@ -0,0 +1,80 @@ +@using HotelContracts.ViewModels + +@model List + +@{ + ViewData["Title"] = "ListConferenceBookings"; +} + + +
+
+
+
+
+
+
+
+ + + + + + + + + @foreach (var item in Model) + { + + + + + } + +
+ Номер + + Название зала +
+ @Html.DisplayFor(modelItem => item.Id) + + @Html.DisplayFor(modelItem => item.NameHall) +
+
+
+
+ +
+
+
+
+
diff --git a/Hotel/HostrelHeadwaiterApp/Views/Home/ListRooms.cshtml b/Hotel/HostrelHeadwaiterApp/Views/Home/ListRooms.cshtml index 3e1b82b..e368f05 100644 --- a/Hotel/HostrelHeadwaiterApp/Views/Home/ListRooms.cshtml +++ b/Hotel/HostrelHeadwaiterApp/Views/Home/ListRooms.cshtml @@ -85,7 +85,7 @@ 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" - >Добавить комнату + >Добавить обед diff --git a/Hotel/HostrelHeadwaiterApp/Views/Home/UpdateConferenceBooking.cshtml b/Hotel/HostrelHeadwaiterApp/Views/Home/UpdateConferenceBooking.cshtml new file mode 100644 index 0000000..a63f4c1 --- /dev/null +++ b/Hotel/HostrelHeadwaiterApp/Views/Home/UpdateConferenceBooking.cshtml @@ -0,0 +1,73 @@ +@using HotelContracts.ViewModels; +@using HotelDataModels.Models; + +@{ + ViewData["Title"] = "UpdateConferenceBooking"; +} + + +
+
+
+
+ + +
+
+ + +
+
+ + + + + + + + + + + +
+ Обед + + Цена +
+
+
+
+ +
+
+
+
+ +@section Scripts + { + +} \ No newline at end of file diff --git a/Hotel/HostrelHeadwaiterApp/Views/Shared/_Layout.cshtml b/Hotel/HostrelHeadwaiterApp/Views/Shared/_Layout.cshtml index e1d2194..6cbae9d 100644 --- a/Hotel/HostrelHeadwaiterApp/Views/Shared/_Layout.cshtml +++ b/Hotel/HostrelHeadwaiterApp/Views/Shared/_Layout.cshtml @@ -27,11 +27,11 @@ Комнаты - Метрдотель - - Список планов питания + Бронирование - Отчет по обедам + Привязка к конференациям + + Метрдотель Регистрация diff --git a/Hotel/HotelBusinessLogic/BusinessLogics/ConferenceBookingLogic.cs b/Hotel/HotelBusinessLogic/BusinessLogics/ConferenceBookingLogic.cs index 6641d02..60e9828 100644 --- a/Hotel/HotelBusinessLogic/BusinessLogics/ConferenceBookingLogic.cs +++ b/Hotel/HotelBusinessLogic/BusinessLogics/ConferenceBookingLogic.cs @@ -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; @@ -22,9 +23,43 @@ namespace HotelBusinessLogic.BusinessLogics _logger = logger; _conferenceBookingStorage = conferenceBookingStorage; } + + public bool AddDinnerToConferenceBooking(ConferenceBookingSearchModel model, IDinnerModel dinner) + { + if (model == null) + { + throw new ArgumentNullException(nameof(model)); + } + + _logger.LogInformation("AddDinnerToConferenceBooking. NameHall:{NameHall}.Id:{ Id}", model.NameHall, model.Id); + var element = _conferenceBookingStorage.GetElement(model); + + if (element == null) + { + _logger.LogWarning("AddDinnerToConferenceBooking element not found"); + return false; + } + + _logger.LogInformation("AddDinnerToConferenceBooking find. Id:{Id}", element.Id); + + element.ConferenceBookingDinners[dinner.Id] = dinner; + + _conferenceBookingStorage.Update(new() + { + Id = element.Id, + NameHall = element.NameHall, + ConferenceId = element.ConferenceId, + HeadwaiterId = element.HeadwaiterId, + ConferenceBookingDinners = element.ConferenceBookingDinners + }); + + return true; + } + public bool Create(ConferenceBookingBindingModel model) { CheckModel(model); + model.ConferenceBookingDinners = new(); if (_conferenceBookingStorage.Insert(model) == null) { @@ -114,6 +149,11 @@ namespace HotelBusinessLogic.BusinessLogics return; } + if (string.IsNullOrEmpty(model.NameHall)) + { + throw new ArgumentNullException("Нет названия конференции", nameof(model.NameHall)); + } + _logger.LogInformation("ConferenceBooking. Id: { Id}", model.Id); } diff --git a/Hotel/HotelBusinessLogic/BusinessLogics/ReportLogicHeadwaiter.cs b/Hotel/HotelBusinessLogic/BusinessLogics/ReportLogicHeadwaiter.cs index bbcc96a..ef2dd77 100644 --- a/Hotel/HotelBusinessLogic/BusinessLogics/ReportLogicHeadwaiter.cs +++ b/Hotel/HotelBusinessLogic/BusinessLogics/ReportLogicHeadwaiter.cs @@ -95,7 +95,7 @@ namespace HotelBusinessLogic.BusinessLogics _saveToExcel.CreateReport(new ExcelInfoHeadwaiter { FileName = model.FileName, - Title = "Список изделий", + Title = "Список участников", MealPlanDinner = GetMealPlanDinner() }); } diff --git a/Hotel/HotelContracts/BindingModels/ConferenceBookingBindingModel.cs b/Hotel/HotelContracts/BindingModels/ConferenceBookingBindingModel.cs index 90a490e..94368a8 100644 --- a/Hotel/HotelContracts/BindingModels/ConferenceBookingBindingModel.cs +++ b/Hotel/HotelContracts/BindingModels/ConferenceBookingBindingModel.cs @@ -8,7 +8,9 @@ namespace HotelContracts.BindingModels public int? ConferenceId { get; set; } + public string NameHall { get; set; } = string.Empty; + public int Id { get; set; } - public Dictionary ConferenceBookingDinners { get; set; } + public Dictionary ConferenceBookingDinners { get; set; } = new(); } } diff --git a/Hotel/HotelContracts/BusinessLogicsContracts/IConferenceBookingLogic.cs b/Hotel/HotelContracts/BusinessLogicsContracts/IConferenceBookingLogic.cs index aefd781..8038d5a 100644 --- a/Hotel/HotelContracts/BusinessLogicsContracts/IConferenceBookingLogic.cs +++ b/Hotel/HotelContracts/BusinessLogicsContracts/IConferenceBookingLogic.cs @@ -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? ReadList(ConferenceBookingSearchModel? model); ConferenceBookingViewModel? ReadElement(ConferenceBookingSearchModel model); + bool AddDinnerToConferenceBooking(ConferenceBookingSearchModel model, IDinnerModel dinner); bool Create(ConferenceBookingBindingModel model); bool Update(ConferenceBookingBindingModel model); bool Delete(ConferenceBookingBindingModel model); diff --git a/Hotel/HotelContracts/SearchModels/ConferenceBookingSearchModel.cs b/Hotel/HotelContracts/SearchModels/ConferenceBookingSearchModel.cs index 86b965e..8ac4912 100644 --- a/Hotel/HotelContracts/SearchModels/ConferenceBookingSearchModel.cs +++ b/Hotel/HotelContracts/SearchModels/ConferenceBookingSearchModel.cs @@ -6,6 +6,7 @@ namespace HotelContracts.SearchModels public int? Id { get; set; } public int? HeadwaiterId { get; set; } public int? ConferenceId { get; set; } + public string NameHall { get; set; } = string.Empty; public DateTime? DateFrom { get; set; } public DateTime? DateTo { get; set; } } diff --git a/Hotel/HotelContracts/ViewModels/ConferenceBookingViewModel.cs b/Hotel/HotelContracts/ViewModels/ConferenceBookingViewModel.cs index 480d4c2..513d109 100644 --- a/Hotel/HotelContracts/ViewModels/ConferenceBookingViewModel.cs +++ b/Hotel/HotelContracts/ViewModels/ConferenceBookingViewModel.cs @@ -1,4 +1,5 @@ using HotelDataModels.Models; +using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Linq; @@ -13,7 +14,20 @@ namespace HotelContracts.ViewModels public int? ConferenceId { get; set; } + //конференс наме + public int Id { get; set; } - public Dictionary ConferenceBookingDinners { get; set; } + public string NameHall { get; set; } = string.Empty; + public Dictionary ConferenceBookingDinners { get; set; } = new(); + + public Dictionary ConferenceConferenceBookings { get; set; } = new(); + public ConferenceBookingViewModel() { } + + [JsonConstructor] + public ConferenceBookingViewModel(Dictionary ConferenceBookingDinners, Dictionary ConferenceConferenceBookings) + { + this.ConferenceBookingDinners = ConferenceBookingDinners.ToDictionary(x => x.Key, x => x.Value as IDinnerModel); + this.ConferenceConferenceBookings = ConferenceConferenceBookings.ToDictionary(x => x.Key, x => x.Value as IConferenceBookingModel); + } } } diff --git a/Hotel/HotelDataBaseImplement/HotelDataBase.cs b/Hotel/HotelDataBaseImplement/HotelDataBase.cs index 6d7ccea..5f56ccf 100644 --- a/Hotel/HotelDataBaseImplement/HotelDataBase.cs +++ b/Hotel/HotelDataBaseImplement/HotelDataBase.cs @@ -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=HotelDataBaseFu;Integrated Security=True;MultipleActiveResultSets=True;;TrustServerCertificate=True"); } base.OnConfiguring(optionsBuilder); } diff --git a/Hotel/HotelDataBaseImplement/Implemets/ConferenceBookingStorage.cs b/Hotel/HotelDataBaseImplement/Implemets/ConferenceBookingStorage.cs index 5eb3011..3921b05 100644 --- a/Hotel/HotelDataBaseImplement/Implemets/ConferenceBookingStorage.cs +++ b/Hotel/HotelDataBaseImplement/Implemets/ConferenceBookingStorage.cs @@ -19,6 +19,7 @@ namespace HotelDataBaseImplement.Implemets using var context = new HotelDataBase(); var element = context.ConferenceBookings + .Include(x => x.Dinners) .FirstOrDefault(rec => rec.Id == model.Id); if (element != null) @@ -34,7 +35,7 @@ namespace HotelDataBaseImplement.Implemets public ConferenceBookingViewModel? GetElement(ConferenceBookingSearchModel model) { - if (!model.Id.HasValue) + if (string.IsNullOrEmpty(model.NameHall) && !model.Id.HasValue) { return null; } @@ -48,8 +49,8 @@ namespace HotelDataBaseImplement.Implemets .ThenInclude(x => x.Room) .Include(x => x.Conference) .Include(x => x.Headwaiter) - .FirstOrDefault(x => (model.Id.HasValue && x.Id == model.Id))? - .GetViewModel; + .FirstOrDefault(x => (!string.IsNullOrEmpty(model.NameHall) && x.NameHall == model.NameHall) || (model.Id.HasValue && x.Id == model.Id))? + .GetViewModel; } public List GetFilteredList(ConferenceBookingSearchModel model) @@ -60,20 +61,7 @@ namespace HotelDataBaseImplement.Implemets } using var context = new HotelDataBase(); - if (model.DateFrom.HasValue) - { - return context.ConferenceBookings - .Include(x => x.Dinners) - .ThenInclude(x => x.Dinner) - .ThenInclude(x => x.RoomDinners) - .ThenInclude(x => x.Room) - .Include(x => x.Conference) - .Include(x => x.Headwaiter) - .Where(x => x.Conference.StartDate >= model.DateFrom && x.Conference.StartDate <= model.DateTo) - .Select(x => x.GetViewModel) - .ToList(); - } - else if (model.HeadwaiterId.HasValue) + if (model.HeadwaiterId.HasValue) { return context.ConferenceBookings .Include(x => x.Dinners) .ThenInclude(x => x.Dinner) @@ -82,9 +70,10 @@ namespace HotelDataBaseImplement.Implemets .Include(x => x.Conference) .Include(x => x.Headwaiter) .Where(x => x.HeadwaiterId == model.HeadwaiterId) + .ToList() .Select(x => x.GetViewModel) .ToList(); - + } return context.ConferenceBookings .Include(x => x.Dinners) .ThenInclude(x => x.Dinner) @@ -92,7 +81,8 @@ namespace HotelDataBaseImplement.Implemets .ThenInclude(x => x.Room) .Include(x => x.Conference) .Include(x => x.Headwaiter) - .Where(x => x.Id == model.Id) + .Where(x => x.NameHall.Contains(model.NameHall)) + .ToList() .Select(x => x.GetViewModel) .ToList(); } @@ -140,25 +130,31 @@ namespace HotelDataBaseImplement.Implemets public ConferenceBookingViewModel? Update(ConferenceBookingBindingModel model) { using var context = new HotelDataBase(); - - var conferenceBooking = context.ConferenceBookings - .Include(x => x.Dinners) - .ThenInclude(x => x.Dinner) - .ThenInclude(x => x.RoomDinners) - .ThenInclude(x => x.Room) - .Include(x => x.Conference) - .Include(x => x.Headwaiter) - .FirstOrDefault(x => x.Id == model.Id); - - if (conferenceBooking == null) + using var transaction = context.Database.BeginTransaction(); + try { - return null; + var elem = context.ConferenceBookings + .Include(x => x.Dinners) + .ThenInclude(x => x.Dinner) + .ThenInclude(x => x.ConferenceBookingDinner) + .ThenInclude(x => x.ConferenceBooking) + .ThenInclude(x => x.Conference) + .FirstOrDefault(rec => rec.Id == model.Id); if (elem == null) + { + return null; + } + elem.Update(model); + context.SaveChanges(); + if (model.ConferenceBookingDinners != null) + elem.UpdateDinners(context, model); + transaction.Commit(); + return elem.GetViewModel; + } + catch + { + transaction.Rollback(); + throw; } - - conferenceBooking.Update(model); - context.SaveChanges(); - - return conferenceBooking.GetViewModel; } } } diff --git a/Hotel/HotelDataBaseImplement/Migrations/20230517182216_plswork.Designer.cs b/Hotel/HotelDataBaseImplement/Migrations/20230517182216_plswork.Designer.cs new file mode 100644 index 0000000..929c74b --- /dev/null +++ b/Hotel/HotelDataBaseImplement/Migrations/20230517182216_plswork.Designer.cs @@ -0,0 +1,570 @@ +// +using System; +using HotelDataBaseImplement; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace HotelDataBaseImplement.Migrations +{ + [DbContext(typeof(HotelDataBase))] + [Migration("20230517182216_plswork")] + partial class plswork + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "7.0.5") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("HotelDataBaseImplement.Models.Conference", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("ConferenceName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("OrganiserId") + .HasColumnType("int"); + + b.Property("StartDate") + .HasColumnType("datetime2"); + + b.HasKey("Id"); + + b.HasIndex("OrganiserId"); + + b.ToTable("Conferences"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.ConferenceBooking", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("ConferenceId") + .HasColumnType("int"); + + b.Property("HeadwaiterId") + .HasColumnType("int"); + + b.Property("NameHall") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.HasIndex("ConferenceId"); + + b.HasIndex("HeadwaiterId"); + + b.ToTable("ConferenceBookings"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.ConferenceBookingDinner", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("ConferenceBookingId") + .HasColumnType("int"); + + b.Property("DinnerId") + .HasColumnType("int"); + + b.Property("DinnercId") + .HasColumnType("int"); + + b.Property("NameHall") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.HasIndex("ConferenceBookingId"); + + b.HasIndex("DinnercId"); + + b.ToTable("ConferenceBookingDinners"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.ConferenceMember", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("ConferenceId") + .HasColumnType("int"); + + b.Property("MemberId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("ConferenceId"); + + b.HasIndex("MemberId"); + + b.ToTable("ConferenceMembers"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.Dinner", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("DinnerName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("DinnerPrice") + .HasColumnType("float"); + + b.Property("HeadwaiterId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("HeadwaiterId"); + + b.ToTable("Dinners"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.Headwaiter", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("HeadwaiterEmail") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("HeadwaiterFIO") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("HeadwaiterLogin") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("HeadwaiterNumber") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("HeadwaiterPassword") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("Headwaiters"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.MealPlan", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("MealPlanName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("MealPlanPrice") + .HasColumnType("float"); + + b.Property("OrganiserId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("OrganiserId"); + + b.ToTable("MealPlans"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.MealPlanMember", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("MealPlanId") + .HasColumnType("int"); + + b.Property("MemberId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("MealPlanId"); + + b.HasIndex("MemberId"); + + b.ToTable("MealPlanMembers"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.Member", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Citizenship") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("MemberFIO") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("OrganiserId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("OrganiserId"); + + b.ToTable("Members"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.Organiser", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("OrganiserEmail") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("OrganiserFIO") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("OrganiserLogin") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("OrganiserNumber") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("OrganiserPassword") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("Organisers"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.Room", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("HeadwaiterId") + .HasColumnType("int"); + + b.Property("MealPlanId") + .HasColumnType("int"); + + b.Property("RoomFrame") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("RoomName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("RoomPrice") + .HasColumnType("float"); + + b.HasKey("Id"); + + b.HasIndex("HeadwaiterId"); + + b.HasIndex("MealPlanId"); + + b.ToTable("Rooms"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.RoomDinner", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Count") + .HasColumnType("int"); + + b.Property("DinnerId") + .HasColumnType("int"); + + b.Property("RoomId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("DinnerId"); + + b.HasIndex("RoomId"); + + b.ToTable("RoomDinners"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.Conference", b => + { + b.HasOne("HotelDataBaseImplement.Models.Organiser", "Organiser") + .WithMany("Conferences") + .HasForeignKey("OrganiserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Organiser"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.ConferenceBooking", b => + { + b.HasOne("HotelDataBaseImplement.Models.Conference", "Conference") + .WithMany("ConferenceBookings") + .HasForeignKey("ConferenceId"); + + b.HasOne("HotelDataBaseImplement.Models.Headwaiter", "Headwaiter") + .WithMany("ConferenceBookings") + .HasForeignKey("HeadwaiterId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Conference"); + + b.Navigation("Headwaiter"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.ConferenceBookingDinner", b => + { + b.HasOne("HotelDataBaseImplement.Models.ConferenceBooking", "ConferenceBooking") + .WithMany("Dinners") + .HasForeignKey("ConferenceBookingId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("HotelDataBaseImplement.Models.Dinner", "Dinner") + .WithMany("ConferenceBookingDinner") + .HasForeignKey("DinnercId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("ConferenceBooking"); + + b.Navigation("Dinner"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.ConferenceMember", b => + { + b.HasOne("HotelDataBaseImplement.Models.Conference", "Conference") + .WithMany("Members") + .HasForeignKey("ConferenceId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("HotelDataBaseImplement.Models.Member", "Member") + .WithMany("ConferenceMembers") + .HasForeignKey("MemberId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Conference"); + + b.Navigation("Member"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.Dinner", b => + { + b.HasOne("HotelDataBaseImplement.Models.Headwaiter", "Headwaiter") + .WithMany("Dinners") + .HasForeignKey("HeadwaiterId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Headwaiter"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.MealPlan", b => + { + b.HasOne("HotelDataBaseImplement.Models.Organiser", "Organiser") + .WithMany("MealPlans") + .HasForeignKey("OrganiserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Organiser"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.MealPlanMember", b => + { + b.HasOne("HotelDataBaseImplement.Models.MealPlan", "MealPlan") + .WithMany("Members") + .HasForeignKey("MealPlanId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("HotelDataBaseImplement.Models.Member", "Member") + .WithMany("MealPlanMember") + .HasForeignKey("MemberId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("MealPlan"); + + b.Navigation("Member"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.Member", b => + { + b.HasOne("HotelDataBaseImplement.Models.Organiser", "Organiser") + .WithMany("Members") + .HasForeignKey("OrganiserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Organiser"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.Room", b => + { + b.HasOne("HotelDataBaseImplement.Models.Headwaiter", "Headwaiter") + .WithMany("Rooms") + .HasForeignKey("HeadwaiterId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("HotelDataBaseImplement.Models.MealPlan", "MealPlan") + .WithMany("Rooms") + .HasForeignKey("MealPlanId"); + + b.Navigation("Headwaiter"); + + b.Navigation("MealPlan"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.RoomDinner", b => + { + b.HasOne("HotelDataBaseImplement.Models.Dinner", "Dinner") + .WithMany("RoomDinners") + .HasForeignKey("DinnerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("HotelDataBaseImplement.Models.Room", "Room") + .WithMany("Dinners") + .HasForeignKey("RoomId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Dinner"); + + b.Navigation("Room"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.Conference", b => + { + b.Navigation("ConferenceBookings"); + + b.Navigation("Members"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.ConferenceBooking", b => + { + b.Navigation("Dinners"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.Dinner", b => + { + b.Navigation("ConferenceBookingDinner"); + + b.Navigation("RoomDinners"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.Headwaiter", b => + { + b.Navigation("ConferenceBookings"); + + b.Navigation("Dinners"); + + b.Navigation("Rooms"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.MealPlan", b => + { + b.Navigation("Members"); + + b.Navigation("Rooms"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.Member", b => + { + b.Navigation("ConferenceMembers"); + + b.Navigation("MealPlanMember"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.Organiser", b => + { + b.Navigation("Conferences"); + + b.Navigation("MealPlans"); + + b.Navigation("Members"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.Room", b => + { + b.Navigation("Dinners"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/Hotel/HotelDataBaseImplement/Migrations/20230517182216_plswork.cs b/Hotel/HotelDataBaseImplement/Migrations/20230517182216_plswork.cs new file mode 100644 index 0000000..23b1472 --- /dev/null +++ b/Hotel/HotelDataBaseImplement/Migrations/20230517182216_plswork.cs @@ -0,0 +1,51 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace HotelDataBaseImplement.Migrations +{ + /// + public partial class plswork : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "Count", + table: "ConferenceBookingDinners"); + + migrationBuilder.AddColumn( + name: "NameHall", + table: "ConferenceBookings", + type: "nvarchar(max)", + nullable: false, + defaultValue: ""); + + migrationBuilder.AddColumn( + name: "NameHall", + table: "ConferenceBookingDinners", + type: "nvarchar(max)", + nullable: false, + defaultValue: ""); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "NameHall", + table: "ConferenceBookings"); + + migrationBuilder.DropColumn( + name: "NameHall", + table: "ConferenceBookingDinners"); + + migrationBuilder.AddColumn( + name: "Count", + table: "ConferenceBookingDinners", + type: "int", + nullable: false, + defaultValue: 0); + } + } +} diff --git a/Hotel/HotelDataBaseImplement/Migrations/20230517195415_plswork2.Designer.cs b/Hotel/HotelDataBaseImplement/Migrations/20230517195415_plswork2.Designer.cs new file mode 100644 index 0000000..759a77c --- /dev/null +++ b/Hotel/HotelDataBaseImplement/Migrations/20230517195415_plswork2.Designer.cs @@ -0,0 +1,563 @@ +// +using System; +using HotelDataBaseImplement; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace HotelDataBaseImplement.Migrations +{ + [DbContext(typeof(HotelDataBase))] + [Migration("20230517195415_plswork2")] + partial class plswork2 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "7.0.5") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("HotelDataBaseImplement.Models.Conference", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("ConferenceName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("OrganiserId") + .HasColumnType("int"); + + b.Property("StartDate") + .HasColumnType("datetime2"); + + b.HasKey("Id"); + + b.HasIndex("OrganiserId"); + + b.ToTable("Conferences"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.ConferenceBooking", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("ConferenceId") + .HasColumnType("int"); + + b.Property("HeadwaiterId") + .HasColumnType("int"); + + b.Property("NameHall") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.HasIndex("ConferenceId"); + + b.HasIndex("HeadwaiterId"); + + b.ToTable("ConferenceBookings"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.ConferenceBookingDinner", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("ConferenceBookingId") + .HasColumnType("int"); + + b.Property("DinnerId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("ConferenceBookingId"); + + b.HasIndex("DinnerId"); + + b.ToTable("ConferenceBookingDinners"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.ConferenceMember", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("ConferenceId") + .HasColumnType("int"); + + b.Property("MemberId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("ConferenceId"); + + b.HasIndex("MemberId"); + + b.ToTable("ConferenceMembers"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.Dinner", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("DinnerName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("DinnerPrice") + .HasColumnType("float"); + + b.Property("HeadwaiterId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("HeadwaiterId"); + + b.ToTable("Dinners"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.Headwaiter", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("HeadwaiterEmail") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("HeadwaiterFIO") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("HeadwaiterLogin") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("HeadwaiterNumber") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("HeadwaiterPassword") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("Headwaiters"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.MealPlan", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("MealPlanName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("MealPlanPrice") + .HasColumnType("float"); + + b.Property("OrganiserId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("OrganiserId"); + + b.ToTable("MealPlans"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.MealPlanMember", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("MealPlanId") + .HasColumnType("int"); + + b.Property("MemberId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("MealPlanId"); + + b.HasIndex("MemberId"); + + b.ToTable("MealPlanMembers"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.Member", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Citizenship") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("MemberFIO") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("OrganiserId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("OrganiserId"); + + b.ToTable("Members"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.Organiser", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("OrganiserEmail") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("OrganiserFIO") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("OrganiserLogin") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("OrganiserNumber") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("OrganiserPassword") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("Organisers"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.Room", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("HeadwaiterId") + .HasColumnType("int"); + + b.Property("MealPlanId") + .HasColumnType("int"); + + b.Property("RoomFrame") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("RoomName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("RoomPrice") + .HasColumnType("float"); + + b.HasKey("Id"); + + b.HasIndex("HeadwaiterId"); + + b.HasIndex("MealPlanId"); + + b.ToTable("Rooms"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.RoomDinner", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Count") + .HasColumnType("int"); + + b.Property("DinnerId") + .HasColumnType("int"); + + b.Property("RoomId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("DinnerId"); + + b.HasIndex("RoomId"); + + b.ToTable("RoomDinners"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.Conference", b => + { + b.HasOne("HotelDataBaseImplement.Models.Organiser", "Organiser") + .WithMany("Conferences") + .HasForeignKey("OrganiserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Organiser"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.ConferenceBooking", b => + { + b.HasOne("HotelDataBaseImplement.Models.Conference", "Conference") + .WithMany("ConferenceBookings") + .HasForeignKey("ConferenceId"); + + b.HasOne("HotelDataBaseImplement.Models.Headwaiter", "Headwaiter") + .WithMany("ConferenceBookings") + .HasForeignKey("HeadwaiterId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Conference"); + + b.Navigation("Headwaiter"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.ConferenceBookingDinner", b => + { + b.HasOne("HotelDataBaseImplement.Models.ConferenceBooking", "ConferenceBooking") + .WithMany("Dinners") + .HasForeignKey("ConferenceBookingId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("HotelDataBaseImplement.Models.Dinner", "Dinner") + .WithMany("ConferenceBookingDinner") + .HasForeignKey("DinnerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("ConferenceBooking"); + + b.Navigation("Dinner"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.ConferenceMember", b => + { + b.HasOne("HotelDataBaseImplement.Models.Conference", "Conference") + .WithMany("Members") + .HasForeignKey("ConferenceId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("HotelDataBaseImplement.Models.Member", "Member") + .WithMany("ConferenceMembers") + .HasForeignKey("MemberId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Conference"); + + b.Navigation("Member"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.Dinner", b => + { + b.HasOne("HotelDataBaseImplement.Models.Headwaiter", "Headwaiter") + .WithMany("Dinners") + .HasForeignKey("HeadwaiterId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Headwaiter"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.MealPlan", b => + { + b.HasOne("HotelDataBaseImplement.Models.Organiser", "Organiser") + .WithMany("MealPlans") + .HasForeignKey("OrganiserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Organiser"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.MealPlanMember", b => + { + b.HasOne("HotelDataBaseImplement.Models.MealPlan", "MealPlan") + .WithMany("Members") + .HasForeignKey("MealPlanId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("HotelDataBaseImplement.Models.Member", "Member") + .WithMany("MealPlanMember") + .HasForeignKey("MemberId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("MealPlan"); + + b.Navigation("Member"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.Member", b => + { + b.HasOne("HotelDataBaseImplement.Models.Organiser", "Organiser") + .WithMany("Members") + .HasForeignKey("OrganiserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Organiser"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.Room", b => + { + b.HasOne("HotelDataBaseImplement.Models.Headwaiter", "Headwaiter") + .WithMany("Rooms") + .HasForeignKey("HeadwaiterId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("HotelDataBaseImplement.Models.MealPlan", "MealPlan") + .WithMany("Rooms") + .HasForeignKey("MealPlanId"); + + b.Navigation("Headwaiter"); + + b.Navigation("MealPlan"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.RoomDinner", b => + { + b.HasOne("HotelDataBaseImplement.Models.Dinner", "Dinner") + .WithMany("RoomDinners") + .HasForeignKey("DinnerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("HotelDataBaseImplement.Models.Room", "Room") + .WithMany("Dinners") + .HasForeignKey("RoomId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Dinner"); + + b.Navigation("Room"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.Conference", b => + { + b.Navigation("ConferenceBookings"); + + b.Navigation("Members"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.ConferenceBooking", b => + { + b.Navigation("Dinners"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.Dinner", b => + { + b.Navigation("ConferenceBookingDinner"); + + b.Navigation("RoomDinners"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.Headwaiter", b => + { + b.Navigation("ConferenceBookings"); + + b.Navigation("Dinners"); + + b.Navigation("Rooms"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.MealPlan", b => + { + b.Navigation("Members"); + + b.Navigation("Rooms"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.Member", b => + { + b.Navigation("ConferenceMembers"); + + b.Navigation("MealPlanMember"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.Organiser", b => + { + b.Navigation("Conferences"); + + b.Navigation("MealPlans"); + + b.Navigation("Members"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.Room", b => + { + b.Navigation("Dinners"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/Hotel/HotelDataBaseImplement/Migrations/20230517195415_plswork2.cs b/Hotel/HotelDataBaseImplement/Migrations/20230517195415_plswork2.cs new file mode 100644 index 0000000..aa2601c --- /dev/null +++ b/Hotel/HotelDataBaseImplement/Migrations/20230517195415_plswork2.cs @@ -0,0 +1,82 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace HotelDataBaseImplement.Migrations +{ + /// + public partial class plswork2 : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropForeignKey( + name: "FK_ConferenceBookingDinners_Dinners_DinnercId", + table: "ConferenceBookingDinners"); + + migrationBuilder.DropIndex( + name: "IX_ConferenceBookingDinners_DinnercId", + table: "ConferenceBookingDinners"); + + migrationBuilder.DropColumn( + name: "DinnercId", + table: "ConferenceBookingDinners"); + + migrationBuilder.DropColumn( + name: "NameHall", + table: "ConferenceBookingDinners"); + + migrationBuilder.CreateIndex( + name: "IX_ConferenceBookingDinners_DinnerId", + table: "ConferenceBookingDinners", + column: "DinnerId"); + + migrationBuilder.AddForeignKey( + name: "FK_ConferenceBookingDinners_Dinners_DinnerId", + table: "ConferenceBookingDinners", + column: "DinnerId", + principalTable: "Dinners", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropForeignKey( + name: "FK_ConferenceBookingDinners_Dinners_DinnerId", + table: "ConferenceBookingDinners"); + + migrationBuilder.DropIndex( + name: "IX_ConferenceBookingDinners_DinnerId", + table: "ConferenceBookingDinners"); + + migrationBuilder.AddColumn( + name: "DinnercId", + table: "ConferenceBookingDinners", + type: "int", + nullable: false, + defaultValue: 0); + + migrationBuilder.AddColumn( + name: "NameHall", + table: "ConferenceBookingDinners", + type: "nvarchar(max)", + nullable: false, + defaultValue: ""); + + migrationBuilder.CreateIndex( + name: "IX_ConferenceBookingDinners_DinnercId", + table: "ConferenceBookingDinners", + column: "DinnercId"); + + migrationBuilder.AddForeignKey( + name: "FK_ConferenceBookingDinners_Dinners_DinnercId", + table: "ConferenceBookingDinners", + column: "DinnercId", + principalTable: "Dinners", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + } + } +} diff --git a/Hotel/HotelDataBaseImplement/Migrations/HotelDataBaseModelSnapshot.cs b/Hotel/HotelDataBaseImplement/Migrations/HotelDataBaseModelSnapshot.cs index cecdcb0..be610ba 100644 --- a/Hotel/HotelDataBaseImplement/Migrations/HotelDataBaseModelSnapshot.cs +++ b/Hotel/HotelDataBaseImplement/Migrations/HotelDataBaseModelSnapshot.cs @@ -61,6 +61,10 @@ namespace HotelDataBaseImplement.Migrations b.Property("HeadwaiterId") .HasColumnType("int"); + b.Property("NameHall") + .IsRequired() + .HasColumnType("nvarchar(max)"); + b.HasKey("Id"); b.HasIndex("ConferenceId"); @@ -81,20 +85,14 @@ namespace HotelDataBaseImplement.Migrations b.Property("ConferenceBookingId") .HasColumnType("int"); - b.Property("Count") - .HasColumnType("int"); - b.Property("DinnerId") .HasColumnType("int"); - b.Property("DinnercId") - .HasColumnType("int"); - b.HasKey("Id"); b.HasIndex("ConferenceBookingId"); - b.HasIndex("DinnercId"); + b.HasIndex("DinnerId"); b.ToTable("ConferenceBookingDinners"); }); @@ -385,7 +383,7 @@ namespace HotelDataBaseImplement.Migrations b.HasOne("HotelDataBaseImplement.Models.Dinner", "Dinner") .WithMany("ConferenceBookingDinner") - .HasForeignKey("DinnercId") + .HasForeignKey("DinnerId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); diff --git a/Hotel/HotelDataBaseImplement/Models/Conference.cs b/Hotel/HotelDataBaseImplement/Models/Conference.cs index 72094fc..f87dfe4 100644 --- a/Hotel/HotelDataBaseImplement/Models/Conference.cs +++ b/Hotel/HotelDataBaseImplement/Models/Conference.cs @@ -39,7 +39,7 @@ namespace HotelDataBaseImplement.Models } [ForeignKey("ConferenceId")] - public virtual List ConferenceBookings { get; set; } + public virtual List ConferenceBookings { get; set; } = new(); [ForeignKey("ConferenceId")] public virtual List Members { get; set; } = new(); diff --git a/Hotel/HotelDataBaseImplement/Models/ConferenceBooking.cs b/Hotel/HotelDataBaseImplement/Models/ConferenceBooking.cs index d22d548..ac28542 100644 --- a/Hotel/HotelDataBaseImplement/Models/ConferenceBooking.cs +++ b/Hotel/HotelDataBaseImplement/Models/ConferenceBooking.cs @@ -16,6 +16,7 @@ namespace HotelDataBaseImplement.Models public int HeadwaiterId { get; private set; } public int? ConferenceId { get; private set; } public int Id { get; private set; } + public string NameHall { get; set; } = string.Empty; public virtual Headwaiter Headwaiter { get; set; } public virtual Conference? Conference { get; set; } @@ -31,7 +32,10 @@ namespace HotelDataBaseImplement.Models { if (_conferenceBookingDinners == null) { - _conferenceBookingDinners = Dinners.ToDictionary(recPC => recPC.DinnerId, recPC => (recPC.Dinner as IDinnerModel)); + using var context = new HotelDataBase(); + _conferenceBookingDinners = Dinners + .ToDictionary(x => x.DinnerId, x => (context.Dinners + .FirstOrDefault(y => y.Id == x.DinnerId)! as IDinnerModel)); } return _conferenceBookingDinners; } @@ -43,6 +47,7 @@ namespace HotelDataBaseImplement.Models Id = model.Id, ConferenceId = model.ConferenceId, HeadwaiterId = model.HeadwaiterId, + NameHall = model.NameHall, Dinners = model.ConferenceBookingDinners.Select(x => new ConferenceBookingDinner { Dinner = context.Dinners.First(y => y.Id == x.Key), @@ -54,6 +59,7 @@ namespace HotelDataBaseImplement.Models { ConferenceId = model.ConferenceId; HeadwaiterId = model.HeadwaiterId; + NameHall = model.NameHall; } public ConferenceBookingViewModel GetViewModel => new() @@ -61,17 +67,25 @@ namespace HotelDataBaseImplement.Models Id = Id, ConferenceId = ConferenceId, HeadwaiterId = HeadwaiterId, + NameHall = NameHall, ConferenceBookingDinners = ConferenceBookingDinners + //новое название = conference?.ConferenceName }; public void UpdateDinners(HotelDataBase context, ConferenceBookingBindingModel model) { var conferenceBookingDinners = context.ConferenceBookingDinners.Where(rec => rec.ConferenceBookingId == model.Id).ToList(); - if (conferenceBookingDinners != null) + if (conferenceBookingDinners != null && conferenceBookingDinners.Count > 0) { context.ConferenceBookingDinners.RemoveRange(conferenceBookingDinners.Where(rec => !model.ConferenceBookingDinners.ContainsKey(rec.DinnerId))); context.SaveChanges(); + + foreach (var updateDinner in conferenceBookingDinners) + { + model.ConferenceBookingDinners.Remove(updateDinner.Id); + } + context.SaveChanges(); } var conferenceBooking = context.ConferenceBookings.First(x => x.Id == Id); diff --git a/Hotel/HotelDataBaseImplement/Models/ConferenceBookingDinner.cs b/Hotel/HotelDataBaseImplement/Models/ConferenceBookingDinner.cs index a9ec2be..40f4f5d 100644 --- a/Hotel/HotelDataBaseImplement/Models/ConferenceBookingDinner.cs +++ b/Hotel/HotelDataBaseImplement/Models/ConferenceBookingDinner.cs @@ -14,7 +14,6 @@ namespace HotelDataBaseImplement.Models public int DinnerId { get; set; } [Required] - public int Count { get; set; } public virtual ConferenceBooking ConferenceBooking { get; set; } public virtual Dinner Dinner { get; set; } } diff --git a/Hotel/HotelDataBaseImplement/Models/Dinner.cs b/Hotel/HotelDataBaseImplement/Models/Dinner.cs index 261e55c..a38eaf4 100644 --- a/Hotel/HotelDataBaseImplement/Models/Dinner.cs +++ b/Hotel/HotelDataBaseImplement/Models/Dinner.cs @@ -27,8 +27,8 @@ namespace HotelDataBaseImplement.Models [ForeignKey("DinnerId")] public virtual List RoomDinners { get; set; } = new(); - [ForeignKey("DinnercId")] - public virtual List ConferenceBookingDinner { get; set; } + [ForeignKey("DinnerId")] + public virtual List ConferenceBookingDinner { get; set; } = new(); public static Dinner? Create(DinnerBindingModel model) { if (model == null) diff --git a/Hotel/HotelRestApi/Controllers/MainController.cs b/Hotel/HotelRestApi/Controllers/MainController.cs index 0dc86e3..e64c2ff 100644 --- a/Hotel/HotelRestApi/Controllers/MainController.cs +++ b/Hotel/HotelRestApi/Controllers/MainController.cs @@ -520,5 +520,97 @@ namespace HotelRestApi.Controllers throw; } } + + [HttpPost] + public void UpdateConferenceBooking(ConferenceBookingBindingModel model) + { + + try + { + model.ConferenceBookingDinners = null!; + _conferenceBooking.Update(model); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка обновления данных"); + throw; + } + } + + [HttpGet] + public Tuple>>? GetConferenceBooking(int conferenceBookingId) + { + try + { + var elem = _conferenceBooking.ReadElement(new ConferenceBookingSearchModel { Id = conferenceBookingId }); + if (elem == null) + return null; + return Tuple.Create(elem, elem.ConferenceBookingDinners.Select(x => Tuple.Create(x.Value.DinnerName, x.Value.DinnerPrice)).ToList()); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка получения по id={Id}", conferenceBookingId); + throw; + } + } + + [HttpPost] + public void DeleteConferenceBooking(ConferenceBookingBindingModel model) + { + try + { + _conferenceBooking.Delete(model); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка удаления плана питания"); + throw; + } + } + + [HttpPost] + public void AddDinnerToConferenceBooking(Tuple model) + { + try + { + _conferenceBooking.AddDinnerToConferenceBooking(model.Item1, model.Item2); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка добавления участника в план питания."); + throw; + } + } + + [HttpGet] + public List? GetConferenceBookings() + { + try + { + return _conferenceBooking.ReadList(null); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка получения списка номеров"); + throw; + } + } + + [HttpGet] + public ConferenceBookingViewModel GetConferenceBookingById(int conferenceBookingId) + { + try + { + var elem = _conferenceBooking.ReadElement(new ConferenceBookingSearchModel { Id = conferenceBookingId }); + if (elem == null) + return null; + return elem; + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка получения по id={Id}", conferenceBookingId); + throw; + } + } } }