Skip to content

Commit 89685ea

Browse files
author
SergiuPacurariu
committed
#13181 - Enhance National Health ID Search Functionality Across Modules and Address Duplication Issues
1 parent cb8c136 commit 89685ea

File tree

12 files changed

+220
-122
lines changed

12 files changed

+220
-122
lines changed

sormas-ui/src/main/java/de/symeda/sormas/ui/MainScreen.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -315,7 +315,7 @@ && permitted(FeatureType.ADVERSE_EVENTS_FOLLOWING_IMMUNIZATION_MANAGEMENT, UserR
315315
}
316316

317317
if (permitted(FeatureType.TRAVEL_ENTRIES, UserRight.TRAVEL_ENTRY_MANAGEMENT_ACCESS)
318-
&& FacadeProvider.getConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_LUXEMBOURG)) {
318+
&& FacadeProvider.getConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_GERMANY)) {
319319
ControllerProvider.getTravelEntryController().registerViews(navigator);
320320
menu.addView(
321321
TravelEntriesView.class,

sormas-ui/src/main/java/de/symeda/sormas/ui/caze/CaseController.java

Lines changed: 8 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@
2626
import java.util.stream.Collectors;
2727

2828
import org.apache.commons.collections4.CollectionUtils;
29-
import org.apache.commons.lang3.StringUtils;
3029

3130
import com.vaadin.navigator.Navigator;
3231
import com.vaadin.server.ExternalResource;
@@ -131,7 +130,6 @@
131130
import de.symeda.sormas.ui.externalsurveillanceservice.ExternalSurveillanceServiceGateway;
132131
import de.symeda.sormas.ui.hospitalization.HospitalizationForm;
133132
import de.symeda.sormas.ui.hospitalization.HospitalizationView;
134-
import de.symeda.sormas.ui.person.PersonFormHelper;
135133
import de.symeda.sormas.ui.person.PersonSelectionGrid;
136134
import de.symeda.sormas.ui.symptoms.SymptomsForm;
137135
import de.symeda.sormas.ui.therapy.TherapyView;
@@ -155,6 +153,7 @@
155153
public class CaseController {
156154

157155
CommitDiscardWrapperComponent<CaseCreateForm> caseCreateComponent;
156+
boolean caseSaveTriggered;
158157

159158
public CaseController() {
160159

@@ -723,6 +722,7 @@ public CommitDiscardWrapperComponent<CaseCreateForm> getCaseCreateComponent(
723722
editView.addFieldGroups(createForm.getHomeAddressForm().getFieldGroup());
724723
}
725724

725+
caseSaveTriggered = false;
726726
editView.addCommitListener(() -> {
727727
if (!createForm.getFieldGroup().isModified()) {
728728
final CaseDataDto dto = createForm.getValue();
@@ -745,12 +745,6 @@ public CommitDiscardWrapperComponent<CaseCreateForm> getCaseCreateComponent(
745745
dto.getSymptoms().setOnsetDate(createForm.getOnsetDate());
746746
dto.setWasInQuarantineBeforeIsolation(YesNoUnknown.YES);
747747

748-
// if (StringUtils.isNotEmpty(person.getNationalHealthId())) {
749-
// PersonFormHelper.warningSimilarPersons(person.getNationalHealthId(), null, () -> {
750-
// transferDataToPerson(createForm, person);
751-
// FacadeProvider.getPersonFacade().save(person);
752-
// });
753-
// }
754748
transferDataToPerson(createForm, person);
755749
FacadeProvider.getPersonFacade().save(person);
756750

@@ -854,12 +848,14 @@ public CommitDiscardWrapperComponent<CaseCreateForm> getCaseCreateComponent(
854848
.getContent();
855849

856850
warningPopUpDuplicatePerson.getDiscardButton().setVisible(true);
857-
warningPopUpDuplicatePerson.getCommitButton().setCaption("Continue to save");
858-
warningPopUpDuplicatePerson.addDoneListener(()-> {
859-
VaadinUiUtil.showModalPopupWindow(caseCreateComponent, I18nProperties.getString(Strings.headingCreateNewCase));
851+
warningPopUpDuplicatePerson.getCommitButton().setCaption(I18nProperties.getCaption(Captions.actionContinue));
852+
warningPopUpDuplicatePerson.addDoneListener(() -> {
853+
if (!caseSaveTriggered) {
854+
VaadinUiUtil.showModalPopupWindow(caseCreateComponent, I18nProperties.getString(Strings.headingCreateNewCase));
855+
}
860856
});
861857
warningPopUpDuplicatePerson.addCommitListener(() -> {
862-
858+
caseSaveTriggered = true;
863859
transferDataToPerson(createForm, duplicatePerson);
864860
ControllerProvider.getPersonController()
865861
.selectOrCreatePerson(
@@ -886,27 +882,13 @@ public CommitDiscardWrapperComponent<CaseCreateForm> getCaseCreateComponent(
886882
}
887883
},
888884
true);
889-
890885
}
891-
// transferDataToPerson(createForm, duplicatePerson);
892-
// ControllerProvider.getPersonController()
893-
// .selectOrCreatePerson(
894-
// duplicatePerson,
895-
// I18nProperties.getString(Strings.infoSelectOrCreatePersonForCase),
896-
// selectedPerson -> {
897-
// if (selectedPerson != null) {
898-
// dto.setPerson(selectedPerson);
899-
// selectOrCreateCase(createForm, dto, selectedPerson);
900-
// }
901-
// },
902-
// true);
903886
}
904887
}
905888
}
906889
});
907890

908891
return editView;
909-
910892
}
911893

912894
private void selectOrCreateCase(CaseCreateForm createForm, CaseDataDto dto, PersonReferenceDto selectedPerson) {

sormas-ui/src/main/java/de/symeda/sormas/ui/caze/CaseCreateForm.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,12 +31,11 @@
3131
import java.util.Date;
3232
import java.util.List;
3333

34-
import com.vaadin.ui.Window;
35-
import de.symeda.sormas.ui.person.PersonFormHelper;
3634
import org.apache.commons.collections4.CollectionUtils;
3735

3836
import com.google.common.collect.Sets;
3937
import com.vaadin.ui.Label;
38+
import com.vaadin.ui.Window;
4039
import com.vaadin.ui.themes.ValoTheme;
4140
import com.vaadin.v7.data.util.converter.Converter;
4241
import com.vaadin.v7.ui.AbstractSelect.ItemCaptionMode;
@@ -74,6 +73,7 @@
7473
import de.symeda.sormas.ui.UiUtil;
7574
import de.symeda.sormas.ui.location.LocationEditForm;
7675
import de.symeda.sormas.ui.person.PersonCreateForm;
76+
import de.symeda.sormas.ui.person.PersonFormHelper;
7777
import de.symeda.sormas.ui.utils.AbstractEditForm;
7878
import de.symeda.sormas.ui.utils.ComboBoxHelper;
7979
import de.symeda.sormas.ui.utils.CssStyles;

sormas-ui/src/main/java/de/symeda/sormas/ui/contact/ContactController.java

Lines changed: 70 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@
9393
import de.symeda.sormas.ui.contact.components.linelisting.layout.LineListingLayout;
9494
import de.symeda.sormas.ui.epidata.ContactEpiDataView;
9595
import de.symeda.sormas.ui.epidata.EpiDataForm;
96+
import de.symeda.sormas.ui.person.PersonSelectionGrid;
9697
import de.symeda.sormas.ui.utils.AbstractView;
9798
import de.symeda.sormas.ui.utils.ArchiveHandlers;
9899
import de.symeda.sormas.ui.utils.BulkOperationHandler;
@@ -110,6 +111,8 @@
110111
public class ContactController {
111112

112113
protected final Logger logger = LoggerFactory.getLogger(getClass());
114+
boolean contactSaveTriggered;
115+
CommitDiscardWrapperComponent<ContactCreateForm> createComponent;
113116

114117
public ContactController() {
115118

@@ -270,8 +273,7 @@ public void create(CaseReferenceDto caseRef, boolean asResultingCase, Runnable a
270273
if (caseRef != null) {
271274
caze = FacadeProvider.getCaseFacade().getCaseDataByUuid(caseRef.getUuid());
272275
}
273-
CommitDiscardWrapperComponent<ContactCreateForm> createComponent =
274-
getContactCreateComponent(caze, asResultingCase, alternativeCallback, false);
276+
createComponent = getContactCreateComponent(caze, asResultingCase, alternativeCallback, false);
275277
VaadinUiUtil.showModalPopupWindow(createComponent, I18nProperties.getString(Strings.headingCreateNewContact));
276278
}
277279

@@ -452,6 +454,7 @@ public CommitDiscardWrapperComponent<ContactCreateForm> getContactCreateComponen
452454
final CommitDiscardWrapperComponent<ContactCreateForm> createComponent =
453455
new CommitDiscardWrapperComponent<ContactCreateForm>(createForm, UiUtil.permitted(UserRight.CONTACT_CREATE), createForm.getFieldGroup());
454456

457+
contactSaveTriggered = false;
455458
createComponent.addCommitListener(() -> {
456459
if (!createForm.getFieldGroup().isModified()) {
457460
final ContactDto dto = createForm.getValue();
@@ -504,26 +507,73 @@ public CommitDiscardWrapperComponent<ContactCreateForm> getContactCreateComponen
504507
} else {
505508

506509
final PersonDto person = PersonDto.build();
507-
transferDataToPerson(createForm, person);
508510

509-
ControllerProvider.getPersonController()
510-
.selectOrCreatePerson(person, I18nProperties.getString(Strings.infoSelectOrCreatePersonForContact), selectedPerson -> {
511-
if (selectedPerson != null) {
512-
dto.setPerson(selectedPerson);
513-
514-
selectOrCreateContact(dto, selectedPerson, selectedContactUuid -> {
515-
if (selectedContactUuid != null) {
516-
editData(selectedContactUuid);
517-
}
518-
});
519-
}
520-
if (createForm.adoptAddressLayout.isAdoptAddress()) {
521-
FacadeProvider.getPersonFacade()
522-
.copyHomeAddress(
523-
FacadeProvider.getCaseFacade().getByUuid(dto.getCaze().getUuid()).getPerson(),
524-
dto.getPerson());
511+
if (createForm.getWarningSimilarPersons() != null) {
512+
CommitDiscardWrapperComponent<PersonSelectionGrid> warningPopUpDuplicatePerson =
513+
(CommitDiscardWrapperComponent<PersonSelectionGrid>) createComponent.getWrappedComponent()
514+
.getWarningSimilarPersons()
515+
.getContent();
516+
warningPopUpDuplicatePerson.getDiscardButton().setVisible(true);
517+
warningPopUpDuplicatePerson.getCommitButton().setCaption(I18nProperties.getCaption(Captions.actionContinue));
518+
warningPopUpDuplicatePerson.addDoneListener(() -> {
519+
if (!contactSaveTriggered) {
520+
VaadinUiUtil.showModalPopupWindow(createComponent, I18nProperties.getString(Strings.headingCreateNewContact));
525521
}
526-
}, true);
522+
});
523+
524+
warningPopUpDuplicatePerson.addCommitListener(() -> {
525+
contactSaveTriggered = true;
526+
transferDataToPerson(createForm, person);
527+
528+
ControllerProvider.getPersonController()
529+
.selectOrCreatePerson(
530+
person,
531+
I18nProperties.getString(Strings.infoSelectOrCreatePersonForContact),
532+
selectedPerson -> {
533+
if (selectedPerson != null) {
534+
dto.setPerson(selectedPerson);
535+
536+
selectOrCreateContact(dto, selectedPerson, selectedContactUuid -> {
537+
if (selectedContactUuid != null) {
538+
editData(selectedContactUuid);
539+
}
540+
});
541+
}
542+
if (createForm.adoptAddressLayout.isAdoptAddress()) {
543+
FacadeProvider.getPersonFacade()
544+
.copyHomeAddress(
545+
FacadeProvider.getCaseFacade().getByUuid(dto.getCaze().getUuid()).getPerson(),
546+
dto.getPerson());
547+
}
548+
},
549+
true);
550+
});
551+
} else {
552+
transferDataToPerson(createForm, person);
553+
554+
ControllerProvider.getPersonController()
555+
.selectOrCreatePerson(
556+
person,
557+
I18nProperties.getString(Strings.infoSelectOrCreatePersonForContact),
558+
selectedPerson -> {
559+
if (selectedPerson != null) {
560+
dto.setPerson(selectedPerson);
561+
562+
selectOrCreateContact(dto, selectedPerson, selectedContactUuid -> {
563+
if (selectedContactUuid != null) {
564+
editData(selectedContactUuid);
565+
}
566+
});
567+
}
568+
if (createForm.adoptAddressLayout.isAdoptAddress()) {
569+
FacadeProvider.getPersonFacade()
570+
.copyHomeAddress(
571+
FacadeProvider.getCaseFacade().getByUuid(dto.getCaze().getUuid()).getPerson(),
572+
dto.getPerson());
573+
}
574+
},
575+
true);
576+
}
527577
}
528578
}
529579
}

sormas-ui/src/main/java/de/symeda/sormas/ui/contact/ContactCreateForm.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import com.vaadin.shared.ui.ContentMode;
2828
import com.vaadin.ui.Button;
2929
import com.vaadin.ui.Label;
30+
import com.vaadin.ui.Window;
3031
import com.vaadin.ui.themes.ValoTheme;
3132
import com.vaadin.v7.ui.AbstractField;
3233
import com.vaadin.v7.ui.CheckBox;
@@ -55,6 +56,7 @@
5556
import de.symeda.sormas.ui.ControllerProvider;
5657
import de.symeda.sormas.ui.UiUtil;
5758
import de.symeda.sormas.ui.person.PersonCreateForm;
59+
import de.symeda.sormas.ui.person.PersonFormHelper;
5860
import de.symeda.sormas.ui.utils.AbstractEditForm;
5961
import de.symeda.sormas.ui.utils.ButtonHelper;
6062
import de.symeda.sormas.ui.utils.CssStyles;
@@ -119,6 +121,7 @@ public class ContactCreateForm extends AbstractEditForm<ContactDto> {
119121
ComboBox community;
120122

121123
private final boolean showPersonSearchButton;
124+
private Window warningSimilarPersons;
122125

123126
/**
124127
* TODO use disease and case relation information given in ContactDto
@@ -159,6 +162,11 @@ protected void addFields() {
159162
personCreateForm.setValue(new PersonDto());
160163
getContent().addComponent(personCreateForm, ContactDto.PERSON);
161164

165+
personCreateForm.getNationalHealthIdField().addTextFieldValueChangeListener(e -> {
166+
warningSimilarPersons = PersonFormHelper
167+
.warningSimilarPersons(personCreateForm.getNationalHealthIdField().getValue(), null, () -> warningSimilarPersons = null);
168+
});
169+
162170
addField(ContactDto.RETURNING_TRAVELER, NullableOptionGroup.class);
163171
region = addInfrastructureField(ContactDto.REGION);
164172
district = addInfrastructureField(ContactDto.DISTRICT);
@@ -430,4 +438,7 @@ private void updateDateComparison() {
430438
}
431439
}
432440

441+
public Window getWarningSimilarPersons() {
442+
return warningSimilarPersons;
443+
}
433444
}

sormas-ui/src/main/java/de/symeda/sormas/ui/immunization/ImmunizationController.java

Lines changed: 44 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import de.symeda.sormas.ui.immunization.components.fields.popup.SimilarImmunizationPopup;
3131
import de.symeda.sormas.ui.immunization.components.form.ImmunizationCreationForm;
3232
import de.symeda.sormas.ui.immunization.components.form.ImmunizationDataForm;
33+
import de.symeda.sormas.ui.person.PersonSelectionGrid;
3334
import de.symeda.sormas.ui.utils.ArchiveHandlers;
3435
import de.symeda.sormas.ui.utils.CommitDiscardWrapperComponent;
3536
import de.symeda.sormas.ui.utils.NotificationHelper;
@@ -40,14 +41,17 @@
4041

4142
public class ImmunizationController {
4243

44+
boolean immunizationSaveTriggered;
45+
CommitDiscardWrapperComponent<ImmunizationCreationForm> immunizationCreateComponent;
46+
4347
public void registerViews(Navigator navigator) {
4448
navigator.addView(ImmunizationsView.VIEW_NAME, ImmunizationsView.class);
4549
navigator.addView(ImmunizationDataView.VIEW_NAME, ImmunizationDataView.class);
4650
navigator.addView(ImmunizationPersonView.VIEW_NAME, ImmunizationPersonView.class);
4751
}
4852

4953
public void create() {
50-
CommitDiscardWrapperComponent<ImmunizationCreationForm> immunizationCreateComponent = getImmunizationCreateComponent();
54+
immunizationCreateComponent = getImmunizationCreateComponent();
5155
if (immunizationCreateComponent != null) {
5256
VaadinUiUtil.showModalPopupWindow(immunizationCreateComponent, I18nProperties.getString(Strings.headingCreateNewImmunization));
5357
}
@@ -81,6 +85,7 @@ private CommitDiscardWrapperComponent<ImmunizationCreationForm> getImmunizationC
8185
currentUserProvider.hasUserRight(UserRight.IMMUNIZATION_CREATE),
8286
createForm.getFieldGroup());
8387

88+
immunizationSaveTriggered = false;
8489
viewComponent.addCommitListener(() -> {
8590
if (!createForm.getFieldGroup().isModified()) {
8691
final ImmunizationDto dto = createForm.getValue();
@@ -90,16 +95,44 @@ private CommitDiscardWrapperComponent<ImmunizationCreationForm> getImmunizationC
9095
selectOrCreateimmunizationForPerson(dto, searchedPerson.toReference());
9196
} else {
9297
final PersonDto person = createForm.getPerson();
93-
ControllerProvider.getPersonController()
94-
.selectOrCreatePerson(
95-
person,
96-
I18nProperties.getString(Strings.infoSelectOrCreatePersonForImmunization),
97-
selectedPerson -> {
98-
if (selectedPerson != null) {
99-
selectOrCreateimmunizationForPerson(dto, selectedPerson);
100-
}
101-
},
102-
true);
98+
if (createForm.getWarningSimilarPersons() != null) {
99+
CommitDiscardWrapperComponent<PersonSelectionGrid> warningPopUpDuplicatePerson =
100+
(CommitDiscardWrapperComponent<PersonSelectionGrid>) viewComponent.getWrappedComponent()
101+
.getWarningSimilarPersons()
102+
.getContent();
103+
warningPopUpDuplicatePerson.getDiscardButton().setVisible(true);
104+
warningPopUpDuplicatePerson.getCommitButton().setCaption(I18nProperties.getCaption(Captions.actionContinue));
105+
warningPopUpDuplicatePerson.addDoneListener(() -> {
106+
if (!immunizationSaveTriggered) {
107+
VaadinUiUtil.showModalPopupWindow(viewComponent, I18nProperties.getString(Strings.headingCreateNewImmunization));
108+
}
109+
});
110+
111+
warningPopUpDuplicatePerson.addCommitListener(() -> {
112+
immunizationSaveTriggered = true;
113+
ControllerProvider.getPersonController()
114+
.selectOrCreatePerson(
115+
person,
116+
I18nProperties.getString(Strings.infoSelectOrCreatePersonForImmunization),
117+
selectedPerson -> {
118+
if (selectedPerson != null) {
119+
selectOrCreateimmunizationForPerson(dto, selectedPerson);
120+
}
121+
},
122+
true);
123+
});
124+
} else {
125+
ControllerProvider.getPersonController()
126+
.selectOrCreatePerson(
127+
person,
128+
I18nProperties.getString(Strings.infoSelectOrCreatePersonForImmunization),
129+
selectedPerson -> {
130+
if (selectedPerson != null) {
131+
selectOrCreateimmunizationForPerson(dto, selectedPerson);
132+
}
133+
},
134+
true);
135+
}
103136
}
104137
}
105138
});

0 commit comments

Comments
 (0)