From f695dbdda3fcfb067a85b4971a801a0940876809 Mon Sep 17 00:00:00 2001 From: Sergio De la torre Date: Tue, 18 Jun 2024 12:15:20 +0200 Subject: [PATCH] feat ChangeCategory #refs 5670 --- .../category/ChangeCategoryFragment.kt | 274 ++++++++++++++++++ 1 file changed, 274 insertions(+) create mode 100644 app/src/main/java/es/verdnatura/presentation/view/feature/category/ChangeCategoryFragment.kt diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/category/ChangeCategoryFragment.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/category/ChangeCategoryFragment.kt new file mode 100644 index 00000000..9adce160 --- /dev/null +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/category/ChangeCategoryFragment.kt @@ -0,0 +1,274 @@ +package es.verdnatura.presentation.view.feature.category + +import android.graphics.drawable.Drawable +import android.view.View +import android.view.inputmethod.EditorInfo +import android.widget.ImageView +import androidx.recyclerview.widget.LinearLayoutManager +import es.verdnatura.R +import es.verdnatura.databinding.FragmentChangeCategoryBinding +import es.verdnatura.domain.toast +import es.verdnatura.presentation.base.BaseFragment +import es.verdnatura.presentation.common.OnOptionsSelectedListener +import es.verdnatura.presentation.common.ToolBarAdapterTooltip +import es.verdnatura.presentation.common.itemScanValue +import es.verdnatura.presentation.view.component.CustomDialogInput +import es.verdnatura.presentation.view.component.CustomDialogInputTwoValues +import es.verdnatura.presentation.view.feature.articulo.model.ItemDetails + +//Tarea #4940 +class ChangeCategoryFragment(var entrypoint: String) : + BaseFragment( + ChangeCategoryViewModel::class + ) { + + override fun getLayoutId(): Int = R.layout.fragment_change_category + private var barCodeScanned: Long = 0 + private lateinit var customDialogInput: CustomDialogInput + private lateinit var customDialogDetails: CustomDialogInputTwoValues + private lateinit var myItemDetail: ItemDetails + private val listIcons: ArrayList = ArrayList() + private var isScannedForDetails = false + + companion object { + fun newInstance(entrypoint: String) = ChangeCategoryFragment(entrypoint = entrypoint) + } + + override fun init() { + + customDialogInput = CustomDialogInput(requireContext()) + customDialogDetails = CustomDialogInputTwoValues(requireContext()) + binding.mainToolbar.toolbarTitle.text = entrypoint + scanShelving() + setEvents() + setToolBar() + + super.init() + } + + private fun setToolBar() { + + val iconReset = ImageView(context) + iconReset.setImageResource(R.drawable.ic_autorenew_black_24dp) + listIcons.add(iconReset) + + binding.mainToolbar.toolbarIcons.adapter = + ToolBarAdapterTooltip(listIcons, object : OnOptionsSelectedListener { + override fun onOptionsItemSelected(item: Drawable) { + + when (item) { + + iconReset.drawable -> { + scanShelving() + } + + } + } + + }) + binding.mainToolbar.toolbarIcons.layoutManager = + LinearLayoutManager(requireContext(), LinearLayoutManager.HORIZONTAL, false) + binding.mainToolbar.toolbarIcons.visibility = View.VISIBLE + } + + private fun setEvents() { + + binding.mainToolbar.backButton.setOnClickListener { + ma.onMyBackPressed() + } + binding.quantity.setOnEditorActionListener { _, actionId, _ -> + if (actionId == EditorInfo.IME_ACTION_SEARCH || actionId == EditorInfo.IME_ACTION_DONE || actionId == 0 || actionId == 5) { + binding.price.requestFocus() + true + } else { + false + } + } + binding.quantity.setOnFocusChangeListener { _, hasFocus -> + if (hasFocus) { + binding.quantity.setSelection(binding.quantity.text.length) + } + } + + binding.price.setOnFocusChangeListener { _, hasFocus -> + if (hasFocus) { + binding.price.setSelection(binding.price.text.length) + } + } + binding.price.setOnEditorActionListener { _, actionId, _ -> + if (actionId == EditorInfo.IME_ACTION_SEARCH || actionId == EditorInfo.IME_ACTION_DONE || actionId == 0 || actionId == 5) { + ma.hideKeyboard(binding.price) + binding.btnChangeCategory.performClick() + true + } else { + false + } + } + customDialogDetails.setOnDismissListener { + if (!isScannedForDetails) ma.onMyBackPressed() + } + + binding.btnChangeCategory.setOnClickListener { + try { + if (myItemDetail.visible < binding.quantity.text.toString().toInt()) { + ma.messageWithSound( + getString(R.string.quantityBigger), isPlayed = true, isError = true + ) + } else { + if (myItemDetail.itemCost < binding.price.text.toString().toDouble()) { + ma.messageWithSound( + getString(R.string.priceBigger), isPlayed = true, isError = true + ) + + } else { + viewModel.itemDevalueA2( + itemFk = binding.itemFK.text.toString().toLong(), + shelvingFk = binding.shelvingFK.text.toString(), + buyingValue = binding.price.text.toString().toDouble(), + quantity = binding.quantity.text.toString().toInt() + ) + } + } + } catch (ex: Exception) { + ma.messageWithSound( + message = ex.message!!.toString(), isError = true, isPlayed = true + ) + } + + } + + } + + override fun observeViewModel() { + with(viewModel) { + + itemDetails.observe(viewLifecycleOwner) { item -> + + if (item.itemFk == null) { + scanShelving() + customDialogDetails.getEditText().requestFocus() + + } else { + myItemDetail = item + + binding.itemFK.setText(item.itemFk.toString()) + binding.shelvingFK.setText(item.vShelvingFK.uppercase()) + binding.price.setText((if (item.itemCost == 0.0) item.itemCost else item.itemCost / 2).toString()) + binding.quantity.setText( + item.visible.toString() + ) + binding.quantity.requestFocus() + binding.quantity.setSelection(binding.quantity.text.length) + customDialogDetails.dismiss() + } + + } + responseDevalue.observe(viewLifecycleOwner) { + if (it == true) { + scanShelving() + } else { + resetTxt() + + } + } + responseItem.observe(viewLifecycleOwner) { + if (it.isError) { + isScannedForDetails = false + scanShelving() + ma.messageWithSound( + + message = it.errorMessage, + titleWithError = getString(R.string.errorChangeCategory), + isError = true, + isPlayed = true, + isToasted = false + ) + resetTxt() + + + } + } + } + } + + private fun resetTxt() { + binding.itemFK.setText("") + binding.shelvingFK.setText("") + binding.price.setText("") + binding.quantity.setText("") + } + + private fun scanShelving() { + + customDialogDetails.getEditText().requestFocus() + customDialogDetails.setTitle(getString(R.string.titleChangeCategory)) + customDialogDetails.setDescription(getString(R.string.scanItemShelving)) + customDialogDetails.setInfoTex(getString(R.string.scanItem)) + customDialogDetails.setInfoTextTwo(getString(R.string.scanSmarttagOrShelving)) + customDialogDetails.setValue("") + customDialogDetails.setValueTwo("") + + .setOkButton(getString(R.string.itemDetails)) { + + if (customDialogDetails.getValue().isNotEmpty() && customDialogDetails.getValueTwo() + .isNotEmpty() + ) { + + getInfoForA2( + customDialogDetails.getValue().toLong(), customDialogDetails.getValueTwo() + ) + } + + }.setKoButton(getString(R.string.cancel)) { + customDialogDetails.dismiss() + ma.onMyBackPressed() + }.show() + + customDialogDetails.getEditText().setOnEditorActionListener { _, actionId, _ -> + if (actionId == EditorInfo.IME_ACTION_SEARCH || actionId == EditorInfo.IME_ACTION_DONE || actionId == 0 || actionId == 5) { + customDialogDetails.setValue( + itemScanValue( + customDialogDetails.getValue(), arrayOf("buy"), "more" + ).toString() + ) + + return@setOnEditorActionListener false + } + false + } + + customDialogDetails.getEditTextTwo().setOnEditorActionListener { _, actionId, _ -> + if (actionId == EditorInfo.IME_ACTION_SEARCH || actionId == EditorInfo.IME_ACTION_DONE || actionId == 0 || actionId == 5) { + + if (customDialogDetails.getValue().isNotEmpty() && customDialogDetails.getValueTwo() + .isNotEmpty() + ) { + getInfoForA2( + customDialogDetails.getValue().toLong(), customDialogDetails.getValueTwo() + ) + } + + return@setOnEditorActionListener true + } + false + } + + customDialogDetails.setFocusText() + } + + private fun getInfoForA2(barCode: Long, shelvingFK: String) { + isScannedForDetails = true + try { + viewModel.itemShelvingGetItemDetails( + barcode = barCode, shelvingFk = shelvingFK + ) + + } catch (ex: Exception) { + getString(R.string.errorInput).toast(requireActivity()) + } + customDialogDetails.setValue("") + } + +} + +