Añadida funcionalidad de recuperar/guardar sector. Refactor Login. Cambiado icono que cerraba app en móviles viejos. Se añade campo prioridad. Pantalla de allo trabajador.

This commit is contained in:
Sergio De la torre 2022-02-15 08:50:13 +01:00
parent 87aea478c3
commit 897061f92b
30 changed files with 362 additions and 297 deletions

View File

@ -1,17 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="deploymentTargetDropDown">
<targetSelectedWithDropDown>
<Target>
<type value="QUICK_BOOT_TARGET" />
<deviceKey>
<Key>
<type value="VIRTUAL_DEVICE_PATH" />
<value value="C:\Users\sergiodt\.android\avd\Pixel_3a_API_30_x86.avd" />
</Key>
</deviceKey>
</Target>
</targetSelectedWithDropDown>
<timeTargetWasSelectedWithDropDown value="2022-02-03T05:45:46.227830600Z" />
</component>
</project>

View File

@ -4,6 +4,7 @@
<option name="filePathToZoomLevelMap"> <option name="filePathToZoomLevelMap">
<map> <map>
<entry key="..\:/Users/sergiodt/AndroidStudioProjects/vn-warehouseManager/app/src/main/res/drawable-v24/background_gradient.xml" value="0.1" /> <entry key="..\:/Users/sergiodt/AndroidStudioProjects/vn-warehouseManager/app/src/main/res/drawable-v24/background_gradient.xml" value="0.1" />
<entry key="..\:/Users/sergiodt/AndroidStudioProjects/vn-warehouseManager/app/src/main/res/drawable-v24/ic_history_orang.xml" value="0.22037037037037038" />
<entry key="..\:/Users/sergiodt/AndroidStudioProjects/vn-warehouseManager/app/src/main/res/drawable-v24/ic_history_orange_24dp.xml" value="0.38229166666666664" /> <entry key="..\:/Users/sergiodt/AndroidStudioProjects/vn-warehouseManager/app/src/main/res/drawable-v24/ic_history_orange_24dp.xml" value="0.38229166666666664" />
<entry key="..\:/Users/sergiodt/AndroidStudioProjects/vn-warehouseManager/app/src/main/res/drawable-v24/ic_launcher_foreground.xml" value="0.13541666666666666" /> <entry key="..\:/Users/sergiodt/AndroidStudioProjects/vn-warehouseManager/app/src/main/res/drawable-v24/ic_launcher_foreground.xml" value="0.13541666666666666" />
<entry key="..\:/Users/sergiodt/AndroidStudioProjects/vn-warehouseManager/app/src/main/res/drawable-v24/selector_bottombar_text.xml" value="0.13541666666666666" /> <entry key="..\:/Users/sergiodt/AndroidStudioProjects/vn-warehouseManager/app/src/main/res/drawable-v24/selector_bottombar_text.xml" value="0.13541666666666666" />
@ -48,6 +49,7 @@
<entry key="..\:/Users/sergiodt/AndroidStudioProjects/vn-warehouseManager/app/src/main/res/drawable/ic_device_hub_black_24dp_selected.xml" value="0.22" /> <entry key="..\:/Users/sergiodt/AndroidStudioProjects/vn-warehouseManager/app/src/main/res/drawable/ic_device_hub_black_24dp_selected.xml" value="0.22" />
<entry key="..\:/Users/sergiodt/AndroidStudioProjects/vn-warehouseManager/app/src/main/res/drawable/ic_flash_auto_black_24dp.xml" value="0.15052083333333333" /> <entry key="..\:/Users/sergiodt/AndroidStudioProjects/vn-warehouseManager/app/src/main/res/drawable/ic_flash_auto_black_24dp.xml" value="0.15052083333333333" />
<entry key="..\:/Users/sergiodt/AndroidStudioProjects/vn-warehouseManager/app/src/main/res/drawable/ic_history_black_24dp.xml" value="0.15052083333333333" /> <entry key="..\:/Users/sergiodt/AndroidStudioProjects/vn-warehouseManager/app/src/main/res/drawable/ic_history_black_24dp.xml" value="0.15052083333333333" />
<entry key="..\:/Users/sergiodt/AndroidStudioProjects/vn-warehouseManager/app/src/main/res/drawable/ic_history_orange.xml" value="0.22037037037037038" />
<entry key="..\:/Users/sergiodt/AndroidStudioProjects/vn-warehouseManager/app/src/main/res/drawable/ic_launcher_background.xml" value="0.24010416666666667" /> <entry key="..\:/Users/sergiodt/AndroidStudioProjects/vn-warehouseManager/app/src/main/res/drawable/ic_launcher_background.xml" value="0.24010416666666667" />
<entry key="..\:/Users/sergiodt/AndroidStudioProjects/vn-warehouseManager/app/src/main/res/drawable/ic_local_florist_black_24dp.xml" value="0.15052083333333333" /> <entry key="..\:/Users/sergiodt/AndroidStudioProjects/vn-warehouseManager/app/src/main/res/drawable/ic_local_florist_black_24dp.xml" value="0.15052083333333333" />
<entry key="..\:/Users/sergiodt/AndroidStudioProjects/vn-warehouseManager/app/src/main/res/drawable/ic_local_florist_black_24dp_selected.xml" value="0.21041666666666667" /> <entry key="..\:/Users/sergiodt/AndroidStudioProjects/vn-warehouseManager/app/src/main/res/drawable/ic_local_florist_black_24dp_selected.xml" value="0.21041666666666667" />

View File

@ -3,7 +3,7 @@ apply plugin: 'kotlin-android'
//apply plugin: 'kotlin-android-extensions'//deprecated:sergio //apply plugin: 'kotlin-android-extensions'//deprecated:sergio
apply plugin: 'kotlin-kapt' apply plugin: 'kotlin-kapt'
apply plugin: 'com.google.gms.google-services' apply plugin: 'com.google.gms.google-services'
apply plugin: 'com.google.firebase.crashlytics' //apply plugin: 'com.google.firebase.crashlytics'
android { android {
@ -14,8 +14,10 @@ android {
applicationId "es.verdnatura" applicationId "es.verdnatura"
minSdkVersion 21 minSdkVersion 21
targetSdkVersion 29 targetSdkVersion 29
versionCode 101 versionCode 102
versionName "7.6.1" //VERSION CODE 101. Pide las baldas, se había quitado sin querer y se quita menú Voz versionName "7.7" //VERSION CODE 102.Incorpora pantalla Fallo trabajador, ara es guarda i recupera el sector en bbdd, es lleva demanar permisos de sonido,
// i es soluciona l'error en Pasillero que tancava la app en antics mòvils.S'afegeix camp prioritat al buscar item. No demana posar vehicle un altra vegada al fer botó enrere.
//versionName "7.6.1" //VERSION CODE 101. Pide las baldas, se había quitado sin querer y se quita menú Voz
//versionName "7.6" //VERSION CODE 100. Envios rocket a previa, revisados databinding layouts, //versionName "7.6" //VERSION CODE 100. Envios rocket a previa, revisados databinding layouts,
//versionName "7.5.1" //VERSION CODE 97. Control de previa, Llamadas ok, menú ok y textos en iconos y imágenes. //versionName "7.5.1" //VERSION CODE 97. Control de previa, Llamadas ok, menú ok y textos en iconos y imágenes.
//versionName "7.5.1" VERSION CODE 99 PARA TESTEAR APP-->INSTALADA EN VARIOS USUARIO 24-01-2022 //versionName "7.5.1" VERSION CODE 99 PARA TESTEAR APP-->INSTALADA EN VARIOS USUARIO 24-01-2022
@ -111,7 +113,7 @@ dependencies {
// Add the Firebase Crashlytics SDK. // Add the Firebase Crashlytics SDK.
implementation 'com.google.firebase:firebase-analytics:17.5.0' implementation 'com.google.firebase:firebase-analytics:17.5.0'
implementation 'com.google.firebase:firebase-crashlytics:17.2.1' //implementation 'com.google.firebase:firebase-crashlytics:17.2.1'
//search //search
implementation 'com.github.mirrajabi:search-dialog:1.1' implementation 'com.github.mirrajabi:search-dialog:1.1'

View File

@ -11,8 +11,8 @@
"type": "SINGLE", "type": "SINGLE",
"filters": [], "filters": [],
"attributes": [], "attributes": [],
"versionCode": 101, "versionCode": 102,
"versionName": "7.6.1", "versionName": "7.7",
"outputFile": "app-release.apk" "outputFile": "app-release.apk"
} }
], ],

BIN
app/release/vn-picking.apk Normal file

Binary file not shown.

View File

@ -13,4 +13,13 @@ class GetAjustesUserCase(context: Context) : RestClient(context) {
fun getSectorsSalix(token:String): Call<List<SectorItemVO>> { fun getSectorsSalix(token:String): Call<List<SectorItemVO>> {
return salixClient!!.getSectorsSalix(content_type = "application/json", authorization = token) return salixClient!!.getSectorsSalix(content_type = "application/json", authorization = token)
} }
fun worker_updateSector(usuario: String, password: String,sectorFk:String): Call<Unit> {
val params: ArrayList<String> = ArrayList()
params.add(sectorFk)
return restClient!!.worker_updateSector("json", "1", usuario, password, "application/json",params)
}
} }

View File

@ -1,21 +1,13 @@
package es.verdnatura.domain package es.verdnatura.domain
import android.content.Context import android.content.Context
import es.verdnatura.presentation.view.feature.ajustes.model.SectorItemVO
import es.verdnatura.presentation.view.feature.login.model.* import es.verdnatura.presentation.view.feature.login.model.*
import retrofit2.Call import retrofit2.Call
class GetLoginUserCase(context: Context) : RestClient(context) class GetLoginUserCase(context: Context) : RestClient(context)
{ {
fun login(usuario: String, password: String, androiid: String): Call<String>
{
val params: ArrayList<String> = ArrayList()
params.add(usuario)
params.add(password)
params.add(androiid)
return restClient!!.login("json", "1", usuario, password, "application/json", params)
}
fun device_checkLogin( fun device_checkLogin(
usuario: String, usuario: String,
password: String, password: String,
@ -81,16 +73,30 @@ class GetLoginUserCase(context: Context) : RestClient(context)
} }
// SALIX SERGIO MENSAJE : PARA NO ENVIAR MENSAJES A COMERCIALES PONGO QUE LAS MODIFICACIONES SE ENVIAN AL CANAL CREADO.
//SALIX SERGIO MENSAJE : PARA NO ENVIAR MENSAJES A COMERCIALES PONGO QUE LAS MODIFICACIONES SE ENVIAN AL CANAL CREADO. // SE CAMBIA VARIABLE A TRUE/FALSE
fun sendChekingPresence(token:String,workerId:Int,message:String) : Call<Boolean>{ fun sendChekingPresence(token:String,workerId:Int,message:String) : Call<Boolean>{
return salixClient!!.sendChekingPresence(content_type = "application/json", authorization = token, params = SalixMessageVO(workerId = workerId,message = message))
}
var working_in_test=false
if (!working_in_test) {
return salixClient!!.sendChekingPresence(
content_type = "application/json",
authorization = token,
params = SalixMessageVO(workerId = workerId, message = message)
)
}else{
return salixClient!!.sendGroup(
content_type = "application/json",
authorization = token,
params = SalixGrupo(to = "#android-test", message = message))
}
}
// SERGIO: PARA DESARROLLO SE DESCOMENTA ESTAS LÍNEAS Y SE COMENTAN LAS DE ARRIBA
/*fun sendChekingPresence(token: String, workerId: Int, message: String): Call<Boolean> /*fun sendChekingPresence(token: String, workerId: Int, message: String): Call<Boolean>
{ {
@ -107,5 +113,9 @@ val params: ArrayList<String> = ArrayList()
params.add(nameApp) params.add(nameApp)
return restClient!!.getVersion("json", "1", usuario, password, "application/json", params) return restClient!!.getVersion("json", "1", usuario, password, "application/json", params)
} }
fun worker_getSector(usuario: String, password: String): Call<SectorItemVO> {
//val params: ArrayList<String> = ArrayList()
return restClient!!.worker_getSector("json", "1", usuario, password, "application/json")
}
} }

View File

@ -114,6 +114,27 @@ interface VerdnaturaService {
): ):
Call<List<SectorItemVO>> Call<List<SectorItemVO>>
@POST("almacennew/worker_updateSector")//REVISADA
fun worker_updateSector(
@Header("aplicacion") aplicacion: String,
@Header("version") version: String,
@Header("user") user: String,
@Header("pass") pass: String,
@Header("Content-Type") content_type: String,
@Body params:List<String>
):
Call<Unit>
@POST("almacennew/worker_getSector")//REVISADA
fun worker_getSector(
@Header("aplicacion") aplicacion: String,
@Header("version") version: String,
@Header("user") user: String,
@Header("pass") pass: String,
@Header("Content-Type") content_type: String
):
Call<SectorItemVO>
//PRESACADORES ========================================================================> //PRESACADORES ========================================================================>
@POST("almacennew/ticketToPrePrepare")//REVISADA @POST("almacennew/ticketToPrePrepare")//REVISADA

View File

@ -129,8 +129,10 @@ override fun onViewCreated(view: View, savedInstanceState: Bundle?)
observeViewModel() observeViewModel()
runSound() runSound()
//requestRecordAudioPermission() //requestRecordAudioPermission()
requestRecordAudioPermissionNew() //requestRecordAudioPermissionNew()
requestCallPhonePermissionNew()
//sergio: para llamadas con SIP
//requestCallPhonePermissionNew()
init() init()
@ -526,6 +528,7 @@ override fun onViewCreated(view: View, savedInstanceState: Bundle?)
when (name){ when (name){
name-> editor.putString(name, value) name-> editor.putString(name, value)
ANDROID_ID->editor.putString(name, value)
} }
editor.apply() editor.apply()
@ -533,6 +536,22 @@ override fun onViewCreated(view: View, savedInstanceState: Bundle?)
} }
fun saveDataInt(name:String,value:Int){
val prefs: SharedPreferences = requireActivity().getSharedPreferences(PREFS_USER, 0)
val editor = prefs.edit()
when (name){
name-> editor.putInt(name, value)
ANDROID_ID->editor.putInt(name, value)
}
editor.apply()
}
fun saveBuyer(buyernickname: String) { fun saveBuyer(buyernickname: String) {
val prefs: SharedPreferences = requireActivity().getSharedPreferences(PREFS_USER, 0) val prefs: SharedPreferences = requireActivity().getSharedPreferences(PREFS_USER, 0)
val editor = prefs.edit() val editor = prefs.edit()

View File

@ -25,6 +25,7 @@ import es.verdnatura.presentation.view.feature.ajustes.model.AjustesItemVO
import es.verdnatura.presentation.view.feature.ajustes.model.SectorItemVO import es.verdnatura.presentation.view.feature.ajustes.model.SectorItemVO
import es.verdnatura.presentation.view.feature.main.activity.MainActivity import es.verdnatura.presentation.view.feature.main.activity.MainActivity
import es.verdnatura.presentation.view.feature.pasillero.model.PasillerosItemVO import es.verdnatura.presentation.view.feature.pasillero.model.PasillerosItemVO
import timber.log.Timber.d
class AjustesFragment : class AjustesFragment :
BaseFragment<FragmentAjustesBinding, AjustesViewModel>(AjustesViewModel::class) { BaseFragment<FragmentAjustesBinding, AjustesViewModel>(AjustesViewModel::class) {
@ -76,16 +77,13 @@ class AjustesFragment :
binding.androididText.setText( binding.androididText.setText(
getData(ANDROID_ID) getData(ANDROID_ID)
/*Settings.Secure.getString(
context?.contentResolver,
Settings.Secure.ANDROID_ID
)*/
) )
binding.txtserver.setText(this.getDefaults("base_url", this.requireContext())) binding.txtserver.setText(this.getDefaults("base_url", this.requireContext()))
super.init() super.init()
setEvents() setEvents()
} }
fun setEvents() { fun setEvents() {
@ -146,6 +144,13 @@ class AjustesFragment :
} }
} }
}) })
workerupdateSector.observe(viewLifecycleOwner, {
binding.splashProgress.visibility = View.GONE
ma.messageWithSound(it.errorMessage,it.isError,false)
})
binding.ajustessItems.adapter = ajustesAdapter binding.ajustessItems.adapter = ajustesAdapter
binding.ajustessItems.layoutManager = binding.ajustessItems.layoutManager =
LinearLayoutManager(requireContext(), LinearLayoutManager.VERTICAL, false) LinearLayoutManager(requireContext(), LinearLayoutManager.VERTICAL, false)
@ -202,6 +207,8 @@ class AjustesFragment :
viewModel.ajustesitem.get(0).sectorFk = it.id viewModel.ajustesitem.get(0).sectorFk = it.id
viewModel.ajustesitem.get(0).warehouse = it.warehouseFk viewModel.ajustesitem.get(0).warehouse = it.warehouseFk
viewModel.ajustesitem.get(0).selected = it.description viewModel.ajustesitem.get(0).selected = it.description
d("El sector marcado es "+it.id.toString())
viewModel.worker_updateSector(getData(USER),getData(PASSWORD),it.id.toString())
ajustesAdapter!!.notifyDataSetChanged() ajustesAdapter!!.notifyDataSetChanged()
return@forEach return@forEach
@ -226,6 +233,7 @@ class AjustesFragment :
editor.putString(VOZ, it) editor.putString(VOZ, it)
editor.apply() editor.apply()
viewModel.ajustesitem.get(2).selected = it viewModel.ajustesitem.get(2).selected = it
ajustesAdapter!!.notifyDataSetChanged() ajustesAdapter!!.notifyDataSetChanged()
return@forEach return@forEach

View File

@ -11,12 +11,14 @@ import es.verdnatura.presentation.base.BaseViewModel
import es.verdnatura.presentation.base.getMessageFromAllResponse import es.verdnatura.presentation.base.getMessageFromAllResponse
import es.verdnatura.presentation.base.nameofFunction import es.verdnatura.presentation.base.nameofFunction
import es.verdnatura.presentation.common.Event import es.verdnatura.presentation.common.Event
import es.verdnatura.presentation.common.ResponseItemVO
import es.verdnatura.presentation.view.feature.ajustes.model.AjustesItemVO import es.verdnatura.presentation.view.feature.ajustes.model.AjustesItemVO
import es.verdnatura.presentation.view.feature.ajustes.model.SectorItemVO import es.verdnatura.presentation.view.feature.ajustes.model.SectorItemVO
import es.verdnatura.presentation.view.feature.ajustes.model.SectorListVO import es.verdnatura.presentation.view.feature.ajustes.model.SectorListVO
import retrofit2.Call import retrofit2.Call
import retrofit2.Callback import retrofit2.Callback
import retrofit2.Response import retrofit2.Response
import timber.log.Timber.d
class AjustesViewModel(context: Context) : BaseViewModel() { class AjustesViewModel(context: Context) : BaseViewModel() {
@ -32,6 +34,11 @@ class AjustesViewModel(context: Context) : BaseViewModel() {
val sectorList: LiveData<SectorListVO> val sectorList: LiveData<SectorListVO>
get() = _sectorList get() = _sectorList
private val _workerupdateSector by lazy { MutableLiveData<ResponseItemVO>() }
val workerupdateSector: LiveData<ResponseItemVO>
get() = _workerupdateSector
val loadSectorList = Transformations.map(_sectorList) {Event(it)} val loadSectorList = Transformations.map(_sectorList) {Event(it)}
@ -136,4 +143,38 @@ class AjustesViewModel(context: Context) : BaseViewModel() {
}) })
} }
fun worker_updateSector(user:String,password:String,sectorFk:String){
d("El sector marcado dentro es "+sectorFk)
getAjustesUserCase.worker_updateSector(user,password,sectorFk).enqueue(object : Callback<Unit>{
override fun onFailure(call: Call<Unit>, t: Throwable) {
_workerupdateSector.value = ResponseItemVO(isError = true, errorMessage = getMessageFromAllResponse(nameofFunction(this),t.message!!))
}
override fun onResponse(
call: Call<Unit>,
response: Response<Unit>
) {
if (!response.isSuccessful()){
_workerupdateSector.value=ResponseItemVO(
isError = true,
errorMessage = getMessageFromAllResponse(nameofFunction(this),response.message())
)
}else{
_workerupdateSector.value=ResponseItemVO(response="Actualizado sector",isError = false, errorMessage ="Actualizado sector")
}
/*if (response.body() != null){
_sectorList.value = response.body()?.let { SectorListVO(it) }
}else{
val listError:ArrayList<SectorItemVO> = ArrayList()
listError.add(SectorItemVO(0,"",0,true,"Error en la llamada sector_get"))
_sectorList.value = SectorListVO(listError)
}*/
}
})
}
} }

View File

@ -10,7 +10,7 @@ class AjustesItemVO (
class SectorItemVO ( class SectorItemVO (
var id: Int, var id: Int,
var description:String = "", var description:String = "des",
val warehouseFk:Int?, val warehouseFk:Int?,
val isError : Boolean = false, val isError : Boolean = false,
var errorMessage : String = "" var errorMessage : String = ""

View File

@ -21,7 +21,6 @@ class BuscarItemFragment(
) : BaseFragment<FragmentBuscarItemBinding,BuscarItemViewModel>(BuscarItemViewModel::class) { ) : BaseFragment<FragmentBuscarItemBinding,BuscarItemViewModel>(BuscarItemViewModel::class) {
private var adapter : LocationAdapter? = null private var adapter : LocationAdapter? = null
// private lateinit var customDialog: CustomDialog
private var pasillerosItemClickListener: OnPasillerosItemClickListener? = null private var pasillerosItemClickListener: OnPasillerosItemClickListener? = null
companion object { companion object {
@ -38,7 +37,6 @@ class BuscarItemFragment(
ma.hideBottomNavigation(GONE) ma.hideBottomNavigation(GONE)
binding.mainToolbar.toolbarTitle.text = getString(R.string.getubicaition) binding.mainToolbar.toolbarTitle.text = getString(R.string.getubicaition)
// customDialog = CustomDialog(requireContext())
setEvents() setEvents()
if (!itemFk.isNullOrEmpty()){ if (!itemFk.isNullOrEmpty()){
getLocations(itemFk) getLocations(itemFk)

View File

@ -10,7 +10,8 @@ class ItemLocationVO (
var created:String = "", var created:String = "",
var itemFk:String = "", var itemFk:String = "",
val isError : Boolean = false, val isError : Boolean = false,
var errorMessage : String = "" var errorMessage : String = "",
var priority:String = ""
) )
class LocationListVO ( class LocationListVO (

View File

@ -678,31 +678,12 @@ class CollectionFragment(
observations = observations + " " + ticket.observations observations = observations + " " + ticket.observations
} }
//sales = salesList.sortedWith(compareBy({it.placements.get(0).placement}))
sales = salesList.sortedWith(compareBy({ it.saleOrder })) sales = salesList.sortedWith(compareBy({ it.saleOrder }))
//sales=salesList
/* for (s in sales)
{
Log.i("VERDNATURA:","La sale del ticket ${s.ticketFk} es ${s.saleOrder}")
for (p in s.placements){
Log.i("VERDNATURA:","La sale del ticket ${s.saleOrder} es ${p.placement}")
//s.placements=s.placements.sortedBy { it.saleOrder}.sortedBy { !it.visible.equals("0") }
s.placements=s.placements.sortedBy { !it.visible.equals("0") }
// Log.i("VERDNATURA:","La sale del ticket ${s.saleOrder} es saleorder ${p.saleOrder}")
}
}*/
/*for (s in salesList)
{
Log.i("VERDNATURA:","La sale del ticket ${s.ticketFk} es ${s.saleOrder}")
for (p in s.placements){
Log.i("VERDNATURA:","La sale del ticket ${s.saleOrder} es ${p.placement}")
// Log.i("VERDNATURA:","La sale del ticket ${s.saleOrder} es saleorder ${p.saleOrder}")
}
}*/
//pruebas sergio //pruebas sergio
// sales = salesList.sortedWith(compareBy({it.placements.get(0).created})) // sales = salesList.sortedWith(compareBy({it.placements.get(0).created}))
//sales = salesList.sortedWith(compareBy({it.placements.get(0).placement}))
// SalesSorter() // SalesSorter()

View File

@ -1,7 +1,7 @@
package es.verdnatura.presentation.view.feature.login.fragment package es.verdnatura.presentation.view.feature.login.fragment
import android.app.AlarmManager //import es.verdnatura.presentation.view.feature.login.model.LoginItemVO
import android.app.PendingIntent import android.annotation.SuppressLint
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.content.SharedPreferences import android.content.SharedPreferences
@ -9,19 +9,17 @@ import android.content.pm.PackageInfo
import android.content.pm.PackageManager import android.content.pm.PackageManager
import android.net.Uri import android.net.Uri
import android.provider.Settings import android.provider.Settings
import android.util.Log
import android.view.KeyEvent import android.view.KeyEvent
import android.view.View import android.view.View
import androidx.lifecycle.Observer
import androidx.preference.PreferenceManager import androidx.preference.PreferenceManager
import es.verdnatura.R import es.verdnatura.R
import es.verdnatura.databinding.FragmentLoginBinding import es.verdnatura.databinding.FragmentLoginBinding
import es.verdnatura.presentation.base.BaseFragment import es.verdnatura.presentation.base.BaseFragment
import es.verdnatura.presentation.common.hideKeyboard import es.verdnatura.presentation.common.hideKeyboard
import es.verdnatura.presentation.view.component.CustomDialog import es.verdnatura.presentation.view.component.CustomDialog
import es.verdnatura.presentation.view.feature.login.activity.LoginActivity
import es.verdnatura.presentation.view.feature.login.model.LoginItemVO
import es.verdnatura.presentation.view.feature.main.activity.MainActivity import es.verdnatura.presentation.view.feature.main.activity.MainActivity
import timber.log.Timber
import timber.log.Timber.d
import java.lang.Boolean.TRUE import java.lang.Boolean.TRUE
import kotlin.system.exitProcess import kotlin.system.exitProcess
@ -40,13 +38,20 @@ class LoginFragment : BaseFragment<FragmentLoginBinding, LoginViewModel>(LoginVi
customDialog = CustomDialog(requireContext()) customDialog = CustomDialog(requireContext())
saveIdentifiers() saveIdentifiers()
checkUser() checkUser()
binding.buttonLogin.setOnClickListener(View.OnClickListener { binding.buttonLogin.setOnClickListener({
binding.splashProgress.visibility = View.VISIBLE binding.splashProgress.visibility = View.VISIBLE
viewModel.device_checkLogin( /* viewModel.device_checkLogin(
binding.edittextUsername.text.toString(), binding.edittextUsername.text.toString(),
binding.edittextPassword.text.toString(), binding.edittextPassword.text.toString(),
getData(ANDROID_ID), callFunction = "device_checkLogin" getData(ANDROID_ID), callFunction = "device_checkLogin"
) )
*/
viewModel.loginSalix(
user = binding.edittextUsername.text.toString(),
password = binding.edittextPassword.text.toString(),
callFunction = "login de Salix"
)
}) })
@ -59,8 +64,8 @@ class LoginFragment : BaseFragment<FragmentLoginBinding, LoginViewModel>(LoginVi
binding.edittextServer.setText(this.getDefaults("base_url", this.requireContext())) binding.edittextServer.setText(getDefaults("base_url", this.requireContext()))
binding.edittextServer.setOnKeyListener(View.OnKeyListener { v, keyCode, event -> binding.edittextServer.setOnKeyListener { _, keyCode, event ->
if (keyCode == KeyEvent.KEYCODE_ENTER && event.action == KeyEvent.ACTION_UP) { if (keyCode == KeyEvent.KEYCODE_ENTER && event.action == KeyEvent.ACTION_UP) {
this.setDefaults( this.setDefaults(
"base_url", "base_url",
@ -70,12 +75,12 @@ class LoginFragment : BaseFragment<FragmentLoginBinding, LoginViewModel>(LoginVi
this.hideKeyboard() this.hideKeyboard()
//sergio: deberia lanzar la funcion nueva creada por mi restartapp de BaseFragment. Pero no vuelve a arrancar //sergio: deberia lanzar la funcion nueva creada por mi restartapp de BaseFragment. Pero no vuelve a arrancar
exitProcess(0) exitProcess(0)
restartapp() //restartapp()
return@OnKeyListener false //return@OnKeyListener false
} }
false false
}) }
binding.textviewWelcome.setOnLongClickListener { binding.textviewWelcome.setOnLongClickListener {
@ -89,18 +94,11 @@ class LoginFragment : BaseFragment<FragmentLoginBinding, LoginViewModel>(LoginVi
} }
@SuppressLint("HardwareIds")
private fun saveIdentifiers() { private fun saveIdentifiers() {
val resolver = requireActivity().contentResolver val AndroidId: String = Settings.Secure.getString(requireActivity().contentResolver, Settings.Secure.ANDROID_ID)
saveData(ANDROID_ID,AndroidId)
val AndroidId: String = Settings.Secure.getString(resolver, Settings.Secure.ANDROID_ID)
var deviceName = Settings.Secure.getString(resolver, "bluetooth_name")
val prefs: SharedPreferences = requireActivity().getSharedPreferences(PREFS_USER, 0)
val editor = prefs.edit()
editor.putString(ANDROID_ID, AndroidId)
editor.putString(DEVICENAME, deviceName)
editor.apply()
} }
@ -119,18 +117,17 @@ class LoginFragment : BaseFragment<FragmentLoginBinding, LoginViewModel>(LoginVi
override fun observeViewModel() { override fun observeViewModel() {
with(viewModel) { with(viewModel) {
versionappitem.observe(viewLifecycleOwner, Observer { versionappitem.observe(viewLifecycleOwner, {
if (it.isError) { if (it.isError) {
binding.splashProgress.visibility = View.INVISIBLE binding.splashProgress.visibility = View.GONE
ma.messageWithSound(it.errorMessage,true,false) customDialog.setTitle("Error").setDescription(it.errorMessage)
/* customDialog.setTitle("Error").setDescription(it.errorMessage)
.setOkButton("Cerrar") { .setOkButton("Cerrar") {
customDialog.dismiss() customDialog.dismiss()
}.show()*/ }.show()
} else { } else {
if (it.version.equals(getInfoVersionNameApp())) { if (it.version == getInfoVersionNameApp()) {
goToMain() goToMain()
} else { } else {
@ -161,22 +158,21 @@ class LoginFragment : BaseFragment<FragmentLoginBinding, LoginViewModel>(LoginVi
} }
}) })
logindevice.observe(viewLifecycleOwner, Observer { logindevice.observe(viewLifecycleOwner, {
if (it.isError) { if (it.isError) {
binding.splashProgress.visibility = View.INVISIBLE binding.splashProgress.visibility = View.GONE
ma.messageWithSound(it.errorMessage,true,false) customDialog.setTitle("Error").setDescription(it.errorMessage)
/* customDialog.setTitle("Error").setDescription(it.errorMessage)
.setOkButton("Cerrar") { .setOkButton("Cerrar") {
customDialog.dismiss() customDialog.dismiss()
}.show()*/ }.show()
} else { } else {
if (it.vIsAuthorized.equals("0")) { if (it.vIsAuthorized == "0") {
customDialog.setTitle("Error").setDescription(it.vMessage!!) customDialog.setTitle("Error").setDescription(it.vMessage!!)
.setOkButton("Cerrar") { .setOkButton("Cerrar") {
customDialog.dismiss() customDialog.dismiss()
binding.splashProgress.visibility = View.INVISIBLE binding.splashProgress.visibility = View.GONE
// goToMain() // goToMain()
}.show() }.show()
@ -187,6 +183,11 @@ class LoginFragment : BaseFragment<FragmentLoginBinding, LoginViewModel>(LoginVi
binding.edittextPassword.text.toString(), binding.edittextPassword.text.toString(),
callFunction = "worker_getId" callFunction = "worker_getId"
) )
viewModel.worker_getSector(
binding.edittextUsername.text.toString(),
binding.edittextPassword.text.toString())
deviceLog_add( deviceLog_add(
binding.edittextUsername.text.toString(), binding.edittextUsername.text.toString(),
binding.edittextPassword.text.toString(), binding.edittextPassword.text.toString(),
@ -195,12 +196,11 @@ class LoginFragment : BaseFragment<FragmentLoginBinding, LoginViewModel>(LoginVi
getData(ANDROID_ID), "deviceLog_add" getData(ANDROID_ID), "deviceLog_add"
) )
//saveUserFkPref(it) if (binding.switchRemember.isChecked) {
if (binding.switchRemember.isChecked) { saveRemember(true)
saveRemember(true) } else {
} else { saveRemember(false)
saveRemember(false) }
}
saveUserAccesPref( saveUserAccesPref(
binding.edittextUsername.text.toString(), binding.edittextUsername.text.toString(),
@ -208,26 +208,23 @@ class LoginFragment : BaseFragment<FragmentLoginBinding, LoginViewModel>(LoginVi
) )
if (it.vIsAuthorized.equals("1") && it.vMessage.isNullOrEmpty()) { if (it.vIsAuthorized == "1" && it.vMessage.isNullOrEmpty()) {
loginSalix( getVersion()
user = binding.edittextUsername.text.toString(),
password = binding.edittextPassword.text.toString(),
callFunction = "login de Salix"
)
} }
if (it.vIsAuthorized.equals("1") && !it.vMessage.isNullOrEmpty()) { if (it.vIsAuthorized == "1" && !it.vMessage.isNullOrEmpty()) {
binding.splashProgress.visibility = View.GONE binding.splashProgress.visibility = View.GONE
customDialog.setTitle("Mensaje").setDescription(it.vMessage) customDialog.setTitle("Mensaje").setDescription(it.vMessage)
.setOkButton("Cerrar") { .setOkButton("Cerrar") {
customDialog.dismiss() customDialog.dismiss()
binding.splashProgress.visibility = View.VISIBLE /* binding.splashProgress.visibility = View.VISIBLE
loginSalix( loginSalix(
user = binding.edittextUsername.text.toString(), user = binding.edittextUsername.text.toString(),
password = binding.edittextPassword.text.toString(), password = binding.edittextPassword.text.toString(),
"login de Salix" "login de Salix"
) )*/
getVersion()
}.show() }.show()
} }
@ -240,7 +237,7 @@ class LoginFragment : BaseFragment<FragmentLoginBinding, LoginViewModel>(LoginVi
workerId.observe(viewLifecycleOwner, Observer { workerId.observe(viewLifecycleOwner, {
if (!it.isError) { if (!it.isError) {
saveUserFkPref(it.Id.toString()) saveUserFkPref(it.Id.toString())
@ -249,14 +246,13 @@ class LoginFragment : BaseFragment<FragmentLoginBinding, LoginViewModel>(LoginVi
}) })
loginitem.observe(viewLifecycleOwner, Observer { /* loginitem.observe(viewLifecycleOwner, Observer {
binding.splashProgress.visibility = View.INVISIBLE binding.splashProgress.visibility = View.INVISIBLE
if (it.isError) { if (it.isError) {
ma.messageWithSound(it.errorMessage,true,false) customDialog.setTitle("Error").setDescription(it.errorMessage)
/* customDialog.setTitle("Error").setDescription(it.errorMessage)
.setOkButton("Cerrar") { .setOkButton("Cerrar") {
customDialog.dismiss() customDialog.dismiss()
}.show()*/ }.show()
} else { } else {
binding.splashProgress.visibility = View.VISIBLE binding.splashProgress.visibility = View.VISIBLE
saveUserFkPref(it) saveUserFkPref(it)
@ -278,9 +274,9 @@ class LoginFragment : BaseFragment<FragmentLoginBinding, LoginViewModel>(LoginVi
) )
} }
}) })*/
devicelogresponse.observe(viewLifecycleOwner, Observer { devicelogresponse.observe(viewLifecycleOwner, {
if (it.isError) { if (it.isError) {
customDialog.setTitle("Error") customDialog.setTitle("Error")
@ -294,48 +290,46 @@ class LoginFragment : BaseFragment<FragmentLoginBinding, LoginViewModel>(LoginVi
} }
}) })
loginsalixitem.observe(viewLifecycleOwner, Observer { workergetSector.observe(viewLifecycleOwner, {
binding.splashProgress.visibility = View.GONE
if (it.id!=0){
d("El sector guardado es"+it.id)
d("El sector description es"+it.description.toString())
d("El sector warehouse es"+it.warehouseFk.toString())
saveDataInt("sectorFk",it.id)
saveData("sectordescrip",it.description)
it.warehouseFk?.let { it1 -> saveDataInt("warehouseFk", it1) }
}
})
loginsalixitem.observe(viewLifecycleOwner, {
if (it.isError) { if (it.isError) {
binding.splashProgress.visibility = View.GONE
saveTokenPref("") saveTokenPref("")
customDialog.setTitle("Error") customDialog.setTitle("Error")
.setDescription(it.errorMessage + ". Puedes continuar pero algunas funcionalidades no estarán disponibles.") // .setDescription(it.errorMessage + ". Puedes continuar pero algunas funcionalidades no estarán disponibles.")
.setDescription(it.errorMessage)
.setOkButton( .setOkButton(
"Entendido" "Entendido"
) { ) {
customDialog.dismiss() customDialog.dismiss()
getVersion() //getVersion()
//exitProcess(0)
}.show() }.show()
} else { } else {
saveTokenPref(it.token) saveTokenPref(it.token)
getVersion() viewModel.device_checkLogin(
binding.edittextUsername.text.toString(),
binding.edittextPassword.text.toString(),
getData(ANDROID_ID), callFunction = "device_checkLogin"
)
//getVersion()
} }
}) })
/* version.observe(viewLifecycleOwner, Observer {
binding.splashProgress.visibility = View.INVISIBLE
if (it) {
binding.constrainlayoutLogin.visibility=INVISIBLE
goToMain()
binding.splashProgress.visibility = View.INVISIBLE
} else {
binding.splashProgress.visibility = View.INVISIBLE
customDialog.setTitle(getString(R.string.Actualizar))
.setDescription(getString(R.string.updatemng)).setOkButton(
getString(
R.string.Actualizar
)
) {
val openURL = Intent(Intent.ACTION_VIEW)
openURL.data = Uri.parse("https://app.verdnatura.es/bin/vn-picking.apk")
startActivity(openURL)
}.setKoButton("Cancelar") {
customDialog.dismiss()
goToMain()
}.show()
}
})*/
} }
super.observeViewModel() super.observeViewModel()
} }
@ -353,12 +347,12 @@ class LoginFragment : BaseFragment<FragmentLoginBinding, LoginViewModel>(LoginVi
editor.apply() editor.apply()
} }
private fun saveUserFkPref(loginitem: LoginItemVO) { /* private fun saveUserFkPref(loginitem: LoginItemVO) {
val prefs: SharedPreferences = requireActivity().getSharedPreferences(PREFS_USER, 0) val prefs: SharedPreferences = requireActivity().getSharedPreferences(PREFS_USER, 0)
val editor = prefs.edit() val editor = prefs.edit()
editor.putString(USERFK, loginitem.id) editor.putString(USERFK, loginitem.id)
editor.apply() editor.apply()
} }*/
private fun saveUserFkPref(workerId: String) { private fun saveUserFkPref(workerId: String) {
val prefs: SharedPreferences = requireActivity().getSharedPreferences(PREFS_USER, 0) val prefs: SharedPreferences = requireActivity().getSharedPreferences(PREFS_USER, 0)
@ -400,6 +394,7 @@ class LoginFragment : BaseFragment<FragmentLoginBinding, LoginViewModel>(LoginVi
} }
fun setDefaults(key: String?, value: String?, context: Context?) { fun setDefaults(key: String?, value: String?, context: Context?) {
val preferences: SharedPreferences = PreferenceManager.getDefaultSharedPreferences(context) val preferences: SharedPreferences = PreferenceManager.getDefaultSharedPreferences(context)
val editor = preferences.edit() val editor = preferences.edit()
editor.putString(key, value) editor.putString(key, value)
@ -412,18 +407,6 @@ class LoginFragment : BaseFragment<FragmentLoginBinding, LoginViewModel>(LoginVi
} }
// sergio:creada restart en BaseFragment para AjustesFragment... // sergio:creada restart en BaseFragment para AjustesFragment...
fun restartapp() {
val mStartActivity = Intent(context, LoginActivity::class.java)
val mPendingIntentId = 123456
val mPendingIntent = PendingIntent.getActivity(
context,
mPendingIntentId,
mStartActivity,
PendingIntent.FLAG_CANCEL_CURRENT
)
val mgr = requireContext().getSystemService(Context.ALARM_SERVICE) as AlarmManager
mgr[AlarmManager.RTC, System.currentTimeMillis() + 100] = mPendingIntent
exitProcess(0)
}
} }

View File

@ -1,7 +1,6 @@
package es.verdnatura.presentation.view.feature.login.fragment package es.verdnatura.presentation.view.feature.login.fragment
import android.content.Context import android.content.Context
import android.util.Log
import androidx.lifecycle.LiveData import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData import androidx.lifecycle.MutableLiveData
import com.google.gson.Gson import com.google.gson.Gson
@ -9,36 +8,36 @@ import com.google.gson.JsonObject
import com.google.gson.reflect.TypeToken import com.google.gson.reflect.TypeToken
import es.verdnatura.domain.GetLoginUserCase import es.verdnatura.domain.GetLoginUserCase
import es.verdnatura.domain.NodeJsService import es.verdnatura.domain.NodeJsService
import es.verdnatura.presentation.base.* import es.verdnatura.presentation.base.BaseViewModel
import es.verdnatura.presentation.base.getMessageFromAllResponse
import es.verdnatura.presentation.base.nameofFunction
import es.verdnatura.presentation.common.ResponseItemVO import es.verdnatura.presentation.common.ResponseItemVO
import es.verdnatura.presentation.view.feature.login.model.* import es.verdnatura.presentation.view.feature.ajustes.model.SectorItemVO
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.versionApp
import es.verdnatura.presentation.view.feature.login.model.workerId
import es.verdnatura.presentation.view.feature.paletizador.model.itemsExpeditionDynamics import es.verdnatura.presentation.view.feature.paletizador.model.itemsExpeditionDynamics
import retrofit2.Call import retrofit2.Call
import retrofit2.Callback import retrofit2.Callback
import retrofit2.Response import retrofit2.Response
import timber.log.Timber
import timber.log.Timber.d
class LoginViewModel(context: Context) : BaseViewModel() class LoginViewModel(context: Context) : BaseViewModel()
{ {
private val getLoginUserCase: GetLoginUserCase = GetLoginUserCase(context) private val getLoginUserCase: GetLoginUserCase = GetLoginUserCase(context)
private val _loginitem by lazy { MutableLiveData<LoginItemVO>() }
val loginitem: LiveData<LoginItemVO>
get() = _loginitem
private val _loginsalixitem by lazy { MutableLiveData<LoginSalixVO>() } private val _loginsalixitem by lazy { MutableLiveData<LoginSalixVO>() }
val loginsalixitem: LiveData<LoginSalixVO> val loginsalixitem: LiveData<LoginSalixVO>
get() = _loginsalixitem get() = _loginsalixitem
/* private val _version by lazy { MutableLiveData<Boolean>() }
val version: LiveData<Boolean>
get() = _version*/
private val _devicelogresponse by lazy { MutableLiveData<ResponseItemVO>() } private val _devicelogresponse by lazy { MutableLiveData<ResponseItemVO>() }
val devicelogresponse: LiveData<ResponseItemVO> val devicelogresponse: LiveData<ResponseItemVO>
get() = _devicelogresponse get() = _devicelogresponse
//sergio: nueva version para actualizar
private val _versionappitem by lazy { MutableLiveData<versionApp>() } private val _versionappitem by lazy { MutableLiveData<versionApp>() }
val versionappitem: LiveData<versionApp> val versionappitem: LiveData<versionApp>
get() = _versionappitem get() = _versionappitem
@ -56,55 +55,9 @@ class LoginViewModel(context: Context) : BaseViewModel()
get() = _nodejs get() = _nodejs
//sergio:anterior login private val _workergetSector by lazy { MutableLiveData<SectorItemVO>() }
fun login(user: String, password: String, androiid: String) val workergetSector: LiveData<SectorItemVO>
{ get() = _workergetSector
getLoginUserCase.login(user, password, androiid).enqueue(object : Callback<String>
{
override fun onResponse(call: Call<String>, response: Response<String>)
{
var loginItemVO: LoginItemVO?
if (response.raw().code() == 555)
{
var message = response.raw().message().toString()
if (message.contains("autorizado"))
{
loginItemVO = LoginItemVO(
id = "0",
isError = true,
errorMessage = "Usuario no autorizado para este dispositivo"
)
} else
{
loginItemVO = LoginItemVO(
id = "0",
isError = true,
errorMessage = "Usuario o contraseña incorrectos"
)
}
} else if (!response.body().isNullOrEmpty())
{
loginItemVO = response.body()?.let { LoginItemVO(id = it) }
} else
{
loginItemVO =
LoginItemVO(id = "0", isError = true, errorMessage = "Error desconocido")
}
_loginitem.value = loginItemVO!!
}
override fun onFailure(call: Call<String>, t: Throwable)
{
val loginItemVO: LoginItemVO? =
LoginItemVO(id = "0", isError = true, errorMessage = t.message!!)
_loginitem.value = loginItemVO
}
})
}
fun loginSalix(user: String, password: String,callFunction:String) fun loginSalix(user: String, password: String,callFunction:String)
{ {
@ -113,9 +66,10 @@ class LoginViewModel(context: Context) : BaseViewModel()
override fun onResponse(call: Call<LoginSalixVO>, response: Response<LoginSalixVO>) override fun onResponse(call: Call<LoginSalixVO>, response: Response<LoginSalixVO>)
{ {
var loginSalixVO: LoginSalixVO? val loginSalixVO: LoginSalixVO?
if (response.body() != null) if (response.body() != null)
{ {
loginSalixVO = response.body()?.token?.let { loginSalixVO = response.body()?.token?.let {
LoginSalixVO( LoginSalixVO(
user, user,
@ -127,12 +81,15 @@ class LoginViewModel(context: Context) : BaseViewModel()
} }
} else } else
{ {
loginSalixVO = LoginSalixVO( loginSalixVO = LoginSalixVO(
user, user,
password, password,
isError = true, isError = true,
errorMessage = getMessageFromAllResponse(nameofFunction(this),response.message()) errorMessage = getMessageFromAllResponse(nameofFunction(this),if (response.message()=="Unauthorized"){"Revisa tu usuario y contraseña. En caso de no poder acceder contacta co Informática"}else{response.message()
) }))
} }
_loginsalixitem.value = loginSalixVO _loginsalixitem.value = loginSalixVO
@ -155,7 +112,6 @@ class LoginViewModel(context: Context) : BaseViewModel()
fun device_checkLogin(user: String, password: String, android_id: String,callFunction:String) fun device_checkLogin(user: String, password: String, android_id: String,callFunction:String)
{ {
//var name=nameofFunction(object{})
getLoginUserCase.device_checkLogin(user, password, android_id) getLoginUserCase.device_checkLogin(user, password, android_id)
.enqueue(object : Callback<LoginDevice> .enqueue(object : Callback<LoginDevice>
@ -163,7 +119,7 @@ class LoginViewModel(context: Context) : BaseViewModel()
override fun onResponse(call: Call<LoginDevice>, response: Response<LoginDevice>) override fun onResponse(call: Call<LoginDevice>, response: Response<LoginDevice>)
{ {
var loginDevice: LoginDevice? val loginDevice: LoginDevice?
if (!response.isSuccessful) if (!response.isSuccessful)
@ -201,6 +157,7 @@ class LoginViewModel(context: Context) : BaseViewModel()
override fun onFailure(call: Call<LoginDevice>, t: Throwable) override fun onFailure(call: Call<LoginDevice>, t: Throwable)
{ {
val loginDevice = val loginDevice =
LoginDevice( LoginDevice(
"", "",
@ -223,7 +180,7 @@ class LoginViewModel(context: Context) : BaseViewModel()
override fun onResponse(call: Call<String>, response: Response<String>) override fun onResponse(call: Call<String>, response: Response<String>)
{ {
var workerId: workerId? val workerId: workerId?
if (response.body() != null) if (response.body() != null)
@ -295,22 +252,6 @@ class LoginViewModel(context: Context) : BaseViewModel()
} }
/*fun checkVersion_old(user:String,password:String,version:String){
getLoginUserCase.checkVersion(user,password,version).enqueue(object : Callback<Boolean>{
override fun onResponse(call: Call<Boolean>, response: Response<Boolean>) {
if (response.body() != null){
_version.value = response.body()
}else{
_version.value = true
}
}
override fun onFailure(call: Call<Boolean>, t: Throwable) {
_version.value = true
}
})
}*/
//sergio:checkVersion new
fun checkVersion(user: String, password: String, nameApp: String,callFunction: String) fun checkVersion(user: String, password: String, nameApp: String,callFunction: String)
{ {
getLoginUserCase.checkVersion(user, password, nameApp) getLoginUserCase.checkVersion(user, password, nameApp)
@ -319,12 +260,12 @@ class LoginViewModel(context: Context) : BaseViewModel()
override fun onResponse(call: Call<versionApp>, response: Response<versionApp>) override fun onResponse(call: Call<versionApp>, response: Response<versionApp>)
{ {
var versionApp: versionApp? //var versionApp: versionApp?
if (response.body() != null) if (response.body() != null)
{ {
versionApp = response.body()?.let { _versionappitem.value = response.body()?.let {
versionApp( versionApp(
it.appname, it.appname,
@ -338,27 +279,28 @@ class LoginViewModel(context: Context) : BaseViewModel()
} else } else
{ {
versionApp = versionApp( _versionappitem.value = versionApp(
user, user,
password, password,
isError = true, isError = true,
errorMessage = getMessageFromAllResponse(nameofFunction(this),response.message()) errorMessage = getMessageFromAllResponse(nameofFunction(this),response.message())
) )
} }
_versionappitem.value = versionApp
// _versionappitem.value = versionApp
} }
override fun onFailure(call: Call<versionApp>, t: Throwable) override fun onFailure(call: Call<versionApp>, t: Throwable)
{ {
val versionApp = _versionappitem.value =
versionApp( versionApp(
nameApp, nameApp,
"", "",
isError = true, isError = true,
errorMessage =getMessageFromAllResponse(nameofFunction(this), t.message!!) errorMessage =getMessageFromAllResponse(nameofFunction(this), t.message!!)
) )
_versionappitem.value = versionApp //_versionappitem.value = versionApp
} }
}) })
} }
@ -375,7 +317,7 @@ class LoginViewModel(context: Context) : BaseViewModel()
{ {
var workerId: NodeJsService.SmartTagNode? val workerId: NodeJsService.SmartTagNode?
/* if (response.isSuccessful()){ /* if (response.isSuccessful()){
Log.i("VERDNATURA::","OK") Log.i("VERDNATURA::","OK")
@ -387,7 +329,7 @@ class LoginViewModel(context: Context) : BaseViewModel()
if (response.body() != null) if (response.body() != null)
{ {
Log.i("VERDNATURA::", "el valor nodejs no es nulo ")
workerId = NodeJsService.SmartTagNode( workerId = NodeJsService.SmartTagNode(
response.body().toString(), response.body().toString(),
isError = false, isError = false,
@ -400,7 +342,6 @@ class LoginViewModel(context: Context) : BaseViewModel()
isError = true, isError = true,
errorMessage = "Error al llamar al servicio Node." errorMessage = "Error al llamar al servicio Node."
) )
Log.i("VERDNATURA::", "el valor nodejs es NULL")
} }
_nodejs.value = workerId _nodejs.value = workerId
@ -411,7 +352,7 @@ class LoginViewModel(context: Context) : BaseViewModel()
val workerId = val workerId =
NodeJsService.SmartTagNode(isError = true, errorMessage = t.message!!) NodeJsService.SmartTagNode(isError = true, errorMessage = t.message!!)
Log.i("VERDNATURA::","el error nodejs es "+t.message+"--"+t.cause.toString()+"--"+t.stackTrace.toString()) // Log.i("VERDNATURA::","el error nodejs es "+t.message+"--"+t.cause.toString()+"--"+t.stackTrace.toString())
_nodejs.value = workerId _nodejs.value = workerId
} }
@ -436,5 +377,36 @@ class LoginViewModel(context: Context) : BaseViewModel()
} }
return list return list
} }
fun worker_getSector(user:String,password:String){
getLoginUserCase.worker_getSector(user,password).enqueue(object : Callback<SectorItemVO>{
override fun onFailure(call: Call<SectorItemVO>, t: Throwable) {
Timber.d("El sector failure " + t.message!!)
_workergetSector.value = SectorItemVO(0,"",0,isError = true, errorMessage = getMessageFromAllResponse(nameofFunction(this),t.message!!))
}
override fun onResponse(
call: Call<SectorItemVO>,
response: Response<SectorItemVO>
) {
if (!response.isSuccessful()){
d("El sector is not successfull")
_workergetSector.value= SectorItemVO(0,"",0,
isError = true,
errorMessage = getMessageFromAllResponse(nameofFunction(this),response.message())
)
}else{
d("El sector is successfull")
_workergetSector.value = response.body()?.let { SectorItemVO(it.id,it.description,it.warehouseFk,isError = false) }
}
}
})
}
} }

View File

@ -2,11 +2,11 @@ package es.verdnatura.presentation.view.feature.login.model
class LoginItemVO( /*class LoginItemVO(
val id: String = "", val id: String = "",
var isError: Boolean = false, var isError: Boolean = false,
var errorMessage: String = "" var errorMessage: String = ""
) )*/
class LoginSalixVO( class LoginSalixVO(
val user: String = "", val user: String = "",

View File

@ -43,18 +43,16 @@ import es.verdnatura.presentation.view.feature.paletizador.fragment.*
import es.verdnatura.presentation.view.feature.paletizador.model.ItemExpeditionTruckVO import es.verdnatura.presentation.view.feature.paletizador.model.ItemExpeditionTruckVO
import es.verdnatura.presentation.view.feature.paletizador.model.ItemPalletVO import es.verdnatura.presentation.view.feature.paletizador.model.ItemPalletVO
import es.verdnatura.presentation.view.feature.parking.fragment.ParkingFragment import es.verdnatura.presentation.view.feature.parking.fragment.ParkingFragment
import es.verdnatura.presentation.view.feature.parking.fragment.ParkingSaleFragment
import es.verdnatura.presentation.view.feature.pasillero.fragment.PasilleroFragment import es.verdnatura.presentation.view.feature.pasillero.fragment.PasilleroFragment
import es.verdnatura.presentation.view.feature.pasillero.model.PasillerosItemVO import es.verdnatura.presentation.view.feature.pasillero.model.PasillerosItemVO
import es.verdnatura.presentation.view.feature.precontrol.PreControladorFragment import es.verdnatura.presentation.view.feature.precontrol.PreControladorFragment
import es.verdnatura.presentation.view.feature.showticket.ShowTicketFragment
import es.verdnatura.presentation.view.feature.presacador.fragment.PreSacadorFragment import es.verdnatura.presentation.view.feature.presacador.fragment.PreSacadorFragment
import es.verdnatura.presentation.view.feature.qr.QrFragment import es.verdnatura.presentation.view.feature.qr.QrFragment
import es.verdnatura.presentation.view.feature.reposicion.fragment.ReposicionFragment import es.verdnatura.presentation.view.feature.reposicion.fragment.ReposicionFragment
import es.verdnatura.presentation.view.feature.sacador.fragment.SacadorFragment import es.verdnatura.presentation.view.feature.sacador.fragment.SacadorFragment
import es.verdnatura.presentation.view.feature.sacador.model.CollectionVO import es.verdnatura.presentation.view.feature.sacador.model.CollectionVO
import es.verdnatura.presentation.view.feature.sacador.model.SaleVO
import es.verdnatura.presentation.view.feature.shelvingparking.fragment.ShelvingParkingFragment import es.verdnatura.presentation.view.feature.shelvingparking.fragment.ShelvingParkingFragment
import es.verdnatura.presentation.view.feature.showticket.ShowTicketFragment
import es.verdnatura.presentation.view.feature.smarttag.register.RegisterSmartTagsFragment import es.verdnatura.presentation.view.feature.smarttag.register.RegisterSmartTagsFragment
import es.verdnatura.presentation.view.feature.smarttag.sacador.fragment.AssociateSmartTagsFragment import es.verdnatura.presentation.view.feature.smarttag.sacador.fragment.AssociateSmartTagsFragment
import es.verdnatura.presentation.view.feature.ubicador.fragment.AutomaticAddItemFragment import es.verdnatura.presentation.view.feature.ubicador.fragment.AutomaticAddItemFragment
@ -117,18 +115,18 @@ class MainActivity : BaseActivity<ActivityMainBinding>(), OnPasillerosItemClickL
private fun navigationDrawer(){ private fun navigationDrawer(){
val drawerLayout = binding.drawerLayout /* val drawerLayout = binding.drawerLayout
drawerLayout.open() drawerLayout.open()
/* val toggle = ActionBarDrawerToggle( val toggle = ActionBarDrawerToggle(
this, this,
drawerLayout, drawerLayout,
toolbar, toolbar,
"abierto", "abierto",
"cerrado" "cerrado"
) )
drawerLayout.addDrawerListener(toggle) drawerLayout.addDrawerListener(toggle)
toggle.syncState()*/ toggle.syncState()*/
} }
/* private fun navigateToFragment(){ /* private fun navigateToFragment(){
@ -143,9 +141,9 @@ class MainActivity : BaseActivity<ActivityMainBinding>(), OnPasillerosItemClickL
val sectorFk = prefs.getInt("sectorFk", -1) val sectorFk = prefs.getInt("sectorFk", -1)
return sectorFk != -1 return sectorFk != -1
} }
private fun setBottomMenu() { private fun setBottomMenu() {
val bottomMenu = binding.mainBottomNavigation val bottomMenu = binding.mainBottomNavigation
bottomMenu.itemIconTintList = null bottomMenu.itemIconTintList = null
@ -532,9 +530,9 @@ class MainActivity : BaseActivity<ActivityMainBinding>(), OnPasillerosItemClickL
} }
fun onParkingSaleSelected(sales: SaleVO) { /* fun onParkingSaleSelected(sales: SaleVO) {
addFragmentOnTop(ParkingSaleFragment.newInstance(SaleVO = sales)) addFragmentOnTop(ParkingSaleFragment.newInstance(SaleVO = sales))
} }*/
override fun onCollectionSelected(collection: CollectionVO, type: String) { override fun onCollectionSelected(collection: CollectionVO, type: String) {

View File

@ -8,6 +8,7 @@ import androidx.recyclerview.widget.RecyclerView
import es.verdnatura.databinding.ItemPasillerosMainMenuBinding import es.verdnatura.databinding.ItemPasillerosMainMenuBinding
import es.verdnatura.presentation.common.OnPasillerosItemClickListener import es.verdnatura.presentation.common.OnPasillerosItemClickListener
import es.verdnatura.presentation.view.feature.pasillero.model.PasillerosItemVO import es.verdnatura.presentation.view.feature.pasillero.model.PasillerosItemVO
import timber.log.Timber.d
class PasillerosAdapter ( class PasillerosAdapter (
private val items: List<PasillerosItemVO>, private val items: List<PasillerosItemVO>,
@ -40,7 +41,12 @@ class PasillerosAdapter (
binding.apply { binding.apply {
this.item = item this.item = item
this.title = context?.getString(item.titleToShow) this.title = context?.getString(item.titleToShow)
itemImage.setImageResource(item.iconResource)
try {
itemImage.setImageResource(item.iconResource)
}catch(exception:Exception){
d("Exception::"+exception.message)
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
itemImage.tooltipText=item.description itemImage.tooltipText=item.description

View File

@ -121,7 +121,7 @@ class PasilleroViewModel(context: Context) : BaseViewModel() {
) )
_pasillerositem.add( _pasillerositem.add(
PasillerosItemVO(7, PasillerosItemVO(7,
R.drawable.ic_history_orange_24dp, R.drawable.ic_history_orange,
"Log Shelving",R.string.shelvingLog,"Permite conocer los movimientos en un carro" "Log Shelving",R.string.shelvingLog,"Permite conocer los movimientos en un carro"
) )
) )

View File

@ -613,15 +613,20 @@ class PreSacadorFragment :
vIsChecked = if (sales[position].picked == sales[position].quantity) "1" else "0", vIsChecked = if (sales[position].picked == sales[position].quantity) "1" else "0",
vOriginalQuantity = sales[position].picked.toString(), vOriginalQuantity = sales[position].picked.toString(),
vStateFk = PRESACADOR, vStateFk = PRESACADOR,
//sergio: se añade originalItemScan para
vBuyFk = originalItemScan, callFunction = "saleTrackingReplace" vBuyFk = originalItemScan, callFunction = "saleTrackingReplace"
) )
// ////Log.i("VERDNATURA:","El id movimiento es ${sales[position].idMovimiento}") viewModel.saleTrackingReplace(
// ////Log.i("VERDNATURA:","Checked is ${if (sales[position].picked == sales[position].quantity) "1" else "0"}") usuario = getData(USER),
// ////Log.i("VERDNATURA:","Position is ${position}") password = getData(PASSWORD),
saleFk = sales[position].idMovimiento,
vIsChecked = if (sales[position].picked == sales[position].quantity) "1" else "0",
vOriginalQuantity = sales[position].picked.toString(),
vStateFk = PRESACADOR,
vBuyFk = originalItemScan, callFunction = "saleTrackingReplace"
)
} }

View File

@ -13,11 +13,9 @@ import es.verdnatura.domain.ConstAndValues.SACADOR
import es.verdnatura.presentation.base.BaseFragment import es.verdnatura.presentation.base.BaseFragment
import es.verdnatura.presentation.common.* import es.verdnatura.presentation.common.*
import es.verdnatura.presentation.view.component.CustomDialog import es.verdnatura.presentation.view.component.CustomDialog
import es.verdnatura.presentation.view.feature.main.activity.MainActivity
import es.verdnatura.presentation.view.feature.sacador.adapter.CollectionAdapter import es.verdnatura.presentation.view.feature.sacador.adapter.CollectionAdapter
import es.verdnatura.presentation.view.feature.sacador.model.CollectionVO import es.verdnatura.presentation.view.feature.sacador.model.CollectionVO
import es.verdnatura.presentation.view.feature.smarttag.sacador.fragment.AssociateSmartTagsFragment import es.verdnatura.presentation.view.feature.smarttag.sacador.fragment.AssociateSmartTagsFragment
import timber.log.Timber.d
class SacadorFragment : class SacadorFragment :

View File

@ -1,7 +1,8 @@
<vector android:height="24dp" <vector
android:height="24dp"
android:viewportHeight="24.0" android:width="24dp"
android:viewportWidth="24.0" android:viewportHeight="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> android:viewportWidth="24"
xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#F7931E" android:pathData="M13,3c-4.97,0 -9,4.03 -9,9L1,12l3.89,3.89 0.07,0.14L9,12L6,12c0,-3.87 3.13,-7 7,-7s7,3.13 7,7 -3.13,7 -7,7c-1.93,0 -3.68,-0.79 -4.94,-2.06l-1.42,1.42C8.27,19.99 10.51,21 13,21c4.97,0 9,-4.03 9,-9s-4.03,-9 -9,-9zM12,8v5l4.28,2.54 0.72,-1.21 -3.5,-2.08L13.5,8L12,8z"/> <path android:fillColor="#F7931E" android:pathData="M13,3c-4.97,0 -9,4.03 -9,9L1,12l3.89,3.89 0.07,0.14L9,12L6,12c0,-3.87 3.13,-7 7,-7s7,3.13 7,7 -3.13,7 -7,7c-1.93,0 -3.68,-0.79 -4.94,-2.06l-1.42,1.42C8.27,19.99 10.51,21 13,21c4.97,0 9,-4.03 9,-9s-4.03,-9 -9,-9zM12,8v5l4.28,2.54 0.72,-1.21 -3.5,-2.08L13.5,8L12,8z"/>
</vector> </vector>

View File

@ -1,5 +1,8 @@
<vector android:height="24dp" android:tint="#FFFFFF" <vector
android:viewportHeight="24.0" android:viewportWidth="24.0" android:height="24dp"
android:tint="#FFFFFF"
android:viewportHeight="24.0"
android:viewportWidth="24.0"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#FFFFFF" android:pathData="M13,3c-4.97,0 -9,4.03 -9,9L1,12l3.89,3.89 0.07,0.14L9,12L6,12c0,-3.87 3.13,-7 7,-7s7,3.13 7,7 -3.13,7 -7,7c-1.93,0 -3.68,-0.79 -4.94,-2.06l-1.42,1.42C8.27,19.99 10.51,21 13,21c4.97,0 9,-4.03 9,-9s-4.03,-9 -9,-9zM12,8v5l4.28,2.54 0.72,-1.21 -3.5,-2.08L13.5,8L12,8z"/> <path android:fillColor="#FFFFFF" android:pathData="M13,3c-4.97,0 -9,4.03 -9,9L1,12l3.89,3.89 0.07,0.14L9,12L6,12c0,-3.87 3.13,-7 7,-7s7,3.13 7,7 -3.13,7 -7,7c-1.93,0 -3.68,-0.79 -4.94,-2.06l-1.42,1.42C8.27,19.99 10.51,21 13,21c4.97,0 9,-4.03 9,-9s-4.03,-9 -9,-9zM12,8v5l4.28,2.54 0.72,-1.21 -3.5,-2.08L13.5,8L12,8z"/>
</vector> </vector>

View File

@ -0,0 +1,8 @@
<vector
android:height="24dp"
android:width="24dp"
android:viewportHeight="24"
android:viewportWidth="24"
xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#F7931E" android:pathData="M13,3c-4.97,0 -9,4.03 -9,9L1,12l3.89,3.89 0.07,0.14L9,12L6,12c0,-3.87 3.13,-7 7,-7s7,3.13 7,7 -3.13,7 -7,7c-1.93,0 -3.68,-0.79 -4.94,-2.06l-1.42,1.42C8.27,19.99 10.51,21 13,21c4.97,0 9,-4.03 9,-9s-4.03,-9 -9,-9zM12,8v5l4.28,2.54 0.72,-1.21 -3.5,-2.08L13.5,8L12,8z"/>
</vector>

View File

@ -69,6 +69,14 @@
android:textColor="@color/verdnatura_white" android:textColor="@color/verdnatura_white"
android:layout_weight="1" android:layout_weight="1"
android:gravity="center"/> android:gravity="center"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Prioridad"
android:textSize="@dimen/body2"
android:textColor="@color/verdnatura_white"
android:layout_weight="1"
android:gravity="center"/>
<TextView <TextView
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"

View File

@ -49,6 +49,14 @@
android:textColor="@color/verdnatura_white" android:textColor="@color/verdnatura_white"
android:layout_weight="1" android:layout_weight="1"
android:gravity="center"/> android:gravity="center"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@{item.priority}"
android:textSize="@dimen/body2"
android:textColor="@color/verdnatura_white"
android:layout_weight="1"
android:gravity="center"/>
<TextView <TextView
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"

View File

@ -22,7 +22,7 @@ buildscript {
classpath 'com.android.tools.build:gradle:7.0.4' classpath 'com.android.tools.build:gradle:7.0.4'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath 'com.google.gms:google-services:4.3.10'//4.3.5 classpath 'com.google.gms:google-services:4.3.10'//4.3.5
classpath 'com.google.firebase:firebase-crashlytics-gradle:2.8.1'//2.5.2 // classpath 'com.google.firebase:firebase-crashlytics-gradle:2.8.1'//2.5.2
// NOTE: Do not place your application dependencies here; they belong // NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files // in the individual module build.gradle files