public ActionResult Create(Pedido pedido)
        {
            try
            {
                if (ModelState.IsValid)
                {
                    // Recupera os dados do usuário na sessão
                    UsuarioService usuarioService = new UsuarioService();
                    pedido.UsuarioId = usuarioService.GetIdByLogin(User.Identity.Name);

                    // Insere o valor do lanche para histórico
                    pedido.ValorLanche = pedido.Valor;

                    PedidoService pedidoService = new PedidoService();
                    pedidoService.Insert(pedido);

                    TempData["message"] = "Pedido realizado com sucesso";

                    return RedirectToAction("Index");
                }

                pedido = InicializaTela(pedido);
            }
            catch (Exception ex)
            {
                ViewBag.Error = ex.Message;
            }

            ViewBag.Message = "Realizar Pedido";

            return View(pedido);
        }
        //
        // GET: /Pedido/Delete/5
        public ActionResult Delete(int id)
        {
            Pedido pedido = null;

            try
            {
                PedidoService pedidoService = new PedidoService();
                pedido = pedidoService.Find(id);
            }
            catch (Exception ex)
            {
                ViewBag.Error = ex.Message;
            }

            return View(pedido);
        }
        //
        // GET: /Fechamento/
        public ActionResult Index()
        {
            Fechamento fechamento = new Fechamento();

            try
            {
                PedidoService pedidoService = new PedidoService();
                fechamento.Pedidos = pedidoService.ListPedidosAbertos(false);
                fechamento.BebidasSugeridas = pedidoService.ListBebidasSugeridas();
            }
            catch (Exception ex)
            {
                ViewBag.Error = ex.Message;
            }

            fechamento = InicializaTela(fechamento);

            return View(fechamento);
        }
        public ActionResult Index(Fechamento fechamento)
        {
            try
            {
                if (ModelState.IsValid)
                {
                    // Carrega os pedidos em aberto
                    PedidoService pedidoService = new PedidoService();
                    fechamento.Pedidos = pedidoService.ListPedidosAbertos(true);

                    // Carrega os parãmetros
                    ParametroService parametroService = new ParametroService();
                    fechamento.Parametro = parametroService.Find();

                    // Fecha o pedido
                    FechamentoService fechamentoService = new FechamentoService();
                    fechamentoService.FechaPedido(fechamento);

                    // Envia os emails
                    fechamentoService.EnviaEmailContato(fechamento);
                    fechamentoService.EnviaEmailUsuarios(fechamento);

                    TempData["message"] = "Pedido finalizado com sucesso - Valor total R$ " + String.Format("{0:0.00}", fechamento.Pedidos.Sum(p => p.Valor));

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

            fechamento = InicializaTela(fechamento);

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

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

            return RedirectToAction("Index");
        }
        //
        // GET: /Pedido/
        public ViewResult Index()
        {
            IList<Pedido> pedidos = null;
            Usuario usuario = null;

            try
            {
                UsuarioService usuarioService = new UsuarioService();
                usuario = usuarioService.FindByLogin(User.Identity.Name);

                PedidoService pedidoService = new PedidoService();

                if (IsAdministrador)
                {
                    pedidos = pedidoService.ListAllPedidos();
                }
                else
                {
                    pedidos = pedidoService.ListPedidosAbertosByUsuario(usuario.Id);
                }
            }
            catch (Exception ex)
            {
                ViewBag.Error = ex.Message;
            }

            return View(pedidos);
        }
        public ActionResult Edit(Pedido pedido)
        {
            try
            {
                if (ModelState.IsValid)
                {
                    PedidoService pedidoService = new PedidoService();
                    pedidoService.Update(pedido);

                    TempData["message"] = "Pedido alterado com sucesso";

                    return RedirectToAction("Index");
                }

                pedido = InicializaTela(pedido);
            }
            catch (Exception ex)
            {
                ViewBag.Error = ex.Message;
            }

            ViewBag.Message = "Alterar Pedido";

            return View(pedido);
        }
        //
        // GET: /Pedido/Edit/5
        public ActionResult Edit(int id)
        {
            Pedido pedido = null;

            try
            {
                PedidoService pedidoService = new PedidoService();
                pedido = pedidoService.Find(id);

                pedido = InicializaTela(pedido);
            }
            catch (Exception ex)
            {
                ViewBag.Error = ex.Message;
            }

            ViewBag.Message = "Alterar Pedido";

            return View(pedido);
        }
        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);
            }
        }