コード例 #1
0
        public void Transferir(Entidades.ContaCorrente contaOrigem, Entidades.ContaCorrente contaDestino, double valor)
        {
            var dataAtual = DateTime.UtcNow;

            var saldo = _saldoRepositorio.Consulta(contaOrigem, dataAtual).Result;

            try
            {
                Validar(saldo, valor);
            }
            catch (Exception)
            {
                throw;
            }


            var lancContaOrigem  = Fabrica.Transferencia(dataAtual, contaOrigem, contaDestino, valor, true);
            var lancContaDestino = Fabrica.Credito(dataAtual, contaDestino, valor, $"Recebimento de {contaOrigem}");

            RegistroLancamento registro;

            try
            {
                registro = _lancamentoRepositorio.Registrar(lancContaOrigem).Result;
            }
            catch (Exception ex)
            {
                throw new Exception("Falhar ao registrar transferência.", ex);
            }

            try
            {
                _lancamentoRepositorio.Registrar(lancContaDestino, registro).Start();
            }
            catch (Exception ex)
            {
                _lancamentoRepositorio.Cancelar(registro);
                throw new Exception("Falhar ao registrar transferência para conta destino.", ex);
            }
        }