From 0ca4083c16860b988dc1182268d7a022447cbc3c Mon Sep 17 00:00:00 2001 From: Mariya Date: Wed, 11 Oct 2023 12:32:07 +0530 Subject: [PATCH 1/3] Database upload completed --- .../HemoCubeBufferCheckFragment.kt | 37 +++++++++++++++++-- 1 file changed, 34 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/example/hpostesting/presentation/buffercheck/HemoCubeBufferCheckFragment.kt b/app/src/main/java/com/example/hpostesting/presentation/buffercheck/HemoCubeBufferCheckFragment.kt index e8fb957..a8b010e 100644 --- a/app/src/main/java/com/example/hpostesting/presentation/buffercheck/HemoCubeBufferCheckFragment.kt +++ b/app/src/main/java/com/example/hpostesting/presentation/buffercheck/HemoCubeBufferCheckFragment.kt @@ -1,6 +1,7 @@ package com.example.hpostesting.presentation.buffercheck import android.content.Context +import android.content.Intent import android.content.SharedPreferences import android.os.Bundle import android.view.LayoutInflater @@ -10,12 +11,14 @@ import android.widget.Toast import androidx.fragment.app.Fragment import androidx.fragment.app.activityViewModels import androidx.lifecycle.MutableLiveData +import androidx.lifecycle.lifecycleScope import com.example.hpostesting.data.DataHolder import com.example.hpostesting.data.constant.Constants import com.example.hpostesting.data.constant.HemoCubeCommands import com.example.hpostesting.data.model.patient.DeviceData import com.example.hpostesting.data.model.patient.toHemoCubeTestData import com.example.hpostesting.presentation.UsbServiceListener +import com.example.hpostesting.presentation.dashboard.DashboardActivity import com.example.hpostesting.presentation.hemocube.HemoCubeViewModel import com.example.hpostesting.presentation.utils.MyDialogListener import com.example.hpostesting.presentation.utils.UIUtils @@ -23,6 +26,7 @@ import com.google.firebase.crashlytics.ktx.crashlytics import com.google.firebase.ktx.Firebase import `in`.sminnovations.hpostesting.R import `in`.sminnovations.hpostesting.databinding.FragmentHemoCubeReferenceBinding +import kotlinx.coroutines.launch import kotlin.math.log10 class HemoCubeBufferCheckFragment : Fragment() { @@ -32,6 +36,7 @@ class HemoCubeBufferCheckFragment : Fragment() { private lateinit var sharedPreferences: SharedPreferences private var currentDeviceData: DeviceData? = null private var resultData: String = "" + private var isOnline = false private val messages = MutableLiveData() private var isTestOngoing = false private var startListening = MutableLiveData(false) @@ -52,14 +57,34 @@ class HemoCubeBufferCheckFragment : Fragment() { private fun initViews() { binding.btnKit.visibility = View.GONE - binding.btnSubmit.visibility = View.GONE binding.etBloodGroup.visibility = View.GONE listenToHemoCube() startBufferProcess() + + binding.btnSubmit.setOnClickListener { + activity?.runOnUiThread { + binding.progressBar.visibility = View.VISIBLE + } + hemoCubeViewModel.uploadHemoCubeResultToDatabase( + isOnline, true, sharedPreferences.getString(Constants.KIT_NUMBER, "") + ) + } + binding.btnSubmit.isEnabled = false + binding.btnSubmit.isClickable = false } private fun observeViewModel() { + hemoCubeViewModel.fireBaseUpload.observe(viewLifecycleOwner) { result -> + if (result == "Success") { + showToast("Test Results Uploaded Successfully") + } + if (result == "Local") { + showToast("Internet not available, test details stored locally") + startActivity(Intent(requireActivity(), DashboardActivity::class.java)) + } + binding.progressBar.visibility = View.GONE + } hemoCubeViewModel.deviceData.observe(viewLifecycleOwner) { currentDeviceData = it } @@ -74,6 +99,7 @@ class HemoCubeBufferCheckFragment : Fragment() { Toast.LENGTH_SHORT ).show() } + isOnline = isNetworkAvailable } messages.observe(viewLifecycleOwner) { @@ -121,8 +147,13 @@ class HemoCubeBufferCheckFragment : Fragment() { stringData.contains("ERROR 500") -> showError500Dialog() stringData.contains("ERROR 501") -> showError501Dialog() stringData.contains("#Buffer Completed") -> showStartSampleDialog() - stringData.contains("#Sample Completed") -> fetchResult() - + stringData.contains("#Sample Completed") -> { + activity?.runOnUiThread { + binding.btnSubmit.isEnabled = true + binding.btnSubmit.isClickable = true + } + fetchResult() + } stringData.contains("RESULT") || resultData.contains("REND") -> { var validString: String val results: List From 5a7a09817fce7b54f78f882e1c8582c52b83a4c9 Mon Sep 17 00:00:00 2001 From: Mariya Date: Wed, 11 Oct 2023 17:19:10 +0530 Subject: [PATCH 2/3] Buffercheck data Database Upload --- .../data/repository/DatabaseRepository.kt | 23 ++++--- .../HemoCubeBufferCheckFragment.kt | 2 +- .../hemocube/HemoCubeViewModel.kt | 61 +++++++++++++++++++ 3 files changed, 78 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/com/example/hpostesting/data/repository/DatabaseRepository.kt b/app/src/main/java/com/example/hpostesting/data/repository/DatabaseRepository.kt index eb0df6f..204273e 100644 --- a/app/src/main/java/com/example/hpostesting/data/repository/DatabaseRepository.kt +++ b/app/src/main/java/com/example/hpostesting/data/repository/DatabaseRepository.kt @@ -1,25 +1,18 @@ package com.example.hpostesting.data.repository -import android.content.Context import android.net.Uri -import androidx.room.Room -import com.example.hpostesting.data.dao.MyDatabase import com.example.hpostesting.data.model.PendingUploads import com.example.hpostesting.data.model.Response import com.example.hpostesting.data.model.patient.DeviceData import com.example.hpostesting.data.model.patient.HemoCubeTestData import com.example.hpostesting.data.model.patient.UserData -import com.google.android.datatransport.runtime.dagger.Provides import com.google.firebase.crashlytics.ktx.crashlytics import com.google.firebase.firestore.FirebaseFirestore import com.google.firebase.firestore.ktx.firestore import com.google.firebase.ktx.Firebase import com.google.firebase.storage.ktx.storage -import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.tasks.await -import kotlinx.coroutines.withContext import java.io.File -import javax.inject.Singleton class DatabaseRepository : Repository { @@ -57,6 +50,22 @@ class DatabaseRepository : Repository { } } + suspend fun addTestToDatabaseforBufferCheck(data: HemoCubeTestData?): Response { + return try { + val userdata = db.collection("patientData").whereEqualTo("_id", data!!._id).get().await() + if (userdata.documents.isNotEmpty()) { + userdata.documents.forEach { + db.collection("patientData").document(it.id).update("testStatus", true) + } + } + db.collection("buffers").add(data!!).await() + Response.Success(data!!._id) + } catch (e: Exception) { + Firebase.crashlytics.recordException(e) + Response.Error(e) + } + } + suspend fun uploadFileToStorage(patientID: String, filePath: String): Response { try { diff --git a/app/src/main/java/com/example/hpostesting/presentation/buffercheck/HemoCubeBufferCheckFragment.kt b/app/src/main/java/com/example/hpostesting/presentation/buffercheck/HemoCubeBufferCheckFragment.kt index a8b010e..36749cf 100644 --- a/app/src/main/java/com/example/hpostesting/presentation/buffercheck/HemoCubeBufferCheckFragment.kt +++ b/app/src/main/java/com/example/hpostesting/presentation/buffercheck/HemoCubeBufferCheckFragment.kt @@ -65,7 +65,7 @@ class HemoCubeBufferCheckFragment : Fragment() { activity?.runOnUiThread { binding.progressBar.visibility = View.VISIBLE } - hemoCubeViewModel.uploadHemoCubeResultToDatabase( + hemoCubeViewModel.uploadHemoCubeResultToDatabaseforbuffercheck( isOnline, true, sharedPreferences.getString(Constants.KIT_NUMBER, "") ) } diff --git a/app/src/main/java/com/example/hpostesting/presentation/hemocube/HemoCubeViewModel.kt b/app/src/main/java/com/example/hpostesting/presentation/hemocube/HemoCubeViewModel.kt index 33cae71..03d7e5e 100644 --- a/app/src/main/java/com/example/hpostesting/presentation/hemocube/HemoCubeViewModel.kt +++ b/app/src/main/java/com/example/hpostesting/presentation/hemocube/HemoCubeViewModel.kt @@ -69,6 +69,36 @@ class HemoCubeViewModel @Inject constructor( } } + + + fun uploadHemoCubeResultToDatabaseforbuffercheck(isOnline: Boolean, testStatus: Boolean, kitSerial: String?) = + viewModelScope.launch { + if (kitSerial != null) { + testDetails?.kitSerial = kitSerial + } + testDetails?.testStatus = testStatus + + try { + if (isOnline) { + parseData() + addResultTestToDbforbuffercheck() + } else { + parseData() + testDetails?.testTime = SimpleDateFormat( + "yyyy-MM-dd HH:mm:ss", Locale.getDefault() + ).format(Calendar.getInstance().time) + hemoCubeDao.insertAll(testDetails!!) + fireBaseUpload.postValue("Local") + } + } catch (e: Exception) { + Log.e("Testdb", "Upload failed: ${e.message}") + } + } + + + + + fun getDeviceData(deviceId: String?) = viewModelScope.launch { deviceData.postValue(deviceId?.let { repository.getDeviceDataById(it) }) } @@ -126,6 +156,37 @@ class HemoCubeViewModel @Inject constructor( } } + + private fun addResultTestToDbforbuffercheck() { + viewModelScope.launch { + try { + testDetails!!.reportUploadTime = SimpleDateFormat( + "yyyy-MM-dd HH:mm:ss", Locale.getDefault() + ).format(Calendar.getInstance().time) + + when (val response = repository.addTestToDatabaseforBufferCheck(testDetails)) { + is Response.Success -> { + val kitCount = sharedPreference.getInt(Constants.KIT_COUNT, 0) + with(sharedPreference.edit()) { + putInt(Constants.KIT_COUNT, kitCount.plus(1)) + apply() + } + Log.i("Testdb", "Data uploaded to Firestore successfully") + fireBaseUpload.postValue("Success") + } + + is Response.Error -> { + Log.e("Testdb", "Error uploading data to Firestore: $response") + fireBaseUpload.postValue("Error") + } + } + } catch (e: Exception) { + Log.e("Testdb", "Exception during data upload: ${e.message}") + fireBaseUpload.postValue("Error") + } + } + } + fun bulkAddResultTestToDb(userData: HemoCubeTestData) { viewModelScope.launch { userData.reportUploadTime = SimpleDateFormat( From f8ac0e81cec0f31e628e9c3b1d1abd3445fdb273 Mon Sep 17 00:00:00 2001 From: Mariya Date: Wed, 11 Oct 2023 23:22:11 +0530 Subject: [PATCH 3/3] Buffercheck data Database Upload --- .../presentation/buffercheck/HemoCubeBufferCheckFragment.kt | 2 +- .../hpostesting/presentation/hemocube/HemoCubeViewModel.kt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/example/hpostesting/presentation/buffercheck/HemoCubeBufferCheckFragment.kt b/app/src/main/java/com/example/hpostesting/presentation/buffercheck/HemoCubeBufferCheckFragment.kt index 36749cf..3d5220b 100644 --- a/app/src/main/java/com/example/hpostesting/presentation/buffercheck/HemoCubeBufferCheckFragment.kt +++ b/app/src/main/java/com/example/hpostesting/presentation/buffercheck/HemoCubeBufferCheckFragment.kt @@ -65,7 +65,7 @@ class HemoCubeBufferCheckFragment : Fragment() { activity?.runOnUiThread { binding.progressBar.visibility = View.VISIBLE } - hemoCubeViewModel.uploadHemoCubeResultToDatabaseforbuffercheck( + hemoCubeViewModel.uploadHemoCubeResultToDatabaseforbuffercheckN( isOnline, true, sharedPreferences.getString(Constants.KIT_NUMBER, "") ) } diff --git a/app/src/main/java/com/example/hpostesting/presentation/hemocube/HemoCubeViewModel.kt b/app/src/main/java/com/example/hpostesting/presentation/hemocube/HemoCubeViewModel.kt index 03d7e5e..b215431 100644 --- a/app/src/main/java/com/example/hpostesting/presentation/hemocube/HemoCubeViewModel.kt +++ b/app/src/main/java/com/example/hpostesting/presentation/hemocube/HemoCubeViewModel.kt @@ -71,7 +71,7 @@ class HemoCubeViewModel @Inject constructor( - fun uploadHemoCubeResultToDatabaseforbuffercheck(isOnline: Boolean, testStatus: Boolean, kitSerial: String?) = + fun uploadHemoCubeResultToDatabaseforbuffercheckN(isOnline: Boolean, testStatus: Boolean, kitSerial: String?) = viewModelScope.launch { if (kitSerial != null) { testDetails?.kitSerial = kitSerial