feat: refs#6659 DayOfSaleScreen

This commit is contained in:
Sergio De la torre 2025-03-24 12:29:25 +01:00
parent 889dcd1fe8
commit ad370ba09a
2 changed files with 190 additions and 0 deletions

View File

@ -0,0 +1,137 @@
package es.verdnatura.presentation.view.feature.diadeventa.fragment
import android.content.Context
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.view.inputmethod.EditorInfo
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.ui.platform.ComposeView
import androidx.fragment.app.Fragment
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import es.verdnatura.R
import es.verdnatura.presentation.common.OnPasillerosItemClickListener
import es.verdnatura.presentation.composable.IconToolBar
import es.verdnatura.presentation.view.component.CustomDialog
import es.verdnatura.presentation.view.component.CustomDialogList
import es.verdnatura.presentation.view.feature.diadeventa.adapter.DayOfSaleAdapter
import es.verdnatura.presentation.view.feature.main.activity.MainActivity
import es.verdnatura.presentation.view.feature.pasillero.model.PasillerosItemVO
import org.koin.androidx.viewmodel.ext.android.viewModel
class DayOfSaleFragmentCompose(
var title: String = ""
) : Fragment() {
private val viewModel: DayOfSaleViewModelCompose by viewModel()
private lateinit var customDialogList: CustomDialogList
private lateinit var customDialog: CustomDialog
private var adapter: DayOfSaleAdapter? = null
private var itemScan = ""
private var pasillerosItemClickListener: OnPasillerosItemClickListener? = null
companion object {
fun newInstance(title: String) = DayOfSaleFragmentCompose(title)
}
override fun onAttach(context: Context) {
if (context is OnPasillerosItemClickListener) pasillerosItemClickListener = context
super.onAttach(context)
}
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
): View {
return ComposeView(requireContext()).apply {
setContent {
SetView()
}
}
}
@Composable
private fun SetView() {
val uiState by viewModel.uiState.collectAsStateWithLifecycle()
val columnActions = listOf<(List<String>) -> Unit>(
// { item -> println("Producto seleccionado: ${item[0]}") }, // Acción para la primera columna
// { item -> println("Stock: ${item[1]}") }, // Acción para la segunda columna
// { item -> println("Visible: ${item[2]}") } // Acción para la tercera columna
)
GenericListScreen(
uiState.items.map { item ->
listOf(
item.itemFk?.toString() ?: "",
item.longName ?: "",
item.dated,
item.visible?.toString() ?: "",
item.stock?.toString() ?: ""
)
},
columnActions = columnActions,
headers = listOf(
getString(R.string.itemfk),
getString(R.string.name),
getString(R.string.date),
getString(R.string.visible),
getString(R.string.stock)
),
onTextChange = { input ->
viewModel.itemShelvingGetSaleDate(input)
},
titleToolBar =
if (uiState.shelvingCode.isNullOrEmpty()) title else title + " " + uiState.shelvingCode,
onBackClick = { (context as MainActivity).onMyBackPressed() },
onLongClick = { },
onClick = { item -> openSearchItemFragment(item[0]) },
listIconToolBar = listOf(
IconToolBar(
idRes = R.drawable.ic_local_parking_black_24dp,
toolTip = getString(R.string.allowParking),
onClickIcon = { showParking() },
)
)
)
}
private fun showParking() {
customDialogList = CustomDialogList(requireContext())
customDialogList.setTitle(getString(R.string.showParking))
.setOkButton(getString(R.string.close)) {
customDialogList.dismiss()
}.setValue("").show()
customDialogList.getEditText().requestFocus()
customDialogList.getEditText().setOnEditorActionListener { _, actionId, _ ->
if (actionId == EditorInfo.IME_ACTION_SEARCH || actionId == EditorInfo.IME_ACTION_DONE || actionId == 0 || actionId == 5) {
if (customDialogList.getValue().isNotEmpty()) {
viewModel.setParking(
parking = customDialogList.getValue(),
scanItem = itemScan
)
customDialogList.dismiss()
}
customDialogList.setValue("")
return@setOnEditorActionListener true
}
false
}
}
private fun openSearchItemFragment(item: String) {
pasillerosItemClickListener!!.onPasillerosItemClickListener(
PasillerosItemVO(
title =
R.string.titleItemConsult
), item
)
}
}

View File

@ -0,0 +1,53 @@
package es.verdnatura.presentation.view.feature.diadeventa.fragment
import es.verdnatura.domain.SalixCallback
import es.verdnatura.domain.formatWithQuotes
import es.verdnatura.presentation.base.BaseViewModelCompose
import es.verdnatura.presentation.view.feature.diadeventa.model.ItemShelvingSaleDate
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.flow.update
import retrofit2.Response
data class UiState(
val shelvingCode: String? = null,
val items: List<ItemShelvingSaleDate> = emptyList()
)
class DayOfSaleViewModelCompose(var application: android.app.Application) :
BaseViewModelCompose(application) {
private val _uiState = MutableStateFlow(UiState())
val uiState = _uiState.asStateFlow()
fun itemShelvingGetSaleDate(vShelvingFK: String) {
_uiState.update { it.copy(shelvingCode = vShelvingFK) }
salix.itemShelvingGetSaleDate(params = listOf(vShelvingFK).formatWithQuotes())
.enqueue(object :
SalixCallback<List<ItemShelvingSaleDate>>(application.applicationContext) {
override fun onSuccess(response: Response<List<ItemShelvingSaleDate>>) {
response.body()?.let { list ->
_uiState.update { it.copy(items = list) }
}
}
})
}
fun setParking(scanItem: String, parking: String) {
salix.setParking(arrayListOf(scanItem, parking).formatWithQuotes())
.enqueue(object : SalixCallback<Any>(application.applicationContext) {})
}
}