From 15c37e974eb2af5cdaf737ef807f0d620d706dcc Mon Sep 17 00:00:00 2001 From: Mauricio Sanchez Date: Mon, 31 Aug 2020 23:09:30 -0300 Subject: [PATCH] 31022020 2309 --- Solicitudes API Articulos y Time.docx | Bin 14610 -> 14653 bytes app/build.gradle | 7 +- .../deboinventariov20/DB/DAO/ArticulosDAO.kt | 2 +- .../deboinventariov20/Model/ProductosService.kt | 4 +- .../ui/descripcionFragment/DescripcionFragment.kt | 7 +- .../ui/inventario/InventarioFragment.kt | 329 ++++++++++----------- .../ui/inventario/ItemsRecycler.kt | 2 +- .../ui/inventario/ProductosListAdapter.kt | 25 -- .../ui/main/InventarioListAdapter.kt | 2 +- .../deboinventariov20/ui/main/MainFragment.kt | 52 ++-- app/src/main/res/layout/fragment_main.xml | 30 +- gradle/wrapper/gradle-wrapper.properties | 15 + 12 files changed, 229 insertions(+), 246 deletions(-) diff --git a/Solicitudes API Articulos y Time.docx b/Solicitudes API Articulos y Time.docx index 2ac0eb1e5fce1ffa03f73582ccb3fea371d2612d..b8725bf58faf6edae3b2a6d2b2c063b81e3ea9f1 100644 GIT binary patch delta 6390 zcmY*;cQo8#)As732hm%!)q5vetlov_(Z%XPl;EfLwpK(7(MyOHMD()SB3Qk*AbRxf z&G&rY`JVI6UvuV~`^=nkU-!)1XHws_y{qZMCX!Nw%v0inKvT*f&{Gh6O^giKH(zqw z`0=crf6SLD@CB^_GeoV69sgd}#NBb9X>^o=BTg~>qf$%bj`};HIh)X+lmiIkm)AiN z{_vnw2KAG?eb$7HJWky=N)(XbyV13^wdX!L)g9L&4EeVbNHSP%!*{YpMNgVo>(u4k zhV~Ak_BvAz{%&uoBqf@>28Iow^?c--@$vY)=Z~%u$}@)omucee%$oFb!(p7wyLq?m zaSIuuQ@AIoJu{^^LXEZ0)zb^Eyg}{FXWqtlDd9i35GsXiamjALtz9w7_rBj#+t96@=8|R62WI zu*ul}=$HwF8F@trQn%A|xg;Y57+`Azker4RlK|7EN9eMpzFgJ(%qNq0O~^w<>>KH5 z{gd|;$?}xUBS)!&fl)wm6C^y^S2*Q%JK_gpvcow8d)B(Q|Imx;k6e@?TxZVr$turI zx1Wku3NVw}EGtHKL-T~$ZELzA{buD3YRy>%7@250&LEz+XY>yQJr#oU<2F(1IZB?; zVUG$un8cuBZB_xJbE*mYz{ZRMl`zBghM!u&;K9Q11v43H5FOz4r!{q4i(s&mIL51- zzxz~b_aG*8-{OJZ?nL+by_*3nGW@9kx~;NRav2@kHD#2c zJ8THD%porJQa6UjD=}9+%Cpao)s{cs^m1x9?sET(^!T zyLbO7Gp-J9e$@=vd1ekGlb_0T5UV&=;VxR_G|bnDd}SaS$`1YXY35I5$twg$y6A$> z)CC>?!hjp?a5QSYm0wvcjT~j2!?Il$u9((87bHYZjRz*%^lFNh`tw47xL#?X1cIfj z$EAQ>c%vUqqm&V&`LA=ySD6yr!8qNKMH^fzbH61zT8+=*&69sMK!S{r* zy}UlB_!gq)Su7>W9Y!0^9bm$LROYPuH(GYkKR&gd9^{YI0I%M~m|Le47tjzYJQaqKLq1 zA0WBKYI7N>2+4@-yhlPK{u4N(7fiMa$G<$lZyYKzav9W9u0iZ98WpWIX}8y%u*~G6)<_0sTFQZ1#*ZA$9M*v6Z-)RV&DZ5FfOl^`ExR;MXl zWDf}>?@?IO4QujcxByb|?9wSAPNI#_0P_Khx0$BbtBitePC5-til57N@-!~r4fnun z4q&9|#)OOFpg((Zme7~?$aZ88ckq?08F1^#m$zRSG4IKmwxc0N8l$t>l6*-S=|0a@ zVa8KAp~#hQ^$dG2^rFn^Ll*4-+rugN09Lfzl0Vb}MF5exo(tW!uo zKVPmfuQ&qQR%9%m20rA=8;A>7Comwt0;*Xjs9mpWpSbV7xc3ix?jBxCEjRZw02gjZ zvyQ^?Gz0!RY@V})doLUgo1>;5GQL25o~pxqlLLux-pRnUw-F*?=% znWPxPd9pYHYq)AJc;z5)^J^`_`Ac4g4S`qu9^pvlEEA2HK5AKX+eVGLp6=V;K4;ty|- zp(=652g9qox|t*MuY8nQQS|Cb?N%T7I10}#j+oyb$g@m^J*klY=H*lDLN)x|H6FFG zr-;p8_!3?h9gacc-}!Hs=&R6Zc74ZuqJ6Ie(d3QOeLf`GAgnSxDy8>#P;xsK zmz!tqZ5EIt=_R?3!hH�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 Y|KV%@aFYLZUJL$5f(6?_?Ee`52P;+}Bme*a delta 6376 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 diff --git a/app/build.gradle b/app/build.gradle index 3149384..bdd8ed2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -13,8 +13,12 @@ android { targetSdkVersion 30 versionCode 1 versionName "1.0" - testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + javaCompileOptions { + annotationProcessorOptions { + arguments = ["room.incremental":"true"] + } + } } buildTypes { @@ -26,6 +30,7 @@ android { compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 + } kotlinOptions { jvmTarget = '1.8' 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 f4dee6d..7dc2f87 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 @@ -46,7 +46,7 @@ interface InvHeadDAO { suspend fun deleteinvHead(inven: Int) @Query("SELECT * FROM $TABLA_INV_H ORDER BY INV_FEI") - suspend fun fetchAllInvHead(): ArrayList + suspend fun fetchAllInvHead(): List } @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 a5ab8bc..70212b5 100644 --- a/app/src/main/java/com/focasoftware/deboinventariov20/Model/ProductosService.kt +++ b/app/src/main/java/com/focasoftware/deboinventariov20/Model/ProductosService.kt @@ -4,8 +4,8 @@ import retrofit2.Retrofit import retrofit2.converter.gson.GsonConverterFactory object ProductosService { - private val BASE_URL ="http://192.168.0.2:3000/" - //"http://10.0.2.2:3000/" + private val BASE_URL ="http://10.0.2.2:3000/" + //"http://192.168.0.2:3000/" fun getProductosService(): ProductosApi { 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 4b7680b..62539fc 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,6 +7,7 @@ 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 @@ -95,7 +96,10 @@ class DescripcionFragment : Fragment() { numeroInventario.toString()) if (artCargadoEnBD == null) { val mDialogView = LayoutInflater.from(context).inflate(R.layout.ingresar_cantidad, null) - val mBuilder = AlertDialog.Builder(context).setView(mDialogView).setCancelable(false) + val mBuilder = AlertDialog.Builder(context).setView(mDialogView) + .setCancelable(false) + if ((viewAdapter2 as DescripcionListAdapter).items2?.get(indice)!!.balanza==1 || (viewAdapter2 as DescripcionListAdapter).items2?.get(indice)!!.balanza==3 || (viewAdapter2 as DescripcionListAdapter).items2?.get(indice)!!.balanza==7) + mDialogView.etCantidad.inputType= InputType.TYPE_CLASS_NUMBER mDialogView.tvTitulo.text = "${(viewAdapter2 as DescripcionListAdapter).items2?.get(indice)!!.descripcion}" val mAlertDialog = mBuilder.show() mDialogView.btnAceptar.setOnClickListener { @@ -128,6 +132,7 @@ class DescripcionFragment : Fragment() { val mDialogView = LayoutInflater.from(context).inflate(R.layout.login_dialog, null) val mBuilder = AlertDialog.Builder(context).setView(mDialogView).setTitle("Producto '${artCargadoEnBD!!.descripcion}', se encuentra cargado.").setCancelable(false) + if (artCargadoEnBD!!.balanza.toString().contains("1" ) || artCargadoEnBD!!.balanza.toString().contains("3") || artCargadoEnBD!!.balanza.toString().contains("7")) mDialogView.tvNuevaCantidad.inputType= InputType.TYPE_CLASS_NUMBER mDialogView.tvCantInicial.text = artCargadoEnBD!!.cantTomada val mAlertDialog = mBuilder.show() 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 d81f54a..5391061 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 @@ -9,6 +9,9 @@ import android.graphics.Canvas import android.graphics.Color import android.graphics.drawable.Drawable import android.os.Bundle +import android.text.InputType +import android.text.InputType.TYPE_CLASS_NUMBER +import android.text.InputType.TYPE_NUMBER_FLAG_DECIMAL import android.view.KeyEvent import android.view.LayoutInflater import android.view.View @@ -31,13 +34,12 @@ 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.* import kotlinx.android.synthetic.main.login_dialog.view.btnAceptar import kotlinx.coroutines.* +import java.lang.Integer.TYPE import java.time.LocalDateTime import java.time.format.DateTimeFormatter import java.util.* @@ -86,10 +88,8 @@ class InventarioFragment : Fragment(), ProductosListAdapter.OnImageDotsClickList GlobalScope.launch(Dispatchers.Main) { //TODO: BUSCO EL ULTIMO INVENTARIO EN LA BD PARA PODER CREAR EL PROXIMO InventarioNuevo = AppDb.getAppDb(requireActivity())?.InvHeadDAO()?.findLastInv()?.plus(1) ?: 1 - SerchArea() - val descripInv: String = if (iArea == 0) "Ventas" else "Deposito" //TODO: CREAMOS EL INVENTARIO EN LA CABECERA DEL INVENTARIO - invHead = InvHead(InventarioNuevo, descripInv, 1, ObtenerFechaActual(), ObtenerFechaActual(), 0L, iArea, AjusteProductos(), ProdNoCont()) + invHead = InvHead(InventarioNuevo, if (SerchArea() == 0) "Ventas" else "Deposito", 1, ObtenerFechaActual(), ObtenerFechaActual(), 0L, SerchArea(), AjusteProductos(), ProdNoCont()) AppDb.getAppDb(requireActivity())!!.InvHeadDAO()!!.insertInvHead(invHead) tvTitulo.text = "Inventario Dinamico" + " N° $InventarioNuevo" } @@ -127,51 +127,7 @@ class InventarioFragment : Fragment(), ProductosListAdapter.OnImageDotsClickList 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() - } + dialogoSumaResta(requireContext(),indiceDelArtEncontrado, listArticulos[indiceDelArtEncontrado].univta) } } else if (indiceDelArtEncontrado == -1) {// no lo encontro en el RV, lo va a buscar en al BD @@ -320,8 +276,8 @@ class InventarioFragment : Fragment(), ProductosListAdapter.OnImageDotsClickList super.onViewCreated(view, savedInstanceState) navController = Navigation.findNavController(view) etCodigoBarras.requestFocus() - val modalDialog = NoEncontradoSimple() - modalDialog.show(requireActivity().supportFragmentManager, "confirmDialog") +// val modalDialog = NoEncontradoSimple() +// modalDialog.show(requireActivity().supportFragmentManager, "confirmDialog") btnBorrarInv.setOnClickListener { AlertDialog.Builder(requireContext()) @@ -340,22 +296,6 @@ class InventarioFragment : Fragment(), ProductosListAdapter.OnImageDotsClickList //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 { @@ -461,34 +401,33 @@ class InventarioFragment : Fragment(), ProductosListAdapter.OnImageDotsClickList //TODO SI LA CANTIDAD ENCONTRADA ES UNO, LO CARGO DIRECTAMENTE EN EL RV if (artAcargar.isNotEmpty() || !artAcargar.isNullOrEmpty()) {// TODO: Si lo encuentra en la BD -// if (swSumaUno!!.isChecked) {// TODO: SI ESTA +1, PONE CANTIDAD 1 - if (artAcargar.size == 1) { // TODO: SI EN EL ARRAY SOLO HAY UN ITEM LO METE DIRECTAMENTE AL RV - fCant = 0F - fCant += 1F - // TODO PASO DEL ARRAY A UN ITEM PARA QUE LO CARGUE EN EL RV - val acargarPorDesc = Articles(artAcargar[0].sector, - artAcargar[0].codigo, - artAcargar[0].descripcion, - artAcargar[0].codBar, - artAcargar[0].codOrigen, - artAcargar[0].precio, - artAcargar[0].costo, - "", - "", - "", - artAcargar[0].balanza, - artAcargar[0].depSn, - "") - // TODO LO ENVIO A CARGAR EN EL RV Y EN LA BD - cargarArtEnBd(acargarPorDesc, fCant) - cargarRecicler(acargarPorDesc, fCant) - } else { +// if (artAcargar.size == 1) { // TODO: SI EN EL ARRAY SOLO HAY UN ITEM LO METE DIRECTAMENTE AL RV +// fCant = 0F +// fCant += 1F +// // TODO PASO DEL ARRAY A UN ITEM PARA QUE LO CARGUE EN EL RV +// val acargarPorDesc = Articles(artAcargar[0].sector, +// artAcargar[0].codigo, +// artAcargar[0].descripcion, +// artAcargar[0].codBar, +// artAcargar[0].codOrigen, +// artAcargar[0].precio, +// artAcargar[0].costo, +// "", +// "", +// "", +// artAcargar[0].balanza, +// artAcargar[0].depSn, +// "") +// // TODO LO ENVIO A CARGAR EN EL RV Y EN LA BD +// cargarArtEnBd(acargarPorDesc, fCant) +// cargarRecicler(acargarPorDesc, fCant) +// } else { var bundle = Bundle() 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 // fCant = listArticulos[0].cantTomada @@ -528,17 +467,7 @@ class InventarioFragment : Fragment(), ProductosListAdapter.OnImageDotsClickList // } } else {//TODO si no lo encuentra en la BD val modalDialog = DialogNoEncontrado() - modalDialog.show(requireActivity().supportFragmentManager, "confirmDialog") - -// MaterialDialog(requireContext()).show { -// val t=etCodigoBarras.text -// title(text = "El articulo ${etCodigoBarras.text.toString()}") -// message(R.string.sMensaje) -// positiveButton(R.string.btnOk) { -// dismiss() -// } -// }.cornerRadius(10F) } etCodigoBarras.focusable = View.FOCUSABLE etCodigoBarras.setText("") @@ -555,46 +484,92 @@ class InventarioFragment : Fragment(), ProductosListAdapter.OnImageDotsClickList cargarRecicler(artAcargar, fCant) } 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 = "${artAcargar.descripcion.toString()}" - val mAlertDialog = mBuilder.show() - mDialogView.btnAceptar.setOnClickListener { - 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()) - } - } + DialogingresarCantidad(requireContext(),artAcargar) } } else {// TODO si no lo encuentra en la BD - val modalDialog = NoEncontradoSimple() + val modalDialog = DialogNoEncontrado() 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("") etCodigoBarras.selectAll() } + fun DialogingresarCantidad(cnxt: Context, artAcargar: Articles?) { + val mDialogView = LayoutInflater.from(cnxt).inflate(R.layout.ingresar_cantidad, null) + val mBuilder = AlertDialog.Builder(cnxt).setView(mDialogView) + .setCancelable(false) + if (artAcargar!!.balanza!!.toInt()==1 || artAcargar.balanza!!.toInt()==3 || artAcargar.balanza!!.toInt()==7) mDialogView.etCantidad.inputType=TYPE_CLASS_NUMBER + mDialogView.tvTitulo.text = artAcargar.descripcion.toString() + val mAlertDialog = mBuilder.show() + mDialogView.btnAceptar.setOnClickListener { + 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() + cargarArtEnBd(artAcargar, mDialogView.etCantidad.text.toString().toFloat()) + cargarRecicler(artAcargar, mDialogView.etCantidad.text.toString().toFloat()) + } + } + } + + fun dialogoSumaResta(context: Context, indiceDelArtEncontrado: Int, univta: String) { + val mDialogView = LayoutInflater.from(context).inflate(R.layout.login_dialog, null) + val mBuilder = + AlertDialog.Builder(context).setView(mDialogView).setTitle("${listArticulos[indiceDelArtEncontrado].descripcion} se encuentra cargado.") +// .setCancelable(false) + if (univta.contains("1" ) || univta.contains("3") || univta.contains("7")) mDialogView.tvNuevaCantidad.inputType=TYPE_CLASS_NUMBER + + 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() + } + } + suspend fun buscarCBEnBD(CodigoBarras: String): Articles? { //TODO BUSQUEDA POR CODIGO DE BARRAS var busqueda: Articles? = null return GlobalScope.async(Dispatchers.IO) { - busqueda = AppDb.getAppDb(requireContext())!!.ArticulosDAO()!!.findArticuloByCodBar(CodigoBarras, iArea) + busqueda = AppDb.getAppDb(requireContext())!!.ArticulosDAO()!!.findArticuloByCodBar(CodigoBarras, SerchArea()) return@async busqueda }.await() } @@ -603,7 +578,7 @@ class InventarioFragment : Fragment(), ProductosListAdapter.OnImageDotsClickList //TODO BUSQUEDA POR DESCRIPCION var busqueda: List? = null return GlobalScope.async(Dispatchers.IO) { - busqueda = AppDb.getAppDb(requireContext())!!.ArticulosDAO()!!.findArticuloByDesc(descripcion, iArea) + busqueda = AppDb.getAppDb(requireContext())!!.ArticulosDAO()!!.findArticuloByDesc(descripcion, SerchArea()) return@async busqueda }.await() } @@ -660,7 +635,7 @@ class InventarioFragment : Fragment(), ProductosListAdapter.OnImageDotsClickList //TODO BUSQUEDA POR DESCRIPCION var busqueda: Articles? = null return GlobalScope.async(Dispatchers.IO) { - busqueda = AppDb.getAppDb(requireContext())!!.ArticulosDAO()!!.findArticuloByCodBar(codigoBarras, iArea) + busqueda = AppDb.getAppDb(requireContext())!!.ArticulosDAO()!!.findArticuloByCodBar(codigoBarras, SerchArea()) return@async busqueda }.await() } @@ -684,7 +659,7 @@ class InventarioFragment : Fragment(), ProductosListAdapter.OnImageDotsClickList fun cargarRecicler(articulos: Articles, cant: Float) { //TODO CARGO EN LE RV - val item = ItemsRecycler(articulos.sector, articulos.codigo, articulos.descripcion, cant, articulos.codBar, articulos.codOrigen) + val item = ItemsRecycler(articulos.sector, articulos.codigo, articulos.descripcion, cant, articulos.codBar, articulos.codOrigen, articulos.balanza.toString(),articulos.de.toString()) listArticulos.add(item) viewAdapter = ProductosListAdapter(requireContext(), listArticulos, this) @@ -744,9 +719,10 @@ class InventarioFragment : Fragment(), ProductosListAdapter.OnImageDotsClickList return prodInclu } - private fun SerchArea() { + private fun SerchArea(): Int { if (sharedPreferences.contains("rbVentas")) if (sharedPreferences.getString("rbVentas", "").toString() == "1") iArea = 0 if (sharedPreferences.contains("rbDeposito")) if (sharedPreferences.getString("rbDeposito", "").toString() == "1") iArea = 1 + return iArea } fun ObtenerFechaActual(): String? { @@ -788,50 +764,51 @@ 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("${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 { - 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() - } + dialogoSumaResta(requireContext(), position.toInt(), listArticulos[position.toInt()].univta) + +// val mDialogView = LayoutInflater.from(context).inflate(R.layout.login_dialog, null) +// 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 { +// 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/inventario/ItemsRecycler.kt b/app/src/main/java/com/focasoftware/deboinventariov20/ui/inventario/ItemsRecycler.kt index 4f0db08..79b6ad2 100644 --- a/app/src/main/java/com/focasoftware/deboinventariov20/ui/inventario/ItemsRecycler.kt +++ b/app/src/main/java/com/focasoftware/deboinventariov20/ui/inventario/ItemsRecycler.kt @@ -2,6 +2,6 @@ package com.focasoftware.deboinventariov20.ui.inventario import android.widget.ImageView -data class ItemsRecycler(val sector: String?,val codigo: String?, val descripcion: String?, var cantTomada: Float, val codigoBarras: String?, val codigoOrigen: String?) { +data class ItemsRecycler(val sector: String?,val codigo: String?, val descripcion: String?, var cantTomada: Float, val codigoBarras: String?, val codigoOrigen: String?,val univta: String,val dev:String) { } \ No newline at end of file diff --git a/app/src/main/java/com/focasoftware/deboinventariov20/ui/inventario/ProductosListAdapter.kt b/app/src/main/java/com/focasoftware/deboinventariov20/ui/inventario/ProductosListAdapter.kt index 53e9532..9f47421 100644 --- a/app/src/main/java/com/focasoftware/deboinventariov20/ui/inventario/ProductosListAdapter.kt +++ b/app/src/main/java/com/focasoftware/deboinventariov20/ui/inventario/ProductosListAdapter.kt @@ -17,17 +17,12 @@ class ProductosListAdapter(private val context: Context,private val productos: A private var removePosition: Int = 0 private var removedItem: ItemsRecycler? = null -// private var items2: ArrayList? = null interface OnImageDotsClickListener { fun onImageDotsClick(sector: String?,codigo: String?) fun onImagePenClick(sector: String?, codigo: String?, cantidad: String?, position: String) } -// init { -// this.items2 = productos -// } - override fun onCreateViewHolder(parent: ViewGroup, p1: Int) = ItemsViewHolder(LayoutInflater.from(context).inflate(R.layout.item, parent, false)) override fun getItemCount() = productos.size @@ -51,22 +46,7 @@ class ProductosListAdapter(private val context: Context,private val productos: A itemView.tvCodigoOrigen.text=item.sector itemView.ivPen.setImageResource(R.drawable.pen) itemView.ivDots.setImageResource(R.drawable.more) - } -// val sector = itemView.tvSector -// val codigo = itemView.tvCodigo -// val descripcion = itemView.tvDescripcion -// val cantCont = itemView.tvCantidad -// val codigoBarras = itemView.tvCodigoBarras -// val codigoOrigen = itemView.tvCodigoOrigen -// val imageDots = itemView.ivDots -// val imagePen = itemView.ivPen -// -// fun bind(pro: ItemsRecycler) { -// -// } - - } fun removeItem(viewHolder: RecyclerView.ViewHolder) { @@ -75,11 +55,6 @@ class ProductosListAdapter(private val context: Context,private val productos: A productos.removeAt(viewHolder.adapterPosition) notifyItemRemoved(viewHolder.adapterPosition) -// -// Snackbar.make(viewHolder.itemView, "El articulo fue ${removedItem!!.descripcion} eliminado", Snackbar.LENGTH_LONG).setAction("Rehacer") { -// productos.add(removePosition, removedItem!!) -// notifyItemInserted(removePosition) -// }.show() } 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 bc9bec3..6107be5 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 @@ -10,7 +10,7 @@ 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: List, private val itemClickListener: OnInventarioClickListener) : RecyclerView.Adapter>() { interface OnInventarioClickListener { 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 88d594c..411c7b2 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 @@ -18,6 +18,7 @@ import androidx.recyclerview.widget.RecyclerView import com.focasoftware.deboinventariov20.DB.DataBase.AppDb import com.focasoftware.deboinventariov20.Model.InvHead import com.focasoftware.deboinventariov20.R +import com.focasoftware.deboinventariov20.ui.inventario.ItemsRecycler import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.async @@ -25,12 +26,13 @@ import kotlinx.coroutines.launch import java.util.* class MainFragment : Fragment(), InventarioListAdapter.OnInventarioClickListener { - private lateinit var inventarios: ArrayList - private lateinit var ordenado: ArrayList + private lateinit var inventarios: List + private lateinit var ordenado: List private lateinit var rcInventario: RecyclerView private lateinit var viewAdapter: RecyclerView.Adapter<*> private lateinit var viewManager: RecyclerView.LayoutManager - private var listIvn = ArrayList() +// private var listIvn2 = List() +private var listIvn2 = ArrayList() private lateinit var navController: NavController private lateinit var sharedPreferences: SharedPreferences private var cantidadInventarios: Int = 0 @@ -45,7 +47,6 @@ class MainFragment : Fragment(), InventarioListAdapter.OnInventarioClickListener 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) @@ -68,34 +69,47 @@ class MainFragment : Fragment(), InventarioListAdapter.OnInventarioClickListener cargarRecicler(inv) cantidadInventarios = i + 1 } - tvInvDinamicos.text = "Inventarios Dinamicos (${cantidadInventarios.toString()})+" + 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 + ivSort91.visibility = View.INVISIBLE + ivSort19.visibility = View.VISIBLE cbVentas.visibility = View.VISIBLE cbDeposito.visibility = View.VISIBLE - tvInvDinamicos.text = "Inventarios Dinamicos (${cantidadInventarios.toString()})-" + 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()})+" + tvInvDinamicos.text = "Inventarios Dinamicos (${cantidadInventarios.toString()}) +" } } - ivSort91.setOnClickListener { + ivSort19.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() + ivSort19.visibility=View.INVISIBLE + ivSort91.visibility=View.VISIBLE + } + ivSort91.setOnClickListener { + ordenado= inventarios.sortedBy { + it.invNum + } viewAdapter = InventarioListAdapter(requireContext(), ordenado, this@MainFragment) viewManager = LinearLayoutManager(requireContext()) @@ -104,14 +118,16 @@ class MainFragment : Fragment(), InventarioListAdapter.OnInventarioClickListener layoutManager = viewManager } viewAdapter.notifyDataSetChanged() + ivSort91.visibility=View.INVISIBLE + ivSort19.visibility=View.VISIBLE } } return v } - suspend fun buscarEnBDInvHead(): ArrayList { + suspend fun buscarEnBDInvHead(): List { //TODO BUSQUEDA POR DESCRIPCION - var busqueda: ArrayList + var busqueda: List return GlobalScope.async(Dispatchers.IO) { busqueda = AppDb.getAppDb(requireContext())!!.InvHeadDAO()!!.fetchAllInvHead() return@async busqueda @@ -125,8 +141,8 @@ class MainFragment : Fragment(), InventarioListAdapter.OnInventarioClickListener val item = ItemInventario("N° $number ${inv.descripcion}. Fecha: ${inv.fechaFinal}") //(articulos.sector, articulos.codigo, articulos.descripcion, cant, articulos.codBar) // listIvn.add(item) - listIvn.add(inv) - viewAdapter = InventarioListAdapter(requireContext(), listIvn, this) + listIvn2.add(inv) + viewAdapter = InventarioListAdapter(requireContext(), listIvn2, this) viewManager = LinearLayoutManager(requireContext()) rcInventario.apply { @@ -138,7 +154,7 @@ class MainFragment : Fragment(), InventarioListAdapter.OnInventarioClickListener override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) navController = Navigation.findNavController(view) - listIvn.clear() + listIvn2.clear() } override fun onItemClick(inventario: String?) { diff --git a/app/src/main/res/layout/fragment_main.xml b/app/src/main/res/layout/fragment_main.xml index e7d4097..89a59ce 100644 --- a/app/src/main/res/layout/fragment_main.xml +++ b/app/src/main/res/layout/fragment_main.xml @@ -25,9 +25,10 @@ - @@ -94,6 +83,7 @@ android:layout_margin="5dp" android:visibility="gone" android:text="Deposito" + android:checked="true" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toBottomOf="@+id/tvInvDinamicos" /> diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 988884d..cc3da2c 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -4,3 +4,18 @@ distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-all.zip + +# Enable Kapt Incremental annotation processing requeste +kapt.incremental.apt=true + +# Enable android.databinding.annotationprocessor.ProcessDataBinding (DYNAMIC) +android.databinding.incremental=true + +# Decrease gradle builds time +kapt.use.worker.api=true + +# turn off AP discovery in compile path, and therefore turn on Compile Avoidance +kapt.include.compile.classpath=false + +# Enable In Logcat to determine Kapt +kapt.verbose=true \ No newline at end of file -- 1.9.1