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

Commit c5bc4cd

Browse files
committed
2644 add population data for percentage diagram
1 parent 93686b9 commit c5bc4cd

5 files changed

Lines changed: 122 additions & 67 deletions

File tree

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

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,25 @@ public CampaignDiagramDataDto(String fieldCaption, Number valueSum, Object group
2525
this.formId = formId;
2626
}
2727

28+
public CampaignDiagramDataDto(
29+
String fieldCaption,
30+
Number valueSum,
31+
Object groupingKey,
32+
String groupingCaption,
33+
String fieldId,
34+
String formId,
35+
boolean hasAgeGroupData,
36+
String stack) {
37+
this.fieldCaption = fieldCaption;
38+
this.valueSum = valueSum;
39+
this.groupingKey = groupingKey;
40+
this.groupingCaption = groupingCaption;
41+
this.fieldId = fieldId;
42+
this.formId = formId;
43+
this.hasAgeGroupData = hasAgeGroupData;
44+
this.stack = stack;
45+
}
46+
2847
public CampaignDiagramDataDto(
2948
String fieldCaption,
3049
Number valueSum,
@@ -40,6 +59,7 @@ public CampaignDiagramDataDto(
4059
this.fieldId = fieldId;
4160
this.formId = formId;
4261
this.hasAgeGroupData = hasAgeGroupData;
62+
4363
}
4464

4565
public CampaignDiagramDataDto(
@@ -125,7 +145,7 @@ public void setStack(String stack) {
125145
this.stack = stack;
126146
}
127147

128-
public boolean isHasAgeGroupData() {
148+
public boolean getHasAgeGroupData() {
129149
return hasAgeGroupData;
130150
}
131151

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

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -335,7 +335,7 @@ public List<CampaignDiagramDataDto> getDiagramDataByAgeGroup(
335335
new CampaignDiagramDataDto(
336336
areaItem.getName(),
337337
0,
338-
areaItem.getName(),
338+
areaItem.getUuid(),
339339
areaItem.getName(),
340340
diagramSeries.getFieldId(),
341341
diagramSeries.getFormId(),
@@ -345,7 +345,7 @@ public List<CampaignDiagramDataDto> getDiagramDataByAgeGroup(
345345
new CampaignDiagramDataDto(
346346
areaItem.getName(),
347347
population,
348-
areaItem.getName(),
348+
areaItem.getUuid(),
349349
areaItem.getName(),
350350
diagramSeries.getFieldId(),
351351
diagramSeries.getFormId(),
@@ -359,7 +359,7 @@ public List<CampaignDiagramDataDto> getDiagramDataByAgeGroup(
359359
new CampaignDiagramDataDto(
360360
area.getCaption(),
361361
0,
362-
area.getCaption(),
362+
area.getUuid(),
363363
area.getCaption(),
364364
diagramSeries.getFieldId(),
365365
diagramSeries.getFormId(),
@@ -378,7 +378,7 @@ public List<CampaignDiagramDataDto> getDiagramDataByAgeGroup(
378378
new CampaignDiagramDataDto(
379379
regionReferenceDto.getCaption(),
380380
populationSum,
381-
regionReferenceDto.getCaption(),
381+
regionReferenceDto.getUuid(),
382382
regionReferenceDto.getCaption(),
383383
diagramSeries.getFieldId(),
384384
diagramSeries.getFormId(),
@@ -388,7 +388,7 @@ public List<CampaignDiagramDataDto> getDiagramDataByAgeGroup(
388388
new CampaignDiagramDataDto(
389389
regionReferenceDto.getCaption(),
390390
0,
391-
regionReferenceDto.getCaption(),
391+
regionReferenceDto.getUuid(),
392392
regionReferenceDto.getCaption(),
393393
diagramSeries.getFieldId(),
394394
diagramSeries.getFormId(),
@@ -407,7 +407,7 @@ public List<CampaignDiagramDataDto> getDiagramDataByAgeGroup(
407407
new CampaignDiagramDataDto(
408408
region.getCaption(),
409409
0,
410-
region.getCaption(),
410+
region.getUuid(),
411411
region.getCaption(),
412412
diagramSeries.getFieldId(),
413413
diagramSeries.getFormId(),
@@ -427,7 +427,7 @@ public List<CampaignDiagramDataDto> getDiagramDataByAgeGroup(
427427
new CampaignDiagramDataDto(
428428
districtReferenceDto.getCaption(),
429429
populationSum,
430-
districtReferenceDto.getCaption(),
430+
districtReferenceDto.getUuid(),
431431
districtReferenceDto.getCaption(),
432432
diagramSeries.getFieldId(),
433433
diagramSeries.getFormId(),
@@ -437,7 +437,7 @@ public List<CampaignDiagramDataDto> getDiagramDataByAgeGroup(
437437
new CampaignDiagramDataDto(
438438
districtReferenceDto.getCaption(),
439439
populationSum,
440-
districtReferenceDto.getCaption(),
440+
districtReferenceDto.getUuid(),
441441
districtReferenceDto.getCaption(),
442442
diagramSeries.getFieldId(),
443443
diagramSeries.getFormId(),
@@ -450,7 +450,7 @@ public List<CampaignDiagramDataDto> getDiagramDataByAgeGroup(
450450
new CampaignDiagramDataDto(
451451
district.getCaption(),
452452
0,
453-
district.getCaption(),
453+
district.getUuid(),
454454
district.getCaption(),
455455
diagramSeries.getFieldId(),
456456
diagramSeries.getFormId(),

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

Lines changed: 64 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -53,30 +53,43 @@ protected void refreshDiagramsData(String tabId, String subTabId) {
5353
campaignDiagramDefinitionsMap.get(campaign).forEach(campaignDashboardDiagramDto -> {
5454
final CampaignDashboardElement campaignDashboardElement = campaignDashboardDiagramDto.getCampaignDashboardElement();
5555
if (campaignDashboardElement.getTabId().equals(tabId) && (subTabId == null || campaignDashboardElement.getSubTabId().equals(subTabId))) {
56-
List<CampaignDiagramSeries> campaignSeriesTotal = campaignDashboardDiagramDto.getCampaignDiagramDefinitionDto().getCampaignSeriesTotal();
57-
if (Objects.nonNull(campaignSeriesTotal)) {
58-
Optional populationGroup = campaignSeriesTotal.stream().filter(e -> Objects.nonNull(e.getPopulationGroup())).findFirst();
59-
Optional formIdOptional = campaignSeriesTotal.stream().filter(e -> Objects.nonNull(e.getFormId())).findFirst();
56+
List<CampaignDiagramDataDto> diagramData = FacadeProvider.getCampaignFormDataFacade()
57+
.getDiagramData(
58+
campaignDashboardDiagramDto.getCampaignDiagramDefinitionDto().getCampaignDiagramSeries(),
59+
new CampaignDiagramCriteria(campaign, area, region, district));
60+
campaignFormDataMap.put(campaignDashboardDiagramDto, diagramData);
61+
List<CampaignDiagramSeries> campaignSeriesTotal =
62+
campaignDashboardDiagramDto.getCampaignDiagramDefinitionDto().getCampaignSeriesTotal();
63+
64+
List<CampaignDiagramDataDto> percentageDiagramData = null;
65+
if (campaignDashboardDiagramDto.getCampaignDiagramDefinitionDto().getCampaignSeriesTotal() != null) {
66+
Optional populationGroup = campaignSeriesTotal.stream().filter(e -> Objects.nonNull(e.getPopulationGroup())).findFirst();
67+
Optional formIdOptional = campaignSeriesTotal.stream().filter(e -> Objects.nonNull(e.getFormId())).findFirst();
68+
if (populationGroup.isPresent() && formIdOptional.isPresent()) {
69+
Notification.show(String.format(I18nProperties.getString(Strings.errorFormIdPopulationAgeGroup)), ERROR_MESSAGE);
70+
} else {
6071
if (populationGroup.isPresent()) {
61-
if (formIdOptional.isPresent()) {
62-
Notification.show(String.format(I18nProperties.getString(Strings.errorFormIdPopulationAgeGroup)), ERROR_MESSAGE);
63-
} else {
64-
List<CampaignDiagramDataDto> diagramData = FacadeProvider.getCampaignFormDataFacade()
65-
.getDiagramDataByAgeGroup(
66-
(CampaignDiagramSeries) populationGroup.get(),
67-
campaignDashboardDiagramDto.getCampaignDiagramDefinitionDto().getCampaignDiagramSeries().get(0),
68-
new CampaignDiagramCriteria(campaign, area, region, district));
69-
if (diagramData.isEmpty()) {
70-
Notification.show(String.format(I18nProperties.getString(Strings.errorNoPopulationDataFound)), ERROR_MESSAGE);
71-
buildCampaignFormTotalsMap(campaignDashboardDiagramDto);
72-
} else {
73-
campaignFormDataMap.put(campaignDashboardDiagramDto, diagramData);
74-
}
75-
}
72+
percentageDiagramData = FacadeProvider.getCampaignFormDataFacade()
73+
.getDiagramDataByAgeGroup(
74+
(CampaignDiagramSeries) populationGroup.get(),
75+
campaignDashboardDiagramDto.getCampaignDiagramDefinitionDto().getCampaignDiagramSeries().get(0),
76+
new CampaignDiagramCriteria(campaign, area, region, district));
77+
} else {
78+
percentageDiagramData = FacadeProvider.getCampaignFormDataFacade()
79+
.getDiagramData(
80+
campaignDashboardDiagramDto.getCampaignDiagramDefinitionDto().getCampaignSeriesTotal(),
81+
new CampaignDiagramCriteria(campaign, area, region, district));
7682
}
77-
} else {
78-
buildCampaignFormTotalsMap(campaignDashboardDiagramDto);
83+
Map<CampaignDashboardTotalsReference, Double> percentageMap = new HashMap<>();
84+
for (CampaignDiagramDataDto data : percentageDiagramData) {
85+
CampaignDashboardTotalsReference totals = new CampaignDashboardTotalsReference(data.getGroupingKey(), data.getStack());
86+
Double value = percentageMap.getOrDefault(totals, 0D);
87+
value += data.getValueSum().doubleValue();
88+
percentageMap.put(totals, value);
89+
}
90+
campaignFormTotalsMap.put(campaignDashboardDiagramDto, percentageMap);
7991
}
92+
}
8093
}
8194
});
8295
}
@@ -87,21 +100,37 @@ private void buildCampaignFormTotalsMap(CampaignDashboardDiagramDto campaignDash
87100
campaignDashboardDiagramDto.getCampaignDiagramDefinitionDto().getCampaignDiagramSeries(),
88101
new CampaignDiagramCriteria(campaign, area, region, district));
89102
campaignFormDataMap.put(campaignDashboardDiagramDto, diagramData);
90-
91-
if (campaignDashboardDiagramDto.getCampaignDiagramDefinitionDto().getCampaignSeriesTotal() != null) {
92-
List<CampaignDiagramDataDto> percentageDiagramData = FacadeProvider.getCampaignFormDataFacade()
93-
.getDiagramData(
94-
campaignDashboardDiagramDto.getCampaignDiagramDefinitionDto().getCampaignSeriesTotal(),
95-
new CampaignDiagramCriteria(campaign, area, region, district));
96-
97-
Map<CampaignDashboardTotalsReference, Double> percentageMap = new HashMap<>();
98-
for (CampaignDiagramDataDto data : percentageDiagramData) {
99-
CampaignDashboardTotalsReference totals = new CampaignDashboardTotalsReference(data.getGroupingKey(), data.getStack());
100-
Double value = percentageMap.getOrDefault(totals, 0D);
101-
value += data.getValueSum().doubleValue();
102-
percentageMap.put(totals, value);
103+
List<CampaignDiagramSeries> campaignSeriesTotal = campaignDashboardDiagramDto.getCampaignDiagramDefinitionDto().getCampaignSeriesTotal();
104+
List<CampaignDiagramDataDto> percentageDiagramData = null;
105+
if (campaignSeriesTotal != null) {
106+
if (Objects.nonNull(campaignSeriesTotal)) {
107+
Optional populationGroup = campaignSeriesTotal.stream().filter(e -> Objects.nonNull(e.getPopulationGroup())).findFirst();
108+
Optional formIdOptional = campaignSeriesTotal.stream().filter(e -> Objects.nonNull(e.getFormId())).findFirst();
109+
if (populationGroup.isPresent()) {
110+
if (formIdOptional.isPresent()) {
111+
Notification.show(String.format(I18nProperties.getString(Strings.errorFormIdPopulationAgeGroup)), ERROR_MESSAGE);
112+
} else {
113+
percentageDiagramData = FacadeProvider.getCampaignFormDataFacade()
114+
.getDiagramDataByAgeGroup(
115+
(CampaignDiagramSeries) populationGroup.get(),
116+
campaignDashboardDiagramDto.getCampaignDiagramDefinitionDto().getCampaignDiagramSeries().get(0),
117+
new CampaignDiagramCriteria(campaign, area, region, district));
118+
}
119+
} else {
120+
percentageDiagramData = FacadeProvider.getCampaignFormDataFacade()
121+
.getDiagramData(
122+
campaignDashboardDiagramDto.getCampaignDiagramDefinitionDto().getCampaignSeriesTotal(),
123+
new CampaignDiagramCriteria(campaign, area, region, district));
124+
}
125+
Map<CampaignDashboardTotalsReference, Double> percentageMap = new HashMap<>();
126+
for (CampaignDiagramDataDto data : percentageDiagramData) {
127+
CampaignDashboardTotalsReference totals = new CampaignDashboardTotalsReference(data.getGroupingKey(), data.getStack());
128+
Double value = percentageMap.getOrDefault(totals, 0D);
129+
value += data.getValueSum().doubleValue();
130+
percentageMap.put(totals, value);
131+
}
132+
campaignFormTotalsMap.put(campaignDashboardDiagramDto, percentageMap);
103133
}
104-
campaignFormTotalsMap.put(campaignDashboardDiagramDto, percentageMap);
105134
}
106135
}
107136

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

Lines changed: 23 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,8 @@ public CampaignDashboardDiagramComponent(
4848
List<CampaignDiagramDataDto> diagramDataList,
4949
Map<CampaignDashboardTotalsReference, Double> totalValuesMap,
5050
boolean showPercentages,
51-
String populationGroupDiagramTitle) {
51+
String populationGroupDiagramTitle,
52+
boolean isCampaignGrouping) {
5253
this.populationGroupDiagramTitle = populationGroupDiagramTitle;
5354
this.diagramDefinition = diagramDefinition;
5455
this.showPercentages = showPercentages;
@@ -83,10 +84,10 @@ public CampaignDashboardDiagramComponent(
8384
objectCampaignDiagramDataDtoMap.put(diagramData.getGroupingKey(), diagramData);
8485
}
8586

86-
buildDiagramChart(diagramDefinition.getDiagramCaption());
87+
buildDiagramChart(diagramDefinition.getDiagramCaption(), isCampaignGrouping);
8788
}
8889

89-
public void buildDiagramChart(String title) {
90+
public void buildDiagramChart(String title, boolean isCampaignGrouping) {
9091
final StringBuilder hcjs = new StringBuilder();
9192

9293
//@formatter:off
@@ -173,6 +174,7 @@ public void buildDiagramChart(String title) {
173174
}
174175

175176
hcjs.append("series: [");
177+
List<String> noPopulationLocations = new LinkedList<>();
176178
for (CampaignDiagramSeries series : diagramDefinition.getCampaignDiagramSeries()) {
177179
String seriesKey = series.getFormId() + series.getFieldId();
178180
if (!diagramDataBySeriesAndXAxis.containsKey(seriesKey))
@@ -181,17 +183,6 @@ public void buildDiagramChart(String title) {
181183
Map<Object, CampaignDiagramDataDto> seriesData = diagramDataBySeriesAndXAxis.get(seriesKey);
182184
Collection<CampaignDiagramDataDto> values = seriesData.values();
183185
Iterator<CampaignDiagramDataDto> iterator = values.iterator();
184-
List<String> noPopulationLocations = new LinkedList<>();
185-
for (CampaignDiagramDataDto dData : values) {
186-
if (!dData.isHasAgeGroupData()) {
187-
noPopulationLocations.add(dData.getFieldCaption());
188-
}
189-
}
190-
if (!noPopulationLocations.isEmpty()) {
191-
Notification.show(
192-
String.format(I18nProperties.getString(Strings.errorNoPopulationDataLocations), String.join(",", noPopulationLocations)),
193-
ERROR_MESSAGE);
194-
}
195186
String fieldName;
196187
if (Objects.nonNull(populationGroupDiagramTitle)) {
197188
fieldName = populationGroupDiagramTitle;
@@ -207,11 +198,15 @@ public void buildDiagramChart(String title) {
207198
seriesData.get(axisKey).getGroupingKey(),
208199
totalValuesWithoutStacks ? null : series.getStack()));
209200
if (totalValue == null) {
210-
Notification.show(
211-
String.format(
212-
I18nProperties.getString(Strings.errorCampaignDiagramTotalsCalculationError),
213-
diagramDefinition.getDiagramCaption()),
214-
ERROR_MESSAGE);
201+
if (isCampaignGrouping) {
202+
Notification.show(String.format(I18nProperties.getString(Strings.populationDataByCommunity)), ERROR_MESSAGE);
203+
} else {
204+
Notification.show(
205+
String.format(
206+
I18nProperties.getString(Strings.errorCampaignDiagramTotalsCalculationError),
207+
diagramDefinition.getDiagramCaption()),
208+
ERROR_MESSAGE);
209+
}
215210
} else if (totalValue > 0) {
216211
hcjs.append(
217212
BigDecimal.valueOf(seriesData.get(axisKey).getValueSum().doubleValue() / totalValue * 100)
@@ -221,6 +216,9 @@ public void buildDiagramChart(String title) {
221216
} else {
222217
hcjs.append("0,");
223218
}
219+
if ((Double.valueOf(0)).equals(totalValue)) {
220+
noPopulationLocations.add(seriesData.get(axisKey).getGroupingCaption());
221+
}
224222
} else {
225223
hcjs.append(seriesData.get(axisKey).getValueSum().toString()).append(",");
226224
}
@@ -236,7 +234,13 @@ public void buildDiagramChart(String title) {
236234
}
237235
hcjs.append("]");
238236
hcjs.append("}");
237+
if (!noPopulationLocations.isEmpty() && showPercentages)
239238

239+
{
240+
Notification.show(
241+
String.format(I18nProperties.getString(Strings.errorNoPopulationDataLocations), String.join(",", noPopulationLocations)),
242+
ERROR_MESSAGE);
243+
}
240244
campaignColumnChart.setHcjs(hcjs.toString());
241245
}
242246

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

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,7 @@ private void refreshDiagrams(Page page, VerticalLayout layout, String tabId, Str
188188
final String diagramCssClass = diagramId + generateRandomString();
189189
String diagramTitle = null;
190190
List<CampaignDiagramSeries> campaignSeriesTotal = campaignDiagramDefinitionDto.getCampaignSeriesTotal();
191-
if (!CollectionUtils.isEmpty(campaignSeriesTotal)) {
191+
if (!CollectionUtils.isEmpty(campaignSeriesTotal) && campaignDiagramDefinitionDto.isPercentageDefault()) {
192192
if (campaignSeriesTotal.stream().filter(e -> Objects.nonNull(e.getPopulationGroup())).findAny().isPresent()) {
193193
if (Objects.isNull(dataProvider.getArea())) {
194194
diagramTitle = I18nProperties.getString(Strings.populationDataByArea);
@@ -206,7 +206,8 @@ private void refreshDiagrams(Page page, VerticalLayout layout, String tabId, Str
206206
diagramData,
207207
dataProvider.getCampaignFormTotalsMap().get(campaignDashboardDiagramDto),
208208
campaignDiagramDefinitionDto.isPercentageDefault(),
209-
diagramTitle);
209+
diagramTitle,
210+
Objects.nonNull(dataProvider.getDistrict()));
210211
styles.add(createDiagramStyle(diagramCssClass, diagramId));
211212
diagramComponent.setStyleName(diagramCssClass);
212213

@@ -215,7 +216,8 @@ private void refreshDiagrams(Page page, VerticalLayout layout, String tabId, Str
215216
int index = diagramsLayout.getComponentIndex(diagramComponent);
216217
diagramsLayout.removeComponent(diagramComponent);
217218
diagramComponent.setShowPercentages(!diagramComponent.isShowPercentages());
218-
diagramComponent.buildDiagramChart(campaignDiagramDefinitionDto.getDiagramCaption());
219+
diagramComponent
220+
.buildDiagramChart(campaignDiagramDefinitionDto.getDiagramCaption(), Objects.nonNull(dataProvider.getDistrict()));
219221
diagramsLayout.addComponent(diagramComponent, index);
220222
});
221223

0 commit comments

Comments
 (0)