====== VerificarMonitoriaTimer ====== Esta classe é responsável por cancelar a convocação de discente que não responderam ao chamado em um periodo de um mês, por remoção de cotas de processos seletivos que estão ociosas e remoção de todas as cotas que tiveram o período de convocação expirado e não computou nenhuma convocação segundo os parâmetros do edital. Sendo assim enviando mensagens informativas para os discentes que tiveram a convocação cancelada e seus respectivos coordenadores e para qos coordenares dos projetos de monitoria que tiveram as bolsas do processo seletivo removidas. Para os processos seletivos expirados eles guardam as informações das bolsas que foram removidas num histórico não tendo necessidade de enviar e-mail para os responsáveis pelos os projetos. ===== Descrição do Caso de Uso ===== O timer cancela a convocação de discente que não responderam ao chamado num periodo de um mês. Sendo assim enviando mensagens informativas para os discentes que tiveram a convocação cancelada e seus respectivos coordenadores. Além de remover vagas ociosas de processos seletivos se nenhum discente for convocado em um período de um mês e removendo todas as vagas de processos seletivos de monitoria que tiveram seu período expirado e não computou nenhuma convocação. ===== Principais Regras de Negócio ===== * **RN01** - O processamento ocorre quando o discente tem o tipo de vínculo convocado e possui data de convocação anterior ao dia atual. * **RN02** - Os discentes só terão a convocação cancelada se a data de convocação ultrapassar o período de um mês. * **RN03** - Se o processo seletivo não tiver nenhuma convocação em um período de 2 meses as bolsas ociosas nesse caso devem voltar para o projeto. * **RN04** - A partir da data limite (data da aplicação da prova) de descrição da prova seleção terá uma validade para que os responsáveis pela prova convoquem os discentes para participar do projeto de monitoria. * **RN05** - A validade da prova seleção estará estipulada no edital descrito [[desenvolvimento:especificacoes:sigaa:monitoria:casos_de_uso:administracao:configurar_e_publicar_editais:cadastrar|Cadastrar Edital]] * **RN06** - Se ([[#Principais Regras de negócio|RN04]]) não for satisfeita as todas as vagas destinadas a prova seleção voltarão para o projeto de monitoria. * **RN07** - Se houver algum discente participando da prova, independentemente de haver convocação ou não a ([[#Principais Regras de negócio|RN06]]) não se aplica. ===== Classes Persistentes e Tabelas Envolvidas ===== ^ Classe ^ Tabela ^ | br.ufrn.sigaa.monitoria.dominio.DiscenteMonitoria | sigaa.monitoria.discente_monitoria | | br.ufrn.sigaa.monitoria.dominio.DiscenteMonitoria | sigaa.monitoria.prova_selecao | | br.ufrn.sigaa.monitoria.dominio.RegistroMovimentacaoCotas | sigaa.monitoria.registro_movimentacao_cotas | ====== Plano de Teste ====== Sistema: SIGAA Módulo: Monitoria Link(s): Usuário: Papel que usuário deve ter: ===== Cenários de Teste ===== Definir um tempo curto (sugiro 4 ou 5 minutos) para o timer e o servidor de testes como servidor de restrição de execução. O tempo é definido [[desenvolvimento:arquitetura:documentacao_desenvolvimento#criando_uma_classe_timer|diretamente no banco]]. Monitorar o e-mail de desenvolvimento (desenv@info.ufrn.br) por notificações aos usuários. Criar/Modificar alguns Discente Monitoria definindo datas de convocação entre a faixa de um mês e anterior a data de um mês. Com Tipos de Vinculos de monitoria variados focando em Situação "CONVOCADO" para analisar se o timer esta realmente mundando a Situação para "CONVOCADO MAS REJEITOU A MONITORIA". ===== Dados para o Teste ===== O seguinte SQL pega as informações necessárias para verificar a prova seleção. Exibe a quantidade de vagas do projeto entre NÃO REMUNERADAS E REMUNERADAS, a quantidade de discentes que ocupam as vagas do projeto e a data da ultima convocação com a diferença entre o meses comparando com a data do dia da consulta. SELECT ps.vagas_remuneradas, SUM(CASE WHEN (dm.id_tipo_vinculo_discente = 2) THEN 1 ELSE 0 END) AS remunerado, ps.vagas_nao_remuneradas, SUM(CASE WHEN (dm.id_tipo_vinculo_discente = 1) THEN 1 ELSE 0 END) AS nao_remunerado, to_char(AGE(now(), ( SELECT data_convocacao from monitoria.discente_monitoria where id_prova_selecao = 96814176 and data_convocacao is not null order by data_convocacao desc limit 1)), 'MM') as diferenca_meses, ( SELECT data_convocacao from monitoria.discente_monitoria where id_prova_selecao = '' and data_convocacao is not null order by data_convocacao desc limit 1) as ultima_convocacao FROM monitoria.discente_monitoria dm JOIN monitoria.prova_selecao ps on ( dm.id_prova_selecao = ps.id_prova_selecao ) WHERE dm.id_prova_selecao = '' AND dm.id_situacao_discente_monitoria = 5 group by ps.vagas_remuneradas, ps.vagas_nao_remuneradas'; Mostra todos os processos seletivos que possuem data da última convocação. SELECT ps.id_prova_selecao, ps.titulo, ps.data_limite_inscricao, ps.data_prova, ps.informacao_selecao, ps.data_cadastro, ps.ativo, ps.id_projeto_monitoria, ps.id_registro_entrada, ps.id_tipo_situacao_prova_selecao, ps.vagas_remuneradas, SUM(CASE WHEN (dm.id_tipo_vinculo_discente = 2) THEN 1 ELSE 0 END) AS remunerado, ps.vagas_nao_remuneradas, SUM(CASE WHEN (dm.id_tipo_vinculo_discente = 1) THEN 1 ELSE 0 END) AS nao_remunerado, to_char(AGE(now(), ( SELECT data_convocacao from monitoria.discente_monitoria where id_prova_selecao = dm.id_prova_selecao and data_convocacao is not null order by data_convocacao desc limit 1)), 'MM') as diferenca_meses, ( SELECT data_convocacao FROM monitoria.discente_monitoria WHERE id_prova_selecao = dm.id_prova_selecao and data_convocacao is not null order by data_convocacao desc limit 1) as ultima_convocacao FROM monitoria.discente_monitoria dm JOIN monitoria.prova_selecao ps on ( dm.id_prova_selecao = ps.id_prova_selecao ) WHERE dm.data_convocacao is not null and data_convocacao < 'Data Atual' group by ps.vagas_remuneradas, ps.vagas_nao_remuneradas, dm.id_prova_selecao, ps.id_prova_selecao Modifica os dias limites para validação da chamada da prova seleção. --SQL PARA MODIFICAR OS DIAS LIMITES PARA VALIDAR A PROVA SELEÇÃO UPDATE monitoria.edital_monitoria as em SET dias_limite= _NUMERO_DE_DIAS_ from monitoria.projeto_monitoria as pm join monitoria.prova_selecao as ps on (pm.id_projeto_monitoria=ps.id_projeto_monitoria) where ps.titulo ilike '%_NOME_PROVA_SELECAO_%' and em.id_edital_monitoria=pm.id_edital Modifica a data da prova seleção desejada. ---SQL PARA MODIFICAR A DATA DA PROVA SELEÇÃO update monitoria.prova_selecao as pm set data_prova = _DATA_PROVA_ where pm.titulo= '_TITULO_' Verificar se estão sendo registradas as vagas e provas seleção select ps.titulo,* from monitoria.registro_movimentacao_cotas as rmc join monitoria.prova_selecao as ps on (rmc.id_prova_selecao=ps.id_prova_selecao) Exibi todas as probas seleção que terão as vagas canceladas. --SQL PARA VISUALIZAR QUAIS PROVAS SELEÇÃO SERÃO ALTERADAS POR ESTAREM INATIVAS SEM CONVOCAÇÃO OU POR NÃO TER NENHUM DISCENTE QUE ASSUMIU SELECT ps.id_prova_selecao,pm.id_projeto_monitoria,em.id_edital_monitoria, ps.titulo, ps.data_limite_inscricao, (data_prova + dias_limite) as validade, ps.data_prova, ps.informacao_selecao, ps.data_cadastro, ps.ativo, ps.id_registro_entrada, ps.id_tipo_situacao_prova_selecao, ps.vagas_remuneradas,ps.vagas_nao_remuneradas, (AGE(now(),( SELECT (data_prova + dias_limite )from monitoria.prova_selecao as pss join monitoria.projeto_monitoria as pmm on (pmm.id_projeto_monitoria = pss.id_projeto_monitoria) join monitoria.edital_monitoria as emm on (pmm.id_edital= emm.id_edital_monitoria) where pss.id_prova_selecao = ps.id_prova_selecao and emm.dias_limite is not NULL and pss.data_limite_inscricao is not null order by pss.data_limite_inscricao desc limit 1)) >='0' )as tempo_aceitavel, (SELECT data_convocacao FROM monitoria.discente_monitoria WHERE id_prova_selecao = ps.id_prova_selecao and data_convocacao is not null order by data_convocacao desc limit 1) as ultima_convocacao from monitoria.prova_selecao as ps join monitoria.projeto_monitoria as pm on (pm.id_projeto_monitoria = ps.id_projeto_monitoria) join monitoria.edital_monitoria as em on (pm.id_edital= em.id_edital_monitoria) where em.dias_limite is not NULL and (ps.vagas_remuneradas>0 or ps.vagas_nao_remuneradas>0) and ((SELECT SUM(CASE WHEN (dm.id_tipo_vinculo_discente = 2) THEN 1 ELSE 0 END) AS remunerado FROM monitoria.discente_monitoria dm INNER JOIN monitoria.prova_selecao pse on ( dm.id_prova_selecao = pse.id_prova_selecao ) INNER JOIN monitoria.tipo_vinculo_discente tipoVinculo on ( dm.id_tipo_vinculo_discente = tipoVinculo.id_tipo_vinculo_discente ) INNER JOIN monitoria.situacao_discente_monitoria sdm on ( dm.id_situacao_discente_monitoria = sdm.id_situacao_discente_monitoria ) WHERE dm.id_prova_selecao = ps.id_prova_selecao AND (dm.id_situacao_discente_monitoria = 5 or dm.id_situacao_discente_monitoria = 11)) is NULL and (SELECT SUM(CASE WHEN (dm.id_tipo_vinculo_discente = 1) THEN 1 ELSE 0 END) AS nao_remunerado FROM monitoria.discente_monitoria dm INNER JOIN monitoria.prova_selecao pse on ( dm.id_prova_selecao = pse .id_prova_selecao ) INNER JOIN monitoria.tipo_vinculo_discente tipoVinculo on ( dm.id_tipo_vinculo_discente = tipoVinculo.id_tipo_vinculo_discente ) INNER JOIN monitoria.situacao_discente_monitoria sdm on ( dm.id_situacao_discente_monitoria = sdm.id_situacao_discente_monitoria ) WHERE dm.id_prova_selecao = ps.id_prova_selecao AND (dm.id_situacao_discente_monitoria = 5 or dm.id_situacao_discente_monitoria = 11)) is NULL ) and (AGE(now(),( SELECT (data_prova + dias_limite ) from monitoria.prova_selecao as pss join monitoria.projeto_monitoria as pmm on (pmm.id_projeto_monitoria = pss.id_projeto_monitoria) join monitoria.edital_monitoria as emm on (pmm.id_edital= emm.id_edital_monitoria) where pss.id_prova_selecao = ps.id_prova_selecao and emm.dias_limite is not NULL and pss.data_limite_inscricao is not null order by pss.data_limite_inscricao desc limit 1)) >='0' ) = TRUE order by data_limite_inscricao desc; Exibi a uma lista de provas que estão vencidas com o número de discentes que que estão convocados ou assumiram as vagas. --SQL PARA VISUALIZAR QUAIS PROVAS SELEÇÃO ESTÃO VENCIDAS COM O NÚMERO DE DISCENTES QUE OCUPAM AS BOLSAS COMO CONVOCADOS OU ASSUMIRAM SELECT ps.id_prova_selecao,pm.id_projeto_monitoria,em.id_edital_monitoria, ps.titulo, ps.data_limite_inscricao, (data_prova + dias_limite) as validade, ps.data_prova, ps.informacao_selecao, ps.data_cadastro, ps.ativo, ps.id_registro_entrada, ps.id_tipo_situacao_prova_selecao, ps.vagas_remuneradas,ps.vagas_nao_remuneradas, (AGE(now(),( SELECT (data_prova + dias_limite )from monitoria.prova_selecao as pss join monitoria.projeto_monitoria as pmm on (pmm.id_projeto_monitoria = pss.id_projeto_monitoria) join monitoria.edital_monitoria as emm on (pmm.id_edital= emm.id_edital_monitoria) where pss.id_prova_selecao = ps.id_prova_selecao and emm.dias_limite is not NULL and pss.data_limite_inscricao is not null order by pss.data_limite_inscricao desc limit 1)) >='0' )as tempo_aceitavel, (SELECT data_convocacao FROM monitoria.discente_monitoria WHERE id_prova_selecao = ps.id_prova_selecao and data_convocacao is not null order by data_convocacao desc limit 1) as ultima_convocacao, (SELECT SUM(CASE WHEN (dm.id_tipo_vinculo_discente = 2) THEN 1 ELSE 0 END) AS remunerado FROM monitoria.discente_monitoria dm INNER JOIN monitoria.prova_selecao pse on ( dm.id_prova_selecao = pse.id_prova_selecao ) INNER JOIN monitoria.tipo_vinculo_discente tipoVinculo on ( dm.id_tipo_vinculo_discente = tipoVinculo.id_tipo_vinculo_discente ) INNER JOIN monitoria.situacao_discente_monitoria sdm on ( dm.id_situacao_discente_monitoria = sdm.id_situacao_discente_monitoria ) WHERE dm.id_prova_selecao = ps.id_prova_selecao AND (dm.id_situacao_discente_monitoria = 5 or dm.id_situacao_discente_monitoria = 11)) as ocupacao_remunerada, (SELECT SUM(CASE WHEN (dm.id_tipo_vinculo_discente = 1) THEN 1 ELSE 0 END) AS nao_remunerado FROM monitoria.discente_monitoria dm INNER JOIN monitoria.prova_selecao pse on ( dm.id_prova_selecao = pse .id_prova_selecao ) INNER JOIN monitoria.tipo_vinculo_discente tipoVinculo on ( dm.id_tipo_vinculo_discente = tipoVinculo.id_tipo_vinculo_discente ) INNER JOIN monitoria.situacao_discente_monitoria sdm on ( dm.id_situacao_discente_monitoria = sdm.id_situacao_discente_monitoria ) WHERE dm.id_prova_selecao = ps.id_prova_selecao AND (dm.id_situacao_discente_monitoria = 5 or dm.id_situacao_discente_monitoria = 11)) as ocupacao_nao_remunerada from monitoria.prova_selecao as ps join monitoria.projeto_monitoria as pm on (pm.id_projeto_monitoria = ps.id_projeto_monitoria) join monitoria.edital_monitoria as em on (pm.id_edital= em.id_edital_monitoria) where em.dias_limite is not NULL and (ps.vagas_remuneradas>0 or ps.vagas_nao_remuneradas>0) and (AGE(now(),( SELECT (data_prova + dias_limite ) from monitoria.prova_selecao as pss join monitoria.projeto_monitoria as pmm on (pmm.id_projeto_monitoria = pss.id_projeto_monitoria) join monitoria.edital_monitoria as emm on (pmm.id_edital= emm.id_edital_monitoria) where pss.id_prova_selecao = ps.id_prova_selecao and emm.dias_limite is not NULL and pss.data_limite_inscricao is not null order by pss.data_limite_inscricao desc limit 1)) >='0' ) = TRUE order by data_limite_inscricao desc;