From 62ee180c3de3f2103cb5dc5f296f31b1e7481453 Mon Sep 17 00:00:00 2001 From: Christopher Seven Phiri Date: Tue, 29 Nov 2022 11:06:14 +0200 Subject: [PATCH 1/3] Update FhirCarePlanGenerator.kt --- .../engine/task/FhirCarePlanGenerator.kt | 32 ++++++++++++++++--- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/android/engine/src/main/java/org/smartregister/fhircore/engine/task/FhirCarePlanGenerator.kt b/android/engine/src/main/java/org/smartregister/fhircore/engine/task/FhirCarePlanGenerator.kt index d88daa47c9..f93f30cb03 100644 --- a/android/engine/src/main/java/org/smartregister/fhircore/engine/task/FhirCarePlanGenerator.kt +++ b/android/engine/src/main/java/org/smartregister/fhircore/engine/task/FhirCarePlanGenerator.kt @@ -18,6 +18,7 @@ package org.smartregister.fhircore.engine.task import com.google.android.fhir.FhirEngine import com.google.android.fhir.get +import com.google.android.fhir.search.search import java.util.Date import javax.inject.Inject import javax.inject.Singleton @@ -125,12 +126,35 @@ constructor(val fhirEngine: FhirEngine, val transformSupportServices: TransformS suspend fun completeTask(id: String, encounterStatus: EncounterStatus?) { fhirEngine.run { + val task = get(id).apply { + this.status = encounterStatusToTaskStatus(encounterStatus) + this.lastModified = Date() + } create( - get(id).apply { - this.status = encounterStatusToTaskStatus(encounterStatus) - this.lastModified = Date() - } + task ) + if (task.status == Task.TaskStatus.COMPLETED) { + val carePlans = search { + filter(CarePlan.SUBJECT, { value = task.`for`.reference }) + } + var carePlanToUpdate: CarePlan? = null + carePlans.forEach { carePlan -> + for((index, value) in carePlan.activity.withIndex()) { + val taskId = task.identifier.first()?.value + if (taskId != null) { + val outcome = value.outcomeReference.find { x -> x.reference.contains(taskId)} + if (outcome != null) { + carePlanToUpdate = carePlan.copy() + carePlanToUpdate?.activity?.set(index, value.apply { + detail.status = CarePlan.CarePlanActivityStatus.COMPLETED + }) + break + } + } + } + } + carePlanToUpdate?.let { update(it) } + } } } From 2dc548ddeaa8aa725d657830845302d17d2d8486 Mon Sep 17 00:00:00 2001 From: Christopher Seven Phiri Date: Tue, 29 Nov 2022 11:25:54 +0200 Subject: [PATCH 2/3] Update FhirCarePlanGenerator.kt --- .../engine/task/FhirCarePlanGenerator.kt | 38 +++++++++---------- 1 file changed, 17 insertions(+), 21 deletions(-) diff --git a/android/engine/src/main/java/org/smartregister/fhircore/engine/task/FhirCarePlanGenerator.kt b/android/engine/src/main/java/org/smartregister/fhircore/engine/task/FhirCarePlanGenerator.kt index f93f30cb03..e21de8d562 100644 --- a/android/engine/src/main/java/org/smartregister/fhircore/engine/task/FhirCarePlanGenerator.kt +++ b/android/engine/src/main/java/org/smartregister/fhircore/engine/task/FhirCarePlanGenerator.kt @@ -126,30 +126,26 @@ constructor(val fhirEngine: FhirEngine, val transformSupportServices: TransformS suspend fun completeTask(id: String, encounterStatus: EncounterStatus?) { fhirEngine.run { - val task = get(id).apply { - this.status = encounterStatusToTaskStatus(encounterStatus) - this.lastModified = Date() - } - create( - task - ) - if (task.status == Task.TaskStatus.COMPLETED) { - val carePlans = search { - filter(CarePlan.SUBJECT, { value = task.`for`.reference }) + val task = + get(id).apply { + this.status = encounterStatusToTaskStatus(encounterStatus) + this.lastModified = Date() } + create(task) + if (task.status == Task.TaskStatus.COMPLETED) { + val carePlans = + search { filter(CarePlan.SUBJECT, { value = task.`for`.reference }) } var carePlanToUpdate: CarePlan? = null carePlans.forEach { carePlan -> - for((index, value) in carePlan.activity.withIndex()) { - val taskId = task.identifier.first()?.value - if (taskId != null) { - val outcome = value.outcomeReference.find { x -> x.reference.contains(taskId)} - if (outcome != null) { - carePlanToUpdate = carePlan.copy() - carePlanToUpdate?.activity?.set(index, value.apply { - detail.status = CarePlan.CarePlanActivityStatus.COMPLETED - }) - break - } + for ((index, value) in carePlan.activity.withIndex()) { + val outcome = value.outcomeReference.find { x -> x.reference.contains(id) } + if (outcome != null) { + carePlanToUpdate = carePlan.copy() + carePlanToUpdate?.activity?.set( + index, + value.apply { detail.status = CarePlan.CarePlanActivityStatus.COMPLETED } + ) + break } } } From 93de0a3acb252280c03c385184d401a1da5e0cbd Mon Sep 17 00:00:00 2001 From: Christopher Seven Phiri Date: Tue, 29 Nov 2022 12:17:30 +0200 Subject: [PATCH 3/3] Update FhirCarePlanGeneratorTest.kt --- .../engine/task/FhirCarePlanGeneratorTest.kt | 37 +++++++++++++++++-- 1 file changed, 34 insertions(+), 3 deletions(-) diff --git a/android/engine/src/test/java/org/smartregister/fhircore/engine/task/FhirCarePlanGeneratorTest.kt b/android/engine/src/test/java/org/smartregister/fhircore/engine/task/FhirCarePlanGeneratorTest.kt index 443c656c5e..80aa5aeecc 100644 --- a/android/engine/src/test/java/org/smartregister/fhircore/engine/task/FhirCarePlanGeneratorTest.kt +++ b/android/engine/src/test/java/org/smartregister/fhircore/engine/task/FhirCarePlanGeneratorTest.kt @@ -39,6 +39,7 @@ import org.hl7.fhir.r4.model.Encounter import org.hl7.fhir.r4.model.Group import org.hl7.fhir.r4.model.Patient import org.hl7.fhir.r4.model.PlanDefinition +import org.hl7.fhir.r4.model.Reference import org.hl7.fhir.r4.model.Resource import org.hl7.fhir.r4.model.ResourceType import org.hl7.fhir.r4.model.StructureMap @@ -244,7 +245,7 @@ class FhirCarePlanGeneratorTest : RobolectricTest() { @Test fun testCompleteTaskNoEncounter() = runTest { coEvery { fhirEngine.create(any()) } answers { listOf() } - + coEvery { fhirEngine.search(any()) } answers { listOf() } coEvery { fhirEngine.get("12345") } returns Task().apply { id = "12345" } runBlocking { @@ -258,7 +259,7 @@ class FhirCarePlanGeneratorTest : RobolectricTest() { @Test fun testCompleteTaskWithEncounter() = runTest { coEvery { fhirEngine.create(any()) } answers { listOf() } - + coEvery { fhirEngine.search(any()) } answers { listOf() } coEvery { fhirEngine.get("12345") } returns Task().apply { id = "12345" } runBlocking { @@ -272,7 +273,7 @@ class FhirCarePlanGeneratorTest : RobolectricTest() { @Test fun testCompleteTaskWithEncounter_TaskStatusFromCode() = runTest { coEvery { fhirEngine.create(any()) } answers { listOf() } - + coEvery { fhirEngine.search(any()) } answers { listOf() } coEvery { fhirEngine.get("12345") } returns Task().apply { id = "12345" } runBlocking { @@ -282,4 +283,34 @@ class FhirCarePlanGeneratorTest : RobolectricTest() { Assert.assertEquals(Task.TaskStatus.INPROGRESS, task.status) } } + + @Test + fun testCompleteTaskCompleteCarePlan() = runTest { + val carePlan = + CarePlan().apply { + activity = + listOf( + CarePlan.CarePlanActivityComponent().let { activity -> + activity.outcomeReference = listOf(Reference("12345")) + activity + } + ) + } + coEvery { fhirEngine.create(any()) } answers { listOf() } + coEvery { fhirEngine.update(any()) } answers {} + coEvery { fhirEngine.get(any()) } returns carePlan + coEvery { fhirEngine.search(any()) } returns listOf(carePlan) + coEvery { fhirEngine.get("12345") } returns Task().apply { id = "12345" } + + runBlocking { + fhirCarePlanGenerator.completeTask("12345", Encounter.EncounterStatus.FINISHED) + + val updatedCarePlan = fhirEngine.get("12345") + Assert.assertNotNull( + updatedCarePlan.activity.find { x -> + x.outcomeReference.find { y -> y.reference == "12345" } != null + } + ) + } + } }