Skip to content

Commit 6214c91

Browse files
authored
Merge pull request #134 from opensrp/update-task-reference
Populate task reason reference field
2 parents 378792f + d23cb7f commit 6214c91

6 files changed

Lines changed: 103 additions & 4 deletions

File tree

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
<artifactId>opensrp-plan-evaluator</artifactId>
88
<packaging>jar</packaging>
9-
<version>1.6.3-SNAPSHOT</version>
9+
<version>1.6.4-SNAPSHOT</version>
1010
<name>OpenSRP Plan Evaluator</name>
1111
<description>OpenSRP Plan Evaluator Library</description>
1212
<url>https://github.com/OpenSRP/opensrp-plan-evaluator</url>

src/main/java/org/smartregister/converters/EventConverter.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import org.apache.commons.lang3.StringUtils;
88
import org.smartregister.domain.Event;
99
import org.smartregister.domain.Obs;
10+
import org.smartregister.utils.ApplicationConstants;
1011

1112
import java.util.ArrayList;
1213
import java.util.Collection;
@@ -47,7 +48,15 @@ public static QuestionnaireResponse convertEventToEncounterResource(Event event)
4748
.linkId(String.builder().value("team").build()).answer(teamAnswer).build();
4849
items.add(team);
4950
}
50-
51+
52+
if (StringUtils.isNotBlank(event.getId())) {
53+
QuestionnaireResponse.Item.Answer eventIdAnswer = QuestionnaireResponse.Item.Answer.builder()
54+
.value(String.builder().value(event.getId()).build()).build();
55+
QuestionnaireResponse.Item eventId = QuestionnaireResponse.Item.builder()
56+
.linkId(String.builder().value(ApplicationConstants.EventConstants.EVENT_ID).build()).answer(eventIdAnswer).build();
57+
items.add(eventId);
58+
}
59+
5160
Reference providerId = Reference.builder().id("providerId")
5261
.reference(String.builder().value(event.getProviderId()).build()).build();
5362
Reference baseEntityId = Reference.builder().id("baseEntityId")

src/main/java/org/smartregister/pathevaluator/task/TaskHelper.java

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import java.util.logging.Level;
99
import java.util.logging.Logger;
1010

11+
import org.apache.commons.lang3.StringUtils;
1112
import org.joda.time.DateTime;
1213
import org.smartregister.domain.Action;
1314
import org.smartregister.domain.DynamicValue;
@@ -19,6 +20,7 @@
1920

2021
import com.ibm.fhir.model.resource.QuestionnaireResponse;
2122
import com.ibm.fhir.model.resource.Resource;
23+
import org.smartregister.utils.ApplicationConstants;
2224

2325
/**
2426
* @author Samuel Githengi created on 06/15/20
@@ -71,6 +73,7 @@ public void generateTask(Resource resource, Action action, String planIdentifier
7173
}
7274
task.setRequester(username);
7375
task.setOwner(username);
76+
task.setReasonReference(getReasonReference(resource));
7477
taskDao.saveTask(task, questionnaireResponse);
7578
logger.info("Created task " + task.toString());
7679
}
@@ -154,5 +157,20 @@ private void evaluateDynamicValues(Resource resource, Action action, Task task)
154157
logger.log(Level.SEVERE, "Exception occurred while updating properties" + e, e);
155158
}
156159
}
157-
160+
161+
private String getReasonReference(Resource resource) {
162+
String reasonReference = null;
163+
if (resource instanceof QuestionnaireResponse) {
164+
QuestionnaireResponse questionnaireResponse = (QuestionnaireResponse) resource;
165+
for (QuestionnaireResponse.Item item : questionnaireResponse.getItem()) {
166+
if (StringUtils.isNotBlank(item.getLinkId().getValue()) && item.getLinkId().getValue().equals(ApplicationConstants.EventConstants.EVENT_ID)) {
167+
String eventId = item.getAnswer() != null && !item.getAnswer().isEmpty() ?
168+
item.getAnswer().get(0).getValue().as(com.ibm.fhir.model.type.String.class).getValue() : null;
169+
reasonReference = eventId;
170+
break;
171+
}
172+
}
173+
}
174+
return reasonReference;
175+
}
158176
}

src/main/java/org/smartregister/utils/ApplicationConstants.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,8 @@ interface PropertiesConstants {
88
String HL7_TERMINOLOGY_URL = "hl7.terminology.url";
99
}
1010

11+
interface EventConstants {
12+
String EVENT_ID = "eventId";
13+
}
14+
1115
}

src/test/java/org/smartregister/converters/EventConverterTest.java

Lines changed: 46 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ public void testConvertEventToQuestionnaireResponse() {
6060
questionnaireResponse.getItem().get(3).getAnswer().get(0).getValue().as(com.ibm.fhir.model.type.String.class)
6161
.getValue(), event.getTeam());
6262
int itemsSize = 0;
63-
itemsSize = 4 + event.getIdentifiers().size() + event.getObs().size() + sizeOfDetailsWithNonEmptyValues(
63+
itemsSize = 5 + event.getIdentifiers().size() + event.getObs().size() + sizeOfDetailsWithNonEmptyValues(
6464
event.getDetails());
6565
assertEquals(questionnaireResponse.getItem().size(), itemsSize);
6666
System.out.println(questionnaireResponse);
@@ -138,6 +138,51 @@ public void testConvertEventToQuestionnaireResponseShouldHandleObsWithoutFieldCo
138138
assertEquals(String.valueOf(7), existingLLIHNs.getAnswer().get(0).getValue().as(com.ibm.fhir.model.type.String.class).getValue());
139139
}
140140

141+
@Test
142+
public void testConvertEventToQuestionnaireResponseShouldPopulateEventId() {
143+
Event event;
144+
event = gson.fromJson(EVENT_JSON, Event.class);
145+
event.setChildLocationId("child-location-id");
146+
event.setEventType("event-type");
147+
event.setEntityType("entity-type");
148+
event.setLocationId("location-id");
149+
event.setProviderId("provider-id");
150+
event.setBaseEntityId("base-entity-id");
151+
event.setTeam("team");
152+
event.setTeamId("team-id");
153+
QuestionnaireResponse questionnaireResponse = EventConverter.convertEventToEncounterResource(event);
154+
assertNotNull(questionnaireResponse);
155+
assertEquals(questionnaireResponse.getSubject().getReference().getValue(), event.getBaseEntityId());
156+
assertEquals(questionnaireResponse.getStatus().getValueAsEnumConstant().value(), "completed");
157+
assertEquals(questionnaireResponse.getAuthor().getReference().getValue(), event.getProviderId());
158+
assertEquals(questionnaireResponse.getMeta().getVersionId().getValue(), String.valueOf(event.getServerVersion()));
159+
assertEquals(questionnaireResponse.getItem().get(0).getLinkId().getValue(), "locationId");
160+
assertEquals(
161+
questionnaireResponse.getItem().get(0).getAnswer().get(0).getValue().as(com.ibm.fhir.model.type.String.class)
162+
.getValue(), event.getLocationId());
163+
assertEquals(questionnaireResponse.getItem().get(1).getLinkId().getValue(), "childLocationId");
164+
assertEquals(
165+
questionnaireResponse.getItem().get(1).getAnswer().get(0).getValue().as(com.ibm.fhir.model.type.String.class)
166+
.getValue(), event.getChildLocationId());
167+
assertEquals(questionnaireResponse.getItem().get(2).getLinkId().getValue(), "teamId");
168+
assertEquals(
169+
questionnaireResponse.getItem().get(2).getAnswer().get(0).getValue().as(com.ibm.fhir.model.type.String.class)
170+
.getValue(), event.getTeamId());
171+
assertEquals(questionnaireResponse.getItem().get(3).getLinkId().getValue(), "team");
172+
assertEquals(
173+
questionnaireResponse.getItem().get(3).getAnswer().get(0).getValue().as(com.ibm.fhir.model.type.String.class)
174+
.getValue(), event.getTeam());
175+
assertEquals(questionnaireResponse.getItem().get(4).getLinkId().getValue(), "eventId");
176+
assertEquals(
177+
questionnaireResponse.getItem().get(4).getAnswer().get(0).getValue().as(com.ibm.fhir.model.type.String.class)
178+
.getValue(), event.getId());
179+
int itemsSize = 0;
180+
itemsSize = 5 + event.getIdentifiers().size() + event.getObs().size() + sizeOfDetailsWithNonEmptyValues(
181+
event.getDetails());
182+
assertEquals(questionnaireResponse.getItem().size(), itemsSize);
183+
System.out.println(questionnaireResponse);
184+
}
185+
141186
private int sizeOfDetailsWithNonEmptyValues(Map<String, String> details) {
142187
int size = 0;
143188
for (Map.Entry<String, String> entry : details.entrySet()) {

src/test/java/org/smartregister/pathevaluator/task/TaskHelperTest.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -225,4 +225,27 @@ public void testUpdateTaskWhenQuestionResponseIsNotNullShouldUpdateTaskUsingPare
225225
assertEquals("Complete", updatedTask.getBusinessStatus());
226226

227227
}
228+
229+
@Test
230+
public void testGenerateTaskWhenResourceIsQuestionResponseShouldPopulateTaskReasonReference() {
231+
String planIdentifier = UUID.randomUUID().toString();
232+
String jurisdiction = "12123";
233+
String userName = "opensrp";
234+
String eventId = "event-Id-1";
235+
Gson gson = new GsonBuilder().registerTypeAdapter(DateTime.class, new TaskDateTimeTypeConverter())
236+
.registerTypeAdapter(LocalDate.class, new DateTypeConverter()).create();
237+
238+
Event event = gson.fromJson(TestData.MOSQUITTO_COLLECTION_EVENT, Event.class);
239+
event.setId(eventId);
240+
QuestionnaireResponse eventQuestionnaire = EventConverter.convertEventToEncounterResource(event);
241+
242+
// Call the method under test
243+
taskHelper.generateTask(eventQuestionnaire,action,planIdentifier,jurisdiction,userName,null);
244+
245+
// Perform verifications and assertions
246+
verify(taskDao, times(1)).saveTask(taskCaptor.capture(),any());
247+
Task generatedTask = taskCaptor.getValue();
248+
assertEquals(eventId, generatedTask.getReasonReference());
249+
250+
}
228251
}

0 commit comments

Comments
 (0)