using Microsoft.Data.SqlClient; using MLL; using System; using System.Collections.Generic; using System.Data; namespace DALL { public class DALLContasPagar { private readonly string connectionString; public DALLContasPagar(string conexao) { connectionString = conexao; } #region CRUD public bool Inserir(ModeloContaPagar modelo) { try { using SqlConnection conn = new(connectionString); string sql = @" INSERT INTO ContasPagar ( EmpresaId, FornecedorId, PlanoContaId, Descricao, Valor, DataEmissao, DataVencimento, DataPagamento, Status, ValorPago, Juros, Multa, Desconto, Observacoes, Ativo, CriadoEm, AtualizadoEm ) VALUES ( @EmpresaId, @FornecedorId, @PlanoContaId, @Descricao, @Valor, @DataEmissao, @DataVencimento, @DataPagamento, @Status, @ValorPago, @Juros, @Multa, @Desconto, @Observacoes, @Ativo, @CriadoEm, @AtualizadoEm )"; using SqlCommand cmd = new(sql, conn); PreencherParametros(cmd, modelo); conn.Open(); return cmd.ExecuteNonQuery() > 0; } catch { return false; } }//Inserir public bool Alterar(ModeloContaPagar modelo) { try { using SqlConnection conn = new(connectionString); string sql = @" UPDATE ContasPagar SET EmpresaId = @EmpresaId, FornecedorId = @FornecedorId, PlanoContaId = @PlanoContaId, Descricao = @Descricao, Valor = @Valor, DataEmissao = @DataEmissao, DataVencimento = @DataVencimento, DataPagamento = @DataPagamento, Status = @Status, ValorPago = @ValorPago, Juros = @Juros, Multa = @Multa, Desconto = @Desconto, Observacoes = @Observacoes, Ativo = @Ativo, AtualizadoEm = @AtualizadoEm WHERE Id = @Id"; using SqlCommand cmd = new(sql, conn); PreencherParametros(cmd, modelo); cmd.Parameters.AddWithValue( "@Id", modelo.Id); conn.Open(); return cmd.ExecuteNonQuery() > 0; } catch { return false; } }//Alterar public bool Excluir(int id) { try { using SqlConnection conn = new(connectionString); string sql = @" DELETE FROM ContasPagar WHERE Id = @Id"; using SqlCommand cmd = new(sql, conn); cmd.Parameters.AddWithValue( "@Id", id); conn.Open(); return cmd.ExecuteNonQuery() > 0; } catch { return false; } }//Excluir public ModeloContaPagar? Carregar(int id) { using SqlConnection conn = new(connectionString); string sql = @" SELECT * FROM ContasPagar 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; }//Obter public List Listar() { List lista = []; using SqlConnection conn = new(connectionString); string sql = @" SELECT * FROM ContasPagar ORDER BY DataVencimento"; using SqlCommand cmd = new(sql, conn); conn.Open(); using SqlDataReader dr = cmd.ExecuteReader(); while (dr.Read()) { lista.Add( PreencherModelo(dr)); } return lista; }//Listar #endregion #region VIEWS public List ListarPendentes() { return ExecutarLista( "SELECT * FROM ContasPagar WHERE Status='Pendente'"); }//ListarPendentes public List ListarPagas() { return ExecutarLista( "SELECT * FROM ContasPagar WHERE Status='Pago'"); }//ListarPagas public List ListarVencidas() { return ExecutarLista(@" SELECT * FROM ContasPagar WHERE DataVencimento < GETDATE() AND Status <> 'Pago'"); }//ListarVencidas public List ListarAtivas() { return ExecutarLista( "SELECT * FROM ContasPagar WHERE Ativo=1"); }//ListarAtivas public List ListarInativas() { return ExecutarLista( "SELECT * FROM ContasPagar WHERE Ativo=0"); }//ListarInativas #endregion #region DASHBOARD public DataTable Dashboard() { using SqlConnection conn = new(connectionString); string sql = @" SELECT COUNT(*) AS TOTAL, SUM(CASE WHEN Status='Pendente' THEN 1 ELSE 0 END) AS PENDENTES, SUM(CASE WHEN Status='Pago' THEN 1 ELSE 0 END) AS PAGAS, SUM(CASE WHEN DataVencimento < GETDATE() AND Status <> 'Pago' THEN 1 ELSE 0 END) AS VENCIDAS, SUM(Valor) AS TOTAL_VALOR, SUM(ISNULL(ValorPago,0)) AS TOTAL_PAGO FROM ContasPagar"; using SqlCommand cmd = new(sql, conn); using SqlDataAdapter da = new(cmd); DataTable dt = new(); da.Fill(dt); return dt; }//Dashboard #endregion #region HELPERS private List ExecutarLista( string sql) { List lista = []; using SqlConnection conn = new(connectionString); using SqlCommand cmd = new(sql, conn); conn.Open(); using SqlDataReader dr = cmd.ExecuteReader(); while (dr.Read()) { lista.Add( PreencherModelo(dr)); } return lista; }//ExecutarLista private static ModeloContaPagar PreencherModelo( SqlDataReader dr) { return new ModeloContaPagar { Id = Convert.ToInt32( dr["Id"]), EmpresaId = Convert.ToInt32( dr["EmpresaId"]), FornecedorId = Convert.ToInt32( dr["FornecedorId"]), PlanoContaId = Convert.ToInt32( dr["PlanoContaId"]), Descricao = Convert.ToString( dr["Descricao"]) ?? string.Empty, Valor = Convert.ToDecimal( dr["Valor"]), ValorPago = dr["ValorPago"] == DBNull.Value ? null : Convert.ToDecimal( dr["ValorPago"]), Juros = Convert.ToDecimal( dr["Juros"]), Multa = Convert.ToDecimal( dr["Multa"]), Desconto = Convert.ToDecimal( dr["Desconto"]), Status = Convert.ToString( dr["Status"]) ?? string.Empty, DataEmissao = dr["DataEmissao"] == DBNull.Value ? null : Convert.ToDateTime( dr["DataEmissao"]), DataVencimento = Convert.ToDateTime( dr["DataVencimento"]), DataPagamento = dr["DataPagamento"] == DBNull.Value ? null : Convert.ToDateTime( dr["DataPagamento"]), Observacoes = Convert.ToString( dr["Observacoes"]) ?? string.Empty, Ativo = Convert.ToBoolean( dr["Ativo"]), CriadoEm = Convert.ToDateTime( dr["CriadoEm"]), AtualizadoEm = Convert.ToDateTime( dr["AtualizadoEm"]) }; } private static void PreencherParametros( SqlCommand cmd, ModeloContaPagar modelo) { cmd.Parameters.AddWithValue( "@EmpresaId", modelo.EmpresaId); cmd.Parameters.AddWithValue( "@FornecedorId", modelo.FornecedorId); cmd.Parameters.AddWithValue( "@PlanoContaId", modelo.PlanoContaId); cmd.Parameters.AddWithValue( "@Descricao", string.IsNullOrWhiteSpace( modelo.Descricao) ? DBNull.Value : modelo.Descricao); cmd.Parameters.AddWithValue( "@Valor", modelo.Valor); cmd.Parameters.AddWithValue( "@DataEmissao", modelo.DataEmissao.HasValue ? modelo.DataEmissao.Value : DBNull.Value); cmd.Parameters.AddWithValue( "@DataVencimento", modelo.DataVencimento); cmd.Parameters.AddWithValue( "@DataPagamento", modelo.DataPagamento.HasValue ? modelo.DataPagamento.Value : DBNull.Value); cmd.Parameters.AddWithValue( "@Status", modelo.Status); cmd.Parameters.AddWithValue( "@ValorPago", modelo.ValorPago.HasValue ? modelo.ValorPago.Value : DBNull.Value); cmd.Parameters.AddWithValue( "@Juros", modelo.Juros); cmd.Parameters.AddWithValue( "@Multa", modelo.Multa); cmd.Parameters.AddWithValue( "@Desconto", modelo.Desconto); cmd.Parameters.AddWithValue( "@Observacoes", string.IsNullOrWhiteSpace( modelo.Observacoes) ? DBNull.Value : modelo.Observacoes); cmd.Parameters.AddWithValue( "@Ativo", modelo.Ativo); cmd.Parameters.AddWithValue( "@CriadoEm", modelo.CriadoEm); cmd.Parameters.AddWithValue( "@AtualizadoEm", modelo.AtualizadoEm); } #endregion } }