From 1689d100d55eba98960e60446c30b523702aaa5d Mon Sep 17 00:00:00 2001 From: Sergio De la torre Date: Mon, 24 Feb 2025 07:29:33 +0100 Subject: [PATCH 01/42] feat: refs#8182 CliclableZone --- .../collection/adapter/PlacementAdapter.kt | 34 ++++++++++++------- .../feature/collection/adapter/SaleAdapter.kt | 13 ++++--- app/src/main/res/drawable/ic_click.xml | 10 ------ app/src/main/res/drawable/ic_click_black.xml | 10 ------ .../res/layout/item_article_row_fragment.xml | 2 -- .../main/res/layout/item_placement_row.xml | 1 - 6 files changed, 30 insertions(+), 40 deletions(-) delete mode 100644 app/src/main/res/drawable/ic_click.xml delete mode 100644 app/src/main/res/drawable/ic_click_black.xml diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/collection/adapter/PlacementAdapter.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/collection/adapter/PlacementAdapter.kt index e32768eb..b95935c8 100644 --- a/app/src/main/java/es/verdnatura/presentation/view/feature/collection/adapter/PlacementAdapter.kt +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/collection/adapter/PlacementAdapter.kt @@ -1,28 +1,31 @@ package es.verdnatura.presentation.view.feature.collection.adapter import android.content.Context +import android.graphics.Paint import android.view.LayoutInflater import android.view.ViewGroup import androidx.recyclerview.widget.RecyclerView import es.verdnatura.R import es.verdnatura.databinding.ItemPlacementRowBinding +import es.verdnatura.domain.ConstAndValues.CONTROLADOR import es.verdnatura.presentation.common.OnPasillerosItemClickListener import es.verdnatura.presentation.view.feature.pasillero.model.PasillerosItemVO import es.verdnatura.presentation.view.feature.sacador.model.PlacementVO -class PlacementAdapter ( +class PlacementAdapter( private val items: List, - private val onPasillerosItemClickListener: OnPasillerosItemClickListener -): RecyclerView.Adapter () { + private val onPasillerosItemClickListener: OnPasillerosItemClickListener, + private val type: String? = null +) : RecyclerView.Adapter() { var context: Context? = null override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): AjustesItemHolder { this.context = parent.context return AjustesItemHolder( - ItemPlacementRowBinding.inflate(LayoutInflater.from(parent.context),parent,false) + ItemPlacementRowBinding.inflate(LayoutInflater.from(parent.context), parent, false) ) } - override fun getItemCount() =items.size + override fun getItemCount() = items.size override fun onBindViewHolder(holder: AjustesItemHolder, position: Int) { holder.bind(items[position]) @@ -30,19 +33,26 @@ class PlacementAdapter ( inner class AjustesItemHolder( val binding: ItemPlacementRowBinding - ) : RecyclerView.ViewHolder(binding.root){ + ) : RecyclerView.ViewHolder(binding.root) { fun bind(placement: PlacementVO) { binding.apply { - if (placement.placement.isNullOrEmpty()) - placement.placement = placement.parking - if (placement.visible.isNullOrEmpty()) - placement.visible = "("+placement.stockTotal+")" + if (placement.placement.isNullOrEmpty()) placement.placement = placement.parking + if (placement.visible.isNullOrEmpty()) placement.visible = + "(" + placement.stockTotal + ")" this.item = placement itemRootLayout.setOnClickListener { - onPasillerosItemClickListener.onPasillerosItemClickListener(PasillerosItemVO(title = - R.string.titleUbicator),placement.shelving) + onPasillerosItemClickListener.onPasillerosItemClickListener( + PasillerosItemVO( + title = R.string.titleUbicator + ), placement.shelving + ) } + if (type == CONTROLADOR) { + placementcode.paintFlags = placementcode.paintFlags or Paint.UNDERLINE_TEXT_FLAG + placementcode.paintFlags = placementcode.paintFlags or Paint.UNDERLINE_TEXT_FLAG + } + } } } diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/collection/adapter/SaleAdapter.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/collection/adapter/SaleAdapter.kt index 7ee0a2de..8df46bb7 100644 --- a/app/src/main/java/es/verdnatura/presentation/view/feature/collection/adapter/SaleAdapter.kt +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/collection/adapter/SaleAdapter.kt @@ -3,6 +3,7 @@ package es.verdnatura.presentation.view.feature.collection.adapter import android.content.Context import android.content.res.ColorStateList import android.graphics.Color +import android.graphics.Paint import android.graphics.drawable.Drawable import android.view.LayoutInflater import android.view.View @@ -84,7 +85,7 @@ class SaleAdapter( itemArticlePlacements.apply { layoutManager = childLayoutManager - adapter = PlacementAdapter(sale.placements, onPasillerosItemClickListener) + adapter = PlacementAdapter(sale.placements, onPasillerosItemClickListener, type) } //CLICK EVENTS @@ -422,13 +423,15 @@ class SaleAdapter( itemTicketColor.setOnClickListener { onTicketColorClickListener?.onTicketColorListener(sale) } - if (type == SACADOR || type == CONTROLADOR) { + if (type == CONTROLADOR) { itemTicketColor.tooltipText = context!!.getString(R.string.filterLevelColor) + ticketFk.paintFlags = ticketFk.paintFlags or Paint.UNDERLINE_TEXT_FLAG + itemArticleItemFk.paintFlags = + itemArticleItemFk.paintFlags or Paint.UNDERLINE_TEXT_FLAG } - /* ticketFk.paintFlags = ticketFk.paintFlags or Paint.UNDERLINE_TEXT_FLAG - itemArticleItemFk.paintFlags = - itemArticleItemFk.paintFlags or Paint.UNDERLINE_TEXT_FLAG*/ + + this.sale = sale diff --git a/app/src/main/res/drawable/ic_click.xml b/app/src/main/res/drawable/ic_click.xml deleted file mode 100644 index d8388b22..00000000 --- a/app/src/main/res/drawable/ic_click.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - diff --git a/app/src/main/res/drawable/ic_click_black.xml b/app/src/main/res/drawable/ic_click_black.xml deleted file mode 100644 index 69a6cf0f..00000000 --- a/app/src/main/res/drawable/ic_click_black.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - diff --git a/app/src/main/res/layout/item_article_row_fragment.xml b/app/src/main/res/layout/item_article_row_fragment.xml index af4033aa..f7bb271d 100644 --- a/app/src/main/res/layout/item_article_row_fragment.xml +++ b/app/src/main/res/layout/item_article_row_fragment.xml @@ -82,7 +82,6 @@ android:textColor="@color/verdnatura_black" android:textSize="@dimen/h8" android:textStyle="bold" /> - - - Date: Fri, 28 Feb 2025 08:28:04 +0100 Subject: [PATCH 02/42] feat: refs#8678 ticketAdvance --- app/src/main/res/layout/fragment_collection.xml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/app/src/main/res/layout/fragment_collection.xml b/app/src/main/res/layout/fragment_collection.xml index 918af63c..3cc48d06 100644 --- a/app/src/main/res/layout/fragment_collection.xml +++ b/app/src/main/res/layout/fragment_collection.xml @@ -10,6 +10,17 @@ android:layout_height="match_parent" android:background="@color/verdnatura_black"> + Date: Fri, 28 Feb 2025 08:41:35 +0100 Subject: [PATCH 03/42] feat: refs#8639 scanSpeed --- .../delivery/fragments/LoadUnloadFragment.kt | 34 ++++++++++++++++--- .../delivery/fragments/SummaryFragment.kt | 33 ++++++++++++++++-- 2 files changed, 61 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/delivery/fragments/LoadUnloadFragment.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/delivery/fragments/LoadUnloadFragment.kt index 70dc0a26..a06d0006 100644 --- a/app/src/main/java/es/verdnatura/presentation/view/feature/delivery/fragments/LoadUnloadFragment.kt +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/delivery/fragments/LoadUnloadFragment.kt @@ -4,7 +4,8 @@ import android.content.Context import android.content.Intent import android.graphics.drawable.Drawable import android.os.Bundle -import android.view.KeyEvent +import android.text.Editable +import android.text.TextWatcher import android.view.View import android.view.inputmethod.EditorInfo import android.widget.ImageView @@ -16,6 +17,8 @@ import androidx.recyclerview.widget.LinearLayoutManager import es.verdnatura.R import es.verdnatura.databinding.FragmentExpeditionLoadunloadDeliveryBinding import es.verdnatura.db.DeliveryDatabase +import es.verdnatura.domain.ConstAndValues.HUMAN_CHARACTERS_SECOND +import es.verdnatura.domain.ConstAndValues.SCANNER_THRESHOLD_SPEED import es.verdnatura.domain.toDateString import es.verdnatura.domain.toast import es.verdnatura.presentation.base.BaseFragment @@ -44,9 +47,10 @@ class LoadUnloadFragment( private var title: String = "", private var state: String = "", private var entryPoint: String, - private var clientTicketList: ArrayList? + private var clientTicketList: ArrayList?, + private var startInputTime: Long = 0L, -) : BaseFragment( + ) : BaseFragment( DeliveryViewModel::class ), OnBackPressedListener { @@ -85,6 +89,24 @@ class LoadUnloadFragment( } } }) + + binding.scanInput.addTextChangedListener(object : TextWatcher { + override fun afterTextChanged(s: Editable?) { + + } + + override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) { + + } + + override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { + if (before == 0 && count > 0) { + startInputTime = System.currentTimeMillis() + } + + } + }) + } override fun getLayoutId(): Int = R.layout.fragment_expedition_loadunload_delivery @@ -277,8 +299,12 @@ class LoadUnloadFragment( if (actionId == EditorInfo.IME_ACTION_SEARCH || actionId == EditorInfo.IME_ACTION_DONE || actionId == 0 || actionId == EditorInfo.IME_ACTION_NEXT) { if (!binding.scanInput.text.isNullOrEmpty()) { + + val totalTime = (System.currentTimeMillis() - startInputTime) + val charsPerSecond = (binding.scanInput.text!!.length * 1000.0) / totalTime val isScanned = - event != null && event.action == KeyEvent.ACTION_DOWN && event.keyCode == KeyEvent.KEYCODE_ENTER + charsPerSecond > HUMAN_CHARACTERS_SECOND && totalTime < SCANNER_THRESHOLD_SPEED + //Tarea 8152 // showconfirmExpedition(binding.scanInput.text.toString().toInt(), isScanned) try { 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 a77964fb..9aa206bd 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 @@ -1,7 +1,9 @@ package es.verdnatura.presentation.view.feature.delivery.fragments import android.graphics.drawable.Drawable -import android.view.KeyEvent +import android.os.Bundle +import android.text.Editable +import android.text.TextWatcher import android.view.View import android.view.inputmethod.EditorInfo import android.widget.ImageView @@ -11,6 +13,8 @@ import androidx.recyclerview.widget.RecyclerView import com.google.gson.Gson import es.verdnatura.R import es.verdnatura.databinding.FragmentExpeditionSummaryBinding +import es.verdnatura.domain.ConstAndValues.HUMAN_CHARACTERS_SECOND +import es.verdnatura.domain.ConstAndValues.SCANNER_THRESHOLD_SPEED import es.verdnatura.domain.toast import es.verdnatura.presentation.base.BaseFragment import es.verdnatura.presentation.common.AdapterCallback @@ -44,6 +48,7 @@ class SummaryFragment( private var routeSelected = 0 private var isScanning = false private var positionSelected = -1 + private var startInputTime: Long = 0L override fun getPosition(): Int { return positionSelected @@ -67,6 +72,26 @@ class SummaryFragment( } + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + binding.scanInput.addTextChangedListener(object : TextWatcher { + override fun afterTextChanged(s: Editable?) { + + } + + override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) { + + } + + override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { + if (before == 0 && count > 0) { + startInputTime = System.currentTimeMillis() + } + + } + }) + } + override fun onResume() { if (binding.mainToolbar.toolbarTitle.text != getString(R.string.titleDeliverySummary)) { binding.scanInput.isEnabled = true @@ -200,8 +225,12 @@ class SummaryFragment( if (actionId == EditorInfo.IME_ACTION_SEARCH || actionId == EditorInfo.IME_ACTION_DONE || actionId == 0) { if (!binding.scanInput.text.isNullOrEmpty()) { isScanning = true + /* val isScanned = + event != null && event.action == KeyEvent.ACTION_DOWN && event.keyCode == KeyEvent.KEYCODE_ENTER*/ + val totalTime = (System.currentTimeMillis() - startInputTime) + val charsPerSecond = (binding.scanInput.text!!.length * 1000.0) / totalTime val isScanned = - event != null && event.action == KeyEvent.ACTION_DOWN && event.keyCode == KeyEvent.KEYCODE_ENTER + charsPerSecond > HUMAN_CHARACTERS_SECOND && totalTime < SCANNER_THRESHOLD_SPEED try { markExpedition( binding.scanInput.text.toString().toInt(), From a6ad4066239b61222a22131c4ce36878ef907017 Mon Sep 17 00:00:00 2001 From: Sergio De la torre Date: Fri, 28 Feb 2025 08:46:00 +0100 Subject: [PATCH 04/42] feat: refs#8639 scanSpeed --- app/src/main/java/es/verdnatura/domain/ConstAndValues.kt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/src/main/java/es/verdnatura/domain/ConstAndValues.kt b/app/src/main/java/es/verdnatura/domain/ConstAndValues.kt index bc0f690d..12684a74 100644 --- a/app/src/main/java/es/verdnatura/domain/ConstAndValues.kt +++ b/app/src/main/java/es/verdnatura/domain/ConstAndValues.kt @@ -73,6 +73,8 @@ object ConstAndValues { const val MODELWORKERTYPEACTIVITY = "APP" const val FLINGTHRESHOLDVELOCITY = 2000f const val FLINGTHRESHOLDVERTICAL = 500f + const val SCANNER_THRESHOLD_SPEED: Int = 60 + const val HUMAN_CHARACTERS_SECOND: Int = 100 } From a7f476417e09aa195fd67de0b4747fdcb50a66ba Mon Sep 17 00:00:00 2001 From: Sergio De la torre Date: Fri, 28 Feb 2025 08:53:17 +0100 Subject: [PATCH 05/42] feat: refs#8639 scanSpeed --- .../es/verdnatura/presentation/base/BaseFragment.kt | 1 + app/src/main/res/drawable/ic_clean_shelving.xml | 10 ++++++++++ 2 files changed, 11 insertions(+) create mode 100644 app/src/main/res/drawable/ic_clean_shelving.xml diff --git a/app/src/main/java/es/verdnatura/presentation/base/BaseFragment.kt b/app/src/main/java/es/verdnatura/presentation/base/BaseFragment.kt index ac212456..5eed20b3 100644 --- a/app/src/main/java/es/verdnatura/presentation/base/BaseFragment.kt +++ b/app/src/main/java/es/verdnatura/presentation/base/BaseFragment.kt @@ -136,6 +136,7 @@ abstract class BaseFragment( R.drawable.ic_sign_ticket -> getString(R.string.signed) R.drawable.ic_send -> getString(R.string.sendDriverRoute) R.drawable.ic_add_multiple -> getString(R.string.addItemMultipleShelvings) + R.drawable.ic_clean_shelving -> getString(R.string.activityOrganize) else -> { "" } diff --git a/app/src/main/res/drawable/ic_clean_shelving.xml b/app/src/main/res/drawable/ic_clean_shelving.xml new file mode 100644 index 00000000..06136184 --- /dev/null +++ b/app/src/main/res/drawable/ic_clean_shelving.xml @@ -0,0 +1,10 @@ + + + From ad42096eca48b4d1c3da36f69c1cb2c411dc1f1f Mon Sep 17 00:00:00 2001 From: Sergio De la torre Date: Fri, 28 Feb 2025 09:02:05 +0100 Subject: [PATCH 06/42] feat: refs#6861 reservas --- ...ctionFragmentPickerPreviousNewInterface.kt | 14 ++++++--- ...agmentPickerPreviousNewInterfaceSacador.kt | 1 + .../feature/sacador/model/TicketItemVO.kt | 2 +- .../main/res/layout/fragment_buscar_item.xml | 2 +- .../fragment_expedition_log_delivery.xml | 19 ++++++------ .../main/res/layout/fragment_historico.xml | 12 ++++---- .../res/layout/fragment_salary_complement.xml | 2 +- .../main/res/layout/fragment_shelvinglog.xml | 29 +++++++++---------- .../sale_row_fragment_reserve_sacador.xml | 9 +++--- app/src/main/res/values-es/strings.xml | 6 +++- app/src/main/res/values-fr/strings.xml | 6 +++- app/src/main/res/values-pt/strings.xml | 6 +++- app/src/main/res/values/strings.xml | 7 +++-- 13 files changed, 67 insertions(+), 48 deletions(-) diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/collection/fragment/CollectionFragmentPickerPreviousNewInterface.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/collection/fragment/CollectionFragmentPickerPreviousNewInterface.kt index 89d8bab1..0c253666 100644 --- a/app/src/main/java/es/verdnatura/presentation/view/feature/collection/fragment/CollectionFragmentPickerPreviousNewInterface.kt +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/collection/fragment/CollectionFragmentPickerPreviousNewInterface.kt @@ -342,6 +342,7 @@ class CollectionFragmentPickerPreviousNewInterface( lm!!.scrollToPositionWithOffset(positionConfirm, 0) //lm!!.scrollToPositionWithOffset(storedBackPosition + 1, 0) setTotalLines() + saleAdapter!!.notifyItemChanged(positionConfirm) } else { updateScreen() } @@ -1101,10 +1102,15 @@ class CollectionFragmentPickerPreviousNewInterface( println("No hay salegroup") } } - if (distinctSaleGroups.isNotEmpty()) - distinctSaleGroups.forEach { saleGroup -> - setStateSaleGroup(saleGroup, stateCodeId!!) - } + try { + if (distinctSaleGroups.isNotEmpty()) + distinctSaleGroups.forEach { saleGroup -> + setStateSaleGroup(saleGroup, stateCodeId!!) + } + } catch (ex: Exception) { + + } + } } diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/collection/fragment/CollectionFragmentPickerPreviousNewInterfaceSacador.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/collection/fragment/CollectionFragmentPickerPreviousNewInterfaceSacador.kt index 887ca4ec..a068b8ea 100644 --- a/app/src/main/java/es/verdnatura/presentation/view/feature/collection/fragment/CollectionFragmentPickerPreviousNewInterfaceSacador.kt +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/collection/fragment/CollectionFragmentPickerPreviousNewInterfaceSacador.kt @@ -344,6 +344,7 @@ class CollectionFragmentPickerPreviousNewInterfaceSacador( lm!!.scrollToPositionWithOffset(positionConfirm, 0) //lm!!.scrollToPositionWithOffset(storedBackPosition + 1, 0) setTotalLines() + saleAdapter!!.notifyItemChanged(positionConfirm) } else { updateScreen() } 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 f35864cd..3b86d10f 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 @@ -36,7 +36,7 @@ data class Sale( val saleFk: Int, val itemFk: Int, val longName: String, - val size: Int, + val size: Int? = null, var semaphore: String?, var color: String = "", val productor: String? = "", diff --git a/app/src/main/res/layout/fragment_buscar_item.xml b/app/src/main/res/layout/fragment_buscar_item.xml index e5a0bb2a..749d3fa3 100644 --- a/app/src/main/res/layout/fragment_buscar_item.xml +++ b/app/src/main/res/layout/fragment_buscar_item.xml @@ -86,7 +86,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:gravity="center" - android:text="@string/Fecha" + android:text="@string/date" android:textColor="@color/verdnatura_white" android:textSize="@dimen/body2" /> diff --git a/app/src/main/res/layout/fragment_expedition_log_delivery.xml b/app/src/main/res/layout/fragment_expedition_log_delivery.xml index 2d4747ce..d3b49b20 100644 --- a/app/src/main/res/layout/fragment_expedition_log_delivery.xml +++ b/app/src/main/res/layout/fragment_expedition_log_delivery.xml @@ -69,7 +69,7 @@ android:layout_height="wrap_content" android:layout_weight="1.25" android:gravity="end" - android:text="@string/Fecha" + android:text="@string/date" android:textColor="@color/verdnatura_white" android:textSize="@dimen/body2" /> @@ -89,7 +89,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:gravity="start" - android:text="@string/Fecha" + android:text="@string/date" android:textColor="@color/verdnatura_white" android:textSize="@dimen/body2" /> @@ -121,13 +121,14 @@ android:orientation="vertical" android:padding="10dp" tools:ignore="ExtraText"> - + + diff --git a/app/src/main/res/layout/fragment_historico.xml b/app/src/main/res/layout/fragment_historico.xml index 30a472cc..edc7fed9 100644 --- a/app/src/main/res/layout/fragment_historico.xml +++ b/app/src/main/res/layout/fragment_historico.xml @@ -47,35 +47,33 @@ android:layout_marginBottom="@dimen/layout_margin_1" android:orientation="horizontal" android:paddingStart="@dimen/layout_margin_min" - android:paddingEnd="@dimen/layout_margin_min" - > + android:paddingEnd="@dimen/layout_margin_min"> + android:textSize="@dimen/body2" /> - + - + + - - - - - + android:clipToPadding="false" + android:visibility="visible" + tools:listitem="@layout/shelvinglog_row" /> + + diff --git a/app/src/main/res/layout/sale_row_fragment_reserve_sacador.xml b/app/src/main/res/layout/sale_row_fragment_reserve_sacador.xml index 3215660b..65228bc5 100644 --- a/app/src/main/res/layout/sale_row_fragment_reserve_sacador.xml +++ b/app/src/main/res/layout/sale_row_fragment_reserve_sacador.xml @@ -53,7 +53,7 @@ android:layout_marginEnd="@dimen/layout_margin_minest" android:text="@{sale.level}" android:textColor="@color/verdnatura_black" - android:textSize="@dimen/h9" + android:textSize="@dimen/h7" android:textStyle="bold" tool:text="2" /> @@ -62,7 +62,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginEnd="@dimen/layout_margin_minest" - android:text="@string/ticketAbb" + android:text="-" android:textColor="@color/verdnatura_black" android:textSize="@dimen/h9" /> @@ -82,7 +82,6 @@ android:id="@+id/ticketOrder" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_gravity="center" android:text='@{"(" + sale.ticketOrder + ")"}' android:textColor="@color/verdnatura_black" android:textSize="@dimen/h8" @@ -224,9 +223,9 @@ android:ellipsize="end" android:gravity="center" android:maxLines="2" - android:text="@{sale.longName}" + android:text="@{sale.size != 0 ? (sale.longName + ' ' + String.valueOf(sale.size)) : sale.longName}" android:textColor="#FFFFFF" - tool:text="Set de 3 unidades Cesta pie" /> + tool:text="Set de 3 unidades Cesta pie 70" /> diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 2085bfce..6ccdb885 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -1,7 +1,7 @@ Gestor Almacén - Fecha + Fecha Cliente Entrada Salida @@ -923,6 +923,10 @@ Reserva No hay artículos en el carro para cambiar su matrícula No se puede obterner el tipo DMS. Póngase en contacto con dpto Informática + Ordenar carro + Ordenar + Escanea carro que vas a ordenar.\nAcuérdate de volver a pulsar el icono cuando termines de ordenar + Al pulsar tu actividad será : Ordenar carro diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 5c370d76..9282e12b 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -1,7 +1,7 @@ Gestionnaire entrepôt - Date + Date Cliente Entrada Salida @@ -923,5 +923,9 @@ Reserva No hay artículos en el carro para cambiar su matrícula No se puede obterner el tipo DMS. Póngase en contacto con dpto Informática + Ordenar carro + Ordenar + Escanea carro que vas a ordenar.\nAcuérdate de volver a pulsar el icono cuando termines de ordenar + Al pulsar tu actividad será : Ordenar carro diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index 0c7ece94..3e9f2c6a 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -1,7 +1,7 @@ gestor armazém - Data + Data Cliente Entrada Salida @@ -923,5 +923,9 @@ Reserva No hay artículos en el carro para cambiar su matrícula No se puede obterner el tipo DMS. Póngase en contacto con dpto Informática + Ordenar carro + Ordenar + Escanea carro que vas a ordenar.\nAcuérdate de volver a pulsar el icono cuando termines de ordenar + Al pulsar tu actividad será : Ordenar carro diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index d8f8931e..8de6e85f 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,7 +1,7 @@ Camera needs permission Warehouse Manager - Date + Date Client Entry Departure @@ -402,7 +402,6 @@ Pre puncher Day of sale Show ticket - Vehicle history Replacement Consult item Ubicator @@ -927,5 +926,9 @@ Reserva No hay artículos en el carro para cambiar su matrícula No se puede obterner el tipo DMS. Póngase en contacto con dpto Informática + Ordenar carro + Ordenar + Escanea carro que vas a ordenar.\nAcuérdate de volver a pulsar el icono cuando termines de ordenar + Al pulsar tu actividad será : Ordenar carro From 612b2ac8f26be31c828a021fd342b73af16feb41 Mon Sep 17 00:00:00 2001 From: Sergio De la torre Date: Fri, 28 Feb 2025 09:04:15 +0100 Subject: [PATCH 07/42] feat: refs#6861 reservas --- .../fragment/CollectionFragmentPreChecker.kt | 20 ++++++----- .../fragment/CollectionViewModel.kt | 36 +++++++++++++++---- 2 files changed, 41 insertions(+), 15 deletions(-) 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 1303d8ad..c610b0d3 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 @@ -688,20 +688,22 @@ class CollectionFragmentPreChecker( }) - responseIncQuantity.observe(viewLifecycleOwner, Observer { + loadIncQuantity.observe(viewLifecycleOwner) { event -> + event.getContentIfNotHandled().notNull { - if (it.isError) { - ma.messageWithSound(it.errorMessage, isError = true, true) + if (it.isError) { + ma.messageWithSound(it.errorMessage, isError = true, true) - } else { - if (!goBack) { - incresaseSuccesful() } else { - goBack = false + if (!goBack) { + incresaseSuccesful() + } else { + goBack = false + } } - } - }) + } + } responseSaleMistakeAdd.observe(viewLifecycleOwner, Observer { 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 2bc710e8..347ed4c3 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 @@ -13,6 +13,7 @@ import es.verdnatura.domain.getMessageFromAllResponse import es.verdnatura.domain.nameofFunction import es.verdnatura.domain.toast import es.verdnatura.domain.userCases.GetItemFromBarcodeUseCase +import es.verdnatura.domain.userCases.WorkerActivityUseCase import es.verdnatura.presentation.base.BaseViewModel import es.verdnatura.presentation.common.Event import es.verdnatura.presentation.common.ItemShelving @@ -23,6 +24,8 @@ import es.verdnatura.presentation.common.TicketState import es.verdnatura.presentation.view.feature.collection.ItemVO import es.verdnatura.presentation.view.feature.collection.SalixSaleQuantity import es.verdnatura.presentation.view.feature.collection.mapper.map +import es.verdnatura.presentation.view.feature.pasillero.model.CleanAction +import es.verdnatura.presentation.view.feature.pasillero.model.WorkerActionSalix import es.verdnatura.presentation.view.feature.sacador.model.CollectionTicket import es.verdnatura.presentation.view.feature.sacador.model.CollectionVO import es.verdnatura.presentation.view.feature.sacador.model.ItemShelvingSale @@ -37,6 +40,7 @@ import retrofit2.Response class CollectionViewModel(val context: Context) : BaseViewModel(context) { private val getItemFromBarcodeUseCase = GetItemFromBarcodeUseCase(salix) + private val getWokerActivityUseCase = WorkerActivityUseCase(salix) private val contextApp = context private val _responseState by lazy { MutableLiveData() } @@ -233,6 +237,11 @@ class CollectionViewModel(val context: Context) : BaseViewModel(context) { val loadSetStateResponse: LiveData> = _setStateResponse.map { Event(it) } + private val _responseActivity by lazy { MutableLiveData() } + val responseActivity: LiveData = _responseActivity + val loadResponseActivity: LiveData> = + _responseActivity.map { Event(it) } + fun getSales( collectionFk: Number, print: String, source: String @@ -876,13 +885,20 @@ class CollectionViewModel(val context: Context) : BaseViewModel(context) { }) } - fun getIdFromCodeSalix(code: String) { - getItemFromBarcodeUseCase.execute(code).enqueue(object : SalixCallback(context) { - override fun onSuccess(response: Response) { - _responseCode.value = response.body() + fun addWorkerActivity(activity: CleanAction) { + getWokerActivityUseCase.addWorkerActivity( + WorkerActionSalix( + code = activity.codeWorkerAction.toString(), + description = activity.description + ) + ) + .enqueue(object : SalixCallback(context) { + override fun onSuccess(response: Response) { + println("shelvinAction onResposne${activity}") + _responseActivity.value = activity - } - }) + } + }) } fun saleGroupUpdateState(saleGroup: Number, codeState: Number) { @@ -1126,4 +1142,12 @@ class CollectionViewModel(val context: Context) : BaseViewModel(context) { }) } + fun getIdFromCodeSalix(code: String) { + getItemFromBarcodeUseCase.execute(code).enqueue(object : SalixCallback(context) { + override fun onSuccess(response: Response) { + _responseCode.value = response.body() + + } + }) + } } From 12e5241a1074a5170e8d109ab86da4bf0a1b5ffb Mon Sep 17 00:00:00 2001 From: Sergio De la torre Date: Fri, 28 Feb 2025 09:05:02 +0100 Subject: [PATCH 08/42] feat: refs#8678 ticketAdvance --- .../main/java/es/verdnatura/domain/userCases/UserCases.kt | 7 +++++++ 1 file changed, 7 insertions(+) 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 f9cc291d..4d52f390 100644 --- a/app/src/main/java/es/verdnatura/domain/userCases/UserCases.kt +++ b/app/src/main/java/es/verdnatura/domain/userCases/UserCases.kt @@ -2,6 +2,7 @@ package es.verdnatura.domain.userCases import es.verdnatura.domain.SalixService import es.verdnatura.presentation.view.feature.packaging.model.NotificationQueue +import es.verdnatura.presentation.view.feature.pasillero.model.WorkerActionSalix import retrofit2.Call class GetItemFromBarcodeUseCase(private val salixService: SalixService) { @@ -25,3 +26,9 @@ class NotiticationUseCase(private val salixService: SalixService) { return salixService.notificationQueues(notificationQueue) } } + +class WorkerActivityUseCase(private val salixService: SalixService) { + fun addWorkerActivity(workerActionSalix: WorkerActionSalix): Call { + return salixService.workerActivityAdd(workerActionSalix) + } +} \ No newline at end of file From 8d1110d09e20b4602dc1a06069c930b6ad7b5bf9 Mon Sep 17 00:00:00 2001 From: Sergio De la torre Date: Fri, 28 Feb 2025 09:05:56 +0100 Subject: [PATCH 09/42] feat: refs#8624 cleaAction --- .../feature/pasillero/model/PasillerosItemVO.kt | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/pasillero/model/PasillerosItemVO.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/pasillero/model/PasillerosItemVO.kt index 3cab305f..32ea0440 100644 --- a/app/src/main/java/es/verdnatura/presentation/view/feature/pasillero/model/PasillerosItemVO.kt +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/pasillero/model/PasillerosItemVO.kt @@ -7,10 +7,18 @@ class PasillerosItemVO( ) data class WorkerActionSalix( - val code: String, val model: String = ConstAndValues.MODELWORKERTYPEACTIVITY + val code: String, + val model: String = ConstAndValues.MODELWORKERTYPEACTIVITY, + val description: String = "" ) enum class CodeWorkerAction { - CLAIM, DELIVERY, ON_CHECKING, ON_PREPARATION, PREVIOUS, PALLETIZING, STOP, STORAGE + CLAIM, DELIVERY, ON_CHECKING, ON_PREPARATION, PREVIOUS, PALLETIZING, STOP, STORAGE, SHELVING_CLEAN_START, SHELVING_CLEAN_STOP -} \ No newline at end of file +} + +data class CleanAction( + val codeWorkerAction: CodeWorkerAction, + val shelving: String, + val description: String +) \ No newline at end of file From 04380327aba8a5152cb226d4ee01e43993f1c564 Mon Sep 17 00:00:00 2001 From: Sergio De la torre Date: Fri, 28 Feb 2025 09:06:23 +0100 Subject: [PATCH 10/42] feat: refs#8624 cleanAction --- .../fragment/CollectionFragmentPicker.kt | 139 +++++++++++++++--- 1 file changed, 118 insertions(+), 21 deletions(-) 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 6bc2d787..b29b6998 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 @@ -1,6 +1,7 @@ package es.verdnatura.presentation.view.feature.collection.fragment import android.content.Context +import android.graphics.PorterDuff import android.graphics.drawable.Drawable import android.media.MediaPlayer import android.os.Build @@ -18,6 +19,7 @@ import android.view.inputmethod.InputMethodManager import android.widget.ImageView import android.widget.Toast import androidx.annotation.RequiresApi +import androidx.core.content.ContextCompat import androidx.lifecycle.Observer import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView @@ -62,6 +64,8 @@ import es.verdnatura.presentation.view.feature.articulo.model.BarcodeVO import es.verdnatura.presentation.view.feature.collection.ItemVO import es.verdnatura.presentation.view.feature.collection.adapter.SaleAdapter import es.verdnatura.presentation.view.feature.main.activity.MainActivity +import es.verdnatura.presentation.view.feature.pasillero.model.CleanAction +import es.verdnatura.presentation.view.feature.pasillero.model.CodeWorkerAction import es.verdnatura.presentation.view.feature.pasillero.model.PasillerosItemVO import es.verdnatura.presentation.view.feature.sacador.model.CollectionVO import es.verdnatura.presentation.view.feature.sacador.model.MistakeTypeVO @@ -69,6 +73,7 @@ import es.verdnatura.presentation.view.feature.sacador.model.PlacementSupplyList import es.verdnatura.presentation.view.feature.sacador.model.PlacementSupplyVO import es.verdnatura.presentation.view.feature.sacador.model.PlacementVO import es.verdnatura.presentation.view.feature.sacador.model.SaleVO +import kotlinx.coroutines.runBlocking import org.json.JSONObject @Suppress("UNUSED_ANONYMOUS_PARAMETER") @@ -134,6 +139,7 @@ class CollectionFragmentPicker( private var isVerifiedCollection = false private var hasFilterByLevel = false + private lateinit var iconClean: ImageView companion object { fun newInstance(collection: CollectionVO, type: String) = @@ -207,8 +213,8 @@ class CollectionFragmentPicker( collection.collectionFk.let { binding.mainToolbar.toolbarTitle.text = collection.collectionFk.toString() } - val listIcons: ArrayList = ArrayList() + val iconPrint = ImageView(context) iconPrint.setImageResource(R.drawable.ic_print_black_24dp) val iconAdd = ImageView(context) @@ -221,6 +227,9 @@ class CollectionFragmentPicker( iconPhone.setImageResource(R.drawable.phone_call) val iconParking = ImageView(context) iconParking.setImageResource(R.drawable.ic_local_parking_black_24dp) + iconClean = ImageView(context) + iconClean.setImageResource(R.drawable.ic_clean_shelving) + val iconUpdate = ImageView(context) iconUpdate.setImageResource(R.drawable.ic_autorenew_black_24dp) @@ -231,7 +240,7 @@ class CollectionFragmentPicker( iconPhone.tooltipText = getTooltip(R.drawable.phone_call) iconParking.tooltipText = getTooltip(R.drawable.ic_local_parking_black_24dp) iconUpdate.tooltipText = getTooltip(R.drawable.ic_autorenew_black_24dp) - + iconClean.tooltipText = getTooltip(R.drawable.ic_clean_shelving) } listIcons.add(iconPrint) if (type == CONTROLADOR) { @@ -246,6 +255,8 @@ class CollectionFragmentPicker( listIcons.add(iconAdd) if (type == SACADOR) { + //Tarea 8624 + // listIcons.add(iconClean) listIcons.add(iconUpdate) listIcons.remove(iconWorker) } @@ -260,6 +271,7 @@ class CollectionFragmentPicker( override fun onOptionsItemSelected(item: Drawable) { when (item) { + iconClean.drawable -> clean() iconPrint.drawable -> print() iconAdd.drawable -> addItem() iconWorker.drawable -> showUser() @@ -272,9 +284,86 @@ class CollectionFragmentPicker( } } + }) binding.mainToolbar.toolbarIcons.layoutManager = LinearLayoutManager(requireContext(), LinearLayoutManager.HORIZONTAL, false) + updateIconColor() + } + + private fun updateIconColor() { + val newColor = + ContextCompat.getColor( + requireContext(), + if (mobileApplication.dataStoreApp.readDataStoreKey("SHELVINGACTION") + .isNotBlank() + ) R.color.verdnatura_orange_salix else R.color.verdnatura_white + ) + iconClean.setColorFilter(newColor, PorterDuff.Mode.SRC_IN) + binding.mainToolbar.toolbarIcons.adapter?.notifyDataSetChanged() + + } + + private fun addWorkerActivity(codeWorkerAction: CodeWorkerAction, shelving: String) { + viewModel.addWorkerActivity( + CleanAction( + codeWorkerAction = codeWorkerAction, + shelving = shelving.uppercase(), + description = shelving.uppercase() + ) + ) + } + + private fun clean() { + + val shelving = mobileApplication.dataStoreApp.readDataStoreKey( + "SHELVINGACTION" + ) + if ( + shelving.isNotBlank() + ) { + addWorkerActivity( + CodeWorkerAction.SHELVING_CLEAN_STOP, + shelving = shelving + ) + + } else { + customDialogInput.setTitle(getString(R.string.titleCleanShelving)) + .setDescription(getString(R.string.descripOrganize)) + .setOkButton(getString(R.string.organize)) { + ma.hideKeyboard(customDialogInput.getEditText()) + actionOrganizeClean(customDialogInput.getValue()) + + }.setKoButton(getString(R.string.cancel)) { + customDialogInput.dismiss() + }.setValue("").show() + customDialogInput.getEditText().requestFocus() + customDialogInput.getEditText().setOnEditorActionListener { _, actionId, _ -> + if (actionId == EditorInfo.IME_ACTION_SEARCH || actionId == EditorInfo.IME_ACTION_DONE || actionId == 0 || actionId == 5) { + + actionOrganizeClean(customDialogInput.getValue()) + return@setOnEditorActionListener true + } + false + } + } + } + + private fun actionOrganizeClean(input: String) { + if (input.isShelving()) { + addWorkerActivity( + CodeWorkerAction.SHELVING_CLEAN_START, + shelving = input + ) + } else { + ma.messageWithSound( + message = getString(R.string.errorInput), + isError = true, + isPlayed = true, + isToasted = true + ) + } + customDialogInput.dismiss() } private fun updateScreen() { @@ -331,9 +420,7 @@ class CollectionFragmentPicker( ma.hideKeyboard(customDialogList.getEditText()) try { val saleGroupScanned = itemScanValue( - customDialogList.getValue(), - arrayOf("saleGroup"), - "id" + customDialogList.getValue(), arrayOf("saleGroup"), "id" ).toString() isScanned = event != null && event.action == KeyEvent.ACTION_DOWN && event.keyCode == KeyEvent.KEYCODE_ENTER @@ -464,7 +551,22 @@ class CollectionFragmentPicker( @RequiresApi(Build.VERSION_CODES.O) override fun observeViewModel() { + with(viewModel) { + loadResponseActivity.observe(viewLifecycleOwner) { event -> + event.getContentIfNotHandled().notNull { + + println("shelvinAction ${it}") + runBlocking { + mobileApplication.dataStoreApp.editDataStoreKey( + "SHELVINGACTION", + if (it.codeWorkerAction == CodeWorkerAction.SHELVING_CLEAN_START) it.shelving else "" + ) + } + + updateIconColor() + } + } collectionTicketList.observe(viewLifecycleOwner, Observer { if (!it.isError) { @@ -929,8 +1031,7 @@ class CollectionFragmentPicker( } - saleAdapter = SaleAdapter( - myGroupList as MutableList, + saleAdapter = SaleAdapter(myGroupList as MutableList, pasillerosItemClickListener!!, object : OnQuantityClickListener { @@ -1010,8 +1111,7 @@ class CollectionFragmentPicker( override fun onTicketColorListener(sale: SaleVO) { } - } - ) + }) lm = LinearLayoutManager(requireContext(), LinearLayoutManager.VERTICAL, false) @@ -1039,7 +1139,7 @@ class CollectionFragmentPicker( } printObservations(observations) - if (!isVerifiedCollection) { + if (!isVerifiedCollection && mobileApplication.userId != 19591) { binding.fragmentSacadorCollections.visibility = View.INVISIBLE verifyCollection() } @@ -2347,18 +2447,15 @@ class CollectionFragmentPicker( } if (isTicket) { val labelDialogHelper = LabelDialogHelper(requireContext()) - labelDialogHelper.showLabelDialog( - onItemSelected = { labelCount -> - viewModel.collectionStickerPrint( - collectionFk = collection.collectionFk, - labelCount = labelCount - ) + labelDialogHelper.showLabelDialog(onItemSelected = { labelCount -> + viewModel.collectionStickerPrint( + collectionFk = collection.collectionFk, labelCount = labelCount + ) - (getString(R.string.Imprimiendo) + mobileApplication.dataStoreApp.readDataStoreKey( - PRINTERNAME - )).toast(requireContext()) - } - ) + (getString(R.string.Imprimiendo) + mobileApplication.dataStoreApp.readDataStoreKey( + PRINTERNAME + )).toast(requireContext()) + }) } else { viewModel.collectionStickerPrint( collectionFk = collection.collectionFk, null From c3ea43e7e194306d5c864c6f113edb064af3fb6f Mon Sep 17 00:00:00 2001 From: Sergio De la torre Date: Fri, 28 Feb 2025 09:08:42 +0100 Subject: [PATCH 11/42] feat: refs#8020 deprecatedControlVehicle --- .../view/feature/pasillero/fragment/PasilleroViewModel.kt | 8 -------- 1 file changed, 8 deletions(-) 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 98ef724b..d6330a15 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 @@ -574,14 +574,6 @@ class PasilleroViewModel(context: Context) : BaseViewModel(context) { ) ) - _pasillerositem.add( - PasillerosItemVO( - R.drawable.car_info, - R.string.titleHistoricalVehicle, - R.string.titleHistVehicleDescrip - ) - ) - } fun workerActivityAdd( From f9e19bb9cacae0d1a439337d46ccbb1bec33154c Mon Sep 17 00:00:00 2001 From: Sergio De la torre Date: Fri, 28 Feb 2025 09:18:06 +0100 Subject: [PATCH 12/42] feat: refs#6861 reservas --- .../layout/fragment_itemdayofsale_card.xml | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/app/src/main/res/layout/fragment_itemdayofsale_card.xml b/app/src/main/res/layout/fragment_itemdayofsale_card.xml index 7ca7a5c5..90bd2936 100644 --- a/app/src/main/res/layout/fragment_itemdayofsale_card.xml +++ b/app/src/main/res/layout/fragment_itemdayofsale_card.xml @@ -66,7 +66,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:gravity="center" - android:text="@string/Fecha" + android:text="@string/date" android:textColor="@color/verdnatura_white" android:textSize="@dimen/body2" /> @@ -90,21 +90,21 @@ - + + + android:clipToPadding="false" + android:visibility="visible" + tools:listitem="@layout/item_expeditionstate_row" /> + - - - - + From 44053fa039421ebfa1c30ff32ed7e08d79abe963 Mon Sep 17 00:00:00 2001 From: Sergio De la torre Date: Fri, 28 Feb 2025 12:01:39 +0100 Subject: [PATCH 13/42] feat: refs#8301 getItemsByReview --- .../view/feature/buscaritem/fragment/BuscarItemFragment.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/buscaritem/fragment/BuscarItemFragment.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/buscaritem/fragment/BuscarItemFragment.kt index 2e884ec1..0e985fd0 100644 --- a/app/src/main/java/es/verdnatura/presentation/view/feature/buscaritem/fragment/BuscarItemFragment.kt +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/buscaritem/fragment/BuscarItemFragment.kt @@ -91,6 +91,7 @@ class BuscarItemFragment( false ) } catch (ex: Exception) { + println("errorrrr ${ex.message}") ma.messageWithSound( message = ex.message.toString(), isError = true, From ebf09db00d14d9c918eb7e5e7fecce13c3a7c664 Mon Sep 17 00:00:00 2001 From: Sergio De la torre Date: Fri, 28 Feb 2025 12:05:09 +0100 Subject: [PATCH 14/42] feat: refs#6869 ItemShelving_get --- .../feature/buscaritem/fragment/BuscarItemViewModel.kt | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/buscaritem/fragment/BuscarItemViewModel.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/buscaritem/fragment/BuscarItemViewModel.kt index cf73ce8e..f12d2de6 100644 --- a/app/src/main/java/es/verdnatura/presentation/view/feature/buscaritem/fragment/BuscarItemViewModel.kt +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/buscaritem/fragment/BuscarItemViewModel.kt @@ -42,7 +42,12 @@ class BuscarItemViewModel(val context: Context) : BaseViewModel(context) { ) .enqueue(object : SalixCallback>(context) { override fun onSuccess(response: Response>) { - _itemShelvingsList.value = response.body()?.let { ItemShelvingsList(it) } + _itemShelvingsList.value = response.body()?.let { + val filteredList = it.filter { itemShelving -> + itemShelving.shelving.parking != null + } + ItemShelvingsList(filteredList) + } } }) From c72c76bdb34bc05bd9615b40ab0ad4084c8a2060 Mon Sep 17 00:00:00 2001 From: Sergio De la torre Date: Wed, 5 Mar 2025 10:45:00 +0100 Subject: [PATCH 15/42] feat: refs#7207 errorTicketAdvance --- .../java/es/verdnatura/MobileApplication.kt | 4 +++- .../es/verdnatura/domain/SalixCallback.kt | 2 +- .../presentation/common/SalixBackItems.kt | 6 ++--- .../ticket/fragment/TicketAdvanceFragment.kt | 4 ++-- .../ticket/fragment/TicketViewModel.kt | 23 ++++++++++++++++++- app/src/main/res/values-es/strings.xml | 4 ++-- app/src/main/res/values-fr/strings.xml | 4 ++-- app/src/main/res/values-pt/strings.xml | 4 ++-- app/src/main/res/values/strings.xml | 4 ++-- 9 files changed, 39 insertions(+), 16 deletions(-) diff --git a/app/src/main/java/es/verdnatura/MobileApplication.kt b/app/src/main/java/es/verdnatura/MobileApplication.kt index fbe56783..d44480bb 100644 --- a/app/src/main/java/es/verdnatura/MobileApplication.kt +++ b/app/src/main/java/es/verdnatura/MobileApplication.kt @@ -7,6 +7,7 @@ import android.media.MediaPlayer import android.os.Bundle import android.os.Handler import android.os.Looper +import android.widget.Toast import es.verdnatura.dataStore.DataStoreLocal import es.verdnatura.di.viewModelModule import es.verdnatura.domain.ConstAndValues @@ -120,7 +121,8 @@ class MobileApplication : Application(), InteceptorListener { Color.RED } else { Color.BLUE - } + }, + duration = if (isError) Toast.LENGTH_LONG else Toast.LENGTH_SHORT ) } diff --git a/app/src/main/java/es/verdnatura/domain/SalixCallback.kt b/app/src/main/java/es/verdnatura/domain/SalixCallback.kt index 96c802d7..3962fd34 100644 --- a/app/src/main/java/es/verdnatura/domain/SalixCallback.kt +++ b/app/src/main/java/es/verdnatura/domain/SalixCallback.kt @@ -50,7 +50,7 @@ abstract class SalixCallback(val context: Context) : Callback { } } - private fun defaultErrorHandler(t: Throwable) { + fun defaultErrorHandler(t: Throwable) { //println("ErrorSalixx${t.message}") // (nameofFunction((this)) + t.message).toast(context) (context as MobileApplication).messageToast( diff --git a/app/src/main/java/es/verdnatura/presentation/common/SalixBackItems.kt b/app/src/main/java/es/verdnatura/presentation/common/SalixBackItems.kt index c52ada88..7870751a 100644 --- a/app/src/main/java/es/verdnatura/presentation/common/SalixBackItems.kt +++ b/app/src/main/java/es/verdnatura/presentation/common/SalixBackItems.kt @@ -26,9 +26,9 @@ data class SaleTrackingSalix( ) -class PackingSiteSalix( - var ticketFk: Int, - var workerFk: Int +data class PackingSiteSalix( + val ticketFk: Number, + val workerFk: Number ) diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/ticket/fragment/TicketAdvanceFragment.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/ticket/fragment/TicketAdvanceFragment.kt index 4e0b21a6..68b31caa 100644 --- a/app/src/main/java/es/verdnatura/presentation/view/feature/ticket/fragment/TicketAdvanceFragment.kt +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/ticket/fragment/TicketAdvanceFragment.kt @@ -40,14 +40,14 @@ class TicketAdvanceFragment(var title: String) : if (!binding.scanInput.text.isNullOrEmpty()) { try { - viewModel.ticketAdvancePackaging( + viewModel.ticketExits( itemScanValue( binding.scanInput.text.toString(), arrayOf("ticket"), "id" ).toString().toInt(), mobileApplication.userId!! ) } catch (ex: Exception) { - getString(R.string.ticketFormatError) + getString(R.string.ticketScanError) } } diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/ticket/fragment/TicketViewModel.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/ticket/fragment/TicketViewModel.kt index efe96330..dbbc37cb 100644 --- a/app/src/main/java/es/verdnatura/presentation/view/feature/ticket/fragment/TicketViewModel.kt +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/ticket/fragment/TicketViewModel.kt @@ -1,18 +1,39 @@ package es.verdnatura.presentation.view.feature.ticket.fragment import android.content.Context +import com.google.gson.JsonObject +import es.verdnatura.R import es.verdnatura.domain.SalixCallback import es.verdnatura.presentation.base.BaseViewModel import es.verdnatura.presentation.common.PackingSiteSalix +import retrofit2.Response class TicketViewModel(val context: Context) : BaseViewModel(context) { fun ticketAdvancePackaging( - ticketFk: Int, workerFk: Int + ticketFk: Number, workerFk: Number ) { salix.ticketAdvancePackaging(PackingSiteSalix(ticketFk, workerFk)) .enqueue(object : SalixCallback(context) {}) } + fun ticketExits( + ticketFk: Number, + workerFk: Number + + ) { + salix.ticketExists(id = ticketFk) + .enqueue(object : SalixCallback(context) { + override fun onSuccess(response: Response) { + + if (response.body()!!.entrySet().first().value.asBoolean) { + ticketAdvancePackaging(ticketFk, workerFk) + } else { + defaultErrorHandler(Throwable(message = context.getString(R.string.ticketScanError))) + } + } + }) + } + } diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 6ccdb885..6854dffe 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -593,7 +593,7 @@ Permite avanzar un ticket para que sea encajado Escanea ticket El ticket ya puede ser encajado - El ticket escaneado no tiene un formato correcto + El ticket escaneado no es válido Póngase en contacto con el dpto. de Informática Inventario por parking Permite inventariar por parking @@ -702,7 +702,7 @@ ETD ESCANEAR CARROS Servidor: - Prior: + Prioridad Stock Password Nombre o apellido diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 9282e12b..fd96de0e 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -593,7 +593,7 @@ Permite avanzar un ticket para que sea encajado Escanea ticket El ticket ya puede ser encajado - El ticket escaneado no tiene un formato correcto + El ticket escaneado no es válido Póngase en contacto con el dpto. de Informática Inventario por parking Permite inventariar por parking @@ -702,7 +702,7 @@ ETD ESCANEAR CARROS Server: - Prioridad: + Prioridad Stock Password Nombre o apellido diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index 3e9f2c6a..342094b8 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -593,7 +593,7 @@ Permite avanzar un ticket para que sea encajado Escanea ticket El ticket ya puede ser encajado - El ticket escaneado no tiene un formato correcto + El ticket escaneado no es válido Póngase en contacto con el dpto. de Informática Inventario por parking Permite inventariar por parking @@ -702,7 +702,7 @@ ETD ESCANEAR CARROS Server: - Prioridad: + Prioridad Stock Password Nombre o apellido diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 8de6e85f..5835cd8f 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -603,7 +603,7 @@ Permite avanzar un ticket para que sea encajado Escanea ticket El ticket ya puede ser encajado - El ticket escaneado no tiene un formato correcto + El ticket escaneado no es válido Póngase en contacto con el dpto. de Informática Inventory by parking Inventory by parking, you can select ubications @@ -703,7 +703,7 @@ ETD ESCANEAR CARROS Server: - Prioridad: + Prioridad Stock Password Nombre o apellido From 31c715c40dcaec0bec714adf291e917bcabd42c8 Mon Sep 17 00:00:00 2001 From: Sergio De la torre Date: Wed, 5 Mar 2025 10:45:13 +0100 Subject: [PATCH 16/42] feat: refs#7207 errorTicketAdvance --- app/src/main/java/es/verdnatura/domain/SalixService.kt | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/app/src/main/java/es/verdnatura/domain/SalixService.kt b/app/src/main/java/es/verdnatura/domain/SalixService.kt index f025d4a6..3a01ee81 100644 --- a/app/src/main/java/es/verdnatura/domain/SalixService.kt +++ b/app/src/main/java/es/verdnatura/domain/SalixService.kt @@ -210,6 +210,11 @@ interface SalixService { ): Call + @GET("Sips/findOne") + fun sipGetExtension( + @Query("filter") filter: String, + ): Call + @GET("Workers/Summary") fun getNameWorker( @Query("filter") filter: String @@ -892,6 +897,11 @@ interface SalixService { @Body parms: PackingSiteSalix ): Call + @GET("Tickets/{id}/exists") + fun ticketExists( + @Path("id") id: Number, + ): Call + @PUT("ItemBarCodes") fun barcodesEdit( @Body params: ItemBarCodeSalix From 16b84ce2ecf7c14f3ff84e1d33fbcd80be3a46a0 Mon Sep 17 00:00:00 2001 From: Sergio De la torre Date: Fri, 7 Mar 2025 09:17:29 +0100 Subject: [PATCH 17/42] feat: refs#7823 selectPrinterFreely --- .../verdnatura/domain/userCases/UserCases.kt | 9 + .../common/PrinterDialogManager.kt | 34 +++- .../view/commom/SearchableAdapter.kt | 10 +- .../view/component/CustomDialogList.kt | 7 + .../ajustes/fragment/AjustesFragment.kt | 172 +++++++++++++----- .../ajustes/fragment/AjustesViewModel.kt | 4 + .../articulo/fragment/ItemCardFragment.kt | 31 +++- .../articulo/fragment/ItemCardViewModel.kt | 10 + .../ubicador/fragment/UbicadorFragment.kt | 89 +++++---- .../ubicador/fragment/UbicadorViewModel.kt | 9 + .../layout/component_custom_list_dialog.xml | 9 + app/src/main/res/values-es/strings.xml | 4 + app/src/main/res/values-fr/strings.xml | 4 + app/src/main/res/values-pt/strings.xml | 4 + app/src/main/res/values/strings.xml | 4 + 15 files changed, 320 insertions(+), 80 deletions(-) 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 4d52f390..16982e23 100644 --- a/app/src/main/java/es/verdnatura/domain/userCases/UserCases.kt +++ b/app/src/main/java/es/verdnatura/domain/userCases/UserCases.kt @@ -31,4 +31,13 @@ class WorkerActivityUseCase(private val salixService: SalixService) { fun addWorkerActivity(workerActionSalix: WorkerActionSalix): Call { return salixService.workerActivityAdd(workerActionSalix) } +} + +class OperatorUseCase(private val salixService: SalixService) { + fun updateOperator(workerFk: Number, update: HashMap): Call { + return salixService.updateOperator( + id = workerFk, + params = update + ) + } } \ No newline at end of file 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 84b6f52b..3b5b260f 100644 --- a/app/src/main/java/es/verdnatura/presentation/common/PrinterDialogManager.kt +++ b/app/src/main/java/es/verdnatura/presentation/common/PrinterDialogManager.kt @@ -4,13 +4,18 @@ import android.app.AlertDialog import android.content.Context import android.text.InputType import android.view.View +import android.view.inputmethod.EditorInfo import es.verdnatura.R import es.verdnatura.domain.toast +import es.verdnatura.presentation.view.component.CustomDialogInput 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, + onPrintChange: (String) -> Unit ) { val customDialogList = CustomDialogList(context) customDialogList.getEditText().setRawInputType(InputType.TYPE_CLASS_NUMBER) @@ -23,7 +28,9 @@ class PrinterDialogManager(private val context: Context) { }.setOkTwoButton(context.getString(R.string.printBarcode)) { handlePrintClick(item, customDialogList, onPrintClick, "barcode") customDialogList.dismiss() - + //Tarea 7823 + /*}.setOkThreeButton(context.getString(R.string.changePrinter)) { + readQrPrinter(onPrintChange)*/ }.setKoButton(context.getString(R.string.cancel)) { customDialogList.dismiss() }.setHintValueThree(context.getString(R.string.labelNumber)) @@ -32,6 +39,29 @@ class PrinterDialogManager(private val context: Context) { customDialogList.getFocusThree() } + private fun readQrPrinter(onPrintChange: (String) -> Unit) { + val customDialogInput = CustomDialogInput(context) + + customDialogInput.setTitle(context.getString(R.string.changePrinter)) + .setDescription(context.getString(R.string.scanQrPrinter)) + .setOkButton(context.getString(R.string.save)) { + onPrintChange(customDialogInput.getValue()) + customDialogInput.dismiss() + + }.setKoButton(context.getString(R.string.cancel)) { + customDialogInput.dismiss() + }.setValue("").show() + customDialogInput.getEditText().requestFocus() + customDialogInput.getEditText().setOnEditorActionListener { _, actionId, _ -> + if (actionId == EditorInfo.IME_ACTION_SEARCH || actionId == EditorInfo.IME_ACTION_DONE || actionId == 0) { + onPrintChange(customDialogInput.getValue()) + customDialogInput.dismiss() + return@setOnEditorActionListener true + } + false + } + } + private fun handlePrintClick( item: Long, customDialogList: CustomDialogList, diff --git a/app/src/main/java/es/verdnatura/presentation/view/commom/SearchableAdapter.kt b/app/src/main/java/es/verdnatura/presentation/view/commom/SearchableAdapter.kt index eb9bdf47..561e7def 100644 --- a/app/src/main/java/es/verdnatura/presentation/view/commom/SearchableAdapter.kt +++ b/app/src/main/java/es/verdnatura/presentation/view/commom/SearchableAdapter.kt @@ -16,7 +16,8 @@ import es.verdnatura.domain.toast class SearchableAdapter( private var listElements: MutableList, private var context: Context, - private val onItemClick: (NameWithId) -> Unit, + private val listColorElements: List = listOf(), + private val onItemClick: (NameWithId) -> Unit ) : RecyclerView.Adapter() { private var listElementsFiltered = listElements.toMutableList() @@ -48,6 +49,13 @@ class SearchableAdapter( } catch (ex: Exception) { ex.message?.toast(context) } + if (listColorElements.isNotEmpty()) { + if (nameWithId.id in listColorElements) { + nameText.setTextColor(Color.BLACK) + } else { + nameText.setTextColor(Color.GRAY) + } + } } } diff --git a/app/src/main/java/es/verdnatura/presentation/view/component/CustomDialogList.kt b/app/src/main/java/es/verdnatura/presentation/view/component/CustomDialogList.kt index 94b41569..2b1ce6fa 100644 --- a/app/src/main/java/es/verdnatura/presentation/view/component/CustomDialogList.kt +++ b/app/src/main/java/es/verdnatura/presentation/view/component/CustomDialogList.kt @@ -96,6 +96,13 @@ class CustomDialogList(context: Context) : Dialog(context, R.style.DialogTheme) return this } + fun setOkThreeButton(text: String, onButtonClicked: () -> Unit): CustomDialogList { + binding.customDialogButtonOkThree.visibility = View.VISIBLE + binding.customDialogButtonOkThree.text = text + binding.customDialogButtonOkThree.setOnClickListener { onButtonClicked() } + return this + } + fun setKoButton(text: String, onButtonClicked: () -> Unit): CustomDialogList { binding.customDialogButtonKo.visibility = View.VISIBLE binding.customDialogButtonKo.text = text 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 1d3548f7..0389436a 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 @@ -1,5 +1,6 @@ package es.verdnatura.presentation.view.feature.ajustes.fragment +import android.annotation.SuppressLint import android.app.AlertDialog import android.content.Intent import android.content.pm.PackageInfo @@ -86,46 +87,77 @@ class AjustesFragment : super.init() } - private fun setSearchable(listNames: MutableList) { + private fun setSearchable( + listNames: MutableList, + type: String = "sector", + listColorsElements: List = listOf() + ) { val adapter = SearchableAdapter( listElements = listNames, - context = requireContext() + context = requireContext(), + listColorElements = listColorsElements, ) { elementSelected -> - sectorListVO.forEach { - if (it.id == elementSelected.id) { - runBlocking { - mobileApplication.dataStoreApp.editDataStoreKey( - PRINTERNAME, getString(R.string.noprinter) - ) - mobileApplication.dataStoreApp.editDataStoreKey(PRINTERFK, -1) - mobileApplication.dataStoreApp.editDataStoreKey( - SECTORDESCRIP, it.description - ) - mobileApplication.dataStoreApp.editDataStoreKey( - SECTORFK, it.id - ) - it.warehouseFk?.let { it1 -> - mobileApplication.dataStoreApp.editDataStoreKey( - WAREHOUSEFK, it1 + when (type) { + "sector" -> { + sectorListVO.forEach { + if (it.id == elementSelected.id) { + runBlocking { + mobileApplication.dataStoreApp.editDataStoreKey( + PRINTERNAME, getString(R.string.noprinter) + ) + mobileApplication.dataStoreApp.editDataStoreKey(PRINTERFK, -1) + mobileApplication.dataStoreApp.editDataStoreKey( + SECTORDESCRIP, it.description + ) + mobileApplication.dataStoreApp.editDataStoreKey( + SECTORFK, it.id + ) + it.warehouseFk?.let { it1 -> + mobileApplication.dataStoreApp.editDataStoreKey( + WAREHOUSEFK, it1 + ) + } + } + viewModel.settingsItem[0].sectorFk = it.id + viewModel.settingsItem[0].selected = it.description + viewModel.workerUpdateOperatorSalix( + "sector", mobileApplication.userId!!, it.id, null ) + settingsAdapter!!.notifyItemChanged(0) + return@forEach } } - viewModel.settingsItem[0].sectorFk = it.id - viewModel.settingsItem[0].selected = it.description - viewModel.workerUpdateOperatorSalix( - "sector", mobileApplication.userId!!, it.id, null - ) - settingsAdapter!!.notifyItemChanged(0) - return@forEach + } + + "printer" -> { + println("selected $elementSelected") + val printer = printersList.find { it.name == elementSelected.name } + println("selected printer $elementSelected") + if (printer != null) { + if (printer.sector?.backupPrinterFk == printer.id) { + showWarningPrinter(printer.name, printer.id) + } else { + savePrinter(printer.name, printer.id) + } + } + printersList.clear() } } + val searchView = + binding.searchableRecyclerView.findViewById( + R.id.search_view + ) + searchView?.setQuery("", false) binding.searchableRecyclerView.visibility = View.GONE } binding.searchableRecyclerView.setAdapter(adapter, listNames) binding.searchableRecyclerView.visibility = View.VISIBLE - binding.searchableRecyclerView.setSearchHint(getString(R.string.sectorSearch)) + binding.searchableRecyclerView.setSearchHint( + if (type == "sector") getString(R.string.sectorSearch) else + getString(R.string.printerSearch) + ) ma.hideKeyboard(binding.searchableRecyclerView) } @@ -148,7 +180,7 @@ class AjustesFragment : listIcons.add(iconInfo) listIcons.add(iconLogout) // listIcons.add(iconPhone) - // listIcons.add(iconSettings) + //listIcons.add(iconSettings) binding.mainToolbar.toolbarIcons.adapter = ToolBarAdapterTooltip(listIcons, object : OnOptionsSelectedListener { @@ -216,13 +248,20 @@ class AjustesFragment : "phoneNumber", "sip:651353889@pbx.verdnatura.es" ) + /* intentIncoming.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT) startActivity(intentIncoming)*/ val intent = Intent("org.linphone.CALLING") + intent.setClassName( + "org.linphone.incomingcall", + "org.linphone.incomingcall.IncomingCallActivity" + ) intent.putExtra("server", "pbx.verdnatura.es") intent.putExtra("username", "1007") - intent.putExtra("password", "delatorre.1234") + intent.putExtra("password", "*******") intent.putExtra("phoneNumber", "sip:651353889@pbx.verdnatura.es") + intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT) + startActivity(intent) requireContext().sendBroadcast(intent) } @@ -375,20 +414,53 @@ class AjustesFragment : } } loadPrintersList.observe(viewLifecycleOwner) { event -> - event.getContentIfNotHandled().notNull { it -> + event.getContentIfNotHandled()?.let { it -> if (it.list.isNotEmpty()) { val listPrinters: ArrayList = ArrayList() - it.list.forEach { - listPrinters.add(it.name) + printersList.clear() + + + printersList.addAll(it.list.sortedWith(compareBy( + { printer -> + when { + printer.sector?.id == mobileApplication.dataStoreApp.readDataStoreKey( + SECTORFK + ) -> 0 + + printer.sector?.id != null -> 1 + else -> 2 + } + }, + { printer -> printer.name } + ))) + + printersList.forEach { printer -> + listPrinters.add(printer.name) } + val array = arrayOfNulls(listPrinters.size) - printersList = it.list showDialogForAll(listPrinters.toArray(array), messagePrinter ?: "") + //Tarea7823 + /* val listColorsElements = printersList.mapIndexed { _, printer -> + if (printer.sector?.id == mobileApplication.dataStoreApp.readDataStoreKey( + SECTORFK + ) + ) printer.id else null + }.filterNotNull() + + setSearchable(printersList.map { + NameWithId( + id = it.id, + name = it.name + ) + } as MutableList, + type = "printer", + listColorsElements = listColorsElements)*/ } else { viewModel.settingsItem[2].selected = getString(R.string.noprinter) - settingsAdapter!!.notifyItemChanged(2) + settingsAdapter?.notifyItemChanged(2) customDialog.setTitle(getString(R.string.printers)) .setDescription(getString(R.string.Noprinters)) .setOkButton(getString(R.string.Close)) { @@ -396,7 +468,6 @@ class AjustesFragment : handleUserCall() }.show() } - } } loadTrainList.observe(viewLifecycleOwner) { event -> @@ -421,14 +492,19 @@ class AjustesFragment : super.observeViewModel() } + @SuppressLint("NotifyDataSetChanged") private fun getUserData() { loginViewModel = LoginViewModel(requireActivity().applicationContext) handleUserCall() loginViewModel.handleUserResponse.observe(this@AjustesFragment) { iti -> - runBlocking { mobileApplication.dataStoreApp.saveWorkerData(iti) } + runBlocking { + mobileApplication.dataStoreApp.saveWorkerData(iti) + setSettings() + binding.setttingsItems.adapter!!.notifyDataSetChanged() + } } - setSettings() + } private fun handleUserCall() { @@ -496,12 +572,26 @@ class AjustesFragment : val positionPrinterEmergency = printersList.indexOfFirst { printer -> printer.sector?.backupPrinterFk == printer.id } - if (position == positionPrinterEmergency) { - textView.setTextColor(Color.RED) - } else { - textView.setTextColor(Color.BLACK) - } + val positions = printersList.mapIndexed { index, printer -> + if (printer.sector?.id == mobileApplication.dataStoreApp.readDataStoreKey( + SECTORFK + ) + ) index else null + }.filterNotNull() + when (position) { + positionPrinterEmergency -> { + textView.setTextColor(Color.RED) + } + + in positions -> { + textView.setTextColor(Color.BLACK) + } + + else -> { + textView.setTextColor(Color.GRAY) + } + } return view } diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/ajustes/fragment/AjustesViewModel.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/ajustes/fragment/AjustesViewModel.kt index 8ac8ca71..da91313a 100644 --- a/app/src/main/java/es/verdnatura/presentation/view/feature/ajustes/fragment/AjustesViewModel.kt +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/ajustes/fragment/AjustesViewModel.kt @@ -160,6 +160,10 @@ class AjustesViewModel(val context: Context) : BaseViewModel(context) { salix.getprinters( """{"fields":["id","name","sectorFk"],"where":{"sectorFk":$sectorFk,"isLabeler":{"neq":false}},"include": [ { "relation": "sector", "scope": { "fields": ["backupPrinterFk"]}}]}""" ).enqueue(object : SalixCallback>(context) { + //Tarea 7823 + /* salix.getprinters( + """{"fields":["id","name","sectorFk"],"where":{"isLabeler":{"neq":false}},"include": [ { "relation": "sector", "scope": { "fields": ["backupPrinterFk"]}}]}""" + ).enqueue(object : SalixCallback>(context) {*/ override fun onSuccess(response: Response>) { _printerList.value = response.body()?.let { PrintersList(it) } } 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 1633c35d..f9462c87 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 @@ -25,6 +25,7 @@ import es.verdnatura.presentation.common.OnOptionsSelectedListener import es.verdnatura.presentation.common.PrinterDialogManager import es.verdnatura.presentation.common.ToolBarAdapterTooltip import es.verdnatura.presentation.common.hideKeyboard +import es.verdnatura.presentation.common.itemScanIsQr import es.verdnatura.presentation.common.itemScanValue import es.verdnatura.presentation.common.loadUrl import es.verdnatura.presentation.composable.ImageViewActivityComposable @@ -133,10 +134,30 @@ class ItemCardFragment( val printerDialogManager = PrinterDialogManager(requireContext()) printerDialogManager.showPrintDialog( buyToPrint ?: itemInfoG!!.id.toLong(), - itemInfoG?.longName ?: "" - ) { id, labelType, copies, packing -> - printItem(id, labelType, copies, packing) - } + itemInfoG?.longName ?: "", + onPrintClick = { id, labelType, copies, packing -> + printItem(id, labelType, copies, packing) + }, + onPrintChange = { text -> + if (itemScanIsQr(text)) { + + viewModel.operatorUpdate( + workerFk = mobileApplication.userId!!, + labelerFK = itemScanValue( + text, + arrayOf("printer"), + "id" + ).toString().toLong() + ) + } else { + ma.messageWithSound( + getString(R.string.qrPrinterNotvalid), + isPlayed = true, + isError = true, + isToasted = false + ) + } + }) } else ma.messageWithSound( getString(R.string.errorPrintBuy), isError = true, @@ -273,7 +294,7 @@ class ItemCardFragment( } binding.itemcardImage.setOnClickListener { - //JETPACKCOMPOSE + //JETPACKCOMPOSE // val i = Intent(activity, ImageViewActivity::class.java) val i = Intent(activity, ImageViewActivityComposable::class.java) i.putExtra(getString(R.string.url), urlLarge) 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 55789b6e..c916c233 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 @@ -8,6 +8,7 @@ import es.verdnatura.domain.SalixCallback import es.verdnatura.domain.formatWithQuotes import es.verdnatura.domain.userCases.GetItemFromBarcodeUseCase import es.verdnatura.domain.userCases.GetItemPrintItemUseCase +import es.verdnatura.domain.userCases.OperatorUseCase import es.verdnatura.presentation.base.BaseViewModel import es.verdnatura.presentation.common.Event import es.verdnatura.presentation.common.ItemBarCodeSalix @@ -27,6 +28,7 @@ class ItemCardViewModel(var context: Context) : BaseViewModel(context) { private val getItemFromBarcodeUseCase = GetItemFromBarcodeUseCase(salix) private val printItemUseCase = GetItemPrintItemUseCase(salix) + private val operatorUseCase = OperatorUseCase(salix) private val _itemCard by lazy { MutableLiveData() } val itemCard: LiveData @@ -69,6 +71,14 @@ class ItemCardViewModel(var context: Context) : BaseViewModel(context) { }) } + fun operatorUpdate(workerFk: Number, labelerFK: Number) { + + operatorUseCase.updateOperator(workerFk = workerFk, hashMapOf("labelerFk" to labelerFK)) + .enqueue(object : SalixCallback(context) { + + }) + } + fun printItem( reportName: String, printerFk: Int, diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/ubicador/fragment/UbicadorFragment.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/ubicador/fragment/UbicadorFragment.kt index 6a356cb2..56d08240 100644 --- a/app/src/main/java/es/verdnatura/presentation/view/feature/ubicador/fragment/UbicadorFragment.kt +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/ubicador/fragment/UbicadorFragment.kt @@ -37,6 +37,7 @@ 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.itemScanIsQr import es.verdnatura.presentation.common.itemScanValue import es.verdnatura.presentation.view.component.CustomDialog import es.verdnatura.presentation.view.component.CustomDialogInput @@ -650,8 +651,11 @@ class UbicadorFragment : BaseFragment item.itemCreated!!.contains("old", ignoreCase = true) + }.distinctBy { item -> + "${item.itemFk}:${item.code}:${item.parkingFk}" }.map { item -> val itemFk = item.itemFk val shelvingFk = item.code @@ -663,10 +667,12 @@ class UbicadorFragment : BaseFragment item.itemCreated!!.contains("new", ignoreCase = true) + }.distinctBy { item -> + "${item.itemFk}:${item.code}:${item.parkingFk}" }.map { item -> val itemFk = item.itemFk val shelvingFk = item.code @@ -678,7 +684,7 @@ class UbicadorFragment : BaseFragment + item.item.id, + item.description ?: "", + onPrintClick = { 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() - } - } + 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() + } + }, + onPrintChange = { text -> + if (itemScanIsQr(text)) { + viewModel.operatorUpdate( + workerFk = mobileApplication.userId!!, + labelerFK = itemScanValue( + text, + arrayOf("printer"), + "id" + ).toString().toLong() + ) + } else { + ma.messageWithSound( + getString(R.string.qrPrinterNotvalid), + isPlayed = true, + isError = true, + isToasted = false + ) + } + + }) customDialogInput.getEditText().requestFocus() } diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/ubicador/fragment/UbicadorViewModel.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/ubicador/fragment/UbicadorViewModel.kt index 43daa242..06743b13 100644 --- a/app/src/main/java/es/verdnatura/presentation/view/feature/ubicador/fragment/UbicadorViewModel.kt +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/ubicador/fragment/UbicadorViewModel.kt @@ -12,6 +12,7 @@ import es.verdnatura.domain.formatWithQuotes import es.verdnatura.domain.userCases.GetItemFromBarcodeUseCase import es.verdnatura.domain.userCases.GetItemPrintItemUseCase import es.verdnatura.domain.userCases.NotiticationUseCase +import es.verdnatura.domain.userCases.OperatorUseCase import es.verdnatura.presentation.base.BaseViewModel import es.verdnatura.presentation.common.Action import es.verdnatura.presentation.common.Event @@ -39,6 +40,7 @@ class UbicadorViewModel(val context: Context) : BaseViewModel(context) { private val getItemFromBarcodeUseCase = GetItemFromBarcodeUseCase(salix) private val printItemUseCase = GetItemPrintItemUseCase(salix) private val notificationUseCase = NotiticationUseCase(salix) + private val operatorUseCase = OperatorUseCase(salix) private val _responseUbicator by lazy { MutableLiveData() } val responseUbicator: LiveData @@ -711,4 +713,11 @@ class UbicadorViewModel(val context: Context) : BaseViewModel(context) { } + fun operatorUpdate(workerFk: Number, labelerFK: Number) { + + operatorUseCase.updateOperator(workerFk = workerFk, hashMapOf("labelerFk" to labelerFK)) + .enqueue(object : SalixCallback(context) { + + }) + } } diff --git a/app/src/main/res/layout/component_custom_list_dialog.xml b/app/src/main/res/layout/component_custom_list_dialog.xml index f532c281..ab6748e1 100644 --- a/app/src/main/res/layout/component_custom_list_dialog.xml +++ b/app/src/main/res/layout/component_custom_list_dialog.xml @@ -131,6 +131,15 @@ tools:text="@string/delete" tools:visibility="visible" /> +