private void AdicionarOuRemoverTurma(classes.EmailEnvio emailEnvioEdicao)
        {
            IList <EmailEnvioPermissao> listaNot = emailEnvioEdicao.ListaPermissao.Where(x => x.Turma != null).ToList();

            // Já tinha alguma turma escolhida
            if (txtTurma.Text != "")
            {
                // Se a seleção não conter o valor escolhido, se já estiver não precisa atualizar nada
                if (!listaNot.Any(x => x.Turma.ID.Equals(int.Parse(txtTurma.Text))))
                {
                    BMUsuario bmUsu         = new BMUsuario();
                    Usuario   usuarioLogado = bmUsu.ObterUsuarioLogado();

                    //classes.Turma tur = new classes.Turma();
                    //tur = new ManterTurma().ObterTurmaPorID(ddlTurma.SelectedItem.Value);
                    ManterTurma   mantTurma = new ManterTurma();
                    classes.Turma tur       = mantTurma.ObterTurmaPorID(int.Parse(txtTurma.Text));

                    emailEnvioEdicao.adicionarTurma(tur, usuarioLogado);
                    emailEnvioEdicao.removerTurmasExceto(tur);
                }
            }// Se não selecinou nada mas tem algo no banco limpa
            else if (listaNot.Count() > 0)
            {
                emailEnvioEdicao.removerTurmas();
            }
        }
        private static bool PossuiQuestionarioPendente(Usuario usuario, ref DTODisponibilidadeSolucaoEducacional retorno)
        {
            var turmasPendentes = new ManterTurma().ObterTurmasPendentes(usuario);

            if (turmasPendentes.Any())
            {
                Turma primeiraTurma = turmasPendentes.FirstOrDefault();

                //Valida se a data da matricula está no ano vigente, caso contrário, não apresenta questionário de abandono.
                //Verify if the registration date is in current year, otherwise, don't show the abandon quiz.
                if (!(primeiraTurma.DataFinal.Value.Year < DateTime.Now.Year))
                {
                    if ((primeiraTurma = turmasPendentes.FirstOrDefault()) != null)
                    {
                        retorno.CodigoDisponibilidade =
                            (int)enumDisponibilidadeSolucaoEducacional.PendenciaAbandono;

                        retorno.IdTurma = primeiraTurma.ID;

                        // Montar mensagem da pendência, com os plurais caso seja mais de uma turma.
                        retorno.TextoDisponibilidade =
                            string.Format(
                                "Você abandonou a{0} turma{0} no{0} curso{0} \"{1}\", e precisa responder o{0} questionário{0} de abandono para poder se inscrever em qualquer curso.",
                                turmasPendentes.Count() > 1 ? "s" : "",
                                string.Join(", ", turmasPendentes.Select(x => x.Oferta.SolucaoEducacional.Nome)));

                        return(true);
                    }
                }
            }

            return(false);
        }
        private void ObterTurma(int oferta)
        {
            var lista = new ManterTurma().ObterTurmasPorOferta(oferta);

            ViewState["_Turma"] = Helpers.Util.ObterListaAutocomplete(lista);
            txtTurma.Text       = "";
        }
Exemple #4
0
        protected void Page_Load(object sender, EventArgs e)
        {
            int turmaId;

            if (int.TryParse(Request["Id"], out turmaId))
            {
                var turma = new ManterTurma().ObterTurmaPorID(turmaId);

                if (turma == null)
                {
                    WebFormHelper.ExibirMensagem(enumTipoMensagem.Erro, "Turma inválida. Escolha uma turma.", "ListarTurma.aspx");
                    return;
                }

                nomeTurma.InnerText = turma.Nome;

                var logResponsaveis = new ManterLogResponsavel().ObterPorTurma(new Dominio.Classes.Turma {
                    ID = turmaId
                }).ToList();

                WebFormHelper.PreencherGrid(logResponsaveis, dgvResponsaveis);

                var logConsultores = new ManterLogConsultorEducacional().ObterPorTurma(new Dominio.Classes.Turma {
                    ID = turmaId
                }).ToList();

                WebFormHelper.PreencherGrid(logConsultores, dgvConsultores);
            }
            else
            {
                WebFormHelper.ExibirMensagem(enumTipoMensagem.Erro, "Houve um erro na busca do histórico. Tente novamente ou entre em contato com o suporte.", "ListarTurma.aspx");
            }
        }
        protected void txtTurma_OnTextChanged(object sender, EventArgs e)
        {
            if (!string.IsNullOrWhiteSpace(txtTurma.Text))
            {
                var idTurma = int.Parse(txtTurma.Text);

                if (idTurma > 0)
                {
                    var turmas = new ManterTurma().ObterTodasTurma().Where(x => x.ID == idTurma);

                    var questionariosAssociacaoIDs = turmas
                                                     .SelectMany(y => y.ListaQuestionarioAssociacao)
                                                     .Select(z => z.Questionario.ID)
                                                     .ToList();

                    var questionariosParticipacaoIDs = turmas
                                                       .SelectMany(y => y.ListaQuestionarioParticipacao)
                                                       .Select(z => z.Questionario.ID)
                                                       .ToList();

                    var listaProcesso = new ManterEtapa().ObterTodosIQueryable()
                                        .Where(x => x.ListaCampos.Any(y => questionariosAssociacaoIDs.Contains(y.Questionario.ID) ||
                                                                      questionariosParticipacaoIDs.Contains(y.Questionario.ID)))
                                        .Select(z => z.Processo)
                                        .OrderBy(y => y.Nome)
                                        .ToList();

                    ViewState["_Demandas"] = Helpers.Util.ObterListaAutocomplete(listaProcesso);
                }

                txtDemandas.Text = "";

                PreencherComboQuestionario();
            }
        }
        public dynamic MatriculaTurma(UserIdentity usuarioLogado, int idTurma, int itemTrilhaId)
        {
            var turma = new ManterTurma().ObterTurmaPorID(idTurma);

            if (turma == null)
            {
                throw new ResponseException(enumResponseStatusCode.TurmaNaoEncontrada, "Turma não encontrada");
            }

            var itemTrilha = new ManterItemTrilha().ObterItemTrilhaPorID(itemTrilhaId);

            if (itemTrilha == null)
            {
                throw new ResponseException(enumResponseStatusCode.TurmaNaoEncontrada, "Solução não encontrada");
            }

            try
            {
                new ManterSolucaoEducacionalService().MatricularTurma(usuarioLogado.Usuario.ID, turma.ID, null, null,
                                                                      usuarioLogado.Usuario.CPF, itemTrilha);
            }
            catch (AcademicoException ex)
            {
                throw new ResponseException(enumResponseStatusCode.ErroRegraNegocioSgus, ex.Message);
            }
            catch
            {
                throw new ResponseException(enumResponseStatusCode.ErroRegraNegocioSgus,
                                            "Não foi possível realizar a matrícula na turma");
            }

            return(null);
        }
        public RetornoWebService AtualizarStatusTurmas()
        {
            var retorno = new RetornoWebService();

            var manter = new ManterTurma();

            var contador = manter.ObterTodasTurma()
                           .Count(
                t => t.Status != null &&
                // Vai de Prevista direto para Em andamento. Não concordo, mas o cliente insistiu.
                (((t.Status == enumStatusTurma.Prevista || t.Status == enumStatusTurma.Confirmada) &&
                  t.DataInicio <= DateTime.Now)
                 ||
                 (t.Status == enumStatusTurma.EmAndamento && t.DataFinal.HasValue &&
                  t.DataFinal.Value < DateTime.Now)));


            for (int i = 10; i < contador; i += 10)
            {
                // Atualiza registros de 10 em 10
                int skip = i == 10 ? 0 : i - 10;

                // Obter todas as turmas cujas datas início ou final são hoje ou anteriores e que possuam status de Confirmada ou Em Andamento.
                var turmas = manter.ObterTodasTurma()
                             .Where(
                    t => t.Status != null &&
                    // Vai de Prevista direto para Em andamento. Não concordo, mas o cliente insistiu.
                    (((t.Status == enumStatusTurma.Prevista || t.Status == enumStatusTurma.Confirmada) &&
                      t.DataInicio <= DateTime.Now)
                     ||
                     (t.Status == enumStatusTurma.EmAndamento && t.DataFinal.HasValue &&
                      t.DataFinal.Value < DateTime.Now))
                    ).Select(t => t.ID).Skip(skip).Take(10).ToList();

                foreach (var id in turmas)
                {
                    try
                    {
                        // Buscar a turma novamente, pois o NHibernate está mal configurado e pira nessa parte.
                        var turma = new ManterTurma().ObterTurmaPorID(id);

                        AtualizarStatusTurma(turma);
                    }
                    catch
                    {
                        retorno.Erro++;
                    }
                }
            }

            if (retorno.Erro > 0)
            {
                retorno.Mensagem = string.Format(
                    "Houve{0} erro{1} na{1} sincronia{1} de {2} turma{1}. Tente novamente.",
                    retorno.Erro > 1 ? "ram" : "", retorno.Erro > 1 ? "s" : "", retorno.Erro);
            }

            return(retorno);
        }
        private void ObterTurma(int oferta)
        {
            var manterTurma = new ManterTurma();
            var lista       = manterTurma.ObterTurmasPorOferta(oferta).ToList();

            lista.Insert(0, new classes.Turma {
                Nome = "::Selecione::"
            });

            ddlTurma.DataSource     = lista;
            ddlTurma.DataValueField = "ID";
            ddlTurma.DataTextField  = "Nome";
            ddlTurma.DataBind();
        }
        private void AtualizarStatusDaOferta(enumStatusMatricula statusMatriculaOferta,
                                             classes.MatriculaOferta matriculaOferta, ref ManterMatriculaOferta manterMatriculaOferta,
                                             DateTime?dataConclusao = null, double?notaFinal = null, bool atualizarMatriculas = true,
                                             bool fazerMerge        = false)
        {
            if (manterMatriculaOferta == null)
            {
                // O objetivo que for salvo pelo Manter não deve vir de outra sessão (outro Manter/BM)
                manterMatriculaOferta = new ManterMatriculaOferta();
                matriculaOferta       = manterMatriculaOferta.ObterMatriculaOfertaPorID(matriculaOferta.ID);
            }

            if (matriculaOferta == null)
            {
                return;
            }

            //Atualiza o status da Oferta
            matriculaOferta.StatusMatricula = statusMatriculaOferta;

            if (dataConclusao != null || notaFinal != null)
            {
                foreach (var mt in matriculaOferta.MatriculaTurma)
                {
                    // Obter a turma novamente, pois o lazy tá pirando nessa parte.
                    var turma = new ManterTurma().ObterTurmaPorID(mt.Turma.ID);

                    // Só altera caso a data da turma seja menor ou igual à data de conclusão informada.
                    if (dataConclusao.HasValue &&
                        (turma.DataInicio <= dataConclusao))
                    {
                        mt.DataTermino = dataConclusao;
                    }

                    if (notaFinal.HasValue)
                    {
                        mt.MediaFinal = notaFinal;
                    }
                }
            }

            manterMatriculaOferta.AtualizarMatriculaOferta(matriculaOferta, false, fazerMerge);

            new BP.ManterItemTrilhaParticipacao().AtualizarStatusParticipacoesTrilhas(matriculaOferta);
        }
        public DTODisponibilidadeSolucaoEducacional ConsultarDisponibilidadeTurma(int usuarioId, int turmaId)
        {
            var retorno = new DTODisponibilidadeSolucaoEducacional
            {
                CodigoDisponibilidade = (int)enumDisponibilidadeSolucaoEducacional.NaoPossuiDisponibilidade,
                TextoDisponibilidade  = "Não existe oferta disponível no momento"
            };

            var turma = new ManterTurma().ObterTurmaPorID(turmaId);

            if (turma == null)
            {
                retorno.TextoDisponibilidade = "Curso não encontrado ou não disponível. Tente novamente.";

                return(retorno);
            }

            retorno.IdTurma = turmaId;

            var solucaoId = turma.Oferta.SolucaoEducacional.ID;

            var usuario = new ManterUsuario().ObterUsuarioPorID(usuarioId);

            if (usuario == null)
            {
                return(retorno);
            }

            if (UsuarioPossuiBloqueioInscricao(usuario, solucaoId, ref retorno))
            {
                return(retorno);
            }

            // Verificar se o usuário pode se inscrever na turma.
            if (VerificarDisponibilidadeTurma(usuario, turma, ref retorno))
            {
                return(retorno);
            }

            return(retorno);
        }
 protected void dgvTurma_RowCommand(object sender, GridViewCommandEventArgs e)
 {
     if (e.CommandName.Equals("excluir"))
     {
         try
         {
             _manterTurma = new ManterTurma();
             int idTipoTurma = int.Parse(e.CommandArgument.ToString());
             _manterTurma.ExcluirTurma(idTipoTurma);
             WebFormHelper.ExibirMensagem(enumTipoMensagem.Sucesso, "Registro excluído com sucesso!", "ListarTurma.aspx");
         }
         catch (AcademicoException ex)
         {
             WebFormHelper.ExibirMensagem(enumTipoMensagem.Erro, ex.Message);
             return;
         }
         catch
         {
             WebFormHelper.ExibirMensagem(enumTipoMensagem.Erro, "Exclusão de registro negada. Existem Registros Dependentes desta Turma.");
             return;
         }
     }
     else if (e.CommandName.Equals("editar"))
     {
         var idTurma = int.Parse(e.CommandArgument.ToString());
         Response.Redirect("EdicaoTurma.aspx?Id=" + idTurma, false);
     }
     else if (e.CommandName.Equals("republicar"))
     {
         var idTipoOferta = int.Parse(e.CommandArgument.ToString());
         Response.Redirect("EdicaoTurma.aspx?Id=" + idTipoOferta + "&Republicar=Sim", false);
     }
     else if (e.CommandName.Equals("historico"))
     {
         var id = int.Parse(e.CommandArgument.ToString());
         Response.Redirect("HistoricoTurma.aspx?Id=" + id, false);
     }
 }
        private void BuscarTurmasJson(int ofertaId)
        {
            var turmasSelecionadas = ObterTurmasSelecionadas(false).Select(x => x.ID).ToList();

            // Buscar turmas da oferta e remover turmas selecionadas da busca.
            var turmas =
                new ManterTurma().ObterTurmasPorOferta(ofertaId, false)
                .Where(x => !turmasSelecionadas.Contains(x.ID));

            if (turmas.Any())
            {
                ViewState["_Turma"] =
                    Helpers.Util.ObterListaAutocomplete(turmas);
            }
            else
            {
                // Caso nao tenha mais turmas, limpar as ofertas e carregar novamente.
                txtOferta.Text = "";

                LimparSeOfertaTurma();

                BuscarOfertasJson(int.Parse(txtSolucao.Text));
            }
        }
Exemple #13
0
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                int           turmaId;
                classes.Turma turma;

                // Já verifica se o Id existe, está correto e existe no banco numa lapada só.
                // Aqui é assim, sou dessas.
                if (Request["Id"] != null && (int.TryParse(Request["Id"], out turmaId)) &&
                    (turma = new ManterTurma().ObterTurmaPorID(turmaId)) != null)
                {
                    var usuarioLogado = new ManterUsuario().ObterUsuarioLogado();

                    if (usuarioLogado.IsAdministrador())
                    {
                        Response.Redirect("GerenciamentoMatricula.aspx?oferta=" + turma.Oferta.ID, true);
                        return;
                    }

                    if (turma.ConsultorEducacional == null)
                    {
                        WebFormHelper.ExibirMensagem(enumTipoMensagem.Erro,
                                                     "A turma selecionada não possui Consultor Educacional.",
                                                     "GerenciamentoMatricula.aspx?oferta=" + turma.Oferta.ID);
                        return;
                    }

                    var avaliacao = turma.Avaliacoes.FirstOrDefault();

                    if (avaliacao != null)
                    {
                        switch (avaliacao.Status)
                        {
                        case enumStatusAvaliacao.AguardandoResposta:
                            // Gestor só pode visualizar essa tela caso a avaliação exista e já tenha sido respondida pelo Consultor Educacional.
                            if (usuarioLogado.IsGestor())
                            {
                                ExibirMensagemAguardandoAvaliacao(turmaId);
                                return;
                            }

                            if (turma.ConsultorEducacional.ID != usuarioLogado.ID)
                            {
                                WebFormHelper.ExibirMensagem(enumTipoMensagem.Erro,
                                                             "Apenas o Consultor Educacional da turma pode avaliar a turma.",
                                                             "GerenciamentoMatricula.aspx?oferta=" + turma.Oferta.ID);
                            }

                            break;

                        case enumStatusAvaliacao.AguardandoGestor:
                            if (usuarioLogado.IsGestor())
                            {
                                if (usuarioLogado.UF.ID == turma.ConsultorEducacional.UF.ID)
                                {
                                    btnEnviarAvaliacao.Visible = false;
                                    btnSalvar.Visible          = false;

                                    btnAprovar.Visible  = true;
                                    btnReprovar.Visible = true;

                                    BloquearCampos = true;
                                    break;
                                }

                                WebFormHelper.ExibirMensagem(enumTipoMensagem.Erro,
                                                             "Apenas um gestor de " + turma.ConsultorEducacional.UF.Nome +
                                                             " pode validar a avaliação desta turma.",
                                                             "GerenciamentoMatricula.aspx?oferta=" + turma.Oferta.ID);
                                return;
                            }

                            if (usuarioLogado.IsConsultorEducacional())
                            {
                                BloquearCampos = true;

                                // Bloqueia os campos, pois está aguardando análise do gestor.
                                btnEnviarAvaliacao.Enabled = false;
                                btnSalvar.Enabled          = false;
                                btnEnviarAvaliacao.Text    = "Aguardando avaliação do gestor";

                                break;
                            }

                            WebFormHelper.ExibirMensagem(enumTipoMensagem.Erro,
                                                         "Apenas o Consultor Educacional da turma pode avaliar a turma.",
                                                         "GerenciamentoMatricula.aspx?oferta=" + turma.Oferta.ID);

                            return;

                        case enumStatusAvaliacao.Aprovada:
                            BloquearCampos = true;
                            break;

                        default:
                            throw new ArgumentOutOfRangeException();
                        }
                    }
                    else
                    {
                        if (turma.ConsultorEducacional.ID != usuarioLogado.ID)
                        {
                            WebFormHelper.ExibirMensagem(enumTipoMensagem.Erro,
                                                         "Apenas o Consultor Educacional da turma pode avaliar a turma.",
                                                         "GerenciamentoMatricula.aspx?oferta=" + turma.Oferta.ID);
                            return;
                        }

                        if (usuarioLogado.IsGestor())
                        {
                            ExibirMensagemAguardandoAvaliacao(turmaId);
                            return;
                        }
                    }

                    ltrSolucaoEducacional.Text = turma.Oferta.SolucaoEducacional.Nome;

                    var manterAvaliacao = new ManterAvaliacao();

                    var questoes = manterAvaliacao.ObterQuestoes().ToList();

                    QuantidadeQuestoes = questoes.Count();

                    Questoes = questoes;

                    // Chamar o método ObterStatusDisponiveis() porque ele tem um comportamento semelhante
                    // ao de um Singleton, e será usado posteriormente.
                    ObterStatusDisponiveis(turma.Oferta.SolucaoEducacional.CategoriaConteudo, true);

                    rptQuestoes.DataSource = questoes;
                    rptQuestoes.DataBind();

                    rptMatriculas.DataSource = turma.ListaMatriculas.OrderBy(x => x.MatriculaOferta.Usuario.Nome);
                    rptMatriculas.DataBind();
                }
                else
                {
                    WebFormHelper.ExibirMensagem(enumTipoMensagem.Erro, "Oferta inválida para avaliação. Tente novamente.",
                                                 "GerenciamentoMatricula.aspx");
                }
            }
        }
        protected void btnEnviar_Click(object sender, EventArgs e)
        {
            //this.SetarAcaoDaTela(enumAcaoTelaMatriculaOferta.NovaMatricula);
            var manterUsuario = new ManterUsuario();
            var usuarioLogado = manterUsuario.ObterUsuarioLogado();

            try
            {
                if (string.IsNullOrEmpty(ddlTurma.SelectedValue) || int.Parse(ddlTurma.SelectedValue) <= 0)
                {
                    throw new AcademicoException("Selecione uma turma para alterar a inscrição");
                }

                if (string.IsNullOrEmpty(ddlStatus.SelectedValue) || int.Parse(ddlStatus.SelectedValue) <= 0)
                {
                    throw new AcademicoException("Selecione um status");
                }

                var dtDataMatricula = DateTime.Now;
                var dtDataConclusao = DateTime.Now;

                if (IsAdminOrGestorUc && !string.IsNullOrEmpty(txtDataInscricao.Text))
                {
                    try
                    {
                        dtDataMatricula = Convert.ToDateTime(txtDataInscricao.Text);
                    }
                    catch
                    {
                        WebFormHelper.ExibirMensagem(enumTipoMensagem.Erro, "Data de Matrícula inválida.");
                        return;
                    }
                    try
                    {
                        dtDataConclusao = Convert.ToDateTime(txtDataConclusao.Text);
                    }
                    catch
                    {
                        WebFormHelper.ExibirMensagem(enumTipoMensagem.Erro, "Data de Conclusão inválida.");
                        return;
                    }
                }

                var manterTurma = new ManterTurma();

                if (!usuarioLogado.IsAdministrador())
                {
                    var matriculaOferta       = this.ObterObjetoMatriculaOferta();
                    var manterMatriculaOferta = new ManterMatriculaOferta();

                    var idOferta          = matriculaOferta.Oferta.ID;
                    var cpf               = matriculaOferta.Usuario.CPF;
                    var idStatusMatricula = ddlStatus.SelectedIndex > 0 ? int.Parse(ddlStatus.SelectedValue) : 0;
                    var idTurma           = ddlTurma.SelectedIndex > 0 ? int.Parse(ddlTurma.SelectedValue) : 0;

                    new ManterMatriculaOfertaService().MatriculaSolucaoEducacionalGestorUC(idOferta, cpf,
                                                                                           idStatusMatricula, idTurma, usuarioLogado.CPF);

                    //Dispara o evento informando que a matricula em uma oferta foi realizada
                    if (MatriculouAlunoEmUmaOferta == null)
                    {
                        return;
                    }
                    var mo = manterMatriculaOferta.ObterPorUsuarioESolucaoEducacional(matriculaOferta.Usuario.ID,
                                                                                      matriculaOferta.Oferta.SolucaoEducacional.ID);

                    if (mo != null && mo.ToList().Any())
                    {
                        matriculaOferta = mo.FirstOrDefault();
                        if (matriculaOferta == null)
                        {
                            return;
                        }
                        //Obtem as informações da matricula Oferta (inclusive a lista de turmas da oferta)
                        matriculaOferta = manterMatriculaOferta.ObterInformacoesDaMatricula(matriculaOferta.ID);
                    }

                    AdicionaOfertEmMatriculaTurma(matriculaOferta);

                    MatriculouAlunoEmUmaOferta(this, new MatricularAlunoEmUmaOfertaEventArgs(matriculaOferta));
                    ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "myscript",
                                                        " $('#EdicaoNivel, #modal-background').removeClass('active');", true);

                    LimparCamposMatriculaAluno();

                    //Cadastrar Solucao Educacional com o SAS
                    var manterSEService = new ManterSolucaoEducacionalService();

                    if (matriculaOferta.Oferta.SolucaoEducacional.IntegracaoComSAS)
                    {
                        manterSEService.CadastrarSAS(matriculaOferta.Usuario, new BP.integracaoSAS.TreinamentoSasClient());
                    }

                    //Matricular Aluno no Moodle
                    manterSEService.MatricularAlunoMoodle(matriculaOferta.Usuario, matriculaOferta.Oferta);

                    WebFormHelper.ExibirMensagem(enumTipoMensagem.Sucesso, "Aluno cadastrado com sucesso.");
                }
                else
                {
                    if (!string.IsNullOrEmpty(txtDataInscricao.Text))
                    {
                        var idTurma = ddlTurma.SelectedIndex > 0 ? int.Parse(ddlTurma.SelectedValue) : 0;
                        var turma   = manterTurma.ObterTurmaPorID(idTurma);

                        if (turma == null)
                        {
                            WebFormHelper.ExibirMensagem(enumTipoMensagem.Erro, "Turma não encontrada.");
                            return;
                        }
                        var dataValida = turma.Oferta.DataInicioInscricoes.HasValue &&
                                         turma.Oferta.DataFimInscricoes.HasValue &&
                                         dtDataMatricula.Date.Between(turma.Oferta.DataInicioInscricoes.Value.Date,
                                                                      turma.Oferta.DataFimInscricoes.Value.Date);

                        if (!dataValida)
                        {
                            WebFormHelper.ExibirMensagem(enumTipoMensagem.Erro,
                                                         turma.Oferta.DataInicioInscricoes.HasValue && turma.Oferta.DataFimInscricoes.HasValue
                                    ? "Data de Matrícula deve ser entre " +
                                                         turma.Oferta.DataInicioInscricoes.Value.Date.ToString("dd/MM/yyyy") + " e " +
                                                         turma.Oferta.DataFimInscricoes.Value.Date.ToString("dd/MM/yyyy")
                                    : "Data de Matrícula inválida.");
                            return;
                        }

                        var dataValidaConclusao = dtDataConclusao.Date >= turma.DataInicio;

                        if (!dataValidaConclusao)
                        {
                            WebFormHelper.ExibirMensagem(enumTipoMensagem.Erro,
                                                         "Data de Conclusão deve ser maior ou igual à: " + turma.DataInicio.ToString("dd/MM/yyyy"));
                            return;
                        }
                    }

                    var matriculaOferta       = this.ObterObjetoMatriculaOferta();
                    var manterMatriculaOferta = new ManterMatriculaOferta();
                    if (matriculaOferta.Oferta != null)
                    {
                        if (
                            matriculaOferta.Oferta.ListaMatriculaOferta.Any(
                                x =>
                                x.Usuario.ID == matriculaOferta.Usuario.ID &&
                                (x.StatusMatricula == enumStatusMatricula.Inscrito ||
                                 x.StatusMatricula == enumStatusMatricula.PendenteConfirmacaoAluno)))
                        {
                            throw new AcademicoException("Usuário já inscrito nesta oferta");
                        }
                    }

                    // Verificar permissao de matricula de acordo com as regras de permissão da Oferta.
                    if (matriculaOferta.Oferta != null &&
                        !matriculaOferta.Oferta.UsuarioPossuiPermissao(matriculaOferta.Usuario))
                    {
                        throw new AcademicoException("Usuário não possui permissão para essa oferta");
                    }

                    if (!divDataInscricao.Visible)
                    {
                        (new ManterMatriculaOferta()).VerificarPoliticaDeConsequencia(matriculaOferta);
                    }

                    SalvarMatriculaOferta(manterMatriculaOferta, matriculaOferta);

                    ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "myscript",
                                                        " $('#EdicaoNivel, #modal-background').removeClass('active');", true);

                    LimparCamposMatriculaAluno();

                    //Cadastrar Solucao Educacional com o SAS
                    var manterSEService = new ManterSolucaoEducacionalService();

                    if (matriculaOferta.Oferta.SolucaoEducacional.IntegracaoComSAS)
                    {
                        manterSEService.CadastrarSAS(matriculaOferta.Usuario, new BP.integracaoSAS.TreinamentoSasClient());
                    }

                    //Matricular Aluno no Moodle
                    manterSEService.MatricularAlunoMoodle(matriculaOferta.Usuario, matriculaOferta.Oferta);

                    WebFormHelper.ExibirMensagem(enumTipoMensagem.Sucesso, "Aluno cadastrado com sucesso.");
                }
            }
            catch (AcademicoException ex)
            {
                // Lógica para alteração de status quando o usuário for administrador ou gestor uc
                if (LupaUsuario.SelectedUser != null && (usuarioLogado.IsAdministrador() || usuarioLogado.IsGestor()))
                {
                    try
                    {
                        var matriculaOferta = ObterObjetoMatriculaOferta();


                        //Status
                        if (ddlStatus.SelectedItem != null && !string.IsNullOrWhiteSpace(ddlStatus.SelectedItem.Value))
                        {
                            if (ExisteComStatusRepetido((enumStatusMatricula)int.Parse(ddlStatus.SelectedItem.Value), matriculaOferta))
                            {
                                WebFormHelper.ExibirMensagem(enumTipoMensagem.Erro, "Não é possível inserir uma nova matrícula com o mesmo status");
                                return;
                            }
                        }

                        lblAvisoModalConfirmacaoInscricao.Text = ex.Message;
                        pnlModalConfirmacaoInscricao.Visible   = true;
                        return;
                    }
                    catch
                    {
                    }
                }

                WebFormHelper.ExibirMensagem(enumTipoMensagem.Erro, ex.Message);
                return;
            }
            catch (PoliticaConsequenciaException ex)
            {
                if (!IsAdminOrGestorUc)
                {
                    WebFormHelper.ExibirMensagem(enumTipoMensagem.Erro, ex.Message);
                    return;
                }

                lblAvisoModalConfirmacaoInscricao.Text = ex.Message;
                pnlModalConfirmacaoInscricao.Visible   = true;
            }
        }
        public void ddlTurma_OnSelectedIndexChanged(object sender, EventArgs e)
        {
            if (ddlTurma.SelectedIndex == 0)
            {
                return;
            }
            var idTurma     = Convert.ToInt32(ddlTurma.SelectedValue);
            var manterTurma = new ManterTurma();
            var turma       = manterTurma.ObterTurmaPorID(idTurma);

            if (turma == null)
            {
                WebFormHelper.ExibirMensagem(enumTipoMensagem.Erro, "Turma não encontrada.");
                return;
            }

            if (LupaUsuario.SelectedUser == null)
            {
                WebFormHelper.ExibirMensagem(enumTipoMensagem.Erro, "Selecione um Aluno");
                return;
            }
            var usuarioSelecionado = this.LupaUsuario.SelectedUser;


            //#3474 - Se o administrador ou gestor UC tentar cadastrar um aluno em uma turma já encerrada deve aparecer os status que são referentes a finalização da turma ou seja status referente a aprovação ou reprovação.
            //#839 - Inverter a logica de exibicao
            var ofertaAbertaParaInscricoes = !(IsAdminOrGestorUc && turma.Oferta.IsAbertaParaInscricoes());

            divDataInscricao.Visible = ofertaAbertaParaInscricoes;
            divDataConclusao.Visible = ofertaAbertaParaInscricoes;

            if (ofertaAbertaParaInscricoes)
            {
                txtDataInscricao.Text = turma.Oferta.DataFimInscricoes.HasValue ? turma.Oferta.DataFimInscricoes.Value.ToString("dd/MM/yyyy") : "";
                txtDataConclusao.Text = turma.DataFinal.HasValue ? turma.DataFinal.Value.ToString("dd/MM/yyyy") : "";
            }

            //#860 -  Se a Oferta possuir Fila de espera e a Quantidade de matriculas já alcancou o limite exibe somente o status de inscrever com Fila de Espera
            bool booFilaEspera = false;

            if (turma.Oferta.FiladeEspera)
            {
                // #1083 - Verifica restricoes de permissao levando em consideracao Perfil, Nivel Ocupacional, UF e Quantidade de Vagas.
                var permisaoMatricula = VerificarPermissaoMatricula(usuarioSelecionado, turma.Oferta);
                if (permisaoMatricula)
                {
                    if (turma.Oferta.DistribuicaoVagas == enumDistribuicaoVagasOferta.VagasPorUf)
                    {
                        if (!VerificarVagasDisponiveisUF(usuarioSelecionado, turma.Oferta))
                        {
                            booFilaEspera = true;
                        }
                    }
                    else
                    {
                        if (!VerificarVagasDisponiveis(turma.Oferta))
                        {
                            booFilaEspera = true;
                        }
                    }
                }
                else
                {
                    LimparCamposMatriculaAluno();
                }
            }
            PreencherComboStatus(ofertaAbertaParaInscricoes, booFilaEspera);
        }
        public DTORelatorioQuestionarioRespondente ObterRelatorioRespondente(DTOFiltroRelatorioQuestionario filtro)
        {
            if (!filtro.PossuiDados())
            {
                throw new AcademicoException("Não existem filtros para efetuar uma pesquisa.");
            }

            if (filtro.IsRelatorioTutor && filtro.IdTurma == null)
            {
                throw new AcademicoException("O campo \"Turma\" é obrigatório no relatório de tutor.");
            }

            if (filtro.IdQuestionario == 0)
            {
                throw new AcademicoException("Selecione um questionário.");
            }

            if (filtro.IdOferta != null && filtro.IdTurma == null)
            {
                throw new AcademicoException("O campo \"Turma\" é obrigatório.");
            }

            Questionario questionario;
            Turma        turma;

            if (filtro.IsRelatorioTutor)
            {
                var associacao = new ManterTurma().ObterTurmaPorID(filtro.IdTurma.Value)
                                 .ListaQuestionarioAssociacao.FirstOrDefault(
                    x =>
                    x.TipoQuestionarioAssociacao.ID == (int)enumTipoQuestionarioAssociacao.Pos &&
                    x.Questionario.TipoQuestionario.ID == (int)enumTipoQuestionario.Pesquisa);

                if (associacao == null)
                {
                    throw new AcademicoException("A turma selecionada não possui questionário pós de pesquisa.");
                }

                questionario = associacao.Questionario;
                turma        = associacao.Turma;
            }
            else
            {
                questionario = new ManterQuestionario().ObterQuestionarioPorID(filtro.IdQuestionario);
                if (filtro.IdTurma != null)
                {
                    turma = new ManterTurma().ObterTurmaPorID(filtro.IdTurma.Value);
                }
                else
                {
                    turma = new Turma();
                }
            }

            if (questionario == null)
            {
                throw new AcademicoException(
                          "Nenhum questionário foi encontrado. Se certifique que o questionário selecionado ainda está cadastrado.");
            }

            var listaItemQuestionario = questionario.ListaItemQuestionario.OrderBy(x => x.Ordem).ToList();

            // Se não houverem questões relacionadas ao questionário, não tem como emitir o relatório.
            if (!listaItemQuestionario.Any())
            {
                throw new AcademicoException("O questionário \"" + questionario.Nome +
                                             "\" não possui questões cadastradas, portanto não é possível emitir o relatório.");
            }

            List <DTORelatorioQuestionarioQuestao> questoes;

            var enunciados = ObterEnunciados(out questoes, listaItemQuestionario, questionario, turma);


            // Obter consulta do questionário, mas não enumera ainda.
            // You know what i see here? Possibilities...
            var consulta = new ManterQuestionarioParticipacao().ObterPorQuestionarioPorFiltro(filtro);

            // Retornar dados do relatório.
            return(new DTORelatorioQuestionarioRespondente
            {
                Enunciados = enunciados,
                Questoes = questoes,
                Consulta = consulta,
                TotalRespostas = consulta.Count(),
                TotalQuestoes = listaItemQuestionario.Count()
            });
        }