diff --git a/sormas-api/src/main/java/de/symeda/sormas/api/caze/CaseDataDto.java b/sormas-api/src/main/java/de/symeda/sormas/api/caze/CaseDataDto.java index 88f9e155ae6..8500490afa3 100644 --- a/sormas-api/src/main/java/de/symeda/sormas/api/caze/CaseDataDto.java +++ b/sormas-api/src/main/java/de/symeda/sormas/api/caze/CaseDataDto.java @@ -162,6 +162,7 @@ public class CaseDataDto extends SormasToSormasShareableDto implements IsCase { public static final String EXTERNAL_ID = "externalID"; public static final String EXTERNAL_TOKEN = "externalToken"; public static final String INTERNAL_TOKEN = "internalToken"; + public static final String CASE_REFERENCE_NUMBER = "caseReferenceNumber"; public static final String SHARED_TO_COUNTRY = "sharedToCountry"; public static final String NOSOCOMIAL_OUTBREAK = "nosocomialOutbreak"; public static final String INFECTION_SETTING = "infectionSetting"; @@ -453,6 +454,9 @@ public class CaseDataDto extends SormasToSormasShareableDto implements IsCase { @S2SIgnoreProperty(configProperty = SormasToSormasConfig.SORMAS2SORMAS_IGNORE_INTERNAL_TOKEN) @Size(max = FieldConstraints.CHARACTER_LIMIT_TEXT, message = Validations.textTooLong) private String internalToken; + @Size(max = FieldConstraints.CHARACTER_LIMIT_DEFAULT, message = Validations.textTooLong) + @DependingOnFeatureType(featureType = FeatureType.SELF_REPORTING) + private String caseReferenceNumber; private boolean sharedToCountry; @HideForCountriesExcept private boolean nosocomialOutbreak; @@ -1268,6 +1272,14 @@ public void setInternalToken(String internalToken) { this.internalToken = internalToken; } + public String getCaseReferenceNumber() { + return caseReferenceNumber; + } + + public void setCaseReferenceNumber(String caseReferenceNumber) { + this.caseReferenceNumber = caseReferenceNumber; + } + public boolean isSharedToCountry() { return sharedToCountry; } diff --git a/sormas-api/src/main/java/de/symeda/sormas/api/caze/CaseExportDto.java b/sormas-api/src/main/java/de/symeda/sormas/api/caze/CaseExportDto.java index a07d45eefb0..16265e06647 100644 --- a/sormas-api/src/main/java/de/symeda/sormas/api/caze/CaseExportDto.java +++ b/sormas-api/src/main/java/de/symeda/sormas/api/caze/CaseExportDto.java @@ -30,6 +30,7 @@ import de.symeda.sormas.api.disease.DiseaseVariant; import de.symeda.sormas.api.epidata.EpiDataDto; import de.symeda.sormas.api.event.EventStatus; +import de.symeda.sormas.api.feature.FeatureType; import de.symeda.sormas.api.hospitalization.HospitalizationDto; import de.symeda.sormas.api.i18n.I18nProperties; import de.symeda.sormas.api.immunization.ImmunizationDto; @@ -57,6 +58,7 @@ import de.symeda.sormas.api.user.UserRight; import de.symeda.sormas.api.user.UserRoleReferenceDto; import de.symeda.sormas.api.utils.DataHelper; +import de.symeda.sormas.api.utils.DependingOnFeatureType; import de.symeda.sormas.api.utils.DependingOnUserRight; import de.symeda.sormas.api.utils.EmbeddedSensitiveData; import de.symeda.sormas.api.utils.HideForCountries; @@ -319,6 +321,7 @@ public class CaseExportDto extends AbstractUuidDto implements IsCase { private String externalToken; private String internalToken; + private String caseReferenceNumber; @PersonalData @SensitiveData private String birthName; @@ -389,7 +392,7 @@ public CaseExportDto(long id, long personId, Double personAddressLatitude, Doubl //Date onsetDate, VaccinationStatus vaccinationStatus, YesNoUnknown postpartum, Trimester trimester, long eventCount, Long prescriptionCount, Long treatmentCount, Long clinicalVisitCount, - String externalID, String externalToken, String internalToken, + String externalID, String externalToken, String internalToken,String caseReferenceNumber, String birthName, String birthCountryIsoCode, String birthCountryName, String citizenshipIsoCode, String citizenshipCountryName, CaseIdentificationSource caseIdentificationSource, ScreeningType screeningType, // responsible jurisdiction @@ -516,6 +519,7 @@ public CaseExportDto(long id, long personId, Double personAddressLatitude, Doubl this.externalID = externalID; this.externalToken = externalToken; this.internalToken = internalToken; + this.caseReferenceNumber = caseReferenceNumber; this.birthName = birthName; this.birthCountry = I18nProperties.getCountryName(birthCountryIsoCode, birthCountryName); this.citizenship = I18nProperties.getCountryName(citizenshipIsoCode, citizenshipCountryName); @@ -643,6 +647,17 @@ public String getInternalToken() { } @Order(7) + @ExportTarget(caseExportTypes = { + CaseExportType.CASE_SURVEILLANCE, + CaseExportType.CASE_MANAGEMENT }) + @ExportProperty(CaseDataDto.CASE_REFERENCE_NUMBER) + @ExportGroup(ExportGroupType.CORE) + @DependingOnFeatureType(featureType = FeatureType.SELF_REPORTING) + public String getCaseReferenceNumber() { + return caseReferenceNumber; + } + + @Order(8) @ExportTarget(caseExportTypes = { CaseExportType.CASE_SURVEILLANCE, CaseExportType.CASE_MANAGEMENT }) @@ -652,7 +667,7 @@ public Disease getDisease() { return disease; } - @Order(8) + @Order(9) @ExportTarget(caseExportTypes = { CaseExportType.CASE_SURVEILLANCE, CaseExportType.CASE_MANAGEMENT }) @@ -662,7 +677,7 @@ public String getDiseaseDetails() { return diseaseDetails; } - @Order(9) + @Order(10) @ExportTarget(caseExportTypes = { CaseExportType.CASE_SURVEILLANCE, CaseExportType.CASE_MANAGEMENT }) @@ -672,7 +687,7 @@ public DiseaseVariant getDiseaseVariant() { return diseaseVariant; } - @Order(10) + @Order(11) @ExportTarget(caseExportTypes = { CaseExportType.CASE_SURVEILLANCE, CaseExportType.CASE_MANAGEMENT }) @@ -682,7 +697,7 @@ public String getDiseaseVariantDetails() { return diseaseVariantDetails; } - @Order(11) + @Order(12) @ExportTarget(caseExportTypes = { CaseExportType.CASE_SURVEILLANCE, CaseExportType.CASE_MANAGEMENT }) @@ -695,7 +710,7 @@ public String getPersonUuid() { return personUuid; } - @Order(12) + @Order(13) @ExportTarget(caseExportTypes = { CaseExportType.CASE_SURVEILLANCE, CaseExportType.CASE_MANAGEMENT }) @@ -708,7 +723,7 @@ public String getFirstName() { return firstName; } - @Order(13) + @Order(14) @ExportTarget(caseExportTypes = { CaseExportType.CASE_SURVEILLANCE, CaseExportType.CASE_MANAGEMENT }) @@ -721,7 +736,7 @@ public String getLastName() { return lastName; } - @Order(14) + @Order(15) @ExportTarget(caseExportTypes = { CaseExportType.CASE_SURVEILLANCE, CaseExportType.CASE_MANAGEMENT }) @@ -735,7 +750,7 @@ public Salutation getSalutation() { return salutation; } - @Order(15) + @Order(16) @ExportTarget(caseExportTypes = { CaseExportType.CASE_SURVEILLANCE, CaseExportType.CASE_MANAGEMENT }) @@ -749,7 +764,7 @@ public String getOtherSalutation() { return otherSalutation; } - @Order(16) + @Order(17) @ExportTarget(caseExportTypes = { CaseExportType.CASE_SURVEILLANCE, CaseExportType.CASE_MANAGEMENT }) @@ -762,7 +777,7 @@ public Sex getSex() { return sex; } - @Order(17) + @Order(18) @ExportTarget(caseExportTypes = { CaseExportType.CASE_SURVEILLANCE, CaseExportType.CASE_MANAGEMENT }) @@ -772,7 +787,7 @@ public YesNoUnknown getPregnant() { return pregnant; } - @Order(18) + @Order(19) @ExportTarget(caseExportTypes = { CaseExportType.CASE_SURVEILLANCE, CaseExportType.CASE_MANAGEMENT }) @@ -782,7 +797,7 @@ public Trimester getTrimester() { return trimester; } - @Order(19) + @Order(20) @ExportTarget(caseExportTypes = { CaseExportType.CASE_SURVEILLANCE, CaseExportType.CASE_MANAGEMENT }) @@ -792,7 +807,7 @@ public YesNoUnknown getPostpartum() { return postpartum; } - @Order(20) + @Order(21) @ExportTarget(caseExportTypes = { CaseExportType.CASE_SURVEILLANCE, CaseExportType.CASE_MANAGEMENT }) @@ -805,7 +820,7 @@ public String getApproximateAge() { return approximateAge; } - @Order(21) + @Order(22) @ExportTarget(caseExportTypes = { CaseExportType.CASE_SURVEILLANCE, CaseExportType.CASE_MANAGEMENT }) @@ -818,7 +833,7 @@ public String getAgeGroup() { return ageGroup; } - @Order(22) + @Order(23) @ExportTarget(caseExportTypes = { CaseExportType.CASE_SURVEILLANCE, CaseExportType.CASE_MANAGEMENT }) @@ -829,7 +844,7 @@ public BirthDateDto getBirthdate() { return birthdate; } - @Order(23) + @Order(24) @ExportTarget(caseExportTypes = { CaseExportType.CASE_SURVEILLANCE, CaseExportType.CASE_MANAGEMENT }) @@ -839,7 +854,7 @@ public Date getReportDate() { return reportDate; } - @Order(24) + @Order(25) @ExportTarget(caseExportTypes = { CaseExportType.CASE_SURVEILLANCE, CaseExportType.CASE_MANAGEMENT }) @@ -849,7 +864,7 @@ public String getResponsibleRegion() { return responsibleRegion; } - @Order(25) + @Order(26) @ExportTarget(caseExportTypes = { CaseExportType.CASE_SURVEILLANCE, CaseExportType.CASE_MANAGEMENT }) @@ -859,7 +874,7 @@ public String getResponsibleDistrict() { return responsibleDistrict; } - @Order(26) + @Order(27) @ExportTarget(caseExportTypes = { CaseExportType.CASE_SURVEILLANCE, CaseExportType.CASE_MANAGEMENT }) @@ -869,7 +884,7 @@ public String getResponsibleCommunity() { return responsibleCommunity; } - @Order(27) + @Order(28) @ExportTarget(caseExportTypes = { CaseExportType.CASE_SURVEILLANCE, CaseExportType.CASE_MANAGEMENT }) @@ -879,7 +894,7 @@ public String getRegion() { return region; } - @Order(28) + @Order(29) @ExportTarget(caseExportTypes = { CaseExportType.CASE_SURVEILLANCE, CaseExportType.CASE_MANAGEMENT }) @@ -889,7 +904,7 @@ public String getDistrict() { return district; } - @Order(29) + @Order(30) @ExportTarget(caseExportTypes = { CaseExportType.CASE_SURVEILLANCE, CaseExportType.CASE_MANAGEMENT }) @@ -899,7 +914,7 @@ public String getCommunity() { return community; } - @Order(30) + @Order(31) @ExportTarget(caseExportTypes = { CaseExportType.CASE_SURVEILLANCE, CaseExportType.CASE_MANAGEMENT }) @@ -909,7 +924,7 @@ public FacilityType getFacilityType() { return facilityType; } - @Order(31) + @Order(32) @ExportTarget(caseExportTypes = { CaseExportType.CASE_SURVEILLANCE, CaseExportType.CASE_MANAGEMENT }) @@ -919,7 +934,7 @@ public String getHealthFacility() { return healthFacility; } - @Order(32) + @Order(33) @ExportTarget(caseExportTypes = { CaseExportType.CASE_SURVEILLANCE, CaseExportType.CASE_MANAGEMENT }) @@ -929,7 +944,7 @@ public String getHealthFacilityDetails() { return healthFacilityDetails; } - @Order(33) + @Order(34) @ExportTarget(caseExportTypes = { CaseExportType.CASE_SURVEILLANCE, CaseExportType.CASE_MANAGEMENT }) @@ -939,7 +954,7 @@ public String getPointOfEntry() { return pointOfEntry; } - @Order(34) + @Order(35) @ExportTarget(caseExportTypes = { CaseExportType.CASE_SURVEILLANCE, CaseExportType.CASE_MANAGEMENT }) @@ -949,7 +964,7 @@ public String getPointOfEntryDetails() { return pointOfEntryDetails; } - @Order(35) + @Order(36) @ExportTarget(caseExportTypes = { CaseExportType.CASE_SURVEILLANCE, CaseExportType.CASE_MANAGEMENT }) @@ -959,7 +974,7 @@ public String getInitialDetectionPlace() { return initialDetectionPlace; } - @Order(36) + @Order(37) @ExportTarget(caseExportTypes = { CaseExportType.CASE_SURVEILLANCE }) @ExportProperty(CaseDataDto.CASE_CLASSIFICATION) @@ -968,7 +983,7 @@ public CaseClassification getCaseClassification() { return caseClassification; } - @Order(37) + @Order(38) @ExportTarget(caseExportTypes = { CaseExportType.CASE_SURVEILLANCE, CaseExportType.CASE_MANAGEMENT }) @@ -978,7 +993,7 @@ public YesNoUnknown getClinicalConfirmation() { return clinicalConfirmation; } - @Order(38) + @Order(39) @ExportTarget(caseExportTypes = { CaseExportType.CASE_SURVEILLANCE, CaseExportType.CASE_MANAGEMENT }) @@ -988,7 +1003,7 @@ public YesNoUnknown getEpidemiologicalConfirmation() { return epidemiologicalConfirmation; } - @Order(39) + @Order(40) @ExportTarget(caseExportTypes = { CaseExportType.CASE_SURVEILLANCE, CaseExportType.CASE_MANAGEMENT }) diff --git a/sormas-api/src/main/java/de/symeda/sormas/api/caze/CaseIndexDetailedDto.java b/sormas-api/src/main/java/de/symeda/sormas/api/caze/CaseIndexDetailedDto.java index e8c1c916f1b..b1575091f22 100644 --- a/sormas-api/src/main/java/de/symeda/sormas/api/caze/CaseIndexDetailedDto.java +++ b/sormas-api/src/main/java/de/symeda/sormas/api/caze/CaseIndexDetailedDto.java @@ -74,7 +74,7 @@ public class CaseIndexDetailedDto extends CaseIndexDto { private UserReferenceDto reportingUser; //@formatter:off - public CaseIndexDetailedDto(long id, String uuid, String epidNumber, String externalID, String externalToken, String internalToken, String personUuid, String personFirstName, String personLastName, + public CaseIndexDetailedDto(long id, String uuid, String epidNumber, String externalID, String externalToken, String internalToken,String caseReferenceNumber, String personUuid, String personFirstName, String personLastName, Disease disease, DiseaseVariant diseaseVariant, String diseaseDetails, CaseClassification caseClassification, InvestigationStatus investigationStatus, PresentCondition presentCondition, Date reportDate, Date creationDate, String regionUuid, String districtUuid, @@ -88,7 +88,7 @@ public CaseIndexDetailedDto(long id, String uuid, String epidNumber, String exte String reportingUserUuid, String reportingUserFirstName, String reportingUserLastName, Date symptomOnsetDate, String responsibleRegion, String responsibleCommunity, int visitCount, long eventCount, Date latestSampleDateTime, long sampleCount) { - super(id, uuid, epidNumber, externalID, externalToken, internalToken, personUuid, personFirstName, personLastName, + super(id, uuid, epidNumber, externalID, externalToken, internalToken, caseReferenceNumber, personUuid, personFirstName, personLastName, disease, diseaseVariant, diseaseDetails, caseClassification, investigationStatus, presentCondition, reportDate, creationDate, regionUuid, districtUuid, healthFacilityUuid, diff --git a/sormas-api/src/main/java/de/symeda/sormas/api/caze/CaseIndexDto.java b/sormas-api/src/main/java/de/symeda/sormas/api/caze/CaseIndexDto.java index 201efadc2f9..6ab5de5d058 100644 --- a/sormas-api/src/main/java/de/symeda/sormas/api/caze/CaseIndexDto.java +++ b/sormas-api/src/main/java/de/symeda/sormas/api/caze/CaseIndexDto.java @@ -50,6 +50,7 @@ public class CaseIndexDto extends PseudonymizableIndexDto implements MergeableIn public static final String EXTERNAL_ID = "externalID"; public static final String EXTERNAL_TOKEN = "externalToken"; public static final String INTERNAL_TOKEN = "internalToken"; + public static final String CASE_REFERENCE_NUMBER = "caseReferenceNumber"; public static final String PERSON_UUID = "personUuid"; public static final String PERSON_FIRST_NAME = "personFirstName"; public static final String PERSON_LAST_NAME = "personLastName"; @@ -87,6 +88,7 @@ public class CaseIndexDto extends PseudonymizableIndexDto implements MergeableIn private String externalID; private String externalToken; private String internalToken; + private String caseReferenceNumber; private String personUuid; @PersonalData @SensitiveData @@ -138,7 +140,7 @@ public class CaseIndexDto extends PseudonymizableIndexDto implements MergeableIn private Boolean isInJurisdiction; //@formatter:off - public CaseIndexDto(long id, String uuid, String epidNumber, String externalID, String externalToken, String internalToken, String personUuid, String personFirstName, String personLastName, Disease disease, + public CaseIndexDto(long id, String uuid, String epidNumber, String externalID, String externalToken, String internalToken, String caseReferenceNumber, String personUuid, String personFirstName, String personLastName, Disease disease, DiseaseVariant diseaseVariant, String diseaseDetails, CaseClassification caseClassification, InvestigationStatus investigationStatus, PresentCondition presentCondition, Date reportDate, Date creationDate, String regionUuid, String districtUuid, String healthFacilityUuid, String healthFacilityName, String healthFacilityDetails, @@ -159,6 +161,7 @@ public CaseIndexDto(long id, String uuid, String epidNumber, String externalID, this.externalID = externalID; this.externalToken = externalToken; this.internalToken = internalToken; + this.caseReferenceNumber = caseReferenceNumber; this.personUuid = personUuid; this.personFirstName = personFirstName; this.personLastName = personLastName; @@ -411,6 +414,14 @@ public void setInternalToken(String internalToken) { this.internalToken = internalToken; } + public String getCaseReferenceNumber() { + return caseReferenceNumber; + } + + public void setCaseReferenceNumber(String caseReferenceNumber) { + this.caseReferenceNumber = caseReferenceNumber; + } + public Date getQuarantineTo() { return quarantineTo; } diff --git a/sormas-api/src/main/java/de/symeda/sormas/api/caze/CaseMergeIndexDto.java b/sormas-api/src/main/java/de/symeda/sormas/api/caze/CaseMergeIndexDto.java index 9f380d5c934..c00c3d5f593 100644 --- a/sormas-api/src/main/java/de/symeda/sormas/api/caze/CaseMergeIndexDto.java +++ b/sormas-api/src/main/java/de/symeda/sormas/api/caze/CaseMergeIndexDto.java @@ -20,7 +20,7 @@ public class CaseMergeIndexDto extends CaseIndexDto { //@formatter:off public CaseMergeIndexDto( - long id, String uuid, String epidNumber, String externalID, String externalToken, String internalToken, String personUuid, String personFirstName, String personLastName, Disease disease, + long id, String uuid, String epidNumber, String externalID, String externalToken, String internalToken, String caseReferenceNumber, String personUuid, String personFirstName, String personLastName, Disease disease, DiseaseVariant diseaseVariant, String diseaseDetails, CaseClassification caseClassification, InvestigationStatus investigationStatus, PresentCondition presentCondition, Date reportDate, Date creationDate, String regionUuid, String districtUuid, String healthFacilityUuid, String healthFacilityName, String healthFacilityDetails, @@ -37,6 +37,7 @@ public CaseMergeIndexDto( externalID, externalToken, internalToken, + caseReferenceNumber, personUuid, personFirstName, personLastName, diff --git a/sormas-api/src/main/java/de/symeda/sormas/api/contact/ContactDto.java b/sormas-api/src/main/java/de/symeda/sormas/api/contact/ContactDto.java index 815bd1b4d00..fc7e25b832b 100644 --- a/sormas-api/src/main/java/de/symeda/sormas/api/contact/ContactDto.java +++ b/sormas-api/src/main/java/de/symeda/sormas/api/contact/ContactDto.java @@ -104,6 +104,7 @@ public class ContactDto extends SormasToSormasShareableDto implements IsContact public static final String IMMUNOSUPPRESSIVE_THERAPY_BASIC_DISEASE = "immunosuppressiveTherapyBasicDisease"; public static final String IMMUNOSUPPRESSIVE_THERAPY_BASIC_DISEASE_DETAILS = "immunosuppressiveTherapyBasicDiseaseDetails"; public static final String INTERNAL_TOKEN = "internalToken"; + public static final String CASE_REFERENCE_NUMBER = "caseReferenceNumber"; public static final String LAST_CONTACT_DATE = "lastContactDate"; public static final String MULTI_DAY_CONTACT = "multiDayContact"; public static final String OVERWRITE_FOLLOW_UP_UNTIL = "overwriteFollowUpUntil"; @@ -233,6 +234,9 @@ public class ContactDto extends SormasToSormasShareableDto implements IsContact @S2SIgnoreProperty(configProperty = SormasToSormasConfig.SORMAS2SORMAS_IGNORE_INTERNAL_TOKEN) @Size(max = FieldConstraints.CHARACTER_LIMIT_TEXT, message = Validations.textTooLong) private String internalToken; + @Size(max = FieldConstraints.CHARACTER_LIMIT_DEFAULT, message = Validations.textTooLong) + @DependingOnFeatureType(featureType = FeatureType.SELF_REPORTING) + private String caseReferenceNumber; private boolean highPriority; private YesNoUnknown immunosuppressiveTherapyBasicDisease; @@ -664,6 +668,14 @@ public void setInternalToken(String internalToken) { this.internalToken = internalToken; } + public String getCaseReferenceNumber() { + return caseReferenceNumber; + } + + public void setCaseReferenceNumber(String caseReferenceNumber) { + this.caseReferenceNumber = caseReferenceNumber; + } + public RegionReferenceDto getRegion() { return region; } diff --git a/sormas-api/src/main/java/de/symeda/sormas/api/contact/ContactExportDto.java b/sormas-api/src/main/java/de/symeda/sormas/api/contact/ContactExportDto.java index ac35843465b..36f4dbe34a2 100644 --- a/sormas-api/src/main/java/de/symeda/sormas/api/contact/ContactExportDto.java +++ b/sormas-api/src/main/java/de/symeda/sormas/api/contact/ContactExportDto.java @@ -32,6 +32,7 @@ import de.symeda.sormas.api.caze.Vaccine; import de.symeda.sormas.api.caze.VaccineManufacturer; import de.symeda.sormas.api.epidata.EpiDataDto; +import de.symeda.sormas.api.feature.FeatureType; import de.symeda.sormas.api.i18n.I18nProperties; import de.symeda.sormas.api.immunization.ImmunizationDto; import de.symeda.sormas.api.importexport.ExportEntity; @@ -51,6 +52,7 @@ import de.symeda.sormas.api.person.Sex; import de.symeda.sormas.api.person.SymptomJournalStatus; import de.symeda.sormas.api.user.UserRoleReferenceDto; +import de.symeda.sormas.api.utils.DependingOnFeatureType; import de.symeda.sormas.api.utils.EmbeddedPersonalData; import de.symeda.sormas.api.utils.HideForCountriesExcept; import de.symeda.sormas.api.utils.Order; @@ -219,6 +221,7 @@ public class ContactExportDto extends AbstractUuidDto implements IsContact { private String externalID; private String externalToken; private String internalToken; + private String caseReferenceNumber; @PersonalData @SensitiveData @@ -259,7 +262,7 @@ public ContactExportDto(long id, long personId, String uuid, String sourceCaseUu String phone, String phoneOwner, String emailAddress, String otherContactDetails, OccupationType occupationType, String occupationDetails, ArmedForcesRelationType armedForcesRelationType, String region, String district, String community, long epiDataId, YesNoUnknown contactWithSourceCaseKnown, YesNoUnknown returningTraveler, - VaccinationStatus vaccinationStatus, String externalID, String externalToken, String internalToken, + VaccinationStatus vaccinationStatus, String externalID, String externalToken, String internalToken, String caseReferenceNumber, String birthName, String birthCountryIsoCode, String birthCountryName, String citizenshipIsoCode, String citizenshipCountryName, String reportingDistrict, SymptomJournalStatus symptomJournalStatus, @@ -348,6 +351,7 @@ public ContactExportDto(long id, long personId, String uuid, String sourceCaseUu this.externalID = externalID; this.externalToken = externalToken; this.internalToken = internalToken; + this.caseReferenceNumber = caseReferenceNumber; this.birthName = birthName; this.birthCountry = I18nProperties.getCountryName(birthCountryIsoCode, birthCountryName); this.citizenship = I18nProperties.getCountryName(citizenshipIsoCode, citizenshipCountryName); @@ -1199,6 +1203,14 @@ public String getInternalToken() { } @Order(122) + @ExportProperty(ContactDto.CASE_REFERENCE_NUMBER) + @ExportGroup(ExportGroupType.CORE) + @DependingOnFeatureType(featureType = FeatureType.SELF_REPORTING) + public String getCaseReferenceNumber() { + return caseReferenceNumber; + } + + @Order(123) @ExportProperty({ ContactDto.PERSON, PersonDto.SYMPTOM_JOURNAL_STATUS }) diff --git a/sormas-api/src/main/java/de/symeda/sormas/api/contact/ContactIndexDetailedDto.java b/sormas-api/src/main/java/de/symeda/sormas/api/contact/ContactIndexDetailedDto.java index 33287f8fe12..f5ebd890494 100644 --- a/sormas-api/src/main/java/de/symeda/sormas/api/contact/ContactIndexDetailedDto.java +++ b/sormas-api/src/main/java/de/symeda/sormas/api/contact/ContactIndexDetailedDto.java @@ -70,7 +70,7 @@ public ContactIndexDetailedDto(String uuid, String personUuid, String personFirs String caseRegionName, String caseDistrictName, Date changeDate, // XXX: unused, only here for TypedQuery mapping - String externalID, String externalToken, String internalToken, DeletionReason deletionReason, String otherDeleteReason, boolean isInJurisdiction, boolean isCaseInJurisdiction, + String externalID, String externalToken, String internalToken, String caseReferenceNumber, DeletionReason deletionReason, String otherDeleteReason, boolean isInJurisdiction, boolean isCaseInJurisdiction, Sex sex, Integer approximateAge, ApproximateAgeType approximateAgeType, String city, String street, String houseNumber, String additionalInformation, String postalCode, String phone, String reportingUserFirstName, String reportingUserLastName, ContactRelation relationToCase, int visitCount @@ -81,7 +81,7 @@ public ContactIndexDetailedDto(String uuid, String personUuid, String personFirs super(uuid, personUuid, personFirstName, personLastName, cazeUuid, disease, diseaseDetails, caseFirstName, caseLastName, regionName, districtName, lastContactDate, contactCategory, contactProximity, contactClassification, contactStatus, completeness, followUpStatus, followUpUntil, symptomJournalStatus, vaccinationStatus, contactOfficerUuid, reportingUserUuid, reportDateTime, caseClassification, - caseRegionName, caseDistrictName, changeDate, externalID, externalToken, internalToken, deletionReason, otherDeleteReason,isInJurisdiction, isCaseInJurisdiction , visitCount); + caseRegionName, caseDistrictName, changeDate, externalID, externalToken, internalToken, caseReferenceNumber, deletionReason, otherDeleteReason,isInJurisdiction, isCaseInJurisdiction , visitCount); //@formatter:on diff --git a/sormas-api/src/main/java/de/symeda/sormas/api/contact/ContactIndexDto.java b/sormas-api/src/main/java/de/symeda/sormas/api/contact/ContactIndexDto.java index a33e8987936..e8caf056e6a 100644 --- a/sormas-api/src/main/java/de/symeda/sormas/api/contact/ContactIndexDto.java +++ b/sormas-api/src/main/java/de/symeda/sormas/api/contact/ContactIndexDto.java @@ -57,6 +57,7 @@ public class ContactIndexDto extends PseudonymizableIndexDto implements IsContac public static final String EXTERNAL_ID = "externalID"; public static final String EXTERNAL_TOKEN = "externalToken"; public static final String INTERNAL_TOKEN = "internalToken"; + public static final String CASE_REFERENCE_NUMBER = "caseReferenceNumber"; public static final String COMPLETENESS = "completeness"; public static final String REGION_UUID = "regionUuid"; public static final String DISTRICT_UUID = "districtUuid"; @@ -89,6 +90,7 @@ public class ContactIndexDto extends PseudonymizableIndexDto implements IsContac private String externalID; private String externalToken; private String internalToken; + private String caseReferenceNumber; private String regionName; private String districtName; private String caseRegionName; @@ -108,7 +110,7 @@ public ContactIndexDto(String uuid, String personUuid, String personFirstName, S String reportingUserUuid, Date reportDateTime, CaseClassification caseClassification, String caseRegionName, String caseDistrictName, Date changeDate, // XXX: unused, only here for TypedQuery mapping - String externalID, String externalToken, String internalToken, DeletionReason deletionReason, String otherDeletionReason, boolean isInJurisdiction, boolean isCaseInJurisdiction, + String externalID, String externalToken, String internalToken,String caseReferenceNumber, DeletionReason deletionReason, String otherDeletionReason, boolean isInJurisdiction, boolean isCaseInJurisdiction, int visitCount ) { //@formatter:on @@ -141,6 +143,7 @@ public ContactIndexDto(String uuid, String personUuid, String personFirstName, S this.externalID = externalID; this.externalToken = externalToken; this.internalToken = internalToken; + this.caseReferenceNumber = caseReferenceNumber; this.regionName = regionName; this.districtName = districtName; this.caseRegionName = caseRegionName; @@ -340,6 +343,14 @@ public void setInternalToken(String internalToken) { this.internalToken = internalToken; } + public String getCaseReferenceNumber() { + return caseReferenceNumber; + } + + public void setCaseReferenceNumber(String caseReferenceNumber) { + this.caseReferenceNumber = caseReferenceNumber; + } + public String getRegionName() { return regionName; } diff --git a/sormas-api/src/main/java/de/symeda/sormas/api/i18n/Captions.java b/sormas-api/src/main/java/de/symeda/sormas/api/i18n/Captions.java index 25fc1fcc8c6..ed4496f9e87 100644 --- a/sormas-api/src/main/java/de/symeda/sormas/api/i18n/Captions.java +++ b/sormas-api/src/main/java/de/symeda/sormas/api/i18n/Captions.java @@ -313,6 +313,7 @@ public interface Captions { String CaseData_caseOfficer = "CaseData.caseOfficer"; String CaseData_caseOrigin = "CaseData.caseOrigin"; String CaseData_caseReferenceDefinition = "CaseData.caseReferenceDefinition"; + String CaseData_caseReferenceNumber = "CaseData.caseReferenceNumber"; String CaseData_changeDate = "CaseData.changeDate"; String CaseData_classificationComment = "CaseData.classificationComment"; String CaseData_classificationDate = "CaseData.classificationDate"; @@ -634,6 +635,7 @@ public interface Captions { String Contact_caseClassification = "Contact.caseClassification"; String Contact_caseIdExternalSystem = "Contact.caseIdExternalSystem"; String Contact_caseOrEventInformation = "Contact.caseOrEventInformation"; + String Contact_caseReferenceNumber = "Contact.caseReferenceNumber"; String Contact_caze = "Contact.caze"; String Contact_caze_ageSex = "Contact.caze.ageSex"; String Contact_caze_caseClassification = "Contact.caze.caseClassification"; diff --git a/sormas-api/src/main/java/de/symeda/sormas/api/importexport/ImportExportUtils.java b/sormas-api/src/main/java/de/symeda/sormas/api/importexport/ImportExportUtils.java index 2695897e117..4be50f0c0d7 100644 --- a/sormas-api/src/main/java/de/symeda/sormas/api/importexport/ImportExportUtils.java +++ b/sormas-api/src/main/java/de/symeda/sormas/api/importexport/ImportExportUtils.java @@ -20,7 +20,6 @@ import java.lang.annotation.Annotation; import java.lang.reflect.Method; import java.util.ArrayList; -import java.util.Collections; import java.util.Comparator; import java.util.HashSet; import java.util.List; @@ -33,10 +32,12 @@ import de.symeda.sormas.api.contact.ContactExportDto; import de.symeda.sormas.api.event.EventExportDto; import de.symeda.sormas.api.event.EventParticipantExportDto; +import de.symeda.sormas.api.feature.FeatureConfigurationDto; import de.symeda.sormas.api.person.PersonExportDto; import de.symeda.sormas.api.task.TaskExportDto; import de.symeda.sormas.api.utils.Order; import de.symeda.sormas.api.utils.fieldvisibility.checkers.CountryFieldVisibilityChecker; +import de.symeda.sormas.api.utils.fieldvisibility.checkers.FeatureTypeFieldVisibilityChecker; public final class ImportExportUtils { @@ -51,82 +52,71 @@ public static List getCaseExportProperties( final boolean withFollowUp, final boolean withClinicalCourse, final boolean withTherapy, - String countryLocale) { - return getExportProperties(CaseExportDto.class, new PropertyTypeFilter() { - - @Override - public boolean accept(ExportGroupType groupType) { - if (ExportGroupType.CLINICAL_COURSE == groupType && !withClinicalCourse) { - return false; - } else if (ExportGroupType.THERAPY == groupType && !withTherapy) { - return false; - } - - return ExportGroupType.FOLLOW_UP != groupType || withFollowUp; + String countryLocale, + List activeServerFeatureConfigurations) { + return getExportProperties(CaseExportDto.class, groupType -> { + if (ExportGroupType.CLINICAL_COURSE == groupType && !withClinicalCourse) { + return false; + } else if (ExportGroupType.THERAPY == groupType && !withTherapy) { + return false; } - }, propertyCaptionProvider, countryLocale); + + return ExportGroupType.FOLLOW_UP != groupType || withFollowUp; + }, propertyCaptionProvider, countryLocale, activeServerFeatureConfigurations); } public static List getEventExportProperties( PropertyCaptionProvider propertyCaptionProvider, final boolean withEventGroups, - String countryLocale) { - return getExportProperties(EventExportDto.class, new PropertyTypeFilter() { - - @Override - public boolean accept(ExportGroupType groupType) { - return ExportGroupType.EVENT_GROUP != groupType || withEventGroups; - } - }, propertyCaptionProvider, countryLocale); + String countryLocale, + List activeServerFeatureConfigurations) { + return getExportProperties( + EventExportDto.class, + groupType -> ExportGroupType.EVENT_GROUP != groupType || withEventGroups, + propertyCaptionProvider, + countryLocale, + activeServerFeatureConfigurations); } - public static List getContactExportProperties(PropertyCaptionProvider propertyCaptionProvider, String countryLocale) { - return getExportProperties(ContactExportDto.class, new PropertyTypeFilter() { - - @Override - public boolean accept(ExportGroupType type) { - return true; - } - }, propertyCaptionProvider, countryLocale); + public static List getContactExportProperties( + PropertyCaptionProvider propertyCaptionProvider, + String countryLocale, + List activeServerFeatureConfigurations) { + return getExportProperties(ContactExportDto.class, type -> true, propertyCaptionProvider, countryLocale, activeServerFeatureConfigurations); } public static List getEventParticipantExportProperties( PropertyCaptionProvider propertyCaptionProvider, - String countryLocale) { - return getExportProperties(EventParticipantExportDto.class, new PropertyTypeFilter() { - - @Override - public boolean accept(ExportGroupType type) { - return true; - } - }, propertyCaptionProvider, countryLocale); + String countryLocale, + List activeServerFeatureConfigurations) { + return getExportProperties( + EventParticipantExportDto.class, + type -> true, + propertyCaptionProvider, + countryLocale, + activeServerFeatureConfigurations); } - public static List getTaskExportProperties(PropertyCaptionProvider propertyCaptionProvider, String countryLocale) { - return getExportProperties(TaskExportDto.class, new PropertyTypeFilter() { - - @Override - public boolean accept(ExportGroupType type) { - return true; - } - }, propertyCaptionProvider, countryLocale); + public static List getTaskExportProperties( + PropertyCaptionProvider propertyCaptionProvider, + String countryLocale, + List activeServerFeatureConfigurations) { + return getExportProperties(TaskExportDto.class, type -> true, propertyCaptionProvider, countryLocale, activeServerFeatureConfigurations); } - public static List getPersonExportProperties(PropertyCaptionProvider propertyCaptionProvider, String countryLocale) { - return getExportProperties(PersonExportDto.class, new PropertyTypeFilter() { - - @Override - public boolean accept(ExportGroupType type) { - return true; - } - }, propertyCaptionProvider, countryLocale); + public static List getPersonExportProperties( + PropertyCaptionProvider propertyCaptionProvider, + String countryLocale, + List activeServerFeatureConfigurations) { + return getExportProperties(PersonExportDto.class, type -> true, propertyCaptionProvider, countryLocale, activeServerFeatureConfigurations); } private static List getExportProperties( Class exportDtoClass, PropertyTypeFilter filterExportGroup, PropertyCaptionProvider propertyCaptionProvider, - String countryLocale) { + String countryLocale, + List activeServerFeatureConfigurations) { List readMethods = new ArrayList<>(); for (Method method : exportDtoClass.getDeclaredMethods()) { if ((!method.getName().startsWith("get") && !method.getName().startsWith("is")) || !method.isAnnotationPresent(ExportGroup.class)) { @@ -134,20 +124,16 @@ private static List getExportProperties( } readMethods.add(method); } - Collections.sort(readMethods, new Comparator() { - - @Override - public int compare(Method m1, Method m2) { - return Integer.compare(getOrderValue(m1), getOrderValue(m2)); - } - }); + readMethods.sort(Comparator.comparingInt(ImportExportUtils::getOrderValue)); CountryFieldVisibilityChecker countryFieldVisibilityChecker = new CountryFieldVisibilityChecker(countryLocale); + FeatureTypeFieldVisibilityChecker featureTypeFieldVisibilityChecker = + new FeatureTypeFieldVisibilityChecker(activeServerFeatureConfigurations); Set combinedProperties = new HashSet<>(); List properties = new ArrayList<>(); for (Method method : readMethods) { - if (!countryFieldVisibilityChecker.isVisible(method)) { + if (!countryFieldVisibilityChecker.isVisible(method) || !featureTypeFieldVisibilityChecker.isVisible(method)) { continue; } diff --git a/sormas-api/src/main/resources/captions.properties b/sormas-api/src/main/resources/captions.properties index 9d075c6b932..90d2c46fa69 100644 --- a/sormas-api/src/main/resources/captions.properties +++ b/sormas-api/src/main/resources/captions.properties @@ -442,6 +442,7 @@ CaseData.epidNumber=EPID number CaseData.externalID=External ID CaseData.externalToken=External Token CaseData.internalToken=Internal Token +CaseData.caseReferenceNumber=Case Reference Number CaseData.facilityType=Facility type CaseData.healthFacility=Facility CaseData.healthFacilityDetails=Facility name & description @@ -767,6 +768,7 @@ Contact.epiData=Epidemiological data Contact.externalID=External ID Contact.externalToken=External Token Contact.internalToken=Internal Token +Contact.caseReferenceNumber=Case Reference Number Contact.personUuid=Person ID Contact.firstContactDate=Date of first contact Contact.firstName=First name of contact person diff --git a/sormas-backend/src/main/java/de/symeda/sormas/backend/caze/Case.java b/sormas-backend/src/main/java/de/symeda/sormas/backend/caze/Case.java index 4ce8ed36f47..4ed17d51575 100644 --- a/sormas-backend/src/main/java/de/symeda/sormas/backend/caze/Case.java +++ b/sormas-backend/src/main/java/de/symeda/sormas/backend/caze/Case.java @@ -175,6 +175,7 @@ public class Case extends CoreAdo implements IsCase, SormasToSormasShareable, Ha public static final String EXTERNAL_ID = "externalID"; public static final String EXTERNAL_TOKEN = "externalToken"; public static final String INTERNAL_TOKEN = "internalToken"; + public static final String CASE_REFERENCE_NUMBER = "caseReferenceNumber"; public static final String SHARED_TO_COUNTRY = "sharedToCountry"; public static final String NOSOCOMIAL_OUTBREAK = "nosocomialOutbreak"; public static final String INFECTION_SETTING = "infectionSetting"; @@ -338,6 +339,8 @@ public class Case extends CoreAdo implements IsCase, SormasToSormasShareable, Ha private String externalID; private String externalToken; private String internalToken; + + private String caseReferenceNumber; private boolean sharedToCountry; private QuarantineType quarantine; @@ -1216,6 +1219,15 @@ public void setInternalToken(String internalToken) { this.internalToken = internalToken; } + @Column(length = CHARACTER_LIMIT_DEFAULT) + public String getCaseReferenceNumber() { + return caseReferenceNumber; + } + + public void setCaseReferenceNumber(String caseReferenceNumber) { + this.caseReferenceNumber = caseReferenceNumber; + } + @Column public boolean isSharedToCountry() { return sharedToCountry; diff --git a/sormas-backend/src/main/java/de/symeda/sormas/backend/caze/CaseFacadeEjb.java b/sormas-backend/src/main/java/de/symeda/sormas/backend/caze/CaseFacadeEjb.java index 0384dabe7ac..335e89ecd91 100644 --- a/sormas-backend/src/main/java/de/symeda/sormas/backend/caze/CaseFacadeEjb.java +++ b/sormas-backend/src/main/java/de/symeda/sormas/backend/caze/CaseFacadeEjb.java @@ -862,6 +862,7 @@ public List getExportList( caseRoot.get(Case.EXTERNAL_ID), caseRoot.get(Case.EXTERNAL_TOKEN), caseRoot.get(Case.INTERNAL_TOKEN), + caseRoot.get(Case.CASE_REFERENCE_NUMBER), joins.getPerson().get(Person.BIRTH_NAME), joins.getPersonBirthCountry().get(Country.ISO_CODE), joins.getPersonBirthCountry().get(Country.DEFAULT_NAME), @@ -3098,6 +3099,7 @@ public static CaseDataDto toCaseDto(Case source) { target.setExternalID(source.getExternalID()); target.setExternalToken(source.getExternalToken()); target.setInternalToken(source.getInternalToken()); + target.setCaseReferenceNumber(source.getCaseReferenceNumber()); target.setSharedToCountry(source.isSharedToCountry()); target.setQuarantine(source.getQuarantine()); target.setQuarantineTypeDetails(source.getQuarantineTypeDetails()); @@ -3297,6 +3299,7 @@ public Case fillOrBuildEntity(@NotNull CaseDataDto source, Case target, boolean target.setExternalID(source.getExternalID()); target.setExternalToken(source.getExternalToken()); target.setInternalToken(source.getInternalToken()); + target.setCaseReferenceNumber(source.getCaseReferenceNumber()); target.setSharedToCountry(source.isSharedToCountry()); target.setQuarantine(source.getQuarantine()); target.setQuarantineTypeDetails(source.getQuarantineTypeDetails()); diff --git a/sormas-backend/src/main/java/de/symeda/sormas/backend/caze/CaseIndexDetailedDtoResultTransformer.java b/sormas-backend/src/main/java/de/symeda/sormas/backend/caze/CaseIndexDetailedDtoResultTransformer.java index a0a34be5ab9..09c6e5f68f6 100644 --- a/sormas-backend/src/main/java/de/symeda/sormas/backend/caze/CaseIndexDetailedDtoResultTransformer.java +++ b/sormas-backend/src/main/java/de/symeda/sormas/backend/caze/CaseIndexDetailedDtoResultTransformer.java @@ -44,7 +44,7 @@ public CaseIndexDetailedDto transformTuple(Object[] tuple, String[] aliases) { int index = -1; //@formatter:off - return new CaseIndexDetailedDto((Long)tuple[++index], (String)tuple[++index], (String)tuple[++index], (String)tuple[++index], (String)tuple[++index], (String)tuple[++index], (String)tuple[++index], (String)tuple[++index], (String)tuple[++index], (Disease)tuple[++index], + return new CaseIndexDetailedDto((Long)tuple[++index], (String)tuple[++index], (String)tuple[++index], (String)tuple[++index], (String)tuple[++index], (String)tuple[++index], (String)tuple[++index], (String)tuple[++index], (String)tuple[++index], (String)tuple[++index], (Disease)tuple[++index], (DiseaseVariant) tuple[++index], (String)tuple[++index], (CaseClassification)tuple[++index], (InvestigationStatus)tuple[++index], (PresentCondition)tuple[++index], (Date)tuple[++index], (Date)tuple[++index], (String)tuple[++index], (String)tuple[++index], (String)tuple[++index], (String)tuple[++index], (String)tuple[++index], diff --git a/sormas-backend/src/main/java/de/symeda/sormas/backend/caze/CaseIndexDtoResultTransformer.java b/sormas-backend/src/main/java/de/symeda/sormas/backend/caze/CaseIndexDtoResultTransformer.java index 6b31f916f3e..2340b0bec49 100644 --- a/sormas-backend/src/main/java/de/symeda/sormas/backend/caze/CaseIndexDtoResultTransformer.java +++ b/sormas-backend/src/main/java/de/symeda/sormas/backend/caze/CaseIndexDtoResultTransformer.java @@ -43,7 +43,7 @@ public CaseIndexDto transformTuple(Object[] tuple, String[] aliases) { int index = -1; //@formatter:off - return new CaseIndexDto((Long)tuple[++index], (String)tuple[++index], (String)tuple[++index], (String)tuple[++index], (String)tuple[++index], (String)tuple[++index], (String)tuple[++index], (String)tuple[++index], (String)tuple[++index], (Disease)tuple[++index], + return new CaseIndexDto((Long)tuple[++index], (String)tuple[++index], (String)tuple[++index], (String)tuple[++index], (String)tuple[++index], (String)tuple[++index], (String)tuple[++index], (String)tuple[++index], (String)tuple[++index], (String)tuple[++index], (Disease)tuple[++index], (DiseaseVariant) tuple[++index], (String)tuple[++index], (CaseClassification)tuple[++index], (InvestigationStatus)tuple[++index], (PresentCondition)tuple[++index], (Date)tuple[++index], (Date)tuple[++index], (String)tuple[++index], (String)tuple[++index], (String)tuple[++index], (String)tuple[++index], (String)tuple[++index], diff --git a/sormas-backend/src/main/java/de/symeda/sormas/backend/caze/CaseListCriteriaBuilder.java b/sormas-backend/src/main/java/de/symeda/sormas/backend/caze/CaseListCriteriaBuilder.java index 3e13e0e79af..0b23bd5dd0c 100644 --- a/sormas-backend/src/main/java/de/symeda/sormas/backend/caze/CaseListCriteriaBuilder.java +++ b/sormas-backend/src/main/java/de/symeda/sormas/backend/caze/CaseListCriteriaBuilder.java @@ -214,6 +214,7 @@ public List> getCaseIndexSelections(From root, CaseQueryCo root.get(Case.EXTERNAL_ID), root.get(Case.EXTERNAL_TOKEN), root.get(Case.INTERNAL_TOKEN), + root.get(Case.CASE_REFERENCE_NUMBER), joins.getPerson().get(Person.UUID), joins.getPerson().get(Person.FIRST_NAME), joins.getPerson().get(Person.LAST_NAME), @@ -282,6 +283,7 @@ private List> getIndexOrders(SortProperty sortProperty, Root case CaseIndexDto.EXTERNAL_ID: case CaseIndexDto.EXTERNAL_TOKEN: case CaseIndexDto.INTERNAL_TOKEN: + case CaseIndexDto.CASE_REFERENCE_NUMBER: case CaseIndexDto.DISEASE_DETAILS: return Collections.singletonList(cb.lower(caze.get(sortProperty.propertyName))); case CaseIndexDto.PERSON_FIRST_NAME: diff --git a/sormas-backend/src/main/java/de/symeda/sormas/backend/caze/CaseService.java b/sormas-backend/src/main/java/de/symeda/sormas/backend/caze/CaseService.java index 8f8c2265f4c..6bc7f9ac428 100644 --- a/sormas-backend/src/main/java/de/symeda/sormas/backend/caze/CaseService.java +++ b/sormas-backend/src/main/java/de/symeda/sormas/backend/caze/CaseService.java @@ -871,6 +871,7 @@ public Predicate createCriteriaFilter(CaseCrite CriteriaBuilderHelper.ilike(cb, from.get(Case.EXTERNAL_TOKEN), textFilter), CriteriaBuilderHelper.unaccentedIlike(cb, from.get(Case.HEALTH_FACILITY_DETAILS), textFilter), CriteriaBuilderHelper.unaccentedIlike(cb, from.get(Case.INTERNAL_TOKEN), textFilter), + CriteriaBuilderHelper.unaccentedIlike(cb, from.get(Case.CASE_REFERENCE_NUMBER), textFilter), //the below field is intentionally added to be available to be checked from two different filter fields CriteriaBuilderHelper.ilike(cb, joins.getPerson().get(Person.NATIONAL_HEALTH_ID), textFilter))); diff --git a/sormas-backend/src/main/java/de/symeda/sormas/backend/contact/Contact.java b/sormas-backend/src/main/java/de/symeda/sormas/backend/contact/Contact.java index e6842a8f983..61fa3f22718 100644 --- a/sormas-backend/src/main/java/de/symeda/sormas/backend/contact/Contact.java +++ b/sormas-backend/src/main/java/de/symeda/sormas/backend/contact/Contact.java @@ -118,6 +118,7 @@ public class Contact extends CoreAdo implements IsContact, SormasToSormasShareab public static final String IMMUNOSUPPRESSIVE_THERAPY_BASIC_DISEASE = "immunosuppressiveTherapyBasicDisease"; public static final String IMMUNOSUPPRESSIVE_THERAPY_BASIC_DISEASE_DETAILS = "immunosuppressiveTherapyBasicDiseaseDetails"; public static final String INTERNAL_TOKEN = "internalToken"; + public static final String CASE_REFERENCE_NUMBER = "caseReferenceNumber"; public static final String LAST_CONTACT_DATE = "lastContactDate"; public static final String MULTI_DAY_CONTACT = "multiDayContact"; public static final String OVERWRITE_FOLLOW_UP_UNTIL = "overwriteFollowUpUntil"; @@ -201,6 +202,7 @@ public class Contact extends CoreAdo implements IsContact, SormasToSormasShareab private String externalID; private String externalToken; private String internalToken; + private String caseReferenceNumber; private Case resultingCase; private User resultingCaseUser; @@ -636,6 +638,15 @@ public void setInternalToken(String internalToken) { this.internalToken = internalToken; } + @Column(length = CHARACTER_LIMIT_DEFAULT) + public String getCaseReferenceNumber() { + return caseReferenceNumber; + } + + public void setCaseReferenceNumber(String caseReferenceNumber) { + this.caseReferenceNumber = caseReferenceNumber; + } + @ManyToOne(cascade = {}, fetch = FetchType.LAZY) public Region getRegion() { return region; diff --git a/sormas-backend/src/main/java/de/symeda/sormas/backend/contact/ContactFacadeEjb.java b/sormas-backend/src/main/java/de/symeda/sormas/backend/contact/ContactFacadeEjb.java index f20a7d3bfb6..ac05898bf47 100644 --- a/sormas-backend/src/main/java/de/symeda/sormas/backend/contact/ContactFacadeEjb.java +++ b/sormas-backend/src/main/java/de/symeda/sormas/backend/contact/ContactFacadeEjb.java @@ -765,6 +765,7 @@ public List getExportList( contact.get(Contact.EXTERNAL_ID), contact.get(Contact.EXTERNAL_TOKEN), contact.get(Contact.INTERNAL_TOKEN), + contact.get(Contact.CASE_REFERENCE_NUMBER), joins.getPerson().get(Person.BIRTH_NAME), joins.getPersonBirthCountry().get(Country.ISO_CODE), joins.getPersonBirthCountry().get(Country.DEFAULT_NAME), @@ -1544,6 +1545,7 @@ public Contact fillOrBuildEntity(@NotNull ContactDto source, Contact target, boo target.setExternalID(source.getExternalID()); target.setExternalToken(source.getExternalToken()); target.setInternalToken(source.getInternalToken()); + target.setCaseReferenceNumber(source.getCaseReferenceNumber()); target.setRegion(regionService.getByReferenceDto(source.getRegion())); target.setDistrict(districtService.getByReferenceDto(source.getDistrict())); @@ -1884,6 +1886,7 @@ public static ContactDto toContactDto(Contact source) { target.setExternalID(source.getExternalID()); target.setExternalToken(source.getExternalToken()); target.setInternalToken(source.getInternalToken()); + target.setCaseReferenceNumber(source.getCaseReferenceNumber()); target.setRegion(RegionFacadeEjb.toReferenceDto(source.getRegion())); target.setDistrict(DistrictFacadeEjb.toReferenceDto(source.getDistrict())); diff --git a/sormas-backend/src/main/java/de/symeda/sormas/backend/contact/ContactIndexDetailedDtoResultTransformer.java b/sormas-backend/src/main/java/de/symeda/sormas/backend/contact/ContactIndexDetailedDtoResultTransformer.java index 0a862cfbbc5..7737875c4c9 100644 --- a/sormas-backend/src/main/java/de/symeda/sormas/backend/contact/ContactIndexDetailedDtoResultTransformer.java +++ b/sormas-backend/src/main/java/de/symeda/sormas/backend/contact/ContactIndexDetailedDtoResultTransformer.java @@ -53,7 +53,7 @@ public ContactIndexDetailedDto transformTuple(Object[] tuple, String[] aliases) (String) tuple[++index], (Date) tuple[++index], (CaseClassification) tuple[++index], (String) tuple[++index], (String) tuple[++index], (Date) tuple[++index], - (String) tuple[++index], (String) tuple[++index], (String) tuple[++index], (DeletionReason) tuple[++index], (String) tuple[++index], (Boolean) tuple[++index], (Boolean) tuple[++index], + (String) tuple[++index], (String) tuple[++index], (String) tuple[++index], (String) tuple[++index], (DeletionReason) tuple[++index], (String) tuple[++index], (Boolean) tuple[++index], (Boolean) tuple[++index], (Sex) tuple[++index], (Integer) tuple[++index], (ApproximateAgeType) tuple[++index], (String) tuple[++index], (String) tuple[++index], (String) tuple[++index], (String) tuple[++index], (String) tuple[++index], (String) tuple[++index], (String) tuple[++index], (String) tuple[++index], (ContactRelation) tuple[++index], (Integer) tuple[++index] diff --git a/sormas-backend/src/main/java/de/symeda/sormas/backend/contact/ContactIndexDtoResultTransformer.java b/sormas-backend/src/main/java/de/symeda/sormas/backend/contact/ContactIndexDtoResultTransformer.java index 7b92ede69f8..12699c94dcf 100644 --- a/sormas-backend/src/main/java/de/symeda/sormas/backend/contact/ContactIndexDtoResultTransformer.java +++ b/sormas-backend/src/main/java/de/symeda/sormas/backend/contact/ContactIndexDtoResultTransformer.java @@ -49,7 +49,7 @@ public ContactIndexDto transformTuple(Object[] tuple, String[] aliases) { (String) tuple[++index], (Date) tuple[++index], (CaseClassification) tuple[++index], (String) tuple[++index], (String) tuple[++index], (Date) tuple[++index], - (String) tuple[++index], (String) tuple[++index], (String) tuple[++index], (DeletionReason) tuple[++index], (String) tuple[++index], (Boolean) tuple[++index], (Boolean) tuple[++index], + (String) tuple[++index], (String) tuple[++index], (String) tuple[++index], (String) tuple[++index], (DeletionReason) tuple[++index], (String) tuple[++index], (Boolean) tuple[++index], (Boolean) tuple[++index], (Integer) tuple[++index] ); //@formatter:on diff --git a/sormas-backend/src/main/java/de/symeda/sormas/backend/contact/ContactListCriteriaBuilder.java b/sormas-backend/src/main/java/de/symeda/sormas/backend/contact/ContactListCriteriaBuilder.java index 2f0b57c8658..3fe1f6b83a1 100644 --- a/sormas-backend/src/main/java/de/symeda/sormas/backend/contact/ContactListCriteriaBuilder.java +++ b/sormas-backend/src/main/java/de/symeda/sormas/backend/contact/ContactListCriteriaBuilder.java @@ -125,6 +125,7 @@ public List> getContactIndexSelections(Root contact, Conta contact.get(Contact.EXTERNAL_ID), contact.get(Contact.EXTERNAL_TOKEN), contact.get(Contact.INTERNAL_TOKEN), + contact.get(Contact.CASE_REFERENCE_NUMBER), contact.get(Contact.DELETION_REASON), contact.get(Contact.OTHER_DELETION_REASON), JurisdictionHelper.booleanSelector(cb, contactService.inJurisdictionOrOwned(contactQueryContext)), @@ -196,6 +197,7 @@ private List> getIndexOrders(SortProperty sortProperty, Root "Case", withFollowUp, withClinicalCourse, withTherapy, countryLocale) + ImportExportUtils + .getCaseExportProperties( + (a, b) -> "Case", + withFollowUp, + withClinicalCourse, + withTherapy, + getConfigFacade().getCountryLocale(), + getFeatureConfigurationFacade().getActiveServerFeatureConfigurations()) .stream() - .map(e -> e.getPropertyId()) + .map(ExportPropertyMetaInfo::getPropertyId) .collect(Collectors.toSet())); return config; diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/caze/AbstractCaseGrid.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/caze/AbstractCaseGrid.java index 73294c6e95e..1e4a91f87d1 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/caze/AbstractCaseGrid.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/caze/AbstractCaseGrid.java @@ -189,6 +189,10 @@ protected void initColumns() { removeColumn(DELETE_REASON_COLUMN); } + if (!UiUtil.enabled(FeatureType.SELF_REPORTING)) { + removeColumn(CaseIndexDto.CASE_REFERENCE_NUMBER); + } + for (Column column : getColumns()) { column.setCaption( I18nProperties.findPrefixCaptionWithDefault( @@ -215,6 +219,7 @@ protected Stream getGridColumns() { CaseIndexDto.EXTERNAL_ID, CaseIndexDto.EXTERNAL_TOKEN, CaseIndexDto.INTERNAL_TOKEN, + CaseIndexDto.CASE_REFERENCE_NUMBER, DISEASE_SHORT, CaseIndexDto.DISEASE_VARIANT, CaseIndexDto.CASE_CLASSIFICATION, diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/caze/CaseContactsView.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/caze/CaseContactsView.java index c4c69dc4030..141d749070c 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/caze/CaseContactsView.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/caze/CaseContactsView.java @@ -14,6 +14,8 @@ */ package de.symeda.sormas.ui.caze; +import static de.symeda.sormas.ui.contact.ContactsView.buildDetailedExportConfiguration; + import java.util.Collections; import java.util.HashMap; import java.util.Set; @@ -48,6 +50,7 @@ import de.symeda.sormas.api.i18n.Descriptions; import de.symeda.sormas.api.i18n.I18nProperties; import de.symeda.sormas.api.i18n.Strings; +import de.symeda.sormas.api.importexport.ExportConfigurationDto; import de.symeda.sormas.api.infrastructure.district.DistrictReferenceDto; import de.symeda.sormas.api.infrastructure.region.RegionReferenceDto; import de.symeda.sormas.api.user.UserDto; @@ -94,6 +97,7 @@ public class CaseContactsView extends AbstractCaseView { private DetailSubComponentWrapper gridLayout; private HashMap statusButtons; private Button activeStatusButton; + private final ExportConfigurationDto detailedExportConfiguration; public CaseContactsView() { @@ -103,6 +107,7 @@ public CaseContactsView() { viewConfiguration = ViewModelProviders.of(getClass()).get(ViewConfiguration.class); viewConfiguration.setInEagerMode(true); criteria = ViewModelProviders.of(CaseContactsView.class).get(ContactCriteria.class); + detailedExportConfiguration = buildDetailedExportConfiguration(); } public HorizontalLayout createFilterBar() { @@ -316,7 +321,7 @@ public HorizontalLayout createStatusFilterBar(boolean isEditAllowed) { addExportButton(streamResource, exportButton, exportLayout, VaadinIcons.TABLE, Captions.exportBasic, Descriptions.descExportButton); StreamResource extendedExportStreamResource = - ContactDownloadUtil.createContactExportResource(grid.getCriteria(), this::getSelectedRows, null); + ContactDownloadUtil.createContactExportResource(grid.getCriteria(), this::getSelectedRows, detailedExportConfiguration); addExportButton( extendedExportStreamResource, exportButton, diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/caze/CaseCreateForm.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/caze/CaseCreateForm.java index 38a2f390de6..6812c751c7b 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/caze/CaseCreateForm.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/caze/CaseCreateForm.java @@ -122,7 +122,8 @@ public class CaseCreateForm extends AbstractEditForm { //@formatter:off private static final String HTML_LAYOUT = fluidRowLocs(CaseDataDto.CASE_ORIGIN, "") - + fluidRowLocs(CaseDataDto.REPORT_DATE, CaseDataDto.EPID_NUMBER, CaseDataDto.EXTERNAL_ID) + + fluidRowLocs(CaseDataDto.REPORT_DATE, CaseDataDto.EPID_NUMBER) + + fluidRowLocs(CaseDataDto.CASE_REFERENCE_NUMBER, CaseDataDto.EXTERNAL_ID) + fluidRow( fluidColumnLoc(6, 0, CaseDataDto.DISEASE), fluidColumn(6, 0, @@ -159,7 +160,8 @@ public CaseCreateForm(Boolean showHomeAddressForm, Boolean showPersonSearchButto CaseDataDto.class, CaseDataDto.I18N_PREFIX, false, - FieldVisibilityCheckers.withCountry(FacadeProvider.getConfigFacade().getCountryLocale()), + FieldVisibilityCheckers.withCountry(FacadeProvider.getConfigFacade().getCountryLocale()) + .andWithFeatureType(FacadeProvider.getFeatureConfigurationFacade().getActiveServerFeatureConfigurations()), UiFieldAccessCheckers.getNoop()); this.convertedTravelEntry = convertedTravelEntry; this.showHomeAddressForm = showHomeAddressForm; @@ -187,6 +189,8 @@ protected void addFields() { CaseFormHelper.addDontShareWithReportingTool(getContent(), () -> dontShareCheckbox, DONT_SHARE_WARNING_LOC); } + addField(CaseDataDto.CASE_REFERENCE_NUMBER, TextField.class); + addField(CaseDataDto.REPORT_DATE, DateField.class); ComboBox diseaseField = addDiseaseField(CaseDataDto.DISEASE, false, true); diseaseVariantField = addField(CaseDataDto.DISEASE_VARIANT, ComboBox.class); diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/caze/CaseDataForm.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/caze/CaseDataForm.java index c9128922863..2f9385b057a 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/caze/CaseDataForm.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/caze/CaseDataForm.java @@ -121,6 +121,7 @@ import de.symeda.sormas.api.utils.fieldaccess.UiFieldAccessCheckers; import de.symeda.sormas.api.utils.fieldvisibility.FieldVisibilityCheckers; import de.symeda.sormas.api.utils.fieldvisibility.checkers.CountryFieldVisibilityChecker; +import de.symeda.sormas.api.utils.fieldvisibility.checkers.FeatureTypeFieldVisibilityChecker; import de.symeda.sormas.api.utils.fieldvisibility.checkers.UserRightFieldVisibilityChecker; import de.symeda.sormas.ui.ControllerProvider; import de.symeda.sormas.ui.UiUtil; @@ -196,6 +197,7 @@ public class CaseDataForm extends AbstractEditForm { fluidRowLocs(CaseDataDto.EXTERNAL_ID, CaseDataDto.EXTERNAL_TOKEN) + fluidRowLocs("", EXTERNAL_TOKEN_WARNING_LOC) + fluidRowLocs(6, CaseDataDto.CASE_ID_ISM, 6, CaseDataDto.INTERNAL_TOKEN) + + fluidRowLocs(CaseDataDto.CASE_REFERENCE_NUMBER, "") + fluidRow( fluidColumnLoc(6, 0, CaseDataDto.DISEASE), fluidColumn(6, 0, locs( @@ -323,7 +325,8 @@ public CaseDataForm( FieldVisibilityCheckers.withDisease(disease) .add(new OutbreakFieldVisibilityChecker(viewMode)) .add(new CountryFieldVisibilityChecker(FacadeProvider.getConfigFacade().getCountryLocale())) - .add(new UserRightFieldVisibilityChecker(UiUtil::permitted)), + .add(new UserRightFieldVisibilityChecker(UiUtil::permitted)) + .add(new FeatureTypeFieldVisibilityChecker(FacadeProvider.getFeatureConfigurationFacade().getActiveServerFeatureConfigurations())), UiFieldAccessCheckers.forDataAccessLevel(UiUtil.getPseudonymizableDataAccessLevel(inJurisdiction), isPseudonymized)); this.caseUuid = caseUuid; @@ -431,6 +434,7 @@ protected void addFields() { getContent().addComponent(externalTokenWarningLabel, EXTERNAL_TOKEN_WARNING_LOC); addField(CaseDataDto.INTERNAL_TOKEN, TextField.class); + addField(CaseDataDto.CASE_REFERENCE_NUMBER, TextField.class); addField(CaseDataDto.INVESTIGATION_STATUS, NullableOptionGroup.class); addField(CaseDataDto.OUTCOME, NullableOptionGroup.class); diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/caze/CasesView.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/caze/CasesView.java index d27051ef501..5f36c98dcd9 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/caze/CasesView.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/caze/CasesView.java @@ -248,7 +248,8 @@ private ExportConfigurationDto buildDetailedExportConfiguration() { caseFollowUpEnabled, hasClinicalCourseRight, hasTherapyRight, - FacadeProvider.getConfigFacade().getCountryLocale()) + FacadeProvider.getConfigFacade().getCountryLocale(), + FacadeProvider.getFeatureConfigurationFacade().getActiveServerFeatureConfigurations()) .stream() .map(ExportPropertyMetaInfo::getPropertyId) .collect(Collectors.toSet())); @@ -389,7 +390,8 @@ private void addCommonCasesOverviewToolbar() { caseFollowUpEnabled, hasClinicalCourseRight, hasTherapyRight, - FacadeProvider.getConfigFacade().getCountryLocale()), + FacadeProvider.getConfigFacade().getCountryLocale(), + FacadeProvider.getFeatureConfigurationFacade().getActiveServerFeatureConfigurations()), customExportWindow::close); customExportsLayout.setExportCallback( (exportConfig) -> Page.getCurrent() diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/contact/AbstractContactGrid.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/contact/AbstractContactGrid.java index 37d6f14751c..6172249fc71 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/contact/AbstractContactGrid.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/contact/AbstractContactGrid.java @@ -180,6 +180,10 @@ protected void initColumns() { removeColumn(DELETE_REASON_COLUMN); } + if (!UiUtil.enabled(FeatureType.SELF_REPORTING)) { + removeColumn(ContactIndexDto.CASE_REFERENCE_NUMBER); + } + for (Column column : getColumns()) { column.setCaption( I18nProperties.findPrefixCaptionWithDefault( @@ -202,6 +206,7 @@ protected Stream getColumnList() { ContactIndexDto.EXTERNAL_ID, ContactIndexDto.EXTERNAL_TOKEN, ContactIndexDto.INTERNAL_TOKEN, + ContactIndexDto.CASE_REFERENCE_NUMBER, DISEASE_SHORT, ContactIndexDto.CONTACT_CLASSIFICATION, ContactIndexDto.CONTACT_STATUS), diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/contact/ContactCreateForm.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/contact/ContactCreateForm.java index 4acfd04d07b..bf3e3824a24 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/contact/ContactCreateForm.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/contact/ContactCreateForm.java @@ -78,8 +78,8 @@ public class ContactCreateForm extends AbstractEditForm { LayoutUtil.loc(PERSON_NAME_LOC) + LayoutUtil.fluidRowLocs(ContactDto.PERSON) + LayoutUtil.fluidRowLocs(ContactDto.RETURNING_TRAVELER) + - LayoutUtil.fluidRowLocs(ContactDto.REPORT_DATE_TIME, ContactDto.DISEASE) + - LayoutUtil.fluidRowLocs(ContactDto.DISEASE_DETAILS) + + LayoutUtil.fluidRowLocs(ContactDto.REPORT_DATE_TIME, CaseDataDto.CASE_REFERENCE_NUMBER) + + LayoutUtil.fluidRowLocs(ContactDto.DISEASE, ContactDto.DISEASE_DETAILS) + LayoutUtil.fluidRowLocs(6, CASE_INFO_LOC, 3, CHOOSE_CASE_LOC, 3, REMOVE_CASE_LOC) + LayoutUtil.fluidRowLocs(ContactDto.CASE_ID_EXTERNAL_SYSTEM) + LayoutUtil.fluidRowLocs(ContactDto.MULTI_DAY_CONTACT) + @@ -127,7 +127,9 @@ public ContactCreateForm(Disease disease, boolean hasCaseRelation, boolean asSou super( ContactDto.class, ContactDto.I18N_PREFIX, - FieldVisibilityCheckers.withDisease(disease).andWithCountry(FacadeProvider.getConfigFacade().getCountryLocale())); + FieldVisibilityCheckers.withDisease(disease) + .andWithCountry(FacadeProvider.getConfigFacade().getCountryLocale()) + .andWithFeatureType(FacadeProvider.getFeatureConfigurationFacade().getActiveServerFeatureConfigurations())); this.disease = disease; this.hasCaseRelation = hasCaseRelation; @@ -148,6 +150,7 @@ protected void addFields() { } reportDate = addField(ContactDto.REPORT_DATE_TIME, DateField.class); + addField(CaseDataDto.CASE_REFERENCE_NUMBER, TextField.class); ComboBox cbDisease = addDiseaseField(ContactDto.DISEASE, false, true); addField(ContactDto.DISEASE_DETAILS, TextField.class); @@ -196,6 +199,8 @@ protected void addFields() { addField(ContactDto.CASE_ID_EXTERNAL_SYSTEM, TextField.class); addField(ContactDto.CASE_OR_EVENT_INFORMATION, TextArea.class).setRows(4); + initializeVisibilitiesAndAllowedVisibilities(); + CssStyles.style(CssStyles.SOFT_REQUIRED, firstContactDate, lastContactDate, contactProximity, relationToCase); region.addValueChangeListener(e -> { diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/contact/ContactDataForm.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/contact/ContactDataForm.java index b7f46bfd0f7..5b0fe16c52c 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/contact/ContactDataForm.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/contact/ContactDataForm.java @@ -125,6 +125,7 @@ public class ContactDataForm extends AbstractEditForm { fluidRowLocs(ContactDto.UUID) + fluidRowLocs(ContactDto.EXTERNAL_ID, ContactDto.EXTERNAL_TOKEN) + fluidRowLocs(ContactDto.INTERNAL_TOKEN, EXTERNAL_TOKEN_WARNING_LOC) + + fluidRowLocs(ContactDto.CASE_REFERENCE_NUMBER, "") + fluidRowLocs(3, ContactDto.REPORTING_USER, 4, ContactDto.REPORT_DATE_TIME, 4,ContactDto.REPORTING_DISTRICT, 1, "") + fluidRowLocs(ContactDto.REGION, ContactDto.DISTRICT, ContactDto.COMMUNITY) + fluidRowLocs(ContactDto.RETURNING_TRAVELER, ContactDto.CASE_ID_EXTERNAL_SYSTEM) + @@ -200,7 +201,9 @@ public ContactDataForm(Disease disease, ViewMode viewMode, boolean isPseudonymiz ContactDto.class, ContactDto.I18N_PREFIX, false, - FieldVisibilityCheckers.withDisease(disease).andWithCountry(FacadeProvider.getConfigFacade().getCountryLocale()), + FieldVisibilityCheckers.withDisease(disease) + .andWithCountry(FacadeProvider.getConfigFacade().getCountryLocale()) + .andWithFeatureType(FacadeProvider.getFeatureConfigurationFacade().getActiveServerFeatureConfigurations()), UiFieldAccessCheckers.forDataAccessLevel(UiUtil.getPseudonymizableDataAccessLevel(inJurisdiction), isPseudonymized)); this.viewMode = viewMode; @@ -239,6 +242,7 @@ protected void addFields() { getContent().addComponent(externalTokenWarningLabel, EXTERNAL_TOKEN_WARNING_LOC); addField(ContactDto.INTERNAL_TOKEN, TextField.class); + addField(ContactDto.CASE_REFERENCE_NUMBER, TextField.class); UserField reportingUser = addField(CaseDataDto.REPORTING_USER, UserField.class); reportingUser.setParentPseudonymizedSupplier(() -> getValue().isPseudonymized()); diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/contact/ContactsView.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/contact/ContactsView.java index 9749683aec7..02e329660c7 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/contact/ContactsView.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/contact/ContactsView.java @@ -65,6 +65,10 @@ import de.symeda.sormas.api.i18n.I18nProperties; import de.symeda.sormas.api.i18n.Strings; import de.symeda.sormas.api.i18n.Validations; +import de.symeda.sormas.api.importexport.ExportConfigurationDto; +import de.symeda.sormas.api.importexport.ExportPropertyMetaInfo; +import de.symeda.sormas.api.importexport.ExportType; +import de.symeda.sormas.api.importexport.ImportExportUtils; import de.symeda.sormas.api.user.UserRight; import de.symeda.sormas.api.utils.DateHelper; import de.symeda.sormas.api.utils.UtilDate; @@ -123,6 +127,7 @@ public class ContactsView extends AbstractView implements HasName { private int followUpRangeInterval = 14; private boolean buttonPreviousOrNextClick = false; private Date followUpToDate; + private final ExportConfigurationDto detailedExportConfiguration; private Set getSelectedRows() { AbstractContactGrid contactGrid = (AbstractContactGrid) this.grid; @@ -153,6 +158,9 @@ public ContactsView() { ? new ContactGridDetailed(criteria, getClass(), ContactsViewConfiguration.class) : new ContactGrid(criteria, getClass(), ContactsViewConfiguration.class); } + + detailedExportConfiguration = buildDetailedExportConfiguration(); + final VerticalLayout gridLayout = new VerticalLayout(); gridLayout.addComponent(createFilterBar()); gridLayout.addComponent(createStatusFilterBar()); @@ -227,7 +235,7 @@ public ContactsView() { } { StreamResource extendedExportStreamResource = - ContactDownloadUtil.createContactExportResource(grid.getCriteria(), this::getSelectedRows, null); + ContactDownloadUtil.createContactExportResource(grid.getCriteria(), this::getSelectedRows, detailedExportConfiguration); addExportButton( extendedExportStreamResource, @@ -849,4 +857,19 @@ private HorizontalLayout dateRangeFollowUpVisitsFilterLayout() { public String getName() { return VIEW_NAME; } + + public static ExportConfigurationDto buildDetailedExportConfiguration() { + ExportConfigurationDto config = ExportConfigurationDto.build(UiUtil.getUserReference(), ExportType.CASE); + + config.setProperties( + ImportExportUtils + .getContactExportProperties( + ContactDownloadUtil::getPropertyCaption, + FacadeProvider.getConfigFacade().getCountryLocale(), + FacadeProvider.getFeatureConfigurationFacade().getActiveServerFeatureConfigurations()) + .stream() + .map(ExportPropertyMetaInfo::getPropertyId) + .collect(Collectors.toSet())); + return config; + } } diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/customexport/CustomExportController.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/customexport/CustomExportController.java index 984e137238b..4e9004ba270 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/customexport/CustomExportController.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/customexport/CustomExportController.java @@ -47,8 +47,10 @@ public void openContactExportWindow(ContactCriteria contactCriteria, Supplier Page.getCurrent() @@ -63,7 +65,10 @@ public void openTaskExportWindow(TaskCriteria taskCriteria, Supplier Page.getCurrent().open(TaskDownloadUtil.createTaskExportResource(taskCriteria, selectedRows, exportConfig), null, true)); @@ -77,7 +82,10 @@ public void openPersonExportWindow(PersonCriteria personCriteria) { Window customExportWindow = VaadinUiUtil.createPopupWindow(); ExportConfigurationsLayout customExportsLayout = new ExportConfigurationsLayout( ExportType.PERSON, - ImportExportUtils.getPersonExportProperties(PersonDownloadUtil::getPropertyCaption, FacadeProvider.getConfigFacade().getCountryLocale()), + ImportExportUtils.getPersonExportProperties( + PersonDownloadUtil::getPropertyCaption, + FacadeProvider.getConfigFacade().getCountryLocale(), + FacadeProvider.getFeatureConfigurationFacade().getActiveServerFeatureConfigurations()), customExportWindow::close); customExportsLayout.setExportCallback( exportConfig -> Page.getCurrent().open(PersonDownloadUtil.createPersonExportResource(personCriteria, exportConfig), null, true)); diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/events/EventParticipantsView.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/events/EventParticipantsView.java index a942f418228..3c5dee47480 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/events/EventParticipantsView.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/events/EventParticipantsView.java @@ -441,7 +441,8 @@ private void addImportExportButtons(HorizontalLayout actionButtonsLayout) { ExportType.EVENT_PARTICIPANTS, ImportExportUtils.getEventParticipantExportProperties( EventParticipantDownloadUtil::getPropertyCaption, - FacadeProvider.getConfigFacade().getCountryLocale()), + FacadeProvider.getConfigFacade().getCountryLocale(), + FacadeProvider.getFeatureConfigurationFacade().getActiveServerFeatureConfigurations()), customExportWindow::close); customExportsLayout.setExportCallback( (exportConfig) -> Page.getCurrent() diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/events/EventsView.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/events/EventsView.java index 7138cb4d23f..5c051d571a4 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/events/EventsView.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/events/EventsView.java @@ -751,7 +751,8 @@ private ExportConfigurationDto buildDetailedExportConfiguration() { .getEventExportProperties( EventDownloadUtil::getPropertyCaption, eventGroupFeatureEnabled, - FacadeProvider.getConfigFacade().getCountryLocale()) + FacadeProvider.getConfigFacade().getCountryLocale(), + FacadeProvider.getFeatureConfigurationFacade().getActiveServerFeatureConfigurations()) .stream() .map(ExportPropertyMetaInfo::getPropertyId) .collect(Collectors.toSet()));