Пример #1
0
        public ActionResult PlaceOrder(List <CartViewModel> cartItens, string couponName)
        {
            var urlReferrer = Request.UrlReferrer?.AbsolutePath;

            if (urlReferrer != Url.Action(nameof(OrderReview), "Order"))
            {
                return(RedirectToAction("Index", "Home"));
            }

            var coupon = _couponService.FindByName(couponName);

            var userId = User.Identity.GetUserId();
            var user   = UserManager.FindById(userId);


            var totalPrice = 0m;

            foreach (var cartItem in cartItens)
            {
                var product = _productService.GetById(cartItem.ProductId);
                if (coupon != null && coupon.Valid)
                {
                    totalPrice += (100 - coupon.DiscountPercentage) / 100 * product.Price * cartItem.Quantity;
                }
                else
                {
                    totalPrice += product.Price * cartItem.Quantity;
                }
            }

            // adiciona o frete
            totalPrice += 20;

            // monta a transacao
            var transaction = new Transaction
            {
                DeliveryAddress = user.Street,
                IdUser          = userId,
                TotalPrice      = totalPrice,
                CouponId        = coupon?.Id
            };

            // monta a lista de itens da compra
            var transactionItens = new List <TransactionItens>();

            cartItens.ForEach(c => transactionItens.Add(new TransactionItens
            {
                Quantity  = c.Quantity,
                IdProduct = c.ProductId
            }));

            // adiciona a ordem
            _transactionService.PlaceOrder(transaction, transactionItens);

            return(RedirectToAction("Index", "Dashboard"));
        }