From 0bf19d0da07d1cb1986f0904c1a0124e08d20adc Mon Sep 17 00:00:00 2001 From: Sergio De la torre Date: Thu, 11 May 2023 11:52:19 +0200 Subject: [PATCH] version 23.18.2Beta - Solucionado doble pitido, fusionada pantalla sacador, filtro a ubicador, quitado baldas. --- .idea/workspace.xml | 123 +++++---- app/beta/release/output-metadata.json | 4 +- app/build.gradle | 4 +- .../java/es/verdnatura/domain/RestClient.kt | 2 - .../java/es/verdnatura/domain/SalixService.kt | 4 +- .../verdnatura/domain/SalixServiceMessages.kt | 18 -- .../es/verdnatura/domain/VerdnaturaService.kt | 11 +- .../presentation/base/BaseFragment.kt | 1 + .../category/ChangeCategoryFragment.kt | 53 +++- .../feature/collection/adapter/SaleAdapter.kt | 3 +- .../collection/fragment/CollectionFragment.kt | 83 ++---- .../fragment/CollectionFragmentPicker.kt | 28 +- .../fragment/CollectionFragmentPreChecker.kt | 26 +- .../fragment/CollectionViewModel.kt | 4 +- .../adapters/ExpeditionLoadUnloadAdapter.kt | 66 +++++ .../delivery/fragments/LoadUnloadFragment.kt | 255 ++++++++++++++++++ .../feature/delivery/model/InfoCompany.kt | 16 ++ .../delivery/viewmodels/DeliveryViewModel.kt | 37 ++- .../feature/login/fragment/LoginFragment.kt | 3 +- .../feature/main/activity/MainActivity.kt | 82 ++++-- .../pasillero/fragment/PasilleroViewModel.kt | 36 ++- .../presacador/fragment/EndSacadorFragment.kt | 18 +- .../fragment/PreSacadorViewModel.kt | 9 +- .../sacador/fragment/SacadorFragment.kt | 5 +- .../sacador/fragment/SacadorViewModel.kt | 96 +++++++ .../showticket/ShowTicketFragment.kt | 3 +- .../showticket/ShowTicketViewModel.kt | 0 .../fragment/AutomaticAddItemFragment.kt | 9 +- .../fragment/AutomaticAddItemViewModel.kt | 2 +- .../ubicador/fragment/UbicadorFragment.kt | 5 +- .../feature/ubicador/model/ItemUbicadorVO.kt | 2 +- app/src/main/res/drawable/ic_confirm.xml | 8 + ...ragment_expedition_loadunload_delivery.xml | 144 ++++++++++ app/src/main/res/layout/item_escaner_row.xml | 2 +- .../layout/item_expedition_loadunload_row.xml | 106 ++++++++ app/src/main/res/navigation/nav_graph.xml | 2 +- app/src/main/res/raw/errorrepeat.mp3 | Bin 0 -> 24494 bytes app/src/main/res/values-es/strings.xml | 6 + app/src/main/res/values/dimens.xml | 5 + app/src/main/res/values/strings.xml | 6 + 40 files changed, 1036 insertions(+), 251 deletions(-) delete mode 100644 app/src/main/java/es/verdnatura/domain/SalixServiceMessages.kt create mode 100644 app/src/main/java/es/verdnatura/presentation/view/feature/delivery/adapters/ExpeditionLoadUnloadAdapter.kt create mode 100644 app/src/main/java/es/verdnatura/presentation/view/feature/delivery/fragments/LoadUnloadFragment.kt rename app/src/main/java/es/verdnatura/presentation/view/feature/{ => sacador/fragment}/showticket/ShowTicketFragment.kt (96%) rename app/src/main/java/es/verdnatura/presentation/view/feature/{ => sacador/fragment}/showticket/ShowTicketViewModel.kt (100%) create mode 100644 app/src/main/res/drawable/ic_confirm.xml create mode 100644 app/src/main/res/layout/fragment_expedition_loadunload_delivery.xml create mode 100644 app/src/main/res/layout/item_expedition_loadunload_row.xml create mode 100644 app/src/main/res/raw/errorrepeat.mp3 diff --git a/.idea/workspace.xml b/.idea/workspace.xml index bfebb87f..daac0a27 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -83,20 +83,47 @@ - - + + + + + + + - + + + + + + + + + + + + - - - + + + + + + + + + + + + + + + + - - @@ -295,11 +323,11 @@ + + - - @@ -409,27 +437,6 @@ @@ -853,10 +881,6 @@ - - - - file://$PROJECT_DIR$/app/src/main/java/es/verdnatura/presentation/view/feature/collection/fragment/CollectionFragment.kt - 313 - - - file://$PROJECT_DIR$/app/src/main/java/es/verdnatura/presentation/view/feature/collection/adapter/SaleAdapter.kt - 353 - - - file://$PROJECT_DIR$/app/src/main/java/es/verdnatura/presentation/view/feature/collection/fragment/CollectionFragmentPicker.kt - 125 - - - diff --git a/app/beta/release/output-metadata.json b/app/beta/release/output-metadata.json index d5bfa4fe..428f09e6 100644 --- a/app/beta/release/output-metadata.json +++ b/app/beta/release/output-metadata.json @@ -11,8 +11,8 @@ "type": "SINGLE", "filters": [], "attributes": [], - "versionCode": 180, - "versionName": "23.14Beta", + "versionCode": 183, + "versionName": "23.18.2Beta", "outputFile": "app-beta-release.apk" } ], diff --git a/app/build.gradle b/app/build.gradle index 3fd888ea..9d08856e 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -13,8 +13,8 @@ android { applicationId "es.verdnatura" minSdkVersion 24 //21 targetSdkVersion 33 - versionCode 180 - versionName = "23.14Beta" + versionCode 184 + versionName = "23.18.2Beta" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } diff --git a/app/src/main/java/es/verdnatura/domain/RestClient.kt b/app/src/main/java/es/verdnatura/domain/RestClient.kt index 68dc0e31..e2354bc5 100644 --- a/app/src/main/java/es/verdnatura/domain/RestClient.kt +++ b/app/src/main/java/es/verdnatura/domain/RestClient.kt @@ -5,11 +5,9 @@ import android.content.Context open class RestClient(context: Context) { var restClient: VerdnaturaService var salixClient: SalixService - var salixClientSend:SalixServiceSend init { restClient = ApiUtils.getApiService(context) salixClient = ApiSalixUtils.getApiService(context) - salixClientSend = ApiSalixUtilsSend.getApiService(context) } } \ No newline at end of file diff --git a/app/src/main/java/es/verdnatura/domain/SalixService.kt b/app/src/main/java/es/verdnatura/domain/SalixService.kt index 67a6f29d..90aaf5af 100644 --- a/app/src/main/java/es/verdnatura/domain/SalixService.kt +++ b/app/src/main/java/es/verdnatura/domain/SalixService.kt @@ -25,7 +25,7 @@ interface SalixService { ): Call - @POST("chats/sendCheckingPresence") + /* @POST("chats/sendCheckingPresence") fun sendChekingPresence( @Body params: SalixMessageVO ): @@ -35,7 +35,7 @@ interface SalixService { fun sendGroup( @Body params: SalixGrupo ): - Call + Call*/ @GET("collections/getSectors") fun getSectorsSalix( diff --git a/app/src/main/java/es/verdnatura/domain/SalixServiceMessages.kt b/app/src/main/java/es/verdnatura/domain/SalixServiceMessages.kt deleted file mode 100644 index 730eb97b..00000000 --- a/app/src/main/java/es/verdnatura/domain/SalixServiceMessages.kt +++ /dev/null @@ -1,18 +0,0 @@ -package es.verdnatura.domain - -import es.verdnatura.presentation.view.feature.login.model.SalixMessageVO -import retrofit2.Call -import retrofit2.http.Body -import retrofit2.http.Header -import retrofit2.http.POST - -interface SalixServiceMessages { - - @POST("chats/sendCheckingPresence") - fun sendChekingPresence( - @Header("Content-Type") content_type: String, - @Header("Authorization") authorization: String, - @Body params: SalixMessageVO - ): - Call -} \ No newline at end of file diff --git a/app/src/main/java/es/verdnatura/domain/VerdnaturaService.kt b/app/src/main/java/es/verdnatura/domain/VerdnaturaService.kt index eeecdd1f..abb15a4b 100644 --- a/app/src/main/java/es/verdnatura/domain/VerdnaturaService.kt +++ b/app/src/main/java/es/verdnatura/domain/VerdnaturaService.kt @@ -11,9 +11,7 @@ import es.verdnatura.presentation.view.feature.buscaritem.model.ItemLocationVO import es.verdnatura.presentation.view.feature.calidad.model.BuyerVO import es.verdnatura.presentation.view.feature.calidad.model.ItemBuyerVO import es.verdnatura.presentation.view.feature.collection.SalesModified -import es.verdnatura.presentation.view.feature.delivery.model.DeliveryInfo -import es.verdnatura.presentation.view.feature.delivery.model.ExpeditionInfoLog -import es.verdnatura.presentation.view.feature.delivery.model.RouteDelivery +import es.verdnatura.presentation.view.feature.delivery.model.* import es.verdnatura.presentation.view.feature.diadeventa.model.ItemShelvingSaleDate import es.verdnatura.presentation.view.feature.historicoarticulo.model.ItemHistoricoVO import es.verdnatura.presentation.view.feature.historicoshelving.model.ItemShelvingLog @@ -38,6 +36,7 @@ import retrofit2.http.Body import retrofit2.http.Header import retrofit2.http.POST + @JvmSuppressWildcards interface VerdnaturaService { @@ -849,7 +848,7 @@ interface VerdnaturaService { @POST("delivery/expeditionState_add")//NO SALIX fun expeditionState_add( - @Body vararg params: Any + @Body vararg params: Any? ): Call @@ -859,5 +858,9 @@ interface VerdnaturaService { ): Call> + @POST("/delivery/getExpeditionFromRoute") + fun getExpeditionFromRoute( + @Body vararg params: Any + ): Call> } \ No newline at end of file diff --git a/app/src/main/java/es/verdnatura/presentation/base/BaseFragment.kt b/app/src/main/java/es/verdnatura/presentation/base/BaseFragment.kt index 5c19b7f5..06640f10 100644 --- a/app/src/main/java/es/verdnatura/presentation/base/BaseFragment.kt +++ b/app/src/main/java/es/verdnatura/presentation/base/BaseFragment.kt @@ -228,6 +228,7 @@ abstract class BaseFragment(viewModelCla R.drawable.ic_collection -> getString(R.string.icViewCollection) R.drawable.ic_ubicator_check -> getString(R.string.checkerUbication) R.drawable.ic_delivery_truck ->"Abre la app de Reparto para escanear carga" + R.drawable.ic_confirm ->getString(R.string.confirmDescription) else -> { "" } diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/category/ChangeCategoryFragment.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/category/ChangeCategoryFragment.kt index 82f6ddd9..444a78d1 100644 --- a/app/src/main/java/es/verdnatura/presentation/view/feature/category/ChangeCategoryFragment.kt +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/category/ChangeCategoryFragment.kt @@ -18,7 +18,7 @@ import es.verdnatura.presentation.view.feature.packingHolland.fragment.PackingHo ) { override fun getLayoutId(): Int = R.layout.fragment_general_black - private var shelvingScaned: Int = 0 + private var itemScaned: Int = 0 private lateinit var customDialogInput: CustomDialogInput companion object { @@ -29,6 +29,7 @@ import es.verdnatura.presentation.view.feature.packingHolland.fragment.PackingHo customDialogInput = CustomDialogInput(requireContext()) binding.mainToolbar.toolbarTitle.text = entrypoint + binding.scanInput.hint = "Escanear item" binding.splashProgress.visibility = View.GONE binding.scanInput.visibility = View.VISIBLE setEvents() @@ -56,7 +57,7 @@ import es.verdnatura.presentation.view.feature.packingHolland.fragment.PackingHo "more" ).toString() ) - shelvingScaned = binding.scanInput.text.toString().toInt() + itemScaned = binding.scanInput.text.toString().toInt() showQuantityPacking() } catch (ex: Exception) { ex.message!!.toast(requireActivity()) @@ -92,7 +93,7 @@ import es.verdnatura.presentation.view.feature.packingHolland.fragment.PackingHo customDialogInput.setTitle(getString(R.string.titleChangeCategory)) - customDialogInput.setDescription(getString(R.string.ubication) + shelvingScaned) + customDialogInput.setDescription(getString(R.string.ubication) + itemScaned) .setValue("") .setOkButton(getString(R.string.modify)) { @@ -112,7 +113,8 @@ import es.verdnatura.presentation.view.feature.packingHolland.fragment.PackingHo if (actionId == EditorInfo.IME_ACTION_SEARCH || actionId == EditorInfo.IME_ACTION_DONE || actionId == 0 || actionId == 5 || actionId == 6) { if (customDialogInput.getValue().isNotEmpty()) { - callPacking(customDialogInput.getValue()) + //callPacking(customDialogInput.getValue()) + getNewPrice(customDialogInput.getValue(), itemScaned, 5.51) } return@setOnEditorActionListener true @@ -121,15 +123,52 @@ import es.verdnatura.presentation.view.feature.packingHolland.fragment.PackingHo } customDialogInput.setFocusText() + ma.hideKeyboard(customDialogInput.getEditText()) + } + + private fun getNewPrice(shelving:String,item:Int,price:Double) { + customDialogInput.setTitle(getString(R.string.titleChangeCategory)) + customDialogInput.setDescription(getString(R.string.itemChangePrice) + item + "-" + "Matrícula:"+shelving) + .setValue(price.toString()) + .setOkButton(getString(R.string.modify)) { + + if (customDialogInput.getValue().isNotEmpty() + ) { + callPacking(customDialogInput.getValue()) + } + + + }.setKoButton(getString(R.string.cancel)) { + customDialogInput.dismiss() + }.show() + + //ma.hideKeyboard(customDialogInput.getEditText()) + + customDialogInput.getEditText().setOnEditorActionListener { _, actionId, _ -> + if (actionId == EditorInfo.IME_ACTION_SEARCH || actionId == EditorInfo.IME_ACTION_DONE || actionId == 0 || actionId == 5 || actionId == 6) { + + if (customDialogInput.getValue().isNotEmpty()) { + //callPacking(customDialogInput.getValue()) + //getNewPrice(customDialogInput.getValue().toInt(), 5.51) + } + + return@setOnEditorActionListener true + } + false + } + + customDialogInput.setFocusText() + ma.hideKeyboard(customDialogInput.getEditText()) + } private fun callPacking(value: String) { try { - binding.splashProgress.visibility = View.VISIBLE - viewModel.travel_updatePacking( + // binding.splashProgress.visibility = View.VISIBLE + /* viewModel.travel_updatePacking( itemFk = shelvingScaned, packingFk = value.toInt() - ) + )*/ } catch (ex: Exception) { getString(R.string.errorInput).toast(requireActivity()) diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/collection/adapter/SaleAdapter.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/collection/adapter/SaleAdapter.kt index 354b9eae..a8eb40b2 100644 --- a/app/src/main/java/es/verdnatura/presentation/view/feature/collection/adapter/SaleAdapter.kt +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/collection/adapter/SaleAdapter.kt @@ -29,8 +29,7 @@ class SaleAdapter( private val onPackingClick: onPackingClickListener, private var onTicketClick: OnTicketClickListener? = null, private var SaleAdapter: SaleAdapter? = null, - private var type: String? = null - + private var type: String? = null, ) : RecyclerView.Adapter() { var context: Context? = null diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/collection/fragment/CollectionFragment.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/collection/fragment/CollectionFragment.kt index f513628f..ccba8f07 100644 --- a/app/src/main/java/es/verdnatura/presentation/view/feature/collection/fragment/CollectionFragment.kt +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/collection/fragment/CollectionFragment.kt @@ -607,12 +607,12 @@ class CollectionFragment( if (!goBack) { - sendSalixMessage( + /* sendSalixMessage( item = dataMessageSalix.item, ticketFk = dataMessageSalix.ticket, quantity = dataMessageSalix.quantity, salePerson = dataMessageSalix.personSale - ) + )*/ viewModel.collectionTicketGet( collection.collectionFk, getDataInt(SECTORFK), @@ -1027,7 +1027,7 @@ class CollectionFragment( } } - private fun responseSaleMoveSuccesful() { + /* private fun responseSaleMoveSuccesful() { sales[positionCollectionSplit].quantity = quantityCollectionSplit if (quantityCollectionSplit == 0) @@ -1041,7 +1041,7 @@ class CollectionFragment( sendSalixMessageNew(message, sales[positionCollectionSplit].salePersonFk) - } + }*/ private fun callPicker(extensionNumber: String) { @@ -1070,7 +1070,7 @@ class CollectionFragment( return salePerson } - private fun sendSalixMessage( + /* private fun sendSalixMessage( item: String, ticketFk: Int, quantity: String, @@ -1085,7 +1085,7 @@ class CollectionFragment( workerId = salePerson, message = message ) - } + }*/ //CREATE LIST private fun createCollectionList() { @@ -1197,7 +1197,7 @@ class CollectionFragment( var entryPoint = Gson().toJson( mutableMapOf( "entryPoint" to sale.ticketFk, - "web" to "https://salix.verdnatura.es/#!/ticket/${sale.ticketFk}/sale" + "web" to "${getData("base_urlSalix")}/#!/ticket/${sale.ticketFk}/sale" ) ) ma.onPasillerosItemClickListener( @@ -2192,60 +2192,6 @@ class CollectionFragment( } -/* private fun showDisponibility() { - - customDialogInput.setTitle(getString(R.string.Verdisponible)) - .setDescription(getString(R.string.Escaneaetiqueta)) - .setOkButton(getString(R.string.Buscar)) { - try { - if (binding.splashProgress != null) { - binding.splashProgress.visibility = View.VISIBLE - } - - } catch (e: Exception) { - } - - hideKeyboards() - viewModel.itemGetAvailable( - usuario = user, - password = password, - itemFk = customDialogInput.getValue(), - warehouseFk = warehouseFk, - "item_GetVisibleAvailable" - ) - scanRequest() - customDialogInput.dismiss() - - }.setKoButton(getString(R.string.cancel)) { - if (binding.splashProgress != null) { - binding.splashProgress.visibility = View.GONE - } - hideKeyboards() - scanRequest() - customDialogInput.dismiss() - }.setValue("").show() - customDialogInput.getEditText().requestFocus() - customDialogInput.getEditText().setOnEditorActionListener { v, actionId, event -> - if (actionId == EditorInfo.IME_ACTION_SEARCH || actionId == EditorInfo.IME_ACTION_DONE || actionId == 0) { - if (!customDialogInput.getValue().isNullOrEmpty()) { - if (binding.splashProgress != null) binding.splashProgress.visibility = View.VISIBLE - viewModel.itemGetAvailable( - usuario = user, - password = password, - itemFk = customDialogInput.getValue(), - warehouseFk = warehouseFk - ,"item_GetVisibleAvailable") - } - customDialogInput.setValue("") - scanRequest() - customDialogInput.dismiss() - hideKeyboards() - return@setOnEditorActionListener true - } - false - } - }*/ - private fun toastDisponibility(item: ItemVO) { if (item.available.isNullOrEmpty()) { item.available = "0" @@ -2296,9 +2242,10 @@ class CollectionFragment( getString(R.string.Coleccióncompleta).toast(this.context, Toast.LENGTH_SHORT) saleAdapter!!.notifyDataSetChanged() - if (!goBack) + // Se quita de la app + /* if (!goBack) ticketCollection_setUsedShelves() - goBack = false + goBack = false*/ changeTicketState() @@ -2590,7 +2537,7 @@ class CollectionFragment( saleAdapter!!.notifyDataSetChanged() - val ticket = + /*val ticket = "[" + sales[positionCollectionMissing].ticketFk + "](https://salix.verdnatura.es/#!/ticket/" + sales[positionCollectionMissing].ticketFk + "/summary)" @@ -2611,7 +2558,7 @@ class CollectionFragment( "Se ha modificado la cantidad de " + sales[positionCollectionMissing].originalQuantity + " del artículo " + sales[positionCollectionMissing].itemFk + " a nueva cantidad: " + sales[positionCollectionMissing].quantity + " del ticket " + ticket } - } + }*/ //sergio:ahora desde encajado // sendSalixMessageNew(message, sales[positionCollectionMissing].salePersonFk) @@ -2639,11 +2586,11 @@ class CollectionFragment( saleAdapter?.notifyDataSetChanged() //enviar mensaje a salix - val ticket = + /* 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 - +*/ //sergio: ahora desde encajadores // sendSalixMessageNew(message, sales[positionIncreaseQuantity].salePersonFk) @@ -2652,6 +2599,7 @@ class CollectionFragment( } +/* private fun sendSalixMessageNew(message: String, workerId: String) { viewModel.sendChekingPresence( @@ -2660,6 +2608,7 @@ class CollectionFragment( ) } +*/ private fun increaseQuantity(position: Int, quantity: Int) { positionIncreaseQuantity = position diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/collection/fragment/CollectionFragmentPicker.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/collection/fragment/CollectionFragmentPicker.kt index 08616a0c..b71e4967 100644 --- a/app/src/main/java/es/verdnatura/presentation/view/feature/collection/fragment/CollectionFragmentPicker.kt +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/collection/fragment/CollectionFragmentPicker.kt @@ -605,12 +605,12 @@ import org.json.JSONObject if (!goBack) { - sendSalixMessage( + /* sendSalixMessage( item = dataMessageSalix.item, ticketFk = dataMessageSalix.ticket, quantity = dataMessageSalix.quantity, salePerson = dataMessageSalix.personSale - ) + )*/ viewModel.collectionTicketGet( collection.collectionFk, getDataInt(SECTORFK), @@ -1032,12 +1032,12 @@ import org.json.JSONObject markLine(positionCollectionSplit, type) saleAdapter!!.notifyDataSetChanged() - val ticket = + /* val ticket = "[" + sales[positionCollectionSplit].ticketFk + "](https://salix.verdnatura.es/#!/ticket/" + sales[positionCollectionSplit].ticketFk + "/summary)" val message = getString(R.string.splitSent) + sales[positionCollectionSplit].itemFk + getString(R.string.fromTicket) + ticket - sendSalixMessageNew(message, sales[positionCollectionSplit].salePersonFk) + sendSalixMessageNew(message, sales[positionCollectionSplit].salePersonFk)*/ } @@ -1068,7 +1068,7 @@ import org.json.JSONObject return salePerson } - private fun sendSalixMessage( + /* private fun sendSalixMessage( item: String, ticketFk: Int, quantity: String, @@ -1084,7 +1084,7 @@ import org.json.JSONObject workerId = salePerson, message = message ) - } + }*/ //CREATE LIST private fun createCollectionList() { @@ -1196,7 +1196,7 @@ import org.json.JSONObject var entryPoint = Gson().toJson( mutableMapOf( "entryPoint" to sale.ticketFk, - "web" to "https://salix.verdnatura.es/#!/ticket/${sale.ticketFk}/sale" + "web" to "${getData("base_urlSalix")}/#!/ticket/${sale.ticketFk}/sale" ) ) ma.onPasillerosItemClickListener( @@ -1666,7 +1666,7 @@ import org.json.JSONObject private fun unMarkLine(position: Int, newType: String) { state = 0 - if (sales[position].isPrepared == "1") { + if ((sales[position].isPrepared == "1") || (sales[position].quantity!! > 0)) { customDialog.setTitle(getString(R.string.unmarkLine)) .setDescription(getString(R.string.goUnmark) + sales[position].itemFk + getString( R.string.sure)) @@ -2635,7 +2635,7 @@ import org.json.JSONObject } saleAdapter!!.notifyDataSetChanged() - +/* val ticket = "[" + sales[positionCollectionMissing].ticketFk + "](https://salix.verdnatura.es/#!/ticket/" + sales[positionCollectionMissing].ticketFk + "/summary)" @@ -2657,7 +2657,7 @@ import org.json.JSONObject "Se ha modificado la cantidad de " + sales[positionCollectionMissing].originalQuantity + " del artículo " + sales[positionCollectionMissing].itemFk + " a nueva cantidad: " + sales[positionCollectionMissing].quantity + " del ticket " + ticket } - } + }*/ //sergio:ahora desde encajado // sendSalixMessageNew(message, sales[positionCollectionMissing].salePersonFk) @@ -2685,11 +2685,11 @@ import org.json.JSONObject saleAdapter?.notifyDataSetChanged() //enviar mensaje a salix - val ticket = + /* 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 - +*/ //sergio: ahora desde encajadores // sendSalixMessageNew(message, sales[positionIncreaseQuantity].salePersonFk) @@ -2698,14 +2698,14 @@ import org.json.JSONObject } - private fun sendSalixMessageNew(message: String, workerId: String) { + /* private fun sendSalixMessageNew(message: String, workerId: String) { viewModel.sendChekingPresence( workerId = workerId, message = message ) - } + }*/ private fun increaseQuantity(position: Int, quantity: Int) { positionIncreaseQuantity = position diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/collection/fragment/CollectionFragmentPreChecker.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/collection/fragment/CollectionFragmentPreChecker.kt index d630acac..6ac695e2 100644 --- a/app/src/main/java/es/verdnatura/presentation/view/feature/collection/fragment/CollectionFragmentPreChecker.kt +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/collection/fragment/CollectionFragmentPreChecker.kt @@ -626,12 +626,12 @@ class CollectionFragmentPreChecker( if (!goBack) { - sendSalixMessage( + /* sendSalixMessage( item = dataMessageSalix.item, ticketFk = dataMessageSalix.ticket, quantity = dataMessageSalix.quantity, salePerson = dataMessageSalix.personSale - ) + )*/ viewModel.collectionTicketGet( collection.collectionFk, getDataInt(SECTORFK), @@ -1053,12 +1053,12 @@ class CollectionFragmentPreChecker( markLine(positionCollectionSplit, type) saleAdapter!!.notifyDataSetChanged() - val ticket = + /* val ticket = "[" + sales[positionCollectionSplit].ticketFk + "](https://salix.verdnatura.es/#!/ticket/" + sales[positionCollectionSplit].ticketFk + "/summary)" val message = getString(R.string.splitSent) + sales[positionCollectionSplit].itemFk + getString(R.string.fromTicket) + ticket - sendSalixMessageNew(message, sales[positionCollectionSplit].salePersonFk) + sendSalixMessageNew(message, sales[positionCollectionSplit].salePersonFk)*/ } @@ -1089,7 +1089,7 @@ class CollectionFragmentPreChecker( return salePerson } - private fun sendSalixMessage( + /* private fun sendSalixMessage( item: String, ticketFk: Int, quantity: String, @@ -1104,7 +1104,7 @@ class CollectionFragmentPreChecker( workerId = salePerson, message = message ) - } + }*/ //CREATE LIST private fun createCollectionList() { @@ -1216,7 +1216,7 @@ class CollectionFragmentPreChecker( var entryPoint = Gson().toJson( mutableMapOf( "entryPoint" to sale.ticketFk, - "web" to "https://salix.verdnatura.es/#!/ticket/${sale.ticketFk}/sale" + "web" to "${getData("base_urlSalix")}/#!/ticket/${sale.ticketFk}/sale" ) ) ma.onPasillerosItemClickListener( @@ -2611,7 +2611,7 @@ class CollectionFragmentPreChecker( saleAdapter!!.notifyDataSetChanged() - val ticket = + /* val ticket = "[" + sales[positionCollectionMissing].ticketFk + "](https://salix.verdnatura.es/#!/ticket/" + sales[positionCollectionMissing].ticketFk + "/summary)" @@ -2632,7 +2632,7 @@ class CollectionFragmentPreChecker( "Se ha modificado la cantidad de " + sales[positionCollectionMissing].originalQuantity + " del artículo " + sales[positionCollectionMissing].itemFk + " a nueva cantidad: " + sales[positionCollectionMissing].quantity + " del ticket " + ticket } - } + }*/ //sergio:ahora desde encajado // sendSalixMessageNew(message, sales[positionCollectionMissing].salePersonFk) @@ -2660,11 +2660,11 @@ class CollectionFragmentPreChecker( saleAdapter?.notifyDataSetChanged() //enviar mensaje a salix - val ticket = + /*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 - +*/ //sergio: ahora desde encajadores // sendSalixMessageNew(message, sales[positionIncreaseQuantity].salePersonFk) @@ -2673,14 +2673,14 @@ class CollectionFragmentPreChecker( } - private fun sendSalixMessageNew(message: String, workerId: String) { + /* private fun sendSalixMessageNew(message: String, workerId: String) { viewModel.sendChekingPresence( workerId = workerId, message = message ) - } + }*/ private fun increaseQuantity(position: Int, quantity: Int) { positionIncreaseQuantity = position diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/collection/fragment/CollectionViewModel.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/collection/fragment/CollectionViewModel.kt index b2210b49..47928430 100644 --- a/app/src/main/java/es/verdnatura/presentation/view/feature/collection/fragment/CollectionViewModel.kt +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/collection/fragment/CollectionViewModel.kt @@ -784,7 +784,7 @@ class CollectionViewModel(val context: Context) : BaseViewModel(context) { }) } - fun sendChekingPresence( + /* fun sendChekingPresence( workerId: String, message: String @@ -824,7 +824,7 @@ class CollectionViewModel(val context: Context) : BaseViewModel(context) { } catch (e: Exception) { } - } + }*/ fun saleMistakeAdd( vSaleFk: Int, diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/delivery/adapters/ExpeditionLoadUnloadAdapter.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/delivery/adapters/ExpeditionLoadUnloadAdapter.kt new file mode 100644 index 00000000..27e564c5 --- /dev/null +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/delivery/adapters/ExpeditionLoadUnloadAdapter.kt @@ -0,0 +1,66 @@ +package es.verdnatura.presentation.view.feature.delivery.adapters + +import android.graphics.Color +import android.view.LayoutInflater +import android.view.ViewGroup +import androidx.core.content.ContextCompat +import androidx.core.content.ContextCompat.getColor +import androidx.recyclerview.widget.RecyclerView +import es.verdnatura.R +import es.verdnatura.databinding.ItemExpeditionLoadunloadRowBinding +import es.verdnatura.presentation.view.feature.delivery.model.ExpeditionInfoLoadUnload +import java.security.AccessController.getContext + + +class ExpeditionLoadUnloadAdapter( + private val items: List +) : RecyclerView.Adapter() { + + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemHolder { + return ItemHolder( + ItemExpeditionLoadunloadRowBinding.inflate( + LayoutInflater.from(parent.context), + parent, + false + ) + ) + } + + override fun getItemCount() = items.size + + override fun onBindViewHolder(holder: ItemHolder, position: Int) { + holder.bind(items[position]) + } + + inner class ItemHolder( + val binding: ItemExpeditionLoadunloadRowBinding + ) : RecyclerView.ViewHolder(binding.root) { + private val res = binding.root.context.resources + fun bind(item: ExpeditionInfoLoadUnload) { + binding.apply { + when (item.code) { + "ON DELIVERY" -> { + expeditionView.setBackgroundColor( + getColor(expeditionView.context, R.color.verdnatura_pumpkin_orange) + ) + } + "DELIVERED" -> expeditionView.setBackgroundColor( + getColor(expeditionView.context, R.color.verdnatura_dark_mint) + ) + + "PALLETIZED" -> expeditionView.setBackgroundColor( + getColor(expeditionView.context, R.color.verdnatura_black) + ) + else -> { + expeditionView.setBackgroundColor( + getColor(expeditionView.context, R.color.verdnatura_black) + ) + + } + } + this.item = item + } + } + } +} diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/delivery/fragments/LoadUnloadFragment.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/delivery/fragments/LoadUnloadFragment.kt new file mode 100644 index 00000000..386d547e --- /dev/null +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/delivery/fragments/LoadUnloadFragment.kt @@ -0,0 +1,255 @@ +package es.verdnatura.presentation.view.feature.delivery.fragments + +import android.content.Intent +import android.content.pm.PackageInfo +import android.content.pm.PackageManager +import android.graphics.drawable.Drawable +import android.os.Build +import android.view.View +import android.view.inputmethod.EditorInfo +import android.widget.ImageView +import android.widget.Toast +import androidx.annotation.RequiresApi +import androidx.recyclerview.widget.LinearLayoutManager +import es.verdnatura.R +import es.verdnatura.databinding.FragmentExpeditionLoadunloadDeliveryBinding +import es.verdnatura.domain.toast +import es.verdnatura.presentation.base.BaseFragment +import es.verdnatura.presentation.common.OnOptionsSelectedListener +import es.verdnatura.presentation.common.ToolBarAdapterTooltip +import es.verdnatura.presentation.view.feature.delivery.adapters.ExpeditionLoadUnloadAdapter +import es.verdnatura.presentation.view.feature.delivery.model.ExpeditionInfoLoadUnload +import es.verdnatura.presentation.view.feature.delivery.viewmodels.DeliveryViewModel + + +class LoadUnloadFragment( + var title: String = "", + var state: String = "" +) : BaseFragment( + DeliveryViewModel::class +) { + + private var adapter: ExpeditionLoadUnloadAdapter? = null + private var originalItem: Int = 0 + private lateinit var myList: MutableList + + + companion object { + fun newInstance(title: String, state: String) = LoadUnloadFragment(title, state) + } + + override fun getLayoutId(): Int = R.layout.fragment_expedition_loadunload_delivery + + @RequiresApi(Build.VERSION_CODES.O) + override fun init() { + + setEvents() + setToolBar() + binding.scanInput.requestFocus() + viewModel.getExpeditionFromRoute(159390) + super.init() + } + + @RequiresApi(Build.VERSION_CODES.O) + private fun setToolBar() { + ma.hideBottomNavigation(View.GONE) + binding.mainToolbar.toolbarTitle.visibility = View.VISIBLE + binding.mainToolbar.toolbarSubtitle.visibility = View.VISIBLE + binding.mainToolbar.toolbarIcons.visibility = View.VISIBLE + val listIcons: ArrayList = ArrayList() + val iconConfirm = ImageView(context) + iconConfirm.setImageResource(R.drawable.ic_confirm) + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + iconConfirm.tooltipText = getTooltip(R.drawable.ic_confirm) + } + listIcons.add(iconConfirm) + + binding.mainToolbar.toolbarIcons.adapter = + ToolBarAdapterTooltip(listIcons, object : OnOptionsSelectedListener { + + override fun onOptionsItemSelected(item: Drawable) { + + when (item) { + iconConfirm.drawable -> { + // openAppDelivery() + //requireActivity().finish() + setExpeditionsState(myList, state) + } + } + } + }) + + binding.mainToolbar.toolbarIcons.layoutManager = + LinearLayoutManager(requireContext(), LinearLayoutManager.HORIZONTAL, false) + binding.mainToolbar.toolbarIcons.visibility = View.VISIBLE + } + + private fun setExpeditionsState(list: MutableList, state: String) { + + + if (list.filter { it.code == state }.size == list.size) { + binding.splashProgress.visibility = View.VISIBLE + viewModel.expeditionState_add(list.filter { it.code == state }, state) + } else { + val alertDialog = android.app.AlertDialog.Builder(requireContext()).create() + alertDialog.setTitle("Información") + alertDialog.setMessage("El total de expediciones escaneadas es diferente al total de la ruta. ¿ Quieres guardar las expediciones escaneadas o buscar la/s expedición/es ?") + alertDialog.setButton( + android.app.AlertDialog.BUTTON_NEUTRAL, "GUARDAR" + ) { dialog, which -> + viewModel.expeditionState_add(list.filter { it.code == state }, state) + } + alertDialog.setButton( + android.app.AlertDialog.BUTTON_POSITIVE, "ORDENAR" + ) { dialog, which -> + adapter = ExpeditionLoadUnloadAdapter(list.sortedByDescending{it.code}) + adapter!!.notifyDataSetChanged() + } + alertDialog.show() + } + + + } + + private fun openAppDelivery() { + val i = Intent() + val manager: PackageManager = requireContext().packageManager + val info: PackageInfo = manager.getPackageInfo(requireContext().packageName, 0) + val version = info.versionName + + if (version.contains("Beta")) { + i.setClassName( + "verdnatura.es.repartoverdnatura.sfusion", + "verdnatura.es.repartoverdnatura.ExpeditionSummaryActivity" + ) + } else { + i.setClassName( + "verdnatura.es.repartoverdnatura", + "verdnatura.es.repartoverdnatura.ExpeditionSummaryActivity" + ) + } + // i.putExtra("routeId", binding.route.text) + i.putExtra("app", "picking") + startActivity(i) + } + + private fun setEvents() { + binding.mainToolbar.backButton.setOnClickListener { + requireActivity().onBackPressed() + } + + binding.scanInput.setOnEditorActionListener { _, actionId, _ -> + if (actionId == EditorInfo.IME_ACTION_SEARCH || actionId == EditorInfo.IME_ACTION_DONE || actionId == 0) { + if (!binding.scanInput.text.isNullOrEmpty()) { + + try { + //viewModel.expeditionLoadUnload_get(binding.scanInput.toInt()) + markExpedition(binding.scanInput.text.toString().toInt(), state) + binding.mainToolbar.toolbarTitle.text = + getString(R.string.expedition) + binding.scanInput.text + + } catch (ex: Exception) { + "Error al escanear expedición".toast(context, Toast.LENGTH_SHORT) + } + binding.scanInput.setText("") + } + + return@setOnEditorActionListener false + } + false + } + + } + + private fun markExpedition(expedNumber: Int, state: String) { + + var found = false + + if (myList.filter { it.id == expedNumber }.filter { it.code == state }.isNotEmpty()) { + ma.messageWithSound("Expedición ya marcada", null, true) + } else { + for (exped in myList) { + if (exped.id == expedNumber) { + found = true + exped.code = state + break + } + } + if (found) { + ma.messageWithSound("", false, true, isToasted = false) + } else { + ma.messageWithSound("", true, true, isToasted = null) + } + } + + updateCount(myList, state) + + + } + + @RequiresApi(Build.VERSION_CODES.O) + override fun observeViewModel() { + with(viewModel) { + expeditionInfoLoadUnloadList.observe(viewLifecycleOwner) { + binding.splashProgress.visibility = View.GONE + createList(it.list) + //setSwitchButon() + // viewModel.get_routesFromExpedition(originalItem) + } + routeInfoList.observe(viewLifecycleOwner) { + binding.splashProgress.visibility = View.GONE + if (it.list.isNotEmpty()) { + binding.mainToolbar.toolbarIcons.visibility = View.VISIBLE + binding.mainToolbar.switchButton.visibility = View.VISIBLE + } else { + binding.scanInput.setText("") + // binding.routeLayout.visibility = View.GONE + binding.mainToolbar.toolbarIcons.visibility = View.GONE + binding.mainToolbar.switchButton.visibility = View.GONE + } + } + responseStateAdd.observe(viewLifecycleOwner) { + binding.splashProgress.visibility = View.GONE + if (!it.isError) { + viewModel.getExpeditionFromRoute(159390) + } + + } + } + } + + @RequiresApi(Build.VERSION_CODES.O) + private fun setSwitchButon() { + + binding.mainToolbar.switchButton.setOnCheckedChangeListener { buttonView, isChecked -> + binding.mainToolbar.switchButton.tooltipText = if (isChecked) + getString(R.string.expeditionMarkLost) else + getString(R.string.expeditionMarkFound) + + binding.splashProgress.visibility = View.VISIBLE + + if (isChecked) { + // viewModel.expeditionState_add(arrayListOf(Expedition(originalItem)), "FOUND") + } else { + // viewModel.expeditionState_add(arrayListOf(Expedition(originalItem)), "LOST") + } + } + + } + + private fun createList(list: List) { + myList = list as MutableList + adapter = ExpeditionLoadUnloadAdapter(list) + binding.expeditionloadunloadRecyclerview.adapter = adapter + binding.expeditionloadunloadRecyclerview.layoutManager = + LinearLayoutManager(requireContext(), LinearLayoutManager.VERTICAL, false) + binding.mainToolbar.toolbarSubtitle.text = + "${list.filter { it.code == state }.size}/${list.size}" + } + + private fun updateCount(list: MutableList, state: String) { + var countMarked = list.filter { it.code == state }.size + binding.mainToolbar.toolbarSubtitle.text = "${countMarked}/${list.size}" + adapter!!.notifyDataSetChanged() + } +} \ No newline at end of file diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/delivery/model/InfoCompany.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/delivery/model/InfoCompany.kt index df0a8b22..9286009b 100644 --- a/app/src/main/java/es/verdnatura/presentation/view/feature/delivery/model/InfoCompany.kt +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/delivery/model/InfoCompany.kt @@ -49,3 +49,19 @@ class RouteDelivery( class Expedition( var id: Int ) +class ExpeditionList( + var list: List = listOf() +) +class ExpeditionInfoLoadUnload( + var id:Int, + var ticketFk:Int, + var routeFk:Int, + var addressFk:Int, + var itemPackingTypeConcat:String, + var city:String, + var street:String, + var code:String?, + var nickname:String, + var postalCode:Int +) + diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/delivery/viewmodels/DeliveryViewModel.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/delivery/viewmodels/DeliveryViewModel.kt index b72a735d..f98e68b4 100644 --- a/app/src/main/java/es/verdnatura/presentation/view/feature/delivery/viewmodels/DeliveryViewModel.kt +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/delivery/viewmodels/DeliveryViewModel.kt @@ -8,6 +8,8 @@ import es.verdnatura.domain.SilexCallback import es.verdnatura.presentation.base.BaseViewModel import es.verdnatura.presentation.common.ResponseItemVO import es.verdnatura.presentation.view.feature.delivery.model.* +import retrofit2.Call +import retrofit2.Callback import retrofit2.Response import retrofit2.http.POST @@ -16,6 +18,9 @@ class DeliveryViewModel(val context: Context) : BaseViewModel(context) { private val _expeditionInfoList by lazy { MutableLiveData() } val expeditionInfoList: LiveData = _expeditionInfoList + private val _expeditionInfoLoadUnloadList by lazy { MutableLiveData() } + val expeditionInfoLoadUnloadList: LiveData = _expeditionInfoLoadUnloadList + private val _routeInfoList by lazy { MutableLiveData() } val routeInfoList: LiveData = _routeInfoList @@ -29,6 +34,9 @@ class DeliveryViewModel(val context: Context) : BaseViewModel(context) { val responseStateAdd: LiveData get() = _responseStateAdd + private val _expeditionList by lazy { MutableLiveData() } + val expeditionList: LiveData = _expeditionList + fun getInfoCompany( userId: Int @@ -79,6 +87,31 @@ class DeliveryViewModel(val context: Context) : BaseViewModel(context) { }) } + fun getExpeditionFromRoute( + route: Int + ) { + + silex.getExpeditionFromRoute(route) + .enqueue(object : SilexCallback>(context) { + + override fun onSuccess(response: Response>) { + + if (response.body() != null) { + _expeditionInfoLoadUnloadList.value = + response.body()?.let { ExpeditionList(it) } + } else { + _expeditionInfoLoadUnloadList.value = ExpeditionList() + } + } + + override fun onError(t: Throwable) { + _expeditionInfoLoadUnloadList.value = ExpeditionList() + super.onError(t) + + } + }) + } + fun get_routesFromExpedition( expedition: Int ) { @@ -102,7 +135,7 @@ class DeliveryViewModel(val context: Context) : BaseViewModel(context) { } - fun expeditionState_add(expeditions: List, state: String) { + fun expeditionState_add(expeditions: Any?, state: String) { silex.expeditionState_add(expeditions, state) .enqueue(object : SilexCallback(context) { @@ -117,7 +150,7 @@ class DeliveryViewModel(val context: Context) : BaseViewModel(context) { }) } - @POST("/delivery/getInfoFreelance") + fun getInfoFreelance( userId: Int ) { diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/login/fragment/LoginFragment.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/login/fragment/LoginFragment.kt index b7528934..5e9419c2 100644 --- a/app/src/main/java/es/verdnatura/presentation/view/feature/login/fragment/LoginFragment.kt +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/login/fragment/LoginFragment.kt @@ -54,7 +54,8 @@ class LoginFragment : BaseFragment(LoginVi customDialog = CustomDialog(requireContext()) saveIdentifiers() checkUser() - createFolderSerial() + /*Tarea 4815 + createFolderSerial()*/ binding.buttonLogin.setOnClickListener { binding.splashProgress.visibility = View.VISIBLE viewModel.loginSalix( diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/main/activity/MainActivity.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/main/activity/MainActivity.kt index 79a65f43..9b1a8c95 100644 --- a/app/src/main/java/es/verdnatura/presentation/view/feature/main/activity/MainActivity.kt +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/main/activity/MainActivity.kt @@ -1,6 +1,7 @@ package es.verdnatura.presentation.view.feature.main.activity +//Tarea #4815 import android.content.SharedPreferences import android.media.MediaPlayer import android.view.Menu @@ -35,6 +36,7 @@ import es.verdnatura.presentation.view.feature.controlador.fragment.WebFragment import es.verdnatura.presentation.view.feature.controlvehiculo.fragment.ControlVehiculoFragment import es.verdnatura.presentation.view.feature.controlvehiculo.fragment.ControlVehiculoUsuarioFragment import es.verdnatura.presentation.view.feature.delivery.fragments.InfoFragment +import es.verdnatura.presentation.view.feature.delivery.fragments.LoadUnloadFragment import es.verdnatura.presentation.view.feature.delivery.fragments.LogExpeditionFragment import es.verdnatura.presentation.view.feature.diadeventa.fragment.DayOfSaleFragment import es.verdnatura.presentation.view.feature.historicoarticulo.fragment.HistoricoArticuloFragment @@ -42,7 +44,6 @@ import es.verdnatura.presentation.view.feature.historicoshelving.fragment.itemSh import es.verdnatura.presentation.view.feature.historicoshelvinglog.fragment.shelvingLogFragment import es.verdnatura.presentation.view.feature.historicovehiculo.fragment.HistoricoVehiculoFragment import es.verdnatura.presentation.view.feature.inventario.fragment.InventaryFragment -import es.verdnatura.presentation.view.feature.login.fragment.LoginViewModel import es.verdnatura.presentation.view.feature.main.model.ItemMenuVO import es.verdnatura.presentation.view.feature.packaging.fragment.ObservFragment import es.verdnatura.presentation.view.feature.packaging.fragment.PackagingCountFragment @@ -57,7 +58,6 @@ import es.verdnatura.presentation.view.feature.pasillero.fragment.PasilleroFragm import es.verdnatura.presentation.view.feature.pasillero.model.PasillerosItemVO import es.verdnatura.presentation.view.feature.precontrol.PreControladorFragment import es.verdnatura.presentation.view.feature.presacador.fragment.EndSacadorFragment -import es.verdnatura.presentation.view.feature.presacador.fragment.InitPreSacadorFragment import es.verdnatura.presentation.view.feature.qr.QrFragment import es.verdnatura.presentation.view.feature.reubication.fragment.ReubicationCollectionFragment import es.verdnatura.presentation.view.feature.reubication.fragment.ReubicationFragment @@ -65,7 +65,7 @@ import es.verdnatura.presentation.view.feature.reubication.model.Reubication import es.verdnatura.presentation.view.feature.sacador.fragment.SacadorFragment import es.verdnatura.presentation.view.feature.sacador.model.CollectionVO import es.verdnatura.presentation.view.feature.shelvingparking.fragment.ShelvingParkingFragment -import es.verdnatura.presentation.view.feature.showticket.ShowTicketFragment +import es.verdnatura.presentation.view.feature.sacador.fragment.showticket.ShowTicketFragment import es.verdnatura.presentation.view.feature.ubicador.fragment.AutomaticAddItemFragment import es.verdnatura.presentation.view.feature.ubicador.fragment.UbicadorFragment import es.verdnatura.presentation.view.feature.workermistake.adapter.WorkermistakeFragment @@ -74,9 +74,6 @@ import kotlinx.coroutines.DelicateCoroutinesApi import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.launch -//Tarea #4815 -import org.koin.androidx.viewmodel.ext.android.viewModel - class MainActivity : BaseActivity(), OnPasillerosItemClickListener, @@ -89,7 +86,9 @@ class MainActivity : BaseActivity(), OnPasillerosItemClickL var fm = supportFragmentManager var mperror: MediaPlayer? = null var mpok: MediaPlayer? = null - //Tarea #4815 + var mpErrorRepeat: MediaPlayer? = null + + //Tarea #4815 // var miTime: Long = System.currentTimeMillis() / 1000 / 60 / 60 private var comeFromDelivery: Boolean? = null override fun getLayoutId(): Int = R.layout.activity_main @@ -97,6 +96,8 @@ class MainActivity : BaseActivity(), OnPasillerosItemClickL mperror = MediaPlayer.create((this), R.raw.error) mpok = MediaPlayer.create((this), R.raw.ok) + mpErrorRepeat = MediaPlayer.create((this), R.raw.errorrepeat) + mpok customDialog = CustomDialogMainActivity(this) setFragments() setBottomMenuFragment() @@ -559,7 +560,7 @@ class MainActivity : BaseActivity(), OnPasillerosItemClickL } getString(R.string.titlePrePicker) -> { - addFragmentOnTop(InitPreSacadorFragment.newInstance(getString(R.string.getPreviousCollection))) + addFragmentOnTop(SacadorFragment.newInstance("PREITEMPICKER")) } getString(R.string.titleClaimUbication) -> { @@ -638,6 +639,32 @@ class MainActivity : BaseActivity(), OnPasillerosItemClickL } + getString(R.string.titleLoadTruck) -> { + + addFragmentOnTop( + LoadUnloadFragment.newInstance(item.title, "ON DELIVERY"), + if (comeFromDelivery == true) { + getString(R.string.titleLoadTruck) + } else { + null + } + ) + + } + + getString(R.string.titleUnLoadTruck) -> { + + addFragmentOnTop( + LoadUnloadFragment.newInstance(item.title, "DELIVERED"), + if (comeFromDelivery == true) { + getString(R.string.titleUnLoadTruck) + } else { + null + } + ) + + } + getString(R.string.testing) -> { addFragmentOnTop(testPrint.newInstance(item.title)) @@ -757,6 +784,7 @@ class MainActivity : BaseActivity(), OnPasillerosItemClickL addFragmentOnTop(CollectionFragmentPicker.newInstance(collection, type)) } + else -> { addFragmentOnTop(CollectionFragment.newInstance(collection, type)) } @@ -787,7 +815,7 @@ class MainActivity : BaseActivity(), OnPasillerosItemClickL delete_Fragments() } addFragment( - SacadorFragment.newInstance(), + SacadorFragment.newInstance("PREPARED"), R.id.main_frame_layout, SacadorFragment.TAG, true @@ -820,30 +848,32 @@ class MainActivity : BaseActivity(), OnPasillerosItemClickL fun messageWithSound( message: String, - isError: Boolean, + isError: Boolean?, isPlayed: Boolean?, titleWithError: String = getString(R.string.error), isToasted: Boolean? = true ) { + if (isError != null) { + if (!isError!!) { - if (!isError) { - - if (isPlayed == true) (mpok?.start()) - if (isToasted!!) message.toast(this, Toast.LENGTH_LONG) - } else { - - if (isPlayed == true) (mperror?.start()) - - if (isToasted == true) { - message.toast(this, Toast.LENGTH_LONG) + if (isPlayed == true) (mpok?.start()) + if (isToasted!!) message.toast(this, Toast.LENGTH_LONG) } else { - customDialog.setTitle(titleWithError).setDescription(message) - .setOkButton(getString(R.string.accept)) { - customDialog.dismiss() - }.show() + + if (isPlayed == true) (mperror?.start()) + if (isToasted != null) { + if (isToasted == true) { + message.toast(this, Toast.LENGTH_LONG) + } else { + customDialog.setTitle(titleWithError).setDescription(message) + .setOkButton(getString(R.string.accept)) { + customDialog.dismiss() + }.show() + } + } } - - + }else{ + mpErrorRepeat?.start() } diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/pasillero/fragment/PasilleroViewModel.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/pasillero/fragment/PasilleroViewModel.kt index 5fe02267..d8a27db0 100644 --- a/app/src/main/java/es/verdnatura/presentation/view/feature/pasillero/fragment/PasilleroViewModel.kt +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/pasillero/fragment/PasilleroViewModel.kt @@ -146,7 +146,7 @@ class PasilleroViewModel(context: Context) : BaseViewModel(context) { ) //Tarea 4979 - /* _pasillerositem.add( + /* _pasillerositem.add( PasillerosItemVO( 1, R.drawable.ic_category, @@ -489,6 +489,17 @@ class PasilleroViewModel(context: Context) : BaseViewModel(context) { ) ) + /*Tarea 4678 + _pasillerositem.add( + PasillerosItemVO( + 6, + R.drawable.ic_delivery_truck, + contextApp.getString(R.string.titleDelivery), + R.string.titleDelivery, + contextApp.getString(R.string.titleDelivery) + ) + )*/ + //#tarea4679 /* _pasillerositem.add( PasillerosItemVO( @@ -565,7 +576,28 @@ class PasilleroViewModel(context: Context) : BaseViewModel(context) { ) ) ) + _pasillerositem.add( + PasillerosItemVO( + 30, + R.drawable.ic_delivery_truck, + contextApp.getString(R.string.titleLoadTruck), + R.string.titleLoadTruckInfo, + contextApp.getString( + R.string.titleLoadTruckInfo + ) + ) + ) - + _pasillerositem.add( + PasillerosItemVO( + 30, + R.drawable.ic_delivery_truck, + contextApp.getString(R.string.titleUnLoadTruck), + R.string.titleUnLoadTruckInfo, + contextApp.getString( + R.string.titleUnLoadTruckInfo + ) + ) + ) } } diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/presacador/fragment/EndSacadorFragment.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/presacador/fragment/EndSacadorFragment.kt index b2e64842..f44fcb46 100644 --- a/app/src/main/java/es/verdnatura/presentation/view/feature/presacador/fragment/EndSacadorFragment.kt +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/presacador/fragment/EndSacadorFragment.kt @@ -432,10 +432,10 @@ class EndSacadorFragment( //enviar mensaje a salix - val ticket = + /* val ticket = "[" + sales[positionCollectionSplit].id + "](https://salix.verdnatura.es/#!/ticket/" + sales[positionCollectionSplit].id + "/summary)" val message = - getString(R.string.splitSent) + sales[positionCollectionSplit].itemFk + getString(R.string.fromTicket) + ticket + getString(R.string.splitSent) + sales[positionCollectionSplit].itemFk + getString(R.string.fromTicket) + ticket*/ /* viewModel.sendChekingPresence( @@ -444,7 +444,7 @@ class EndSacadorFragment( message = message, "sendChekingPresence" )*/ - sendSalixMessageNew(message, sales[positionCollectionSplit].salesPersonFk) + /* sendSalixMessageNew(message, sales[positionCollectionSplit].salesPersonFk)*/ } @@ -460,7 +460,7 @@ class EndSacadorFragment( saleAdapter?.notifyDataSetChanged() - val ticket = + /* val ticket = "[" + sales[positionIncreaseQuantity].id + "](https://salix.verdnatura.es/#!/ticket/" + sales[positionIncreaseQuantity].id + "/summary)" val message = getString(R.string.modifiedQuantityPrevious) + sales[positionIncreaseQuantity].quantity + getString( @@ -471,7 +471,7 @@ class EndSacadorFragment( - sendSalixMessageNew(message, sales[positionIncreaseQuantity].salesPersonFk) + sendSalixMessageNew(message, sales[positionIncreaseQuantity].salesPersonFk)*/ searchSaleCollection() } @@ -502,7 +502,7 @@ class EndSacadorFragment( saleAdapter!!.notifyDataSetChanged() - var message = "" + /* var message = "" val ticket = "[" + sales[positionCollectionMissing].id + "](https://salix.verdnatura.es/#!/ticket/" + sales[positionCollectionMissing].id + "/summary)" @@ -536,11 +536,11 @@ class EndSacadorFragment( } } - sendSalixMessageNew(message, sales[positionCollectionMissing].salesPersonFk) + sendSalixMessageNew(message, sales[positionCollectionMissing].salesPersonFk)*/ searchSaleCollection() } - private fun sendSalixMessageNew(message: String, workerId: String) { + /* private fun sendSalixMessageNew(message: String, workerId: String) { if (!goBack) { @@ -551,7 +551,7 @@ class EndSacadorFragment( message = message ) } - } + }*/ //CREATE LIST private fun searchSaleCollection() { diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/presacador/fragment/PreSacadorViewModel.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/presacador/fragment/PreSacadorViewModel.kt index 58d49330..f8d268a9 100644 --- a/app/src/main/java/es/verdnatura/presentation/view/feature/presacador/fragment/PreSacadorViewModel.kt +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/presacador/fragment/PreSacadorViewModel.kt @@ -317,7 +317,7 @@ class PreSacadorViewModel(val context: Context) : BaseViewModel(context) { } - fun sendChekingPresence( + /* fun sendChekingPresence( workerId: String, message: String, ) { @@ -356,7 +356,7 @@ class PreSacadorViewModel(val context: Context) : BaseViewModel(context) { //Log.d("error " + e.message) } - } + }*/ fun ticket_printLabelPrevious(ticketFk: Int) { @@ -377,6 +377,7 @@ class PreSacadorViewModel(val context: Context) : BaseViewModel(context) { } + fun sectorCollection_get() { silex.sectorCollection_get().enqueue(object : @@ -429,7 +430,7 @@ class PreSacadorViewModel(val context: Context) : BaseViewModel(context) { object : SilexCallback(context) { override fun onError(t: Throwable) { - _responseNew.value = + _response.value = ResponseItemVO( isError = true, errorMessage = getMessageFromAllResponse( @@ -442,7 +443,7 @@ class PreSacadorViewModel(val context: Context) : BaseViewModel(context) { override fun onSuccess(response: Response) { - _responseNew.value = ResponseItemVO( + _response.value = ResponseItemVO( isError = false, errorMessage = "" + getMessageFromAllResponse( nameofFunction(this), response.message() diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/sacador/fragment/SacadorFragment.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/sacador/fragment/SacadorFragment.kt index bf058389..98056bbb 100644 --- a/app/src/main/java/es/verdnatura/presentation/view/feature/sacador/fragment/SacadorFragment.kt +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/sacador/fragment/SacadorFragment.kt @@ -181,7 +181,6 @@ class SacadorFragment( private fun print() { if (ma.havePrinter()) { - binding.splashProgress.visibility = View.VISIBLE viewModel.ticket_printLabelPrevious(customDialogInput.getValue().toInt()) (getString(R.string.Imprimiendo) + getData(PRINTERNAME)).toast( requireContext() @@ -215,7 +214,9 @@ class SacadorFragment( ma.messageWithSound(it.errorMessage, true, false) } else { - if (goBack) addCollectionToList(it.response.toInt()) + if (goBack) { + if (!it.response.isNullOrBlank())addCollectionToList(it.response.toInt()) + } } goBack = false callBack(type) diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/sacador/fragment/SacadorViewModel.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/sacador/fragment/SacadorViewModel.kt index b96f8c12..6518ce06 100644 --- a/app/src/main/java/es/verdnatura/presentation/view/feature/sacador/fragment/SacadorViewModel.kt +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/sacador/fragment/SacadorViewModel.kt @@ -34,6 +34,10 @@ class SacadorViewModel(val context: Context) : BaseViewModel(context) { val responseCollectionSmart: LiveData get() = _responseCollectionSmart + private val _responseNew by lazy { MutableLiveData() } + val responseNew: LiveData + get() = _responseNew + fun collectionTicketGet( collectionFk: Int, sectorFk: String, @@ -74,7 +78,53 @@ class SacadorViewModel(val context: Context) : BaseViewModel(context) { } }) } + fun sectorCollection_new( + sectorFk: Int + ) { + silex.sectorCollection_new(sectorFk).enqueue( + object : + SilexCallback(context) { + override fun onError(t: Throwable) { + _response.value = + ResponseItemVO( + isError = true, + errorMessage = getMessageFromAllResponse( + nameofFunction(this), + t.message!! + ) + ) + } + + override fun onSuccess(response: Response) { + + _response.value = ResponseItemVO( + isError = false, + errorMessage = "" + getMessageFromAllResponse( + nameofFunction(this), response.message() + ) + ) + + } + }) + } + fun ticket_printLabelPrevious(ticketFk: Int) { + + silex.ticket_printLabelPrevious(ticketFk).enqueue(object : SilexCallback(context) { + override fun onError(t: Throwable) { + _response.value = ResponseItemVO( + isError = true, + errorMessage = getMessageFromAllResponse(nameofFunction(this), t.message!!) + ) + } + + override fun onSuccess(response: Response) { + _response.value = + ResponseItemVO(isError = false, response = response.message()!!) + } + }) + + } fun collection_assign() { silex.collection_assign().enqueue( object : @@ -148,6 +198,52 @@ class SacadorViewModel(val context: Context) : BaseViewModel(context) { }) } + fun sectorCollection_get() { + + silex.sectorCollection_get().enqueue(object : + SilexCallback>(context) { + override fun onError(t: Throwable) { + val listError: ArrayList = ArrayList() + listError.add( + CollectionVO( + 0, + isError = true, + errorMessage = getMessageFromAllResponse( + nameofFunction(this), + t.message!! + ) + ) + ) + _collectionList.value = CollectionListVO(listError) + } + + + override fun onSuccess(response: Response>) { + + if (response.body() != null) { + _collectionList.value = + response.body()?.let { CollectionListVO(it.toDateFormat(context)) } + } else { + val listError: ArrayList = ArrayList() + listError.add( + CollectionVO( + 0, + isError = true, + errorMessage = getMessageFromAllResponse( + nameofFunction(this), + response.message() + ) + ) + ) + _collectionList.value = CollectionListVO(listError) + + } + } + + }) + } + + fun collectionGetSalix() { salix.getCollectionSalix().enqueue(object : SilexCallback>(context) { diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/showticket/ShowTicketFragment.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/sacador/fragment/showticket/ShowTicketFragment.kt similarity index 96% rename from app/src/main/java/es/verdnatura/presentation/view/feature/showticket/ShowTicketFragment.kt rename to app/src/main/java/es/verdnatura/presentation/view/feature/sacador/fragment/showticket/ShowTicketFragment.kt index c30b8b1c..efbf4ca7 100644 --- a/app/src/main/java/es/verdnatura/presentation/view/feature/showticket/ShowTicketFragment.kt +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/sacador/fragment/showticket/ShowTicketFragment.kt @@ -1,4 +1,4 @@ -package es.verdnatura.presentation.view.feature.showticket +package es.verdnatura.presentation.view.feature.sacador.fragment.showticket import android.content.Context import android.os.Bundle @@ -37,6 +37,7 @@ class ShowTicketFragment(var menuOrigin: String) : binding.scanInput.visibility = View.VISIBLE binding.mainToolbar.toolbarTitle.text = getString(R.string.verticket) + ma.hideBottomNavigation(View.VISIBLE) binding.splashProgress.visibility = View.GONE if (menuOrigin == getString(R.string.main)) { diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/showticket/ShowTicketViewModel.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/sacador/fragment/showticket/ShowTicketViewModel.kt similarity index 100% rename from app/src/main/java/es/verdnatura/presentation/view/feature/showticket/ShowTicketViewModel.kt rename to app/src/main/java/es/verdnatura/presentation/view/feature/sacador/fragment/showticket/ShowTicketViewModel.kt diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/ubicador/fragment/AutomaticAddItemFragment.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/ubicador/fragment/AutomaticAddItemFragment.kt index 60efaaa9..533984d2 100644 --- a/app/src/main/java/es/verdnatura/presentation/view/feature/ubicador/fragment/AutomaticAddItemFragment.kt +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/ubicador/fragment/AutomaticAddItemFragment.kt @@ -76,15 +76,16 @@ class AutomaticAddItemFragment( if (!binding.editMatricula.text.toString().isNullOrEmpty()) { contador += 1 setSubtitle() + binding.editMatricula.setText(textScanned_filterDouble(binding.editMatricula.text.toString())) try { - listItems.add( + listItems.add( 0, ItemEscanerVO( itemScanValue( binding.editMatricula.text.toString(), "buy", "more" - ).toString().toInt() + ).toString().toLong() ) ) adapter!!.notifyDataSetChanged() @@ -101,8 +102,8 @@ class AutomaticAddItemFragment( } binding.buttonFinalizar.setOnClickListener { - val listString: ArrayList = ArrayList() - val listInt: ArrayList = ArrayList() + val listString: ArrayList = ArrayList() + val listInt: ArrayList = ArrayList() listItems.forEach { listString.add(it.item) listInt.add(it.item) diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/ubicador/fragment/AutomaticAddItemViewModel.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/ubicador/fragment/AutomaticAddItemViewModel.kt index e69acae5..5c9f6cdf 100644 --- a/app/src/main/java/es/verdnatura/presentation/view/feature/ubicador/fragment/AutomaticAddItemViewModel.kt +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/ubicador/fragment/AutomaticAddItemViewModel.kt @@ -19,7 +19,7 @@ class AutomaticAddItemViewModel(val context: Context) : BaseViewModel(context) { fun itemShelvingMake_multi( shelving: String, - items: List, + items: List, warehouse: Int ) { silex.itemShelvingMake_multi(shelving, items, warehouse) diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/ubicador/fragment/UbicadorFragment.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/ubicador/fragment/UbicadorFragment.kt index 068fe018..d1b6b351 100644 --- a/app/src/main/java/es/verdnatura/presentation/view/feature/ubicador/fragment/UbicadorFragment.kt +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/ubicador/fragment/UbicadorFragment.kt @@ -305,7 +305,6 @@ class UbicadorFragment( shelvingFk.uppercase() + getString(R.string.pUppercase) + parking + getString( R.string.label ) + etiquetas - if (mpok != null) mpok!!.start() customDialogInput.dismiss() }.setKoButton(getString(R.string.cancel)) { customDialogInput.dismiss() @@ -326,9 +325,7 @@ class UbicadorFragment( shelvingFk.uppercase() + getString(R.string.pUppercase) + parking + getString( R.string.label ) + etiquetas - if (mpok != null) { - mpok!!.start() - } + return@setOnEditorActionListener true } diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/ubicador/model/ItemUbicadorVO.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/ubicador/model/ItemUbicadorVO.kt index 375fb5e7..dd739343 100644 --- a/app/src/main/java/es/verdnatura/presentation/view/feature/ubicador/model/ItemUbicadorVO.kt +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/ubicador/model/ItemUbicadorVO.kt @@ -21,7 +21,7 @@ class ItemUbicadorVO( ) class ItemEscanerVO( - var item: Int + var item: Long ) class ItemUbicadorListVO( diff --git a/app/src/main/res/drawable/ic_confirm.xml b/app/src/main/res/drawable/ic_confirm.xml new file mode 100644 index 00000000..d6154f28 --- /dev/null +++ b/app/src/main/res/drawable/ic_confirm.xml @@ -0,0 +1,8 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_expedition_loadunload_delivery.xml b/app/src/main/res/layout/fragment_expedition_loadunload_delivery.xml new file mode 100644 index 00000000..2591efd0 --- /dev/null +++ b/app/src/main/res/layout/fragment_expedition_loadunload_delivery.xml @@ -0,0 +1,144 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + > + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_escaner_row.xml b/app/src/main/res/layout/item_escaner_row.xml index 3c6692c5..0517f0b2 100644 --- a/app/src/main/res/layout/item_escaner_row.xml +++ b/app/src/main/res/layout/item_escaner_row.xml @@ -39,7 +39,7 @@ android:layout_weight="1" android:textSize="@dimen/h5" android:textColor="@color/verdnatura_white" - android:text="@{Integer.toString(item.item)}" + android:text="@{Long.toString(item.item)}" tool:text="45532" android:textStyle="bold" android:gravity="center_vertical"/> diff --git a/app/src/main/res/layout/item_expedition_loadunload_row.xml b/app/src/main/res/layout/item_expedition_loadunload_row.xml new file mode 100644 index 00000000..eaa6f4fa --- /dev/null +++ b/app/src/main/res/layout/item_expedition_loadunload_row.xml @@ -0,0 +1,106 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/navigation/nav_graph.xml b/app/src/main/res/navigation/nav_graph.xml index 295be78b..07bcf5de 100644 --- a/app/src/main/res/navigation/nav_graph.xml +++ b/app/src/main/res/navigation/nav_graph.xml @@ -9,6 +9,6 @@ android:label="AjustesFragment" /> \ No newline at end of file diff --git a/app/src/main/res/raw/errorrepeat.mp3 b/app/src/main/res/raw/errorrepeat.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..719e1e324cbf61610d0316081f4f18aeab41d714 GIT binary patch literal 24494 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 a A2 Cambiar a A2 Indica el carro donde está ubicado el item: + Cargar furgoneta + Descargar furgoneta + Cargar furgoneta + Descargar furgoneta + Cofirma la carga/descarga de la furgoneta + Introduce el nuevo precio. Por defecto se propone el 50% del precio original.Item: diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index 7c10db75..fb0ec5c5 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -45,6 +45,11 @@ 14sp 15sp + 4dp + + 16sp + 20sp + 14sp 12sp 10sp diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index a3d771a1..3e8cffa7 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -175,6 +175,10 @@ Claim Ubication Show company information Show company information + Load van + Load van + Unload van + Unload van Show data expedition Claims done successful @@ -557,6 +561,8 @@ It\'s not possible to update. Problem with the download of app "Introduce new packing for the item : " "Introduce ubication for the item : " + "Introduce price for the item : " The number of wagons can now only be changed by managers + Cofirm load/unload of the van