17
17
package org.smartregister.fhircore.quest.ui.dialog
18
18
19
19
import androidx.lifecycle.ViewModel
20
- import androidx.lifecycle.viewModelScope
21
20
import dagger.hilt.android.lifecycle.HiltViewModel
21
+ import java.util.Date
22
22
import javax.inject.Inject
23
- import kotlinx.coroutines.launch
24
- import kotlinx.coroutines.withContext
23
+ import org.hl7.fhir.r4.model.CodeableConcept
24
+ import org.hl7.fhir.r4.model.Coding
25
+ import org.hl7.fhir.r4.model.Flag
26
+ import org.hl7.fhir.r4.model.Identifier
27
+ import org.hl7.fhir.r4.model.Period
28
+ import org.hl7.fhir.r4.model.QuestionnaireResponse
25
29
import org.hl7.fhir.r4.model.QuestionnaireResponse.QuestionnaireResponseStatus
26
30
import org.smartregister.fhircore.engine.configuration.QuestionnaireConfig
27
31
import org.smartregister.fhircore.engine.data.local.DefaultRepository
28
32
import org.smartregister.fhircore.engine.util.DispatcherProvider
33
+ import org.smartregister.fhircore.engine.util.extension.asReference
29
34
30
35
@HiltViewModel
31
36
class AlertDialogViewModel
@@ -43,22 +48,64 @@ constructor(
43
48
return
44
49
}
45
50
46
- viewModelScope.launch {
47
- withContext(dispatcherProvider.io()) {
48
- val questionnaireResponse =
49
- defaultRepository.searchQuestionnaireResponse(
50
- resourceId = questionnaireConfig.resourceIdentifier!! ,
51
- resourceType = questionnaireConfig.resourceType!! ,
52
- questionnaireId = questionnaireConfig.id,
53
- encounterId = null ,
54
- questionnaireResponseStatus = QuestionnaireResponseStatus .INPROGRESS .toCode(),
55
- )
51
+ val questionnaireResponse =
52
+ defaultRepository.searchQuestionnaireResponse(
53
+ resourceId = questionnaireConfig.resourceIdentifier!! ,
54
+ resourceType = questionnaireConfig.resourceType!! ,
55
+ questionnaireId = questionnaireConfig.id,
56
+ encounterId = null ,
57
+ questionnaireResponseStatus = QuestionnaireResponseStatus .INPROGRESS .toCode(),
58
+ )
56
59
57
- if (questionnaireResponse != null ) {
58
- questionnaireResponse.status = QuestionnaireResponseStatus .STOPPED
59
- defaultRepository.update(questionnaireResponse)
60
+ if (questionnaireResponse != null ) {
61
+ questionnaireResponse.status = QuestionnaireResponseStatus .STOPPED
62
+ defaultRepository.update(questionnaireResponse)
63
+ defaultRepository.addOrUpdate(
64
+ resource = createDeleteDraftFlag(questionnaireConfig, questionnaireResponse),
65
+ )
66
+ }
67
+ }
68
+
69
+ fun createDeleteDraftFlag (
70
+ questionnaireConfig : QuestionnaireConfig ,
71
+ questionnaireResponse : QuestionnaireResponse ,
72
+ ): Flag {
73
+ return Flag ().apply {
74
+ subject =
75
+ questionnaireConfig.resourceType?.let {
76
+ questionnaireConfig.resourceIdentifier?.asReference(
77
+ it,
78
+ )
79
+ }
80
+ identifier =
81
+ listOf (
82
+ Identifier ().apply { value = questionnaireResponse.id },
83
+ )
84
+ status = Flag .FlagStatus .ACTIVE
85
+ code =
86
+ CodeableConcept ().apply {
87
+ coding =
88
+ listOf (
89
+ Coding ().apply {
90
+ system = FLAG_SYSTEM
91
+ code = FLAG_CODE
92
+ display = FLAG_DISPLAY
93
+ },
94
+ )
95
+ text = FLAG_TEXT
96
+ }
97
+ period =
98
+ Period ().apply {
99
+ start = Date ()
100
+ end = Date ()
60
101
}
61
- }
62
102
}
63
103
}
104
+
105
+ companion object {
106
+ const val FLAG_SYSTEM = " http://smartregister.org/"
107
+ const val FLAG_CODE = " delete_draft"
108
+ const val FLAG_DISPLAY = " Delete Draft"
109
+ const val FLAG_TEXT = " QR Draft has been deleted"
110
+ }
64
111
}
0 commit comments