private void RegisterForPayment(HandWrittenCaptureModel model, decimal amount) { using (var dbContext = new DataContext()) { var paymentTransaction = new PaymentTransaction(); paymentTransaction.TransactionToken = model.ExternalToken; paymentTransaction.TransactionReference = model.ExternalReference; paymentTransaction.Amount = amount; paymentTransaction.CreatedTimestamp = DateTime.Now; paymentTransaction.CustomerContactNumber = model.MobileNumber; paymentTransaction.CustomerFirstName = model.FirstName; paymentTransaction.CustomerIDNumber = model.IdentificationNumber; paymentTransaction.CustomerLastName = model.Surname; paymentTransaction.PaymentMethod = PaymentMethod.DumaPay; paymentTransaction.Status = PaymentTransactionStatus.Added; dbContext.PaymentTransactions.Add(paymentTransaction); var paymentTransactionItem = new PaymentTransactionItem(); paymentTransactionItem.PaymentTransaction = paymentTransaction; paymentTransactionItem.ReferenceNumber = model.TicketNumber; paymentTransactionItem.TransactionToken = model.ExternalToken; paymentTransactionItem.EntityReferenceTypeID = long.Parse(model.TicketNumber[1].ToString()); paymentTransactionItem.Description = "Notice issued."; paymentTransactionItem.Amount = amount; paymentTransactionItem.Status = PaymentTransactionStatus.Added; dbContext.PaymentTransactionItems.Add(paymentTransactionItem); dbContext.SaveChanges(); } }
public IHttpActionResult RegisterTransaction(PaymentTransactionModel model) { if (model.Amount != model.PaymentTransactionItems.Sum(f => f.Amount)) { return(this.BadRequestEx(Error.PaymentTransactionInvalidAmount)); } using (var dbContext = new DataContext()) { var paymentTerminal = dbContext.PaymentTerminals.FirstOrDefault(f => f.TerminalType == (Data.Enums.TerminalType)model.TerminalType && f.UUID == model.TerminalUUID); if (paymentTerminal == null) { return(this.BadRequestEx(Error.PaymentTerminalDoesNotExist)); } if (paymentTerminal.Status != Data.Enums.Status.Active) { return(this.BadRequestEx(Error.PaymentTerminalIsNotActive)); } if (dbContext.PaymentTransactions.Any(f => f.Receipt == model.Receipt)) { return(this.BadRequestEx(Error.PaymentTransactionAlreadyExist)); } foreach (var modelItem in model.PaymentTransactionItems) { var register = dbContext.Registers.AsNoTracking().FirstOrDefault(f => f.ReferenceNumber == modelItem.ReferenceNumber); if (register == null) { return(this.BadRequestEx(Error.RegisterItemDoesNotExist)); } if (register.RegisterStatus >= 3000) { return(this.BadRequestEx(Error.RegisterItemNotPayable)); } if (string.IsNullOrWhiteSpace(modelItem.TransactionToken)) { var generatedReferenceNumber = dbContext.GeneratedReferenceNumbers.FirstOrDefault(f => f.ReferenceNumber == modelItem.ReferenceNumber); if (generatedReferenceNumber != null) { modelItem.TransactionToken = generatedReferenceNumber.ExternalToken; } } } PaymentTransaction paymentTransaction = null; if (model.PaymentTransactionItems.Count == 1) { var transactionToken = model.PaymentTransactionItems.First().TransactionToken; paymentTransaction = dbContext.PaymentTransactions.FirstOrDefault(f => f.TransactionToken == transactionToken && f.Status == Data.Enums.PaymentTransactionStatus.Added); paymentTransaction.Receipt = model.Receipt; paymentTransaction.ReceiptTimestamp = model.ReceiptTimestamp; paymentTransaction.CourtID = model.CourtID; paymentTransaction.TerminalID = paymentTerminal.ID; paymentTransaction.CustomerContactNumber = model.CustomerContactNumber; paymentTransaction.CustomerFirstName = model.CustomerFirstName; paymentTransaction.CustomerIDNumber = model.CustomerIDNumber; paymentTransaction.CustomerLastName = model.CustomerLastName; paymentTransaction.PaymentMethod = (Data.Enums.PaymentMethod)model.PaymentSource; } else { paymentTransaction = new PaymentTransaction(); paymentTransaction.Receipt = model.Receipt; paymentTransaction.ReceiptTimestamp = model.ReceiptTimestamp; paymentTransaction.CourtID = model.CourtID; paymentTransaction.TerminalID = paymentTerminal.ID; paymentTransaction.Amount = model.Amount; paymentTransaction.CreatedTimestamp = DateTime.Now; paymentTransaction.CustomerContactNumber = model.CustomerContactNumber; paymentTransaction.CustomerFirstName = model.CustomerFirstName; paymentTransaction.CustomerIDNumber = model.CustomerIDNumber; paymentTransaction.CustomerLastName = model.CustomerLastName; paymentTransaction.PaymentMethod = (Data.Enums.PaymentMethod)model.PaymentSource; paymentTransaction.Status = Data.Enums.PaymentTransactionStatus.Added; foreach (var modelItem in model.PaymentTransactionItems) { var paymentTransactionItem = new PaymentTransactionItem(); paymentTransactionItem.PaymentTransaction = paymentTransaction; paymentTransactionItem.ReferenceNumber = modelItem.ReferenceNumber; paymentTransactionItem.TransactionToken = modelItem.TransactionToken; paymentTransactionItem.EntityReferenceTypeID = long.Parse(modelItem.ReferenceNumber[1].ToString()); paymentTransactionItem.Description = modelItem.Description; paymentTransactionItem.Amount = modelItem.Amount; paymentTransactionItem.Status = Data.Enums.PaymentTransactionStatus.Added; dbContext.PaymentTransactionItems.Add(paymentTransactionItem); } if (model.PaymentSource == PaymentMethod.DumaPay) { var paymentProvider = resolvePaymentProvider(); var transactionIDModel = paymentProvider.RegisterTransaction( new ThirdParty.Payment.Models.TransactionModel { CustomerFirstName = paymentTransaction.CustomerFirstName, CustomerLastName = paymentTransaction.CustomerLastName, CompanyRef = string.Empty, CompanyAccRef = paymentTransaction.Receipt, Amount = paymentTransaction.Amount, UserID = SessionModel.UserName, ServiceDescription = "Payment Basket Registered", ServiceType = 6067 }); paymentTransaction.TransactionToken = transactionIDModel.TransactionToken; paymentTransaction.TransactionReference = transactionIDModel.TransactionReference; } else // Cash { paymentTransaction.TransactionToken = Guid.NewGuid().ToString(); paymentTransaction.TransactionReference = string.Empty; } dbContext.PaymentTransactions.Add(paymentTransaction); } dbContext.SaveChanges(); PaymentTransactionHub.SendStatusChanged( paymentTransaction.TransactionToken, (PaymentTransactionStatus)paymentTransaction.Status, paymentTransaction.Amount); return(Ok(paymentTransaction.TransactionToken)); } }