public void TransferirEntreContas(Cliente cliente, int agenciaOrigem, int contaOrigem, int agenciaDestino, int contaDestino, decimal valor) { var contaCorrenteOrigem = _contaCorrenteService.Obtem(agenciaOrigem, contaOrigem); var contaCorrenteDestino = _contaCorrenteService.Obtem(agenciaDestino, contaDestino); if (contaCorrenteOrigem.Cliente.Id != cliente.Id) { throw new TransferenciaCustomException("A conta de origem não pertece a cliente"); } if (contaCorrenteOrigem.Id == contaCorrenteDestino.Id) { throw new TransferenciaCustomException("Conta de origem e destino não podem ser iguais"); } if (contaCorrenteOrigem == null) { throw new TransferenciaCustomException("Conta corrente de origem inexistente"); } if (contaCorrenteDestino == null) { throw new TransferenciaCustomException("Conta corrente de destino inexistente"); } if (!contaCorrenteOrigem.PossoDebitar(valor)) { throw new TransferenciaCustomException("Saldo em conta corrente indisponivel"); } var lancamentos = CriaListaDeLancamentosDebitoCredito(valor, contaCorrenteOrigem, contaCorrenteDestino); _contaCorrenteRepository.GravarLancamentos(lancamentos); }