public async void RecordTransaction(UserTransaction userTransaction, RechargeRequestResource rechargeRequestResource) { userTransaction.DateCreated = DateTime.Now; userTransaction.TransactionFee = 2 * transactionFee; userTransaction.UserPoint = PointFunctions.GetBonus(userTransaction.Amount); userTransaction.AdditionalInformation = rechargeRequestResource.AdditionalInformation(); if (userTransaction.User.RefererId != null) { RecordReferersTransaction(userTransaction); } userTransaction.Balance = userTransaction.UserPoint + await GetUsersPoint(userTransaction.User.Id.ToString()); _context.Add(userTransaction); // var Transaction = new UserTransaction() { // UserId = e.User.Id, // RefererId = e.User.RefererId, // Amount = e.Transaction.Amount, // // Points = Functions.GetBonus(e.Transaction.amount), // // RefererPoint = Functions.GetBonus(e.Transaction.amount, false), // // PaymentType = e.Transaction.PaymentType(), // AdditionalInformation = e.Transaction.AdditionalInformation(), // DateCreated = DateTime.Now, // TransactionFee = .015m * e.Transaction.Amount // }; // _context.Add(Transaction); // if(!await _context.SaveAll()){ // throw new Exception("Failed to save transaction"); // } // RecordPublicTransaction(_mapper.Map<UserTransaction, PublicPaymentTransaction>(Transaction), e.User); }
public User ProcessDatabasePayment(RechargeRequestResource paymentRequest, User user) { ValidatePayementDetail(paymentRequest, user); var userTransaction = TransactionFunctions.GenerateUserTransaction(paymentRequest.Amount, user); if (paymentRequest.Payment.CardAmount > 0) { Card card = user.Cards.SingleOrDefault(c => c.Id.ToString() == paymentRequest.Payment.CardId); CardRequestResource cardRequestResource = (card != null) ? _mapper.Map <CardRequestResource>(card) : _mapper.Map <CardRequestResource>(paymentRequest.Payment.NewCard); var result = cardRequestResource.Validate(); if (result != null) { throw new Exception(result); } // All set to take money from user account if (!CardPayment.Process(cardRequestResource)) { throw new Exception("Failed to perform card transaction"); } if (cardRequestResource.SaveCard) { var newCard = user.Cards.FirstOrDefault(c => c.CardNumber == cardRequestResource.CardNumber); if (newCard == null) { user.Cards.Add(_mapper.Map <Card>(cardRequestResource)); } } var newTransaction = TransactionFunctions.GenerateAppTransaction(cardRequestResource.CardNumber, (Decimal)paymentRequest.Payment.CardAmount); userTransaction.Transactions.Add(newTransaction); // _repo.SaveAll(); } if (paymentRequest.Payment.Point > 0) { var pointTransaction = TransactionFunctions.GenerateAppTransaction("Points", (Decimal)paymentRequest.Payment.Point, false); userTransaction.Transactions.Add(pointTransaction); } _trans.RecordTransaction(userTransaction, paymentRequest); // _point.AddPoint(paymentRequest.Amount, user); // OnTransactionMade(userTransaction); return(user); }
public async void ValidatePayementDetail(RechargeRequestResource paymentRequest, User user) { var Points = await _trans.GetUsersPoint(user.Id.ToString()); if (Points < paymentRequest.Payment.Point) { throw new Exception("Insufficient Points"); } if (paymentRequest.Amount != (paymentRequest.Payment.Point + paymentRequest.Payment.CardAmount)) { throw new Exception("Invalid amount requested"); } }