Пример #1
0
        public override void Salvar(EntidadeDominio entidade)
        {
            if (connection.State == ConnectionState.Closed)
            {
                connection.Open();
            }
            PedidoXCupom pedidoXCupom = (PedidoXCupom)entidade;

            pst.CommandText = "INSERT INTO tb_cupom_pedido(id_pedido, id_cupom) VALUES (:1, :2); ";
            parameters      = new NpgsqlParameter[]
            {
                new NpgsqlParameter("1", pedidoXCupom.ID),
                new NpgsqlParameter("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;
        }
Пример #2
0
        public override List <EntidadeDominio> Consultar(EntidadeDominio entidade)
        {
            if (connection.State == ConnectionState.Closed)
            {
                connection.Open();
            }
            PedidoXCupom  pedidoXCupom = (PedidoXCupom)entidade;
            StringBuilder sql          = new StringBuilder();

            sql.Append("SELECT * FROM tb_cupom_pedido JOIN tb_cupom ON (tb_cupom.id_cupom = tb_cupom_pedido.id_cupom) ");
            sql.Append("                               JOIN tb_tipo_cupom ON (tb_tipo_cupom.id_tipo_cupom = tb_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 tb_cupom_pedido.id_pedido,tb_cupom_pedido.id_cupom ");

            pst.CommandText = sql.ToString();
            parameters      = new NpgsqlParameter[]
            {
                new NpgsqlParameter("1", pedidoXCupom.ID),
                new NpgsqlParameter("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 PedidoXCupom();
                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);
        }
Пример #3
0
        public override void Salvar(EntidadeDominio entidade)
        {
            if (connection.State == ConnectionState.Closed)
            {
                connection.Open();
            }
            Pedido pedido = (Pedido)entidade;

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

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

            pst.Parameters.Clear();
            pst.Parameters.AddRange(parameters);
            pst.Connection  = connection;
            pst.CommandType = CommandType.Text;
            pedido.ID       = entidade.ID = (int)pst.ExecuteScalar();
            // já executa o comando na linha anterior
            //pst.ExecuteNonQuery();

            // 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
            CCPedidoDAO ccPedidoDAO = new CCPedidoDAO(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)
            {
                ClientePF cliente = new ClientePF();
                // 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 = ((ClientePF) new ClientePFDAO().Consultar(cliente).ElementAt(0));

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

                // preparando e salvando no BD
                PedidoXCupomDAO pedidoXCupomDAO = new PedidoXCupomDAO(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)
            {
                ClientePF cliente = new ClientePF();
                // 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 = ((ClientePF) new ClientePFDAO().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 = "AUTOMATICO" + cupom.IdCliente + DateTime.Now.ToString("yyyyMMddHHmmss") + "$" + cupom.ValorCupom;
                new CupomDAO(connection, false).Salvar(cupom);
            }

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

            return;
        }