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")); }