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

Commit 42b11b9

Browse files
Issue SORMAS-Foundation#3426 Adds person fields in EventParticipantImporter
1 parent 20c7ace commit 42b11b9

3 files changed

Lines changed: 102 additions & 2 deletions

File tree

sormas-backend/src/main/java/de/symeda/sormas/backend/importexport/ImportFacadeEjb.java

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -166,10 +166,37 @@ public void generateEventParticipantImportTemplateFile() throws IOException {
166166
char separator = configFacade.getCsvSeparator();
167167

168168
List<ImportColumn> importColumns = new ArrayList<>();
169-
importColumns.add(ImportColumn.from(PersonDto.class, PERSON + "." + PersonDto.FIRST_NAME, String.class, separator));
170-
importColumns.add(ImportColumn.from(PersonDto.class, PERSON + "." + PersonDto.LAST_NAME, String.class, separator));
171169
importColumns.add(ImportColumn.from(EventParticipantDto.class, EventParticipantDto.INVOLVEMENT_DESCRIPTION, String.class, separator));
172170

171+
appendListOfFields(importColumns, PersonDto.class, "person.", separator);
172+
173+
List<String> columnsToRemove = Arrays.asList(
174+
PersonDto.PLACE_OF_BIRTH_COMMUNITY,
175+
PersonDto.PLACE_OF_BIRTH_DISTRICT,
176+
PersonDto.PLACE_OF_BIRTH_FACILITY,
177+
PersonDto.PLACE_OF_BIRTH_FACILITY_DETAILS,
178+
PersonDto.PLACE_OF_BIRTH_FACILITY_TYPE,
179+
PersonDto.PLACE_OF_BIRTH_REGION,
180+
PersonDto.GESTATION_AGE_AT_BIRTH,
181+
PersonDto.BIRTH_DATE,
182+
PersonDto.BIRTH_DATE_MM,
183+
PersonDto.BIRTH_DATE_DD,
184+
PersonDto.BIRTH_DATE_YYYY,
185+
PersonDto.BIRTH_WEIGHT,
186+
PersonDto.PRESENT_CONDITION,
187+
PersonDto.DEATH_DATE,
188+
PersonDto.DEATH_PLACE_DESCRIPTION,
189+
PersonDto.DEATH_PLACE_TYPE,
190+
PersonDto.CAUSE_OF_DEATH,
191+
PersonDto.CAUSE_OF_DEATH_DETAILS,
192+
PersonDto.CAUSE_OF_DEATH_DISEASE,
193+
PersonDto.CAUSE_OF_DEATH_DISEASE_DETAILS,
194+
PersonDto.BURIAL_CONDUCTOR,
195+
PersonDto.BURIAL_DATE,
196+
PersonDto.BURIAL_PLACE_DESCRIPTION,
197+
PersonDto.ADDRESSES);
198+
importColumns = importColumns.stream().filter(column -> !columnsToRemove.contains(column.getColumnName())).collect(Collectors.toList());
199+
173200
writeTemplate(Paths.get(getEventParticipantImportTemplateFilePath()), importColumns, true);
174201
}
175202

sormas-ui/src/main/java/de/symeda/sormas/ui/events/eventparticipantimporter/EventParticipantImporter.java

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import java.io.File;
2323
import java.io.IOException;
2424
import java.lang.reflect.InvocationTargetException;
25+
import java.util.List;
2526
import java.util.function.Consumer;
2627

2728
import org.apache.commons.lang3.StringUtils;
@@ -38,6 +39,7 @@
3839
import de.symeda.sormas.api.event.EventParticipantDto;
3940
import de.symeda.sormas.api.event.EventParticipantFacade;
4041
import de.symeda.sormas.api.event.EventReferenceDto;
42+
import de.symeda.sormas.api.facility.FacilityReferenceDto;
4143
import de.symeda.sormas.api.i18n.I18nProperties;
4244
import de.symeda.sormas.api.i18n.Strings;
4345
import de.symeda.sormas.api.i18n.Validations;
@@ -46,13 +48,17 @@
4648
import de.symeda.sormas.api.person.PersonFacade;
4749
import de.symeda.sormas.api.person.PersonReferenceDto;
4850
import de.symeda.sormas.api.person.SimilarPersonDto;
51+
import de.symeda.sormas.api.region.CommunityReferenceDto;
52+
import de.symeda.sormas.api.region.DistrictReferenceDto;
4953
import de.symeda.sormas.api.user.UserReferenceDto;
54+
import de.symeda.sormas.api.utils.DataHelper;
5055
import de.symeda.sormas.api.utils.ValidationRuntimeException;
5156
import de.symeda.sormas.ui.importer.DataImporter;
5257
import de.symeda.sormas.ui.importer.EventParticipantImportSimilarityResult;
5358
import de.symeda.sormas.ui.importer.ImportErrorException;
5459
import de.symeda.sormas.ui.importer.ImportLineResult;
5560
import de.symeda.sormas.ui.importer.ImportSimilarityResultOption;
61+
import de.symeda.sormas.ui.importer.ImporterPersonHelper;
5662
import de.symeda.sormas.ui.person.PersonSelectionField;
5763
import de.symeda.sormas.ui.utils.CommitDiscardWrapperComponent;
5864
import de.symeda.sormas.ui.utils.VaadinUiUtil;
@@ -286,6 +292,69 @@ private void insertColumnEntryIntoData(EventParticipantDto eventParticipant, Per
286292
// according to the types of the eventparticipant or person fields
287293
if (executeDefaultInvokings(pd, currentElement, entry, entryHeaderPath)) {
288294
continue;
295+
} else if (propertyType.isAssignableFrom(DistrictReferenceDto.class)) {
296+
List<DistrictReferenceDto> district = FacadeProvider.getDistrictFacade()
297+
.getByName(entry, ImporterPersonHelper.getRegionBasedOnDistrict(pd.getName(), null, null, person, currentElement), false);
298+
if (district.isEmpty()) {
299+
throw new ImportErrorException(
300+
I18nProperties
301+
.getValidationError(Validations.importEntryDoesNotExistDbOrRegion, entry, buildEntityProperty(entryHeaderPath)));
302+
} else if (district.size() > 1) {
303+
throw new ImportErrorException(
304+
I18nProperties.getValidationError(Validations.importDistrictNotUnique, entry, buildEntityProperty(entryHeaderPath)));
305+
} else {
306+
pd.getWriteMethod().invoke(currentElement, district.get(0));
307+
}
308+
} else if (propertyType.isAssignableFrom(CommunityReferenceDto.class)) {
309+
List<CommunityReferenceDto> community =
310+
FacadeProvider.getCommunityFacade().getByName(entry, ImporterPersonHelper.getPersonDistrict(pd.getName(), person), false);
311+
if (community.isEmpty()) {
312+
throw new ImportErrorException(
313+
I18nProperties.getValidationError(
314+
Validations.importEntryDoesNotExistDbOrDistrict,
315+
entry,
316+
buildEntityProperty(entryHeaderPath)));
317+
} else if (community.size() > 1) {
318+
throw new ImportErrorException(
319+
I18nProperties.getValidationError(Validations.importCommunityNotUnique, entry, buildEntityProperty(entryHeaderPath)));
320+
} else {
321+
pd.getWriteMethod().invoke(currentElement, community.get(0));
322+
}
323+
} else if (propertyType.isAssignableFrom(FacilityReferenceDto.class)) {
324+
DataHelper.Pair<DistrictReferenceDto, CommunityReferenceDto> infrastructureData =
325+
ImporterPersonHelper.getPersonDistrictAndCommunity(pd.getName(), person);
326+
List<FacilityReferenceDto> facility = FacadeProvider.getFacilityFacade()
327+
.getByNameAndType(
328+
entry,
329+
infrastructureData.getElement0(),
330+
infrastructureData.getElement1(),
331+
getTypeOfFacility(pd.getName(), currentElement),
332+
false);
333+
if (facility.isEmpty()) {
334+
if (infrastructureData.getElement1() != null) {
335+
throw new ImportErrorException(
336+
I18nProperties.getValidationError(
337+
Validations.importEntryDoesNotExistDbOrCommunity,
338+
entry,
339+
buildEntityProperty(entryHeaderPath)));
340+
} else {
341+
throw new ImportErrorException(
342+
I18nProperties.getValidationError(
343+
Validations.importEntryDoesNotExistDbOrDistrict,
344+
entry,
345+
buildEntityProperty(entryHeaderPath)));
346+
}
347+
} else if (facility.size() > 1 && infrastructureData.getElement1() == null) {
348+
throw new ImportErrorException(
349+
I18nProperties
350+
.getValidationError(Validations.importFacilityNotUniqueInDistrict, entry, buildEntityProperty(entryHeaderPath)));
351+
} else if (facility.size() > 1 && infrastructureData.getElement1() != null) {
352+
throw new ImportErrorException(
353+
I18nProperties
354+
.getValidationError(Validations.importFacilityNotUniqueInCommunity, entry, buildEntityProperty(entryHeaderPath)));
355+
} else {
356+
pd.getWriteMethod().invoke(currentElement, facility.get(0));
357+
}
289358
} else {
290359
throw new UnsupportedOperationException(
291360
I18nProperties.getValidationError(Validations.importPropertyTypeNotAllowed, propertyType.getName()));

sormas-ui/src/main/java/de/symeda/sormas/ui/importer/ImporterPersonHelper.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,10 @@ public static Pair<DistrictReferenceDto, CommunityReferenceDto> getPersonDistric
8383
district = person.getPlaceOfBirthDistrict();
8484
community = person.getPlaceOfBirthCommunity();
8585
break;
86+
case LocationDto.FACILITY:
87+
district = person.getAddress().getDistrict();
88+
community = person.getAddress().getCommunity();
89+
break;
8690
default:
8791
throw new IllegalArgumentException(propertyName);
8892
}

0 commit comments

Comments
 (0)