From 687bd6fc4be0b8abc98ab9009a46719a61d01609 Mon Sep 17 00:00:00 2001 From: Sergio De la torre Date: Thu, 20 Jun 2024 16:55:24 +0200 Subject: [PATCH] feat boxPicking refs #7357 --- .../java/es/verdnatura/di/viewModelModule.kt | 6 +- .../java/es/verdnatura/domain/SalixService.kt | 11 ++ .../feature/boxPicking/BoxPickingFragment.kt | 115 ++++++++++++++++++ .../feature/boxPicking/BoxPickingViewModel.kt | 55 +++++++++ .../fragment/CollectionViewModel.kt | 9 +- .../feature/main/activity/MainActivity.kt | 12 +- .../PackagingViewModel/SupplierViewModel.kt | 2 +- .../pasillero/fragment/PasilleroViewModel.kt | 21 +++- .../res/drawable/ic_review_boxpicking.xml | 8 ++ app/src/main/res/values-es/strings.xml | 3 +- app/src/main/res/values-fr/strings.xml | 1 + app/src/main/res/values-pt/strings.xml | 1 + app/src/main/res/values/strings.xml | 3 +- 13 files changed, 232 insertions(+), 15 deletions(-) create mode 100644 app/src/main/java/es/verdnatura/presentation/view/feature/boxPicking/BoxPickingFragment.kt create mode 100644 app/src/main/java/es/verdnatura/presentation/view/feature/boxPicking/BoxPickingViewModel.kt create mode 100644 app/src/main/res/drawable/ic_review_boxpicking.xml diff --git a/app/src/main/java/es/verdnatura/di/viewModelModule.kt b/app/src/main/java/es/verdnatura/di/viewModelModule.kt index 5c953505..c9d2b267 100644 --- a/app/src/main/java/es/verdnatura/di/viewModelModule.kt +++ b/app/src/main/java/es/verdnatura/di/viewModelModule.kt @@ -2,6 +2,7 @@ package es.verdnatura.di import es.verdnatura.presentation.view.feature.ajustes.fragment.AjustesViewModel import es.verdnatura.presentation.view.feature.articulo.fragment.ItemCardViewModel +import es.verdnatura.presentation.view.feature.boxPicking.BoxPickingViewModel import es.verdnatura.presentation.view.feature.buffer.fragment.BufferFragmentViewModel import es.verdnatura.presentation.view.feature.buscaritem.fragment.BuscarItemViewModel import es.verdnatura.presentation.view.feature.category.ChangeCategoryViewModel @@ -32,10 +33,10 @@ import es.verdnatura.presentation.view.feature.pasillero.fragment.PasilleroViewM import es.verdnatura.presentation.view.feature.photos.fragment.PhotosViewModel import es.verdnatura.presentation.view.feature.presacador.fragment.PreSacadorViewModel import es.verdnatura.presentation.view.feature.qr.QrFragmentViewModel +import es.verdnatura.presentation.view.feature.roadmap.fragment.RoadMapListViewModel import es.verdnatura.presentation.view.feature.sacador.fragment.SacadorViewModel import es.verdnatura.presentation.view.feature.sacador.fragment.showticket.ShowTicketViewModel import es.verdnatura.presentation.view.feature.ticket.fragment.TicketViewModel -import es.verdnatura.presentation.view.feature.roadmap.fragment.RoadMapListViewModel import es.verdnatura.presentation.view.feature.ubicador.fragment.AutomaticAddItemViewModel import es.verdnatura.presentation.view.feature.ubicador.fragment.UbicadorViewModel import org.koin.android.ext.koin.androidContext @@ -205,4 +206,7 @@ val viewModelModule = module { viewModel { ChangeCategoryViewModel(androidContext()) } + viewModel { + BoxPickingViewModel(androidContext()) + } } \ 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 3d35bfb3..f9131278 100644 --- a/app/src/main/java/es/verdnatura/domain/SalixService.kt +++ b/app/src/main/java/es/verdnatura/domain/SalixService.kt @@ -329,6 +329,12 @@ interface SalixService { ): Call + + @GET("Expedition_printOuts/findOne") + fun isBoxPickingInPrintOut( + @Query("filter") filter: String, + ): + Call @GET("TicketCollections/hasUncheckedTicket") fun hasUncheckedTicket( @Query("ticketFk") ticketFk: Number, @@ -934,6 +940,11 @@ interface SalixService { @Path("barCodeValue") barCodeValue: String ): Call + @GET("ItemBarCodes/{barCodeValue}/toItem") + fun barcodesToItem( + @Path("barCodeValue") barCodeValue: String + ): Call + @GET("Suppliers") fun getSuppliers( //@Query("filter") filter:String="""{"fields":{"id":true,"name":true}}""" diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/boxPicking/BoxPickingFragment.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/boxPicking/BoxPickingFragment.kt new file mode 100644 index 00000000..111f1da9 --- /dev/null +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/boxPicking/BoxPickingFragment.kt @@ -0,0 +1,115 @@ +package es.verdnatura.presentation.view.feature.boxPicking + +import android.view.View.VISIBLE +import android.view.inputmethod.EditorInfo +import es.verdnatura.R +import es.verdnatura.databinding.FragmentGeneralBlackBinding +import es.verdnatura.presentation.base.BaseFragment +import es.verdnatura.presentation.common.OnCollectionSelectedListener +import es.verdnatura.presentation.view.component.CustomDialogInput + +class BoxPickingFragment(var title: String) : + BaseFragment(BoxPickingViewModel::class) { + private var onCollectionSelectedListener: OnCollectionSelectedListener? = null + private var isBoxScanned: Boolean = false + private lateinit var customDialogInput: CustomDialogInput + override fun getLayoutId(): Int = R.layout.fragment_general_black + + companion object { + fun newInstance(title: String) = BoxPickingFragment(title = title) + } + + override fun init() { + + binding.mainToolbar.toolbarTitle.text = title + setEvents() + customDialogInput = CustomDialogInput(requireContext()) + super.init() + } + + private fun setEvents() { + binding.scanInput.visibility = VISIBLE + binding.mainToolbar.backButton.setOnClickListener { + ma.onMyBackPressed() + } + binding.scanInput.hint = getString(R.string.scanLabelExpedition) + binding.scanInput.requestFocus() + binding.scanInput.setOnEditorActionListener { _, actionId, _ -> + if (actionId == EditorInfo.IME_ACTION_SEARCH || actionId == EditorInfo.IME_ACTION_DONE || actionId == 0 || actionId == 5) { + + if (!binding.scanInput.text.isNullOrEmpty()) { + + showScanBarcode(binding.scanInput.text.toString().toLong()) + + } + binding.scanInput.setText("") + ma.hideKeyboard(binding.scanInput) + return@setOnEditorActionListener true + } + false + } + } + + private fun showScanBarcode(expeditionFk: Long) { + try { + + customDialogInput.setTitle(getString(R.string.scanItem)) + .setOkButton(getString(R.string.accept)) { + if (customDialogInput.getValue().isNotEmpty()) { + viewModel.isBoxPickingInPrintOut( + expeditionFk = expeditionFk, + customDialogInput.getValue() + ) + } + customDialogInput.dismiss() + } + + .setKoButton(getString(R.string.cancel)) { + customDialogInput.setValue("") + customDialogInput.dismiss() + + }.setValue("").show() + + + customDialogInput.setFocusText() + + customDialogInput.getEditText().setOnEditorActionListener { _, actionId, _ -> + if (actionId == EditorInfo.IME_ACTION_SEARCH || actionId == EditorInfo.IME_ACTION_DONE || actionId == 0) { + + if (customDialogInput.getValue().isNotEmpty()) { + viewModel.isBoxPickingInPrintOut( + expeditionFk = expeditionFk, + customDialogInput.getValue() + ) + } + customDialogInput.dismiss() + binding.scanInput.requestFocus() + return@setOnEditorActionListener true + } + false + } + + } catch (ex: Exception) { + getString(R.string.errorInput) + } + } + + override fun observeViewModel() { + with(viewModel) { + isBoxPickingInPrintOut.observe(viewLifecycleOwner) { + + ma.messageWithSound( + message = getString(R.string.errorInput), + isError = !it, + isPlayed = true, + isToasted = null + + ) + binding.scanInput.requestFocus() + + } + } + } + +} + diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/boxPicking/BoxPickingViewModel.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/boxPicking/BoxPickingViewModel.kt new file mode 100644 index 00000000..1e82e45c --- /dev/null +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/boxPicking/BoxPickingViewModel.kt @@ -0,0 +1,55 @@ +package es.verdnatura.presentation.view.feature.boxPicking + +import android.content.Context +import androidx.lifecycle.LiveData +import androidx.lifecycle.MutableLiveData +import es.verdnatura.domain.SalixCallback +import es.verdnatura.presentation.base.BaseViewModel +import retrofit2.Response + +class BoxPickingViewModel(val context: Context) : BaseViewModel(context) { + + private val _isBoxPickingInPrintOut by lazy { MutableLiveData() } + val isBoxPickingInPrintOut: LiveData = _isBoxPickingInPrintOut + + private val _responseCode by lazy { MutableLiveData() } + val responseCode: LiveData = _responseCode + fun isBoxPickingOk( + expeditionFk: Long, itemFk: Long + + ) { + salix.isBoxPickingInPrintOut( + filter = """{"where":{"expeditionFk":$expeditionFk,"itemFk":$itemFk}}""" + ).enqueue(object : SalixCallback(context) { + + override fun onSuccess(response: Response) { + + _isBoxPickingInPrintOut.value = true + } + + override fun onError(t: Throwable) { + + _isBoxPickingInPrintOut.value = false + } + }) + } + + fun isBoxPickingInPrintOut(expeditionFk: Long, barcode: String) { + salix.barcodesToItem(barcode).enqueue(object : SalixCallback(context) { + + override fun onSuccess(response: Response) { + + if (response.body() != null) { + isBoxPickingOk( + itemFk = response.body().toString().toLong(), + expeditionFk = expeditionFk + ) + } else { + _isBoxPickingInPrintOut.value = false + } + + } + }) + } + +} \ No newline at end of file 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 a4f0eb35..496e5450 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 @@ -7,7 +7,6 @@ import androidx.lifecycle.map import com.google.gson.JsonObject import es.verdnatura.MobileApplication import es.verdnatura.domain.SalixCallback -import es.verdnatura.domain.SilexCallback import es.verdnatura.domain.formatWithQuotes import es.verdnatura.domain.toast import es.verdnatura.presentation.base.BaseViewModel @@ -343,7 +342,7 @@ class CollectionViewModel(val context: Context) : BaseViewModel(context) { isChecked != "0", buyFk, isScanned!! - )*/.enqueue(object : SilexCallback(context) { + )*/.enqueue(object : SalixCallback(context) { override fun onError(t: Throwable) { _responseSaleReplace.value = ResponseItemVO( isError = true, @@ -387,7 +386,7 @@ class CollectionViewModel(val context: Context) : BaseViewModel(context) { buyFk, itemShelvingFk, quantity, - isScanned)*/.enqueue(object : SilexCallback(context) { + isScanned)*/.enqueue(object : SalixCallback(context) { override fun onError(t: Throwable) { _responseSaleTracking_mark.value = ResponseItemVO( isError = true, @@ -756,7 +755,7 @@ class CollectionViewModel(val context: Context) : BaseViewModel(context) { ) ) //silex.saleTrackingDel(saleFk) - .enqueue(object : SilexCallback(context) { + .enqueue(object : SalixCallback(context) { override fun onError(t: Throwable) { _responseDel.value = ResponseItemVO( isError = true, @@ -777,7 +776,7 @@ class CollectionViewModel(val context: Context) : BaseViewModel(context) { //Tarea 6276 OK salix.itemShelvingUpdateFromSale(hashMapOf("saleFk" to saleFk)) // silex.itemShelving_updateFromSale(saleFk) - .enqueue(object : SilexCallback(context) { + .enqueue(object : SalixCallback(context) { override fun onError(t: Throwable) { _responseItemShelvingUpdate.value = ResponseItemVO( isError = true, 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 c488f01d..a9386dc3 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 @@ -51,6 +51,7 @@ import es.verdnatura.presentation.view.component.CustomDialogMainActivity import es.verdnatura.presentation.view.feature.ajustes.fragment.AjustesFragment import es.verdnatura.presentation.view.feature.articulo.fragment.ItemCardFragment import es.verdnatura.presentation.view.feature.articulo.fragment.ItemProposalFragment +import es.verdnatura.presentation.view.feature.boxPicking.BoxPickingFragment import es.verdnatura.presentation.view.feature.buffer.fragment.BufferFragment import es.verdnatura.presentation.view.feature.buffer.fragment.BufferLoadFragment import es.verdnatura.presentation.view.feature.buscaritem.fragment.BuscarItemFragment @@ -479,7 +480,7 @@ class MainActivity : BaseActivity(), OnPasillerosItemClickL } } - fun delete_Fragments() { + fun delete_Fragments() { fm.getFragments().forEach { val fragment: Fragment? = supportFragmentManager.findFragmentByTag(it.tag.toString()) if (fragment != null) supportFragmentManager.beginTransaction().remove(fragment) @@ -634,6 +635,7 @@ class MainActivity : BaseActivity(), OnPasillerosItemClickL getString(R.string.titleHistorical) -> { addFragmentOnTop(HistoricoArticuloFragment.newInstance(entryPoint.toInt())) } + getString(R.string.roadMapSettings) -> { addFragmentOnTop(RoadMapSettingsFragment.newInstance(param as RoadMapTruck)) } @@ -710,6 +712,7 @@ class MainActivity : BaseActivity(), OnPasillerosItemClickL getString(R.string.titleLogShelving) -> { addFragmentOnTop(ShelvingLogFragment.newInstance(item.title, LogType.SHELVING)) } + getString(R.string.titleParkingTicketPrevia) -> { addFragmentOnTop(ShelvingLogFragment.newInstance(item.title, LogType.PREVIOUS)) } @@ -872,11 +875,14 @@ class MainActivity : BaseActivity(), OnPasillerosItemClickL addFragmentOnTop(TicketsFragment.newInstance(item.title, entryPoint)) } + getString(R.string.reviewBoxPicking) -> { + addFragmentOnTop(BoxPickingFragment.newInstance(item.title)) + } + getString(R.string.pickerHelper) -> { addFragmentOnTop(PickerHelperFragment.newInstance(item.title)) } - "PREITEMPICKERTEST" -> { addFragmentOnTop( CollectionFragmentPickerPreviousNew.newInstance( @@ -1114,7 +1120,7 @@ class MainActivity : BaseActivity(), OnPasillerosItemClickL if (!isError) { if (isPlayed == true) (mpok?.start()) - if (isToasted!!) message.toast(this, Toast.LENGTH_LONG) + if (isToasted != null && isToasted == true) message.toast(this, Toast.LENGTH_LONG) } else { if (isPlayed == true) (mperror?.start()) diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/packaging/fragment/PackagingViewModel/SupplierViewModel.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/packaging/fragment/PackagingViewModel/SupplierViewModel.kt index d3297b26..58a9e0f3 100644 --- a/app/src/main/java/es/verdnatura/presentation/view/feature/packaging/fragment/PackagingViewModel/SupplierViewModel.kt +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/packaging/fragment/PackagingViewModel/SupplierViewModel.kt @@ -380,7 +380,7 @@ class PackagingViewModel(val context: Context) : BaseViewModel(context) { fun getItemsPackaging(supplierId: Int, entryId: Int) { salix.getItemsPackaging(supplierId, entryId) - .enqueue(object : SilexCallback>(context) { + .enqueue(object : SalixCallback>(context) { override fun onError(t: Throwable) { val listError: ArrayList = ArrayList() listError.add( 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 68537191..11600221 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 @@ -13,6 +13,7 @@ class PasilleroViewModel(context: Context) : BaseViewModel(context) { private val _pasillerositem by lazy { ArrayList() } val pasillerositem: List get() = _pasillerositem + val userId = (contextApp as MobileApplication).userId fun inititializeDefaultData() { @@ -434,8 +435,7 @@ class PasilleroViewModel(context: Context) : BaseViewModel(context) { ) ) - val userFk = (contextApp).userId - if (userFk == 19591) { + if (userId == 19591) { _pasillerositem.add( PasillerosItemVO( 6, @@ -548,7 +548,7 @@ class PasilleroViewModel(context: Context) : BaseViewModel(context) { ) ) ) - val userId = (contextApp as MobileApplication).userId + if (userId == 19591 || userId == 18404) { _pasillerositem.add( PasillerosItemVO( @@ -602,6 +602,20 @@ class PasilleroViewModel(context: Context) : BaseViewModel(context) { ) ) + if (userId == 19591 || userId == 9) { + _pasillerositem.add( + PasillerosItemVO( + 1, + R.drawable.ic_review_boxpicking, + contextApp.getString(R.string.reviewBoxPicking), + R.string.reviewBoxPicking, + contextApp.getString( + R.string.reviewBoxPicking + ) + ) + ) + } + _pasillerositem.add( PasillerosItemVO( 1, @@ -616,6 +630,7 @@ class PasilleroViewModel(context: Context) : BaseViewModel(context) { + _pasillerositem.add( PasillerosItemVO( 7, diff --git a/app/src/main/res/drawable/ic_review_boxpicking.xml b/app/src/main/res/drawable/ic_review_boxpicking.xml new file mode 100644 index 00000000..31480c26 --- /dev/null +++ b/app/src/main/res/drawable/ic_review_boxpicking.xml @@ -0,0 +1,8 @@ + + + \ No newline at end of file diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 9922efe5..47e53dce 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -229,7 +229,7 @@ Operación ¿Estás seguro de cerrar el pedido? Confirmar acción - Escanea un artículo + Escanea artículo No hemos podido encontrar el artículo. Revisa el sector. Error al realizar la operación Escanea expedición @@ -831,5 +831,6 @@ \nLista de ítems:\n No se ha encontrado parking Escanea parking + Revisar sacado por cajas diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 104c8b1a..77c114bb 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -831,5 +831,6 @@ \nLista de ítems:\n No se ha encontrado parking Escanea parking + Revisar sacado por cajas diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index 25afed90..ccfbdead 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -831,5 +831,6 @@ \nLista de ítems:\n No se ha encontrado parking Escanea parking + Revisar sacado por cajas diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index ad3b1682..6e0cbdfe 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -264,7 +264,7 @@ Operation Are you sure to close the order ? Confirm action - Scan item + Scan item Item not found. Review sector Error to perform action Scan expedition label @@ -833,5 +833,6 @@ \nLista de ítems:\n No se ha encontrado parking Escanea parking + Revisar sacado por cajas