Skip to content

Commit

Permalink
#10837 - Add jurisdiction type filter to case filter form
Browse files Browse the repository at this point in the history
  • Loading branch information
MateStrysewske committed Nov 4, 2022
1 parent 8af4622 commit 7b00fe1
Show file tree
Hide file tree
Showing 8 changed files with 114 additions and 28 deletions.
Expand Up @@ -84,6 +84,7 @@ public class CaseCriteria extends CriteriaWithDateType implements ExternalShareC
public static final String ONLY_CASES_WITH_DONT_SHARE_WITH_EXTERNAL_SURV_TOOL = "onlyCasesWithDontShareWithExternalSurvTool";
public static final String ONLY_SHOW_CASES_WITH_FULFILLED_REFERENCE_DEFINITION = "onlyShowCasesWithFulfilledReferenceDefinition";
public static final String PERSON_LIKE = "personLike";
public static final String JURISDICTION_TYPE = "jurisdictionType";

private UserRoleReferenceDto reportingUserRole;
private Disease disease;
Expand All @@ -92,6 +93,7 @@ public class CaseCriteria extends CriteriaWithDateType implements ExternalShareC
private CaseClassification caseClassification;
private InvestigationStatus investigationStatus;
private PresentCondition presentCondition;
private CaseJurisdictionType jurisdictionType;
private RegionReferenceDto region;
private DistrictReferenceDto district;
private CommunityReferenceDto community;
Expand Down Expand Up @@ -213,6 +215,19 @@ public DiseaseVariant getDiseaseVariant() {
return diseaseVariant;
}

public void setJurisdictionType(CaseJurisdictionType jurisdictionType) {
this.jurisdictionType = jurisdictionType;
}

public CaseCriteria jurisdictionType(CaseJurisdictionType jurisdictionType) {
setJurisdictionType(jurisdictionType);
return this;
}

public CaseJurisdictionType getJurisdictionType() {
return jurisdictionType;
}

public void setRegion(RegionReferenceDto region) {
this.region = region;
}
Expand Down
@@ -0,0 +1,16 @@
package de.symeda.sormas.api.caze;

import de.symeda.sormas.api.i18n.I18nProperties;

public enum CaseJurisdictionType {

ALL,
RESPONSIBLE,
PLACE_OF_STAY;

@Override
public String toString() {
return I18nProperties.getEnumCaption(this);
}

}
Expand Up @@ -535,6 +535,7 @@ public interface Captions {
String caseImportErrorDescription = "caseImportErrorDescription";
String caseImportMergeCase = "caseImportMergeCase";
String caseInfrastructureDataChanged = "caseInfrastructureDataChanged";
String caseJurisdictionType = "caseJurisdictionType";
String caseMergeDuplicates = "caseMergeDuplicates";
String caseMinusDays = "caseMinusDays";
String caseNewCase = "caseNewCase";
Expand Down
1 change: 1 addition & 0 deletions sormas-api/src/main/resources/captions.properties
Expand Up @@ -390,6 +390,7 @@ caseSelect=Select case
caseCreateNew=Create new case
caseDataEnterHomeAddressNow=Enter home address of the case person now
caseCancelDeletion=Cancel case deletion
caseJurisdictionType=Jurisdiction type
CaseData=Case
CaseData.ageAndBirthDate=Age and birth date
CaseData.additionalDetails=General comment
Expand Down
6 changes: 5 additions & 1 deletion sormas-api/src/main/resources/enum.properties
Expand Up @@ -183,7 +183,11 @@ ScreeningType.OTHER = Other

CaseCountOrIncidence.CASE_COUNT = Case count
CaseCountOrIncidence.CASE_INCIDENCE = Case incidence


CaseJurisdictionType.RESPONSIBLE = Responsible jurisdiction
CaseJurisdictionType.PLACE_OF_STAY = Place of stay
CaseJurisdictionType.ALL = All

# CaseMeasure
CaseMeasure.CASE_COUNT = Case count
CaseMeasure.CASE_INCIDENCE = Case incidence proportion
Expand Down
Expand Up @@ -18,6 +18,7 @@
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.Predicate;

import de.symeda.sormas.api.caze.CaseJurisdictionType;
import de.symeda.sormas.api.infrastructure.community.CommunityReferenceDto;
import de.symeda.sormas.api.infrastructure.district.DistrictReferenceDto;
import de.symeda.sormas.api.infrastructure.region.RegionReferenceDto;
Expand All @@ -31,26 +32,62 @@ public class CaseCriteriaHelper {
private CaseCriteriaHelper() {
}

public static Predicate createRegionFilterWithFallback(CriteriaBuilder cb, CaseJoins joins, RegionReferenceDto region) {
return CriteriaBuilderHelper.or(
cb,
cb.and(cb.isNotNull(joins.getRegion()), cb.equal(joins.getRegion().get(Region.UUID), region.getUuid())),
cb.and(cb.isNotNull(joins.getResponsibleRegion()), cb.equal(joins.getResponsibleRegion().get(Region.UUID), region.getUuid())));
public static Predicate createRegionCriteriaFilter(
CriteriaBuilder cb,
CaseJoins joins,
RegionReferenceDto region,
CaseJurisdictionType jurisdictionType) {

Predicate responsibleJurisdictionPredicate =
cb.and(cb.isNotNull(joins.getResponsibleRegion()), cb.equal(joins.getResponsibleRegion().get(Region.UUID), region.getUuid()));
Predicate placeOfStayPredicate = cb.and(cb.isNotNull(joins.getRegion()), cb.equal(joins.getRegion().get(Region.UUID), region.getUuid()));

if (jurisdictionType == null || jurisdictionType == CaseJurisdictionType.ALL) {
return CriteriaBuilderHelper.or(cb, responsibleJurisdictionPredicate, placeOfStayPredicate);
} else if (jurisdictionType == CaseJurisdictionType.RESPONSIBLE) {
return responsibleJurisdictionPredicate;
} else {
return placeOfStayPredicate;
}
}

public static Predicate createDistrictFilterWithFallback(CriteriaBuilder cb, CaseJoins joins, DistrictReferenceDto district) {
return CriteriaBuilderHelper.or(
cb,
cb.and(cb.isNotNull(joins.getDistrict()), cb.equal(joins.getDistrict().get(District.UUID), district.getUuid())),
cb.and(cb.isNotNull(joins.getResponsibleDistrict()), cb.equal(joins.getResponsibleDistrict().get(District.UUID), district.getUuid())));
public static Predicate createDistrictCriteriaFilter(
CriteriaBuilder cb,
CaseJoins joins,
DistrictReferenceDto district,
CaseJurisdictionType jurisdictionType) {

Predicate responsibleJurisdictionPredicate =
cb.and(cb.isNotNull(joins.getResponsibleDistrict()), cb.equal(joins.getResponsibleDistrict().get(District.UUID), district.getUuid()));
Predicate placeOfStayPredicate =
cb.and(cb.isNotNull(joins.getDistrict()), cb.equal(joins.getDistrict().get(District.UUID), district.getUuid()));

if (jurisdictionType == null || jurisdictionType == CaseJurisdictionType.ALL) {
return CriteriaBuilderHelper.or(cb, responsibleJurisdictionPredicate, placeOfStayPredicate);
} else if (jurisdictionType == CaseJurisdictionType.RESPONSIBLE) {
return responsibleJurisdictionPredicate;
} else {
return placeOfStayPredicate;
}
}

public static Predicate createCommunityFilterWithFallback(CriteriaBuilder cb, CaseJoins joins, CommunityReferenceDto community) {
return CriteriaBuilderHelper.or(
cb,
cb.and(cb.isNotNull(joins.getCommunity()), cb.equal(joins.getCommunity().get(Community.UUID), community.getUuid())),
cb.and(
cb.isNotNull(joins.getResponsibleCommunity()),
cb.equal(joins.getResponsibleCommunity().get(Community.UUID), community.getUuid())));
public static Predicate createCommunityCriteriaFilter(
CriteriaBuilder cb,
CaseJoins joins,
CommunityReferenceDto community,
CaseJurisdictionType jurisdictionType) {

Predicate responsibleJurisdictionPredicate =
cb.and(cb.isNotNull(joins.getResponsibleCommunity()), cb.equal(joins.getResponsibleCommunity().get(Community.UUID), community.getUuid()));
Predicate placeOfStayPredicate =
cb.and(cb.isNotNull(joins.getCommunity()), cb.equal(joins.getCommunity().get(Community.UUID), community.getUuid()));

if (jurisdictionType == null || jurisdictionType == CaseJurisdictionType.ALL) {
return CriteriaBuilderHelper.or(cb, responsibleJurisdictionPredicate, placeOfStayPredicate);
} else if (jurisdictionType == CaseJurisdictionType.RESPONSIBLE) {
return responsibleJurisdictionPredicate;
} else {
return placeOfStayPredicate;
}
}
}
Expand Up @@ -655,15 +655,22 @@ public <T extends AbstractDomainObject> Predicate createCriteriaFilter(CaseCrite
filter = CriteriaBuilderHelper.and(cb, filter, cb.equal(from.get(Case.OUTCOME), caseCriteria.getOutcome()));
}
if (caseCriteria.getRegion() != null) {
filter = CriteriaBuilderHelper.and(cb, filter, CaseCriteriaHelper.createRegionFilterWithFallback(cb, joins, caseCriteria.getRegion()));
filter = CriteriaBuilderHelper.and(
cb,
filter,
CaseCriteriaHelper.createRegionCriteriaFilter(cb, joins, caseCriteria.getRegion(), caseCriteria.getJurisdictionType()));
}
if (caseCriteria.getDistrict() != null) {
filter =
CriteriaBuilderHelper.and(cb, filter, CaseCriteriaHelper.createDistrictFilterWithFallback(cb, joins, caseCriteria.getDistrict()));
filter = CriteriaBuilderHelper.and(
cb,
filter,
CaseCriteriaHelper.createDistrictCriteriaFilter(cb, joins, caseCriteria.getDistrict(), caseCriteria.getJurisdictionType()));
}
if (caseCriteria.getCommunity() != null) {
filter =
CriteriaBuilderHelper.and(cb, filter, CaseCriteriaHelper.createCommunityFilterWithFallback(cb, joins, caseCriteria.getCommunity()));
filter = CriteriaBuilderHelper.and(
cb,
filter,
CaseCriteriaHelper.createCommunityCriteriaFilter(cb, joins, caseCriteria.getCommunity(), caseCriteria.getJurisdictionType()));
}
if (caseCriteria.getFollowUpStatus() != null) {
filter = CriteriaBuilderHelper.and(cb, filter, cb.equal(from.get(Case.FOLLOW_UP_STATUS), caseCriteria.getFollowUpStatus()));
Expand Down Expand Up @@ -1121,9 +1128,7 @@ public void delete(Case caze, DeletionDetails deletionDetails) {
@Override
public void undelete(Case caze) {
// un-delete all samples that are only associated with this case
caze.getSamples()
.stream()
.forEach(sample -> sampleService.undelete(sample));
caze.getSamples().stream().forEach(sample -> sampleService.undelete(sample));
super.undelete(caze);
}

Expand Down Expand Up @@ -1849,7 +1854,7 @@ private Predicate getSimilarityFilters(CaseSimilarityCriteria criteria, Criteria
Predicate regionFilter = null;
RegionReferenceDto criteriaRegion = caseCriteria.getRegion();
if (criteriaRegion != null) {
regionFilter = CriteriaBuilderHelper.or(cb, regionFilter, CaseCriteriaHelper.createRegionFilterWithFallback(cb, joins, criteriaRegion));
regionFilter = CriteriaBuilderHelper.or(cb, regionFilter, CaseCriteriaHelper.createRegionCriteriaFilter(cb, joins, criteriaRegion, null));
}

Predicate reportDateFilter = criteria.getReportDate() != null
Expand Down
Expand Up @@ -31,6 +31,7 @@
import de.symeda.sormas.api.caze.CaseCriteria;
import de.symeda.sormas.api.caze.CaseDataDto;
import de.symeda.sormas.api.caze.CaseIndexDto;
import de.symeda.sormas.api.caze.CaseJurisdictionType;
import de.symeda.sormas.api.caze.CaseOrigin;
import de.symeda.sormas.api.caze.NewCaseDateType;
import de.symeda.sormas.api.contact.ContactCriteria;
Expand Down Expand Up @@ -75,6 +76,7 @@ public class CaseFilterForm extends AbstractFilterForm<CaseCriteria> {

private static final String MORE_FILTERS_HTML_LAYOUT = filterLocs(
CaseCriteria.PRESENT_CONDITION,
CaseCriteria.JURISDICTION_TYPE,
CaseDataDto.REGION,
CaseDataDto.DISTRICT,
CaseDataDto.COMMUNITY,
Expand Down Expand Up @@ -180,10 +182,15 @@ protected void addFields() {
@Override
public void addMoreFilters(CustomLayout moreFiltersContainer) {

UserDto user = currentUserDto();

ComboBox presentConditionField = addField(moreFiltersContainer, FieldConfiguration.pixelSized(CaseCriteria.PRESENT_CONDITION, 140));
presentConditionField.setInputPrompt(I18nProperties.getPrefixCaption(PersonDto.I18N_PREFIX, PersonDto.PRESENT_CONDITION));

UserDto user = currentUserDto();
ComboBox jurisdictionTypeField = addField(moreFiltersContainer, FieldConfiguration.pixelSized(CaseCriteria.JURISDICTION_TYPE, 140));
jurisdictionTypeField.setInputPrompt(I18nProperties.getCaption(Captions.caseJurisdictionType));
FieldHelper.updateEnumData(jurisdictionTypeField, Arrays.asList(CaseJurisdictionType.values()));

ComboBox regionField = null;
if (user.getRegion() == null) {
regionField = addField(moreFiltersContainer, FieldConfiguration.pixelSized(CaseDataDto.REGION, 140));
Expand Down

0 comments on commit 7b00fe1

Please sign in to comment.