using Microsoft.Data.SqlClient; using MLL; using System; using System.Collections.Generic; using System.Data; namespace DAL { public class DALLChamado { private readonly string connectionString; public DALLChamado(string connectionString) { this.connectionString = connectionString; } #region CRUD public bool Inserir(ModeloChamado modelo) { using SqlConnection conn = new(connectionString); string query = @" INSERT INTO Chamado ( TIPO, COD_CLIENTE, NOME_AVULSO, FONES, EMAIL, PARA, PRIORIDADE, REALIZADO, DIA_CHAMADO, OBS, ENDER_CLI ) VALUES ( @TIPO, @COD_CLIENTE, @NOME_AVULSO, @FONES, @EMAIL, @PARA, @PRIORIDADE, @REALIZADO, @DIA_CHAMADO, @OBS, @ENDER_CLI )"; using SqlCommand cmd = new(query, conn); PreencherParametrosInserir(cmd, modelo); conn.Open(); return cmd.ExecuteNonQuery() > 0; }//Inserir public bool Alterar(ModeloChamado modelo) { using SqlConnection conn = new(connectionString); string query = @" UPDATE Chamado SET CODIGO = @CODIGO, TIPO = @TIPO, COD_CLIENTE = @COD_CLIENTE, NOME_AVULSO = @NOME_AVULSO, FONES = @FONES, EMAIL = @EMAIL, PARA = @PARA, PRIORIDADE = @PRIORIDADE, REALIZADO = @REALIZADO, DIA_CHAMADO = @DIA_CHAMADO, OBS = @OBS, ENDER_CLI = @ENDER_CLI WHERE ID_CHAMADO = @ID_CHAMADO"; using SqlCommand cmd = new(query, conn); PreencherParametrosAlterar(cmd, modelo); cmd.Parameters.AddWithValue("@ID_CHAMADO", modelo.ID_CHAMADO); conn.Open(); return cmd.ExecuteNonQuery() > 0; }//Alterar public bool Excluir(int id) { using SqlConnection conn = new(connectionString); string query = @" DELETE FROM Chamado WHERE ID_CHAMADO = @ID_CHAMADO"; using SqlCommand cmd = new(query, conn); cmd.Parameters.AddWithValue("@ID_CHAMADO", id); conn.Open(); return cmd.ExecuteNonQuery() > 0; }//Excluir public ModeloChamado? ObterPorId(int id) { using SqlConnection conn = new(connectionString); string query = @" SELECT * FROM Chamado WHERE ID_CHAMADO = @ID_CHAMADO"; using SqlCommand cmd = new(query, conn); cmd.Parameters.AddWithValue("@ID_CHAMADO", id); conn.Open(); using SqlDataReader dr = cmd.ExecuteReader(); if (dr.Read()) { return PreencherModelo(dr); } return null; }//ObterPorID public ModeloChamado CarregarModeloChamado(int id) { using SqlConnection conn = new(connectionString); string query = @" SELECT * FROM Chamado WHERE ID_CHAMADO = @ID_CHAMADO"; using SqlCommand cmd = new(query, conn); cmd.Parameters.AddWithValue("@ID_CHAMADO", id); conn.Open(); using SqlDataReader dr = cmd.ExecuteReader(); if (dr.Read()) { return PreencherModelo(dr); } #pragma warning disable CS8603 // Possível retorno de referência nula. return null; #pragma warning restore CS8603 // Possível retorno de referência nula. }//CarregarModeloChamado #region LISTAGENS public List Listar() { List lista = []; using SqlConnection conn = new(connectionString); string query = @" SELECT * FROM Chamado ORDER BY ID_CHAMADO DESC"; using SqlCommand cmd = new(query, conn); conn.Open(); using SqlDataReader dr = cmd.ExecuteReader(); while (dr.Read()) { lista.Add(PreencherModelo(dr)); } return lista; }//listar public List ListarPorCliente(string codCliente) { List lista = []; using SqlConnection conn = new(connectionString); string query = @" SELECT * FROM Chamado WHERE COD_CLIENTE = @COD_CLIENTE ORDER BY ID_CHAMADO DESC"; using SqlCommand cmd = new(query, conn); cmd.Parameters.AddWithValue("@COD_CLIENTE", codCliente); conn.Open(); using SqlDataReader dr = cmd.ExecuteReader(); while (dr.Read()) { lista.Add(PreencherModelo(dr)); } return lista; }//ListarPorCliente public List ListarPorTipo(string tipo) { List lista = []; using SqlConnection conn = new(connectionString); string query = @" SELECT * FROM Chamado WHERE TIPO = @TIPO ORDER BY ID_CHAMADO DESC"; using SqlCommand cmd = new(query, conn); cmd.Parameters.AddWithValue("@TIPO", tipo); conn.Open(); using SqlDataReader dr = cmd.ExecuteReader(); while (dr.Read()) { lista.Add(PreencherModelo(dr)); } return lista; }//ListarPorTipo public List ListarPorPrioridade(string prioridade) { List lista = []; using SqlConnection conn = new(connectionString); string query = @" SELECT * FROM Chamado WHERE PRIORIDADE = @PRIORIDADE ORDER BY ID_CHAMADO DESC"; using SqlCommand cmd = new(query, conn); cmd.Parameters.AddWithValue("@PRIORIDADE", prioridade); conn.Open(); using SqlDataReader dr = cmd.ExecuteReader(); while (dr.Read()) { lista.Add(PreencherModelo(dr)); } return lista; }//ListarPorPrioridade public List ListarPorRealizado(string realizado) { List lista = []; using SqlConnection conn = new(connectionString); string query = @" SELECT * FROM Chamado WHERE REALIZADO = @REALIZADO ORDER BY ID_CHAMADO DESC"; using SqlCommand cmd = new(query, conn); cmd.Parameters.AddWithValue("@REALIZADO", realizado); conn.Open(); using SqlDataReader dr = cmd.ExecuteReader(); while (dr.Read()) { lista.Add(PreencherModelo(dr)); } return lista; }//ListarPorRealizado public List ListarPorData(string diaChamado) { List lista = []; using SqlConnection conn = new(connectionString); string query = @" SELECT * FROM Chamado WHERE DIA_CHAMADO = @DIA_CHAMADO ORDER BY ID_CHAMADO DESC"; using SqlCommand cmd = new(query, conn); cmd.Parameters.AddWithValue("@DIA_CHAMADO", diaChamado); conn.Open(); using SqlDataReader dr = cmd.ExecuteReader(); while (dr.Read()) { lista.Add(PreencherModelo(dr)); } return lista; }//ListarPorData public List ListarPorClienteETipo(string codCliente, string tipo) { List lista = []; using SqlConnection conn = new(connectionString); string query = @" SELECT * FROM Chamado WHERE COD_CLIENTE = @COD_CLIENTE AND TIPO = @TIPO ORDER BY ID_CHAMADO DESC"; using SqlCommand cmd = new(query, conn); cmd.Parameters.AddWithValue("@COD_CLIENTE", codCliente); cmd.Parameters.AddWithValue("@TIPO", tipo); conn.Open(); using SqlDataReader dr = cmd.ExecuteReader(); while (dr.Read()) { lista.Add(PreencherModelo(dr)); } return lista; }//ListarPorClienteETipo public List ListarPorClienteERealizado(string codCliente, string realizado) { List lista = []; using SqlConnection conn = new(connectionString); string query = @" SELECT * FROM Chamado WHERE COD_CLIENTE = @COD_CLIENTE AND REALIZADO = @REALIZADO ORDER BY ID_CHAMADO DESC"; using SqlCommand cmd = new(query, conn); cmd.Parameters.AddWithValue("@COD_CLIENTE", codCliente); cmd.Parameters.AddWithValue("@REALIZADO", realizado); conn.Open(); using SqlDataReader dr = cmd.ExecuteReader(); while (dr.Read()) { lista.Add(PreencherModelo(dr)); } return lista; }//ListarPorClienteERealizado public List ListarPorTipoERealizado(string tipo, string realizado) { List lista = []; using SqlConnection conn = new(connectionString); string query = @" SELECT * FROM Chamado WHERE TIPO = @TIPO AND REALIZADO = @REALIZADO ORDER BY ID_CHAMADO DESC"; using SqlCommand cmd = new(query, conn); cmd.Parameters.AddWithValue("@TIPO", tipo); cmd.Parameters.AddWithValue("@REALIZADO", realizado); conn.Open(); using SqlDataReader dr = cmd.ExecuteReader(); while (dr.Read()) { lista.Add(PreencherModelo(dr)); } return lista; }//ListarPorTipoERealizado public bool MarcarComoRealizado(int id) { using SqlConnection conn = new(connectionString); string query = @" UPDATE Chamado SET REALIZADO = 'S' WHERE ID_CHAMADO = @ID_CHAMADO"; using SqlCommand cmd = new(query, conn); cmd.Parameters.AddWithValue("@ID_CHAMADO", id); conn.Open(); int rowsAffected = cmd.ExecuteNonQuery(); return rowsAffected > 0; }//MarcarComoRealizado public bool MarcarComoPendente(int id) { using SqlConnection conn = new(connectionString); string query = @" UPDATE Chamado SET REALIZADO = 'N' WHERE ID_CHAMADO = @ID_CHAMADO"; using SqlCommand cmd = new(query, conn); cmd.Parameters.AddWithValue("@ID_CHAMADO", id); conn.Open(); int rowsAffected = cmd.ExecuteNonQuery(); return rowsAffected > 0; }//MarcarComoPendente public bool VerificarExistencia(int id) { using SqlConnection conn = new(connectionString); string query = @" SELECT COUNT(1) FROM Chamado WHERE ID_CHAMADO = @ID_CHAMADO"; using SqlCommand cmd = new(query, conn); cmd.Parameters.AddWithValue("@ID_CHAMADO", id); conn.Open(); int count = Convert.ToInt32(cmd.ExecuteScalar()); return count > 0; }//VerificarExistencia #endregion #region HELPERS private static ModeloChamado PreencherModelo(SqlDataReader dr) { return new ModeloChamado { ID_CHAMADO = Convert.ToInt32(dr["ID_CHAMADO"]), CODIGO = Convert.ToString(dr["CODIGO"]) ?? string.Empty, TIPO = Convert.ToString(dr["TIPO"]) ?? string.Empty, COD_CLIENTE = Convert.ToString(dr["COD_CLIENTE"]) ?? string.Empty, NOME_AVULSO = Convert.ToString(dr["NOME_AVULSO"]) ?? string.Empty, FONES = Convert.ToString(dr["FONES"]) ?? string.Empty, EMAIL = Convert.ToString(dr["EMAIL"]) ?? string.Empty, PARA = Convert.ToString(dr["PARA"]) ?? string.Empty, PRIORIDADE = Convert.ToString(dr["PRIORIDADE"]) ?? string.Empty, REALIZADO = Convert.ToString(dr["REALIZADO"]) ?? string.Empty, DIA_CHAMADO = Convert.ToString(dr["DIA_CHAMADO"]) ?? string.Empty, OBS = Convert.ToString(dr["OBS"]) ?? string.Empty, ENDER_CLI = Convert.ToString(dr["ENDER_CLI"]) ?? string.Empty }; } private static void PreencherParametrosInserir(SqlCommand cmd, ModeloChamado modelo) { cmd.Parameters.AddWithValue("@TIPO", string.IsNullOrWhiteSpace(modelo.TIPO) ? DBNull.Value : modelo.TIPO); cmd.Parameters.AddWithValue("@COD_CLIENTE", string.IsNullOrWhiteSpace(modelo.COD_CLIENTE) ? DBNull.Value : modelo.COD_CLIENTE); cmd.Parameters.AddWithValue("@NOME_AVULSO", string.IsNullOrWhiteSpace(modelo.NOME_AVULSO) ? DBNull.Value : modelo.NOME_AVULSO); cmd.Parameters.AddWithValue("@FONES", string.IsNullOrWhiteSpace(modelo.FONES) ? DBNull.Value : modelo.FONES); cmd.Parameters.AddWithValue("@EMAIL", string.IsNullOrWhiteSpace(modelo.EMAIL) ? DBNull.Value : modelo.EMAIL); cmd.Parameters.AddWithValue("@PARA", string.IsNullOrWhiteSpace(modelo.PARA) ? DBNull.Value : modelo.PARA); cmd.Parameters.AddWithValue("@PRIORIDADE", string.IsNullOrWhiteSpace(modelo.PRIORIDADE) ? DBNull.Value : modelo.PRIORIDADE); cmd.Parameters.AddWithValue("@REALIZADO", string.IsNullOrWhiteSpace(modelo.REALIZADO) ? DBNull.Value : modelo.REALIZADO); cmd.Parameters.AddWithValue("@DIA_CHAMADO", string.IsNullOrWhiteSpace(modelo.DIA_CHAMADO) ? DBNull.Value : modelo.DIA_CHAMADO); cmd.Parameters.AddWithValue("@OBS", string.IsNullOrWhiteSpace(modelo.OBS) ? DBNull.Value : modelo.OBS); cmd.Parameters.AddWithValue("@ENDER_CLI", string.IsNullOrWhiteSpace(modelo.ENDER_CLI) ? DBNull.Value : modelo.ENDER_CLI); } private static void PreencherParametrosAlterar(SqlCommand cmd, ModeloChamado modelo) { cmd.Parameters.AddWithValue("@CODIGO", string.IsNullOrWhiteSpace(modelo.CODIGO) ? DBNull.Value : modelo.CODIGO); PreencherParametrosInserir(cmd, modelo); } #endregion #region VIEWS public List ListarTodos() { return ExecutarViewLista("SELECT * FROM VW_Chamados"); }//ListarTodos public List ListarPendentes() { return ExecutarViewLista("SELECT * FROM VW_ChamadosPendentes"); }//ListarPendentes public List ListarFinalizados() { return ExecutarViewLista("SELECT * FROM VW_ChamadosFinalizados"); }//ListarFinalizados public List ListarPrioridadeAlta() { return ExecutarViewLista("SELECT * FROM VW_ChamadosPrioridadeAlta"); }//ListarPrioridadeAlta public List ListarPrioridadeMedia() { return ExecutarViewLista("SELECT * FROM VW_ChamadosPrioridadeMedia"); }//ListarPrioridadeMedia public List ListarPrioridadeBaixa() { return ExecutarViewLista("SELECT * FROM VW_ChamadosPrioridadeBaixa"); }//ListarPrioridadeBaixa public List ListarAvulsos() { return ExecutarViewLista("SELECT * FROM VW_ChamadosAvulsos"); }//ListarAvulsos public List ListarClientes() { return ExecutarViewLista("SELECT * FROM VW_ChamadosClientes"); }//ListarClientes public List ListarHoje() { return ExecutarViewLista("SELECT * FROM VW_ChamadosHoje"); }//ListarHoje public List ListarVisita() { return ExecutarViewLista("SELECT * FROM VW_ChamadosVisita"); }//ListarVisita public List ListarRemotos() { return ExecutarViewLista("SELECT * FROM VW_ChamadosRemotos"); }//ListarRemotos public List ListarComEmail() { return ExecutarViewLista("SELECT * FROM VW_ChamadosComEmail"); }//ListarComEmail public List ListarSemEmail() { return ExecutarViewLista("SELECT * FROM VW_ChamadosSemEmail"); }//ListarSemEmail #endregion #region DASHBOARD public DataTable ObterDashboard() { return ExecutarViewDataTable("SELECT * FROM VW_ChamadosDashboard"); }//ObterDashboard #endregion #region HELPERS VIEWS private List ExecutarViewLista(string query) { List lista = []; using SqlConnection conn = new(connectionString); using SqlCommand cmd = new(query, conn); conn.Open(); using SqlDataReader dr = cmd.ExecuteReader(); while (dr.Read()) { lista.Add(PreencherModelo(dr)); } return lista; }//ExecutarViewLista private DataTable ExecutarViewDataTable(string query) { DataTable dt = new(); using SqlConnection conn = new(connectionString); using SqlDataAdapter da = new(query, conn); da.Fill(dt); return dt; }//ExecutarViewDataTable #endregion #endregion } }