Commit deaa9f2590782af169f779d76597df9e50f77ec3

Authored by andre.guimaraes
1 parent b9318463

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
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;
... ...