Molbio Data upload

This commit is contained in:
mohamedkaif356
2023-07-18 17:15:01 +05:30
parent b461fa0710
commit e97d533998
4 changed files with 64 additions and 169 deletions

View File

@@ -2,153 +2,39 @@ package com.example.hpostesting.domain
import android.app.job.JobParameters
import android.app.job.JobService
import android.content.Context
import android.content.SharedPreferences
import android.net.ConnectivityManager
import android.net.NetworkCapabilities
import android.net.NetworkInfo
import android.os.Build
import android.util.Log
import androidx.annotation.RequiresApi
import com.example.hpos.api.db.DatabaseHandler
import com.example.hpos.api.db.FileModel
import com.example.hpos.data.DataHolder
import com.google.gson.JsonObject
import okhttp3.MediaType
import okhttp3.MultipartBody
import okhttp3.RequestBody
import retrofit2.Call
import retrofit2.Callback
import retrofit2.Response
import java.io.File
import com.example.hpostesting.data.constant.Constants
import com.example.hpostesting.presentation.testRight.TestRightViewModel
import dagger.hilt.android.AndroidEntryPoint
import javax.inject.Inject
@AndroidEntryPoint
class MyJobScheduler : JobService(){
lateinit var sharedPreference: SharedPreferences
var dummyService = ApiClient.getClient().create(apiService::class.java)
var Flag=0
private lateinit var sharedPreference: SharedPreferences
@Inject
private lateinit var viewModel: TestRightViewModel
override fun onStartJob(p0: JobParameters?): Boolean {
Log.d("jober","job started")
try{
if(isOnline(this))
{
val databaseHandler: DatabaseHandler = DatabaseHandler(this)
val normList:List<FileModel> = databaseHandler.getPendingNormFiles()
Log.d("jober_norm",normList.size.toString())
val testList:List<FileModel> = databaseHandler.getPendingTestFiles()
Log.d("jober_test",testList.size.toString())
val logList:List<FileModel> = databaseHandler.getPendingLogFiles()
Log.d("jober_test",logList.size.toString())
for(normDetails in normList)
{
Log.d("jober_norm",normDetails.normFilename)
var file = File(normDetails.normFilename)
if(file.exists())
{
uploadFile(applicationContext,normDetails.normFilename,normDetails.PatientId,0)
}
viewModel.networkStatusLiveData.observeForever {
if (it) {
fetchInternalDataAndUpload()
}
for(testDetails in testList)
{
Log.d("jober_test",testDetails.testFilename)
var file = File(testDetails.testFilename)
if(file.exists())
{
uploadFile(this,testDetails.testFilename,testDetails.PatientId,1)
}
}
for(logDetails in logList)
{
Log.d("jober_log",logDetails.logFilename)
var file = File(logDetails.logFilename)
if(file.exists())
{
uploadFile(this,logDetails.logFilename,logDetails.PatientId,2)
}
}
}
else
{
Log.d("jober","no net")
}
}
catch (e:Exception)
{
e.printStackTrace()
}
return false
}
fun uploadFile(appContext: Context, filePath: String,pid:String, type:Int) {
val logInfo="log_info"
val devicename= DataHolder.deviceSerialNumber
sharedPreference = appContext.getSharedPreferences(logInfo,Context.MODE_PRIVATE)
var path=filePath
var file = File(path)
if(file.exists())
{
Log.d("jober","getting in fileexist")
val token=sharedPreference.getString("token","")
val reqBody = RequestBody.create(MediaType.parse("text/csv"), file)
val reqString= RequestBody.create(MediaType.parse("text/plain"),devicename)
val formData = MultipartBody.Part.createFormData("raw_data_file", file.name, reqBody)
if (token != null) {
dummyService.uploadPdf(token,formData,reqString).enqueue(object :
Callback<JsonObject> {
override fun onResponse(call: Call<JsonObject>, response: Response<JsonObject>) {
if (response.isSuccessful) {
Log.d("jober","upload success_"+response.body().toString())
Flag=1
} else {
Log.d("jober","upload not success"+response.raw().toString()
)
Flag=0
}
updateFile(appContext,pid,type,Flag)
}
override fun onFailure(call: Call<JsonObject>, t: Throwable) {
Log.d("jober","upload error"+t.toString())
Flag=0
}
})
private fun fetchInternalDataAndUpload() {
val token = sharedPreference.getString(Constants.TOKEN,"")
viewModel.allUserData.observeForever {userList ->
userList.forEach {user ->
if (user.uploadFlag == false) {
viewModel.bulkUploadResultToDatabase(user, token)
}
}
}
else
{
Log.d("filecheck","given file doesn't exist")
}
}
fun updateFile(appContext: Context,pid:String,type:Int,flag:Int)
{
val databaseHandler: DatabaseHandler = DatabaseHandler(appContext)
var fileData=databaseHandler.getFileFromId(pid.toString())
if(fileData!=null)
{
if(type==0) {
fileData.normFlag = flag
}
else if(type==1)
{
fileData.testFlag = flag
}
else if(type==2)
{
fileData.logFlag=flag
}
var vn=databaseHandler.updateFile(fileData)
Log.d("jober",vn.toString()+"updated as :"+flag+" \n$pid\n$type")
}
else
{
Log.d("jober","filedata is null")
}
}
@@ -157,22 +43,4 @@ class MyJobScheduler : JobService(){
return false
}
fun isOnline(context: Context): Boolean {
val cm = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
val n = cm.activeNetwork
if (n != null) {
val nc = cm.getNetworkCapabilities(n)
//It will check for both wifi and cellular network
return nc!!.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) || nc.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)
}
return false
} else {
val netInfo = cm.activeNetworkInfo
return netInfo != null && netInfo.isConnectedOrConnecting
}
}
}

View File

@@ -72,6 +72,15 @@ class HomeFragment : Fragment() {
binding.uploadData.setOnClickListener {
showUploadDialog()
}
//
// val jobScheduler = getSystemService(Context.JOB_SCHEDULER_SERVICE) as JobScheduler
//
// val jobInfo = JobInfo.Builder(1, ComponentName(this, MyJobScheduler::class.java))
// .setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY)
// .setPersisted(true)
// .setPeriodic(30 * 60 * 1000)
// .build()
// jobScheduler.schedule(jobInfo)
}
private fun login()
@@ -239,12 +248,13 @@ class HomeFragment : Fragment() {
}
private fun uploadLocalDBData(dialog: DialogInterface) {
val token = sharedPreference.getString(Constants.TOKEN,"")
viewModel.allUserData.observe(viewLifecycleOwner) { userDataList ->
if (userDataList.isEmpty()) {
dialog.dismiss()
} else {
userDataList.forEach { userData ->
viewModel.bulkUploadResultToDatabase(userData)
viewModel.bulkUploadResultToDatabase(userData, token!!)
}
dialog.dismiss()
Toast.makeText(

View File

@@ -51,12 +51,20 @@ class TestRightResults : Fragment() {
updateResults()
viewModel.fireBaseUpload.observe(viewLifecycleOwner) {
if (it == "Success") {
Toast.makeText(
requireContext(), "Test Results Upload Successfully", Toast.LENGTH_SHORT
).show()
when (it) {
"Success" -> {
Toast.makeText(
requireContext(), "Test Results Upload Successfully", Toast.LENGTH_SHORT
).show()
binding.progressBar.visibility = View.GONE
}
"Loading" -> {
binding.progressBar.visibility = View.VISIBLE
}
else -> {
Toast.makeText(requireContext(), "Test upload failed, please try again", Toast.LENGTH_SHORT).show()
}
}
binding.progressBar.visibility = View.GONE
}
}
@@ -166,7 +174,7 @@ class TestRightResults : Fragment() {
}
viewModel.networkStatusLiveData.observe(viewLifecycleOwner) { isNetworkAvailable ->
val deviceStaticId = sharedPreference.getString(Constants.USER_ID, "")
val token=sharedPreference.getString(Constants.TOKEN,"")
val token = sharedPreference.getString(Constants.TOKEN,"")
if (isNetworkAvailable) {
if (token != null) {
viewModel.uploadResultToDatabase(requireContext(), true, deviceStaticId!!,token)

View File

@@ -1,7 +1,6 @@
package com.example.hpostesting.presentation.testRight
import android.content.Context
import android.content.SharedPreferences
import android.net.Uri
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
@@ -62,9 +61,7 @@ class TestRightViewModel @Inject constructor(
val loginResponse = MutableLiveData<Result<MolbioLogin>>()
val fireBaseUpload = MutableLiveData<String>()
lateinit var sharedPreference: SharedPreferences
val testDetails = DataHolder.selectedTest
var Flag=0
private val _networkStatusLiveData = NetworkStatusLiveData(context)
val networkStatusLiveData: LiveData<Boolean>
get() = _networkStatusLiveData
@@ -455,7 +452,6 @@ class TestRightViewModel @Inject constructor(
is Response.Success -> {
uploadToMolbio(csvFilePath, logTxtFilePath, token)
}
else -> {}
}
}
@@ -485,6 +481,9 @@ class TestRightViewModel @Inject constructor(
is Result.Success -> {
fireBaseUpload.postValue("Success")
}
is Result.Error -> {
fireBaseUpload.postValue(upload.exception.message)
}
else -> {
@@ -495,6 +494,7 @@ class TestRightViewModel @Inject constructor(
}
fun uploadResultToDatabase(context: Context, isOnline: Boolean, deviceSerialNumber: String, token: String) = viewModelScope.launch {
fireBaseUpload.postValue("Loading")
val csvFilePath = MyUtils.getAppFolderPath(context) + getCSVFileName()
val logTxtFilePath = MyUtils.getAppFolderPath(context) + getLogFileName()
testDetails?.csvPath = csvFilePath
@@ -527,11 +527,14 @@ class TestRightViewModel @Inject constructor(
testDetails?.testTime = SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss", Locale.getDefault()
).format(Calendar.getInstance().time)
userDao.insertAll(testDetails!!)
userDao.insertAll(testDetails!!).let {
fireBaseUpload.postValue("Success")
}
}
}
fun bulkUploadResultToDatabase(userData: UserData) = viewModelScope.launch {
fun bulkUploadResultToDatabase(userData: UserData, token: String?) = viewModelScope.launch {
fireBaseUpload.postValue("Loading")
val storageRef = FirebaseStorage.getInstance().reference
val storageTestDetailsRef = storageRef.child("${testDetails?._id}/")
try {
@@ -548,25 +551,31 @@ class TestRightViewModel @Inject constructor(
val csvUri = csvUploadTask.storage.downloadUrl.await().toString()
val logUri = logUploadTask.storage.downloadUrl.await().toString()
val csvFilePath = userData.csvPath
val logTxtFilePath = userData.reportPath
userData.csvPath = csvUri
userData.reportPath = logUri
bulkAddResultTestToDb(userData)
bulkAddResultTestToDb(userData, csvFilePath, logTxtFilePath, token)
} catch (exception: Exception) {
// Handle the exception appropriately (e.g., log the error, display an error message)
}
}
private fun bulkAddResultTestToDb(userData: UserData) {
private fun bulkAddResultTestToDb(
userData: UserData,
csvFilePath: String,
logTxtFilePath: String,
token: String?
) {
viewModelScope.launch {
userData.reportUploadTime = SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss", Locale.getDefault()
).format(Calendar.getInstance().time)
when (repository.addTestToDatabase(userData)) {
is Response.Success -> {
fireBaseUpload.postValue("Success")
// repository.uploadPdf()
uploadToMolbio(csvFilePath, logTxtFilePath, token!!)
}
else -> {}