protected void Page_Load(object sender, EventArgs e)
        {
            // Variável para impedir execuções desecessárias da busca de SEs com filtro de categoria.
            ViewState["buscouCategorias"] = true;

            if (IsPostBack)
            {
                return;
            }

            ViewState["_SE"] = null;

            var manterUsuario = new ManterUsuario();

            using (var relDa = new RelatorioDesempenhoAcademico())
            {
                AtualizarComboSolucaoEducacional(null, null);

                if (ucNacionalizarRelatorio.IsNacionalizado)
                {
                    ucCategorias1.PreencherCategorias(false, null, null, true);
                }
                else
                {
                    ucCategorias1.PreencherTodasCategorias(false, null);
                }

                ListBoxesStatus.PreencherItens(relDa.ObterStatusMatriculaTodos(), "ID", "Nome");
                ListBoxesNivelOcupacional.PreencherItens(relDa.GetNivelOcupacionalTodos(), "ID", "Nome");
                ListBoxesUF.PreencherItens(relDa.ObterUFTodos(), "ID", "Nome");
                ListBoxesUFResponsavel.PreencherItens(relDa.ObterUFTodos(), "ID", "Nome");
                ListBoxesPublicoAlvo.PreencherItens(relDa.ObterPublicoAlvoTodos(), "ID", "Nome", true);
                ListBoxesFormaDeAquisicao.PreencherItens(relDa.ObterFormaDeAquisicaoTodos(), "ID", "Nome");
            }
        }
        protected DTOFiltroRelatorioQuestionario ObterFiltro()
        {
            int          id;
            Questionario questionario;

            return(new DTOFiltroRelatorioQuestionario
            {
                IdProcesso = int.TryParse(txtDemandas.Text, out id) && id != 0 ? (int?)id : null,
                IdTipoQuestionario =
                    int.TryParse(ddlTipoQuestionario.SelectedValue, out id) && id != 0 ? (int?)id : null,
                IdSolucaoEducacional = int.TryParse(txtSolucaoEducacional.Text, out id) && id != 0 ? (int?)id : null,
                IdOferta = int.TryParse(txtOferta.Text, out id) && id != 0 ? (int?)id : null,
                IdTurma = int.TryParse(txtTurma.Text, out id) && id != 0 ? (int?)id : null,

                // Caso seja o relatório de tutor, busca o questionário pós de pesquisa da turma informada na tela.
                // Como o id da turma foi setado acima, a variável id permanece com o id da turma e pode ser usado.
                IdQuestionario =
                    RelatorioTutor && id != 0
                        ? (questionario = new ManterQuestionarioAssociacao().ObterPesquisaPosTurma(id)) != null ? questionario.ID : 0
                        : int.TryParse(txtQuestionario.Text, out id) && id != 0 ? id : 0,

                IdsUf = ListBoxesUF.RecuperarIdsSelecionados <int>().ToList(),
                IdsNivelOcupacional = ListBoxesNivelOcupacional.RecuperarIdsSelecionados <int>().ToList(),
                IdsStatusMatricula = ListBoxesStatus.RecuperarIdsSelecionados <int>().ToList(),
                IdsCategorias = ucCategorias1.IdsCategoriasMarcadas.ToList(),
                IsRelatorioTutor = RelatorioTutor,
                IdProfessor = int.TryParse(cbxProfessor.SelectedValue, out id) && id != 0 ? (int?)id : null
            });
        }
        protected void PreencherCombos(object sender, EventArgs e)
        {
            using (var rel = new RelatorioQuestionario())
            {
                ViewState["_Demandas"] = Helpers.Util.ObterListaAutocomplete(rel.ListaProcessos());

                switch (ObterTipoRelatorioSelecionado())
                {
                case enumTipoRelatorioResposta.Respondente:
                case enumTipoRelatorioResposta.Estatistico:

                    PreencherComboQuestionario();

                    ListBoxesStatus.PreencherItens(rel.ListaStatus(), "ID", "Nome");

                    if (ObterTipoRelatorioSelecionado() == enumTipoRelatorioResposta.Estatistico)
                    {
                        // Relatório estatístico sempre será de pesquisa.
                        ddlTipoQuestionario.SelectedValue = ((int)enumTipoQuestionario.Pesquisa).ToString();
                    }
                    else
                    {
                        WebFormHelper.PreencherLista(new ManterTipoQuestionario().ObterTodos().OrderBy(x => x.Nome).ToList(), ddlTipoQuestionario,
                                                     true);
                    }

                    txtQuestionario.Text = "";

                    LimparCampos();

                    break;

                case enumTipoRelatorioResposta.Consolidado:
                    var listaSe = rel.ListaSolucaoEducacionalPorCategorias(ucCategorias1.IdsCategoriasMarcadas);

                    ViewState["_SE"] = Helpers.Util.ObterListaAutocomplete(listaSe);

                    txtSolucaoEducacional.Text = "";

                    LimparCampos();

                    break;

                default:
                    throw new ArgumentOutOfRangeException();
                }
            }
        }
        protected void btnPesquisar_Click(object sender, EventArgs e)
        {
            using (var relDa = new RelatorioDesempenhoAcademico())
            {
                DateTime?dataInicio          = null;
                DateTime?dataFim             = null;
                DateTime?dataInicioTermino   = null;
                DateTime?dataFimTermino      = null;
                DateTime?dataDataInicioTurma = null;
                DateTime?dataDataFinalTurma  = null;
                DateTime dataTmp;

                if (!string.IsNullOrWhiteSpace(txtDataInicio.Text))
                {
                    if (DateTime.TryParse(txtDataInicio.Text, out dataTmp))
                    {
                        dataInicio = dataTmp;
                    }
                    else
                    {
                        WebFormHelper.ExibirMensagem(enumTipoMensagem.Erro, "Data inicial inválida");
                        return;
                    }
                }

                if (!string.IsNullOrWhiteSpace(txtDataFinal.Text))
                {
                    if (DateTime.TryParse(txtDataFinal.Text, out dataTmp))
                    {
                        dataFim = dataTmp;
                    }
                    else
                    {
                        WebFormHelper.ExibirMensagem(enumTipoMensagem.Erro, "Data final inválida");
                        return;
                    }
                }

                if (dataFim.HasValue && dataInicio.HasValue && dataFim < dataInicio)
                {
                    WebFormHelper.ExibirMensagem(enumTipoMensagem.Erro, "A data final deve ser maior que a inicial");
                    return;
                }

                if (!string.IsNullOrWhiteSpace(txtDataTerminoInicio.Text))
                {
                    if (DateTime.TryParse(txtDataTerminoInicio.Text, out dataTmp))
                    {
                        dataInicioTermino = dataTmp;
                    }
                    else
                    {
                        WebFormHelper.ExibirMensagem(enumTipoMensagem.Erro, "Data inicial inválida");
                        return;
                    }
                }

                if (!string.IsNullOrWhiteSpace(txtDataTerminoFim.Text))
                {
                    if (DateTime.TryParse(txtDataTerminoFim.Text, out dataTmp))
                    {
                        dataFimTermino = dataTmp;
                    }
                    else
                    {
                        WebFormHelper.ExibirMensagem(enumTipoMensagem.Erro, "Data final inválida");
                        return;
                    }
                }

                if (!string.IsNullOrWhiteSpace(txtDataInicioTurma.Text))
                {
                    if (DateTime.TryParse(txtDataInicioTurma.Text, out dataTmp))
                    {
                        dataDataInicioTurma = dataTmp;
                    }
                    else
                    {
                        WebFormHelper.ExibirMensagem(enumTipoMensagem.Erro, "Data inicial turma inválida");
                        return;
                    }
                }

                if (!string.IsNullOrWhiteSpace(txtDataFinalTurma.Text))
                {
                    if (DateTime.TryParse(txtDataFinalTurma.Text, out dataTmp))
                    {
                        dataDataFinalTurma = dataTmp;
                    }
                    else
                    {
                        WebFormHelper.ExibirMensagem(enumTipoMensagem.Erro, "Data fim de turma inválida");
                        return;
                    }
                }

                var categorias = ucCategorias1.IdsCategoriasMarcadas.Any()
                    ? ucCategorias1.IdsCategoriasMarcadas
                    : ucCategorias1.IdsCategoriasExistentes;

                var dTOFiltroDesempenhoAcademico = new DTOFiltroDesempenhoAcademico(
                    txtNome.Text,
                    txtCPF.Text,
                    ListBoxesNivelOcupacional.RecuperarIdsSelecionados <int>(),
                    ListBoxesUF.RecuperarIdsSelecionados <int>(),
                    ListBoxesPublicoAlvo.RecuperarIdsSelecionados <int>(),
                    dataInicio,
                    dataFim,
                    dataInicioTermino,
                    dataFimTermino,
                    dataDataInicioTurma,
                    dataDataFinalTurma,
                    ListBoxesStatus.RecuperarIdsSelecionados <int>(),
                    string.IsNullOrWhiteSpace(txtSolucaoEducacional.Text) ? 0 : int.Parse(txtSolucaoEducacional.Text),
                    string.IsNullOrWhiteSpace(txtOferta.Text) ? 0 : int.Parse(txtOferta.Text),
                    string.IsNullOrWhiteSpace(txtTurma.Text) ? 0 : int.Parse(txtTurma.Text),
                    categorias,
                    ListBoxesFormaDeAquisicao.RecuperarIdsSelecionados <int>(),
                    ListBoxesUFResponsavel.RecuperarIdsSelecionados <int>()
                    );

                var lstDa = relDa.ConsultarDesempenhoAcademico(dTOFiltroDesempenhoAcademico);

                // Insere a lista completa na sessão para não levar somente os resultados da página atual para a impressão.
                Session["dsRelatorio"] = lstDa;

                var resultado = SelecionarPagina();

                if (resultado.Any())
                {
                    var totalizadores = new List <DTOTotalizador>();

                    if (lstDa.Any())
                    {
                        // Caso não possua filtro de SE, Oferta ou Turma, exibe o totalizador que conta a quantidade de matrículas.
                        if (string.IsNullOrWhiteSpace(txtSolucaoEducacional.Text) &&
                            string.IsNullOrWhiteSpace(txtOferta.Text) && string.IsNullOrWhiteSpace(txtTurma.Text))
                        {
                            totalizadores.Add(
                                TotalizadorUtil.GetTotalizador(lstDa, "Total da quantidade de alunos registros", "CPF",
                                                               enumTotalizacaoRelatorio.Contar, false));
                        }

                        totalizadores.AddRange(new List <DTOTotalizador>
                        {
                            TotalizadorUtil.GetTotalizador(lstDa, "Total da quantidade de alunos CPF", "CPF", enumTotalizacaoRelatorio.ContarDistintos, false),
                            TotalizadorUtil.GetTotalizadorComposto(lstDa, "Total da quantidade por nível ocupacional", "StatusMatricula", "NivelOcupacional"),
                            TotalizadorUtil.GetTotalizador(lstDa, "Total da quantidade por status", "StatusMatricula", enumTotalizacaoRelatorio.Contar),
                            TotalizadorUtil.GetTotalizadorComposto(lstDa, "Total da quantidade de alunos UF", "StatusMatricula", "UF")
                        });

                        ucTotalizadorRelatorio.PreencherTabela(totalizadores);
                    }

                    componenteGeracaoRelatorio.Visible = true;
                    ucFormatoSaidaRelatorio.Visible    = true;
                    btnPesquisar.CssClass = "btn btn-default mostrarload";
                    Filtros.CssClass      = "panel-collapse collapse";
                }
                else
                {
                    ucTotalizadorRelatorio.LimparTotalizadores();
                    componenteGeracaoRelatorio.Visible = false;
                    ucFormatoSaidaRelatorio.Visible    = false;
                }

                WebFormHelper.ValidarVisibilidadeCamposGrid(dgRelatorio, chkListaCamposVisiveis.Items);
            }
        }