예제 #1
0
        public List <HotelsViewModel> GetHotels(HotelSearchViewModel model)
        {
            if (model.Facility == null)
            {
                model.Facility = new List <string>();
            }



            if (model.Scenic == null)
            {
                model.Scenic = new List <string>();
            }


            var _db    = new MyAnythingEntities();
            var result = new List <HotelsViewModel>();
            var take   = (string.IsNullOrEmpty(model.Price) && model.Facility.Count <= 0) ? 30 : 300;

            if (model == null || model.BeginDate == DateTime.MinValue)
            {
                model.BeginDate = DateTime.Now;
            }

            var MinPrice = 0;
            var MaxPrice = 0;

            #region ## 價格區間
            switch (model.Price)
            {
            case "1":
                MinPrice = 0;
                MaxPrice = 999;
                break;

            case "2":
                MinPrice = 1000;
                MaxPrice = 1999;
                break;

            case "3":
                MinPrice = 2000;
                MaxPrice = 2999;
                break;

            case "4":
                MinPrice = 3000;
                MaxPrice = 3999;
                break;

            case "5":
                MinPrice = 4000;
                MaxPrice = 4999;
                break;

            case "6":
                MinPrice = 5000;
                MaxPrice = 9999999;
                break;
            }
            #endregion



            result = (from h in _db.Hotel
                      join city in _db.City
                      on h.City equals city.ID
                      join area in _db.Area
                      on h.Area equals area.ID
                      where h.Room.ToList().Count > 0 &&
                      (
                          (string.IsNullOrEmpty(model.Word) ||
                           (h.Name.Contains(model.Word))) &&
                          (model.City <= 0 || h.City == model.City) &&
                          (model.Facility.Count <= 0 || model.Facility.All(w => h.Facility.Contains(w))) &&
                          (model.Scenic.Count <= 0 || model.Scenic.All(w => h.Scenics.Contains(w)))

                      )
                      select new HotelsViewModel
            {
                ID = h.ID,
                Address = h.Address,
                Location = city.Name + area.Name,
                Name = h.Name,
                Feature = h.Feature,
                Images = h.HotelImage.ToList(),
                Facility = h.Facility,
                Scenic = h.Scenics
            }).OrderBy(o => Guid.NewGuid()).Take(take).ToList();
            var RoomAmt  = new RoomAmt();
            var r_result = new List <HotelsViewModel>();
            foreach (var m in result)
            {
                var Amts  = new List <decimal>();
                var Rooms = _db.Room.Where(o => o.HotelId == m.ID).ToList();
                foreach (var item in Rooms)
                {
                    Amts.Add(RoomAmt.CurrentAmt(item.ID));
                }

                m.FixedPrice = Amts.Min();
            }


            _db.Dispose();

            if (!string.IsNullOrEmpty(model.Price))
            {
                result = result.Where(o => o.FixedPrice >= MinPrice && o.FixedPrice <= MaxPrice).Take(30).ToList();
            }
            return(result);
        }
예제 #2
0
        public ActionResult Detail(int id)
        {
            var RoomAmt = new RoomAmt();
            var model   = _db.Hotel.Where(o => o.ID == id).Select(o =>
                                                                  new HotelDetail
            {
                ID         = o.ID,
                Address    = o.Address,
                options    = o.Facility,
                Images     = o.HotelImage.ToList(),
                Name       = o.Name,
                Feature    = o.Feature,
                Infomation = o.Information,
                Tel        = o.Tel,
                Scenics    = o.Scenics,
                City       = o.City,
                Area       = o.Area,
                Facility   = o.Facility,
            }).FirstOrDefault();

            var Facilities = model.Facility.Split(',').Select(int.Parse).ToList();

            model.Facilities = _db.Facility.Where(o => Facilities.Contains(o.ID)).Select(p => p.Text).ToList();

            var Date = Session["CheckInDate"] == null?DateTime.Now.AddDays(1) : (DateTime)Session["CheckInDate"];

            var DayOfWeek = Date.DayOfWeek.ToString("d");
            var IsHoliday = false;

            model.Rooms = (from r in _db.Room
                           join code in _db.CodeFile
                           on r.BedType equals code.ID
                           join code2 in _db.CodeFile
                           on r.RoomType equals code2.ID
                           where r.HotelId == model.ID
                           select new RoomModel
            {
                ID = r.ID,
                BedType = code.ItemDescription,
                Feature = r.Feature,
                Images = r.RoomImage.ToList(),
                Name = r.Name,
                FixedPrice = r.FixedPrice,
                HolidayPrice = r.HolidayPrice,
                //CurrentPrice = RoomAmt.CurrentAmt(r.ID),
                Quantity = r.Quantity,
                RoomType = code2.ItemDescription,
                DayPrice = IsHoliday ? r.HolidayPrice : r.DayPrice,
                BedAmount = r.BedAmount,
                Amt = _db.OrderMaster.Where(o => o.ProductId == r.ID &&
                                            (

                                                (DbFunctions.DiffDays(o.CheckIn, Date) == 0) ||
                                                (DbFunctions.DiffDays(o.CheckOut, Date) == 0)

                                            )).Select(o => o.Quantity).DefaultIfEmpty(0).Sum()
            }).ToList();

            model.Rooms = model.Rooms.Where(o => o.Quantity >= o.Amt).ToList();
            foreach (var item in model.Rooms)
            {
                item.CurrentPrice = RoomAmt.CurrentAmt(item.ID);
            }
            ViewBag.NearHotels = _db.Hotel.Where(o => o.City == model.City && o.ID != id).OrderBy(o => Guid.NewGuid()).Take(5).ToList();
            var sce = string.IsNullOrEmpty(model.Scenics) ? new List <int>() : model.Scenics.Split(',').Select(int.Parse).ToList();

            ViewBag.Scenics = _db.Scenic.Where(o => sce.Contains(o.ID)).Select(o => o.Name).ToList();;
            return(View(model));
        }