1515import de .symeda .sormas .api .caze .CaseDataDto ;
1616import de .symeda .sormas .api .caze .CaseIndexDto ;
1717import de .symeda .sormas .api .caze .CaseSimilarityCriteria ;
18+ import de .symeda .sormas .api .contact .ContactDto ;
1819import de .symeda .sormas .api .contact .SimilarContactDto ;
1920import de .symeda .sormas .api .event .SimilarEventParticipantDto ;
2021import de .symeda .sormas .api .facility .FacilityReferenceDto ;
3132import de .symeda .sormas .ui .SormasUI ;
3233import de .symeda .sormas .ui .UserProvider ;
3334import de .symeda .sormas .ui .caze .CaseCreateForm ;
35+ import de .symeda .sormas .ui .contact .ContactCreateForm ;
3436import de .symeda .sormas .ui .samples .PathogenTestForm ;
3537import de .symeda .sormas .ui .samples .SampleCreateForm ;
3638import de .symeda .sormas .ui .utils .CommitDiscardWrapperComponent ;
@@ -114,6 +116,8 @@ private void pickOrCreateEntry(
114116 SimilarEntriesDto similarEntriesDto = selectField .getValue ();
115117 if (similarEntriesDto .isNewCase ()) {
116118 createCase (labMessageDto , person );
119+ } else if (similarEntriesDto .isNewContact ()) {
120+ createContact (labMessageDto , person );
117121 } else if (similarEntriesDto .getCaze () != null ) {
118122 createSample (FacadeProvider .getCaseFacade ().getCaseDataByUuid (similarEntriesDto .getCaze ().getUuid ()), labMessageDto );
119123 }
@@ -154,17 +158,60 @@ private void createCase(LabMessageDto labMessageDto, PersonDto person) {
154158 caseCreateComponent .getWrappedComponent ().setValue (caseDto );
155159 caseCreateComponent .getWrappedComponent ().setPerson (person );
156160
161+ showCreateForm (labMessageDto , caseCreateComponent , window , I18nProperties .getString (Strings .headingCreateNewCase ));
162+ }
163+
164+ private void createContact (LabMessageDto labMessageDto , PersonDto person ) {
165+ CommitDiscardWrapperComponent <ContactCreateForm > contactCreateComponent =
166+ ControllerProvider .getContactController ().getContactCreateComponent (null , false , null , true );
167+
168+ ContactDto contactDto = ContactDto .build (null , labMessageDto .getTestedDisease (), null );
169+ contactDto .setReportingUser (UserProvider .getCurrent ().getUserReference ());
170+ Window window = VaadinUiUtil .createPopupWindow ();
171+ contactCreateComponent .addCommitListener (() -> {
172+ PersonDto personDto =
173+ FacadeProvider .getPersonFacade ().getPersonByUuid (contactCreateComponent .getWrappedComponent ().getValue ().getPerson ().getUuid ());
174+ if (personDto .getAddress ().getCity () == null
175+ && personDto .getAddress ().getHouseNumber () == null
176+ && personDto .getAddress ().getPostalCode () == null
177+ && personDto .getAddress ().getStreet () == null ) {
178+ personDto .getAddress ().setStreet (labMessageDto .getPersonStreet ());
179+ personDto .getAddress ().setHouseNumber (labMessageDto .getPersonHouseNumber ());
180+ personDto .getAddress ().setPostalCode (labMessageDto .getPersonPostalCode ());
181+ personDto .getAddress ().setCity (labMessageDto .getPersonCity ());
182+ FacadeProvider .getPersonFacade ().savePerson (personDto );
183+ }
184+ createSample (contactCreateComponent .getWrappedComponent ().getValue (), labMessageDto );
185+ window .close ();
186+ });
187+ contactCreateComponent .addDiscardListener (() -> window .close ());
188+ contactCreateComponent .getWrappedComponent ().setValue (contactDto );
189+ contactCreateComponent .getWrappedComponent ().setPerson (person );
190+
191+ showCreateForm (labMessageDto , contactCreateComponent , window , I18nProperties .getString (Strings .headingCreateNewContact ));
192+ }
193+
194+ private void showCreateForm (LabMessageDto labMessageDto , CommitDiscardWrapperComponent createComponent , Window window , String heading ) {
157195 LabMessageEditForm form = new LabMessageEditForm (true );
158196 form .setValue (labMessageDto );
159- HorizontalLayout layout = new HorizontalLayout (form , caseCreateComponent );
197+ HorizontalLayout layout = new HorizontalLayout (form , createComponent );
160198 layout .setMargin (true );
161199 window .setContent (layout );
162- window .setCaption (I18nProperties . getString ( Strings . headingCreateNewCase ) );
200+ window .setCaption (heading );
163201 UI .getCurrent ().addWindow (window );
164202 }
165203
166204 private void createSample (CaseDataDto caseDataDto , LabMessageDto labMessageDto ) {
167205 SampleDto sampleDto = SampleDto .build (UserProvider .getCurrent ().getUserReference (), caseDataDto .toReference ());
206+ createSample (sampleDto , labMessageDto );
207+ }
208+
209+ private void createSample (ContactDto contactDto , LabMessageDto labMessageDto ) {
210+ SampleDto sampleDto = SampleDto .build (UserProvider .getCurrent ().getUserReference (), contactDto .toReference ());
211+ createSample (sampleDto , labMessageDto );
212+ }
213+
214+ private void createSample (SampleDto sampleDto , LabMessageDto labMessageDto ) {
168215 sampleDto .setSampleDateTime (labMessageDto .getSampleDateTime ());
169216 if (labMessageDto .getSampleReceivedDate () != null ) {
170217 sampleDto .setReceived (true );
@@ -202,13 +249,7 @@ private void createSample(CaseDataDto caseDataDto, LabMessageDto labMessageDto)
202249 });
203250 sampleCreateComponent .addDiscardListener (() -> window .close ());
204251
205- LabMessageEditForm form = new LabMessageEditForm (true );
206- form .setValue (labMessageDto );
207- HorizontalLayout layout = new HorizontalLayout (form , sampleCreateComponent );
208- layout .setMargin (true );
209- window .setContent (layout );
210- window .setCaption (I18nProperties .getString (Strings .headingCreateNewSample ));
211- UI .getCurrent ().addWindow (window );
252+ showCreateForm (labMessageDto , sampleCreateComponent , window , I18nProperties .getString (Strings .headingCreateNewSample ));
212253 }
213254
214255 private void createPathogenTest (SampleDto sampleDto , LabMessageDto labMessageDto ) {
@@ -230,12 +271,6 @@ private void createPathogenTest(SampleDto sampleDto, LabMessageDto labMessageDto
230271 pathogenTestCreateComponent .addDiscardListener (() -> window .close ());
231272 pathogenTestCreateComponent .getWrappedComponent ().setValue (pathogenTestDto );
232273
233- LabMessageEditForm form = new LabMessageEditForm (true );
234- form .setValue (labMessageDto );
235- HorizontalLayout layout = new HorizontalLayout (form , pathogenTestCreateComponent );
236- layout .setMargin (true );
237- window .setContent (layout );
238- window .setCaption (I18nProperties .getString (Strings .headingCreatePathogenTestResult ));
239- UI .getCurrent ().addWindow (window );
274+ showCreateForm (labMessageDto , pathogenTestCreateComponent , window , I18nProperties .getString (Strings .headingCreatePathogenTestResult ));
240275 }
241276}
0 commit comments