using Microsoft.Data.SqlClient; using MLL; using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DAL { public class DALFcaixa { private readonly string connectionString; public DALFcaixa(string conexao) { connectionString = conexao; } public bool Inserir(ModeloFcaixa modelo) { using SqlConnection conn = new(connectionString); string sql = @" INSERT INTO Fcaixa ( DIA, RECEITA, DESPESA, OBS, PLANO_CONTAS, COD_CONTA, FORMA ) VALUES ( @DIA, @RECEITA, @DESPESA, @OBS, @PLANO_CONTAS, @COD_CONTA, @FORMA )"; using SqlCommand cmd = new(sql, conn); PreencherParametros(cmd, modelo); conn.Open(); return cmd.ExecuteNonQuery() > 0; } public bool Alterar(ModeloFcaixa modelo) { using SqlConnection conn = new(connectionString); string sql = @" UPDATE Fcaixa SET DIA=@DIA, RECEITA=@RECEITA, DESPESA=@DESPESA, OBS=@OBS, PLANO_CONTAS=@PLANO_CONTAS, COD_CONTA=@COD_CONTA, FORMA=@FORMA WHERE ID_FCAIXA=@ID_FCAIXA"; using SqlCommand cmd = new(sql, conn); PreencherParametros(cmd, modelo); cmd.Parameters.AddWithValue( "@ID_FCAIXA", modelo.ID_FCAIXA); conn.Open(); return cmd.ExecuteNonQuery() > 0; } public bool Excluir(int id) { using SqlConnection conn = new(connectionString); string sql = @"DELETE FROM Fcaixa WHERE ID_FCAIXA=@ID"; using SqlCommand cmd = new(sql, conn); cmd.Parameters.AddWithValue("@ID", id); conn.Open(); return cmd.ExecuteNonQuery() > 0; } public ModeloFcaixa? Carregar(int id) { using SqlConnection conn = new(connectionString); string sql = @"SELECT * FROM Fcaixa WHERE ID_FCAIXA=@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(string? codigo = null,string? dia = null,string? receita = null,string? despesa = null,string? planoContas = null, string? codConta = null,string? forma = null) { List lista = []; using SqlConnection conn = new(connectionString); string sql = @"SELECT * FROM Fcaixa WHERE 1=1"; using SqlCommand cmd = new(); if (!string.IsNullOrWhiteSpace(codigo)) { sql += " AND CODIGO LIKE @CODIGO"; cmd.Parameters.AddWithValue("@CODIGO", "%" + codigo + "%"); } if (!string.IsNullOrWhiteSpace(dia)) { sql += " AND DIA LIKE @DIA"; cmd.Parameters.AddWithValue("@DIA", "%" + dia + "%"); } if (!string.IsNullOrWhiteSpace(receita)) { sql += " AND RECEITA LIKE @RECEITA"; cmd.Parameters.AddWithValue("@RECEITA", "%" + receita + "%"); } if (!string.IsNullOrWhiteSpace(despesa)) { sql += " AND DESPESA LIKE @DESPESA"; cmd.Parameters.AddWithValue("@DESPESA", "%" + despesa + "%"); } if (!string.IsNullOrWhiteSpace(planoContas)) { sql += " AND PLANO_CONTAS LIKE @PLANO_CONTAS"; cmd.Parameters.AddWithValue("@PLANO_CONTAS", "%" + planoContas + "%"); } if (!string.IsNullOrWhiteSpace(codConta)) { sql += " AND COD_CONTA LIKE @COD_CONTA"; cmd.Parameters.AddWithValue("@COD_CONTA", "%" + codConta + "%"); } if (!string.IsNullOrWhiteSpace(forma)) { sql += " AND FORMA LIKE @FORMA"; cmd.Parameters.AddWithValue("@FORMA", "%" + forma + "%"); } sql += " ORDER BY ID_FCAIXA DESC"; cmd.Connection = conn; cmd.CommandText = sql; conn.Open(); using SqlDataReader dr = cmd.ExecuteReader(); while (dr.Read()) { lista.Add( PreencherModelo(dr)); } return lista; } public List ListarPorForma(string forma) { return Listar(forma: forma); } public List ListarPorConta(string codConta) { return Listar(codConta: codConta); } public List ListarPorPlanoContas(string planoContas) { return Listar(planoContas: planoContas); } public List ListarReceitas() { return Listar() .Where(x => !string.IsNullOrWhiteSpace(x.RECEITA) && x.RECEITA != "0") .ToList(); } public List ListarDespesas() { return Listar() .Where(x => !string.IsNullOrWhiteSpace(x.DESPESA) && x.DESPESA != "0") .ToList(); } public decimal TotalReceitas() { using SqlConnection conn = new(connectionString); string sql = @" SELECT ISNULL( SUM( TRY_CAST(RECEITA AS DECIMAL(18,2)) ),0) FROM Fcaixa"; using SqlCommand cmd = new(sql, conn); conn.Open(); return Convert.ToDecimal( cmd.ExecuteScalar()); } public decimal TotalDespesas() { using SqlConnection conn = new(connectionString); string sql = @" SELECT ISNULL( SUM( TRY_CAST(DESPESA AS DECIMAL(18,2)) ),0) FROM Fcaixa"; using SqlCommand cmd = new(sql, conn); conn.Open(); return Convert.ToDecimal( cmd.ExecuteScalar()); } public decimal SaldoCaixa() { return TotalReceitas() - TotalDespesas(); } public List MovimentacaoPorPeriodo(DateTime dataInicial,DateTime dataFinal) { List lista = []; using SqlConnection conn = new(connectionString); string sql = @" SELECT * FROM Fcaixa WHERE TRY_CONVERT(date,DIA,103) BETWEEN @INI AND @FIM ORDER BY TRY_CONVERT(date,DIA,103)"; using SqlCommand cmd = new(sql, conn); cmd.Parameters.AddWithValue("@INI", dataInicial); cmd.Parameters.AddWithValue("@FIM", dataFinal); conn.Open(); using SqlDataReader dr = cmd.ExecuteReader(); while (dr.Read()) { lista.Add( PreencherModelo(dr)); } return lista; } public DataTable DashboardFinanceiro() { using SqlConnection conn = new(connectionString); string sql = @" SELECT COUNT(*) TOTAL_MOVIMENTOS, ISNULL( SUM( TRY_CAST(RECEITA AS DECIMAL(18,2)) ),0) TOTAL_RECEITAS, ISNULL( SUM( TRY_CAST(DESPESA AS DECIMAL(18,2)) ),0) TOTAL_DESPESAS, ISNULL( SUM( TRY_CAST(RECEITA AS DECIMAL(18,2)) ),0) - ISNULL( SUM( TRY_CAST(DESPESA AS DECIMAL(18,2)) ),0) AS SALDO FROM Fcaixa"; DataTable dt = new(); using SqlDataAdapter da = new(sql, conn); da.Fill(dt); return dt; } public ModeloFcaixa? UltimoLancamento() { using SqlConnection conn = new(connectionString); string sql = @" SELECT TOP 1 * FROM Fcaixa ORDER BY ID_FCAIXA DESC"; using SqlCommand cmd = new(sql, conn); conn.Open(); using SqlDataReader dr = cmd.ExecuteReader(); if (dr.Read()) return PreencherModelo(dr); return null; } public ModeloFcaixa? PrimeiroLancamento() { using SqlConnection conn = new(connectionString); string sql = @" SELECT TOP 1 * FROM Fcaixa ORDER BY ID_FCAIXA"; using SqlCommand cmd = new(sql, conn); conn.Open(); using SqlDataReader dr = cmd.ExecuteReader(); if (dr.Read()) return PreencherModelo(dr); return null; } private ModeloFcaixa PreencherModelo(SqlDataReader dr) { return new ModeloFcaixa { ID_FCAIXA = Convert.ToInt32(dr["ID_FCAIXA"]), CODIGO = Convert.ToString(dr["CODIGO"]) ?? "", DIA = Convert.ToString(dr["DIA"]) ?? "", RECEITA = Convert.ToString(dr["RECEITA"]) ?? "", DESPESA = Convert.ToString(dr["DESPESA"]) ?? "", OBS = Convert.ToString(dr["OBS"]) ?? "", PLANO_CONTAS = Convert.ToString(dr["PLANO_CONTAS"]) ?? "", COD_CONTA = Convert.ToString(dr["COD_CONTA"]) ?? "", FORMA = Convert.ToString(dr["FORMA"]) ?? "" }; } private void PreencherParametros(SqlCommand cmd,ModeloFcaixa modelo) { cmd.Parameters.AddWithValue("@DIA", modelo.DIA); cmd.Parameters.AddWithValue("@RECEITA", modelo.RECEITA); cmd.Parameters.AddWithValue("@DESPESA", modelo.DESPESA); cmd.Parameters.AddWithValue("@OBS", modelo.OBS); cmd.Parameters.AddWithValue("@PLANO_CONTAS", modelo.PLANO_CONTAS); cmd.Parameters.AddWithValue("@COD_CONTA", modelo.COD_CONTA); cmd.Parameters.AddWithValue("@FORMA", modelo.FORMA); } } }