예제 #1
0
        public ICommandResult Handle(LiberacaoCreditoDiretoCommand command)
        {
            command.Validate();
            if (command.Invalid)
            {
                AddNotifications(command);
                return(new CommandResult(false, "Não foi possível a Liberação de Crédito Direto", null));
            }

            //Validacoes
            if (!decimal.TryParse(command.ValorCredito, out decimal valorCredito))
            {
                AddNotification("LiberacaoCreditoFisicaCommand.ValorCredito", "O valor de crédito é inválido");
            }
            if (!int.TryParse(command.Parcelas, out int parcelas))
            {
                AddNotification("LiberacaoCreditoFisicaCommand.Parcelas", "O número de parcelas é inválido");
            }
            if (!DateTime.TryParse(command.PrimeiroVencimento, out DateTime primeiroVencimento))
            {
                AddNotification("LiberacaoCreditoFisicaCommand.PrimeiroVencimento", "A data do primeiro vencimento é inválida");
            }

            if (Invalid)
            {
                return(new CommandResult(false, "Não foi possível a Liberação de Crédito Direto", null));
            }

            //Gerar a Entidade de Liberacao de Credito
            var direto = new Direto(valorCredito, parcelas, primeiroVencimento);

            //Aprovar ou Reprovar
            direto.Aprovar();

            //Calcular Juros
            direto.CalcularJuros();

            if (direto.Invalid)
            {
                return(new CommandResult(false, "Não foi possível calcular o Juros de Crédito Direto", null));
            }

            return(new CommandResult(true, $"Status do crédito: {direto.StatusString} | Valor total com juros: {direto.ValorTotalComJurosString} | Valor do juros: {direto.ValorJurosString} ", direto));
        }
예제 #2
0
        public void DeveRetornarSucessoQuandoPrimeiroVencimentoValido()
        {
            var credito = new Direto(20000, 10, DateTime.Now.AddDays(30));

            Assert.IsTrue(credito.Valid);
        }
예제 #3
0
        public void DeveRetornarErroQuandoPrimeiroVencimentoInvalido()
        {
            var credito = new Direto(200000, 10, DateTime.Now.AddDays(41));

            Assert.IsTrue(credito.Invalid);
        }
예제 #4
0
        public void DeveRetornarSucessoQuandoParcelasValido()
        {
            var credito = new Direto(20000, 5, DateTime.Now.AddDays(30));

            Assert.IsTrue(credito.Valid);
        }
예제 #5
0
        public void DeveRetornarErroQuandoParcelasInvalido()
        {
            var credito = new Direto(20000, 73, DateTime.Now.AddDays(30));

            Assert.IsTrue(credito.Invalid);
        }
예제 #6
0
        public void DeveRetornarErroQuandoValorCreditoInvalido()
        {
            var credito = new Direto(1000001, 10, DateTime.Now.AddDays(30));

            Assert.IsTrue(credito.Invalid);
        }