public ActionResult Checkout()
        {
            Usuario usuario = (Usuario)Session["Usuario"];

            if (usuario == null)
            {
                return(RedirectToAction("Login", "Usuarios"));
            }

            var listaEnderecos = new EnderecoDao().ConsultarPorCliente(usuario.Id);
            var listaCartoes   = new CartaoDao().ConsultarPorCliente(usuario.Id);

            List <SelectListItem> ddlEnderecos = new List <SelectListItem>
            {
                new SelectListItem
                {
                    Text  = "Selecione um endereço",
                    Value = "0"
                }
            };
            List <SelectListItem> ddlCartoes = new List <SelectListItem>
            {
                new SelectListItem
                {
                    Text  = "Selecione um cartão",
                    Value = "0"
                }
            };

            listaEnderecos.ForEach(x => ddlEnderecos.Add(new SelectListItem
            {
                Text     = string.Concat(x.Descricao, " - ", x.Logradouro, ", ", x.Numero, " ", x.Complemento),
                Value    = x.Id.ToString(),
                Selected = x.Entrega
            }));
            listaCartoes.ForEach(x => ddlCartoes.Add(new SelectListItem
            {
                Text     = string.Concat(x.Bandeira, " - final ", x.Numero.Substring(x.Numero.Length - 4)),
                Value    = x.Id.ToString(),
                Selected = x.Preferencial
            }));

            ViewBag.Enderecos = ddlEnderecos;
            ViewBag.Cartoes   = ddlCartoes;

            Cliente cliente = new Cliente
            {
                Carrinho = usuario?.Carrinho ?? new Carrinho()
            };

            Pedido pedido = new Pedido
            {
                Cliente = cliente,
                Bebidas = ((Usuario)Session["Usuario"])?.Carrinho?.Bebidas ?? new List <Bebida>()
            };

            //verifica se os itens ainda existem no estoque
            bool BebidasOK = new EstoqueDao().VerificaItensDisponiveis(pedido.Bebidas);

            if (!BebidasOK)
            {
                //retorna para o carrinho informando que o estoque foi atualizado
                return(RedirectToAction("Index", "Carrinho", new { i = 1 }));
            }

            return(View(pedido));
        }