Skip to content

Commit

Permalink
feat(PNC Child Birth) add Child Birth Form
Browse files Browse the repository at this point in the history
  • Loading branch information
DavidSaruni committed Oct 26, 2024
1 parent 46324b8 commit 8cfb09c
Show file tree
Hide file tree
Showing 18 changed files with 583 additions and 125 deletions.
3 changes: 2 additions & 1 deletion app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ plugins {
}

android {
compileSdk 33
compileSdk 34

defaultConfig {
applicationId "com.kabarak.kabarakmhis"
Expand Down Expand Up @@ -85,6 +85,7 @@ dependencies {
// implementation("com.google.android.fhir:engine:0.1.0-beta02")
implementation("com.google.android.fhir:engine:0.1.0-beta01")
implementation("com.google.android.fhir:data-capture:0.1.0-beta05")
// implementation("com.google.android.fhir:data-capture:1.0.0")
// implementation("com.google.android.fhir:data-capture:0.1.0-beta03")
// implementation 'ca.uhn.hapi.fhir:hapi-fhir-client:5.6.2'

Expand Down
215 changes: 111 additions & 104 deletions app/src/main/AndroidManifest.xml

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ import androidx.annotation.ColorInt

object Constants {

const val DEMO_API_SERVER="https://devnndak.intellisoftkenya.com/api/"
const val DEMO_SERVER="https://devhmis.intellisoftkenya.com/fhir/"
const val DEMO_API_SERVER="https://zkhqhwk2-5000.uks1.devtunnels.ms"
const val DEMO_SERVER="https://zkhqhwk2-8080.uks1.devtunnels.ms"

// const val DEMO_API_SERVER="https://api.mamashub.co.ke/"
// const val DEMO_SERVER="https://api.mamashub.co.ke/fhir/"
Expand Down
9 changes: 9 additions & 0 deletions app/src/main/java/com/kabarak/kabarakmhis/helperclass/Util.kt
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import android.content.res.ColorStateList
import androidx.annotation.IdRes
import androidx.appcompat.app.AppCompatActivity
import androidx.fragment.app.Fragment
import com.google.android.fhir.datacapture.QuestionnaireFragment
import com.google.android.material.shape.MaterialShapeDrawable
import com.google.android.material.shape.RoundedCornerTreatment
import com.google.android.material.shape.ShapeAppearanceModel
Expand Down Expand Up @@ -72,4 +73,12 @@ fun MaterialShapeDrawable.applyStrokeColor(): MaterialShapeDrawable {
fillColor = ColorStateList.valueOf(FILL_COLOR)
strokeColor = ColorStateList.valueOf(STROKE_COLOR)
return this
}

object QuestionnaireUtil {
fun getExtraQuestionnaireJsonString(): String {
val field = QuestionnaireFragment::class.java.getDeclaredField("EXTRA_QUESTIONNAIRE_JSON_STRING")
field.isAccessible = true
return field.get(null) as String
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -272,8 +272,7 @@ class FragmentConfirmChvPatient : Fragment(){

private fun addQuestionnaireFragment(){
val fragment = QuestionnaireFragment()
fragment.arguments =
bundleOf(QuestionnaireFragment.EXTRA_QUESTIONNAIRE_JSON_STRING to viewModel.questionnaire)
fragment.arguments = bundleOf(QuestionnaireUtil.getExtraQuestionnaireJsonString() to viewModel.questionnaire)
childFragmentManager.commit {
add(R.id.add_patient_container, fragment, QUESTIONNAIRE_FRAGMENT_TAG)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ import com.kabarak.kabarakmhis.new_designs.present_pregnancy.PresentPregnancyLis
import com.kabarak.kabarakmhis.new_designs.previous_pregnancy.PreviousPregnancyList
import com.kabarak.kabarakmhis.new_designs.tetanus_diptheria.PreventiveServiceList
import com.kabarak.kabarakmhis.new_designs.weight_monitoring.WeightMonitoringChart
import com.kabarak.kabarakmhis.pnc.ChildBirthView


class MaternalProfileChildrenAdapter(private var entryList: ArrayList<DbMaternalProfileChild>,
Expand Down Expand Up @@ -77,7 +78,7 @@ class MaternalProfileChildrenAdapter(private var entryList: ArrayList<DbMaternal

7.1 -> { context.startActivity(Intent(context, ReferralView::class.java)) }

8.1 -> { context.startActivity(Intent(context, ReferralView::class.java))}
8.1 -> { context.startActivity(Intent(context, ChildBirthView::class.java))}
8.2 -> { context.startActivity(Intent(context, ReferralView::class.java))}
8.3 -> { context.startActivity(Intent(context, ReferralView::class.java))}
8.4 -> { context.startActivity(Intent(context, ReferralView::class.java))}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -134,10 +134,10 @@ class PatientProfile : AppCompatActivity() {

// PNC Visit
val dbMaternalPncVisitList = ArrayList<DbMaternalProfileChild>()
val dbMaternalProfileChild19 = DbMaternalProfileChild(8.1,resources.getDrawable(R.drawable.referral), "ChildBirth")
val dbMaternalProfileChild20 = DbMaternalProfileChild(8.2,resources.getDrawable(R.drawable.referral), "Postnatal Care")
val dbMaternalProfileChild21 = DbMaternalProfileChild(8.3,resources.getDrawable(R.drawable.referral), "Family Planning")
val dbMaternalProfileChild22 = DbMaternalProfileChild(8.4,resources.getDrawable(R.drawable.referral), "Child Health Monitoring")
val dbMaternalProfileChild19 = DbMaternalProfileChild(8.1,resources.getDrawable(R.drawable.childbirth), "ChildBirth")
val dbMaternalProfileChild20 = DbMaternalProfileChild(8.2,resources.getDrawable(R.drawable.postnatalcare), "Postnatal Care")
val dbMaternalProfileChild21 = DbMaternalProfileChild(8.3,resources.getDrawable(R.drawable.childbirth), "Family Planning")
val dbMaternalProfileChild22 = DbMaternalProfileChild(8.4,resources.getDrawable(R.drawable.chm), "Child Health Monitoring")
dbMaternalPncVisitList.addAll(listOf(dbMaternalProfileChild19, dbMaternalProfileChild20, dbMaternalProfileChild21, dbMaternalProfileChild22))


Expand Down
111 changes: 111 additions & 0 deletions app/src/main/java/com/kabarak/kabarakmhis/pnc/ChildAdd.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
package com.kabarak.kabarakmhis.pnc

import android.os.Bundle
import android.util.Log
import androidx.appcompat.app.AppCompatActivity
import androidx.core.os.bundleOf
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import androidx.fragment.app.commit
import ca.uhn.fhir.context.FhirContext
import ca.uhn.fhir.context.FhirVersionEnum
import com.google.android.fhir.datacapture.QuestionnaireFragment
import com.kabarak.kabarakmhis.R
import com.kabarak.kabarakmhis.helperclass.QuestionnaireUtil

class ChildAdd : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_child_add)
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->
val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
insets
}

// Configure a QuestionnaireFragment
val questionnaireJsonString = getStringFromAssets("new-patient-registration.json")

if (savedInstanceState == null && questionnaireJsonString != null) {
supportFragmentManager.commit {
setReorderingAllowed(true)
val fragment = QuestionnaireFragment()
fragment.arguments = bundleOf(QuestionnaireUtil.getExtraQuestionnaireJsonString() to questionnaireJsonString)
add(R.id.fragment_container_view, fragment)
}
} else {
Log.e("ChildAdd", "Failed to load questionnaire JSON")
}

// Get a questionnaire response
val fragment = supportFragmentManager.findFragmentById(R.id.fragment_container_view)
if (fragment is QuestionnaireFragment) {
val questionnaireResponse = fragment.getQuestionnaireResponse()

// Print the response to the log
val jsonParser = FhirContext.forCached(FhirVersionEnum.R4).newJsonParser()
val questionnaireResponseString = jsonParser.encodeResourceToString(questionnaireResponse)
Log.d("response", questionnaireResponseString)
} else {
Log.e("ChildAdd", "QuestionnaireFragment not found")
}
// Submit button callback
supportFragmentManager.setFragmentResultListener(
QuestionnaireFragment.SUBMIT_REQUEST_KEY,
this,
) { _, _ ->
Log.d("ChildAdd", "Submit request received")
submitQuestionnaire()
}
}

private fun getStringFromAssets(fileName: String): String? {
return try {
val inputStream = assets.open(fileName)
val size = inputStream.available()
val buffer = ByteArray(size)
inputStream.read(buffer)
inputStream.close()
String(buffer, Charsets.UTF_8)
} catch (e: Exception) {
e.printStackTrace()
null
}
}

private fun submitQuestionnaire() {
// Retrieve the QuestionnaireFragment
val fragment = supportFragmentManager.findFragmentById(R.id.fragment_container_view)
if (fragment is QuestionnaireFragment) {
// Get the QuestionnaireResponse from the fragment
val questionnaireResponse = fragment.getQuestionnaireResponse()

// Use FHIR's JSON parser to convert QuestionnaireResponse into a JSON string
val fhirContext = FhirContext.forR4()
val jsonParser = fhirContext.newJsonParser()

// Serialize the response to a JSON string
val questionnaireResponseString = jsonParser.encodeResourceToString(questionnaireResponse)

// Log the response (you can replace this with saving to a database or sending to a server)
Log.d("submitQuestionnaire", questionnaireResponseString)

// Optionally, save the response or send it to a server
saveQuestionnaireResponse(questionnaireResponseString)
} else {
Log.e("submitQuestionnaire", "QuestionnaireFragment not found or is null")
}
}

private fun saveQuestionnaireResponse(response: String) {
try {
val outputStream = openFileOutput("questionnaire_response.json", MODE_PRIVATE)
outputStream.write(response.toByteArray(Charsets.UTF_8))
outputStream.close()
Log.d("saveQuestionnaireResponse", "Questionnaire response saved successfully")
} catch (e: Exception) {
e.printStackTrace()
Log.e("saveQuestionnaireResponse", "Failed to save questionnaire response")
}
}
}
26 changes: 26 additions & 0 deletions app/src/main/java/com/kabarak/kabarakmhis/pnc/ChildBirthView.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package com.kabarak.kabarakmhis.pnc

import android.content.Intent
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import com.kabarak.kabarakmhis.R
import kotlinx.android.synthetic.main.activity_child_birth_view.btnAdd

class ChildBirthView : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_child_birth_view)
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->
val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
insets
}

btnAdd.setOnClickListener {
val intent = Intent(this, ChildAdd::class.java)
startActivity(intent)
}
}
}
Binary file added app/src/main/res/drawable/childbirth.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added app/src/main/res/drawable/chm.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added app/src/main/res/drawable/postnatalcare.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
18 changes: 18 additions & 0 deletions app/src/main/res/layout/activity_child_add.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8" ?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/main"
tools:context=".MainActivity"
>

<androidx.fragment.app.FragmentContainerView
android:id="@+id/fragment_container_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>
Loading

0 comments on commit 8cfb09c

Please sign in to comment.