public ActionResult <Transactions> PostTransference(TransactionsTransferenceDTO transactionsDTO, [FromServices] TransactionsApplication transactionsApplication) { try { return(Ok(transactionsApplication.PostTransference(transactionsDTO))); } catch (Exception ex) { return(BadRequest(ex)); } }
public Transactions PostTransference(TransactionsTransferenceDTO transactionsDTO) { Account accountDestination = _accountRepository.Get(new Object[] { transactionsDTO.AccountDestinationId }); Account accountSource = _accountRepository.Get(new Object[] { transactionsDTO.AccountSourceId }); if (accountDestination == null || accountDestination.Master) { throw new Exception("Transferencias sao permitidas apenas para contas filhas!"); } if (accountDestination == accountSource) { throw new Exception("Transferencias nao sao permitidas para a mesma conta!"); } if (accountDestination.StatusId != (int)StatusEnum.ACTIVE || accountSource.StatusId != (int)StatusEnum.ACTIVE) { throw new Exception("Transferencias sao permitidas apenas entre contas ativas!"); } Boolean AccountReceiveTransfer = _accountRepository.AccountReceiveTransfer(accountSource, accountDestination); if (AccountReceiveTransfer == false) { throw new Exception("A conta de destino nao esta abaixo da conta de origem, portanto a transferencia nao é permitida!"); } _transactionRepository.Begin(); try { accountSource.Money = accountSource.Money - transactionsDTO.Money; if (accountSource.Money < 0) { throw new Exception("A conta de origem nao possui saldo para realizar a transferencia!"); } _accountRepository.Save(accountSource); accountDestination.Money = accountDestination.Money + transactionsDTO.Money; _accountRepository.Save(accountDestination); Transactions transactions = new Transactions(); transactions.AccountDestinationId = accountDestination.Id; transactions.AccountSourceId = accountSource.Id; transactions.Money = transactionsDTO.Money; transactions.TransactionCode = GeneratedCodeContribution.GetCode(); transactions.TransactionTypeId = (int)TransactionsTypeEnum.TRANSFERENCE; transactions.Created = DateTime.Now; _transactionRepository.Save(transactions); _transactionRepository.Commit(); return(transactions); } catch (Exception ex) { _transactionRepository.RollBack(); throw ex; } }