Commit 15c37e974eb2af5cdaf737ef807f0d620d706dcc

Authored by Mauricio Sanchez
1 parent 6aec0e86d9
Exists in master

31022020 2309

Solicitudes API Articulos y Time.docx
No preview for this file type
... ... @@ -13,8 +13,12 @@ android {
13 13 targetSdkVersion 30
14 14 versionCode 1
15 15 versionName "1.0"
16   -
17 16 testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
  17 + javaCompileOptions {
  18 + annotationProcessorOptions {
  19 + arguments = ["room.incremental":"true"]
  20 + }
  21 + }
18 22 }
19 23  
20 24 buildTypes {
... ... @@ -26,6 +30,7 @@ android {
26 30 compileOptions {
27 31 sourceCompatibility JavaVersion.VERSION_1_8
28 32 targetCompatibility JavaVersion.VERSION_1_8
  33 +
29 34 }
30 35 kotlinOptions {
31 36 jvmTarget = '1.8'
app/src/main/java/com/focasoftware/deboinventariov20/DB/DAO/ArticulosDAO.kt
... ... @@ -46,7 +46,7 @@ interface InvHeadDAO {
46 46 suspend fun deleteinvHead(inven: Int)
47 47  
48 48 @Query("SELECT * FROM $TABLA_INV_H ORDER BY INV_FEI")
49   - suspend fun fetchAllInvHead(): ArrayList<InvHead>
  49 + suspend fun fetchAllInvHead(): List<InvHead>
50 50 }
51 51  
52 52 @Dao
app/src/main/java/com/focasoftware/deboinventariov20/Model/ProductosService.kt
... ... @@ -4,8 +4,8 @@ import retrofit2.Retrofit
4 4 import retrofit2.converter.gson.GsonConverterFactory
5 5  
6 6 object ProductosService {
7   - private val BASE_URL ="http://192.168.0.2:3000/"
8   - //"http://10.0.2.2:3000/"
  7 + private val BASE_URL ="http://10.0.2.2:3000/"
  8 + //"http://192.168.0.2:3000/"
9 9  
10 10  
11 11 fun getProductosService(): ProductosApi {
app/src/main/java/com/focasoftware/deboinventariov20/ui/descripcionFragment/DescripcionFragment.kt
... ... @@ -7,6 +7,7 @@ import android.graphics.Canvas
7 7 import android.graphics.Color
8 8 import android.graphics.drawable.ColorDrawable
9 9 import android.os.Bundle
  10 +import android.text.InputType
10 11 import android.view.LayoutInflater
11 12 import android.view.View
12 13 import android.view.ViewGroup
... ... @@ -95,7 +96,10 @@ class DescripcionFragment : Fragment() {
95 96 numeroInventario.toString())
96 97 if (artCargadoEnBD == null) {
97 98 val mDialogView = LayoutInflater.from(context).inflate(R.layout.ingresar_cantidad, null)
98   - val mBuilder = AlertDialog.Builder(context).setView(mDialogView).setCancelable(false)
  99 + val mBuilder = AlertDialog.Builder(context).setView(mDialogView)
  100 + .setCancelable(false)
  101 + 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)
  102 + mDialogView.etCantidad.inputType= InputType.TYPE_CLASS_NUMBER
99 103 mDialogView.tvTitulo.text = "${(viewAdapter2 as DescripcionListAdapter).items2?.get(indice)!!.descripcion}"
100 104 val mAlertDialog = mBuilder.show()
101 105 mDialogView.btnAceptar.setOnClickListener {
... ... @@ -128,6 +132,7 @@ class DescripcionFragment : Fragment() {
128 132  
129 133 val mDialogView = LayoutInflater.from(context).inflate(R.layout.login_dialog, null)
130 134 val mBuilder = AlertDialog.Builder(context).setView(mDialogView).setTitle("Producto '${artCargadoEnBD!!.descripcion}', se encuentra cargado.").setCancelable(false)
  135 + if (artCargadoEnBD!!.balanza.toString().contains("1" ) || artCargadoEnBD!!.balanza.toString().contains("3") || artCargadoEnBD!!.balanza.toString().contains("7")) mDialogView.tvNuevaCantidad.inputType= InputType.TYPE_CLASS_NUMBER
131 136 mDialogView.tvCantInicial.text = artCargadoEnBD!!.cantTomada
132 137  
133 138 val mAlertDialog = mBuilder.show()
app/src/main/java/com/focasoftware/deboinventariov20/ui/inventario/InventarioFragment.kt
... ... @@ -9,6 +9,9 @@ import android.graphics.Canvas
9 9 import android.graphics.Color
10 10 import android.graphics.drawable.Drawable
11 11 import android.os.Bundle
  12 +import android.text.InputType
  13 +import android.text.InputType.TYPE_CLASS_NUMBER
  14 +import android.text.InputType.TYPE_NUMBER_FLAG_DECIMAL
12 15 import android.view.KeyEvent
13 16 import android.view.LayoutInflater
14 17 import android.view.View
... ... @@ -31,13 +34,12 @@ import com.focasoftware.deboinventariov20.Model.InvBody
31 34 import com.focasoftware.deboinventariov20.Model.InvHead
32 35 import com.focasoftware.deboinventariov20.R
33 36 import com.focasoftware.deboinventariov20.ui.dialogos.DialogNoEncontrado
34   -import com.focasoftware.deboinventariov20.ui.util.Base.AlertDialogBorrarInv
35   -import com.focasoftware.deboinventariov20.ui.util.Base.NoEncontradoSimple
36 37 import kotlinx.android.synthetic.main.fragment_inventario.*
37 38 import kotlinx.android.synthetic.main.ingresar_cantidad.view.*
38 39 import kotlinx.android.synthetic.main.login_dialog.view.*
39 40 import kotlinx.android.synthetic.main.login_dialog.view.btnAceptar
40 41 import kotlinx.coroutines.*
  42 +import java.lang.Integer.TYPE
41 43 import java.time.LocalDateTime
42 44 import java.time.format.DateTimeFormatter
43 45 import java.util.*
... ... @@ -86,10 +88,8 @@ class InventarioFragment : Fragment(), ProductosListAdapter.OnImageDotsClickList
86 88 GlobalScope.launch(Dispatchers.Main) {
87 89 //TODO: BUSCO EL ULTIMO INVENTARIO EN LA BD PARA PODER CREAR EL PROXIMO
88 90 InventarioNuevo = AppDb.getAppDb(requireActivity())?.InvHeadDAO()?.findLastInv()?.plus(1) ?: 1
89   - SerchArea()
90   - val descripInv: String = if (iArea == 0) "Ventas" else "Deposito"
91 91 //TODO: CREAMOS EL INVENTARIO EN LA CABECERA DEL INVENTARIO
92   - invHead = InvHead(InventarioNuevo, descripInv, 1, ObtenerFechaActual(), ObtenerFechaActual(), 0L, iArea, AjusteProductos(), ProdNoCont())
  92 + invHead = InvHead(InventarioNuevo, if (SerchArea() == 0) "Ventas" else "Deposito", 1, ObtenerFechaActual(), ObtenerFechaActual(), 0L, SerchArea(), AjusteProductos(), ProdNoCont())
93 93 AppDb.getAppDb(requireActivity())!!.InvHeadDAO()!!.insertInvHead(invHead)
94 94 tvTitulo.text = "Inventario Dinamico" + " Nยฐ $InventarioNuevo"
95 95 }
... ... @@ -127,51 +127,7 @@ class InventarioFragment : Fragment(), ProductosListAdapter.OnImageDotsClickList
127 127 listArticulos[indiceDelArtEncontrado].cantTomada = listArticulos[indiceDelArtEncontrado].cantTomada+1
128 128 viewAdapter.notifyDataSetChanged()
129 129 } else {
130   - val mDialogView = LayoutInflater.from(context).inflate(R.layout.login_dialog, null)
131   - val mBuilder =
132   - AlertDialog.Builder(context).setView(mDialogView).setTitle("Producto '${listArticulos[indiceDelArtEncontrado].descripcion}', se encuentra cargado.")
133   -// .setCancelable(false)
134   - mDialogView.tvCantInicial.text = listArticulos[indiceDelArtEncontrado].cantTomada.toString()
135   - val mAlertDialog = mBuilder.show()
136   - mDialogView.rbSumar.setOnClickListener {
137   - if (!mDialogView.tvNuevaCantidad.text.isNullOrEmpty()) {
138   - mDialogView.tvgenerico4.text = (mDialogView.tvCantInicial.text.toString().toFloat() + mDialogView.tvNuevaCantidad.text.toString().toFloat()).toString()
139   - mDialogView.tvNuevaCantidad.isEnabled=false
140   - }
141   - }
142   - mDialogView.rbRestar.setOnClickListener {
143   - if (!mDialogView.tvNuevaCantidad.text.isNullOrEmpty()) {
144   - if (mDialogView.tvCantInicial.text.toString().toFloat() >= mDialogView.tvNuevaCantidad.text.toString().toFloat()) {
145   - mDialogView.tvgenerico4.text =
146   - (mDialogView.tvCantInicial.text.toString().toFloat() - mDialogView.tvNuevaCantidad.text.toString().toFloat()).toString()
147   - mDialogView.tvNuevaCantidad.isEnabled=false
148   - }
149   - }
150   - }
151   - mDialogView.rbMdodificar.setOnClickListener {
152   - if (!mDialogView.tvNuevaCantidad.text.isNullOrEmpty()) {
153   - mDialogView.tvgenerico4.text = (mDialogView.tvNuevaCantidad.text.toString().toFloat()).toString()
154   - mDialogView.tvNuevaCantidad.isEnabled=false
155   - }
156   - }
157   - mDialogView.btnAceptar.setOnClickListener {
158   - if (!mDialogView.tvNuevaCantidad.text.isNullOrEmpty()) {
159   - mAlertDialog.dismiss()
160   -// val name = mDialogView.tvgenerico4.text.toString().toFloat()
161   -// fCant = 0F
162   -// fCant = name
163   - listArticulos[indiceDelArtEncontrado].cantTomada = mDialogView.tvgenerico4.text.toString().toFloat()
164   - updateCantidad(listArticulos[indiceDelArtEncontrado].sector.toString(), listArticulos[indiceDelArtEncontrado].codigo.toString(), mDialogView.tvgenerico4.text.toString().toFloat())
165   - viewAdapter.notifyDataSetChanged()
166   - } else if (mDialogView.tvNuevaCantidad.text.isNullOrEmpty()) {
167   - mDialogView.tvNuevaCantidad.error = "No vacio"
168   - mDialogView.tvNuevaCantidad.requestFocus()
169   - mDialogView.tvNuevaCantidad.hint = "Ingrese un valor"
170   - }
171   - }
172   - mDialogView.dialogCancelBtn.setOnClickListener {
173   - mAlertDialog.dismiss()
174   - }
  130 + dialogoSumaResta(requireContext(),indiceDelArtEncontrado, listArticulos[indiceDelArtEncontrado].univta)
175 131 }
176 132  
177 133 } 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
320 276 super.onViewCreated(view, savedInstanceState)
321 277 navController = Navigation.findNavController(view)
322 278 etCodigoBarras.requestFocus()
323   - val modalDialog = NoEncontradoSimple()
324   - modalDialog.show(requireActivity().supportFragmentManager, "confirmDialog")
  279 +// val modalDialog = NoEncontradoSimple()
  280 +// modalDialog.show(requireActivity().supportFragmentManager, "confirmDialog")
325 281  
326 282 btnBorrarInv.setOnClickListener {
327 283 AlertDialog.Builder(requireContext())
... ... @@ -340,22 +296,6 @@ class InventarioFragment : Fragment(), ProductosListAdapter.OnImageDotsClickList
340 296 //botรณn cancel pulsado
341 297 })
342 298 .show()
343   -
344   -
345   -// MaterialDialog(requireContext()).show {
346   -// title(R.string.sTituloBorrarInv)
347   -// message(R.string.sMensajeBorrarInv)
348   -// positiveButton(R.string.btnOk) {
349   -// BorrarInvActual()
350   -// Toast.makeText(requireContext(), "El inventario $InventarioNuevo fue Borrado", Toast.LENGTH_LONG).show()
351   -// navController.navigate(R.id.action_inventarioFragment_to_mainFragment2)
352   -// InventarioNuevo = 0
353   -// dismiss()
354   -// }
355   -// negativeButton {
356   -// dismiss()
357   -// }
358   -// }.cancelOnTouchOutside(false).cornerRadius(10F)
359 299 }
360 300  
361 301 btnExportarInv.setOnClickListener {
... ... @@ -461,34 +401,33 @@ class InventarioFragment : Fragment(), ProductosListAdapter.OnImageDotsClickList
461 401 //TODO SI LA CANTIDAD ENCONTRADA ES UNO, LO CARGO DIRECTAMENTE EN EL RV
462 402  
463 403 if (artAcargar.isNotEmpty() || !artAcargar.isNullOrEmpty()) {// TODO: Si lo encuentra en la BD
464   -// if (swSumaUno!!.isChecked) {// TODO: SI ESTA +1, PONE CANTIDAD 1
465   - if (artAcargar.size == 1) { // TODO: SI EN EL ARRAY SOLO HAY UN ITEM LO METE DIRECTAMENTE AL RV
466   - fCant = 0F
467   - fCant += 1F
468   - // TODO PASO DEL ARRAY A UN ITEM PARA QUE LO CARGUE EN EL RV
469   - val acargarPorDesc = Articles(artAcargar[0].sector,
470   - artAcargar[0].codigo,
471   - artAcargar[0].descripcion,
472   - artAcargar[0].codBar,
473   - artAcargar[0].codOrigen,
474   - artAcargar[0].precio,
475   - artAcargar[0].costo,
476   - "",
477   - "",
478   - "",
479   - artAcargar[0].balanza,
480   - artAcargar[0].depSn,
481   - "")
482   - // TODO LO ENVIO A CARGAR EN EL RV Y EN LA BD
483   - cargarArtEnBd(acargarPorDesc, fCant)
484   - cargarRecicler(acargarPorDesc, fCant)
485   - } else {
  404 +// if (artAcargar.size == 1) { // TODO: SI EN EL ARRAY SOLO HAY UN ITEM LO METE DIRECTAMENTE AL RV
  405 +// fCant = 0F
  406 +// fCant += 1F
  407 +// // TODO PASO DEL ARRAY A UN ITEM PARA QUE LO CARGUE EN EL RV
  408 +// val acargarPorDesc = Articles(artAcargar[0].sector,
  409 +// artAcargar[0].codigo,
  410 +// artAcargar[0].descripcion,
  411 +// artAcargar[0].codBar,
  412 +// artAcargar[0].codOrigen,
  413 +// artAcargar[0].precio,
  414 +// artAcargar[0].costo,
  415 +// "",
  416 +// "",
  417 +// "",
  418 +// artAcargar[0].balanza,
  419 +// artAcargar[0].depSn,
  420 +// "")
  421 +// // TODO LO ENVIO A CARGAR EN EL RV Y EN LA BD
  422 +// cargarArtEnBd(acargarPorDesc, fCant)
  423 +// cargarRecicler(acargarPorDesc, fCant)
  424 +// } else {
486 425 var bundle = Bundle()
487 426 bundle = bundleOf("ArrayDesc" to artAcargar)
488 427 bundle.putInt("numeroInv", InventarioNuevo)
489 428 navController.navigate(R.id.action_inventarioFragment_to_descripcionFragment, bundle)
490 429 //navController.backStack.removeLast()
491   - }
  430 +// }
492 431 // } else {//SI NO ESTA +1
493 432 // if (artAcargar.size == 1) { // TODO: SI EN EL ARRAY SOLO HAY UN ITEM LO METE DIRECTAMENTE AL RV
494 433 // fCant = listArticulos[0].cantTomada
... ... @@ -528,17 +467,7 @@ class InventarioFragment : Fragment(), ProductosListAdapter.OnImageDotsClickList
528 467 // }
529 468 } else {//TODO si no lo encuentra en la BD
530 469 val modalDialog = DialogNoEncontrado()
531   -
532 470 modalDialog.show(requireActivity().supportFragmentManager, "confirmDialog")
533   -
534   -// MaterialDialog(requireContext()).show {
535   -// val t=etCodigoBarras.text
536   -// title(text = "El articulo ${etCodigoBarras.text.toString()}")
537   -// message(R.string.sMensaje)
538   -// positiveButton(R.string.btnOk) {
539   -// dismiss()
540   -// }
541   -// }.cornerRadius(10F)
542 471 }
543 472 etCodigoBarras.focusable = View.FOCUSABLE
544 473 etCodigoBarras.setText("")
... ... @@ -555,46 +484,92 @@ class InventarioFragment : Fragment(), ProductosListAdapter.OnImageDotsClickList
555 484 cargarRecicler(artAcargar, fCant)
556 485 } else {//SI NO ESTA +1 PREGUNTA CANTIDAD
557 486  
558   - val mDialogView = LayoutInflater.from(context).inflate(R.layout.ingresar_cantidad, null)
559   - val mBuilder = AlertDialog.Builder(context).setView(mDialogView)
560   - .setCancelable(false)
561   - mDialogView.tvTitulo.text = "${artAcargar.descripcion.toString()}"
562   - val mAlertDialog = mBuilder.show()
563   - mDialogView.btnAceptar.setOnClickListener {
564   - if (mDialogView.etCantidad.text.isNullOrEmpty()) {
565   - mDialogView.etCantidad.error = "No vacio"
566   - mDialogView.etCantidad.requestFocus()
567   - mDialogView.etCantidad.hint = "Ingrese un valor"
568   - } else if (!mDialogView.etCantidad.text.isNullOrEmpty()) {
569   - mAlertDialog.dismiss()
570   -// fCant = 0F
571   -// fCant = mDialogView.etCantidad.text.toString().toFloat()
572   - cargarArtEnBd(artAcargar, mDialogView.etCantidad.text.toString().toFloat())
573   - cargarRecicler(artAcargar, mDialogView.etCantidad.text.toString().toFloat())
574   - }
575   - }
  487 + DialogingresarCantidad(requireContext(),artAcargar)
576 488 }
577 489 } else {// TODO si no lo encuentra en la BD
578   - val modalDialog = NoEncontradoSimple()
  490 + val modalDialog = DialogNoEncontrado()
579 491 modalDialog.show(requireActivity().supportFragmentManager, "confirmDialog")
580   -// MaterialDialog(requireContext()).show {
581   -//
582   -// title(text = "El producto: $sChangeUpper")
583   -// message(text = "ยกNo fue encontrado!")
584   -// positiveButton(R.string.btnOk) {}
585   -// dismiss()
586   -// }
587 492 }
588 493 etCodigoBarras.focusable = View.FOCUSABLE
589 494 etCodigoBarras.setText("")
590 495 etCodigoBarras.selectAll()
591 496 }
592 497  
  498 + fun DialogingresarCantidad(cnxt: Context, artAcargar: Articles?) {
  499 + val mDialogView = LayoutInflater.from(cnxt).inflate(R.layout.ingresar_cantidad, null)
  500 + val mBuilder = AlertDialog.Builder(cnxt).setView(mDialogView)
  501 + .setCancelable(false)
  502 + if (artAcargar!!.balanza!!.toInt()==1 || artAcargar.balanza!!.toInt()==3 || artAcargar.balanza!!.toInt()==7) mDialogView.etCantidad.inputType=TYPE_CLASS_NUMBER
  503 + mDialogView.tvTitulo.text = artAcargar.descripcion.toString()
  504 + val mAlertDialog = mBuilder.show()
  505 + mDialogView.btnAceptar.setOnClickListener {
  506 + if (mDialogView.etCantidad.text.isNullOrEmpty()) {
  507 + mDialogView.etCantidad.error = "No vacio"
  508 + mDialogView.etCantidad.requestFocus()
  509 + mDialogView.etCantidad.hint = "Ingrese un valor"
  510 + } else if (!mDialogView.etCantidad.text.isNullOrEmpty()) {
  511 + mAlertDialog.dismiss()
  512 + cargarArtEnBd(artAcargar, mDialogView.etCantidad.text.toString().toFloat())
  513 + cargarRecicler(artAcargar, mDialogView.etCantidad.text.toString().toFloat())
  514 + }
  515 + }
  516 + }
  517 +
  518 + fun dialogoSumaResta(context: Context, indiceDelArtEncontrado: Int, univta: String) {
  519 + val mDialogView = LayoutInflater.from(context).inflate(R.layout.login_dialog, null)
  520 + val mBuilder =
  521 + AlertDialog.Builder(context).setView(mDialogView).setTitle("${listArticulos[indiceDelArtEncontrado].descripcion} se encuentra cargado.")
  522 +// .setCancelable(false)
  523 + if (univta.contains("1" ) || univta.contains("3") || univta.contains("7")) mDialogView.tvNuevaCantidad.inputType=TYPE_CLASS_NUMBER
  524 +
  525 + mDialogView.tvCantInicial.text = listArticulos[indiceDelArtEncontrado].cantTomada.toString()
  526 + val mAlertDialog = mBuilder.show()
  527 + mDialogView.rbSumar.setOnClickListener {
  528 + if (!mDialogView.tvNuevaCantidad.text.isNullOrEmpty()) {
  529 + mDialogView.tvgenerico4.text = (mDialogView.tvCantInicial.text.toString().toFloat() + mDialogView.tvNuevaCantidad.text.toString().toFloat()).toString()
  530 + mDialogView.tvNuevaCantidad.isEnabled=false
  531 + }
  532 + }
  533 + mDialogView.rbRestar.setOnClickListener {
  534 + if (!mDialogView.tvNuevaCantidad.text.isNullOrEmpty()) {
  535 + if (mDialogView.tvCantInicial.text.toString().toFloat() >= mDialogView.tvNuevaCantidad.text.toString().toFloat()) {
  536 + mDialogView.tvgenerico4.text =
  537 + (mDialogView.tvCantInicial.text.toString().toFloat() - mDialogView.tvNuevaCantidad.text.toString().toFloat()).toString()
  538 + mDialogView.tvNuevaCantidad.isEnabled=false
  539 + }
  540 + }
  541 + }
  542 + mDialogView.rbMdodificar.setOnClickListener {
  543 + if (!mDialogView.tvNuevaCantidad.text.isNullOrEmpty()) {
  544 + mDialogView.tvgenerico4.text = (mDialogView.tvNuevaCantidad.text.toString().toFloat()).toString()
  545 + mDialogView.tvNuevaCantidad.isEnabled=false
  546 + }
  547 + }
  548 + mDialogView.btnAceptar.setOnClickListener {
  549 + if (!mDialogView.tvNuevaCantidad.text.isNullOrEmpty()) {
  550 + mAlertDialog.dismiss()
  551 +// val name = mDialogView.tvgenerico4.text.toString().toFloat()
  552 +// fCant = 0F
  553 +// fCant = name
  554 + listArticulos[indiceDelArtEncontrado].cantTomada = mDialogView.tvgenerico4.text.toString().toFloat()
  555 + updateCantidad(listArticulos[indiceDelArtEncontrado].sector.toString(), listArticulos[indiceDelArtEncontrado].codigo.toString(), mDialogView.tvgenerico4.text.toString().toFloat())
  556 + viewAdapter.notifyDataSetChanged()
  557 + } else if (mDialogView.tvNuevaCantidad.text.isNullOrEmpty()) {
  558 + mDialogView.tvNuevaCantidad.error = "No vacio"
  559 + mDialogView.tvNuevaCantidad.requestFocus()
  560 + mDialogView.tvNuevaCantidad.hint = "Ingrese un valor"
  561 + }
  562 + }
  563 + mDialogView.dialogCancelBtn.setOnClickListener {
  564 + mAlertDialog.dismiss()
  565 + }
  566 + }
  567 +
593 568 suspend fun buscarCBEnBD(CodigoBarras: String): Articles? {
594 569 //TODO BUSQUEDA POR CODIGO DE BARRAS
595 570 var busqueda: Articles? = null
596 571 return GlobalScope.async(Dispatchers.IO) {
597   - busqueda = AppDb.getAppDb(requireContext())!!.ArticulosDAO()!!.findArticuloByCodBar(CodigoBarras, iArea)
  572 + busqueda = AppDb.getAppDb(requireContext())!!.ArticulosDAO()!!.findArticuloByCodBar(CodigoBarras, SerchArea())
598 573 return@async busqueda
599 574 }.await()
600 575 }
... ... @@ -603,7 +578,7 @@ class InventarioFragment : Fragment(), ProductosListAdapter.OnImageDotsClickList
603 578 //TODO BUSQUEDA POR DESCRIPCION
604 579 var busqueda: List<Articles>? = null
605 580 return GlobalScope.async(Dispatchers.IO) {
606   - busqueda = AppDb.getAppDb(requireContext())!!.ArticulosDAO()!!.findArticuloByDesc(descripcion, iArea)
  581 + busqueda = AppDb.getAppDb(requireContext())!!.ArticulosDAO()!!.findArticuloByDesc(descripcion, SerchArea())
607 582 return@async busqueda
608 583 }.await()
609 584 }
... ... @@ -660,7 +635,7 @@ class InventarioFragment : Fragment(), ProductosListAdapter.OnImageDotsClickList
660 635 //TODO BUSQUEDA POR DESCRIPCION
661 636 var busqueda: Articles? = null
662 637 return GlobalScope.async(Dispatchers.IO) {
663   - busqueda = AppDb.getAppDb(requireContext())!!.ArticulosDAO()!!.findArticuloByCodBar(codigoBarras, iArea)
  638 + busqueda = AppDb.getAppDb(requireContext())!!.ArticulosDAO()!!.findArticuloByCodBar(codigoBarras, SerchArea())
664 639 return@async busqueda
665 640 }.await()
666 641 }
... ... @@ -684,7 +659,7 @@ class InventarioFragment : Fragment(), ProductosListAdapter.OnImageDotsClickList
684 659  
685 660 fun cargarRecicler(articulos: Articles, cant: Float) {
686 661 //TODO CARGO EN LE RV
687   - val item = ItemsRecycler(articulos.sector, articulos.codigo, articulos.descripcion, cant, articulos.codBar, articulos.codOrigen)
  662 + val item = ItemsRecycler(articulos.sector, articulos.codigo, articulos.descripcion, cant, articulos.codBar, articulos.codOrigen, articulos.balanza.toString(),articulos.de.toString())
688 663 listArticulos.add(item)
689 664  
690 665 viewAdapter = ProductosListAdapter(requireContext(), listArticulos, this)
... ... @@ -744,9 +719,10 @@ class InventarioFragment : Fragment(), ProductosListAdapter.OnImageDotsClickList
744 719 return prodInclu
745 720 }
746 721  
747   - private fun SerchArea() {
  722 + private fun SerchArea(): Int {
748 723 if (sharedPreferences.contains("rbVentas")) if (sharedPreferences.getString("rbVentas", "").toString() == "1") iArea = 0
749 724 if (sharedPreferences.contains("rbDeposito")) if (sharedPreferences.getString("rbDeposito", "").toString() == "1") iArea = 1
  725 + return iArea
750 726 }
751 727  
752 728 fun ObtenerFechaActual(): String? {
... ... @@ -788,50 +764,51 @@ class InventarioFragment : Fragment(), ProductosListAdapter.OnImageDotsClickList
788 764 }
789 765  
790 766 override fun onImagePenClick(sector: String?, codigo: String?, cantidad: String?, position: String) {
791   -
792   - val mDialogView = LayoutInflater.from(context).inflate(R.layout.login_dialog, null)
793   - val mBuilder = AlertDialog.Builder(context).setView(mDialogView).setTitle("${listArticulos[position.toInt()].descripcion}")
794   -// .setCancelable(false)
795   - mDialogView.tvCantInicial.text = cantidad
796   - val mAlertDialog = mBuilder.show()
797   - mDialogView.rbSumar.setOnClickListener {
798   - if (!mDialogView.tvNuevaCantidad.text.isNullOrEmpty()) {
799   - mDialogView.tvgenerico4.text = (mDialogView.tvCantInicial.text.toString().toFloat() + mDialogView.tvNuevaCantidad.text.toString().toFloat()).toString()
800   - mDialogView.tvNuevaCantidad.isEnabled=false
801   - }
802   - }
803   - mDialogView.rbRestar.setOnClickListener {
804   - if (!mDialogView.tvNuevaCantidad.text.isNullOrEmpty()) {
805   - if (mDialogView.tvCantInicial.text.toString().toFloat() >= mDialogView.tvNuevaCantidad.text.toString().toFloat()) {
806   - mDialogView.tvgenerico4.text = (mDialogView.tvCantInicial.text.toString().toFloat() - mDialogView.tvNuevaCantidad.text.toString().toFloat()).toString()
807   - mDialogView.tvNuevaCantidad.isEnabled=false
808   - }
809   - }
810   - }
811   - mDialogView.rbMdodificar.setOnClickListener {
812   - if (!mDialogView.tvNuevaCantidad.text.isNullOrEmpty()) {
813   - mDialogView.tvgenerico4.text = (mDialogView.tvNuevaCantidad.text.toString().toFloat()).toString()
814   - mDialogView.tvNuevaCantidad.isEnabled=false
815   - }
816   - }
817   - mDialogView.btnAceptar.setOnClickListener {
818   - if (!mDialogView.tvNuevaCantidad.text.isNullOrEmpty()) {
819   - mAlertDialog.dismiss()
820   - val name = mDialogView.tvgenerico4.text.toString().toFloat()
821   - fCant = 0F
822   - fCant = name
823   - listArticulos[position.toInt()].cantTomada = fCant
824   - updateCantidad(listArticulos[position.toInt()].sector.toString(), listArticulos[position.toInt()].codigo.toString(), fCant)
825   - viewAdapter.notifyDataSetChanged()
826   - } else if (mDialogView.tvNuevaCantidad.text.isNullOrEmpty()) {
827   - mDialogView.tvNuevaCantidad.error = "No vacio"
828   - mDialogView.tvNuevaCantidad.requestFocus()
829   - mDialogView.tvNuevaCantidad.hint = "Ingrese un valor"
830   - }
831   - }
832   - mDialogView.dialogCancelBtn.setOnClickListener {
833   - mAlertDialog.dismiss()
834   - }
  767 + dialogoSumaResta(requireContext(), position.toInt(), listArticulos[position.toInt()].univta)
  768 +
  769 +// val mDialogView = LayoutInflater.from(context).inflate(R.layout.login_dialog, null)
  770 +// val mBuilder = AlertDialog.Builder(context).setView(mDialogView).setTitle("${listArticulos[position.toInt()].descripcion}")
  771 +//// .setCancelable(false)
  772 +// mDialogView.tvCantInicial.text = cantidad
  773 +// val mAlertDialog = mBuilder.show()
  774 +// mDialogView.rbSumar.setOnClickListener {
  775 +// if (!mDialogView.tvNuevaCantidad.text.isNullOrEmpty()) {
  776 +// mDialogView.tvgenerico4.text = (mDialogView.tvCantInicial.text.toString().toFloat() + mDialogView.tvNuevaCantidad.text.toString().toFloat()).toString()
  777 +// mDialogView.tvNuevaCantidad.isEnabled=false
  778 +// }
  779 +// }
  780 +// mDialogView.rbRestar.setOnClickListener {
  781 +// if (!mDialogView.tvNuevaCantidad.text.isNullOrEmpty()) {
  782 +// if (mDialogView.tvCantInicial.text.toString().toFloat() >= mDialogView.tvNuevaCantidad.text.toString().toFloat()) {
  783 +// mDialogView.tvgenerico4.text = (mDialogView.tvCantInicial.text.toString().toFloat() - mDialogView.tvNuevaCantidad.text.toString().toFloat()).toString()
  784 +// mDialogView.tvNuevaCantidad.isEnabled=false
  785 +// }
  786 +// }
  787 +// }
  788 +// mDialogView.rbMdodificar.setOnClickListener {
  789 +// if (!mDialogView.tvNuevaCantidad.text.isNullOrEmpty()) {
  790 +// mDialogView.tvgenerico4.text = (mDialogView.tvNuevaCantidad.text.toString().toFloat()).toString()
  791 +// mDialogView.tvNuevaCantidad.isEnabled=false
  792 +// }
  793 +// }
  794 +// mDialogView.btnAceptar.setOnClickListener {
  795 +// if (!mDialogView.tvNuevaCantidad.text.isNullOrEmpty()) {
  796 +// mAlertDialog.dismiss()
  797 +// val name = mDialogView.tvgenerico4.text.toString().toFloat()
  798 +// fCant = 0F
  799 +// fCant = name
  800 +// listArticulos[position.toInt()].cantTomada = fCant
  801 +// updateCantidad(listArticulos[position.toInt()].sector.toString(), listArticulos[position.toInt()].codigo.toString(), fCant)
  802 +// viewAdapter.notifyDataSetChanged()
  803 +// } else if (mDialogView.tvNuevaCantidad.text.isNullOrEmpty()) {
  804 +// mDialogView.tvNuevaCantidad.error = "No vacio"
  805 +// mDialogView.tvNuevaCantidad.requestFocus()
  806 +// mDialogView.tvNuevaCantidad.hint = "Ingrese un valor"
  807 +// }
  808 +// }
  809 +// mDialogView.dialogCancelBtn.setOnClickListener {
  810 +// mAlertDialog.dismiss()
  811 +// }
835 812 }
836 813 }
837 814  
app/src/main/java/com/focasoftware/deboinventariov20/ui/inventario/ItemsRecycler.kt
... ... @@ -2,6 +2,6 @@ package com.focasoftware.deboinventariov20.ui.inventario
2 2  
3 3 import android.widget.ImageView
4 4  
5   -data class ItemsRecycler(val sector: String?,val codigo: String?, val descripcion: String?, var cantTomada: Float, val codigoBarras: String?, val codigoOrigen: String?) {
  5 +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) {
6 6  
7 7 }
8 8 \ No newline at end of file
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
17 17  
18 18 private var removePosition: Int = 0
19 19 private var removedItem: ItemsRecycler? = null
20   -// private var items2: ArrayList<ItemsRecycler>? = null
21 20  
22 21 interface OnImageDotsClickListener {
23 22 fun onImageDotsClick(sector: String?,codigo: String?)
24 23 fun onImagePenClick(sector: String?, codigo: String?, cantidad: String?, position: String)
25 24 }
26 25  
27   -// init {
28   -// this.items2 = productos
29   -// }
30   -
31 26 override fun onCreateViewHolder(parent: ViewGroup, p1: Int) = ItemsViewHolder(LayoutInflater.from(context).inflate(R.layout.item, parent, false))
32 27  
33 28 override fun getItemCount() = productos.size
... ... @@ -51,22 +46,7 @@ class ProductosListAdapter(private val context: Context,private val productos: A
51 46 itemView.tvCodigoOrigen.text=item.sector
52 47 itemView.ivPen.setImageResource(R.drawable.pen)
53 48 itemView.ivDots.setImageResource(R.drawable.more)
54   -
55 49 }
56   -// val sector = itemView.tvSector
57   -// val codigo = itemView.tvCodigo
58   -// val descripcion = itemView.tvDescripcion
59   -// val cantCont = itemView.tvCantidad
60   -// val codigoBarras = itemView.tvCodigoBarras
61   -// val codigoOrigen = itemView.tvCodigoOrigen
62   -// val imageDots = itemView.ivDots
63   -// val imagePen = itemView.ivPen
64   -//
65   -// fun bind(pro: ItemsRecycler) {
66   -//
67   -// }
68   -
69   -
70 50 }
71 51  
72 52 fun removeItem(viewHolder: RecyclerView.ViewHolder) {
... ... @@ -75,11 +55,6 @@ class ProductosListAdapter(private val context: Context,private val productos: A
75 55  
76 56 productos.removeAt(viewHolder.adapterPosition)
77 57 notifyItemRemoved(viewHolder.adapterPosition)
78   -//
79   -// Snackbar.make(viewHolder.itemView, "El articulo fue ${removedItem!!.descripcion} eliminado", Snackbar.LENGTH_LONG).setAction("Rehacer") {
80   -// productos.add(removePosition, removedItem!!)
81   -// notifyItemInserted(removePosition)
82   -// }.show()
83 58 }
84 59  
85 60  
app/src/main/java/com/focasoftware/deboinventariov20/ui/main/InventarioListAdapter.kt
... ... @@ -10,7 +10,7 @@ import com.focasoftware.deboinventariov20.R
10 10 import com.focasoftware.deboinventariov20.ui.util.Base.BaseViewHolder
11 11 import kotlinx.android.synthetic.main.item_principal.view.*
12 12  
13   -class InventarioListAdapter(private val context: Context, private val inv: ArrayList<InvHead>, private val itemClickListener: OnInventarioClickListener) :
  13 +class InventarioListAdapter(private val context: Context, private val inv: List<InvHead>, private val itemClickListener: OnInventarioClickListener) :
14 14 RecyclerView.Adapter<BaseViewHolder<*>>() {
15 15  
16 16 interface OnInventarioClickListener {
app/src/main/java/com/focasoftware/deboinventariov20/ui/main/MainFragment.kt
... ... @@ -18,6 +18,7 @@ import androidx.recyclerview.widget.RecyclerView
18 18 import com.focasoftware.deboinventariov20.DB.DataBase.AppDb
19 19 import com.focasoftware.deboinventariov20.Model.InvHead
20 20 import com.focasoftware.deboinventariov20.R
  21 +import com.focasoftware.deboinventariov20.ui.inventario.ItemsRecycler
21 22 import kotlinx.coroutines.Dispatchers
22 23 import kotlinx.coroutines.GlobalScope
23 24 import kotlinx.coroutines.async
... ... @@ -25,12 +26,13 @@ import kotlinx.coroutines.launch
25 26 import java.util.*
26 27  
27 28 class MainFragment : Fragment(), InventarioListAdapter.OnInventarioClickListener {
28   - private lateinit var inventarios: ArrayList<InvHead>
29   - private lateinit var ordenado: ArrayList<InvHead>
  29 + private lateinit var inventarios: List<InvHead>
  30 + private lateinit var ordenado: List<InvHead>
30 31 private lateinit var rcInventario: RecyclerView
31 32 private lateinit var viewAdapter: RecyclerView.Adapter<*>
32 33 private lateinit var viewManager: RecyclerView.LayoutManager
33   - private var listIvn = ArrayList<InvHead>()
  34 +// private var listIvn2 = List<InvHead>()
  35 +private var listIvn2 = ArrayList<InvHead>()
34 36 private lateinit var navController: NavController
35 37 private lateinit var sharedPreferences: SharedPreferences
36 38 private var cantidadInventarios: Int = 0
... ... @@ -45,7 +47,6 @@ class MainFragment : Fragment(), InventarioListAdapter.OnInventarioClickListener
45 47 val v = inflater.inflate(R.layout.fragment_main, container, false)
46 48 val tvInvDinamicos = v.findViewById<TextView>(R.id.tvInvDinamicos)
47 49 val txtDeposito = v.findViewById<TextView>(R.id.txtDeposito)
48   - val tvFecha = v.findViewById<TextView>(R.id.tvFecha)
49 50 val ivSort19= v.findViewById<ImageView>(R.id.ivSort19)
50 51 val ivSort91= v.findViewById<ImageView>(R.id.ivSort91)
51 52 val cbVentas= v.findViewById<CheckBox>(R.id.cbVentas)
... ... @@ -68,34 +69,47 @@ class MainFragment : Fragment(), InventarioListAdapter.OnInventarioClickListener
68 69 cargarRecicler(inv)
69 70 cantidadInventarios = i + 1
70 71 }
71   - tvInvDinamicos.text = "Inventarios Dinamicos (${cantidadInventarios.toString()})+"
  72 + tvInvDinamicos.text = "Inventarios Dinamicos (${cantidadInventarios.toString()}) +"
72 73 tvInvDinamicos.setOnClickListener {
73 74 if (!bAbiertoCerrado) {
74 75 bAbiertoCerrado = true
75 76 txtDeposito.visibility = View.GONE
76 77 rcInventario.visibility = View.VISIBLE
77   - ivSort91.visibility = View.VISIBLE
78   - ivSort19.visibility = View.INVISIBLE
79   - tvFecha.visibility = View.VISIBLE
  78 + ivSort91.visibility = View.INVISIBLE
  79 + ivSort19.visibility = View.VISIBLE
80 80 cbVentas.visibility = View.VISIBLE
81 81 cbDeposito.visibility = View.VISIBLE
82   - tvInvDinamicos.text = "Inventarios Dinamicos (${cantidadInventarios.toString()})-"
  82 + tvInvDinamicos.text = "Inventarios Dinamicos (${cantidadInventarios.toString()}) -"
83 83 } else {
84 84 bAbiertoCerrado = false
85 85 rcInventario.visibility = View.GONE
86 86 ivSort91.visibility = View.GONE
87 87 ivSort19.visibility = View.GONE
88   - tvFecha.visibility = View.GONE
89 88 txtDeposito.visibility = View.VISIBLE
90 89 cbVentas.visibility = View.GONE
91 90 cbDeposito.visibility = View.GONE
92   - tvInvDinamicos.text = "Inventarios Dinamicos (${cantidadInventarios.toString()})+"
  91 + tvInvDinamicos.text = "Inventarios Dinamicos (${cantidadInventarios.toString()}) +"
93 92 }
94 93 }
95   - ivSort91.setOnClickListener {
  94 + ivSort19.setOnClickListener {
96 95 ordenado= inventarios.sortedByDescending {
97 96 it.invNum
98   - } as ArrayList<InvHead>
  97 + }
  98 + viewAdapter = InventarioListAdapter(requireContext(), ordenado, this@MainFragment)
  99 + viewManager = LinearLayoutManager(requireContext())
  100 +
  101 + rcInventario.apply {
  102 + adapter = viewAdapter
  103 + layoutManager = viewManager
  104 + }
  105 + viewAdapter.notifyDataSetChanged()
  106 + ivSort19.visibility=View.INVISIBLE
  107 + ivSort91.visibility=View.VISIBLE
  108 + }
  109 + ivSort91.setOnClickListener {
  110 + ordenado= inventarios.sortedBy {
  111 + it.invNum
  112 + }
99 113 viewAdapter = InventarioListAdapter(requireContext(), ordenado, this@MainFragment)
100 114 viewManager = LinearLayoutManager(requireContext())
101 115  
... ... @@ -104,14 +118,16 @@ class MainFragment : Fragment(), InventarioListAdapter.OnInventarioClickListener
104 118 layoutManager = viewManager
105 119 }
106 120 viewAdapter.notifyDataSetChanged()
  121 + ivSort91.visibility=View.INVISIBLE
  122 + ivSort19.visibility=View.VISIBLE
107 123 }
108 124 }
109 125 return v
110 126 }
111 127  
112   - suspend fun buscarEnBDInvHead(): ArrayList<InvHead> {
  128 + suspend fun buscarEnBDInvHead(): List<InvHead> {
113 129 //TODO BUSQUEDA POR DESCRIPCION
114   - var busqueda: ArrayList<InvHead>
  130 + var busqueda: List<InvHead>
115 131 return GlobalScope.async(Dispatchers.IO) {
116 132 busqueda = AppDb.getAppDb(requireContext())!!.InvHeadDAO()!!.fetchAllInvHead()
117 133 return@async busqueda
... ... @@ -125,8 +141,8 @@ class MainFragment : Fragment(), InventarioListAdapter.OnInventarioClickListener
125 141 val item = ItemInventario("Nยฐ $number ${inv.descripcion}. Fecha: ${inv.fechaFinal}")
126 142 //(articulos.sector, articulos.codigo, articulos.descripcion, cant, articulos.codBar)
127 143 // listIvn.add(item)
128   - listIvn.add(inv)
129   - viewAdapter = InventarioListAdapter(requireContext(), listIvn, this)
  144 + listIvn2.add(inv)
  145 + viewAdapter = InventarioListAdapter(requireContext(), listIvn2, this)
130 146 viewManager = LinearLayoutManager(requireContext())
131 147  
132 148 rcInventario.apply {
... ... @@ -138,7 +154,7 @@ class MainFragment : Fragment(), InventarioListAdapter.OnInventarioClickListener
138 154 override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
139 155 super.onViewCreated(view, savedInstanceState)
140 156 navController = Navigation.findNavController(view)
141   - listIvn.clear()
  157 + listIvn2.clear()
142 158 }
143 159  
144 160 override fun onItemClick(inventario: String?) {
app/src/main/res/layout/fragment_main.xml
... ... @@ -25,9 +25,10 @@
25 25  
26 26 <ImageView
27 27 android:id="@+id/ivSort19"
28   - android:layout_width="wrap_content"
29   - android:layout_height="wrap_content"
  28 + android:layout_width="35dp"
  29 + android:layout_height="35dp"
30 30 android:layout_margin="10dp"
  31 + android:padding="5dp"
31 32 android:contentDescription=" "
32 33 android:visibility="gone"
33 34 android:src="@drawable/ic_sort19"
... ... @@ -38,11 +39,12 @@
38 39  
39 40 <ImageView
40 41 android:id="@+id/ivSort91"
41   - android:layout_width="wrap_content"
42   - android:layout_height="wrap_content"
  42 + android:layout_width="35dp"
  43 + android:layout_height="35dp"
43 44 android:layout_margin="10dp"
  45 + android:padding="5dp"
44 46 android:layout_marginTop="12dp"
45   - android:contentDescription=" "
  47 + android:contentDescription="Fecha"
46 48 android:visibility="gone"
47 49 android:src="@drawable/ic_sort91"
48 50 app:layout_constraintHorizontal_bias="1.0"
... ... @@ -50,20 +52,6 @@
50 52 app:layout_constraintStart_toStartOf="parent"
51 53 app:layout_constraintTop_toBottomOf="@id/tvInvDinamicos" />
52 54  
53   - <TextView
54   - android:id="@+id/tvFecha"
55   - android:layout_width="wrap_content"
56   - android:layout_height="wrap_content"
57   - android:layout_marginTop="5dp"
58   - android:text="Fecha"
59   - android:textColor="@android:color/black"
60   - android:textSize="25sp"
61   - android:visibility="gone"
62   - android:textStyle="bold"
63   - app:layout_constraintBottom_toTopOf="@id/rcInventario"
64   - app:layout_constraintHorizontal_chainStyle="packed"
65   - app:layout_constraintStart_toEndOf="@+id/ivSort19"
66   - app:layout_constraintTop_toBottomOf="@id/tvInvDinamicos" />
67 55  
68 56 <androidx.recyclerview.widget.RecyclerView
69 57 android:id="@+id/rcInventario"
... ... @@ -74,7 +62,7 @@
74 62 android:visibility="gone"
75 63 app:layout_constraintEnd_toEndOf="parent"
76 64 app:layout_constraintStart_toStartOf="parent"
77   - app:layout_constraintTop_toBottomOf="@id/tvFecha"
  65 + app:layout_constraintTop_toBottomOf="@id/ivSort19"
78 66 tools:listitem="@layout/item_principal" />
79 67  
80 68 <com.google.android.material.checkbox.MaterialCheckBox
... ... @@ -83,6 +71,7 @@
83 71 android:layout_height="wrap_content"
84 72 android:layout_margin="5dp"
85 73 android:text="Ventas"
  74 + android:checked="true"
86 75 android:visibility="gone"
87 76 app:layout_constraintEnd_toStartOf="@+id/cbDeposito"
88 77 app:layout_constraintTop_toBottomOf="@+id/tvInvDinamicos" />
... ... @@ -94,6 +83,7 @@
94 83 android:layout_margin="5dp"
95 84 android:visibility="gone"
96 85 android:text="Deposito"
  86 + android:checked="true"
97 87 app:layout_constraintEnd_toEndOf="parent"
98 88 app:layout_constraintTop_toBottomOf="@+id/tvInvDinamicos" />
99 89  
gradle/wrapper/gradle-wrapper.properties
... ... @@ -4,3 +4,18 @@ distributionPath=wrapper/dists
4 4 zipStoreBase=GRADLE_USER_HOME
5 5 zipStorePath=wrapper/dists
6 6 distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-all.zip
  7 +
  8 +# Enable Kapt Incremental annotation processing requeste
  9 +kapt.incremental.apt=true
  10 +
  11 +# Enable android.databinding.annotationprocessor.ProcessDataBinding (DYNAMIC)
  12 +android.databinding.incremental=true
  13 +
  14 +# Decrease gradle builds time
  15 +kapt.use.worker.api=true
  16 +
  17 +# turn off AP discovery in compile path, and therefore turn on Compile Avoidance
  18 +kapt.include.compile.classpath=false
  19 +
  20 +# Enable In Logcat to determine Kapt
  21 +kapt.verbose=true
7 22 \ No newline at end of file