Requisitos - renatoln/CES-mobile GitHub Wiki

[Home]

Requisitos Funcionais

  • Mobile
    • Solicitar Retirada
    • Solicitar Devolução
    • Transferir objeto
    • Confirmar transferência
    • Reservar objeto
    • Atualizar perfil
    • Recebimento de Mensagem com movimentações realizadas
  • Web Admin
    • Cadastrar usuário
    • Cadastrar tipo objeto
    • Cadastrar objeto
    • Cadastrar perfil usuário
    • Cadastrar admin web
    • Adicionar permissão Objeto x perfil de usuário
    • Adicionar permissão Objeto x Usuário
  • Web Publico
    • Confirmar Retirada
    • Confirmar Devolução
    • Reservar objeto
    • Relatórios diversos

Detalhes de implementação

sobre operações Retirada, Devolução e Transferência

para quase tudo na aplicação, existe uma requisição que precisa de uma resposta de um outro usuário (seja na web, seja no mobile). para controlar isso, deve ser criado um status na movimentação

  • retirada: usuário do mobile faz uma solicitação de retirada; abre uma nova movimentação e atualizada Data 'Retirada' com a data atual; seta o atributo status para 'solicitado retirada'; a app deve informar de alguma forma que a solicitação está em andamento; o módulo web deve confirmar; atualiza a movimentação com Data 'Retirada' para data atual; seta o atributo status para 'Emprestado';
  • Devolução: usuário do mobile faz uma solicitação de devolução; abre uma nova movimentação e atualizada Data 'Devolução' com a data atual; seta o atributo status para 'Solicitado Devolução'; a app deve informar de alguma forma que a solicitação está em andamento; o módulo web deve confirmar; atualiza a movimentação com Data 'Devolucao' para data atual; seta o atributo status para 'Devolvido';
  • Transferência: usuário do mobile faz uma solicitação de transferência de um objeto; informa qual o usuário destino; atualiza movimentação com status para 'Solicitado Transferência'; a app deve informar de alguma forma que a solicitação está em andamento; o usuário destino confirma transferência; atualiza a movimentação com Data 'Devolucao' para data atual; seta o atributo status para 'Devolvido'; abre uma nova movimentação, com usuário destino, e status para 'Emprestado'
  • Reserva: usuário solicita uma reserva de um objeto informando data de Retirada e Data de Devolução. Deve ser verificado se o objeto está disponível no período.

status da movimentação

1 - Solicitado retirada (Atualiza data Retirada)

2 - Emprestado (Atualiza data Retirada)

3 - Solicitado Devolução

4 - Devolvido (Atualiza data Devolução)

5 - Solicitado Transferência (para usuário origem)

6 - Transferencia pendente (para o usuário destino)

7 - Transferência confirmada (Atualiza data Devolução)

8 - Reservado (Atualiza data Reserva)

Importante: quem muda o status para os valores 2, 4, e 6 é a aplicação web, então não precisamos nos preocupar em atualizar isso do lado mobile. Entretanto, a app precisa entender esses diferentes status para poder mostrar isso para o usuário. Exemplo: o usuário vai solicitar uma retirada, então deve ser enviado a requisição para o servidor rest específico. o status muda para 1, a data de retirada é atualizada. A aplicação web vai confirmar a retirada, mudando status para 2, e atualizando a data retirada. A gente não vai precisar fazer essa parte da web, para testar no mobile, basta mudar o status. Quando o status for diferente deve mostrar algo diferente na APP

Detalhes dos principais serviços REST

=========

Solicitar um objeto:

  1. Verificar se o Objeto.status está disponível
  2. Se tiver, verificar se tem alguma reserva naquele horário (se (Movimentacao.status == 8 AND (datahoraAtual BETWEEN [Movimentacao.reserva, Movimentacao.reserva + 10 min])))
  3. Se ok, abrir uma nova movimentação. Setar Movimentacao.Retirada = datahoraAtual e Movimentacao.status = 1 (solicitado). Setar Objeto.status = 2 (pendente)

Para confirmar a retirada, do lado do Admin-WEB (confirmação):

  1. Mudar Movimentacao.status = 2 (retirado)
  2. Mudar Objeto.status = 3 (indisponível)

=========

Solicitar devolução:

  1. Alterar a data Movimentacao.Devolucao
  2. Mudar Movimentacao.status = 3 (solicitada devolução)

Para confirmar a devolução, do lado do Admin-WEB (confirmação):

  1. Mudar Movimentacao.status = 4 (devolvido)
  2. Mudar Objeto.status = 1 (disponível)

=========

Transferência de um objeto:

  1. Verificar se tem uma reserva naquele horário (se (Movimentacao.status == 8 AND (datahoraAtual BETWEEN [Movimentacao.reserva, Movimentacao.reserva + 10 min]) AND Movimentacao.usuario_id != UsuarioDestino)) Se ok...
  2. Mudar Movimentação origem (status = 5 (solicitado transferência))
  3. criar uma Movimentação com os dados do usuário destino (Setar Movimentacao.Retirada, Movimentacao.status = 6 (transferência pendente))
  4. Criar uma transferência com o id_movimentacao da origem e do destino

=========

Confirmação de transferência (após o Usuario Destino do mobile confirmar)

  1. Fechar movimentação do usuário origem, status 7 e data de devolução
  2. Muda o status da movimentação de destino para emprestado

=========

Cancelar transferência:

  1. Remover o registro de transferência
  2. Deletar a movimentação do usuário destino
  3. Retornar a movimentação de origem para o status anterior (emprestado), remover data de devolução

=========

Solicitar reserva:

  1. Verificar se o objeto esta disponível, ou se tem alguma reserva naquele horário (com status 8)
  2. Criar uma movimentação com o status 8, data da retirada