public async Task <ActionResult> Venda(VendaViewModel viewModel)
        {
            var keys = ModelState.Keys.Where(a => a.Contains("Acao.") || a.Contains("UsuarioAcao.")).ToList();

            foreach (var key in keys)
            {
                ModelState.Remove(key);
            }

            if (ModelState.IsValid)
            {
                var rd = new Random((int)DateTime.Now.Ticks);

                var usuarioAcao = await db.UsuariosAcoes.Include(a => a.OrdensUsuariosAcoes)
                                  .Include(a => a.UsuariosAcoesHistoricos)
                                  .FirstOrDefaultAsync(a => a.UsuarioAcaoId == viewModel.UsuarioAcao.UsuarioAcaoId);

                var ordemUsuarioAcao = new OrdemUsuarioAcao
                {
                    OrdemUsuarioAcaoId = Guid.NewGuid(),
                    Ordem = new Ordem
                    {
                        OrdemId    = Guid.NewGuid(),
                        AcaoId     = viewModel.Acao.AcaoId,
                        Chance     = Infraestrura.OrdensChances.Venda(viewModel.Acao.Preco, viewModel.Preco),
                        DataHora   = DateTime.Now,
                        Preco      = viewModel.Preco,
                        Quantidade = viewModel.Quantidade,
                        Tipo       = OrdemTipo.Venda,
                        UsuarioId  = Guid.Parse(User.Identity.GetUserId()),
                    }
                };

                var percentual = (decimal)rd.NextDouble() * 100;
                if (ordemUsuarioAcao.Ordem.Chance >= percentual)
                {
                    var historico = new UsuarioAcaoHistorico()
                    {
                        UsuarioAcaoHistoricoId = Guid.NewGuid(),
                        Preco = viewModel.Preco,
                        PercentualVariacao = viewModel.Preco * 100 / viewModel.Acao.Preco - 100,
                        ValorVariacao      = viewModel.Preco - viewModel.Acao.Preco,
                        Rentabilidade      = (viewModel.Preco - viewModel.Acao.Preco) * viewModel.Quantidade
                    };
                    usuarioAcao.Quantidade -= viewModel.Quantidade;
                    usuarioAcao.Ativo       = usuarioAcao.Quantidade > 0;
                    usuarioAcao.UsuariosAcoesHistoricos.Add(historico);
                    ordemUsuarioAcao.Ordem.Rentabilidade = historico.Rentabilidade;
                    usuarioAcao.OrdensUsuariosAcoes.Add(ordemUsuarioAcao);

                    await db.SaveChangesAsync();
                }


                return(RedirectToAction("Index"));
            }

            return(View(viewModel));
        }
        public async Task <ActionResult> DeleteConfirmed(Guid id)
        {
            UsuarioAcaoHistorico usuarioAcaoHistorico = await db.UsuariosAcoesHistoricos.FindAsync(id);

            db.UsuariosAcoesHistoricos.Remove(usuarioAcaoHistorico);
            await db.SaveChangesAsync();

            return(RedirectToAction("Index"));
        }
        public async Task <ActionResult> Edit([Bind(Include = "UsuarioAcaoHistoricoId,UsuarioAcaoId")] UsuarioAcaoHistorico usuarioAcaoHistorico)
        {
            if (ModelState.IsValid)
            {
                db.Entry(usuarioAcaoHistorico).State = EntityState.Modified;
                await db.SaveChangesAsync();

                return(RedirectToAction("Index"));
            }
            ViewBag.UsuarioAcaoId = new SelectList(db.UsuariosAcoes, "UsuarioAcaoId", "UsuarioAcaoId", usuarioAcaoHistorico.UsuarioAcaoId);
            return(View(usuarioAcaoHistorico));
        }
        public async Task <ActionResult> Create([Bind(Include = "UsuarioAcaoHistoricoId,UsuarioAcaoId")] UsuarioAcaoHistorico usuarioAcaoHistorico)
        {
            if (ModelState.IsValid)
            {
                usuarioAcaoHistorico.UsuarioAcaoHistoricoId = Guid.NewGuid();
                db.UsuariosAcoesHistoricos.Add(usuarioAcaoHistorico);
                await db.SaveChangesAsync();

                return(RedirectToAction("Index"));
            }

            ViewBag.UsuarioAcaoId = new SelectList(db.UsuariosAcoes, "UsuarioAcaoId", "UsuarioAcaoId", usuarioAcaoHistorico.UsuarioAcaoId);
            return(View(usuarioAcaoHistorico));
        }
        // GET: UsuariosAcoesHistoricos/Details/5
        public async Task <ActionResult> Details(Guid?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            UsuarioAcaoHistorico usuarioAcaoHistorico = await db.UsuariosAcoesHistoricos.FindAsync(id);

            if (usuarioAcaoHistorico == null)
            {
                return(HttpNotFound());
            }
            return(View(usuarioAcaoHistorico));
        }
        // GET: UsuariosAcoesHistoricos/Edit/5
        public async Task <ActionResult> Edit(Guid?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            UsuarioAcaoHistorico usuarioAcaoHistorico = await db.UsuariosAcoesHistoricos.FindAsync(id);

            if (usuarioAcaoHistorico == null)
            {
                return(HttpNotFound());
            }
            ViewBag.UsuarioAcaoId = new SelectList(db.UsuariosAcoes, "UsuarioAcaoId", "UsuarioAcaoId", usuarioAcaoHistorico.UsuarioAcaoId);
            return(View(usuarioAcaoHistorico));
        }