Skip to content

Commit

Permalink
Fix Siga-EX correção de bug no filtro por espécie
Browse files Browse the repository at this point in the history
  • Loading branch information
cassioaugusto01 committed Feb 21, 2024
1 parent 674ce02 commit 1df8c58
Show file tree
Hide file tree
Showing 6 changed files with 168 additions and 24 deletions.
10 changes: 10 additions & 0 deletions siga-ex/src/main/java/br/gov/jfrj/siga/hibernate/ExDao.java
Original file line number Diff line number Diff line change
Expand Up @@ -2879,6 +2879,16 @@ public Long consultarIdDocumentoPorSigla(String sigla) {
}
return null;
}

public List<?> consultarEspecies() {
String sql = "select * from ex_forma_documento";
Query query = em().createNativeQuery(sql);
List<?> resultado = query.getResultList();
if (!resultado.isEmpty()) {
return resultado;
}
return null;
}


public List<ExDocumento> consultarDocumentosPorModeloEData(ExModelo mod, Date dataIniInclusive, Date dataFimExclusive){
Expand Down
37 changes: 37 additions & 0 deletions sigaex/src/main/java/br/gov/jfrj/siga/ex/api/v1/EspeciesGet.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package br.gov.jfrj.siga.ex.api.v1;

import br.gov.jfrj.siga.base.AplicacaoException;
import br.gov.jfrj.siga.base.Prop;
import br.gov.jfrj.siga.context.AcessoPublico;
import br.gov.jfrj.siga.ex.ExDocumento;
import br.gov.jfrj.siga.ex.ExMobil;
import br.gov.jfrj.siga.ex.ExMovimentacao;
import br.gov.jfrj.siga.ex.model.enm.ExTipoDeMovimentacao;
import br.gov.jfrj.siga.hibernate.ExDao;
import br.gov.jfrj.siga.persistencia.ExMobilDaoFiltro;
import com.crivano.swaggerservlet.SwaggerServlet;

import java.math.BigDecimal;
import java.util.Collections;
import java.util.List;
import java.util.Set;

@AcessoPublico
public class EspeciesGet implements IExApiV1.IEspeciesGet {

@Override
public void run(Request req, Response resp, ExApiV1Context ctx) throws Exception {
resp.especies = getEspecies();

}

public List<?> getEspecies() throws AplicacaoException {
List<?> especies = ExDao.getInstance().consultarEspecies();
return especies;
}

@Override
public String getContext() {
return "verificar assinatura";
}
}
13 changes: 13 additions & 0 deletions sigaex/src/main/java/br/gov/jfrj/siga/ex/api/v1/IExApiV1.java
Original file line number Diff line number Diff line change
Expand Up @@ -1634,6 +1634,19 @@ public static class Response implements ISwaggerResponse {

public void run(Request req, Response resp, ExApiV1Context ctx) throws Exception;
}

public interface IEspeciesGet extends ISwaggerMethod {
public static class Request implements ISwaggerRequest {

}

public static class Response implements ISwaggerResponse {
public List<?> especies;
public String status;
}

public void run(Request req, Response resp, ExApiV1Context ctx) throws Exception;
}

public interface IDocumentosIdConsultarEspecieGet extends ISwaggerMethod {
public static class Request implements ISwaggerRequest {
Expand Down
40 changes: 38 additions & 2 deletions sigaex/src/main/resources/br/gov/jfrj/siga/ex/api/v1/swagger.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -649,11 +649,32 @@ paths:
description: Error ocurred
schema:
$ref: "#/definitions/Error"


/especies:
get:
summary: Obtem a lista de todas as especies.
tags: [especie]
security:
- Bearer: []
responses:
200:
description: Successful response
schema:
type: object
properties:
list:
type: array
items:
$ref: "#/definitions/EspecieItem"
500:
description: Error ocurred
schema:
$ref: "#/definitions/Error"

/modelos/lista-hierarquica-especie:
get:
summary: "Obtem a lista hierárquica de modelos que o usuário pode criar. Os nomes dos modelos devem estar cadastrados no formato Grupo: Nome do Modelo (separado por dois pontos)"
tags: [modelo]
tags: [especie]
security:
- Bearer: []
parameters:
Expand Down Expand Up @@ -3489,6 +3510,21 @@ definitions:
type: string
descr:
type: string

EspecieItem:
description: Lista especies disponíveis.
type: object
properties:
idFormaDoc:
type: string
descrFormaDoc:
type: string
siglaFormaDoc:
type: string
idTipoFormaDoc:
type: int
isComposto:
type: string

PreenchimentoItem:
description: Lista preenchimentos disponíveis.
Expand Down
9 changes: 9 additions & 0 deletions sigaex/src/main/webapp/WEB-INF/page/exDocumento/exibe.jsp
Original file line number Diff line number Diff line change
Expand Up @@ -386,6 +386,15 @@
</c:forEach>
</select>
</div>

<!-- Combobox Filtro por Espécie-->
<div class="col-12 col-md-4" style="flex: 1; min-width: 200px;"> <!-- Ajustado para flex: 1 -->
<label for="especieSelect">Espécie:</label>

<select id="especieSelect" class="default-select" multiple="multiple">
</select>
</div>

<!-- Combobox Filtro por Modelo-->
<div class="col-12 col-md-4" style="flex: 1; min-width: 200px;"> <!-- Ajustado para flex: 1 -->
<label for="modeloSelect">Modelo:</label>
Expand Down
83 changes: 61 additions & 22 deletions sigaex/src/main/webapp/javascript/filtroHistoricoDeMovimentacoes.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,42 +4,59 @@ $(document).ready(function() {
//se o js carregar, tira a classe css padrão que foi carrega no exibe.jsp
$('#lotacaoSelect').select2().removeClass('default-select');
$('#modeloSelect').select2().removeClass('default-select');
//$('#lotacaoSelect').select2().removeClass('default-select');
$('#especieSelect').select2().removeClass('default-select');

});

function init() {
$('#lotacaoSelect').select2();
$('#modeloSelect').select2();
//$('#especieSelect').select2();
$('#especieSelect').select2();

ordenaOpcoesOrdemAlfabetica(document.getElementById('lotacaoSelect'));
removeDuplicateOptions();

//Ao carregar a página, busca os dados e preenche selects com listas de Espécies e Modelos
getModelosFromSigaExAPI();
//getEspeciesFromSigaExAPI();
getEspeciesFromSigaExAPINovo();
}

function getEspeciesFromSigaExAPI() {
//Busca espécies no endpoint /sigaex/api/v1/modelos/lista-hierarquica-especie
function getEspeciesFromSigaExAPINovo() {
//Busca espécies no endpoint /sigaex/api/v1/especies
$.ajax({
url: "/sigaex/api/v1/modelos/lista-hierarquica-especie",
url: "/sigaex/api/v1/especies",
contentType: "application/json",
dataType: 'json',
success: function(result) {
if (result.list && result.list.length > 0) {
addEspeciesToSelect(result.list);

if (result && result.especies && Array.isArray(result.especies)) {

addRetornoEndpointEspeciesNoSelect(result.especies);


} else {
console.log("Nenhum modelo encontrado.");
console.log("Nenhuma especie encontrada.");
}
},
error: function(result) {
console.log("Erro ao buscar modelos: " + result.errormsg);
console.log("Erro ao buscar especies: " + result.errormsg);
},
});
}

function addRetornoEndpointEspeciesNoSelect(especies) {
var select = document.getElementById('especieSelect');
// Utiliza um loop for para iterar sobre o array de espécies
for (var i = 0; i < especies.length; i++) {
var especie = especies[i];
var option = document.createElement('option');
option.value = especie[0]; // ID da espécie
//option.text = especie[1] + ' (' + especie[2] + ')'; // Nome e abreviação da espécie
option.text = especie[1]; // Texto da Espécie
select.appendChild(option);
}
}

function addEspeciesToSelect(modelos) {
var select = document.getElementById('especieSelect');
modelos.forEach(function(modelo) {
Expand Down Expand Up @@ -75,43 +92,64 @@ function showAllRows() {
function applyCombinedFilters() {
//Usuario clica no botão filtrar e chama essa função
const selectedLotacoes = Array.from(document.getElementById('lotacaoSelect').selectedOptions).map(option => option.value);
const isLotacaoFilterActive = selectedLotacoes.length > 0;
let isLotacaoFilterActive = false;
isLotacaoFilterActive = selectedLotacoes.length > 0;

const modelosSelecionados = removerAcentos(getModelosSelecionados());
const isModeloFilterActive = modelosSelecionados.length > 0;
let isModeloFilterActive = false;
isModeloFilterActive = modelosSelecionados.length > 0;

//const especiesSelecionadas = removerAcentos(getEspeciesSelecionadas());
const isEspecieFilterActive = false;
//const isEspecieFilterActive = especiesSelecionadas.length > 0;
const especiesSelecionadas = removerAcentos(getEspeciesSelecionadas());
let isEspecieFilterActive = false;
isEspecieFilterActive = especiesSelecionadas.length > 0;

const movimentacoes = getMovimentacoes();

//Para cada movimentação
movimentacoes.forEach(row => {
const lotacaoMatches = !isLotacaoFilterActive || selectedLotacoes.includes(row.querySelector('td:nth-child(2)').textContent.trim());
const documento = getDocumentoDaMovimentacao(row);
const modeloDoDocumento = removerAcentos(getModeloDoDocumento(documento));

//Busca a espécie do documento da movimentação atual
//const especieDoDocumento = removerAcentos(getEspecieDoDocumento(documento));
const especieDoDocumento = removerAcentos(getEspecieDoDocumento(documento));

//Obtem a lista de especies selecionada no Selectbox(Que vieram do Endpoint)
//Obtem a lista dos documentos das movimentações
//Verifica se movimentaçãoAtual/documento/especie está entre as especies selecionadas
//Se estiver, exibe
const modeloMatches = !isModeloFilterActive || modelosSelecionados.includes(modeloDoDocumento);

//const especieMatches = !isEspecieFilterActive || especiesSelecionadas.includes(especieDoDocumento);

//if (lotacaoMatches && modeloMatches && especieMatches) {
if (lotacaoMatches && modeloMatches) {
if (especiesSelecionadas[0] == especieDoDocumento){
console.log("especiesSelecionadas[0] == especieDoDocumento");
} else{
console.log("especiesSelecionadas[0] != especieDoDocumento")
}

const especieMatches = !isEspecieFilterActive || podeAplicarFiltroPorEspecie(especiesSelecionadas, especieDoDocumento);

if (lotacaoMatches && modeloMatches && especieMatches) {
row.classList.remove('hidden-row');
} else {
row.classList.add('hidden-row');
}
});
}

function podeAplicarFiltroPorEspecie(listaDeEspeciesSelecionadas, especieDoDocumentoAtual){
// Verifica se os parâmetros fornecidos são válidos
if (listaDeEspeciesSelecionadas && especieDoDocumentoAtual) {
// Itera sobre a lista de espécies selecionadas
for (let i = 0; i < listaDeEspeciesSelecionadas.length; i++) {
// Compara a espécie atual da lista com a espécie do documento
if (listaDeEspeciesSelecionadas[i] == especieDoDocumentoAtual) {
// Se encontrar uma correspondência, retorna verdadeiro
return true;
}
}
}
// Se chegar ao final do loop sem encontrar correspondência, retorna falso
return false;
}

function removerAcentos(str) {
return str;
}
Expand Down Expand Up @@ -170,6 +208,7 @@ function getDocumentoDaMovimentacao(movimentacao) {
}

function getModeloDoDocumento(SiglaDoDocumentoDaMovimentacao) {
//Retorna o modelo de um documento
let nomeDoModelo = getNomeDoModeloDoDocumentoBySigla(SiglaDoDocumentoDaMovimentacao);
return nomeDoModelo;
}
Expand Down

0 comments on commit 1df8c58

Please sign in to comment.