====== Módulo de Circulação (Desktop) ====== As operações básicas da biblioteca precisam utilizar periféricos do computador, como impressora e leitor de digitais. Isto não é possível através de um sistema web. Por isso, a solução adotada para o módulo de circulação foi desenvolver um programa desktop. Para se comunicar com o servidor, o programa utiliza Spring Remoting através de uma servlet criada no Sigaa (httpCirculacaoController). ===== Descrição do Caso de Uso ===== Após efetuar o login, será exibida a tela principal do módulo de circulação desktop. O operador inicia um dos casos de uso. A especificação de cada um deles segue abaixo. Para as operações de realizar e renovar empréstimos é necessário realizar uma busca pelo usuário da biblioteca. Esta pode ser feita indicando-se o nome, o cpf, a matrícula ou o siape do mesmo. Neste módulo desktop estão disponíveis as seguintes opções para o usuário: * [[desenvolvimento:especificacoes:sigaa:biblioteca:casos_de_uso:desktop:configurar_impressora|Configurar Impressora]] * [[desenvolvimento:especificacoes:sigaa:biblioteca:casos_de_uso:desktop:realizar_emprestimo|Realizar Empréstimo]] * [[desenvolvimento:especificacoes:sigaa:biblioteca:casos_de_uso:desktop:renovar_emprestimo|Renovar Empréstimo]] * [[desenvolvimento:especificacoes:sigaa:biblioteca:casos_de_uso:desktop:devolver_emprestimo|Devolver Empréstimo]] * [[desenvolvimento:especificacoes:sigaa:biblioteca:casos_de_uso:desktop:realizar_checkout|Checkout de Materiais]] ===== Principais Regras de Negócio ===== Caso o usuário possua mais de um vínculo com a universidade, na busca (seja pela matrícula, siape, cpf ou pelo nome) o vínculo com mais permissões deve ser retornado. A hierarquia para os tipos de usuários é executada da seguinte maneira: - Docente / Docente Externo - Discente de Pós-graduação - Servidor Técnico-administrativo / Discente de Graduação / Usuário Externo - Discente de nível técnico / médio Se um discente for especial e não for de mobilidade estudantil, este não poderá realizar empréstimos. * Alunos especiais são aqueles que não têm vínculo com o curso; * Alunos de mobilidade estudantil são aqueles que vieram de outra universidade. Se um usuário não tiver mais um vínculo ativo com a instituição, este deve aparecer na consulta mas não pode realizar ou renovar empréstimos. ===== Classes Persistentes e Tabelas Envolvidas ===== ^ Classe ^ Tabela | | br.ufrn.sigaa.biblioteca.processos_tecnicos.dominio.UsuarioBiblioteca | sigaa.biblioteca.usuario_biblioteca | ====== Plano de Teste ====== Este módulo é um programa desktop. Portanto, não há um link específico para ele. Papéis: SigaaPapeis.BIBLIOTECA_SETOR_CIRCULACAO_BIBLIOTECARIO, SigaaPapeis.BIBLIOTECA_SETOR_CIRCULACAO ou SigaaPapeis.BIBLIOTECA_SETOR_CIRCULACAO_CHECKOUT Usuários: [[desenvolvimento:especificacoes:sigaa:biblioteca:usuarios]] ===== Cenários de Teste ===== - Buscar por usuários que possuam mais de um vínculo e verificar se as buscas por nome e matrícula estão retornando os vínculos corretos, de acordo com a hierarquia citada nas regras de negócio. ===== Dados para o Teste ===== Utilizar o seguinte código SQL para verificar os resultados encontrados. select ub.id_usuario_biblioteca, p.cpf_cnpj, p.nome, p.data_nascimento, d.id_discente, d.matricula, d.nivel, null as id_servidor,null as siape, null as id_categoria, p.id_pessoa, d.tipo as tipo_discente, fi.mobilidade_estudantil, 0 as id_docente_externo from biblioteca.usuario_biblioteca ub join pessoa p on p.id_pessoa = ub.id_pessoa join discente d on d.id_pessoa = p.id_pessoa and d.status in (1, 8, 9) and (p.nome_ascii ilike '%victor hugo de carvalho fernandes%' or p.cpf_cnpj = 0 or d.matricula = 0) left join ensino.forma_ingresso fi on fi.id_forma_ingresso = d.id_forma_ingresso where ub.ativo = trueValue() union all select ub.id_usuario_biblioteca, p.cpf_cnpj, p.nome, p.data_nascimento, null as id_discente, null as matricula, null as nivel, s.id_servidor, s.siape, s.id_categoria, p.id_pessoa, null as tipo_discente, null as mobilidade_estudantil, 0 as id_docente_externo from biblioteca.usuario_biblioteca ub join pessoa p on p.id_pessoa = ub.id_pessoa join rh.servidor s on s.id_pessoa = p.id_pessoa and s.id_ativo in (1, 2, 9) and (p.nome_ascii ilike '%victor hugo de carvalho fernandes%' or p.cpf_cnpj = 0 or s.siape = 0) where ub.ativo = trueValue() union all select ub.id_usuario_biblioteca, p.cpf_cnpj, p.nome, p.data_nascimento, null as id_discente, null as matricula, null as nivel, null as id_servidor, null as siape, null as id_categoria, p.id_pessoa, null as tipo_discente, null as mobilidade_estudantil, 0 as id_docente_externo from biblioteca.usuario_biblioteca ub join biblioteca.usuario_externo_biblioteca ue on ue.id_usuario_externo_biblioteca = ub.id_usuario_externo_biblioteca join pessoa p on p.id_pessoa = ue.id_pessoa and (p.nome_ascii ilike '%victor hugo de carvalho fernandes%' or p.cpf_cnpj = 0 ) where ub.ativo = trueValue() union all select ub.id_usuario_biblioteca, p.cpf_cnpj, p.nome, p.data_nascimento, null as id_discente, null as matricula, null as nivel, null as id_servidor, null as siape, null as id_categoria, p.id_pessoa, null as tipo_discente, null as mobilidade_estudantil, de.id_docente_externo from biblioteca.usuario_biblioteca ub join pessoa p on p.id_pessoa = ub.id_pessoa join ensino.docente_externo de on de.id_pessoa = p.id_pessoa and de.ativo = trueValue() and de.matricula is not null and (p.nome_ascii ilike '%victor hugo de carvalho fernandes%' or p.cpf_cnpj = 0) where ub.ativo = trueValue() order by 3 [[desenvolvimento:especificacoes:sigaa:biblioteca:principal | << Voltar - Módulo da Biblioteca]]