Example #1
0
        public PedidoCupom PedidoImprimir(int PedidoID)
        {
            using (DataContext db = new DataContext())
            {
                dalLancamentosCaixa pagped = new dalLancamentosCaixa();
                string Formp = string.Join(", ", pagped.PagamentoCupom(PedidoID));

                PedidoCupom pcupom = db.Pedidos.Where(p => p.PedidoID == PedidoID)
                                     .Select(p => new PedidoCupom
                {
                    Nome       = p.Nome,
                    NumPessoas = p.NumPessoas,
                    SubTotal   = p.SubTotal,
                    ValorTotal = p.ValorTotal,
                    VlPago     = p.ValorPago,
                    Troco      = p.Troco,
                    Status     = p.Status,
                    Data       = p.Data,
                    Viagem     = p.Viagem,
                    TaxaS      = p.TaxaS,
                    VlTaxaS    = p.VlTaxaS
                }).SingleOrDefault();

                pcupom.FormaPagamento = Formp;

                return(pcupom);
            }
        }
        public override void Salvar(EntidadeDominio entidade)
        {
            if (connection.State == ConnectionState.Closed)
            {
                connection.Open();
            }
            PedidoCupom pedidoXCupom = (PedidoCupom)entidade;

            pst.CommandText = "INSERT INTO cupom_pedido(id_pedido, id_cupom) VALUES (?1, ?2); ";
            parameters      = new MySqlParameter[]
            {
                new MySqlParameter("?1", pedidoXCupom.ID),
                new MySqlParameter("?2", pedidoXCupom.Cupom.ID)
            };

            pst.Parameters.Clear();
            pst.Parameters.AddRange(parameters);
            pst.Connection  = connection;
            pst.CommandType = CommandType.Text;
            pst.ExecuteNonQuery();

            if (ctrlTransaction == true)
            {
                pst.CommandText = "COMMIT WORK";
                connection.Close();
            }

            return;
        }
        public override void Salvar(EntidadeDominio entidade)
        {
            if (connection.State == ConnectionState.Closed)
            {
                connection.Open();
            }
            Pedido pedido = (Pedido)entidade;

            pst.CommandText = "INSERT INTO pedido(username, total_pedido, status_pedido_fk, end_entrega_fk, frete, dt_cadastro_pedido) " +
                              "VALUES (?1, ?2, ?3, ?4, ?5, ?6)";

            parameters = new MySqlParameter[]
            {
                new MySqlParameter("?1", pedido.Usuario),
                new MySqlParameter("?2", pedido.Total),
                new MySqlParameter("?3", pedido.Status.ID),
                new MySqlParameter("?4", pedido.EnderecoEntrega.ID),
                new MySqlParameter("?5", pedido.Frete),
                new MySqlParameter("?6", pedido.DataCadastro)
            };

            pst.Parameters.Clear();
            pst.Parameters.AddRange(parameters);
            pst.Connection  = connection;
            pst.CommandType = CommandType.Text;

            pst.ExecuteNonQuery();
            pedido.ID = entidade.ID = (int)pst.LastInsertedId;
            // variáveis que conterão os valores do pedido (Subtotal)
            // e também os valores dos cupons para tirar a diferença dos mesmo,
            // se necessário criar outro cupom de troca
            decimal subtotal    = 0;
            decimal valorCupons = 0;

            // salvando os itens do pedido
            PedidoDetalheDAO pedidoDetalheDAO = new PedidoDetalheDAO(connection, false);

            foreach (PedidoDetalhe detalhe in pedido.Detalhes)
            {
                detalhe.IdPedido = pedido.ID;
                pedidoDetalheDAO.Salvar(detalhe);

                if (pedido.Status.ID != 6)
                {
                    // a cada iteração da lista pega a quantidade e valor do item que está sendo iterado
                    subtotal += (decimal)(detalhe.Quantidade * detalhe.ValorUnit);

                    // Dando baixa no estoque
                    Estoque estoque = ((Estoque) new EstoqueDAO().Consultar(new Estoque()
                    {
                        Livro = new Livro()
                        {
                            ID = detalhe.Livro.ID
                        }
                    }).ElementAt(0));
                    estoque.Qtde -= detalhe.Quantidade;
                    new EstoqueDAO(connection, false).Alterar(estoque);
                }
            }

            // salvando os cartões utilizados no pedido
            CartaoPedidoDAO ccPedidoDAO = new CartaoPedidoDAO(connection, false);

            foreach (CartaoCreditoPedido cc in pedido.CCs)
            {
                cc.IdPedido = pedido.ID;
                ccPedidoDAO.Salvar(cc);
            }

            // verifica se cupom promocional foi utilizada
            if (pedido.CupomPromocional.ID != 0)
            {
                Cliente cliente = new Cliente();
                // passa usuário que é dono do pedido para o e-mail do cliente
                cliente.Email = pedido.Usuario;

                // para trazer o ID do cliente que será utilizado
                cliente = ((Cliente) new ClienteDAO().Consultar(cliente).ElementAt(0));

                // contem que o cliente já utilizou o cupom promocional
                PedidoCupom clienteXCupom = new PedidoCupom();
                clienteXCupom.ID       = pedido.ID;
                clienteXCupom.Cupom.ID = pedido.CupomPromocional.ID;

                // preparando e salvando no BD
                PedidoCupomDAO pedidoXCupomDAO = new PedidoCupomDAO(connection, false);
                pedidoXCupomDAO.Salvar(clienteXCupom);

                // consulta em CupomDAO para pegar o valor do cupom e assim fazer a conta para valor de cupons
                Cupom cupom = new Cupom();
                cupom = ((Cupom) new CupomDAO().Consultar(pedido.CupomPromocional).ElementAt(0));

                // Operação é multiplicação devido ser porcentagem (%)
                valorCupons = subtotal * (decimal)cupom.ValorCupom;
            }

            // alterando status do cupom que o cliente utilizou
            foreach (Cupom cp in pedido.CuponsTroca)
            {
                Cupom cupom = new Cupom();
                cupom          = ((Cupom) new CupomDAO().Consultar(cp).ElementAt(0));
                cupom.IdPedido = pedido.ID;
                cupom.Status   = 'I';
                new CupomDAO(connection, false).Alterar(cupom);

                // adiciona o valor do cupom para variável
                valorCupons += (decimal)cupom.ValorCupom;
            }

            // verifica se o valor dos cupons usados superam o valor do subtotal
            // se sim, criará outro cupom de troca para o cliente poder estar usando
            if (valorCupons > subtotal)
            {
                Cliente cliente = new Cliente();
                // passa usuário que é dono do pedido para o e-mail do cliente
                cliente.Email = pedido.Usuario;

                // para trazer o ID do cliente que será utilizado
                cliente = ((Cliente) new ClienteDAO().Consultar(cliente).ElementAt(0));

                Cupom cupom = new Cupom();
                cupom.IdCliente   = cliente.ID;
                cupom.Tipo.ID     = 1;  // cupom troca
                cupom.Status      = 'A';
                cupom.ValorCupom  = (float)(valorCupons - subtotal);
                cupom.CodigoCupom = "CUPOMTROCO" + cupom.IdCliente + DateTime.Now.ToString("yyyyMMddHHmmss") + "$" + cupom.ValorCupom;
                new CupomDAO(connection, false).Salvar(cupom);
            }

            if (ctrlTransaction == true)
            {
                pst.CommandText = "COMMIT WORK";
                connection.Close();
            }

            return;
        }
        public override List <EntidadeDominio> Consultar(EntidadeDominio entidade)
        {
            if (connection.State == ConnectionState.Closed)
            {
                connection.Open();
            }
            PedidoCupom   pedidoXCupom = (PedidoCupom)entidade;
            StringBuilder sql          = new StringBuilder();

            sql.Append("SELECT * FROM cupom_pedido JOIN cupom ON (cupom.id_cupom = cupom_pedido.id_cupom) ");
            sql.Append("                               JOIN tipo_cupom ON (tipo_cupom.id_tipo_cupom = cupom.tipo_cupom_fk) ");

            // WHERE sem efeito, usado apenas para poder diminuir o número de ifs da construção da query
            sql.Append("WHERE 1 = 1 ");

            if (pedidoXCupom.ID != 0)
            {
                sql.Append("AND id_pedido = ?1 ");
            }

            if (pedidoXCupom.Cupom != null)
            {
                if (pedidoXCupom.Cupom.ID != 0)
                {
                    sql.Append(" AND id_cupom = ?2 ");
                }
            }

            sql.Append("ORDER BY cupom_pedido.id_pedido,cupom_pedido.id_cupom ");

            pst.CommandText = sql.ToString();
            parameters      = new MySqlParameter[]
            {
                new MySqlParameter("?1", pedidoXCupom.ID),
                new MySqlParameter("?2", pedidoXCupom.Cupom.ID)
            };

            pst.Parameters.Clear();
            pst.Parameters.AddRange(parameters);
            pst.Connection  = connection;
            pst.CommandType = CommandType.Text;

            reader = pst.ExecuteReader();

            // Lista de retorno da consulta do banco de dados, que conterá os cartões do pedido encontrados
            List <EntidadeDominio> pedidoXCupoms = new List <EntidadeDominio>();

            while (reader.Read())
            {
                pedidoXCupom          = new PedidoCupom();
                pedidoXCupom.ID       = Convert.ToInt32(reader["id_pedido"]);
                pedidoXCupom.Cupom.ID = Convert.ToInt32(reader["id_cupom"]);

                if (!DBNull.Value.Equals(reader["cupom_pedido_fk"]))
                {
                    pedidoXCupom.Cupom.IdPedido = Convert.ToInt32(reader["cupom_pedido_fk"]);
                }

                if (!DBNull.Value.Equals(reader["cupom_pedido_fk"]))
                {
                    pedidoXCupom.Cupom.IdPedido = Convert.ToInt32(reader["cupom_pedido_fk"]);
                }

                pedidoXCupom.Cupom.CodigoCupom = reader["codigo_cupom"].ToString();
                pedidoXCupom.Cupom.Tipo.ID     = Convert.ToInt32(reader["id_tipo_cupom"]);
                pedidoXCupom.Cupom.Tipo.Nome   = reader["nome_tipo_cupom"].ToString();
                pedidoXCupom.Cupom.Status      = reader["status_cupom"].ToString().First();
                pedidoXCupom.Cupom.ValorCupom  = Convert.ToSingle(reader["valor_cupom"]);

                pedidoXCupoms.Add(pedidoXCupom);
            }
            connection.Close();
            return(pedidoXCupoms);
        }