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

Commit 6e08cb0

Browse files
lgallgal
authored andcommitted
3412 add birth name, country of birth, and citizenship to person
1 parent 29ff8d2 commit 6e08cb0

21 files changed

Lines changed: 312 additions & 19 deletions

File tree

sormas-api/src/main/java/de/symeda/sormas/api/caze/CaseExportDto.java

Lines changed: 44 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -242,6 +242,12 @@ public class CaseExportDto implements Serializable {
242242
private EventStatus latestEventStatus;
243243
private String externalID;
244244

245+
@PersonalData
246+
@SensitiveData
247+
private String birthName;
248+
private String birthCountry;
249+
private String citizenship;
250+
245251
//@formatter:off
246252
public CaseExportDto(long id, long personId, long personAddressId, long epiDataId, long symptomsId,
247253
long hospitalizationId, long districtId, long healthConditionsId, String uuid, String epidNumber,
@@ -268,7 +274,8 @@ public CaseExportDto(long id, long personId, long personAddressId, long epiDataI
268274
//Date onsetDate,
269275
Vaccination vaccination, String vaccinationDoses, Date vaccinationDate,
270276
VaccinationInfoSource vaccinationInfoSource, YesNoUnknown postpartum, Trimester trimester,
271-
long eventCount, String externalID) {
277+
long eventCount, String externalID,
278+
String birthName, String birthCountryIsoCode, String birthCountryName, String citizenshipIsoCode, String citizenshipCountryName) {
272279
//@formatter:on
273280

274281
this.id = id;
@@ -345,6 +352,9 @@ public CaseExportDto(long id, long personId, long personAddressId, long epiDataI
345352
this.followUpUntil = followUpUntil;
346353
this.eventCount = eventCount;
347354
this.externalID = externalID;
355+
this.birthName = birthName;
356+
this.birthCountry = I18nProperties.getCountryName(birthCountryIsoCode, birthCountryName);
357+
this.citizenship = I18nProperties.getCountryName(citizenshipIsoCode, citizenshipCountryName);
348358

349359
jurisdiction = new CaseJurisdictionDto(reportingUserUuid, regionUuid, districtUuid, communityUuid, healthFacilityUuid, pointOfEntryUuid);
350360
}
@@ -1362,6 +1372,39 @@ public String getLatestEventTitle() {
13621372
return latestEventTitle;
13631373
}
13641374

1375+
@Order(150)
1376+
@ExportTarget(caseExportTypes = {
1377+
CaseExportType.CASE_SURVEILLANCE,
1378+
CaseExportType.CASE_MANAGEMENT })
1379+
@ExportProperty(PersonDto.BIRTH_NAME)
1380+
@ExportGroup(ExportGroupType.SENSITIVE)
1381+
@HideForCountriesExcept
1382+
public String getBirthName() {
1383+
return birthName;
1384+
}
1385+
1386+
@Order(151)
1387+
@ExportTarget(caseExportTypes = {
1388+
CaseExportType.CASE_SURVEILLANCE,
1389+
CaseExportType.CASE_MANAGEMENT })
1390+
@ExportProperty(PersonDto.BIRTH_COUNTRY)
1391+
@ExportGroup(ExportGroupType.SENSITIVE)
1392+
@HideForCountriesExcept
1393+
public String getBirthCountry() {
1394+
return birthCountry;
1395+
}
1396+
1397+
@Order(152)
1398+
@ExportTarget(caseExportTypes = {
1399+
CaseExportType.CASE_SURVEILLANCE,
1400+
CaseExportType.CASE_MANAGEMENT })
1401+
@ExportProperty(PersonDto.CITIZENSHIP)
1402+
@ExportGroup(ExportGroupType.SENSITIVE)
1403+
@HideForCountriesExcept
1404+
public String getCitizenship() {
1405+
return citizenship;
1406+
}
1407+
13651408
public void setCountry(String country) {
13661409
this.country = country;
13671410
}

sormas-api/src/main/java/de/symeda/sormas/api/contact/ContactExportDto.java

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import de.symeda.sormas.api.caze.CaseClassification;
2727
import de.symeda.sormas.api.caze.CaseJurisdictionDto;
2828
import de.symeda.sormas.api.facility.FacilityHelper;
29+
import de.symeda.sormas.api.i18n.I18nProperties;
2930
import de.symeda.sormas.api.person.ApproximateAgeType;
3031
import de.symeda.sormas.api.person.ApproximateAgeType.ApproximateAgeHelper;
3132
import de.symeda.sormas.api.person.OccupationType;
@@ -141,6 +142,12 @@ public class ContactExportDto implements Serializable {
141142
private String latestEventTitle;
142143
private String externalID;
143144

145+
@PersonalData
146+
@SensitiveData
147+
private String birthName;
148+
private String birthCountry;
149+
private String citizenship;
150+
144151
//@formatter:off
145152
public ContactExportDto(long id, long personId, String uuid, String sourceCaseUuid, CaseClassification caseClassification, Disease disease, String diseaseDetails,
146153
ContactClassification contactClassification, Date lastContactDate, String firstName, String lastName, Sex sex,
@@ -156,7 +163,8 @@ public ContactExportDto(long id, long personId, String uuid, String sourceCaseUu
156163
String facility, String facilityUuid, String facilityDetails,
157164
String phone, String phoneOwner, String emailAddress, OccupationType occupationType, String occupationDetails,
158165
String region, String district, String community,
159-
long epiDataId, YesNoUnknown contactWithSourceCaseKnown, YesNoUnknown returningTraveler, String externalID,
166+
long epiDataId, YesNoUnknown contactWithSourceCaseKnown, YesNoUnknown returningTraveler, String externalID,
167+
String birthName, String birthCountryIsoCode, String birthCountryName, String citizenshipIsoCode, String citizenshipCountryName,
160168
String reportingUserUuid, String regionUuid, String districtUuid, String communityUuid,
161169
String caseReportingUserUuid, String caseRegionUuid, String caseDistrictUuid, String caseCommunityUuid, String caseHealthFacilityUuid, String casePointOfEntryUuid
162170
) {
@@ -219,6 +227,9 @@ public ContactExportDto(long id, long personId, String uuid, String sourceCaseUu
219227
this.contactWithSourceCaseKnown = contactWithSourceCaseKnown;
220228
this.returningTraveler = returningTraveler;
221229
this.externalID = externalID;
230+
this.birthName = birthName;
231+
this.birthCountry = I18nProperties.getCountryName(birthCountryIsoCode, birthCountryName);
232+
this.citizenship = I18nProperties.getCountryName(citizenshipIsoCode, citizenshipCountryName);
222233

223234
CaseJurisdictionDto caseJurisdiction = caseReportingUserUuid != null
224235
? null
@@ -613,6 +624,24 @@ public long getEventCount() {
613624
return this.eventCount;
614625
}
615626

627+
@Order(80)
628+
@HideForCountriesExcept
629+
public String getBirthName() {
630+
return birthName;
631+
}
632+
633+
@Order(81)
634+
@HideForCountriesExcept
635+
public String getBirthCountry() {
636+
return birthCountry;
637+
}
638+
639+
@Order(82)
640+
@HideForCountriesExcept
641+
public String getCitizenship() {
642+
return citizenship;
643+
}
644+
616645
public void setEventCount(Long eventCount) {
617646
this.eventCount = eventCount;
618647
}

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

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,14 @@
2929
import de.symeda.sormas.api.caze.BirthDateDto;
3030
import de.symeda.sormas.api.caze.BurialInfoDto;
3131
import de.symeda.sormas.api.caze.EmbeddedSampleExportDto;
32+
import de.symeda.sormas.api.i18n.I18nProperties;
3233
import de.symeda.sormas.api.importexport.ExportProperty;
3334
import de.symeda.sormas.api.person.ApproximateAgeType;
3435
import de.symeda.sormas.api.person.BurialConductor;
36+
import de.symeda.sormas.api.person.PersonDto;
3537
import de.symeda.sormas.api.person.PresentCondition;
3638
import de.symeda.sormas.api.person.Sex;
39+
import de.symeda.sormas.api.utils.HideForCountriesExcept;
3740
import de.symeda.sormas.api.utils.Order;
3841
import de.symeda.sormas.api.utils.PersonalData;
3942
import de.symeda.sormas.api.utils.SensitiveData;
@@ -135,6 +138,11 @@ public class EventParticipantExportDto implements Serializable {
135138
private String phone;
136139
@SensitiveData
137140
private String emailAddress;
141+
@PersonalData
142+
@SensitiveData
143+
private String birthName;
144+
private String birthCountry;
145+
private String citizenship;
138146

139147
private String caseUuid;
140148

@@ -152,7 +160,8 @@ public EventParticipantExportDto(long id, long personId, String personUuid, Stri
152160
String firstName, String lastName, Sex sex, String involvmentDescription, Integer approximateAge, ApproximateAgeType approximateAgeType,
153161
Integer birthdateDD, Integer birthdateMM, Integer birthdateYYYY, PresentCondition presentCondition, Date deathDate, Date burialDate,
154162
BurialConductor burialConductor, String burialPlaceDescription, String addressRegion, String addressDistrict, String addressCommunity, String city, String street, String houseNumber,
155-
String additionalInformation, String postalCode, String phone, String emailAddress, String caseUuid) {
163+
String additionalInformation, String postalCode, String phone, String emailAddress, String caseUuid,
164+
String birthName, String birthCountryIsoCode, String birthCountryName, String citizenshipIsoCode, String citizenshipCountryName) {
156165
//@formatter:on
157166

158167
this.id = id;
@@ -199,6 +208,9 @@ public EventParticipantExportDto(long id, long personId, String personUuid, Stri
199208
this.phone = phone;
200209
this.emailAddress = emailAddress;
201210
this.caseUuid = caseUuid;
211+
this.birthName = birthName;
212+
this.birthCountry = I18nProperties.getCountryName(birthCountryIsoCode, birthCountryName);
213+
this.citizenship = I18nProperties.getCountryName(citizenshipIsoCode, citizenshipCountryName);
202214

203215
jurisdiction = new EventParticipantJurisdictionDto(reportingUserUuid);
204216
}
@@ -335,6 +347,27 @@ public String getEmailAddress() {
335347
}
336348

337349
@Order(42)
350+
@ExportProperty(PersonDto.BIRTH_NAME)
351+
@HideForCountriesExcept
352+
public String getBirthName() {
353+
return birthName;
354+
}
355+
356+
@Order(43)
357+
@ExportProperty(PersonDto.BIRTH_COUNTRY)
358+
@HideForCountriesExcept
359+
public String getBirthCountry() {
360+
return birthCountry;
361+
}
362+
363+
@Order(44)
364+
@ExportProperty(PersonDto.CITIZENSHIP)
365+
@HideForCountriesExcept
366+
public String getCitizenship() {
367+
return citizenship;
368+
}
369+
370+
@Order(45)
338371
@ExportProperty(EventParticipantExportDto.SAMPLE_INFORMATION)
339372
public String getOtherSamplesString() {
340373
StringBuilder samples = new StringBuilder();
@@ -347,7 +380,7 @@ public String getOtherSamplesString() {
347380
return samples.length() > 0 ? samples.substring(0, samples.length() - separator.length()) : "";
348381
}
349382

350-
@Order(43)
383+
@Order(46)
351384
@ExportProperty(EventParticipantExportDto.EVENT_PARTICIPANT_INVOLVMENT_DESCRIPTION)
352385
public String getInvolvmentDescription() {
353386
return involvmentDescription;

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1115,10 +1115,12 @@ public interface Captions {
11151115
String Person_approximateAgeReferenceDate = "Person.approximateAgeReferenceDate";
11161116
String Person_approximateAgeType = "Person.approximateAgeType";
11171117
String Person_armedForcesRelationType = "Person.armedForcesRelationType";
1118+
String Person_birthCountry = "Person.birthCountry";
11181119
String Person_birthdate = "Person.birthdate";
11191120
String Person_birthdateDD = "Person.birthdateDD";
11201121
String Person_birthdateMM = "Person.birthdateMM";
11211122
String Person_birthdateYYYY = "Person.birthdateYYYY";
1123+
String Person_birthName = "Person.birthName";
11221124
String Person_birthWeight = "Person.birthWeight";
11231125
String Person_burialConductor = "Person.burialConductor";
11241126
String Person_burialDate = "Person.burialDate";
@@ -1128,6 +1130,7 @@ public interface Captions {
11281130
String Person_causeOfDeathDetails = "Person.causeOfDeathDetails";
11291131
String Person_causeOfDeathDisease = "Person.causeOfDeathDisease";
11301132
String Person_causeOfDeathDiseaseDetails = "Person.causeOfDeathDiseaseDetails";
1133+
String Person_citizenship = "Person.citizenship";
11311134
String Person_covidCodeDelivered = "Person.covidCodeDelivered";
11321135
String Person_deathDate = "Person.deathDate";
11331136
String Person_deathPlaceDescription = "Person.deathPlaceDescription";

sormas-api/src/main/java/de/symeda/sormas/api/person/PersonDto.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,7 @@ public class PersonDto extends PseudonymizableDto {
127127
private String lastName;
128128
@PersonalData
129129
@SensitiveData
130+
@HideForCountriesExcept
130131
private String birthName;
131132
@PersonalData
132133
@SensitiveData

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1288,6 +1288,9 @@ Person.hasCovidApp=Has COVID app
12881288
Person.covidCodeDelivered=COVID code was generated and delivered
12891289
Person.externalId=External ID
12901290
Person.symptomJournalStatus=Symptom journal status
1291+
Person.birthName=Birth name
1292+
Person.birthCountry=Country of birth
1293+
Person.citizenship=Citizenship
12911294

12921295
pointOfEntryActivePointsOfEntry=Active points of entry
12931296
pointOfEntryArchivedPointsOfEntry=Archived points of entry

sormas-api/src/main/resources/captions_de-DE.properties

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1280,6 +1280,9 @@ Person.hasCovidApp=Hat COVID App
12801280
Person.covidCodeDelivered=COVID Code wurde generiert und ausgeliefert
12811281
Person.externalId=Externe ID
12821282
Person.symptomJournalStatus=Symptomtagebuch-Status
1283+
Person.birthName=Geburtsname
1284+
Person.birthCountry=Geburtsland
1285+
Person.citizenship=Staatsangehörigkeit
12831286

12841287
pointOfEntryActivePointsOfEntry=Aktive Einreiseorte
12851288
pointOfEntryArchivedPointsOfEntry=Archivierte Einreiseorte

sormas-app/app/src/main/java/de/symeda/sormas/app/event/eventparticipant/read/EventParticipantReadFragment.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@ public void onLayoutBinding(FragmentEventParticipantReadLayoutBinding contentBin
8989
setUpControlListeners(contentBinding);
9090

9191
contentBinding.setData(record);
92+
PersonReadFragment.initCountryTranslations(contentBinding.eventParticipantPersonLayout, record.getPerson());
9293
}
9394

9495
@Override

sormas-app/app/src/main/java/de/symeda/sormas/app/person/edit/PersonEditFragment.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,13 +58,15 @@
5858
import de.symeda.sormas.app.backend.contact.Contact;
5959
import de.symeda.sormas.app.backend.location.Location;
6060
import de.symeda.sormas.app.backend.person.Person;
61+
import de.symeda.sormas.app.backend.region.Country;
6162
import de.symeda.sormas.app.component.Item;
6263
import de.symeda.sormas.app.component.controls.ControlPropertyField;
6364
import de.symeda.sormas.app.component.controls.ValueChangeListener;
6465
import de.symeda.sormas.app.component.dialog.LocationDialog;
6566
import de.symeda.sormas.app.core.FieldHelper;
6667
import de.symeda.sormas.app.core.IEntryItemOnClickListener;
6768
import de.symeda.sormas.app.databinding.FragmentPersonEditLayoutBinding;
69+
import de.symeda.sormas.app.util.CountryHelper;
6870
import de.symeda.sormas.app.util.DataUtils;
6971
import de.symeda.sormas.app.util.DiseaseConfigurationCache;
7072
import de.symeda.sormas.app.util.InfrastructureHelper;
@@ -130,6 +132,7 @@ public static void setUpLayoutBinding(
130132

131133
List<Item> occupationFacilityTypeList = DataUtils.toItems(FacilityType.getTypes(FacilityTypeGroup.MEDICAL_FACILITY), true);
132134
List<Item> placeOfBirthFacilityTypeList = DataUtils.toItems(FacilityType.getPlaceOfBirthTypes(), true);
135+
List<Item> countryList = CountryHelper.loadCountries();
133136

134137
InfrastructureHelper.initializeHealthFacilityDetailsFieldVisibility(
135138
contentBinding.personPlaceOfBirthFacility,
@@ -211,6 +214,9 @@ public static void setUpLayoutBinding(
211214
}
212215
}
213216

217+
contentBinding.personBirthCountry.initializeSpinner(countryList);
218+
contentBinding.personCitizenship.initializeSpinner(countryList);
219+
214220
// Initialize ControlDateFields
215221
contentBinding.personDeathDate.initializeDateField(fragment.getFragmentManager());
216222
contentBinding.personBurialDate.initializeDateField(fragment.getFragmentManager());

sormas-app/app/src/main/java/de/symeda/sormas/app/person/read/PersonReadFragment.java

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121

2222
import androidx.databinding.ObservableArrayList;
2323

24+
import de.symeda.sormas.api.i18n.I18nProperties;
2425
import de.symeda.sormas.api.location.LocationDto;
2526
import de.symeda.sormas.api.person.PersonDto;
2627
import de.symeda.sormas.api.utils.fieldaccess.UiFieldAccessCheckers;
@@ -31,11 +32,10 @@
3132
import de.symeda.sormas.app.backend.common.AbstractDomainObject;
3233
import de.symeda.sormas.app.backend.common.DatabaseHelper;
3334
import de.symeda.sormas.app.backend.contact.Contact;
34-
import de.symeda.sormas.app.backend.contact.ContactEditAuthorization;
3535
import de.symeda.sormas.app.backend.location.Location;
3636
import de.symeda.sormas.app.backend.person.Person;
37+
import de.symeda.sormas.app.backend.region.Country;
3738
import de.symeda.sormas.app.component.dialog.InfoDialog;
38-
import de.symeda.sormas.app.core.FieldHelper;
3939
import de.symeda.sormas.app.core.IEntryItemOnClickListener;
4040
import de.symeda.sormas.app.databinding.FragmentPersonReadLayoutBinding;
4141
import de.symeda.sormas.app.person.edit.PersonEditFragment;
@@ -128,6 +128,7 @@ public void onLayoutBinding(FragmentPersonReadLayoutBinding contentBinding) {
128128
addresses.addAll(record.getAddresses());
129129

130130
contentBinding.setData(record);
131+
initCountryTranslations(contentBinding, record);
131132

132133
contentBinding.setAddressList(addresses);
133134
contentBinding.setAddressItemClickCallback(onAddressItemClickListener);
@@ -136,6 +137,16 @@ public void onLayoutBinding(FragmentPersonReadLayoutBinding contentBinding) {
136137
});
137138
}
138139

140+
public static void initCountryTranslations(FragmentPersonReadLayoutBinding contentBinding, Person personData){
141+
Country birthCountry = personData.getBirthCountry();
142+
contentBinding
143+
.setBirthCountry(birthCountry != null ? I18nProperties.getCountryName(birthCountry.getIsoCode(), birthCountry.getName()) : null);
144+
145+
Country citizenship = personData.getCitizenship();
146+
contentBinding.setCitizenship(citizenship != null ? I18nProperties.getCountryName(citizenship.getIsoCode(), citizenship.getName()) : null);
147+
148+
}
149+
139150
@Override
140151
public void onAfterLayoutBinding(FragmentPersonReadLayoutBinding contentBinding) {
141152
PersonReadFragment.setUpFieldVisibilities(this, contentBinding, rootData);

0 commit comments

Comments
 (0)