From 07a4b5582c11ed6fe7d8b8d9ed07a4b734d69348 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D1=8F=D1=87=D0=B5=D1=81=D0=BB=D0=B0=D0=B2=20=D0=98?= =?UTF-8?q?=D0=B2=D0=B0=D0=BD=D0=BE=D0=B2?= Date: Sat, 30 Mar 2024 22:21:51 +0400 Subject: [PATCH] =?UTF-8?q?=D0=9D=D0=BE=D0=BC=D0=B5=D1=80=D0=B0=2050/50?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BindingModels/RoomBindingModel.cs | 2 +- .../ViewModels/RoomViewModel.cs | 2 +- .../20240330181838_FixMealPlan.Designer.cs | 589 ++++++++++++++++++ .../Migrations/20240330181838_FixMealPlan.cs | 59 ++ .../Migrations/HotelDataBaseModelSnapshot.cs | 6 +- Hotel/HotelDataBaseImplement/Models/Room.cs | 2 +- Hotel/HotelDataModels/Models/IRoomModel.cs | 2 +- .../Controllers/HomeController.cs | 176 +++++- .../Views/Home/CreateRoom.cshtml | 82 +++ .../Views/Home/DeleteRoom.cshtml | 17 + .../Views/Home/ListRooms.cshtml | 76 +++ .../Views/Home/UpdateRoom.cshtml | 87 +++ 12 files changed, 1091 insertions(+), 9 deletions(-) create mode 100644 Hotel/HotelDataBaseImplement/Migrations/20240330181838_FixMealPlan.Designer.cs create mode 100644 Hotel/HotelDataBaseImplement/Migrations/20240330181838_FixMealPlan.cs create mode 100644 Hotel/HotelHeadwaiterApp/Views/Home/CreateRoom.cshtml create mode 100644 Hotel/HotelHeadwaiterApp/Views/Home/DeleteRoom.cshtml create mode 100644 Hotel/HotelHeadwaiterApp/Views/Home/ListRooms.cshtml create mode 100644 Hotel/HotelHeadwaiterApp/Views/Home/UpdateRoom.cshtml diff --git a/Hotel/HotelContracts/BindingModels/RoomBindingModel.cs b/Hotel/HotelContracts/BindingModels/RoomBindingModel.cs index 9684b11..f3202a5 100644 --- a/Hotel/HotelContracts/BindingModels/RoomBindingModel.cs +++ b/Hotel/HotelContracts/BindingModels/RoomBindingModel.cs @@ -11,7 +11,7 @@ namespace HotelContracts.BindingModels [DisplayName("Корпус комнаты")] public string RoomFrame { get; set; } = string.Empty; public double RoomPrice { get; set; } - public int MealPlanId { get; set; } + public int? MealPlanId { get; set; } public int HeadwaiterId { get; set; } public int Id { get; set; } public Dictionary RoomLunches { get; set; } = new(); diff --git a/Hotel/HotelContracts/ViewModels/RoomViewModel.cs b/Hotel/HotelContracts/ViewModels/RoomViewModel.cs index a30fe06..e5b19d8 100644 --- a/Hotel/HotelContracts/ViewModels/RoomViewModel.cs +++ b/Hotel/HotelContracts/ViewModels/RoomViewModel.cs @@ -17,7 +17,7 @@ namespace HotelContracts.ViewModels [DisplayName("Стоимость комнаты")] public double RoomPrice { get; set; } - public int MealPlanId { get; set; } + public int? MealPlanId { get; set; } public int HeadwaiterId { get; set; } diff --git a/Hotel/HotelDataBaseImplement/Migrations/20240330181838_FixMealPlan.Designer.cs b/Hotel/HotelDataBaseImplement/Migrations/20240330181838_FixMealPlan.Designer.cs new file mode 100644 index 0000000..031476a --- /dev/null +++ b/Hotel/HotelDataBaseImplement/Migrations/20240330181838_FixMealPlan.Designer.cs @@ -0,0 +1,589 @@ +// +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("20240330181838_FixMealPlan")] + partial class FixMealPlan + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "7.0.3") + .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("BookingDate") + .HasColumnType("datetime2"); + + 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.ConferenceBookingLunch", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("ConferenceBookingId") + .HasColumnType("int"); + + b.Property("LunchId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("ConferenceBookingId"); + + b.HasIndex("LunchId"); + + b.ToTable("ConferenceBookingLunches"); + }); + + 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.Headwaiter", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("HeadwaiterEmail") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("HeadwaiterLogin") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("HeadwaiterName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("HeadwaiterPassword") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("HeadwaiterPatronymic") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("HeadwaiterPhoneNumber") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("HeadwaiterSurname") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("Headwaiters"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.Lunch", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("HeadwaiterId") + .HasColumnType("int"); + + b.Property("LunchName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("LunchPrice") + .HasColumnType("float"); + + b.HasKey("Id"); + + b.HasIndex("HeadwaiterId"); + + b.ToTable("Lunches"); + }); + + 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("MemberName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("MemberPatronymic") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("MemberPhoneNumber") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("MemberSurname") + .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("OrganiserLogin") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("OrganiserName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("OrganiserPassword") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("OrganiserPatronymic") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("OrganiserPhoneNumber") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("OrganiserSurname") + .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.RoomLunch", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("LunchId") + .HasColumnType("int"); + + b.Property("RoomId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("LunchId"); + + b.HasIndex("RoomId"); + + b.ToTable("RoomLunches"); + }); + + 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") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("HotelDataBaseImplement.Models.Headwaiter", "Headwaiter") + .WithMany("ConferenceBookings") + .HasForeignKey("HeadwaiterId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Conference"); + + b.Navigation("Headwaiter"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.ConferenceBookingLunch", b => + { + b.HasOne("HotelDataBaseImplement.Models.ConferenceBooking", "ConferenceBooking") + .WithMany("Lunches") + .HasForeignKey("ConferenceBookingId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("HotelDataBaseImplement.Models.Lunch", "Lunch") + .WithMany("ConferenceBookingLunch") + .HasForeignKey("LunchId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("ConferenceBooking"); + + b.Navigation("Lunch"); + }); + + 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.Lunch", b => + { + b.HasOne("HotelDataBaseImplement.Models.Headwaiter", "Headwaiter") + .WithMany("Lunches") + .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.RoomLunch", b => + { + b.HasOne("HotelDataBaseImplement.Models.Lunch", "Lunch") + .WithMany("RoomLunches") + .HasForeignKey("LunchId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("HotelDataBaseImplement.Models.Room", "Room") + .WithMany("Lunches") + .HasForeignKey("RoomId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Lunch"); + + b.Navigation("Room"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.Conference", b => + { + b.Navigation("ConferenceBookings"); + + b.Navigation("Members"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.ConferenceBooking", b => + { + b.Navigation("Lunches"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.Headwaiter", b => + { + b.Navigation("ConferenceBookings"); + + b.Navigation("Lunches"); + + b.Navigation("Rooms"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.Lunch", b => + { + b.Navigation("ConferenceBookingLunch"); + + b.Navigation("RoomLunches"); + }); + + 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("Lunches"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/Hotel/HotelDataBaseImplement/Migrations/20240330181838_FixMealPlan.cs b/Hotel/HotelDataBaseImplement/Migrations/20240330181838_FixMealPlan.cs new file mode 100644 index 0000000..0016e28 --- /dev/null +++ b/Hotel/HotelDataBaseImplement/Migrations/20240330181838_FixMealPlan.cs @@ -0,0 +1,59 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace HotelDataBaseImplement.Migrations +{ + /// + public partial class FixMealPlan : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropForeignKey( + name: "FK_Rooms_MealPlans_MealPlanId", + table: "Rooms"); + + migrationBuilder.AlterColumn( + name: "MealPlanId", + table: "Rooms", + type: "int", + nullable: true, + oldClrType: typeof(int), + oldType: "int"); + + migrationBuilder.AddForeignKey( + name: "FK_Rooms_MealPlans_MealPlanId", + table: "Rooms", + column: "MealPlanId", + principalTable: "MealPlans", + principalColumn: "Id"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropForeignKey( + name: "FK_Rooms_MealPlans_MealPlanId", + table: "Rooms"); + + migrationBuilder.AlterColumn( + name: "MealPlanId", + table: "Rooms", + type: "int", + nullable: false, + defaultValue: 0, + oldClrType: typeof(int), + oldType: "int", + oldNullable: true); + + migrationBuilder.AddForeignKey( + name: "FK_Rooms_MealPlans_MealPlanId", + table: "Rooms", + column: "MealPlanId", + principalTable: "MealPlans", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + } + } +} diff --git a/Hotel/HotelDataBaseImplement/Migrations/HotelDataBaseModelSnapshot.cs b/Hotel/HotelDataBaseImplement/Migrations/HotelDataBaseModelSnapshot.cs index 78953d6..5841b3d 100644 --- a/Hotel/HotelDataBaseImplement/Migrations/HotelDataBaseModelSnapshot.cs +++ b/Hotel/HotelDataBaseImplement/Migrations/HotelDataBaseModelSnapshot.cs @@ -323,7 +323,7 @@ namespace HotelDataBaseImplement.Migrations b.Property("HeadwaiterId") .HasColumnType("int"); - b.Property("MealPlanId") + b.Property("MealPlanId") .HasColumnType("int"); b.Property("RoomFrame") @@ -499,9 +499,7 @@ namespace HotelDataBaseImplement.Migrations b.HasOne("HotelDataBaseImplement.Models.MealPlan", "MealPlan") .WithMany("Rooms") - .HasForeignKey("MealPlanId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); + .HasForeignKey("MealPlanId"); b.Navigation("Headwaiter"); diff --git a/Hotel/HotelDataBaseImplement/Models/Room.cs b/Hotel/HotelDataBaseImplement/Models/Room.cs index fac09c8..be1422d 100644 --- a/Hotel/HotelDataBaseImplement/Models/Room.cs +++ b/Hotel/HotelDataBaseImplement/Models/Room.cs @@ -19,7 +19,7 @@ namespace HotelDataBaseImplement.Models [Required] public double RoomPrice { get; set; } - public int MealPlanId { get; private set; } + public int? MealPlanId { get; private set; } public int HeadwaiterId { get; private set; } public virtual Headwaiter? Headwaiter { get; set; } diff --git a/Hotel/HotelDataModels/Models/IRoomModel.cs b/Hotel/HotelDataModels/Models/IRoomModel.cs index 7cb64ce..52aa9c2 100644 --- a/Hotel/HotelDataModels/Models/IRoomModel.cs +++ b/Hotel/HotelDataModels/Models/IRoomModel.cs @@ -5,7 +5,7 @@ string RoomName { get; } string RoomFrame { get; } double RoomPrice { get; } - int MealPlanId { get; } + int? MealPlanId { get; } int HeadwaiterId { get; } public Dictionary RoomLunches { get; } } diff --git a/Hotel/HotelHeadwaiterApp/Controllers/HomeController.cs b/Hotel/HotelHeadwaiterApp/Controllers/HomeController.cs index 605bd28..707bbc9 100644 --- a/Hotel/HotelHeadwaiterApp/Controllers/HomeController.cs +++ b/Hotel/HotelHeadwaiterApp/Controllers/HomeController.cs @@ -1,6 +1,9 @@ -using HostrelHeadwaiterApp; +using DocumentFormat.OpenXml.Office2010.Excel; +using HostrelHeadwaiterApp; using HotelContracts.BindingModels; +using HotelContracts.SearchModels; using HotelContracts.ViewModels; +using HotelDataBaseImplement.Models; using HotelHeadwaiterApp.Models; using Microsoft.AspNetCore.Mvc; using Microsoft.IdentityModel.Tokens; @@ -151,6 +154,10 @@ namespace HotelHeadwaiterApp.Controllers { throw new Exception("Цена не может быть отрицательной"); } + if (string.IsNullOrEmpty(lunchPrice.ToString())) + { + throw new Exception("Введите цену"); + } APIClient.PostRequest("api/lunch/createlunch", new LunchBindingModel { LunchPrice = lunchPrice, @@ -185,6 +192,10 @@ namespace HotelHeadwaiterApp.Controllers { throw new Exception("Цена не может быть отрицательной"); } + if (string.IsNullOrEmpty(lunchPrice.ToString())) + { + throw new Exception("Введите цену"); + } APIClient.PostRequest("api/lunch/updatelunch", new LunchBindingModel { @@ -221,6 +232,169 @@ namespace HotelHeadwaiterApp.Controllers Response.Redirect("ListLunches"); } + public IActionResult ListRooms() + { + if (APIClient.Headwaiter == null) + { + return Redirect("~/Home/Enter"); + } + return View(APIClient.GetRequest>($"api/room/getroomlist?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("Введите цену"); + } + if (roomPrice < 0) + { + throw new Exception("Цена не может быть отрицательной"); + } + APIClient.PostRequest("api/room/createroom", new RoomBindingModel + { + RoomName = roomName, + RoomPrice = roomPrice, + RoomFrame = roomFrame, + HeadwaiterId = APIClient.Headwaiter.Id, + }); + Response.Redirect("ListRooms"); + } + + public IActionResult UpdateRoom() + { + if (APIClient.Headwaiter == null) + { + return Redirect("~/Home/Enter"); + } + ViewBag.Rooms = APIClient.GetRequest>($"api/room/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("Введите цену"); + } + if (roomPrice < 0) + { + throw new Exception("Цена не может быть отрицательной"); + } + APIClient.PostRequest("api/room/updateroom", new RoomBindingModel + { + Id = room, + RoomName = roomName, + RoomPrice = roomPrice, + RoomFrame = roomFrame, + HeadwaiterId = APIClient.Headwaiter.Id + }); + Response.Redirect("ListRooms"); + } + + [HttpGet] + public Tuple? GetRoom(int roomId) + { + if (APIClient.Headwaiter == null) + { + throw new Exception("Необходима авторизация"); + } + var result = APIClient.GetRequest>>>($"api/room/getroombyid?roomId={roomId}"); + if (result == null) + { + return default; + } + string table = ""; + for (int i = 0; i < result.Item2.Count; i++) + { + var lunchName = result.Item2[i].Item1; + var lunchPrice = result.Item2[i].Item2; + table += ""; + table += $"{lunchName}"; + table += $"{lunchPrice}"; + table += ""; + } + return Tuple.Create(result.Item1, table); + } + + public IActionResult AddLunchToRoom() + { + if (APIClient.Headwaiter == null) + { + return Redirect("~/Home/Enter"); + } + return View(Tuple.Create(APIClient.GetRequest>($"api/room/getroomlist?headwaiterId={APIClient.Headwaiter.Id}"), + APIClient.GetRequest>($"api/lunch/getlunchlist?headwaiterId={APIClient.Headwaiter.Id}"))); + } + + [HttpPost] + public void AddLunchToRoom(int room, int[] lunch) + { + if (APIClient.Headwaiter == null) + { + throw new Exception("Необходима авторизация"); + } + for (int i = 0; i < lunch.Length; i++) + { + APIClient.PostRequest("api/room/AddLunchToRoom", Tuple.Create( + new RoomSearchModel() { Id = room }, + new LunchViewModel() { Id = lunch[i] } + )); + } + Response.Redirect("ListRooms"); + } + + public IActionResult DeleteRoom() + { + if (APIClient.Headwaiter == null) + { + return Redirect("~/Home/Enter"); + } + ViewBag.Rooms = APIClient.GetRequest>($"api/room/getroomlist?headwaiterId={APIClient.Headwaiter.Id}"); + return View(); + } + + [HttpPost] + public void DeleteRoom(int room) + { + if (APIClient.Headwaiter == null) + { + throw new Exception("Необходима авторизация"); + } + APIClient.PostRequest("api/room/deleteroom", new RoomBindingModel + { + Id = room + }); + Response.Redirect("ListRooms"); + } + [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)] public IActionResult Error() { diff --git a/Hotel/HotelHeadwaiterApp/Views/Home/CreateRoom.cshtml b/Hotel/HotelHeadwaiterApp/Views/Home/CreateRoom.cshtml new file mode 100644 index 0000000..4e8f4a2 --- /dev/null +++ b/Hotel/HotelHeadwaiterApp/Views/Home/CreateRoom.cshtml @@ -0,0 +1,82 @@ +@using HotelContracts.ViewModels; +@using HotelDataModels.Models; + +@{ + ViewData["Title"] = "CreateRoom"; +} + +
+
+

Добавление номера

+
+
+ +
+ +
+
+ +
+ +
+
+ +
+ +
+
+ + + + + + + + + + +
+ Обед + + Цена +
+
+
+ +
+
+ +@section Scripts +{ + +} \ No newline at end of file diff --git a/Hotel/HotelHeadwaiterApp/Views/Home/DeleteRoom.cshtml b/Hotel/HotelHeadwaiterApp/Views/Home/DeleteRoom.cshtml new file mode 100644 index 0000000..fe096f1 --- /dev/null +++ b/Hotel/HotelHeadwaiterApp/Views/Home/DeleteRoom.cshtml @@ -0,0 +1,17 @@ +@{ + ViewData["Title"] = "DeleteRoom"; +} + +
+
+

Удаление номера

+
+
+ + +
+
+
+ +
+
\ No newline at end of file diff --git a/Hotel/HotelHeadwaiterApp/Views/Home/ListRooms.cshtml b/Hotel/HotelHeadwaiterApp/Views/Home/ListRooms.cshtml new file mode 100644 index 0000000..5d580d2 --- /dev/null +++ b/Hotel/HotelHeadwaiterApp/Views/Home/ListRooms.cshtml @@ -0,0 +1,76 @@ +@using HotelContracts.ViewModels + +@model List + +@{ + ViewData["Title"] = "ListRooms"; +} + +
+

Список номеров

+
+ +
+
+
+
+ +
+ + + + + + + + + + + @foreach (var item in Model) + { + + + + + + + } + +
+ Номер + + Корпус + + Название + + Цена +
+ @Html.DisplayFor(modelItem => item.Id) + + @Html.DisplayFor(modelItem => item.RoomFrame) + + @Html.DisplayFor(modelItem => item.RoomName) + + @Html.DisplayFor(modelItem => item.RoomPrice) +
+
+
+
+
+
+ + \ No newline at end of file diff --git a/Hotel/HotelHeadwaiterApp/Views/Home/UpdateRoom.cshtml b/Hotel/HotelHeadwaiterApp/Views/Home/UpdateRoom.cshtml new file mode 100644 index 0000000..1aa7186 --- /dev/null +++ b/Hotel/HotelHeadwaiterApp/Views/Home/UpdateRoom.cshtml @@ -0,0 +1,87 @@ +@using HotelContracts.ViewModels; +@using HotelDataModels.Models; + +@{ + ViewData["Title"] = "UpdateRoom"; +} + +
+
+

Изменение номера

+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + + + + + + + + + +
+ Обед + + Цена +
+
+
+
+ +
+
+ +@section Scripts +{ + +} \ No newline at end of file