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

Commit eced158

Browse files
author
barnabartha
committed
SORMAS-Foundation#3424 - set contact follow up status to canceled if contact is dropped or converted to case
1 parent 16a77d7 commit eced158

2 files changed

Lines changed: 80 additions & 1 deletion

File tree

sormas-backend/src/main/java/de/symeda/sormas/backend/contact/ContactFacadeEjb.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,11 +126,11 @@
126126
import de.symeda.sormas.backend.epidata.EpiData;
127127
import de.symeda.sormas.backend.epidata.EpiDataFacadeEjb;
128128
import de.symeda.sormas.backend.epidata.EpiDataFacadeEjb.EpiDataFacadeEjbLocal;
129-
import de.symeda.sormas.backend.exposure.Exposure;
130129
import de.symeda.sormas.backend.event.ContactEventSummaryDetails;
131130
import de.symeda.sormas.backend.event.Event;
132131
import de.symeda.sormas.backend.event.EventParticipant;
133132
import de.symeda.sormas.backend.event.EventService;
133+
import de.symeda.sormas.backend.exposure.Exposure;
134134
import de.symeda.sormas.backend.externaljournal.ExternalJournalService;
135135
import de.symeda.sormas.backend.facility.Facility;
136136
import de.symeda.sormas.backend.location.Location;
@@ -303,6 +303,13 @@ public ContactDto saveContact(ContactDto dto, boolean handleChanges) {
303303
if (handleChanges) {
304304
updateContactVisitAssociations(existingContactDto, entity);
305305

306+
final boolean convertedToCase =
307+
(existingContactDto == null || existingContactDto.getResultingCase() == null) && entity.getResultingCase() != null;
308+
final boolean dropped = entity.getContactStatus() == ContactStatus.DROPPED;
309+
if (dropped || convertedToCase) {
310+
entity.setFollowUpStatus(FollowUpStatus.CANCELED);
311+
}
312+
306313
contactService.updateFollowUpUntilAndStatus(entity);
307314
contactService.udpateContactStatus(entity);
308315

sormas-backend/src/test/java/de/symeda/sormas/backend/contact/ContactFacadeEjbTest.java

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
import java.util.List;
3838
import java.util.stream.Collectors;
3939

40+
import de.symeda.sormas.api.contact.FollowUpStatus;
4041
import org.apache.commons.lang3.time.DateUtils;
4142
import org.junit.Assert;
4243
import org.junit.Test;
@@ -199,6 +200,77 @@ public void testUpdateContactStatus() {
199200
assertEquals(ContactStatus.CONVERTED, contact.getContactStatus());
200201
}
201202

203+
@Test
204+
public void testContactFollowUpStatusCanceledWhenContactDropped(){
205+
RDCFEntities rdcf = creator.createRDCFEntities("Region", "District", "Community", "Facility");
206+
UserDto user = creator
207+
.createUser(rdcf.region.getUuid(), rdcf.district.getUuid(), rdcf.facility.getUuid(), "Surv", "Sup", UserRole.SURVEILLANCE_SUPERVISOR);
208+
PersonDto cazePerson = creator.createPerson("Case", "Person");
209+
CaseDataDto caze = creator.createCase(
210+
user.toReference(),
211+
cazePerson.toReference(),
212+
Disease.EVD,
213+
CaseClassification.PROBABLE,
214+
InvestigationStatus.PENDING,
215+
new Date(),
216+
rdcf);
217+
PersonDto contactPerson = creator.createPerson("Contact", "Person");
218+
Date contactDate = new Date();
219+
ContactDto contact =
220+
creator.createContact(user.toReference(), user.toReference(), contactPerson.toReference(), caze, contactDate, contactDate, null);
221+
222+
assertEquals(ContactStatus.ACTIVE, contact.getContactStatus());
223+
assertNull(contact.getResultingCase());
224+
225+
contact.setContactClassification(ContactClassification.CONFIRMED);
226+
contact.setContactStatus(ContactStatus.DROPPED);
227+
contact = getContactFacade().saveContact(contact);
228+
assertEquals(ContactClassification.CONFIRMED, contact.getContactClassification());
229+
assertEquals(ContactStatus.DROPPED, contact.getContactStatus());
230+
assertEquals(FollowUpStatus.CANCELED, contact.getFollowUpStatus());
231+
}
232+
233+
@Test
234+
public void testContactFollowUpStatusCanceledWhenContactConvertedToCase(){
235+
RDCFEntities rdcf = creator.createRDCFEntities("Region", "District", "Community", "Facility");
236+
UserDto user = creator
237+
.createUser(rdcf.region.getUuid(), rdcf.district.getUuid(), rdcf.facility.getUuid(), "Surv", "Sup", UserRole.SURVEILLANCE_SUPERVISOR);
238+
PersonDto cazePerson = creator.createPerson("Case", "Person");
239+
CaseDataDto caze = creator.createCase(
240+
user.toReference(),
241+
cazePerson.toReference(),
242+
Disease.EVD,
243+
CaseClassification.PROBABLE,
244+
InvestigationStatus.PENDING,
245+
new Date(),
246+
rdcf);
247+
PersonDto contactPerson = creator.createPerson("Contact", "Person");
248+
249+
Date contactDate = new Date();
250+
ContactDto contact =
251+
creator.createContact(user.toReference(), user.toReference(), contactPerson.toReference(), caze, contactDate, contactDate, null);
252+
253+
assertEquals(ContactStatus.ACTIVE, contact.getContactStatus());
254+
assertNull(contact.getResultingCase());
255+
256+
contact.setContactClassification(ContactClassification.CONFIRMED);
257+
contact = getContactFacade().saveContact(contact);
258+
259+
final CaseDataDto resultingCase = creator.createCase(
260+
user.toReference(),
261+
contactPerson.toReference(),
262+
Disease.EVD,
263+
CaseClassification.PROBABLE,
264+
InvestigationStatus.PENDING,
265+
new Date(),
266+
rdcf);
267+
contact.setResultingCase(resultingCase.toReference());
268+
contact = getContactFacade().saveContact(contact);
269+
assertEquals(ContactClassification.CONFIRMED, contact.getContactClassification());
270+
assertEquals(ContactStatus.CONVERTED, contact.getContactStatus());
271+
assertEquals(FollowUpStatus.CANCELED, contact.getFollowUpStatus());
272+
}
273+
202274
@Test
203275
public void testGenerateContactFollowUpTasks() {
204276

0 commit comments

Comments
 (0)