Esempio n. 1
0
        private async Task <ActionResult> ValidatePurchaseAmountAndBankAccount(User userAuthenticate, ClaimsPrincipal currentUser, Wallet walletExists, string product, string reciever, decimal amount, ITransactionsService _transation)
        {
            if (amount < 0)
            {
                responseMessage.Message = "Invalid payment amount!";
                return(StatusCode(400, responseMessage));
            }
            else if (amount == 0)
            {
                responseMessage.Message = "Put amount more than 0.00lv";
                return(StatusCode(400, responseMessage));
            }
            else
            {
                if (walletExists.Amount < amount)
                {
                    responseMessage.Message = "You don't have enough money in wallet!";
                    return(StatusCode(406, responseMessage));
                }
                else
                {
                    Transaction transaction = new Transaction();
                    walletExists.Amount             = walletExists.Amount - amount;
                    transaction.SenderAccountInfo   = walletExists.Iban;
                    transaction.RecieverAccountInfo = reciever;

                    await dbContext.SaveChangesAsync();

                    await _transation.CreateTransaction(userAuthenticate, currentUser, amount, transaction, $"Purchasing {product} with Wallet");
                }
            }

            responseMessage.Message = $"Succesfully purhcased {product}.";
            return(StatusCode(200, responseMessage));
        }
Esempio n. 2
0
        public void TransactionTests_AddTransaction(int code, int accountCode, decimal transactionAmount, decimal expectedTotal)
        {
            //Arrange
            var model = new TransactionsBuilder()
                        .WithRandomProps()
                        .WithCode(code)
                        .WithAccountCode(5)
                        .WithAmount(transactionAmount)
                        .WithCaptureDate(DateTime.Parse("2020/01/01"))
                        .WithTransactionDate(DateTime.Parse("2020/01/01"))
                        .Build();

            //Act
            _service.CreateTransaction(model);

            //Assert
            Assert.IsTrue(_context.Transaction.Any(i => i.Code == model.Code));

            Assert.IsTrue(_context.Account.Where(i => i.Code == model.AccountCode).FirstOrDefault().Balance == expectedTotal);
        }
Esempio n. 3
0
        private async Task <ActionResult> ValidateDepositAmountAndBankAccount(User userAuthenticate, ClaimsPrincipal currentUser, Wallet walletExists, decimal amount, ChargeAccount bankAccount, ITransactionsService _transation)
        {
            if (amount < 0)
            {
                responseMessage.Message = "Invalid payment amount!";
                return(StatusCode(400, responseMessage));
            }
            else if (amount == 0)
            {
                responseMessage.Message = "Put amount more than 0.00lv";
                return(StatusCode(400, responseMessage));
            }
            else
            {
                if (bankAccount != null && bankAccount.Amount > amount)
                {
                    walletExists.Amount = walletExists.Amount + amount;
                    bankAccount.Amount  = bankAccount.Amount - amount;
                    Transaction transaction = new Transaction();
                    transaction.SenderAccountInfo   = bankAccount.Iban;
                    transaction.RecieverAccountInfo = walletExists.Iban;

                    await dbContext.SaveChangesAsync();

                    await _transation.CreateTransaction(userAuthenticate, currentUser, amount, transaction, "Depositing money in Wallet");
                }
                else if (bankAccount.Amount < amount)
                {
                    responseMessage.Message = "You don't have enough money in Bank Account!";
                    return(StatusCode(406, responseMessage));
                }
                else if (bankAccount == null)
                {
                    responseMessage.Message = "You don't have a bank account";
                    return(StatusCode(400, responseMessage));
                }
            }
            responseMessage.Message = $"Succesfully deposited {amount} leva in Wallet.";
            return(StatusCode(200, responseMessage));
        }
Esempio n. 4
0
        public async Task <ActionResult <MessageModel> > AddMoney(DepositRequestModel requestModel, ClaimsPrincipal currentUser, string username)
        {
            User          userAuthenticate    = null;
            Deposit       deposit             = requestModel.Deposit;
            Deposit       depositExists       = null;
            ChargeAccount chargeAccount       = requestModel.ChargeAccount;
            ChargeAccount chargeAccountExists = null;
            var           amount = requestModel.Amount;

            try
            {
                userAuthenticate = await dbContext.Users.FirstOrDefaultAsync(x => x.Username == username);
            }
            catch (NullReferenceException)
            {
                responseMessage.Message = "User not found";
                return(StatusCode(400, responseMessage));
            }

            if (currentUser.HasClaim(c => c.Type == "Roles"))
            {
                if (userAuthenticate != null)
                {
                    try
                    {
                        depositExists = await dbContext.Deposits.FirstOrDefaultAsync(x => x.Iban == deposit.Iban);

                        if (depositExists != null)
                        {
                            chargeAccountExists = await dbContext.ChargeAccounts.FirstOrDefaultAsync(x => x.Iban == chargeAccount.Iban);

                            if (amount < 0)
                            {
                                responseMessage.Message = "Invalid payment amount!";
                                return(StatusCode(400, responseMessage));
                            }
                            else if (amount == 0)
                            {
                                responseMessage.Message = "Put amount more than 0.00lv";
                                return(StatusCode(400, responseMessage));
                            }
                            else
                            {
                                if (chargeAccountExists != null && chargeAccount.Amount > amount)
                                {
                                    deposit.Amount       = deposit.Amount + amount;
                                    deposit.PaymentDate  = DateTime.Now.AddMonths(6);
                                    chargeAccount.Amount = chargeAccount.Amount - amount;
                                    Transaction transaction = new Transaction();
                                    transaction.SenderAccountInfo   = $"User {userAuthenticate.FirstName} {userAuthenticate.LastName}";
                                    transaction.RecieverAccountInfo = depositExists.Iban;

                                    await dbContext.SaveChangesAsync();

                                    await _transactionsService.CreateTransaction(userAuthenticate, currentUser, amount, transaction, "Added money - Bank Account - Deposit account");
                                }
                                else if (chargeAccountExists == null)
                                {
                                    responseMessage.Message = "Charge Account Iban is invalid!";
                                    return(StatusCode(400, responseMessage));
                                }
                                else if (chargeAccountExists.Amount < amount)
                                {
                                    responseMessage.Message = "You don't have enough money in Bank Account!";
                                    return(StatusCode(406, responseMessage));
                                }
                            }
                            responseMessage.Message = $"Succesfully deposited {amount} leva.";
                            return(StatusCode(200, responseMessage));
                        }
                        else
                        {
                            responseMessage.Message = "Invalid Iban! Deposit not found";
                            return(StatusCode(404, responseMessage));
                        }
                    }
                    catch (NullReferenceException)
                    {
                        responseMessage.Message = "Invalid Iban! Deposit not found";
                        return(StatusCode(404, responseMessage));
                    }
                }
                else
                {
                    responseMessage.Message = "User not found!";
                    return(StatusCode(404, responseMessage));
                }
            }

            responseMessage.Message = "You are not autorized to do such actions!";
            return(StatusCode(403, responseMessage));
        }
Esempio n. 5
0
 public ResponseModel <List <TransactionsModel> > CreateTransaction(TransactionsModel model)
 {
     _logger.Debug($"CreateTransaction with payload: {JsonConvert.SerializeObject(model)}");
     return(_Transactionservice.CreateTransaction(model));
 }
Esempio n. 6
0
        public async Task <ActionResult <MessageModel> > DepositMoney(ChargeAccount bankAccount, Deposit deposit, ClaimsPrincipal currentUser, string username, decimal amount)
        {
            var userAuthenticate = await dbContext.Users.FirstOrDefaultAsync(x => x.Username == username);

            ChargeAccount bankAccounts  = null;
            Deposit       depositsExist = null;

            if (currentUser.HasClaim(c => c.Type == "Roles"))
            {
                if (userAuthenticate != null)
                {
                    try
                    {
                        bankAccounts = await dbContext.ChargeAccounts.FirstOrDefaultAsync(x => x.Iban == bankAccount.Iban);

                        depositsExist = await dbContext.Deposits.FirstOrDefaultAsync(x => x.Iban == deposit.Iban);
                    }
                    catch (NullReferenceException)
                    {
                        responseModel.Message = "Invalid Iban for Charge Account or Deposit! Please check Iban";
                        return(StatusCode(400, responseModel));
                    }
                }
                else
                {
                    responseModel.Message = "User not found!";
                    return(StatusCode(404, responseModel));
                }

                if (bankAccounts != null && depositsExist != null)
                {
                    try
                    {
                        if (ValidateDepositAmountChargeAccount(amount))
                        {
                            bankAccounts.Amount  = bankAccounts.Amount + amount;
                            depositsExist.Amount = depositsExist.Amount - amount;
                            await dbContext.SaveChangesAsync();

                            Transaction transactions = new Transaction();
                            transactions.RecieverAccountInfo = bankAccounts.Iban;
                            transactions.SenderAccountInfo   = depositsExist.Iban;
                            await _transactionsService.CreateTransaction(userAuthenticate, currentUser, amount, transactions, "Depositing money Deposit Account -> Charge Account");

                            responseModel.Message = "Money deposited succesfully!";
                            return(StatusCode(200, responseModel));
                        }

                        responseModel.Message = "Invalid deposit amount!";
                        return(StatusCode(400, responseModel));
                    }
                    catch (NullReferenceException)
                    {
                        responseModel.Message = "Charge Account or Deposit not found! Invalid Iban!";
                        return(StatusCode(404, responseModel));
                    }
                }
                else
                {
                    responseModel.Message = "Charge Account or Deposit not found! Invalid Iban!";
                    return(StatusCode(404, responseModel));
                }
            }
            responseModel.Message = "You are not autorized to do such actions!";
            return(StatusCode(403, responseModel));
        }
Esempio n. 7
0
        public async Task <ActionResult <MessageModel> > SimulatePurchase(CreditRequestModel requestModel, ClaimsPrincipal currentUser, string username)
        {
            //amount credit product reciever
            var     credit           = requestModel.Credit;
            decimal amount           = requestModel.Amount;
            var     product          = requestModel.Product;
            var     reciever         = requestModel.Reciever;
            var     userAuthenticate = await dbContext.Users.FirstOrDefaultAsync(x => x.Username == username);

            Credit creditExists = null;

            if (currentUser.HasClaim(c => c.Type == "Roles"))
            {
                if (userAuthenticate != null)
                {
                    try
                    {
                        creditExists = await dbContext.Credits.FirstOrDefaultAsync(x => x.Iban == credit.Iban);
                    }
                    catch (NullReferenceException)
                    {
                        responseMessage.Message = "Credit not found";
                        return(StatusCode(404, responseMessage));
                    }
                }
                else
                {
                    responseMessage.Message = "User not found!";
                    return(StatusCode(404, responseMessage));
                }

                if (creditExists != null)
                {
                    try
                    {
                        if (ValidateCreditAmount(amount, creditExists) && ValidateCredit(creditExists))
                        {
                            creditExists.Amount = creditExists.Amount - amount;
                            Transaction transaction = new Transaction();
                            transaction.SenderAccountInfo   = creditExists.Iban;
                            transaction.RecieverAccountInfo = reciever;
                            await _transactionsService.CreateTransaction(userAuthenticate, currentUser, amount, transaction, $"Purchasing {product}");

                            await dbContext.SaveChangesAsync();

                            responseMessage.Message = $"Succesfully purhcased {product}.";
                            return(StatusCode(200, responseMessage));
                        }
                        else if (ValidateCreditAmount(amount, credit) == false)
                        {
                            responseMessage.Message = "Invalid payment amount!";
                            return(StatusCode(400, responseMessage));
                        }
                        else if (ValidateCredit(creditExists) == false)
                        {
                            responseMessage.Message = "You don't have enough money in Charge account!";
                            return(StatusCode(406, responseMessage));
                        }
                    }
                    catch (NullReferenceException)
                    {
                        responseMessage.Message = "Iban Invalid! Credit not found";
                        return(StatusCode(404, responseMessage));
                    }
                }
                else
                {
                    responseMessage.Message = "Invalid Credit! Iban not found!";
                    return(StatusCode(404, responseMessage));
                }
            }
            responseMessage.Message = "You are not autorized to do such actions!";
            return(StatusCode(403, responseMessage));
        }