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

Commit 4c298fc

Browse files
Merge pull request SORMAS-Foundation#4071 from GIP-GRADeS-BFC/hzi_3887_link_to_events_within_the_same_facility
Add a link to events within the same facility in the event data view SORMAS-Foundation#3887
2 parents 70b69ce + 01580e3 commit 4c298fc

6 files changed

Lines changed: 77 additions & 26 deletions

File tree

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -311,6 +311,11 @@ public void setTypeOfPlace(TypeOfPlace typeOfPlace) {
311311
this.typeOfPlace = typeOfPlace;
312312
}
313313

314+
public EventCriteria typeOfPlace(TypeOfPlace typeOfPlace) {
315+
setTypeOfPlace(typeOfPlace);
316+
return this;
317+
}
318+
314319
public ActionStatus getActionStatus() {
315320
return actionStatus;
316321
}

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
@@ -852,6 +852,7 @@ public interface Captions {
852852
String eventEventsList = "eventEventsList";
853853
String eventLinkToCases = "eventLinkToCases";
854854
String eventLinkToContacts = "eventLinkToContacts";
855+
String eventLinkToEventsWithinTheSameFacility = "eventLinkToEventsWithinTheSameFacility";
855856
String eventNewEvent = "eventNewEvent";
856857
String eventNoEventLinkedToCase = "eventNoEventLinkedToCase";
857858
String eventNoEventLinkedToContact = "eventNoEventLinkedToContact";

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -887,6 +887,7 @@ eventSuperordinateEvent=Superordinate Event
887887
eventUnlinkEvent=Unlink event
888888
eventOpenSuperordinateEvent=Open event
889889
eventEditEvent=Edit event
890+
eventLinkToEventsWithinTheSameFacility=See events within the same facility
890891

891892
Event=Event
892893
Event.caseCount=Cases

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,9 @@
6161
import de.symeda.sormas.ui.ControllerProvider;
6262
import de.symeda.sormas.ui.SormasUI;
6363
import de.symeda.sormas.ui.UserProvider;
64+
import de.symeda.sormas.ui.ViewModelProviders;
6465
import de.symeda.sormas.ui.events.eventLink.EventSelectionField;
66+
import de.symeda.sormas.ui.utils.AbstractView;
6567
import de.symeda.sormas.ui.utils.ButtonHelper;
6668
import de.symeda.sormas.ui.utils.CommitDiscardWrapperComponent;
6769
import de.symeda.sormas.ui.utils.CommitDiscardWrapperComponent.CommitListener;
@@ -304,6 +306,12 @@ public void navigateToParticipants(String eventUuid) {
304306
SormasUI.get().getNavigator().navigateTo(navigationState);
305307
}
306308

309+
public void navigateTo(EventCriteria eventCriteria) {
310+
ViewModelProviders.of(EventsView.class).remove(EventCriteria.class);
311+
String navigationState = AbstractView.buildNavigationState(EventsView.VIEW_NAME, eventCriteria);
312+
SormasUI.get().getNavigator().navigateTo(navigationState);
313+
}
314+
307315
public void setUriFragmentParameter(String eventUuid) {
308316

309317
String fragmentParameter;

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

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,18 +16,21 @@
1616

1717
import com.vaadin.ui.Button;
1818
import com.vaadin.ui.CustomLayout;
19-
import com.vaadin.ui.HorizontalLayout;
19+
import com.vaadin.ui.VerticalLayout;
2020
import com.vaadin.ui.themes.ValoTheme;
2121

2222
import de.symeda.sormas.api.FacadeProvider;
2323
import de.symeda.sormas.api.action.ActionContext;
2424
import de.symeda.sormas.api.caze.CaseCriteria;
2525
import de.symeda.sormas.api.contact.ContactCriteria;
2626
import de.symeda.sormas.api.document.DocumentRelatedEntityType;
27+
import de.symeda.sormas.api.event.EventCriteria;
2728
import de.symeda.sormas.api.event.EventDto;
29+
import de.symeda.sormas.api.event.TypeOfPlace;
2830
import de.symeda.sormas.api.feature.FeatureType;
2931
import de.symeda.sormas.api.i18n.Captions;
3032
import de.symeda.sormas.api.i18n.I18nProperties;
33+
import de.symeda.sormas.api.location.LocationDto;
3134
import de.symeda.sormas.api.task.TaskContext;
3235
import de.symeda.sormas.api.user.UserRight;
3336
import de.symeda.sormas.ui.ControllerProvider;
@@ -122,7 +125,7 @@ protected void initView(String params) {
122125
subordinateEventList.addStyleName(CssStyles.SIDE_COMPONENT);
123126
layout.addComponent(subordinateEventList, SUBORDINATE_EVENTS_LOC);
124127

125-
HorizontalLayout shortcutLinksLayout = new HorizontalLayout();
128+
VerticalLayout shortcutLinksLayout = new VerticalLayout();
126129
shortcutLinksLayout.setMargin(false);
127130
shortcutLinksLayout.setSpacing(true);
128131

@@ -144,6 +147,23 @@ protected void initView(String params) {
144147
shortcutLinksLayout.addComponent(seeEventContactsBtn);
145148
}
146149

150+
LocationDto eventLocationDto = ((EventDataForm) editComponent.getWrappedComponent()).getValue().getEventLocation();
151+
if (eventLocationDto.getFacility() != null) {
152+
Button seeEventsWithinTheSameFacility = ButtonHelper.createButtonWithCaption(
153+
"eventLinkToEventsWithinTheSameFacility",
154+
I18nProperties.getCaption(Captions.eventLinkToEventsWithinTheSameFacility),
155+
thisEvent -> ControllerProvider.getEventController()
156+
.navigateTo(
157+
new EventCriteria().region(eventLocationDto.getRegion())
158+
.district(eventLocationDto.getDistrict())
159+
.eventCommunity(eventLocationDto.getCommunity())
160+
.typeOfPlace(TypeOfPlace.FACILITY)
161+
.facilityType(eventLocationDto.getFacilityType())
162+
.facility(eventLocationDto.getFacility())),
163+
ValoTheme.BUTTON_PRIMARY);
164+
shortcutLinksLayout.addComponent(seeEventsWithinTheSameFacility);
165+
}
166+
147167
layout.addComponent(shortcutLinksLayout, SHORTCUT_LINKS_LOC);
148168

149169
setEventEditPermission(container);

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

Lines changed: 40 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -169,38 +169,19 @@ public void addMoreFilters(CustomLayout moreFiltersContainer) {
169169
facilityField.setEnabled(false);
170170
facilityField.setVisible(false);
171171

172-
ComboBox typeOfPlaceField = getField(EventDto.TYPE_OF_PLACE);
173-
174-
Arrays.asList(districtField, communityField, typeOfPlaceField).forEach(field -> field.addValueChangeListener(e -> {
175-
final UserDto user = UserProvider.getCurrent().getUser();
176-
final CommunityReferenceDto community =
177-
user.getCommunity() != null ? user.getCommunity() : (CommunityReferenceDto) communityField.getValue();
178-
final DistrictReferenceDto district = user.getDistrict() != null ? user.getDistrict() : (DistrictReferenceDto) districtField.getValue();
179-
boolean visible = (community != null || district != null) && typeOfPlaceField.getValue() == TypeOfPlace.FACILITY;
180-
if (!visible) {
181-
facilityField.clear();
182-
facilityTypeField.clear();
183-
facilityTypeGroupField.clear();
184-
}
185-
facilityField.setVisible(visible);
186-
facilityTypeField.setVisible(visible);
187-
facilityTypeGroupField.setVisible(visible);
188-
}));
189-
190-
facilityTypeGroupField.addValueChangeListener(e -> {
191-
FieldHelper.updateEnumData(
172+
facilityTypeGroupField.addValueChangeListener(
173+
e -> FieldHelper.updateEnumData(
192174
facilityTypeField,
193175
facilityTypeGroupField.getValue() != null
194176
? FacilityType.getTypes((FacilityTypeGroup) facilityTypeGroupField.getValue())
195-
: Arrays.stream(FacilityType.values()).collect(Collectors.toList()));
196-
});
177+
: Arrays.stream(FacilityType.values()).collect(Collectors.toList())));
197178

198179
facilityTypeField.addValueChangeListener(e -> {
199-
if (facilityTypeField.getValue() != null) {
180+
final FacilityType facilityType = (FacilityType) facilityTypeField.getValue();
181+
if (facilityType != null) {
200182
final UserDto user = UserProvider.getCurrent().getUser();
201183
final CommunityReferenceDto community =
202184
user.getCommunity() != null ? user.getCommunity() : (CommunityReferenceDto) communityField.getValue();
203-
final FacilityType facilityType = (FacilityType) facilityTypeField.getValue();
204185

205186
facilityField.setEnabled(true);
206187
if (community != null) {
@@ -319,6 +300,7 @@ protected void applyDependenciesOnFieldChange(String propertyId, Property.ValueC
319300
clearAndDisableFields(LocationDto.DISTRICT, LocationDto.COMMUNITY);
320301
}
321302
populateSurveillanceOfficersForRegion(region);
303+
applyFacilityFieldsDependencies();
322304
break;
323305
case LocationDto.DISTRICT:
324306
DistrictReferenceDto district = (DistrictReferenceDto) event.getProperty().getValue();
@@ -328,6 +310,10 @@ protected void applyDependenciesOnFieldChange(String propertyId, Property.ValueC
328310
clearAndDisableFields(LocationDto.COMMUNITY);
329311
}
330312
populateSurveillanceOfficersForDistrict(district);
313+
applyFacilityFieldsDependencies();
314+
break;
315+
case EventDto.TYPE_OF_PLACE:
316+
applyFacilityFieldsDependencies();
331317
break;
332318
}
333319
}
@@ -372,6 +358,8 @@ protected void applyDependenciesOnNewValue(EventCriteria criteria) {
372358
RegionReferenceDto region = criteria.getRegion();
373359
DistrictReferenceDto district = criteria.getDistrict();
374360
applyRegionAndDistrictFilterDependency(region, LocationDto.DISTRICT, district, LocationDto.COMMUNITY);
361+
362+
applyFacilityFieldsDependencies(criteria.getTypeOfPlace(), criteria.getDistrict(), criteria.getCommunity());
375363
}
376364

377365
private void applyDateDependencyOnNewValue(String componentId, DateFilterOption dateFilterOption, Date dateFrom, Date dateTo) {
@@ -417,6 +405,34 @@ private List<UserReferenceDto> fetchSurveillanceOfficersByRegion(RegionReference
417405
return FacadeProvider.getUserFacade().getUsersByRegionAndRoles(regionReferenceDto, UserRole.SURVEILLANCE_OFFICER);
418406
}
419407

408+
private void applyFacilityFieldsDependencies() {
409+
applyFacilityFieldsDependencies(
410+
(TypeOfPlace) getField(EventDto.TYPE_OF_PLACE).getValue(),
411+
(DistrictReferenceDto) getField(LocationDto.DISTRICT).getValue(),
412+
(CommunityReferenceDto) getField(LocationDto.COMMUNITY).getValue());
413+
}
414+
415+
private void applyFacilityFieldsDependencies(
416+
TypeOfPlace typeOfPlace,
417+
DistrictReferenceDto districtReferenceDto,
418+
CommunityReferenceDto communityReferenceDto) {
419+
420+
final UserDto user = UserProvider.getCurrent().getUser();
421+
final boolean visible = typeOfPlace == TypeOfPlace.FACILITY
422+
&& ((user.getCommunity() != null || communityReferenceDto != null) || (user.getDistrict() != null || districtReferenceDto != null));
423+
final ComboBox facilityField = getField(LocationDto.FACILITY);
424+
final ComboBox facilityTypeField = getField(LocationDto.FACILITY_TYPE);
425+
final ComboBox facilityTypeGroupField = (ComboBox) getMoreFiltersContainer().getComponent(FACILITY_TYPE_GROUP_FILTER);
426+
if (!visible) {
427+
facilityField.clear();
428+
facilityTypeField.clear();
429+
facilityTypeGroupField.clear();
430+
}
431+
facilityField.setVisible(visible);
432+
facilityTypeField.setVisible(visible);
433+
facilityTypeGroupField.setVisible(visible);
434+
}
435+
420436
@Override
421437
protected String createMoreFiltersHtmlLayout() {
422438
return MORE_FILTERS_HTML_LAYOUT;

0 commit comments

Comments
 (0)