diff --git a/app/build.gradle b/app/build.gradle index 455082c..3149384 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -39,7 +39,7 @@ dependencies { implementation 'androidx.appcompat:appcompat:1.2.0' implementation 'androidx.legacy:legacy-support-v4:1.0.0' implementation 'com.google.android.material:material:1.2.0' - implementation 'androidx.constraintlayout:constraintlayout:1.1.3' + implementation 'androidx.constraintlayout:constraintlayout:2.0.0' implementation 'androidx.navigation:navigation-fragment:2.3.0' implementation 'androidx.navigation:navigation-ui:2.3.0' implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0' @@ -66,7 +66,4 @@ dependencies { implementation "com.google.code.gson:gson:2.8.6" annotationProcessor 'androidx.room:room-compiler:2.2.5' - - implementation 'com.afollestad.material-dialogs:core:3.3.0' - implementation 'com.afollestad.material-dialogs:input:3.3.0' } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6534775..baa1408 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -2,6 +2,7 @@ + diff --git a/app/src/main/java/com/focasoftware/deboinventariov20/DB/DAO/ArticulosDAO.kt b/app/src/main/java/com/focasoftware/deboinventariov20/DB/DAO/ArticulosDAO.kt index 6b74317..f4dee6d 100644 --- a/app/src/main/java/com/focasoftware/deboinventariov20/DB/DAO/ArticulosDAO.kt +++ b/app/src/main/java/com/focasoftware/deboinventariov20/DB/DAO/ArticulosDAO.kt @@ -6,6 +6,7 @@ import com.focasoftware.deboinventario.ui.actualizacionMaestros.Constans.Compani import com.focasoftware.deboinventario.ui.actualizacionMaestros.Constans.Companion.TABLA_INV_H import com.focasoftware.deboinventario.ui.actualizacionMaestros.Constans.Companion.TABLA_SERV_INV import com.focasoftware.deboinventariov20.Model.* +import java.util.ArrayList @Dao interface ArticulosDAO { @@ -45,7 +46,7 @@ interface InvHeadDAO { suspend fun deleteinvHead(inven: Int) @Query("SELECT * FROM $TABLA_INV_H ORDER BY INV_FEI") - suspend fun fetchAllInvHead(): List + suspend fun fetchAllInvHead(): ArrayList } @Dao diff --git a/app/src/main/java/com/focasoftware/deboinventariov20/Model/ProductosService.kt b/app/src/main/java/com/focasoftware/deboinventariov20/Model/ProductosService.kt index 21ff6d7..a5ab8bc 100644 --- a/app/src/main/java/com/focasoftware/deboinventariov20/Model/ProductosService.kt +++ b/app/src/main/java/com/focasoftware/deboinventariov20/Model/ProductosService.kt @@ -4,7 +4,7 @@ import retrofit2.Retrofit import retrofit2.converter.gson.GsonConverterFactory object ProductosService { - private val BASE_URL ="http://192.168.0.8:3000/" + private val BASE_URL ="http://192.168.0.2:3000/" //"http://10.0.2.2:3000/" diff --git a/app/src/main/java/com/focasoftware/deboinventariov20/ui/descripcionFragment/DescripcionFragment.kt b/app/src/main/java/com/focasoftware/deboinventariov20/ui/descripcionFragment/DescripcionFragment.kt index 183e876..4b7680b 100644 --- a/app/src/main/java/com/focasoftware/deboinventariov20/ui/descripcionFragment/DescripcionFragment.kt +++ b/app/src/main/java/com/focasoftware/deboinventariov20/ui/descripcionFragment/DescripcionFragment.kt @@ -7,7 +7,6 @@ import android.graphics.Canvas import android.graphics.Color import android.graphics.drawable.ColorDrawable import android.os.Bundle -import android.text.InputType import android.view.LayoutInflater import android.view.View import android.view.ViewGroup @@ -20,8 +19,6 @@ import androidx.navigation.Navigation import androidx.recyclerview.widget.ItemTouchHelper import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView -import com.afollestad.materialdialogs.MaterialDialog -import com.afollestad.materialdialogs.input.input import com.focasoftware.deboinventariov20.DB.DataBase.AppDb import com.focasoftware.deboinventariov20.Model.Articles import com.focasoftware.deboinventariov20.Model.InvBody @@ -97,22 +94,17 @@ class DescripcionFragment : Fragment() { (viewAdapter2 as DescripcionListAdapter).items2?.get(indice)?.codigo.toString(), numeroInventario.toString()) if (artCargadoEnBD == null) { -// val type = InputType.TYPE_CLASS_NUMBER -// -// MaterialDialog(requireContext()).show { -// title(text = "Producto: ${(viewAdapter2 as DescripcionListAdapter).items2?.get(indice)!!.descripcion}") -// message(R.string.sMensajeEncontrado) -// input(waitForPositiveButton = false, hint = "99.99", inputType = type) { materialDialog, charSequence -> -// cantidad = 0F -// cantidad = charSequence.toString().toFloat() -// } -// positiveButton(R.string.btnOk) { val mDialogView = LayoutInflater.from(context).inflate(R.layout.ingresar_cantidad, null) val mBuilder = AlertDialog.Builder(context).setView(mDialogView).setCancelable(false) - mDialogView.tvTitulo.text="Producto '${(viewAdapter2 as DescripcionListAdapter).items2?.get(indice)!!.descripcion}'." + mDialogView.tvTitulo.text = "${(viewAdapter2 as DescripcionListAdapter).items2?.get(indice)!!.descripcion}" val mAlertDialog = mBuilder.show() mDialogView.btnAceptar.setOnClickListener { - cantidad = mDialogView.etCantidad.text.toString().toFloat() + if (mDialogView.etCantidad.text.isNullOrEmpty()) { + mDialogView.etCantidad.error = "No vacio" + mDialogView.etCantidad.requestFocus() + mDialogView.etCantidad.hint = "Ingrese un valor" + } else if (!mDialogView.etCantidad.text.isNullOrEmpty()) { + cantidad = mDialogView.etCantidad.text.toString().toFloat() val body = InvBody(numeroInventario, (viewAdapter2 as DescripcionListAdapter).items2?.get(indice)!!.sector, // TODO: PREPARO PARA MANDAR A CARGAR EN LA BD @@ -129,11 +121,9 @@ class DescripcionFragment : Fragment() { InventarioFragment().ObtenerFechaActual()) InsertarArtEnDB(body)// TODO: MANDO A CARGAR A LA BASE DE DATOS VolverAinventario() - mAlertDialog.dismiss() -// dismiss() + mAlertDialog.dismiss() } -// }.cancelOnTouchOutside(false).cornerRadius(10F) - + } } else if (artCargadoEnBD != null) { val mDialogView = LayoutInflater.from(context).inflate(R.layout.login_dialog, null) @@ -144,26 +134,36 @@ class DescripcionFragment : Fragment() { mDialogView.rbSumar.setOnClickListener { if (!mDialogView.tvNuevaCantidad.text.isNullOrEmpty()) { mDialogView.tvgenerico4.text = (mDialogView.tvCantInicial.text.toString().toFloat() + mDialogView.tvNuevaCantidad.text.toString().toFloat()).toString() + mDialogView.tvNuevaCantidad.isEnabled=false } } mDialogView.rbRestar.setOnClickListener { if (!mDialogView.tvNuevaCantidad.text.isNullOrEmpty()) { if (mDialogView.tvCantInicial.text.toString().toFloat() >= mDialogView.tvNuevaCantidad.text.toString().toFloat()) { mDialogView.tvgenerico4.text = (mDialogView.tvCantInicial.text.toString().toFloat() - mDialogView.tvNuevaCantidad.text.toString().toFloat()).toString() + mDialogView.tvNuevaCantidad.isEnabled=false } } } mDialogView.rbMdodificar.setOnClickListener { if (!mDialogView.tvNuevaCantidad.text.isNullOrEmpty()) { mDialogView.tvgenerico4.text = (mDialogView.tvNuevaCantidad.text.toString().toFloat()).toString() + mDialogView.tvNuevaCantidad.isEnabled=false } } mDialogView.btnAceptar.setOnClickListener { - val name = mDialogView.tvgenerico4.text.toString().toFloat() - updateCantidad((viewAdapter2 as DescripcionListAdapter).items2?.get(indice)!!.sector.toString(), (viewAdapter2 as DescripcionListAdapter).items2?.get(indice)!!.codigo - .toString(), name) - VolverAinventario() - mAlertDialog.dismiss() + if (!mDialogView.tvNuevaCantidad.text.isNullOrEmpty()) { + val name = mDialogView.tvgenerico4.text.toString().toFloat() + updateCantidad((viewAdapter2 as DescripcionListAdapter).items2?.get(indice)!!.sector.toString(), + (viewAdapter2 as DescripcionListAdapter).items2?.get(indice)!!.codigo.toString(), + name) + VolverAinventario() + mAlertDialog.dismiss() + } else if (mDialogView.tvNuevaCantidad.text.isNullOrEmpty()) { + mDialogView.tvNuevaCantidad.error = "No vacio" + mDialogView.tvNuevaCantidad.requestFocus() + mDialogView.tvNuevaCantidad.hint = "Ingrese un valor" + } } mDialogView.dialogCancelBtn.setOnClickListener { mAlertDialog.dismiss() @@ -224,7 +224,7 @@ class DescripcionFragment : Fragment() { lifecycleScope.launch { withContext(Dispatchers.IO) { val activity: FragmentActivity? = activity - if(activity != null && isAdded){ + if (activity != null && isAdded) { AppDb.getAppDb(requireActivity())!!.InvBodyDAO()!!.UpdateInvBody(cantidad, sector, codigo) } diff --git a/app/src/main/java/com/focasoftware/deboinventariov20/ui/inventario/InventarioFragment.kt b/app/src/main/java/com/focasoftware/deboinventariov20/ui/inventario/InventarioFragment.kt index 57b88fc..d81f54a 100644 --- a/app/src/main/java/com/focasoftware/deboinventariov20/ui/inventario/InventarioFragment.kt +++ b/app/src/main/java/com/focasoftware/deboinventariov20/ui/inventario/InventarioFragment.kt @@ -1,7 +1,9 @@ package com.focasoftware.deboinventariov20.ui.inventario +import android.annotation.SuppressLint import android.app.AlertDialog import android.content.Context +import android.content.DialogInterface import android.content.SharedPreferences import android.graphics.Canvas import android.graphics.Color @@ -23,13 +25,14 @@ import androidx.navigation.Navigation import androidx.recyclerview.widget.ItemTouchHelper import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView -import com.afollestad.materialdialogs.MaterialDialog import com.focasoftware.deboinventariov20.DB.DataBase.AppDb import com.focasoftware.deboinventariov20.Model.Articles import com.focasoftware.deboinventariov20.Model.InvBody import com.focasoftware.deboinventariov20.Model.InvHead import com.focasoftware.deboinventariov20.R import com.focasoftware.deboinventariov20.ui.dialogos.DialogNoEncontrado +import com.focasoftware.deboinventariov20.ui.util.Base.AlertDialogBorrarInv +import com.focasoftware.deboinventariov20.ui.util.Base.NoEncontradoSimple import kotlinx.android.synthetic.main.fragment_inventario.* import kotlinx.android.synthetic.main.ingresar_cantidad.view.* import kotlinx.android.synthetic.main.login_dialog.view.* @@ -40,7 +43,7 @@ import java.time.format.DateTimeFormatter import java.util.* -class InventarioFragment : Fragment(), ProductosListAdapter.OnImageDotsClickListener { +class InventarioFragment : Fragment(), ProductosListAdapter.OnImageDotsClickListener{ private lateinit var sharedPreferences: SharedPreferences private var iArea: Int = 0 @@ -69,7 +72,6 @@ class InventarioFragment : Fragment(), ProductosListAdapter.OnImageDotsClickList editor?.apply() editor.commit() } - } @@ -100,193 +102,212 @@ class InventarioFragment : Fragment(), ProductosListAdapter.OnImageDotsClickList tCodigoBarras.setOnKeyListener { _, keyCode, keyEvent -> if (keyCode == KeyEvent.KEYCODE_ENTER && keyEvent.action == KeyEvent.ACTION_UP) { sChangeUpper = tCodigoBarras.text.toString() - var indiceDelArtEncontrado = 0 - //TODO COMIENZA LA BUSQUEDA POR CODIGO DE BARRAS - when (iBusquedaPor) { - 0 -> { - indiceDelArtEncontrado = buscoArtEnRv(sChangeUpper.toUpperCase(Locale.ROOT), 0)//TODO Si encuentra el articulo en el RV devuelve el indice - //TODO Si no lo encuentra devuelve -1 - if (indiceDelArtEncontrado != -1) { - if (swSumaUno!!.isChecked) { - fCant = 0F - fCant = listArticulos[indiceDelArtEncontrado].cantTomada - fCant += 1F - //TODO ACTUALIZO LA CANTIDAD EN LA BD - updateCantidad(listArticulos[indiceDelArtEncontrado].sector.toString(), listArticulos[indiceDelArtEncontrado].codigo.toString(), fCant) - //TODO ACTUALIZO LA CANTIDAD EN EL RV - listArticulos[indiceDelArtEncontrado].cantTomada = fCant - viewAdapter.notifyDataSetChanged() - } else { - val mDialogView = LayoutInflater.from(context).inflate(R.layout.login_dialog, null) - val mBuilder = AlertDialog.Builder(context).setView(mDialogView).setTitle("Producto '${listArticulos[indiceDelArtEncontrado].descripcion}', se encuentra cargado.") - .setCancelable(false) - mDialogView.tvCantInicial.text = listArticulos[indiceDelArtEncontrado].cantTomada.toString() - val mAlertDialog = mBuilder.show() - mDialogView.rbSumar.setOnClickListener { - if (!mDialogView.tvNuevaCantidad.text.isNullOrEmpty()) { - mDialogView.tvgenerico4.text = (mDialogView.tvCantInicial.text.toString().toFloat() + mDialogView.tvNuevaCantidad.text.toString().toFloat()).toString() - } - } - mDialogView.rbRestar.setOnClickListener { - if (!mDialogView.tvNuevaCantidad.text.isNullOrEmpty()) { - if (mDialogView.tvCantInicial.text.toString().toFloat() >= mDialogView.tvNuevaCantidad.text.toString().toFloat()) { - mDialogView.tvgenerico4.text = (mDialogView.tvCantInicial.text.toString().toFloat() - mDialogView.tvNuevaCantidad.text.toString().toFloat()).toString() + if (tCodigoBarras.text.isNullOrBlank()) { + tCodigoBarras.error = "No puede estar vacio" + tCodigoBarras.requestFocus() + tCodigoBarras.hint = "No puede estar vacio" + } else { + + //TODO COMIENZA LA BUSQUEDA POR CODIGO DE BARRAS + when (iBusquedaPor) { + 0 -> { + GlobalScope.launch(Dispatchers.Main) { + indiceDelArtEncontrado = buscoArtEnRv(sChangeUpper.toUpperCase(Locale.ROOT), 0)//TODO Si encuentra el articulo en el RV devuelve el indice + //TODO (Si no lo encuentra devuelve -1) + if (indiceDelArtEncontrado != -1) { + if (swSumaUno!!.isChecked) { +// fCant = 0F +// fCant = listArticulos[indiceDelArtEncontrado].cantTomada +// fCant += 1F + //TODO ACTUALIZO LA CANTIDAD EN LA BD + updateCantidad(listArticulos[indiceDelArtEncontrado].sector.toString(), listArticulos[indiceDelArtEncontrado].codigo.toString(), listArticulos[indiceDelArtEncontrado].cantTomada+1) + //TODO ACTUALIZO LA CANTIDAD EN EL RV + listArticulos[indiceDelArtEncontrado].cantTomada = listArticulos[indiceDelArtEncontrado].cantTomada+1 + viewAdapter.notifyDataSetChanged() + } else { + val mDialogView = LayoutInflater.from(context).inflate(R.layout.login_dialog, null) + val mBuilder = + AlertDialog.Builder(context).setView(mDialogView).setTitle("Producto '${listArticulos[indiceDelArtEncontrado].descripcion}', se encuentra cargado.") +// .setCancelable(false) + mDialogView.tvCantInicial.text = listArticulos[indiceDelArtEncontrado].cantTomada.toString() + val mAlertDialog = mBuilder.show() + mDialogView.rbSumar.setOnClickListener { + if (!mDialogView.tvNuevaCantidad.text.isNullOrEmpty()) { + mDialogView.tvgenerico4.text = (mDialogView.tvCantInicial.text.toString().toFloat() + mDialogView.tvNuevaCantidad.text.toString().toFloat()).toString() + mDialogView.tvNuevaCantidad.isEnabled=false + } + } + mDialogView.rbRestar.setOnClickListener { + if (!mDialogView.tvNuevaCantidad.text.isNullOrEmpty()) { + if (mDialogView.tvCantInicial.text.toString().toFloat() >= mDialogView.tvNuevaCantidad.text.toString().toFloat()) { + mDialogView.tvgenerico4.text = + (mDialogView.tvCantInicial.text.toString().toFloat() - mDialogView.tvNuevaCantidad.text.toString().toFloat()).toString() + mDialogView.tvNuevaCantidad.isEnabled=false + } + } + } + mDialogView.rbMdodificar.setOnClickListener { + if (!mDialogView.tvNuevaCantidad.text.isNullOrEmpty()) { + mDialogView.tvgenerico4.text = (mDialogView.tvNuevaCantidad.text.toString().toFloat()).toString() + mDialogView.tvNuevaCantidad.isEnabled=false + } + } + mDialogView.btnAceptar.setOnClickListener { + if (!mDialogView.tvNuevaCantidad.text.isNullOrEmpty()) { + mAlertDialog.dismiss() +// val name = mDialogView.tvgenerico4.text.toString().toFloat() +// fCant = 0F +// fCant = name + listArticulos[indiceDelArtEncontrado].cantTomada = mDialogView.tvgenerico4.text.toString().toFloat() + updateCantidad(listArticulos[indiceDelArtEncontrado].sector.toString(), listArticulos[indiceDelArtEncontrado].codigo.toString(), mDialogView.tvgenerico4.text.toString().toFloat()) + viewAdapter.notifyDataSetChanged() + } else if (mDialogView.tvNuevaCantidad.text.isNullOrEmpty()) { + mDialogView.tvNuevaCantidad.error = "No vacio" + mDialogView.tvNuevaCantidad.requestFocus() + mDialogView.tvNuevaCantidad.hint = "Ingrese un valor" + } + } + mDialogView.dialogCancelBtn.setOnClickListener { + mAlertDialog.dismiss() } } + + } else if (indiceDelArtEncontrado == -1) {// no lo encontro en el RV, lo va a buscar en al BD + + + //TODO BUSCO EN BASE DE DATOS + val artEncontrado = buscarCBEnBD(sChangeUpper.toUpperCase(Locale.ROOT)) + ContinuarCargaCB(artEncontrado)//TODO SE MANDA CERO POR QUE ES UN ARTICULO ESCANEADO NUEVO PARA QUE SEA COMPATIBLE } - mDialogView.rbMdodificar.setOnClickListener { - if (!mDialogView.tvNuevaCantidad.text.isNullOrEmpty()) { - mDialogView.tvgenerico4.text = (mDialogView.tvNuevaCantidad.text.toString().toFloat()).toString() - } - } - mDialogView.btnAceptar.setOnClickListener { - mAlertDialog.dismiss() - val name = mDialogView.tvgenerico4.text.toString().toFloat() - fCant = 0F - fCant = name - listArticulos[indiceDelArtEncontrado].cantTomada = fCant - updateCantidad(listArticulos[indiceDelArtEncontrado].sector.toString(), listArticulos[indiceDelArtEncontrado].codigo.toString(), fCant) - viewAdapter.notifyDataSetChanged() - } - mDialogView.dialogCancelBtn.setOnClickListener { - mAlertDialog.dismiss() - } - } - } else if (indiceDelArtEncontrado == -1) {// no lo encontro en el RV, lo va a buscar en al BD - GlobalScope.launch(Dispatchers.Main) { - //TODO BUSCO EN BASE DE DATOS - val artEncontrado = buscarCBEnBD(sChangeUpper.toUpperCase(Locale.ROOT)) - ContinuarCargaCB(artEncontrado)//TODO SE MANDA CERO POR QUE ES UN ARTICULO ESCANEADO NUEVO PARA QUE SEA COMPATIBLE + tCodigoBarras.focusable = View.FOCUSABLE + tCodigoBarras.setText("") + tCodigoBarras.selectAll() } - } - - tCodigoBarras.focusable = View.FOCUSABLE - tCodigoBarras.setText("") - tCodigoBarras.selectAll() - return@setOnKeyListener true + return@setOnKeyListener true - } - 1 -> {//TODO: BUSQUEDA POR DESCRIPCION************************************************************************** - // - // indiceDelArtEncontrado = buscoArtEnRv(sChangeUpper.toUpperCase(Locale.ROOT), 1) //TODO :Si encuentra el articulo en el RV devuelve el indice - // //TODO Si no lo encuentra devuelve -1 - // if (indiceDelArtEncontrado != -1) { - //// if (swSumaUno!!.isChecked) { - //// fCant = 0F - //// fCant = listArticulos[indiceDelArtEncontrado].cantTomada - //// fCant += 1F - //// listArticulos[indiceDelArtEncontrado].cantTomada = fCant - //// viewAdapter.notifyDataSetChanged() - //// } else { - // fCant = listArticulos[indiceDelArtEncontrado].cantTomada - // MaterialDialog(requireContext()).show { - // title(R.string.sTituloNueva) - // message(R.string.sCantidadNueva) - // input { materialDialog, charSequence -> - // fCant = 0F - // fCant = charSequence.toString().toFloat() - // } - // positiveButton(R.string.btnOk) { - // listArticulos[indiceDelArtEncontrado].cantTomada = fCant - // viewAdapter.notifyDataSetChanged() - // dismiss() - // } - // }.cancelOnTouchOutside(false).cornerRadius(10F) - //// } - // - // } else if - // (indiceDelArtEncontrado == -1) {// TODO: no lo encontro en el RV, lo va a buscar en al BD - GlobalScope.launch(Dispatchers.Main) { - val artEncontrado = buscarDescEnBD(sChangeUpper.toUpperCase(Locale.ROOT)) - ContinuarCargaDesc(artEncontrado as ArrayList) } - // } + 1 -> {//TODO: BUSQUEDA POR DESCRIPCION************************************************************************** + // + // indiceDelArtEncontrado = buscoArtEnRv(sChangeUpper.toUpperCase(Locale.ROOT), 1) //TODO :Si encuentra el articulo en el RV devuelve el indice + // //TODO Si no lo encuentra devuelve -1 + // if (indiceDelArtEncontrado != -1) { + //// if (swSumaUno!!.isChecked) { + //// fCant = 0F + //// fCant = listArticulos[indiceDelArtEncontrado].cantTomada + //// fCant += 1F + //// listArticulos[indiceDelArtEncontrado].cantTomada = fCant + //// viewAdapter.notifyDataSetChanged() + //// } else { + // fCant = listArticulos[indiceDelArtEncontrado].cantTomada + // MaterialDialog(requireContext()).show { + // title(R.string.sTituloNueva) + // message(R.string.sCantidadNueva) + // input { materialDialog, charSequence -> + // fCant = 0F + // fCant = charSequence.toString().toFloat() + // } + // positiveButton(R.string.btnOk) { + // listArticulos[indiceDelArtEncontrado].cantTomada = fCant + // viewAdapter.notifyDataSetChanged() + // dismiss() + // } + // }.cancelOnTouchOutside(false).cornerRadius(10F) + //// } + // + // } else if + // (indiceDelArtEncontrado == -1) {// TODO: no lo encontro en el RV, lo va a buscar en al BD + GlobalScope.launch(Dispatchers.Main) { + val artEncontrado = buscarDescEnBD(sChangeUpper.toUpperCase(Locale.ROOT)) + ContinuarCargaDesc(artEncontrado as ArrayList) + } + // } - return@setOnKeyListener true - } - 2 -> {//TODO: BUSQUEDA POR CODIGO DE ORIGEN************************************************************************** - indiceDelArtEncontrado = buscoArtEnRv(sChangeUpper.toUpperCase(Locale.ROOT), 3)//TODO Si encuentra el articulo en el RV devuelve el indice - //TODO Si no lo encuentra devuelve -1 - if (indiceDelArtEncontrado != -1) { - if (swSumaUno!!.isChecked) { - fCant = 0F - fCant = listArticulos[indiceDelArtEncontrado].cantTomada - fCant += 1F - //TODO ACTUALIZO LA CANTIDAD EN LA BD - updateCantidad(listArticulos[indiceDelArtEncontrado].sector.toString(), listArticulos[indiceDelArtEncontrado].codigo.toString(), fCant) - //TODO ACTUALIZO LA CANTIDAD EN EL RV - listArticulos[indiceDelArtEncontrado].cantTomada = fCant - viewAdapter.notifyDataSetChanged() - } else { - val mDialogView = LayoutInflater.from(context).inflate(R.layout.login_dialog, null) - val mBuilder = AlertDialog.Builder(context).setView(mDialogView).setTitle("Producto '${listArticulos[indiceDelArtEncontrado].descripcion}', se encuentra cargado.") - .setCancelable(false) - mDialogView.tvCantInicial.text = listArticulos[indiceDelArtEncontrado].cantTomada.toString() - val mAlertDialog = mBuilder.show() - mDialogView.rbSumar.setOnClickListener { - if (!mDialogView.tvNuevaCantidad.text.isNullOrEmpty()) { - mDialogView.tvgenerico4.text = (mDialogView.tvCantInicial.text.toString().toFloat() + mDialogView.tvNuevaCantidad.text.toString().toFloat()).toString() - } - } - mDialogView.rbRestar.setOnClickListener { - if (!mDialogView.tvNuevaCantidad.text.isNullOrEmpty()) { - if (mDialogView.tvCantInicial.text.toString().toFloat() >= mDialogView.tvNuevaCantidad.text.toString().toFloat()) { - mDialogView.tvgenerico4.text = (mDialogView.tvCantInicial.text.toString().toFloat() - mDialogView.tvNuevaCantidad.text.toString().toFloat()).toString() - } - } - } - mDialogView.rbMdodificar.setOnClickListener { - if (!mDialogView.tvNuevaCantidad.text.isNullOrEmpty()) { - mDialogView.tvgenerico4.text = (mDialogView.tvNuevaCantidad.text.toString().toFloat()).toString() - } - } - mDialogView.btnAceptar.setOnClickListener { - mAlertDialog.dismiss() - val name = mDialogView.tvgenerico4.text.toString().toFloat() - fCant = 0F - fCant = name - listArticulos[indiceDelArtEncontrado].cantTomada = fCant - updateCantidad(listArticulos[indiceDelArtEncontrado].sector.toString(), listArticulos[indiceDelArtEncontrado].codigo.toString(), fCant) - viewAdapter.notifyDataSetChanged() - } - mDialogView.dialogCancelBtn.setOnClickListener { - mAlertDialog.dismiss() - } -// fCant = listArticulos[indiceDelArtEncontrado].cantTomada -// val type = InputType.TYPE_CLASS_NUMBER -// MaterialDialog(requireContext()).show { -// -// title(text = "Producto '$sChangeUpper', se encuentra cargado.") -// message(R.string.sCantidadNueva) -// input(waitForPositiveButton = false, hint = "99.99", inputType = type) { materialDialog, charSequence -> -// fCant = 0F -// fCant = charSequence.toString().toFloat() + return@setOnKeyListener true + } +// 2 -> {//TODO: BUSQUEDA POR CODIGO DE ORIGEN************************************************************************** +// indiceDelArtEncontrado = buscoArtEnRv(sChangeUpper.toUpperCase(Locale.ROOT), 3)//TODO Si encuentra el articulo en el RV devuelve el indice +// //TODO Si no lo encuentra devuelve -1 +// if (indiceDelArtEncontrado != -1) { +// if (swSumaUno!!.isChecked) { +// fCant = 0F +// fCant = listArticulos[indiceDelArtEncontrado].cantTomada +// fCant += 1F +// //TODO ACTUALIZO LA CANTIDAD EN LA BD +// updateCantidad(listArticulos[indiceDelArtEncontrado].sector.toString(), listArticulos[indiceDelArtEncontrado].codigo.toString(), fCant) +// //TODO ACTUALIZO LA CANTIDAD EN EL RV +// listArticulos[indiceDelArtEncontrado].cantTomada = fCant +// viewAdapter.notifyDataSetChanged() +// } else { +// val mDialogView = LayoutInflater.from(context).inflate(R.layout.login_dialog, null) +// val mBuilder = AlertDialog.Builder(context).setView(mDialogView).setTitle("Producto '${listArticulos[indiceDelArtEncontrado].descripcion}', se encuentra cargado.") +// .setCancelable(false) +// mDialogView.tvCantInicial.text = listArticulos[indiceDelArtEncontrado].cantTomada.toString() +// val mAlertDialog = mBuilder.show() +// mDialogView.rbSumar.setOnClickListener { +// if (!mDialogView.tvNuevaCantidad.text.isNullOrEmpty()) { +// mDialogView.tvgenerico4.text = (mDialogView.tvCantInicial.text.toString().toFloat() + mDialogView.tvNuevaCantidad.text.toString().toFloat()).toString() +// } // } -// positiveButton(R.string.btnOk) { -// //TODO ACTUALIZO CANTIADAD EN BD -// updateCantidad(listArticulos[indiceDelArtEncontrado].sector.toString(), listArticulos[indiceDelArtEncontrado].codigo.toString(), fCant) -// //TODO ACTUALIZO CANTIDAD EN RV +// mDialogView.rbRestar.setOnClickListener { +// if (!mDialogView.tvNuevaCantidad.text.isNullOrEmpty()) { +// if (mDialogView.tvCantInicial.text.toString().toFloat() >= mDialogView.tvNuevaCantidad.text.toString().toFloat()) { +// mDialogView.tvgenerico4.text = (mDialogView.tvCantInicial.text.toString().toFloat() - mDialogView.tvNuevaCantidad.text.toString().toFloat()).toString() +// } +// } +// } +// mDialogView.rbMdodificar.setOnClickListener { +// if (!mDialogView.tvNuevaCantidad.text.isNullOrEmpty()) { +// mDialogView.tvgenerico4.text = (mDialogView.tvNuevaCantidad.text.toString().toFloat()).toString() +// } +// } +// mDialogView.btnAceptar.setOnClickListener { +// mAlertDialog.dismiss() +// val name = mDialogView.tvgenerico4.text.toString().toFloat() +// fCant = 0F +// fCant = name // listArticulos[indiceDelArtEncontrado].cantTomada = fCant +// updateCantidad(listArticulos[indiceDelArtEncontrado].sector.toString(), listArticulos[indiceDelArtEncontrado].codigo.toString(), fCant) // viewAdapter.notifyDataSetChanged() -// dismiss() // } -// }.cancelOnTouchOutside(false).cornerRadius(10F) - } - } else if (indiceDelArtEncontrado == -1) {// no lo encontro en el RV, lo va a buscar en al BD - - GlobalScope.launch(Dispatchers.Main) { - //TODO BUSCO EN BASE DE DATOS - listArticulos[indiceDelArtEncontrado].cantTomada - val artEncontrado = buscarCBEnBD(sChangeUpper.toUpperCase(Locale.ROOT)) - ContinuarCargaCB(artEncontrado) - } - } - return@setOnKeyListener true +// mDialogView.dialogCancelBtn.setOnClickListener { +// mAlertDialog.dismiss() +// } +//// fCant = listArticulos[indiceDelArtEncontrado].cantTomada +//// val type = InputType.TYPE_CLASS_NUMBER +//// MaterialDialog(requireContext()).show { +//// +//// title(text = "Producto '$sChangeUpper', se encuentra cargado.") +//// message(R.string.sCantidadNueva) +//// input(waitForPositiveButton = false, hint = "99.99", inputType = type) { materialDialog, charSequence -> +//// fCant = 0F +//// fCant = charSequence.toString().toFloat() +//// } +//// positiveButton(R.string.btnOk) { +//// //TODO ACTUALIZO CANTIADAD EN BD +//// updateCantidad(listArticulos[indiceDelArtEncontrado].sector.toString(), listArticulos[indiceDelArtEncontrado].codigo.toString(), fCant) +//// //TODO ACTUALIZO CANTIDAD EN RV +//// listArticulos[indiceDelArtEncontrado].cantTomada = fCant +//// viewAdapter.notifyDataSetChanged() +//// dismiss() +//// } +//// }.cancelOnTouchOutside(false).cornerRadius(10F) +// } +// } else if (indiceDelArtEncontrado == -1) {// no lo encontro en el RV, lo va a buscar en al BD +// +// GlobalScope.launch(Dispatchers.Main) { +// //TODO BUSCO EN BASE DE DATOS +// listArticulos[indiceDelArtEncontrado].cantTomada +// val artEncontrado = buscarCBEnBD(sChangeUpper.toUpperCase(Locale.ROOT)) +// ContinuarCargaCB(artEncontrado) +// } +// } +// return@setOnKeyListener true +// } } } } @@ -299,39 +320,76 @@ class InventarioFragment : Fragment(), ProductosListAdapter.OnImageDotsClickList super.onViewCreated(view, savedInstanceState) navController = Navigation.findNavController(view) etCodigoBarras.requestFocus() + val modalDialog = NoEncontradoSimple() + modalDialog.show(requireActivity().supportFragmentManager, "confirmDialog") btnBorrarInv.setOnClickListener { - MaterialDialog(requireContext()).show { - title(R.string.sTituloBorrarInv) - message(R.string.sMensajeBorrarInv) - positiveButton(R.string.btnOk) { + AlertDialog.Builder(requireContext()) + .setTitle("Eliminación de Inventarios") + .setMessage("¿Confirma que desea eliminar el inventario?") + .setPositiveButton(R.string.btnOk, + DialogInterface.OnClickListener { dialog, which -> BorrarInvActual() Toast.makeText(requireContext(), "El inventario $InventarioNuevo fue Borrado", Toast.LENGTH_LONG).show() navController.navigate(R.id.action_inventarioFragment_to_mainFragment2) InventarioNuevo = 0 - dismiss() - } - negativeButton { - dismiss() - } - }.cancelOnTouchOutside(false).cornerRadius(10F) + + }) + .setNegativeButton(R.string.btnCancelar, + DialogInterface.OnClickListener { dialog, which -> + //botón cancel pulsado + }) + .show() + + +// MaterialDialog(requireContext()).show { +// title(R.string.sTituloBorrarInv) +// message(R.string.sMensajeBorrarInv) +// positiveButton(R.string.btnOk) { +// BorrarInvActual() +// Toast.makeText(requireContext(), "El inventario $InventarioNuevo fue Borrado", Toast.LENGTH_LONG).show() +// navController.navigate(R.id.action_inventarioFragment_to_mainFragment2) +// InventarioNuevo = 0 +// dismiss() +// } +// negativeButton { +// dismiss() +// } +// }.cancelOnTouchOutside(false).cornerRadius(10F) } btnExportarInv.setOnClickListener { - MaterialDialog(requireContext()).show { - title(R.string.sTituloExportar) - message(R.string.sMensajeExportar) - positiveButton(R.string.btnOk) { - BorrarInvActual() - Toast.makeText(requireContext(), "El inventario $InventarioNuevo fue Exportado al Servidor", Toast.LENGTH_LONG).show() - navController.navigate(R.id.action_inventarioFragment_to_mainFragment2) - InventarioNuevo = 0 - dismiss() - } - negativeButton { - dismiss() - } - }.cancelOnTouchOutside(false).cornerRadius(10F) + AlertDialog.Builder(requireContext()) + .setTitle(R.string.sTituloExportar) + .setMessage(R.string.sMensajeExportar) + .setPositiveButton(R.string.btnOk, + DialogInterface.OnClickListener { dialog, which -> + BorrarInvActual() + Toast.makeText(requireContext(), "El inventario $InventarioNuevo fue Exportado al Servidor", Toast.LENGTH_LONG).show() + navController.navigate(R.id.action_inventarioFragment_to_mainFragment2) + InventarioNuevo = 0 + + }) + .setNegativeButton(R.string.btnCancelar, + DialogInterface.OnClickListener { dialog, which -> + //botón cancel pulsado + }) + .show() + +// MaterialDialog(requireContext()).show { +// title(R.string.sTituloExportar) +// message(R.string.sMensajeExportar) +// positiveButton(R.string.btnOk) { +// BorrarInvActual() +// Toast.makeText(requireContext(), "El inventario $InventarioNuevo fue Exportado al Servidor", Toast.LENGTH_LONG).show() +// navController.navigate(R.id.action_inventarioFragment_to_mainFragment2) +// InventarioNuevo = 0 +// dismiss() +// } +// negativeButton { +// dismiss() +// } +// }.cancelOnTouchOutside(false).cornerRadius(10F) } ivCamara.setOnClickListener { if (!bFirst) { @@ -397,6 +455,7 @@ class InventarioFragment : Fragment(), ProductosListAdapter.OnImageDotsClickList } + @SuppressLint("RestrictedApi") private fun ContinuarCargaDesc(artAcargar: ArrayList) { //TODO DESPUES DE INGRESAR LA DESCRIPCION Y DE BUSCAR LOS CAINCIDENCIAS EN LA BASE SE VA A MOSTRAR LAS MISMAS //TODO SI LA CANTIDAD ENCONTRADA ES UNO, LO CARGO DIRECTAMENTE EN EL RV @@ -428,6 +487,7 @@ class InventarioFragment : Fragment(), ProductosListAdapter.OnImageDotsClickList bundle = bundleOf("ArrayDesc" to artAcargar) bundle.putInt("numeroInv", InventarioNuevo) navController.navigate(R.id.action_inventarioFragment_to_descripcionFragment, bundle) + //navController.backStack.removeLast() } // } else {//SI NO ESTA +1 // if (artAcargar.size == 1) { // TODO: SI EN EL ARRAY SOLO HAY UN ITEM LO METE DIRECTAMENTE AL RV @@ -496,25 +556,34 @@ class InventarioFragment : Fragment(), ProductosListAdapter.OnImageDotsClickList } else {//SI NO ESTA +1 PREGUNTA CANTIDAD val mDialogView = LayoutInflater.from(context).inflate(R.layout.ingresar_cantidad, null) - val mBuilder = AlertDialog.Builder(context).setView(mDialogView).setCancelable(false) - mDialogView.tvTitulo.text="Producto '${artAcargar.descripcion.toString()}'." + val mBuilder = AlertDialog.Builder(context).setView(mDialogView) + .setCancelable(false) + mDialogView.tvTitulo.text = "${artAcargar.descripcion.toString()}" val mAlertDialog = mBuilder.show() mDialogView.btnAceptar.setOnClickListener { - mAlertDialog.dismiss() - fCant = 0F - fCant = mDialogView.etCantidad.text.toString().toFloat() - cargarArtEnBd(artAcargar, fCant) - cargarRecicler(artAcargar, fCant) + if (mDialogView.etCantidad.text.isNullOrEmpty()) { + mDialogView.etCantidad.error = "No vacio" + mDialogView.etCantidad.requestFocus() + mDialogView.etCantidad.hint = "Ingrese un valor" + } else if (!mDialogView.etCantidad.text.isNullOrEmpty()) { + mAlertDialog.dismiss() +// fCant = 0F +// fCant = mDialogView.etCantidad.text.toString().toFloat() + cargarArtEnBd(artAcargar, mDialogView.etCantidad.text.toString().toFloat()) + cargarRecicler(artAcargar, mDialogView.etCantidad.text.toString().toFloat()) + } } } } else {// TODO si no lo encuentra en la BD - - MaterialDialog(requireContext()).show { - title(text = "El producto: $sChangeUpper") - message(text = "¡No fue encontrado!") - positiveButton(R.string.btnOk) {} - dismiss() - } + val modalDialog = NoEncontradoSimple() + modalDialog.show(requireActivity().supportFragmentManager, "confirmDialog") +// MaterialDialog(requireContext()).show { +// +// title(text = "El producto: $sChangeUpper") +// message(text = "¡No fue encontrado!") +// positiveButton(R.string.btnOk) {} +// dismiss() +// } } etCodigoBarras.focusable = View.FOCUSABLE etCodigoBarras.setText("") @@ -548,36 +617,52 @@ class InventarioFragment : Fragment(), ProductosListAdapter.OnImageDotsClickList }.await() } - private fun buscoArtEnRv(codigoBarras: String, sTipoBusqueda: Int): Int { - var indice = 0 - var bEncontrado = false - if (sTipoBusqueda == 0) {//TODO BUSQUEDA POR CODIGO DE BARRAS - for (item in listArticulos) { - if (item.codigoBarras!!.toUpperCase(Locale.ROOT).contains(codigoBarras)) { - bEncontrado = true - break + private suspend fun buscoArtEnRv(codigoBarras: String, sTipoBusqueda: Int): Int { + + return GlobalScope.async(Dispatchers.IO) { + var indice = 0 + var bEncontrado = false + if (sTipoBusqueda == 0) {//TODO BUSQUEDA POR CODIGO DE BARRAS + // TODO CAMBIO DE CB A CODIGO DEBO + val any = cambioCBporCodigoDebo(codigoBarras) + if (any != null) { + for (item in listArticulos) { + if (item.sector!!.toInt() == any.sector!!.toInt() && item.codigo!!.toInt() == any.codigo!!.toInt()) { + bEncontrado = true + break + } + indice += 1 + } } - indice += 1 - } - } else if (sTipoBusqueda == 1) {//TODO BUSQUEDA POR DESCRIPCION - for (item in listArticulos) { - if (item.descripcion!!.toUpperCase(Locale.ROOT).contains(codigoBarras)) { - bEncontrado = true - break + + } else if (sTipoBusqueda == 1) {//TODO BUSQUEDA POR DESCRIPCION + for (item in listArticulos) { + if (item.descripcion!!.toUpperCase(Locale.ROOT).contains(codigoBarras)) { + bEncontrado = true + break + } + indice += 1 } - indice += 1 - } - } else if (sTipoBusqueda == 2) {//TODO BUSQUEDA POR CODIGO DE ORIGEN - for (item in listArticulos) { - if (item.codigoOrigen!!.toUpperCase(Locale.ROOT).contains(codigoBarras)) { - bEncontrado = true - break + } else if (sTipoBusqueda == 2) {//TODO BUSQUEDA POR CODIGO DE ORIGEN + for (item in listArticulos) { + if (item.codigoOrigen!!.toUpperCase(Locale.ROOT).contains(codigoBarras)) { + bEncontrado = true + break + } + indice += 1 } - indice += 1 } - } - return if (bEncontrado) indice - else -1 + return@async if (bEncontrado) indice else -1 + }.await() + } + + suspend fun cambioCBporCodigoDebo(codigoBarras: String): Articles? { + //TODO BUSQUEDA POR DESCRIPCION + var busqueda: Articles? = null + return GlobalScope.async(Dispatchers.IO) { + busqueda = AppDb.getAppDb(requireContext())!!.ArticulosDAO()!!.findArticuloByCodBar(codigoBarras, iArea) + return@async busqueda + }.await() } private fun cargarArtEnBd(articulos: Articles, cant: Float) { @@ -660,7 +745,6 @@ class InventarioFragment : Fragment(), ProductosListAdapter.OnImageDotsClickList } private fun SerchArea() { - if (sharedPreferences.contains("rbVentas")) if (sharedPreferences.getString("rbVentas", "").toString() == "1") iArea = 0 if (sharedPreferences.contains("rbDeposito")) if (sharedPreferences.getString("rbDeposito", "").toString() == "1") iArea = 1 } @@ -706,40 +790,49 @@ class InventarioFragment : Fragment(), ProductosListAdapter.OnImageDotsClickList override fun onImagePenClick(sector: String?, codigo: String?, cantidad: String?, position: String) { val mDialogView = LayoutInflater.from(context).inflate(R.layout.login_dialog, null) - val mBuilder = AlertDialog.Builder(context).setView(mDialogView).setTitle("Producto '${listArticulos[position.toInt()].descripcion}'.").setCancelable(false) + val mBuilder = AlertDialog.Builder(context).setView(mDialogView).setTitle("${listArticulos[position.toInt()].descripcion}") +// .setCancelable(false) mDialogView.tvCantInicial.text = cantidad val mAlertDialog = mBuilder.show() mDialogView.rbSumar.setOnClickListener { if (!mDialogView.tvNuevaCantidad.text.isNullOrEmpty()) { mDialogView.tvgenerico4.text = (mDialogView.tvCantInicial.text.toString().toFloat() + mDialogView.tvNuevaCantidad.text.toString().toFloat()).toString() + mDialogView.tvNuevaCantidad.isEnabled=false } } mDialogView.rbRestar.setOnClickListener { if (!mDialogView.tvNuevaCantidad.text.isNullOrEmpty()) { if (mDialogView.tvCantInicial.text.toString().toFloat() >= mDialogView.tvNuevaCantidad.text.toString().toFloat()) { mDialogView.tvgenerico4.text = (mDialogView.tvCantInicial.text.toString().toFloat() - mDialogView.tvNuevaCantidad.text.toString().toFloat()).toString() + mDialogView.tvNuevaCantidad.isEnabled=false } } } mDialogView.rbMdodificar.setOnClickListener { if (!mDialogView.tvNuevaCantidad.text.isNullOrEmpty()) { mDialogView.tvgenerico4.text = (mDialogView.tvNuevaCantidad.text.toString().toFloat()).toString() + mDialogView.tvNuevaCantidad.isEnabled=false } } mDialogView.btnAceptar.setOnClickListener { - mAlertDialog.dismiss() - val name = mDialogView.tvgenerico4.text.toString().toFloat() - fCant = 0F - fCant = name - listArticulos[position.toInt()].cantTomada = fCant - updateCantidad(listArticulos[position.toInt()].sector.toString(), listArticulos[position.toInt()].codigo.toString(), fCant) - viewAdapter.notifyDataSetChanged() + if (!mDialogView.tvNuevaCantidad.text.isNullOrEmpty()) { + mAlertDialog.dismiss() + val name = mDialogView.tvgenerico4.text.toString().toFloat() + fCant = 0F + fCant = name + listArticulos[position.toInt()].cantTomada = fCant + updateCantidad(listArticulos[position.toInt()].sector.toString(), listArticulos[position.toInt()].codigo.toString(), fCant) + viewAdapter.notifyDataSetChanged() + } else if (mDialogView.tvNuevaCantidad.text.isNullOrEmpty()) { + mDialogView.tvNuevaCantidad.error = "No vacio" + mDialogView.tvNuevaCantidad.requestFocus() + mDialogView.tvNuevaCantidad.hint = "Ingrese un valor" + } } mDialogView.dialogCancelBtn.setOnClickListener { mAlertDialog.dismiss() } } - } diff --git a/app/src/main/java/com/focasoftware/deboinventariov20/ui/main/InventarioListAdapter.kt b/app/src/main/java/com/focasoftware/deboinventariov20/ui/main/InventarioListAdapter.kt index 5c4be26..bc9bec3 100644 --- a/app/src/main/java/com/focasoftware/deboinventariov20/ui/main/InventarioListAdapter.kt +++ b/app/src/main/java/com/focasoftware/deboinventariov20/ui/main/InventarioListAdapter.kt @@ -5,11 +5,12 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.recyclerview.widget.RecyclerView +import com.focasoftware.deboinventariov20.Model.InvHead import com.focasoftware.deboinventariov20.R import com.focasoftware.deboinventariov20.ui.util.Base.BaseViewHolder import kotlinx.android.synthetic.main.item_principal.view.* -class InventarioListAdapter(private val context: Context, private val inv: ArrayList, private val itemClickListener: OnInventarioClickListener) : +class InventarioListAdapter(private val context: Context, private val inv: ArrayList, private val itemClickListener: OnInventarioClickListener) : RecyclerView.Adapter>() { interface OnInventarioClickListener { @@ -21,10 +22,10 @@ class InventarioListAdapter(private val context: Context, private val inv: Array override fun getItemCount() = inv.size - inner class ItemsViewHolder(itemView: View) : BaseViewHolder(itemView) { - override fun bind(item: ItemInventario, position: Int) { - itemView.setOnClickListener {itemClickListener.onItemClick(item.inventario)} - itemView.tvPrincipalinventario.text = item.inventario + inner class ItemsViewHolder(itemView: View) : BaseViewHolder(itemView) { + override fun bind(item: InvHead, position: Int) { + itemView.setOnClickListener {itemClickListener.onItemClick(item.invNum.toString())} + itemView.tvPrincipalinventario.text = item.invNum.toString() } } diff --git a/app/src/main/java/com/focasoftware/deboinventariov20/ui/main/MainFragment.kt b/app/src/main/java/com/focasoftware/deboinventariov20/ui/main/MainFragment.kt index 58d9fea..88d594c 100644 --- a/app/src/main/java/com/focasoftware/deboinventariov20/ui/main/MainFragment.kt +++ b/app/src/main/java/com/focasoftware/deboinventariov20/ui/main/MainFragment.kt @@ -6,6 +6,10 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.CheckBox +import android.widget.ImageView +import android.widget.LinearLayout +import android.widget.TextView import androidx.fragment.app.Fragment import androidx.navigation.NavController import androidx.navigation.Navigation @@ -21,23 +25,33 @@ import kotlinx.coroutines.launch import java.util.* class MainFragment : Fragment(), InventarioListAdapter.OnInventarioClickListener { - private lateinit var inventarios: List + private lateinit var inventarios: ArrayList + private lateinit var ordenado: ArrayList private lateinit var rcInventario: RecyclerView private lateinit var viewAdapter: RecyclerView.Adapter<*> private lateinit var viewManager: RecyclerView.LayoutManager - private var listIvn = ArrayList() + private var listIvn = ArrayList() private lateinit var navController: NavController private lateinit var sharedPreferences: SharedPreferences + private var cantidadInventarios: Int = 0 override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) sharedPreferences = requireActivity().getSharedPreferences("SP_INFO", Context.MODE_PRIVATE) - - } override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { + var bAbiertoCerrado = false val v = inflater.inflate(R.layout.fragment_main, container, false) + val tvInvDinamicos = v.findViewById(R.id.tvInvDinamicos) + val txtDeposito = v.findViewById(R.id.txtDeposito) + val tvFecha = v.findViewById(R.id.tvFecha) + val ivSort19= v.findViewById(R.id.ivSort19) + val ivSort91= v.findViewById(R.id.ivSort91) + val cbVentas= v.findViewById(R.id.cbVentas) + val cbDeposito= v.findViewById(R.id.cbDeposito) + + rcInventario = v.findViewById(R.id.rcInventario) GlobalScope.launch(Dispatchers.Main) { inventarios = buscarEnBDInvHead() @@ -52,15 +66,52 @@ class MainFragment : Fragment(), InventarioListAdapter.OnInventarioClickListener inventarios[i].stDesc, inventarios[i].proNoCont) cargarRecicler(inv) + cantidadInventarios = i + 1 + } + tvInvDinamicos.text = "Inventarios Dinamicos (${cantidadInventarios.toString()})+" + tvInvDinamicos.setOnClickListener { + if (!bAbiertoCerrado) { + bAbiertoCerrado = true + txtDeposito.visibility = View.GONE + rcInventario.visibility = View.VISIBLE + ivSort91.visibility = View.VISIBLE + ivSort19.visibility = View.INVISIBLE + tvFecha.visibility = View.VISIBLE + cbVentas.visibility = View.VISIBLE + cbDeposito.visibility = View.VISIBLE + tvInvDinamicos.text = "Inventarios Dinamicos (${cantidadInventarios.toString()})-" + } else { + bAbiertoCerrado = false + rcInventario.visibility = View.GONE + ivSort91.visibility = View.GONE + ivSort19.visibility = View.GONE + tvFecha.visibility = View.GONE + txtDeposito.visibility = View.VISIBLE + cbVentas.visibility = View.GONE + cbDeposito.visibility = View.GONE + tvInvDinamicos.text = "Inventarios Dinamicos (${cantidadInventarios.toString()})+" + } + } + ivSort91.setOnClickListener { + ordenado= inventarios.sortedByDescending { + it.invNum + } as ArrayList + viewAdapter = InventarioListAdapter(requireContext(), ordenado, this@MainFragment) + viewManager = LinearLayoutManager(requireContext()) + + rcInventario.apply { + adapter = viewAdapter + layoutManager = viewManager + } + viewAdapter.notifyDataSetChanged() } } - rcInventario = v.findViewById(R.id.rcInventario) return v } - suspend fun buscarEnBDInvHead(): List { + suspend fun buscarEnBDInvHead(): ArrayList { //TODO BUSQUEDA POR DESCRIPCION - var busqueda: List + var busqueda: ArrayList return GlobalScope.async(Dispatchers.IO) { busqueda = AppDb.getAppDb(requireContext())!!.InvHeadDAO()!!.fetchAllInvHead() return@async busqueda @@ -70,12 +121,12 @@ class MainFragment : Fragment(), InventarioListAdapter.OnInventarioClickListener fun cargarRecicler(inv: InvHead) { //TODO CARGO EN LE RV - val number = if (inv.invNum.toLong()<10) "0${inv.invNum.toLong()}" else inv.invNum.toString() + val number = if (inv.invNum.toLong() < 10) "0${inv.invNum.toLong()}" else inv.invNum.toString() val item = ItemInventario("N° $number ${inv.descripcion}. Fecha: ${inv.fechaFinal}") //(articulos.sector, articulos.codigo, articulos.descripcion, cant, articulos.codBar) - listIvn.add(item) - - viewAdapter = InventarioListAdapter(requireContext(),listIvn,this) +// listIvn.add(item) + listIvn.add(inv) + viewAdapter = InventarioListAdapter(requireContext(), listIvn, this) viewManager = LinearLayoutManager(requireContext()) rcInventario.apply { @@ -92,13 +143,13 @@ class MainFragment : Fragment(), InventarioListAdapter.OnInventarioClickListener override fun onItemClick(inventario: String?) { - val editor = sharedPreferences.edit() - var invSel:String =inventario.toString() - invSel=invSel.substring(3, 5) - editor?.putString("Inventario", invSel) - editor?.apply() - editor.commit() - navController.navigate(R.id.action_mainFragment2_to_inventarioFragment) + val editor = sharedPreferences.edit() +// var invSel: String = inventario.toString() +// invSel = invSel.substring(3, 5) + editor?.putString("Inventario", inventario) + editor?.apply() + editor.commit() + navController.navigate(R.id.action_mainFragment2_to_inventarioFragment) } diff --git a/app/src/main/java/com/focasoftware/deboinventariov20/ui/util/Base/BaseViewHolder.kt b/app/src/main/java/com/focasoftware/deboinventariov20/ui/util/Base/BaseViewHolder.kt index b987ed9..aef6d12 100644 --- a/app/src/main/java/com/focasoftware/deboinventariov20/ui/util/Base/BaseViewHolder.kt +++ b/app/src/main/java/com/focasoftware/deboinventariov20/ui/util/Base/BaseViewHolder.kt @@ -1,8 +1,56 @@ package com.focasoftware.deboinventariov20.ui.util.Base +import android.app.AlertDialog +import android.app.Dialog +import android.os.Bundle import android.view.View +import androidx.fragment.app.DialogFragment import androidx.recyclerview.widget.RecyclerView abstract class BaseViewHolder(itemView:View):RecyclerView.ViewHolder(itemView) { abstract fun bind(item:T, position:Int) +} +class NoEncontradoSimple : DialogFragment() { + + override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { + return activity?.let { + val title = "" + val content = "¡El producto buscado NO fue encontrado!" + val builder: AlertDialog.Builder = AlertDialog.Builder(requireActivity()) + builder.setTitle(title).setMessage(content) + .setPositiveButton(android.R.string.ok) { _, _ -> + //Todo OK click + } + + return builder.create() + } ?: throw IllegalStateException("Activity cannot be null") + } + +} + +class AlertDialogBorrarInv : DialogFragment() { + + interface OnBorrarInvClickListener { + fun onPositiveClick() + fun onCancelClick() + } + + override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { + return activity?.let { + val title = "Borrar Inventario" + val content = "¿Seguro que desea Borrar el inventario?" + val builder: AlertDialog.Builder = AlertDialog.Builder(requireActivity()) + builder.setTitle(title).setMessage(content) + .setPositiveButton(android.R.string.ok) { _, _ -> + val listener = activity as OnBorrarInvClickListener? + listener!!.onPositiveClick() + } + .setNegativeButton(android.R.string.cancel) { _, _ -> + val listener = activity as OnBorrarInvClickListener? + listener!!.onCancelClick() + } + return builder.create() + } ?: throw IllegalStateException("Activity cannot be null") + } + } \ No newline at end of file diff --git a/app/src/main/res/drawable/collapse.xml b/app/src/main/res/drawable/collapse.xml new file mode 100644 index 0000000..1550145 --- /dev/null +++ b/app/src/main/res/drawable/collapse.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/expand.xml b/app/src/main/res/drawable/expand.xml new file mode 100644 index 0000000..adc215c --- /dev/null +++ b/app/src/main/res/drawable/expand.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/ic_sort19.xml b/app/src/main/res/drawable/ic_sort19.xml new file mode 100644 index 0000000..e188910 --- /dev/null +++ b/app/src/main/res/drawable/ic_sort19.xml @@ -0,0 +1,6 @@ + + + + + diff --git a/app/src/main/res/drawable/ic_sort91.xml b/app/src/main/res/drawable/ic_sort91.xml new file mode 100644 index 0000000..1abe4d5 --- /dev/null +++ b/app/src/main/res/drawable/ic_sort91.xml @@ -0,0 +1,6 @@ + + + + + diff --git a/app/src/main/res/layout/fragment_main.xml b/app/src/main/res/layout/fragment_main.xml index d63147e..e7d4097 100644 --- a/app/src/main/res/layout/fragment_main.xml +++ b/app/src/main/res/layout/fragment_main.xml @@ -3,11 +3,10 @@ xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" - android:layout_height="match_parent" - tools:context=".ui.main.MainFragment"> + android:layout_height="match_parent"> + app:layout_constraintTop_toTopOf="parent" /> - - - + app:layout_constraintTop_toBottomOf="@id/tvInvDinamicos" /> - - - - - + app:layout_constraintTop_toBottomOf="@id/tvInvDinamicos" /> - + + - - - - - - + app:layout_constraintTop_toBottomOf="@id/tvFecha" + tools:listitem="@layout/item_principal" /> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + android:layout_margin="5dp" + android:visibility="gone" + android:text="Deposito" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintTop_toBottomOf="@+id/tvInvDinamicos" /> - + \ No newline at end of file diff --git a/app/src/main/res/layout/ingresar_cantidad.xml b/app/src/main/res/layout/ingresar_cantidad.xml index 0167e33..424821e 100644 --- a/app/src/main/res/layout/ingresar_cantidad.xml +++ b/app/src/main/res/layout/ingresar_cantidad.xml @@ -7,9 +7,9 @@ android:layout_height="wrap_content" app:cardCornerRadius="10dp" app:cardElevation="5dp" - android:background="@drawable/md_transparent" - tools:ignore="PrivateResource"> + tools:ignore="PrivateResource"> + - - - - - - - - - - - - - - - - - - - - - - - - - -