Example #1
0
 public ActionResult <Transactions> PostTransference(TransactionsTransferenceDTO transactionsDTO, [FromServices] TransactionsApplication transactionsApplication)
 {
     try
     {
         return(Ok(transactionsApplication.PostTransference(transactionsDTO)));
     }
     catch (Exception ex)
     {
         return(BadRequest(ex));
     }
 }
Example #2
0
        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;
            }
        }