public List <PedidoTipoPagamento> Listar(PedidoTipoPagamento pedidoTipoPagamento)
        {
            IQueryable <PedidoTipoPagamento> query = chicoDoColchaoEntities.PedidoTipoPagamento;

            if (pedidoTipoPagamento.PedidoTipoPagamentoID > 0)
            {
                query = query.Where(x => x.PedidoTipoPagamentoID == pedidoTipoPagamento.PedidoTipoPagamentoID);
            }

            if (!string.IsNullOrEmpty(pedidoTipoPagamento.CV))
            {
                query = query.Where(x => x.CV == pedidoTipoPagamento.CV);
            }

            return(query.ToList());
        }
        public int Trocar(Dao.PedidoDao pedidoDao)
        {
            var pedido = new Pedido();

            pedido.DataPedido           = DateTime.Now;
            pedido.ClienteID            = pedidoDao.ClienteDao.FirstOrDefault().ClienteID;
            pedido.FuncionarioID        = pedidoDao.ConsultorDao.FirstOrDefault().FuncionarioID;
            pedido.LojaID               = pedidoDao.LojaDao.FirstOrDefault().LojaID;
            pedido.LojaSaidaID          = pedidoDao.LojaSaidaDao.FirstOrDefault().LojaID;
            pedido.UsuarioPedidoID      = pedidoDao.UsuarioPedidoDao.UsuarioID;
            pedido.NomeCarreto          = pedidoDao.NomeCarreto;
            pedido.ValorFrete           = pedidoDao.ValorFrete;
            pedido.TipoPagamentoFreteID = pedidoDao.TipoPagamentoFreteID;
            pedido.Observacao           = pedidoDao.Observacao;
            pedido.Desconto             = pedidoDao.Desconto;
            pedido.PedidoStatusID       = pedidoDao.PedidoStatusDao.FirstOrDefault().PedidoStatusID;
            pedido.PedidoTrocaID        = pedidoDao.PedidoID;

            var pedidoOriginal = chicoDoColchaoEntities.Pedido.Include(x => x.PedidoProduto).FirstOrDefault(x => x.PedidoID == pedidoDao.PedidoID);

            // produtos de entrada
            if (pedidoOriginal != null)
            {
                pedidoOriginal.PedidoStatusID = Dao.PedidoStatusDao.EPedidoStatus.Trocado.GetHashCode();                                                                     // muda o status do pedido original para 'Trocado'

                foreach (var pp in pedidoDao.PedidoProdutoDao.Where(x => x.Tipo == Dao.PedidoProdutoDao.ETipo.Entrada.GetHashCode() && x.ProdutoID > 0 && x.Quantidade > 0)) // produtos devolvidos ao estoque da loja do pedido original
                {
                    var pedidoProdutoOriginal = pedidoOriginal.PedidoProduto.FirstOrDefault(x => x.ProdutoID == pp.ProdutoID);

                    if (pedidoProdutoOriginal != null)
                    {
                        // muda o status do produto original para 'Trocado'
                        pedidoProdutoOriginal.UsuarioTrocaID = pp.UsuarioTrocaDao.UsuarioID;
                        pedidoProdutoOriginal.DataTroca      = pedido.DataPedido;

                        // só volta para o estoque os produtos que já saíram do estoque, ou seja, que foram dados baixas
                        if (pedidoProdutoOriginal.UsuarioBaixaID > 0)
                        {
                            var lp = chicoDoColchaoEntities.LojaProduto.FirstOrDefault(x => x.ProdutoID == pp.ProdutoID && x.LojaID == pedidoOriginal.LojaSaidaID);

                            if (lp != null)
                            {
                                lp.Quantidade = Convert.ToInt16(lp.Quantidade + pp.Quantidade);
                            }
                        }
                    }
                }
            }

            // produtos de saída
            foreach (var pedidoProdutoDao in pedidoDao.PedidoProdutoDao.Where(x => x.Tipo == Dao.PedidoProdutoDao.ETipo.Saida.GetHashCode() && x.ProdutoID > 0 && x.Quantidade > 0))
            {
                var pedidoProduto = new PedidoProduto();

                pedidoProduto.PedidoID         = pedidoProdutoDao.PedidoID;
                pedidoProduto.ProdutoID        = pedidoProdutoDao.ProdutoID;
                pedidoProduto.Quantidade       = pedidoProdutoDao.Quantidade;
                pedidoProduto.Preco            = pedidoProdutoDao.Preco;
                pedidoProduto.UsuarioEntregaID = pedido.UsuarioPedidoID;
                pedidoProduto.DataEntrega      = pedidoProdutoDao.DataEntrega;

                // se status do pedido for "Retirado na Loja", afeta o estoque
                if (pedidoDao.PedidoStatusDao.FirstOrDefault().PedidoStatusID == Dao.PedidoStatusDao.EPedidoStatus.RetiradoNaLoja.GetHashCode())
                {
                    pedidoProduto.UsuarioEntregaID = pedido.UsuarioPedidoID;
                    pedidoProduto.DataEntrega      = pedido.DataPedido;
                    pedidoProduto.UsuarioBaixaID   = pedido.UsuarioPedidoID;
                    pedidoProduto.DataBaixa        = pedido.DataPedido;

                    var lojaSaidaId = pedidoDao.LojaSaidaDao.FirstOrDefault().LojaID;
                    var lojaProduto = chicoDoColchaoEntities.LojaProduto.FirstOrDefault(x => x.ProdutoID == pedidoProdutoDao.ProdutoID && x.LojaID == lojaSaidaId);

                    if (lojaProduto != null)
                    {
                        lojaProduto.Quantidade = Convert.ToInt16(lojaProduto.Quantidade - pedidoProdutoDao.Quantidade);
                    }
                }

                pedido.PedidoProduto.Add(pedidoProduto);
            }

            // pagamentos
            foreach (var pedidoTipoPagamentoDao in pedidoDao.PedidoTipoPagamentoDao)
            {
                var pedidoTipoPagamento = new PedidoTipoPagamento();

                pedidoTipoPagamento.PedidoID        = pedidoTipoPagamentoDao.PedidoID;
                pedidoTipoPagamento.TipoPagamentoID = pedidoTipoPagamentoDao.TipoPagamentoDao.TipoPagamentoID;
                pedidoTipoPagamento.ParcelaID       = pedidoTipoPagamentoDao.ParcelaDao.ParcelaID;
                pedidoTipoPagamento.ValorPago       = pedidoTipoPagamentoDao.ValorPago;
                pedidoTipoPagamento.CV = pedidoTipoPagamentoDao.CV;

                pedido.PedidoTipoPagamento.Add(pedidoTipoPagamento);
            }

            chicoDoColchaoEntities.Entry(pedido).State = EntityState.Added;

            if (pedido.Cliente != null)
            {
                chicoDoColchaoEntities.Entry(pedido.Cliente).State = EntityState.Detached;
            }

            if (pedido.Funcionario != null)
            {
                chicoDoColchaoEntities.Entry(pedido.Funcionario).State = EntityState.Detached;
            }

            if (pedido.PedidoStatus != null)
            {
                chicoDoColchaoEntities.Entry(pedido.PedidoStatus).State = EntityState.Detached;
            }

            if (pedido.LojaOrigem != null)
            {
                chicoDoColchaoEntities.Entry(pedido.LojaOrigem).State = EntityState.Detached;
            }

            if (pedido.LojaSaida != null)
            {
                chicoDoColchaoEntities.Entry(pedido.LojaSaida).State = EntityState.Detached;
            }

            if (pedido.UsuarioPedido != null)
            {
                chicoDoColchaoEntities.Entry(pedido.UsuarioPedido).State = EntityState.Detached;
            }

            if (pedido.UsuarioCancelamento != null)
            {
                chicoDoColchaoEntities.Entry(pedido.UsuarioCancelamento).State = EntityState.Detached;
            }

            chicoDoColchaoEntities.SaveChanges();

            return(pedido.PedidoID);
        }