diff --git a/src/main/java/br/gov/ans/integracao/sei/dao/DocumentoDAO.java b/src/main/java/br/gov/ans/integracao/sei/dao/DocumentoDAO.java index fb3f2ca..c46e0d4 100644 --- a/src/main/java/br/gov/ans/integracao/sei/dao/DocumentoDAO.java +++ b/src/main/java/br/gov/ans/integracao/sei/dao/DocumentoDAO.java @@ -82,7 +82,7 @@ public class DocumentoDAO { } @SuppressWarnings("unchecked") - public List getDocumentosProcesso(String idProcedimento){ + public List getDocumentosProcessoV1(String idProcedimento){ HashMap parametros = new HashMap(); StringBuilder builder = new StringBuilder("SELECT pr.protocolo_formatado_pesquisa numero, s.nome tipo, d.numero numeroInformado, "); @@ -103,5 +103,46 @@ public class DocumentoDAO { return query.getResultList(); } + + @SuppressWarnings("unchecked") + public List getDocumentosProcesso(String idProcedimento, String codigoTipo, String origem, boolean somenteAssinados){ + HashMap parametros = new HashMap(); + + StringBuilder builder = new StringBuilder("SELECT pr.protocolo_formatado_pesquisa numero, s.nome tipo, s.id_serie codigoTipo, d.numero numeroInformado, "); + builder.append("CASE pr.sta_protocolo WHEN 'G' THEN 'GERADO' ELSE 'RECEBIDO' END origem, d.id_tipo_conferencia tipoConferencia, "); + builder.append("pr.dta_geracao dataGeracao, null as processo, null as unidade, "); + builder.append("CASE WHEN a.id_assinatura is null THEN false ELSE true END assinado "); + builder.append("FROM documento AS d "); + + if(somenteAssinados){ + builder.append("RIGHT JOIN assinatura AS a ON d.id_documento = a.id_documento "); + }else{ + builder.append("LEFT JOIN assinatura AS a ON d.id_documento = a.id_documento "); + } + + builder.append("JOIN protocolo AS pr ON pr.id_protocolo = d.id_documento "); + builder.append("JOIN serie AS s ON d.id_serie = s.id_serie "); + builder.append("WHERE d.id_procedimento = :idProcedimento "); + + parametros.put("idProcedimento", idProcedimento); + + if(StringUtils.isNotBlank(codigoTipo)){ + builder.append("AND s.id_serie = :codigoTipo "); + parametros.put("codigoTipo", codigoTipo); + } + + if(StringUtils.isNotBlank(origem)){ + builder.append("AND pr.sta_protocolo = :origem "); + parametros.put("origem", origem); + } + + builder.append("GROUP BY numero ORDER BY pr.dta_geracao ASC"); + + Query query = em.createNativeQuery(builder.toString(), DocumentoResumido.class); + + setQueryParameters(query, parametros); + + return query.getResultList(); + } } diff --git a/src/main/java/br/gov/ans/integracao/sei/rest/ProcessoResource.java b/src/main/java/br/gov/ans/integracao/sei/rest/ProcessoResource.java index dbbd058..1ed141c 100644 --- a/src/main/java/br/gov/ans/integracao/sei/rest/ProcessoResource.java +++ b/src/main/java/br/gov/ans/integracao/sei/rest/ProcessoResource.java @@ -1134,24 +1134,33 @@ public class ProcessoResource { * @apiParam (Path Parameters) {String} unidade Sigla da Unidade cadastrada no SEI. * @apiParam (Path Parameters) {String} processo Número do processo. * + * @apiParam (Query Parameters) {String} [tipo=null] Identificador do tipo do documento, caso seja necessário filtrar pelo tipo + * @apiParam (Query Parameters) {String = "G (gerado/interno), R (recebido/externo)"} [origem=null] Filtra os documentos por gerados ou recebidos + * @apiParam (Query Parameters) {boolean} [somenteAssinados=false] Exibir somente documentos assinados * * @apiExample Exemplo de requisição: * curl -i https:///sei-broker/service/cosap/processos/33910003149201793/documentos * * @apiSuccess (Sucesso Response Body - 200) {List} documentos Lista com os documentos encontrados. * @apiSuccess (Sucesso Response Body - 200) {DocumentoResumido} documentos.documentoResumido Resumo do documento encontrado no SEI. + * @apiSuccess (Sucesso Response Body - 200) {boolean} documentos.documentoResumido.assinado Boolean indicando se o documento foi assinado. + * @apiSuccess (Sucesso Response Body - 200) {String} documentos.documentoResumido.codigoTipo Identificador do tipo do documento. + * @apiSuccess (Sucesso Response Body - 200) {Data} documentos.documentoResumido.dataGeracao Data de geração do documento. * @apiSuccess (Sucesso Response Body - 200) {String} documentos.documentoResumido.numero Número do documento. - * @apiSuccess (Sucesso Response Body - 200) {String} documentos.documentoResumido.tipo Tipo do documento. * @apiSuccess (Sucesso Response Body - 200) {String="GERADO","RECEBIDO"} documentos.documentoResumido.origem Origem do documento, se o mesmo é um documento "GERADO" internamente ou "RECEBIDO" de uma fonte externa. - * @apiSuccess (Sucesso Response Body - 200) {Data} documentos.documentoResumido.dataGeracao Data de geração do documento. + * @apiSuccess (Sucesso Response Body - 200) {String} documentos.documentoResumido.tipo Tipo do documento. + * @apiSuccess (Sucesso Response Body - 200) {String} documentos.documentoResumido.tipoConferencia Tipo de conferência do documento. * * @apiSuccessExample {json} Success-Response: * HTTP/1.1 200 OK * { + * "assinado": true, + * "codigoTipo": "5", * "dataGeracao": "2015-08-10T00:00:00-03:00", * "numero": "0670949", * "origem": "RECEBIDO", * "tipo": "Despacho" + * "tipoConferencia": "4", * } * * @apiErrorExample {json} Error-Response: @@ -1164,11 +1173,12 @@ public class ProcessoResource { @GET @Path("/{unidade}/processos/{processo:\\d+}/documentos") @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) - public List listarDocumentosPorProcesso(@PathParam("unidade") String unidade, @PathParam("processo") String processo) throws RemoteException, Exception{ + public List listarDocumentosPorProcesso(@PathParam("unidade") String unidade, @PathParam("processo") String processo, @QueryParam("tipo")String tipo, + @QueryParam("origem") String origem, @QueryParam("somenteAssinados") boolean somenteAssinados) throws RemoteException, Exception{ try{ BigInteger idProcedimento = processoDAO.getIdProcedimento(formatarNumeroProcesso(processo)); - List documentosProcesso = documentoDAO.getDocumentosProcesso(idProcedimento.toString()); + List documentosProcesso = documentoDAO.getDocumentosProcesso(idProcedimento.toString(), tipo, origem, somenteAssinados); if(documentosProcesso.isEmpty()){ throw new ResourceNotFoundException(messages.getMessage("erro.processo.sem.documentos",formatarNumeroProcesso(processo))); diff --git a/src/main/webapp/api-docs/api_data.js b/src/main/webapp/api-docs/api_data.js index b814ed6..4dc7368 100644 --- a/src/main/webapp/api-docs/api_data.js +++ b/src/main/webapp/api-docs/api_data.js @@ -7145,6 +7145,35 @@ define({ "api": [ "field": "processo", "description": "

Número do processo.

" } + ], + "Query Parameters": [ + { + "group": "Query Parameters", + "type": "String", + "optional": true, + "field": "tipo", + "defaultValue": "null", + "description": "

Identificador do tipo do documento, caso seja necessário filtrar pelo tipo

" + }, + { + "group": "Query Parameters", + "type": "String", + "allowedValues": [ + "\"G (gerado/interno), R (recebido/externo)\"" + ], + "optional": true, + "field": "origem", + "defaultValue": "null", + "description": "

Filtra os documentos por gerados ou recebidos

" + }, + { + "group": "Query Parameters", + "type": "boolean", + "optional": true, + "field": "somenteAssinados", + "defaultValue": "false", + "description": "

Exibir somente documentos assinados

" + } ] } }, @@ -7174,17 +7203,31 @@ define({ "api": [ }, { "group": "Sucesso Response Body - 200", + "type": "boolean", + "optional": false, + "field": "documentos.documentoResumido.assinado", + "description": "

Boolean indicando se o documento foi assinado.

" + }, + { + "group": "Sucesso Response Body - 200", "type": "String", "optional": false, - "field": "documentos.documentoResumido.numero", - "description": "

Número do documento.

" + "field": "documentos.documentoResumido.codigoTipo", + "description": "

Identificador do tipo do documento.

" + }, + { + "group": "Sucesso Response Body - 200", + "type": "Data", + "optional": false, + "field": "documentos.documentoResumido.dataGeracao", + "description": "

Data de geração do documento.

" }, { "group": "Sucesso Response Body - 200", "type": "String", "optional": false, - "field": "documentos.documentoResumido.tipo", - "description": "

Tipo do documento.

" + "field": "documentos.documentoResumido.numero", + "description": "

Número do documento.

" }, { "group": "Sucesso Response Body - 200", @@ -7199,17 +7242,24 @@ define({ "api": [ }, { "group": "Sucesso Response Body - 200", - "type": "Data", + "type": "String", "optional": false, - "field": "documentos.documentoResumido.dataGeracao", - "description": "

Data de geração do documento.

" + "field": "documentos.documentoResumido.tipo", + "description": "

Tipo do documento.

" + }, + { + "group": "Sucesso Response Body - 200", + "type": "String", + "optional": false, + "field": "documentos.documentoResumido.tipoConferencia", + "description": "

Tipo de conferência do documento.

" } ] }, "examples": [ { "title": "Success-Response:", - "content": "HTTP/1.1 200 OK\n{\n \"dataGeracao\": \"2015-08-10T00:00:00-03:00\",\n \"numero\": \"0670949\",\n \"origem\": \"RECEBIDO\",\n \"tipo\": \"Despacho\"\n}", + "content": "HTTP/1.1 200 OK\n{\n \"assinado\": true,\n \"codigoTipo\": \"5\",\n \"dataGeracao\": \"2015-08-10T00:00:00-03:00\",\n \"numero\": \"0670949\",\n \"origem\": \"RECEBIDO\",\n \"tipo\": \"Despacho\"\n \"tipoConferencia\": \"4\",\n}", "type": "json" } ] diff --git a/src/main/webapp/api-docs/api_data.json b/src/main/webapp/api-docs/api_data.json index ac01b8b..3793eed 100644 --- a/src/main/webapp/api-docs/api_data.json +++ b/src/main/webapp/api-docs/api_data.json @@ -7145,6 +7145,35 @@ "field": "processo", "description": "

Número do processo.

" } + ], + "Query Parameters": [ + { + "group": "Query Parameters", + "type": "String", + "optional": true, + "field": "tipo", + "defaultValue": "null", + "description": "

Identificador do tipo do documento, caso seja necessário filtrar pelo tipo

" + }, + { + "group": "Query Parameters", + "type": "String", + "allowedValues": [ + "\"G (gerado/interno), R (recebido/externo)\"" + ], + "optional": true, + "field": "origem", + "defaultValue": "null", + "description": "

Filtra os documentos por gerados ou recebidos

" + }, + { + "group": "Query Parameters", + "type": "boolean", + "optional": true, + "field": "somenteAssinados", + "defaultValue": "false", + "description": "

Exibir somente documentos assinados

" + } ] } }, @@ -7174,17 +7203,31 @@ }, { "group": "Sucesso Response Body - 200", + "type": "boolean", + "optional": false, + "field": "documentos.documentoResumido.assinado", + "description": "

Boolean indicando se o documento foi assinado.

" + }, + { + "group": "Sucesso Response Body - 200", "type": "String", "optional": false, - "field": "documentos.documentoResumido.numero", - "description": "

Número do documento.

" + "field": "documentos.documentoResumido.codigoTipo", + "description": "

Identificador do tipo do documento.

" + }, + { + "group": "Sucesso Response Body - 200", + "type": "Data", + "optional": false, + "field": "documentos.documentoResumido.dataGeracao", + "description": "

Data de geração do documento.

" }, { "group": "Sucesso Response Body - 200", "type": "String", "optional": false, - "field": "documentos.documentoResumido.tipo", - "description": "

Tipo do documento.

" + "field": "documentos.documentoResumido.numero", + "description": "

Número do documento.

" }, { "group": "Sucesso Response Body - 200", @@ -7199,17 +7242,24 @@ }, { "group": "Sucesso Response Body - 200", - "type": "Data", + "type": "String", "optional": false, - "field": "documentos.documentoResumido.dataGeracao", - "description": "

Data de geração do documento.

" + "field": "documentos.documentoResumido.tipo", + "description": "

Tipo do documento.

" + }, + { + "group": "Sucesso Response Body - 200", + "type": "String", + "optional": false, + "field": "documentos.documentoResumido.tipoConferencia", + "description": "

Tipo de conferência do documento.

" } ] }, "examples": [ { "title": "Success-Response:", - "content": "HTTP/1.1 200 OK\n{\n \"dataGeracao\": \"2015-08-10T00:00:00-03:00\",\n \"numero\": \"0670949\",\n \"origem\": \"RECEBIDO\",\n \"tipo\": \"Despacho\"\n}", + "content": "HTTP/1.1 200 OK\n{\n \"assinado\": true,\n \"codigoTipo\": \"5\",\n \"dataGeracao\": \"2015-08-10T00:00:00-03:00\",\n \"numero\": \"0670949\",\n \"origem\": \"RECEBIDO\",\n \"tipo\": \"Despacho\"\n \"tipoConferencia\": \"4\",\n}", "type": "json" } ] diff --git a/src/main/webapp/api-docs/api_project.js b/src/main/webapp/api-docs/api_project.js index 8b34abe..bb3c6ea 100644 --- a/src/main/webapp/api-docs/api_project.js +++ b/src/main/webapp/api-docs/api_project.js @@ -8,7 +8,7 @@ define({ "apidoc": "0.2.0", "generator": { "name": "apidoc", - "time": "2017-09-22T18:42:40.088Z", + "time": "2017-09-25T19:36:35.343Z", "url": "http://apidocjs.com", "version": "0.15.1" } diff --git a/src/main/webapp/api-docs/api_project.json b/src/main/webapp/api-docs/api_project.json index 293e396..c65f9c6 100644 --- a/src/main/webapp/api-docs/api_project.json +++ b/src/main/webapp/api-docs/api_project.json @@ -8,7 +8,7 @@ "apidoc": "0.2.0", "generator": { "name": "apidoc", - "time": "2017-09-22T18:42:40.088Z", + "time": "2017-09-25T19:36:35.343Z", "url": "http://apidocjs.com", "version": "0.15.1" } -- libgit2 0.21.2