using Microsoft.Data.SqlClient; using MLL; using System; using System.Collections.Generic; using System.Data; namespace DAL { public class DALLBoletos { private readonly string connectionString; public DALLBoletos(string connectionString) { this.connectionString = connectionString; }//Contrutor public bool Inserir(ModeloBoletos modelo) { using SqlConnection conn = new(connectionString); string query = @" INSERT INTO Boletos ( EMITIDO, VENCE, VALOR, NUMERO, PG, SACADO, CONTA, OBSERVACAO, COD_CONTA, NOSSO_NUMERO, ACEITE, IMPRESSO, IMPORTACAO, CHAVE_BOLETO, LINHA_DIGITAVEL, DT_PAGAMENTO, VL_PAGO, VL_MULTA, VL_DESCONTO, ARQUIVO_NOME, ARQUIVO_TIPO, ARQUIVO_CAMINHO, ARQUIVO_DADOS, DT_CADASTRO, DT_ALTERACAO, ID_USUARIO, STATUS ) VALUES ( @EMITIDO, @VENCE, @VALOR, @NUMERO, @PG, @SACADO, @CONTA, @OBSERVACAO, @COD_CONTA, @NOSSO_NUMERO, @ACEITE, @IMPRESSO, @IMPORTACAO, @CHAVE_BOLETO, @LINHA_DIGITAVEL, @DT_PAGAMENTO, @VL_PAGO, @VL_MULTA, @VL_DESCONTO, @ARQUIVO_NOME, @ARQUIVO_TIPO, @ARQUIVO_CAMINHO, @ARQUIVO_DADOS, @DT_CADASTRO, @DT_ALTERACAO, @ID_USUARIO, @STATUS )"; using SqlCommand cmd = new(query, conn); PreencherParametrosInserir(cmd, modelo); conn.Open(); return cmd.ExecuteNonQuery() > 0; }//inserir public bool Alterar(ModeloBoletos modelo) { using SqlConnection conn = new(connectionString); string query = @" UPDATE Boletos SET CODIGO = @CODIGO, EMITIDO = @EMITIDO, VENCE = @VENCE, VALOR = @VALOR, NUMERO = @NUMERO, PG = @PG, SACADO = @SACADO, CONTA = @CONTA, OBSERVACAO = @OBSERVACAO, COD_CONTA = @COD_CONTA, NOSSO_NUMERO = @NOSSO_NUMERO, ACEITE = @ACEITE, IMPRESSO = @IMPRESSO, IMPORTACAO = @IMPORTACAO, CHAVE_BOLETO = @CHAVE_BOLETO, LINHA_DIGITAVEL = @LINHA_DIGITAVEL, DT_PAGAMENTO = @DT_PAGAMENTO, VL_PAGO = @VL_PAGO, VL_MULTA = @VL_MULTA, VL_DESCONTO = @VL_DESCONTO, ARQUIVO_NOME = @ARQUIVO_NOME, ARQUIVO_TIPO = @ARQUIVO_TIPO, ARQUIVO_CAMINHO = @ARQUIVO_CAMINHO, ARQUIVO_DADOS = @ARQUIVO_DADOS, DT_ALTERACAO = @DT_ALTERACAO, ID_USUARIO = @ID_USUARIO, STATUS = @STATUS WHERE ID_BOLETO = @ID_BOLETO"; using SqlCommand cmd = new(query, conn); PreencherParametrosAlterar(cmd, modelo); cmd.Parameters.AddWithValue("@ID_BOLETO", modelo.ID_BOLETO); conn.Open(); return cmd.ExecuteNonQuery() > 0; }//alterar public bool Excluir(int id) { using SqlConnection conn = new(connectionString); string query = "DELETE FROM Boletos WHERE ID_BOLETO = @ID_BOLETO"; using SqlCommand cmd = new(query, conn); cmd.Parameters.AddWithValue("@ID_BOLETO", id); conn.Open(); return cmd.ExecuteNonQuery() > 0; }//excluir public ModeloBoletos? ObterPorId(int id) { using SqlConnection conn = new(connectionString); string query = "SELECT * FROM Boletos WHERE ID_BOLETO = @ID_BOLETO"; using SqlCommand cmd = new(query, conn); cmd.Parameters.AddWithValue("@ID_BOLETO", id); conn.Open(); using SqlDataReader dr = cmd.ExecuteReader(); if (dr.Read()) { return PreencherModelo(dr); } return null; }//ObterPoriD public ModeloBoletos CarregarModeloBoletos(int id) { using SqlConnection conn = new(connectionString); string query = "SELECT * FROM Boletos WHERE ID_BOLETO = @ID_BOLETO"; using SqlCommand cmd = new(query, conn); cmd.Parameters.AddWithValue("@ID_BOLETO", id); conn.Open(); using SqlDataReader dr = cmd.ExecuteReader(); if (dr.Read()) { return PreencherModelo(dr); } return null; }//CarregarModeloBoletos public List Listar() { List lista = []; using SqlConnection conn = new(connectionString); string query = "SELECT * FROM Boletos ORDER BY ID_BOLETO 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 ListarPorStatus(string status) { List lista = []; using SqlConnection conn = new(connectionString); string query = "SELECT * FROM Boletos WHERE STATUS = @STATUS ORDER BY ID_BOLETO DESC"; using SqlCommand cmd = new(query, conn); cmd.Parameters.AddWithValue("@STATUS", status); conn.Open(); using SqlDataReader dr = cmd.ExecuteReader(); while (dr.Read()) { lista.Add(PreencherModelo(dr)); } return lista; }//ListarPorStatus public List ListarPorPeriodo(DateTime dataInicio, DateTime dataFim) { List lista = []; using SqlConnection conn = new(connectionString); string query = "SELECT * FROM Boletos WHERE EMITIDO BETWEEN @DATA_INICIO AND @DATA_FIM ORDER BY ID_BOLETO DESC"; using SqlCommand cmd = new(query, conn); cmd.Parameters.AddWithValue("@DATA_INICIO", dataInicio); cmd.Parameters.AddWithValue("@DATA_FIM", dataFim); conn.Open(); using SqlDataReader dr = cmd.ExecuteReader(); while (dr.Read()) { lista.Add(PreencherModelo(dr)); } return lista; }//ListarPorPeriodo public List ListarPorSacado(string sacado) { List lista = []; using SqlConnection conn = new(connectionString); string query = "SELECT * FROM Boletos WHERE SACADO LIKE @SACADO ORDER BY ID_BOLETO DESC"; using SqlCommand cmd = new(query, conn); cmd.Parameters.AddWithValue("@SACADO", $"%{sacado}%"); conn.Open(); using SqlDataReader dr = cmd.ExecuteReader(); while (dr.Read()) { lista.Add(PreencherModelo(dr)); } return lista; }//ListarPorSacado private static ModeloBoletos PreencherModelo(SqlDataReader dr) { return new ModeloBoletos { ID_BOLETO = Convert.ToInt32(dr["ID_BOLETO"]), CODIGO = Convert.ToString(dr["CODIGO"]) ?? string.Empty, NUMERO = Convert.ToString(dr["NUMERO"]) ?? string.Empty, NOSSO_NUMERO = Convert.ToString(dr["NOSSO_NUMERO"]) ?? string.Empty, CHAVE_BOLETO = Convert.ToString(dr["CHAVE_BOLETO"]) ?? string.Empty, LINHA_DIGITAVEL = Convert.ToString(dr["LINHA_DIGITAVEL"]) ?? string.Empty, EMITIDO = dr["EMITIDO"] == DBNull.Value ? null : Convert.ToDateTime(dr["EMITIDO"]), VENCE = dr["VENCE"] == DBNull.Value ? null : Convert.ToDateTime(dr["VENCE"]), DT_PAGAMENTO = dr["DT_PAGAMENTO"] == DBNull.Value ? null : Convert.ToDateTime(dr["DT_PAGAMENTO"]), VALOR = dr["VALOR"] == DBNull.Value ? 0m : Convert.ToDecimal(dr["VALOR"]), VL_PAGO = dr["VL_PAGO"] == DBNull.Value ? null : Convert.ToDecimal(dr["VL_PAGO"]), VL_MULTA = dr["VL_MULTA"] == DBNull.Value ? null : Convert.ToDecimal(dr["VL_MULTA"]), VL_DESCONTO = dr["VL_DESCONTO"] == DBNull.Value ? null : Convert.ToDecimal(dr["VL_DESCONTO"]), STATUS = Convert.ToString(dr["STATUS"]) ?? "ABERTO", PG = Convert.ToBoolean(dr["PG"]), ACEITE = Convert.ToBoolean(dr["ACEITE"]), IMPRESSO = Convert.ToBoolean(dr["IMPRESSO"]), IMPORTACAO = Convert.ToBoolean(dr["IMPORTACAO"]), SACADO = Convert.ToString(dr["SACADO"]) ?? string.Empty, CONTA = Convert.ToString(dr["CONTA"]) ?? string.Empty, COD_CONTA = Convert.ToString(dr["COD_CONTA"]) ?? string.Empty, ARQUIVO_NOME = Convert.ToString(dr["ARQUIVO_NOME"]) ?? string.Empty, ARQUIVO_TIPO = Convert.ToString(dr["ARQUIVO_TIPO"]) ?? string.Empty, ARQUIVO_CAMINHO = Convert.ToString(dr["ARQUIVO_CAMINHO"]) ?? string.Empty, ARQUIVO_DADOS = dr["ARQUIVO_DADOS"] == DBNull.Value ? null : (byte[])dr["ARQUIVO_DADOS"], OBSERVACAO = Convert.ToString(dr["OBSERVACAO"]) ?? string.Empty, DT_CADASTRO = Convert.ToDateTime(dr["DT_CADASTRO"]), DT_ALTERACAO = dr["DT_ALTERACAO"] == DBNull.Value ? null : Convert.ToDateTime(dr["DT_ALTERACAO"]), ID_USUARIO = dr["ID_USUARIO"] == DBNull.Value ? null : Convert.ToInt32(dr["ID_USUARIO"]) }; } private static void PreencherParametrosInserir(SqlCommand cmd, ModeloBoletos modelo) { cmd.Parameters.AddWithValue("@EMITIDO", modelo.EMITIDO.HasValue ? modelo.EMITIDO.Value : DBNull.Value); cmd.Parameters.AddWithValue("@VENCE", modelo.VENCE.HasValue ? modelo.VENCE.Value : DBNull.Value); cmd.Parameters.AddWithValue("@VALOR", modelo.VALOR); cmd.Parameters.AddWithValue("@NUMERO", string.IsNullOrWhiteSpace(modelo.NUMERO) ? DBNull.Value : modelo.NUMERO); cmd.Parameters.AddWithValue("@PG", modelo.PG); cmd.Parameters.AddWithValue("@SACADO", string.IsNullOrWhiteSpace(modelo.SACADO) ? DBNull.Value : modelo.SACADO); cmd.Parameters.AddWithValue("@CONTA", string.IsNullOrWhiteSpace(modelo.CONTA) ? DBNull.Value : modelo.CONTA); cmd.Parameters.AddWithValue("@OBSERVACAO", string.IsNullOrWhiteSpace(modelo.OBSERVACAO) ? DBNull.Value : modelo.OBSERVACAO); cmd.Parameters.AddWithValue("@COD_CONTA", string.IsNullOrWhiteSpace(modelo.COD_CONTA) ? DBNull.Value : modelo.COD_CONTA); cmd.Parameters.AddWithValue("@NOSSO_NUMERO", string.IsNullOrWhiteSpace(modelo.NOSSO_NUMERO) ? DBNull.Value : modelo.NOSSO_NUMERO); cmd.Parameters.AddWithValue("@ACEITE", modelo.ACEITE); cmd.Parameters.AddWithValue("@IMPRESSO", modelo.IMPRESSO); cmd.Parameters.AddWithValue("@IMPORTACAO", modelo.IMPORTACAO); cmd.Parameters.AddWithValue("@CHAVE_BOLETO", string.IsNullOrWhiteSpace(modelo.CHAVE_BOLETO) ? DBNull.Value : modelo.CHAVE_BOLETO); cmd.Parameters.AddWithValue("@LINHA_DIGITAVEL", string.IsNullOrWhiteSpace(modelo.LINHA_DIGITAVEL) ? DBNull.Value : modelo.LINHA_DIGITAVEL); cmd.Parameters.AddWithValue("@DT_PAGAMENTO", modelo.DT_PAGAMENTO.HasValue ? modelo.DT_PAGAMENTO.Value : DBNull.Value); cmd.Parameters.AddWithValue("@VL_PAGO", modelo.VL_PAGO.HasValue ? modelo.VL_PAGO.Value : DBNull.Value); cmd.Parameters.AddWithValue("@VL_MULTA", modelo.VL_MULTA.HasValue ? modelo.VL_MULTA.Value : DBNull.Value); cmd.Parameters.AddWithValue("@VL_DESCONTO", modelo.VL_DESCONTO.HasValue ? modelo.VL_DESCONTO.Value : DBNull.Value); cmd.Parameters.AddWithValue("@ARQUIVO_NOME", string.IsNullOrWhiteSpace(modelo.ARQUIVO_NOME) ? DBNull.Value : modelo.ARQUIVO_NOME); cmd.Parameters.AddWithValue("@ARQUIVO_TIPO", string.IsNullOrWhiteSpace(modelo.ARQUIVO_TIPO) ? DBNull.Value : modelo.ARQUIVO_TIPO); cmd.Parameters.AddWithValue("@ARQUIVO_CAMINHO", string.IsNullOrWhiteSpace(modelo.ARQUIVO_CAMINHO) ? DBNull.Value : modelo.ARQUIVO_CAMINHO); cmd.Parameters.AddWithValue("@ARQUIVO_DADOS", modelo.ARQUIVO_DADOS != null ? modelo.ARQUIVO_DADOS : DBNull.Value); cmd.Parameters.AddWithValue("@DT_CADASTRO", modelo.DT_CADASTRO); cmd.Parameters.AddWithValue("@DT_ALTERACAO", modelo.DT_ALTERACAO.HasValue ? modelo.DT_ALTERACAO.Value : DBNull.Value); cmd.Parameters.AddWithValue("@ID_USUARIO", modelo.ID_USUARIO.HasValue ? modelo.ID_USUARIO.Value : DBNull.Value); cmd.Parameters.AddWithValue("@STATUS", modelo.STATUS); } private static void PreencherParametrosAlterar(SqlCommand cmd, ModeloBoletos modelo) { cmd.Parameters.AddWithValue("@CODIGO", modelo.CODIGO); cmd.Parameters.AddWithValue("@EMITIDO", modelo.EMITIDO.HasValue ? modelo.EMITIDO.Value : DBNull.Value); cmd.Parameters.AddWithValue("@VENCE", modelo.VENCE.HasValue ? modelo.VENCE.Value : DBNull.Value); cmd.Parameters.AddWithValue("@VALOR", modelo.VALOR); cmd.Parameters.AddWithValue("@NUMERO", string.IsNullOrWhiteSpace(modelo.NUMERO) ? DBNull.Value : modelo.NUMERO); cmd.Parameters.AddWithValue("@PG", modelo.PG); cmd.Parameters.AddWithValue("@SACADO", string.IsNullOrWhiteSpace(modelo.SACADO) ? DBNull.Value : modelo.SACADO); cmd.Parameters.AddWithValue("@CONTA", string.IsNullOrWhiteSpace(modelo.CONTA) ? DBNull.Value : modelo.CONTA); cmd.Parameters.AddWithValue("@OBSERVACAO", string.IsNullOrWhiteSpace(modelo.OBSERVACAO) ? DBNull.Value : modelo.OBSERVACAO); cmd.Parameters.AddWithValue("@COD_CONTA", string.IsNullOrWhiteSpace(modelo.COD_CONTA) ? DBNull.Value : modelo.COD_CONTA); cmd.Parameters.AddWithValue("@NOSSO_NUMERO", string.IsNullOrWhiteSpace(modelo.NOSSO_NUMERO) ? DBNull.Value : modelo.NOSSO_NUMERO); cmd.Parameters.AddWithValue("@ACEITE", modelo.ACEITE); cmd.Parameters.AddWithValue("@IMPRESSO", modelo.IMPRESSO); cmd.Parameters.AddWithValue("@IMPORTACAO", modelo.IMPORTACAO); cmd.Parameters.AddWithValue("@CHAVE_BOLETO", string.IsNullOrWhiteSpace(modelo.CHAVE_BOLETO) ? DBNull.Value : modelo.CHAVE_BOLETO); cmd.Parameters.AddWithValue("@LINHA_DIGITAVEL", string.IsNullOrWhiteSpace(modelo.LINHA_DIGITAVEL) ? DBNull.Value : modelo.LINHA_DIGITAVEL); cmd.Parameters.AddWithValue("@DT_PAGAMENTO", modelo.DT_PAGAMENTO.HasValue ? modelo.DT_PAGAMENTO.Value : DBNull.Value); cmd.Parameters.AddWithValue("@VL_PAGO", modelo.VL_PAGO.HasValue ? modelo.VL_PAGO.Value : DBNull.Value); cmd.Parameters.AddWithValue("@VL_MULTA", modelo.VL_MULTA.HasValue ? modelo.VL_MULTA.Value : DBNull.Value); cmd.Parameters.AddWithValue("@VL_DESCONTO", modelo.VL_DESCONTO.HasValue ? modelo.VL_DESCONTO.Value : DBNull.Value); cmd.Parameters.AddWithValue("@ARQUIVO_NOME", string.IsNullOrWhiteSpace(modelo.ARQUIVO_NOME) ? DBNull.Value : modelo.ARQUIVO_NOME); cmd.Parameters.AddWithValue("@ARQUIVO_TIPO", string.IsNullOrWhiteSpace(modelo.ARQUIVO_TIPO) ? DBNull.Value : modelo.ARQUIVO_TIPO); cmd.Parameters.AddWithValue("@ARQUIVO_CAMINHO", string.IsNullOrWhiteSpace(modelo.ARQUIVO_CAMINHO) ? DBNull.Value : modelo.ARQUIVO_CAMINHO); cmd.Parameters.AddWithValue("@ARQUIVO_DADOS", modelo.ARQUIVO_DADOS != null ? modelo.ARQUIVO_DADOS : DBNull.Value); cmd.Parameters.AddWithValue("@DT_CADASTRO", modelo.DT_CADASTRO); cmd.Parameters.AddWithValue("@DT_ALTERACAO", modelo.DT_ALTERACAO.HasValue ? modelo.DT_ALTERACAO.Value : DBNull.Value); cmd.Parameters.AddWithValue("@ID_USUARIO", modelo.ID_USUARIO.HasValue ? modelo.ID_USUARIO.Value : DBNull.Value); cmd.Parameters.AddWithValue("@STATUS", modelo.STATUS); } #region VIEWS public List ListarAbertos() { return ExecutarViewLista("SELECT * FROM VW_BoletosAbertos"); }//ListarAbertos public List ListarVencidos() { return ExecutarViewLista("SELECT * FROM VW_BoletosVencidos"); }//ListarVencidos public List ListarPagos() { return ExecutarViewLista("SELECT * FROM VW_BoletosPagos"); }//ListarPagos public List ListarImportados() { return ExecutarViewLista("SELECT * FROM VW_BoletosImportados"); }//ListarImportados public List ListarComArquivo() { return ExecutarViewLista("SELECT * FROM VW_BoletosComArquivo"); }//ListarComArquivo public List ListarSemArquivo() { return ExecutarViewLista("SELECT * FROM VW_BoletosSemArquivo"); }//ListarSemArquivo public List ListarHoje() { return ExecutarViewLista("SELECT * FROM VW_BoletosHoje"); }//ListarHoje public List ListarSemana() { return ExecutarViewLista("SELECT * FROM VW_BoletosSemana"); }//ListarSemana public List ListarProximosVencimentos() { return ExecutarViewLista("SELECT * FROM VW_BoletosProximosVencimentos"); }//ListarProximosVencimentos public List ListarPendentesWebhook() { return ExecutarViewLista("SELECT * FROM VW_BoletosPendentesWebhook"); }//ListarPendentesWebhook #endregion #region DASHBOARD public DataTable ObterResumoFinanceiro() { return ExecutarViewDataTable("SELECT * FROM VW_BoletosResumoFinanceiro"); }//ObterResumoFinanceiro public DataTable ObterDashboard() { return ExecutarViewDataTable("SELECT * FROM VW_BoletosDashboard"); }//ObterDashboard #endregion #region HELPERS 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 } }