refs #5652 add dynamic buttons for mermas

This commit is contained in:
Sergio De la torre 2023-08-03 09:38:56 +02:00
parent 8f978b2c5c
commit 00030ae266
7 changed files with 298 additions and 55 deletions

View File

@ -1,6 +1,7 @@
package es.verdnatura.presentation.common package es.verdnatura.presentation.common
import android.graphics.drawable.Drawable import android.graphics.drawable.Drawable
import android.widget.TextView
import es.verdnatura.presentation.view.feature.ajustes.model.AjustesItemVO 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.BarcodeVO
import es.verdnatura.presentation.view.feature.articulo.model.ItemCardRowVO 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.ClientTicket
import es.verdnatura.presentation.view.feature.delivery.model.ExpeditionInfoSummary 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.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.ItemInventaryVO
import es.verdnatura.presentation.view.feature.inventario.model.ItemInventoryParking import es.verdnatura.presentation.view.feature.inventario.model.ItemInventoryParking
import es.verdnatura.presentation.view.feature.login.model.WorkForms import es.verdnatura.presentation.view.feature.login.model.WorkForms
@ -62,6 +64,10 @@ interface OnItemButtonTicketRowClickListener {
fun onItemButtonTicketRowClickListener(item: ClientTicket, action: String) fun onItemButtonTicketRowClickListener(item: ClientTicket, action: String)
} }
interface OnItemButtonCMRRowClickListener {
fun onItemButtonCMRRowClickListener(item: Ticket)
}
interface OnAddressRowClickListener { interface OnAddressRowClickListener {
fun onAddressRowClickListener(item: ExpeditionInfoSummary) fun onAddressRowClickListener(item: ExpeditionInfoSummary)
} }
@ -189,3 +195,7 @@ interface onVehicleSelected {
fun onVehicleClick(userFk: String) fun onVehicleClick(userFk: String)
} }
interface OnClickDynamic {
fun onClickDynamic(addressFK: Int)
}

View File

@ -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<AddressLoses>) {
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)
}
}

View File

@ -17,11 +17,13 @@ import es.verdnatura.R
import es.verdnatura.databinding.FragmentItemCardBinding import es.verdnatura.databinding.FragmentItemCardBinding
import es.verdnatura.presentation.base.BaseFragment import es.verdnatura.presentation.base.BaseFragment
import es.verdnatura.presentation.common.* 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.CustomDialogInput
import es.verdnatura.presentation.view.component.CustomDialogList import es.verdnatura.presentation.view.component.CustomDialogList
import es.verdnatura.presentation.view.component.CustomDialogTwoButtons import es.verdnatura.presentation.view.component.CustomDialogTwoButtons
import es.verdnatura.presentation.view.feature.articulo.adapter.BarcodeAdapter 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.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.BarcodeVO
import es.verdnatura.presentation.view.feature.articulo.model.ItemCardRowVO import es.verdnatura.presentation.view.feature.articulo.model.ItemCardRowVO
import es.verdnatura.presentation.view.feature.articulo.model.ItemCardVO import es.verdnatura.presentation.view.feature.articulo.model.ItemCardVO
@ -31,7 +33,8 @@ import es.verdnatura.presentation.view.feature.pasillero.model.PasillerosItemVO
class ItemCardFragment( class ItemCardFragment(
var itemFk: String = "" var itemFk: String = ""
) : BaseFragment<FragmentItemCardBinding, ItemCardViewModel>(ItemCardViewModel::class) { ) : BaseFragment<FragmentItemCardBinding, ItemCardViewModel>(ItemCardViewModel::class),
OnClickDynamic {
private var urlLarge: String = "" private var urlLarge: String = ""
private var titleImage: String = "" private var titleImage: String = ""
@ -113,6 +116,7 @@ class ItemCardFragment(
iconReload.drawable -> { iconReload.drawable -> {
getItemCard(itemInfoG!!.id.toString()) getItemCard(itemInfoG!!.id.toString())
} }
iconHistory.drawable -> { iconHistory.drawable -> {
ma.onPasillerosItemClickListener( ma.onPasillerosItemClickListener(
@ -122,6 +126,7 @@ class ItemCardFragment(
} }
iconSalix.drawable -> { iconSalix.drawable -> {
binding.splashProgress.visibility = View.VISIBLE binding.splashProgress.visibility = View.VISIBLE
var itemId = itemInfoG!!.id 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 (actionId == EditorInfo.IME_ACTION_SEARCH || actionId == EditorInfo.IME_ACTION_DONE || actionId == 0 || actionId == 5) {
if (!binding.editItemFk.text.toString().isNullOrEmpty()) if (!binding.editItemFk.text.toString().isNullOrEmpty())
//Tarea#5109 //Tarea#5109
try { try {
getItemCard(itemScanValue(binding.editItemFk.text.toString(),"buy","more").toString()) getItemCard(
}catch (Ex:Exception){ itemScanValue(
ma.messageWithSound(Ex.message.toString(), true,true) 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("") binding.editItemFk.setText("")
ma.hideKeyboard(binding.editItemFk) ma.hideKeyboard(binding.editItemFk)
return@setOnEditorActionListener true return@setOnEditorActionListener true
@ -197,7 +208,7 @@ class ItemCardFragment(
override fun observeViewModel() { override fun observeViewModel() {
with(viewModel) { with(viewModel) {
itemcard.observe(viewLifecycleOwner, Observer { itemcard.observe(viewLifecycleOwner, Observer {
if (it.isError) { if (it.isError) {
binding.itemcardLayout.visibility = GONE 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 false
} }
} else if (item.action == "itemStockUpdateRemove") { } else if (item.action == "itemStockUpdateRemove") {
println("Vamos a indicar la cantidad a falta/basura")
customDialogInput.setTitle(item.title!!) customDialogInput.setTitle(item.title!!)
.setDescription(getString(R.string.quantityToUnregister)) .setDescription(getString(R.string.quantityToUnregister))
.setOkButton(getString(R.string.save)) { .setOkButton(getString(R.string.save)) {
@ -525,20 +548,23 @@ class ItemCardFragment(
"itemStockUpdateAdd" -> prepareItemStockUpdate2(item, value) "itemStockUpdateAdd" -> prepareItemStockUpdate2(item, value)
"itemStockUpdateRemove" -> prepareItemStockUpdate2(item, value) "itemStockUpdateRemove" -> prepareItemStockUpdate2(item, value)
"updateGrouping" -> "updateGrouping" ->
viewModel.updateGrouping( viewModel.updateGrouping(
itemFk = itemInfoG!!.id, itemFk = itemInfoG!!.id,
value = value, value = value,
warehouseFk = warehouseFk!! warehouseFk = warehouseFk!!
) )
"updatePacking" -> viewModel.updatePacking( "updatePacking" -> viewModel.updatePacking(
itemFk = itemInfoG!!.id, itemFk = itemInfoG!!.id,
value = value, value = value,
warehouseFk = warehouseFk!! warehouseFk = warehouseFk!!
) )
"itemSaveStem" -> viewModel.item_saveStems( "itemSaveStem" -> viewModel.item_saveStems(
itemFk = itemInfoG!!.id, itemFk = itemInfoG!!.id,
value = value value = value
) )
"item_saveReference" -> viewModel.item_saveReference( "item_saveReference" -> viewModel.item_saveReference(
itemFk = itemInfoG!!.id, itemFk = itemInfoG!!.id,
value = value value = value
@ -558,58 +584,79 @@ class ItemCardFragment(
} }
private fun prepareItemStockUpdate2(itemB: ItemCardRowVO, value: Int) { private fun prepareItemStockUpdate2(itemB: ItemCardRowVO, value: Int) {
try {
value.toInt()
if (itemB.action == "itemStockUpdateRemove") { //Tarea 5652 , quitar código cuando está asignada tarea
customDialogTwo.setTitle(itemB.title!!) var test = false
.setDescription(getString(R.string.deleteStock)) if (test) {
.setOkButton(getString(R.string.fault)) { println("Vamos a getAddress")
viewModel.itemTrash( binding.splashProgress.visibility = View.VISIBLE
itemFk = itemInfoG!!.id, viewModel.getAddressLoses()
warehouseFk = warehouseFk!!, } else {
newValue = value, try {
isTrash = false value.toInt()
) if (itemB.action == "itemStockUpdateRemove") {
//changeOfflineValue(itemB,value, listBarcodes)
showProgress()
customDialogTwo.dismiss()
}.setOkButtonTwo(getString(R.string.trash)) { customDialogTwo.setTitle(itemB.title!!)
viewModel.itemTrash( .setDescription(getString(R.string.deleteStock))
itemFk = itemInfoG!!.id, .setOkButton(getString(R.string.fault)) {
warehouseFk = warehouseFk!!, viewModel.itemTrash(
newValue = value, itemFk = itemInfoG!!.id,
isTrash = true warehouseFk = warehouseFk!!,
newValue = value,
isTrash = false
) )
//changeOfflineValue(itemB,value, listBarcodes) //changeOfflineValue(itemB,value, listBarcodes)
showProgress() showProgress()
customDialogTwo.dismiss() 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 { showProgress()
//changeOfflineValue(itemB,value, listBarcodes) customDialogTwo.dismiss()
showProgress()
viewModel.itemTrash( }.setKoButton(getString(R.string.cancel)) {
itemFk = itemInfoG!!.id,
warehouseFk = warehouseFk!!, customDialogTwo.dismiss()
newValue = (value * -1), }.show()
isTrash = false
} 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<AddressLoses>) {
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) { private fun prepareBarcodeDialog(itemB: ItemCardRowVO) {
customDialogList.setTitle(getString(R.string.barcodes)) customDialogList.setTitle(getString(R.string.barcodes))
@ -708,6 +755,10 @@ class ItemCardFragment(
) )
} }
override fun onClickDynamic(addressFK: Int) {
println("Acabas de pulsar" + addressFK)
}
} }

View File

@ -12,6 +12,8 @@ import es.verdnatura.presentation.common.Event
import es.verdnatura.presentation.common.ResponseItemVO import es.verdnatura.presentation.common.ResponseItemVO
import es.verdnatura.presentation.common.itemBarCodeSalix import es.verdnatura.presentation.common.itemBarCodeSalix
import es.verdnatura.presentation.common.itemPackingTypeSalix 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.ItemCardVO
import es.verdnatura.presentation.view.feature.articulo.model.ItemPackingTypeList import es.verdnatura.presentation.view.feature.articulo.model.ItemPackingTypeList
import es.verdnatura.presentation.view.feature.articulo.model.ItemProposal import es.verdnatura.presentation.view.feature.articulo.model.ItemProposal
@ -43,6 +45,10 @@ class ItemCardViewModel(var context: Context) : BaseViewModel(context) {
val itemProposallist: LiveData<ItemProposalList> val itemProposallist: LiveData<ItemProposalList>
get() = _itemProposallist get() = _itemProposallist
private val _addressLosesList by lazy { MutableLiveData<AddressLosesList>() }
val addressLosesList: LiveData<AddressLosesList>
get() = _addressLosesList
fun getItemCard( fun getItemCard(
itemFk: Number, 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)
}
} }

View File

@ -28,4 +28,15 @@ class ItemProposal(
class ItemProposalList( class ItemProposalList(
var list: List<ItemProposal> = listOf() var list: List<ItemProposal> = listOf()
) )
class AddressLosesList(
var list: List<AddressLoses> = listOf()
)
data class AddressLoses(
val addressFk: Int,
val nickname: String,
val name: String
)

View File

@ -0,0 +1,53 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
style="@style/DialogTheme"
android:layout_height="wrap_content"
android:layout_margin="@dimen/layout_margin_1"
app:cardBackgroundColor="@color/verdnatura_black_8"
app:cardCornerRadius="@dimen/dialog_radius">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="@dimen/default_layout_margin">
<TextView
android:id="@+id/custom_dialog_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/layout_margin_3"
android:layout_marginBottom="@dimen/default_layout_margin"
android:textAlignment="center"
android:textColor="@color/verdnatura_white"
android:textSize="@dimen/h6"
android:textStyle="bold"
android:visibility="gone"
tools:text="¿Estás seguro de que deseas eliminar el dispositivo de celia?"
tools:visibility="visible" />
<TextView
android:id="@+id/custom_dialog_description"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAlignment="center"
android:textColor="@color/verdnatura_white"
android:textSize="@dimen/body1"
android:visibility="gone"
tools:text="Este cambio no podrá deshacerse a no ser que vuelvas a vincular el dispositivo"
tools:visibility="visible" />
<LinearLayout
android:id="@+id/layoutButtons"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="@dimen/default_layout_margin"
android:orientation="vertical"></LinearLayout>
</LinearLayout>
</androidx.cardview.widget.CardView>

View File

@ -21,6 +21,13 @@
<dimen name="layout_margin_8">72dp</dimen> <dimen name="layout_margin_8">72dp</dimen>
<dimen name="layout_margin_12">104dp</dimen> <dimen name="layout_margin_12">104dp</dimen>
<dimen name="layout_margin_min_dynamic">64dp</dimen>
<dimen name="layout_height_dynamic">36dp</dimen>
<dimen name="padding_start_dynamic">16dp</dimen>
<dimen name="padding_end_dynamic">16dp</dimen>
<dimen name="margin_top_dynamic">8dp</dimen>
<dimen name="margin_bottom_dynamic">8dp</dimen>
<!--Bottom navigation--> <!--Bottom navigation-->
<dimen name="bottom_navigation_height">56dp</dimen> <dimen name="bottom_navigation_height">56dp</dimen>