public ActionResult Index()
        {
            Home home = new Home();

            try
            {
                if (User.Identity.IsAuthenticated)
                {
                    // Carrega o cardápio

                    LancheService lancheService = new LancheService();
                    home.Lanches = lancheService.List();

                    OpcionalService opcionalService = new OpcionalService();
                    home.Opcionais = opcionalService.List();

                    BebidaService bebidaService = new BebidaService();
                    home.Bebidas = bebidaService.List();
                }
            }
            catch (Exception ex)
            {
                ViewBag.Error = ex.Message;
            }

            return View(home);
        }
        public JsonResult GetNomeBebida(int id, short quantidade)
        {
            BebidaService bebidaService = new BebidaService();

            BebidaPedido bebida = new BebidaPedido() { NomeBebida = bebidaService.Find(id).Nome, Quantidade = quantidade };

            return Json(new { Result = bebida }, JsonRequestBehavior.AllowGet);
        }
        //
        // GET: /Bebida/Delete/5
        public ActionResult Delete(int id)
        {
            Bebida bebida = null;

            try
            {
                BebidaService bebidaService = new BebidaService();
                bebida = bebidaService.Find(id);
            }
            catch (Exception ex)
            {
                ViewBag.Error = ex.Message;
            }

            return View(bebida);
        }
        public ActionResult DeleteConfirmed(int id)
        {
            try
            {
                BebidaService bebidaService = new BebidaService();
                bebidaService.Delete(id);
            }
            catch (Exception ex)
            {
                ViewBag.Error = ex.Message;
            }

            if(ModelState.IsValid)
                TempData["message"] = "Bebida excluída com sucesso";

            return RedirectToAction("Index");
        }
        public ActionResult Create(Bebida bebida)
        {
            try
            {
                if (ModelState.IsValid)
                {
                    BebidaService bebidaService = new BebidaService();
                    bebidaService.Insert(bebida);

                    TempData["message"] = "Bebida cadastrada com sucesso";

                    return RedirectToAction("Index");
                }
            }
            catch (Exception ex)
            {
                ViewBag.Error = ex.Message;
            }

            return View(bebida);
        }
        //
        // GET: /Bebida/
        public ViewResult Index()
        {
            IList<Bebida> bebidas = null;

            try
            {
                BebidaService bebidaService = new BebidaService();
                bebidas = bebidaService.List();
            }
            catch (Exception ex)
            {
                ViewBag.Error = ex.Message;
            }

            return View(bebidas);
        }
        private Fechamento InicializaTela(Fechamento fechamento)
        {
            BebidaService bebidaService = new BebidaService();
            fechamento.BebidasDisponiveis = bebidaService.List();

            using (Context db = new Context())
            {
                // DropDownList Bebida
                if (fechamento.BebidaId != 0)
                    ViewBag.Bebidas = new SelectList(db.Bebida.ToList(), "Id", "Nome", fechamento.BebidaId);
                else
                    ViewBag.Bebidas = new SelectList(db.Bebida.ToList(), "Id", "Nome");
            }

            return fechamento;
        }
        public void EnviaEmailContato(Fechamento fechamento)
        {
            string toMailAddress = fechamento.Parametro.EmailContato;
            string toContact = fechamento.Parametro.NomeContato;
            decimal valorTotalPedido = 0;

            StringBuilder message = new StringBuilder();

            message.Append("Olá " + toContact + ", \n\n");

            if (fechamento.PossuiTeleEntrega)
            {
                message.Append("Segue pedido do pessoal da Voiza para Tele-Entrega na Voiza:\n\n");
                message.Append("FORMA PAGAMENTO: \n Visa e Visa Vale \n\n");
                message.Append("TELE ENTREGA: R$" + fechamento.Parametro.ValorTeleEntrega + "\n\n");

                valorTotalPedido += (decimal)fechamento.Parametro.ValorTeleEntrega;

                if (fechamento.PossuiBebida)
                {
                    message.Append("BEBIDAS:\n");

                    BebidaService bebidaService = new BebidaService();

                    for (short i = 0; i < fechamento.PedidoIdBebidas.Length; i++)
                    {
                        if (fechamento.PedidoQuantidadeBebidas[i] > 0)
                        {
                            message.Append(" - " + fechamento.PedidoQuantidadeBebidas[i] + " " + bebidaService.GetName(fechamento.PedidoIdBebidas[i]) + " - R$" + fechamento.PedidoQuantidadeBebidas[i] * bebidaService.GetValor(fechamento.PedidoIdBebidas[i]) + "\n");
                            valorTotalPedido += fechamento.PedidoQuantidadeBebidas[i] * bebidaService.GetValor(fechamento.PedidoIdBebidas[i]);
                        }
                    }
                    message.Append("\n");
                }

                message.Append("LANCHES: \n\n");

                foreach (var pedido in fechamento.Pedidos)
                {
                    message.Append(pedido.Usuario.Nome.ToUpper() + " -> " + pedido.Lanche.Nome.ToUpper() + " - R$" + pedido.ValorLanche + "\n");

                    foreach (Opcional opcional in pedido.Opcionais)
                        message.Append(" - Com " + opcional.Nome + "\n");

                    if (!String.IsNullOrWhiteSpace(pedido.Observacao))
                        message.Append(" Obs: " + pedido.Observacao + "\n");

                    valorTotalPedido += (decimal)pedido.ValorLanche;

                    message.Append("\n\n");
                }

                message.Append("VALOR TOTAL DO PEDIDO: R$" + valorTotalPedido + "\n\n");
                message.Append("Muito Obrigado!\n\n");
                message.Append("*** NÃO RESPONDER ESTE EMAIL - MENSAGEM GERADA AUTOMATICAMENTE - SextaNerdApplication ***");

                //Envia email
                Mail.SendMail(toMailAddress, "Pedido Voiza - Tele-Entrega", message.ToString());
            }
            else
            {
                message.Append("Segue pedido do pessoal da Voiza para comer no Restaurante:\n\n");

                message.Append("LANCHES: \n\n");

                foreach (var pedido in fechamento.Pedidos)
                {
                    message.Append(pedido.Usuario.Nome.ToUpper() + " -> " + pedido.Lanche.Nome.ToUpper() + "\n");

                    foreach (Opcional opcional in pedido.Opcionais)
                        message.Append(" - Com " + opcional.Nome + "\n");

                    if (!String.IsNullOrWhiteSpace(pedido.Observacao))
                        message.Append(" Obs: " + pedido.Observacao + "\n");

                    valorTotalPedido += (decimal)pedido.ValorLanche;

                    message.Append("\n\n");
                }

                message.Append("Muito Obrigado!\n\n");
                message.Append("*** NÃO RESPONDER ESTE EMAIL - MENSAGEM GERADA AUTOMATICAMENTE - SextaNerdApplication ***");

                //Envia email
                Mail.SendMail(toMailAddress, "Pedido Voiza - Restaurante", message.ToString());
            }
        }
        public void FechaPedido(Fechamento fechamento)
        {
            // Calcula o valor da tele-entrega

            if (fechamento.PossuiTeleEntrega)
            {
                decimal parcelaTeleEntrega = Decimal.Round((fechamento.Parametro.ValorTeleEntrega / fechamento.Pedidos.Count()), 2);

                foreach (Pedido pedido in fechamento.Pedidos)
                {
                    pedido.ValorEntrega = parcelaTeleEntrega;
                }

                // Calcula o valor das bebidas

                if (fechamento.PossuiBebida)
                {
                    BebidaService bebidaService = new BebidaService();

                    decimal totalBebida = 0;
                    decimal parcelaBebida;

                    for (short i = 0; i < fechamento.PedidoIdBebidas.Length; i++)
                    {
                        totalBebida += fechamento.PedidoQuantidadeBebidas[i] * bebidaService.GetValor(fechamento.PedidoIdBebidas[i]);
                    }

                    parcelaBebida = Decimal.Round((totalBebida / fechamento.Pedidos.Where(p => p.BebidaId != null).Count()), 2);

                    foreach (Pedido pedido in fechamento.Pedidos)
                    {
                        if(pedido.BebidaId != null)
                            pedido.ValorBebida = parcelaBebida;
                    }
                }
            }

            // Atualiza o valor de todos os pedidos em aberto

            PedidoService pedidoService = new PedidoService();

            foreach (Pedido pedido in fechamento.Pedidos)
            {
                pedido.Valor = pedido.Valor + (pedido.ValorBebida != null ? pedido.ValorBebida.Value : 0) + (pedido.ValorEntrega != null ? pedido.ValorEntrega.Value : 0);

                // Marca o pedido como atendido
                pedido.Atendido = 1;

                pedidoService.UpdateSimple(pedido);
            }
        }