Version 8.4.1Beta=8.4 Master,sin envio rockets de sacador/controlador y quitar strings.

This commit is contained in:
Sergio De la torre 2022-06-02 06:50:29 +02:00
parent da7121aa50
commit 3b1f7c96c5
49 changed files with 604 additions and 464 deletions

View File

@ -14,7 +14,6 @@
<option value="$PROJECT_DIR$/app" />
</set>
</option>
<option name="resolveModulePerSourceSet" value="false" />
</GradleProjectSettings>
</option>
</component>

View File

@ -91,6 +91,8 @@
<entry key="..\:/Users/sergiodt/AndroidStudioProjects/vn-warehouseManager/app/src/main/res/drawable/ic_local_parking_orange_24dp.xml" value="0.21041666666666667" />
<entry key="..\:/Users/sergiodt/AndroidStudioProjects/vn-warehouseManager/app/src/main/res/drawable/ic_local_shipping_black_24dp.xml" value="0.11979166666666667" />
<entry key="..\:/Users/sergiodt/AndroidStudioProjects/vn-warehouseManager/app/src/main/res/drawable/ic_local_shipping_black_24dp_selected.xml" value="0.11979166666666667" />
<entry key="..\:/Users/sergiodt/AndroidStudioProjects/vn-warehouseManager/app/src/main/res/drawable/ic_logo.xml" value="0.266" />
<entry key="..\:/Users/sergiodt/AndroidStudioProjects/vn-warehouseManager/app/src/main/res/drawable/ic_logo_salix.xml" value="0.266" />
<entry key="..\:/Users/sergiodt/AndroidStudioProjects/vn-warehouseManager/app/src/main/res/drawable/ic_loyalty_black_24dp.xml" value="0.21041666666666667" />
<entry key="..\:/Users/sergiodt/AndroidStudioProjects/vn-warehouseManager/app/src/main/res/drawable/ic_mode_edit_black_24dp.xml" value="0.15052083333333333" />
<entry key="..\:/Users/sergiodt/AndroidStudioProjects/vn-warehouseManager/app/src/main/res/drawable/ic_more_vert_black_24dp.xml" value="0.26" />
@ -173,7 +175,7 @@
<entry key="..\:/Users/sergiodt/AndroidStudioProjects/vn-warehouseManager/app/src/main/res/layout/fragment_historicovehiculo.xml" value="0.23052536231884058" />
<entry key="..\:/Users/sergiodt/AndroidStudioProjects/vn-warehouseManager/app/src/main/res/layout/fragment_inventary.xml" value="0.11271529888551166" />
<entry key="..\:/Users/sergiodt/AndroidStudioProjects/vn-warehouseManager/app/src/main/res/layout/fragment_inventary_old.xml" value="0.22604166666666667" />
<entry key="..\:/Users/sergiodt/AndroidStudioProjects/vn-warehouseManager/app/src/main/res/layout/fragment_item_card.xml" value="0.16666666666666666" />
<entry key="..\:/Users/sergiodt/AndroidStudioProjects/vn-warehouseManager/app/src/main/res/layout/fragment_item_card.xml" value="0.22" />
<entry key="..\:/Users/sergiodt/AndroidStudioProjects/vn-warehouseManager/app/src/main/res/layout/fragment_itemdayofsale_card.xml" value="0.22" />
<entry key="..\:/Users/sergiodt/AndroidStudioProjects/vn-warehouseManager/app/src/main/res/layout/fragment_itemexpeditionstate_card.xml" value="0.22" />
<entry key="..\:/Users/sergiodt/AndroidStudioProjects/vn-warehouseManager/app/src/main/res/layout/fragment_itemproposal.xml" value="0.22" />

View File

@ -13,8 +13,10 @@ android {
applicationId "es.verdnatura"
minSdkVersion 21
targetSdkVersion 30
versionCode 118
versionName "8.4.1Beta" //versionCode 118: arreglat rocket a Alex i llevat callFunction,strings ok
versionCode 120
versionName = "8.4"
//versionName "8.4.2Beta" versioncode 119
//versionName "8.4.1Beta" //versionCode 118: arreglat rocket a Alex i llevat callFunction,strings ok
//versionName "8.4Beta" //versionCode 117: return i workerAppTester
//versionName "8.3" //versionCode 116: versionCode 116: cambios finales en return, diseño grafico...

View File

@ -11,8 +11,8 @@
"type": "SINGLE",
"filters": [],
"attributes": [],
"versionCode": 118,
"versionName": "8.4.1Beta",
"versionCode": 120,
"versionName": "8.4",
"outputFile": "app-release.apk"
}
],

View File

@ -5,8 +5,8 @@ import retrofit2.converter.gson.GsonConverterFactory
class ApiNodeJsUtils {
companion object {
//const val BASE_URL:String = "http://192.168.1.108:8000/"
const val BASE_URL:String = "https://smart-tag.verdnatura.es"
const val BASE_URL:String = "http://10.1.2.24:7777/"
// const val BASE_URL:String = "https://smart-tag.verdnatura.es"
fun getApiService():NodeJsService{
val nodeJsRetrofit = Retrofit.Builder().baseUrl(BASE_URL).addConverterFactory(
GsonConverterFactory.create()).build()

View File

@ -1,7 +1,6 @@
package es.verdnatura.domain
import android.content.Context
import android.util.Log.d
import androidx.preference.PreferenceManager
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory

View File

@ -5,6 +5,7 @@ import com.google.gson.JsonObject
import es.verdnatura.presentation.view.feature.collection.SalesModified
import es.verdnatura.presentation.view.feature.collection.SalesModifiedList
import es.verdnatura.presentation.view.feature.collection.SalixSaleQuantity
import es.verdnatura.presentation.view.feature.collection.sales
import es.verdnatura.presentation.view.feature.login.model.workerId
import es.verdnatura.presentation.view.feature.sacador.model.CollectionVO
import es.verdnatura.presentation.view.feature.sacador.model.MistakeTypeVO
@ -438,22 +439,6 @@ class GetSacadorControladorUserCase(context: Context) : RestClient(context) {
params
)
}
fun get_salesModifiedFromTicket(
usuario: String,
password: String,
ticketFk: String
): Call<List<SalesModified>> {
val params: ArrayList<String> = ArrayList()
params.add(ticketFk)
return restClient!!.get_salesModifiedFromTicket(
"json",
"1",
usuario,
password,
"application/json",
params
)
}
fun getIdFromCode(usuario: String, password: String, code: String): Call<String> {
@ -498,6 +483,28 @@ class GetSacadorControladorUserCase(context: Context) : RestClient(context) {
)
}
fun transferSalesSalix(
token: String,
ticketFk:String,
saleFk: String,
quantity: String,
): Call<Any> {
return salixClient!!.transferSalesSalix(
"json",
"1",
token,
"application/json",
ticketFk,
sales(saleId = saleFk.toInt(), quantity = quantity.toInt())
)
}
fun collectionIncreaseQuantitySalix(
token: String,

View File

@ -6,6 +6,7 @@ import es.verdnatura.presentation.common.itemPackingTypeSalix
import es.verdnatura.presentation.view.feature.ajustes.model.SectorItemVO
import es.verdnatura.presentation.view.feature.articulo.model.ItemPackingType
import es.verdnatura.presentation.view.feature.collection.SalixSaleQuantity
import es.verdnatura.presentation.view.feature.collection.sales
import es.verdnatura.presentation.view.feature.login.model.LoginSalixVO
import es.verdnatura.presentation.view.feature.login.model.SalixGrupo
import es.verdnatura.presentation.view.feature.login.model.SalixMessageVO
@ -72,6 +73,18 @@ interface SalixService {
Call<Any>
@POST("tickets/{idTicket}/transferSales")
fun transferSalesSalix(
@Header("aplicacion") aplicacion: String,
@Header("version") version: String,
@Header("Authorization") authorization: String,
@Header("Content-Type") content_type: String,
@Path("idTicket") idTicket:String,
@Body params: sales
):
Call<Any>
//https://test-salix.verdnatura.es/api/Departments?filter={"fields": {"id": true, "name": true},"where": {"name": "COMPRAS"}}
// http://test-salix.verdnatura.es/api/Departments?filter={"fields": {"id": true, "name": true},"where": {"hasToMistake": "FALSE"}}

View File

@ -253,6 +253,7 @@ override fun onViewCreated(view: View, savedInstanceState: Bundle?)
R.drawable.ic_mode_edit_black_24dp->getString(R.string.allowChangeShelving)
R.drawable.ic_delete_forever_black_24dp->getString(R.string.deleteAllitems)
R.drawable.ic_flash_auto_black_24dp->getString(R.string.allowAutomaticAddItem)
R.drawable.ic_logo_salix->getString(R.string.accessSalix)
else -> {""}
}
@ -542,7 +543,10 @@ override fun onViewCreated(view: View, savedInstanceState: Bundle?)
val preferences = PreferenceManager.getDefaultSharedPreferences(context)
preferences.getString(getString(R.string.baseurl),"").toString()
}
"base_urlSalix"->{
val preferences = PreferenceManager.getDefaultSharedPreferences(context)
preferences.getString(getString(R.string.base_urlSalix),"").toString()
}
else -> {""}
}

View File

@ -9,7 +9,6 @@ import es.verdnatura.presentation.view.feature.buscaritem.model.ItemLocationVO
import es.verdnatura.presentation.view.feature.faltas.model.ItemFaltasVO
import es.verdnatura.presentation.view.feature.inventario.model.ItemInventaryVO
import es.verdnatura.presentation.view.feature.paletizador.model.ItemExpeditionScanVO
import es.verdnatura.presentation.view.feature.paletizador.model.ItemExpeditionStateRow
import es.verdnatura.presentation.view.feature.paletizador.model.ItemExpeditionTruckVO
import es.verdnatura.presentation.view.feature.paletizador.model.ItemPalletVO
import es.verdnatura.presentation.view.feature.pasillero.model.PasillerosItemVO
@ -102,7 +101,10 @@ interface OnPalletClickListener {
}
interface OnComprobarPalletViewClickListener {
fun onComprobarPalletViewClickListener(itemTruck: ItemExpeditionTruckVO,itemPallet: ItemPalletVO)
fun onComprobarPalletViewClickListener(
itemTruck: ItemExpeditionTruckVO,
itemPallet: ItemPalletVO
)
}
interface OnScanLongClickListener {
@ -140,3 +142,4 @@ interface OnStarSelectedListener {
interface onVehicleSelected {
fun onVehicleClick(userFk: String)
}

View File

@ -147,13 +147,13 @@ class AjustesFragment :
workerupdateSector.observe(viewLifecycleOwner, {
binding.splashProgress.visibility = View.GONE
ma.messageWithSound(it.errorMessage,it.isError,false)
ma.messageWithSound(if (it.isError) it.errorMessage else{getString(R.string.sectorUpdated)},it.isError,false)
})
workerupdatePrinter.observe(viewLifecycleOwner, {
binding.splashProgress.visibility = View.GONE
ma.messageWithSound(it.errorMessage,it.isError,false)
ma.messageWithSound(if (it.isError) it.errorMessage else{getString(R.string.printerUpdated)},it.isError,false)
})
binding.ajustessItems.adapter = ajustesAdapter

View File

@ -221,7 +221,7 @@ class AjustesViewModel(context: Context) : BaseViewModel() {
}
fun worker_updateSector(user: String, password: String, sectorFk: String) {
d("El sector marcado dentro es " + sectorFk)
d("El sector marcado dentro es %s", sectorFk)
getAjustesUserCase.worker_updateSector(user, password, sectorFk)
.enqueue(object : Callback<Unit> {
override fun onFailure(call: Call<Unit>, t: Throwable) {
@ -247,9 +247,10 @@ class AjustesViewModel(context: Context) : BaseViewModel() {
)
} else {
_workerupdateSector.value = ResponseItemVO(
response = "Actualizado sector",
response = response.message(),
isError = false,
errorMessage = "Actualizado sector"
errorMessage = ""
)
}
@ -266,7 +267,7 @@ class AjustesViewModel(context: Context) : BaseViewModel() {
}
fun worker_updatePrinter(user: String, password: String, printerFk: String) {
d("La impresora marcada " + printerFk)
//d("La impresora marcada " + printerFk)
getAjustesUserCase.worker_updatePrinter(user, password, printerFk)
.enqueue(object : Callback<Unit> {
override fun onFailure(call: Call<Unit>, t: Throwable) {
@ -292,10 +293,10 @@ class AjustesViewModel(context: Context) : BaseViewModel() {
)
} else {
_workerupdatePrinter.value = ResponseItemVO(
response = "Actualizada impresora",
response = response.message(),
isError = false,
errorMessage = "Actualizada impresora"
)
errorMessage = "")
}
}

View File

@ -85,7 +85,7 @@ class ItemCardFragment(
private fun setToolBar() {
binding.mainToolbar.toolbarIcons.visibility = View.VISIBLE
binding.mainToolbar.toolbarIcons.visibility = GONE
val listIcons: ArrayList<ImageView> = ArrayList()
@ -93,14 +93,19 @@ class ItemCardFragment(
iconReload.setImageResource(R.drawable.ic_autorenew_black_24dp)
val iconHistory = ImageView(context)
iconHistory.setImageResource(R.drawable.ic_history_black_24dp)
val iconSalix = ImageView(context)
iconSalix.setImageResource(R.drawable.ic_logo_salix)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
iconReload.tooltipText = getTooltip(R.drawable.ic_autorenew_black_24dp)
iconHistory.tooltipText = getTooltip(R.drawable.ic_history_black_24dp)
iconSalix.tooltipText= getTooltip(R.drawable.ic_logo_salix)
}
listIcons.add(iconSalix)
listIcons.add(iconReload)
listIcons.add(iconHistory)
binding.mainToolbar.toolbarIcons.adapter =
ToolBarAdapterTooltip(listIcons, object : OnOptionsSelectedListener {
@ -124,6 +129,16 @@ class ItemCardFragment(
}
}
iconSalix.drawable -> {
binding.splashProgress.visibility = View.VISIBLE
//getItemCard(itemFk)
ma.openFragmentWeb(itemInfoG!!.id)
/* ma.onPasillerosItemClickListener(
PasillerosItemVO(title = getString(R.string.titleHistorical)),
itemInfoG!!.id
)*/
}
}
}
@ -202,6 +217,7 @@ class ItemCardFragment(
if (it.id != "0") {
binding.itemcardLayout.visibility = View.VISIBLE
setItemCard(it)
binding.mainToolbar.toolbarIcons.visibility = View.VISIBLE
} else {
binding.splashProgressTwo.visibility = GONE
binding.itemcardLayout.visibility = View.GONE
@ -261,6 +277,7 @@ class ItemCardFragment(
binding.itemcardTag2.text = itemInfo.value5
binding.itemcardTag3.text = itemInfo.value6
binding.itemcardTag4.text = itemInfo.value7 + " " + itemInfo.origin
binding.itemcardBuyer.text =itemInfo.buyer
listItemsRow = ArrayList()
//sergio itemcard por item_getInfo
@ -372,6 +389,7 @@ class ItemCardFragment(
action = "updatePacking"
)
)
/* sergio: quitar de back cuando ya tengan la app actualizada todos
listItemsRow.add(
ItemCardRowVO(
title = getString(R.string.MINIMO),
@ -379,7 +397,7 @@ class ItemCardFragment(
isEditable = true,
action = "itemSaveMin"
)
)
)*/
listItemsRow.add(
ItemCardRowVO(
title = getString(R.string.Referencia),
@ -398,14 +416,14 @@ class ItemCardFragment(
)
//sergio para itemTypePacking
listItemsRow.add(
/* listItemsRow.add(
ItemCardRowVO(
title = getString(R.string.tipodeencajado),
value = itemInfo.itemPackingTypeFk,
isEditable = true,
action = "updateSector"
)
)
)*/
// listItemsRow.add(ItemCardRowVO(title = "Artículos similares",value = itemInfo.itemPackingTypeFk,isEditable = true, action = "itemProposal"))
@ -697,7 +715,7 @@ class ItemCardFragment(
private fun prepareBarcodeDialog(itemB: ItemCardRowVO) {
customDialogList.setTitle("Barcodes").setOkButton(getString(R.string.save)) {
customDialogList.setTitle(getString(R.string.barcodes)).setOkButton(getString(R.string.save)) {
ma.hideKeyboard(customDialogList.getEditText())
if (!customDialogList.getValue().isNullOrEmpty())
updateBarcode(customDialogList.getValue(), "0", itemB)

View File

@ -55,8 +55,6 @@ class ItemCardViewModel(context: Context) : BaseViewModel() {
override fun onResponse(call: Call<ItemCardVO>, response: Response<ItemCardVO>) {
// Timber.d("el nombre de la funcion es : "+nameofFunction({ } ))-->devuelve onResponse
//Timber.d("el nombre de la funcion es : "+nameofFunction(this))//-->devuelve getItemCard
if (response.body() != null) {
_itemcard.value = response.body()!!

View File

@ -32,6 +32,7 @@ class ItemCardVO (
var urlImage:String = "",
var itemPackingTypeFk:String =" ",
var reference:String="",
var buyer:String="",
//sergio para modificar la llamada de itemCard a item_getInfo

View File

@ -109,7 +109,7 @@ class BufferLoadFragment(
if (it.isError) {
ma.messageWithSound(it.errorMessage,it.isError,true)
} else {
// sergio: viene de la bbdd así
if (it.response.equals("Registro añadido")){
ma.messageWithSound(it.response,false,true)
@ -132,10 +132,11 @@ class BufferLoadFragment(
private fun getTextToPosition(TagsScaned: Int): String {
return when (TagsScaned) {
1 -> "Escanea buffer"
else -> {"Escanea buffer"}
}
return getString(R.string.scanBuffer)
/* when (TagsScaned) {
1 -> getString(R.string.scanBuffer)
else -> {getString(R.string.scanBuffer)}
}*/
}

View File

@ -88,7 +88,7 @@ class BuscarItemFragment(
totalVisible += it.visible.toInt()
}
binding.mainToolbar.toolbarTitle.text =
"Item: " + itemFk + " Total visible: " + totalVisible
getString(R.string.item) + itemFk + getString(R.string.visibleTotal) + totalVisible
}

View File

@ -55,7 +55,7 @@ class QaualityFragment(
customDialog = CustomDialog(requireContext())
ma.hideBottomNavigation(View.GONE)
binding.splashProgress.visibility = View.VISIBLE
binding.mainToolbar.toolbarTitle.text = "itemShelving_BuyerTask"
binding.mainToolbar.toolbarTitle.text = getString(R.string.qualityFragment)
setToolBar()
setEvents()
super.init()
@ -136,10 +136,10 @@ class QaualityFragment(
}
}
if (item.visible.contains("Visible:",ignoreCase = true)){
if (item.visible.contains(getString(R.string.visible),ignoreCase = true)){
item.visible = item.visible
}else{
item.visible = "Visible: "+item.visible
item.visible = getString(R.string.visible)+item.visible
}
item.iconResourceOk = R.drawable.ic_start_ok

View File

@ -74,20 +74,19 @@ class ClaimFragment(
LinearLayoutManager(requireContext(), LinearLayoutManager.VERTICAL, false)
}
private fun itemShelving_addByClaim(shelvingOrSmarttag: String) {
private fun itemShelving_addByClaim(shelving: String) {
binding.splashProgress.visibility = VISIBLE
viewModel.itemShelving_addByClaim(
getData(USER),
getData(PASSWORD),
listClaims.first().toString(),
shelvingOrSmarttag
shelving
)
customDialogList.dismiss()
}
private fun setEvents() {
binding.mainToolbar.backButton.setOnClickListener {
@ -138,14 +137,13 @@ class ClaimFragment(
}
private fun getTextToPosition(TagsScaned: Int): String {
var message = "Datos completos"
var message = getString(R.string.dataCompllete)
when (TagsScaned) {
1 -> message = "Escanea matrícula"
1 -> message = getString(R.string.scanShelving)
}
return message
}
@ -154,8 +152,8 @@ class ClaimFragment(
var message = ""
when (TagScaned) {
1 -> message = "Reclamación:"
2 -> message = "Matrícula:"
1 -> message = getString(R.string.claimLabel)
2 -> message = getString(R.string.shelving)
}
@ -175,7 +173,7 @@ class ClaimFragment(
private fun showInputClaim() {
customDialogList.setTitle("Inserta el código de reclamación.")
customDialogList.setTitle(getString(R.string.insertClaimCode))
.setOkButton(getString(R.string.end)) {
ma.hideKeyboard(customDialogList.getEditText())

View File

@ -49,12 +49,12 @@ class ClaimViewModel(context: Context) : BaseViewModel() {
})
}
fun messageError(message: String,call: String ): ResponseItemVO? {
/* fun messageError(message: String,call: String ): ResponseItemVO? {
return ResponseItemVO(
isError = true,
errorMessage = "Error al llamar a " + call + " . Descripción del error:" + message
)
}
}*/
}

View File

@ -15,6 +15,11 @@ class SalixSaleQuantity(
var quantity: Int = 0
)
class sales(
var saleId : Int =0,
var quantity: Int = 0
)
class SalesModified(
var ticketFk:Int=0,
var itemFk:String="",

View File

@ -11,7 +11,8 @@ import android.os.Bundle
import android.speech.SpeechRecognizer
import android.util.Log
import android.view.View
import android.view.View.*
import android.view.View.GONE
import android.view.View.VISIBLE
import android.view.inputmethod.EditorInfo
import android.view.inputmethod.InputMethodManager
import android.widget.ImageView
@ -412,22 +413,27 @@ class CollectionFragment(
})
salesModifiedList.observe(viewLifecycleOwner, Observer {
responseSplit.observe(viewLifecycleOwner) {
binding.splashProgress.visibility = GONE
if (!goBack) {
if (it.list.get(0).isError){
ma.messageWithSound((it.list.get(0).errorMessage),true,true,getString(R.string.error),true)
if (it.isError) {
ma.messageWithSound(
it.errorMessage,
it.isError, true
)
}else{
sendRocketWithSalesModified(it.list)
ma.messageWithSound(
"Split ok",
it.isError, false
)
}
}
}
goBack=false
})
responseItem_updatePackingShelve.observe(viewLifecycleOwner, Observer {
binding.splashProgress.visibility = GONE
@ -480,7 +486,8 @@ class CollectionFragment(
if (binding.splashProgress != null) binding.splashProgress.visibility = View.GONE
// if (!goBack) {
if (it.isError) {
customDialog.setTitle(getString(R.string.disponibility)).setDescription(it.errorMessage)
customDialog.setTitle(getString(R.string.disponibility))
.setDescription(it.errorMessage)
.setKoButton(getString(R.string.close)) {
scanRequest()
customDialog.dismiss()
@ -503,7 +510,8 @@ class CollectionFragment(
getData(PASSWORD),
collection.collectionFk,
getData(SECTORFK),
type)
type
)
// //Log.i("VERDNATURA:","La collection es ${collection.collectionFk}")
}
@ -518,7 +526,8 @@ class CollectionFragment(
if (binding.splashProgress != null) binding.splashProgress.visibility = View.GONE
if (!goBack2) {
if (it.isError) {
customDialog.setTitle(getString(R.string.error)).setDescription(it.errorMessage)
customDialog.setTitle(getString(R.string.error))
.setDescription(it.errorMessage)
.setKoButton(getString(R.string.close)) {
scanRequest()
customDialog.dismiss()
@ -654,7 +663,6 @@ class CollectionFragment(
responseDel.observe(viewLifecycleOwner, Observer {
if (it.isError) {
binding.splashProgress.visibility = GONE
if (!goBack) {
@ -741,7 +749,8 @@ class CollectionFragment(
var message = ""
for (sales in list) {
message=message+"Se ha modificado la cantidad original del artículo ${sales.itemFk} de ${sales.originalQuantity} a ${sales.newQuantity} del ticket ${sales.ticketFk}"
message =
message + "Se ha modificado la cantidad original del artículo ${sales.itemFk} de ${sales.originalQuantity} a ${sales.newQuantity} del ticket ${sales.ticketFk}"
message = message + "\r\n"
}
@ -1035,7 +1044,7 @@ class CollectionFragment(
parking = txtscan
)
}
Timber.i("La coleccion es " + tickets[0])
Timber.i("La coleccion es %s", tickets[0])
/* if (mpok != null) mpok!!.start()
"Ticket aparcado".toast(requireContext())*/
} else {
@ -1215,7 +1224,9 @@ class CollectionFragment(
private fun setListPosition(position: Int, isFromBack: Boolean) {
storedPosition = position
if (type == SACADOR || (type == CONTROLADOR && (getData(SECTORDESCRIP).uppercase() == getString(
R.string.sectorALGEMESI)))) {
R.string.sectorALGEMESI
)))
) {
if (binding.fragmentSacadorCollections != null) {
binding.fragmentSacadorCollections.addViewObserver {
lm!!.scrollToPositionWithOffset(position, 0)
@ -1341,8 +1352,11 @@ class CollectionFragment(
}
try {
// Log.i("VERDNATURA:","Pulso COGER-1")
customDialogList.setTitle("$shelving($item) $total de $longName").setOkButton(getString(
R.string.take)) {
customDialogList.setTitle("$shelving($item) $total de $longName").setOkButton(
getString(
R.string.take
)
) {
if (customDialogList.getValueTwo().isNotEmpty()) {
if (isNumber(customDialogList.getValue()) && isNumber(total) && customDialogList.getValue()
.toInt() > total.toInt()
@ -1809,7 +1823,8 @@ class CollectionFragment(
}
customDialog.setTitle("Artículo: " + item.id)
.setDescription("Disponible: " + item.available).setOkButton(getString(R.string.accept)) {
.setDescription("Disponible: " + item.available)
.setOkButton(getString(R.string.accept)) {
scanRequest()
customDialog.dismiss()
}.show()
@ -1849,28 +1864,18 @@ class CollectionFragment(
goBack = false
changeTicketState()
//get_salesModifiedFromTicket()
}
}
private fun get_salesModifiedFromTicket(){
if (type == CONTROLADOR) {
viewModel.get_salesModifiedFromTicket(
usuario = getData(USER),
password = getData(PASSWORD),
ticketFk = collection.collectionFk
)
}
}
private fun ticketCollection_setUsedShelves() {
if (type.equals("CHECKER") && (isMarking && getData(SECTORDESCRIP).uppercase() != getString(R.string.sectorALGEMESI))
if (type.equals("CHECKER") && (isMarking && getData(SECTORDESCRIP).uppercase() != getString(
R.string.sectorALGEMESI
))
) {
@ -2065,6 +2070,19 @@ class CollectionFragment(
private fun split(position: Int, quantity: String) {
//sergio: SPLIT SALIX
/* Log.d("VERDNATURA::", "split")
Log.d(
"VERDNATURA::",
"IdTicket-" + sales[position].ticketFk + "-saleFk-" + sales[position].saleFk + "-quant-" + sales[position].quantity
)
viewModel.transferSalesSalix(
getData(TOKEN),
ticketFk = sales[position].ticketFk,
saleFk = sales[position].saleFk,
quantity = quantity
)*/
quantityCollectionSplit = quantity
positionCollectionSplit = position
@ -2285,7 +2303,8 @@ class CollectionFragment(
}
}
sendSalixMessageNew(message, sales[positionCollectionMissing].salePersonFk)
//sergio:ahora desde encajado
// sendSalixMessageNew(message, sales[positionCollectionMissing].salePersonFk)
binding.splashProgress.visibility = VISIBLE
viewModel.collectionTicketGet(
@ -2306,9 +2325,7 @@ class CollectionFragment(
//sales[positionIncreaseQuantity].originalQuantity = quantityIncrease
sales[positionIncreaseQuantity].quantity = quantityIncrease
/*if (type == CONTROLADOR){
showShelving(position,0,quantityPicked)
}*/
} catch (e: Exception) {
}
saleAdapter?.notifyDataSetChanged()
@ -2320,16 +2337,9 @@ class CollectionFragment(
"Se ha modificado la cantidad original " + sales[positionIncreaseQuantity].originalQuantity + " del artículo " + sales[positionIncreaseQuantity].itemFk + " a nueva cantidad: " + sales[positionIncreaseQuantity].quantity + " del ticket " + ticket
sendSalixMessageNew(message, sales[positionIncreaseQuantity].salePersonFk)
/* val ticket =
"[" + sales[positionIncreaseQuantity].ticketFk + "](https://salix.verdnatura.es/#!/ticket/" + sales[positionIncreaseQuantity].ticketFk + "/summary)"
val message =
"Se ha modificado la cantidad original " + sales[positionIncreaseQuantity].originalQuantity + " del artículo " + sales[positionIncreaseQuantity].itemFk + " a nueva cantidad: " + sales[positionIncreaseQuantity].quantity + " del ticket " + ticket
viewModel.sendChekingPresence(
token = token,
workerId = sales[positionIncreaseQuantity].salePersonFk,
message = message, "sendChekingPresence"
)*/
//sergio: ahora desde encajadores
// sendSalixMessageNew(message, sales[positionIncreaseQuantity].salePersonFk)
sales[positionIncreaseQuantity].originalQuantity = quantityIncrease
@ -2431,7 +2441,7 @@ class CollectionFragment(
//OTROS
private fun showScanner(index: Int, sale: SaleVO) {
Log.d("VERDNATURA", "Entrant en el show scanner al punxar sobre la sale")
//Timber.d("VERDNATURA-Entrant en el show scanner al punxar sobre la sale")
customDialogInput.setTitle("" + sale.itemFk)
.setDescription(getString(R.string.Escaneaelcarroparaelitemseleccionado))
.setOkButton(getString(R.string.accept)) {
@ -2494,7 +2504,8 @@ class CollectionFragment(
password = getData(PASSWORD),
vSaleFk = mistakeSale?.saleFk!!,
vUserFk = mistakeSale?.workerFk!!,
vTypeFk = it.id)
vTypeFk = it.id
)
getString(R.string.errorRegistered).toast(requireContext())
customDialogList.dismiss()
}

View File

@ -3,6 +3,7 @@ package es.verdnatura.presentation.view.feature.collection.fragment
import android.content.Context
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import es.verdnatura.R
import es.verdnatura.domain.GetLoginUserCase
import es.verdnatura.domain.GetSacadorControladorUserCase
import es.verdnatura.domain.GetUbicadorUserCase
@ -22,7 +23,7 @@ import retrofit2.Response
class CollectionViewModel(context: Context) : BaseViewModel() {
val emptyMessage = "La colección no tiene tickets"
val emptyMessage = context.getString(R.string.collectionNoTickets)
private val getSacadorControladorUserCase: GetSacadorControladorUserCase =
GetSacadorControladorUserCase(context)
@ -87,6 +88,10 @@ class CollectionViewModel(context: Context) : BaseViewModel() {
val responseMissingTrash: LiveData<ResponseItemVO>
get() = _responseMissingTrash
private val _responseSplit by lazy { MutableLiveData<ResponseItemVO>() }
val responseSplit: LiveData<ResponseItemVO>
get() = _responseSplit
private val _responseNew by lazy { MutableLiveData<ResponseItemVO>() }
val responseNew: LiveData<ResponseItemVO>
get() = _responseNew
@ -481,6 +486,10 @@ class CollectionViewModel(context: Context) : BaseViewModel() {
})
}
fun saleMove(
usuario: String,
password: String,
@ -520,6 +529,44 @@ class CollectionViewModel(context: Context) : BaseViewModel() {
})
}
fun transferSalesSalix(
token:String,
ticketFk:String,
saleFk: String,
quantity: String,
) {
getSacadorControladorUserCase.transferSalesSalix(
token,
ticketFk,
saleFk,
quantity
).enqueue(object : Callback<Any> {
override fun onFailure(call: Call<Any>, t: Throwable) {
_responseSplit.value = ResponseItemVO(
isError = true,
errorMessage = getMessageFromAllResponse(nameofFunction(this), t.message!!)
)
}
override fun onResponse(call: Call<Any>, response: Response<Any>) {
if (response.body() == null) {
_responseSplit.value = ResponseItemVO(
isError = true,
errorMessage = getMessageFromAllResponse(
nameofFunction(this),
response.message()
)
)
} else {
_responseSplit.value =
ResponseItemVO(isError = false, response = response.message())
}
}
})
}
fun collectionMissingTrash(
usuario: String,
password: String,
@ -562,6 +609,7 @@ class CollectionViewModel(context: Context) : BaseViewModel() {
})
}
fun saleTrackingDel(usuario: String, password: String, saleFk: String) {
getSacadorControladorUserCase.saleTrackingDel(usuario, password, saleFk)
.enqueue(object : Callback<Any> {
@ -691,66 +739,6 @@ class CollectionViewModel(context: Context) : BaseViewModel() {
})
}
fun get_salesModifiedFromTicket(
usuario: String,
password: String,
ticketFk: String,
) {
getSacadorControladorUserCase.get_salesModifiedFromTicket(usuario, password, ticketFk)
.enqueue(object : Callback<List<SalesModified>> {
override fun onResponse(
call: Call<List<SalesModified>>,
response: Response<List<SalesModified>>
) {
if (response.body() != null) {
_salesModifiedList.value = response.body()?.let { SalesModifiedList(it) }
} else {
val listError: ArrayList<SalesModified> = ArrayList()
listError.add(
SalesModified(
isError = true,
errorMessage = getMessageFromAllResponse(
nameofFunction(this),
response.message()
)
)
)
_salesModifiedList.value = SalesModifiedList(listError)
}
/* if (!response.isSuccessful)
{
_response.value = ResponseItemVO(
isError = true,
errorMessage = getMessageFromAllResponse(nameofFunction(this),response.message())
)
} else
{
_response.value =
ResponseItemVO(isError = false, response = "Obtenidos registros")
}*/
}
override fun onFailure(call: Call<List<SalesModified>>, t: Throwable) {
val listError: ArrayList<SalesModified> = ArrayList()
listError.add(
SalesModified(
isError = true,
errorMessage = getMessageFromAllResponse(
nameofFunction(this),
t.message!!
)
)
)
_salesModifiedList.value = SalesModifiedList(listError)
}
})
}
fun getIdFromCode(usuario: String, password: String, code: String) {

View File

@ -1,8 +1,6 @@
package es.verdnatura.presentation.view.feature.controlador.fragment
import android.content.Intent
import android.net.Uri
import android.webkit.WebChromeClient
import es.verdnatura.R
import es.verdnatura.databinding.FragmentWebBinding
@ -34,7 +32,7 @@ class WebFragment(
binding.webView.setWebChromeClient (WebChromeClient())
binding.webView.getSettings (). setJavaScriptEnabled (true)
//binding.webView.getSettings (). setJavaScriptEnabled (true)
// sergio:deprecated
//webView.getSettings (). setPluginState (WebSettings.PluginState.ON)
val webSettings = binding.webView.settings
@ -48,18 +46,19 @@ class WebFragment(
webSettings.defaultTextEncodingName = "utf-8"
binding.webView.loadUrl ("https://salix.verdnatura.es/#!/item/index")
binding.webView.loadUrl ("https://salix.verdnatura.es/#!/item/$entryPoint/summary")
val openURL = Intent(Intent.ACTION_VIEW)
// val openURL = Intent(Intent.ACTION_VIEW)
// openURL.data = Uri.parse("https://salix.verdnatura.es/#!/ticket/3271614/tracking/index")
openURL.data = Uri.parse("https://salix.verdnatura.es/#!/item/index")
startActivity(openURL)
// openURL.data = Uri.parse("https://salix.verdnatura.es/#!/item/index")
// startActivity(openURL)
}
private fun setToolbar() {
binding.mainToolbar.toolbarTitle.text = entryPoint
binding.mainToolbar.toolbarTitle.text = getString(R.string.item)+entryPoint
// binding.splashProgress.visibility= View.GONE
}

View File

@ -331,20 +331,14 @@ class ControlVehiculoFragment(
if (it.response == "false") {
customDialog.setTitle(getString(R.string.error))
.setDescription("Revisar llamada del registro de vehículos")
.setDescription(getString(R.string.reviewCAllhistorical))
.setOkButton(getString(R.string.close)) {
customDialog.dismiss()
}.show()
} else {
if (it.response == "true") {
//Log.i(TD,"insertado registro")
//"Acción registrada correctamente".toast(context)
/* customDialog.setTitle("Llamada correcta")
.setDescription("Acción registrada satisfactoriamente")
.setOkButton(getString(R.string.close)) {
customDialog.dismiss()
}.show()*/
ma.openFragmentPickers(true)
//ma.onPasillerosItemClickListener( PasillerosItemVO(title = "Sacadores"),"CONTROL")
//checkControlTimeVehicle()
@ -394,8 +388,8 @@ class ControlVehiculoFragment(
}.show()*/
customDialogInput.setTitle(getString(R.string.vehiclecontrol))
.setDescription("Escanea la matrícula del vehículo o elige sin vehículo")
.setOkButton("Coger vehículo") {
.setDescription(getString(R.string.scanPlate))
.setOkButton(getString(R.string.takeVehicle)) {
if (customDialogInput.getValue().isNotEmpty()) {
// "$description ${customDialogInput.getValue()} OK".toast(requireContext())
insertControlTimeVehicle(customDialogInput.getValue(), "IN")
@ -406,7 +400,7 @@ class ControlVehiculoFragment(
hideKeyboards()
}
.setKoButton("Sin vehículo") {
.setKoButton(getString(R.string.noVehicle)) {
customDialogInput.dismiss()
ma.openFragmentPickers(true)
/* if (tagName.equals(HistoricoVehiculoFragment.TAG)) {

View File

@ -119,7 +119,7 @@ class DayOfSaleFragment(
if (it.list.isEmpty()){
customDialog.setTitle(getString(R.string.noResults))
.setDescription("No hay nada vendido para el carro escaneado. ")
.setDescription(getString(R.string.wagoonNoSaleToday))
.setOkButton(getString(R.string.close)) {
customDialog.dismiss()
}.show()
@ -148,7 +148,7 @@ class DayOfSaleFragment(
}else{
customDialog.setTitle("Información").setDescription("Parking ok").setOkButton(getString(R.string.close)) {
customDialog.setTitle(getString(R.string.info)).setDescription(getString(R.string.parkingOk)).setOkButton(getString(R.string.close)) {
customDialog.dismiss()
}.show()
@ -163,7 +163,7 @@ class DayOfSaleFragment(
private fun showParking() {
customDialogList.setTitle("Escanea el parking")
customDialogList.setTitle(getString(R.string.showParking))
.setOkButton(getString(R.string.close)) {
ma.hideKeyboard(customDialogList.getEditText())

View File

@ -50,7 +50,7 @@ class DayOfSaleViewModel(context: Context) : BaseViewModel() {
}
if (response.body() != null){
i("crea la lista "+response.body())
_itemShelvingSaleDateList.value = response.body()?.let { ItemShelvingSaleDateList(it)
}
i("finalizada la lista ${response.body()}")

View File

@ -55,7 +55,7 @@ class itemShelvingLogViewModel(context: Context) : BaseViewModel() {
if (response.body() != null)
{
i("crea la lista " + response.body())
i("crea la lista %s", response.body())
_itemShelvingLogList.value = response.body()?.let {
ItemShelvingLogList(it)
}

View File

@ -19,6 +19,7 @@ import es.verdnatura.presentation.base.BaseFragment
import es.verdnatura.presentation.common.hideKeyboard
import es.verdnatura.presentation.view.component.CustomDialog
import es.verdnatura.presentation.view.feature.main.activity.MainActivity
import kotlinx.coroutines.*
import java.lang.Boolean.TRUE
import kotlin.system.exitProcess
@ -68,18 +69,31 @@ class LoginFragment : BaseFragment<FragmentLoginBinding, LoginViewModel>(LoginVi
if (binding.edittextServer.text!!.contains("test-app.verdnatura.es")) {
saveData(
"base_urlSalix",
"https://test-salix.verdnatura.es/api/"
"https://salix.verdnatura.es/api/"
)
} else {
saveData(
"base_urlSalix",
"https://salix.verdnatura.es/api/"
/*working_in_test*/
"https://test-salix.verdnatura.es/api/"
)
}
"${getString(R.string.serverSalix)}${getData("base_urlSalix")})".toast(
requireContext()
)
this.hideKeyboard()
//sergio: deberia lanzar la funcion nueva creada por mi restartapp de BaseFragment. Pero no vuelve a arrancar
CoroutineScope(Dispatchers.IO).launch {
delay(2000)
withContext(Dispatchers.Main) {
exitProcess(0)
}
}
}
false
@ -140,7 +154,7 @@ class LoginFragment : BaseFragment<FragmentLoginBinding, LoginViewModel>(LoginVi
) {
val openURL = Intent(Intent.ACTION_VIEW)
openURL.data =
// sergio REdmine Tarea #3730
// sergio Redmine Tarea #3730
//Uri.parse("https://app.verdnatura.es/bin/vn-picking.apk")
Uri.parse(it.url)
//Log.d("VERDNATURA::","Datos"+ openURL.data)
@ -203,7 +217,7 @@ class LoginFragment : BaseFragment<FragmentLoginBinding, LoginViewModel>(LoginVi
deviceLog_add(
binding.edittextUsername.text.toString(),
binding.edittextPassword.text.toString(),
getString(R.string.app_name),
getString(R.string.logAppName),
getInfoVersionNameApp(),
getData(ANDROID_ID)
)
@ -227,7 +241,8 @@ class LoginFragment : BaseFragment<FragmentLoginBinding, LoginViewModel>(LoginVi
}
if (it.vIsAuthorized == "1" && !it.vMessage.isNullOrEmpty()) {
binding.splashProgress.visibility = View.GONE
customDialog.setTitle(getString(R.string.info)).setDescription(it.vMessage)
customDialog.setTitle(getString(R.string.info))
.setDescription(it.vMessage)
.setOkButton(getString(R.string.close)) {
customDialog.dismiss()
/* binding.splashProgress.visibility = View.VISIBLE

View File

@ -122,7 +122,7 @@ class MainActivity : BaseActivity<ActivityMainBinding>(), OnPasillerosItemClickL
}
fun isWorkingInDesign():Boolean{
/* fun isWorkingInDesign():Boolean{
val prefs: SharedPreferences = getSharedPreferences("es.verdnatura.user.prefs", 0)
val working= prefs.getInt("working_in_design", -1)
return working != -1
@ -139,7 +139,7 @@ class MainActivity : BaseActivity<ActivityMainBinding>(), OnPasillerosItemClickL
}
}
}*/
fun havePrinter(): Boolean {
val prefs: SharedPreferences = getSharedPreferences("es.verdnatura.user.prefs", 0)
@ -496,7 +496,7 @@ class MainActivity : BaseActivity<ActivityMainBinding>(), OnPasillerosItemClickL
}
"Histórico Shelving" -> {
addFragmentOnTop(itemShelvingLogFragment.newInstance("Histórico Shelving"))
d("VERDNATURA::", "es el historico ")
Timber.tag("VERDNATURA::").d("es el historico ")
}
"Log Shelving" -> {
addFragmentOnTop(shelvingLogFragment.newInstance("Log Shelving"))
@ -562,6 +562,7 @@ class MainActivity : BaseActivity<ActivityMainBinding>(), OnPasillerosItemClickL
}
override fun onComprobarPalletViewClickListener(
itemTruck: ItemExpeditionTruckVO,
itemPallet: ItemPalletVO
@ -578,8 +579,6 @@ class MainActivity : BaseActivity<ActivityMainBinding>(), OnPasillerosItemClickL
override fun onCollectionSelected(collection: CollectionVO, type: String) {
// fm.popBackStack()
when (type) {
PREITEMPICKER -> {
@ -643,6 +642,11 @@ class MainActivity : BaseActivity<ActivityMainBinding>(), OnPasillerosItemClickL
addFragmentOnTop(ExpeditionStateFragment.newInstance("Consultar estado expedición"))
}
fun openFragmentWeb(url:String) {
addFragmentOnTop(WebFragment.newInstance(url))
}
fun hideBottomNavigation(visible: Int) {

View File

@ -20,12 +20,12 @@ class PasilleroViewModel : BaseViewModel() {
PasillerosItemVO(20,
R.drawable.barcode_scan,
"Asociar Sacador SmartTags",R.string.SmarttagAssociate)
)
) */
_pasillerositem.add(
PasillerosItemVO(21,
R.drawable.barcode_scan,
"Registrar SmartTags",R.string.SmarttagRegister)
)*/
)
//sergio para que aparezca el nuevo menu

View File

@ -403,7 +403,7 @@ class EndSacadorFragment(
private fun responseSaleMoveSuccesful() {
Log.d("VERDNATURA::", "responseSaleMove succesful")
//Timber.d("responseSaleMove succesful")
try {
sales[positionCollectionSplit].saldo = quantityCollectionSplit.toInt()
} catch (e: Exception) {
@ -697,12 +697,12 @@ class EndSacadorFragment(
var isOk = false
for (saleVO in sales) {
Log.d("VERDNATURA::", "El item buscado es " + saleVO.itemFk)
//Timber.tag("VERDNATURA::").d("El item buscado es " + saleVO.itemFk)
if (saleVO.quantity != saleVO.picked) {
//1- Por carro
var shelvingIndex = 0
for (placementVO in saleVO.carros) {
Log.d("VERDNATURA::", "La matric " + placementVO.shelving)
//Timber.tag("VERDNATURA::").d("La matric " + placementVO.shelving)
if (txtscan.uppercase() == placementVO.shelving.uppercase()) {
if (mpok != null) mpok!!.start()
isOk = true
@ -1556,7 +1556,7 @@ class EndSacadorFragment(
"sendChekingPresence"
)
Log.d("VERDNATURA", "el trabajador es " + sales[position].salesPersonFk)
//Timber.d("VERDNATURA").d("el trabajador es " + sales[position].salesPersonFk)
try {
sales[position].saldo = quantity.toInt()
} catch (e: Exception) {

View File

@ -396,7 +396,7 @@ class PreSacadorFragment :
ticket = ticketFk
binding.splashProgress.visibility = View.VISIBLE
d("VERDNATURA::", "ticket:" + ticket)
//Timber.d("ticket:" + ticket)
viewModel.ticketToPrePrepare(
usuario = getData(USER),
getData(PASSWORD),
@ -525,12 +525,12 @@ class PreSacadorFragment :
var isOk = false
//Timber.tag("VERDNATURA::").d("Entramos a buscar")
for (saleVO in sales) {
d("VERDNATURA::", "El item buscado es " + saleVO.itemFk)
//Timber.tag("VERDNATURA::").d("El item buscado es " + saleVO.itemFk)
if (saleVO.quantity != saleVO.picked) {
//1- Por carro
var shelvingIndex = 0
for (placementVO in saleVO.carros) {
d("VERDNATURA::", "La matric " + placementVO.shelving)
//Timber.tag("VERDNATURA::").d("La matric " + placementVO.shelving)
if (txtscan.uppercase() == placementVO.shelving.uppercase()) {
if (mpok != null) mpok!!.start()
isOk = true

View File

@ -561,7 +561,7 @@ class PreSacadorViewModel(context: Context) : BaseViewModel() {
}
})
} catch (e: Exception) {
Log.d("VERDNATURA", "error " + e.message)
//Log.d("error " + e.message)
}
}
@ -685,7 +685,7 @@ class PreSacadorViewModel(context: Context) : BaseViewModel() {
.enqueue(object :
Callback<List<PreSacadorItemVO>> {
override fun onFailure(call: Call<List<PreSacadorItemVO>>, t: Throwable) {
d("VERDNATURA::", "ha fallado")
//Timber.tag("VERDNATURA::").d("ha fallado")
_salesList.value = listOf()
}
@ -694,7 +694,7 @@ class PreSacadorViewModel(context: Context) : BaseViewModel() {
response: Response<List<PreSacadorItemVO>>
) {
if (response.body() != null) {
d("VERDNATURA::", "entra con lineas")
//Timber.d("entra con lineas")
_salesList.value = response.body()?.let { it }
} else {
d("VERDNATURA::", "ES NULO")

View File

@ -19,7 +19,6 @@ import es.verdnatura.presentation.common.*
import es.verdnatura.presentation.view.component.CustomDialog
import es.verdnatura.presentation.view.component.CustomDialogInput
import es.verdnatura.presentation.view.component.CustomDialogList
import es.verdnatura.presentation.view.component.CustomDialogThreeButtons
import es.verdnatura.presentation.view.feature.articulo.adapter.BarcodeAdapter
import es.verdnatura.presentation.view.feature.articulo.model.BarcodeVO
import es.verdnatura.presentation.view.feature.main.activity.MainActivity
@ -586,9 +585,9 @@ class ReposicionFragment : BaseFragment<ReposicionFragmentBinding, ReposicionVie
private fun unMarkLine(position: Int) {
if (sales[position].quantity == sales[position].picked) {
customDialog.setTitle("Desmarcar linea")
.setDescription("Vas a desmarcar la linea: " + sales[position].itemFk + " ¿Estás seguro?")
.setOkButton("Desmarcar") {
customDialog.setTitle(getString(R.string.unmarkLine))
.setDescription(getString(R.string.goUnmark) + sales[position].itemFk + getString(R.string.sure))
.setOkButton(getString(R.string.unmark)) {
sales[position].picked = 0
saleAdapter!!.notifyDataSetChanged()

View File

@ -19,9 +19,10 @@ import es.verdnatura.presentation.view.component.CustomDialog
import es.verdnatura.presentation.view.feature.sacador.adapter.CollectionAdapter
import es.verdnatura.presentation.view.feature.sacador.model.CollectionVO
import es.verdnatura.presentation.view.feature.smarttag.sacador.fragment.AssociateSmartTagsFragment
import java.lang.Boolean.TRUE
private var getCollections = false
class SacadorFragment :
BaseFragment<FragmentSacadorBinding, SacadorViewModel>(SacadorViewModel::class) {
@ -32,7 +33,6 @@ class SacadorFragment :
private var collectionsList: ArrayList<CollectionVO> = ArrayList()
private var adapter: CollectionAdapter? = null
private var resultTagMode: String? = ""
private var getCollections = false
companion object {
@ -49,23 +49,35 @@ class SacadorFragment :
override fun init() {
//viewModel.smartTagInsertTicket("571974")
//viewModel.smartTagInsertTicket("577387")
customDialog = CustomDialog(requireContext())
binding.splashProgress.visibility = View.GONE
binding.splashProgress.visibility = View.VISIBLE
binding.splashProgressTwo.visibility = View.GONE
binding.mainToolbar.toolbarTitle.text = getString(R.string.getcollection)
setToolBar()
setEvents()
/*var working_in_test=false //sergio: Ok en app
if (!working_in_test) {*/
//Log.d("VERDNATURA::","getCollections es "+ getCollections)
if (getCollections) {
viewModel.collection_new_smart(
getData(USER),
getData(PASSWORD),
getData(SECTORFK),
getData(WAGON),
getData(TAGSTYPE)
)
//getCollections = false
} else {
var working_in_test=false //sergio: Ok en app
if (!working_in_test) {
viewModel.collectionGetSalix(token = getData(TOKEN))
/* }else{
}else{
viewModel.collectionGet( getData(USER),
getData(PASSWORD),"collection_get")
}*/
getData(PASSWORD))
}
}
super.init()
@ -75,26 +87,24 @@ class SacadorFragment :
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setFragmentResultListener("requestKey") { requestKey, bundle ->
val result = bundle.getString("tagMode")
//Timber.d("VERDNATURA::").d("el result es " + result)
resultTagMode = result
if (result.equals("complete")) {
getCollections = TRUE
}
if (result.equals("complete") && getData(TAGSTYPE).equals("SmartTags")) {
binding.splashProgress.visibility = View.VISIBLE
viewModel.collection_new_smart(
getData(USER),
getData(PASSWORD),
getData(SECTORFK),
getData(WAGON),
getData(TAGSTYPE)
)
getCollections = true
//Timber.d("VERDNATURA::").d("el getCollections es " + getCollections)
} else {
getCollections = false
}
}
}
}
override fun onPause() {
@ -163,13 +173,12 @@ class SacadorFragment :
if (getData(TAGSTYPE).equals("Stickers")) {
viewModel.collectionNew(
getData(USER),
getData(PASSWORD), getData(SECTORFK), getData(WAGON)
getData(PASSWORD),
getData(SECTORFK),
getData(WAGON)
)
} else {
Log.d("VERDNATURA::", "ResultMode" + resultTagMode)
if (resultTagMode.equals("complete")) {
binding.splashProgress.visibility = View.VISIBLE
} else if (getCollections) {
Log.d("VERDNATURA::","getCollections sobrevive")
viewModel.collection_new_smart(
getData(USER),
getData(PASSWORD),
@ -177,16 +186,14 @@ class SacadorFragment :
getData(WAGON),
getData(TAGSTYPE)
)
/* viewModel.collectionNew(getData(USER),
getData(PASSWORD), getData(SECTORFK), getData(WAGON),"collection_new_wagon")
*/
} else {
requireActivity().addFragment(
AssociateSmartTagsFragment.newInstance(AssociateSmartTagsFragment.TAG),
R.id.main_frame_layout,
AssociateSmartTagsFragment.TAG
)
}
// }
}
@ -227,7 +234,7 @@ class SacadorFragment :
goBack = false
//sergio:para asegurarnos que aparece en pantalla.
var working_in_test = false //sergio: ok en app SACADOR
val working_in_test = false //sergio: ok en app SACADOR
if (!working_in_test) {
viewModel.collectionGetSalix(token = getData(TOKEN))
} else {
@ -239,13 +246,15 @@ class SacadorFragment :
responseCollectionSmart.observe(viewLifecycleOwner, Observer {
binding.splashProgress.visibility = View.GONE
Log.d("VERDNATURA::","Entramos a hacer el inserttt")
getCollections=false
if (it.isError) {
ma.messageWithSound(it.errorMessage, true, false)
// viewModel.smartTagInsertTicket(it.response)
} else {
ma.messageWithSound(it.errorMessage, false, false)
// Log.d("VERDNATURA::", "La colec a insertTicket es " + it.response)
viewModel.smartTagInsertTicket(it.response)
goBack = false
@ -258,9 +267,10 @@ class SacadorFragment :
if (!goBack) {
if (it.isError) {
ma.messageWithSound(it.errorMessage, true, false)
getCollections=true
} else {
ma.messageWithSound(it.errorMessage, false, false)
getCollections=false
viewModel.collectionGetSalix(getData(TOKEN))
}
goBack = false

View File

@ -13,7 +13,8 @@ import es.verdnatura.presentation.common.OnCollectionSelectedListener
import es.verdnatura.presentation.view.feature.precontrol.ShowTicketViewModel
import es.verdnatura.presentation.view.feature.sacador.model.CollectionVO
class ShowTicketFragment(var menuOrigin: String) : BaseFragment<FragmentControladorBinding, ShowTicketViewModel>(
class ShowTicketFragment(var menuOrigin: String) :
BaseFragment<FragmentControladorBinding, ShowTicketViewModel>(
ShowTicketViewModel::class
) {
@ -36,7 +37,9 @@ class ShowTicketFragment(var menuOrigin: String) : BaseFragment<FragmentControla
binding.splashProgress.visibility = View.GONE
binding.mainToolbar.toolbarTitle.text = getString(R.string.verticket)
if (menuOrigin =="main"){hideBackButton(binding.mainToolbar)}
if (menuOrigin == "main") {
hideBackButton(binding.mainToolbar)
}
setEvents()

View File

@ -97,7 +97,7 @@ class RegisterSmartTagsFragment(
binding.splashProgress.visibility = VISIBLE
Log.d("VERDNATURA::","El selvingORSmarttag es "+shelvingOrSmarttag)
// Log.d("VERDNATURA::","El selvingORSmarttag es "+shelvingOrSmarttag)
if (listSmartTags.size < 1) {
} else {
@ -127,22 +127,7 @@ class RegisterSmartTagsFragment(
smartAdapter!!.notifyDataSetChanged()
customDialogList.setValue("")
}
private fun bindShelving_remove() {
// binding.splashProgress.visibility = VISIBLE
//poner el unbindshleving aqui
//sergio:esto se debe hacer en
("http://localhost:7777/unbindShelving/${listSmartTags.first().code}" + "&" + listSmartTags.last().code + "&${listSmartTags.size}").toast(
requireContext()
)
listSmartTags.removeAt(listSmartTags.size - 1)
smartAdapter!!.notifyDataSetChanged()
}
private fun scanRequest() {
if (binding.scanInput != null) {
@ -217,10 +202,10 @@ class RegisterSmartTagsFragment(
var message = ""
when (TagsScaned) {
1 -> message = "Escanea etiqueta superior"
2 -> message = "Escanea etiqueta del medio"
3 -> message = "Escanea etiqueta inferior"
4 -> message = "Carro escaneado"
1 -> message = getString(R.string.scanHighLabel)
2 -> message = getString(R.string.scanMedLabel)
3 -> message = getString(R.string.scanLowLabel)
4 -> message = getString(R.string.scannedWagon)
}
return message
@ -243,7 +228,7 @@ class RegisterSmartTagsFragment(
private fun showScanSmartTags() {
customDialogList.setTitle("Escanea matrícula del carro y etiquetas smartTags de arriba a abajo.")
customDialogList.setTitle(getString(R.string.scanUpToDown))
.setOkButton(getString(R.string.end)) {
ma.hideKeyboard(customDialogList.getEditText())
@ -295,16 +280,16 @@ class RegisterSmartTagsFragment(
if (listSmartTags.size > 3) {
customDialog.setTitle("Atención")
.setDescription("Carro escaneado completamente.¿Registrar otro carro?")
.setOkButton("Ok")
customDialog.setTitle(getString(R.string.info))
.setDescription(getString(R.string.registerOneWagoon))
.setOkButton(getString(R.string.accept))
{
listSmartTags.clear()
customDialog.dismiss()
showScanSmartTags()
}
.setKoButton("Salir") {
.setKoButton(getString(R.string.exit)) {
customDialog.dismiss()
customDialogList.dismiss()
requireActivity().onBackPressed()

View File

@ -152,7 +152,7 @@ class AssociateSmartTagsFragment(
// Log.i("VERDNATURA::", "Revisar llamada de las etiquetas smarttags : ${it.response}")
if (it.isError) {
ma.messageWithSound(it.errorMessage,true,false)
ma.messageWithSound("Asegúrate de escanear una matrícula."+it.errorMessage,true,false)
} else {

View File

@ -5,12 +5,17 @@ import android.os.Message
import android.util.Log
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import com.google.gson.JsonObject
import es.verdnatura.domain.GetSmarttagsUserCase
import es.verdnatura.domain.GetVehicleControlTimeUserCase
import es.verdnatura.domain.NodeJsService
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.view.feature.login.model.errorMessage
import es.verdnatura.presentation.view.feature.smarttag.sacador.model.SmartTagRegister
import org.json.JSONObject
import retrofit2.Call
import retrofit2.Callback
@ -50,13 +55,13 @@ class SmartTagsViewModel(context: Context) : BaseViewModel() {
GetSmarttagsUserCase.workerShelving_add(usuario,password,shelvingFK).enqueue(object : Callback<Void>{
override fun onFailure(call: Call<Void>, t: Throwable) {
_responseadd.value = messageError(t.message!!,"workerShelving_add")
_responseadd.value = messageError(t.message!!, nameofFunction(this))
}
override fun onResponse(call: Call<Void>, response: Response<Void>) {
if (!response.isSuccessful){
_responseadd.value = messageError(response.message(),"workerShelving_add")
_responseadd.value = messageError(response.message(),nameofFunction(this))
}else{
_responseadd.value = ResponseItemVO(isError = false,response = response.message()!!)
}
@ -96,11 +101,6 @@ class SmartTagsViewModel(context: Context) : BaseViewModel() {
_responseremove.value = ResponseItemVO(isError = false,response = response.message()!!)
}
/* if (response.body() == null){
_responseremove.value = ResponseItemVO(isError = true,errorMessage = "Error al borrar matrícula o etiqueta")
}else{
_responseremove.value = ResponseItemVO(isError = false,response = response.body()!!)
}*/
}
@ -121,7 +121,7 @@ class SmartTagsViewModel(context: Context) : BaseViewModel() {
val responseSmart: SmartTagRegister
if (response.isSuccessful()){
//Log.i("VERDNATURA::","El mensaje es "+response.message())
Log.d("VERDNATURA::","El mensaje es "+response.errorBody())
responseSmart = SmartTagRegister(
message="Registrada smartTag.",
isError = false,
@ -129,13 +129,16 @@ class SmartTagsViewModel(context: Context) : BaseViewModel() {
)
}else{
// sergio: buscar JSON obtindre el "message" Smarttag
var text = JSONObject(response.errorBody()!!.string()).get("error")
var message =JSONObject(text.toString()).get("message")
responseSmart = SmartTagRegister(
isError = true,
errorMessage = response.message()
errorMessage = message.toString()
)
Log.d("VERDNATURA::","El mensaje es el error nodejs es ${response.errorBody()} "+response.raw()+ "-"+ response.message())
//Log.d("VERDNATURA::","" +message)
}
@ -147,7 +150,7 @@ class SmartTagsViewModel(context: Context) : BaseViewModel() {
val responseSmart =
SmartTagRegister(isError = true, errorMessage = t.message!!)
//Log.i("VERDNATURA::","el error nodejs es "+t.message+"--"+t.cause.toString()+"--"+t.stackTrace.toString())
Log.d("VERDNATURA::","el error nodejs es "+t.message+"--"+t.cause.toString()+"--"+t.stackTrace.toString())
_registerSmarttagNode.value = responseSmart
}

View File

@ -18,7 +18,7 @@ class TransferenciaViewModel(context: Context) : BaseViewModel() {
val response: LiveData<ResponseItemVO>
get() = _response
fun itemShelvingTransfer(usuario:String,password:String,itemFk:String,shelvingFk:String){
/* fun itemShelvingTransfer(usuario:String,password:String,itemFk:String,shelvingFk:String){
getUbicadorUserCase.itemShelvingTransfer(usuario,password,itemFk,shelvingFk).enqueue(object :
Callback<Any> {
override fun onFailure(call: Call<Any>, t: Throwable) {
@ -32,5 +32,5 @@ class TransferenciaViewModel(context: Context) : BaseViewModel() {
}
}
})
}
}*/
}

View File

@ -1,5 +1,6 @@
package es.verdnatura.presentation.view.feature.ubicador.adapter
import android.provider.Settings.Global.getString
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.core.content.ContextCompat
@ -62,7 +63,7 @@ class UbicadorAdapter (
onMoreClickListener.onMoreClickListener(item)
}
namelayout.setOnClickListener {
onPasillerosItemClickListener.onPasillerosItemClickListener(PasillerosItemVO(title = "Consultar artículo"),item.item)
onPasillerosItemClickListener.onPasillerosItemClickListener(PasillerosItemVO(title = res.getString(R.string.itemSearch)),item.item)
}
}

View File

@ -236,7 +236,7 @@ class UbicadorFragment(
}
binding.editImg.setOnClickListener {
customDialogInput.setTitle("Cambiar matrícula").setValue("").setOkButton(getString(R.string.save)) {
customDialogInput.setTitle(getString(R.string.changeShelving)).setValue("").setOkButton(getString(R.string.save)) {
viewModel.shelvingChange(
getData(USER),
getData(PASSWORD),

View File

@ -0,0 +1,9 @@
<vector android:height="24dp" android:viewportHeight="40"
android:viewportWidth="40" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#88bd32"
android:pathData="m27.583,4.083c0.25,-0.083 0.5,-0.167 0.75,-0.167L39,2.5l-0.167,6.083c-0.167,5 -3.083,9.5 -6.667,10.5 -0.25,0.083 -0.5,0.167 -0.75,0.167L20.75,20.667l0.167,-6.083c0.167,-5.083 3.083,-9.5 6.667,-10.5z" android:strokeWidth="0.83333331"/>
<path android:fillColor="#88bd32"
android:pathData="m5.917,24.917c0.167,-0.083 0.417,-0.083 0.583,-0.083L14.25,23.75 14.167,28.083C14.083,31.75 11.917,35 9.333,35.75c-0.25,0.083 -0.417,0.083 -0.583,0.083L1,36.917 1.083,32.5c0.167,-3.583 2.25,-6.917 4.833,-7.583z" android:strokeWidth="0.83333331"/>
<path android:fillColor="#f7931e"
android:pathData="m10,40c-0.333,0 -0.583,-0.25 -0.583,-0.5 0,-0.333 0.167,-0.583 0.5,-0.667 0,0 2.5,-0.25 4.583,-2.833 2.5,-3.167 3.417,-8.417 2.5,-15.333C16.083,13.583 17.167,8.083 20.083,4.417 23.167,0.5 27.083,0 27.25,0c0.333,0 0.583,0.167 0.667,0.5 0,0.333 -0.167,0.583 -0.5,0.667 0,0 -3.583,0.5 -6.333,3.917 -2.75,3.5 -3.667,8.667 -2.833,15.417 0.917,7.333 0,12.833 -2.833,16.25 -2.333,2.917 -5.167,3.25 -5.417,3.25 0.083,0 0.083,0 0,0z" android:strokeColor="#00000000"/>
</vector>

View File

@ -59,7 +59,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_weight="1">
android:layout_weight="1.25">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
@ -109,7 +109,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_weight="1">
android:layout_weight="1.1">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
@ -154,7 +154,35 @@
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_weight="1">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/buyer"
android:textColor="@color/verdnatura_brown_grey"
android:textSize="@dimen/body2"
android:textStyle="bold"
android:layout_marginEnd="@dimen/layout_margin_min"/>
<TextView
android:id="@+id/itemcard_buyer"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="buyer"
android:textColor="@color/verdnatura_white"
android:textSize="@dimen/body2"
android:textStyle="bold" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
<!-- VALORES ================================================================================================== -->
<RelativeLayout

View File

@ -8,34 +8,15 @@
android:layout_height="match_parent"
android:background="@color/verdnatura_black">
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/scan"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColorHint="@android:color/darker_gray"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/main_toolbar">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/scan_input"
style="@style/InputLineTextSearch"
android:layout_width="match_parent"
android:backgroundTint="@android:color/white"
android:hint="@string/Escaneaetiqueta"
android:inputType="text"
android:lines="1"
android:maxLines="1"
android:textColor="@color/verdnatura_white"
android:textColorHint="@android:color/darker_gray" />
</com.google.android.material.textfield.TextInputLayout>
' <include
<include
android:id="@+id/main_toolbar"
layout="@layout/toolbar_fragment"
android:visibility="gone"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<LinearLayout
@ -45,25 +26,27 @@
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@color/verdnatura_black_8_alpha_6"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:gravity="center">
<WebView
android:id="@+id/webView"
android:layout_width="match_parent"
android:layout_marginTop="30dp"
android:layout_height="match_parent" />
<com.airbnb.lottie.LottieAnimationView
android:layout_width="wrap_content"
android:layout_height="@dimen/verdnatura_logo_large_height"
android:visibility="invisible"
app:lottie_autoPlay="true"
app:lottie_loop="true"
app:lottie_rawRes="@raw/orange_loading"
app:lottie_speed="2" />
<WebView
android:id="@+id/webView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>

View File

@ -191,7 +191,7 @@
<string name="undone">Deshacer</string>
<string name="labels">Etiquetas: </string>
<string name="nameApp">warehouse</string>
<string name="scanSmarttagOrShelving">Escanea etiqueta/s electrónica/s o matrícula/s</string>
<string name="scanSmarttagOrShelving">Escanea matrícula del carro/s</string>
<string name="scanHighLabel">Escanea etiqueta superior</string>
<string name="scanMedLabel">Escanea etiqueta del medio</string>
<string name="scanLowLabel">Escanea etiqueta inferior</string>
@ -280,4 +280,32 @@
<string name="fault">Falta</string>
<string name="trash">Basura</string>
<string name="errorNotNumber">El elemento introducido no es un número</string>
<string name="buyer">Comprador</string>
<string name="accessSalix">Accede a Salix para ver más información</string>
<string name="item">"Ítem : "</string>
<string name="changeShelving">Cambiar matrícula</string>
<string name="registerOneWagoon">Carro escaneado completamente.¿Registrar otro carro?</string>
<string name="exit">Salir</string>
<string name="scanUpToDown">Escanea matrícula del carro y etiquetas smartTags de arriba a abajo.</string>
<string name="visible">Visible:</string>
<string name="visibleTotal"> Total visible: </string>
<string name="printerUpdated">Impresora actualizada</string>
<string name="sectorUpdated">sector actualizado</string>
<string name="logAppName">warehouse</string>
<string name="base_urlSalix">base_urlSalix</string>
<string name="serverSalix">Apuntando a servidor Salix ( </string>
<string name="qualityFragment">itemShelving_BuyerTask</string>
<string name="dataCompllete">Datos completos</string>
<string name="claimLabel">Reclamación:</string>
<string name="shelving">Matrícula:</string>
<string name="insertClaimCode">Inserta el código de reclamación.</string>
<string name="scanBuffer">Escanea buffer</string>
<string name="barcodes">Barcodes</string>
<string name="collectionNoTickets">La colección no tiene tickets</string>
<string name="reviewCAllhistorical">Revisar llamada del registro de vehículos</string>
<string name="takeVehicle">Coger vehículo</string>
<string name="noVehicle">Sin vehículo</string>
<string name="wagoonNoSaleToday">\"No hay nada vendido para el carro escaneado. \"</string>
<string name="parkingOk">Parking ok</string>
<string name="showParking">Escanea el parking</string>
</resources>

View File

@ -190,7 +190,7 @@
<string name="undone">Deshacer</string>
<string name="labels">Etiquetas: </string>
<string name="nameApp">warehouse</string>
<string name="scanSmarttagOrShelving">Escanea etiqueta/s electrónica/s o matrícula/s</string>
<string name="scanSmarttagOrShelving">Escanea matrícula del carro/s</string>
<string name="scanHighLabel">Escanea etiqueta superior</string>
<string name="scanMedLabel">Escanea etiqueta del medio</string>
<string name="scanLowLabel">Escanea etiqueta inferior</string>
@ -279,5 +279,34 @@
<string name="fault">Falta</string>
<string name="trash">Basura</string>
<string name="errorNotNumber">El elemento introducido no es un número</string>
<string name="buyer">Buyer</string>
<string name="accessSalix">Accede a Salix para ver más información</string>
<string name="item">"Ítem : "</string>
<string name="changeShelving">Cambiar matrícula</string>
<string name="registerOneWagoon">Carro escaneado completamente.¿Registrar otro carro?</string>
<string name="exit">Salir</string>
<string name="scanUpToDown">Escanea matrícula del carro y etiquetas smartTags de arriba a abajo.</string>
<string name="visible">Visible:</string>
<string name="visibleTotal"> Total visible: </string>
<string name="printerUpdated">Impresora actualizada</string>
<string name="sectorUpdated">sector actualizado</string>
<string name="logAppName">warehouse</string>
<string name="base_urlSalix">base_urlSalix</string>
<string name="serverSalix">Apuntando a servidor Salix (</string>
<string name="qualityFragment">itemShelving_BuyerTask</string>
<string name="dataCompllete">Datos completos</string>
<string name="claimLabel">Reclamación:</string>
<string name="shelving">Matrícula:</string>
<string name="insertClaimCode">Inserta el código de reclamación.</string>
<string name="scanBuffer">Escanea buffer</string>
<string name="barcodes">Barcodes</string>
<string name="collectionNoTickets">La colección no tiene tickets</string>
<string name="reviewCAllhistorical">Revisar llamada del registro de vehículos</string>
<string name="takeVehicle">Coger vehículo</string>
<string name="noVehicle">Sin vehículo</string>
<string name="wagoonNoSaleToday">\"No hay nada vendido para el carro escaneado. \"</string>
<string name="parkingOk">Parking ok</string>
<string name="showParking">Escanea el parking</string>
</resources>