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.

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.

  • 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 Cadastrar Edital
  • RN06 - Se (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 (RN06) não se aplica.
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:

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 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”.

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 = '<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 = '<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;
  • desenvolvimento/especificacoes/arquitetura/servicos/timers/verificarmonitoriatimer.txt
  • Última modificação: 2017/04/03 18:10
  • (edição externa)