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

Commit cb3c80f

Browse files
SORMAS-Foundation#3590 - Fixed filter by responsible surveillance officer in contacts directory
1 parent 09469c2 commit cb3c80f

1 file changed

Lines changed: 44 additions & 9 deletions

File tree

sormas-ui/src/main/java/de/symeda/sormas/ui/contact/ContactsFilterForm.java

Lines changed: 44 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import static de.symeda.sormas.ui.utils.LayoutUtil.loc;
55

66
import java.util.Date;
7+
import java.util.List;
78
import java.util.stream.Stream;
89

910
import org.apache.commons.lang3.StringUtils;
@@ -38,6 +39,7 @@
3839
import de.symeda.sormas.api.region.DistrictReferenceDto;
3940
import de.symeda.sormas.api.region.RegionReferenceDto;
4041
import de.symeda.sormas.api.user.UserDto;
42+
import de.symeda.sormas.api.user.UserReferenceDto;
4143
import de.symeda.sormas.api.user.UserRole;
4244
import de.symeda.sormas.api.utils.DateFilterOption;
4345
import de.symeda.sormas.api.utils.DateHelper;
@@ -136,7 +138,7 @@ protected void addFields() {
136138
@Override
137139
public void addMoreFilters(CustomLayout moreFiltersContainer) {
138140

139-
UserDto user = UserProvider.getCurrent().getUser();
141+
UserDto user = currentUser();
140142

141143
if (user.getRegion() == null) {
142144
ComboBox regionField = addField(
@@ -169,12 +171,13 @@ public void addMoreFilters(CustomLayout moreFiltersContainer) {
169171
CssStyles.style(infoLabel, CssStyles.LABEL_XLARGE, CssStyles.LABEL_SECONDARY, AbstractFilterForm.FILTER_ITEM_STYLE);
170172
moreFiltersContainer.addComponent(infoLabel, DISTRICT_INFO_LABEL_ID);
171173

172-
addField(
174+
ComboBox officerField = addField(
173175
moreFiltersContainer,
174176
FieldConfiguration.withCaptionAndPixelSized(
175177
ContactCriteria.CONTACT_OFFICER,
176178
I18nProperties.getPrefixCaption(ContactIndexDto.I18N_PREFIX, ContactIndexDto.CONTACT_OFFICER_UUID),
177179
140));
180+
officerField.addItems(fetchSurveillanceOfficersByRegion(currentUser().getRegion()));
178181
addField(
179182
moreFiltersContainer,
180183
FieldConfiguration.withCaptionAndPixelSized(ContactCriteria.REPORTING_USER_ROLE, I18nProperties.getString(Strings.reportedBy), 140));
@@ -313,21 +316,23 @@ protected void applyDependenciesOnFieldChange(String propertyId, Property.ValueC
313316
switch (propertyId) {
314317
case ContactCriteria.REGION: {
315318
RegionReferenceDto region = (RegionReferenceDto) event.getProperty().getValue();
316-
if (region == null) {
317-
clearAndDisableFields(ContactCriteria.DISTRICT, ContactCriteria.COMMUNITY);
318-
} else {
319+
if (region != null) {
319320
applyRegionFilterDependency(region, ContactCriteria.DISTRICT);
320321
clearAndDisableFields(ContactCriteria.COMMUNITY);
322+
} else {
323+
clearAndDisableFields(ContactCriteria.DISTRICT, ContactCriteria.COMMUNITY);
321324
}
325+
populateSurveillanceOfficersForRegion(region);
322326
break;
323327
}
324328
case ContactCriteria.DISTRICT: {
325329
DistrictReferenceDto district = (DistrictReferenceDto) event.getProperty().getValue();
326-
if (district == null) {
327-
clearAndDisableFields(ContactCriteria.COMMUNITY);
328-
} else {
330+
if (district != null) {
329331
applyDistrictDependency(district, ContactCriteria.COMMUNITY);
332+
} else {
333+
clearAndDisableFields(ContactCriteria.COMMUNITY);
330334
}
335+
populateSurveillanceOfficersForDistrict(district);
331336
break;
332337
}
333338
case ContactCriteria.FOLLOW_UP_UNTIL_TO: {
@@ -353,7 +358,7 @@ protected void applyDependenciesOnNewValue(ContactCriteria newValue) {
353358
final DistrictReferenceDto district = newValue.getDistrict();
354359
applyRegionAndDistrictFilterDependency(region, ContactCriteria.DISTRICT, district, ContactCriteria.COMMUNITY);
355360

356-
final UserDto user = UserProvider.getCurrent().getUser();
361+
final UserDto user = currentUser();
357362

358363
ComboBox officerField = getField(ContactCriteria.CONTACT_OFFICER);
359364
if (user.getRegion() != null) {
@@ -494,4 +499,34 @@ public void setSearchFieldEnabled(boolean enabled) {
494499
this.getField(ContactCriteria.NAME_UUID_CASE_LIKE).setEnabled(enabled);
495500
this.getField(ContactCriteria.EVENT_LIKE).setEnabled(enabled);
496501
}
502+
503+
private void populateSurveillanceOfficersForRegion(RegionReferenceDto regionReferenceDto) {
504+
List<UserReferenceDto> items = fetchSurveillanceOfficersByRegion(regionReferenceDto != null ? regionReferenceDto : currentUser().getRegion());
505+
populateSurveillanceOfficers(items);
506+
}
507+
508+
private void populateSurveillanceOfficersForDistrict(DistrictReferenceDto districtReferenceDto) {
509+
if (districtReferenceDto != null) {
510+
List<UserReferenceDto> items =
511+
FacadeProvider.getUserFacade().getUserRefsByDistrict(districtReferenceDto, false, UserRole.SURVEILLANCE_OFFICER);
512+
populateSurveillanceOfficers(items);
513+
} else {
514+
final ComboBox regionField = getField(ContactCriteria.REGION);
515+
populateSurveillanceOfficersForRegion((RegionReferenceDto) regionField.getValue());
516+
}
517+
}
518+
519+
private void populateSurveillanceOfficers(List<UserReferenceDto> items) {
520+
final ComboBox officerField = getField(ContactCriteria.CONTACT_OFFICER);
521+
officerField.removeAllItems();
522+
officerField.addItems(items);
523+
}
524+
525+
private List<UserReferenceDto> fetchSurveillanceOfficersByRegion(RegionReferenceDto regionReferenceDto) {
526+
return FacadeProvider.getUserFacade().getUsersByRegionAndRoles(regionReferenceDto, UserRole.SURVEILLANCE_OFFICER);
527+
}
528+
529+
private UserDto currentUser() {
530+
return UserProvider.getCurrent().getUser();
531+
}
497532
}

0 commit comments

Comments
 (0)