From a1c01d11544cd342eb9b608ccb9aa4c025d3faa1 Mon Sep 17 00:00:00 2001 From: Sergio De la torre Date: Mon, 2 Dec 2024 18:15:38 +0100 Subject: [PATCH] feat: refs #6845 userIterface --- .../ajustes/fragment/AjustesFragment.kt | 3 +- .../inventario/fragment/InventaryFragment.kt | 69 ++++++++++++++++++- .../inventario/fragment/InventaryViewModel.kt | 20 ++++++ 3 files changed, 90 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/ajustes/fragment/AjustesFragment.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/ajustes/fragment/AjustesFragment.kt index 5787f391..37ae9e4f 100644 --- a/app/src/main/java/es/verdnatura/presentation/view/feature/ajustes/fragment/AjustesFragment.kt +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/ajustes/fragment/AjustesFragment.kt @@ -121,7 +121,8 @@ class AjustesFragment : binding.searchableRecyclerView.setAdapter(adapter, listNames) binding.searchableRecyclerView.visibility = View.VISIBLE - binding.searchableRecyclerView.setSearchHintWithoutFocus(getString(R.string.sectorSearch)) + binding.searchableRecyclerView.setSearchHint(getString(R.string.sectorSearch)) + ma.hideKeyboard(binding.searchableRecyclerView) } private fun setToolBar() { diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/inventario/fragment/InventaryFragment.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/inventario/fragment/InventaryFragment.kt index e0a78a80..ff1deb30 100644 --- a/app/src/main/java/es/verdnatura/presentation/view/feature/inventario/fragment/InventaryFragment.kt +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/inventario/fragment/InventaryFragment.kt @@ -11,6 +11,7 @@ import es.verdnatura.R import es.verdnatura.databinding.FragmentInventaryBinding import es.verdnatura.domain.ConstAndValues.BUYER import es.verdnatura.domain.ConstAndValues.BUYERID +import es.verdnatura.domain.ConstAndValues.ITEMPACKINGTYPEFILTER import es.verdnatura.domain.ConstAndValues.WAREHOUSEFK import es.verdnatura.domain.toast import es.verdnatura.presentation.base.BaseFragment @@ -22,6 +23,7 @@ import es.verdnatura.presentation.view.commom.NameWithId import es.verdnatura.presentation.view.commom.SearchableAdapter import es.verdnatura.presentation.view.component.CustomDialogInput import es.verdnatura.presentation.view.component.CustomDialogTwoButtons +import es.verdnatura.presentation.view.feature.calidad.model.Buyer import es.verdnatura.presentation.view.feature.inventario.adapter.InventoryAdapter import es.verdnatura.presentation.view.feature.inventario.model.ItemInventaryVO import es.verdnatura.presentation.view.feature.pasillero.model.PasillerosItemVO @@ -41,6 +43,8 @@ class InventaryFragment : private var firstVisiblePosition = 0 private lateinit var itemClicked: ItemInventaryVO private var buyerId: Number = -1 + private var filterItemType: String? = null + private var myListBuyers = listOf() companion object { fun newInstance() = InventaryFragment() @@ -55,8 +59,12 @@ class InventaryFragment : override fun init() { - viewModel.itemShelvingBuyerGet() + // viewModel.itemShelvingBuyerGet() + viewModel.itemShelvingBuyerGetByItemPacking() binding.filterBuyer.text = mobileApplication.dataStoreApp.readDataStoreKey((BUYER)) + filterItemType = + mobileApplication.dataStoreApp.readDataStoreKey((ITEMPACKINGTYPEFILTER)) + binding.filterItemType.setText(filterItemType!!.firstOrNull()?.toString() ?: "").toString() buyerId = mobileApplication.dataStoreApp.readDataStoreKey((BUYERID)) if (buyerId != -1) { viewModel.getInventory( @@ -64,8 +72,26 @@ class InventaryFragment : ) } binding.filterBuyer.setOnClickListener { + val distinctPackingTypes = myListBuyers + + .filter { filterItemType == getString(R.string.allText) || filterItemType == "" || it.itemPackingTypeFk == filterItemType } + .map { + NameWithId( + it.worker.user.id, it.worker.user.nickname + ) + } + .distinct() + .sortedBy { it.name } + setSearchable(distinctPackingTypes as MutableList) binding.searchableRecyclerView.visibility = View.VISIBLE binding.searchableRecyclerView.setSearchHint(getString(R.string.BuyerSearch)) + ma.hideKeyboard(binding.searchableRecyclerView) + } + + binding.filterItemType.setOnClickListener { + + binding.searchableRecyclerViewItemType.visibility = View.VISIBLE + binding.searchableRecyclerViewItemType.setSearchHint(getString(R.string.selectItemType)) } customDialogInput = CustomDialogInput(requireContext()) @@ -106,6 +132,29 @@ class InventaryFragment : } + private fun setSearchableItemPacking(listNames: MutableList) { + val adapter = + SearchableAdapter( + listElements = listNames, + context = requireContext() + ) { elementSelected -> + + lifecycleScope.launch { + mobileApplication.dataStoreApp.editDataStoreKey( + ITEMPACKINGTYPEFILTER, elementSelected.name + ) + + } + binding.filterItemType.text = elementSelected.name.firstOrNull()?.toString() ?: "" + filterItemType = elementSelected.name + binding.searchableRecyclerViewItemType.visibility = View.GONE + + } + + binding.searchableRecyclerViewItemType.setAdapter(adapter, listNames) + + } + private fun setToolBar() { ma.hideBottomNavigation(View.GONE) val listIcons: ArrayList = ArrayList() @@ -184,6 +233,21 @@ class InventaryFragment : override fun observeViewModel() { with(viewModel) { + + buyersByItemPackingList.observe(viewLifecycleOwner) { list -> + myListBuyers = list.list + val distinctPackingTypes = + list?.list?.map { + NameWithId( + 1, it.itemPackingTypeFk ?: getString(R.string.allText) + ) + } + ?.distinct() + ?: emptyList() + + setSearchableItemPacking(distinctPackingTypes as MutableList) + } + buyersList.observe(viewLifecycleOwner) { item -> setSearchable(item.list.map { NameWithId( @@ -193,6 +257,7 @@ class InventaryFragment : } as MutableList) } + inventaryList.observe(viewLifecycleOwner) { it -> listInventory = ArrayList() listInventoryAux = ArrayList() @@ -202,6 +267,8 @@ class InventaryFragment : listInventoryAux.add(it) } } + + adapter = InventoryAdapter(listInventory, object : OnInvetoryNichoClickListener { override fun onInvetoryNichoClickListener(item: ItemInventaryVO) { customDialog.setTitle(item.itemFk.toString() + "\n" + item.longName) diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/inventario/fragment/InventaryViewModel.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/inventario/fragment/InventaryViewModel.kt index 1294b65e..26b38b1e 100644 --- a/app/src/main/java/es/verdnatura/presentation/view/feature/inventario/fragment/InventaryViewModel.kt +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/inventario/fragment/InventaryViewModel.kt @@ -11,6 +11,8 @@ import es.verdnatura.domain.userCases.GetItemFromBarcodeUseCase import es.verdnatura.presentation.base.BaseViewModel import es.verdnatura.presentation.common.Event import es.verdnatura.presentation.common.ItemDiscardSalixShortage +import es.verdnatura.presentation.view.feature.calidad.model.Buyer +import es.verdnatura.presentation.view.feature.calidad.model.BuyerList import es.verdnatura.presentation.view.feature.calidad.model.BuyerListVO import es.verdnatura.presentation.view.feature.calidad.model.BuyerVO import es.verdnatura.presentation.view.feature.inventario.model.InventaryListVO @@ -46,6 +48,10 @@ class InventaryViewModel(val context: Context) : BaseViewModel(context) { val buyersList: LiveData get() = _buyersList + private val _buyersByItemPackingList by lazy { MutableLiveData() } + val buyersByItemPackingList: LiveData + get() = _buyersByItemPackingList + private val _mistakeDepartmentList by lazy { MutableLiveData() } val mistakeDepartmentList: LiveData get() = _mistakeDepartmentList @@ -80,6 +86,20 @@ class InventaryViewModel(val context: Context) : BaseViewModel(context) { }) } + fun itemShelvingBuyerGetByItemPacking() { + salix.getBuyersByItemPackingType( + """{"fields":["itemPackingTypeFk","id","workerFk"], + |"include":{"relation":"worker","scope":{"fields":["id"], + |"include":{"relation":"user","scope":{"fields":["nickname"]}}}}}""".trimMargin() + ) + .enqueue(object : SalixCallback>(context) { + override fun onSuccess(response: Response>) { + _buyersByItemPackingList.value = response.body()?.let { BuyerList(it) } + } + + }) + } + val loadInventaryList: LiveData> = _inventaryList.map { Event(it) } fun getInventory(buyerFk: Number, warehouseFk: Int) {