예제 #1
0
        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));
        }
예제 #2
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);
        }
예제 #3
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));
        }
예제 #4
0
        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));
        }