feat: refs #8090 deleteEpxpedition

This commit is contained in:
Sergio De la torre 2024-10-16 11:30:53 +02:00
parent 2ee835bbb9
commit 91f3da78cf
5 changed files with 220 additions and 31 deletions

View File

@ -27,7 +27,7 @@ class Expeditions(
class ExpeditionSalix(
val expeditionFk: Number,
val stateCode: String?,
val stateCode: String? = null,
val isScanned: Int? = 0
)

View File

@ -79,6 +79,9 @@ class DeliveryViewModel(val context: Context) : BaseViewModel(context) {
private val _responseFindExpeditionId by lazy { MutableLiveData<Number>() }
val responseFindExpeditionId: LiveData<Number> = _responseFindExpeditionId
private val _responseDeleteExpedition by lazy { MutableLiveData<Boolean>() }
val responseDeleteExpedition: LiveData<Boolean> = _responseDeleteExpedition
private val _responseUpdateRoute by lazy { MutableLiveData<Boolean>() }
val responseUpdateRoute: LiveData<Boolean>
get() = _responseUpdateRoute
@ -221,8 +224,6 @@ class DeliveryViewModel(val context: Context) : BaseViewModel(context) {
}
fun expeditionStateAddSalix(expeditions: Any) {
// No se quita ResponseItem ya que en caso de fallo hay que guardar datos
salix.addExpeditionState(expeditions).enqueue(object : SalixCallback<Unit>(context) {
override fun onSuccess(response: Response<Unit>) {
super.onSuccess(response)
@ -244,7 +245,6 @@ class DeliveryViewModel(val context: Context) : BaseViewModel(context) {
}
fun findExpedition(expedition: Number, expeditionStateId: Number) {
println("Expedition $expedition")
salix.findExpedition(
filter = """{"where":
{
@ -265,6 +265,19 @@ class DeliveryViewModel(val context: Context) : BaseViewModel(context) {
})
}
fun deleteExpedition(expeditionIds: ArrayList<Number>) {
salix.deleteExpedition(
hashMapOf("expeditionIds" to expeditionIds)
).enqueue(object : SalixCallback<Any>(context) {
override fun onSuccess(response: Response<Any>) {
super.onSuccess(response)
_responseDeleteExpedition.value = true
}
})
}
fun getExpeditionStateId(stateCode: String) {
salix.getExpeditionStateTypeId(
@ -445,22 +458,21 @@ class DeliveryViewModel(val context: Context) : BaseViewModel(context) {
}
fun isBoxPickingInPrintOut(expeditionFk: Long, barcode: String) {
getItemFromBarcodeUseCase.execute(barcode)
.enqueue(object : SalixCallback<Int?>(context) {
getItemFromBarcodeUseCase.execute(barcode).enqueue(object : SalixCallback<Int?>(context) {
override fun onSuccess(response: Response<Int?>) {
if (response.body() != null) {
isBoxPickingOk(
itemFk = response.body().toString().toLong(),
expeditionFk = expeditionFk
)
} else {
_responseCode.value = false
}
override fun onSuccess(response: Response<Int?>) {
if (response.body() != null) {
isBoxPickingOk(
itemFk = response.body().toString().toLong(),
expeditionFk = expeditionFk
)
} else {
_responseCode.value = false
}
})
}
})
}
fun isBoxPickingOk(

View File

@ -0,0 +1,148 @@
package es.verdnatura.presentation.view.feature.paletizador.fragment
import android.content.pm.ActivityInfo
import android.os.Bundle
import android.view.KeyEvent
import android.view.View
import android.view.inputmethod.EditorInfo
import androidx.recyclerview.widget.LinearLayoutManager
import es.verdnatura.R
import es.verdnatura.databinding.FragmentAutomaticAddExpeditionBinding
import es.verdnatura.presentation.base.BaseFragment
import es.verdnatura.presentation.common.OnAutomaticItemClickListener
import es.verdnatura.presentation.common.itemScanValue
import es.verdnatura.presentation.view.feature.delivery.model.ExpeditionSalix
import es.verdnatura.presentation.view.feature.delivery.viewmodels.DeliveryViewModel
import es.verdnatura.presentation.view.feature.ubicador.adapter.AutomaticAdapter
@Suppress("UNUSED_ANONYMOUS_PARAMETER")
class ExpeditionDeleteFragment(var title: String = "") :
BaseFragment<FragmentAutomaticAddExpeditionBinding, DeliveryViewModel>(
DeliveryViewModel::class
) {
private var adapter: AutomaticAdapter? = null
private var contador = 0
private var isScanned = false
private val listExpeditions: ArrayList<ExpeditionSalix> = arrayListOf()
private var expeditionStateTypeId: Number = 0
companion object {
fun newInstance(title: String) = ExpeditionDeleteFragment(title = title)
fun newInstance() = ExpeditionDeleteFragment()
}
override fun getLayoutId(): Int = R.layout.fragment_automatic_add_expedition
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
activity?.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT
}
override fun onDestroyView() {
super.onDestroyView()
activity?.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
}
override fun init() {
ma.hideBottomNavigation(View.GONE)
binding.mainToolbar.toolbarTitle.text = title
setEvents()
setViews()
setToolBar()
super.init()
}
private fun setToolBar() {
binding.mainToolbar.toolbarSubtitle.visibility = View.VISIBLE
}
private fun setSubtitle() {
binding.mainToolbar.toolbarSubtitle.text =
getString(R.string.countNumber, getString(R.string.label), listExpeditions.size)
}
private fun setViews() {
adapter =
AutomaticAdapter(listExpeditions.map { it.expeditionFk.toLong() } as ArrayList<Long>,
object : OnAutomaticItemClickListener {
override fun onAutomaticItemClickListener(position: Int) {
if (listExpeditions.size > position) {
listExpeditions.removeAt(position)
}
adapter!!.updateItems(listExpeditions.map { it.expeditionFk.toLong() } as ArrayList<Long>)
setSubtitle()
}
})
binding.itemsRecyclerview.adapter = adapter
binding.itemsRecyclerview.layoutManager =
LinearLayoutManager(requireContext(), LinearLayoutManager.VERTICAL, false)
}
private fun setEvents() {
binding.editMatricula.requestFocus()
binding.editMatricula.setOnEditorActionListener { v, actionId, event ->
if (actionId == EditorInfo.IME_ACTION_SEARCH || actionId == EditorInfo.IME_ACTION_DONE || actionId == 0 || actionId == 5) {
isScanned =
event != null && event.action == KeyEvent.ACTION_DOWN && event.keyCode == KeyEvent.KEYCODE_ENTER
if (binding.editMatricula.text.toString().isNotEmpty()) {
try {
val itemScaned = itemScanValue(
textScanned_filterDouble(binding.editMatricula.text.toString()),
arrayOf("expedition"),
"id"
).toString().toLong()
if (!(listExpeditions.any { it.expeditionFk == itemScaned })) {
listExpeditions.add(
ExpeditionSalix(
expeditionFk = itemScaned,
)
)
binding.itemsRecyclerview.scrollToPosition(0)
adapter!!.updateItems(listExpeditions.map { it.expeditionFk.toLong() } as ArrayList<Long>)
} else {
ma.messageWithSound(
message = "Caja ya escaneada",
isError = true,
isPlayed = true,
isToasted = true
)
}
} catch (ex: Exception) {
ma.messageWithSound(ex.message.toString(), isError = true, isPlayed = true)
}
}
binding.editMatricula.setText("")
ma.hideKeyboard(binding.editMatricula)
return@setOnEditorActionListener true
} else {
ma.messageWithSound(
getString(R.string.diferentAction), isError = true, isPlayed = true
)
}
return@setOnEditorActionListener false
}
binding.buttonFinalizar.setOnClickListener {
if (listExpeditions.isNotEmpty()) viewModel.deleteExpedition(listExpeditions.map { it.expeditionFk } as ArrayList<Number>) else ma.onMyBackPressed()
}
binding.mainToolbar.backButton.setOnClickListener {
ma.onMyBackPressed()
}
}
override fun observeViewModel() {
with(viewModel) {
responseDeleteExpedition.observe(viewLifecycleOwner) {
ma.onMyBackPressed()
}
}
}
}

View File

@ -5,11 +5,13 @@ import android.content.Context
import es.verdnatura.MobileApplication
import es.verdnatura.R
import es.verdnatura.domain.ConstAndValues.RESERVATIONMODE
import es.verdnatura.domain.ConstAndValues.SECTORISONRESERVATIONMODE
import es.verdnatura.domain.SalixCallback
import es.verdnatura.presentation.base.BaseViewModel
import es.verdnatura.presentation.view.feature.pasillero.model.CodeWorkerAction
import es.verdnatura.presentation.view.feature.pasillero.model.PasillerosItemVO
import es.verdnatura.presentation.view.feature.pasillero.model.WorkerActionSalix
import kotlinx.coroutines.runBlocking
import retrofit2.Response
class PasilleroViewModel(context: Context) : BaseViewModel(context) {
@ -21,6 +23,18 @@ class PasilleroViewModel(context: Context) : BaseViewModel(context) {
val userId = (contextApp as MobileApplication).userId
private val isOnReservationMode =
(contextApp as MobileApplication).dataStoreApp.readDataStoreKey<Boolean>(RESERVATIONMODE)
private val isOnReservationModeSector =
(contextApp as MobileApplication).dataStoreApp.readDataStoreKey<Boolean?>(
SECTORISONRESERVATIONMODE
)
private var existSectorOnReservationMode: Boolean = false
init {
runBlocking {
existSectorOnReservationMode =
(contextApp as MobileApplication).dataStoreApp.isPreferenceExists((SECTORISONRESERVATIONMODE))
}
}
fun inititializeDefaultData() {
workerActivityAdd(CodeWorkerAction.STORAGE)
@ -257,20 +271,21 @@ class PasilleroViewModel(context: Context) : BaseViewModel(context) {
R.string.titleCorridorsDescrip
)
)
//precontrol
_pasillerositem.add(
PasillerosItemVO(
R.drawable.ic_picker_ui, R.string.titlePickers, R.string.titlePickersDescrip
)
)
if (userId == 19591 || isOnReservationMode) {
//sacador
if (isOnReservationModeSector == true || (!existSectorOnReservationMode && isOnReservationMode)) {
_pasillerositem.add(
PasillerosItemVO(
R.drawable.ic_picker_ui, R.string.sacador_test, R.string.sacador_test
)
)
} else {
_pasillerositem.add(
PasillerosItemVO(
R.drawable.ic_picker_ui, R.string.titlePickers, R.string.titlePickersDescrip
)
)
}
if (userId == 19591) {
_pasillerositem.add(
@ -392,9 +407,8 @@ class PasilleroViewModel(context: Context) : BaseViewModel(context) {
fun inititializeDefaultPrevia() {
workerActivityAdd(CodeWorkerAction.PREVIOUS)
//lolass
if (isOnReservationMode) {
// if (userId == 19591 || userId == 18404 || userId == 9) {
if (isOnReservationModeSector == true || (!existSectorOnReservationMode && isOnReservationMode)) {
_pasillerositem.add(
PasillerosItemVO(
R.drawable.ic_previous_presacador,
@ -402,7 +416,6 @@ class PasilleroViewModel(context: Context) : BaseViewModel(context) {
R.string.titlePickerDescrip
)
)
//}
} else {
_pasillerositem.add(
PasillerosItemVO(
@ -466,7 +479,13 @@ class PasilleroViewModel(context: Context) : BaseViewModel(context) {
)
)
_pasillerositem.add(
PasillerosItemVO(
R.drawable.ic_delete_expedition,
R.string.deleteExpedition,
R.string.deleleExpeditionDescrip
)
)
_pasillerositem.add(

View File

@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?attr/colorPrimary">
<path
android:fillColor="@android:color/white"
android:pathData="M560,680L120,680L120,280L840,280L840,400Q826,400 811,400Q796,400 780,400Q775,400 770,400Q765,400 760,400L760,360L200,360L200,600L560,600Q560,605 560,610Q560,615 560,620Q560,636 560,651Q560,666 560,680ZM200,600L200,600L200,360L200,360L200,600Q200,600 200,600Q200,600 200,600ZM640,704L724,620L640,536L696,480L780,564L864,480L920,536L837,620L920,704L864,760L780,677L696,760L640,704Z"/>
</vector>