Пример #1
0
        public async Task <ISaida> ObterContaPorId(int idConta, int idUsuario)
        {
            this.NotificarSeMenorOuIgualA(idConta, 0, ContaMensagem.Id_Conta_Invalido);
            this.NotificarSeMenorOuIgualA(idUsuario, 0, Mensagem.Id_Usuario_Invalido);

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

            var conta = await _contaRepositorio.ObterPorId(idConta);

            // Verifica se a conta existe
            this.NotificarSeNulo(conta, ContaMensagem.Id_Conta_Nao_Existe);

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

            // Verifica se a conta pertece ao usuário informado.
            this.NotificarSeDiferentes(conta.IdUsuario, idUsuario, ContaMensagem.Conta_Nao_Pertence_Usuario);

            return(this.Invalido
                ? new Saida(false, this.Mensagens, null)
                : new Saida(true, new[] { ContaMensagem.Conta_Encontrada_Com_Sucesso }, new ContaSaida(conta)));
        }
Пример #2
0
        public void Creditar(CreditoCommand creditoCommand)
        {
            var conta = _contaRepositorio.ObterPorId(creditoCommand.ContaId);

            conta.Creditar(creditoCommand.Valor);
            _contaRepositorio.Editar(conta);
        }
Пример #3
0
        public async Task <ISaida> CadastrarLancamento(LancamentoEntrada entrada)
        {
            // Verifica se as informações para cadastro foram informadas corretamente
            if (entrada.Invalido)
            {
                return(new Saida(false, entrada.Mensagens, null));
            }

            // Verifica se a categoria existe a partir do ID informado.
            this.NotificarSeFalso(await _categoriaRepositorio.VerificarExistenciaPorId(entrada.IdUsuario, entrada.IdCategoria), CategoriaMensagem.Id_Categoria_Nao_Existe);

            // Verifica se a conta existe a partir do ID informado.
            this.NotificarSeFalso(await _contaRepositorio.VerificarExistenciaPorId(entrada.IdUsuario, entrada.IdConta), ContaMensagem.Id_Conta_Nao_Existe);

            // Verifica se a pessoa existe a partir do ID informado.
            if (entrada.IdPessoa.HasValue)
            {
                this.NotificarSeFalso(await _pessoaRepositorio.VerificarExistenciaPorId(entrada.IdUsuario, entrada.IdPessoa.Value), PessoaMensagem.Id_Pessoa_Nao_Existe);
            }

            // Verifica se a parcela existe a partir do ID informado.
            if (entrada.IdParcela.HasValue)
            {
                this.NotificarSeFalso(await _parcelaRepositorio.VerificarExistenciaPorId(entrada.IdUsuario, entrada.IdParcela.Value), ParcelaMensagem.Id_Parcela_Nao_Existe);
            }

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

            var conta = await _contaRepositorio.ObterPorId(entrada.IdConta);

            // Verifica se a quantidade de ações vendidas é maior que o total de ações disponíveis na carteira.
            if (conta.Tipo == TipoConta.Acoes && entrada.IdCategoria == (int)TipoCategoriaEspecial.VendaAcoes)
            {
                var operacoes = await _lancamentoRepositorio.ObterPorPeriodo(conta.Id, new DateTime(2019, 1, 1), DateTime.Today.AddHours(23).AddMinutes(59).AddSeconds(59));

                var qtdAcoesCompradas = operacoes.Where(x => x.IdCategoria == (int)TipoCategoriaEspecial.CompraAcoes).Sum(x => x.QtdRendaVariavel.HasValue ? x.QtdRendaVariavel.Value : 0);
                var qtdAcoesVendidas  = operacoes.Where(x => x.IdCategoria == (int)TipoCategoriaEspecial.VendaAcoes).Sum(x => x.QtdRendaVariavel.HasValue ? x.QtdRendaVariavel.Value : 0);

                var qtdAcoesDisponivel = qtdAcoesCompradas - qtdAcoesVendidas;

                this.NotificarSeVerdadeiro(entrada.QuantidadeAcoes > qtdAcoesDisponivel, LancamentoMensagem.Qtd_Acoes_Venda_Maior_Disponivel_Carteira);

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

            var lancamento = new Lancamento(entrada);

            await _lancamentoRepositorio.Inserir(lancamento);

            await _uow.Commit();

            return(new Saida(true, new[] { LancamentoMensagem.Lancamento_Cadastrado_Com_Sucesso }, new LancamentoSaida(await _lancamentoRepositorio.ObterPorId(lancamento.Id))));
        }
Пример #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));
        }
        public async Task <Model.Conta> Handle(AlterarContaCommand request, CancellationToken cancellationToken)
        {
            using (var uow = unitOfWork)
            {
                var conta = await contaRepositorio.ObterPorId(request.Id) ?? new Model.Conta();

                var resultado = await contaRepositorio.Alterar(mapper.Map(request, conta));

                uow.PersistirTransacao();

                return(resultado);
            }
        }
Пример #6
0
        public async Task <ISaida> CadastrarAgendamento(AgendamentoEntrada entrada)
        {
            // Verifica se as informações para cadastro foram informadas corretamente
            if (entrada.Invalido)
            {
                return(new Saida(false, entrada.Mensagens, null));
            }

            // Verifica se a categoria existe a partir do ID informado.
            this.NotificarSeFalso(await _categoriaRepositorio.VerificarExistenciaPorId(entrada.IdUsuario, entrada.IdCategoria), CategoriaMensagem.Id_Categoria_Nao_Existe);

            // Verifica se a conta ou cartão de crédito existem a partir do ID informado.
            if (entrada.IdConta.HasValue)
            {
                var conta = await _contaRepositorio.ObterPorId(entrada.IdConta.Value);

                this
                .NotificarSeNulo(conta, ContaMensagem.Id_Conta_Nao_Existe)
                .NotificarSeVerdadeiro(conta?.Tipo == TipoConta.Acoes, AgendamentoMensagem.Tipo_Conta_Invalida);
            }
            else
            {
                var cartao = (CartaoCreditoSaida)(await _cartaoCreditoServico.ObterCartaoCreditoPorId(entrada.IdCartaoCredito.Value, entrada.IdUsuario)).Retorno;

                this
                .NotificarSeNulo(cartao, CartaoCreditoMensagem.Id_Cartao_Nao_Existe)
                .NotificarSeVerdadeiro(cartao != null && (cartao.ValorLimiteDisponivel ?? 0) < entrada.QuantidadeParcelas * entrada.ValorParcela, $"O valor total do agendamento ({(entrada.QuantidadeParcelas * entrada.ValorParcela).ToString("C2")}) é superior ao valor do limite disponível para o cartão ({cartao.ValorLimiteDisponivel?.ToString("C2")}).");
            }

            // Verifica se a pessoa existe a partir do ID informado.
            if (entrada.IdPessoa.HasValue)
            {
                this.NotificarSeFalso(await _pessoaRepositorio.VerificarExistenciaPorId(entrada.IdUsuario, entrada.IdPessoa.Value), PessoaMensagem.Id_Pessoa_Nao_Existe);
            }

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

            var agendamento = new Agendamento(entrada);

            await _agendamentoRepositorio.Inserir(agendamento);

            await _uow.Commit();

            return(new Saida(true, new[] { AgendamentoMensagem.Agendamento_Cadastrado_Com_Sucesso }, new AgendamentoSaida(await _agendamentoRepositorio.ObterPorId(agendamento.Id))));
        }
Пример #7
0
        public async Task <IActionResult> Get(int id = 0)
        {
            try
            {
                if (id != 0)
                {
                    return(Ok(_contaRepositorio.ObterPorId(id)));
                }

                return(Ok(_contaRepositorio.ObterTodos()));
            }
            catch (Exception ex)
            {
                return(BadRequest(ex.ToString()));
            }
        }