Skip to content
Draft
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
Enable updating a task for a certain entity referenced in the update
  • Loading branch information
ekigamba committed Nov 30, 2020
commit 979353d062f84ab016ae1d69541909119e2f3b24
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ public interface TaskDao {
*/
void saveTask(org.smartregister.domain.Task task, QuestionnaireResponse questionnaireResponse);

boolean checkIfTaskExists(String baseEntityId,String juridiction, String planIdentifier, String code);
boolean checkIfTaskExists(String baseEntityId,String jurisdiction, String planIdentifier, String code);

List<Task> findAllTasksForEntity(String id);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,7 @@ public void evaluateResource(DomainResource resource, QuestionnaireResponse ques
: questionnaireResponse.toBuilder().contained(Collections.singleton(resource)).build(),
action, planIdentifier, triggerEvent)) {
if (action.getType().equals(Action.ActionType.UPDATE)) {
taskHelper.updateTask(resource, action);
taskHelper.updateTask(resource, action, planIdentifier);
} else {
taskHelper.generateTask(resource, action, planIdentifier, jurisdictionCode,
username, questionnaireResponse);
Expand Down
40 changes: 23 additions & 17 deletions src/main/java/org/smartregister/pathevaluator/task/TaskHelper.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
package org.smartregister.pathevaluator.task;

import java.lang.reflect.Field;
import java.util.List;
import java.util.UUID;
import java.util.logging.Level;
import java.util.logging.Logger;
Expand Down Expand Up @@ -75,27 +76,32 @@ public void generateTask(DomainResource resource, Action action, String planIden
}
}

public void updateTask(DomainResource resource, Action action) {
public void updateTask(DomainResource resource, Action action, String planIdentifier) {
TaskDao taskDao = PathEvaluatorLibrary.getInstance().getTaskProvider().getTaskDao();
Task task = taskDao.getTaskByIdentifier(resource.getId());
try {
for (DynamicValue dynamicValue : action.getDynamicValue()) {
Field aField = task.getClass().getDeclaredField(dynamicValue.getPath());
aField.setAccessible(true);
if (aField.getType().isAssignableFrom(Task.TaskStatus.class)) {
aField.set(task, Task.TaskStatus.get(pathEvaluatorLibrary.evaluateStringExpression(resource,dynamicValue.getExpression().getExpression()).string()));
} else if (aField.getType().isAssignableFrom(String.class)) {
aField.set(task, pathEvaluatorLibrary.evaluateStringExpression(resource,dynamicValue.getExpression().getExpression()).string());
} else {
throw new IllegalArgumentException();
List<com.ibm.fhir.model.resource.Task> tasks = taskDao.findTasksForEntity(resource.getId(), planIdentifier);

for (com.ibm.fhir.model.resource.Task task: tasks) {
Task opensrpTask = taskDao.getTaskByIdentifier(task.getId());

try {
for (DynamicValue dynamicValue : action.getDynamicValue()) {
Field aField = task.getClass().getDeclaredField(dynamicValue.getPath());
aField.setAccessible(true);
if (aField.getType().isAssignableFrom(Task.TaskStatus.class)) {
aField.set(task, Task.TaskStatus.get(pathEvaluatorLibrary.evaluateStringExpression(resource,dynamicValue.getExpression().getExpression()).string()));
} else if (aField.getType().isAssignableFrom(String.class)) {
aField.set(task, pathEvaluatorLibrary.evaluateStringExpression(resource,dynamicValue.getExpression().getExpression()).string());
} else {
throw new IllegalArgumentException();
}
}
}
}
catch (Exception e) {
logger.log(Level.SEVERE, "Exception occurred while updating properties using Reflection" + e);
}
catch (Exception e) {
logger.log(Level.SEVERE, "Exception occurred while updating properties using Reflection" + e);
}

taskDao.updateTask(task);
taskDao.updateTask(opensrpTask);
}
}

private DateTime getDateTime(ExecutionPeriod executionPeriod, boolean start) {
Expand Down