public ActionResult <Transactions> PostReversal(TransactionsReversalDTO transactionsReversalDTO, [FromServices] TransactionsApplication transactionsApplication) { try { return(Ok(transactionsApplication.PostReversal(transactionsReversalDTO))); } catch (Exception ex) { return(BadRequest(ex)); } }
private Transactions ReversalDeposit(Transactions transactions, TransactionsReversalDTO transactionsReversalDTO) { Account AccountDestination = transactions.AccountDestination; Account AccountSource = transactions.AccountSource; _transactionRepository.Begin(); try { if (transactions.TransactionCode != transactionsReversalDTO.TransactionCode) { throw new Exception("O codigo informado é diferente do codigo registrado na transacao!"); } AccountDestination.Money = AccountDestination.Money - transactions.Money; if (AccountDestination.Money < 0) { throw new Exception("A transacao selecionada nao pode ser estornada,porque o valor ja foi utilizado!"); } _accountRepository.Save(AccountDestination); Transactions transactionsReversal = new Transactions(); transactionsReversal.AccountSourceId = AccountDestination.Id; transactionsReversal.Money = transactions.Money; transactionsReversal.TransactionCode = GeneratedCodeContribution.GetCode(); transactionsReversal.TransactionTypeId = (int)TransactionsTypeEnum.REVERSAL; transactionsReversal.Created = DateTime.Now; _transactionRepository.Save(transactionsReversal); transactions.Reversed = true; _transactionRepository.Save(transactions); _transactionRepository.Commit(); return(transactionsReversal); } catch (Exception ex) { _transactionRepository.RollBack(); throw ex; } }
public Transactions PostReversal(TransactionsReversalDTO transactionsReversalDTO) { Transactions transactions = _transactionRepository.GetTransactionReversal(transactionsReversalDTO.TransactionId); if (transactions.AccountSource == null && transactions.AccountDestination.Master == true && String.IsNullOrEmpty(transactionsReversalDTO.TransactionCode)) { throw new Exception("É necessario informar o codigo gerado na transacao para realizaar o estorno!"); } if (transactions.Reversed == true) { throw new Exception("Essa transacao ja foi estornada!"); } Account AccountDestination = transactions.AccountDestination; Account AccountSource = transactions.AccountSource; try { switch (transactions.TransactionTypeId) { case (int)TransactionsTypeEnum.DEPOSIT: return(ReversalDeposit(transactions, transactionsReversalDTO)); case (int)TransactionsTypeEnum.LOAD: return(ReversalLoad(transactions, transactionsReversalDTO)); case (int)TransactionsTypeEnum.REVERSAL: throw new Exception("Nao é possivel realizar esta operacao!"); case (int)TransactionsTypeEnum.TRANSFERENCE: return(ReversalTransference(transactions)); } throw new Exception("Nao foi encontrada nenhum transacao para o codigo de transacao informado!"); } catch (Exception ex) { throw ex; } }