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)); }
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); }
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)); }
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)); }
public ResponseModel <List <TransactionsModel> > CreateTransaction(TransactionsModel model) { _logger.Debug($"CreateTransaction with payload: {JsonConvert.SerializeObject(model)}"); return(_Transactionservice.CreateTransaction(model)); }
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)); }
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)); }