Advertisement

Advertisement

Hotel Booking App Using asp.net Mvc 5 EF Code 1st Approach

 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>


Hotel Booking App Using asp.net Mvc 5 EF Code 1st Approach Hotel Booking App Using asp.net Mvc 5 EF Code 1st Approach Reviewed by Rikesh on September 08, 2023 Rating: 5

No comments:

Powered by Blogger.