public async Task <IActionResult> Pay(TicketPaymentModel model) { var account = await CommonContext.CommonAccounts.Include(m => m.Partition).Where(m => m.Id == model.AccountId).SingleAsync(); var citation = await GetCitation(account.Id, model.CitationId); //Create Stripe Charge var stripeCharge = await _stripeSvc.ChargeCardAsync(new CreditCardModel { Amount = model.AmountDue, SourceToken = model.StripeToken }, citation, account, ChargeTypeEnum.PayCitation); //Record charge var payment = new CitationPayment { AccountId = account.Id, CitationId = citation.Id, CreateUserId = citation.CreateUserId, UpdateUserId = citation.CreateUserId, Status = PaymentType.Stripe, ProcessingFee = AppSettings.ProcessingFee, CitationFineAmount = citation.Balance.HasValue ? citation.Balance.Value : 0f, ChargeAmount = model.AmountDue, ChargeId = stripeCharge.Id }; _accountCtx.CitationPayments.Add(payment); citation.Balance = citation.Payments.Sum(m => m.ChargeAmount) + payment.ChargeAmount; await _accountCtx.SaveChangesAsync(); await _citationSvc.CreateAuditEvent(account.Id, payment.CitationId, $"{string.Format("{0:C}", model.AmountDue.PenniesToDollarAmount())} payment charged", payment.CreateUserId, Data.Enums.CitationAuditEvent.CitationSuccessPayment); return(RedirectToAction("PaymentComplete")); }