11package de .symeda .sormas .ui .labmessage ;
22
3+ import java .util .Arrays ;
34import java .util .List ;
45
56import com .vaadin .server .Sizeable ;
2829import de .symeda .sormas .api .labmessage .SimilarEntriesDto ;
2930import de .symeda .sormas .api .person .PersonDto ;
3031import de .symeda .sormas .api .sample .PathogenTestDto ;
32+ import de .symeda .sormas .api .sample .SampleCriteria ;
3133import de .symeda .sormas .api .sample .SampleDto ;
34+ import de .symeda .sormas .api .utils .pseudonymization .PseudonymizableDto ;
3235import de .symeda .sormas .ui .ControllerProvider ;
3336import de .symeda .sormas .ui .SormasUI ;
3437import de .symeda .sormas .ui .UserProvider ;
3538import de .symeda .sormas .ui .caze .CaseCreateForm ;
3639import de .symeda .sormas .ui .contact .ContactCreateForm ;
3740import de .symeda .sormas .ui .samples .PathogenTestForm ;
3841import de .symeda .sormas .ui .samples .SampleCreateForm ;
42+ import de .symeda .sormas .ui .samples .SampleSelectionField ;
3943import de .symeda .sormas .ui .utils .CommitDiscardWrapperComponent ;
4044import de .symeda .sormas .ui .utils .DateTimeField ;
4145import de .symeda .sormas .ui .utils .VaadinUiUtil ;
@@ -112,6 +116,7 @@ private void pickOrCreateEntry(
112116 EntrySelectionField selectField = new EntrySelectionField (labMessageDto , cases , contacts , eventParticipants );
113117
114118 final CommitDiscardWrapperComponent <EntrySelectionField > selectionField = new CommitDiscardWrapperComponent <>(selectField );
119+ selectionField .getCommitButton ().setCaption (I18nProperties .getCaption (Captions .actionConfirm ));
115120 selectionField .setWidth (1280 , Sizeable .Unit .PIXELS );
116121 selectionField .addCommitListener (() -> {
117122 SimilarEntriesDto similarEntriesDto = selectField .getValue ();
@@ -120,9 +125,27 @@ private void pickOrCreateEntry(
120125 } else if (similarEntriesDto .isNewContact ()) {
121126 createContact (labMessageDto , person );
122127 } else if (similarEntriesDto .getCaze () != null ) {
123- createSample (FacadeProvider .getCaseFacade ().getCaseDataByUuid (similarEntriesDto .getCaze ().getUuid ()), labMessageDto );
128+ CaseDataDto caseDto = FacadeProvider .getCaseFacade ().getCaseDataByUuid (similarEntriesDto .getCaze ().getUuid ());
129+ SampleCriteria criteria = new SampleCriteria ();
130+ criteria .caze (caseDto .toReference ());
131+ criteria .setDisease (caseDto .getDisease ());
132+ List <SampleDto > samples = FacadeProvider .getSampleFacade ().getByCaseUuids (Arrays .asList (caseDto .getUuid ()));
133+ if (samples .isEmpty ()) {
134+ createSample (caseDto , labMessageDto );
135+ } else {
136+ pickOrCreateSample (caseDto , labMessageDto , samples );
137+ }
124138 } else if (similarEntriesDto .getContact () != null ) {
125- createSample (FacadeProvider .getContactFacade ().getContactByUuid (similarEntriesDto .getContact ().getUuid ()), labMessageDto );
139+ ContactDto contactDto = FacadeProvider .getContactFacade ().getContactByUuid (similarEntriesDto .getContact ().getUuid ());
140+ SampleCriteria criteria = new SampleCriteria ();
141+ criteria .contact (contactDto .toReference ());
142+ criteria .setDisease (contactDto .getDisease ());
143+ List <SampleDto > samples = FacadeProvider .getSampleFacade ().getByContactUuids (Arrays .asList (contactDto .getUuid ()));
144+ if (samples .isEmpty ()) {
145+ createSample (contactDto , labMessageDto );
146+ } else {
147+ pickOrCreateSample (contactDto , labMessageDto , samples );
148+ }
126149 }
127150 });
128151
@@ -134,6 +157,34 @@ private void pickOrCreateEntry(
134157 VaadinUiUtil .showModalPopupWindow (selectionField , I18nProperties .getString (Strings .headingPickOrCreateEntry ));
135158 }
136159
160+ private void pickOrCreateSample (PseudonymizableDto dto , LabMessageDto labMessageDto , List <SampleDto > samples ) {
161+ SampleSelectionField selectField = new SampleSelectionField (samples , I18nProperties .getString (Strings .infoPickOrCreateSample ));
162+
163+ Window window = VaadinUiUtil .createPopupWindow ();
164+
165+ final CommitDiscardWrapperComponent <EntrySelectionField > selectionField = new CommitDiscardWrapperComponent (selectField );
166+ selectionField .getCommitButton ().setCaption (I18nProperties .getCaption (Captions .actionConfirm ));
167+ selectionField .setWidth (1280 , Sizeable .Unit .PIXELS );
168+ selectionField .addCommitListener (() -> {
169+ SampleDto sampleDto = selectField .getValue ();
170+ if (sampleDto != null ) {
171+ createPathogenTest (sampleDto , labMessageDto );
172+ } else if (CaseDataDto .class .equals (dto .getClass ())) {
173+ createSample ((CaseDataDto ) dto , labMessageDto );
174+ } else if (ContactDto .class .equals (dto .getClass ())) {
175+ createSample ((ContactDto ) dto , labMessageDto );
176+ }
177+ window .close ();
178+ });
179+ selectField .setSelectionChangeCallback ((commitAllowed ) -> {
180+ selectionField .getCommitButton ().setEnabled (commitAllowed );
181+ });
182+ selectionField .getCommitButton ().setEnabled (false );
183+ selectionField .addDiscardListener (() -> window .close ());
184+
185+ showFormWithLabMessage (labMessageDto , selectionField , window , I18nProperties .getString (Strings .headingPickOrCreateSample ));
186+ }
187+
137188 private void createCase (LabMessageDto labMessageDto , PersonDto person ) {
138189 CommitDiscardWrapperComponent <CaseCreateForm > caseCreateComponent =
139190 ControllerProvider .getCaseController ().getCaseCreateComponent (null , null , null , true );
@@ -161,7 +212,7 @@ private void createCase(LabMessageDto labMessageDto, PersonDto person) {
161212 caseCreateComponent .getWrappedComponent ().setValue (caseDto );
162213 caseCreateComponent .getWrappedComponent ().setPerson (person );
163214
164- showCreateForm (labMessageDto , caseCreateComponent , window , I18nProperties .getString (Strings .headingCreateNewCase ));
215+ showFormWithLabMessage (labMessageDto , caseCreateComponent , window , I18nProperties .getString (Strings .headingCreateNewCase ));
165216 }
166217
167218 private void createContact (LabMessageDto labMessageDto , PersonDto person ) {
@@ -191,12 +242,13 @@ private void createContact(LabMessageDto labMessageDto, PersonDto person) {
191242 contactCreateComponent .getWrappedComponent ().setValue (contactDto );
192243 contactCreateComponent .getWrappedComponent ().setPerson (person );
193244
194- showCreateForm (labMessageDto , contactCreateComponent , window , I18nProperties .getString (Strings .headingCreateNewContact ));
245+ showFormWithLabMessage (labMessageDto , contactCreateComponent , window , I18nProperties .getString (Strings .headingCreateNewContact ));
195246 }
196247
197- private void showCreateForm (LabMessageDto labMessageDto , CommitDiscardWrapperComponent createComponent , Window window , String heading ) {
248+ private void showFormWithLabMessage (LabMessageDto labMessageDto , CommitDiscardWrapperComponent createComponent , Window window , String heading ) {
198249 LabMessageEditForm form = new LabMessageEditForm (true );
199250 form .setValue (labMessageDto );
251+ form .setWidth (550 , Sizeable .Unit .PIXELS );
200252 HorizontalLayout layout = new HorizontalLayout (form , createComponent );
201253 layout .setMargin (true );
202254 window .setContent (layout );
@@ -252,7 +304,7 @@ private void createSample(SampleDto sampleDto, LabMessageDto labMessageDto) {
252304 });
253305 sampleCreateComponent .addDiscardListener (() -> window .close ());
254306
255- showCreateForm (labMessageDto , sampleCreateComponent , window , I18nProperties .getString (Strings .headingCreateNewSample ));
307+ showFormWithLabMessage (labMessageDto , sampleCreateComponent , window , I18nProperties .getString (Strings .headingCreateNewSample ));
256308 }
257309
258310 private void createPathogenTest (SampleDto sampleDto , LabMessageDto labMessageDto ) {
@@ -274,6 +326,6 @@ private void createPathogenTest(SampleDto sampleDto, LabMessageDto labMessageDto
274326 pathogenTestCreateComponent .addDiscardListener (() -> window .close ());
275327 pathogenTestCreateComponent .getWrappedComponent ().setValue (pathogenTestDto );
276328
277- showCreateForm (labMessageDto , pathogenTestCreateComponent , window , I18nProperties .getString (Strings .headingCreatePathogenTestResult ));
329+ showFormWithLabMessage (labMessageDto , pathogenTestCreateComponent , window , I18nProperties .getString (Strings .headingCreatePathogenTestResult ));
278330 }
279331}
0 commit comments