using System; using System.Collections.Generic; using System.Data; using Microsoft.Data.SqlClient; using MLL; namespace DALL { public class DALFornecedores { private readonly string connectionString; public DALFornecedores(string conexao) { connectionString = conexao; } public bool Inserir(ModeloFornecedores modelo) { using SqlConnection conn = new(connectionString); string sql = @" INSERT INTO Fornecedores ( EmpresaId, Nome, TipoPessoa, Documento, Telefone, Celular, Whatsapp, Email, Cep, Endereco, Numero, Complemento, Bairro, Cidade, UF, NomeFantasia, InscricaoEstadual, Site, Observacoes, Ativo ) VALUES ( @EmpresaId, @Nome, @TipoPessoa, @Documento, @Telefone, @Celular, @Whatsapp, @Email, @Cep, @Endereco, @Numero, @Complemento, @Bairro, @Cidade, @UF, @NomeFantasia, @InscricaoEstadual, @Site, @Observacoes, @Ativo )"; using SqlCommand cmd = new(sql, conn); PreencherParametros(cmd, modelo); conn.Open(); return cmd.ExecuteNonQuery() > 0; } public bool Alterar(ModeloFornecedores modelo) { using SqlConnection conn = new(connectionString); string sql = @" UPDATE Fornecedores SET EmpresaId=@EmpresaId, Nome=@Nome, TipoPessoa=@TipoPessoa, Documento=@Documento, Telefone=@Telefone, Celular=@Celular, Whatsapp=@Whatsapp, Email=@Email, Cep=@Cep, Endereco=@Endereco, Numero=@Numero, Complemento=@Complemento, Bairro=@Bairro, Cidade=@Cidade, UF=@UF, NomeFantasia=@NomeFantasia, InscricaoEstadual=@InscricaoEstadual, Site=@Site, Observacoes=@Observacoes, Ativo=@Ativo WHERE Id=@Id"; using SqlCommand cmd = new(sql, conn); PreencherParametros(cmd, modelo); cmd.Parameters.AddWithValue("@Id", modelo.Id); conn.Open(); return cmd.ExecuteNonQuery() > 0; } public bool Excluir(int id) { using SqlConnection conn = new(connectionString); string sql = "DELETE FROM Fornecedores WHERE Id=@Id"; using SqlCommand cmd = new(sql, conn); cmd.Parameters.AddWithValue("@Id", id); conn.Open(); return cmd.ExecuteNonQuery() > 0; } public ModeloFornecedores? Carregar(int id) { using SqlConnection conn = new(connectionString); string sql = "SELECT * FROM Fornecedores 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 ModeloFornecedores? CarregarPorDocumento(int empresaId, string documento) { using SqlConnection conn = new(connectionString); string sql = @" SELECT * FROM Fornecedores WHERE EmpresaId=@EmpresaId AND Documento=@Documento"; using SqlCommand cmd = new(sql, conn); cmd.Parameters.AddWithValue("@EmpresaId", empresaId); cmd.Parameters.AddWithValue("@Documento", documento); conn.Open(); using SqlDataReader dr = cmd.ExecuteReader(); if (dr.Read()) return PreencherModelo(dr); return null; } public List Listar(int? empresaId = null,string? nome = null,string? documento = null,string? telefone = null,string? celular = null,string? cidade = null,string? uf = null,string? email = null,bool? ativo = null) { List lista = []; using SqlConnection conn = new(connectionString); string sql = @"SELECT * FROM Fornecedores WHERE 1=1"; using SqlCommand cmd = new(); if (empresaId != null) { sql += " AND EmpresaId=@EmpresaId"; cmd.Parameters.AddWithValue("@EmpresaId", empresaId); } if (!string.IsNullOrWhiteSpace(nome)) { sql += " AND Nome LIKE @Nome"; cmd.Parameters.AddWithValue("@Nome", "%" + nome + "%"); } if (!string.IsNullOrWhiteSpace(documento)) { sql += " AND Documento LIKE @Documento"; cmd.Parameters.AddWithValue("@Documento", "%" + documento + "%"); } if (!string.IsNullOrWhiteSpace(telefone)) { sql += " AND Telefone LIKE @Telefone"; cmd.Parameters.AddWithValue("@Telefone", "%" + telefone + "%"); } if (!string.IsNullOrWhiteSpace(celular)) { sql += " AND Celular LIKE @Celular"; cmd.Parameters.AddWithValue("@Celular", "%" + celular + "%"); } if (!string.IsNullOrWhiteSpace(cidade)) { sql += " AND Cidade LIKE @Cidade"; cmd.Parameters.AddWithValue("@Cidade", "%" + cidade + "%"); } if (!string.IsNullOrWhiteSpace(uf)) { sql += " AND UF=@UF"; cmd.Parameters.AddWithValue("@UF", uf); } if (!string.IsNullOrWhiteSpace(email)) { sql += " AND Email LIKE @Email"; cmd.Parameters.AddWithValue("@Email", "%" + email + "%"); } if (ativo != null) { sql += " AND Ativo=@Ativo"; cmd.Parameters.AddWithValue("@Ativo", ativo); } sql += " ORDER BY Nome"; cmd.Connection = conn; cmd.CommandText = sql; conn.Open(); using SqlDataReader dr = cmd.ExecuteReader(); while (dr.Read()) { lista.Add( PreencherModelo(dr)); } return lista; } #region EXISTE EMAIL public bool ExisteEmail(string email) { using SqlConnection conn = new(connectionString); string sql = @" SELECT COUNT(*) FROM Fornecedores WHERE Email=@Email"; using SqlCommand cmd = new(sql, conn); cmd.Parameters.AddWithValue("@Email", email); conn.Open(); return Convert.ToInt32(cmd.ExecuteScalar()) > 0; } #endregion #region CARREGAR POR NOME public ModeloFornecedores? CarregarPorNome(string nome) { using SqlConnection conn = new(connectionString); string sql = @" SELECT TOP 1 * FROM Fornecedores WHERE Nome=@Nome"; using SqlCommand cmd = new(sql, conn); cmd.Parameters.AddWithValue("@Nome", nome); conn.Open(); using SqlDataReader dr = cmd.ExecuteReader(); if (dr.Read()) return PreencherModelo(dr); return null; } #endregion #region LISTAR ATIVOS public List ListarAtivos() { return Listar(ativo: true); } #endregion #region LISTAR INATIVOS public List ListarInativos() { return Listar(ativo: false); } #endregion #region LISTAR POR CIDADE public List ListarPorCidade(string cidade) { return Listar(cidade: cidade); } #endregion #region LISTAR POR UF public List ListarPorUF(string uf) { return Listar(uf: uf); } #endregion #region QUANTIDADE TOTAL public int QuantidadeTotal() { using SqlConnection conn = new(connectionString); string sql = "SELECT COUNT(*) FROM Fornecedores"; using SqlCommand cmd = new(sql, conn); conn.Open(); return Convert.ToInt32(cmd.ExecuteScalar()); } #endregion #region QUANTIDADE ATIVOS public int QuantidadeAtivos() { using SqlConnection conn = new(connectionString); string sql = @" SELECT COUNT(*) FROM Fornecedores WHERE Ativo=1"; using SqlCommand cmd = new(sql, conn); conn.Open(); return Convert.ToInt32(cmd.ExecuteScalar()); } #endregion #region QUANTIDADE INATIVOS public int QuantidadeInativos() { using SqlConnection conn = new(connectionString); string sql = @" SELECT COUNT(*) FROM Fornecedores WHERE Ativo=0"; using SqlCommand cmd = new(sql, conn); conn.Open(); return Convert.ToInt32(cmd.ExecuteScalar()); } #endregion #region PRIMEIRO FORNECEDOR public ModeloFornecedores? PrimeiroFornecedor() { using SqlConnection conn = new(connectionString); string sql = @" SELECT TOP 1 * FROM Fornecedores ORDER BY Id"; using SqlCommand cmd = new(sql, conn); conn.Open(); using SqlDataReader dr = cmd.ExecuteReader(); if (dr.Read()) return PreencherModelo(dr); return null; } #endregion #region ÚLTIMO FORNECEDOR public ModeloFornecedores? UltimoFornecedor() { using SqlConnection conn = new(connectionString); string sql = @" SELECT TOP 1 * FROM Fornecedores ORDER BY Id DESC"; using SqlCommand cmd = new(sql, conn); conn.Open(); using SqlDataReader dr = cmd.ExecuteReader(); if (dr.Read()) return PreencherModelo(dr); return null; } #endregion #region DASHBOARD public DataTable Dashboard() { using SqlConnection conn = new(connectionString); string sql = @" SELECT COUNT(*) TOTAL_FORNECEDORES, SUM( CASE WHEN Ativo = 1 THEN 1 ELSE 0 END ) FORNECEDORES_ATIVOS, SUM( CASE WHEN Ativo = 0 THEN 1 ELSE 0 END ) FORNECEDORES_INATIVOS, COUNT(DISTINCT Cidade) TOTAL_CIDADES, COUNT(DISTINCT UF) TOTAL_ESTADOS FROM Fornecedores"; DataTable dt = new(); using SqlDataAdapter da = new(sql, conn); da.Fill(dt); return dt; } #endregion #region PREENCHER PARÂMETROS private void PreencherParametros(SqlCommand cmd, ModeloFornecedores modelo) { cmd.Parameters.AddWithValue("@EmpresaId", modelo.EmpresaId); cmd.Parameters.AddWithValue("@Nome", modelo.Nome); cmd.Parameters.AddWithValue("@TipoPessoa", modelo.TipoPessoa); cmd.Parameters.AddWithValue("@Documento", modelo.Documento); cmd.Parameters.AddWithValue("@Telefone", modelo.Telefone); cmd.Parameters.AddWithValue("@Celular", modelo.Celular); cmd.Parameters.AddWithValue("@Whatsapp", modelo.Whatsapp); cmd.Parameters.AddWithValue("@Email", modelo.Email); cmd.Parameters.AddWithValue("@Cep", modelo.Cep); cmd.Parameters.AddWithValue("@Endereco", modelo.Endereco); cmd.Parameters.AddWithValue("@Numero", (object?)modelo.Numero ?? DBNull.Value); cmd.Parameters.AddWithValue("@Complemento", modelo.Complemento); cmd.Parameters.AddWithValue("@Bairro", modelo.Bairro); cmd.Parameters.AddWithValue("@Cidade", modelo.Cidade); cmd.Parameters.AddWithValue("@UF", modelo.UF); cmd.Parameters.AddWithValue("@NomeFantasia", modelo.NomeFantasia); cmd.Parameters.AddWithValue("@InscricaoEstadual", modelo.InscricaoEstadual); cmd.Parameters.AddWithValue("@Site", modelo.Site); cmd.Parameters.AddWithValue("@Observacoes", modelo.Observacoes); cmd.Parameters.AddWithValue("@Ativo", modelo.Ativo); } #endregion public bool ExisteDocumento(int empresaId, string documento) { using SqlConnection conn = new(connectionString); string sql = @" SELECT COUNT(*) FROM Fornecedores WHERE EmpresaId=@EmpresaId AND Documento=@Documento"; using SqlCommand cmd = new(sql, conn); cmd.Parameters.AddWithValue("@EmpresaId", empresaId); cmd.Parameters.AddWithValue("@Documento", documento); conn.Open(); return Convert.ToInt32(cmd.ExecuteScalar()) > 0; } private ModeloFornecedores PreencherModelo(SqlDataReader dr) { return new ModeloFornecedores { Id = Convert.ToInt32(dr["Id"]), EmpresaId = Convert.ToInt32(dr["EmpresaId"]), Nome = Convert.ToString(dr["Nome"]) ?? "", TipoPessoa = Convert.ToString(dr["TipoPessoa"]) ?? "", Documento = Convert.ToString(dr["Documento"]) ?? "", Telefone = Convert.ToString(dr["Telefone"]) ?? "", Celular = Convert.ToString(dr["Celular"]) ?? "", Whatsapp = Convert.ToString(dr["Whatsapp"]) ?? "", Email = Convert.ToString(dr["Email"]) ?? "", Cep = Convert.ToString(dr["Cep"]) ?? "", Endereco = Convert.ToString(dr["Endereco"]) ?? "", Numero = dr["Numero"] == DBNull.Value ? null : Convert.ToInt32(dr["Numero"]), Complemento = Convert.ToString(dr["Complemento"]) ?? "", Bairro = Convert.ToString(dr["Bairro"]) ?? "", Cidade = Convert.ToString(dr["Cidade"]) ?? "", UF = Convert.ToString(dr["UF"]) ?? "", NomeFantasia = Convert.ToString(dr["NomeFantasia"]) ?? "", InscricaoEstadual = Convert.ToString(dr["InscricaoEstadual"]) ?? "", Site = Convert.ToString(dr["Site"]) ?? "", Observacoes = Convert.ToString(dr["Observacoes"]) ?? "", Ativo = Convert.ToBoolean(dr["Ativo"]), CriadoEm = dr["CriadoEm"] == DBNull.Value ? null : Convert.ToDateTime(dr["CriadoEm"]), AtualizadoEm = dr["AtualizadoEm"] == DBNull.Value ? null : Convert.ToDateTime(dr["AtualizadoEm"]) }; }