|
4 | 4 | import static de.symeda.sormas.ui.utils.LayoutUtil.loc; |
5 | 5 |
|
6 | 6 | import java.util.Date; |
| 7 | +import java.util.List; |
7 | 8 | import java.util.Set; |
8 | 9 | import java.util.stream.Stream; |
9 | 10 |
|
|
28 | 29 | import de.symeda.sormas.api.location.LocationDto; |
29 | 30 | import de.symeda.sormas.api.region.DistrictReferenceDto; |
30 | 31 | import de.symeda.sormas.api.region.RegionReferenceDto; |
| 32 | +import de.symeda.sormas.api.user.UserDto; |
| 33 | +import de.symeda.sormas.api.user.UserReferenceDto; |
31 | 34 | import de.symeda.sormas.api.user.UserRole; |
32 | 35 | import de.symeda.sormas.api.utils.DateFilterOption; |
33 | 36 | import de.symeda.sormas.api.utils.DateHelper; |
@@ -91,10 +94,7 @@ protected void addFields() { |
91 | 94 | addField(FieldConfiguration.pixelSized(EventIndexDto.DISEASE, 140)); |
92 | 95 | addField(FieldConfiguration.withCaptionAndPixelSized(EventCriteria.REPORTING_USER_ROLE, I18nProperties.getString(Strings.reportedBy), 140)); |
93 | 96 | ComboBox officerField = addField(FieldConfiguration.pixelSized(EventCriteria.SURVEILLANCE_OFFICER, 140)); |
94 | | - RegionReferenceDto userRegion = UserProvider.getCurrent().getUser().getRegion(); |
95 | | - if (userRegion != null) { |
96 | | - officerField.addItems(FacadeProvider.getUserFacade().getUsersByRegionAndRoles(userRegion, UserRole.SURVEILLANCE_OFFICER)); |
97 | | - } |
| 97 | + officerField.addItems(fetchSurveillanceOfficersByRegion(currentUser().getRegion())); |
98 | 98 | TextField searchField = addField( |
99 | 99 | FieldConfiguration.withCaptionAndPixelSized(EventCriteria.FREE_TEXT, I18nProperties.getString(Strings.promptEventsSearchField), 200)); |
100 | 100 | searchField.setNullRepresentation(""); |
@@ -220,20 +220,22 @@ protected void applyDependenciesOnFieldChange(String propertyId, Property.ValueC |
220 | 220 | switch (propertyId) { |
221 | 221 | case LocationDto.REGION: |
222 | 222 | RegionReferenceDto region = (RegionReferenceDto) event.getProperty().getValue(); |
223 | | - if (region == null) { |
224 | | - clearAndDisableFields(LocationDto.DISTRICT, LocationDto.COMMUNITY); |
225 | | - } else { |
| 223 | + if (region != null) { |
226 | 224 | applyRegionFilterDependency(region, LocationDto.DISTRICT); |
227 | 225 | clearAndDisableFields(LocationDto.COMMUNITY); |
| 226 | + } else { |
| 227 | + clearAndDisableFields(LocationDto.DISTRICT, LocationDto.COMMUNITY); |
228 | 228 | } |
| 229 | + populateSurveillanceOfficersForRegion(region); |
229 | 230 | break; |
230 | 231 | case LocationDto.DISTRICT: |
231 | 232 | DistrictReferenceDto district = (DistrictReferenceDto) event.getProperty().getValue(); |
232 | | - if (district == null) { |
233 | | - clearAndDisableFields(LocationDto.COMMUNITY); |
234 | | - } else { |
| 233 | + if (district != null) { |
235 | 234 | applyDistrictDependency(district, LocationDto.COMMUNITY); |
| 235 | + } else { |
| 236 | + clearAndDisableFields(LocationDto.COMMUNITY); |
236 | 237 | } |
| 238 | + populateSurveillanceOfficersForDistrict(district); |
237 | 239 | break; |
238 | 240 | } |
239 | 241 | } |
@@ -296,6 +298,36 @@ private void applyDateDependencyOnNewValue(String componentId, DateFilterOption |
296 | 298 | } |
297 | 299 | } |
298 | 300 |
|
| 301 | + private void populateSurveillanceOfficersForRegion(RegionReferenceDto regionReferenceDto) { |
| 302 | + List<UserReferenceDto> items = fetchSurveillanceOfficersByRegion(regionReferenceDto != null ? regionReferenceDto : currentUser().getRegion()); |
| 303 | + populateSurveillanceOfficers(items); |
| 304 | + } |
| 305 | + |
| 306 | + private void populateSurveillanceOfficersForDistrict(DistrictReferenceDto districtReferenceDto) { |
| 307 | + if (districtReferenceDto != null) { |
| 308 | + List<UserReferenceDto> items = |
| 309 | + FacadeProvider.getUserFacade().getUserRefsByDistrict(districtReferenceDto, false, UserRole.SURVEILLANCE_OFFICER); |
| 310 | + populateSurveillanceOfficers(items); |
| 311 | + } else { |
| 312 | + final ComboBox regionField = getField(EventCriteria.REGION); |
| 313 | + populateSurveillanceOfficersForRegion((RegionReferenceDto) regionField.getValue()); |
| 314 | + } |
| 315 | + } |
| 316 | + |
| 317 | + private void populateSurveillanceOfficers(List<UserReferenceDto> items) { |
| 318 | + final ComboBox officerField = getField(EventCriteria.SURVEILLANCE_OFFICER); |
| 319 | + officerField.removeAllItems(); |
| 320 | + officerField.addItems(items); |
| 321 | + } |
| 322 | + |
| 323 | + private List<UserReferenceDto> fetchSurveillanceOfficersByRegion(RegionReferenceDto regionReferenceDto) { |
| 324 | + return FacadeProvider.getUserFacade().getUsersByRegionAndRoles(regionReferenceDto, UserRole.SURVEILLANCE_OFFICER); |
| 325 | + } |
| 326 | + |
| 327 | + private UserDto currentUser() { |
| 328 | + return UserProvider.getCurrent().getUser(); |
| 329 | + } |
| 330 | + |
299 | 331 | @Override |
300 | 332 | protected String createMoreFiltersHtmlLayout() { |
301 | 333 | return MORE_FILTERS_HTML_LAYOUT; |
|
0 commit comments