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); }
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)); }