====== Notificação Acadêmica ====== Esse caso de uso é utilizado pelos administradores para cadastrar notificações para discentes, as notificações aparecerão para os discentes antes dele se logar. ===== Descrição do Caso de Uso ===== Este caso de uso inicia quando o usuário acessa a opção: //SIGAA -> Área Administrativa -> Administração -> Administração -> Notificar Acadêmica//. Ao acessar o caso de uso o sistema exibe uma lista com os seguintes dados: * **__Descrição__**: Tipo - TEXTO. * **__Ano-Período__**: Tipo - SELECT ITENS. * **__Exige Confirmação__**: Tipo - TEXTO. O sistema disponibiliza as seguintes opções: * //Cadastrar//: esta opção permite que o usuário cadastre os dados da notificação. * //Alterar//: esta opção permite que o usuário alterar os dados da notificação. * //Remover//: esta opção permite que o usuário remover a notificação. * //Simular Visualização pelo Discente// * //Listar Destinatários//: esta operação mostra a lista dos destinatários de uma determinada notificação. A baixo da lista também existe o botão de notificar os discentes. * //Notificar//: Esta opção envia o docente para a tela de confirmação da notificação ===Fluxo Alternativo 1 - Cadastrar=== Ao escolher essa opção o usuário é levado para a página onde deverá informar os dados referentes ao [[desenvolvimento:especificacoes:sigaa:area_administrativa:casos_de_uso:administracao:administracao:notificacao_academica:cadastrar|cadastro da notificação]]. ===Fluxo Alternativo 2 - Alterar=== O usuário é redirecionado para a tela de cadastro da notificação explicada acima, com a diferença que os dados previamente informados são mostrados. ===Fluxo Alternativo 3 - Remover=== O sistema realiza a remoção da notificação listada. ===Fluxo Alternativo 4 - Simular Visualização pelo Discente=== A tela da notificação é mostrada, onde são apresentados o texto de notificação e os dados a serem informados pelo discente. ===Fluxo Alternativo 5 - Listar Destinatários=== São listados os destinatários referentes àquela notificação. A lista mostra os seguintes dados: * **__Matrícula__**: Tipo - NUMÉRICO. * **__Discentes__**: Tipo - TEXTO. * **__Curso / Município__**: Tipo - TEXTO. ===Fluxo Alternativo 6 - Notificar=== Após clicar em Notificar o sistema exibe as notificações selecionadas * Lista de Notificações Selecionadas * **__Descrição__**: Tipo - TEXTO. (Ao lado da descrição é exibido o total de discentes que serão notificados) * **__Ano-Período__**: Tipo - SELECT ITENS. * **__Exige Confirmação__**: Tipo - TEXTO. * **__Total de Discentes__**: Tipo - INTEIRO. Ao lado da descrição será mostrado a opção de "Listar Destinatários", com os dados já mostrados anteriormente. Ao clicar nesta opção serão exibidos os discentes que serão notificados. * //Confirmar//: Esta opção envia as notificações para os alunos ===== Principais Regras de Negócio ===== * **RN01**: Caso o usuário remova uma notificação no qual ele já enviou para os discentes, as mensagens de notificações dos discentes que já foram enviadas não são removidas. * **RN02**: Caso o usuário altere uma notificação no qual ele já enviou para os discentes, as mensagens de notificações dos discentes que já foram enviadas não são alteradas. * **RN03**: Caso a notificação seja cadastrada com suporte a ano e período de referência, será possível escolher o ano e o período da notificação acadêmica na tela de envio de noificação. ==== Resoluções/Legislações Associadas ==== Não se aplica. ===== Classes Persistentes e Tabelas Envolvidas ===== ^ Classe ^ Tabela | | br.ufrn.sigaa.ensino.dominio.NotificacaoAcademica | sigaa.academico.ensino.notificacao_academica | | br.ufrn.sigaa.ensino.dominio.NotificacaoAcademicaDiscente | sigaa.academico.ensino.notificacao_academica_discente | ====== Plano de Teste ====== Sistema: SIGAA Módulo: Área Administrativa Link(s): Área Administrativa -> Administração -> Notificação Acadêmica Usuários: freddcs, wendell Papel que usuário deve ter: SigaaPapeis.ADMINISTRADOR ===== Cenários de Teste ===== Cadastrar uma notificação acadêmica, notificar e verificar se os discentes que foram notificados receberam a notificação corretamente. ===== Dados para o Teste ===== -- Seleciona discentes com prazo de conclusão em 2012.1 select d.id_discente , d.prazo_conclusao from discente d where d.status = 1 and d.prazo_conclusao = 20121 -- Seleciona discentes que não foram aprovados em 2011.1 select d.id_discente from discente d join ensino.movimentacao_aluno m using (id_discente) where d.nivel = 'G' and (d.ano_ingresso < 2011 or (d.ano_ingresso = 2011 and d.periodo_ingresso = 1)) and d.prazo_conclusao <= 20111 and m.ano_referencia = 2011 and m.periodo_referencia = 1 and m.id_tipo_movimentacao_aluno not in (101,1) and d.id_discente not in ( select d.id_discente from discente d inner join ensino.matricula_componente m on m.id_discente = d.id_discente where m.id_situacao_matricula in (4) and m.ano = 2011 and m.periodo = 1 group by d.id_discente ) -- Seleciona discentes que não se matricularam em 2011.1 select d.id_discente from discente d join ensino.movimentacao_aluno m using (id_discente) where d.nivel = 'G' and (d.ano_ingresso < 2011 or (d.ano_ingresso = 2011 and d.periodo_ingresso = 1)) and d.prazo_conclusao <= 20111 and m.ano_referencia = 2011 and m.periodo_referencia = 1 and m.id_tipo_movimentacao_aluno not in (101,1) and d.id_discente not in ( select m.id_discente from ensino.matricula_componente m where m.ano = 2011 and m.periodo = 1 group by m.id_discente ) -- Seleciona discentes que serão jubilados em 2011.1 ( SELECT d.id_discente FROM discente d INNER JOIN graduacao.discente_graduacao dg ON d.id_discente = dg.id_discente_graduacao INNER JOIN comum.pessoa p ON d.id_pessoa = p.id_pessoa JOIN curso c ON d.id_curso = c.id_curso WHERE d.ano_ingresso || '' || d.periodo_ingresso < '20112' AND d.status in ( 1,8 ) AND d.nivel = 'G' AND c.nivel = 'G' AND c.id_convenio is null AND c.id_modalidade_educacao = 2 AND not exists ( select me.id_mobilidade_estudantil from ensino.mobilidade_estudantil me where me.id_discente = d.id_discente and ( (20111 between soma_semestres(ano,periodo,0) and soma_semestres(ano,periodo,numero_periodos-1)) )) AND not exists ( select id_movimentacao_aluno from ensino.movimentacao_aluno ma where ma.id_discente = d.id_discente and ma.id_tipo_movimentacao_aluno = 101 and ( (ma.ano_referencia =2011 and ma.periodo_referencia =1) )) AND not exists ( select mc.id_matricula_componente from ensino.matricula_componente mc where mc.id_discente = d.id_discente and ( (mc.ano=2011 and mc.periodo=1) )) ) UNION ( SELECT d.id_discente FROM discente d INNER JOIN graduacao.discente_graduacao dg ON d.id_discente = dg.id_discente_graduacao INNER JOIN comum.pessoa p ON d.id_pessoa = p.id_pessoa JOIN curso c ON d.id_curso = c.id_curso WHERE d.ano_ingresso || '' || d.periodo_ingresso < '20112' AND d.status in ( 1,8 ) AND d.nivel = 'G' AND c.nivel = 'G' AND c.id_convenio is null AND c.id_modalidade_educacao = 2 AND not exists ( select me.id_mobilidade_estudantil from ensino.mobilidade_estudantil me where me.id_discente = d.id_discente and ( (20111 between soma_semestres(ano,periodo,0) and soma_semestres(ano,periodo,numero_periodos-1)) )) AND not exists ( select id_movimentacao_aluno from ensino.movimentacao_aluno ma where ma.id_discente = d.id_discente and ma.id_tipo_movimentacao_aluno = 101 and ( (ma.ano_referencia =2011 and ma.periodo_referencia =1) )) AND exists ( select mc.id_matricula_componente from ensino.matricula_componente mc join ensino.situacao_matricula sm ON sm.id_situacao_matricula = mc.id_situacao_matricula where mc.id_discente = d.id_discente and mc.id_situacao_matricula NOT IN ( 2,4 ) and not exists ( select id_matricula_componente from ensino.matricula_componente where id_discente = d.id_discente and id_situacao_matricula IN ( 2,4 ) and ( (ano = 2011 and periodo = 1) )) and sm.matricula_valida_no_semestre = trueValue() and ( (mc.ano = 2011 and mc.periodo = 1) )) ) -- SQL com ano e período de referência. select id_discente from discente d where nivel = 'G' and d.status in (1,8) and d.id_curso is not null and (ano_ingresso < 2012 or (ano_ingresso = :anoReferencia and periodo_ingresso <= :periodoReferencia)) and id_discente not in (select distinct id_discente from ensino.matricula_componente join ensino.situacao_matricula sm using(id_situacao_matricula) where ano = :anoReferencia and periodo = :periodoReferencia and sm.ativo and sm.matricula_valida_no_semestre)