From 853b20a7cd4bd78ae010c8b164b807ff70863886 Mon Sep 17 00:00:00 2001 From: Enrique Blasco Date: Fri, 8 May 2020 13:25:10 +0200 Subject: [PATCH] edit item card row --- .../verdnatura/domain/GetItemCardUserCase.kt | 9 +++ .../es/verdnatura/domain/VerdnaturaService.kt | 9 +++ .../presentation/common/ResponseItemVO.kt | 9 +++ .../view/component/CustomDialogInput.kt | 62 +++++++++++++++++++ .../articulo/fragment/ItemCardFragment.kt | 59 +++++++++++++++--- .../articulo/fragment/ItemCardViewModel.kt | 23 +++++++ .../feature/login/fragment/LoginViewModel.kt | 5 +- .../layout/component_custom_edit_dialog.xml | 29 +++++---- 8 files changed, 186 insertions(+), 19 deletions(-) create mode 100644 app/src/main/java/es/verdnatura/presentation/common/ResponseItemVO.kt create mode 100644 app/src/main/java/es/verdnatura/presentation/view/component/CustomDialogInput.kt diff --git a/app/src/main/java/es/verdnatura/domain/GetItemCardUserCase.kt b/app/src/main/java/es/verdnatura/domain/GetItemCardUserCase.kt index 32cf3eb0..520e5a6b 100644 --- a/app/src/main/java/es/verdnatura/domain/GetItemCardUserCase.kt +++ b/app/src/main/java/es/verdnatura/domain/GetItemCardUserCase.kt @@ -12,4 +12,13 @@ class GetItemCardUserCase : RestClient() { return restClient!!.getItemCard("json","1",usuario,password,"application/json",params = params)!! } + + fun itemStockUpdate(usuario:String,password:String,itemFk:String,warehouseFk:String,newVisible:String,isTrash:String ) : Call { + val params:ArrayList = ArrayList(); + params.add(itemFk) + params.add(warehouseFk) + params.add(newVisible) + params.add(isTrash) + return restClient!!.itemStockUpdate("json","1",usuario,password,"application/json",params = params)!! + } } \ No newline at end of file diff --git a/app/src/main/java/es/verdnatura/domain/VerdnaturaService.kt b/app/src/main/java/es/verdnatura/domain/VerdnaturaService.kt index fa797ed1..efe512ac 100644 --- a/app/src/main/java/es/verdnatura/domain/VerdnaturaService.kt +++ b/app/src/main/java/es/verdnatura/domain/VerdnaturaService.kt @@ -50,4 +50,13 @@ interface VerdnaturaService { @Body params: List): Call + @POST("almacenv2/item_Stock_Update") + fun itemStockUpdate(@Header("aplicacion") aplicacion: String, + @Header("version") version: String, + @Header("user") user: String, + @Header("pass") pass: String, + @Header("Content-Type") content_type: String, + @Body params: List): + Call + } \ No newline at end of file diff --git a/app/src/main/java/es/verdnatura/presentation/common/ResponseItemVO.kt b/app/src/main/java/es/verdnatura/presentation/common/ResponseItemVO.kt new file mode 100644 index 00000000..997acba2 --- /dev/null +++ b/app/src/main/java/es/verdnatura/presentation/common/ResponseItemVO.kt @@ -0,0 +1,9 @@ +package es.verdnatura.presentation.common + +import es.verdnatura.presentation.view.feature.articulo.model.BarcodeVO + +class ResponseItemVO ( + var response:String = "", + var isError: Boolean = false, + var errorMessage: String = "" +) \ No newline at end of file diff --git a/app/src/main/java/es/verdnatura/presentation/view/component/CustomDialogInput.kt b/app/src/main/java/es/verdnatura/presentation/view/component/CustomDialogInput.kt new file mode 100644 index 00000000..07dd2a39 --- /dev/null +++ b/app/src/main/java/es/verdnatura/presentation/view/component/CustomDialogInput.kt @@ -0,0 +1,62 @@ +package es.verdnatura.presentation.view.component + +import android.app.Dialog +import android.content.Context +import android.view.View +import android.widget.EditText +import com.google.android.material.textfield.TextInputEditText +import es.verdnatura.R +import kotlinx.android.synthetic.main.component_custom_dialog.* +import kotlinx.android.synthetic.main.component_custom_dialog.custom_dialog_button_ko +import kotlinx.android.synthetic.main.component_custom_dialog.custom_dialog_button_ok +import kotlinx.android.synthetic.main.component_custom_dialog.custom_dialog_description +import kotlinx.android.synthetic.main.component_custom_dialog.custom_dialog_title +import kotlinx.android.synthetic.main.component_custom_edit_dialog.* + +class CustomDialogInput (context: Context) : Dialog(context, R.style.DialogTheme) { + + init { + setContentView(R.layout.component_custom_edit_dialog) + } + + fun getEditText() : TextInputEditText { + return custom_dialog_value + } + + fun getValue() : String { + return custom_dialog_value.text.toString() + } + + fun setValue(value : String): CustomDialogInput{ + custom_dialog_value.setText(value) + custom_dialog_value.visibility = View.VISIBLE + return this + } + + fun setTitle(title: String): CustomDialogInput { + custom_dialog_title.visibility = View.VISIBLE + custom_dialog_title.text = title + return this + } + + fun setDescription(description: String): CustomDialogInput { + custom_dialog_description.visibility = View.VISIBLE + custom_dialog_description.text = description + return this + } + + fun setOkButton(text: String, onButtonClicked: () -> Unit): CustomDialogInput { + custom_dialog_button_ok.visibility = View.VISIBLE + custom_dialog_button_ok.text = text + custom_dialog_button_ok.setOnClickListener { onButtonClicked() } + return this + } + + fun setKoButton(text: String, onButtonClicked: () -> Unit): CustomDialogInput { + custom_dialog_button_ko.visibility = View.VISIBLE + custom_dialog_button_ko.text = text + custom_dialog_button_ko.setOnClickListener { onButtonClicked() } + return this + } + +} \ No newline at end of file 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 04978b9a..1871b88d 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,7 +3,9 @@ package es.verdnatura.presentation.view.feature.articulo.fragment import android.content.Intent +import android.content.LocusId import android.content.SharedPreferences +import android.util.Log import android.view.View import android.view.inputmethod.EditorInfo import androidx.lifecycle.Observer @@ -15,6 +17,7 @@ import es.verdnatura.presentation.common.OnItemCardRowClickListener import es.verdnatura.presentation.common.addFragment import es.verdnatura.presentation.common.loadUrl import es.verdnatura.presentation.view.component.CustomDialog +import es.verdnatura.presentation.view.component.CustomDialogInput import es.verdnatura.presentation.view.feature.articulo.adapter.ItemCardAdapter import es.verdnatura.presentation.view.feature.articulo.model.ItemCardRowVO import es.verdnatura.presentation.view.feature.articulo.model.ItemCardVO @@ -28,11 +31,16 @@ class ItemCardFragment : BaseFragment private var urlLarge:String = "" private var titleImage:String = "" + private var user = "" + private var password = "" + private var warehouseFk = "" + private var itemFk = "" companion object { fun newInstance() = ItemCardFragment() } private lateinit var customDialog: CustomDialog + private lateinit var customDialogInput: CustomDialogInput override fun getLayoutId(): Int = R.layout.fragment_item_card @@ -42,6 +50,7 @@ class ItemCardFragment : BaseFragment setEvents() toolbar_title.text = "ItemCard" customDialog = CustomDialog(requireContext()) + customDialogInput = CustomDialogInput(requireContext()) super.init() } @@ -74,9 +83,10 @@ class ItemCardFragment : BaseFragment private fun getItemCard(itemFk:String){ val prefs: SharedPreferences = activity!!.getSharedPreferences(PREFS_USER,0) - val user = prefs.getString(USER,"") - val password = prefs.getString(PASSWORD,"") - val warehouseFk = prefs.getInt(WAREHOUSEFK,1).toString() + user = prefs.getString(USER,"").toString() + password = prefs.getString(PASSWORD,"").toString() + warehouseFk = prefs.getInt(WAREHOUSEFK,1).toString() + this.itemFk = itemFk splash_progress.visibility = View.VISIBLE viewModel.getItemCard(itemFk,warehouseFk,user!!,password!!) } @@ -105,6 +115,17 @@ class ItemCardFragment : BaseFragment } }) + + response.observe(viewLifecycleOwner, Observer { + splash_progress.visibility = View.GONE + if (it.isError){ + customDialog.setTitle("Error").setDescription(it.errorMessage).setOkButton("Cerrar"){ + customDialog.hide() + }.show() + }else{ + this@ItemCardFragment.getItemCard(itemFk) + } + }) } } @@ -124,7 +145,7 @@ class ItemCardFragment : BaseFragment listItemsRow.add(ItemCardRowVO(title = "Ubicado",value = itemInfo.enAltillo,isEditable = false)) //EDITABLES - listItemsRow.add(ItemCardRowVO(title = "SIN UBICAR",value = itemInfo.enNicho,isEditable = true)) + listItemsRow.add(ItemCardRowVO(title = "SIN UBICAR",value = itemInfo.enNicho,isEditable = true, action = "itemStockUpdate")) listItemsRow.add(ItemCardRowVO(title = "NICHO",value = itemInfo.nicho,isEditable = true)) listItemsRow.add(ItemCardRowVO(title = "RESERVA",value = itemInfo.reserva,isEditable = true)) listItemsRow.add(ItemCardRowVO(title = "GROUPING",value = itemInfo.grouping,isEditable = true)) @@ -134,9 +155,27 @@ class ItemCardFragment : BaseFragment itemcard_recyclerview.adapter = ItemCardAdapter(listItemsRow,object: OnItemCardRowClickListener{ override fun onItemCardRowClickListener(item: ItemCardRowVO) { - customDialog.setTitle(item.title!!).setDescription(item.value!!).setOkButton("Cerrar"){ - customDialog.hide() - }.show() + customDialogInput.setTitle(item.title!!).setDescription("Valor actual: "+item.value!!).setOkButton("Guardar"){ + (activity as MainActivity).hideKeyboard(customDialogInput.getEditText()) + editItemCardRow(item.action!!,customDialogInput.getValue()) + customDialogInput.hide() + + }.setKoButton("Cancelar"){ + (activity as MainActivity).hideKeyboard(customDialogInput.getEditText()) + customDialogInput.hide() + }.setValue("").show() + customDialogInput.getEditText().requestFocus() + customDialogInput.getEditText().setOnEditorActionListener { v, actionId, event -> + if (actionId == EditorInfo.IME_ACTION_SEARCH || actionId == EditorInfo.IME_ACTION_DONE || actionId == 0) { + if (!customDialogInput.getValue().isNullOrEmpty()) + editItemCardRow(item.action!!,customDialogInput.getValue()) + customDialogInput.setValue("") + customDialogInput.hide() + (activity as MainActivity).hideKeyboard(customDialogInput.getEditText()) + return@setOnEditorActionListener true + } + false + } } }) itemcard_recyclerview.layoutManager = LinearLayoutManager(requireContext(), LinearLayoutManager.VERTICAL, false) @@ -148,8 +187,14 @@ class ItemCardFragment : BaseFragment }) + } + private fun editItemCardRow(action:String,value:String){ + splash_progress.visibility = View.VISIBLE + when (action){ + "itemStockUpdate" -> viewModel.itemStockUpdate(itemFk = itemFk,warehouseFk = warehouseFk,user = user,password = password,newValue = value,isTrash = "0") + } } 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 b5e1b9ce..8bb890ee 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 @@ -5,6 +5,7 @@ import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import es.verdnatura.domain.GetItemCardUserCase import es.verdnatura.presentation.base.BaseViewModel +import es.verdnatura.presentation.common.ResponseItemVO import es.verdnatura.presentation.view.feature.articulo.model.ItemCardVO import retrofit2.Call import retrofit2.Callback @@ -18,6 +19,10 @@ class ItemCardViewModel : BaseViewModel() { val itemcard: LiveData get() = _itemcard + private val _response by lazy { MutableLiveData() } + val response: LiveData + get() = _response + fun getItemCard(itemFk:String,warehouseFk:String,user:String,password:String) { getItemCardUserCase.getItemCard(user,password,itemFk,warehouseFk).enqueue(object :Callback{ @@ -35,4 +40,22 @@ class ItemCardViewModel : BaseViewModel() { }) } + + fun itemStockUpdate(itemFk:String,warehouseFk:String,user:String,password:String,newValue:String,isTrash:String){ + getItemCardUserCase.itemStockUpdate(user,password,itemFk,warehouseFk,newValue,isTrash).enqueue(object : Callback{ + override fun onFailure(call: Call, t: Throwable) { + _response.value = ResponseItemVO(isError = true,errorMessage = t.message!!) + } + + override fun onResponse(call: Call, response: Response) { + if (response.body() == null){ + _response.value = ResponseItemVO(isError = true,errorMessage = "Error en la llamada itemStockUpdate") + }else{ + _response.value = ResponseItemVO(isError = false,response = response.body()!!) + } + + } + + }) + } } 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 e7ee2363..a6a912cb 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 @@ -53,6 +53,9 @@ class LoginViewModel() : BaseViewModel() { } fun loginSalix(user:String,password:String){ + val loginSalixVO = LoginSalixVO(user,password, "aaa") + _loginsalixitem.value = loginSalixVO + /* getLoginUserCase.salixLogin(user,password).enqueue(object : Callback{ override fun onResponse(call: Call, response: Response) { @@ -70,7 +73,7 @@ class LoginViewModel() : BaseViewModel() { val loginSalixVO = LoginSalixVO(user,password, "",isError = true,errorMessage = t.message!!) _loginsalixitem.value = loginSalixVO } - }) + })*/ } fun checkVersion(user:String,password:String,version:String){ diff --git a/app/src/main/res/layout/component_custom_edit_dialog.xml b/app/src/main/res/layout/component_custom_edit_dialog.xml index fa23d5a4..543e2641 100644 --- a/app/src/main/res/layout/component_custom_edit_dialog.xml +++ b/app/src/main/res/layout/component_custom_edit_dialog.xml @@ -39,19 +39,26 @@ tools:text="Este cambio no podrĂ¡ deshacerse a no ser que vuelvas a vincular el dispositivo" tools:visibility="visible" /> - + android:textColorHint="@android:color/darker_gray" + android:layout_marginTop="@dimen/default_layout_margin"> + + + +