Skip to content

Commit

Permalink
Merge pull request #2799 from GIP-GRADeS-BFC/hzi_2652
Browse files Browse the repository at this point in the history
Issue #2652 - Handle follow-up visits when merging a case
  • Loading branch information
MateStrysewske authored Sep 7, 2020
2 parents ec3cf37 + 81d6528 commit 9018590
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -153,6 +153,7 @@
import de.symeda.sormas.api.utils.SortProperty;
import de.symeda.sormas.api.utils.ValidationRuntimeException;
import de.symeda.sormas.api.utils.YesNoUnknown;
import de.symeda.sormas.api.visit.VisitDto;
import de.symeda.sormas.api.visit.VisitResult;
import de.symeda.sormas.api.visit.VisitStatus;
import de.symeda.sormas.backend.caze.classification.CaseClassificationFacadeEjb.CaseClassificationFacadeEjbLocal;
Expand Down Expand Up @@ -245,6 +246,8 @@
import de.symeda.sormas.backend.util.ModelConstants;
import de.symeda.sormas.backend.util.Pseudonymizer;
import de.symeda.sormas.backend.visit.Visit;
import de.symeda.sormas.backend.visit.VisitFacadeEjb;
import de.symeda.sormas.backend.visit.VisitFacadeEjb.VisitFacadeEjbLocal;
import de.symeda.sormas.backend.visit.VisitService;

@Stateless(name = "CaseFacade")
Expand All @@ -270,6 +273,8 @@ public class CaseFacadeEjb implements CaseFacade {
@EJB
private VisitService visitService;
@EJB
private VisitFacadeEjbLocal visitFacade;
@EJB
private SymptomsFacadeEjbLocal symptomsFacade;
@EJB
private RegionService regionService;
Expand Down Expand Up @@ -2667,6 +2672,14 @@ private void mergeCase(CaseDataDto leadCaseData, CaseDataDto otherCaseData, bool
clinicalVisitService.ensurePersisted(clinicalVisit);
}
}

// 5 Attach otherCase visits to leadCase
// (set the person and the disease of the visit, saveVisit does the rest)
for (VisitDto otherVisit : otherCase.getVisits().stream().map(VisitFacadeEjb::toDto).collect(Collectors.toList())) {
otherVisit.setPerson(leadCaseData.getPerson());
otherVisit.setDisease(leadCaseData.getDisease());
visitFacade.saveVisit(otherVisit);
}
}

@Override
Expand Down Expand Up @@ -2822,6 +2835,8 @@ public List<CaseFollowUpDto> getCaseFollowUpList(
visitsJoin.get(Visit.VISIT_DATE_TIME),
visitsJoin.get(Visit.VISIT_STATUS),
visitSymptomsJoin.get(Symptoms.SYMPTOMATIC));
// Sort by visit date so that we'll have the latest visit of each day
visitsCq.orderBy(cb.asc(visitsJoin.get(Visit.VISIT_DATE_TIME)));

visitsCq.orderBy(cb.asc(visitsJoin.get(Visit.VISIT_DATE_TIME)), cb.asc(visitsJoin.get(Visit.CREATION_DATE)));

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -651,7 +651,9 @@ private void updateContactVisitAssociations(VisitDto existingVisit, Visit visit)

private void updateCaseVisitAssociations(VisitDto existingVisit, Visit visit) {

if (existingVisit != null && existingVisit.getVisitDateTime() == visit.getVisitDateTime()) {
if (existingVisit != null
&& existingVisit.getVisitDateTime() == visit.getVisitDateTime()
&& existingVisit.getPerson().equals(visit.getPerson())) {
// No need to update the associations
return;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;

import org.junit.Assert;
import org.junit.Rule;
Expand Down Expand Up @@ -90,7 +91,9 @@
import de.symeda.sormas.api.utils.OutdatedEntityException;
import de.symeda.sormas.api.utils.SortProperty;
import de.symeda.sormas.api.utils.YesNoUnknown;
import de.symeda.sormas.api.visit.VisitCriteria;
import de.symeda.sormas.api.visit.VisitDto;
import de.symeda.sormas.api.visit.VisitIndexDto;
import de.symeda.sormas.api.visit.VisitStatus;
import de.symeda.sormas.backend.AbstractBeanTest;
import de.symeda.sormas.backend.TestDataCreator.RDCF;
Expand Down Expand Up @@ -892,6 +895,9 @@ public void testMergeCase() {
leadRdcf);
leadCase.setClinicianEmail("mail");
getCaseFacade().saveCase(leadCase);
VisitDto leadVisit = creator.createVisit(leadCase.getDisease(), leadCase.getPerson(), leadCase.getReportDate());
leadVisit.getSymptoms().setAnorexiaAppetiteLoss(SymptomState.YES);
getVisitFacade().saveVisit(leadVisit);

// Create otherCase
UserDto otherUser = creator.createUser("", "", "", "", "");
Expand Down Expand Up @@ -932,6 +938,9 @@ public void testMergeCase() {
PrescriptionDto prescription = creator.createPrescription(otherCase);
ClinicalVisitDto visit = creator.createClinicalVisit(otherCase);
getCaseFacade().saveCase(otherCase);
VisitDto otherVisit = creator.createVisit(otherCase.getDisease(), otherCase.getPerson(), otherCase.getReportDate());
otherVisit.getSymptoms().setAbdominalPain(SymptomState.YES);
getVisitFacade().saveVisit(otherVisit);

// 2. Merge

Expand Down Expand Up @@ -997,6 +1006,17 @@ public void testMergeCase() {
List<String> visitUuids = new ArrayList<String>();
visitUuids.add(visit.getUuid());
assertEquals(leadCase.getClinicalCourse().getUuid(), getClinicalVisitFacade().getByUuids(visitUuids).get(0).getClinicalCourse().getUuid());

// 4.7 Visits;
List<String> mergedVisits = getVisitFacade().getIndexList(new VisitCriteria().caze(mergedCase.toReference()), null, null, null)
.stream().map(VisitIndexDto::getUuid).collect(Collectors.toList());
assertEquals(2, mergedVisits.size());
assertTrue(mergedVisits.contains(leadVisit.getUuid()));
assertTrue(mergedVisits.contains(otherVisit.getUuid()));
// and symptoms
assertEquals(SymptomState.YES, mergedCase.getSymptoms().getAbdominalPain());
assertEquals(SymptomState.YES, mergedCase.getSymptoms().getAnorexiaAppetiteLoss());
assertTrue(mergedCase.getSymptoms().getSymptomatic());
}

@Test
Expand Down

0 comments on commit 9018590

Please sign in to comment.