Implementar um sistema para coletar as presenças de eventos on-line através da inserção do código de confirmação.
O código de confirmação é gerado na criação do evento e armazenado no BD.
Apesar do código poder ser repassado entre os alunos por mensagem, por exemplo, não é necessário implementar nenhuma segurança, como códigos únicos ou temporários.
[ ] Se a função CompareUserdataVersion() não redirecionar o usuário para a página de registro (faça a verificação. Será que usa promises?), execute uma função para verificar as pendências de presença:
[ ] Para cada elemento do array "attendance", verifique a partir do UID se data do início da coleta de presença < agora e que data do fim da coleta de presença === undefined/null.
[ ] Se um UID tiver essas condições, redirecione o usuário para a página de coleta de presença.
[ ] Se você encontrar uma data final definida, remova o UID do array. A coleta de presença já encerrou.
[ ] Pode ser que dois eventos estejam com coleta de presença abertas ao mesmo tempo. Se conseguir, trate esta situação.
Página para inserção
[ ] Ao abrir a página, o campo do 1º caractere deve ser selecionado e o teclado do celular deve abrir sozinho.
[ ] Após digitar um caractere, o focus deve avançar para o próximo campo, para que o próximo caractere possa ser digitado.
[ ] Ao digitar o último caractere, o teclado NÃO deve ser fechado. Se todos os caracteres foram digitados deve ocorrer a validação do código inserido.
[ ] Se for válido, fechar teclado, apresentar swal de confirmação e fechar a página, tudo automaticamente
[ ] Se for inválido, alterar a cor das linhas, caracteres e "insira o código" para vermelho. Quando o usuário alterar um caractere, realize a verificação novamente.
Escrevendo no BD
Note: Regra no BD
Se o evento tem coleta de presença on-line, permita que o usuário escreva o campo time no seu próprio documento na lista de presenças.
Após a validação do código, verifique se o usuário está inscrito e é pagante.
[ ] Se sim, escreva o campo time com a hora atual em:
events/UIDevento/attendance/UIDusuário
[ ] Além disso, remova o UID do evento do array attendance, no campo pending em:
users/UIDusuario
"pending": {
"attendance": ["UID1", "UID2"]
}
[ ] Se não, apresente uma mensagem de erro que exige que o botão "ok" seja pressionado e redirecione o usuário ao menu.
Não há motivação para coletar a presença on-line de quem não está inscrito
Extra
Pode ser feito após a SECOMPP
[ ] Coletar a presença através da leitura de um QR Code
event:UIDEvento:código
Redireciona para a página, preenche os campos sozinho e valida a presença
Implementar um sistema para coletar as presenças de eventos on-line através da inserção do código de confirmação. O código de confirmação é gerado na criação do evento e armazenado no BD.
Apesar do código poder ser repassado entre os alunos por mensagem, por exemplo, não é necessário implementar nenhuma segurança, como códigos únicos ou temporários.
Redirecionando o usuário
Considere a seguinte estrutura:
Quando o usuário faz login ou abre o aplicativo já logado, o seguinte código é executado: https://github.com/cacic-fct/fct-app/blob/404391bc11ac9742c5288c16fc4d7592cf174f5c/src/app/shared/services/auth.service.ts#L31-L35
[ ] Se a função
CompareUserdataVersion()
não redirecionar o usuário para a página de registro (faça a verificação. Será que usa promises?), execute uma função para verificar as pendências de presença:[ ] Para cada elemento do array "attendance", verifique a partir do UID se
data do início da coleta de presença < agora
e quedata do fim da coleta de presença === undefined/null
.[ ] Se um UID tiver essas condições, redirecione o usuário para a página de coleta de presença.
[ ] Se você encontrar uma data final definida, remova o UID do array. A coleta de presença já encerrou.
[ ] Pode ser que dois eventos estejam com coleta de presença abertas ao mesmo tempo. Se conseguir, trate esta situação.
Página para inserção
[ ] Ao abrir a página, o campo do 1º caractere deve ser selecionado e o teclado do celular deve abrir sozinho.
[ ] Após digitar um caractere, o focus deve avançar para o próximo campo, para que o próximo caractere possa ser digitado.
[ ] Ao digitar o último caractere, o teclado NÃO deve ser fechado. Se todos os caracteres foram digitados deve ocorrer a validação do código inserido.
swal
de confirmação e fechar a página, tudo automaticamenteEscrevendo no BD
Após a validação do código, verifique se o usuário está inscrito e é pagante.
[ ] Se sim, escreva o campo
time
com a hora atual em:events/UIDevento/attendance/UIDusuário
[ ] Além disso, remova o UID do evento do array attendance, no campo pending em:
users/UIDusuario
Extra
event:UIDEvento:código
Redireciona para a página, preenche os campos sozinho e valida a presença