From 00030ae2665521437e49758378f16535542f5270 Mon Sep 17 00:00:00 2001 From: Sergio De la torre Date: Thu, 3 Aug 2023 09:38:56 +0200 Subject: [PATCH] refs #5652 add dynamic buttons for mermas --- .../presentation/common/UICallbacks.kt | 10 ++ .../component/CustomDialogDynamicButtons.kt | 90 ++++++++++ .../articulo/fragment/ItemCardFragment.kt | 159 ++++++++++++------ .../articulo/fragment/ItemCardViewModel.kt | 21 +++ .../feature/articulo/model/ItemProposal.kt | 13 +- .../component_custom_dynamic_dialog.xml | 53 ++++++ app/src/main/res/values/dimens.xml | 7 + 7 files changed, 298 insertions(+), 55 deletions(-) create mode 100644 app/src/main/java/es/verdnatura/presentation/view/component/CustomDialogDynamicButtons.kt create mode 100644 app/src/main/res/layout/component_custom_dynamic_dialog.xml diff --git a/app/src/main/java/es/verdnatura/presentation/common/UICallbacks.kt b/app/src/main/java/es/verdnatura/presentation/common/UICallbacks.kt index 33f8b13b..959e5eca 100644 --- a/app/src/main/java/es/verdnatura/presentation/common/UICallbacks.kt +++ b/app/src/main/java/es/verdnatura/presentation/common/UICallbacks.kt @@ -1,6 +1,7 @@ package es.verdnatura.presentation.common import android.graphics.drawable.Drawable +import android.widget.TextView import es.verdnatura.presentation.view.feature.ajustes.model.AjustesItemVO import es.verdnatura.presentation.view.feature.articulo.model.BarcodeVO import es.verdnatura.presentation.view.feature.articulo.model.ItemCardRowVO @@ -9,6 +10,7 @@ import es.verdnatura.presentation.view.feature.buscaritem.model.ItemLocationVO import es.verdnatura.presentation.view.feature.delivery.model.ClientTicket import es.verdnatura.presentation.view.feature.delivery.model.ExpeditionInfoSummary import es.verdnatura.presentation.view.feature.delivery.model.RouteInfo +import es.verdnatura.presentation.view.feature.delivery.model.Ticket import es.verdnatura.presentation.view.feature.inventario.model.ItemInventaryVO import es.verdnatura.presentation.view.feature.inventario.model.ItemInventoryParking import es.verdnatura.presentation.view.feature.login.model.WorkForms @@ -62,6 +64,10 @@ interface OnItemButtonTicketRowClickListener { fun onItemButtonTicketRowClickListener(item: ClientTicket, action: String) } +interface OnItemButtonCMRRowClickListener { + fun onItemButtonCMRRowClickListener(item: Ticket) +} + interface OnAddressRowClickListener { fun onAddressRowClickListener(item: ExpeditionInfoSummary) } @@ -189,3 +195,7 @@ interface onVehicleSelected { fun onVehicleClick(userFk: String) } +interface OnClickDynamic { + fun onClickDynamic(addressFK: Int) +} + diff --git a/app/src/main/java/es/verdnatura/presentation/view/component/CustomDialogDynamicButtons.kt b/app/src/main/java/es/verdnatura/presentation/view/component/CustomDialogDynamicButtons.kt new file mode 100644 index 00000000..557228ba --- /dev/null +++ b/app/src/main/java/es/verdnatura/presentation/view/component/CustomDialogDynamicButtons.kt @@ -0,0 +1,90 @@ +package es.verdnatura.presentation.view.component + +import android.annotation.SuppressLint +import android.app.Dialog +import android.content.Context +import android.content.res.TypedArray +import android.view.View +import android.widget.Button +import android.widget.LinearLayout +import androidx.appcompat.view.ContextThemeWrapper +import es.verdnatura.R +import es.verdnatura.databinding.ComponentCustomDynamicDialogBinding +import es.verdnatura.presentation.common.OnClickDynamic +import es.verdnatura.presentation.common.setMargins +import es.verdnatura.presentation.view.feature.articulo.model.AddressLoses + +class CustomDialogDynamicButtons(context: Context, private val onClickDynamic: OnClickDynamic) : Dialog(context, R.style.DialogTheme) { + + private var binding: ComponentCustomDynamicDialogBinding = + ComponentCustomDynamicDialogBinding.inflate(layoutInflater) + + + init { + setContentView(binding.root) + + } + + fun setTitle(title: String): CustomDialogDynamicButtons { + + binding.customDialogTitle.visibility = View.VISIBLE + binding.customDialogTitle.text = title + return this + } + + fun setDescription(description: String): CustomDialogDynamicButtons { + + binding.customDialogDescription.visibility = View.VISIBLE + binding.customDialogDescription.text = description + return this + } + + + fun createDynamicButtons(buttonInfoList: List) { + for (buttonInfo in buttonInfoList) { + setDynamicButton(buttonInfo.nickname,buttonInfo.addressFk) + } + } + + + @SuppressLint("ResourceType") + private fun setDynamicButton(buttonText: String, addressFk: Int) { + + val button = Button(ContextThemeWrapper(context, R.style.DefaultButton_DynamicButton)) + button.text = buttonText + + val layoutParams = LinearLayout.LayoutParams( + LinearLayout.LayoutParams.MATCH_PARENT, // anchura + context.resources.getDimensionPixelSize(R.dimen.layout_height_dynamic) // altura + ) + button.layoutParams = layoutParams + + val paddingStart = + context.resources.getDimensionPixelSize(R.dimen.padding_start_dynamic) + val paddingEnd = + context.resources.getDimensionPixelSize(R.dimen.padding_end_dynamic) + val marginTop = context.resources.getDimensionPixelSize(R.dimen.margin_top_dynamic) + val marginBottom = + context.resources.getDimensionPixelSize(R.dimen.margin_bottom_dynamic) + button.setPaddingRelative(paddingStart, 0, paddingEnd, 0) + button.setMargins(0, marginTop, 0, marginBottom) + button.text + + val attrs = intArrayOf(android.R.attr.textColor, android.R.attr.background) + val typedArray: TypedArray = + context.obtainStyledAttributes(R.style.DefaultButton_DynamicButton, attrs) + button.setTextColor(typedArray.getColor(0, 0)) + button.setBackgroundResource(typedArray.getResourceId(1, 0)) + + typedArray.recycle() + button.setOnClickListener { + onClickDynamic.onClickDynamic(addressFk) + } + val buttonContainer = binding.layoutButtons + buttonContainer.addView(button) + + + } + + +} \ No newline at end of file diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/articulo/fragment/ItemCardFragment.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/articulo/fragment/ItemCardFragment.kt index ac609114..75a53977 100644 --- a/app/src/main/java/es/verdnatura/presentation/view/feature/articulo/fragment/ItemCardFragment.kt +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/articulo/fragment/ItemCardFragment.kt @@ -17,11 +17,13 @@ import es.verdnatura.R import es.verdnatura.databinding.FragmentItemCardBinding import es.verdnatura.presentation.base.BaseFragment import es.verdnatura.presentation.common.* +import es.verdnatura.presentation.view.component.CustomDialogDynamicButtons import es.verdnatura.presentation.view.component.CustomDialogInput import es.verdnatura.presentation.view.component.CustomDialogList import es.verdnatura.presentation.view.component.CustomDialogTwoButtons import es.verdnatura.presentation.view.feature.articulo.adapter.BarcodeAdapter import es.verdnatura.presentation.view.feature.articulo.adapter.ItemCardAdapter +import es.verdnatura.presentation.view.feature.articulo.model.AddressLoses import es.verdnatura.presentation.view.feature.articulo.model.BarcodeVO import es.verdnatura.presentation.view.feature.articulo.model.ItemCardRowVO import es.verdnatura.presentation.view.feature.articulo.model.ItemCardVO @@ -31,7 +33,8 @@ import es.verdnatura.presentation.view.feature.pasillero.model.PasillerosItemVO class ItemCardFragment( var itemFk: String = "" -) : BaseFragment(ItemCardViewModel::class) { +) : BaseFragment(ItemCardViewModel::class), + OnClickDynamic { private var urlLarge: String = "" private var titleImage: String = "" @@ -113,6 +116,7 @@ class ItemCardFragment( iconReload.drawable -> { getItemCard(itemInfoG!!.id.toString()) } + iconHistory.drawable -> { ma.onPasillerosItemClickListener( @@ -122,6 +126,7 @@ class ItemCardFragment( } + iconSalix.drawable -> { binding.splashProgress.visibility = View.VISIBLE var itemId = itemInfoG!!.id @@ -159,13 +164,19 @@ class ItemCardFragment( if (actionId == EditorInfo.IME_ACTION_SEARCH || actionId == EditorInfo.IME_ACTION_DONE || actionId == 0 || actionId == 5) { if (!binding.editItemFk.text.toString().isNullOrEmpty()) //Tarea#5109 - try { - getItemCard(itemScanValue(binding.editItemFk.text.toString(),"buy","more").toString()) - }catch (Ex:Exception){ - ma.messageWithSound(Ex.message.toString(), true,true) - } + try { + getItemCard( + itemScanValue( + binding.editItemFk.text.toString(), + "buy", + "more" + ).toString() + ) + } catch (Ex: Exception) { + ma.messageWithSound(Ex.message.toString(), true, true) + } - // getItemCard(binding.editItemFk.text.toString()) + // getItemCard(binding.editItemFk.text.toString()) binding.editItemFk.setText("") ma.hideKeyboard(binding.editItemFk) return@setOnEditorActionListener true @@ -197,7 +208,7 @@ class ItemCardFragment( override fun observeViewModel() { with(viewModel) { - itemcard.observe(viewLifecycleOwner, Observer { + itemcard.observe(viewLifecycleOwner, Observer { if (it.isError) { binding.itemcardLayout.visibility = GONE @@ -241,6 +252,17 @@ class ItemCardFragment( } }) + addressLosesList.observe(viewLifecycleOwner, Observer { + binding.splashProgress.visibility = GONE + if (it.list.isEmpty()) { + ma.messageWithSound(getString(R.string.empty), true, false) + } else { + showDialogTrashFault(it.list) + } + + }) + + } } @@ -474,6 +496,7 @@ class ItemCardFragment( false } } else if (item.action == "itemStockUpdateRemove") { + println("Vamos a indicar la cantidad a falta/basura") customDialogInput.setTitle(item.title!!) .setDescription(getString(R.string.quantityToUnregister)) .setOkButton(getString(R.string.save)) { @@ -525,20 +548,23 @@ class ItemCardFragment( "itemStockUpdateAdd" -> prepareItemStockUpdate2(item, value) "itemStockUpdateRemove" -> prepareItemStockUpdate2(item, value) "updateGrouping" -> - viewModel.updateGrouping( - itemFk = itemInfoG!!.id, - value = value, - warehouseFk = warehouseFk!! - ) + viewModel.updateGrouping( + itemFk = itemInfoG!!.id, + value = value, + warehouseFk = warehouseFk!! + ) + "updatePacking" -> viewModel.updatePacking( itemFk = itemInfoG!!.id, value = value, warehouseFk = warehouseFk!! ) + "itemSaveStem" -> viewModel.item_saveStems( itemFk = itemInfoG!!.id, value = value ) + "item_saveReference" -> viewModel.item_saveReference( itemFk = itemInfoG!!.id, value = value @@ -558,58 +584,79 @@ class ItemCardFragment( } private fun prepareItemStockUpdate2(itemB: ItemCardRowVO, value: Int) { - try { - value.toInt() - if (itemB.action == "itemStockUpdateRemove") { - customDialogTwo.setTitle(itemB.title!!) - .setDescription(getString(R.string.deleteStock)) - .setOkButton(getString(R.string.fault)) { - viewModel.itemTrash( - itemFk = itemInfoG!!.id, - warehouseFk = warehouseFk!!, - newValue = value, - isTrash = false + //Tarea 5652 , quitar código cuando está asignada tarea + var test = false + if (test) { + println("Vamos a getAddress") + binding.splashProgress.visibility = View.VISIBLE + viewModel.getAddressLoses() + } else { + try { + value.toInt() - ) - //changeOfflineValue(itemB,value, listBarcodes) - showProgress() - customDialogTwo.dismiss() + if (itemB.action == "itemStockUpdateRemove") { - }.setOkButtonTwo(getString(R.string.trash)) { - viewModel.itemTrash( - itemFk = itemInfoG!!.id, - warehouseFk = warehouseFk!!, - newValue = value, - isTrash = true + customDialogTwo.setTitle(itemB.title!!) + .setDescription(getString(R.string.deleteStock)) + .setOkButton(getString(R.string.fault)) { + viewModel.itemTrash( + itemFk = itemInfoG!!.id, + warehouseFk = warehouseFk!!, + newValue = value, + isTrash = false - ) - //changeOfflineValue(itemB,value, listBarcodes) - showProgress() - customDialogTwo.dismiss() + ) + //changeOfflineValue(itemB,value, listBarcodes) + showProgress() + customDialogTwo.dismiss() - }.setKoButton(getString(R.string.cancel)) { + }.setOkButtonTwo(getString(R.string.trash)) { + viewModel.itemTrash( + itemFk = itemInfoG!!.id, + warehouseFk = warehouseFk!!, + newValue = value, + isTrash = true - customDialogTwo.dismiss() - }.show() - } else { - //changeOfflineValue(itemB,value, listBarcodes) - showProgress() - viewModel.itemTrash( - itemFk = itemInfoG!!.id, - warehouseFk = warehouseFk!!, - newValue = (value * -1), - isTrash = false + ) + + showProgress() + customDialogTwo.dismiss() + + }.setKoButton(getString(R.string.cancel)) { + + customDialogTwo.dismiss() + }.show() + + } else { + + showProgress() + viewModel.itemTrash( + itemFk = itemInfoG!!.id, + warehouseFk = warehouseFk!!, + newValue = (value * -1), + isTrash = false + + ) + } + } catch (e: Exception) { + // binding.itemcardLayout.visibility = View.GONE + ma.messageWithSound(getString(R.string.errorNotNumber), true, true) - ) } - } catch (e: Exception) { - // binding.itemcardLayout.visibility = View.GONE - ma.messageWithSound(getString(R.string.errorNotNumber), true, true) - } } + private fun showDialogTrashFault(listAddress: List) { + + val customDynamic = + CustomDialogDynamicButtons(requireContext(), this)// Instancia de tu customDialogTwo + customDynamic.setTitle("") + customDynamic.setDescription(getString(R.string.deleteStock)) + customDynamic.createDynamicButtons(listAddress) + customDynamic.show() + } + private fun prepareBarcodeDialog(itemB: ItemCardRowVO) { customDialogList.setTitle(getString(R.string.barcodes)) @@ -708,6 +755,10 @@ class ItemCardFragment( ) } + override fun onClickDynamic(addressFK: Int) { + println("Acabas de pulsar" + addressFK) + } + } diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/articulo/fragment/ItemCardViewModel.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/articulo/fragment/ItemCardViewModel.kt index c196b517..6219421f 100644 --- a/app/src/main/java/es/verdnatura/presentation/view/feature/articulo/fragment/ItemCardViewModel.kt +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/articulo/fragment/ItemCardViewModel.kt @@ -12,6 +12,8 @@ import es.verdnatura.presentation.common.Event import es.verdnatura.presentation.common.ResponseItemVO import es.verdnatura.presentation.common.itemBarCodeSalix import es.verdnatura.presentation.common.itemPackingTypeSalix +import es.verdnatura.presentation.view.feature.articulo.model.AddressLoses +import es.verdnatura.presentation.view.feature.articulo.model.AddressLosesList import es.verdnatura.presentation.view.feature.articulo.model.ItemCardVO import es.verdnatura.presentation.view.feature.articulo.model.ItemPackingTypeList import es.verdnatura.presentation.view.feature.articulo.model.ItemProposal @@ -43,6 +45,10 @@ class ItemCardViewModel(var context: Context) : BaseViewModel(context) { val itemProposallist: LiveData get() = _itemProposallist + private val _addressLosesList by lazy { MutableLiveData() } + val addressLosesList: LiveData + get() = _addressLosesList + fun getItemCard( itemFk: Number, @@ -343,6 +349,21 @@ class ItemCardViewModel(var context: Context) : BaseViewModel(context) { }) } + fun getAddressLoses( + ) { + + val mermaRecords = listOf( + AddressLoses(77, "MERMA: CONTENEDOR", "BASURA"), + AddressLoses(317, "MERMA: FALTAS", "FALTAS"), + AddressLoses(1535, "MERMA: FALTAS (INVENTARIO)", "FALTAS"), + AddressLoses(2230, "MERMA: RECLAMACION BASURA", "BASURA"), + AddressLoses(7475, "MERMA: RECLAMACION TALLER", "BASURA"), + AddressLoses(43432, "MERMA: TRANSPORTE", "BASURA") + ) +println("Vamos a a lista") + _addressLosesList.value= AddressLosesList(mermaRecords) + + } } diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/articulo/model/ItemProposal.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/articulo/model/ItemProposal.kt index cb2e082c..2878181c 100644 --- a/app/src/main/java/es/verdnatura/presentation/view/feature/articulo/model/ItemProposal.kt +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/articulo/model/ItemProposal.kt @@ -28,4 +28,15 @@ class ItemProposal( class ItemProposalList( var list: List = listOf() -) \ No newline at end of file +) + +class AddressLosesList( + var list: List = listOf() +) + +data class AddressLoses( + val addressFk: Int, + val nickname: String, + val name: String +) + diff --git a/app/src/main/res/layout/component_custom_dynamic_dialog.xml b/app/src/main/res/layout/component_custom_dynamic_dialog.xml new file mode 100644 index 00000000..32a94fa0 --- /dev/null +++ b/app/src/main/res/layout/component_custom_dynamic_dialog.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index b26f6a28..767812b3 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -21,6 +21,13 @@ 72dp 104dp + 64dp + 36dp + 16dp + 16dp + 8dp + 8dp + 56dp