public IActionResult Checkout(int id)
        {
            var asset = assets.GetById(id);

            var model = new CheckOutModels
            {
                AssetId       = id,
                ImageUrl      = asset.ImageUrl,
                Title         = asset.Tittle,
                LibraryCardId = "",
                IsCheckedOut  = checkOut.IsCheckedOut(id)
            };

            return(View(model));
        }
        public IActionResult Hold(int id)
        {
            var asset = assets.GetById(id);

            var model = new CheckOutModels
            {
                AssetId       = id,
                ImageUrl      = asset.ImageUrl,
                Title         = asset.Tittle,
                LibraryCardId = "",
                HoldCount     = checkOut.GetCurrentHolds(id).Count()
            };

            return(View(model));
        }
Exemple #3
0
        public async Task <ActionResult> Shipping()
        {
            var userId = User.Identity.GetUserId();

            var _shippingAddressList = await(from o in data.CustomerShippingAddresses.Where(i => i.AspNetUserId == userId)
                                             select o).ToListAsync();


            ViewBag.ShippingAddresses = _shippingAddressList;

            var _model = new CheckOutModels();


            return(View(_model));
        }
Exemple #4
0
        public ActionResult CheckOut()
        {
            CheckOutModels model = new CheckOutModels();

            var cartproductsCookie = Request.Cookies["CartProduct"];

            if (cartproductsCookie != null)
            {
                //var productID = cartproductsCookie.Value;// hamile uta - bata separate gareko
                //var ids = productID.Split('-'); // teslai split gareko

                //List<int> PpiDS = ids.Select(x => int.Parse(x)).ToList(); //teslai int ma convert gareko

                model.cartProductID = cartproductsCookie.Value.Split('-').Select(x => int.Parse(x)).ToList();


                model.CartProducts = productsService.GetOne(model.cartProductID);
            }

            return(View(model));
        }
Exemple #5
0
        public async Task <bool> createOrder(CheckOutModels model)
        {
            var dateTime        = DateTime.UtcNow;
            var _orderNewStatus = "";

            Order _order = new Order()
            {
                Id           = Guid.NewGuid().ToString(),
                AspNetUserId = model.UserId,
                DateCreated  = dateTime,
            };

            //set order status and orderdetail status if paid
            if (model.PaymentStatus == "paid")
            {
                _orderNewStatus = "shipping";
            }



            OrderDetailShippingAddress _shipping = new OrderDetailShippingAddress()
            {
                Id      = Guid.NewGuid().ToString(),
                Line1   = model.ShippingAddress.Line1,
                Line2   = model.ShippingAddress.Line2,
                State   = model.ShippingAddress.State,
                City    = model.ShippingAddress.City,
                OdersId = _order.Id
            };

            data.Orders.Add(_order);
            data.OrderDetailShippingAddresses.Add(_shipping);

            foreach (var o in model.Cart)
            {
                OrderDetail _orderDetail = new OrderDetail()
                {
                    Id                 = Guid.NewGuid().ToString(),
                    DateAdded          = dateTime,
                    ProductsId         = o.Id,
                    OrdersId           = _order.Id,
                    ProductAmount      = o.Amount,
                    Quantity           = o.Quantity,
                    OrderDetailsStatus = _orderNewStatus
                };

                data.OrderDetails.Add(_orderDetail);
            }

            //payment entry
            var _payment = new Payment()
            {
                Id           = Guid.NewGuid().ToString(),
                AspNetUserId = model.UserId,
                PaymentDate  = dateTime,
                OrdersId     = _order.Id
            };

            var _paymentDetail = new PaymentDetail()
            {
                Id              = Guid.NewGuid().ToString(),
                PaymentId       = _payment.Id,
                PaymentRef      = model.PaymentRef,
                PayerName       = model.BillingAddress.name,
                PaymentAmount   = model.TotalAmount,
                PaymentMethodId = model.PaymentMethodId
            };

            data.Payments.Add(_payment);
            data.PaymentDetails.Add(_paymentDetail);


            //remove selected item from cart
            var _forDeleteItem = await data.Carts.Where(i => i.AspNetUserId == model.UserId && i.IsSelected == true).ToListAsync();

            data.Carts.RemoveRange(_forDeleteItem);



            try
            {
                await data.SaveChangesAsync();

                return(true);
            }
            catch (Exception ex)
            {
                return(false);
            }
        }
Exemple #6
0
        public async Task <ActionResult> Pay(CheckOutModels model, FormCollection collection)
        {
            var userId = User.Identity.GetUserId();

            //Credit Card
            var _totalAmount = Convert.ToDouble((from o in model.Cart
                                                 group o by new { product = o.Id, amount = o.Amount * o.Quantity } into g
                                                 select new
            {
                Total = g.Key.amount
            }).ToList().Sum(i => i.Total));



            var Billing = new AuthBillingAddress()
            {
                addrLine1   = model.BillingAddress.addressLine1,
                city        = model.BillingAddress.city,
                state       = model.BillingAddress.state,
                country     = model.BillingAddress.country,
                name        = model.BillingAddress.name,
                email       = User.Identity.GetUserName(),
                phoneNumber = "N/A",
                zipCode     = "0",
            };



            var _charge = new ChargeAuthorizeServiceOptions()
            {
                total           = (decimal)_totalAmount,
                currency        = "USD",
                merchantOrderId = "1",
                token           = collection["token"].ToString(),
                billingAddr     = Billing
            };


            var _paymentResult = new PaymentGatewayResponse();


            if (model.PaymentMethodId == 1)
            {
                _paymentResult = _payment.CheckOutTwoCheckOut(_charge);
            }


            model.ShippingAddress = await data.CustomerShippingAddresses.Where(i => i.AspNetUserId == userId && i.IsDefault == true).FirstOrDefaultAsync();


            if (_paymentResult.PaymentStatus != "failed")
            {
                model.PaymentRef    = _paymentResult.refNo;
                model.TotalAmount   = _paymentResult.amount ?? 0;
                model.UserId        = userId;
                model.PaymentStatus = _paymentResult.PaymentStatus;
                dataLayer.createOrder(model);
            }



            return(View(model));
        }
Exemple #7
0
        public async Task <ActionResult> PaymentMethod(CheckOutModels model)
        {
            var userId = User.Identity.GetUserId();


            //update shipping address if has changes and add if new
            if (model.ShippingAddress.Id == null)
            {
                var _newAddress = new CustomerShippingAddress()
                {
                    Id           = Guid.NewGuid().ToString(),
                    AspNetUserId = userId,
                    City         = model.ShippingAddress.City,
                    IsDefault    = model.ShippingAddress.IsDefault,
                    Line1        = model.ShippingAddress.Line1,
                    Line2        = model.ShippingAddress.Line2,
                    State        = model.ShippingAddress.State
                };

                //unselect all except this
                if (model.ShippingAddress.IsDefault)
                {
                    var _defaults = await data.CustomerShippingAddresses.Where(i => i.AspNetUserId == userId).ToListAsync();

                    foreach (var o in _defaults)
                    {
                        if (o.Id != model.ShippingAddress.Id)
                        {
                            o.IsDefault = false;
                        }
                    }
                }



                data.CustomerShippingAddresses.Add(_newAddress);
                await data.SaveChangesAsync();
            }
            else
            {
                bool hasChanges     = false;
                bool defaultChanges = false;

                var _address = await data.CustomerShippingAddresses.FindAsync(model.ShippingAddress.Id);


                //if address changes
                if (_address.IsDefault != model.ShippingAddress.IsDefault)
                {
                    _address.IsDefault = model.ShippingAddress.IsDefault;
                    hasChanges         = true;
                    defaultChanges     = true;
                }
                if (_address.Line1 != model.ShippingAddress.Line1)
                {
                    _address.Line1 = model.ShippingAddress.Line1;
                    hasChanges     = true;
                }
                if (_address.Line2 != model.ShippingAddress.Line2)
                {
                    _address.Line2 = model.ShippingAddress.Line2;
                    hasChanges     = true;
                }
                if (_address.City != model.ShippingAddress.City)
                {
                    _address.City = model.ShippingAddress.City;
                    hasChanges    = true;
                }
                if (_address.State != model.ShippingAddress.State)
                {
                    _address.State = model.ShippingAddress.State;
                    hasChanges     = true;
                }

                //unselect all except this
                if (defaultChanges)
                {
                    var _defaults = await data.CustomerShippingAddresses.Where(i => i.AspNetUserId == userId).ToListAsync();

                    foreach (var o in _defaults)
                    {
                        if (o.Id != model.ShippingAddress.Id)
                        {
                            o.IsDefault = false;
                        }
                    }
                }

                if (hasChanges)
                {
                    await data.SaveChangesAsync();
                }
            }


            var _model = new CheckOutModels()
            {
                Cart = await dataLayer.getProductsListFromCart(userId, true),
            };

            return(View(_model));
        }
Exemple #8
0
        /// <summary>
        /// 结算页面
        /// </summary>
        /// <param name="orderId"></param>
        /// <param name="code"></param>
        /// <returns></returns>
        public ActionResult Checkout(string orderId, string code)
        {
            #region 用户信息部分
            string userOpenId             = string.Empty;
            Tuple <string, string> result = base.getUserOpenId(code);
            if (!string.IsNullOrEmpty(result.Item1))
            {
                userOpenId = result.Item1;
            }
            else if (!string.IsNullOrEmpty(result.Item2))
            {
                return(Redirect(result.Item2));
            }
            ViewBag.userOpenId = userOpenId;
            #endregion

            if (string.IsNullOrEmpty(orderId) || string.IsNullOrEmpty(userOpenId))
            {
                return(RedirectToAction("OrderList", "Order"));
            }

            #region 绑定手机部分
            //用户未点击跳过注册 并且电话为空
            users res      = new users();
            var   resCache = CacheHelper.GetCache("userInfo" + userOpenId);
            if (resCache != null)
            {
                res = (users)resCache;
            }
            else
            {
                res = UserBiz.CreateNew().getUserInfoByOpenId(userOpenId);
                if (res == null)
                {
                    return(RedirectToAction("Register", "User", new { needRegister = "1", fromUrl = Request.RawUrl }));//跳转到注册页面,且必须注册
                }
                else
                {
                    var      start       = DateTime.Now;
                    var      expiredDate = start.AddDays(1);
                    TimeSpan ts          = expiredDate - start;
                    CacheHelper.SetCache("userInfo" + res.openid.ToString(), res, ts);
                    if (!string.IsNullOrEmpty(res.openid))
                    {
                        CookieHelper.SetCookie("userOpenId", res.openid);
                    }
                }
            }

            if (string.IsNullOrEmpty(res.phone))
            {
                return(RedirectToAction("Register", "User", new { needRegister = "1", fromUrl = Request.RawUrl }));//跳转到注册页面,且必须注册
            }
            #endregion

            CheckOutModels           checkOutModels      = new CheckOutModels();
            useraddress              userRes             = new useraddress();
            List <UserShopcartsInfo> userUnpaidOrderInfo = new List <UserShopcartsInfo>();
            salesslip userSalesSlip = new salesslip();

            decimal productsPrice = 0;
            decimal postage       = 0;
            decimal SFJZF         = Convert.ToDecimal(System.Configuration.ConfigurationSettings.AppSettings["sf:JZH"]);    //顺丰江浙沪快递费
            decimal SFNonJZF      = Convert.ToDecimal(System.Configuration.ConfigurationSettings.AppSettings["sf:NonJZH"]); //顺丰非江浙沪快递费

            string wechatBody = string.Empty;
            userSalesSlip = OrderBiz.CreateNew().getCheckOutInfo(orderId, userOpenId);
            if (userSalesSlip == null)                          //查不到销售单
            {
                return(RedirectToAction("OrderList", "Order")); //查不到销售单,跳转至订单列表页面
            }
            else if (userSalesSlip.status == 5)
            {
                userSalesSlip.status = OrderBiz.CreateNew().dealExpectionOrder(userSalesSlip.salesNo, userSalesSlip.wechatOrderNo);
            }
            if (userSalesSlip.status == 0)                                                 //0未付款 1已付款待发货 2 已发货,待收货 3 已完成 4 已删除 5 预付款 6 已过期
            {
                if (DateTime.Now.AddMinutes(-orderExpiredMins) > userSalesSlip.createDate) //订单已失效,为了减少数据库操作,这边做跳转;
                {
                    return(RedirectToAction("OrderList", "Order", new { status = "all" }));
                }

                #region 用户收货地址部分
                if (!string.IsNullOrEmpty(userSalesSlip.province) && !string.IsNullOrEmpty(userSalesSlip.receiver)) //先看该订单用户是否已经设置收货地址,没有设置过则读取默认地址,还没有则为空
                {
                    userRes.receiver      = userSalesSlip.receiver;
                    userRes.Phone         = userSalesSlip.Phone;
                    userRes.province      = userSalesSlip.province;
                    userRes.city          = userSalesSlip.city;
                    userRes.county        = userSalesSlip.county;
                    userRes.detailAddress = userSalesSlip.detailAddress;
                }
                else
                {
                    var userAddressList = UserBiz.CreateNew().getUserAddressList(userOpenId);
                    if (userAddressList.Any())
                    {
                        userRes = userAddressList.Find(x => x.SetAsDefault == "1");
                    }
                    if (userRes == null)
                    {
                        userRes          = new useraddress();
                        userRes.receiver = userRes.Phone = userRes.province = userRes.city = userRes.county = userRes.detailAddress = "";
                    }
                }
                if (!string.IsNullOrEmpty(userRes.province))
                {
                    if (userRes.province.IndexOf("上海") >= 0 ||
                        userRes.province.IndexOf("江苏") >= 0 ||
                        userRes.province.IndexOf("浙江") >= 0 ||
                        userRes.province.IndexOf("安徽") >= 0)
                    {
                        postage = SFJZF;
                    }
                    else
                    {
                        postage = SFNonJZF;
                    }
                }

                #endregion

                #region 订单产品部分
                OrderBiz orderBiz = OrderBiz.CreateNew();
                userUnpaidOrderInfo          = orderBiz.getUnpaidOrderInfo(userSalesSlip.salesId);
                checkOutModels.UserOrderInfo = userUnpaidOrderInfo;

                foreach (var i in userUnpaidOrderInfo)
                {
                    try
                    {
                        orderBiz.updateOrder2ProductLogField(i.productId, i.id);
                    }
                    catch (Exception ex)
                    {
                        _Apilog.WriteLog("ProductsController/Checkout更新订单logid异常" + ex.Message);
                    }
                    wechatBody    += i.productName + "*" + i.num.ToString() + ";";
                    productsPrice += i.productTotalPrice ?? 0;
                }
                #endregion
            }
            else//订单状态不为 未付款,需要跳转到对应页面
            {
                return(RedirectToAction("OrderList", "Order", new { status = userSalesSlip.status }));
            }

            decimal factPrice   = 0;
            decimal factPostage = 0;
            if (Convert.IsDBNull(userSalesSlip.adminChangeAmount) || userSalesSlip.adminChangeAmount == null)
            {
                factPrice = productsPrice;
            }
            else
            {
                factPrice = userSalesSlip.adminChangeAmount ?? 1;
            }

            if (Convert.IsDBNull(userSalesSlip.adminChangePostage) || userSalesSlip.adminChangePostage == null)
            {
                factPostage = postage;
            }
            else
            {
                factPostage = userSalesSlip.adminChangePostage ?? 1;
            }

            //若传递了相关参数,则调统一下单接口,获得后续相关接口的入口参数
            JsApiPay jsApiPay = new JsApiPay();
            jsApiPay.openid    = userOpenId;
            jsApiPay.total_fee = base.isPayTest == "false" ? decimal.ToInt32(factPrice * 100 + factPostage * 100) : 1;//测试环境默认支付1分

            //JSAPI支付预处理
            try
            {
                string wechatOrderId = Guid.NewGuid().ToString("N").ToLower();
                OrderBiz.CreateNew().updateWechatOrderId(orderId, userOpenId, wechatOrderId);

                WxPayData unifiedOrderResult = jsApiPay.GetUnifiedOrderResult(wechatBody, wechatOrderId); //orderId
                ViewBag.wxJsApiParam = jsApiPay.GetJsApiParameters();                                     //获取H5调起JS API参数
                _Apilog.WriteLog("ProductsController/Checkout 用户userOpenId: " + userOpenId + " wxJsApiParam : " + ViewBag.wxJsApiParam);
                //Log.Debug(this.GetType().ToString(), "wxJsApiParam : " + wxJsApiParam);
                //在页面上显示订单信息
            }
            catch (Exception ex)
            {
                _Apilog.WriteLog("ProductsController/Checkout下单失败" + ex.Message);
            }



            //_Apilog.WriteLog(orderId);
            ViewBag.productsPrice      = productsPrice;
            ViewBag.postage            = postage;
            ViewBag.totalCost          = factPrice + factPostage;//productsPrice + postage;
            ViewBag.FooterType         = "custom";
            ViewBag.PageName           = "结算";
            ViewBag.ProjectUrl         = base.projectURL;
            ViewBag.adminChangeAmount  = userSalesSlip.adminChangeAmount;
            ViewBag.adminChangePostage = userSalesSlip.adminChangePostage;
            checkOutModels.UserAddress = userRes;
            return(View(checkOutModels));
        }