added dialog box
This commit is contained in:
@@ -23,4 +23,7 @@ interface HemoCubeDao {
|
|||||||
|
|
||||||
@Query("UPDATE hemo_cube_test_table SET localFlag = :newValue WHERE _id = :id")
|
@Query("UPDATE hemo_cube_test_table SET localFlag = :newValue WHERE _id = :id")
|
||||||
suspend fun updateFieldById(id: String, newValue: Boolean)
|
suspend fun updateFieldById(id: String, newValue: Boolean)
|
||||||
|
|
||||||
|
@Query("UPDATE hemo_cube_test_table SET isCSVCreated = :newValue WHERE _id = :id")
|
||||||
|
suspend fun updateCSVFieldById(id: String, newValue: Boolean)
|
||||||
}
|
}
|
||||||
@@ -9,6 +9,9 @@ data class HemoCubeTestData(
|
|||||||
var _id: String = "",
|
var _id: String = "",
|
||||||
var name: String = "",
|
var name: String = "",
|
||||||
var birthYear: String = "",
|
var birthYear: String = "",
|
||||||
|
var gender: String = "",
|
||||||
|
var abhaId: String = "",
|
||||||
|
var state: String = "",
|
||||||
var bloodGroup: String = "",
|
var bloodGroup: String = "",
|
||||||
var incubationTime: String = "",
|
var incubationTime: String = "",
|
||||||
var userImageURL: String = "",
|
var userImageURL: String = "",
|
||||||
@@ -33,5 +36,6 @@ data class HemoCubeTestData(
|
|||||||
var deviceRatio: Double? = null,
|
var deviceRatio: Double? = null,
|
||||||
var calculatedRatio: Double? = null,
|
var calculatedRatio: Double? = null,
|
||||||
var coefficients: String? = "",
|
var coefficients: String? = "",
|
||||||
var classificationResult: String = ""
|
var classificationResult: String = "",
|
||||||
|
var isCSVCreated: Boolean = false
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -10,7 +10,10 @@ data class UserData(
|
|||||||
var _id: String = "",
|
var _id: String = "",
|
||||||
var name: String = "",
|
var name: String = "",
|
||||||
var incubationTime: String = "",
|
var incubationTime: String = "",
|
||||||
|
var gender: String = "",
|
||||||
|
var state: String = "",
|
||||||
var birthYear: String = "",
|
var birthYear: String = "",
|
||||||
|
var abhaId: String = "",
|
||||||
var bloodGroup: String = "",
|
var bloodGroup: String = "",
|
||||||
var userImageURL: String = "",
|
var userImageURL: String = "",
|
||||||
var location: Location? = null,
|
var location: Location? = null,
|
||||||
@@ -44,6 +47,9 @@ fun UserData.toHemoCubeTestData() = HemoCubeTestData(
|
|||||||
name = name,
|
name = name,
|
||||||
bloodGroup = bloodGroup,
|
bloodGroup = bloodGroup,
|
||||||
birthYear = birthYear,
|
birthYear = birthYear,
|
||||||
|
gender = gender,
|
||||||
|
state = state,
|
||||||
|
abhaId = abhaId,
|
||||||
userImageURL = userImageURL,
|
userImageURL = userImageURL,
|
||||||
testStatus = testStatus,
|
testStatus = testStatus,
|
||||||
location = location
|
location = location
|
||||||
|
|||||||
@@ -1,6 +1,12 @@
|
|||||||
package com.example.hpostesting.data.repository
|
package com.example.hpostesting.data.repository
|
||||||
|
|
||||||
|
import android.os.Environment
|
||||||
import com.example.hpostesting.data.datasource.LocalFileDataSource
|
import com.example.hpostesting.data.datasource.LocalFileDataSource
|
||||||
|
import com.example.hpostesting.data.model.patient.HemoCubeTestData
|
||||||
|
import com.opencsv.CSVWriter
|
||||||
|
import java.io.File
|
||||||
|
import java.io.FileWriter
|
||||||
|
import java.io.IOException
|
||||||
|
|
||||||
class LocalFileRepository(private val localFileDataSource: LocalFileDataSource) {
|
class LocalFileRepository(private val localFileDataSource: LocalFileDataSource) {
|
||||||
fun saveCsvToDisk(filepath: String, contents: ArrayList<Array<String>>) =
|
fun saveCsvToDisk(filepath: String, contents: ArrayList<Array<String>>) =
|
||||||
@@ -8,4 +14,106 @@ class LocalFileRepository(private val localFileDataSource: LocalFileDataSource)
|
|||||||
|
|
||||||
fun saveTextToDisk(filepath: String, contents: String) =
|
fun saveTextToDisk(filepath: String, contents: String) =
|
||||||
localFileDataSource.saveTextToDisk(filepath, contents)
|
localFileDataSource.saveTextToDisk(filepath, contents)
|
||||||
|
|
||||||
|
|
||||||
|
fun exportDataToCSV(
|
||||||
|
fileName: String, dataList: List<HemoCubeTestData>
|
||||||
|
): Boolean {
|
||||||
|
try {
|
||||||
|
val formattedFileName = fileName.replace(Regex("[^a-zA-Z0-9.-]"), "_") // Replace special characters with underscores
|
||||||
|
val filePath = File(getExternalStorageDirectory(), formattedFileName)
|
||||||
|
val writer = FileWriter(filePath)
|
||||||
|
val csvWriter = CSVWriter(writer)
|
||||||
|
// Write CSV header
|
||||||
|
val header = arrayOf(
|
||||||
|
"_id",
|
||||||
|
"name",
|
||||||
|
"incubationTime",
|
||||||
|
"bloodGroup",
|
||||||
|
"birthYear", // Include other fields from the data class
|
||||||
|
"state",
|
||||||
|
"abhaId",
|
||||||
|
"userImageURL",
|
||||||
|
"location",
|
||||||
|
"reportUploadTime",
|
||||||
|
"testType",
|
||||||
|
"testTime",
|
||||||
|
"testStatus",
|
||||||
|
"gender",
|
||||||
|
"localFlag", // Add more fields as necessary
|
||||||
|
"deviceId",
|
||||||
|
"appVersion",
|
||||||
|
"deviceSerialNumber",
|
||||||
|
"deviceType",
|
||||||
|
"kitSerial",
|
||||||
|
"resultData",
|
||||||
|
"led1Buffer",
|
||||||
|
"led2Buffer",
|
||||||
|
"led1Sample",
|
||||||
|
"led2Sample",
|
||||||
|
"led1Average",
|
||||||
|
"led2Average",
|
||||||
|
"deviceRatio",
|
||||||
|
"calculatedRatio",
|
||||||
|
"coefficients",
|
||||||
|
"classificationResult",
|
||||||
|
"errorMessages",
|
||||||
|
"batteryLevel"
|
||||||
|
)
|
||||||
|
csvWriter.writeNext(header)
|
||||||
|
|
||||||
|
// Write data rows
|
||||||
|
for (data in dataList) {
|
||||||
|
val row = arrayOf(
|
||||||
|
data._id,
|
||||||
|
data.name,
|
||||||
|
data.incubationTime,
|
||||||
|
data.bloodGroup,
|
||||||
|
data.birthYear, // Include other fields similarly
|
||||||
|
data.state,
|
||||||
|
data.abhaId,
|
||||||
|
data.userImageURL,
|
||||||
|
data.location?.toString(),
|
||||||
|
data.reportUploadTime ?: "",
|
||||||
|
data.testType ?: "",
|
||||||
|
data.testTime ?: "",
|
||||||
|
data.testStatus?.toString() ?: "",
|
||||||
|
data.gender,
|
||||||
|
data.localFlag.toString(),
|
||||||
|
data.deviceId ?: "",
|
||||||
|
data.appVersion ?: "",
|
||||||
|
data.deviceSerialNumber,
|
||||||
|
data.deviceType,
|
||||||
|
data.kitSerial,
|
||||||
|
data.resultData,
|
||||||
|
data.led1Buffer?.toString() ?: "",
|
||||||
|
data.led2Buffer?.toString() ?: "",
|
||||||
|
data.led1Sample?.toString() ?: "",
|
||||||
|
data.led2Sample?.toString() ?: "",
|
||||||
|
data.led1Average?.toString() ?: "",
|
||||||
|
data.led2Average?.toString() ?: "",
|
||||||
|
data.deviceRatio?.toString() ?: "",
|
||||||
|
data.calculatedRatio?.toString() ?: "",
|
||||||
|
data.coefficients ?: "",
|
||||||
|
data.classificationResult
|
||||||
|
)
|
||||||
|
csvWriter.writeNext(row)
|
||||||
|
}
|
||||||
|
writer.close()
|
||||||
|
return true
|
||||||
|
} catch (e: IOException) {
|
||||||
|
e.printStackTrace()
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun getExternalStorageDirectory(): File {
|
||||||
|
val folder = File(Environment.getExternalStorageDirectory(), "HposFolder")
|
||||||
|
|
||||||
|
if (!folder.exists()) {
|
||||||
|
folder.mkdirs()
|
||||||
|
}
|
||||||
|
|
||||||
|
return folder
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -123,7 +123,7 @@ class HomeFragment : Fragment() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
binding.btnSaveLocal.setOnClickListener {
|
binding.btnSaveLocal.setOnClickListener {
|
||||||
downloadCsv()
|
context?.let { it1 -> showDownloadDialog(context = it1) }
|
||||||
}
|
}
|
||||||
binding.btnNewKit.setOnClickListener {
|
binding.btnNewKit.setOnClickListener {
|
||||||
with(sharedPreference.edit()) {
|
with(sharedPreference.edit()) {
|
||||||
@@ -397,5 +397,49 @@ class HomeFragment : Fragment() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private fun showDownloadDialog(context: Context) {
|
||||||
|
val builder = AlertDialog.Builder(context)
|
||||||
|
builder.setTitle(R.string.download_db_registration_title)
|
||||||
|
builder.setMessage(R.string.download_db_registration_message)
|
||||||
|
|
||||||
|
builder.setPositiveButton(R.string.downloadcsv) { dialog, _ ->
|
||||||
|
downloadLocalDBData(dialog)
|
||||||
|
}
|
||||||
|
|
||||||
|
builder.setNegativeButton(R.string.cancel) { dialog, _ ->
|
||||||
|
dialog.dismiss()
|
||||||
|
}
|
||||||
|
|
||||||
|
val dialog = builder.create()
|
||||||
|
dialog.show()
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
private fun downloadLocalDBData(dialog: DialogInterface) {
|
||||||
|
hemoCubeViewModel.allUserData.observe(viewLifecycleOwner) { userDataList ->
|
||||||
|
val downloadList = mutableListOf<HemoCubeTestData>()
|
||||||
|
|
||||||
|
userDataList.forEach { userData ->
|
||||||
|
if (!userData.isCSVCreated) {
|
||||||
|
downloadList.add(userData) // Add the userData to downloadList
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (downloadList.isNotEmpty()) {
|
||||||
|
// Call ViewModel function to create CSV with filtered data
|
||||||
|
hemoCubeViewModel.createCSV(downloadList, requireContext())
|
||||||
|
Toast.makeText(requireContext(), "CSV file downloaded successfully", Toast.LENGTH_SHORT).show()
|
||||||
|
} else {
|
||||||
|
Toast.makeText(requireContext(), "CSV file downloaing failed", Toast.LENGTH_SHORT).show()
|
||||||
|
}
|
||||||
|
|
||||||
|
dialog.dismiss()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -12,6 +12,7 @@ import com.example.hpostesting.data.DataHolder
|
|||||||
import com.example.hpostesting.data.NetworkStatusLiveData
|
import com.example.hpostesting.data.NetworkStatusLiveData
|
||||||
import com.example.hpostesting.data.constant.Constants
|
import com.example.hpostesting.data.constant.Constants
|
||||||
import com.example.hpostesting.data.dao.HemoCubeDao
|
import com.example.hpostesting.data.dao.HemoCubeDao
|
||||||
|
import com.example.hpostesting.data.datasource.LocalFileDataSource
|
||||||
import com.example.hpostesting.data.model.Response
|
import com.example.hpostesting.data.model.Response
|
||||||
import com.example.hpostesting.data.model.patient.BufferCheckData
|
import com.example.hpostesting.data.model.patient.BufferCheckData
|
||||||
import com.example.hpostesting.data.model.patient.DeviceData
|
import com.example.hpostesting.data.model.patient.DeviceData
|
||||||
@@ -29,6 +30,7 @@ import javax.inject.Inject
|
|||||||
class HemoCubeViewModel @Inject constructor(
|
class HemoCubeViewModel @Inject constructor(
|
||||||
private val hemoCubeDao: HemoCubeDao,
|
private val hemoCubeDao: HemoCubeDao,
|
||||||
private val repository: DatabaseRepository,
|
private val repository: DatabaseRepository,
|
||||||
|
private val localFileDataSource: LocalFileDataSource,
|
||||||
context: Context,
|
context: Context,
|
||||||
) : ViewModel() {
|
) : ViewModel() {
|
||||||
var isServiceConnected = false
|
var isServiceConnected = false
|
||||||
@@ -229,4 +231,18 @@ class HemoCubeViewModel @Inject constructor(
|
|||||||
fun deleteById(userId: String) = viewModelScope.launch {
|
fun deleteById(userId: String) = viewModelScope.launch {
|
||||||
hemoCubeDao.deleteById(id = userId)
|
hemoCubeDao.deleteById(id = userId)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun createCSV(hemoCubeTestData: List<HemoCubeTestData>, appContext: Context) =
|
||||||
|
viewModelScope.launch {
|
||||||
|
val fileName = "HPOS${getCurrentDate()}.csv"
|
||||||
|
if (localFileDataSource.exportDataToCSV(fileName, hemoCubeTestData)) {
|
||||||
|
hemoCubeTestData.forEach { data ->
|
||||||
|
data.localFlag = true
|
||||||
|
hemoCubeDao.updateCSVFieldById(
|
||||||
|
data._id,
|
||||||
|
true
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user