public ComposicaoProduto VerificaComposicao(ComposicaoProduto composicao)
        {
            var ret = VerificaProdutoCobranca(composicao.Composicao);
            var key = ret.Keys.ToList()[0];
            // Pega a o produto da lista de composição pelo índice.
            var     prod = composicao.Composicao[key];
            decimal valor;

            ret.TryGetValue(key, out valor);
            composicao.Produto       = prod.Produto;
            composicao.Valor         = composicao.Quantidade * valor;
            composicao.ValorUnitario = valor;
            return(composicao);
        }
        private void AjustarPrecoComposicao(ComposicaoProduto composicao)
        {
            var ret = VerificaProdutoCobranca(composicao.Composicao);

            if (ret.Count == 0)
            {
                return;
            }
            var prod  = composicao.Composicao[ret.Keys.ToArray()[0]];
            var valor = ret[0];

            composicao.Produto       = prod.Produto;
            composicao.Valor         = composicao.Quantidade * valor;
            composicao.ValorUnitario = valor;
        }
        public void RemoveProduto(ComposicaoProduto composicao)
        {
            var result = MessageBox.Show("Deseja realmente excluir este item", "Excluir produto", MessageBoxButton.YesNo,
                                         MessageBoxImage.Asterisk, MessageBoxResult.No);

            if (result == MessageBoxResult.Yes)
            {
                if (composicao != null)
                {
                    Produtos.Remove(composicao);
                }
            }
            ProdutoAtual = null;
            CalculaPedido();
        }
 public StatusComando AdicionarItemMesa(int mesa, ComposicaoProduto composicao)
 {
     try
     {
         if (ComposicaoProdutoRepository.Validate(composicao))
         {
             var m = GetMesa(mesa);
             if (m == null)
             {
                 throw new Exception(string.Format("A mesa {0} não foi encontrada.", mesa));
             }
             AjustarPrecoComposicao(composicao);
             m.Produtos.Add(composicao);
             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 void AddProduto(ComposicaoProduto composicao)
 {
     Produtos.Add(composicao);
     CalculaPedido();
 }