示例#1
0
 public ActionResult PayCommit(PayGoRequest model)
 {
     return(View());
 }
示例#2
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));
        }