From 01aa6eaab673025a67d13b19f9e76896332bfdf8 Mon Sep 17 00:00:00 2001 From: Sergio De la torre Date: Thu, 12 Dec 2024 16:52:15 +0100 Subject: [PATCH] feat: refs #8188 orderPicking --- .../ubicador/fragment/UbicadorFragment6869.kt | 171 +++++++++++++----- .../ubicador/fragment/UbicadorFragmentNew.kt | 18 +- .../ubicador/fragment/UbicadorViewModel.kt | 135 ++++++++++++-- 3 files changed, 260 insertions(+), 64 deletions(-) diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/ubicador/fragment/UbicadorFragment6869.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/ubicador/fragment/UbicadorFragment6869.kt index 7992fc59..e6895a12 100644 --- a/app/src/main/java/es/verdnatura/presentation/view/feature/ubicador/fragment/UbicadorFragment6869.kt +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/ubicador/fragment/UbicadorFragment6869.kt @@ -2,10 +2,15 @@ package es.verdnatura.presentation.view.feature.ubicador.fragment import android.annotation.SuppressLint import android.content.Context +import android.graphics.Color +import android.graphics.drawable.ColorDrawable import android.graphics.drawable.Drawable import android.os.Bundle +import android.os.Handler +import android.os.Looper import android.text.InputType import android.text.TextWatcher +import android.util.Log.d import android.view.View import android.view.View.GONE import android.view.View.VISIBLE @@ -18,6 +23,7 @@ import es.verdnatura.databinding.FragmentUbicadorBinding import es.verdnatura.domain.ConstAndValues import es.verdnatura.domain.ConstAndValues.WAREHOUSEFK import es.verdnatura.domain.isShelving +import es.verdnatura.domain.isoToString import es.verdnatura.domain.notNull import es.verdnatura.domain.toInt import es.verdnatura.domain.toast @@ -44,8 +50,10 @@ import es.verdnatura.presentation.view.feature.ubicador.adapter.UbicadorAdapter6 import es.verdnatura.presentation.view.feature.ubicador.model.ItemShelving import es.verdnatura.presentation.view.feature.ubicador.model.ItemUbicador import org.json.JSONObject +import java.text.SimpleDateFormat import java.time.LocalDate import java.time.format.DateTimeFormatter +import java.util.Locale import kotlin.math.ceil @Suppress("UNUSED_ANONYMOUS_PARAMETER") @@ -118,7 +126,6 @@ class UbicadorFragment6869 : BaseFragment showAddItemNew( isEditItem = false, null @@ -233,7 +240,7 @@ class UbicadorFragment6869 : BaseFragment { - + listItems.clear() if (shelvingFk.isNotBlank()) { binding.editPrioridad.setText("") viewModel.itemShelvingGet( @@ -252,7 +259,8 @@ class UbicadorFragment6869 : BaseFragment event.getContentIfNotHandled().notNull { urlImage = it - println("urrrr $it") } } @@ -620,35 +627,99 @@ class UbicadorFragment6869 : BaseFragment event.getContentIfNotHandled().notNull { if (it.list.isNotEmpty()) { - val formattedList = it.list.map { item -> + + val oldList = it.list.filter { item -> + item.itemCreated!!.contains("old", ignoreCase = true) + }.map { item -> val itemFk = item.itemFk - val shelvingFk = item.shelvingFk - "$itemFk (${shelvingFk.uppercase()})" + val shelvingFk = item.code + val created = item.created.isoToString(returnOnlyDate = true) + val parkingCode = item.parkingFk + val formattedCreated = + SimpleDateFormat("dd-MM-yyyy", Locale.getDefault()).format( + SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()).parse( + created + )!! + ) + "$itemFk:${shelvingFk?.uppercase()}→${parkingCode}:(${formattedCreated}" + } + val newList = it.list.filter { item -> + item.itemCreated!!.contains("new", ignoreCase = true) + }.map { item -> + val itemFk = item.itemFk + val shelvingFk = item.code + val created = item.created.isoToString(returnOnlyDate = true) + val parkingCode = item.parkingFk + val formattedCreated = + SimpleDateFormat("dd-MM-yyyy", Locale.getDefault()).format( + SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()).parse( + created + )!! + ) + "$itemFk:${shelvingFk?.uppercase()}→${parkingCode}:(${formattedCreated})" } - val resultString = formattedList.joinToString(separator = "\n") - val finalOutput = "\n$resultString" - customDialogOlder.setTitle(getString(R.string.info)).setDescription( - getString( - R.string.itemOlderInfo, Action.PARKINEAR - ) + getString(R.string.listItems) + finalOutput - ).setOkButton( - getString(R.string.ok) - ) { - viewModel.setParking( - it.originalShelvingFk, it.originalParking - ) - customDialogOlder.dismiss() + val resultStringOld = oldList.joinToString(separator = "\n") + val resultStringNew = newList.joinToString(separator = "\n") - }.setKoButton(getString(R.string.cancel)) { - customDialogOlder.dismiss() - }.show() + var finalOutput = "" + if (oldList.isNotEmpty()) { + finalOutput = + getString(R.string.ubicationItemNewer, resultStringOld) + } + if (newList.isNotEmpty()) { + finalOutput += getString(R.string.ubicationItemOlder, resultStringNew) + } + customDialogOlder.setTitle(getString(R.string.info)) + .setDescription( + finalOutput + ).setOkButton( + getString(R.string.ok) + ) { + when (it.originalAction) { + Action.PARKINEAR -> viewModel.setParking( + it.originalShelvingFk, it.originalParking + ) + + Action.TRANSFERIR -> { + println("transfer item ${it.itemShelvingFk}") + println("transfer carro ${it.originalShelvingFk}") + viewModel.itemShelvingTransfer( + it.itemShelvingFk!!, + it.originalShelvingFk + ) + } + + null -> d("", "no action") + } + + + customDialogOlder.dismiss() + + }.setKoButton(getString(R.string.cancel)) { + customDialogOlder.dismiss() + }.setCancelable(true) + customDialogOlder.window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT)) } + Handler(Looper.getMainLooper()).postDelayed({ + customDialogOlder.show() + }, 1000) } } @@ -794,7 +865,7 @@ class UbicadorFragment6869 : BaseFragment showAddItemNew( - isEditItem = false, null - ) + iconAdd.drawable -> { + showAddItemNew( + isEditItem = false, null + ) + } iconAddMultiple.drawable -> { - ma.onPasillerosItemClickListener( PasillerosItemVO( title = R.string.addItemMultipleShelving, @@ -237,7 +238,7 @@ class UbicadorFragmentNew : BaseFragment { - + listItems.clear() if (shelvingFk.isNotBlank()) { binding.editPrioridad.setText("") viewModel.itemShelvingListNew( @@ -256,7 +257,8 @@ class UbicadorFragmentNew : BaseFragment = _buyUltimateResponse val loadBuyUltimateResponse: LiveData> = _buyUltimateResponse.map { Event(it) } + private val _getParkingResponse by lazy { MutableLiveData() } + val getParkingResponse: LiveData = _getParkingResponse + val loadGetParkingResponse: LiveData> = _getParkingResponse.map { Event(it) } + fun itemShelvingListNew( shelvingFk: String ) { @@ -243,23 +249,36 @@ class UbicadorViewModel(val context: Context) : BaseViewModel(context) { fun hasItemOlder( shelvingFk: String, - parking: String, + parking: String?, + itemFk: Int?, + action: Action?, + itemShelvingFk: Number? = null - ) { - salix.getListItemNewer(shelvingFk, parking) + ) { + salix.getListItemNewerNew(shelvingFk, parking, itemFk) + //salix.getListItemNewer(shelvingFk, parking) .enqueue(object : SalixCallback>(context) { override fun onSuccess(response: Response>) { if (response.body()!!.isEmpty()) { - setParking(shelvingFk, parking) + when (action) { + Action.PARKINEAR -> setParking(shelvingFk, parking!!) + Action.TRANSFERIR -> { + itemShelvingTransfer(itemShelvingFk!!, shelvingFk) + } + + null -> setParking(shelvingFk, parking!!) + } } else { _shelvingListItemNewer.value = response.body()?.let { ItemShelvingNewerList( it, - originalParking = parking, - originalShelvingFk = shelvingFk + originalShelvingFk = shelvingFk, + originalParking = parking!!, + originalItem = itemFk, + originalAction = action ) } } @@ -269,6 +288,98 @@ class UbicadorViewModel(val context: Context) : BaseViewModel(context) { }) } + fun getItemsByReviewOrder( + shelving: String, + parking: String?, + itemFk: Number?, + action: Action?, + itemShelvingFk: Number? = null, + shelvingFkFrom: String? = null + + ) { + salix.getItemsByReviewOrder( + if (action == Action.TRANSFERIR) shelvingFkFrom!! else shelving, + parking, + itemFk + ) + .enqueue(object : SalixCallback>(context) { + + override fun onSuccess(response: Response>) { + if (response.body()!!.isEmpty()) { + when (action) { + Action.PARKINEAR -> setParking(shelving, parking!!) + Action.TRANSFERIR -> { + + itemShelvingTransfer(itemShelvingFk!!, shelving!!) + } + + null -> d("", "No action") + } + } else { + _shelvingListItemNewer.value = + response.body()?.let { + ItemShelvingNewerList( + it, + originalShelvingFk = shelving, + originalParking = parking!!, + originalItem = itemFk, + originalAction = action, + itemShelvingFk = itemShelvingFk + ) + } + } + + } + + }) + } + + fun getParkingToTransfer( + shelvingFkTo: String, + itemShelvingFk: Number, + itemFk: Number, + shelvingFkFrom: String? = null + + ) { + salix.shelvingGet( + filter = """{ + "fields": ["priority", "parkingFk", "code", "id"], + "include": [ + { + "relation": "parking", + "scope": { + "fields": ["code"] + } + } + ], + "where": { + "code": "$shelvingFkTo" + } + }""" + ).enqueue(object : SalixCallback(context) { + override fun onSuccess(response: Response) { + val itemShelving = response.body() + if (itemShelving?.parking == null) { + itemShelvingTransfer(itemShelvingFk, shelvingFkTo) + } else { + getItemsByReviewOrder( + shelving = shelvingFkTo, + itemFk = itemFk, + parking = itemShelving.parking.code, + action = Action.TRANSFERIR, + itemShelvingFk = itemShelvingFk, + shelvingFkFrom = shelvingFkFrom!! + ) + } + } + + override fun onError(t: Throwable) { + _getParkingResponse.value = false + super.onError(t) + } + }) + } + fun itemShelvingMerge( vShelf: Int, shelvingFk: String @@ -287,7 +398,7 @@ class UbicadorViewModel(val context: Context) : BaseViewModel(context) { } fun itemShelvingDeleteChecked( - vShelvingFk: String + vShelvingFk: Number ) { salix.itemShelvingsUpdate( @@ -395,9 +506,10 @@ class UbicadorViewModel(val context: Context) : BaseViewModel(context) { shelvingFkIn: String, shelvingFkOut: String ) { - salix.itemShelvingsUpdate( - where = JsonObject().apply { addProperty("shelvingFk", shelvingFkIn) }, + where = JsonObject().apply { + addProperty("shelvingFk", shelvingFkIn) + }, hashMapOf("shelvingFk" to shelvingFkOut) ).enqueue(object : SalixCallback(context) { @@ -435,6 +547,7 @@ class UbicadorViewModel(val context: Context) : BaseViewModel(context) { override fun onSuccess(response: Response) { val myItemCode = response.body().let { it as ItemUbicador } + shelvingChangeSalixNew( shelvingFkIn = shelvingFkIn, myItemCode.id.toLong() @@ -445,10 +558,10 @@ class UbicadorViewModel(val context: Context) : BaseViewModel(context) { } fun itemShelvingTransfer( - itemFk: Int, shelvingFk: String + itemShelvingFk: Number, shelvingFk: String ) { - salix.itemShelvingTransfer(arrayListOf(itemFk, shelvingFk).formatWithQuotes()) + salix.itemShelvingTransfer(arrayListOf(itemShelvingFk, shelvingFk).formatWithQuotes()) .enqueue(object : SalixCallback(context) { override fun onSuccess(response: Response) { _responseUbicator.value = true