Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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");
            }
        }