public IActionResult CreatePayment(Payment payment) { var email = User.GetEmail(); var successfullPayment = false; using (var context = new MainDatabaseContext()) { var order = context.Orders .Where(x => x.Id == payment.OrderId) .Include(p => p.ProductOrders.Select(po => po.Product)) .Include(p => p.Buyer) .FirstOrDefault(); if (order == null) { return(View("Error")); } order.AddBuyer(GetOrCreateNewBuyer(context, email)); if (payment.Type == PaymentType.Card) { successfullPayment = _paymentProvider.SendPaymentData(payment); order.PayByCard(payment, successfullPayment); _emailService.SendEmail(email, successfullPayment ? EmailType.PaymentAccepted : EmailType.PaymentRefused); context.SaveChanges(); return(successfullPayment ? View("Success") : View("Failure")); } else { _emailService.SendEmail(email, EmailType.WaitingForTransfer); order.PayByTransfer(payment); context.SaveChanges(); return(View("Success")); } } }