Skip to content

Commit 07ae9e3

Browse files
committed
case sex filter implementation
1 parent 4e9ae42 commit 07ae9e3

File tree

12 files changed

+72
-18
lines changed

12 files changed

+72
-18
lines changed

sormas-api/src/main/java/de/symeda/sormas/api/caze/CaseFacade.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
import de.symeda.sormas.api.manualmessagelog.ManualMessageLogDto;
5252
import de.symeda.sormas.api.messaging.MessageType;
5353
import de.symeda.sormas.api.person.PersonReferenceDto;
54+
import de.symeda.sormas.api.person.Sex;
5455
import de.symeda.sormas.api.sample.PathogenTestDto;
5556
import de.symeda.sormas.api.utils.DataHelper.Pair;
5657
import de.symeda.sormas.api.utils.SortProperty;
@@ -111,15 +112,17 @@ List<MapCaseDto> getCasesForMap(
111112
Disease disease,
112113
Date from,
113114
Date to,
114-
NewCaseDateType dateType);
115+
NewCaseDateType dateType,
116+
Sex sex);
115117

116118
Long countCasesForMap(
117119
RegionReferenceDto regionRef,
118120
DistrictReferenceDto districtRef,
119121
Disease disease,
120122
Date from,
121123
Date to,
122-
NewCaseDateType dateType);
124+
NewCaseDateType dateType,
125+
Sex sex);
123126

124127
List<Pair<DistrictDto, BigDecimal>> getCaseMeasurePerDistrict(Date onsetFromDate, Date onsetToDate, Disease disease, CaseMeasure caseMeasure);
125128

sormas-api/src/main/java/de/symeda/sormas/api/i18n/Strings.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1733,6 +1733,7 @@ public interface Strings {
17331733
String promptCasesDateFrom = "promptCasesDateFrom";
17341734
String promptCasesEpiWeekFrom = "promptCasesEpiWeekFrom";
17351735
String promptCasesEpiWeekTo = "promptCasesEpiWeekTo";
1736+
String promptCaseSex = "promptCaseSex";
17361737
String promptCasesSearchField = "promptCasesSearchField";
17371738
String promptContactDateFrom = "promptContactDateFrom";
17381739
String promptContactDateTo = "promptContactDateTo";

sormas-api/src/main/resources/strings.properties

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1805,6 +1805,8 @@ promptDiseaseConfigurationStartAge = Start age
18051805
promptDiseaseConfigurationStartAgeType = Start age unit
18061806
promptDiseaseConfigurationEndAge = End age
18071807
promptDiseaseConfigurationEndAgeType = End age unit
1808+
promptCaseSex=Case sex
1809+
18081810
#DiseaseNetworkDiagram
18091811
DiseaseNetworkDiagram.Classification.HEALTHY = Healthy
18101812
DiseaseNetworkDiagram.heading = Disease network diagram

sormas-backend/src/main/java/de/symeda/sormas/backend/caze/CaseFacadeEjb.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,7 @@
175175
import de.symeda.sormas.api.person.PersonDto;
176176
import de.symeda.sormas.api.person.PersonReferenceDto;
177177
import de.symeda.sormas.api.person.PresentCondition;
178+
import de.symeda.sormas.api.person.Sex;
178179
import de.symeda.sormas.api.sample.AdditionalTestDto;
179180
import de.symeda.sormas.api.sample.PathogenTestDto;
180181
import de.symeda.sormas.api.sample.PathogenTestResultType;
@@ -1335,11 +1336,12 @@ public Long countCasesForMap(
13351336
Disease disease,
13361337
Date from,
13371338
Date to,
1338-
NewCaseDateType dateType) {
1339+
NewCaseDateType dateType,
1340+
Sex sex) {
13391341
Region region = regionService.getByReferenceDto(regionRef);
13401342
District district = districtService.getByReferenceDto(districtRef);
13411343

1342-
return service.countCasesForMap(region, district, disease, from, to, dateType);
1344+
return service.countCasesForMap(region, district, disease, from, to, dateType, sex);
13431345
}
13441346

13451347
@Override
@@ -1351,12 +1353,13 @@ public List<MapCaseDto> getCasesForMap(
13511353
Disease disease,
13521354
Date from,
13531355
Date to,
1354-
NewCaseDateType dateType) {
1356+
NewCaseDateType dateType,
1357+
Sex sex) {
13551358

13561359
Region region = regionService.getByReferenceDto(regionRef);
13571360
District district = districtService.getByReferenceDto(districtRef);
13581361

1359-
List<MapCaseDto> cases = service.getCasesForMap(region, district, disease, from, to, dateType);
1362+
List<MapCaseDto> cases = service.getCasesForMap(region, district, disease, from, to, dateType, sex);
13601363

13611364
Pseudonymizer<MapCaseDto> pseudonymizer = createSimplePlaceholderPseudonymizer(cases);
13621365
pseudonymizer.pseudonymizeDtoCollection(MapCaseDto.class, cases, MapCaseDto::getInJurisdiction, null);

sormas-backend/src/main/java/de/symeda/sormas/backend/caze/CaseService.java

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -336,15 +336,15 @@ public List<String> getAllActiveUuids() {
336336
return em.createQuery(cq).getResultList();
337337
}
338338

339-
public Long countCasesForMap(Region region, District district, Disease disease, Date from, Date to, NewCaseDateType dateType) {
339+
public Long countCasesForMap(Region region, District district, Disease disease, Date from, Date to, NewCaseDateType dateType, Sex sex) {
340340

341341
CriteriaBuilder cb = em.getCriteriaBuilder();
342342
CriteriaQuery<Long> cq = cb.createQuery(Long.class);
343343
Root<Case> caze = cq.from(getElementClass());
344344

345345
CaseQueryContext caseQueryContext = new CaseQueryContext(cb, cq, caze);
346346

347-
Predicate filter = createMapCasesFilter(caseQueryContext, region, district, disease, from, to, dateType);
347+
Predicate filter = createMapCasesFilter(caseQueryContext, region, district, disease, from, to, dateType, sex);
348348

349349
if (filter != null) {
350350
cq.where(filter);
@@ -356,7 +356,7 @@ public Long countCasesForMap(Region region, District district, Disease disease,
356356
return 0L;
357357
}
358358

359-
public List<MapCaseDto> getCasesForMap(Region region, District district, Disease disease, Date from, Date to, NewCaseDateType dateType) {
359+
public List<MapCaseDto> getCasesForMap(Region region, District district, Disease disease, Date from, Date to, NewCaseDateType dateType, Sex sex) {
360360

361361
CriteriaBuilder cb = em.getCriteriaBuilder();
362362
CriteriaQuery<MapCaseDto> cq = cb.createQuery(MapCaseDto.class);
@@ -365,7 +365,7 @@ public List<MapCaseDto> getCasesForMap(Region region, District district, Disease
365365
CaseQueryContext caseQueryContext = new CaseQueryContext(cb, cq, caze);
366366
CaseJoins joins = caseQueryContext.getJoins();
367367

368-
Predicate filter = createMapCasesFilter(caseQueryContext, region, district, disease, from, to, dateType);
368+
Predicate filter = createMapCasesFilter(caseQueryContext, region, district, disease, from, to, dateType, sex);
369369

370370
List<MapCaseDto> result;
371371
if (filter != null) {
@@ -402,7 +402,8 @@ private Predicate createMapCasesFilter(
402402
Disease disease,
403403
Date from,
404404
Date to,
405-
NewCaseDateType dateType) {
405+
NewCaseDateType dateType,
406+
Sex sex) {
406407

407408
final CriteriaBuilder cb = caseQueryContext.getCriteriaBuilder();
408409
final From<?, Case> root = caseQueryContext.getRoot();
@@ -459,6 +460,15 @@ private Predicate createMapCasesFilter(
459460
}
460461
}
461462

463+
if (sex != null) {
464+
Predicate sexFilter = cb.equal(joins.getPerson().get(Person.SEX), sex);
465+
if (filter != null) {
466+
filter = cb.and(filter, sexFilter);
467+
} else {
468+
filter = sexFilter;
469+
}
470+
}
471+
462472
return filter;
463473
}
464474

sormas-backend/src/main/java/de/symeda/sormas/backend/dashboard/adverseeventsfollowingimmunization/AefiDashboardService.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -583,7 +583,6 @@ public List<MapAefiDto> getAefiForMap(AefiDashboardCriteria criteria) {
583583
immunizationFacility.get(Facility.LONGITUDE),
584584
immunizationPersonAddress.get(Facility.LATITUDE),
585585
immunizationPersonAddress.get(Facility.LONGITUDE),
586-
587586
aefiRoot.get(Aefi.SERIOUS));
588587

589588
final Predicate criteriaFilter = createAefiFilter(aefiQueryContext, criteria);

sormas-backend/src/test/java/de/symeda/sormas/backend/caze/CaseFacadeEjbTest.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -662,6 +662,7 @@ public void testMapCaseListCreation() {
662662
caze.getDisease(),
663663
DateHelper.subtractDays(new Date(), 1),
664664
DateHelper.addDays(new Date(), 1),
665+
null,
665666
null);
666667

667668
List<MapCaseDto> mapCaseDtos = getCaseFacade().getCasesForMap(
@@ -670,6 +671,7 @@ public void testMapCaseListCreation() {
670671
caze.getDisease(),
671672
DateHelper.subtractDays(new Date(), 1),
672673
DateHelper.addDays(new Date(), 1),
674+
null,
673675
null);
674676

675677
// List should have one entry

sormas-rest/src/main/java/de/symeda/sormas/rest/resources/DashboardResource.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,8 @@ public List<MapCaseDto> getMapCaseData(@RequestBody SurveillanceDashboardCriteri
128128
dashboardCriteria.getDisease(),
129129
dashboardCriteria.getDateFrom(),
130130
dashboardCriteria.getDateTo(),
131-
dashboardCriteria.getNewCaseDateType());
131+
dashboardCriteria.getNewCaseDateType(),
132+
null);
132133
}
133134

134135
@POST

sormas-ui/src/main/java/de/symeda/sormas/ui/dashboard/gis/GisDashboardDataProvider.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import de.symeda.sormas.api.dashboard.GisDashboardCriteria;
2929
import de.symeda.sormas.api.dashboard.SampleDashboardCriteria;
3030
import de.symeda.sormas.api.event.EventStatus;
31+
import de.symeda.sormas.api.person.Sex;
3132
import de.symeda.sormas.api.sample.SampleDashboardFilterDateType;
3233
import de.symeda.sormas.api.sample.SampleMaterial;
3334
import de.symeda.sormas.ui.dashboard.AbstractDashboardDataProvider;
@@ -39,6 +40,7 @@ public class GisDashboardDataProvider extends AbstractDashboardDataProvider<GisD
3940
private SampleMaterial sampleMaterial;
4041
private Boolean sampleWithNoDisease;
4142
private AefiDashboardFilterDateType aefiDateType = AefiDashboardFilterDateType.REPORT_DATE;
43+
private Sex sex;
4244

4345
//disease specific
4446
private List<DashboardEventDto> events = new ArrayList<>();
@@ -157,4 +159,12 @@ public Map<EventStatus, Long> getEventCountByStatus() {
157159
public void setEventCountByStatus(Map<EventStatus, Long> eventCountByStatus) {
158160
this.eventCountByStatus = eventCountByStatus;
159161
}
162+
163+
public Sex getSex() {
164+
return sex;
165+
}
166+
167+
public void setSex(Sex sex) {
168+
this.sex = sex;
169+
}
160170
}

sormas-ui/src/main/java/de/symeda/sormas/ui/dashboard/gis/GisDashboardMapComponent.java

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
import com.vaadin.ui.Window;
4040
import com.vaadin.v7.shared.ui.grid.HeightMode;
4141
import com.vaadin.v7.ui.CheckBox;
42+
import com.vaadin.v7.ui.ComboBox;
4243
import com.vaadin.v7.ui.OptionGroup;
4344

4445
import de.symeda.sormas.api.CaseMeasure;
@@ -69,6 +70,7 @@
6970
import de.symeda.sormas.api.infrastructure.facility.FacilityDto;
7071
import de.symeda.sormas.api.infrastructure.facility.FacilityReferenceDto;
7172
import de.symeda.sormas.api.infrastructure.region.RegionReferenceDto;
73+
import de.symeda.sormas.api.person.Sex;
7274
import de.symeda.sormas.api.sample.SampleAssociationType;
7375
import de.symeda.sormas.api.user.UserRight;
7476
import de.symeda.sormas.api.utils.DataHelper;
@@ -83,6 +85,7 @@
8385
import de.symeda.sormas.ui.map.LeafletMarker;
8486
import de.symeda.sormas.ui.map.LeafletPolygon;
8587
import de.symeda.sormas.ui.map.MarkerIcon;
88+
import de.symeda.sormas.ui.utils.ComboBoxHelper;
8689
import de.symeda.sormas.ui.utils.CssStyles;
8790
import de.symeda.sormas.ui.utils.VaadinUiUtil;
8891

@@ -196,6 +199,7 @@ protected Long getMarkerCount(Date fromDate, Date toDate, int maxCount) {
196199
RegionReferenceDto region = dashboardDataProvider.getRegion();
197200
DistrictReferenceDto district = dashboardDataProvider.getDistrict();
198201
Disease disease = dashboardDataProvider.getDisease();
202+
Sex sex = dashboardDataProvider.getSex();
199203

200204
if (loadCases) {
201205
if (showCases) {
@@ -206,7 +210,8 @@ protected Long getMarkerCount(Date fromDate, Date toDate, int maxCount) {
206210
disease,
207211
fromDate,
208212
toDate,
209-
showCurrentEpiSituation ? null : dashboardDataProvider.getCaseDateType());
213+
showCurrentEpiSituation ? null : dashboardDataProvider.getCaseDateType(),
214+
sex);
210215
}
211216
} else if (loadContacts) {
212217
if (showContacts) {
@@ -234,6 +239,7 @@ protected void loadMapData(Date fromDate, Date toDate) {
234239
RegionReferenceDto region = dashboardDataProvider.getRegion();
235240
DistrictReferenceDto district = dashboardDataProvider.getDistrict();
236241
Disease disease = dashboardDataProvider.getDisease();
242+
Sex sex = dashboardDataProvider.getSex();
237243

238244
clearRegionShapes();
239245

@@ -257,7 +263,8 @@ protected void loadMapData(Date fromDate, Date toDate) {
257263
disease,
258264
fromDate,
259265
toDate,
260-
showCurrentEpiSituation ? null : dashboardDataProvider.getCaseDateType()));
266+
showCurrentEpiSituation ? null : dashboardDataProvider.getCaseDateType(),
267+
sex));
261268
}
262269
loadCases = false;
263270
}
@@ -328,6 +335,17 @@ protected void addLayerOptions(VerticalLayout layersLayout) {
328335
refreshMap(true);
329336
});
330337

338+
//sex combobox
339+
ComboBox caseSexCombobox = ComboBoxHelper.createComboBoxV7();
340+
caseSexCombobox.setId("caseSexFilter");
341+
caseSexCombobox.setInputPrompt(I18nProperties.getString(Strings.promptCaseSex));
342+
caseSexCombobox.addItems((Object[]) Sex.values());
343+
caseSexCombobox.addValueChangeListener(event -> {
344+
dashboardDataProvider.setSex((Sex) event.getProperty().getValue());
345+
loadCases = true;
346+
refreshMap(true);
347+
});
348+
331349
if (UiUtil.permitted(UserRight.CASE_VIEW)) {
332350
HorizontalLayout showCasesLayout = new HorizontalLayout();
333351
{
@@ -343,6 +361,7 @@ protected void addLayerOptions(VerticalLayout layersLayout) {
343361
mapCaseDisplayModeSelect.setEnabled(showCases);
344362
mapCaseDisplayModeSelect.setValue(mapCaseDisplayMode);
345363
caseClassificationOptions.setEnabled(showCases);
364+
caseSexCombobox.setEnabled(showCases);
346365
loadCases = true;
347366
refreshMap(true);
348367
});
@@ -362,6 +381,9 @@ protected void addLayerOptions(VerticalLayout layersLayout) {
362381

363382
casesLayers.addComponent(caseClassificationOptions);
364383
caseClassificationOptions.setEnabled(showCases);
384+
385+
casesLayers.addComponent(caseSexCombobox);
386+
caseSexCombobox.setEnabled(showCases);
365387
}
366388
}
367389

0 commit comments

Comments
 (0)