Skip to content
This repository was archived by the owner on May 5, 2021. It is now read-only.

Commit 4f40058

Browse files
Merge pull request SORMAS-Foundation#3901 from hzi-braunschweig/feature-3717-CampaignDiagramJurisdictionGrouping
SORMAS-Foundation#3717 - add group by jurisdiction level option to campaign dashboard
2 parents 9aae976 + 473772b commit 4f40058

8 files changed

Lines changed: 192 additions & 50 deletions

File tree

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package de.symeda.sormas.api.campaign;
2+
3+
import de.symeda.sormas.api.i18n.I18nProperties;
4+
import de.symeda.sormas.api.user.JurisdictionLevel;
5+
6+
public enum CampaignJurisdictionLevel {
7+
8+
AREA,
9+
REGION,
10+
DISTRICT,
11+
COMMUNITY;
12+
13+
public static CampaignJurisdictionLevel getByJurisdictionLevel(JurisdictionLevel jurisdictionLevel) {
14+
switch (jurisdictionLevel) {
15+
16+
case NATION:
17+
case NONE:
18+
return AREA;
19+
case REGION:
20+
return REGION;
21+
case DISTRICT:
22+
return DISTRICT;
23+
case COMMUNITY:
24+
return COMMUNITY;
25+
default:
26+
throw new UnsupportedOperationException();
27+
}
28+
}
29+
30+
public String toString() {
31+
return I18nProperties.getEnumCaption(this);
32+
}
33+
}

sormas-api/src/main/java/de/symeda/sormas/api/campaign/diagram/CampaignDiagramCriteria.java

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import java.io.Serializable;
44

55
import de.symeda.sormas.api.BaseCriteria;
6+
import de.symeda.sormas.api.campaign.CampaignJurisdictionLevel;
67
import de.symeda.sormas.api.campaign.CampaignReferenceDto;
78
import de.symeda.sormas.api.region.AreaReferenceDto;
89
import de.symeda.sormas.api.region.DistrictReferenceDto;
@@ -14,12 +15,19 @@ public class CampaignDiagramCriteria extends BaseCriteria implements Serializabl
1415
private AreaReferenceDto area;
1516
private RegionReferenceDto region;
1617
private DistrictReferenceDto district;
18+
private CampaignJurisdictionLevel campaignJurisdictionLevelGroupBy;
1719

18-
public CampaignDiagramCriteria(CampaignReferenceDto campaign, AreaReferenceDto area, RegionReferenceDto region, DistrictReferenceDto district) {
20+
public CampaignDiagramCriteria(
21+
CampaignReferenceDto campaign,
22+
AreaReferenceDto area,
23+
RegionReferenceDto region,
24+
DistrictReferenceDto district,
25+
CampaignJurisdictionLevel campaignJurisdictionLevelGroupBy) {
1926
this.campaign = campaign;
2027
this.area = area;
2128
this.region = region;
2229
this.district = district;
30+
this.campaignJurisdictionLevelGroupBy = campaignJurisdictionLevelGroupBy;
2331
}
2432

2533
public CampaignReferenceDto getCampaign() {
@@ -53,4 +61,12 @@ public DistrictReferenceDto getDistrict() {
5361
public void setDistrict(DistrictReferenceDto district) {
5462
this.district = district;
5563
}
64+
65+
public CampaignJurisdictionLevel getCampaignJurisdictionLevelGroupBy() {
66+
return campaignJurisdictionLevelGroupBy;
67+
}
68+
69+
public void setCampaignJurisdictionLevelGroupBy(CampaignJurisdictionLevel campaignJurisdictionLevelGroupBy) {
70+
this.campaignJurisdictionLevelGroupBy = campaignJurisdictionLevelGroupBy;
71+
}
5672
}

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,7 @@ public interface Captions {
165165
String campaignDashboardOrder = "campaignDashboardOrder";
166166
String campaignDashboardSubTabName = "campaignDashboardSubTabName";
167167
String campaignDashboardTabName = "campaignDashboardTabName";
168+
String campaignDiagramGroupBy = "campaignDiagramGroupBy";
168169
String CampaignFormData_area = "CampaignFormData.area";
169170
String CampaignFormData_campaign = "CampaignFormData.campaign";
170171
String CampaignFormData_campaignFormMeta = "CampaignFormData.campaignFormMeta";

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,7 @@ campaignDashboardChartWidth=Width in %
214214
campaignDashboardChartHeight=Height in %
215215
campaignDashboardOrder=Order
216216
campaignSearch=Search Campaign
217+
campaignDiagramGroupBy=Group by
217218

218219
Campaign=Campaign
219220
Campaign.name=Name

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,12 @@ CampaignPhase.PRE = Pre-Campaign
111111
CampaignPhase.INTRA = Intra-Campaign
112112
CampaignPhase.POST = Post-Campaign
113113

114+
# CampaignJurisdictionLevel
115+
CampaignJurisdictionLevel.AREA = Area
116+
CampaignJurisdictionLevel.REGION = Region
117+
CampaignJurisdictionLevel.DISTRICT = District
118+
CampaignJurisdictionLevel.COMMUNITY = Community
119+
114120
# CaseClassification
115121
CaseClassification.CONFIRMED = Confirmed case
116122
CaseClassification.CONFIRMED_NO_SYMPTOMS = Confirmed case with no symptoms

sormas-backend/src/main/java/de/symeda/sormas/backend/campaign/data/CampaignFormDataFacadeEjb.java

Lines changed: 31 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,7 @@
2121
package de.symeda.sormas.backend.campaign.data;
2222

2323
import java.sql.Timestamp;
24-
import java.util.ArrayList;
25-
import java.util.Collections;
26-
import java.util.Date;
27-
import java.util.List;
28-
import java.util.Objects;
24+
import java.util.*;
2925
import java.util.stream.Collectors;
3026

3127
import javax.ejb.EJB;
@@ -35,23 +31,11 @@
3531
import javax.persistence.NoResultException;
3632
import javax.persistence.PersistenceContext;
3733
import javax.persistence.Query;
38-
import javax.persistence.criteria.CriteriaBuilder;
39-
import javax.persistence.criteria.CriteriaQuery;
40-
import javax.persistence.criteria.Expression;
41-
import javax.persistence.criteria.Join;
42-
import javax.persistence.criteria.JoinType;
43-
import javax.persistence.criteria.Order;
44-
import javax.persistence.criteria.Predicate;
45-
import javax.persistence.criteria.Root;
34+
import javax.persistence.criteria.*;
4635
import javax.validation.constraints.NotNull;
4736

4837
import de.symeda.sormas.api.campaign.CampaignReferenceDto;
49-
import de.symeda.sormas.api.campaign.data.CampaignFormDataCriteria;
50-
import de.symeda.sormas.api.campaign.data.CampaignFormDataDto;
51-
import de.symeda.sormas.api.campaign.data.CampaignFormDataEntry;
52-
import de.symeda.sormas.api.campaign.data.CampaignFormDataFacade;
53-
import de.symeda.sormas.api.campaign.data.CampaignFormDataIndexDto;
54-
import de.symeda.sormas.api.campaign.data.CampaignFormDataReferenceDto;
38+
import de.symeda.sormas.api.campaign.data.*;
5539
import de.symeda.sormas.api.campaign.diagram.CampaignDiagramCriteria;
5640
import de.symeda.sormas.api.campaign.diagram.CampaignDiagramDataDto;
5741
import de.symeda.sormas.api.campaign.diagram.CampaignDiagramSeries;
@@ -76,17 +60,7 @@
7660
import de.symeda.sormas.backend.common.BaseAdoService;
7761
import de.symeda.sormas.backend.common.AbstractDomainObject;
7862
import de.symeda.sormas.backend.infrastructure.PopulationDataFacadeEjb;
79-
import de.symeda.sormas.backend.region.Area;
80-
import de.symeda.sormas.backend.region.AreaService;
81-
import de.symeda.sormas.backend.region.Community;
82-
import de.symeda.sormas.backend.region.CommunityFacadeEjb;
83-
import de.symeda.sormas.backend.region.CommunityService;
84-
import de.symeda.sormas.backend.region.District;
85-
import de.symeda.sormas.backend.region.DistrictFacadeEjb;
86-
import de.symeda.sormas.backend.region.DistrictService;
87-
import de.symeda.sormas.backend.region.Region;
88-
import de.symeda.sormas.backend.region.RegionFacadeEjb;
89-
import de.symeda.sormas.backend.region.RegionService;
63+
import de.symeda.sormas.backend.region.*;
9064
import de.symeda.sormas.backend.user.UserFacadeEjb;
9165
import de.symeda.sormas.backend.user.UserService;
9266
import de.symeda.sormas.backend.util.DtoHelper;
@@ -518,11 +492,6 @@ public List<CampaignDiagramDataDto> getDiagramData(List<CampaignDiagramSeries> d
518492
final String regionFilter = region != null ? " AND " + CampaignFormData.REGION + "." + Region.UUID + " = '" + region.getUuid() + "'" : "";
519493
final String districtFilter = district != null ? " AND " + CampaignFormData.DISTRICT + "." + District.UUID + " = '" + district.getUuid() + "'" : "";
520494
final String campaignFilter = campaign != null ? " AND " + Campaign.TABLE_NAME + "." + Campaign.UUID + " = '" + campaign.getUuid() + "'" : "";
521-
final String jurisdictionGrouping =
522-
district != null ? ", " + Community.TABLE_NAME + "." + Community.UUID + ", " + Community.TABLE_NAME + "." + Community.NAME :
523-
region != null ? ", " + District.TABLE_NAME + "." + District.UUID + ", " + District.TABLE_NAME + "." + District.NAME :
524-
area != null ? ", " + Region.TABLE_NAME + "." + Region.UUID + ", " + Region.TABLE_NAME + "." + Region.NAME :
525-
", " + Area.TABLE_NAME + "." + Area.UUID + ", " + Area.TABLE_NAME + "." + Area.NAME;
526495
//@formatter:on
527496

528497
// SELECT
@@ -556,13 +525,19 @@ public List<CampaignDiagramDataDto> getDiagramData(List<CampaignDiagramSeries> d
556525
selectBuilder.append(", null as fieldId, null as fieldCaption, count(formId) as sumValue,");
557526
}
558527

559-
if (district != null) {
560-
appendInfrastructureSelection(selectBuilder, Community.TABLE_NAME, Community.NAME);
561-
} else if (region != null) {
562-
appendInfrastructureSelection(selectBuilder, District.TABLE_NAME, District.NAME);
563-
} else if (area != null) {
528+
final String jurisdictionGrouping;
529+
switch (campaignDiagramCriteria.getCampaignJurisdictionLevelGroupBy()) {
530+
case REGION:
564531
appendInfrastructureSelection(selectBuilder, Region.TABLE_NAME, Region.NAME);
565-
} else {
532+
break;
533+
case DISTRICT:
534+
appendInfrastructureSelection(selectBuilder, District.TABLE_NAME, District.NAME);
535+
break;
536+
case COMMUNITY:
537+
appendInfrastructureSelection(selectBuilder, Community.TABLE_NAME, Community.NAME);
538+
break;
539+
case AREA:
540+
default:
566541
appendInfrastructureSelection(selectBuilder, Area.TABLE_NAME, Area.NAME);
567542
}
568543

@@ -661,6 +636,21 @@ public List<CampaignDiagramDataDto> getDiagramData(List<CampaignDiagramSeries> d
661636
.append("'");
662637
}
663638

639+
switch (campaignDiagramCriteria.getCampaignJurisdictionLevelGroupBy()) {
640+
case REGION:
641+
jurisdictionGrouping = ", " + Region.TABLE_NAME + "." + Region.UUID + ", " + Region.TABLE_NAME + "." + Region.NAME;
642+
break;
643+
case DISTRICT:
644+
jurisdictionGrouping = ", " + District.TABLE_NAME + "." + District.UUID + ", " + District.TABLE_NAME + "." + District.NAME;
645+
break;
646+
case COMMUNITY:
647+
jurisdictionGrouping = ", " + Community.TABLE_NAME + "." + Community.UUID + ", " + Community.TABLE_NAME + "." + Community.NAME;
648+
break;
649+
case AREA:
650+
default:
651+
jurisdictionGrouping = ", " + Area.TABLE_NAME + "." + Area.UUID + ", " + Area.TABLE_NAME + "." + Area.NAME;
652+
}
653+
664654
groupByBuilder.append(jurisdictionGrouping);
665655

666656
//@formatter:off

sormas-ui/src/main/java/de/symeda/sormas/ui/dashboard/campaigns/CampaignDashboardDataProvider.java

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import java.util.Optional;
1111
import java.util.stream.Collectors;
1212

13+
import de.symeda.sormas.api.campaign.CampaignJurisdictionLevel;
1314
import org.slf4j.Logger;
1415
import org.slf4j.LoggerFactory;
1516

@@ -32,6 +33,7 @@ public class CampaignDashboardDataProvider {
3233
private AreaReferenceDto area;
3334
private RegionReferenceDto region;
3435
private DistrictReferenceDto district;
36+
private CampaignJurisdictionLevel campaignJurisdictionLevelGroupBy;
3537

3638
private final Map<CampaignReferenceDto, List<CampaignDashboardDiagramDto>> campaignDiagramDefinitionsMap = new HashMap<>();
3739

@@ -60,7 +62,7 @@ protected void refreshDiagramsData(String tabId, String subTabId) {
6062
List<CampaignDiagramDataDto> diagramData = FacadeProvider.getCampaignFormDataFacade()
6163
.getDiagramData(
6264
campaignDashboardDiagramDto.getCampaignDiagramDefinitionDto().getCampaignDiagramSeries(),
63-
new CampaignDiagramCriteria(campaign, area, region, district));
65+
new CampaignDiagramCriteria(campaign, area, region, district, campaignJurisdictionLevelGroupBy));
6466
campaignFormDataMap.put(campaignDashboardDiagramDto, diagramData);
6567
List<CampaignDiagramSeries> campaignSeriesTotal =
6668
campaignDashboardDiagramDto.getCampaignDiagramDefinitionDto().getCampaignSeriesTotal();
@@ -75,15 +77,15 @@ protected void refreshDiagramsData(String tabId, String subTabId) {
7577
.getDiagramDataByAgeGroup(
7678
(CampaignDiagramSeries) populationGroup.get(),
7779
campaignDashboardDiagramDto.getCampaignDiagramDefinitionDto().getCampaignDiagramSeries().get(0),
78-
new CampaignDiagramCriteria(campaign, area, region, district));
80+
new CampaignDiagramCriteria(campaign, area, region, district, campaignJurisdictionLevelGroupBy));
7981
if (formIdOptional.isPresent()) {
8082
logger.warn(String.format(I18nProperties.getString(Strings.errorFormIdPopulationAgeGroup)));
8183
}
8284
} else {
8385
percentageDiagramData = FacadeProvider.getCampaignFormDataFacade()
8486
.getDiagramData(
8587
campaignDashboardDiagramDto.getCampaignDiagramDefinitionDto().getCampaignSeriesTotal(),
86-
new CampaignDiagramCriteria(campaign, area, region, district));
88+
new CampaignDiagramCriteria(campaign, area, region, district, campaignJurisdictionLevelGroupBy));
8789
}
8890
Map<CampaignDashboardTotalsReference, Double> percentageMap = new HashMap<>();
8991
for (CampaignDiagramDataDto data : percentageDiagramData) {
@@ -162,6 +164,14 @@ public void setDistrict(DistrictReferenceDto district) {
162164
this.district = district;
163165
}
164166

167+
public CampaignJurisdictionLevel getCampaignJurisdictionLevelGroupBy() {
168+
return campaignJurisdictionLevelGroupBy;
169+
}
170+
171+
public void setCampaignJurisdictionLevelGroupBy(CampaignJurisdictionLevel campaignJurisdictionLevelGroupBy) {
172+
this.campaignJurisdictionLevelGroupBy = campaignJurisdictionLevelGroupBy;
173+
}
174+
165175
public Map<CampaignDashboardDiagramDto, List<CampaignDiagramDataDto>> getCampaignFormDataMap() {
166176
return campaignFormDataMap;
167177
}

0 commit comments

Comments
 (0)