Bug #447
Bug na pesquisa avançada de casos
0%
Description
Na pesquisa avançada de casos existem alguns filtros proprios do brasil que ficam na clase CaseFiltersBR...
Quando é executada uma pesquisa de casos (seja por meio da pesquisa avançada, ou clicando no numero de casos em tratamento de um determinado estado, ou ate clicando em uma tag, enfim...) O CaseFilters verifica se é uma pesquisa que faz sentido manter os filtros que estão na sessão (somente pesquisa avançada), se não for ele limpa os atributos do filtro do CaseFilters... O problema é que esse método é do CaseFilters portanto ele não tem como limpar os filtros proprios de um país (neste caso do CaseFiltersBR).
O resultado disso é: quando o usuario faz uma pesquisa avançada, se ele preencher um filtro proprio do pais, esse filtro vai permanecer em memoria quando o usuario for fazer outro tipo de consulta de casos, como por ex, clicar em uma tag.
History
#1
Updated by Maurício Dos Santos about 12 years ago
Tentar "sobrescrever" (digo com aspas pois o CaseFiltersBR não é realmente filho do CaseFilters) esse metodo fica complicado pois o metodo que chama o clear do CaseFilters ((CaseFilters.searchCriteriaChanged())) é chamado dentro do CaseFilters.setSearchCriteria()... E no sistema possuem em torno de 30 linhas que setam esse atributo, achei arriscado...
Pensei que fosse mais simples alterar o CasesQueryBR como abaixo:
package org.msh.tb.br;
import java.util.ArrayList;
import java.util.List;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Name;
import org.msh.tb.cases.CaseFilters;
import org.msh.tb.cases.CasesQuery;
import org.msh.tb.cases.SearchCriteria;
@Name("casesQueryBR")
public class CasesQueryBR extends CasesQuery {
private static final long serialVersionUID = -756905077428555077L;
@In(required=true) CaseFilters caseFilters;
@In(required=true) CaseFiltersBR caseFiltersBR;
@Override
public List<String> getStringRestrictions() {
verifySearchCriteria();
List<String> lst = super.getStringRestrictions();
List<String> rest = new ArrayList<String>();
for (String s: lst)
rest.add(s);
rest.add("c.drugResistanceType = #{caseFiltersBR.drugResistanceType}");
rest.add("c.schemaChangeType.value = #{caseFiltersBR.schemaChangeType}");
rest.add("c.outcomeRegimenChanged = #{caseFiltersBR.outcomeRegimenChanged}");
rest.add("c.outcomeResistanceType = #{caseFiltersBR.outcomeResistanceType}");
rest.add("c.currentDrugResistanceType = #{caseFiltersBR.currentDrugResistanceType}");
return rest;
}
private void verifySearchCriteria() {
SearchCriteria searchCriteria = caseFilters.getSearchCriteria();
if (searchCriteria == null)
searchCriteria = SearchCriteria.CUSTOM_FILTER;
if(searchCriteria.equals(SearchCriteria.CASE_STATE)
|| searchCriteria.equals(SearchCriteria.PATIENT)
|| searchCriteria.equals(SearchCriteria.VALIDATION_STATE)
|| searchCriteria.equals(SearchCriteria.CASE_TAG)
|| searchCriteria.equals(SearchCriteria.CASE_UNIT_STATE))
caseFiltersBR.clear();
}
/* (non-Javadoc)
* @see org.msh.tb.cases.CasesQuery#getJoinTablesHQL()
*/
/* @Override
public String getFromHQL() {
return "from TbCaseBR c";
}
*/}
Mas ao executar não consegui inicializar os filters dentro dessa classe... Tentei required=true e create=true... Ricardo, algum palpite?
#2
Updated by Maurício Dos Santos about 12 years ago
- Status changed from New to Resolved
#3
Updated by Maurício Dos Santos about 12 years ago
Resolvido, mais ou menos como acima, mas instanciei as dependencias assim:
CaseFilters caseFilters = (CaseFilters) Component.getInstance("caseFilters");
CaseFiltersBR caseFiltersBR = (CaseFiltersBR) Component.getInstance("caseFiltersBR");
#4
Updated by Estefânia Quilma Andrade about 12 years ago
- Due date set to 03/15/2013
Tentei, varias vezes, refazer o erro e nao consegui, deve esta ok
#5
Updated by Maurício Dos Santos about 12 years ago
- Status changed from Resolved to Closed