From 5a7a09817fce7b54f78f882e1c8582c52b83a4c9 Mon Sep 17 00:00:00 2001 From: Mariya Date: Wed, 11 Oct 2023 17:19:10 +0530 Subject: [PATCH] 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(