16
16
17
17
package org.smartregister.fhircore.engine.ui.questionnaire.items
18
18
19
+ import ca.uhn.fhir.rest.gclient.TokenClientParam
20
+ import ca.uhn.fhir.rest.param.ParamPrefixEnum
19
21
import com.google.android.fhir.FhirEngine
20
22
import com.google.android.fhir.get
21
23
import com.google.android.fhir.search.Operation
22
24
import com.google.android.fhir.search.StringFilterModifier
25
+ import com.google.android.fhir.search.filter.TokenParamFilterCriterion
23
26
import com.google.android.fhir.search.search
24
27
import com.google.gson.Gson
25
28
import com.google.gson.reflect.TypeToken
26
29
import javax.inject.Inject
27
30
import org.hl7.fhir.r4.model.Binary
31
+ import org.hl7.fhir.r4.model.Coding
32
+ import org.hl7.fhir.r4.model.DateTimeType
28
33
import org.hl7.fhir.r4.model.Patient
29
34
import org.hl7.fhir.r4.model.Reference
35
+ import org.smartregister.fhircore.engine.domain.model.HealthStatus
30
36
import org.smartregister.fhircore.engine.domain.model.LocationHierarchy
31
37
import org.smartregister.fhircore.engine.util.SharedPreferenceKey
32
38
import org.smartregister.fhircore.engine.util.SharedPreferencesHelper
@@ -35,6 +41,7 @@ import org.smartregister.fhircore.engine.util.extension.asReference
35
41
import org.smartregister.fhircore.engine.util.extension.extractAge
36
42
import org.smartregister.fhircore.engine.util.extension.extractName
37
43
import org.smartregister.fhircore.engine.util.extension.extractOfficialIdentifier
44
+ import org.smartregister.fhircore.engine.util.extension.plusYears
38
45
import timber.log.Timber
39
46
40
47
class CustomQuestItemDataProvider
@@ -70,6 +77,13 @@ constructor(
70
77
}
71
78
72
79
suspend fun searchPatients (query : String ): List <PickerPatient > {
80
+ val codings = listOf (HealthStatus .NEWLY_DIAGNOSED_CLIENT , HealthStatus .CLIENT_ALREADY_ON_ART ).map { Coding ().apply {
81
+ system = SystemConstants .PATIENT_TYPE_FILTER_TAG_VIA_META_CODINGS_SYSTEM
82
+ code = it.name.lowercase().replace(" _" , " -" )
83
+ } }.map<Coding ,
84
+ TokenParamFilterCriterion .() - > Unit > { c->
85
+ {value = of(c)}
86
+ }
73
87
val patients =
74
88
fhirEngine.search<Patient > {
75
89
filter(Patient .ACTIVE , { value = of(true ) })
@@ -80,6 +94,7 @@ constructor(
80
94
{ value = of(" female" ) },
81
95
operation = Operation .OR ,
82
96
)
97
+ filter(TokenClientParam (" _tag" ), * codings.toTypedArray(), operation = Operation .OR )
83
98
if (query.contains(Regex (" [0-9]" ))) {
84
99
filter(Patient .IDENTIFIER , { value = of(query) })
85
100
} else {
@@ -114,5 +129,5 @@ data class PickerPatient(
114
129
val id : String? ,
115
130
val gender : String ,
116
131
val age : String ,
117
- val reference : Reference
132
+ val reference : Reference ,
118
133
)
0 commit comments