Beispiel #1
0
        public void Nao_Deve_Obter_Conta_Por_Id_Com_Parametros_Invalidos()
        {
            var idConta   = 0;
            var idUsuario = 0;

            _contaServico = Substitute.For <ContaServico>(_contaRepositorio, _uow);

            var saida = _contaServico.ObterContaPorId(idConta, idUsuario).Result;

            Assert.IsTrue(!saida.Sucesso && saida.Mensagens.Any(x => x == ContaMensagem.Id_Conta_Invalido), string.Join(", ", saida.Mensagens));
        }
Beispiel #2
0
        public void Deve_Obter_Conta_Por_Id()
        {
            var idConta   = 1;
            var idUsuario = 1;

            _contaRepositorio.ObterPorId(idConta)
            .Returns(new Conta(new CadastrarContaEntrada(idUsuario, "Conta 1", TipoConta.ContaCorrente)));

            _contaServico = Substitute.For <ContaServico>(_contaRepositorio, _uow);

            var saida = _contaServico.ObterContaPorId(1, 1).Result;

            Assert.IsTrue(saida.Sucesso, string.Join(", ", saida.Mensagens));
        }
Beispiel #3
0
        public void Nao_Deve_Obter_Conta_Por_Id_Inexistente()
        {
            var idConta   = 1;
            var idUsuario = 1;

            _contaRepositorio.ObterPorId(idUsuario)
            .Returns((Conta)null);

            _contaServico = Substitute.For <ContaServico>(_contaRepositorio, _uow);

            var saida = _contaServico.ObterContaPorId(idConta, idUsuario).Result;

            Assert.IsTrue(!saida.Sucesso && saida.Mensagens.Any(x => x == ContaMensagem.Id_Conta_Nao_Existe), string.Join(", ", saida.Mensagens));
        }
Beispiel #4
0
        public void Nao_Deve_Obter_Conta_Por_Id_De_Outro_Usuario()
        {
            var idConta   = 1;
            var idUsuario = 1;

            _contaRepositorio.ObterPorId(idConta)
            .Returns(new Conta(new CadastrarContaEntrada(idUsuario, "Conta 1", TipoConta.ContaCorrente)));

            _contaServico = Substitute.For <ContaServico>(_contaRepositorio, _uow);

            var saida = _contaServico.ObterContaPorId(idConta, 2).Result;

            Assert.IsTrue(!saida.Sucesso && saida.Mensagens.Any(x => x == ContaMensagem.Conta_Nao_Pertence_Usuario), string.Join(", ", saida.Mensagens));
        }
Beispiel #5
0
 public async Task <IActionResult> ObterContaPorId([FromQuery, SwaggerParameter("ID da conta.", Required = true)] int idConta)
 {
     return(new ApiResult(await _contaServico.ObterContaPorId(idConta, base.ObterIdUsuarioClaim())));
 }
        public async Task <ISaida> PagarFatura(PagarFaturaEntrada entrada)
        {
            // Verifica se as informações para alteração foram informadas corretamente
            if (entrada.Invalido)
            {
                return(new Saida(false, entrada.Mensagens, null));
            }

            var cartaoSaida = await this.ObterCartaoCreditoPorId(entrada.IdCartaoCredito, entrada.IdUsuario, false);

            if (!cartaoSaida.Sucesso)
            {
                return(cartaoSaida);
            }

            var cartaoCredito = (CartaoCreditoSaida)cartaoSaida.Retorno;

            var dataFatura = new DateTime(entrada.AnoFatura, entrada.MesFatura, cartaoCredito.DiaVencimentoFatura);

            // Obtém todas as parcelas que compôem a fatura
            var parcelas = await _parcelaRepositorio.ObterPorCartaoCredito(entrada.IdCartaoCredito, dataFatura);

            var valorFatura = parcelas?.Where(x => !x.Lancada && !x.Descartada).Sum(x => x.Valor) + (entrada.ValorAdicionalDebito.HasValue ? entrada.ValorAdicionalDebito.Value : 0) - (entrada.ValorAdicionalCredito.HasValue ? entrada.ValorAdicionalCredito.Value : 0) ?? 0;

            // Verifica se o valor do pagamento é suficiente para o pagamento da fatura
            this.NotificarSeMenorQue(entrada.ValorPagamento, valorFatura, CartaoCreditoMensagem.Fatura_Valor_Pagamento_Menor_Valor_Total_Fatura);

            if (this.Invalido)
            {
                return(new Saida(false, this.Mensagens, null));
            }

            var contaSaida = await _contaServico.ObterContaPorId(entrada.IdContaPagamento, entrada.IdUsuario);

            if (!contaSaida.Sucesso)
            {
                return(cartaoSaida);
            }

            var contaPagamento = (ContaSaida)contaSaida.Retorno;

            // Verifica se o saldo da conta é maior ou igual ao valor da fatura
            this.NotificarSeMenorQue(contaPagamento.ValorSaldoAtual ?? 0, entrada.ValorPagamento, string.Format(CartaoCreditoMensagem.Fatura_Saldo_Insuficiente_Pagamento_Fatura, contaPagamento.ValorSaldoAtual?.ToString("C2")));

            if (this.Invalido)
            {
                return(new Saida(false, this.Mensagens, null));
            }

            Pessoa pessoa = null;

            if (entrada.IdPessoaPagamento.HasValue)
            {
                pessoa = await _pessoaRepositorio.ObterPorId(entrada.IdPessoaPagamento.Value);

                this
                .NotificarSeNulo(pessoa, PessoaMensagem.Id_Pessoa_Nao_Existe)
                .NotificarSeDiferentes(pessoa?.IdUsuario, entrada.IdUsuario, PessoaMensagem.Pessoa_Nao_Pertence_Usuario);

                if (this.Invalido)
                {
                    return(new Saida(false, this.Mensagens, null));
                }
            }

            if (this.Invalido)
            {
                return(new Saida(false, this.Mensagens, null));
            }

            var lancamentoFatura = new Lancamento(new LancamentoEntrada(
                                                      entrada.IdUsuario,
                                                      entrada.IdContaPagamento,
                                                      (int)TipoCategoriaEspecial.PagamentoFaturaCartao,
                                                      entrada.DataPagamento,
                                                      entrada.ValorPagamento,
                                                      idPessoa: pessoa?.Id,
                                                      observacao: $"Fatura {dataFatura.ToString("MMM").ToUpper()}/{dataFatura.ToString("yyyy")}"));

            // Insere o lançamento referente ao pagamento da fatura
            await _lancamentoRepositorio.Inserir(lancamentoFatura);

            await _uow.Commit();

            var fatura = new Fatura(
                entrada.IdCartaoCredito,
                lancamentoFatura.Id,
                entrada.MesFatura,
                entrada.AnoFatura,
                entrada.ValorAdicionalCredito,
                entrada.ObservacaoCredito,
                entrada.ValorAdicionalDebito,
                entrada.ObservacaoDebito);

            // Insere a fatura
            await _faturaRepositorio.Inserir(fatura);

            await _uow.Commit();

            foreach (var parcela in parcelas)
            {
                parcela.PagarFatura(fatura.Id, entrada.DataPagamento);
            }

            await _uow.Commit();

            fatura = await _faturaRepositorio.ObterPorId(fatura.Id);

            return(new Saida(true, new[] { CartaoCreditoMensagem.Fatura_Paga_Com_Sucesso }, new FaturaSaida(fatura, parcelas.Select(x => new ParcelaSaida(x)).ToList())));
        }
 public async Task <ISaida> ObterContaPorId([SwaggerParameter("ID da conta.", Required = true)] int idConta)
 {
     return(await _contaServico.ObterContaPorId(
                idConta,
                base.ObterIdUsuarioClaim()));
 }