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; }
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); }
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; }