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

Commit 29ff8d2

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

10 files changed

Lines changed: 170 additions & 19 deletions

File tree

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

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import de.symeda.sormas.api.facility.FacilityType;
2929
import de.symeda.sormas.api.location.LocationDto;
3030
import de.symeda.sormas.api.region.CommunityReferenceDto;
31+
import de.symeda.sormas.api.region.CountryReferenceDto;
3132
import de.symeda.sormas.api.region.DistrictReferenceDto;
3233
import de.symeda.sormas.api.region.RegionReferenceDto;
3334
import de.symeda.sormas.api.utils.DataHelper;
@@ -72,6 +73,7 @@ public class PersonDto extends PseudonymizableDto {
7273
public static final String BURIAL_PLACE_DESCRIPTION = "burialPlaceDescription";
7374
public static final String BURIAL_CONDUCTOR = "burialConductor";
7475

76+
public static final String BIRTH_NAME = "birthName";
7577
public static final String NICKNAME = "nickname";
7678
public static final String MOTHERS_MAIDEN_NAME = "mothersMaidenName";
7779

@@ -108,6 +110,9 @@ public class PersonDto extends PseudonymizableDto {
108110
public static final String COVID_CODE_DELIVERED = "covidCodeDelivered";
109111
public static final String EXTERNAL_ID = "externalId";
110112

113+
public static final String BIRTH_COUNTRY = "birthCountry";
114+
public static final String CITIZENSHIP = "citizenship";
115+
111116
// Fields are declared in the order they should appear in the import template
112117

113118
@Outbreaks
@@ -122,6 +127,9 @@ public class PersonDto extends PseudonymizableDto {
122127
private String lastName;
123128
@PersonalData
124129
@SensitiveData
130+
private String birthName;
131+
@PersonalData
132+
@SensitiveData
125133
private String nickname;
126134
@PersonalData
127135
@SensitiveData
@@ -279,6 +287,11 @@ public class PersonDto extends PseudonymizableDto {
279287
@HideForCountriesExcept(countries = CountryHelper.COUNTRY_CODE_GERMANY)
280288
private String externalId;
281289

290+
@HideForCountriesExcept
291+
private CountryReferenceDto birthCountry;
292+
@HideForCountriesExcept
293+
private CountryReferenceDto citizenship;
294+
282295
public Integer getBirthdateDD() {
283296
return birthdateDD;
284297
}
@@ -439,6 +452,14 @@ public void setAddress(LocationDto address) {
439452
this.address = address;
440453
}
441454

455+
public String getBirthName() {
456+
return birthName;
457+
}
458+
459+
public void setBirthName(String birthName) {
460+
this.birthName = birthName;
461+
}
462+
442463
public String getNickname() {
443464
return nickname;
444465
}
@@ -664,6 +685,22 @@ public void setExternalId(String externalId) {
664685
this.externalId = externalId;
665686
}
666687

688+
public CountryReferenceDto getBirthCountry() {
689+
return birthCountry;
690+
}
691+
692+
public void setBirthCountry(CountryReferenceDto birthCountry) {
693+
this.birthCountry = birthCountry;
694+
}
695+
696+
public CountryReferenceDto getCitizenship() {
697+
return citizenship;
698+
}
699+
700+
public void setCitizenship(CountryReferenceDto citizenship) {
701+
this.citizenship = citizenship;
702+
}
703+
667704
@Override
668705
public String toString() {
669706
return buildCaption(firstName, lastName);

sormas-api/src/main/java/de/symeda/sormas/api/region/CountryFacade.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,4 +29,6 @@ public interface CountryFacade {
2929
List<CountryDto> getByUuids(List<String> uuids);
3030

3131
List<String> getAllUuids();
32+
33+
List<CountryReferenceDto> getAllActiveAsReference();
3234
}

sormas-app/app/src/main/java/de/symeda/sormas/app/backend/common/DatabaseHelper.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ public class DatabaseHelper extends OrmLiteSqliteOpenHelper {
151151
public static final String DATABASE_NAME = "sormas.db";
152152
// any time you make changes to your database objects, you may have to increase the database version
153153

154-
public static final int DATABASE_VERSION = 254;
154+
public static final int DATABASE_VERSION = 255;
155155

156156
private static DatabaseHelper instance = null;
157157

@@ -1811,6 +1811,13 @@ public void onUpgrade(SQLiteDatabase db, ConnectionSource connectionSource, int
18111811
currentVersion = 253;
18121812
getDao(Contact.class).executeRaw("ALTER TABLE events ADD column riskLevel varchar(255);");
18131813

1814+
break;
1815+
case 254:
1816+
currentVersion = 254;
1817+
getDao(Person.class).executeRaw("ALTER TABLE person ADD column birthName varchar(255);");
1818+
getDao(Person.class).executeRaw("ALTER TABLE person ADD column birthCountry_id bigint REFERENCES country (id);");
1819+
getDao(Person.class).executeRaw("ALTER TABLE person ADD column citizenship_id bigint REFERENCES country (id);");
1820+
18141821
// ATTENTION: break should only be done after last version
18151822
break;
18161823
default:

sormas-app/app/src/main/java/de/symeda/sormas/app/backend/person/Person.java

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@
4646
import de.symeda.sormas.app.backend.facility.Facility;
4747
import de.symeda.sormas.app.backend.location.Location;
4848
import de.symeda.sormas.app.backend.region.Community;
49+
import de.symeda.sormas.app.backend.region.Country;
4950
import de.symeda.sormas.app.backend.region.District;
5051
import de.symeda.sormas.app.backend.region.Region;
5152

@@ -74,6 +75,8 @@ public class Person extends PseudonymizableAdo {
7475
@Column(nullable = false)
7576
private String lastName;
7677
@Column(length = COLUMN_LENGTH_DEFAULT)
78+
private String birthName;
79+
@Column(length = COLUMN_LENGTH_DEFAULT)
7780
private String nickname;
7881
@Column(length = COLUMN_LENGTH_DEFAULT)
7982
private String mothersMaidenName;
@@ -171,6 +174,11 @@ public class Person extends PseudonymizableAdo {
171174
@Column
172175
private String externalId;
173176

177+
@DatabaseField(foreign = true, foreignAutoRefresh = true, maxForeignAutoRefreshLevel = 3)
178+
private Country birthCountry;
179+
@DatabaseField(foreign = true, foreignAutoRefresh = true, maxForeignAutoRefreshLevel = 3)
180+
private Country citizenship;
181+
174182
public Person() {
175183
}
176184

@@ -192,6 +200,14 @@ public void setLastName(String lastName) {
192200
this.lastName = lastName;
193201
}
194202

203+
public String getBirthName() {
204+
return birthName;
205+
}
206+
207+
public void setBirthName(String birthName) {
208+
this.birthName = birthName;
209+
}
210+
195211
public String getNickname() {
196212
return nickname;
197213
}
@@ -545,4 +561,20 @@ public void setAddresses(List<Location> addresses) {
545561
public String getExternalId() { return externalId; }
546562

547563
public void setExternalId(String externalId) { this.externalId = externalId; }
564+
565+
public Country getBirthCountry() {
566+
return birthCountry;
567+
}
568+
569+
public void setBirthCountry(Country birthCountry) {
570+
this.birthCountry = birthCountry;
571+
}
572+
573+
public Country getCitizenship() {
574+
return citizenship;
575+
}
576+
577+
public void setCitizenship(Country citizenship) {
578+
this.citizenship = citizenship;
579+
}
548580
}

sormas-app/app/src/main/java/de/symeda/sormas/app/backend/person/PersonDtoHelper.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import de.symeda.sormas.app.backend.location.Location;
2929
import de.symeda.sormas.app.backend.location.LocationDtoHelper;
3030
import de.symeda.sormas.app.backend.region.CommunityDtoHelper;
31+
import de.symeda.sormas.app.backend.region.CountryDtoHelper;
3132
import de.symeda.sormas.app.backend.region.DistrictDtoHelper;
3233
import de.symeda.sormas.app.backend.region.RegionDtoHelper;
3334
import de.symeda.sormas.app.rest.NoConnectionException;
@@ -68,6 +69,7 @@ public void fillInnerFromDto(Person target, PersonDto source) {
6869

6970
target.setFirstName(source.getFirstName());
7071
target.setLastName(source.getLastName());
72+
target.setBirthName(source.getBirthName());
7173
target.setNickname(source.getNickname());
7274
target.setMothersMaidenName(source.getMothersMaidenName());
7375
target.setSex(source.getSex());
@@ -130,13 +132,16 @@ public void fillInnerFromDto(Person target, PersonDto source) {
130132
target.setAddresses(addresses);
131133

132134
target.setExternalId(source.getExternalId());
135+
target.setBirthCountry(DatabaseHelper.getCountryDao().getByReferenceDto(source.getBirthCountry()));
136+
target.setCitizenship(DatabaseHelper.getCountryDao().getByReferenceDto(source.getCitizenship()));
133137
}
134138

135139
@Override
136140
public void fillInnerFromAdo(PersonDto target, Person source) {
137141

138142
target.setFirstName(source.getFirstName());
139143
target.setLastName(source.getLastName());
144+
target.setBirthName(source.getBirthName());
140145
target.setNickname(source.getNickname());
141146
target.setMothersMaidenName(source.getMothersMaidenName());
142147
target.setSex(source.getSex());
@@ -221,6 +226,8 @@ public void fillInnerFromAdo(PersonDto target, Person source) {
221226
target.setAddresses(locationDtos);
222227

223228
target.setExternalId(source.getExternalId());
229+
target.setBirthCountry(CountryDtoHelper.toReferenceDto(source.getBirthCountry()));
230+
target.setCitizenship(CountryDtoHelper.toReferenceDto(source.getCitizenship()));
224231
}
225232

226233
public static PersonReferenceDto toReferenceDto(Person ado) {

sormas-backend/src/main/java/de/symeda/sormas/backend/person/Person.java

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@
5858
import de.symeda.sormas.backend.facility.Facility;
5959
import de.symeda.sormas.backend.location.Location;
6060
import de.symeda.sormas.backend.region.Community;
61+
import de.symeda.sormas.backend.region.Country;
6162
import de.symeda.sormas.backend.region.District;
6263
import de.symeda.sormas.backend.region.Region;
6364

@@ -73,6 +74,7 @@ public class Person extends AbstractDomainObject {
7374
public static final String FIRST_NAME = "firstName";
7475
public static final String LAST_NAME = "lastName";
7576
public static final String NICKNAME = "nickname";
77+
public static final String BIRTH_NAME = "birthName";
7678
public static final String MOTHERS_MAIDEN_NAME = "mothersMaidenName";
7779
public static final String APPROXIMATE_AGE = "approximateAge";
7880
public static final String APPROXIMATE_AGE_TYPE = "approximateAgeType";
@@ -116,12 +118,15 @@ public class Person extends AbstractDomainObject {
116118

117119
public static final String SYMPTOM_JOURNAL_STATUS = "symptomJournalStatus";
118120
public static final String EXTERNAL_ID = "externalId";
121+
public static final String BIRTH_COUNTRY = "birthCountry";
122+
public static final String CITIZENSHIP = "citizenship";
119123
public static final String PERSON_CASES = "personCases";
120124
public static final String PERSON_CONTACTS = "personContacts";
121125
public static final String PERSON_EVENT_PARTICIPANTS = "personEventParticipants";
122126

123127
private String firstName;
124128
private String lastName;
129+
private String birthName;
125130
private String nickname;
126131
private String mothersName;
127132
private String mothersMaidenName;
@@ -179,6 +184,9 @@ public class Person extends AbstractDomainObject {
179184
private boolean covidCodeDelivered;
180185
private String externalId;
181186

187+
private Country birthCountry;
188+
private Country citizenship;
189+
182190
private Set<EventParticipant> eventParticipants = new HashSet<>();
183191
private Set<Contact> contacts = new HashSet<>();
184192

@@ -204,6 +212,15 @@ public void setLastName(String lastName) {
204212
this.lastName = lastName;
205213
}
206214

215+
@Column(nullable = false, length = COLUMN_LENGTH_DEFAULT)
216+
public String getBirthName() {
217+
return birthName;
218+
}
219+
220+
public void setBirthName(String birthName) {
221+
this.birthName = birthName;
222+
}
223+
207224
@Column(length = COLUMN_LENGTH_DEFAULT)
208225
public String getNickname() {
209226
return nickname;
@@ -625,6 +642,24 @@ public void setExternalId(String externalId) {
625642
this.externalId = externalId;
626643
}
627644

645+
@ManyToOne
646+
public Country getBirthCountry() {
647+
return birthCountry;
648+
}
649+
650+
public void setBirthCountry(Country placeOfBirthCountry) {
651+
this.birthCountry = placeOfBirthCountry;
652+
}
653+
654+
@ManyToOne
655+
public Country getCitizenship() {
656+
return citizenship;
657+
}
658+
659+
public void setCitizenship(Country nationality) {
660+
this.citizenship = nationality;
661+
}
662+
628663
public void setEventParticipants(Set<EventParticipant> eventParticipants) {
629664
this.eventParticipants = eventParticipants;
630665
}

sormas-backend/src/main/java/de/symeda/sormas/backend/person/PersonFacadeEjb.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,8 @@
9494
import de.symeda.sormas.backend.location.LocationService;
9595
import de.symeda.sormas.backend.region.CommunityFacadeEjb;
9696
import de.symeda.sormas.backend.region.CommunityService;
97+
import de.symeda.sormas.backend.region.CountryFacadeEjb;
98+
import de.symeda.sormas.backend.region.CountryService;
9799
import de.symeda.sormas.backend.region.District;
98100
import de.symeda.sormas.backend.region.DistrictFacadeEjb;
99101
import de.symeda.sormas.backend.region.DistrictService;
@@ -138,6 +140,8 @@ public class PersonFacadeEjb implements PersonFacade {
138140
private UserService userService;
139141
@EJB
140142
private ExternalJournalService externalJournalService;
143+
@EJB
144+
private CountryService countryService;
141145

142146
@Override
143147
public List<String> getAllUuids() {
@@ -629,6 +633,7 @@ public Person fillOrBuildEntity(@NotNull PersonDto source, Person target) {
629633
target.setBurialPlaceDescription(source.getBurialPlaceDescription());
630634
target.setBurialConductor(source.getBurialConductor());
631635

636+
target.setBirthName(source.getBirthName());
632637
target.setNickname(source.getNickname());
633638
target.setMothersMaidenName(source.getMothersMaidenName());
634639

@@ -674,6 +679,9 @@ public Person fillOrBuildEntity(@NotNull PersonDto source, Person target) {
674679
target.setCovidCodeDelivered(source.isCovidCodeDelivered());
675680
target.setExternalId(source.getExternalId());
676681

682+
target.setBirthCountry(countryService.getByReferenceDto(source.getBirthCountry()));
683+
target.setCitizenship(countryService.getByReferenceDto(source.getCitizenship()));
684+
677685
return target;
678686
}
679687

@@ -792,6 +800,7 @@ public static PersonDto toDto(Person source) {
792800
target.setBurialPlaceDescription(source.getBurialPlaceDescription());
793801
target.setBurialConductor(source.getBurialConductor());
794802

803+
target.setBirthName(source.getBirthName());
795804
target.setNickname(source.getNickname());
796805
target.setMothersMaidenName(source.getMothersMaidenName());
797806

@@ -833,6 +842,9 @@ public static PersonDto toDto(Person source) {
833842
target.setCovidCodeDelivered(source.isCovidCodeDelivered());
834843
target.setExternalId(source.getExternalId());
835844

845+
target.setBirthCountry(CountryFacadeEjb.toReferenceDto(source.getBirthCountry()));
846+
target.setCitizenship(CountryFacadeEjb.toReferenceDto(source.getCitizenship()));
847+
836848
return target;
837849
}
838850

sormas-backend/src/main/java/de/symeda/sormas/backend/region/CountryFacadeEjb.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -260,6 +260,11 @@ public List<String> getAllUuids() {
260260
return countryService.getAllUuids();
261261
}
262262

263+
@Override
264+
public List<CountryReferenceDto> getAllActiveAsReference() {
265+
return countryService.getAllActive(Country.DEFAULT_NAME, true).stream().map(CountryFacadeEjb::toReferenceDto).collect(Collectors.toList());
266+
}
267+
263268
// Need to be in the same order as in the constructor
264269
private void selectDtoFields(CriteriaQuery<CountryDto> cq, Root<Country> root) {
265270

sormas-backend/src/main/resources/sql/sormas_schema.sql

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6026,4 +6026,21 @@ ALTER TABLE events_history ADD column risklevel varchar(255);
60266026

60276027
INSERT INTO schema_version (version_number, comment) VALUES (289, 'Add riskLevel to events with cluster status #3271');
60286028

6029+
-- 2020-12-09 SurvNet Adaptations - Create new fields “Country of birth” and “nationality” for persons #3412
6030+
ALTER TABLE person
6031+
ADD COLUMN birthname varchar(512),
6032+
ADD COLUMN birthcountry_id bigint,
6033+
ADD COLUMN citizenship_id bigint,
6034+
ADD CONSTRAINT fk_person_placeofbirthcountry_id FOREIGN KEY (birthcountry_id) REFERENCES country (id),
6035+
ADD CONSTRAINT fk_person_nationality_id FOREIGN KEY (citizenship_id) REFERENCES country (id);
6036+
6037+
ALTER TABLE person_history
6038+
ADD COLUMN birthname varchar(512),
6039+
ADD COLUMN birthcountry_id bigint,
6040+
ADD COLUMN citizenship_id bigint,
6041+
ADD CONSTRAINT fk_person_birthcountry_id FOREIGN KEY (birthcountry_id) REFERENCES country (id),
6042+
ADD CONSTRAINT fk_person_citizenship_id FOREIGN KEY (citizenship_id) REFERENCES country (id);
6043+
6044+
INSERT INTO schema_version (version_number, comment) VALUES (290, 'SurvNet Adaptations - Create new fields “Country of birth” and “nationality” for persons #3412');
6045+
60296046
-- *** Insert new sql commands BEFORE this line ***

0 commit comments

Comments
 (0)