Skip to content

Commit b354d42

Browse files
Merge pull request #13304 from SORMAS-Foundation/13266-linkage-of-events-and-environments
13266 linkage of events and environments
2 parents 4e89f4e + 513edab commit b354d42

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+1336
-16
lines changed

sormas-api/src/main/java/de/symeda/sormas/api/environment/EnvironmentCriteria.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
import de.symeda.sormas.api.EntityRelevanceStatus;
77
import de.symeda.sormas.api.caze.InvestigationStatus;
8+
import de.symeda.sormas.api.event.EventReferenceDto;
89
import de.symeda.sormas.api.infrastructure.community.CommunityReferenceDto;
910
import de.symeda.sormas.api.infrastructure.country.CountryReferenceDto;
1011
import de.symeda.sormas.api.infrastructure.district.DistrictReferenceDto;
@@ -30,6 +31,7 @@ public class EnvironmentCriteria extends BaseCriteria implements Serializable {
3031
public static final String GPS_LAT_TO = "gpsLatTo";
3132
public static final String GPS_LON_FROM = "gpsLonFrom";
3233
public static final String GPS_LON_TO = "gpsLonTo";
34+
public static final String EVENT_REFERENCE_DTO = "eventReferenceDto";
3335
private static final long serialVersionUID = -2947852193651003088L;
3436

3537
private String freeText;
@@ -59,6 +61,8 @@ public class EnvironmentCriteria extends BaseCriteria implements Serializable {
5961
*/
6062
private Double gpsLon;
6163

64+
private EventReferenceDto event;
65+
6266
@IgnoreForUrl
6367
public String getFreeText() {
6468
return freeText;
@@ -313,4 +317,17 @@ public void reportDateBetween(Date reportDateFrom, Date reportDateTo, DateFilter
313317
this.reportDateTo = reportDateTo;
314318
this.dateFilterOption = dateFilterOption;
315319
}
320+
321+
public EnvironmentCriteria event(EventReferenceDto event) {
322+
this.event = event;
323+
return this;
324+
}
325+
326+
public EventReferenceDto getEvent() {
327+
return event;
328+
}
329+
330+
public void setEvent(EventReferenceDto event) {
331+
this.event = event;
332+
}
316333
}

sormas-api/src/main/java/de/symeda/sormas/api/environment/EnvironmentDto.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package de.symeda.sormas.api.environment;
22

3+
import java.util.ArrayList;
34
import java.util.Date;
5+
import java.util.List;
46
import java.util.Map;
57

68
import javax.validation.Valid;
@@ -10,6 +12,7 @@
1012

1113
import de.symeda.sormas.api.caze.InvestigationStatus;
1214
import de.symeda.sormas.api.common.DeletionReason;
15+
import de.symeda.sormas.api.event.EventReferenceDto;
1316
import de.symeda.sormas.api.feature.FeatureType;
1417
import de.symeda.sormas.api.i18n.Validations;
1518
import de.symeda.sormas.api.location.LocationDto;
@@ -47,6 +50,7 @@ public class EnvironmentDto extends PseudonymizableDto {
4750
public static final String DELETION_REASON = "deletionReason";
4851
public static final String OTHER_DELETION_REASON = "otherDeletionReason";
4952
public static final String VECTOR_TYPE = "vectorType";
53+
public static final String EVENTS = "events";
5054

5155
@NotNull(message = Validations.validReportDateTime)
5256
private Date reportDate;
@@ -84,6 +88,8 @@ public class EnvironmentDto extends PseudonymizableDto {
8488
private String otherDeletionReason;
8589
private VectorType vectorType;
8690

91+
private List<EventReferenceDto> eventReferenceDtos = new ArrayList<>();
92+
8793
public static EnvironmentDto build() {
8894
final EnvironmentDto environment = new EnvironmentDto();
8995
environment.setUuid(DataHelper.createUuid());
@@ -258,4 +264,22 @@ public VectorType getVectorType() {
258264
public void setVectorType(VectorType vectorType) {
259265
this.vectorType = vectorType;
260266
}
267+
268+
public void addEventReference(EventReferenceDto eventReferenceDto) {
269+
if (eventReferenceDto == null) {
270+
throw new IllegalArgumentException("eventReferenceDto must not be null");
271+
}
272+
if (eventReferenceDtos.contains(eventReferenceDto)) {
273+
throw new IllegalArgumentException("eventReference " + eventReferenceDto.getUuid() + " already exists.");
274+
}
275+
this.eventReferenceDtos.add(eventReferenceDto);
276+
}
277+
278+
public List<EventReferenceDto> getEventReferenceDtos() {
279+
return eventReferenceDtos;
280+
}
281+
282+
public void setEventReferenceDtos(List<EventReferenceDto> eventReferenceDtos) {
283+
this.eventReferenceDtos = eventReferenceDtos;
284+
}
261285
}

sormas-api/src/main/java/de/symeda/sormas/api/environment/EnvironmentFacade.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,7 @@ public interface EnvironmentFacade extends CoreFacade<EnvironmentDto, Environmen
1313

1414
EnvironmentDto getEnvironmentByUuid(String uuid);
1515

16+
void unlinkEnvironment(EnvironmentIndexDto environmentReferenceDto, String eventUuid);
17+
18+
List<EnvironmentIndexDto> getEnvironmentsByEvent(EnvironmentCriteria environmentCriteria);
1619
}

sormas-api/src/main/java/de/symeda/sormas/api/environment/EnvironmentIndexDto.java

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
package de.symeda.sormas.api.environment;
22

3+
import java.io.Serializable;
34
import java.util.Date;
45

56
import de.symeda.sormas.api.caze.InvestigationStatus;
67
import de.symeda.sormas.api.common.DeletionReason;
8+
import de.symeda.sormas.api.location.LocationReferenceDto;
9+
import de.symeda.sormas.api.utils.HasCaption;
710
import de.symeda.sormas.api.utils.PersonalData;
811
import de.symeda.sormas.api.utils.SensitiveData;
912
import de.symeda.sormas.api.utils.pseudonymization.Pseudonymizable;
@@ -20,6 +23,7 @@ public class EnvironmentIndexDto extends AbstractUuidDto implements Pseudonymiza
2023
public static final String EXTERNAL_ID = "externalId";
2124
public static final String ENVIRONMENT_NAME = "environmentName";
2225
public static final String ENVIRONMENT_MEDIA = "environmentMedia";
26+
public static final String ENVIRONMENT_LOCATION = "environmentLocation";
2327
public static final String REGION = "region";
2428
public static final String DISTRICT = "district";
2529
public static final String COMMUNITY = "community";
@@ -62,6 +66,7 @@ public class EnvironmentIndexDto extends AbstractUuidDto implements Pseudonymiza
6266
private boolean pseudonymized;
6367
private DeletionReason deletionReason;
6468
private String otherDeletionReason;
69+
private EnvironmentIndexLocation environmentLocation;
6570

6671
public EnvironmentIndexDto(
6772
String uuid,
@@ -97,6 +102,27 @@ public EnvironmentIndexDto(
97102
this.deletionReason = deletionReason;
98103
this.otherDeletionReason = otherDeletionReason;
99104
this.inJurisdiction = inJurisdiction;
105+
this.environmentLocation = new EnvironmentIndexLocation(region, district, community, city);
106+
}
107+
108+
public EnvironmentIndexDto(
109+
String uuid,
110+
String externalId,
111+
String environmentName,
112+
EnvironmentMedia environmentMedia,
113+
Date reportDate,
114+
InvestigationStatus investigationStatus,
115+
DeletionReason deletionReason,
116+
String otherDeletionReason) {
117+
118+
super(uuid);
119+
this.externalId = externalId;
120+
this.environmentName = environmentName;
121+
this.environmentMedia = environmentMedia;
122+
this.reportDate = reportDate;
123+
this.investigationStatus = investigationStatus;
124+
this.deletionReason = deletionReason;
125+
this.otherDeletionReason = otherDeletionReason;
100126
}
101127

102128
public EnvironmentIndexDto(String uuid) {
@@ -234,4 +260,50 @@ public boolean isInJurisdiction() {
234260
public void setInJurisdiction(boolean inJurisdiction) {
235261
this.inJurisdiction = inJurisdiction;
236262
}
263+
264+
public EnvironmentIndexLocation getEnvironmentLocation() {
265+
return environmentLocation;
266+
}
267+
268+
public void setEnvironmentLocation(EnvironmentIndexLocation environmentLocation) {
269+
this.environmentLocation = environmentLocation;
270+
}
271+
272+
public static class EnvironmentIndexLocation implements Serializable, HasCaption {
273+
274+
private String regionName;
275+
private String districtName;
276+
private String communityName;
277+
private String city;
278+
private String street;
279+
private String houseNumber;
280+
private String additionalInformation;
281+
282+
public EnvironmentIndexLocation(String regionName, String districtName, String communityName, String city) {
283+
this.regionName = regionName;
284+
this.districtName = districtName;
285+
this.communityName = communityName;
286+
this.city = city;
287+
}
288+
289+
public String getRegion() {
290+
return regionName;
291+
}
292+
293+
public String getDistrict() {
294+
return districtName;
295+
}
296+
297+
public String getCommunity() {
298+
return communityName;
299+
}
300+
301+
public String getAddress() {
302+
return LocationReferenceDto.buildCaption(city, street, houseNumber, additionalInformation);
303+
}
304+
305+
public String buildCaption() {
306+
return LocationReferenceDto.buildCaption(regionName, districtName, communityName, city, street, houseNumber, additionalInformation);
307+
}
308+
}
237309
}

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

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import de.symeda.sormas.api.action.ActionStatus;
2727
import de.symeda.sormas.api.caze.CaseReferenceDto;
2828
import de.symeda.sormas.api.disease.DiseaseVariant;
29+
import de.symeda.sormas.api.environment.EnvironmentReferenceDto;
2930
import de.symeda.sormas.api.infrastructure.community.CommunityReferenceDto;
3031
import de.symeda.sormas.api.infrastructure.district.DistrictReferenceDto;
3132
import de.symeda.sormas.api.infrastructure.facility.FacilityReferenceDto;
@@ -110,6 +111,7 @@ public class EventCriteria extends CriteriaWithDateType implements ExternalShare
110111
private Boolean onlyEntitiesNotSharedWithExternalSurvTool;
111112
private Boolean onlyEntitiesSharedWithExternalSurvTool;
112113
private Boolean onlyEntitiesChangedSinceLastSharedWithExternalSurvTool;
114+
private EnvironmentReferenceDto environment;
113115

114116
public EventCriteria() {
115117
super(EventCriteriaDateType.class);
@@ -707,4 +709,15 @@ public Boolean getOnlyEntitiesChangedSinceLastSharedWithExternalSurvTool() {
707709
public void setOnlyEntitiesChangedSinceLastSharedWithExternalSurvTool(Boolean onlyEntitiesChangedSinceLastSharedWithExternalSurvTool) {
708710
this.onlyEntitiesChangedSinceLastSharedWithExternalSurvTool = onlyEntitiesChangedSinceLastSharedWithExternalSurvTool;
709711
}
712+
713+
public EventCriteria environment(EnvironmentReferenceDto environment) {
714+
this.environment = environment;
715+
return this;
716+
}
717+
public EnvironmentReferenceDto getEnvironment() {
718+
return environment;
719+
}
720+
public void setEnvironment(EnvironmentReferenceDto environment) {
721+
this.environment = environment;
722+
}
710723
}

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

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,9 @@
1515

1616
package de.symeda.sormas.api.event;
1717

18+
import java.util.ArrayList;
1819
import java.util.Date;
20+
import java.util.List;
1921
import java.util.Map;
2022

2123
import javax.validation.Valid;
@@ -28,6 +30,7 @@
2830
import de.symeda.sormas.api.Disease;
2931
import de.symeda.sormas.api.common.DeletionReason;
3032
import de.symeda.sormas.api.disease.DiseaseVariant;
33+
import de.symeda.sormas.api.environment.EnvironmentReferenceDto;
3134
import de.symeda.sormas.api.exposure.WorkEnvironment;
3235
import de.symeda.sormas.api.feature.FeatureType;
3336
import de.symeda.sormas.api.i18n.Validations;
@@ -233,6 +236,7 @@ public class EventDto extends SormasToSormasShareableDto {
233236
private DeletionReason deletionReason;
234237
@Size(max = FieldConstraints.CHARACTER_LIMIT_TEXT, message = Validations.textTooLong)
235238
private String otherDeletionReason;
239+
private List<EnvironmentReferenceDto> environmentReferenceDtos = new ArrayList<>();
236240

237241
public static EventDto build() {
238242
EventDto event = new EventDto();
@@ -759,4 +763,12 @@ public String getOtherDeletionReason() {
759763
public void setOtherDeletionReason(String otherDeletionReason) {
760764
this.otherDeletionReason = otherDeletionReason;
761765
}
766+
767+
public List<EnvironmentReferenceDto> getEnvironmentReferenceDtos() {
768+
return environmentReferenceDtos;
769+
}
770+
771+
public void setEnvironmentReferenceDtos(List<EnvironmentReferenceDto> environmentReferenceDtos) {
772+
this.environmentReferenceDtos = environmentReferenceDtos;
773+
}
762774
}

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import de.symeda.sormas.api.caze.CaseDataDto;
3131
import de.symeda.sormas.api.common.Page;
3232
import de.symeda.sormas.api.common.progress.ProcessedEntity;
33+
import de.symeda.sormas.api.environment.EnvironmentReferenceDto;
3334
import de.symeda.sormas.api.externaldata.ExternalDataDto;
3435
import de.symeda.sormas.api.externaldata.ExternalDataUpdateException;
3536
import de.symeda.sormas.api.infrastructure.region.RegionReferenceDto;
@@ -88,4 +89,6 @@ List<ProcessedEntity> saveBulkEvents(
8889
boolean isInJurisdictionOrOwned(String uuid);
8990

9091
boolean hasParticipantWithSpecialAccess(EventReferenceDto eventRef);
92+
93+
void unlinkEnvironment(EnvironmentReferenceDto environmentReferenceDto, EventDto event);
9194
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,17 +17,17 @@
1717
*******************************************************************************/
1818
package de.symeda.sormas.api.event;
1919

20-
import de.symeda.sormas.api.feature.FeatureType;
21-
import de.symeda.sormas.api.utils.DependingOnFeatureType;
2220
import java.util.Date;
2321

2422
import de.symeda.sormas.api.Disease;
2523
import de.symeda.sormas.api.Language;
2624
import de.symeda.sormas.api.ReferenceDto;
25+
import de.symeda.sormas.api.feature.FeatureType;
2726
import de.symeda.sormas.api.i18n.I18nProperties;
2827
import de.symeda.sormas.api.i18n.Strings;
2928
import de.symeda.sormas.api.utils.DataHelper;
3029
import de.symeda.sormas.api.utils.DateHelper;
30+
import de.symeda.sormas.api.utils.DependingOnFeatureType;
3131

3232
@DependingOnFeatureType(featureType = FeatureType.EVENT_SURVEILLANCE)
3333
public class EventReferenceDto extends ReferenceDto {

sormas-api/src/main/java/de/symeda/sormas/api/i18n/Captions.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1479,7 +1479,9 @@ public interface Captions {
14791479
String environmentArchivedEnvironments = "environmentArchivedEnvironments";
14801480
String environmentDeletedEnvironments = "environmentDeletedEnvironments";
14811481
String environmentEnvironmentsList = "environmentEnvironmentsList";
1482+
String environmentEvents = "environmentEvents";
14821483
String environmentNewEnvironment = "environmentNewEnvironment";
1484+
String environmentNoEnvs = "environmentNoEnvs";
14831485
String EnvironmentSample = "EnvironmentSample";
14841486
String EnvironmentSample_chlorineResiduals = "EnvironmentSample.chlorineResiduals";
14851487
String EnvironmentSample_dispatchDate = "EnvironmentSample.dispatchDate";
@@ -1521,6 +1523,7 @@ public interface Captions {
15211523
String environmentSampleReceived = "environmentSampleReceived";
15221524
String environmentSampleShipped = "environmentSampleShipped";
15231525
String environmentSampleViewType = "environmentSampleViewType";
1526+
String environmentSelect = "environmentSelect";
15241527
String EpiData = "EpiData";
15251528
String EpiData_activitiesAsCase = "EpiData.activitiesAsCase";
15261529
String EpiData_activityAsCaseDetailsKnown = "EpiData.activityAsCaseDetailsKnown";
@@ -1550,6 +1553,9 @@ public interface Captions {
15501553
String Event_diseaseVariant = "Event.diseaseVariant";
15511554
String Event_district = "Event.district";
15521555
String Event_endDate = "Event.endDate";
1556+
String Event_environment_investigationStatus = "Event.environment.investigationStatus";
1557+
String Event_environmentMedia = "Event.environmentMedia";
1558+
String Event_environmentReportDate = "Event.environmentReportDate";
15531559
String Event_epidemiologicalEvidence = "Event.epidemiologicalEvidence";
15541560
String Event_eventActions = "Event.eventActions";
15551561
String Event_eventDesc = "Event.eventDesc";
@@ -1658,11 +1664,13 @@ public interface Captions {
16581664
String eventLinkToCases = "eventLinkToCases";
16591665
String eventLinkToContacts = "eventLinkToContacts";
16601666
String eventLinkToEventsWithinTheSameFacility = "eventLinkToEventsWithinTheSameFacility";
1667+
String eventNewEnvironment = "eventNewEnvironment";
16611668
String eventNewEvent = "eventNewEvent";
16621669
String eventNewEventGroup = "eventNewEventGroup";
16631670
String eventNoDisease = "eventNoDisease";
16641671
String eventNoEventLinkedToCase = "eventNoEventLinkedToCase";
16651672
String eventNoEventLinkedToContact = "eventNoEventLinkedToContact";
1673+
String eventNoEventLinkedToEnvironment = "eventNoEventLinkedToEnvironment";
16661674
String eventNoEventLinkedToEventGroup = "eventNoEventLinkedToEventGroup";
16671675
String eventOnlyWithContactSourceCaseInvolved = "eventOnlyWithContactSourceCaseInvolved";
16681676
String eventOpenSuperordinateEvent = "eventOpenSuperordinateEvent";
@@ -1728,6 +1736,7 @@ public interface Captions {
17281736
String eventSelectGroup = "eventSelectGroup";
17291737
String eventSubordinateEvents = "eventSubordinateEvents";
17301738
String eventSuperordinateEvent = "eventSuperordinateEvent";
1739+
String eventUnlinkEnvironment = "eventUnlinkEnvironment";
17311740
String eventUnlinkEvent = "eventUnlinkEvent";
17321741
String eventUnlinkEventGroup = "eventUnlinkEventGroup";
17331742
String export = "export";
@@ -2035,6 +2044,7 @@ public interface Captions {
20352044
String lineListingNewEventParticipantsList = "lineListingNewEventParticipantsList";
20362045
String lineListingSetEndDateForAll = "lineListingSetEndDateForAll";
20372046
String lineListingSharedInformation = "lineListingSharedInformation";
2047+
String linkEnvironment = "linkEnvironment";
20382048
String linkEvent = "linkEvent";
20392049
String linkEventGroup = "linkEventGroup";
20402050
String linkImmunizationToCaseButton = "linkImmunizationToCaseButton";

0 commit comments

Comments
 (0)