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

Commit e37463f

Browse files
SORMAS-Foundation#3623 - Allow contacts to be converted to existing cases
1 parent e4270d8 commit e37463f

3 files changed

Lines changed: 34 additions & 1 deletion

File tree

sormas-app/app/src/main/java/de/symeda/sormas/app/backend/caze/CaseDao.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -294,6 +294,7 @@ public Case build(Contact contact) {
294294
Case newCase = build(contact.getPerson());
295295
newCase.setDisease(contact.getDisease());
296296
newCase.setDiseaseDetails(contact.getDiseaseDetails());
297+
newCase.getEpiData().setContactWithSourceCaseKnown(YesNoUnknown.YES);
297298
return newCase;
298299
}
299300

sormas-app/app/src/main/java/de/symeda/sormas/app/caze/edit/CaseNewActivity.java

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,12 +32,15 @@
3232

3333
import de.symeda.sormas.api.Disease;
3434
import de.symeda.sormas.api.caze.CaseClassification;
35+
import de.symeda.sormas.api.contact.ContactStatus;
3536
import de.symeda.sormas.api.utils.DataHelper;
3637
import de.symeda.sormas.api.utils.ValidationException;
38+
import de.symeda.sormas.api.utils.YesNoUnknown;
3739
import de.symeda.sormas.app.BaseEditActivity;
3840
import de.symeda.sormas.app.BaseEditFragment;
3941
import de.symeda.sormas.app.R;
4042
import de.symeda.sormas.app.backend.caze.Case;
43+
import de.symeda.sormas.app.backend.common.DaoException;
4144
import de.symeda.sormas.app.backend.common.DatabaseHelper;
4245
import de.symeda.sormas.app.backend.config.ConfigProvider;
4346
import de.symeda.sormas.app.backend.contact.Contact;
@@ -53,7 +56,6 @@
5356
import de.symeda.sormas.app.core.notification.NotificationHelper;
5457
import de.symeda.sormas.app.person.SelectOrCreatePersonDialog;
5558
import de.symeda.sormas.app.util.Bundler;
56-
import de.symeda.sormas.app.util.Consumer;
5759
import de.symeda.sormas.app.util.DateFormatHelper;
5860

5961
public class CaseNewActivity extends BaseEditActivity<Case> {
@@ -228,6 +230,25 @@ private void pickOrCreateCaseAndSave(Case caze, CaseNewFragment fragment) {
228230
fragment.setActivityRootData(getStoredRootEntity());
229231
fragment.updateForRapidCaseEntry(caze);
230232
} else {
233+
if (!DataHelper.isNullOrEmpty(contactUuid)) {
234+
Contact contact = DatabaseHelper.getContactDao().queryUuid(contactUuid);
235+
try {
236+
pickedCase.getEpiData().setContactWithSourceCaseKnown(YesNoUnknown.YES);
237+
DatabaseHelper.getCaseDao().saveAndSnapshot(pickedCase);
238+
239+
contact.setResultingCaseUuid(pickedCase.getUuid());
240+
contact.setResultingCaseUser(ConfigProvider.getUser());
241+
contact.setContactStatus(ContactStatus.CONVERTED);
242+
DatabaseHelper.getContactDao().saveAndSnapshot(contact);
243+
} catch (DaoException e) {
244+
NotificationHelper.showNotification(
245+
this,
246+
ERROR,
247+
String.format(getActiveActivity().getResources().getString(R.string.message_save_error), contact.getEntityName()));
248+
return;
249+
}
250+
}
251+
231252
finish();
232253
CaseEditActivity.startActivity(getContext(), pickedCase.getUuid(), CaseSection.CASE_INFO);
233254
}
@@ -271,6 +292,7 @@ protected void doInBackground(TaskResultHolder resultHolder) throws Exception {
271292
Contact sourceContact = DatabaseHelper.getContactDao().queryUuid(contactUuid);
272293
sourceContact.setResultingCaseUuid(caseToSave.getUuid());
273294
sourceContact.setResultingCaseUser(ConfigProvider.getUser());
295+
sourceContact.setContactStatus(ContactStatus.CONVERTED);
274296
DatabaseHelper.getContactDao().saveAndSnapshot(sourceContact);
275297
}
276298

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,16 @@ public void createFromContact(ContactDto contact) {
181181
});
182182
VaadinUiUtil.showModalPopupWindow(caseCreateComponent, I18nProperties.getString(Strings.headingCreateNewCase));
183183
} else {
184+
CaseDataDto selectedCase = FacadeProvider.getCaseFacade().getCaseDataByUuid(uuid);
185+
selectedCase.getEpiData().setContactWithSourceCaseKnown(YesNoUnknown.YES);
186+
FacadeProvider.getCaseFacade().saveCase(selectedCase);
187+
188+
ContactDto updatedContact = FacadeProvider.getContactFacade().getContactByUuid(contact.getUuid());
189+
updatedContact.setContactStatus(ContactStatus.CONVERTED);
190+
updatedContact.setResultingCase(selectedCase.toReference());
191+
updatedContact.setResultingCaseUser(UserProvider.getCurrent().getUserReference());
192+
FacadeProvider.getContactFacade().saveContact(updatedContact);
193+
184194
navigateToView(CaseDataView.VIEW_NAME, uuid, null);
185195
}
186196
});

0 commit comments

Comments
 (0)