public JsonResult CreateOrder(string orderVM)
        {
            var order    = new JavaScriptSerializer().Deserialize <OrderViewModel>(orderVM);
            var orderNew = new Order();

            orderNew.UpdateOrder(order);

            if (Request.IsAuthenticated)
            {
                orderNew.CustomerId = User.Identity.GetUserId();
                orderNew.CreatedBy  = User.Identity.GetUserName();
            }
            var cart = (List <ShoppingCartViewModel>)Session[CommonConstants.SessionCart];
            List <OrderDetail> orderDetails = new List <OrderDetail>();
            bool isEnough = true;

            foreach (var item in cart)
            {
                var detail = new OrderDetail();
                detail.ProductID = item.ProductId;
                detail.Quantity  = item.Quantity;
                detail.Price     = item.Product.Price;
                detail.ColorId   = item.ColorId;
                detail.SizeId    = item.SizeId;
                orderDetails.Add(detail);
                isEnough = _productQuantityService.SellProduct(item.ProductId, item.SizeId, item.ColorId, item.Quantity);
                break;
            }
            if (isEnough)
            {
                var orderVm = _orderService.Add(orderNew);
                foreach (var item in orderDetails)
                {
                    item.OrderID = orderVm.ID;
                    _orderService.CreateDetail(item);
                }
                _productService.Save();
                return(Json(new
                {
                    status = true
                }));
            }
            else
            {
                return(Json(new
                {
                    status = false,
                    message = "Không đủ hàng."
                }));
            }
        }
Ejemplo n.º 2
0
        public async Task <IActionResult> Checkout(CheckoutViewModel model)
        {
            var sessions = HttpContext.Session.Get <List <ShoppingCartViewModel> >(CommonConstants.CartSession);

            if (ModelState.IsValid)
            {
                if (sessions != null)
                {
                    var details = new List <BillDetailViewModel>();

                    decimal totalMoney = 0;
                    bool    canBuy     = true;
                    foreach (var item in sessions)
                    {
                        totalMoney += item.Price * item.Quantity;

                        details.Add(new BillDetailViewModel()
                        {
                            Price     = item.Price,
                            ColorId   = item.Color.Id,
                            SizeId    = item.Size.Id,
                            Quantity  = item.Quantity,
                            ProductId = item.Product.Id
                        });

                        canBuy = await _quantityService.SellProduct(item.Product.Id, item.Quantity);

                        if (!canBuy)
                        {
                            break;
                        }
                    }

                    if (canBuy)
                    {
                        var billViewModel = new BillViewModel()
                        {
                            CustomerMobile  = model.CustomerMobile,
                            BillStatus      = BillStatus.New,
                            CustomerAddress = model.CustomerAddress,
                            CustomerName    = model.CustomerName,
                            CustomerMessage = model.CustomerMessage,
                            BillDetails     = details,
                            DateCreated     = DateTime.Now,
                            PaymentMethod   = model.PaymentMethod
                        };
                        if (User.Identity.IsAuthenticated)
                        {
                            billViewModel.CustomerId = Guid.Parse(User.GetSpecificDefault("UserId"));
                        }
                        var dataReturn = await _billService.Create(billViewModel);

                        _billService.Save();
                        HttpContext.Session.Set(CommonConstants.BillSession, dataReturn);
                        string vnp_Returnurl         = _configuration["VNPAY:vnp_Returnurl"];  //URL nhan ket qua tra ve
                        string vnp_Url               = _configuration["VNPAY:vnp_Url"];        //URL thanh toan cua VNPAY
                        string vnp_TmnCode           = _configuration["VNPAY:vnp_TmnCode"];    //Ma website
                        string vnp_HashSecret        = _configuration["VNPAY:vnp_HashSecret"]; //Chuoi bi mat
                        HttpContextAccessor accessor = new HttpContextAccessor();
                        VnPayLibrary        vnpay    = new VnPayLibrary(accessor);
                        vnpay.AddRequestData("vnp_Version", "2.0.0");
                        vnpay.AddRequestData("vnp_Command", "pay");
                        vnpay.AddRequestData("vnp_TmnCode", vnp_TmnCode);
                        vnpay.AddRequestData("vnp_Locale", "vn");
                        vnpay.AddRequestData("vnp_CurrCode", "VND");
                        vnpay.AddRequestData("vnp_TxnRef", DateTime.Now.Ticks.ToString());
                        vnpay.AddRequestData("vnp_OrderInfo", "Noi dung thanh toan:20190421030204");
                        vnpay.AddRequestData("vnp_OrderType", "topup"); //default value: other
                        vnpay.AddRequestData("vnp_Amount", ((int)totalMoney * 100).ToString());
                        vnpay.AddRequestData("vnp_ReturnUrl", vnp_Returnurl);
                        vnpay.AddRequestData("vnp_IpAddr", vnpay.GetIpAddress());
                        vnpay.AddRequestData("vnp_CreateDate", DateTime.Now.ToString("yyyyMMddHHmmss"));
                        vnpay.AddRequestData("vnp_BankCode", "NCB");
                        string paymentUrl = vnpay.CreateRequestUrl(vnp_Url, vnp_HashSecret);
                        return(new OkObjectResult(new
                        {
                            status = true,
                            url = paymentUrl
                        }));
                    }

                    return(new OkObjectResult(new
                    {
                        status = false,
                        message = "Hiện số lượng sản phẩm không đủ."
                    }));
                }

                model.Carts = sessions;
                HttpContext.Session.Set(CommonConstants.CartSession, new List <ShoppingCartViewModel>());
                return(View(model));
            }
            return(new OkObjectResult(""));
        }