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 | package br.gov.ans.integracao.sei.dao; | 1 | package br.gov.ans.integracao.sei.dao; |
2 | 2 | ||
3 | +import java.util.List; | ||
4 | + | ||
3 | import javax.persistence.EntityManager; | 5 | import javax.persistence.EntityManager; |
4 | import javax.persistence.PersistenceContext; | 6 | import javax.persistence.PersistenceContext; |
5 | import javax.persistence.PersistenceContextType; | 7 | import javax.persistence.PersistenceContextType; |
@@ -26,4 +28,12 @@ public class ContatoDAO { | @@ -26,4 +28,12 @@ public class ContatoDAO { | ||
26 | 28 | ||
27 | return (Contato) query.getSingleResult(); | 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,7 +17,8 @@ import org.codehaus.jackson.map.annotate.JsonSerialize; | ||
17 | @Entity | 17 | @Entity |
18 | @Table(name="contato") | 18 | @Table(name="contato") |
19 | @NamedQueries({@NamedQuery(name="Contato.pesquisarPorID", query="select c from Contato c where c.id = :id"), | 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 | public class Contato{ | 22 | public class Contato{ |
22 | 23 | ||
23 | @Id | 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,6 +63,7 @@ import br.gov.ans.integracao.sei.modelo.ProcessoResumido; | ||
63 | import br.gov.ans.integracao.sei.modelo.ResultadoConsultaProcesso; | 63 | import br.gov.ans.integracao.sei.modelo.ResultadoConsultaProcesso; |
64 | import br.gov.ans.integracao.sei.modelo.SobrestamentoProcesso; | 64 | import br.gov.ans.integracao.sei.modelo.SobrestamentoProcesso; |
65 | import br.gov.ans.integracao.sei.utils.Constantes; | 65 | import br.gov.ans.integracao.sei.utils.Constantes; |
66 | +import br.gov.ans.integracao.sei.utils.ProcessoHelper; | ||
66 | import br.gov.ans.integracao.sipar.dao.DocumentoSipar; | 67 | import br.gov.ans.integracao.sipar.dao.DocumentoSipar; |
67 | import br.gov.ans.utils.MessageUtils; | 68 | import br.gov.ans.utils.MessageUtils; |
68 | 69 | ||
@@ -92,6 +93,9 @@ public class ProcessoResource { | @@ -92,6 +93,9 @@ public class ProcessoResource { | ||
92 | private MessageUtils messages; | 93 | private MessageUtils messages; |
93 | 94 | ||
94 | @Inject | 95 | @Inject |
96 | + private ProcessoHelper processoHelper; | ||
97 | + | ||
98 | + @Inject | ||
95 | private Logger logger; | 99 | private Logger logger; |
96 | 100 | ||
97 | @Context | 101 | @Context |
@@ -555,11 +559,13 @@ public class ProcessoResource { | @@ -555,11 +559,13 @@ public class ProcessoResource { | ||
555 | @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) | 559 | @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) |
556 | @Consumes({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) | 560 | @Consumes({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) |
557 | public Response abrirProcesso(@PathParam("unidade") String unidade, @QueryParam("auto-formatacao") String autoFormatar, NovoProcesso processo) throws RemoteException, Exception{ | 561 | public Response abrirProcesso(@PathParam("unidade") String unidade, @QueryParam("auto-formatacao") String autoFormatar, NovoProcesso processo) throws RemoteException, Exception{ |
562 | + processoHelper.validarNovoProcesso(processo); | ||
563 | + | ||
558 | if(StringUtils.isNotBlank(processo.getDadosProcesso().getNumeroProtocolo()) && isAutoFormatar(autoFormatar)){ | 564 | if(StringUtils.isNotBlank(processo.getDadosProcesso().getNumeroProtocolo()) && isAutoFormatar(autoFormatar)){ |
559 | String numeroFormatado = formatarNumeroProcesso(processo.getDadosProcesso().getNumeroProtocolo()); | 565 | String numeroFormatado = formatarNumeroProcesso(processo.getDadosProcesso().getNumeroProtocolo()); |
560 | processo.getDadosProcesso().setNumeroProtocolo(numeroFormatado); | 566 | processo.getDadosProcesso().setNumeroProtocolo(numeroFormatado); |
561 | } | 567 | } |
562 | - | 568 | + |
563 | RetornoGeracaoProcedimento retorno = seiNativeService.gerarProcedimento(Constantes.SEI_BROKER, Operacao.ABRIR_PROCESSO, unidadeResource.consultarCodigo(unidade), processo.getDadosProcesso(), processo.getDocumentos(), | 569 | RetornoGeracaoProcedimento retorno = seiNativeService.gerarProcedimento(Constantes.SEI_BROKER, Operacao.ABRIR_PROCESSO, unidadeResource.consultarCodigo(unidade), processo.getDadosProcesso(), processo.getDocumentos(), |
564 | processo.getProcessosRelacionados(), unidadeResource.buscarCodigoUnidades(processo.getUnidadesDestino()), getSOuN(processo.isManterAbertoOrigem()), | 570 | processo.getProcessosRelacionados(), unidadeResource.buscarCodigoUnidades(processo.getUnidadesDestino()), getSOuN(processo.isManterAbertoOrigem()), |
565 | getSOuN(processo.isEnviarEmailNotificacao()), formatarData(processo.getDataRetornoProgramado()), (processo.getQtdDiasAteRetorno() != null ? processo.getQtdDiasAteRetorno().toString() : null), getSOuN(processo.isSomenteDiasUteis()), | 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 +6,7 @@ import static br.gov.ans.integracao.sei.utils.Constantes.SIM; | ||
6 | import static br.gov.ans.integracao.sei.utils.Util.getSOuN; | 6 | import static br.gov.ans.integracao.sei.utils.Util.getSOuN; |
7 | 7 | ||
8 | import java.rmi.RemoteException; | 8 | import java.rmi.RemoteException; |
9 | +import java.util.List; | ||
9 | 10 | ||
10 | import javax.inject.Inject; | 11 | import javax.inject.Inject; |
11 | 12 | ||
@@ -122,11 +123,23 @@ public class ContatoHelper { | @@ -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 | public void preencherIdContato(Contato contato, String sigla){ | 133 | public void preencherIdContato(Contato contato, String sigla){ |
127 | contato.setIdContato(getIdContato(sigla)+""); | 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 | private Integer getIdContato(String sigla){ | 143 | private Integer getIdContato(String sigla){ |
131 | return contatoDAO.getContatoPelaSigla(sigla).getId(); | 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 @@ | @@ -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 @@ | @@ -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,6 +17,7 @@ erro.cidade.nao.encontrada.ibge = Não há cidades para o código do IBGE informado | ||
17 | erro.codigo.ibge.invalido = Código do IBGE inválido, não foram encontradas cidades relacionadas ao código {0}. | 17 | erro.codigo.ibge.invalido = Código do IBGE inválido, não foram encontradas cidades relacionadas ao código {0}. |
18 | erro.conectar.sei = Ocorreu um erro ao se conectar ao SEI, contate a equipe responsável. | 18 | erro.conectar.sei = Ocorreu um erro ao se conectar ao SEI, contate a equipe responsável. |
19 | erro.contato.nao.encontrado = Nenhum contato foi encontrado para o identificador {0}. | 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 | erro.desanexar.processo = Ocorreu um erro ao desanexar o processo. | 21 | erro.desanexar.processo = Ocorreu um erro ao desanexar o processo. |
21 | erro.desbloquear.processo = Ocorreu um erro ao desbloquear o processo. | 22 | erro.desbloquear.processo = Ocorreu um erro ao desbloquear o processo. |
22 | erro.desrelacionar.processo = Ocorreu um erro ao remover o relacionamento. | 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,6 +27,7 @@ erro.documento.sem.processo = É necessário informar um número de processo para i | ||
26 | erro.estado.nao.encontrado = Não foi encontrado um estado para a sigla {0}. | 27 | erro.estado.nao.encontrado = Não foi encontrado um estado para a sigla {0}. |
27 | erro.inesperado = Ocorreu um erro inesperado no SEI-Broker, contacte a equipe responsável. | 28 | erro.inesperado = Ocorreu um erro inesperado no SEI-Broker, contacte a equipe responsável. |
28 | erro.informe.processo = É necessário informar o número do processo. | 29 | erro.informe.processo = É necessário informar o número do processo. |
30 | +erro.interessado.nao.informado = É necessário informar algum interessado. | ||
29 | erro.campos.obrigatorios.sobrestamento.processo = É necessário informar o número do processo e o motivo do sobrestamento. | 31 | erro.campos.obrigatorios.sobrestamento.processo = É necessário informar o número do processo e o motivo do sobrestamento. |
30 | erro.marcar.processo = Ocorreu um erro ao adicionar o marcador ao processo. | 32 | erro.marcar.processo = Ocorreu um erro ao adicionar o marcador ao processo. |
31 | erro.motivo.cancelamento.obrigatorio = É obrigatório informar o motivo do cancelamento. | 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,6 +36,7 @@ erro.nao.unidades.processo.aberto = Não há unidades onde o processo esteja abert | ||
34 | erro.nenhum.contato.encontrado = Nenhum contato encontrado. | 36 | erro.nenhum.contato.encontrado = Nenhum contato encontrado. |
35 | erro.nenhum.documento.encontrado.interessado = Nenhum documento foi encontrado para o interessado {0}. | 37 | erro.nenhum.documento.encontrado.interessado = Nenhum documento foi encontrado para o interessado {0}. |
36 | erro.nenhum.processo.encontrado.filtros = Nenhum processo encontrado para os filtros informados. | 38 | erro.nenhum.processo.encontrado.filtros = Nenhum processo encontrado para os filtros informados. |
39 | +erro.novo.processo.vazio = Processo vazio. | ||
37 | erro.numero.sipar = Número de processo não corresponde ao padrão do SIPAR. | 40 | erro.numero.sipar = Número de processo não corresponde ao padrão do SIPAR. |
38 | erro.persistir.confirmacao.inclusao.documento = Ocorreu um erro ao persistir a confirmação de inclusão do documento, número gerado {0}. | 41 | erro.persistir.confirmacao.inclusao.documento = Ocorreu um erro ao persistir a confirmação de inclusão do documento, número gerado {0}. |
39 | erro.processar.conteudo.json = Erro ao processar o conteudo JSON, verifique a formação do JSON e se o envio foi realizado em Base64. | 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,7 +8,7 @@ public class FunctionalTest { | ||
8 | 8 | ||
9 | protected final String USUARIO = "desenv_integracao_sei"; | 9 | protected final String USUARIO = "desenv_integracao_sei"; |
10 | protected final String SENHA = "integra_sei_2016"; | 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 | protected static final String BASIC = "Basic ZGVzZW52X2ludGVncmFjYW9fc2VpOmludGVncmFfc2VpXzIwMTY="; | 13 | protected static final String BASIC = "Basic ZGVzZW52X2ludGVncmFjYW9fc2VpOmludGVncmFfc2VpXzIwMTY="; |
14 | 14 | ||
@@ -34,7 +34,7 @@ public class FunctionalTest { | @@ -34,7 +34,7 @@ public class FunctionalTest { | ||
34 | if(DESENVOLVIMENTO){ | 34 | if(DESENVOLVIMENTO){ |
35 | baseHost = "http://localhost"; | 35 | baseHost = "http://localhost"; |
36 | }else{ | 36 | }else{ |
37 | - baseHost = "http://ansdsjboss01.ans.gov.br"; | 37 | + baseHost = "http://ansdsjboss01a.ans.gov.br"; |
38 | } | 38 | } |
39 | } | 39 | } |
40 | RestAssured.baseURI = baseHost; | 40 | RestAssured.baseURI = baseHost; |