Hotel Booking App Using asp.net Mvc 5 EF
RicaseV1 App
// City Model
public class City
{
public int CityId { get; set; }
public string CityName { get; set; }
}
// Hotel Model
public class Hotel
{
public int HotelId { get; set; }
public string HotelName { get; set; }
public int StarRating { get; set; }
public string HotelCode { get; set; }
public string Address { get; set; }
public int CityId { get; set; }
// Navigation property for the City
public virtual City City { get; set; }
}
// Room Type Model
public class RoomType
{
public int RoomTypeId { get; set; }
public string RoomTypeName { get; set; }
public decimal Tariff { get; set; }
}
// Hotel Room Model
public class HotelRoom
{
public int RoomId { get; set; }
public int RoomTypeId { get; set; }
public string HotelCode { get; set; }
// Navigation properties
public virtual RoomType RoomType { get; set; }
public virtual Hotel Hotel { get; set; }
}
// Booking Model
public class Booking
{
public int BookingId { get; set; }
public DateTime Date { get; set; }
public string HotelCode { get; set; }
public int RoomTypeId { get; set; }
public decimal Tariff { get; set; }
public int NumberOfRoom { get; set; }
public string PaxName { get; set; }
public string Contact { get; set; }
public DateTime Checkin { get; set; }
public DateTime Checkout { get; set; }
// Navigation properties
public virtual Hotel Hotel { get; set; }
public virtual RoomType RoomType { get; set; }
}
2.)
Create Database Context:
using System.Data.Entity;
public class HotelDbContext : DbContext
{
public ApplicationDbContext()
: base("name=MySqlConnection")
{
}
public DbSet<City> Cities { get; set; }
public DbSet<Hotel> Hotels { get; set; }
public DbSet<RoomType> RoomTypes { get; set; }
public DbSet<HotelRoom> HotelRooms { get; set; }
public DbSet<Booking> Bookings { get; set; }
}
3.) web.config
<connectionStrings>
<add name="MySqlConnection" connectionString="YourConnectionStringHere" providerName="System.Data.SqlClient" />
</connectionStrings>
4.) Enable-Migrations
Add-Migration InitialCreate
Update-Database
=================================dbinsertion====================================
INSERT INTO Cities (CityName) VALUES
('New York'),
('Los Angeles'),
('Chicago'),
('San Francisco'),
('Miami');
INSERT INTO RoomTypes (RoomTypeName, Tariff) VALUES
('Single', 100),
('Double', 150),
('Suite', 250);
INSERT INTO HotelRooms (RoomTypeId, HotelCode) VALUES
(1, 'HOT001'),
(1, 'HOT002'),
(2, 'HOT003'),
(2, 'HOT004'),
(3, 'HOT005');
INSERT INTO Bookings (Date, HotelCode, RoomTypeId, Tariff, TotalAmount, UserId, Hotel_HotelId) VALUES
('2023-09-04', 'HOT001', 1, 100, 100, ),
('2023-09-05', 'HOT002', 1, 100, 100, ),
('2023-09-06', 'HOT003', 2, 150, 150, ),
('2023-09-07', 'HOT004', 2, 150, 250, ),
('2023-09-08', 'HOT005', 3, 250, 1, );
-- Assuming your table is named "NumberOfRoom"
INSERT INTO NumberOfRooms (NumberOfRooms) VALUES (1);
INSERT INTO NumberOfRooms (NumberOfRooms) VALUES (2);
INSERT INTO NumberOfRooms (NumberOfRooms) VALUES (3);
INSERT INTO NumberOfRooms (NumberOfRooms) VALUES (4);
INSERT INTO NumberOfRooms (NumberOfRooms) VALUES (5);
INSERT INTO Hotels (HotelName, StarRating, HotelCode, Address, CityId, NumberOfRoomId) VALUES
('Hotel A', 4, 'HOT001', '123 Main St, New York', 1,2),
('Hotel B', 3, 'HOT002', '456 Elm St, Los Angeles', 2,5),
('Hotel C', 5, 'HOT003', '789 Oak St, Chicago', 3,3),
('Hotel D', 4, 'HOT004', '101 Pine St, San Francisco', 4,1),
('Hotel E', 3, 'HOT005', '202 Maple St, Miami', 5,5);
INSERT INTO PaymentInfoes (Payment)
VALUES
( 100.50),
( 75.25),
( 150.75),
( 200.00),
( 50.50);
INSERT INTO Users (FirstName, MiddleName, LastName, Sex, DOB, Age, Contact, Email, Password, Aadhar, AddressId, RoomType, Checkin, Checkout, PaymentId, UserAddresses_UserAddressId)
VALUES
( 'John', 'Doe', 'Smith', 'Male', '1990-01-01', 32, '1234567890', 'john.doe@example.com', 'password123', 123456789, 1, 'Single', '2024-02-03', '2024-02-10', 1, 1),
( 'Jane', 'Marie', 'Johnson', 'Female', '1985-05-15', 36, '9876543210', 'jane.johnson@example.com', 'securepass', 987654321, 2, 'Double', '2024-02-05', '2024-02-12', 2, 2),
( 'Robert', 'Lee', 'Davis', 'Male', '1998-08-22', 23, '6543210987', 'robert.davis@example.com', 'pass123', 555555555, 3, 'Suite', '2024-02-07', '2024-02-14', 3,3),
( 'Emily', 'Grace', 'Taylor', 'Female', '1992-03-10', 29, '7890123456', 'emily.taylor@example.com', 'secure123', 111111111, 4, 'Single', '2024-02-09', '2024-02-16', 4,4),
( 'Michael', 'John', 'Brown', 'Male', '1980-12-05', 41, '3456789012', 'michael.brown@example.com', 'password456', 999999999, 5, 'Double', '2024-02-11', '2024-02-18', 5,5);
INSERT INTO UserAddresses (CrosspondenceAddress, IsSameAsAbove, PermanentAddress, City, State, Country)
VALUES
( 'CrosspondenceAddress1', 1, 'PermanentAddress1', 'City1', 'State1', 'Country1'),
( 'CrosspondenceAddress2', 0, 'PermanentAddress2', 'City2', 'State2', 'Country2'),
( 'CrosspondenceAddress3', 1, 'PermanentAddress3', 'City3', 'State3', 'Country3'),
( 'CrosspondenceAddress4', 0, 'PermanentAddress4', 'City4', 'State4', 'Country4'),
( 'CrosspondenceAddress5', 1, 'PermanentAddress5', 'City5', 'State5', 'Country5');
==================================================================================
HomeController.cs
using RicaseV1.Data;
using RicaseV1.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Web;
using System.Web.Mvc;
namespace RicaseV1.Controllers
{
public class HomeController : Controller
{
private ApplicationDbContext db;
public HomeController()
{
db = new ApplicationDbContext();
}
public HomeController(ApplicationDbContext dbs)
{
db = dbs;
}
public ActionResult SearchHotel()
{
LoadDDL();
return View();
}
public ActionResult HotelList(int selectedCityId, int selectedRoomTypeId, int numberOfRooms)
{
var roomBooked = (from hm in db.Hotels
join hr in db.RoomTypes on hm.HotelId equals hr.RoomTypeId
join ci in db.Cities on hm.HotelId equals ci.CityId
join bo in db.Bookings on hm.HotelId equals bo.NumberOfRoom
where ci.CityId == selectedCityId && hr.RoomTypeId == selectedRoomTypeId && bo.NumberOfRoom == numberOfRooms
select new HotelVM
{
Cities = ci,
RoomTypes = hr,
Hotels = hm,
Bookings = bo
}).ToList();
return View(roomBooked);
}
#region C# 'include' method
//public ActionResult HotelList(HotelVM hotelVm)
//{
// var query = db.Bookings.Include("City").Include("HotelRooms.RoomType");
// IQueryable<Booking> filteredQuery = query; // Create a new IQueryable<Hotel>
// if (hotelVm.SelectedCityId > 0)
// {
// filteredQuery = filteredQuery.Where(h => h..CityId == hotelVm.SelectedCityId);
// }
// if (hotelVm.SelectedRoomTypeId > 0)
// {
// filteredQuery = filteredQuery.Where(h => h.RoomType.RoomTypeId.Any(hr => hr.RoomType.RoomTypeId == hotelVm.SelectedRoomTypeId));
// }
// // Perform additional filtering based on Number of Rooms and Dates
// hotelVm.Bookings = filteredQuery.FirstOrDefault();
// return View("HotelList", hotelVm);
//}
#endregion
public ActionResult Book(int? hotelId)
{
if (hotelId == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
var hotelBook = db.Bookings.Where(x => x.BookingId == hotelId).FirstOrDefault();
return View("Book", hotelBook);
}
#region inbuilt method
public ActionResult Index()
{
return View();
}
public ActionResult About()
{
ViewBag.Message = "Your application description page.";
return View();
}
public ActionResult Contact()
{
ViewBag.Message = "Your contact page.";
return View();
}
private void LoadDDL()
{
try
{
var City = db.Cities.ToList();
var hotelbooks = db.Bookings.ToList();
var roomTypes = db.RoomTypes.ToList();
var citiesFromDb = new SelectList(City.Where(c => c.CityId != 0), "CityId", "CityName");
var numberOfRoomsFromDb = new SelectList(hotelbooks, "BookingId", "NumberOfRoom");
var roomTypeFromDb = new SelectList(roomTypes, "RoomTypeId", "RoomTypeName");
ViewData["Cities"] = citiesFromDb;
ViewData["NoOfRoom"] = numberOfRoomsFromDb;
ViewData["TypeofRoom"] = roomTypeFromDb;
}
catch (NullReferenceException ex)
{
// Consider logging the exception or handling it appropriately.
Console.WriteLine("A NullReferenceException occurred: " + ex.Message);
}
}
#endregion
}
}
===================================================================
SearchHotel.cshtml
@model RicaseV1.Models.HotelVM
@{
ViewBag.Title = "Search Hotel";
}
<h2>Search Hotel</h2>
@using (Html.BeginForm("HotelList", "Home", FormMethod.Post))
{
@Html.AntiForgeryToken()
<div class="form-horizontal">
@*<h4>HotelMaster</h4>*@
<hr />
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
<div class="form-group">
@Html.LabelFor(model => model.SelectedCityId, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.DropDownListFor(model => model.SelectedCityId, ViewData["Cities"] as SelectList, "---------Select City------------", new { @class = "form-control" })
@Html.ValidationMessageFor(model => model.SelectedCityId, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.CheckinDate, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.CheckinDate, new { htmlAttributes = new { @class = "datepicker form-control" } })
@Html.ValidationMessageFor(model => model.CheckinDate, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.CheckoutDate, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.CheckoutDate, new { htmlAttributes = new { @class = "datepicker form-control" } })
@Html.ValidationMessageFor(model => model.CheckoutDate, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.NumberOfRooms, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.DropDownListFor(model => model.NumberOfRooms, ViewData["NoOfRoom"] as SelectList, "---------Select Room------------", new { @class = "form-control" })
@Html.ValidationMessageFor(model => model.NumberOfRooms, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.SelectedRoomTypeId, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.DropDownListFor(model => model.SelectedRoomTypeId, ViewData["TypeofRoom"] as SelectList, "---------Select Room Type------------", new { @class = "form-control" })
@Html.ValidationMessageFor(model => model.SelectedRoomTypeId, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Search" class="btn btn-success" />
</div>
</div>
</div>
}
<div>
@Html.ActionLink("Back to List", "Index")
</div>
<link href="~/Content/themes/base/jquery-ui.min.css" rel="stylesheet" />
@section Scripts {
<script src="~/Scripts/jquery-ui-1.13.2.min.js"></script>
@Scripts.Render("~/bundles/jqueryval")
<script>
$(document).ready(function () {
$(".datepicker").datepicker(
{
dateFormat: "dd-mm-yy",
minDate: 'today',
changemonth: true,
changeyear: true
}
);
});
</script>
}
==================================================================================
HotelList.cshtl
@model List<RicaseV1.Models.HotelVM>
@{
ViewBag.Title = "Hotel List";
}
<h2>Hotel List</h2>
<table class="table">
<thead>
<tr>
<th>Hotel Name</th>
<th>City</th>
<th>Room Type</th>
<th>Number of Room</th>
<th>Action</th>
</tr>
</thead>
<tbody>
@foreach (var hotel in Model)
{
<tr>
<td>@hotel.Hotels.HotelName</td>
<td>@hotel.Cities.CityName</td>
<td>@hotel.RoomTypes.RoomTypeName</td>
<td>@hotel.Bookings.NumberOfRoom</td>
<td>
<a href="@Url.Action("Book", "Home", new { hotelId = hotel.Hotels.HotelId })">Select</a>
</td>
</tr>
}
</tbody>
</table>
==================================================================================
Book.cshtml
@model RicaseV1.Models.Booking
@{
ViewBag.Title = "Book";
}
<h2>Book</h2>
<div>
<h4>Booking</h4>
<hr />
<dl class="dl-horizontal">
<dt>
@Html.DisplayNameFor(model => model.RoomType.RoomTypeName)
</dt>
<dd>
@Html.DisplayFor(model => model.RoomType.RoomTypeName)
</dd>
<dt>
@Html.DisplayNameFor(model => model.Date)
</dt>
<dd>
@Html.DisplayFor(model => model.Date)
</dd>
<dt>
@Html.DisplayNameFor(model => model.HotelCode)
</dt>
<dd>
@Html.DisplayFor(model => model.HotelCode)
</dd>
<dt>
@Html.DisplayNameFor(model => model.Tariff)
</dt>
<dd>
@Html.DisplayFor(model => model.Tariff)
</dd>
<dt>
@Html.DisplayNameFor(model => model.NumberOfRoom)
</dt>
<dd>
@Html.DisplayFor(model => model.NumberOfRoom)
</dd>
<dt>
@Html.DisplayNameFor(model => model.PaxName)
</dt>
<dd>
@Html.DisplayFor(model => model.PaxName)
</dd>
<dt>
@Html.DisplayNameFor(model => model.Contact)
</dt>
<dd>
@Html.DisplayFor(model => model.Contact)
</dd>
<dt>
@Html.DisplayNameFor(model => model.Checkin)
</dt>
<dd>
@Html.DisplayFor(model => model.Checkin)
</dd>
<dt>
@Html.DisplayNameFor(model => model.Checkout)
</dt>
<dd>
@Html.DisplayFor(model => model.Checkout)
</dd>
</dl>
</div>
<p>
@Html.ActionLink("Edit", "Edit", new { id = Model.BookingId }) |
@Html.ActionLink("Back to List", "Index")
</p>
No comments: