private void LimpaFilaMesa(int mesa)
        {
            var listRem = FilaSalao.Where(x => x.Mesa == mesa);

            foreach (var m in listRem)
            {
                FilaSalao.Remove(m);
            }
        }
        public StatusComando CancelarItemComposicaoMesa(int mesa, Guid composicao, Guid produto)
        {
            try
            {
                var mesaAberta = GetMesa(mesa);
                if (mesaAberta == null)
                {
                    throw new Exception("A mesa não está aberta");
                }
                foreach (var m in FilaSalao.Where(x => x.Mesa == mesa))
                {
                    var comp = m.Produtos.SingleOrDefault(x => x.IdGuid == composicao);

                    if (comp == null)
                    {
                        continue;
                    }

                    if (m.StatusProducao == StatusProducaoPedido.Produzido)
                    {
                        throw new Exception("Pedido já produzido.");
                    }
                    var prod = comp.Composicao.SingleOrDefault(x => x.IdGuid == produto);
                    if (prod != null)
                    {
                        comp.Composicao.Remove(prod);
                    }
                }
                var compMesa = mesaAberta.Produtos.SingleOrDefault(x => x.IdGuid == composicao);
                if (compMesa != null)
                {
                    var prodMesa = compMesa.Composicao.SingleOrDefault(x => x.IdGuid == produto);
                    if (prodMesa != null)
                    {
                        compMesa.Composicao.Remove(prodMesa);
                    }
                    AjustarPrecoComposicao(compMesa);
                }

                return(StatusComando.ConcluidoSucesso);
            }
            catch (Exception ex)
            {
                LastException = ex.Message;
            }
            return(StatusComando.ErroExecucao);
        }
 public StatusComando CancelarMesa(int mesa)
 {
     try
     {
         var pedidosProduzidos = FilaSalao.Where(x => x.Mesa == mesa && x.StatusProducao == StatusProducaoPedido.Produzido);
         if (pedidosProduzidos.Count() != 0)
         {
             LastException = "Há pedidos produzidos para esta mesa. Só é possível o cancelamento com a senha do gerênte";
             return(StatusComando.SolicitacaoAdministrador);
         }
         var m = GetMesa(mesa);
         if (m != null)
         {
             RemoveMesa(m);
             LimpaFilaMesa(mesa);
         }
         return(StatusComando.ConcluidoSucesso);
     }
     catch (Exception ex)
     {
         LastException = ex.Message;
     }
     return(StatusComando.ErroExecucao);
 }
        public StatusComando CancelarItemMesa(int mesa, ComposicaoProduto composicao)
        {
            try
            {
                ComposicaoProduto comp = null;

                // Cancela o item na fila.
                PedidoRestaurante mesaFilaRem = null;
                foreach (var mesaFila in FilaSalao.Where(x => x.Mesa == mesa))
                {
                    comp = null;
                    foreach (var prod in mesaFila.Produtos.Where(prod => prod.IdGuid == composicao.IdGuid))
                    {
                        // Verifica se o pedido já foi produzido.
                        if (mesaFila.StatusProducao == StatusProducaoPedido.Produzido)
                        {
                            LastException = "O ítem já foi produzido. Somente o gerênte pode cancelar o item.";
                            return(StatusComando.SolicitacaoAdministrador);
                        }
                        comp = prod;
                    }
                    if (comp != null)
                    {
                        mesaFila.Produtos.Remove(comp);
                        // Se o pedido na fila não tiver mais produtos remove da fila.
                        if (mesaFila.Produtos.Count == 0)
                        {
                            mesaFilaRem = mesaFila;
                        }
                    }
                }
                // Remove o pedido por completo da fila caso tenha sido marcado para exclusão.
                if (mesaFilaRem != null)
                {
                    RemoveMesaFila(mesaFilaRem);
                }

                var m = GetMesa(mesa);
                if (m == null)
                {
                    throw new Exception(string.Format("A mesa {0} não foi encontrada.", mesa));
                }
                // Cancela o item na mesa.
                foreach (var prod in m.Produtos.Where(prod => prod.IdGuid == composicao.IdGuid))
                {
                    comp = prod;
                }
                if (comp != null)
                {
                    m.Produtos.Remove(comp);
                    AjustarPrecoComposicao(comp);
                }
                // Se não houver mais produtos na mesa cancela-o.
                if (m.Produtos.Count == 0)
                {
                    CancelarMesa(mesa);
                }
                return(StatusComando.ConcluidoSucesso);
            }
            catch (Exception ex)
            {
                LastException = ex.Message;
            }
            return(StatusComando.ErroExecucao);
        }
 public IList <PedidoRestaurante> GetPedidosGarcon(int idGarcon)
 {
     return(FilaSalao.Where(x => x.Garcon.Id == idGarcon).ToList());
 }