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

Commit ea86e12

Browse files
alexandre-gillenca
andauthored
Location filters and columns in event directory SORMAS-Foundation#2914 (SORMAS-Foundation#3395)
* Allow location filters in the event directory to everyone SORMAS-Foundation#2914 * Split event location column into region, district, community and adress SORMAS-Foundation#2914 * Remove comma between street and house number in LocationReferenceDto's buildCaption SORMAS-Foundation#2914 * Override location filters dependencies in the event directory SORMAS-Foundation#2914 Co-authored-by: nca <[email protected]>
1 parent d732018 commit ea86e12

5 files changed

Lines changed: 140 additions & 33 deletions

File tree

sormas-api/src/main/java/de/symeda/sormas/api/event/EventIndexDto.java

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,10 @@ public class EventIndexDto extends PseudonymizableIndexDto implements Serializab
4545
public static final String SRC_LAST_NAME = "srcLastName";
4646
public static final String SRC_TEL_NO = "srcTelNo";
4747
public static final String REPORT_DATE_TIME = "reportDateTime";
48+
public static final String REGION = "region";
49+
public static final String DISTRICT = "district";
50+
public static final String COMMUNITY = "community";
51+
public static final String ADDRESS = "address";
4852

4953
private String uuid;
5054
private EventStatus eventStatus;
@@ -247,6 +251,22 @@ public void setParticipantCount(long participantCount) {
247251
this.participantCount = participantCount;
248252
}
249253

254+
public String getRegion() {
255+
return getEventLocation().getRegion();
256+
}
257+
258+
public String getDistrict() {
259+
return getEventLocation().getDistrict();
260+
}
261+
262+
public String getCommunity() {
263+
return getEventLocation().getCommunity();
264+
}
265+
266+
public String getAddress() {
267+
return getEventLocation().getAddress();
268+
}
269+
250270
public EventReferenceDto toReference() {
251271
return new EventReferenceDto(getUuid(), getDisease(), getDiseaseDetails(), getEventStatus(), getEventInvestigationStatus(), getStartDate());
252272
}
@@ -302,6 +322,22 @@ public EventIndexLocation(
302322
this.additionalInformation = additionalInformation;
303323
}
304324

325+
public String getRegion() {
326+
return regionName;
327+
}
328+
329+
public String getDistrict() {
330+
return districtName;
331+
}
332+
333+
public String getCommunity() {
334+
return communityName;
335+
}
336+
337+
public String getAddress() {
338+
return LocationReferenceDto.buildCaption(city, street, houseNumber, additionalInformation);
339+
}
340+
305341
@Override
306342
public String toString() {
307343
return LocationReferenceDto.buildCaption(regionName, districtName, communityName, city, street, houseNumber, additionalInformation);

sormas-api/src/main/java/de/symeda/sormas/api/location/LocationReferenceDto.java

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,9 +87,40 @@ public static String buildCaption(
8787
stringBuilder.append(street);
8888
}
8989
if (!DataHelper.isNullOrEmpty(houseNumber)) {
90+
if (stringBuilder.length() > 0 && DataHelper.isNullOrEmpty(street)) {
91+
stringBuilder.append(", ");
92+
}
93+
stringBuilder.append(houseNumber);
94+
}
95+
if (!DataHelper.isNullOrEmpty(additionalInformation)) {
96+
if (stringBuilder.length() > 0) {
97+
stringBuilder.append(", ");
98+
}
99+
stringBuilder.append(additionalInformation);
100+
}
101+
return stringBuilder.toString();
102+
}
103+
104+
public static String buildCaption(String city, String street, String houseNumber, String additionalInformation) {
105+
106+
StringBuilder stringBuilder = new StringBuilder();
107+
108+
if (!DataHelper.isNullOrEmpty(city)) {
109+
if (stringBuilder.length() > 0) {
110+
stringBuilder.append(", ");
111+
}
112+
stringBuilder.append(city);
113+
}
114+
if (!DataHelper.isNullOrEmpty(street)) {
90115
if (stringBuilder.length() > 0) {
91116
stringBuilder.append(", ");
92117
}
118+
stringBuilder.append(street);
119+
}
120+
if (!DataHelper.isNullOrEmpty(houseNumber)) {
121+
if (stringBuilder.length() > 0 && DataHelper.isNullOrEmpty(street)) {
122+
stringBuilder.append(", ");
123+
}
93124
stringBuilder.append(houseNumber);
94125
}
95126
if (!DataHelper.isNullOrEmpty(additionalInformation)) {

sormas-backend/src/main/java/de/symeda/sormas/backend/event/EventFacadeEjb.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -296,6 +296,24 @@ public List<EventIndexDto> getIndexList(EventCriteria eventCriteria, Integer fir
296296
order.add(sortProperty.ascending ? cb.asc(expression) : cb.desc(expression));
297297
expression = community.get(Community.NAME);
298298
break;
299+
case EventIndexDto.REGION:
300+
expression = region.get(Region.NAME);
301+
break;
302+
case EventIndexDto.DISTRICT:
303+
expression = district.get(District.NAME);
304+
break;
305+
case EventIndexDto.COMMUNITY:
306+
expression = community.get(Community.NAME);
307+
break;
308+
case EventIndexDto.ADDRESS:
309+
expression = location.get(Location.CITY);
310+
order.add(sortProperty.ascending ? cb.asc(expression) : cb.desc(expression));
311+
expression = location.get(Location.STREET);
312+
order.add(sortProperty.ascending ? cb.asc(expression) : cb.desc(expression));
313+
expression = location.get(Location.HOUSE_NUMBER);
314+
order.add(sortProperty.ascending ? cb.asc(expression) : cb.desc(expression));
315+
expression = location.get(Location.ADDITIONAL_INFORMATION);
316+
break;
299317
default:
300318
throw new IllegalArgumentException(sortProperty.propertyName);
301319
}

sormas-ui/src/main/java/de/symeda/sormas/ui/events/EventGrid.java

Lines changed: 27 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,18 @@
1717
*******************************************************************************/
1818
package de.symeda.sormas.ui.events;
1919

20+
import java.util.ArrayList;
21+
import java.util.Arrays;
22+
import java.util.Date;
23+
import java.util.List;
24+
import java.util.stream.Collectors;
25+
2026
import com.vaadin.data.provider.DataProvider;
2127
import com.vaadin.data.provider.ListDataProvider;
2228
import com.vaadin.navigator.View;
2329
import com.vaadin.shared.data.sort.SortDirection;
2430
import com.vaadin.ui.renderers.DateRenderer;
31+
2532
import de.symeda.sormas.api.DiseaseHelper;
2633
import de.symeda.sormas.api.FacadeProvider;
2734
import de.symeda.sormas.api.Language;
@@ -45,13 +52,6 @@
4552
import de.symeda.sormas.ui.utils.UuidRenderer;
4653
import de.symeda.sormas.ui.utils.ViewConfiguration;
4754

48-
import java.util.ArrayList;
49-
import java.util.Arrays;
50-
import java.util.Date;
51-
import java.util.List;
52-
import java.util.stream.Collectors;
53-
import java.util.stream.Stream;
54-
5555
@SuppressWarnings("serial")
5656
public class EventGrid extends FilteredGrid<EventIndexDto, EventCriteria> {
5757

@@ -93,26 +93,30 @@ public <V extends View> EventGrid(EventCriteria criteria, Class<V> viewClass) {
9393
boolean tasksFeatureEnabled = FacadeProvider.getFeatureConfigurationFacade().isFeatureEnabled(FeatureType.TASK_MANAGEMENT);
9494
if (tasksFeatureEnabled) {
9595
Column<EventIndexDto, String> pendingTasksColumn = addColumn(
96-
entry -> String.format(
97-
I18nProperties.getCaption(Captions.formatSimpleNumberFormat),
98-
FacadeProvider.getTaskFacade().getPendingTaskCountByEvent(entry.toReference())));
96+
entry -> String.format(
97+
I18nProperties.getCaption(Captions.formatSimpleNumberFormat),
98+
FacadeProvider.getTaskFacade().getPendingTaskCountByEvent(entry.toReference())));
9999
pendingTasksColumn.setId(NUMBER_OF_PENDING_TASKS);
100100
pendingTasksColumn.setSortable(false);
101101
}
102102

103-
List<String> columnIds = new ArrayList(Arrays.asList(
104-
EventIndexDto.UUID,
105-
EventIndexDto.EVENT_STATUS,
106-
EventIndexDto.EVENT_INVESTIGATION_STATUS,
107-
createEventDateColumn(this, userLanguage),
108-
DISEASE_SHORT,
109-
EventIndexDto.EVENT_TITLE,
110-
EventIndexDto.EVENT_LOCATION,
111-
EventIndexDto.SRC_TYPE,
112-
INFORMATION_SOURCE,
113-
EventIndexDto.REPORT_DATE_TIME,
114-
NUMBER_OF_PENDING_TASKS,
115-
EventIndexDto.PARTICIPANT_COUNT));
103+
List<String> columnIds = new ArrayList(
104+
Arrays.asList(
105+
EventIndexDto.UUID,
106+
EventIndexDto.EVENT_STATUS,
107+
EventIndexDto.EVENT_INVESTIGATION_STATUS,
108+
createEventDateColumn(this, userLanguage),
109+
DISEASE_SHORT,
110+
EventIndexDto.EVENT_TITLE,
111+
EventIndexDto.REGION,
112+
EventIndexDto.DISTRICT,
113+
EventIndexDto.COMMUNITY,
114+
EventIndexDto.ADDRESS,
115+
EventIndexDto.SRC_TYPE,
116+
INFORMATION_SOURCE,
117+
EventIndexDto.REPORT_DATE_TIME,
118+
NUMBER_OF_PENDING_TASKS,
119+
EventIndexDto.PARTICIPANT_COUNT));
116120

117121
if (!tasksFeatureEnabled) {
118122
columnIds.remove(NUMBER_OF_PENDING_TASKS);

sormas-ui/src/main/java/de/symeda/sormas/ui/events/EventsFilterForm.java

Lines changed: 28 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@
2828
import de.symeda.sormas.api.location.LocationDto;
2929
import de.symeda.sormas.api.region.DistrictReferenceDto;
3030
import de.symeda.sormas.api.region.RegionReferenceDto;
31-
import de.symeda.sormas.api.user.UserDto;
3231
import de.symeda.sormas.api.user.UserRole;
3332
import de.symeda.sormas.api.utils.DateFilterOption;
3433
import de.symeda.sormas.api.utils.DateHelper;
@@ -37,6 +36,7 @@
3736
import de.symeda.sormas.ui.utils.AbstractFilterForm;
3837
import de.symeda.sormas.ui.utils.EpiWeekAndDateFilterComponent;
3938
import de.symeda.sormas.ui.utils.FieldConfiguration;
39+
import de.symeda.sormas.ui.utils.FieldHelper;
4040

4141
public class EventsFilterForm extends AbstractFilterForm<EventCriteria> {
4242

@@ -108,15 +108,11 @@ public void addMoreFilters(CustomLayout moreFiltersContainer) {
108108
FieldConfiguration.pixelSized(EventDto.TYPE_OF_PLACE, 140),
109109
FieldConfiguration.pixelSized(EventDto.EVENT_INVESTIGATION_STATUS, 140));
110110

111-
UserDto user = UserProvider.getCurrent().getUser();
112-
113-
if (user.getRegion() == null) {
114-
ComboBox regionField = addField(
115-
moreFiltersContainer,
116-
FieldConfiguration
117-
.withCaptionAndPixelSized(LocationDto.REGION, I18nProperties.getPrefixCaption(LocationDto.I18N_PREFIX, LocationDto.REGION), 140));
118-
regionField.addItems(FacadeProvider.getRegionFacade().getAllActiveAsReference());
119-
}
111+
ComboBox regionField = addField(
112+
moreFiltersContainer,
113+
FieldConfiguration
114+
.withCaptionAndPixelSized(LocationDto.REGION, I18nProperties.getPrefixCaption(LocationDto.I18N_PREFIX, LocationDto.REGION), 140));
115+
regionField.addItems(FacadeProvider.getRegionFacade().getAllActiveAsReference());
120116

121117
ComboBox districtField = addField(
122118
moreFiltersContainer,
@@ -242,6 +238,28 @@ protected void applyDependenciesOnFieldChange(String propertyId, Property.ValueC
242238
}
243239
}
244240

241+
@Override
242+
protected void applyRegionFilterDependency(RegionReferenceDto region, String districtFieldId) {
243+
final ComboBox districtField = getField(districtFieldId);
244+
if (region != null) {
245+
FieldHelper.updateItems(districtField, FacadeProvider.getDistrictFacade().getAllActiveByRegion(region.getUuid()));
246+
districtField.setEnabled(true);
247+
} else {
248+
districtField.setEnabled(false);
249+
}
250+
}
251+
252+
@Override
253+
protected void applyDistrictDependency(DistrictReferenceDto district, String communityFieldId) {
254+
final ComboBox communityField = getField(communityFieldId);
255+
if (district != null) {
256+
FieldHelper.updateItems(communityField, FacadeProvider.getCommunityFacade().getAllActiveByDistrict(district.getUuid()));
257+
communityField.setEnabled(true);
258+
} else {
259+
communityField.setEnabled(false);
260+
}
261+
}
262+
245263
@Override
246264
protected void applyDependenciesOnNewValue(EventCriteria criteria) {
247265

0 commit comments

Comments
 (0)