using Microsoft.Data.SqlClient; using MLL; using System; using System.Collections.Generic; using System.Data; namespace DAL { public class DALClientes { private readonly string _conexao; public DALClientes(string conexao) { _conexao = conexao; } #region INSERT public bool Inserir(ModeloCliente c) { try { using SqlConnection conn = new(_conexao); string sql = @" INSERT INTO Clientes ( EmpresaId, Nome, NomeFantasia, TipoPessoa, Documento, RG, InscricaoMunicipal, DataNascimento, Contato, Telefone1, Telefone2, Celular, Whatsapp, Email, EmailNFe, Site, Grupo, Cep, Endereco, Numero, Complemento, Bairro, Cidade, UF, Pais, LimiteCredito, Bloqueado, ObservacoesCobranca, VendedorPadraoId, TipoConsumidor, Observacoes, CampoExtra1, CampoExtra2, CampoExtra3, Bitcoin, Ethereum, Litecoin, Ativo, UltimaCompra ) VALUES ( @EmpresaId, @Nome, @NomeFantasia, @TipoPessoa, @Documento, @RG, @InscricaoMunicipal, @DataNascimento, @Contato, @Telefone1, @Telefone2, @Celular, @Whatsapp, @Email, @EmailNFe, @Site, @Grupo, @Cep, @Endereco, @Numero, @Complemento, @Bairro, @Cidade, @UF, @Pais, @LimiteCredito, @Bloqueado, @ObservacoesCobranca, @VendedorPadraoId, @TipoConsumidor, @Observacoes, @CampoExtra1, @CampoExtra2, @CampoExtra3, @Bitcoin, @Ethereum, @Litecoin, @Ativo, @UltimaCompra )"; using SqlCommand cmd = new(sql, conn); PreencherParametros(cmd, c); conn.Open(); return cmd.ExecuteNonQuery() > 0; } catch { return false; } } #endregion #region UPDATE public bool Alterar(ModeloCliente c) { try { using SqlConnection conn = new(_conexao); string sql = @" UPDATE Clientes SET EmpresaId = @EmpresaId, Nome = @Nome, NomeFantasia = @NomeFantasia, TipoPessoa = @TipoPessoa, Documento = @Documento, RG = @RG, InscricaoMunicipal = @InscricaoMunicipal, DataNascimento = @DataNascimento, Contato = @Contato, Telefone1 = @Telefone1, Telefone2 = @Telefone2, Celular = @Celular, Whatsapp = @Whatsapp, Email = @Email, EmailNFe = @EmailNFe, Site = @Site, Grupo = @Grupo, Cep = @Cep, Endereco = @Endereco, Numero = @Numero, Complemento = @Complemento, Bairro = @Bairro, Cidade = @Cidade, UF = @UF, Pais = @Pais, LimiteCredito = @LimiteCredito, Bloqueado = @Bloqueado, ObservacoesCobranca = @ObservacoesCobranca, VendedorPadraoId = @VendedorPadraoId, TipoConsumidor = @TipoConsumidor, Observacoes = @Observacoes, CampoExtra1 = @CampoExtra1, CampoExtra2 = @CampoExtra2, CampoExtra3 = @CampoExtra3, Bitcoin = @Bitcoin, Ethereum = @Ethereum, Litecoin = @Litecoin, Ativo = @Ativo, UltimaCompra = @UltimaCompra, AtualizadoEm = GETDATE() WHERE Id = @Id"; using SqlCommand cmd = new(sql, conn); PreencherParametros(cmd, c); cmd.Parameters.AddWithValue("@Id", c.Id); conn.Open(); return cmd.ExecuteNonQuery() > 0; } catch { return false; } } #endregion #region DELETE public bool Excluir(int id) { try { using SqlConnection conn = new(_conexao); string sql = "DELETE FROM Clientes WHERE Id = @Id"; using SqlCommand cmd = new(sql, conn); cmd.Parameters.AddWithValue("@Id", id); conn.Open(); return cmd.ExecuteNonQuery() > 0; } catch { return false; } } #endregion #region SELECT public ModeloCliente? Carregar(int id) { using SqlConnection conn = new(_conexao); string sql = "SELECT * FROM Clientes WHERE Id = @Id"; using SqlCommand cmd = new(sql, conn); cmd.Parameters.AddWithValue("@Id", id); conn.Open(); using SqlDataReader dr = cmd.ExecuteReader(); if (dr.Read()) { return PreencherModelo(dr); } return null; } public List Listar() { return ExecutarViewLista("SELECT * FROM Clientes ORDER BY Nome"); } #endregion #region VIEWS public List ListarTodos() { return ExecutarViewLista("SELECT * FROM VW_Clientes"); } public List ListarAtivos() { return ExecutarViewLista("SELECT * FROM VW_ClientesAtivos"); } public List ListarInativos() { return ExecutarViewLista("SELECT * FROM VW_ClientesInativos"); } public List ListarBloqueados() { return ExecutarViewLista("SELECT * FROM VW_ClientesBloqueados"); } public List ListarComLimite() { return ExecutarViewLista("SELECT * FROM VW_ClientesComLimite"); } public List ListarSemLimite() { return ExecutarViewLista("SELECT * FROM VW_ClientesSemLimite"); } public List ListarPF() { return ExecutarViewLista("SELECT * FROM VW_ClientesPF"); } public List ListarPJ() { return ExecutarViewLista("SELECT * FROM VW_ClientesPJ"); } public List ListarWhatsapp() { return ExecutarViewLista("SELECT * FROM VW_ClientesWhatsapp"); } public List ListarEmail() { return ExecutarViewLista("SELECT * FROM VW_ClientesEmail"); } public List ListarEmailNFe() { return ExecutarViewLista("SELECT * FROM VW_ClientesEmailNFe"); } public List ListarCripto() { return ExecutarViewLista("SELECT * FROM VW_ClientesCripto"); } public List ListarUltimaCompra() { return ExecutarViewLista("SELECT * FROM VW_ClientesUltimaCompra"); } public List ListarSemCompra() { return ExecutarViewLista("SELECT * FROM VW_ClientesSemCompra"); } public List ListarRecentes() { return ExecutarViewLista("SELECT * FROM VW_ClientesRecentes"); } public List ListarCobranca() { return ExecutarViewLista("SELECT * FROM VW_ClientesCobranca"); } public DataTable ObterClientesPorCidade() { return ExecutarViewDataTable("SELECT * FROM VW_ClientesCidade"); } public DataTable ObterClientesPorGrupo() { return ExecutarViewDataTable("SELECT * FROM VW_ClientesGrupo"); } public DataTable ObterDashboard() { return ExecutarViewDataTable("SELECT * FROM VW_ClientesDashboard"); } public DataTable ObterClientesCompleto() { return ExecutarViewDataTable("SELECT * FROM VW_ClientesCompleto"); } #endregion #region HELPERS private List ExecutarViewLista(string query) { List lista = []; using SqlConnection conn = new(_conexao); using SqlCommand cmd = new(query, conn); conn.Open(); using SqlDataReader dr = cmd.ExecuteReader(); while (dr.Read()) { lista.Add(PreencherModelo(dr)); } return lista; } private DataTable ExecutarViewDataTable(string query) { DataTable dt = new(); using SqlConnection conn = new(_conexao); using SqlDataAdapter da = new(query, conn); da.Fill(dt); return dt; } private static ModeloCliente PreencherModelo(SqlDataReader dr) { return new ModeloCliente { Id = Convert.ToInt32(dr["Id"]), EmpresaId = Convert.ToInt32(dr["EmpresaId"]), Nome = Convert.ToString(dr["Nome"]) ?? string.Empty, NomeFantasia = Convert.ToString(dr["NomeFantasia"]) ?? string.Empty, TipoPessoa = Convert.ToString(dr["TipoPessoa"]) ?? string.Empty, Documento = Convert.ToString(dr["Documento"]) ?? string.Empty, RG = Convert.ToString(dr["RG"]) ?? string.Empty, InscricaoMunicipal = Convert.ToString(dr["InscricaoMunicipal"]) ?? string.Empty, Contato = Convert.ToString(dr["Contato"]) ?? string.Empty, Telefone1 = Convert.ToString(dr["Telefone1"]) ?? string.Empty, Telefone2 = Convert.ToString(dr["Telefone2"]) ?? string.Empty, Celular = Convert.ToString(dr["Celular"]) ?? string.Empty, Whatsapp = Convert.ToString(dr["Whatsapp"]) ?? string.Empty, Email = Convert.ToString(dr["Email"]) ?? string.Empty, EmailNFe = Convert.ToString(dr["EmailNFe"]) ?? string.Empty, Site = Convert.ToString(dr["Site"]) ?? string.Empty, Grupo = Convert.ToString(dr["Grupo"]) ?? string.Empty, Cep = Convert.ToString(dr["Cep"]) ?? string.Empty, Endereco = Convert.ToString(dr["Endereco"]) ?? string.Empty, Complemento = Convert.ToString(dr["Complemento"]) ?? string.Empty, Bairro = Convert.ToString(dr["Bairro"]) ?? string.Empty, Cidade = Convert.ToString(dr["Cidade"]) ?? string.Empty, UF = Convert.ToString(dr["UF"]) ?? string.Empty, Pais = Convert.ToString(dr["Pais"]) ?? string.Empty, Observacoes = Convert.ToString(dr["Observacoes"]) ?? string.Empty, TipoConsumidor = Convert.ToString(dr["TipoConsumidor"]) ?? string.Empty, Numero = dr["Numero"] == DBNull.Value ? (int?)null : Convert.ToInt32(dr["Numero"]), DataNascimento = dr["DataNascimento"] == DBNull.Value ? (DateTime?)null : Convert.ToDateTime(dr["DataNascimento"]), LimiteCredito = dr["LimiteCredito"] == DBNull.Value ? 0 : Convert.ToDecimal(dr["LimiteCredito"]), Bloqueado = dr["Bloqueado"] != DBNull.Value && Convert.ToBoolean(dr["Bloqueado"]), Ativo = dr["Ativo"] != DBNull.Value && Convert.ToBoolean(dr["Ativo"]), UltimaCompra = dr["UltimaCompra"] == DBNull.Value ? (DateTime?)null : Convert.ToDateTime(dr["UltimaCompra"]) }; } private static void PreencherParametros(SqlCommand cmd, ModeloCliente c) { cmd.Parameters.AddWithValue("@EmpresaId", c.EmpresaId); cmd.Parameters.AddWithValue("@Nome", c.Nome); cmd.Parameters.AddWithValue("@NomeFantasia", (object?)c.NomeFantasia ?? DBNull.Value); cmd.Parameters.AddWithValue("@TipoPessoa", c.TipoPessoa); cmd.Parameters.AddWithValue("@Documento", c.Documento); cmd.Parameters.AddWithValue("@RG", (object?)c.RG ?? DBNull.Value); cmd.Parameters.AddWithValue("@InscricaoMunicipal", (object?)c.InscricaoMunicipal ?? DBNull.Value); cmd.Parameters.AddWithValue("@DataNascimento", c.DataNascimento ?? (object)DBNull.Value); cmd.Parameters.AddWithValue("@Contato", (object?)c.Contato ?? DBNull.Value); cmd.Parameters.AddWithValue("@Telefone1", (object?)c.Telefone1 ?? DBNull.Value); cmd.Parameters.AddWithValue("@Telefone2", (object?)c.Telefone2 ?? DBNull.Value); cmd.Parameters.AddWithValue("@Celular", (object?)c.Celular ?? DBNull.Value); cmd.Parameters.AddWithValue("@Whatsapp", (object?)c.Whatsapp ?? DBNull.Value); cmd.Parameters.AddWithValue("@Email", (object?)c.Email ?? DBNull.Value); cmd.Parameters.AddWithValue("@EmailNFe", (object?)c.EmailNFe ?? DBNull.Value); cmd.Parameters.AddWithValue("@Site", (object?)c.Site ?? DBNull.Value); cmd.Parameters.AddWithValue("@Grupo", (object?)c.Grupo ?? DBNull.Value); cmd.Parameters.AddWithValue("@Cep", (object?)c.Cep ?? DBNull.Value); cmd.Parameters.AddWithValue("@Endereco", (object?)c.Endereco ?? DBNull.Value); cmd.Parameters.AddWithValue("@Numero", c.Numero ?? (object)DBNull.Value); cmd.Parameters.AddWithValue("@Complemento", (object?)c.Complemento ?? DBNull.Value); cmd.Parameters.AddWithValue("@Bairro", (object?)c.Bairro ?? DBNull.Value); cmd.Parameters.AddWithValue("@Cidade", (object?)c.Cidade ?? DBNull.Value); cmd.Parameters.AddWithValue("@UF", (object?)c.UF ?? DBNull.Value); cmd.Parameters.AddWithValue("@Pais", (object?)c.Pais ?? DBNull.Value); cmd.Parameters.AddWithValue("@LimiteCredito", c.LimiteCredito); cmd.Parameters.AddWithValue("@Bloqueado", c.Bloqueado); cmd.Parameters.AddWithValue("@ObservacoesCobranca", (object?)c.ObservacoesCobranca ?? DBNull.Value); cmd.Parameters.AddWithValue("@VendedorPadraoId", c.VendedorPadraoId ?? (object)DBNull.Value); cmd.Parameters.AddWithValue("@TipoConsumidor", (object?)c.TipoConsumidor ?? DBNull.Value); cmd.Parameters.AddWithValue("@Observacoes", (object?)c.Observacoes ?? DBNull.Value); cmd.Parameters.AddWithValue("@CampoExtra1", (object?)c.CampoExtra1 ?? DBNull.Value); cmd.Parameters.AddWithValue("@CampoExtra2", (object?)c.CampoExtra2 ?? DBNull.Value); cmd.Parameters.AddWithValue("@CampoExtra3", (object?)c.CampoExtra3 ?? DBNull.Value); cmd.Parameters.AddWithValue("@Bitcoin", (object?)c.Bitcoin ?? DBNull.Value); cmd.Parameters.AddWithValue("@Ethereum", (object?)c.Ethereum ?? DBNull.Value); cmd.Parameters.AddWithValue("@Litecoin", (object?)c.Litecoin ?? DBNull.Value); cmd.Parameters.AddWithValue("@Ativo", c.Ativo); cmd.Parameters.AddWithValue("@UltimaCompra", c.UltimaCompra ?? (object)DBNull.Value); } #endregion } }