Beispiel #1
0
        public List <Conquista> ComprarAcao()
        {
            using (var ctx = new SimuladorAcoesContext())
            {
                var usuario = ctx.Usuario.Find(_idUsuarioComprador);

                if (usuario == null)
                {
                    throw new Exception("Usuário inexistente");
                }

                var acao = ctx.Empresa.Single(x => x.IdEmpresa == _acaoCompradaId);

                var valorAGastar = acao.CotacaoRecente * _qtdComprada;

                if (valorAGastar > usuario.SaldoUsuario)
                {
                    throw new Exception("Compra ultrapassa saldo do usuário");
                }

                usuario.SaldoUsuario = usuario.SaldoUsuario - valorAGastar;

                AdicionarTransacao(acao, usuario, ctx);

                AdicionarEstoque(usuario, acao, ctx);

                var ret = VerificarConquistas(usuario, ctx);

                ctx.SaveChanges();

                return(ret);
            }
        }
Beispiel #2
0
 public VerificadorGeralConquistas(int IdUsuario, SimuladorAcoesContext ctx)
 {
     idUsuario = IdUsuario;
     _ctx      = ctx;
     _conquistasNaoAlcancadas = _ctx.DefinicaoConquista.Where(x => !_ctx.Conquista.Any(y => y.IdUsuario == IdUsuario && x.IdDefinicaoConquista == y.IdDefinicaoConquista))
                                .ToList();
 }
Beispiel #3
0
        public List <Conquista> VenderAcao()
        {
            using (var ctx = new SimuladorAcoesContext())
            {
                var acaoEmEstoque = ctx.EstoqueAcoes.SingleOrDefault(x => x.EmpresaId == _acaoVendidaId && x.UsuarioId == _idUsuarioVendedor);
                if (acaoEmEstoque == null)
                {
                    throw new Exception("Ação não localizada");
                }

                if (_qtdVendida > acaoEmEstoque.Quantidade)
                {
                    throw new Exception("Não é possível vender mais ações do que possui");
                }

                acaoEmEstoque.Quantidade -= _qtdVendida;

                IncluirTransacaoVenda(ctx, acaoEmEstoque);

                acaoEmEstoque.Usuario.SaldoUsuario += acaoEmEstoque.Acao.CotacaoRecente * _qtdVendida;

                var conquistas = VerificarConquistas(ctx, acaoEmEstoque.Usuario);

                ctx.SaveChanges();

                return(conquistas);
            }
        }
Beispiel #4
0
        public RequestResponse <List <ListaEstoqueUsuarioViewModel> > ListarAcoesUsuario(int idUsuario)
        {
            var ret = new RequestResponse <List <ListaEstoqueUsuarioViewModel> >();

            try
            {
                using (var ctx = new SimuladorAcoesContext())
                {
                    var listaViewModel = new List <ListaEstoqueUsuarioViewModel>();
                    var listaEstoque   = ctx.EstoqueAcoes.Where(x => x.UsuarioId == idUsuario && x.Quantidade > 0).Include(x => x.Acao);
                    foreach (var item in listaEstoque)
                    {
                        listaViewModel.Add(item.ConvertToViewModel());
                    }

                    ret.Code         = 0;
                    ret.Message      = "Sucesso";
                    ret.ReturnObject = listaViewModel;
                    return(ret);
                }
            }
            catch (Exception ex)
            {
                ret.Code    = -1;
                ret.Message = ex.Message;
                return(ret);
            }
        }
Beispiel #5
0
        public RequestResponse <List <NoticiaPorEmpresaViewModel> > Listar(int idEmpresa)
        {
            var objRetorno = new RequestResponse <List <NoticiaPorEmpresaViewModel> >();

            try
            {
                using (var ctx = new SimuladorAcoesContext())
                {
                    var ret           = new List <NoticiaPorEmpresaViewModel>();
                    var listaNoticias = ctx.Noticia.Where(x => x.EmpresaId == idEmpresa);

                    foreach (var noticia in listaNoticias)
                    {
                        ret.Add(noticia.ConvertToViewModel());
                    }

                    objRetorno.Code         = 0;
                    objRetorno.Message      = "Sucesso";
                    objRetorno.ReturnObject = ret;
                    return(objRetorno);
                }
            }
            catch (Exception ex)
            {
                objRetorno.Code    = -1;
                objRetorno.Message = ex.Message;
                return(objRetorno);
            }
        }
Beispiel #6
0
        public RequestResponse <List <LogCompraVendaViewModel> > ListarTransacoes(int idUsuario, int idEmpresa)
        {
            var response = new RequestResponse <List <LogCompraVendaViewModel> >();

            try
            {
                using (var ctx = new SimuladorAcoesContext())
                {
                    var listaRetorno    = new List <LogCompraVendaViewModel>();
                    var listaTransacoes = ctx.Transacoes.Where(x => x.UsuarioId == idUsuario && x.EmpresaId == idEmpresa);

                    foreach (var transacao in listaTransacoes)
                    {
                        listaRetorno.Add(transacao.ConvertToViewModel());
                    }

                    response.Code         = 0;
                    response.Message      = "Sucesso";
                    response.ReturnObject = listaRetorno;

                    return(response);
                }
            }
            catch (Exception ex)
            {
                response.Code    = -1;
                response.Message = ex.Message;
                return(response);
            }
        }
Beispiel #7
0
        public RequestResponse <List <ExibicaoConquistasViewModel> > ListarConquistas(int usuarioId)
        {
            var ret = new RequestResponse <List <ExibicaoConquistasViewModel> >();

            try
            {
                using (var ctx = new SimuladorAcoesContext())
                {
                    var listaDados      = new List <ExibicaoConquistasViewModel>();
                    var listaConquistas = ctx.DefinicaoConquista.ToList();

                    foreach (var c in listaConquistas)
                    {
                        listaDados.Add(c.ConvertToViewModel(usuarioId, ctx));
                    }

                    ret.Code         = 0;
                    ret.Message      = "Sucesso";
                    ret.ReturnObject = listaDados;
                    return(ret);
                }
            }
            catch (Exception ex)
            {
                ret.Message = ex.Message;
                ret.Code    = -1;
                return(ret);
            }
        }
Beispiel #8
0
        private List <Conquista> VerificarConquistas(Usuario usuario, SimuladorAcoesContext ctx)
        {
            var conquistasObtidas = new VerificadorGeralConquistas(usuario.IdUsuario, ctx).VerificarConquistasCompraAindaNaoAlcancadas();

            foreach (var c in conquistasObtidas)
            {
                ctx.Conquista.Add(c);
                usuario.DescontoAcumuladoUsuario += c.DefinicaoConquista.ValorDesconto;
            }

            return(conquistasObtidas);
        }
Beispiel #9
0
        private void AdicionarTransacao(AcaoEmpresa acao, Usuario usuario, SimuladorAcoesContext ctx)
        {
            var transacao = new Transacao()
            {
                CompraOuVenda  = TipoTransacao.Compra,
                ValorTransacao = acao.CotacaoRecente,
                AcaoComprada   = acao,
                DataTransacao  = DateTime.Now,
                Usuario        = usuario,
                QtdTransacao   = _qtdComprada,
            };

            ctx.Transacoes.Add(transacao);
        }
Beispiel #10
0
        public List <EmpresasMenuPrincipalViewModel> ListarEmpresas()
        {
            using (var db = new SimuladorAcoesContext())
            {
                var ret = new List <EmpresasMenuPrincipalViewModel>();

                foreach (var acao in db.Empresa)
                {
                    ret.Add(acao.ConvertToViewModel());
                }

                return(ret);
            }
        }
Beispiel #11
0
        private void IncluirTransacaoVenda(SimuladorAcoesContext ctx, EstoqueAcoes acaoEmEstoque)
        {
            var transacao = new Transacao()
            {
                CompraOuVenda  = TipoTransacao.Venda,
                DataTransacao  = DateTime.Now,
                AcaoComprada   = acaoEmEstoque.Acao,
                QtdTransacao   = _qtdVendida,
                Usuario        = acaoEmEstoque.Usuario,
                ValorTransacao = acaoEmEstoque.Acao.CotacaoRecente
            };

            ctx.Transacoes.Add(transacao);
        }
Beispiel #12
0
        private void AdicionarEstoque(Usuario usuario, AcaoEmpresa acao, SimuladorAcoesContext ctx)
        {
            var existeEstoque = ctx.EstoqueAcoes.SingleOrDefault(x => x.UsuarioId == usuario.IdUsuario && x.EmpresaId == acao.IdEmpresa);

            if (existeEstoque == null)
            {
                var novoItemEstoque = new EstoqueAcoes()
                {
                    Acao       = acao,
                    Usuario    = usuario,
                    Quantidade = _qtdComprada
                };
                ctx.EstoqueAcoes.Add(novoItemEstoque);
            }
            else
            {
                existeEstoque.Quantidade += _qtdComprada;
            }
        }
Beispiel #13
0
        public RequestResponse <UserViewModel> Me(int idUsuario)
        {
            try
            {
                using (var ctx = new SimuladorAcoesContext())
                {
                    var ret  = new RequestResponse <UserViewModel>();
                    var user = ctx.Usuario.Single(x => x.IdUsuario == idUsuario);

                    ret.Message      = "Sucesso";
                    ret.ReturnObject = user.ConvertToViewModel();
                    ret.Code         = 0;

                    return(ret);
                }
            }
            catch (Exception ex)
            {
                return(new RequestResponse <UserViewModel>(-1, ex.Message));
            }
        }
Beispiel #14
0
        public Conquista VerificarSeConquistaFoiAlcancada(int idUsuario, DefinicaoConquista conquistaAVerificar, SimuladorAcoesContext ctx)
        {
            if (!ctx.Transacoes.Local.Any(x => x.CompraOuVenda == TipoTransacao.Venda))
            {
                return(null);
            }

            return(new Conquista()
            {
                DataConquista = DateTime.Now,
                DefinicaoConquista = conquistaAVerificar,
                IdUsuario = idUsuario
            });
        }
Beispiel #15
0
        public Conquista VerificarSeConquistaFoiAlcancada(int idUsuario, DefinicaoConquista conquistaAVerificar, SimuladorAcoesContext ctx)
        {
            var transacoesUsuario = ctx.Transacoes.Local.Where(x => x.CompraOuVenda == TipoTransacao.Venda && x.UsuarioId == idUsuario);

            if (!transacoesUsuario.Any())
            {
                return(null);
            }

            if (transacoesUsuario.Sum(y => y.ValorTransacao * y.QtdTransacao) > 300)
            {
                return(new Conquista()
                {
                    DataConquista = DateTime.Now,
                    DefinicaoConquista = conquistaAVerificar,
                    IdUsuario = idUsuario
                });
            }
            else
            {
                return(null);
            }
        }
Beispiel #16
0
 public Conquista VerificarSeConquistaFoiAlcancada(int idUsuario, DefinicaoConquista conquistaAVerificar, SimuladorAcoesContext ctx)
 {
     if (ctx.Transacoes.Local.Any(x => x.AcaoComprada.ValorDeMercado >= ValorMercadoConquista))
     {
         return(new Conquista()
         {
             DataConquista = DateTime.Now,
             DefinicaoConquista = conquistaAVerificar,
             IdUsuario = idUsuario
         });
     }
     else
     {
         return(null);
     }
 }
Beispiel #17
0
 public static ExibicaoConquistasViewModel ConvertToViewModel(this DefinicaoConquista o, int userId, SimuladorAcoesContext ctx)
 {
     return(new ExibicaoConquistasViewModel()
     {
         Completada = ctx.Conquista.Any(x => x.IdUsuario == userId && x.IdDefinicaoConquista == o.IdDefinicaoConquista),
         DescricaoConquista = o.DescricaoConquista,
         IdConquista = o.IdDefinicaoConquista,
         TituloConquista = o.TituloConquista,
         ValorDesconto = o.ValorDesconto
     });
 }