diff --git a/.idea/compiler.xml b/.idea/compiler.xml index b589d56e..b86273d9 100644 --- a/.idea/compiler.xml +++ b/.idea/compiler.xml @@ -1,6 +1,6 @@ - + \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml index 418e80de..8b495d66 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -4,7 +4,7 @@ - + diff --git a/.idea/workspace.xml b/.idea/workspace.xml index d32fcd14..24a6a185 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -60,6 +60,11 @@ @style/AppTheme + + + @style/AppTheme + + @style/AppTheme @@ -406,6 +411,16 @@ @style/AppTheme + + + @style/AppTheme + + + + + @style/AppTheme + + @style/AppTheme @@ -478,40 +493,12 @@ - - - - - - - - - - - - - - - - - - - - - - - - - + + + + - - - - - - - - + + + + + + + + @@ -1405,8 +1405,6 @@ diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 00000000..de9e44ca --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,31 @@ +# Version XX.XX - XXXX-XX-XX + +### Added 🆕 + +- feat: refs #5443 collectionFragmentChecker by:Sergio De la torre +- feat: refs#6845 userInterface by:Sergio De la torre +- feat: refs #6845 userIterface by:Sergio De la torre +- feat: refs #6861 reservas by:Sergio De la torre +- feat: refs #6869 itemShelvings (warehouse/dev_6078, warehouse/dev, dev_6078) by:Sergio De la + torre +- feat: refs #7266 printItem by:Sergio De la torre +- feat: refs #7922 scanOrder by:Sergio De la torre +- feat: refs #8020 controlVehiculos by:Sergio De la torre +- feat: refs #8022 kotlin versionCatalog by:Sergio De la torre +- feat: refs #8082 ticketPickup by:Sergio De la torre +- feat: refs #8099 addSalarySupplement by:Sergio De la torre +- feat: refs #8150 moveExpedition by:Sergio De la torre +- feat: refs #8150 moveExpeditions by:Sergio De la torre +- feat: refs #8175 crashlyticsAndUpdate by:Sergio De la torre +- feat: refs #8175 refactorCode by:Sergio De la torre +- feat: refs #8176 refactorSearchDialog by:Sergio De la torre +- feat: refs #8182 zoneClickable by:Sergio De la torre +- feat: refs#8213 reservas by:Sergio De la torre + +### Changed 📦 + +- feat: refs #8175 refactorCode by:Sergio De la torre +- feat: refs #8176 refactorSearchDialog by:Sergio De la torre + +### Fixed 🛠️ + diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 97becf18..19d7372c 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -15,8 +15,8 @@ android { applicationId = "es.verdnatura" minSdk = 26 targetSdk = 33 // se deja con target si no Play Protect la bloquea - versionCode = 358 - versionName = "24.46" + versionCode = 374 + versionName = "24.51" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" } @@ -30,6 +30,10 @@ android { getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro" ) } + getByName("debug") { + isMinifyEnabled = false + + } } //package de la app general = "package_name": "es.verdnatura" //package de la app beta = "package_name": "es.verdnatura.sfusion" @@ -75,8 +79,8 @@ android { } compileOptions { - sourceCompatibility = JavaVersion.VERSION_17 - targetCompatibility = JavaVersion.VERSION_17 + sourceCompatibility = JavaVersion.VERSION_21 + targetCompatibility = JavaVersion.VERSION_21 } /* composeOptions { kotlinCompilerExtensionVersion = "1.5.15" @@ -84,9 +88,9 @@ android { /* kotlin { jvmToolchain(17) } - kotlinOptions { - jvmTarget = "17" - }*/ + kotlinOptions { + jvmTarget = "17" + }*/ dependencies { implementation(fileTree(mapOf("dir" to "libs", "include" to listOf("*.jar")))) diff --git a/app/general/release/baselineProfiles/0/app-general-release.dm b/app/general/release/baselineProfiles/0/app-general-release.dm new file mode 100644 index 00000000..a622bdba Binary files /dev/null and b/app/general/release/baselineProfiles/0/app-general-release.dm differ diff --git a/app/src/main/java/es/verdnatura/db/database.kt b/app/src/main/java/es/verdnatura/db/database.kt index 54fc4f0b..a67b2cb1 100644 --- a/app/src/main/java/es/verdnatura/db/database.kt +++ b/app/src/main/java/es/verdnatura/db/database.kt @@ -113,8 +113,8 @@ interface RoutesDao { @Insert(onConflict = OnConflictStrategy.REPLACE) suspend fun insertLoaded(routeLoaded: RouteLoaded) - - @Query("DELETE FROM routes WHERE created != :today") + + @Query("DELETE FROM routes WHERE dated != :today") suspend fun deleteLoaded(today: String) } diff --git a/app/src/main/java/es/verdnatura/domain/ConstAndValues.kt b/app/src/main/java/es/verdnatura/domain/ConstAndValues.kt index 7f38a4be..fb90d19d 100644 --- a/app/src/main/java/es/verdnatura/domain/ConstAndValues.kt +++ b/app/src/main/java/es/verdnatura/domain/ConstAndValues.kt @@ -24,6 +24,7 @@ object ConstAndValues { const val USER = "user" const val PASSWORD = "password" const val TOKEN = "token" + const val TOKENMULTIMEDIA = "tokenMultimedia" const val TTL = "ttl" const val TOKENCREATED = "tokenCreated" const val SECTORDESCRIP = "sectordescrip" @@ -44,6 +45,7 @@ object ConstAndValues { const val ENTRYOBSERVATIONORIGINAL = "ENTRYOBSERVATIONORIGINAL" const val ITEMPACKING = "itemPackingType" const val ITEMPACKINGFK = "itemPackingTypeFk" + const val ITEMPACKINGTYPEFILTER = "itemPackingTypeFilter" const val BUYER = "buyernickname" const val BUYERID = "buyerid" const val WAGON = "wagon" diff --git a/app/src/main/java/es/verdnatura/domain/SalixService.kt b/app/src/main/java/es/verdnatura/domain/SalixService.kt index dda92e6d..8a11c6bc 100644 --- a/app/src/main/java/es/verdnatura/domain/SalixService.kt +++ b/app/src/main/java/es/verdnatura/domain/SalixService.kt @@ -17,6 +17,7 @@ import es.verdnatura.presentation.view.feature.articulo.model.ItemDetails import es.verdnatura.presentation.view.feature.articulo.model.ItemPackingType import es.verdnatura.presentation.view.feature.articulo.model.ItemProposal import es.verdnatura.presentation.view.feature.buscaritem.model.ItemLocationVO +import es.verdnatura.presentation.view.feature.calidad.model.Buyer import es.verdnatura.presentation.view.feature.calidad.model.BuyerVO import es.verdnatura.presentation.view.feature.claim.fragment.reubication.model.Reubication import es.verdnatura.presentation.view.feature.collection.SalixSaleQuantity @@ -44,6 +45,7 @@ import es.verdnatura.presentation.view.feature.login.model.AccessConfigSalix import es.verdnatura.presentation.view.feature.login.model.DataUserSalix import es.verdnatura.presentation.view.feature.login.model.LoginDevice import es.verdnatura.presentation.view.feature.login.model.LoginSalixVO +import es.verdnatura.presentation.view.feature.login.model.MultimediaTokenResponse import es.verdnatura.presentation.view.feature.login.model.NameWorker import es.verdnatura.presentation.view.feature.login.model.OperatorAdd import es.verdnatura.presentation.view.feature.login.model.OperatorSalix @@ -74,6 +76,7 @@ import es.verdnatura.presentation.view.feature.sacador.model.TicketStateSalix import es.verdnatura.presentation.view.feature.ubicador.model.ItemBuy import es.verdnatura.presentation.view.feature.ubicador.model.ItemShelvingNewer import es.verdnatura.presentation.view.feature.ubicador.model.ItemUbicador +import es.verdnatura.presentation.view.feature.ubicador.model.ShelvingItem import es.verdnatura.presentation.view.feature.workermistake.model.DepartmentMistake import es.verdnatura.presentation.view.feature.workermistake.model.ExpeditionMistakeSalix import es.verdnatura.presentation.view.feature.workermistake.model.MistakeType @@ -144,8 +147,8 @@ interface SalixService { @Query("filter") filter: String ): Call> - @POST("Applications/buy_getUltimate/execute-func") - fun buyUltimate( + @POST("Applications/buy_getLastWithoutInventory/execute-func") + fun buyGetLastWithoutInventory( @Query("params") params: Any, @Query("schema") schema: String = "vn" ): Call @@ -154,6 +157,11 @@ interface SalixService { @Query("filter") filter: String ): Call> + @GET("itemTypes") + fun getBuyersByItemPackingType( + @Query("filter") filter: String + ): Call> + @GET("Tickets/myLastModified") fun myLastModified( @Query("filter") filter: String @@ -527,6 +535,20 @@ interface SalixService { @Query("shelvingFk") shelvingFkIn: Any, @Query("parking") parking: Any? = null ): Call> + @GET("ItemShelvings/getListItemNewer") + fun getListItemNewerNew( + @Query("shelvingFk") shelvingFkIn: Any, + @Query("parking") parking: Any? = null, + @Query("itemFk") itemFk: Any? = null + ): Call> + + @GET("ItemShelvings/getItemsByReviewOrder") + fun getItemsByReviewOrder( + @Query("shelving") shelvingFkIn: Any, + @Query("parking") parking: Any? = null, + @Query("itemFk") itemFk: Any? = null + ): Call> + @POST("Applications/sectorCollectionSaleGroup_add/execute-proc") fun sectorCollectionSaleGroupAdd( @Query("params") params: Any? = null, @Query("schema") schema: String = "vn" @@ -706,10 +728,20 @@ interface SalixService { @Query("params") params: Any, ): Call> - @GET("Shelvings") - fun itemShelvingGet( + @GET("Shelvings/findOne") + fun shelvingGet( @Query("filter") filter: Any, - ): Call> + ): Call + + @GET("ImageConfigs/findOne") + fun getImageConfig( + @Query("filter") filter: String = """{"fields":["url"]}""" + ): Call + + @GET("Shelvings/findOne") + fun shelvingGetFromCode( + @Query("filter") filter: Any, + ): Call @POST("Applications/expedition_scan/execute-proc") fun expeditionScan( @@ -992,6 +1024,10 @@ interface SalixService { fun getAccessTokenConfigs( ): Call> + @GET("VnUsers/ShareToken") + fun getMultimediaToken( + ): Call + @POST("vnusers/renewToken") fun renewToken( ): Call @@ -1087,6 +1123,11 @@ interface SalixService { @Query("filter") filter: String ): Call + @GET("States/findOne") + fun getStateId( + @Query("filter") filter: String + ): Call + @POST("WorkerMistakes") fun workerMistakesAdd( @Body workerMistake: WorkerMistakeSalix diff --git a/app/src/main/java/es/verdnatura/domain/userCases/UserCases.kt b/app/src/main/java/es/verdnatura/domain/userCases/UserCases.kt index 8215f29c..ef29c45a 100644 --- a/app/src/main/java/es/verdnatura/domain/userCases/UserCases.kt +++ b/app/src/main/java/es/verdnatura/domain/userCases/UserCases.kt @@ -15,6 +15,6 @@ class GetItemPrintItemUseCase(private val salixService: SalixService) { } fun executeBuyUltimate(params: Any): Call { - return salixService.buyUltimate(params) + return salixService.buyGetLastWithoutInventory(params) } } diff --git a/app/src/main/java/es/verdnatura/presentation/common/PrinterDialogManager.kt b/app/src/main/java/es/verdnatura/presentation/common/PrinterDialogManager.kt index 03049540..84b6f52b 100644 --- a/app/src/main/java/es/verdnatura/presentation/common/PrinterDialogManager.kt +++ b/app/src/main/java/es/verdnatura/presentation/common/PrinterDialogManager.kt @@ -5,13 +5,12 @@ import android.content.Context import android.text.InputType import android.view.View import es.verdnatura.R +import es.verdnatura.domain.toast import es.verdnatura.presentation.view.component.CustomDialogList class PrinterDialogManager(private val context: Context) { fun showPrintDialog( - item: Long, - itemName: String, - onPrintClick: (Long, String, Int?, Int) -> Unit + item: Long, itemName: String, onPrintClick: (Long, String, Int?, Int) -> Unit ) { val customDialogList = CustomDialogList(context) customDialogList.getEditText().setRawInputType(InputType.TYPE_CLASS_NUMBER) @@ -20,17 +19,15 @@ class PrinterDialogManager(private val context: Context) { customDialogList.setTitle(context.getString(R.string.itemName, item, itemName)) .setOkButton(context.getString(R.string.printQr)) { handlePrintClick(item, customDialogList, onPrintClick, "qr") - } - .setOkTwoButton(context.getString(R.string.printBarcode)) { - handlePrintClick(item, customDialogList, onPrintClick, "barcode") - - } - .setKoButton(context.getString(R.string.cancel)) { customDialogList.dismiss() - } - .setHintValueThree(context.getString(R.string.labelNumber)) - .setHintValue(context.getString(R.string.optionalPacking)) - .setTextThree(View.VISIBLE) + }.setOkTwoButton(context.getString(R.string.printBarcode)) { + handlePrintClick(item, customDialogList, onPrintClick, "barcode") + customDialogList.dismiss() + + }.setKoButton(context.getString(R.string.cancel)) { + customDialogList.dismiss() + }.setHintValueThree(context.getString(R.string.labelNumber)) + .setHintValue(context.getString(R.string.optionalPacking)).setTextThree(View.VISIBLE) .show() customDialogList.getFocusThree() } @@ -41,16 +38,21 @@ class PrinterDialogManager(private val context: Context) { onPrintClick: (Long, String, Int?, Int) -> Unit, labelType: String ) { - onPrintClick( - item, - labelType, - if (customDialogList.getValue().isEmpty()) null else customDialogList.getValue() - .toInt(), - if (customDialogList.getValueOptional() - .isEmpty() - ) 1 else customDialogList.getValueOptional().toInt() - ) - customDialogList.dismiss() + try { + onPrintClick( + item, + labelType, + if (customDialogList.getValue().isEmpty()) null else customDialogList.getValue() + .toInt(), + if (customDialogList.getValueOptional() + .isEmpty() + ) 1 else customDialogList.getValueOptional().toInt() + ) + customDialogList.dismiss() + } catch (ex: Exception) { + context.getString(R.string.errorInput).toast(context) + } + } } diff --git a/app/src/main/java/es/verdnatura/presentation/common/UICallbacks.kt b/app/src/main/java/es/verdnatura/presentation/common/UICallbacks.kt index facac1e2..ef715c22 100644 --- a/app/src/main/java/es/verdnatura/presentation/common/UICallbacks.kt +++ b/app/src/main/java/es/verdnatura/presentation/common/UICallbacks.kt @@ -31,6 +31,7 @@ import es.verdnatura.presentation.view.feature.sacador.model.CollectionVO import es.verdnatura.presentation.view.feature.sacador.model.Sale import es.verdnatura.presentation.view.feature.sacador.model.SaleVO import es.verdnatura.presentation.view.feature.smarttag.model.SmartTag +import es.verdnatura.presentation.view.feature.ubicador.model.ItemShelving import es.verdnatura.presentation.view.feature.ubicador.model.ItemUbicador import es.verdnatura.presentation.view.feature.ubicador.model.ItemUbicadorVO import es.verdnatura.presentation.view.feature.workermistake.model.WorkerFromMistake @@ -167,6 +168,10 @@ interface OnVisibleClickListenerNew { fun onVisibleClickListener(item: ItemUbicador) } +interface OnVisibleClickListener6869 { + fun onVisibleClickListener(item: ItemShelving) +} + interface OnVisibleInventoryClickListener { fun onVisibleInventoryClickListener(item: ItemInventoryParking) } @@ -179,6 +184,10 @@ interface OnMoreClickListenerNew { fun onMoreClickListener(item: ItemUbicador) } +interface OnMoreClickListener6869 { + fun onMoreClickListener(item: ItemShelving) +} + interface OnTruckClickListener { fun onTruckClickListener(item: ItemExpeditionTruckVO, entryPoint: String) } diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/ajustes/fragment/AjustesFragment.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/ajustes/fragment/AjustesFragment.kt index 5787f391..37ae9e4f 100644 --- a/app/src/main/java/es/verdnatura/presentation/view/feature/ajustes/fragment/AjustesFragment.kt +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/ajustes/fragment/AjustesFragment.kt @@ -121,7 +121,8 @@ class AjustesFragment : binding.searchableRecyclerView.setAdapter(adapter, listNames) binding.searchableRecyclerView.visibility = View.VISIBLE - binding.searchableRecyclerView.setSearchHintWithoutFocus(getString(R.string.sectorSearch)) + binding.searchableRecyclerView.setSearchHint(getString(R.string.sectorSearch)) + ma.hideKeyboard(binding.searchableRecyclerView) } private fun setToolBar() { diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/articulo/fragment/ItemCardFragment.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/articulo/fragment/ItemCardFragment.kt index b3b03808..7509fb19 100644 --- a/app/src/main/java/es/verdnatura/presentation/view/feature/articulo/fragment/ItemCardFragment.kt +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/articulo/fragment/ItemCardFragment.kt @@ -3,6 +3,7 @@ package es.verdnatura.presentation.view.feature.articulo.fragment import android.content.Intent import android.graphics.drawable.Drawable import android.text.InputType +import android.view.MotionEvent import android.view.View import android.view.View.GONE import android.view.inputmethod.EditorInfo @@ -12,6 +13,7 @@ import com.google.gson.Gson import es.verdnatura.R import es.verdnatura.databinding.FragmentItemCardBinding import es.verdnatura.domain.ConstAndValues.PRINTERFK +import es.verdnatura.domain.ConstAndValues.TOKENMULTIMEDIA import es.verdnatura.domain.ConstAndValues.WAREHOUSEFK import es.verdnatura.domain.notNull import es.verdnatura.domain.toast @@ -37,6 +39,7 @@ 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.ItemPackingType import es.verdnatura.presentation.view.feature.pasillero.model.PasillerosItemVO +import org.json.JSONObject class ItemCardFragment( var itemFk: String = "" @@ -56,7 +59,7 @@ class ItemCardFragment( private var quantityToDiscard = 0 private var itemInfoG: ItemCardVO? = null private var positionToReturnY = 0 - private var originalScan: String? = null + private var originalScan: Long? = null private var buyToPrint: Long? = null companion object { @@ -108,12 +111,12 @@ class ItemCardFragment( iconHistory.tooltipText = getTooltip(R.drawable.ic_history_black_24dp) iconSalix.tooltipText = getTooltip(R.drawable.ic_logo_salix) // Tarea 7266 - // iconPrint.tooltipText = getTooltip(R.drawable.ic_print_black_24dp) + iconPrint.tooltipText = getTooltip(R.drawable.ic_print_black_24dp) listIcons.add(iconSalix) listIcons.add(iconReload) listIcons.add(iconHistory) - // listIcons.add(iconPrint) + listIcons.add(iconPrint) binding.mainToolbar.toolbarIcons.adapter = ToolBarAdapterTooltip(listIcons, object : OnOptionsSelectedListener { @@ -128,7 +131,7 @@ class ItemCardFragment( val printerDialogManager = PrinterDialogManager(requireContext()) printerDialogManager.showPrintDialog( - itemInfoG!!.id.toLong(), + buyToPrint ?: itemInfoG!!.id.toLong(), itemInfoG?.longName ?: "" ) { id, labelType, copies, packing -> printItem(id, labelType, copies, packing) @@ -183,7 +186,6 @@ class ItemCardFragment( private fun printItem(id: Long, labelType: String, packing: Int?, copies: Int?) { try { - viewModel.printItem( reportName = "LabelBuy", printerFk = mobileApplication.dataStoreApp.readDataStoreKey( @@ -191,7 +193,12 @@ class ItemCardFragment( ), userFk = mobileApplication.userId!!, priority = "normal", - params = """{'copies':$copies,'id':$id,'labelType':'$labelType','packing':$packing}""" + params = JSONObject().apply { + put("copies", copies) + put("id", id) + put("labelType", labelType) + put("packing", packing) + }.toString().replace("\"", "\\\"") ) } catch (ex: Exception) { ma.messageWithSound(message = ex.message.toString(), isError = true, isPlayed = true) @@ -200,8 +207,39 @@ class ItemCardFragment( hideKeyboard() } - private fun setEvents() { + private fun openWebViewer(param: String) { + //variableWeb = if (itemScan is Number) "var-itemFk=$param" else "var-shelvingCode=$param" + ma.onPasillerosItemClickListener( + PasillerosItemVO( + title = R.string.titleWebViewer, + ), + + Gson().toJson( + mutableMapOf( + "entryPoint" to param, + "web" to "https://grafana.verdnatura.es/d/ce4b8ymvex4owa?var-itemFk=$param&var-vnToken=${ + mobileApplication.dataStoreApp.readDataStoreKey( + TOKENMULTIMEDIA + ) + }" + ) + ), param = "" + ) + + } + + private fun setEvents() { + binding.editItemFk.setOnTouchListener { v, event -> + if (event.action == MotionEvent.ACTION_UP) { + val drawableRight = binding.editItemFk.compoundDrawables[2] + if (drawableRight != null && event.x >= v.width - drawableRight.bounds.width()) { + openWebViewer(itemInfoG?.id?.toString() ?: "") + return@setOnTouchListener true + } + } + false + } binding.editItemFk.requestFocus() binding.editItemFk.setOnEditorActionListener { _, actionId, _ -> if (actionId == EditorInfo.IME_ACTION_SEARCH || actionId == EditorInfo.IME_ACTION_DONE || actionId == 0 || actionId == 5) { @@ -209,9 +247,9 @@ class ItemCardFragment( try { originalScan = itemScanValue( binding.editItemFk.text.toString(), arrayOf("buy"), "more" - ).toString() + ).toString().toLong() getItemCard( - originalScan!! + originalScan!!.toString() ) } catch (ex: Exception) { ma.messageWithSound(ex.message.toString(), isError = true, isPlayed = true) @@ -259,19 +297,17 @@ class ItemCardFragment( binding.itemcardLayout.visibility = View.VISIBLE setItemCard(it) binding.mainToolbar.toolbarIcons.visibility = View.VISIBLE - /* Tarea 7266 + // Tarea 7266 if (originalScan == null || it.id == originalScan!!.toInt()) { - viewModel.buyUltimate( - itemFk = it.id, - warehouseFk = mobileApplication.dataStoreApp.readDataStoreKey( - WAREHOUSEFK - ), - dated = LocalDate.now() - .format(DateTimeFormatter.ofPattern("yyyy-dd-MM")) - ) - } else { - buyToPrint = originalScan!!.toLong() - }*/ + viewModel.buyGetLastWithoutInventory( + itemFk = it.id, + warehouseFk = mobileApplication.dataStoreApp.readDataStoreKey( + WAREHOUSEFK + ) + ) + } else { + buyToPrint = originalScan!!.toLong() + } } else { binding.itemcardLayout.visibility = GONE binding.mainToolbar.toolbarTitle.text = getString(R.string.itemCard) diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/articulo/fragment/ItemCardViewModel.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/articulo/fragment/ItemCardViewModel.kt index 630199d4..55789b6e 100644 --- a/app/src/main/java/es/verdnatura/presentation/view/feature/articulo/fragment/ItemCardViewModel.kt +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/articulo/fragment/ItemCardViewModel.kt @@ -239,10 +239,15 @@ class ItemCardViewModel(var context: Context) : BaseViewModel(context) { }) } - fun buyUltimate( - itemFk: Int, warehouseFk: Int, dated: String + fun buyGetLastWithoutInventory( + itemFk: Int, warehouseFk: Int, ) { - salix.buyUltimate(params = arrayListOf(itemFk, warehouseFk, dated).formatWithQuotes()) + salix.buyGetLastWithoutInventory( + params = arrayListOf( + itemFk, + warehouseFk + ).formatWithQuotes() + ) .enqueue(object : SalixCallback(context) { override fun onSuccess(response: Response) { _buyUltimateResponse.value = response.body() diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/calidad/model/BuyerVO.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/calidad/model/BuyerVO.kt index 74a6e87e..4de382e7 100644 --- a/app/src/main/java/es/verdnatura/presentation/view/feature/calidad/model/BuyerVO.kt +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/calidad/model/BuyerVO.kt @@ -27,3 +27,21 @@ class ItemBuyerVO( class ItemBuyerListVO( var list: List = listOf() ) + +data class BuyerList( + var list: List = listOf() +) + +data class Buyer( + val itemPackingTypeFk: String, + val worker: Worker +) + +data class Worker( + val user: User +) + +data class User( + val id: Int, + val nickname: String +) \ No newline at end of file diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/collection/adapter/SaleAdapterNew.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/collection/adapter/SaleAdapterNew.kt index 61f19df0..bf0f30e6 100644 --- a/app/src/main/java/es/verdnatura/presentation/view/feature/collection/adapter/SaleAdapterNew.kt +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/collection/adapter/SaleAdapterNew.kt @@ -311,9 +311,22 @@ class SaleAdapterNew( if (sale.isPicked == 1) { if (type == PREPARED) { contentLayout.setBackgroundColor( - getColor( - context!!, R.color.verdnatura_orange_salix - ) + + if (sale.saleGroupFk == null) { + getColor( + context!!, R.color.verdnatura_orange_salix + ) + } else { + if (sale.stateCode != null && sale.stateCode == "PREPARED") { + getColor( + context!!, R.color.verdnatura_orange_salix + ) + } else { + getColor( + context!!, R.color.verdnatura_dark_sky_blue + ) + } + } ) } else { contentLayout.setBackgroundColor( diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/collection/fragment/CollectionCheckerViewModel.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/collection/fragment/CollectionCheckerViewModel.kt index 77ad2c28..6ffa715b 100644 --- a/app/src/main/java/es/verdnatura/presentation/view/feature/collection/fragment/CollectionCheckerViewModel.kt +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/collection/fragment/CollectionCheckerViewModel.kt @@ -53,6 +53,10 @@ class CollectionCheckerViewModel(val context: Context) : BaseViewModel(context) val responseTicketState: LiveData = _responseTicketState val loadTicketState: LiveData> = _responseTicketState.map { Event(it) } + private val _responseTicketSetState by lazy { MutableLiveData() } + val responseTicketSetState: LiveData = _responseTicketSetState + val loadTicketSetState: LiveData> = _responseTicketSetState.map { Event(it) } + private val _responseTicketIsPickup by lazy { MutableLiveData() } val responseTicketIsPickup: LiveData = _responseTicketIsPickup val loadTicketIsPickup: LiveData> = _responseTicketIsPickup.map { Event(it) } @@ -70,9 +74,9 @@ class CollectionCheckerViewModel(val context: Context) : BaseViewModel(context) val responseNew: LiveData = _responseNew val loadAddNew: LiveData> = _responseNew.map { Event(it) } - private val _responseIncQuantity by lazy { MutableLiveData() } - val responseIncQuantity: LiveData = _responseIncQuantity - val loadIncQuantity: LiveData> = _responseIncQuantity.map { Event(it) } + private val _responseIncQuantity by lazy { MutableLiveData() } + val responseIncQuantity: LiveData = _responseIncQuantity + val loadIncQuantity: LiveData> = _responseIncQuantity.map { Event(it) } private val _responseParking by lazy { MutableLiveData() } val responseParking: LiveData = _responseParking @@ -217,7 +221,7 @@ class CollectionCheckerViewModel(val context: Context) : BaseViewModel(context) salix.ticketStateTodaySetState(arrayListOf(ticketFk, state).formatWithQuotes()) .enqueue(object : SalixCallback(context) { override fun onSuccess(response: Response) { - _responseTicketState.value = TicketState() + _responseTicketSetState.value = TicketState(code = state, ticketFk = ticketFk) super.onSuccess(response) } }) @@ -232,7 +236,7 @@ class CollectionCheckerViewModel(val context: Context) : BaseViewModel(context) override fun onSuccess(response: Response) { super.onSuccess(response) - _responseIncQuantity.value = true + _responseIncQuantity.value = saleFk } }) } diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/collection/fragment/CollectionFragmentChecker.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/collection/fragment/CollectionFragmentChecker.kt index 587e8b19..6549f434 100644 --- a/app/src/main/java/es/verdnatura/presentation/view/feature/collection/fragment/CollectionFragmentChecker.kt +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/collection/fragment/CollectionFragmentChecker.kt @@ -107,6 +107,7 @@ class CollectionFragmentChecker( override fun onResume() { super.onResume() scanRequest() + viewModel.setPausedState(false) } override fun init() { @@ -172,19 +173,18 @@ class CollectionFragmentChecker( binding.mainToolbar.toolbarIcons.adapter = ToolBarAdapterTooltip(listIcons, object : OnOptionsSelectedListener { override fun onOptionsItemSelected(item: Drawable) { - if (collection.tickets.isNotEmpty()) - when (item) { - iconViewCollection.drawable -> getCollection() - iconPrint.drawable -> print() - iconAdd.drawable -> addItem() - iconWorker.drawable -> showUser() - iconUpdate.drawable -> updateScreen() - iconParking.drawable -> pasillerosItemClickListener?.onPasillerosItemClickListener( - PasillerosItemVO( - title = R.string.Parking - ), "" - ) - } + if (collection.tickets.isNotEmpty()) when (item) { + iconViewCollection.drawable -> getCollection() + iconPrint.drawable -> print() + iconAdd.drawable -> addItem() + iconWorker.drawable -> showUser() + iconUpdate.drawable -> updateScreen() + iconParking.drawable -> pasillerosItemClickListener?.onPasillerosItemClickListener( + PasillerosItemVO( + title = R.string.Parking + ), "" + ) + } } }) @@ -237,8 +237,6 @@ class CollectionFragmentChecker( } private fun takeActionPrevia(customDialogList: CustomDialogList) { - println("previaaaa ${customDialogList.getValue()}") - ma.hideKeyboard(customDialogList.getEditText()) try { val saleGroupScanned = itemScanValue( @@ -383,13 +381,11 @@ class CollectionFragmentChecker( customDialogWarning.setTitle(getString(R.string.ticketPickup)) customDialogWarning.setDescription( getString( - R.string.ticketPickupDescr, - binding.mainToolbar.toolbarTitle.text + R.string.ticketPickupDescr, binding.mainToolbar.toolbarTitle.text ) - ) - .setOkButton(getString(R.string.aware)) { - customDialogWarning.dismiss() - } + ).setOkButton(getString(R.string.aware)) { + customDialogWarning.dismiss() + } customDialogWarning.show() } @@ -399,13 +395,20 @@ class CollectionFragmentChecker( event.getContentIfNotHandled().notNull { context.showToastCenterWithBackground( getString( - R.string.parkingIn, - ticketScanTxt + R.string.parkingIn, ticketScanTxt ) ) } } + loadTicketSetState.observe(viewLifecycleOwner) { event -> + event.getContentIfNotHandled().notNull { + "${it.ticketFk}: ${if (it.code == "CHECKED") "Revisado" else "Revisando"}".toast( + requireContext() + ) + } + } + loadPrint.observe(viewLifecycleOwner) { event -> event.getContentIfNotHandled().notNull { (getString(R.string.Imprimiendo) + mobileApplication.dataStoreApp.readDataStoreKey( @@ -469,7 +472,7 @@ class CollectionFragmentChecker( loadIncQuantity.observe(viewLifecycleOwner) { event -> event.getContentIfNotHandled().notNull { - incresaseSuccesful() + incresaseSuccesful(it) } } @@ -566,15 +569,23 @@ class CollectionFragmentChecker( compareBy({ it.isControlled }, { it.picked }) )*/ - saleAdapter = SaleAdapter( - myGroupList as MutableList, + saleAdapter = SaleAdapter(myGroupList as MutableList, pasillerosItemClickListener!!, object : OnQuantityClickListener { override fun onQuantityClick(sale: SaleVO) { myGroupList.forEachIndexed { index, saleVO -> - if (saleVO.saleFk == sale.saleFk) { - showQuantityDialog(index) + + if (saleVO.isParent) { + saleVO.sonSales.forEachIndexed { indexSon, saleV0 -> + if (saleV0.saleFk == sale.saleFk) { + showQuantityDialogBySale(saleV0.saleFk) + } + } + } else { + if (saleVO.saleFk == sale.saleFk) { + showQuantityDialog(index) + } } } @@ -638,8 +649,7 @@ class CollectionFragmentChecker( } } - } - ) + }) lm = LinearLayoutManager(requireContext(), LinearLayoutManager.VERTICAL, false) binding.fragmentSacadorCollections.adapter = saleAdapter @@ -827,7 +837,8 @@ class CollectionFragmentChecker( /* lm!!.scrollToPositionWithOffset(myPosition, 0) } else {*/ lm!!.scrollToPositionWithOffset( - if (myGroupList[myPosition].isControlled == "1") myPosition + 1 else myPosition, + //Se modifica posicion revisor + if (myGroupList[myPosition].isControlled == "1") myPosition else myPosition, 0 ) //} @@ -992,16 +1003,26 @@ class CollectionFragmentChecker( if (totalMark == sales.size) { getString(R.string.completCollection).toast(this.context, Toast.LENGTH_SHORT) // saleAdapter!!.notifyDataSetChanged() - if (canChangeState) changeTicketState() } else { if (allTicketsChecked) { - sales.forEach { - if (it.isControlled == "0") { + /* sales.forEach { + if (it.isControlled == "0") { + viewModel.ticketStateTodaySetState( + ticketFk = it.ticketFk.toInt(), state = "ON_CHECKING" + ) + } + }*/ + + val processedTickets = mutableSetOf() + sales.forEach { sale -> + val ticketFk = sale.ticketFk.toInt() + if (sale.isControlled == "0" && ticketFk !in processedTickets) { viewModel.ticketStateTodaySetState( - ticketFk = it.ticketFk.toInt(), state = "ON_CHECKING" + ticketFk = ticketFk, state = "ON_CHECKING" ) + processedTickets.add(ticketFk) } } allTicketsChecked = false @@ -1009,7 +1030,37 @@ class CollectionFragmentChecker( } } + private fun showQuantityDialogBySale(saleFk: Int) { + + try { + + customDialogThreeButtons.setDescription(getString(R.string.itemSaleQuantity)) + .setValue("").setOkButtonAdd(getString(R.string.modify)) { + try { + increaseQuantityBySale(saleFk, customDialogThreeButtons.getValue().toInt()) + scanRequest() + customDialogThreeButtons.dismiss() + } catch (ex: Exception) { + ma.messageWithSound( + message = getString(R.string.errorInputQuantity), + isPlayed = true, + isError = true, + isToasted = true + ) + } + + }.setKoButton(getString(R.string.cancel)) { + scanRequest() + customDialogThreeButtons.dismiss() + }.show() + customDialogThreeButtons.setFocusDialogValue() + } catch (ex: Exception) { + getString(R.string.errorInput).toast(requireContext()) + } + } + private fun showQuantityDialog(position: Int) { + try { customDialogThreeButtons.setDescription(getString(R.string.itemSaleQuantity)) @@ -1037,22 +1088,51 @@ class CollectionFragmentChecker( } } - private fun incresaseSuccesful() { - try { - sales[positionIncreaseQuantity].quantity = quantityIncrease + private fun incresaseSuccesful(saleFk: Number) { + // updateScreen() + try { + // if (myGroupList[positionIncreaseQuantity].isParent) { + //updateScreen() + for ((parentIndex, listItem) in myGroupList.withIndex()) { + + if (listItem.isParent) { + for ((childIndex, listItemSon) in listItem.sonSales.withIndex()) { + if (listItemSon.saleFk == saleFk) { + myGroupList[parentIndex].sonSales[childIndex].quantity = + quantityIncrease + saleAdapter?.notifyDataSetChanged() + break + } + } + } else { + if (myGroupList[parentIndex].saleFk == saleFk) myGroupList[parentIndex].quantity = + quantityIncrease + break + } + }/* } else { + myGroupList[positionIncreaseQuantity].quantity = quantityIncrease + saleAdapter?.notifyDataSetChanged() + }*/ } catch (e: Exception) { e.message!!.toast(requireContext()) } - saleAdapter?.notifyDataSetChanged() - sales[positionIncreaseQuantity].originalQuantity = quantityIncrease + } private fun increaseQuantity(position: Int, quantity: Int) { positionIncreaseQuantity = position quantityIncrease = quantity viewModel.collectionIncreaseQuantitySalix( - saleFk = sales[position].saleFk, quantity = quantity.toString() + saleFk = myGroupList[position].saleFk, quantity = quantity.toString() + ) + + } + + private fun increaseQuantityBySale(saleFk: Int, quantity: Int) { + quantityIncrease = quantity + viewModel.collectionIncreaseQuantitySalix( + saleFk, quantity = quantity.toString() ) } @@ -1083,17 +1163,14 @@ class CollectionFragmentChecker( } if (isTicket) { val labelDialogHelper = LabelDialogHelper(requireContext()) - labelDialogHelper.showLabelDialog( - onItemSelected = { labelCount -> - viewModel.collectionStickerPrint( - collectionFk = collection.collectionFk, - labelCount = labelCount - ) - val printerName = - mobileApplication.dataStoreApp.readDataStoreKey(PRINTERNAME) - (getString(R.string.Imprimiendo) + printerName).toast(requireContext()) - } - ) + labelDialogHelper.showLabelDialog(onItemSelected = { labelCount -> + viewModel.collectionStickerPrint( + collectionFk = collection.collectionFk, labelCount = labelCount + ) + val printerName = + mobileApplication.dataStoreApp.readDataStoreKey(PRINTERNAME) + (getString(R.string.Imprimiendo) + printerName).toast(requireContext()) + }) } else { viewModel.collectionStickerPrint( @@ -1162,7 +1239,7 @@ class CollectionFragmentChecker( originalQuantity = null, quantity = null, rgb = null, - saleFk = value[0].saleFk, + saleFk = 0, saleGroupFk = value[0].saleGroupFk, isPreControlled = value[0].isPreControlled, isPrepared = value[0].isPrepared, diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/collection/fragment/CollectionFragmentPicker.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/collection/fragment/CollectionFragmentPicker.kt index 6704e57f..b5833f99 100644 --- a/app/src/main/java/es/verdnatura/presentation/view/feature/collection/fragment/CollectionFragmentPicker.kt +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/collection/fragment/CollectionFragmentPicker.kt @@ -297,7 +297,6 @@ class CollectionFragmentPicker( SACADOR -> { //jose antonio myPosition = myGroupList.indexOfFirst { it.saleGroupFk == saleGroupScanned } - println("previa $saleGroupScanned posicion $myPosition") viewModel.saleTrackingAddPreparedSaleGroup( saleGroupScanned.toInt() ) diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/collection/fragment/CollectionFragmentPickerPreviousNew.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/collection/fragment/CollectionFragmentPickerPreviousNew.kt index 779ff998..e8281925 100644 --- a/app/src/main/java/es/verdnatura/presentation/view/feature/collection/fragment/CollectionFragmentPickerPreviousNew.kt +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/collection/fragment/CollectionFragmentPickerPreviousNew.kt @@ -7,8 +7,10 @@ import android.os.Bundle import android.os.Handler import android.os.Looper import android.text.InputType +import android.util.Log.d import android.view.KeyEvent import android.view.View +import android.view.View.VISIBLE import android.view.WindowManager import android.view.inputmethod.EditorInfo import android.view.inputmethod.InputMethodManager @@ -71,6 +73,7 @@ import org.json.JSONObject 3-VERIFICAR COLECCIÓN 4-IMPRIMIR 5-EL SACADOR PUEDE MARCAR PREVIA, EL PRESACADOR NO. +6-EL PRE marca los estados del saleGroup con OK PREVIOUS (26) y el SACADOR con PREPARED (14) variables: isVerifiedCollection @@ -107,6 +110,7 @@ class CollectionFragmentPickerPreviousNew( private lateinit var myGroupList: List private var quantityReserveToCheckItemScan = 0 private var isVerifiedCollection = false + private var stateCodeId: Number? = null companion object { fun newInstance( @@ -133,19 +137,18 @@ class CollectionFragmentPickerPreviousNew( } override fun init() { - println("Sacando test") customDialogList = CustomDialogList(requireContext()) customDialogInput = CustomDialogInput(requireContext()) customDialog = CustomDialog(requireContext()) customDialogThreeButtons = CustomDialogThreeButtons(requireContext()) customDialogThreeButtonsQuantity = CustomDialogThreeButtons(requireContext()) ma.hideBottomNavigation(View.GONE) - println("type $type") setEvents() setToolBar() viewModel.collectionTicketGetSalix( collection.collectionFk, print = false ) + viewModel.getStateId(if (type == PREITEMPICKERTEST) "OK PREVIOUS" else "PREPARED") super.init() } @@ -334,7 +337,6 @@ class CollectionFragmentPickerPreviousNew( //lm!!.scrollToPositionWithOffset(storedBackPosition + 1, 0) setTotalLines() } else { - println("updating") updateScreen() } } @@ -350,6 +352,20 @@ class CollectionFragmentPickerPreviousNew( } } + loadResponseStateId.observe(viewLifecycleOwner) { event -> + event.getContentIfNotHandled().notNull { + stateCodeId = it + } + } + loadResponseReserveAddPrevOK.observe(viewLifecycleOwner) { event -> + event.getContentIfNotHandled().notNull { + } + } + loadSetStateResponse.observe(viewLifecycleOwner) { event -> + event.getContentIfNotHandled().notNull { + // updateScreen() + } + } loadResponseCode.observe(viewLifecycleOwner) { event -> event.getContentIfNotHandled().notNull { @@ -493,21 +509,20 @@ class CollectionFragmentPickerPreviousNew( } private fun showDeleteItemShelving(sale: Sale) { - customDialog.setTitle(getString(R.string.deleteSale)) - .setDescription( - getString(R.string.deleteSaleDescrip) + getString( - R.string.sure - ) - ).setOkButton(getString(R.string.delete)) { + customDialog.setTitle(getString(R.string.deleteSale)).setDescription( + getString(R.string.deleteSaleDescrip) + getString( + R.string.sure + ) + ).setOkButton(getString(R.string.delete)) { - viewModel.itemShelvingSaleDeleteIsAdded(sale.itemShelvingSaleFk) - scanRequest() - customDialog.dismiss() + viewModel.itemShelvingSaleDeleteIsAdded(sale.itemShelvingSaleFk) + scanRequest() + customDialog.dismiss() - }.setKoButton(getString(R.string.cancel)) { - scanRequest() - customDialog.dismiss() - }.show() + }.setKoButton(getString(R.string.cancel)) { + scanRequest() + customDialog.dismiss() + }.show() } @@ -539,11 +554,24 @@ class CollectionFragmentPickerPreviousNew( //Se busca la matricula en las lineas for (indice in myGroupList.indices) { //como cuando es presacador no hay parent no entrará - if (myGroupList[indice].isParent && myGroupList[indice].saleGroupFk == txtscan.toInt()) { - isFoundSale = true - storedPosition = indice - viewModel.itemShelvingSaleSetSaleGroup(txtscan.toInt()) - break + try { + if (myGroupList[indice].isParent && myGroupList[indice].saleGroupFk == txtscan.toInt() || (type == PREPARED && myGroupList[indice].saleGroupFk == txtscan.toInt())) { + isFoundSale = true + storedPosition = indice + viewModel.itemShelvingSaleSetSaleGroup(txtscan.toInt()) + setStateSaleGroup(txtscan.toInt()) + myGroupList[indice].stateCode = + if (myGroupList[indice].stateCode == "PREPARED") { + "OK PREVIOUS" + } else { + "PREPARED" + } + saleAdapter!!.notifyDataSetChanged() + break + + } + } catch (ex: Exception) { + d("Verdnatura", "not find") } if (myGroupList[indice].isPicked != 1 && myGroupList[indice].code != null && myGroupList[indice].code!!.uppercase() == txtscan.uppercase()) { isFoundSale = true @@ -562,6 +590,7 @@ class CollectionFragmentPickerPreviousNew( for (indice in sales.indices) { if (sales[indice].saleGroupFk != null && sales[indice].saleGroupFk == saleGroupScanned.toInt()) { viewModel.itemShelvingSaleSetSaleGroup(saleGroupScanned.toInt()) + setStateSaleGroup(saleGroupScanned.toInt()) storedPosition = indice mpok!!.start() return true @@ -808,15 +837,13 @@ class CollectionFragmentPickerPreviousNew( showQuestionUbicationEmpty(position, quantity) }.setOkButtonTwo(getString(R.string.no)) { scanRequest() - customDialogThreeButtonsQuantity.dismiss() - /* viewModel.itemShelvingSaleExists( + customDialogThreeButtonsQuantity.dismiss()/* viewModel.itemShelvingSaleExists( myGroupList[position].itemShelvingSaleFk, myGroupList[position].itemShelvingFk, position, quantity )*/ - markLine(position, quantity, true) - /* if (quantity == 0) { + markLine(position, quantity, true)/* if (quantity == 0) { /* viewModel.itemShelvingGet( myGroupList[position].itemShelvingFk, @@ -925,8 +952,7 @@ class CollectionFragmentPickerPreviousNew( ticketSelected, saleGroupFk = if (type == PREPARED) null else collection.tickets.find { it.ticketFk == ticketSelected }?.sales?.get( 0 - )?.saleGroupFk - ?: 0, + )?.saleGroupFk ?: 0, sectorFk = if (type == PREPARED) null else mobileApplication.dataStoreApp.readDataStoreKey( SECTORFK ) @@ -952,6 +978,7 @@ class CollectionFragmentPickerPreviousNew( R.string.addItemQuantity, sale.itemFk ) ) + customDialogThreeButtonsQuantity.setCustomDialogValue(VISIBLE) customDialogThreeButtonsQuantity.setOkButtonAdd(text = getString(R.string.add)) { ticketSelected = sale.ticketFk if (customDialogThreeButtonsQuantity.getValue().isNotEmpty()) { @@ -961,8 +988,7 @@ class CollectionFragmentPickerPreviousNew( ticketSelected = sale.ticketFk, saleGroupFk = if (type == PREPARED) null else collection.tickets.find { it.ticketFk == ticketSelected }?.sales?.get( 0 - )?.saleGroupFk - ?: 0, + )?.saleGroupFk ?: 0, sectorFk = if (type == PREPARED) null else mobileApplication.dataStoreApp.readDataStoreKey( SECTORFK ) @@ -1003,8 +1029,6 @@ class CollectionFragmentPickerPreviousNew( } private fun setTotalLines() { - println("total Mark ${myGroupList.count { it.isPicked == 1 }}") - println("total size ${myGroupList.size}") val totalMark = myGroupList.count { it.isPicked == 1 } binding.mainToolbar.toolbarTitle.text = if (collection.collectionFk != 0) collection.collectionFk.toString() else "" @@ -1019,17 +1043,34 @@ class CollectionFragmentPickerPreviousNew( ticketFk = it.toInt(), state = "PREPARED" ) } + //setStateSaleGroup() } PREITEMPICKERTEST -> { - //viewModel.saleTrackingAddPrevOK(collection.collectionFk) - viewModel.saleTrackingSectorCollectionAddPrevOK(collection.collectionFk) + viewModel.saleTrackingAddPrevOK(collection.collectionFk) + //viewModel.saleTrackingSectorCollectionAddPrevOK(collection.collectionFk) + val distinctSaleGroups = mutableSetOf() + myGroupList.forEach { sale -> + sale.saleGroupFk?.let { + distinctSaleGroups.add(it) + } ?: run { + println("No hay salegroup") + } + } + if (distinctSaleGroups.isNotEmpty()) + distinctSaleGroups.forEach { saleGroup -> + setStateSaleGroup(saleGroup) + } } } } } + private fun setStateSaleGroup(saleGroup: Number) { + viewModel.saleGroupUpdateState(saleGroup, stateCodeId!!) + } + private fun showScanner(index: Int, sale: Sale) { customDialogInput.getEditText().inputType = InputType.TYPE_CLASS_TEXT customDialogInput.setTitle("" + sale.itemFk) @@ -1157,10 +1198,9 @@ class CollectionFragmentPickerPreviousNew( ).toString() ) - val foundTicketInCollection = - collection.tickets.find { - it.ticketFk == customDialogList.getValue().toInt() - } + val foundTicketInCollection = collection.tickets.find { + it.ticketFk == customDialogList.getValue().toInt() + } if (foundTicketInCollection != null) { isVerifiedCollection = true ma.hideKeyboard(customDialogList.getEditText()) @@ -1217,17 +1257,14 @@ class CollectionFragmentPickerPreviousNew( } if (isTicket) { val labelDialogHelper = LabelDialogHelper(requireContext()) - labelDialogHelper.showLabelDialog( - onItemSelected = { labelCount -> - viewModel.collectionStickerPrint( - collectionFk = collection.collectionFk, - labelCount = labelCount - ) - (getString(R.string.Imprimiendo) + mobileApplication.dataStoreApp.readDataStoreKey( - PRINTERNAME - )).toast(requireContext()) - } - ) + labelDialogHelper.showLabelDialog(onItemSelected = { labelCount -> + viewModel.collectionStickerPrint( + collectionFk = collection.collectionFk, labelCount = labelCount + ) + (getString(R.string.Imprimiendo) + mobileApplication.dataStoreApp.readDataStoreKey( + PRINTERNAME + )).toast(requireContext()) + }) } else { viewModel.collectionStickerPrint( collectionFk = collection.collectionFk, null diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/collection/fragment/CollectionFragmentPreChecker.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/collection/fragment/CollectionFragmentPreChecker.kt index 702e9bba..0fddfcbb 100644 --- a/app/src/main/java/es/verdnatura/presentation/view/feature/collection/fragment/CollectionFragmentPreChecker.kt +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/collection/fragment/CollectionFragmentPreChecker.kt @@ -161,7 +161,7 @@ class CollectionFragmentPreChecker( collection.collectionFk, mobileApplication.dataStoreApp.readDataStoreKey(SECTORFK), print = "0", - type + "PREVIOUS_CONTROL" ) } super.onCreate(savedInstanceState) @@ -383,7 +383,7 @@ class CollectionFragmentPreChecker( viewModel.getSales( binding.scanInput.text.toString().toInt(), print = "0", - source = type + source = "PREVIOUS_CONTROL" ) //findSale(binding.scanInput.text.toString()) @@ -419,7 +419,7 @@ class CollectionFragmentPreChecker( viewModel.getSales( binding.scanInput.toLong(), print = "0", - source = type + source = "PREVIOUS_CONTROL" ) } catch (ex: Exception) { ma.messageWithSound( @@ -1743,7 +1743,7 @@ class CollectionFragmentPreChecker( collection.collectionFk, mobileApplication.dataStoreApp.readDataStoreKey(SECTORFK), print = "0", - type + type = "PREVIOUS_CONTROL" ) } else { diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/collection/fragment/CollectionViewModel.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/collection/fragment/CollectionViewModel.kt index cad89ad9..22670e40 100644 --- a/app/src/main/java/es/verdnatura/presentation/view/feature/collection/fragment/CollectionViewModel.kt +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/collection/fragment/CollectionViewModel.kt @@ -188,6 +188,10 @@ class CollectionViewModel(val context: Context) : BaseViewModel(context) { get() = _responseIncQuantity val loadIncQuantity: LiveData> = _responseIncQuantity.map { Event(it) } + private val _responseStateId by lazy { MutableLiveData() } + val responseStateId: LiveData = _responseStateId + val loadResponseStateId: LiveData> = _responseStateId.map { Event(it) } + private val _mistakeList by lazy { MutableLiveData() } val mistakeList: LiveData get() = _mistakeList @@ -211,6 +215,16 @@ class CollectionViewModel(val context: Context) : BaseViewModel(context) { val responseSaleAddPrevOK: LiveData get() = _responseSaleAddPrevOK + private val _responseSaleReserveAddPrevOK by lazy { MutableLiveData() } + val responseSaleReserveAddPrevOK: LiveData = _responseSaleReserveAddPrevOK + val loadResponseReserveAddPrevOK: LiveData> = + _responseSaleReserveAddPrevOK.map { Event(it) } + + private val _setStateResponse by lazy { MutableLiveData() } + val setStateResponse: LiveData = _setStateResponse + val loadSetStateResponse: LiveData> = + _setStateResponse.map { Event(it) } + fun getSales( collectionFk: Number, print: String, source: String @@ -491,6 +505,35 @@ class CollectionViewModel(val context: Context) : BaseViewModel(context) { }) } + fun getStateId(stateCode: String) { + + salix.getStateId( + filter = """{"where":{"code":"$stateCode"}, "fields":["id"]}""".trimMargin() + ).enqueue(object : SalixCallback(context) { + override fun onSuccess(response: Response) { + _responseStateId.value = + response.body()?.get("id").toString().toInt() + + } + + }) + } + + fun setStateSaleGroup( + saleGroups: List, stateCode: Int + ) { + salix.collectionAddWithReservation( + params = arrayListOf( + saleGroups, stateCode + ) + ).enqueue(object : SalixCallback(context) { + override fun onSuccess(response: Response) { + // _responseCollectionAddItem.value = true + } + + }) + } + fun itemPlacementSupplyAiming( shelvingFk: String, quantity: Int, itemFk: Int ) { @@ -626,7 +669,7 @@ class CollectionViewModel(val context: Context) : BaseViewModel(context) { } fun itemShelvingSaleSetSaleGroup( - saleGroupFk: Int + saleGroupFk: Int, ) { salix.itemShelvingSaleSetSaleGroup( arrayListOf( @@ -642,6 +685,7 @@ class CollectionViewModel(val context: Context) : BaseViewModel(context) { override fun onSuccess(response: Response) { _responseItemShelvingSaleGroup.value = ResponseItemVO(isError = false) + } }) } @@ -767,6 +811,16 @@ class CollectionViewModel(val context: Context) : BaseViewModel(context) { }) } + fun saleGroupUpdateState(saleGroup: Number, codeState: Number) { + salix.saleGroupUpdate( + id = saleGroup, hashMapOf("stateFk" to codeState) + ).enqueue(object : SalixCallback(context) { + override fun onSuccess(response: Response) { + _setStateResponse.value = true + } + }) + } + fun collectionIncreaseQuantitySalix( saleFk: Int, quantity: String ) { @@ -797,7 +851,9 @@ class CollectionViewModel(val context: Context) : BaseViewModel(context) { salix.saleMistakeAdd( SaleMistakeSalix( - userFk = (context as MobileApplication).userId!!, saleFk = saleFk, typeFk = typeFk + userFk = (context as MobileApplication).userId!!, + saleFk = saleFk, + typeFk = typeFk ) ).enqueue(object : SalixCallback(context) { override fun onError(t: Throwable) { @@ -988,22 +1044,11 @@ class CollectionViewModel(val context: Context) : BaseViewModel(context) { ) { salix.saleTrackingSectorCollectionAddPrevOK(arrayListOf(sectorCollectionFk)) .enqueue(object : SalixCallback(context) { - override fun onError(t: Throwable) { - _responseSaleAddPrevOK.value = ResponseItemVO( - isError = true, errorMessage = getMessageFromAllResponse( - nameofFunction(this), t.message!! - ) - ) - - } - override fun onSuccess(response: Response) { - _responseSaleAddPrevOK.value = ResponseItemVO( - isError = false, errorMessage = "" + getMessageFromAllResponse( - nameofFunction(this), response.message() - ) - ) + + _responseSaleReserveAddPrevOK.value = true } + }) } diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/delivery/adapters/RouteAdapter.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/delivery/adapters/RouteAdapter.kt index 53522d35..1fa3b255 100644 --- a/app/src/main/java/es/verdnatura/presentation/view/feature/delivery/adapters/RouteAdapter.kt +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/delivery/adapters/RouteAdapter.kt @@ -31,9 +31,14 @@ class RouteAdapter( var prevCreated = "" for (route in list) { - if (route.created.toString() != prevCreated) { + //tarea 7146 + /* if (route.created.toString() != prevCreated) { route.header = true prevCreated = route.created.toString() + }*/ + if (route.dated.toString() != prevCreated) { + route.header = true + prevCreated = route.dated.toString() } } return list @@ -90,7 +95,9 @@ class RouteAdapter( if (item.header) { headerRouteLayout.visibility = View.VISIBLE - headerRoute.text = toDateString(item.created) + //tarea7146 + headerRoute.text = toDateString(item.dated) + // headerRoute.text = toDateString(item.created) } else { headerRouteLayout.visibility = View.GONE diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/delivery/fragments/RoutesFragment.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/delivery/fragments/RoutesFragment.kt index c8e18f24..d1385529 100644 --- a/app/src/main/java/es/verdnatura/presentation/view/feature/delivery/fragments/RoutesFragment.kt +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/delivery/fragments/RoutesFragment.kt @@ -289,7 +289,8 @@ class RoutesFragment( viewModel.getDataFromExpedition( routeId = routeId.toLong(), expeditionId = expedition.code!!.toLong(), - landed = routeItem!!.created.toString() + // landed = routeItem!!.created.toString() + landed = routeItem!!.dated.toString() ) } customDialogList.dismiss() diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/delivery/fragments/SummaryFragment.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/delivery/fragments/SummaryFragment.kt index ca220953..a77964fb 100644 --- a/app/src/main/java/es/verdnatura/presentation/view/feature/delivery/fragments/SummaryFragment.kt +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/delivery/fragments/SummaryFragment.kt @@ -340,16 +340,8 @@ class SummaryFragment( viewModel.getExpeditionFromRoute(routeSelected) } - println("address $addressFkSelected") - println("address isScanning $isScanning") - if (addressFkSelected != item.addressFk && isScanning) { - println("address isScanning $isScanning") - println("address setSTATE $state") - println("address address $addressFkSelected") - setExpeditionsState(myList, state, addressFkSelected) - } addressFkSelected = item.addressFk isScanning = false diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/delivery/fragments/TicketsFragment.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/delivery/fragments/TicketsFragment.kt index 0abb0e6e..fa982b5b 100644 --- a/app/src/main/java/es/verdnatura/presentation/view/feature/delivery/fragments/TicketsFragment.kt +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/delivery/fragments/TicketsFragment.kt @@ -429,15 +429,15 @@ class TicketsFragment : BaseFragment( override fun onItemButtonCMRRowClickListener( item: Ticket ) { - ma.onPasillerosItemClickListener( PasillerosItemVO( title = R.string.titleWebViewer, ), entryPoint = Gson().toJson( mutableMapOf( - "entryPoint" to route.id, "web" to "${ + "entryPoint" to route.id, + "web" to "${ mobileApplication.dataStoreApp.getServerSalix() - }/api/Routes/${item.cmrFk}/cmr?access_token=${ + }/api/Cmrs/${item.cmrFk}/print?access_token=${ mobileApplication.dataStoreApp.readDataStoreKey( TOKEN ) diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/delivery/model/InfoCompany.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/delivery/model/InfoCompany.kt index b8a70f21..af1b91f5 100644 --- a/app/src/main/java/es/verdnatura/presentation/view/feature/delivery/model/InfoCompany.kt +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/delivery/model/InfoCompany.kt @@ -168,7 +168,7 @@ class RouteInfo( @SerializedName(value = "driver", alternate = ["workerUserName"]) var driver: String?, var hour: String?, - @TypeConverters(MapTypeConverter::class) var created: Date, + @TypeConverters(MapTypeConverter::class) var dated: Date, var m3: Double, @SerializedName(value = "numberPlate", alternate = ["vehiclePlateNumber"]) var numberPlate: String?, @@ -184,6 +184,6 @@ class RouteInfo( var agencyModeFk: Int ) : Serializable { override fun toString(): String { - return "$driver$id$name$numberPlate$m3$created$hour$" + return "$driver$id$name$numberPlate$m3$$dated$hour$" } } diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/historicoshelvinglog/fragment/shelvingLogFragment.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/historicoshelvinglog/fragment/shelvingLogFragment.kt index 4bdefe13..3e11175f 100644 --- a/app/src/main/java/es/verdnatura/presentation/view/feature/historicoshelvinglog/fragment/shelvingLogFragment.kt +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/historicoshelvinglog/fragment/shelvingLogFragment.kt @@ -6,8 +6,10 @@ import androidx.recyclerview.widget.LinearLayoutManager import com.google.gson.Gson import es.verdnatura.R import es.verdnatura.databinding.FragmentShelvinglogBinding +import es.verdnatura.domain.ConstAndValues.TOKENMULTIMEDIA import es.verdnatura.domain.notNull import es.verdnatura.presentation.base.BaseFragment +import es.verdnatura.presentation.common.itemScanValue import es.verdnatura.presentation.view.component.CustomDialog import es.verdnatura.presentation.view.feature.historicoshelvinglog.adapter.ShelvingLogAdapter import es.verdnatura.presentation.view.feature.historicoshelvinglog.model.LogType @@ -23,6 +25,7 @@ class ShelvingLogFragment( ) { private var adapter: ShelvingLogAdapter? = null private var itemScan = "" + private var isitemFkScanned = false companion object { fun newInstance(entryPoint: String, logType: LogType) = @@ -43,17 +46,33 @@ class ShelvingLogFragment( } - private fun setToolBar(title:String) { + private fun setToolBar(title: String) { - if (logType == LogType.SHELVING) { - binding.mainToolbar.toolbarTitle.text = title + when (logType) { + LogType.SHELVING -> { + binding.mainToolbar.toolbarTitle.text = title + } - } else { - binding.mainToolbar.toolbarTitle.text = title - binding.scanInput.setHint(getString(R.string.scanParkingTxt)) + LogType.PREVIOUS -> { + binding.mainToolbar.toolbarTitle.text = title + binding.scanInput.setHint(getString(R.string.scanParkingTxt)) + } + LogType.ITEMSHELVING -> { + binding.mainToolbar.toolbarTitle.text = title + binding.scanInput.setHint("Escanea carro o item") + } } + /* if (logType == LogType.SHELVING) { + binding.mainToolbar.toolbarTitle.text = title + + } else { + binding.mainToolbar.toolbarTitle.text = title + binding.scanInput.setHint(getString(R.string.scanParkingTxt)) + + }*/ + } private fun setEvents() { @@ -62,6 +81,11 @@ class ShelvingLogFragment( if (actionId == EditorInfo.IME_ACTION_SEARCH || actionId == EditorInfo.IME_ACTION_DONE || actionId == 0 || actionId == 5) { if (binding.scanInput.text.toString().isNotEmpty()) { + binding.scanInput.setText( + itemScanValue( + binding.scanInput.text.toString(), arrayOf("buy"), "id" + ).toString() + ) when (logType) { LogType.SHELVING -> { viewModel.shelvings((binding.scanInput.text.toString())) @@ -69,6 +93,9 @@ class ShelvingLogFragment( } LogType.PREVIOUS -> viewModel.getParkingId((binding.scanInput.text.toString())) + LogType.ITEMSHELVING -> { + viewModel.shelvings((binding.scanInput.text.toString())) + } } itemScan = binding.scanInput.text.toString() } @@ -95,11 +122,11 @@ class ShelvingLogFragment( LinearLayoutManager(requireContext(), LinearLayoutManager.VERTICAL, false) setToolBar(getString(R.string.shelvingLog) + ":" + itemScan) if (it.list.isEmpty()) { - customDialog.setTitle(getString(R.string.noResults)) - .setDescription(getString(R.string.noDataLabelScanned)) - .setOkButton(getString(R.string.close)) { - customDialog.dismiss() - }.show() + if (logType == LogType.SHELVING) { + showMessage() + } else { + viewModel.getIdFromCodeSalix(itemScan) + } } else { openWebViewer(it.list[0].id!!, "shelving") } @@ -113,24 +140,65 @@ class ShelvingLogFragment( } } + loadResponseCode.observe(viewLifecycleOwner) { event -> + event.getContentIfNotHandled().notNull { + setToolBar(getString(R.string.item) + itemScan) + if (it == -1) showMessage() else { + isitemFkScanned = true + openWebViewer(it, "") + } + + } + } } } + override fun onPause() { + isitemFkScanned = false + super.onPause() + } + + private fun showMessage() { + customDialog.setTitle(getString(R.string.noResults)) + .setDescription(getString(R.string.noDataLabelScanned)) + .setOkButton(getString(R.string.close)) { + customDialog.dismiss() + }.show() + } + private fun openWebViewer(param: Int, web: String) { + + //variableWeb = if (itemScan is Number) "var-itemFk=$param" else "var-shelvingCode=$param" ma.onPasillerosItemClickListener( PasillerosItemVO( title = R.string.titleWebViewer, ), - entryPoint = Gson().toJson( - mutableMapOf( - "entryPoint" to param, - "web" to "${mobileApplication.dataStoreApp.getServerLilium()}/#/$web/$param/log" + entryPoint = if (logType == LogType.ITEMSHELVING) { + Gson().toJson( + mutableMapOf( + "entryPoint" to param, + "web" to "https://grafana.verdnatura.es/d/ce4b8ymvex4owa?${ + if (isitemFkScanned) "var-itemFk=$param&var-vnToken=${ + mobileApplication.dataStoreApp.readDataStoreKey( + TOKENMULTIMEDIA + ) + }" + else "var-shelvingCode=$itemScan" + }" + ) ) - ) + } else { + Gson().toJson( + mutableMapOf( + "entryPoint" to param, + "web" to "${mobileApplication.dataStoreApp.getServerLilium()}/#/$web/$param/log" + ) + ) + } ) } -} +} \ No newline at end of file diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/historicoshelvinglog/fragment/shelvingLogViewModel.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/historicoshelvinglog/fragment/shelvingLogViewModel.kt index 817e73c3..f7dee81f 100644 --- a/app/src/main/java/es/verdnatura/presentation/view/feature/historicoshelvinglog/fragment/shelvingLogViewModel.kt +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/historicoshelvinglog/fragment/shelvingLogViewModel.kt @@ -6,6 +6,7 @@ import androidx.lifecycle.MutableLiveData import androidx.lifecycle.map import com.google.gson.JsonObject import es.verdnatura.domain.SalixCallback +import es.verdnatura.domain.userCases.GetItemFromBarcodeUseCase import es.verdnatura.presentation.base.BaseViewModel import es.verdnatura.presentation.common.Event import es.verdnatura.presentation.view.feature.historicoshelvinglog.model.ShelvingLogSalix @@ -13,14 +14,18 @@ import es.verdnatura.presentation.view.feature.historicoshelvinglog.model.Shelvi import retrofit2.Response class ShelvingLogViewModel(val context: Context) : BaseViewModel(context) { - + private val getItemFromBarcodeUseCase = GetItemFromBarcodeUseCase(salix) private val _itemShelvingLogSalixList by lazy { MutableLiveData() } val loadShelvingLogSalixList: LiveData> = _itemShelvingLogSalixList.map { Event(it) } private val _responseParkingId by lazy { MutableLiveData() } val responseParkingId: LiveData = _responseParkingId - val loadResponseParking: LiveData> =_responseParkingId.map { Event(it) } + val loadResponseParking: LiveData> = _responseParkingId.map { Event(it) } + + private val _responseCode by lazy { MutableLiveData() } + val responseCode: LiveData = _responseCode + val loadResponseCode: LiveData> = _responseCode.map { Event(it) } fun shelvings(vShelvingFK: String) { salix.shelvingsGet("""{"where": {"code": "$vShelvingFK"}}""").enqueue(object : @@ -41,13 +46,26 @@ class ShelvingLogViewModel(val context: Context) : BaseViewModel(context) { .enqueue(object : SalixCallback>(context) { override fun onSuccess(response: Response>) { - _responseParkingId.value = response.body()?.firstOrNull()?.entrySet()?.firstOrNull()?.value?.toString()?.toIntOrNull() + _responseParkingId.value = + response.body()?.firstOrNull()?.entrySet()?.firstOrNull()?.value?.toString() + ?.toIntOrNull() } }) } + + fun getIdFromCodeSalix(code: String) { + getItemFromBarcodeUseCase.execute(code) + .enqueue(object : SalixCallback(context) { + + override fun onSuccess(response: Response) { + _responseCode.value = response.body() ?: -1 + + } + }) + } } diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/historicoshelvinglog/model/ShelvingLog.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/historicoshelvinglog/model/ShelvingLog.kt index 50d4863c..8eb22de8 100644 --- a/app/src/main/java/es/verdnatura/presentation/view/feature/historicoshelvinglog/model/ShelvingLog.kt +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/historicoshelvinglog/model/ShelvingLog.kt @@ -40,8 +40,10 @@ data class DeviceLogSalix( val versionApp: String, val serialNumber: String? ) + enum class LogType { SHELVING, PREVIOUS, + ITEMSHELVING } diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/inventario/adapter/InventoryParkingAdapter.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/inventario/adapter/InventoryParkingAdapter.kt index f931fbb4..18bd7553 100644 --- a/app/src/main/java/es/verdnatura/presentation/view/feature/inventario/adapter/InventoryParkingAdapter.kt +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/inventario/adapter/InventoryParkingAdapter.kt @@ -89,7 +89,7 @@ class InventoryParkingAdapter( onPasillerosItemClickListener.onPasillerosItemClickListener( PasillerosItemVO( title = - R.string.itemSearch + R.string.itemSearch ), item.itemFk.toString() ) } @@ -126,21 +126,19 @@ class InventoryParkingAdapter( itemShelving.setOnClickListener { onPasillerosItemClickListener.onPasillerosItemClickListener( PasillerosItemVO( - title = R.string.titleUbicator) - , item.shelvingFk + title = R.string.titleUbicator + ), item.shelvingFk ) } itemfkText.setOnClickListener { onPasillerosItemClickListener.onPasillerosItemClickListener( PasillerosItemVO( - title = R.string.itemSearch) - , item.itemFk.toString() + title = R.string.itemSearch + ), item.itemFk.toString() ) } if (item.isChecked != null) { - println("item ${item.itemFk} checked ${item.isChecked} ") - when (item.isChecked!!.toInt()) { in 1..Int.MAX_VALUE -> itemRowLayout.setBackgroundColor( diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/inventario/fragment/InventaryFragment.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/inventario/fragment/InventaryFragment.kt index e0a78a80..ff1deb30 100644 --- a/app/src/main/java/es/verdnatura/presentation/view/feature/inventario/fragment/InventaryFragment.kt +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/inventario/fragment/InventaryFragment.kt @@ -11,6 +11,7 @@ import es.verdnatura.R import es.verdnatura.databinding.FragmentInventaryBinding import es.verdnatura.domain.ConstAndValues.BUYER import es.verdnatura.domain.ConstAndValues.BUYERID +import es.verdnatura.domain.ConstAndValues.ITEMPACKINGTYPEFILTER import es.verdnatura.domain.ConstAndValues.WAREHOUSEFK import es.verdnatura.domain.toast import es.verdnatura.presentation.base.BaseFragment @@ -22,6 +23,7 @@ import es.verdnatura.presentation.view.commom.NameWithId import es.verdnatura.presentation.view.commom.SearchableAdapter import es.verdnatura.presentation.view.component.CustomDialogInput import es.verdnatura.presentation.view.component.CustomDialogTwoButtons +import es.verdnatura.presentation.view.feature.calidad.model.Buyer import es.verdnatura.presentation.view.feature.inventario.adapter.InventoryAdapter import es.verdnatura.presentation.view.feature.inventario.model.ItemInventaryVO import es.verdnatura.presentation.view.feature.pasillero.model.PasillerosItemVO @@ -41,6 +43,8 @@ class InventaryFragment : private var firstVisiblePosition = 0 private lateinit var itemClicked: ItemInventaryVO private var buyerId: Number = -1 + private var filterItemType: String? = null + private var myListBuyers = listOf() companion object { fun newInstance() = InventaryFragment() @@ -55,8 +59,12 @@ class InventaryFragment : override fun init() { - viewModel.itemShelvingBuyerGet() + // viewModel.itemShelvingBuyerGet() + viewModel.itemShelvingBuyerGetByItemPacking() binding.filterBuyer.text = mobileApplication.dataStoreApp.readDataStoreKey((BUYER)) + filterItemType = + mobileApplication.dataStoreApp.readDataStoreKey((ITEMPACKINGTYPEFILTER)) + binding.filterItemType.setText(filterItemType!!.firstOrNull()?.toString() ?: "").toString() buyerId = mobileApplication.dataStoreApp.readDataStoreKey((BUYERID)) if (buyerId != -1) { viewModel.getInventory( @@ -64,8 +72,26 @@ class InventaryFragment : ) } binding.filterBuyer.setOnClickListener { + val distinctPackingTypes = myListBuyers + + .filter { filterItemType == getString(R.string.allText) || filterItemType == "" || it.itemPackingTypeFk == filterItemType } + .map { + NameWithId( + it.worker.user.id, it.worker.user.nickname + ) + } + .distinct() + .sortedBy { it.name } + setSearchable(distinctPackingTypes as MutableList) binding.searchableRecyclerView.visibility = View.VISIBLE binding.searchableRecyclerView.setSearchHint(getString(R.string.BuyerSearch)) + ma.hideKeyboard(binding.searchableRecyclerView) + } + + binding.filterItemType.setOnClickListener { + + binding.searchableRecyclerViewItemType.visibility = View.VISIBLE + binding.searchableRecyclerViewItemType.setSearchHint(getString(R.string.selectItemType)) } customDialogInput = CustomDialogInput(requireContext()) @@ -106,6 +132,29 @@ class InventaryFragment : } + private fun setSearchableItemPacking(listNames: MutableList) { + val adapter = + SearchableAdapter( + listElements = listNames, + context = requireContext() + ) { elementSelected -> + + lifecycleScope.launch { + mobileApplication.dataStoreApp.editDataStoreKey( + ITEMPACKINGTYPEFILTER, elementSelected.name + ) + + } + binding.filterItemType.text = elementSelected.name.firstOrNull()?.toString() ?: "" + filterItemType = elementSelected.name + binding.searchableRecyclerViewItemType.visibility = View.GONE + + } + + binding.searchableRecyclerViewItemType.setAdapter(adapter, listNames) + + } + private fun setToolBar() { ma.hideBottomNavigation(View.GONE) val listIcons: ArrayList = ArrayList() @@ -184,6 +233,21 @@ class InventaryFragment : override fun observeViewModel() { with(viewModel) { + + buyersByItemPackingList.observe(viewLifecycleOwner) { list -> + myListBuyers = list.list + val distinctPackingTypes = + list?.list?.map { + NameWithId( + 1, it.itemPackingTypeFk ?: getString(R.string.allText) + ) + } + ?.distinct() + ?: emptyList() + + setSearchableItemPacking(distinctPackingTypes as MutableList) + } + buyersList.observe(viewLifecycleOwner) { item -> setSearchable(item.list.map { NameWithId( @@ -193,6 +257,7 @@ class InventaryFragment : } as MutableList) } + inventaryList.observe(viewLifecycleOwner) { it -> listInventory = ArrayList() listInventoryAux = ArrayList() @@ -202,6 +267,8 @@ class InventaryFragment : listInventoryAux.add(it) } } + + adapter = InventoryAdapter(listInventory, object : OnInvetoryNichoClickListener { override fun onInvetoryNichoClickListener(item: ItemInventaryVO) { customDialog.setTitle(item.itemFk.toString() + "\n" + item.longName) diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/inventario/fragment/InventaryViewModel.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/inventario/fragment/InventaryViewModel.kt index 1294b65e..26b38b1e 100644 --- a/app/src/main/java/es/verdnatura/presentation/view/feature/inventario/fragment/InventaryViewModel.kt +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/inventario/fragment/InventaryViewModel.kt @@ -11,6 +11,8 @@ import es.verdnatura.domain.userCases.GetItemFromBarcodeUseCase import es.verdnatura.presentation.base.BaseViewModel import es.verdnatura.presentation.common.Event import es.verdnatura.presentation.common.ItemDiscardSalixShortage +import es.verdnatura.presentation.view.feature.calidad.model.Buyer +import es.verdnatura.presentation.view.feature.calidad.model.BuyerList import es.verdnatura.presentation.view.feature.calidad.model.BuyerListVO import es.verdnatura.presentation.view.feature.calidad.model.BuyerVO import es.verdnatura.presentation.view.feature.inventario.model.InventaryListVO @@ -46,6 +48,10 @@ class InventaryViewModel(val context: Context) : BaseViewModel(context) { val buyersList: LiveData get() = _buyersList + private val _buyersByItemPackingList by lazy { MutableLiveData() } + val buyersByItemPackingList: LiveData + get() = _buyersByItemPackingList + private val _mistakeDepartmentList by lazy { MutableLiveData() } val mistakeDepartmentList: LiveData get() = _mistakeDepartmentList @@ -80,6 +86,20 @@ class InventaryViewModel(val context: Context) : BaseViewModel(context) { }) } + fun itemShelvingBuyerGetByItemPacking() { + salix.getBuyersByItemPackingType( + """{"fields":["itemPackingTypeFk","id","workerFk"], + |"include":{"relation":"worker","scope":{"fields":["id"], + |"include":{"relation":"user","scope":{"fields":["nickname"]}}}}}""".trimMargin() + ) + .enqueue(object : SalixCallback>(context) { + override fun onSuccess(response: Response>) { + _buyersByItemPackingList.value = response.body()?.let { BuyerList(it) } + } + + }) + } + val loadInventaryList: LiveData> = _inventaryList.map { Event(it) } fun getInventory(buyerFk: Number, warehouseFk: Int) { diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/login/fragment/LoginFragment.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/login/fragment/LoginFragment.kt index 8e1d8961..f3f3491c 100644 --- a/app/src/main/java/es/verdnatura/presentation/view/feature/login/fragment/LoginFragment.kt +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/login/fragment/LoginFragment.kt @@ -22,6 +22,7 @@ import es.verdnatura.domain.ConstAndValues.RENEWINTERVAL import es.verdnatura.domain.ConstAndValues.RENEWPERIOD import es.verdnatura.domain.ConstAndValues.TOKEN import es.verdnatura.domain.ConstAndValues.TOKENCREATED +import es.verdnatura.domain.ConstAndValues.TOKENMULTIMEDIA import es.verdnatura.domain.ConstAndValues.TTL import es.verdnatura.domain.ConstAndValues.USER import es.verdnatura.domain.ConstAndValues.WORKFORMSELECTED @@ -484,6 +485,15 @@ class LoginFragment() : } } + multimediaTokenResponse.observe(viewLifecycleOwner) { + runBlocking { + mobileApplication.dataStoreApp.editDataStoreKey( + TOKENMULTIMEDIA, + it.multimediaToken.id + ) + + } + } loginSalixItem.observe(viewLifecycleOwner) { @@ -514,6 +524,7 @@ class LoginFragment() : app.userPassword = binding.edittextPassword.text.toString() viewModel.getAccessTokenConfigs() + viewModel.getMultimedaToken() } } loadAccessConfigSalixList.observe(viewLifecycleOwner) { event -> diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/login/fragment/LoginViewModel.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/login/fragment/LoginViewModel.kt index 9892daf0..4f366a5c 100644 --- a/app/src/main/java/es/verdnatura/presentation/view/feature/login/fragment/LoginViewModel.kt +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/login/fragment/LoginViewModel.kt @@ -23,6 +23,7 @@ import es.verdnatura.presentation.view.feature.login.model.AccessConfigSalixList import es.verdnatura.presentation.view.feature.login.model.DataUserSalix import es.verdnatura.presentation.view.feature.login.model.LoginDevice import es.verdnatura.presentation.view.feature.login.model.LoginSalixVO +import es.verdnatura.presentation.view.feature.login.model.MultimediaTokenResponse import es.verdnatura.presentation.view.feature.login.model.OperatorAdd import es.verdnatura.presentation.view.feature.login.model.OperatorSalix import es.verdnatura.presentation.view.feature.login.model.RenewToken @@ -58,13 +59,16 @@ class LoginViewModel(val context: Context) : BaseViewModel(context) { get() = _workerOperator private val _accessConfigSalixList by lazy { MutableLiveData() } - private val _renewTokenResponse by lazy { MutableLiveData() } val renewTokenResponse: LiveData get() = _renewTokenResponse val loadAccessConfigSalixList: LiveData> = _accessConfigSalixList.map { Event(it) } + private val _multimediaTokenResponse by lazy { MutableLiveData() } + val multimediaTokenResponse: LiveData + get() = _multimediaTokenResponse + fun loginSalix(user: String, password: String) { salix.login(LoginSalixVO(user, password)) .enqueue(object : SalixCallback(context) { @@ -285,6 +289,21 @@ class LoginViewModel(val context: Context) : BaseViewModel(context) { }) } + fun getMultimedaToken( + ) { + + salix.getMultimediaToken() + .enqueue(object : SalixCallback(context) { + + override fun onSuccess(response: Response) { + _multimediaTokenResponse.value = response.body()?.let { + it + } + } + + }) + } + fun renewToken( ) { salix.renewToken().enqueue(object : SalixCallback(context) { diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/login/model/LoginItemVO.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/login/model/LoginItemVO.kt index fd0a2d2e..4daf004b 100644 --- a/app/src/main/java/es/verdnatura/presentation/view/feature/login/model/LoginItemVO.kt +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/login/model/LoginItemVO.kt @@ -115,4 +115,12 @@ class LoginDevice( data class NameWorker( val firstName: String, val lastName: String +) + +data class MultimediaTokenResponse( + val multimediaToken: MultimediaToken +) + +data class MultimediaToken( + val id: String, ) \ No newline at end of file diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/main/activity/MainActivity.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/main/activity/MainActivity.kt index 1b7b1b09..e2406613 100644 --- a/app/src/main/java/es/verdnatura/presentation/view/feature/main/activity/MainActivity.kt +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/main/activity/MainActivity.kt @@ -135,7 +135,7 @@ import es.verdnatura.presentation.view.feature.sacador.model.CollectionTicket import es.verdnatura.presentation.view.feature.sacador.model.CollectionVO import es.verdnatura.presentation.view.feature.ticket.fragment.TicketAdvanceFragment import es.verdnatura.presentation.view.feature.ubicador.fragment.AutomaticAddItemFragment -import es.verdnatura.presentation.view.feature.ubicador.fragment.UbicadorFragmentNew +import es.verdnatura.presentation.view.feature.ubicador.fragment.UbicadorFragment6869 import es.verdnatura.presentation.view.feature.workermistake.fragment.PackingMistakeFragment import es.verdnatura.presentation.view.feature.workermistake.fragment.WorkermistakeFragment import kotlinx.coroutines.DelicateCoroutinesApi @@ -543,9 +543,8 @@ class MainActivity : BaseActivity(), OnPasillerosItemClickL getString(R.string.titleChecker) -> { // Ya no se utiliza : addFragmentOnTop(ControladorFragment.newInstance()) - // if (mobileApplication.userId == 19591) { - println("Revisando nueva") + addFragmentOnTop( CollectionFragmentChecker.newInstance( CollectionVO(collectionFk = 0), @@ -674,8 +673,13 @@ class MainActivity : BaseActivity(), OnPasillerosItemClickL } getString(R.string.titleUbicator) -> { - addFragmentOnTop(UbicadorFragmentNew.newInstance(entryPoint)) + //addFragmentOnTop(UbicadorFragmentNew.newInstance(entryPoint)) + addFragmentOnTop(UbicadorFragment6869.newInstance(entryPoint)) } + //Tarea 6869 + /* getString(R.string.ubicatorNew) -> { + addFragmentOnTop(UbicadorFragment6869.newInstance(entryPoint)) + }*/ //Tarea 7855 getString(R.string.scanPreparedExpedition) -> { @@ -755,7 +759,10 @@ class MainActivity : BaseActivity(), OnPasillerosItemClickL getString(R.string.titleShelvingHistorical) -> { addFragmentOnTop(ItemShelvingLogFragment.newInstance(itemTitle)) - + } + //Tarea 7920 + getString(R.string.titleShelvingHistNew) -> { + addFragmentOnTop(ShelvingLogFragment.newInstance(itemTitle, LogType.ITEMSHELVING)) } getString(R.string.titleLogShelving) -> { @@ -823,7 +830,8 @@ class MainActivity : BaseActivity(), OnPasillerosItemClickL } getString(R.string.selfConsumption) -> { - addFragmentOnTop(UbicadorFragmentNew.newInstance(entryPoint, true)) + // addFragmentOnTop(UbicadorFragmentNew.newInstance(entryPoint, true)) + addFragmentOnTop(UbicadorFragment6869.newInstance(entryPoint, true)) } getString(R.string.titlePackingHolland) -> { @@ -1052,7 +1060,6 @@ class MainActivity : BaseActivity(), OnPasillerosItemClickL ) { when (type) { PREITEMPICKERTEST -> { - println("test presacador") //addFragmentOnTop(EndSacadorFragment.newInstance(collection, type)) addFragmentOnTop( SectorCollectionReserveFragment.newInstance( diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/paletizador/fragment/ExpeditionPalletDetailFragment.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/paletizador/fragment/ExpeditionPalletDetailFragment.kt index fdaa6aea..02fd9978 100644 --- a/app/src/main/java/es/verdnatura/presentation/view/feature/paletizador/fragment/ExpeditionPalletDetailFragment.kt +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/paletizador/fragment/ExpeditionPalletDetailFragment.kt @@ -44,7 +44,6 @@ class ExpeditionPalletDetailFragment( override fun getLayoutId(): Int = R.layout.fragment_expedition_pallet_detail override fun init() { - println("ExpeditionPalletDetail") customDialog = CustomDialog(requireContext()) binding.expeditionPalletDetailPallet.text = buildString { diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/paletizador/fragment/ExpeditionPalletFragment.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/paletizador/fragment/ExpeditionPalletFragment.kt index b77ec98f..1e3f6946 100644 --- a/app/src/main/java/es/verdnatura/presentation/view/feature/paletizador/fragment/ExpeditionPalletFragment.kt +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/paletizador/fragment/ExpeditionPalletFragment.kt @@ -59,7 +59,6 @@ class ExpeditionPalletFragment( override fun getLayoutId(): Int = R.layout.fragment_expedition_pallet override fun onCreate(savedInstanceState: Bundle?) { - println("ExpeditionPalletFragment") mperror = MediaPlayer.create((activity as MainActivity), R.raw.error) mpok = MediaPlayer.create((activity as MainActivity), R.raw.ok) super.onCreate(savedInstanceState) @@ -214,8 +213,6 @@ class ExpeditionPalletFragment( if (mperror != null) mperror!!.start() } - - } customDialogList.setValue("") ma.hideKeyboard(customDialogList.getEditText()) diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/paletizador/fragment/ExpeditionScanFragment.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/paletizador/fragment/ExpeditionScanFragment.kt index 1afd8045..2d389c0f 100644 --- a/app/src/main/java/es/verdnatura/presentation/view/feature/paletizador/fragment/ExpeditionScanFragment.kt +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/paletizador/fragment/ExpeditionScanFragment.kt @@ -71,7 +71,6 @@ class ExpeditionScanFragment( } override fun init() { - println("ExpeditionScanFragment") customDialog = CustomDialog(requireContext()) customDialogList = CustomDialogList(requireContext()) customDialogTwoButtons = CustomDialogTwoButtons(requireContext()) @@ -80,7 +79,11 @@ class ExpeditionScanFragment( ) ma.hideBottomNavigation(View.GONE) binding.mainToolbar.toolbarTitle.text = - getString(R.string.expeditionInfo, itemExpeditionTruckVO?.eta.orEmpty(), itemExpeditionTruckVO?.description.orEmpty()) + getString( + R.string.expeditionInfo, + itemExpeditionTruckVO?.eta.orEmpty(), + itemExpeditionTruckVO?.description.orEmpty() + ) setToolBar() setEvents() viewModel.expeditionScanList( @@ -121,7 +124,6 @@ class ExpeditionScanFragment( LinearLayoutManager(requireContext(), LinearLayoutManager.HORIZONTAL, false) } - override fun observeViewModel() { with(viewModel) { loadExpeditionScanList.observe(viewLifecycleOwner) { event -> diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/pasillero/fragment/PasilleroViewModel.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/pasillero/fragment/PasilleroViewModel.kt index 290bb800..4ca8bf67 100644 --- a/app/src/main/java/es/verdnatura/presentation/view/feature/pasillero/fragment/PasilleroViewModel.kt +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/pasillero/fragment/PasilleroViewModel.kt @@ -73,6 +73,15 @@ class PasilleroViewModel(context: Context) : BaseViewModel(context) { ) ) + /* if (userId == 19591) + _pasillerositem.add( + PasillerosItemVO( + R.drawable.ic_dashboard_black_24dp, + R.string.ubicatorNew, + R.string.titleUbicatorDescrip + + ) + )*/ //tarea 7855 _pasillerositem.add( @@ -514,13 +523,13 @@ class PasilleroViewModel(context: Context) : BaseViewModel(context) { ) ) //tarea 8099 - /* _pasillerositem.add( - PasillerosItemVO( - R.drawable.ic_salary_supplement, - R.string.salarySupplementTitle, - R.string.salarySupplementTitle - ) - )*/ + _pasillerositem.add( + PasillerosItemVO( + R.drawable.ic_salary_supplement, + R.string.salarySupplementTitle, + R.string.salarySupplementTitle + ) + ) } @@ -528,10 +537,19 @@ class PasilleroViewModel(context: Context) : BaseViewModel(context) { _pasillerositem.add( PasillerosItemVO( R.drawable.revision_icon, - R.string.titleShelvingHistorical, - R.string.titleShelvingHistDescrip + R.string.titleShelvingHistNew, + R.string.titleShelvingHistNew ) ) + + /* _pasillerositem.add( + PasillerosItemVO( + R.drawable.revision_icon, + R.string.titleShelvingHistorical, + R.string.titleShelvingHistDescrip + ) + )*/ + _pasillerositem.add( PasillerosItemVO( R.drawable.ic_history_orange, diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/precontrol/PreControladorFragment.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/precontrol/PreControladorFragment.kt index 1a2a988d..14cc19be 100644 --- a/app/src/main/java/es/verdnatura/presentation/view/feature/precontrol/PreControladorFragment.kt +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/precontrol/PreControladorFragment.kt @@ -70,7 +70,7 @@ class PreControladorFragment : "id" ).toString().toInt(), print = false, - source = type + source = if (type == "PRECHECKER") "PREVIOUS_CONTROL" else type ) } catch (ex: Exception) { getString(R.string.errorInput) diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/presacador/fragment/SectorCollectionReserveFragment.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/presacador/fragment/SectorCollectionReserveFragment.kt index 9c24830b..ec789975 100644 --- a/app/src/main/java/es/verdnatura/presentation/view/feature/presacador/fragment/SectorCollectionReserveFragment.kt +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/presacador/fragment/SectorCollectionReserveFragment.kt @@ -60,19 +60,12 @@ class SectorCollectionReserveFragment( } override fun init() { - println("hasToAdd $hasToAdd") - customDialogList = CustomDialogList(requireContext()) ma.hideBottomNavigation(View.GONE) binding.mainToolbar.toolbarTitle.text = title setEvents() setToolBar() - - println("reserve collec $collectionFk") - println("reserve collec onBack$onBack") - if (!onBack) { - println("check parkings $collectionFk") checkParkingsToPicker() } else { if (onBack) { diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/restaurant/RestaurantActivity.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/restaurant/RestaurantActivity.kt index 3e95ea3e..1f4bd47a 100644 --- a/app/src/main/java/es/verdnatura/presentation/view/feature/restaurant/RestaurantActivity.kt +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/restaurant/RestaurantActivity.kt @@ -2,14 +2,12 @@ package es.verdnatura.presentation.view.feature.restaurant import android.view.View import android.widget.Button -import com.google.gson.Gson import com.google.zxing.BarcodeFormat import com.journeyapps.barcodescanner.BarcodeEncoder import es.verdnatura.R import es.verdnatura.databinding.ActivityRestaurantViewBinding import es.verdnatura.domain.toast import es.verdnatura.presentation.base.BaseActivity -import es.verdnatura.presentation.view.feature.restaurant.model.UserMenu class RestaurantActivity : BaseActivity() { @@ -33,16 +31,27 @@ class RestaurantActivity : BaseActivity() { binding.imageQr.visibility = View.VISIBLE binding.txtOption.visibility = View.VISIBLE binding.txtOption.text = (view as Button).text.toString() - val userMenu = UserMenu( - user = mobileApplication.userId!!, - menu_id = view.tag.toString().toInt(), - menu = view.text.toString(), - name = mobileApplication.userName!! - ) + /* val userMenu = UserMenu( + user = mobileApplication.userId!!, + menu_id = view.tag.toString().toInt(), + menu = view.text.toString(), + name = mobileApplication.userName!! + )*/ + + val userMenuJson = StringBuilder() + .append("{") + .append("\"user\":").append(mobileApplication.userId).append(",") // Sin comillas + .append("\"menu_id\":").append(view.tag.toString().toInt()).append(",") // Sin comillas + .append("\"menu\":\"").append(view.text).append("\",") // Con comillas porque es texto + .append("\"name\":\"").append(mobileApplication.userName) + .append("\"") // Con comillas porque es texto + .append("}") + .toString() + try { val barcodeEncoder = BarcodeEncoder() val bitmap = barcodeEncoder.encodeBitmap( - Gson().toJson(userMenu), + userMenuJson, BarcodeFormat.QR_CODE, 400, 400 diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/restaurant/model/UserMenu.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/restaurant/model/UserMenu.kt index 42157440..631babb9 100644 --- a/app/src/main/java/es/verdnatura/presentation/view/feature/restaurant/model/UserMenu.kt +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/restaurant/model/UserMenu.kt @@ -1,8 +1,10 @@ package es.verdnatura.presentation.view.feature.restaurant.model +import com.google.gson.annotations.SerializedName + data class UserMenu( - val user: Int, - val menu_id: Int, - val menu: String, - val name: String + @SerializedName("user") val user: Int, + @SerializedName("menu_id") val menu_id: Int, + @SerializedName("menu") val menu: String, + @SerializedName("name") val name: String ) \ No newline at end of file diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/roadmap/fragment/StopMapListFragment.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/roadmap/fragment/StopMapListFragment.kt index 00c0f2ab..cfcc4a9a 100644 --- a/app/src/main/java/es/verdnatura/presentation/view/feature/roadmap/fragment/StopMapListFragment.kt +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/roadmap/fragment/StopMapListFragment.kt @@ -138,15 +138,6 @@ class StopMapListFragment( with(viewModel) { loadStopMapTruckList.observe(viewLifecycleOwner) { event -> event.getContentIfNotHandled().notNull { - for (item in it.list) { - println("llista") - println("llista $item") - println("llista addressFk ${item.addressFk}") - println("llista id" + item.id) - println("llista address" + item.address) - println("llista client id" + item.address?.address?.client) - println("llista mobile " + item.address?.address?.mobile) - } showRoadMapList(it) } } @@ -189,8 +180,6 @@ class StopMapListFragment( } TruckAction.GOTOMAPS -> { - println("locationMaps") - val uri = "geo:0,0?q=" + item.address?.address?.nickname + " " + item.address?.address?.street + " " + item.address?.address?.city + " " + item.address?.address?.postalCode val locationIntent = Intent(Intent.ACTION_VIEW, Uri.parse(uri)) diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/sacador/fragment/SacadorFragmentNew.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/sacador/fragment/SacadorFragmentNew.kt index 0017d060..325fca9c 100644 --- a/app/src/main/java/es/verdnatura/presentation/view/feature/sacador/fragment/SacadorFragmentNew.kt +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/sacador/fragment/SacadorFragmentNew.kt @@ -264,7 +264,6 @@ class SacadorFragmentNew( } "PREITEMPICKERTEST" -> { - println("SacadorFragmentNew sectorCollectionGET") // viewModel.sectorCollectionGet() viewModel.sectorCollectionPartial() } diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/sacador/model/TicketItemVO.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/sacador/model/TicketItemVO.kt index 5a6cab61..2ed5f732 100644 --- a/app/src/main/java/es/verdnatura/presentation/view/feature/sacador/model/TicketItemVO.kt +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/sacador/model/TicketItemVO.kt @@ -68,7 +68,8 @@ data class Sale( var isPicked: Int = 0, var accumulatedQuantity: Int = 0, var totalItemShelving: Int = 0, - var currentItemShelving: Int = 0 + var currentItemShelving: Int = 0, + var stateCode: String? = "" ) @@ -112,8 +113,10 @@ class TicketSalix( var agencyName: String = "", var salesPersonFk: String = "", var sales: List = listOf(), - @SerializedName(value = "observations", alternate = ["observaciones"]) - var observations: String = "", + @SerializedName( + value = "observations", + alternate = ["observaciones"] + ) var observations: String = "", ) @@ -177,8 +180,10 @@ class TicketVO( var agencyName: String = "", var salesPersonFk: String = "", var sales: List = listOf(), - @SerializedName(value = "observations", alternate = ["observaciones"]) - var observations: String = "", + @SerializedName( + value = "observations", + alternate = ["observaciones"] + ) var observations: String = "", var isAdvanced: Int? = 0, var parkingCode: String? = "" @@ -279,8 +284,7 @@ class PlacementSupplyListVO( ) class MistakeTypeVO( - var id: Int, - var description: String + var id: Int, var description: String ) class MistakeTypeListVO( @@ -292,16 +296,11 @@ class TicketStateList( ) data class TicketStateSalix( - val ticketFk: Int, - val alertLevel: Int, - val code: String, - val stateFk: Int, - val userFk: Int + val ticketFk: Int, val alertLevel: Int, val code: String, val stateFk: Int, val userFk: Int ) { @RequiresApi(Build.VERSION_CODES.O) var created: String = "" - @RequiresApi(Build.VERSION_CODES.O) - get() { + @RequiresApi(Build.VERSION_CODES.O) get() { return field.isoToString() } diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/ubicador/adapter/UbicadorAdapter6869.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/ubicador/adapter/UbicadorAdapter6869.kt new file mode 100644 index 00000000..cf11beae --- /dev/null +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/ubicador/adapter/UbicadorAdapter6869.kt @@ -0,0 +1,131 @@ +package es.verdnatura.presentation.view.feature.ubicador.adapter + +import android.annotation.SuppressLint +import android.view.LayoutInflater +import android.view.ViewGroup +import androidx.core.content.ContextCompat +import androidx.recyclerview.widget.RecyclerView +import es.verdnatura.R +import es.verdnatura.databinding.ItemUbicationRow6869Binding +import es.verdnatura.presentation.common.OnMoreClickListener6869 +import es.verdnatura.presentation.common.OnPasillerosItemClickListener +import es.verdnatura.presentation.common.OnVisibleClickListener6869 +import es.verdnatura.presentation.common.loadUrl +import es.verdnatura.presentation.view.feature.pasillero.model.PasillerosItemVO +import es.verdnatura.presentation.view.feature.ubicador.model.ItemShelving + +class UbicadorAdapter6869( + private val items: List, + private val onPasillerosItemClickListener: OnPasillerosItemClickListener, + private val onVisibleClickListener: OnVisibleClickListener6869, + private val onMoreClickListener: OnMoreClickListener6869, + private val urlImage: String? = null +) : RecyclerView.Adapter() { + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemHolder { + return ItemHolder( + ItemUbicationRow6869Binding.inflate(LayoutInflater.from(parent.context), parent, false) + ) + } + + override fun getItemCount() = items.size + + override fun onBindViewHolder(holder: ItemHolder, position: Int) { + holder.bind(items[position]) + } + + inner class ItemHolder( + val binding: ItemUbicationRow6869Binding + ) : RecyclerView.ViewHolder(binding.root) { + private val res = binding.root.context.resources + + @SuppressLint("SetTextI18n") + fun bind(item: ItemShelving) { + binding.apply { + this.item = item + multiText.text = "${item.stickers}x${item.packing}" + + if (urlImage != null) imgItem.loadUrl("http:$urlImage/catalog/200x200/${item.item.id}") + imgItem.setOnClickListener { + onPasillerosItemClickListener.onPasillerosItemClickListener( + PasillerosItemVO( + title = + R.string.itemSearch + + ), item.item.id.toString() + ) + } + + layerVisible.setOnClickListener { + onVisibleClickListener.onVisibleClickListener(item) + } + + if (item.visible == 0) { + visibleText.setTextColor( + ContextCompat.getColor( + visibleText.context, + R.color.verdnatura_brown_grey + ) + ) + + } else { + visibleText.setTextColor( + ContextCompat.getColor( + visibleText.context, + R.color.verdnatura_pumpkin_orange + ) + ) + } + + moreImg.setOnClickListener { + onMoreClickListener.onMoreClickListener(item) + } + namelayout.setOnClickListener { + onPasillerosItemClickListener.onPasillerosItemClickListener( + PasillerosItemVO( + title = R.string.itemSearch + ), item.item.id.toString() + ) + } + + if (item.isChecked != null) { + + when (item.isChecked) { + 0 -> itemRowLayout.setBackgroundColor( + ContextCompat.getColor( + visibleText.context, + R.color.verdnatura_red_salix + ) + ) + + in 1..Int.MAX_VALUE -> + if (item.visible == 0) { + itemRowLayout.setBackgroundColor( + ContextCompat.getColor( + visibleText.context, + R.color.verdnatura_dark_sky_blue + ) + ) + } else { + itemRowLayout.setBackgroundColor( + ContextCompat.getColor( + visibleText.context, + R.color.verdnatura_dark_green_verdnatura + ) + ) + } + + } + } else { + itemRowLayout.setBackgroundColor( + ContextCompat.getColor( + visibleText.context, + R.color.verdnatura_black_5 + ) + ) + } + + } + } + } +} \ No newline at end of file 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 new file mode 100644 index 00000000..e6895a12 --- /dev/null +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/ubicador/fragment/UbicadorFragment6869.kt @@ -0,0 +1,1312 @@ +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 +import android.view.inputmethod.EditorInfo +import android.widget.ImageView +import android.widget.Toast +import androidx.recyclerview.widget.LinearLayoutManager +import es.verdnatura.R +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 +import es.verdnatura.presentation.base.BaseFragment +import es.verdnatura.presentation.common.Action +import es.verdnatura.presentation.common.OnBarcodeRowClickListener +import es.verdnatura.presentation.common.OnMoreClickListener6869 +import es.verdnatura.presentation.common.OnOptionsSelectedListener +import es.verdnatura.presentation.common.OnPasillerosItemClickListener +import es.verdnatura.presentation.common.OnVisibleClickListener6869 +import es.verdnatura.presentation.common.PrinterDialogManager +import es.verdnatura.presentation.common.ToolBarAdapterTooltip +import es.verdnatura.presentation.common.hideKeyboard +import es.verdnatura.presentation.common.itemScanValue +import es.verdnatura.presentation.view.component.CustomDialog +import es.verdnatura.presentation.view.component.CustomDialogInput +import es.verdnatura.presentation.view.component.CustomDialogList +import es.verdnatura.presentation.view.component.CustomDialogTwoButtons +import es.verdnatura.presentation.view.component.CustomDialogUbicadorNew +import es.verdnatura.presentation.view.feature.articulo.adapter.BarcodeAdapter +import es.verdnatura.presentation.view.feature.articulo.model.BarcodeVO +import es.verdnatura.presentation.view.feature.pasillero.model.PasillerosItemVO +import es.verdnatura.presentation.view.feature.ubicador.adapter.UbicadorAdapter6869 +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") +class UbicadorFragment6869 : BaseFragment( + UbicadorViewModel::class +) { + private var shelvingFk: String = "" + private var isAutoSelf: Boolean = false + private var urlImage = "" + private var adapter: UbicadorAdapter6869? = null + private lateinit var customDialogInput: CustomDialogInput + private lateinit var customDialogUbicador: CustomDialogUbicadorNew + private lateinit var customDialogTwoButtons: CustomDialogTwoButtons + private var listItems: MutableList = mutableListOf() + private var listLocalItems: ArrayList = ArrayList() + private lateinit var customDialog: CustomDialog + private lateinit var customDialogOlder: CustomDialog + private var parking: String = "" + private var pasillerosItemClickListener: OnPasillerosItemClickListener? = null + private var isShelvinLogfromMainScreen = false + private var modeCheckUbication = false + private var itemScannedScreen: Long = 0 + private var isBack = false + var listIcons: ArrayList = ArrayList() + private lateinit var textWatcher: TextWatcher + private var buyScanned: String = "" + private lateinit var customDialogList: CustomDialogList + private var listShelvings: ArrayList = ArrayList() + private var listShelvingsAdapter: BarcodeAdapter? = null + private var locateMultipleShelvings: Boolean = false + + companion object { + private const val ARG_SHELVINGFK = "shelvingFk" + private const val ARG_ISAUTOSELF = "autoSelf" + fun newInstance(shelvingFk: String, isAutoSelf: Boolean = false) = + UbicadorFragment6869().apply { + arguments = Bundle().apply { + putString(ARG_SHELVINGFK, shelvingFk) + putBoolean(ARG_ISAUTOSELF, isAutoSelf) + } + } + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + arguments?.let { + shelvingFk = it.getString(ARG_SHELVINGFK).toString() + isAutoSelf = it.getBoolean(ARG_ISAUTOSELF) + } + } + + /*fun newInstance(entryPoint: String, autoSelf: Boolean = false) = + UbicadorFragmentNew(entryPoint, autoSelf) + }*/ + + override fun getLayoutId(): Int = R.layout.fragment_ubicador + override fun onPause() { + super.onPause() + isBack = true + } + + override fun onAttach(context: Context) { + if (context is OnPasillerosItemClickListener) pasillerosItemClickListener = context + super.onAttach(context) + + } + + override fun init() { + + setDialogs() + setEvents() + setToolBar() + ma.hideBottomNavigation(GONE) + viewModel.getImageConfig() + + if (shelvingFk.isNotEmpty()) { + isShelvinLogfromMainScreen = false + setIconsActions(true) + binding.mainToolbar.toolbarTitle.text = shelvingFk + viewModel.itemShelvingGet(shelvingFk) + binding.mainToolbar.switchButton.visibility = VISIBLE + } else { + isShelvinLogfromMainScreen = true + setIconsActions(false) + } + super.init() + } + + private fun setIconsActions(showIcons: Boolean) { + + binding.layoutIconsActions.visibility = if (showIcons) { + VISIBLE + } else { + GONE + } + setIcons(!showIcons) + } + + private fun setDialogs() { + customDialogInput = CustomDialogInput(requireContext()) + customDialog = CustomDialog(requireContext()) + customDialogOlder = CustomDialog(requireContext()) + customDialogTwoButtons = CustomDialogTwoButtons(requireContext()) + } + + private fun setToolBar() { + binding.mainToolbar.switchButton.visibility = GONE + binding.mainToolbar.toolbarTitle.text = if (!isAutoSelf) { + getString(R.string.locator) + } else { + getString(R.string.selfConsumption) + } + } + + private fun setIcons(isInitMenu: Boolean = false) { + + listIcons.clear() + val iconAdd = ImageView(context) + iconAdd.setImageResource(R.drawable.ic_add_black_24dp) + val iconAddMultiple = ImageView(context) + iconAddMultiple.setImageResource(R.drawable.ic_add_multiple) + val iconReload = ImageView(context) + iconReload.setImageResource(R.drawable.ic_autorenew_black_24dp) + val iconReset = ImageView(context) + iconReset.setImageResource(R.drawable.ic_remove_checks) + + binding.mainToolbar.switchButton.setOnCheckedChangeListener { buttonView, isChecked -> + if (binding.mainToolbar.toolbarTitle.text == getString(R.string.titleUbicator)) { + getString(R.string.scanShelving).toast(requireContext()) + binding.mainToolbar.switchButton.isChecked = false + } else { + modeCheckUbication = isChecked + binding.mainToolbar.switchButton.tooltipText = + if (isChecked) getString(R.string.activateModoChecking) else getString(R.string.allowCheckingMode) + binding.textinputlayoutMatricula.hint = + if (isChecked) getString(R.string.scanItem) else { + getString(R.string.scanPlate) + + } + if (!isChecked) { + listIcons.removeAt(listIcons.size - 1) + binding.mainToolbar.toolbarIcons.adapter!!.notifyItemRemoved(listIcons.size) + + } else { + listIcons.add(iconReset) + binding.mainToolbar.toolbarIcons.adapter!!.notifyItemInserted(listIcons.size - 1) + + } + } + } + + + iconReload.tooltipText = getTooltip(R.drawable.ic_autorenew_black_24dp) + iconAdd.tooltipText = + if (isInitMenu) getString(R.string.addItemMultipleShelving) else getString(R.string.addItemShelving) + iconAddMultiple.tooltipText = getTooltip(R.drawable.ic_add_multiple) + iconReset.tooltipText = getTooltip(R.drawable.ic_remove_checks) + + listIcons.add(iconAdd) + + if (!isInitMenu) { + listIcons.add(iconReload) + } else { + listIcons.add(iconAddMultiple) + } + locateMultipleShelvings = isInitMenu + + binding.mainToolbar.toolbarIcons.adapter = + ToolBarAdapterTooltip(listIcons, object : OnOptionsSelectedListener { + override fun onOptionsItemSelected(item: Drawable) { + + when (item) { + iconAdd.drawable -> showAddItemNew( + isEditItem = false, null + ) + + iconAddMultiple.drawable -> { + + ma.onPasillerosItemClickListener( + PasillerosItemVO( + title = R.string.addItemMultipleShelving, + ), entryPoint = getString(R.string.addItemMultipleShelving) + ) + } + + iconReload.drawable -> { + listItems.clear() + if (shelvingFk.isNotBlank()) { + binding.editPrioridad.setText("") + viewModel.itemShelvingGet( + shelvingFk + ) + } else { + getString(R.string.scanShelving).toast( + requireActivity(), Toast.LENGTH_SHORT + ) + } + } + + iconReset.drawable -> { + if (shelvingFk.isNotBlank()) { + val customDialogReset = CustomDialog(requireContext()) + customDialogReset.setTitle(getString(R.string.checkItemShelvingDescrip)) + .setDescription(getString(R.string.checkItemShelving)) + .setOkButton(getString(R.string.ok)) { + if (listItems.isNotEmpty()) + viewModel.itemShelvingDeleteChecked(listItems[0].shelvingFk) + customDialogReset.dismiss() + }.setKoButton(getString(R.string.cancel)) { + customDialogReset.dismiss() + + }.show() + } else { + ma.messageWithSound( + getString(R.string.scanPlate), + isError = true, + isPlayed = true, + isToasted = true + ) + } + } + } + } + + }) + binding.mainToolbar.toolbarIcons.layoutManager = + LinearLayoutManager(requireContext(), LinearLayoutManager.HORIZONTAL, false) + } + + @SuppressLint("SetTextI18n") + private fun setEvents() { + binding.mainToolbar.backButton.setOnClickListener { + ma.onMyBackPressed() + } + + setTooltips() + binding.editMatricula.requestFocus() + binding.editMatricula.setOnEditorActionListener { v, actionId, event -> + if (actionId == EditorInfo.IME_ACTION_SEARCH || actionId == EditorInfo.IME_ACTION_DONE || actionId == 0 || actionId == 5) { + if (binding.editMatricula.text.toString().isNotEmpty()) { + setIconsActions(true) + if (!modeCheckUbication || (modeCheckUbication && (binding.editMatricula.text.toString() + .isShelving()) && !binding.editMatricula.text!![0].isDigit()) + ) { + binding.mainToolbar.toolbarTitle.text = + binding.editMatricula.text.toString() + shelvingFk = binding.editMatricula.text.toString() + parking = "" + binding.editPrioridad.setText("") + isShelvinLogfromMainScreen = true + viewModel.itemShelvingGet( + binding.editMatricula.text.toString() + ) + } else { + try { + buyScanned = itemScanValue( + binding.editMatricula.text.toString(), arrayOf("buy"), "more" + ).toString() + viewModel.getIdFromCode( + code = buyScanned + ) + } catch (ex: Exception) { + ma.messageWithSound( + ex.message.toString(), isError = true, isPlayed = true + ) + } + + } + } + binding.mainToolbar.switchButton.visibility = VISIBLE + + binding.editMatricula.setText("") + ma.hideKeyboard(binding.editMatricula) + return@setOnEditorActionListener true + } + + return@setOnEditorActionListener false + } + + binding.editPrioridad.setOnEditorActionListener { v, actionId, event -> + if (actionId == EditorInfo.IME_ACTION_SEARCH || actionId == EditorInfo.IME_ACTION_DONE || actionId == 0 || actionId == 5) { + if (binding.editPrioridad.text.toString().isNotEmpty()) { + viewModel.shelvingPriorityUpdate( + binding.editPrioridad.toInt(), shelvingFk + ) + isBack = false + + } + ma.hideKeyboard(binding.editPrioridad) + } + + binding.editMatricula.requestFocus() + return@setOnEditorActionListener false + } + + + binding.automaticImg.setOnClickListener { + + if (shelvingFk.isNotBlank()) ma.onPasillerosItemClickListener( + PasillerosItemVO(title = R.string.titleAuto), entryPoint = shelvingFk + ) + else getString(R.string.scanShelving).toast( + requireActivity(), Toast.LENGTH_SHORT + ) + } + + binding.parkingImg.setOnClickListener { + if (shelvingFk.isNotBlank()) { + customDialogInput.setTitle(getString(R.string.parkingShelving)).setValue("") + .setOkButton( + getString( + R.string.parking + ) + ) { + customDialogActionParking() + + }.setKoButton(getString(R.string.cancel)) { + customDialogInput.dismiss() + }.show() + } else { + + getString(R.string.errorShelving).toast( + requireContext() + ) + } + customDialogInput.getEditText().requestFocus() + ma.hideKeyboard(customDialogInput.getEditText()) + + customDialogInput.getEditText().setOnEditorActionListener { v, actionId, event -> + if (actionId == EditorInfo.IME_ACTION_SEARCH || actionId == EditorInfo.IME_ACTION_DONE || actionId == 0) { + customDialogActionParking() + + return@setOnEditorActionListener true + } + false + } + + } + + binding.editImg.setOnClickListener { + if (shelvingFk.isNotBlank()) { + customDialogInput = CustomDialogInput(requireContext()) + customDialogInput.setTitle(getString(R.string.changeShelving)).setValue("") + .setOkButton(getString(R.string.save)) { + if (customDialogInput.getValue().isNotBlank()) { + customDialogActionChange() + } else { + getString(R.string.errorShelving).toast( + requireContext() + ) + } + customDialogInput.dismiss() + }.setKoButton(getString(R.string.cancel)) { + customDialogInput.dismiss() + }.show() + } else { + getString(R.string.errorShelving).toast( + requireContext() + ) + } + customDialogInput.getEditText().requestFocus() + ma.hideKeyboard(customDialogInput.getEditText()) + + customDialogInput.getEditText().setOnEditorActionListener { v, actionId, event -> + if (actionId == EditorInfo.IME_ACTION_SEARCH || actionId == EditorInfo.IME_ACTION_DONE || actionId == 0) { + customDialogActionChange() + return@setOnEditorActionListener true + } + false + } + + } + + binding.deleteImg.setOnClickListener { + if (shelvingFk.isNotBlank()) { + val customDialogDelete = CustomDialog(requireContext()) + customDialogDelete.setTitle(getString(R.string.empty)) + .setDescription(getString(R.string.operationNoReturn)) + .setOkButton(getString(R.string.empty)) { + if (listItems.isNotEmpty()) { + viewModel.clearShelvingList( + //Tarea 7920 + listItems[0].shelvingFk.toString() ?: shelvingFk + ) + } + + listItems.forEach { + it.stickers = 0 + it.visible = 0 + it.available = 0 + } + + + if (adapter != null) { + adapter!!.notifyDataSetChanged() + } + customDialogDelete.dismiss() + } + + customDialogDelete.setKoButton(getString(R.string.cancel)) { + customDialogDelete.dismiss() + }.show() + } else { + getString(R.string.errorShelving).toast( + requireContext() + ) + + } + + } + } + + private fun customDialogActionParking() { + parking = customDialogInput.getValue() + //tarea 6964 + viewModel.getItemsByReviewOrder( + shelvingFk, customDialogInput.getValue(), itemFk = null, action = Action.PARKINEAR + ) + + customDialogInput.dismiss() + } + + private fun customDialogActionChange() { + + //Tarea 7920 + /* if (listItems.isNotEmpty()) { + viewModel.shelvingChangeSalix( + shelvingFk, customDialogInput.getValue() + ) + } else {*/ + viewModel.getShelvingFkFromCode( + listItems[0].shelvingFk, customDialogInput.getValue() + ) + // } + shelvingFk = customDialogInput.getValue() + + customDialogInput.dismiss() + } + + private fun checkUbications(itemScanned: Long) { + itemScannedScreen = itemScanned + val listInt: ArrayList = ArrayList() + + if (listItems.none { it.item.id == itemScanned }) { + try { + listInt.add(buyScanned.toLong()) + } catch (_: Exception) { + } + + } else { + listItems.sortedBy { it.isChecked }.forEachIndexed { index, item -> + if (item.item.id == itemScanned) { + item.isChecked = 1 + listInt.add(item.item.id) + ma.messageWithSound( + "", isError = false, isPlayed = true, titleWithError = "", false + ) + } + } + + } + if (listInt.isNotEmpty()) { + viewModel.itemShelvingAddList( + shelvingFk, + "" + listInt + "", + true, + mobileApplication.dataStoreApp.readDataStoreKey(WAREHOUSEFK) + ) + } + + adapter!!.notifyDataSetChanged() + } + + private fun setTooltips() { + + binding.editImg.tooltipText = getTooltip(R.drawable.ic_mode_edit_black_24dp) + binding.deleteImg.tooltipText = getTooltip(R.drawable.ic_delete_forever_black_24dp) + binding.editPrioridad.tooltipText = getString(R.string.changePriority) + binding.parkingImg.tooltipText = getTooltip(R.drawable.ic_local_parking_black_24dp) + binding.automaticImg.tooltipText = getTooltip(R.drawable.ic_flash_auto_black_24dp) + + } + + @SuppressLint("SetTextI18n") + override fun observeViewModel() { + + with(viewModel) { + + loadShelvingGet.observe(viewLifecycleOwner) { event -> + listItems.clear() + event.getContentIfNotHandled().notNull { + if (isShelvinLogfromMainScreen) { + viewModel.shelvingLogAdd(shelvingFk) + } + listItems.addAll(it.itemShelving!!) + listItems.forEach { itemShelvings -> + if (itemShelvings.description.isNullOrEmpty()) { + itemShelvings.description = itemShelvings.item.longName + ?: "${itemShelvings.item.name ?: ""} ${itemShelvings.item.size ?: ""}" + } + itemShelvings.stickers = + ceil(((itemShelvings.visible).toDouble() / itemShelvings.packing.toDouble())).toInt() + } + val totalStickers = listItems.sumOf { item -> item.stickers!! } + parking = it.parking?.code ?: "" + + binding.mainToolbar.toolbarTitle.text = + shelvingFk.uppercase() + getString(R.string.pUppercase) + parking + getString( + R.string.label + ) + totalStickers + if (listItems.isNotEmpty()) binding.editPrioridad.setText(it.priority.toString()) + + if (!binding.mainToolbar.switchButton.isChecked && listItems.isNotEmpty()) { + listItems = listItems.asReversed() + } + + if (listItems.isNotEmpty()) { + binding.deleteImg.visibility = VISIBLE + + } else { + binding.deleteImg.visibility = View.INVISIBLE + } + setAdapter(listItems) + setPosition() + + } + } + loadAddList.observe(viewLifecycleOwner) { event -> + event.getContentIfNotHandled().notNull { + viewModel.itemShelvingGet(shelvingFk) + } + } + + //parking, isChecked, responseOlder, responseMake Add + responseUbicator.observe(viewLifecycleOwner) { + + if (shelvingFk.isNotEmpty()) { + binding.mainToolbar.toolbarTitle.text = shelvingFk + viewModel.itemShelvingGet( + shelvingFk + ) + + } + } + responseLogAdd.observe(viewLifecycleOwner) { + isShelvinLogfromMainScreen = false + if (it == false) { + setIconsActions(false) + } + } + loadResponseCode.observe(viewLifecycleOwner) { event -> + event.getContentIfNotHandled().notNull { + checkUbications(it.toLong()) + } + } + + loadImageConfig.observe(viewLifecycleOwner) { event -> + event.getContentIfNotHandled().notNull { + urlImage = it + } + } + + loadAddList.observe(viewLifecycleOwner) { + + if (shelvingFk.isNotEmpty()) { + binding.mainToolbar.toolbarTitle.text = shelvingFk + viewModel.itemShelvingGet( + shelvingFk + ) + + } + } + + loadGetParkingResponse.observe(viewLifecycleOwner) { + + if (shelvingFk.isNotEmpty()) { + binding.mainToolbar.toolbarTitle.text = shelvingFk + viewModel.itemShelvingGet( + shelvingFk + ) + + } + } + + loadShelvingListItemNewer.observe(viewLifecycleOwner) { event -> + event.getContentIfNotHandled().notNull { + + if (it.list.isNotEmpty()) { + + val oldList = it.list.filter { item -> + item.itemCreated!!.contains("old", 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 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 resultStringOld = oldList.joinToString(separator = "\n") + val resultStringNew = newList.joinToString(separator = "\n") + + 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) + } + } + + loadResponseHasOlder.observe(viewLifecycleOwner) { event -> + event.getContentIfNotHandled().notNull { + + customDialogOlder.setTitle(getString(R.string.info)).setDescription( + getString( + R.string.itemOlderInfo, responseHasOlder.value!!.action + ) + ).setOkButton( + getString(R.string.ok) + ) { + when (responseHasOlder.value!!.action) { + Action.PARKINEAR -> viewModel.setParking( + responseHasOlder.value!!.shelvingFkIn, parking + ) + + Action.TRANSFERIR -> viewModel.itemShelvingTransfer( + responseHasOlder.value!!.itemFk!!, + responseHasOlder.value!!.shelvingFkOut!! + ) + } + customDialogOlder.dismiss() + + }.setKoButton(getString(R.string.cancel)) { + customDialogOlder.dismiss() + }.show() + } + } + loadBuyUltimateResponse.observe(viewLifecycleOwner) { event -> + event.getContentIfNotHandled().notNull { + ma.messageWithSound( + getString(R.string.errorPrintBuy), isError = true, isPlayed = true + ) + } + } + } + + } + + private fun setPosition() { + if (modeCheckUbication) { + listItems.sortedBy { it.isChecked }.forEachIndexed { index, item -> + if (item.item.id == itemScannedScreen) { + binding.locationRecyclerview.scrollToPosition( + index + ) + } + } + + } else { + (binding.locationRecyclerview.layoutManager as LinearLayoutManager).scrollToPosition( + 0 + ) + } + } + + private fun setAdapter(listItems: MutableList) { + listItems.sortWith { item1, item2 -> + val compareItem = item1.item.id.compareTo(item2.item.id) + if (compareItem == 0) { + item2.visible.compareTo(item1.visible) // Invertir el orden + } else { + compareItem + } + } + adapter = UbicadorAdapter6869( + listItems.sortedBy { it.isChecked }, + onPasillerosItemClickListener = pasillerosItemClickListener!!, + onVisibleClickListener = object : OnVisibleClickListener6869 { + override fun onVisibleClickListener(item: ItemShelving) { + + if (!isAutoSelf) { + + if (item.isChecked == 0) { + viewModel.updateIsChecked(itemShelvingFk = item.id) + } + + showAddItemNew( + itemUbicador = item, isEditItem = true + ) + } else { + + showAutoSelfConsumption(item) + } + + } + + }, + onMoreClickListener = object : OnMoreClickListener6869 { + + override fun onMoreClickListener(item: ItemShelving) { + showMoreOptions(item) + } + + }, + urlImage = urlImage + ) + + binding.locationRecyclerview.adapter = adapter + binding.locationRecyclerview.layoutManager = LinearLayoutManager( + requireContext(), LinearLayoutManager.VERTICAL, false + ) + } + + private fun showAutoSelfConsumption(item: ItemShelving) { + + customDialogInput.setInputText(InputType.TYPE_CLASS_NUMBER) + customDialogInput.setTitle(getString(R.string.selfConsumption)) + customDialogInput.setDescription(getString(R.string.quantityTake)).setValue("") + .setOkButton(getString(R.string.take)) { + try { + if (customDialogInput.getValue().toInt() > 0) { + val quantity = + if (item.visible - customDialogInput.getValue().toInt() > 0) { + item.visible - customDialogInput.getValue().toInt() + } else { + 0 + } + viewModel.itemShelvingSelfConsumption( + shelvingFk, item.item.id, quantity + ) + } else { + throw Exception("") + } + } catch (err: Exception) { + (getString(R.string.errorQuantity).toast(requireContext())) + } + customDialogInput.dismiss() + + }.setKoButton(getString(R.string.cancel)) { + customDialogInput.dismiss() + }.show() + customDialogInput.setFocusText() + } + + private fun showAddItemNew( + isEditItem: Boolean, + itemUbicador: ItemShelving?, + ) { + customDialogUbicador = CustomDialogUbicadorNew(requireContext()) + + + if (isEditItem) { + customDialogUbicador.setTitle(getString(R.string.editItem) + itemUbicador!!.item.id) + .setItemValue(itemUbicador.item.id.toString()) + .setPackingValue(itemUbicador.packing.toString()) + .setVisibleValue(itemUbicador.visible.toString()) + //.setEtiquetaValue((itemUbicador.visible / (itemUbicador.packing ?: 0)).toString()) + .setEtiquetaValue(itemUbicador.stickers.toString()).setUnits( + if (itemUbicador.stickers != null && itemUbicador.stickers != 0) { + (itemUbicador.visible % itemUbicador.stickers!!).toString() + } else { + "0" + } + ).setOkButton(getString(R.string.save)) { + setShowAddItemAction(itemUbicador) + }.setKoButton(getString(R.string.close)) { + customDialogUbicador.dismiss() + }.show() + } else { + customDialogUbicador.setTitle(getString(R.string.newItem)) + .setOkButton(getString(R.string.save)) { + setShowAddItemAction(null) + }.setKoButton(getString(R.string.close)) { + customDialogUbicador.dismiss() + }.show() + } + + customDialogUbicador.getEditItem().setOnEditorActionListener { v, actionId, event -> + if (actionId == EditorInfo.IME_ACTION_SEARCH || actionId == EditorInfo.IME_ACTION_DONE || actionId == 0) { + + if (customDialogUbicador.getItemValue().isNotEmpty()) { + try { + + customDialogUbicador.setItemValue( + itemScanValue( + customDialogUbicador.getItemValue(), arrayOf("buy"), "more" + ).toString() + ) + + } catch (ex: Exception) { + ma.messageWithSound( + ex.message.toString(), isError = true, isPlayed = true + ) + customDialogUbicador.setItemValue("") + } + } + + return@setOnEditorActionListener true + } + + customDialogUbicador.getPackingItem().requestFocus() + } + + setWatcher() + customDialogUbicador.getEditItem().requestFocus() + ma.hideKeyboard(customDialogUbicador.getEditItem()) + + } + + private fun setShowAddItemAction(itemUbicador: ItemShelving?) { + try { + + if (customDialogUbicador.getItemValue() + .isEmpty() || customDialogUbicador.getPackingValue().isBlank() + ) { + getString(R.string.itemAndPackingMandatory).toast(context) + } else { + saveItemCall(customDialogUbicador, itemUbicador) + customDialogUbicador.dismiss() + } + } catch (ex: Exception) { + ex.message.toString().toast(requireContext()) + } + } + + private fun saveItemCall( + customDialogUbicador: CustomDialogUbicadorNew, + itemUbicador: ItemShelving?, + ) { + + if (itemUbicador?.id == null) { + //item nuevo sin shelving + try { + if (locateMultipleShelvings) insertShelvingsForUbicator( + customDialogUbicador.getItemValue().toLong(), + customDialogUbicador.getVisibleValue().toInt(), + customDialogUbicador.getPackingValue().toIntOrNull() + + ) else { + + viewModel.itemShelvingAdd( + shelving = shelvingFk, + item = customDialogUbicador.getItemValue().toLong(), + quantity = customDialogUbicador.getVisibleValue().toInt(), + packing = customDialogUbicador.getPackingValue().toIntOrNull(), + warehouse = mobileApplication.dataStoreApp.readDataStoreKey(WAREHOUSEFK), + grouping = null + ) + } + + } catch (ex: Exception) { + ma.messageWithSound( + getString(R.string.reviewData), + isError = true, + isPlayed = true, + isToasted = true + ) + } + } else { + viewModel.itemShelvingMakeEdit( + customDialogUbicador.getVisibleValue().toIntOrNull()!!, + customDialogUbicador.getPackingValue().toInt(), + itemUbicador.id, + itemUbicador.grouping, + updateAvailable( + itemUbicador.available, + customDialogUbicador.getVisibleValue().toIntOrNull(), + itemUbicador.visible + ) + ) + + } + + } + + private fun updateAvailable(newAvailable: Int?, newVisible: Int?, oldVisible: Int?): Int { + val available = newAvailable ?: 0 + val visible = newVisible ?: 0 + val old = oldVisible ?: 0 + return maxOf(available + visible - old, 0) + } + + private fun insertShelvingsForUbicator(barCode: Number, visible: Int, packing: Int?) { + if (listShelvings.isNotEmpty()) listShelvings.clear() + customDialogList = CustomDialogList(requireContext()) + customDialogList.setTitle( + getString(R.string.shelvingsLocate) + ) + customDialogList.setDescription( + getString(R.string.scanShelvingsLocate) + ).setOkButton(getString(R.string.locate)) { + listShelvings.forEach { + viewModel.itemShelvingAdd( + shelving = it.code!!, + item = barCode, + quantity = visible, + packing = packing, + warehouse = mobileApplication.dataStoreApp.readDataStoreKey(WAREHOUSEFK), + grouping = null + ) + + } + customDialogList.dismiss() + + }.setKoButton(getString(R.string.cancel)) { + ma.hideKeyboard(customDialogList.getEditText()) + customDialogList.dismiss() + + }.setValue("").show() + + customDialogList.getEditText().requestFocus() + ma.hideKeyboard(customDialogList.getEditText()) + + customDialogList.getEditText().setOnEditorActionListener { v, actionId, event -> + if (actionId == EditorInfo.IME_ACTION_SEARCH || actionId == EditorInfo.IME_ACTION_DONE || actionId == 0 || actionId == 5) { + if (customDialogList.getValue().isNotEmpty()) { + + try { + customDialogList.setValue( + itemScanValue( + customDialogList.getValue(), arrayOf("saleGroup"), field = "id" + ).toString() + ) + if (customDialogList.getValue().isShelving()) { + if (listShelvings.firstOrNull { it.code == customDialogList.getValue() } == null) { + listShelvings.add(BarcodeVO(code = customDialogList.getValue()))/*viewModel.sectorCollectionSaleGroupAdd( + customDialogList.getValue().toInt(), collectionFk + )*/ + } else { + throw Exception(getString(R.string.errorRepeatedShelving)) + } + } else { + throw Exception() + } + + } catch (ex: Exception) { + ma.messageWithSound( + getString(R.string.errorInput), + isError = true, + isPlayed = true, + isToasted = true + ) + listShelvings.removeAt(0) + } + + listShelvingsAdapter!!.notifyItemChanged(0) + } + customDialogList.setValue("") + ma.hideKeyboard(customDialogList.getEditText()) + return@setOnEditorActionListener true + } + false + } + + listShelvingsAdapter = BarcodeAdapter( + listShelvings, object : OnBarcodeRowClickListener { + override fun onBarcodeRowClickListener(item: BarcodeVO) { + + } + }, showDelete = false + ) + customDialogList.getRecyclerView().adapter = listShelvingsAdapter + + customDialogList.getRecyclerView().layoutManager = + LinearLayoutManager(requireContext(), LinearLayoutManager.VERTICAL, false) + + } + + private fun setWatcher() { + customDialogUbicador.addTextWatcher(customDialogUbicador.getPackingItem()) { s -> + + setValueVisible() + } + + customDialogUbicador.addTextWatcher(customDialogUbicador.getEtiquetaItem()) { s -> + + setValueVisible() + } + + customDialogUbicador.addTextWatcher(customDialogUbicador.getUnitsItem()) { s -> + + setValueVisible() + } + + } + + private fun setValueVisible() { + customDialogUbicador.setVisibleValue("") + customDialogUbicador.setVisibleValue( + (((customDialogUbicador.getEtiquetaValue().toIntOrNull() + ?: 0) * (customDialogUbicador.getPackingValue().toIntOrNull() + ?: 0)) + (customDialogUbicador.getUnitsValue().toIntOrNull() ?: 0)).toString() + ) + } + + private fun showMoreOptions(item: ItemShelving) { + customDialogTwoButtons.setTitle(item.item.id.toString()) + .setDescription(getString(R.string.selectAction)) + .setOkButton(getString(R.string.transfer)) { + customDialogInput.setTitle(getString(R.string.shelvingNew)) + .setDescription(getString(R.string.selectDestiny) + item.item.id).setValue("") + .setOkButton(getString(R.string.transfer)) { + customDialogTransferAction(item) + + }.setKoButton(getString(R.string.cancel)) { + customDialogInput.dismiss() + }.show() + customDialogInput.getEditText().requestFocus() + ma.hideKeyboard(customDialogInput.getEditText()) + customDialogInput.getEditText().setOnEditorActionListener { v, actionId, event -> + if (actionId == EditorInfo.IME_ACTION_SEARCH || actionId == EditorInfo.IME_ACTION_DONE || actionId == 0) { + customDialogTransferAction(item) + return@setOnEditorActionListener true + } + false + } + customDialogTwoButtons.dismiss() + }.setOkButtonTwo(getString(R.string.delete)) { + val customDialogConfirm = CustomDialog(requireContext()) + customDialogConfirm.setTitle(getString(R.string.confirm)).setDescription( + if (!isAutoSelf) { + getString(R.string.itemDeleteConfirm) + item.item.id + "?" + } else { + getString(R.string.deleteQuantity) + item.item.id + } + ).setOkButton(getString(R.string.delete)) { + if (!isAutoSelf) { + listItems.remove(item) + adapter!!.notifyItemRemoved(listItems.indexOf(item)) + viewModel.itemShelvingDelete( + item.id + ) + customDialogTwoButtons.dismiss() + customDialogConfirm.dismiss() + } else { + viewModel.itemShelvingSelfConsumption( + shelvingFk, item.id, 0 + ) + customDialogConfirm.dismiss() + customDialogTwoButtons.dismiss() + } + }.setKoButton(getString(R.string.cancel)) { + customDialogConfirm.dismiss() + customDialogTwoButtons.dismiss() + } + customDialogConfirm.show() + } + //Tarea 7266 + .setOkButtonThree(getString(R.string.print)) { + val printerDialogManager = PrinterDialogManager(requireContext()) + printerDialogManager.showPrintDialog( + item.item.id, + item.description ?: "" + ) { id, labelType, packing, copies -> + + if (item.buyFk == null) { + viewModel.buyUltimate( + itemFk = item.id, + warehouseFk = mobileApplication.dataStoreApp.readDataStoreKey( + WAREHOUSEFK + ), + dated = LocalDate.now() + .format( + DateTimeFormatter.ofPattern("yyyy-dd-MM") + ), + reportName = "LabelBuy", + printerFk = mobileApplication.dataStoreApp.readDataStoreKey( + ConstAndValues.PRINTERFK + ), + userFk = mobileApplication.userId!!, + priority = "normal", + copies = copies, + labelType = labelType, + packing = packing + ) + customDialogTwoButtons.dismiss() + } else { + printItem( + item.buyFk!!, labelType, packing, copies + ) + customDialogTwoButtons.dismiss() + } + } + customDialogInput.getEditText().requestFocus() + } + //Tarea 7763 + /* + .setOkButtonThree(getString(R.string.rename)) { + customDialogInput.setTitle(getString(R.string.itemNew)) + .setDescription(getString(R.string.scanItem)).setValue("") + .setOkButton(getString(R.string.rename)) { + + actionRename(item, customDialogInput.getValue()) + + }.setKoButton(getString(R.string.cancel)) { + customDialogInput.dismiss() + customDialogTwoButtons.dismiss() + }.show() + customDialogInput.getEditText().setOnEditorActionListener { _, actionId, _ -> + if (actionId == EditorInfo.IME_ACTION_SEARCH || actionId == EditorInfo.IME_ACTION_DONE || actionId == 0 || actionId == 5) { + + actionRename(item, customDialogInput.getValue()) + return@setOnEditorActionListener true + } + false + } + customDialogInput.getEditText().requestFocus() + } + */ + customDialogTwoButtons.setKoButton(getString(R.string.cancel)) { + customDialogTwoButtons.dismiss() + } + + customDialogTwoButtons.show() + } + + private fun printItem(id: Number?, labelType: String, packing: Int?, copies: Int?) { + + try { + viewModel.printItem( + reportName = "LabelBuy", + printerFk = mobileApplication.dataStoreApp.readDataStoreKey( + ConstAndValues.PRINTERFK + ), + userFk = mobileApplication.userId!!, + priority = "normal", + params = JSONObject().apply { + put("copies", copies) + put("id", id) + put("labelType", labelType) + put("packing", packing) + }.toString().replace("\"", "\\\"") + ) + } catch (ex: Exception) { + ma.messageWithSound(message = ex.message.toString(), isError = true, isPlayed = true) + } + hideKeyboard() + } + + private fun actionRename(item: ItemUbicador, itemScan: String) { + + if (itemScan.isNotEmpty()) { + + renameItem( + item, itemScanValue( + itemScan, arrayOf("buy"), "id" + ).toString().toLong() + ) + customDialogInput.dismiss() + customDialogTwoButtons.dismiss() + } else { + getString(R.string.scanItem).toast(requireContext()) + } + + } + + private fun renameItem(item: ItemUbicador, barCode: Long) { + try { + viewModel.getInfoFromBuy(item.id, buyFk = barCode) + } catch (ex: Exception) { + ma.messageWithSound(ex.message.toString(), isError = true, isPlayed = true) + + } + + } + + private fun customDialogTransferAction(item: ItemShelving) { + if (customDialogInput.getValue().isNotEmpty()) { + /*tearea 6964*/ + // } + /* viewModel.hasItemOlder( + shelvingFk = shelvingFk, + parking = customDialogInput.getValue(), + itemFk = item.id, + action = Action.TRANSFERIR + )*/ + viewModel.getParkingToTransfer( + shelvingFkTo = customDialogInput.getValue(), + itemShelvingFk = item.id, + itemFk = item.itemFk, + shelvingFkFrom = shelvingFk + ) + println("transfer item ${item.id}") + println("transfer carro ${customDialogInput.getValue()}") + /* viewModel.itemShelvingTransfer( + item.id, customDialogInput.getValue() + )*/ + listItems.remove(item) + adapter!!.notifyItemRemoved(listItems.indexOf(item)) + //adapter!!.notifyDataSetChanged() + customDialogInput.dismiss() + } else { + getString(R.string.wagonIncorrect).toast(requireContext()) + + } + } +} diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/ubicador/fragment/UbicadorFragmentNew.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/ubicador/fragment/UbicadorFragmentNew.kt index 76bb8fa4..f96cc6e5 100644 --- a/app/src/main/java/es/verdnatura/presentation/view/feature/ubicador/fragment/UbicadorFragmentNew.kt +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/ubicador/fragment/UbicadorFragmentNew.kt @@ -28,6 +28,7 @@ import es.verdnatura.presentation.common.OnMoreClickListenerNew import es.verdnatura.presentation.common.OnOptionsSelectedListener import es.verdnatura.presentation.common.OnPasillerosItemClickListener import es.verdnatura.presentation.common.OnVisibleClickListenerNew +import es.verdnatura.presentation.common.PrinterDialogManager import es.verdnatura.presentation.common.ToolBarAdapterTooltip import es.verdnatura.presentation.common.hideKeyboard import es.verdnatura.presentation.common.itemScanValue @@ -41,6 +42,9 @@ import es.verdnatura.presentation.view.feature.articulo.model.BarcodeVO import es.verdnatura.presentation.view.feature.pasillero.model.PasillerosItemVO import es.verdnatura.presentation.view.feature.ubicador.adapter.UbicadorAdapterNew import es.verdnatura.presentation.view.feature.ubicador.model.ItemUbicador +import org.json.JSONObject +import java.time.LocalDate +import java.time.format.DateTimeFormatter import kotlin.math.ceil @Suppress("UNUSED_ANONYMOUS_PARAMETER") @@ -120,7 +124,7 @@ class UbicadorFragmentNew : BaseFragment showAddItemNew( - isEditItem = false, null - ) + iconAdd.drawable -> { + showAddItemNew( + isEditItem = false, null + ) + } iconAddMultiple.drawable -> { - ma.onPasillerosItemClickListener( PasillerosItemVO( title = R.string.addItemMultipleShelving, @@ -233,7 +238,7 @@ class UbicadorFragmentNew : BaseFragment { - + listItems.clear() if (shelvingFk.isNotBlank()) { binding.editPrioridad.setText("") viewModel.itemShelvingListNew( @@ -252,7 +257,8 @@ class UbicadorFragmentNew : BaseFragment event.getContentIfNotHandled().notNull { @@ -665,9 +686,7 @@ class UbicadorFragmentNew : BaseFragment event.getContentIfNotHandled().notNull { ma.messageWithSound( - getString(R.string.errorPrintBuy), - isError = true, - isPlayed = true + getString(R.string.errorPrintBuy), isError = true, isPlayed = true ) } } @@ -780,8 +799,7 @@ class UbicadorFragmentNew : BaseFragment + //Tarea 7266 + .setOkButtonThree(getString(R.string.print)) { + val printerDialogManager = PrinterDialogManager(requireContext()) + printerDialogManager.showPrintDialog( + item.item, + item.description ?: "" + ) { id, labelType, packing, copies -> - if (item.buyFk == null) { - viewModel.buyUltimate( - itemFk = item.id, - warehouseFk = mobileApplication.dataStoreApp.readDataStoreKey( - WAREHOUSEFK - ), - dated = LocalDate.now() - .format( - DateTimeFormatter.ofPattern("yyyy-dd-MM") - ), - reportName = "LabelBuy", - printerFk = mobileApplication.dataStoreApp.readDataStoreKey( - ConstAndValues.PRINTERFK - ), - userFk = mobileApplication.userId!!, - priority = "normal", - copies = copies, - labelType = labelType, - packing = packing - ) - customDialogTwoButtons.dismiss() - } else { - printItem( - item.buyFk!!, labelType, packing, copies - ) - customDialogTwoButtons.dismiss() - } - } - customDialogInput.getEditText().requestFocus() - }*/ + if (item.buyFk == null) { + viewModel.buyUltimate( + itemFk = item.id, + warehouseFk = mobileApplication.dataStoreApp.readDataStoreKey( + WAREHOUSEFK + ), + dated = LocalDate.now() + .format( + DateTimeFormatter.ofPattern("yyyy-dd-MM") + ), + reportName = "LabelBuy", + printerFk = mobileApplication.dataStoreApp.readDataStoreKey( + ConstAndValues.PRINTERFK + ), + userFk = mobileApplication.userId!!, + priority = "normal", + copies = copies, + labelType = labelType, + packing = packing + ) + customDialogTwoButtons.dismiss() + } else { + printItem( + item.buyFk!!, labelType, packing, copies + ) + customDialogTwoButtons.dismiss() + } + } + customDialogInput.getEditText().requestFocus() + } //Tarea 7763 /* .setOkButtonThree(getString(R.string.rename)) { @@ -1150,7 +1168,12 @@ class UbicadorFragmentNew : BaseFragment> = _shelvingListNew.map { Event(it) } + private val _shelvingGet by lazy { MutableLiveData() } + val loadShelvingGet: LiveData> = + _shelvingGet.map { Event(it) } + + private val _imageConfig by lazy { MutableLiveData() } + val loadImageConfig: LiveData> = + _imageConfig.map { Event(it) } + private val _shelvingListItemNewer by lazy { MutableLiveData() } val loadShelvingListItemNewer: LiveData> = _shelvingListItemNewer.map { Event(it) } @@ -69,6 +81,10 @@ class UbicadorViewModel(val context: Context) : BaseViewModel(context) { val buyUltimateResponse: LiveData = _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 ) { @@ -85,63 +101,44 @@ class UbicadorViewModel(val context: Context) : BaseViewModel(context) { //Tarea 6869 fun itemShelvingGet( - shelvingFk: String + shelvingCode: String ) { - salix.itemShelvingGet( + salix.shelvingGet( filter = """{ - "fields":[ - "priority", - "parkingFk", - "code" - ], + "fields": + ["priority","parkingFk","code","id"], "include":[ - { - "relation":"parking", - "scope":{ - "fields":[ - "code" - ] - } - }, - { - "relation":"itemShelving", - "scope":{ - "fields":[ - "id", - "itemFk", - "visible", - "packing", - "grouping", - "isChecked", - "available", - "buyFk" - ], - "include":{ - "relation":"item", - "scope":{ - "fields":[ - "name", - "longName", - "size" - ] - } - } - } - } - ], - "where":{ - "code":"$shelvingFk" - } - }""".trim() - ) - .enqueue( - object : SalixCallback>(context) { - override fun onSuccess(response: Response>) { - _shelvingListNew.value = response.body()?.let { ItemUbicadorListNew(it) } - } + {"relation":"parking", + "scope":{"fields":["code"]}}, + {"relation":"itemShelving", + "scope":{"fields":["id","itemFk","visible","packing","grouping","isChecked","available","buyFk","shelvingFk"], + "include": + {"relation":"item", + "scope":{"fields":["name","longName","size"]}}}}], + "where":{"code":"$shelvingCode"}}""".trim() + ).enqueue( + object : SalixCallback(context) { + override fun onSuccess(response: Response) { + _shelvingGet.value = response.body() + } - }, - ) + }, + ) + } + + fun getImageConfig( + ) { + salix.getImageConfig( + ).enqueue( + object : SalixCallback(context) { + override fun onSuccess(response: Response) { + + _imageConfig.value = + response.body()!!.entrySet().first().value.asString + } + + }, + ) } fun shelvingPriorityUpdate( @@ -252,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 ) } } @@ -278,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 @@ -296,7 +398,7 @@ class UbicadorViewModel(val context: Context) : BaseViewModel(context) { } fun itemShelvingDeleteChecked( - vShelvingFk: String + vShelvingFk: Number ) { salix.itemShelvingsUpdate( @@ -340,7 +442,12 @@ class UbicadorViewModel(val context: Context) : BaseViewModel(context) { .enqueue(object : SalixCallback(context) { override fun onSuccess(response: Response) { - _responseLogAdd.value = response.message() + _responseLogAdd.value = true + } + + override fun onError(t: Throwable) { + _responseLogAdd.value = false + super.onError(t) } }) @@ -399,7 +506,24 @@ class UbicadorViewModel(val context: Context) : BaseViewModel(context) { shelvingFkIn: String, shelvingFkOut: String ) { + salix.itemShelvingsUpdate( + where = JsonObject().apply { + addProperty("shelvingFk", shelvingFkIn) + }, + hashMapOf("shelvingFk" to shelvingFkOut) + ).enqueue(object : SalixCallback(context) { + override fun onSuccess(response: Response) { + _responseUbicator.value = true + super.onSuccess(response) + } + }) + } + + //tarea 7920 + fun shelvingChangeSalixNew( + shelvingFkIn: Number, shelvingFkOut: Number + ) { salix.itemShelvingsUpdate( where = JsonObject().apply { addProperty("shelvingFk", shelvingFkIn) }, hashMapOf("shelvingFk" to shelvingFkOut) @@ -412,11 +536,32 @@ class UbicadorViewModel(val context: Context) : BaseViewModel(context) { }) } - fun itemShelvingTransfer( - itemFk: Int, shelvingFk: String + fun getShelvingFkFromCode( + shelvingFkIn: Number, codeOut: String ) { - salix.itemShelvingTransfer(arrayListOf(itemFk, shelvingFk).formatWithQuotes()) + + salix.shelvingGetFromCode( + filter = """{"where":{"code":"$codeOut"}}""" + ).enqueue(object : SalixCallback(context) { + + override fun onSuccess(response: Response) { + val myItemCode = response.body().let { it as ItemUbicador } + + shelvingChangeSalixNew( + shelvingFkIn = shelvingFkIn, + myItemCode.id.toLong() + ) + + } + }) + } + + fun itemShelvingTransfer( + itemShelvingFk: Number, shelvingFk: String + + ) { + salix.itemShelvingTransfer(arrayListOf(itemShelvingFk, shelvingFk).formatWithQuotes()) .enqueue(object : SalixCallback(context) { override fun onSuccess(response: Response) { _responseUbicator.value = true @@ -436,7 +581,7 @@ class UbicadorViewModel(val context: Context) : BaseViewModel(context) { }) } - fun itemShelvingSelfConsumption(shelvingFk: String, itemFk: Int, quantity: Int) { + fun itemShelvingSelfConsumption(shelvingFk: String, itemFk: Number, quantity: Int) { salix.itemShelvingSelfConsumption( arrayListOf( shelvingFk, itemFk, quantity @@ -508,7 +653,12 @@ class UbicadorViewModel(val context: Context) : BaseViewModel(context) { if (response.body() == null) _buyUltimateResponse.value = false else { val params = - """{'copies':$copies,'id':${response.body()},'labelType':'$labelType','packing':$packing}""" + JSONObject().apply { + put("copies", copies) + put("id", response.body()) + put("labelType", labelType) + put("packing", packing) + }.toString().replace("\"", "\\\"") printItem( reportName = reportName, printerFk = printerFk, diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/ubicador/model/ItemUbicadorVO.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/ubicador/model/ItemUbicadorVO.kt index 0397b10e..a8053a3e 100644 --- a/app/src/main/java/es/verdnatura/presentation/view/feature/ubicador/model/ItemUbicadorVO.kt +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/ubicador/model/ItemUbicadorVO.kt @@ -1,5 +1,7 @@ package es.verdnatura.presentation.view.feature.ubicador.model +import es.verdnatura.presentation.common.Action + class ItemUbicadorVO( var item: Int, var description: String = "", @@ -17,7 +19,8 @@ class ItemUbicadorVO( var checked: Boolean = false, var isNew: Boolean = false, var isChecked: Int? = null, - var url: String = "" + var url: String = "", + var shelvingFk: Long? = null ) class ItemUbicador( @@ -33,7 +36,7 @@ class ItemUbicador( var available: Int? = null, var code: String? = "", var created: String? = null, - var shelvingFk: String? = null, + var shelvingFk: Long? = null, var id: Int = 0, var priority: Int = 0, var isError: Boolean = false, @@ -43,8 +46,9 @@ class ItemUbicador( var isChecked: Int? = null, var url: String = "", var units: Int = 0, - var buyFk: Long? = null -) + var buyFk: Long? = null, + + ) class ItemEscanerVO( var item: Long @@ -59,14 +63,22 @@ class ItemUbicadorListNew( ) class ItemShelvingNewerList( - var list: List = listOf(), - var originalParking: String, - var originalShelvingFk: String + val list: List = listOf(), + val originalParking: String, + val originalShelvingFk: String, + val originalItem: Number? = null, + val originalAction: Action?, + val itemShelvingFk: Number? = null ) data class ItemShelvingNewer( - var itemFk: Int, - var shelvingFk: String, + val itemFk: Int, + val shelvingFk: String, + val created: String, + val parkingCode: String, + val itemCreated: String? = null, + val code: String? = null, + val parkingFk: String? = null ) data class ItemBuy( @@ -75,4 +87,41 @@ data class ItemBuy( val grouping: Int?, val packing: Int, val packagingFk: String? -) \ No newline at end of file +) + +data class ShelvingItem( + val id: Int, + val code: String, + val priority: Int, + val parkingFk: Int? = null,//para findOne directo a Shelving + val parking: Parking?, + val itemShelving: MutableList? +) + +data class Parking( + val id: Int, + val code: String +) + +data class ItemShelving( + val id: Int, + val shelvingFk: Int, + val itemFk: Int, + val grouping: Int?, + var isChecked: Int?, + val packing: Int, + var visible: Int, + var available: Int?, + val buyFk: Long?, + val item: Item, + var description: String? = null, + var stickers: Int? = null, + var url: String? = null +) + +data class Item( + val id: Long, + val name: String?, + val size: Int?, + val longName: String? +) diff --git a/app/src/main/res/drawable/ic_grafana.xml b/app/src/main/res/drawable/ic_grafana.xml new file mode 100644 index 00000000..3c2e35c3 --- /dev/null +++ b/app/src/main/res/drawable/ic_grafana.xml @@ -0,0 +1,24 @@ + + + + + + + + + + diff --git a/app/src/main/res/layout/activity_restaurant_view.xml b/app/src/main/res/layout/activity_restaurant_view.xml index dd031854..aa0cf146 100644 --- a/app/src/main/res/layout/activity_restaurant_view.xml +++ b/app/src/main/res/layout/activity_restaurant_view.xml @@ -76,11 +76,13 @@ android:onClick="generateQr" android:tag="2" android:text="@string/halfLunch" + android:visibility="gone" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/scan_input" /> + + + +