public ActionResult Booking(int id) { var Room = _db.Room.Find(id); var CheckInDate = Session["CheckInDate"] == null?DateTime.Now.AddDays(1) : (DateTime)Session["CheckInDate"]; var CheckOutDate = Session["CheckOutDate"] == null?CheckInDate.AddDays(2) : (DateTime)Session["CheckOutDate"]; var DateSpans = new TimeSpan(CheckOutDate.Ticks - CheckInDate.Ticks).Days; var Dates = new List <DateTime>(); for (var i = 0; i < DateSpans; i++) { Dates.Add(CheckInDate.AddDays(i)); } var amt = new RoomAmt().CurrentAmt(id); var Booking = new BookingModel(); Booking.UnitPrice = amt; Booking.Address = Room.Hotel.Address; Booking.BedType = _db.CodeFile.Find(Room.BedType).ItemDescription + "/" + Room.BedAmount; Booking.Name = Room.Name; Booking.ID = Room.ID; Booking.MaxPeople = Room.MaxPerson; Booking.Tel = Room.Hotel.Tel; Booking.Total = amt; Booking.CheckInDate = CheckInDate; Booking.CheckOutDate = CheckOutDate; Booking.RoomType = _db.CodeFile.Find(Room.RoomType).ItemDescription; var Sum = _db.OrderMaster.Where(o => o.ProductId == Room.ID && (CheckInDate >= o.CheckIn && CheckInDate < o.CheckOut)).Select(o => o.Quantity).DefaultIfEmpty(0).Sum(); Booking.Quantity = Room.Quantity - Sum; var Today = DateTime.Now; var My_Bonus = 0M; var Used_Bonus = 0M; //紅利 Booking.Bonus = 0; //目前使用者紅利 var MyBonus = _db.MyBonus.Where(o => o.UserID == CurrentUser.Id && o.BonusStatus == BonusStatusEnum.CanUse.ToString()).ToList(); //已使用的紅利 var UsedBonus = _db.Bonus.Where(o => o.UserId == CurrentUser.Id).ToList(); if (UsedBonus != null && UsedBonus.Count > 0) { Used_Bonus = UsedBonus.Sum(o => o.Amt); } if (MyBonus != null && MyBonus.Count > 0) { My_Bonus = MyBonus.Sum(o => o.Bonus); } Booking.Bonus = My_Bonus - Used_Bonus; return(View(Booking)); }
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)); }
public ActionResult Booking([Bind(Exclude = "Bonus")] BookingModel model) { if (!ModelState.IsValid) { ViewData.Model = model; return(View()); } var Room = _db.Room.Find(model.ID); //var DateTims = model.DateList.Split(','); model.CheckInDate = Session["CheckInDate"] == null?DateTime.Now.AddDays(1) : (DateTime)Session["CheckInDate"]; model.CheckOutDate = Session["CheckOutDate"] == null?model.CheckInDate.AddDays(1) : (DateTime)Session["CheckOutDate"]; var Sum = _db.OrderMaster.Where(o => o.ProductId == Room.ID && ( (DbFunctions.DiffDays(o.CheckIn, model.CheckInDate) == 0) || (DbFunctions.DiffDays(o.CheckOut, model.CheckOutDate) == 0) )).Select(o => o.Quantity).DefaultIfEmpty(0).Sum(); var Filled = Room.Quantity >= Sum; if (!Filled) { ModelState.AddModelError("", "客滿"); return(RedirectToAction("Detail", new { id = Room.Hotel.ID })); } //var Dates = model.DateList.Split(',').Select(DateTime.Parse).ToList(); var CheckInDate = model.CheckInDate; var CheckOutDate = model.CheckOutDate; decimal Total = new RoomAmt().CurrentAmt(Room.ID); var PayGo = new PayGoRequest(); var Now = DateTime.Now; PayGo.MerchantOrderNo = Now.ToString("yyyyMMdd") + Guid.NewGuid().GetHashCode().ToString("x").ToUpper(); PayGo.LangType = "zh-tw"; PayGo.TimeStamp = Convert.ToInt32(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1)).TotalSeconds).ToString(); PayGo.Amt = Convert.ToInt16(Total) * model.Quantity; //PayGo.Amt = 30; PayGo.TradeLimit = 120; PayGo.ItemDesc = string.Format("{0}{1}房型,NT.{2}元整/訂購人{3}", Room.Hotel.Name, Room.Name, Total, CurrentUser.Email); PayGo.Email = model.info.Email; PayGo.EmailModify = 0; PayGo.LoginType = 0; PayGo.OrderComment = ""; PayGo.CheckValue = new Pay2Go().CheckValue(PayGo.Amt, PayGo.MerchantOrderNo, PayGo.TimeStamp); PayGo.RespondType = "JSON"; var ExpireDate = Now.AddDays(2).ToString("yyyy-MM-dd"); PayGo.ExpireDate = Now.AddDays(2).ToString("yyyyMMdd"); PayGo.ExpireTime = ""; var PaymentType = string.Empty; #region ##付款方式 switch (model.PaymentType) { case 1: PayGo.CREDIT = 1; PayGo.InstFlag = "0"; PayGo.WEBATM = 0; PayGo.VACC = 0; PayGo.CVS = 0; PaymentType = "信用卡一次付清"; break; case 2: PayGo.CREDIT = 0; PayGo.InstFlag = "3"; PayGo.WEBATM = 0; PayGo.VACC = 0; PayGo.CVS = 0; PaymentType = "信用卡分三期"; break; case 3: PayGo.CREDIT = 0; PayGo.InstFlag = "0"; PayGo.WEBATM = 1; PayGo.VACC = 0; PayGo.CVS = 0; PaymentType = "網路ATM"; break; case 4: PayGo.CREDIT = 0; PayGo.InstFlag = "0"; PayGo.WEBATM = 0; PayGo.VACC = 1; PayGo.CVS = 0; PaymentType = "實體ATM"; break; case 5: PayGo.CREDIT = 0; PayGo.InstFlag = "0"; PayGo.WEBATM = 0; PayGo.VACC = 0; PayGo.CVS = 1; PaymentType = "超商付款"; break; case 6: PayGo.CREDIT = 0; PayGo.InstFlag = "0"; PayGo.WEBATM = 0; PayGo.VACC = 0; PayGo.CVS = 0; PayGo.BARCODE = 1; PaymentType = "條碼付款"; break; } #endregion BookingCommit BookCommit = new BookingCommit(); BookCommit.Booking = model; BookCommit.PayGoRequest = PayGo; var PayAmt = PayGo.Amt - model.Bonus; var order = new OrderMaster { Address = model.info.Address, Amount = PayGo.Amt, PayAmt = PayAmt, BonusAmt = model.Bonus, CheckIn = model.CheckInDate, CheckOut = model.CheckOutDate, MerchantOrderNo = PayGo.MerchantOrderNo, Created = DateTime.Now, PayVendor = "Pay2Go", PaymentType = PaymentType, ProductId = Room.ID, ProductName = Room.Name, ProductType = "Room", Creator = CurrentUser.Id, Modified = Now, Modify = CurrentUser.Id, Quantity = model.Quantity, Tel = model.info.Phone, UserId = CurrentUser.Id, Email = model.info.Email, Name = model.info.Name, Status = OrderType.Unpaid.ToString(), ExpireDate = PayGo.CREDIT == 1 ? (DateTime?)null : DateTime.Parse(ExpireDate) }; _db.OrderMaster.Add(order); if (model.Bonus > 0) { _db.Bonus.Add(new Bonus { Amt = model.Bonus, UserId = CurrentUser.Id, Created = Now, Creator = CurrentUser.Id, MerchantOrderNo = order.MerchantOrderNo }); } _db.SaveChanges(); return(View("PayCommit", BookCommit)); }