From 362217114ac8974c8c0b31d82ddf945b1912fb84 Mon Sep 17 00:00:00 2001 From: Sergio De la torre Date: Fri, 30 Jun 2023 07:39:57 +0200 Subject: [PATCH] refs #5613 renew token --- .../java/es/verdnatura/MobileApplication.kt | 2 + .../java/es/verdnatura/domain/SalixService.kt | 17 +++- .../presentation/base/BaseFragment.kt | 1 + .../feature/login/fragment/LoginFragment.kt | 67 ++++++++++++-- .../feature/login/fragment/LoginViewModel.kt | 89 ++++++++++++++++++- .../view/feature/login/model/LoginItemVO.kt | 13 +++ app/src/main/res/values-es/strings.xml | 3 + app/src/main/res/values-fr/strings.xml | 3 + app/src/main/res/values-pt/strings.xml | 3 + app/src/main/res/values/strings.xml | 3 + 10 files changed, 184 insertions(+), 17 deletions(-) diff --git a/app/src/main/java/es/verdnatura/MobileApplication.kt b/app/src/main/java/es/verdnatura/MobileApplication.kt index e15afbaf..75cc26d9 100644 --- a/app/src/main/java/es/verdnatura/MobileApplication.kt +++ b/app/src/main/java/es/verdnatura/MobileApplication.kt @@ -17,6 +17,8 @@ class MobileApplication : Application() { lateinit var salix: SalixService var userId: Int? = null var userName: String? = null + var renewPeriod:Long = 0 + var renewInterval:Long = 0 var userPassword: String? = null var mperror: MediaPlayer? = null var mpok: MediaPlayer? = null diff --git a/app/src/main/java/es/verdnatura/domain/SalixService.kt b/app/src/main/java/es/verdnatura/domain/SalixService.kt index dbd40773..74e10576 100644 --- a/app/src/main/java/es/verdnatura/domain/SalixService.kt +++ b/app/src/main/java/es/verdnatura/domain/SalixService.kt @@ -9,9 +9,9 @@ import es.verdnatura.presentation.view.feature.collection.SalixSaleQuantity import es.verdnatura.presentation.view.feature.collection.listSaleSalix import es.verdnatura.presentation.view.feature.historicoshelvinglog.model.ShelvingLogSalix import es.verdnatura.presentation.view.feature.login.model.LoginSalixVO -import es.verdnatura.presentation.view.feature.login.model.Operator import es.verdnatura.presentation.view.feature.login.model.OperatorSalix import es.verdnatura.presentation.view.feature.login.model.SalixGrupo +import es.verdnatura.presentation.view.feature.login.model.accessConfigSalix import es.verdnatura.presentation.view.feature.packaging.model.EntrySalix import es.verdnatura.presentation.view.feature.packaging.model.ItemSupplier import es.verdnatura.presentation.view.feature.packaging.model.Supplier @@ -127,7 +127,7 @@ interface SalixService { @POST("PackingSiteAdvanceds") fun ticket_advancePackaging( - @Body parms : packingSiteSalix + @Body parms: packingSiteSalix ): Call @@ -187,7 +187,7 @@ interface SalixService { @POST("Images/upload") @Multipart fun uploadImage( - @Query ("collection") collection: String, + @Query("collection") collection: String, @Query("id") id: Int, @Part filePart: MultipartBody.Part, ): @@ -201,13 +201,22 @@ interface SalixService { ): Call + @GET("Operators") fun operator_getData( - @Query("filter") filter:String + @Query("filter") filter: String ): Call> + @GET("AccessTokenConfigs") + fun getAccessTokenConfigs( + ): + Call> + @GET("vnusers/renewToken") + fun renewToken( + ): + Call } diff --git a/app/src/main/java/es/verdnatura/presentation/base/BaseFragment.kt b/app/src/main/java/es/verdnatura/presentation/base/BaseFragment.kt index a74d89b7..8d01cf70 100644 --- a/app/src/main/java/es/verdnatura/presentation/base/BaseFragment.kt +++ b/app/src/main/java/es/verdnatura/presentation/base/BaseFragment.kt @@ -45,6 +45,7 @@ abstract class BaseFragment(viewModelCla protected val USER = "user" protected val PASSWORD = "password" protected val TOKEN = "token" + protected val TOKENCREATED = "tokenCreated" protected val SECTORDESCRIP = "sectordescrip" protected val SECTORFK = "sectorFk" protected val NUMBEROFWAGONS = "operatorNumberOfWagons" diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/login/fragment/LoginFragment.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/login/fragment/LoginFragment.kt index bd2b231e..7eae2836 100644 --- a/app/src/main/java/es/verdnatura/presentation/view/feature/login/fragment/LoginFragment.kt +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/login/fragment/LoginFragment.kt @@ -8,9 +8,11 @@ import android.content.SharedPreferences import android.content.pm.PackageInfo import android.content.pm.PackageManager import android.net.Uri +import android.os.Build import android.os.Environment import android.provider.Settings import android.view.View +import androidx.annotation.RequiresApi import androidx.lifecycle.Observer import androidx.recyclerview.widget.LinearLayoutManager import com.google.firebase.crashlytics.ktx.crashlytics @@ -29,6 +31,8 @@ import es.verdnatura.presentation.view.feature.login.adapter.WorkFormAdapter import es.verdnatura.presentation.view.feature.login.model.WorkForms import es.verdnatura.presentation.view.feature.main.activity.MainActivity import java.io.File +import java.time.Duration +import java.time.Instant import java.util.* import kotlin.system.exitProcess @@ -49,13 +53,15 @@ class LoginFragment(var imageUri: Uri?) : override fun getLayoutId(): Int = R.layout.fragment_login + @RequiresApi(Build.VERSION_CODES.O) override fun init() { customDialogList = CustomDialogList(requireContext()) - customDialog = CustomDialog(requireContext()) saveIdentifiers() checkUser() + //Tarea 5613 + //viewModel.getAccessTokenConfigs() /*Tarea 4815 createFolderSerial()*/ binding.buttonLogin.setOnClickListener { @@ -91,7 +97,6 @@ class LoginFragment(var imageUri: Uri?) : listForms = getWorkForm().sortedBy { it.created } binding.edittextServer.keyListener = null - binding.edittextServer.setOnLongClickListener { showWorkingForms() true @@ -100,6 +105,23 @@ class LoginFragment(var imageUri: Uri?) : } + @RequiresApi(Build.VERSION_CODES.O) + private fun checkToken() { + + + if (getData(TOKEN).isNotBlank()) { + + val renewPeriod = getDataInt("renewPeriod") + var renewInterval=getDataInt("renewInterval") + + val dateTokenCreated = Instant.parse(getData(TOKENCREATED)) + val dateToday= Instant.now() + + val duracion = Duration.between(dateToday, dateTokenCreated) + val secondsDifference = duracion.seconds + } + } + private fun createFolderSerial() { val directory = File( @@ -129,6 +151,7 @@ class LoginFragment(var imageUri: Uri?) : "Añadir..." -> { showNewForm() } + else -> { binding.edittextServer.setText(item.name) saveData("base_url", item.urlSilex) @@ -475,7 +498,7 @@ class LoginFragment(var imageUri: Uri?) : if (it.isError) { binding.splashProgress.visibility = View.GONE - saveTokenPref("") + saveTokenPref("","") customDialog.setTitle(getString(R.string.error)) .setDescription( @@ -492,11 +515,15 @@ class LoginFragment(var imageUri: Uri?) : }.show() } else { - saveTokenPref(it.token) - /* saveUserAccesPref( - binding.edittextUsername.text.toString(), - binding.edittextPassword.text.toString() - )*/ + saveTokenPref(it.token, it.created) + //test + //saveTokenPref("RTymwJzRuVchAMY5u8xG2wpgcjPf7t0DQImLvMsTdNFmbFwDiVsa8lA6fr1XSaBo","2026-29-06") + // local + //saveTokenPref("rpG3yNMdViFYDh1sZfeYRCUmuHZYmKW5EqzwHkckj0zFbszSZGTWbs8xNETHyvuw","2026-29-06") + /* saveUserAccesPref( + binding.edittextUsername.text.toString(), + binding.edittextPassword.text.toString() + )*/ app.userName = binding.edittextUsername.text.toString() app.userPassword = binding.edittextPassword.text.toString() setupFirebase(app.userName!!) @@ -506,6 +533,27 @@ class LoginFragment(var imageUri: Uri?) : } } + loadAccessConfigSalixList.observe(viewLifecycleOwner, Observer { event -> + binding.splashProgress.visibility = View.GONE + + event.getContentIfNotHandled().notNull { + + if (it.list.isEmpty()) { + getString(R.string.errorConfigToken).toast(context) + + } else { + if (!it.list[0].isError) { + app.renewPeriod = it.list[0].renewPeriod!! + app.renewInterval = it.list[0].renewInterval!! + //saveDataInt("renewPeriod", it.list[0].renewPeriod!!) + //saveDataInt("renewInterval", it.list[0].renewInterval) + } else { + it.list[0].errorMessage.toast(context) + } + } + } + + }) } super.observeViewModel() @@ -521,10 +569,11 @@ class LoginFragment(var imageUri: Uri?) : return info.versionName } - private fun saveTokenPref(token: String) { + private fun saveTokenPref(token: String, date: String) { val prefs: SharedPreferences = requireActivity().getSharedPreferences(PREFS_USER, 0) val editor = prefs.edit() editor.putString(TOKEN, token) + editor.putString(TOKENCREATED, date) editor.apply() } diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/login/fragment/LoginViewModel.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/login/fragment/LoginViewModel.kt index 3402a198..8f2f4d9d 100644 --- a/app/src/main/java/es/verdnatura/presentation/view/feature/login/fragment/LoginViewModel.kt +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/login/fragment/LoginViewModel.kt @@ -1,5 +1,6 @@ package es.verdnatura.presentation.view.feature.login.fragment +import android.app.Application import android.content.Context import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData @@ -21,13 +22,14 @@ import es.verdnatura.presentation.view.feature.login.model.LoginDevice import es.verdnatura.presentation.view.feature.login.model.LoginSalixVO import es.verdnatura.presentation.view.feature.login.model.OperatorList import es.verdnatura.presentation.view.feature.login.model.OperatorSalix +import es.verdnatura.presentation.view.feature.login.model.accessConfigSalix +import es.verdnatura.presentation.view.feature.login.model.accessConfigSalixList import es.verdnatura.presentation.view.feature.login.model.versionApp import es.verdnatura.presentation.view.feature.login.model.workerId import es.verdnatura.presentation.view.feature.paletizador.model.itemsExpeditionDynamics import retrofit2.Response class LoginViewModel(val context: Context) : BaseViewModel(context) { - private val _loginsalixitem by lazy { MutableLiveData() } val loginsalixitem: LiveData get() = _loginsalixitem @@ -69,9 +71,11 @@ class LoginViewModel(val context: Context) : BaseViewModel(context) { private val _workerPrintList by lazy { MutableLiveData() } private val _workerOperatorList by lazy { MutableLiveData() } + private val _accessConfigSalixList by lazy { MutableLiveData() } val loadWorkerPrintList = Transformations.map(_workerPrintList) { Event(it) } val loadOperatorList = Transformations.map(_workerOperatorList) { Event(it) } + val loadAccessConfigSalixList = Transformations.map(_accessConfigSalixList) { Event(it) } fun loginSalix(user: String, password: String) { salix.login(LoginSalixVO(user, password)).enqueue( @@ -80,11 +84,12 @@ class LoginViewModel(val context: Context) : BaseViewModel(context) { val loginSalixVO: LoginSalixVO? if (response.body() != null) { - loginSalixVO = response.body()?.token?.let { + loginSalixVO = response.body()?.let { LoginSalixVO( user, password, - it, + it.token, + it.created, isError = false, errorMessage = "" ) @@ -172,7 +177,7 @@ class LoginViewModel(val context: Context) : BaseViewModel(context) { val prefs = app.getPrefs() response.body()?.let { prefs.putInt("userFk", it) } prefs.commit() - operator_getDataSalix("{\"where\": {\"workerFk\":${response.body()?.let {it}}}}") + // operator_getDataSalix("{\"where\": {\"workerFk\":${response.body()?.let {it}}}}") } @@ -465,4 +470,80 @@ class LoginViewModel(val context: Context) : BaseViewModel(context) { }) } + fun getAccessTokenConfigs( + ) { + + salix.getAccessTokenConfigs() + .enqueue(object : SilexCallback>(context) { + override fun onError(t: Throwable) { + val listError: ArrayList = ArrayList() + listError.add( + accessConfigSalix( + isError = true, + errorMessage = getMessageFromAllResponse( + nameofFunction(this), + t.message!! + ) + ) + ) + _accessConfigSalixList.value = accessConfigSalixList(listError) + + } + + override fun onSuccess(response: Response>) { + if (response.body() != null) { + _accessConfigSalixList.value = response.body()?.let { + accessConfigSalixList(it) + } + + } else { + val listError: ArrayList = ArrayList() + listError.add( + accessConfigSalix( + isError = true, + errorMessage = getMessageFromAllResponse( + nameofFunction(this), + response.message() + ) + ) + ) + _accessConfigSalixList.value = accessConfigSalixList(listError) + + } + + } + + }) + } + fun renewToken( + ) { +println("Renovando loginsalix") + salix.renewToken() + .enqueue(object : SilexCallback(context) { + + override fun onSuccess(response: Response) { + + var loginSalixVO = response.body() + val prefs = app.getPrefs() + prefs.putString("TOKEN",loginSalixVO!!.token) + prefs.putString("TOKENCREATED",loginSalixVO!!.created) + + } + override fun onError(t: Throwable) { + val listError: ArrayList = ArrayList() + listError.add( + accessConfigSalix( + isError = true, + errorMessage = getMessageFromAllResponse( + nameofFunction(this), + t.message!! + ) + ) + ) + _accessConfigSalixList.value = accessConfigSalixList(listError) + + } + + }) + } } diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/login/model/LoginItemVO.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/login/model/LoginItemVO.kt index d893e537..db057ad6 100644 --- a/app/src/main/java/es/verdnatura/presentation/view/feature/login/model/LoginItemVO.kt +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/login/model/LoginItemVO.kt @@ -4,6 +4,7 @@ class LoginSalixVO( val user: String = "", val password: String = "", val token: String = "", + val created: String = "", var isError: Boolean = false, var errorMessage: String = "" ) @@ -34,10 +35,22 @@ class OperatorSalix( var errorMessage: String = "" ) +class accessConfigSalix( + val id: Number = 0, + val renewPeriod: Long = 0, + val renewInterval: Long = 0, + val isError: Boolean = false, + var errorMessage: String = "" +) + class OperatorList( var list: List = listOf() ) +class accessConfigSalixList( + var list: List = listOf() +) + class Operator( val sectorFk: Int?, val labelerFk: Int? diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index a77cfae4..025787f9 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -599,5 +599,8 @@ Escanea ticket El ticket ya puede ser encajado El ticket escaneado no tiene un formato correcto + Póngase en contacto con el dpto. de Informática + Inventario por parking + Permite inventariar por parking diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 762f8ca0..4dc84b96 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -599,5 +599,8 @@ Escanea ticket El ticket ya puede ser encajado El ticket escaneado no tiene un formato correcto + Póngase en contacto con el dpto. de Informática + Inventario por parking + Permite inventariar por parking diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index 7e0a2e76..d9213921 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -599,5 +599,8 @@ Escanea ticket El ticket ya puede ser encajado El ticket escaneado no tiene un formato correcto + Póngase en contacto con el dpto. de Informática + Inventario por parking + Permite inventariar por parking diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index af6407e3..edd46600 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -598,4 +598,7 @@ Escanea ticket El ticket ya puede ser encajado El ticket escaneado no tiene un formato correcto + Póngase en contacto con el dpto. de Informática + Inventory by parking + Inventory by parking, you can select ubications