private void InsertPurchaseOptions(Models.Entities.Order order) { foreach (var cartItem in _cartService.GetCartItems()) { var option = _context.PurchaseOptions.Find(cartItem.PurchaseOptionId); if (option != null) { order.Items.Add(option); } } }
public async Task <ActionResult> Pay() { var apiContext = _paypalService.GetApiContext(); if (_cartService.GetCartSize() == 0) { return(RedirectToAction("Index")); //Dont process if cart is empty } var order = new Models.Entities.Order(); var paymentParams = new PaypalPaymentParams { Context = apiContext, Currency = PaypalPaymentParams.PaymentCurrency.EUR, Items = _cartService.GetCartItems(), OrderId = order.Id, RedirectUrl = GetReturnUrl(order.Id.ToString()), Shipping = 1, TaxPercentage = 0.2m }; var payment = _paypalService.CreatePayment(paymentParams); var user = await _context.Users.Where(u => u.Email.Equals(User.Identity.Name)).FirstAsync(); order.PaymentId = payment.id; order.Total = paymentParams.Total; order.SubTotal = paymentParams.SubTotal; order.Tax = paymentParams.Tax; order.Currency = paymentParams.Currency; order.Shipping = paymentParams.Shipping; InsertPurchaseOptions(order); user.Orders.Add(order); try { var redirectUrl = GetPayPalRedirectUrl(payment); _context.SaveChanges(); _cartService.ClearCart(); return(Redirect(redirectUrl)); } catch (Exception ex) { while (ModelState.GetEnumerator().MoveNext()) { Debug.WriteLine(ModelState.GetEnumerator().Current.Value.Errors.First()); } Debug.Write(ex.Message); throw ex; } }