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