Commit deaa9f2590782af169f779d76597df9e50f77ec3
1 parent
b9318463
Exists in
master
and in
1 other branch
Valida interessados do processo
Criada a validação dos interessados no processo, para evitar a criação de interessados temporários. Também foram adicionadas as criticas para ausência de interessados e para alguns dados que não podem ser nulos. OTRS - 2018091720002004
Showing
8 changed files
with
121 additions
and
5 deletions
Show diff stats
src/main/java/br/gov/ans/integracao/sei/dao/ContatoDAO.java
| 1 | 1 | package br.gov.ans.integracao.sei.dao; |
| 2 | 2 | |
| 3 | +import java.util.List; | |
| 4 | + | |
| 3 | 5 | import javax.persistence.EntityManager; |
| 4 | 6 | import javax.persistence.PersistenceContext; |
| 5 | 7 | import javax.persistence.PersistenceContextType; |
| ... | ... | @@ -26,4 +28,12 @@ public class ContatoDAO { |
| 26 | 28 | |
| 27 | 29 | return (Contato) query.getSingleResult(); |
| 28 | 30 | } |
| 31 | + | |
| 32 | + public List<Contato> getContatosNaoTemporariosPelaSigla(String sigla){ | |
| 33 | + Query query = em.createNamedQuery("Contato.pesquisarPorSigla",Contato.class); | |
| 34 | + | |
| 35 | + query.setParameter("sigla", sigla); | |
| 36 | + | |
| 37 | + return query.getResultList(); | |
| 38 | + } | |
| 29 | 39 | } | ... | ... |
src/main/java/br/gov/ans/integracao/sei/modelo/Contato.java
| ... | ... | @@ -17,7 +17,8 @@ import org.codehaus.jackson.map.annotate.JsonSerialize; |
| 17 | 17 | @Entity |
| 18 | 18 | @Table(name="contato") |
| 19 | 19 | @NamedQueries({@NamedQuery(name="Contato.pesquisarPorID", query="select c from Contato c where c.id = :id"), |
| 20 | - @NamedQuery(name="Contato.pesquisarPorSigla", query="select c from Contato c where c.sigla = :sigla")}) | |
| 20 | + @NamedQuery(name="Contato.pesquisarPorSigla", query="select c from Contato c where c.sigla = :sigla"), | |
| 21 | + @NamedQuery(name="Contato.pesquisarNaoTemporariosPorSigla", query="select c from Contato c where c.sigla = :sigla and tipo != 4 order by id desc")}) | |
| 21 | 22 | public class Contato{ |
| 22 | 23 | |
| 23 | 24 | @Id | ... | ... |
src/main/java/br/gov/ans/integracao/sei/rest/ProcessoResource.java
| ... | ... | @@ -63,6 +63,7 @@ import br.gov.ans.integracao.sei.modelo.ProcessoResumido; |
| 63 | 63 | import br.gov.ans.integracao.sei.modelo.ResultadoConsultaProcesso; |
| 64 | 64 | import br.gov.ans.integracao.sei.modelo.SobrestamentoProcesso; |
| 65 | 65 | import br.gov.ans.integracao.sei.utils.Constantes; |
| 66 | +import br.gov.ans.integracao.sei.utils.ProcessoHelper; | |
| 66 | 67 | import br.gov.ans.integracao.sipar.dao.DocumentoSipar; |
| 67 | 68 | import br.gov.ans.utils.MessageUtils; |
| 68 | 69 | |
| ... | ... | @@ -92,6 +93,9 @@ public class ProcessoResource { |
| 92 | 93 | private MessageUtils messages; |
| 93 | 94 | |
| 94 | 95 | @Inject |
| 96 | + private ProcessoHelper processoHelper; | |
| 97 | + | |
| 98 | + @Inject | |
| 95 | 99 | private Logger logger; |
| 96 | 100 | |
| 97 | 101 | @Context |
| ... | ... | @@ -555,11 +559,13 @@ public class ProcessoResource { |
| 555 | 559 | @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) |
| 556 | 560 | @Consumes({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) |
| 557 | 561 | public Response abrirProcesso(@PathParam("unidade") String unidade, @QueryParam("auto-formatacao") String autoFormatar, NovoProcesso processo) throws RemoteException, Exception{ |
| 562 | + processoHelper.validarNovoProcesso(processo); | |
| 563 | + | |
| 558 | 564 | if(StringUtils.isNotBlank(processo.getDadosProcesso().getNumeroProtocolo()) && isAutoFormatar(autoFormatar)){ |
| 559 | 565 | String numeroFormatado = formatarNumeroProcesso(processo.getDadosProcesso().getNumeroProtocolo()); |
| 560 | 566 | processo.getDadosProcesso().setNumeroProtocolo(numeroFormatado); |
| 561 | 567 | } |
| 562 | - | |
| 568 | + | |
| 563 | 569 | RetornoGeracaoProcedimento retorno = seiNativeService.gerarProcedimento(Constantes.SEI_BROKER, Operacao.ABRIR_PROCESSO, unidadeResource.consultarCodigo(unidade), processo.getDadosProcesso(), processo.getDocumentos(), |
| 564 | 570 | processo.getProcessosRelacionados(), unidadeResource.buscarCodigoUnidades(processo.getUnidadesDestino()), getSOuN(processo.isManterAbertoOrigem()), |
| 565 | 571 | getSOuN(processo.isEnviarEmailNotificacao()), formatarData(processo.getDataRetornoProgramado()), (processo.getQtdDiasAteRetorno() != null ? processo.getQtdDiasAteRetorno().toString() : null), getSOuN(processo.isSomenteDiasUteis()), | ... | ... |
src/main/java/br/gov/ans/integracao/sei/utils/ContatoHelper.java
| ... | ... | @@ -6,6 +6,7 @@ import static br.gov.ans.integracao.sei.utils.Constantes.SIM; |
| 6 | 6 | import static br.gov.ans.integracao.sei.utils.Util.getSOuN; |
| 7 | 7 | |
| 8 | 8 | import java.rmi.RemoteException; |
| 9 | +import java.util.List; | |
| 9 | 10 | |
| 10 | 11 | import javax.inject.Inject; |
| 11 | 12 | |
| ... | ... | @@ -122,11 +123,23 @@ public class ContatoHelper { |
| 122 | 123 | } |
| 123 | 124 | } |
| 124 | 125 | } |
| 125 | - | |
| 126 | + | |
| 127 | + public br.gov.ans.integracao.sei.modelo.Contato getContatoNaoTemporarioMaisAntigo(String sigla){ | |
| 128 | + List<br.gov.ans.integracao.sei.modelo.Contato> contatosNaoTemporariosPelaSigla = contatoDAO.getContatosNaoTemporariosPelaSigla(sigla); | |
| 129 | + | |
| 130 | + return contatosNaoTemporariosPelaSigla.get(0); | |
| 131 | + } | |
| 132 | + | |
| 126 | 133 | public void preencherIdContato(Contato contato, String sigla){ |
| 127 | 134 | contato.setIdContato(getIdContato(sigla)+""); |
| 128 | 135 | } |
| 129 | 136 | |
| 137 | + public Boolean isContatoCadastradoComoNaoTemporario(String sigla){ | |
| 138 | + List<br.gov.ans.integracao.sei.modelo.Contato> contatosNaoTemporariosPelaSigla = contatoDAO.getContatosNaoTemporariosPelaSigla(sigla); | |
| 139 | + | |
| 140 | + return !contatosNaoTemporariosPelaSigla.isEmpty(); | |
| 141 | + } | |
| 142 | + | |
| 130 | 143 | private Integer getIdContato(String sigla){ |
| 131 | 144 | return contatoDAO.getContatoPelaSigla(sigla).getId(); |
| 132 | 145 | } | ... | ... |
src/main/java/br/gov/ans/integracao/sei/utils/InteressadoHelper.java
0 → 100644
| ... | ... | @@ -0,0 +1,45 @@ |
| 1 | +package br.gov.ans.integracao.sei.utils; | |
| 2 | + | |
| 3 | +import javax.inject.Inject; | |
| 4 | + | |
| 5 | +import br.gov.ans.integracao.sei.client.Interessado; | |
| 6 | +import br.gov.ans.integracao.sei.modelo.Contato; | |
| 7 | + | |
| 8 | +public class InteressadoHelper { | |
| 9 | + @Inject | |
| 10 | + private ContatoHelper contatoHelper; | |
| 11 | + | |
| 12 | + public void tratarInteressados(Interessado[] interessados){ | |
| 13 | + for(int i=0; i < interessados.length; i++){ | |
| 14 | + interessados[i] = tratarInteressado(interessados[i]); | |
| 15 | + } | |
| 16 | + } | |
| 17 | + | |
| 18 | + public Interessado tratarInteressado(Interessado interessado){ | |
| 19 | + if(isInteressadoCadastradoComoNaoTemporario(interessado.getSigla())){ | |
| 20 | + return getRegistroInteressadoNaoTemporarioMaisAntigo(interessado.getSigla()); | |
| 21 | + } | |
| 22 | + | |
| 23 | + return interessado; | |
| 24 | + } | |
| 25 | + | |
| 26 | + private boolean isInteressadoCadastradoComoNaoTemporario(String sigla){ | |
| 27 | + return contatoHelper.isContatoCadastradoComoNaoTemporario(sigla); | |
| 28 | + } | |
| 29 | + | |
| 30 | + public Interessado getRegistroInteressadoNaoTemporarioMaisAntigo(String sigla){ | |
| 31 | + Contato contatoNaoTemporarioMaisAntigo = contatoHelper.getContatoNaoTemporarioMaisAntigo(sigla); | |
| 32 | + | |
| 33 | + return convertContatoParaInteressado(contatoNaoTemporarioMaisAntigo); | |
| 34 | + } | |
| 35 | + | |
| 36 | + private Interessado convertContatoParaInteressado(Contato contato){ | |
| 37 | + Interessado interessado = new Interessado(); | |
| 38 | + | |
| 39 | + interessado.setNome(contato.getNome()); | |
| 40 | + interessado.setSigla(contato.getSigla()); | |
| 41 | + | |
| 42 | + return interessado; | |
| 43 | + } | |
| 44 | + | |
| 45 | +} | ... | ... |
src/main/java/br/gov/ans/integracao/sei/utils/ProcessoHelper.java
0 → 100644
| ... | ... | @@ -0,0 +1,38 @@ |
| 1 | +package br.gov.ans.integracao.sei.utils; | |
| 2 | + | |
| 3 | +import javax.inject.Inject; | |
| 4 | + | |
| 5 | +import org.apache.commons.lang3.ArrayUtils; | |
| 6 | + | |
| 7 | +import br.gov.ans.integracao.sei.exceptions.BusinessException; | |
| 8 | +import br.gov.ans.integracao.sei.modelo.NovoProcesso; | |
| 9 | +import br.gov.ans.utils.MessageUtils; | |
| 10 | + | |
| 11 | +public class ProcessoHelper { | |
| 12 | + | |
| 13 | + @Inject | |
| 14 | + private MessageUtils messages; | |
| 15 | + | |
| 16 | + @Inject | |
| 17 | + private InteressadoHelper interessadoHelper; | |
| 18 | + | |
| 19 | + public void validarNovoProcesso(NovoProcesso novoProcesso) throws BusinessException{ | |
| 20 | + if(novoProcesso == null){ | |
| 21 | + throw new BusinessException(messages.getMessage("erro.novo.processo.vazio")); | |
| 22 | + } | |
| 23 | + | |
| 24 | + if(novoProcesso.getDadosProcesso() == null){ | |
| 25 | + throw new BusinessException(messages.getMessage("erro.dados.processo.nao.informados")); | |
| 26 | + } | |
| 27 | + | |
| 28 | + if(isSemInteressados(novoProcesso)){ | |
| 29 | + throw new BusinessException(messages.getMessage("erro.interessado.nao.informado")); | |
| 30 | + }else{ | |
| 31 | + interessadoHelper.tratarInteressados(novoProcesso.getDadosProcesso().getInteressados()); | |
| 32 | + } | |
| 33 | + } | |
| 34 | + | |
| 35 | + public boolean isSemInteressados(NovoProcesso processo){ | |
| 36 | + return ArrayUtils.isEmpty(processo.getDadosProcesso().getInteressados()); | |
| 37 | + } | |
| 38 | +} | ... | ... |
src/main/resources/messages.properties
| ... | ... | @@ -17,6 +17,7 @@ erro.cidade.nao.encontrada.ibge = Não há cidades para o código do IBGE informado |
| 17 | 17 | erro.codigo.ibge.invalido = Código do IBGE inválido, não foram encontradas cidades relacionadas ao código {0}. |
| 18 | 18 | erro.conectar.sei = Ocorreu um erro ao se conectar ao SEI, contate a equipe responsável. |
| 19 | 19 | erro.contato.nao.encontrado = Nenhum contato foi encontrado para o identificador {0}. |
| 20 | +erro.dados.processo.nao.informados = Dados do processo não informados. | |
| 20 | 21 | erro.desanexar.processo = Ocorreu um erro ao desanexar o processo. |
| 21 | 22 | erro.desbloquear.processo = Ocorreu um erro ao desbloquear o processo. |
| 22 | 23 | erro.desrelacionar.processo = Ocorreu um erro ao remover o relacionamento. |
| ... | ... | @@ -26,6 +27,7 @@ erro.documento.sem.processo = É necessário informar um número de processo para i |
| 26 | 27 | erro.estado.nao.encontrado = Não foi encontrado um estado para a sigla {0}. |
| 27 | 28 | erro.inesperado = Ocorreu um erro inesperado no SEI-Broker, contacte a equipe responsável. |
| 28 | 29 | erro.informe.processo = É necessário informar o número do processo. |
| 30 | +erro.interessado.nao.informado = É necessário informar algum interessado. | |
| 29 | 31 | erro.campos.obrigatorios.sobrestamento.processo = É necessário informar o número do processo e o motivo do sobrestamento. |
| 30 | 32 | erro.marcar.processo = Ocorreu um erro ao adicionar o marcador ao processo. |
| 31 | 33 | erro.motivo.cancelamento.obrigatorio = É obrigatório informar o motivo do cancelamento. |
| ... | ... | @@ -34,6 +36,7 @@ erro.nao.unidades.processo.aberto = Não há unidades onde o processo esteja abert |
| 34 | 36 | erro.nenhum.contato.encontrado = Nenhum contato encontrado. |
| 35 | 37 | erro.nenhum.documento.encontrado.interessado = Nenhum documento foi encontrado para o interessado {0}. |
| 36 | 38 | erro.nenhum.processo.encontrado.filtros = Nenhum processo encontrado para os filtros informados. |
| 39 | +erro.novo.processo.vazio = Processo vazio. | |
| 37 | 40 | erro.numero.sipar = Número de processo não corresponde ao padrão do SIPAR. |
| 38 | 41 | erro.persistir.confirmacao.inclusao.documento = Ocorreu um erro ao persistir a confirmação de inclusão do documento, número gerado {0}. |
| 39 | 42 | erro.processar.conteudo.json = Erro ao processar o conteudo JSON, verifique a formação do JSON e se o envio foi realizado em Base64. | ... | ... |
src/test/java/br/gov/ans/integracao/sei/testes/FunctionalTest.java
| ... | ... | @@ -8,7 +8,7 @@ public class FunctionalTest { |
| 8 | 8 | |
| 9 | 9 | protected final String USUARIO = "desenv_integracao_sei"; |
| 10 | 10 | protected final String SENHA = "integra_sei_2016"; |
| 11 | - protected static final Boolean DESENVOLVIMENTO = true; | |
| 11 | + protected static final Boolean DESENVOLVIMENTO = false; | |
| 12 | 12 | |
| 13 | 13 | protected static final String BASIC = "Basic ZGVzZW52X2ludGVncmFjYW9fc2VpOmludGVncmFfc2VpXzIwMTY="; |
| 14 | 14 | |
| ... | ... | @@ -34,7 +34,7 @@ public class FunctionalTest { |
| 34 | 34 | if(DESENVOLVIMENTO){ |
| 35 | 35 | baseHost = "http://localhost"; |
| 36 | 36 | }else{ |
| 37 | - baseHost = "http://ansdsjboss01.ans.gov.br"; | |
| 37 | + baseHost = "http://ansdsjboss01a.ans.gov.br"; | |
| 38 | 38 | } |
| 39 | 39 | } |
| 40 | 40 | RestAssured.baseURI = baseHost; | ... | ... |