public static Relatorio ObterRelatorioInadimplentes()
        {
            Relatorio relatorio = null;
            VsfDatabase db = new VsfDatabase(Properties.Settings.Default.StringConexao);
            try
            {
                db.AbreConexao();
                List<SqlParameter> parameters = new List<SqlParameter>();
                StringBuilder query = new StringBuilder("select SUM(ValorPagar) as total, COUNT(alu.Nome) as alunos, ");
                query.Append("AVG(datediff(DD ,DataVencimento,GETDATE())) as 'media atrasos', ");
                query.Append("MAX(datediff(DD ,DataVencimento,GETDATE())) as 'maior atraso' ");
                query.Append("FROM Parcelas as parc ");
                query.Append("INNER JOIN Financeiro as finc ");
                query.Append("on finc.IdFinanceiro = parc.IdFinanceiro ");
                query.Append("INNER JOIN Matricula as mat ");
                query.Append("ON mat.IdMatricula = finc.IdMatricula ");
                query.Append("INNER JOIN Aluno as alu " );
                query.Append("ON alu.NumeroPece = mat.IdAluno ");
                query.Append("where Pago = 0 and parc.DataVencimento < GETDATE() and mat.Estado = 0 ");

                SqlDataReader reader = db.ExecuteTextReader(query.ToString(),parameters);
                if (reader.Read())
                {
                    relatorio = new Relatorio();
                    relatorio.ValorTotal = (reader["total"] != DBNull.Value) ? Convert.ToDecimal(reader["total"]) : 0 ;
                    relatorio.NumAlunos = Convert.ToInt32(reader["alunos"]);
                    relatorio.MediaDiasAtrasados = (reader["media atrasos"] != DBNull.Value) ? Convert.ToDecimal(reader["media atrasos"]) : 0;
                    relatorio.MaiorAtraso = (reader["maior atraso"] != DBNull.Value) ? Convert.ToInt32(reader["maior atraso"]) : 0;
                }
            }
            catch (Exception ex)
            {
                Logger.Registrar(0, "Exceção em (DAO) " + ex.Source + " - " + ex.ToString() + " : " + ex.Message + "\n\n StackTrace: " + ex.StackTrace);
                throw new ApplicationException("RelatorioAluno.ObterRelatorioInadimplentes(): " + ex, ex);
            }
            finally
            {
                db.FechaConexao();
            }
            return relatorio;
        }
        private void RelatorioArrecadacaoDevidaMes_load()
        {
            RelatorioNegocio relatorioNegocio = new RelatorioNegocio();
            Relatorio relatorio = new Relatorio();
            int mes = Convert.ToInt32(mnMesReferencia.Text);
            int ano = Convert.ToInt32(txtAnoReferencia.Text);

            lblTituloRelatorio.Text = "Relatório Mensal e Contas dos Alunos Inadimplentes";
            lblDataAtual.Text = DateTime.Now.ToLongDateString();
            GridViewInadimplentes.Columns.Clear();

            relatorio = relatorioNegocio.ObterRelatorioArrecadacaoDevidaMes(mes, ano);
            if (relatorio.NumProjetos > 0 || relatorio.NumAlunos > 0)
            {
                GridViewInadimplentes.Visible = true;
                bttImpressao.Visible = true;
                List<Projeto> listProjeto = relatorioNegocio.ObterArrecadacaoDevidaMes(mes, ano);
                lbl1.Text = "R$ " + relatorio.ValorTotal.ToString();
                textLBL1.Text = "Total: ";
                lbl2.Text = relatorio.NumAlunos.ToString()+ " alunos";
                textLBL2.Text = "Número de Alunos: ";
                lbl3.Text = relatorio.NumProjetos.ToString()+" projetos";
                textLBL3.Text = "Número de Projetos: ";
                lbl4.Visible = false;
                textLBL4.Visible = false;

                GridViewInadimplentes.DataSource = listProjeto;
                GridViewInadimplentes.AutoGenerateColumns = false;

                BoundField bfNomeProjeto = new BoundField();
                bfNomeProjeto.DataField = "Nome";
                bfNomeProjeto.HeaderText = "Nome do Projeto";
                GridViewInadimplentes.Columns.Add(bfNomeProjeto);

                BoundField bfCodProjeto = new BoundField();
                bfCodProjeto.DataField = "Codigo";
                bfCodProjeto.HeaderText = "Código do Projeto";
                GridViewInadimplentes.Columns.Add(bfCodProjeto);

                BoundField bfValorDevido = new BoundField();
                bfValorDevido.DataField = "Valor";
                bfValorDevido.DataFormatString = "R$ {0:F2}";
                bfValorDevido.HeaderText = "Arrecadação Devida no Mês";
                GridViewInadimplentes.Columns.Add(bfValorDevido);

                GridViewInadimplentes.DataBind();
            }
            else
            {
                PanelSucesso.Visible = true;
            }
        }
        public static Relatorio ObterRelatorioArrecadacaoMes(int mes, int ano, enumTipoRelatorio tipo)
        {
            Relatorio relatorio = null;
            VsfDatabase db = new VsfDatabase(Properties.Settings.Default.StringConexao);
            try
            {
                db.AbreConexao();
                List<SqlParameter> parameters = new List<SqlParameter>();
                parameters.Add(new SqlParameter("@mes", mes));
                parameters.Add(new SqlParameter("@ano", ano));

                StringBuilder query = new StringBuilder("select COUNT(alu.Nome) as alunos, ");
                query.Append("COUNT(proj.Nome) as projetos");
                switch (tipo)
                {
                    case enumTipoRelatorio.Efetivo:
                        query.Append(", SUM(ValorPago) as total, ");
                        query.Append("sum(ValorPago - ValorPagar) as 'Rendimento Juros', ");
                        query.Append("sum(ValorPagar) as 'Arrecadacao Prevista' ");
                        break;
                    case enumTipoRelatorio.Previsto:
                        query.Append(" ,SUM(ValorPagar) as total ");
                        break;
                    case enumTipoRelatorio.Devido:
                        query.Append(" ,SUM(ValorPagar) as total ");
                        break;
                }
                query.Append("FROM Parcelas as parc ");
                query.Append("INNER JOIN Financeiro as finc ");
                query.Append("on finc.IdFinanceiro = parc.IdFinanceiro ");
                query.Append("INNER JOIN Matricula as mat ");
                query.Append("ON mat.IdMatricula = finc.IdMatricula ");
                query.Append("INNER JOIN Aluno as alu ");
                query.Append("ON alu.NumeroPece = mat.IdAluno ");
                query.Append("INNER JOIN projeto as proj ");
                query.Append("ON proj.CodigoProjeto = mat.IdProjeto ");
                query.Append("where month(parc.DataVencimento) = @mes ");
                query.Append("and year(parc.DataVencimento) = @ano ");
                switch (tipo)
                {
                    case enumTipoRelatorio.Efetivo:
                        query.Append(" and Pago = 1 ");
                        break;
                    case enumTipoRelatorio.Previsto:
                        query.Append("");
                        break;
                    case enumTipoRelatorio.Devido:
                        query.Append(" and parc.DataVencimento < GETDATE()");
                        query.Append(" and Pago = 0 ");
                        break;
                }
                 query.Append("and mat.Estado = 0 ");

                SqlDataReader reader = db.ExecuteTextReader(query.ToString(), parameters);
                if (reader.Read())
                {
                    relatorio = new Relatorio();
                    relatorio.ValorTotal = (reader["total"] != DBNull.Value) ? Convert.ToDecimal(reader["total"]) : 0;
                    relatorio.NumAlunos = (reader["alunos"] != DBNull.Value) ? Convert.ToInt32(reader["alunos"]) : 0;
                    relatorio.NumProjetos = (reader["projetos"] != DBNull.Value) ? Convert.ToInt32(reader["projetos"]) : 0;
                    if (tipo == enumTipoRelatorio.Efetivo)
                    {
                        relatorio.ValorJuros = (reader["Rendimento Juros"] != DBNull.Value) ? Convert.ToDecimal(reader["Rendimento Juros"]) : 0;
                        relatorio.ValorPrevisto = (reader["Arrecadacao Prevista"] != DBNull.Value) ? Convert.ToDecimal(reader["Arrecadacao Prevista"]) : 0;
                    }
                }
            }
            catch (Exception ex)
            {
                Logger.Registrar(0, "Exceção em (DAO) " + ex.Source + " - " + ex.ToString() + " : " + ex.Message + "\n\n StackTrace: " + ex.StackTrace);
                throw new ApplicationException("RelatorioAluno.ObterRelatorioArrecadacaoMes(): " + ex, ex);
            }
            finally
            {
                db.FechaConexao();
            }
            return relatorio;
        }
        private void RelatorioInadimplentes_load()
        {
            RelatorioNegocio relatorioNegocio = new RelatorioNegocio();
            Relatorio relatorio = new Relatorio();

            lblTituloRelatorio.Text = "Relatório de Alunos Inadimplentes";
            lblDataAtual.Text = DateTime.Now.ToLongDateString();
            GridViewInadimplentes.Columns.Clear();

            relatorio = relatorioNegocio.ObterRelatorioInadimplentes();
            if (relatorio.NumProjetos > 0 || relatorio.NumAlunos >0)
            {
                List<AlunoParcela> listAlunoProjeto = relatorioNegocio.ObterAlunosInadimplentes();
                GridViewInadimplentes.Visible = true;
                bttImpressao.Visible = true;
                lbl1.Text = "R$ " + relatorio.ValorTotal.ToString();
                textLBL1.Text = "Total: ";
                lbl2.Text = relatorio.NumAlunos.ToString() + " alunos";
                textLBL2.Text = "Número de Alunos: ";
                lbl3.Text = relatorio.MediaDiasAtrasados.ToString() + " dias";
                textLBL3.Text = "Média de dias Atrasados: ";
                lbl4.Text = relatorio.MaiorAtraso.ToString() + " dias";
                textLBL4.Text = "Maior Atraso: ";
                textLBL4.Visible = true;
                lbl4.Visible = true;

                GridViewInadimplentes.DataSource = listAlunoProjeto;
                GridViewInadimplentes.AutoGenerateColumns = false;

                BoundField bfNomeAluno = new BoundField();
                bfNomeAluno.DataField = "Nome";
                bfNomeAluno.HeaderText = "Nome do Aluno";
                GridViewInadimplentes.Columns.Add(bfNomeAluno);

                BoundField bfNumeroPece = new BoundField();
                bfNumeroPece.DataField = "NumeroPECE";
                bfNumeroPece.HeaderText = "Número PECE";
                GridViewInadimplentes.Columns.Add(bfNumeroPece);

                BoundField bfParcelaVencida = new BoundField();
                bfParcelaVencida.HtmlEncode = false;
                bfParcelaVencida.DataField = "ParcelaVencida";
                bfParcelaVencida.DataFormatString = "{0:d}";
                bfParcelaVencida.HeaderText = "Parcela Vencida";
                GridViewInadimplentes.Columns.Add(bfParcelaVencida);

                BoundField bfValorDevido = new BoundField();
                bfValorDevido.DataFormatString = "R$ {0:F2}";
                bfValorDevido.DataField = "ValorParcela";
                bfValorDevido.HeaderText = "Valor Devido";
                GridViewInadimplentes.Columns.Add(bfValorDevido);

                GridViewInadimplentes.DataBind();
            }
            else
            {
                PanelSucesso.Visible = true;
            }
        }