From ad370ba09a1ca138a5f3bc3ff796b22fb2396fc7 Mon Sep 17 00:00:00 2001 From: Sergio De la torre Date: Mon, 24 Mar 2025 12:29:25 +0100 Subject: [PATCH] feat: refs#6659 DayOfSaleScreen --- .../fragment/DayOfSaleFragmentCompose.kt | 137 ++++++++++++++++++ .../fragment/DayOfSaleViewModelCompose.kt | 53 +++++++ 2 files changed, 190 insertions(+) create mode 100644 app/src/main/java/es/verdnatura/presentation/view/feature/diadeventa/fragment/DayOfSaleFragmentCompose.kt create mode 100644 app/src/main/java/es/verdnatura/presentation/view/feature/diadeventa/fragment/DayOfSaleViewModelCompose.kt diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/diadeventa/fragment/DayOfSaleFragmentCompose.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/diadeventa/fragment/DayOfSaleFragmentCompose.kt new file mode 100644 index 00000000..0bcdd0e9 --- /dev/null +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/diadeventa/fragment/DayOfSaleFragmentCompose.kt @@ -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) -> 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 + ) + } +} + diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/diadeventa/fragment/DayOfSaleViewModelCompose.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/diadeventa/fragment/DayOfSaleViewModelCompose.kt new file mode 100644 index 00000000..bbf2eedd --- /dev/null +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/diadeventa/fragment/DayOfSaleViewModelCompose.kt @@ -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 = 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>(application.applicationContext) { + + override fun onSuccess(response: Response>) { + + 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(application.applicationContext) {}) + } + +} + + + + + + + +