Commit d1857acb654eadef457edb61553648b2e9c1eb08

Authored by Mauricio Sanchez
1 parent 2b4f7165e7
Exists in master

25092020 1600

app/src/main/java/com/focasoftware/deboinventariov20/DB/DAO/ArticulosDAO.kt
... ... @@ -65,7 +65,7 @@ interface InvHeadDAO {
65 65 @Query("UPDATE $TABLA_INV_H SET INV_PRODCONT=:cant WHERE INV_NUM=:inven")
66 66 suspend fun updateInvBody(inven: Int,cant: Int)
67 67  
68   - @Query("SELECT INV_PRODCONT FROM $TABLA_INV_H WHERE INV_NUM=:inven")
  68 + @Query("SELECT * FROM $TABLA_INV_H WHERE INV_NUM=:inven")
69 69 suspend fun foundInvHead (inven: Int): InvHead
70 70 }
71 71  
app/src/main/java/com/focasoftware/deboinventariov20/DB/DataBase/AppDb.kt
... ... @@ -12,7 +12,7 @@ import com.focasoftware.deboinventariov20.Model.InvHead
12 12 import com.focasoftware.deboinventariov20.Model.ServeInv
13 13  
14 14  
15   -@Database(entities = [Articles::class, InvHead::class, InvBody::class, ServeInv::class], version = 1, exportSchema = true)
  15 +@Database(entities = [Articles::class, InvHead::class, InvBody::class, ServeInv::class], version = 1, exportSchema = false)
16 16 abstract class AppDb : RoomDatabase() {
17 17 abstract fun ArticulosDAO(): ArticulosDAO?
18 18 abstract fun InvHeadDAO(): InvHeadDAO?
app/src/main/java/com/focasoftware/deboinventariov20/Model/WebService.kt
... ... @@ -9,7 +9,7 @@ import java.util.concurrent.TimeUnit
9 9  
10 10 object WebService {
11 11 private var instance: WebService? = null
12   - private var retrofit:Retrofit? =null
  12 + private var retrofit: Retrofit? = null
13 13 private val TIME_OUT: Long
14 14 get() {
15 15 return 15
... ... @@ -27,26 +27,21 @@ object WebService {
27 27 .readTimeout(TIME_OUT, TimeUnit.SECONDS)
28 28 .build()
29 29  
30   - private fun WebService() {
31   - retrofit = Retrofit.Builder()
32   - .client(okHttpClient)
33   - .baseUrl(BASE_URL)
34   - .addConverterFactory(GsonConverterFactory.create())
35   - .build()
36   - }
37   -
38   - @Synchronized
39   - fun getInstance(): WebService? {
40   - if (instance == null) {
41   - instance = WebService
42   - }
43   - return instance
44   - }
45   -
46   - fun <S> createService(serviceClass: Class<S>): S {
47   - return retrofit!!.create(serviceClass)
48   - }
49   -
  30 +// private fun WebService() {
  31 +// retrofit = Retrofit.Builder()
  32 +// .client(okHttpClient)
  33 +// .baseUrl(BASE_URL)
  34 +// .addConverterFactory(GsonConverterFactory.create())
  35 +// .build()
  36 +// }
  37 +//
  38 +// @Synchronized
  39 +// fun getInstance(): WebService? {
  40 +// if (instance == null) {
  41 +// instance = WebService
  42 +// }
  43 +// return instance
  44 +// }
50 45 // fun <S> createService(serviceClass: Class<S>): S {
51 46 // return retrofit!!.create(serviceClass)
52 47 // }
... ... @@ -60,12 +55,13 @@ object WebService {
60 55 // .create(EndPoints::class.java)
61 56 // }
62 57  
63   -// fun getProductosService(): ProductosApi {
64   -// return Retrofit.Builder()
65   -// .client(okHttpClient)
66   -// .baseUrl(BASE_URL)
67   -// .addConverterFactory(GsonConverterFactory.create())
68   -// .build()
69   -// .create(ProductosApi::class.java)
70   -// }
  58 +
  59 + fun getProductosService(): WebServiceApi {
  60 + return Retrofit.Builder()
  61 + .client(okHttpClient)
  62 + .baseUrl(BASE_URL)
  63 + .addConverterFactory(GsonConverterFactory.create())
  64 + .build()
  65 + .create(WebServiceApi::class.java)
  66 + }
71 67 }
app/src/main/java/com/focasoftware/deboinventariov20/UI/Utils/Utils.kt
... ... @@ -18,13 +18,13 @@ fun modificarCantidadEnCabecera(inventarioActual: Int, b: Boolean, context: Cont
18 18 GlobalScope.async(Dispatchers.IO) {
19 19 var cantProductos = 0
20 20 cantProductos =
21   - AppDb.getAppDb(context)!!.InvHeadDAO()!!.consultaCantidadInvH(inventarioActual.toLong())
  21 + AppDb.getAppDb(context)!!.InvHeadDAO()!!.consultaCantidadInvH(inventarioActual)
22 22 if (b) {
23 23 AppDb.getAppDb(context)!!.InvHeadDAO()!!
24   - .updateInvBody(inventarioActual.toLong(), cantProductos + 1)
  24 + .updateInvBody(inventarioActual, cantProductos + 1)
25 25 } else {
26 26 AppDb.getAppDb(context)!!.InvHeadDAO()!!
27   - .updateInvBody(inventarioActual.toLong(), cantProductos - 1)
  27 + .updateInvBody(inventarioActual, cantProductos - 1)
28 28 }
29 29 }
30 30 }
... ... @@ -71,7 +71,7 @@ class NoEncontradoSimple : DialogFragment() {
71 71 }
72 72 }
73 73  
74   -class noServerConf : DialogFragment() {
  74 +class NoServerConf : DialogFragment() {
75 75 override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
76 76 return activity?.let {
77 77 val title = ""
... ... @@ -105,7 +105,7 @@ fun isConnectedToThisServer(host: String): Boolean {
105 105  
106 106 return false
107 107 }
108   -class serverValido : DialogFragment() {
  108 +class ServerValido : DialogFragment() {
109 109 override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
110 110 return activity?.let {
111 111 val title = ""
... ... @@ -117,7 +117,7 @@ class serverValido : DialogFragment() {
117 117 } ?: throw IllegalStateException("Activity cannot be null")
118 118 }
119 119 }
120   -class serverNoValido : DialogFragment() {
  120 +class ServerNoValido : DialogFragment() {
121 121 override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
122 122 return activity?.let {
123 123 val title = ""
... ... @@ -129,7 +129,7 @@ class serverNoValido : DialogFragment() {
129 129 } ?: throw IllegalStateException("Activity cannot be null")
130 130 }
131 131 }
132   -class serverNoConf : DialogFragment() {
  132 +class ServerNoConf : DialogFragment() {
133 133 override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
134 134 return activity?.let {
135 135 val title = "Servidor no Valido"
... ... @@ -141,7 +141,19 @@ class serverNoConf : DialogFragment() {
141 141 } ?: throw IllegalStateException("Activity cannot be null")
142 142 }
143 143 }
144   -fun ObtenerFechaActual(): String {
  144 +class ExportacionExitosa : DialogFragment() {
  145 + override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
  146 + return activity?.let {
  147 + val title = "Exportación de Inventarios"
  148 + val content = "!La exportacion del inventario se realizo exitosamente¡"
  149 + val builder: AlertDialog.Builder = AlertDialog.Builder(requireActivity())
  150 + builder.setTitle(title).setMessage(content)
  151 + .setPositiveButton(android.R.string.ok) { _, _ -> }
  152 + return builder.create()
  153 + } ?: throw IllegalStateException("Activity cannot be null")
  154 + }
  155 +}
  156 +fun obtenerFechaActual(): String {
145 157 //TODO OBTENGO FECHA Y HORA ACTUAL PARA LA CABECERA DEL INVENTARIO Y PARA CADA ITEM QUE SE INSERTA EN LA BD
146 158 val current = LocalDateTime.now()
147 159 val formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy hh:mm:ss")
app/src/main/java/com/focasoftware/deboinventariov20/UI/actualizacionMaestros/ActuaMaestrosFragment.kt
... ... @@ -5,25 +5,19 @@ import android.view.LayoutInflater
5 5 import android.view.View
6 6 import android.view.ViewGroup
7 7 import android.widget.Button
  8 +import android.widget.RadioButton
8 9 import androidx.fragment.app.Fragment
9 10 import androidx.lifecycle.lifecycleScope
10 11 import com.focasoftware.deboinventariov20.DB.DataBase.AppDb
11 12 import com.focasoftware.deboinventariov20.Model.Articles
12   -import com.focasoftware.deboinventariov20.Model.Productos
13 13 import com.focasoftware.deboinventariov20.Model.ServeInv
14   -import com.focasoftware.deboinventariov20.Model.WebService.getInstance
15   -import com.focasoftware.deboinventariov20.Model.WebServiceApi
16 14 import com.focasoftware.deboinventariov20.R
17   -import com.focasoftware.deboinventariov20.UI.Utils.noServerConf
18   -import com.focasoftware.deboinventariov20.UI.Utils.serverNoConf
  15 +import com.focasoftware.deboinventariov20.UI.Utils.NoServerConf
  16 +import com.focasoftware.deboinventariov20.UI.Utils.ServerNoConf
19 17 import kotlinx.android.synthetic.main.fragment_actua_maestros.*
20 18 import kotlinx.coroutines.*
21 19 import kotlinx.coroutines.Dispatchers.IO
22 20 import kotlinx.coroutines.Dispatchers.Main
23   -import retrofit2.Call
24   -import retrofit2.Callback
25   -import retrofit2.Response
26   -import java.net.SocketTimeoutException
27 21  
28 22  
29 23 var BASE_URL = ""
... ... @@ -40,14 +34,14 @@ class ActuaMaestrosFragment : Fragment() {
40 34 if (serverPre != null) {
41 35 btnConfirmarAct.isEnabled = true
42 36 if (serverPre!!.direccion.isNullOrEmpty()) {
43   - val modalDialog = noServerConf()
  37 + val modalDialog = NoServerConf()
44 38 modalDialog.show(requireActivity().supportFragmentManager, "confirmDialog")
45 39 } else {
46 40 BASE_URL = serverPre!!.direccion.toString() + ":" + serverPre!!.puerto.toString() + "/"
47 41 tvServerConectado.text = "Conectado al servidor: ${serverPre!!.descripcion}"
48 42 }
49 43 } else {
50   - val modalDialog = serverNoConf()
  44 + val modalDialog = ServerNoConf()
51 45 modalDialog.show(requireActivity().supportFragmentManager, "confirmDialog")
52 46  
53 47 btnConfirmarAct.isEnabled = false
... ... @@ -68,6 +62,8 @@ class ActuaMaestrosFragment : Fragment() {
68 62 // Inflate the layout for this fragment
69 63 val v = inflater.inflate(R.layout.fragment_actua_maestros, container, false)
70 64 val bConfirmarAct = v.findViewById<Button>(R.id.btnConfirmarAct)
  65 + val obPorWifi = v.findViewById<RadioButton>(R.id.obPorWifi)
  66 + val obImpInventarios= v.findViewById<RadioButton>(R.id.obImpInventarios)
71 67  
72 68 bConfirmarAct.setOnClickListener {
73 69 loading_view.visibility = View.VISIBLE
... ... @@ -78,59 +74,62 @@ class ActuaMaestrosFragment : Fragment() {
78 74 }
79 75  
80 76 private fun obtenerArticulos() {
81   - val call = getInstance()
82   - ?.createService(WebServiceApi::class.java)
83   - ?.getProductos()
84   - var index: Long = 1
85   - call!!.enqueue(object : Callback<List<Productos>> {
86   - override fun onResponse(call: Call<List<Productos>>, response: Response<List<Productos>>) {
87   - if (response.code() == 200) {
88   - try {
89   - for (pro in response.body()!!) {
90   - val artiAcargar = Articles(
91   - pro.sector,
92   - pro.codigo,
93   - pro.descripcion,
94   - pro.codBar,
95   - pro.codOrigen,
96   - pro.precio,
97   - pro.costo,
98   - pro.exiVenta,
99   - pro.exiDeposito,
100   - pro.de,
101   - pro.balanza,
102   - pro.depSn,
103   - pro.imagen
104   - )
105   - index += index
106   - insertarProducto(artiAcargar)
107   - }
108   - countriesList.visibility = View.VISIBLE
109   - countriesList.text = "¡Datos Importados Correctamente!"
110   - loading_view.visibility = View.GONE
111   - } catch (e: SocketTimeoutException) {
112   - countriesList.visibility = View.VISIBLE
113   - countriesList.text = "¡Sin conexión al Servidor!"
114   - loading_view.visibility = View.GONE
115   - }
116   - }
117   - }
118   -
119   - override fun onFailure(call: Call<List<Productos>>, t: Throwable) {
120   - countriesList.visibility = View.VISIBLE
121   - countriesList.text = (t.message + "." + t.cause)
122   - loading_view.visibility = View.GONE
123   - }
124   - })
  77 +// val call = getInstance()
  78 +// ?.createService(WebServiceApi::class.java)
  79 +// ?.getProductos()
  80 +// val api: WebService? = getInstance()!!.createService()
  81 +// val call: Call<List<Productos>> = api!!.getProductos()
125 82  
  83 +// var index: Long = 1
  84 +// call!!.enqueue(object : Callback<List<Productos>> {
  85 +// override fun onResponse(call: Call<List<Productos>>, response: Response<List<Productos>>) {
  86 +// if (response.code() == 200) {
  87 +// try {
  88 +// for (pro in response.body()!!) {
  89 +// val artiAcargar = Articles(
  90 +// pro.sector,
  91 +// pro.codigo,
  92 +// pro.descripcion,
  93 +// pro.codBar,
  94 +// pro.codOrigen,
  95 +// pro.precio,
  96 +// pro.costo,
  97 +// pro.exiVenta,
  98 +// pro.exiDeposito,
  99 +// pro.de,
  100 +// pro.balanza,
  101 +// pro.depSn,
  102 +// pro.imagen
  103 +// )
  104 +// index += index
  105 +// insertarProducto(artiAcargar)
  106 +// }
  107 +// countriesList.visibility = View.VISIBLE
  108 +// countriesList.text = "¡Datos Importados Correctamente!"
  109 +// loading_view.visibility = View.GONE
  110 +// } catch (e: SocketTimeoutException) {
  111 +// countriesList.visibility = View.VISIBLE
  112 +// countriesList.text = "¡Sin conexión al Servidor!"
  113 +// loading_view.visibility = View.GONE
  114 +// }
  115 +// }
  116 +// }
  117 +//
  118 +// override fun onFailure(call: Call<List<Productos>>, t: Throwable) {
  119 +// countriesList.visibility = View.VISIBLE
  120 +// countriesList.text = (t.message + "." + t.cause)
  121 +// loading_view.visibility = View.GONE
  122 +// }
  123 +// })
126 124  
  125 + //Este es el que andaba
127 126 // var index: Long = 1
128 127 // withContext(IO) {
129 128 // val job = CoroutineScope(IO).launch {
130 129 // // TODO: BORRO TODO LOS ARTICULOS DE LA BASE PARA CARGARLOS DE NUEVO
131 130 // AppDb.getAppDb(requireActivity())!!.ArticulosDAO()!!.deleteAllArticulos()
132 131 // try {
133   -// val response = productosService.getProductos()
  132 +// val response = WebServiceApi.
134 133 // if (response.isSuccessful) {
135 134 //
136 135 // for (pro in response.body()!!) {
app/src/main/java/com/focasoftware/deboinventariov20/UI/actualizacionMaestros/InvImportadosFragment.kt
... ... @@ -0,0 +1,24 @@
  1 +package com.focasoftware.deboinventariov20.UI.actualizacionMaestros
  2 +
  3 +import android.os.Bundle
  4 +import androidx.fragment.app.Fragment
  5 +import android.view.LayoutInflater
  6 +import android.view.View
  7 +import android.view.ViewGroup
  8 +import com.focasoftware.deboinventariov20.R
  9 +
  10 +class InvImportadosFragment : Fragment() {
  11 +
  12 + override fun onCreate(savedInstanceState: Bundle?) {
  13 + super.onCreate(savedInstanceState)
  14 +
  15 + }
  16 +
  17 + override fun onCreateView(
  18 + inflater: LayoutInflater, container: ViewGroup?,
  19 + savedInstanceState: Bundle?
  20 + ): View? {
  21 + // Inflate the layout for this fragment
  22 + return inflater.inflate(R.layout.fragment_inv_importados, container, false)
  23 + }
  24 +}
0 25 \ No newline at end of file
app/src/main/java/com/focasoftware/deboinventariov20/UI/configuracion/ConfiguracionFragment.kt
... ... @@ -17,8 +17,8 @@ import com.focasoftware.deboinventariov20.DB.DataBase.AppDb
17 17 import com.focasoftware.deboinventariov20.Model.ServeInv
18 18 import com.focasoftware.deboinventariov20.R
19 19 import com.focasoftware.deboinventariov20.UI.Utils.isConnectedToThisServer
20   -import com.focasoftware.deboinventariov20.UI.Utils.serverNoValido
21   -import com.focasoftware.deboinventariov20.UI.Utils.serverValido
  20 +import com.focasoftware.deboinventariov20.UI.Utils.ServerNoValido
  21 +import com.focasoftware.deboinventariov20.UI.Utils.ServerValido
22 22 import kotlinx.android.synthetic.main.fragment_configuracion.*
23 23 import kotlinx.coroutines.*
24 24 import kotlinx.coroutines.Dispatchers.Main
... ... @@ -200,10 +200,10 @@ class ConfiguracionFragment : Fragment() {
200 200 val serverPre = fetchServer()
201 201 if (serverPre != null) {
202 202 if (isConnectedToThisServer(serverPre.direccion.toString().substring(7, serverPre.direccion.toString().length))) {
203   - val modalDialog = serverValido()
  203 + val modalDialog = ServerValido()
204 204 modalDialog.show(requireActivity().supportFragmentManager, "confirmDialog")
205 205 } else {
206   - val modalDialog = serverNoValido()
  206 + val modalDialog = ServerNoValido()
207 207 modalDialog.show(requireActivity().supportFragmentManager, "confirmDialog")
208 208 }
209 209 }
app/src/main/java/com/focasoftware/deboinventariov20/UI/descripCorigenFragment/CodigoOriFragment.kt
... ... @@ -27,7 +27,7 @@ import com.focasoftware.deboinventariov20.DB.DataBase.AppDb
27 27 import com.focasoftware.deboinventariov20.Model.Articles
28 28 import com.focasoftware.deboinventariov20.Model.InvBody
29 29 import com.focasoftware.deboinventariov20.R
30   -import com.focasoftware.deboinventariov20.UI.Utils.ObtenerFechaActual
  30 +import com.focasoftware.deboinventariov20.UI.Utils.obtenerFechaActual
31 31 import com.focasoftware.deboinventariov20.UI.Utils.modificarCantidadEnCabecera
32 32 import kotlinx.android.synthetic.main.ingresar_cantidad.view.*
33 33 import kotlinx.android.synthetic.main.ingresar_cantidad.view.btnAceptar
... ... @@ -138,8 +138,8 @@ class CodigoOriFragment : Fragment() {
138 138 (viewAdapter2 as CodigoOrigenAdapter).items2?.get(viewHolder.layoutPosition)!!.precio,
139 139 (viewAdapter2 as CodigoOrigenAdapter).items2?.get(viewHolder.layoutPosition)!!.balanza,
140 140 (viewAdapter2 as CodigoOrigenAdapter).items2?.get(viewHolder.layoutPosition)!!.depSn,
141   - ObtenerFechaActual(),
142   - ObtenerFechaActual())
  141 + obtenerFechaActual(),
  142 + obtenerFechaActual())
143 143 InsertarArtEnDB(body)// TODO: MANDO A CARGAR A LA BASE DE DATOS
144 144 modificarCantidadEnCabecera(numeroInventario, true, requireActivity())
145 145 // VolverAinventario()
... ... @@ -260,7 +260,7 @@ class CodigoOriFragment : Fragment() {
260 260 withContext(Dispatchers.IO) {
261 261 val activity: FragmentActivity? = activity
262 262 if (activity != null && isAdded) {
263   - AppDb.getAppDb(requireActivity())!!.InvBodyDAO()!!.updateInvBody(cantidad, sector.toLong(), codigo.toLong(), ObtenerFechaActual())
  263 + AppDb.getAppDb(requireActivity())!!.InvBodyDAO()!!.updateInvBody(cantidad, sector.toLong(), codigo.toLong(), obtenerFechaActual())
264 264 }
265 265 }
266 266 }
app/src/main/java/com/focasoftware/deboinventariov20/UI/descripcionFragment/DescripcionFragment.kt
... ... @@ -27,7 +27,7 @@ import com.focasoftware.deboinventariov20.DB.DataBase.AppDb
27 27 import com.focasoftware.deboinventariov20.Model.Articles
28 28 import com.focasoftware.deboinventariov20.Model.InvBody
29 29 import com.focasoftware.deboinventariov20.R
30   -import com.focasoftware.deboinventariov20.UI.Utils.ObtenerFechaActual
  30 +import com.focasoftware.deboinventariov20.UI.Utils.obtenerFechaActual
31 31 import com.focasoftware.deboinventariov20.UI.Utils.modificarCantidadEnCabecera
32 32 import kotlinx.android.synthetic.main.ingresar_cantidad.view.*
33 33 import kotlinx.android.synthetic.main.login_dialog.view.*
... ... @@ -138,8 +138,8 @@ class DescripcionFragment : Fragment() {
138 138 (viewAdapter2 as DescripcionListAdapter).items2?.get(viewHolder.layoutPosition)!!.precio,
139 139 (viewAdapter2 as DescripcionListAdapter).items2?.get(viewHolder.layoutPosition)!!.balanza,
140 140 (viewAdapter2 as DescripcionListAdapter).items2?.get(viewHolder.layoutPosition)!!.depSn,
141   - ObtenerFechaActual(),
142   - ObtenerFechaActual()
  141 + obtenerFechaActual(),
  142 + obtenerFechaActual()
143 143 )
144 144 InsertarArtEnDB(body)// TODO: MANDO A CARGAR A LA BASE DE DATOS
145 145 modificarCantidadEnCabecera(numeroInventario, true, requireActivity())
... ... @@ -254,7 +254,7 @@ class DescripcionFragment : Fragment() {
254 254 //TODO BUSQUEDA POR CODIGO DE BARRAS
255 255 var busqueda: InvBody? = null
256 256 return GlobalScope.async(Dispatchers.IO) {
257   - busqueda = AppDb.getAppDb(requireContext())!!.InvBodyDAO()!!.fetchArtInInvBody(sector.toLong(), codigo.toLong(), numInventario.toLong())
  257 + busqueda = AppDb.getAppDb(requireContext())!!.InvBodyDAO()!!.fetchArtInInvBody(sector.toLong(), codigo.toLong(), numInventario.toInt())
258 258 return@async busqueda
259 259 }.await()
260 260 }
... ... @@ -264,7 +264,7 @@ class DescripcionFragment : Fragment() {
264 264 withContext(Dispatchers.IO) {
265 265 val activity: FragmentActivity? = activity
266 266 if (activity != null && isAdded) {
267   - AppDb.getAppDb(requireActivity())!!.InvBodyDAO()!!.updateInvBody(cantidad, sector.toLong(), codigo.toLong(),ObtenerFechaActual())
  267 + AppDb.getAppDb(requireActivity())!!.InvBodyDAO()!!.updateInvBody(cantidad, sector.toLong(), codigo.toLong(),obtenerFechaActual())
268 268 }
269 269 }
270 270 }
app/src/main/java/com/focasoftware/deboinventariov20/UI/inventario/InventarioFragment.kt
... ... @@ -32,9 +32,10 @@ import androidx.recyclerview.widget.RecyclerView
32 32 import com.focasoftware.deboinventariov20.DB.DataBase.AppDb
33 33 import com.focasoftware.deboinventariov20.Model.*
34 34 import com.focasoftware.deboinventariov20.R
  35 +import com.focasoftware.deboinventariov20.UI.Utils.ExportacionExitosa
35 36 import com.focasoftware.deboinventariov20.UI.Utils.NoEncontradoSimple
36   -import com.focasoftware.deboinventariov20.UI.Utils.ObtenerFechaActual
37 37 import com.focasoftware.deboinventariov20.UI.Utils.modificarCantidadEnCabecera
  38 +import com.focasoftware.deboinventariov20.UI.Utils.obtenerFechaActual
38 39 import com.focasoftware.deboinventariov20.UI.inventario.viewModel.InventarioViewModel
39 40 import kotlinx.android.synthetic.main.fragment_inventario.*
40 41 import kotlinx.android.synthetic.main.ingresar_cantidad.view.*
... ... @@ -42,10 +43,12 @@ import kotlinx.android.synthetic.main.login_dialog.view.*
42 43 import kotlinx.android.synthetic.main.login_dialog.view.btnAceptar
43 44 import kotlinx.coroutines.*
44 45 import kotlinx.coroutines.Dispatchers.IO
  46 +import kotlinx.coroutines.Dispatchers.Main
45 47 import retrofit2.Call
46 48 import retrofit2.Callback
47 49 import retrofit2.Response
48 50 import java.util.*
  51 +import kotlin.collections.ArrayList
49 52  
50 53 class InventarioFragment : Fragment(), ProductosListAdapter.OnImageDotsClickListener {
51 54  
... ... @@ -70,8 +73,8 @@ class InventarioFragment : Fragment(), ProductosListAdapter.OnImageDotsClickList
70 73 @SuppressLint("MissingPermission")
71 74 override fun onCreate(savedInstanceState: Bundle?) {
72 75 super.onCreate(savedInstanceState)
73   - inventarioViewModel= ViewModelProviders.of(this).get(InventarioViewModel::class.java)
74   -
  76 + inventarioViewModel = ViewModelProviders.of(this).get(InventarioViewModel::class.java)
  77 +
75 78 sharedPreferences = requireActivity().getSharedPreferences("SP_INFO", Context.MODE_PRIVATE)
76 79 if (sharedPreferences.contains("Inventario")) if (sharedPreferences.getString("Inventario", "").toString() != "-1") {
77 80 (inventarioViewModel as InventarioViewModel).InventarioNuevo = sharedPreferences.getString("Inventario", "").toString().toInt()
... ... @@ -108,8 +111,8 @@ class InventarioFragment : Fragment(), ProductosListAdapter.OnImageDotsClickList
108 111 (inventarioViewModel as InventarioViewModel).InventarioNuevo,
109 112 if (!SerchArea()) "Ventas" else "Deposito",
110 113 1,
111   - ObtenerFechaActual(),
112   - ObtenerFechaActual(),
  114 + obtenerFechaActual(),
  115 + obtenerFechaActual(),
113 116 0L,
114 117 SerchArea(),
115 118 AjusteProductos(),
... ... @@ -117,12 +120,12 @@ class InventarioFragment : Fragment(), ProductosListAdapter.OnImageDotsClickList
117 120 )
118 121 AppDb.getAppDb(requireActivity())!!.InvHeadDAO()!!.insertInvHead(invHead)
119 122  
120   - tvTitulo.text = "Inventario " + " # ${(inventarioViewModel as InventarioViewModel).InventarioNuevo} "+descArea
  123 + tvTitulo.text = "Inventario " + " # ${(inventarioViewModel as InventarioViewModel).InventarioNuevo} " + descArea
121 124 }
122 125 } else {// TODO (SI VENGO DE FRAGMENT DESCRIPCION)
123 126 listArticulos.clear()
124 127 cargarDeBdInventario((inventarioViewModel as InventarioViewModel).InventarioNuevo)
125   - tvTitulo.text = "Inventario " + " # ${(inventarioViewModel as InventarioViewModel).InventarioNuevo} "+ descArea
  128 + tvTitulo.text = "Inventario " + " # ${(inventarioViewModel as InventarioViewModel).InventarioNuevo} " + descArea
126 129 }
127 130  
128 131 tCodigoBarras.setOnKeyListener { _, keyCode, keyEvent ->
... ... @@ -130,11 +133,11 @@ class InventarioFragment : Fragment(), ProductosListAdapter.OnImageDotsClickList
130 133 sChangeUpper = tCodigoBarras.text.toString()
131 134 var indiceDelArtEncontrado = 0
132 135  
133   - if (tCodigoBarras.text.isNullOrBlank() ) {
  136 + if (tCodigoBarras.text.isNullOrBlank()) {
134 137 tCodigoBarras.error = "No puede estar vacio"
135 138 tCodigoBarras.requestFocus()
136 139 tCodigoBarras.hint = "No puede estar vacio"
137   - }else if (tCodigoBarras.text.toString().length<4 && iEstado==2) {
  140 + } else if (tCodigoBarras.text.toString().length < 4 && iEstado == 2) {
138 141 tCodigoBarras.error = "Minimo 4 caracteres"
139 142 tCodigoBarras.requestFocus()
140 143 tCodigoBarras.hint = "4 Minimo"
... ... @@ -345,11 +348,15 @@ class InventarioFragment : Fragment(), ProductosListAdapter.OnImageDotsClickList
345 348 btnExportarInv.setOnClickListener {
346 349 AlertDialog.Builder(requireContext()).setTitle(R.string.sTituloExportar).setMessage(R.string.sMensajeExportar)
347 350 .setPositiveButton(R.string.btnOk, DialogInterface.OnClickListener { dialog, which ->
348   - exportarInventario(InventarioNuevo)
349   - borrarInvActual()
350   - Toast.makeText(requireContext(), "El inventario $(inventarioViewModel as InventarioViewModel).InventarioNuevo fue Exportado al Servidor", Toast.LENGTH_LONG).show()
351   - navController.navigate(R.id.action_inventarioFragment_to_mainFragment2)
352   - (inventarioViewModel as InventarioViewModel).InventarioNuevo = 0
  351 + if (preparaInvParaExportar((inventarioViewModel as InventarioViewModel).InventarioNuevo )) {
  352 + borrarInvActual()
  353 + Toast.makeText(requireContext(), "El inventario $(inventarioViewModel as InventarioViewModel).InventarioNuevo fue Exportado al Servidor", Toast.LENGTH_LONG).show()
  354 + navController.navigate(R.id.action_inventarioFragment_to_mainFragment2)
  355 + (inventarioViewModel as InventarioViewModel).InventarioNuevo = 0
  356 + } else {
  357 + Toast.makeText(requireContext(), "No se pudo realizar la exportación, Intente mas tarde.", Toast.LENGTH_LONG).show()
  358 + }
  359 +
353 360  
354 361 }).setNegativeButton(R.string.btnCancelar, DialogInterface.OnClickListener { dialog, which -> }).show()
355 362 }
... ... @@ -385,50 +392,45 @@ class InventarioFragment : Fragment(), ProductosListAdapter.OnImageDotsClickList
385 392 }
386 393 }
387 394  
388   - private fun exportarInventario(inventario: Int) {
389   - GlobalScope.launch(Dispatchers.Main) {
390   - val aEnviar: MutableList<InvToSend>?=null
  395 + private fun preparaInvParaExportar(inventario: Int): Boolean {
  396 + var bExporto = false
  397 + GlobalScope.launch(Main) {
  398 + val aEnviar: ArrayList<InvToSend>? = arrayListOf<InvToSend>()
391 399 val datosCabecera = foundInvHeadDB(inventario)
392   - val datosCuerpo=foundInvBodyBD(inventario)
393   -
394   - for (cuerpo in datosCuerpo){
395   - val temp=InvToSend(
396   - datosCabecera.fechaInicio,
397   - datosCabecera.fechaFinal,
398   - if (datosCabecera.lugar!!) 1 else 0,
399   - cuerpo.sector,
400   - cuerpo.codigo,
401   - cuerpo.descripcion,
402   - cuerpo.cantTomada,
403   - cuerpo.fechaInicio,
404   - cuerpo.fechaFinal)
405   - aEnviar!!.add (temp)
  400 + val datosCuerpo = foundInvBodyBD(inventario)
  401 +
  402 + for (cuerpo in datosCuerpo) {
  403 + val temp=InvToSend(datosCabecera.fechaInicio, datosCabecera.fechaFinal, if (datosCabecera.lugar!!) 1 else 0, cuerpo.sector, cuerpo.codigo, cuerpo.descripcion, cuerpo.cantTomada, cuerpo.fechaInicio, cuerpo.fechaFinal)
  404 + aEnviar!!.add(temp)
406 405 }
407   - exportarInventario(aEnviar!!)
  406 +// exportarInventario(aEnviar!!)
  407 + bExporto = true
408 408 }
409   -
410   -
411   - }
412   - private fun exportarInventario(aEnviar:List<InvToSend> ){
413   -
414   - val call: Call<Void?>? = WebService
415   - .getInstance()
416   - ?.createService(WebServiceApi::class.java)
417   - ?.inventarioToSend(aEnviar)
418   -
419   - call!!.enqueue(object : Callback<Void?> {
420   - override fun onResponse(call: Call<Void?>?, response: Response<Void?>) {
421   - if (response.code() == 201) {
422   - }
423   - if (response.code() == 409) {
424   - }
425   - }
426   -
427   - override fun onFailure(call: Call<Void?>?, t: Throwable?) {}
428   - })
429   -
  409 + return bExporto
430 410 }
431 411  
  412 +// private fun exportarInventario(aEnviar: List<InvToSend>) {
  413 +//
  414 +// val call: Call<Void?>? = WebService
  415 +// .getInstance()
  416 +// ?.createService(WebServiceApi::class.java)
  417 +// ?.inventarioToSend(aEnviar)
  418 +//
  419 +// call!!.enqueue(object : Callback<Void?> {
  420 +// override fun onResponse(call: Call<Void?>?, response: Response<Void?>) {
  421 +// if (response.code() == 201) {
  422 +// val modalDialog = ExportacionExitosa()
  423 +// modalDialog.show(requireActivity().supportFragmentManager, "confirmDialog")
  424 +// }
  425 +// if (response.code() == 409) {
  426 +// }
  427 +// }
  428 +//
  429 +// override fun onFailure(call: Call<Void?>?, t: Throwable?) {}
  430 +// })
  431 +//
  432 +// }
  433 +
432 434 private suspend fun foundInvHeadDB(inv: Int): InvHead {
433 435 var busqueda: InvHead
434 436 return GlobalScope.async(IO) {
... ... @@ -438,12 +440,12 @@ class InventarioFragment : Fragment(), ProductosListAdapter.OnImageDotsClickList
438 440 }
439 441  
440 442 private suspend fun foundInvBodyBD(inv: Int): List<InvBody> {
441   - var busqueda: List<InvBody>
442   - return GlobalScope.async(IO) {
443   - busqueda = AppDb.getAppDb(requireContext())!!.InvBodyDAO()!!.fetchAllInvBody(inv)
444   - return@async busqueda
445   - }.await()
446   - }
  443 + var busqueda: List<InvBody>
  444 + return GlobalScope.async(IO) {
  445 + busqueda = AppDb.getAppDb(requireContext())!!.InvBodyDAO()!!.fetchAllInvBody(inv)
  446 + return@async busqueda
  447 + }.await()
  448 + }
447 449  
448 450 private fun borrarInvActual() {
449 451 lifecycleScope.launch {
... ... @@ -455,7 +457,7 @@ class InventarioFragment : Fragment(), ProductosListAdapter.OnImageDotsClickList
455 457 }
456 458  
457 459 private fun cargarDeBdInventario(ultimoInv: Int) {
458   - GlobalScope.launch(Dispatchers.Main) {
  460 + GlobalScope.launch(Main) {
459 461 val invbody = cargarInventario(ultimoInv)
460 462 for ((i, _) in invbody!!.withIndex()) {
461 463 val art = Articles(
... ... @@ -471,7 +473,8 @@ class InventarioFragment : Fragment(), ProductosListAdapter.OnImageDotsClickList
471 473 "",
472 474 invbody[i].balanza,
473 475 invbody[i].depSn,
474   - invbody[i].costo)
  476 + invbody[i].costo
  477 + )
475 478 cargarRecicler(art, invbody[i].cantTomada!!.toFloat())
476 479 }
477 480 }
... ... @@ -631,11 +634,11 @@ class InventarioFragment : Fragment(), ProductosListAdapter.OnImageDotsClickList
631 634  
632 635 fun dialogoSumaResta(context: Context, indiceDelArtEncontrado: Int, univta: String, cancelable: Boolean) {
633 636  
634   - mDialogView = LayoutInflater.from(context).inflate(R.layout.login_dialog, null)
  637 + mDialogView = LayoutInflater.from(context).inflate(R.layout.login_dialog, null)
635 638 val mBuilder = AlertDialog.Builder(context).setView(mDialogView).setCancelable(cancelable)
636 639 // TODO: SI PERMITE QUE INGRESE DECIMALES
637 640 if (univta.contains("1") || univta.contains("3") || univta.contains("7")) mDialogView.tvNuevaCantidad.inputType = TYPE_CLASS_NUMBER
638   - mDialogView.tvTitulo2.text="${listArticulos[indiceDelArtEncontrado].descripcion}"
  641 + mDialogView.tvTitulo2.text = "${listArticulos[indiceDelArtEncontrado].descripcion}"
639 642 mDialogView.tvCantInicial.text = String.format("%.2f", listArticulos[indiceDelArtEncontrado].cantTomada)
640 643 val mAlertDialog = mBuilder.show()
641 644 mDialogView.tvNuevaCantidad.requestFocus()
... ... @@ -700,7 +703,7 @@ class InventarioFragment : Fragment(), ProductosListAdapter.OnImageDotsClickList
700 703 }
701 704 }
702 705  
703   - suspend fun buscarCodiogoOriEnBD(CodOri: String): List<Articles> {
  706 + suspend fun buscarCodiogoOriEnBD(CodOri: String): List<Articles> {
704 707 //TODO BUSQUEDA POR CODIGO DE BARRAS
705 708 var busqueda: List<Articles>
706 709 return GlobalScope.async(IO) {
... ... @@ -796,8 +799,8 @@ class InventarioFragment : Fragment(), ProductosListAdapter.OnImageDotsClickList
796 799 articulos.precio,
797 800 articulos.balanza,
798 801 articulos.depSn,
799   - ObtenerFechaActual(),
800   - ObtenerFechaActual()
  802 + obtenerFechaActual(),
  803 + obtenerFechaActual()
801 804 )
802 805 InsertarArtEnDB(body)// TODO MANDO A CARGAR A LA BASE DE DATOS
803 806 }
... ... @@ -879,12 +882,12 @@ class InventarioFragment : Fragment(), ProductosListAdapter.OnImageDotsClickList
879 882 }
880 883  
881 884 private fun SerchArea(): Boolean {
882   - if (sharedPreferences.contains("rbVentas")) if (sharedPreferences.getString("rbVentas", "").toString() == "1") iArea =false
  885 + if (sharedPreferences.contains("rbVentas")) if (sharedPreferences.getString("rbVentas", "").toString() == "1") iArea = false
883 886 if (sharedPreferences.contains("rbDeposito")) if (sharedPreferences.getString("rbDeposito", "").toString() == "1") iArea = true
884 887 return iArea
885 888 }
886 889  
887   - suspend fun SerchAreaInventario(): Boolean {
  890 + suspend fun SerchAreaInventario(): Boolean {
888 891 return GlobalScope.async(IO) {
889 892 return@async AppDb.getAppDb(requireActivity())!!.InvHeadDAO()!!.fetchAreaInvH((inventarioViewModel as InventarioViewModel).InventarioNuevo)
890 893 }.await()
... ... @@ -902,7 +905,7 @@ class InventarioFragment : Fragment(), ProductosListAdapter.OnImageDotsClickList
902 905 fun updateCantidad(sector: String, codigo: String, cantidad: Float) {
903 906 lifecycleScope.launch {
904 907 withContext(IO) {
905   - AppDb.getAppDb(requireActivity())!!.InvBodyDAO()!!.updateInvBody(cantidad, sector.toLong(), codigo.toLong(), ObtenerFechaActual())
  908 + AppDb.getAppDb(requireActivity())!!.InvBodyDAO()!!.updateInvBody(cantidad, sector.toLong(), codigo.toLong(), obtenerFechaActual())
906 909 }
907 910 }
908 911 }
... ... @@ -930,29 +933,29 @@ class InventarioFragment : Fragment(), ProductosListAdapter.OnImageDotsClickList
930 933 override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {}
931 934  
932 935 override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
933   - if(mDialogView.rbSumar.isChecked){
  936 + if (mDialogView.rbSumar.isChecked) {
934 937 // mDialogView.tvNuevaCantidad.isEnabled=false
935   - mDialogView.tvResultado.text=String.format("%.2f", mDialogView.tvNuevaCantidad.text.toString().toFloat() + mDialogView.tvCantInicial.text.toString().toFloat())
  938 + mDialogView.tvResultado.text = String.format("%.2f", mDialogView.tvNuevaCantidad.text.toString().toFloat() + mDialogView.tvCantInicial.text.toString().toFloat())
936 939 }
937   - if(mDialogView.rbRestar.isChecked) {
938   - if (!mDialogView.tvNuevaCantidad.text.isNullOrEmpty()) {
939   - if (mDialogView.tvCantInicial.text.toString().toFloat() >= mDialogView.tvNuevaCantidad.text.toString().toFloat()) {
940   - mDialogView.tvResultado.text = String.format("%.2f", mDialogView.tvCantInicial.text.toString().toFloat() - mDialogView.tvNuevaCantidad.text.toString().toFloat())
  940 + if (mDialogView.rbRestar.isChecked) {
  941 + if (!mDialogView.tvNuevaCantidad.text.isNullOrEmpty()) {
  942 + if (mDialogView.tvCantInicial.text.toString().toFloat() >= mDialogView.tvNuevaCantidad.text.toString().toFloat()) {
  943 + mDialogView.tvResultado.text = String.format("%.2f", mDialogView.tvCantInicial.text.toString().toFloat() - mDialogView.tvNuevaCantidad.text.toString().toFloat())
941 944 // mDialogView.tvNuevaCantidad.isEnabled = false
942   - } else {
943   - mDialogView.tvResultado.text = ""
944   - mDialogView.tvResultado.error = "Operación No Valida"
945   - mDialogView.tvResultado.requestFocus()
946   - mDialogView.tvResultado.hint = "Error"
947   - }
948   - }
949   - }
950   - if(mDialogView.rbMdodificar.isChecked) {
951   - if (!mDialogView.tvNuevaCantidad.text.isNullOrEmpty()) {
952   - mDialogView.tvResultado.text = String.format("%.2f", mDialogView.tvNuevaCantidad.text.toString().toFloat())
  945 + } else {
  946 + mDialogView.tvResultado.text = ""
  947 + mDialogView.tvResultado.error = "Operación No Valida"
  948 + mDialogView.tvResultado.requestFocus()
  949 + mDialogView.tvResultado.hint = "Error"
  950 + }
  951 + }
  952 + }
  953 + if (mDialogView.rbMdodificar.isChecked) {
  954 + if (!mDialogView.tvNuevaCantidad.text.isNullOrEmpty()) {
  955 + mDialogView.tvResultado.text = String.format("%.2f", mDialogView.tvNuevaCantidad.text.toString().toFloat())
953 956 // mDialogView.tvNuevaCantidad.isEnabled = false
954   - }
955   - }
  957 + }
  958 + }
956 959  
957 960 }
958 961 }
app/src/main/java/com/focasoftware/deboinventariov20/UI/main/MainFragment.kt
... ... @@ -27,13 +27,17 @@ import java.util.*
27 27 class MainFragment : Fragment(), InventarioListAdapter.OnInventarioClickListener {
28 28 private lateinit var inventarios: List<InvHead>
29 29 private lateinit var ordenado: List<InvHead>
  30 + private lateinit var ordenadoII: List<InvHead>
30 31 private lateinit var rcInventario: RecyclerView
  32 + private lateinit var rcInventarioII: RecyclerView
31 33 private lateinit var viewAdapter: RecyclerView.Adapter<*>
32 34 private lateinit var viewManager: RecyclerView.LayoutManager
33 35 private var listIvn2 = ArrayList<InvHead>()
  36 + private var listIvn2II = ArrayList<InvHead>()
34 37 private lateinit var navController: NavController
35 38 private lateinit var sharedPreferences: SharedPreferences
36 39 private var cantidadInventarios: Int = 0
  40 + private var cantidadInventariosII: Int = 0
37 41  
38 42 override fun onCreate(savedInstanceState: Bundle?) {
39 43 super.onCreate(savedInstanceState)
... ... @@ -47,15 +51,22 @@ class MainFragment : Fragment(), InventarioListAdapter.OnInventarioClickListener
47 51 savedInstanceState: Bundle?
48 52 ): View? {
49 53 var bAbiertoCerrado = false
  54 + var bAbiertoCerradoII = false
50 55 val v = inflater.inflate(R.layout.fragment_main, container, false)
51 56 val tvInvDinamicos = v.findViewById<TextView>(R.id.tvInvDinamicos)
52   - val txtDeposito = v.findViewById<TextView>(R.id.txtDeposito)
  57 + val tvInvImportados = v.findViewById<TextView>(R.id.tvInvImportados)
53 58 val ivSort19 = v.findViewById<ImageButton>(R.id.ivSort19)
54 59 val ivSort91 = v.findViewById<ImageButton>(R.id.ivSort91)
  60 + val ivSort19II = v.findViewById<ImageButton>(R.id.ivSort19II)
  61 + val ivSort91II = v.findViewById<ImageButton>(R.id.ivSort91II)
55 62 val cbVentas = v.findViewById<CheckBox>(R.id.cbVentas)
56 63 val cbDeposito = v.findViewById<CheckBox>(R.id.cbDeposito)
57 64 val tvTipo = v.findViewById<TextView>(R.id.tvTipo)
  65 + val cbVentasII = v.findViewById<CheckBox>(R.id.cbVentasII)
  66 + val cbDepositoII = v.findViewById<CheckBox>(R.id.cbDepositoII)
  67 + val tvTipoII = v.findViewById<TextView>(R.id.tvTipoII)
58 68 rcInventario = v.findViewById(R.id.rcInventario)
  69 + rcInventarioII = v.findViewById(R.id.rcInventarioII)
59 70  
60 71 GlobalScope.launch(Dispatchers.Main) {
61 72 inventarios = buscarEnBDInvHead()
... ... @@ -78,26 +89,30 @@ class MainFragment : Fragment(), InventarioListAdapter.OnInventarioClickListener
78 89 tvInvDinamicos.setOnClickListener {
79 90 if (!bAbiertoCerrado) {
80 91 bAbiertoCerrado = true
81   - txtDeposito.visibility = View.GONE
  92 + tvInvImportados.visibility = View.GONE
  93 + ivSort19II.visibility = View.GONE
  94 + ivSort91II.visibility = View.GONE
  95 + tvTipoII.visibility = View.GONE
  96 + cbVentasII.visibility = View.GONE
  97 + cbDepositoII.visibility = View.GONE
  98 +
82 99 rcInventario.visibility = View.VISIBLE
83 100 ivSort91.visibility = View.INVISIBLE
84 101 ivSort19.visibility = View.VISIBLE
85 102 cbVentas.visibility = View.VISIBLE
86 103 cbDeposito.visibility = View.VISIBLE
87 104 tvTipo.visibility = View.VISIBLE
88   - tvInvDinamicos.text =
89   - "Inventarios Dinamicos ($cantidadInventarios) -"
  105 + tvInvDinamicos.text = "Inventarios Dinamicos ($cantidadInventarios) -"
90 106 } else {
91 107 bAbiertoCerrado = false
92 108 rcInventario.visibility = View.GONE
93 109 ivSort91.visibility = View.GONE
94 110 ivSort19.visibility = View.GONE
95   - txtDeposito.visibility = View.VISIBLE
  111 + tvInvImportados.visibility = View.VISIBLE
96 112 cbVentas.visibility = View.GONE
97 113 cbDeposito.visibility = View.GONE
98 114 tvTipo.visibility = View.GONE
99   - tvInvDinamicos.text =
100   - "Inventarios Dinamicos ($cantidadInventarios) +"
  115 + tvInvDinamicos.text = "Inventarios Dinamicos ($cantidadInventarios) +"
101 116 }
102 117 }
103 118 ordenado = inventarios.sortedBy {
... ... @@ -182,6 +197,121 @@ class MainFragment : Fragment(), InventarioListAdapter.OnInventarioClickListener
182 197 }
183 198 viewAdapter.notifyDataSetChanged()
184 199 }
  200 +
  201 + GlobalScope.launch(Dispatchers.Main) {
  202 + tvInvImportados.text = "Inventarios Inportados ($cantidadInventariosII) +"
  203 + tvInvImportados.setOnClickListener {
  204 + if (!bAbiertoCerradoII) {
  205 + bAbiertoCerradoII = true
  206 + tvInvDinamicos.visibility = View.GONE
  207 + ivSort19.visibility = View.GONE
  208 + ivSort91.visibility = View.GONE
  209 + cbVentas.visibility = View.GONE
  210 + cbDeposito.visibility = View.GONE
  211 +
  212 + tvInvDinamicos.visibility = View.GONE
  213 + rcInventarioII.visibility = View.VISIBLE
  214 + ivSort91II.visibility = View.INVISIBLE
  215 + ivSort19II.visibility = View.VISIBLE
  216 + cbVentasII.visibility = View.VISIBLE
  217 + cbDepositoII.visibility = View.VISIBLE
  218 + tvTipoII.visibility = View.VISIBLE
  219 + tvInvImportados.text = "Inventarios Inportados ($cantidadInventariosII) -"
  220 + } else {
  221 + bAbiertoCerradoII = false
  222 + rcInventarioII.visibility = View.GONE
  223 + ivSort91II.visibility = View.GONE
  224 + ivSort19II.visibility = View.GONE
  225 + tvInvImportados.visibility = View.VISIBLE
  226 + cbVentasII.visibility = View.GONE
  227 + cbDepositoII.visibility = View.GONE
  228 + tvTipoII.visibility = View.GONE
  229 + tvInvDinamicos.visibility = View.VISIBLE
  230 + tvInvImportados.text = "Inventarios Inportados ($cantidadInventariosII) +"
  231 + }
  232 + }
  233 + ordenadoII = inventarios.sortedBy {
  234 + it.invNum
  235 + }
  236 + ivSort19II.setOnClickListener {
  237 + ordenadoII = inventarios.sortedByDescending {
  238 + it.invNum
  239 + }
  240 + cbDepositoII.isChecked=true
  241 + cbVentasII.isChecked=true
  242 + viewAdapter = InventarioListAdapter(requireContext(), ordenadoII, this@MainFragment)
  243 + viewManager = LinearLayoutManager(requireContext())
  244 +
  245 + rcInventarioII.apply {
  246 + adapter = viewAdapter
  247 + layoutManager = viewManager
  248 + }
  249 + viewAdapter.notifyDataSetChanged()
  250 + ivSort19II.visibility = View.INVISIBLE
  251 + ivSort91II.visibility = View.VISIBLE
  252 + }
  253 + ivSort91II.setOnClickListener {
  254 + ordenadoII = inventarios.sortedBy {
  255 + it.invNum
  256 + }
  257 + cbDepositoII.isChecked=true
  258 + cbVentasII.isChecked=true
  259 + viewAdapter = InventarioListAdapter(requireContext(), ordenadoII, this@MainFragment)
  260 + viewManager = LinearLayoutManager(requireContext())
  261 +
  262 + rcInventarioII.apply {
  263 + adapter = viewAdapter
  264 + layoutManager = viewManager
  265 + }
  266 + viewAdapter.notifyDataSetChanged()
  267 + ivSort91.visibility = View.INVISIBLE
  268 + ivSort19.visibility = View.VISIBLE
  269 + }
  270 + }
  271 +
  272 + cbVentasII.setOnClickListener {
  273 + if (!cbVentasII.isChecked) {
  274 + cbDepositoII.isChecked=true
  275 + listIvn2II.clear()
  276 + ordenadoII.forEach {
  277 + if (it.lugar==true) {
  278 + listIvn2II.add(it)
  279 + }
  280 + }
  281 + } else {
  282 + listIvn2II.clear()
  283 + listIvn2II.addAll(ordenadoII)
  284 + }
  285 + viewAdapter = InventarioListAdapter(requireContext(), listIvn2II, this@MainFragment)
  286 + viewManager = LinearLayoutManager(requireContext())
  287 + rcInventarioII.apply {
  288 + adapter = viewAdapter
  289 + layoutManager = viewManager
  290 + }
  291 + viewAdapter.notifyDataSetChanged()
  292 + }
  293 +
  294 + cbDepositoII.setOnClickListener {
  295 + if (!cbDepositoII.isChecked) {
  296 + cbVentasII.isChecked=true
  297 + listIvn2II.clear()
  298 + ordenadoII.forEach {
  299 + if (it.lugar==false) {
  300 + listIvn2II.add(it)
  301 + }
  302 + }
  303 + } else {
  304 + listIvn2II.clear()
  305 + listIvn2II.addAll(ordenadoII)
  306 + }
  307 + viewAdapter = InventarioListAdapter(requireContext(), listIvn2II, this@MainFragment)
  308 + viewManager = LinearLayoutManager(requireContext())
  309 + rcInventarioII.apply {
  310 + adapter = viewAdapter
  311 + layoutManager = viewManager
  312 + }
  313 + viewAdapter.notifyDataSetChanged()
  314 + }
185 315 return v
186 316 }
187 317  
app/src/main/res/layout-land/fragment_configuracion.xml
... ... @@ -63,7 +63,6 @@
63 63 app:layout_constraintHorizontal_chainStyle="packed"
64 64 app:layout_constraintStart_toStartOf="parent"
65 65 app:layout_constraintTop_toBottomOf="@+id/tvSeleccioneServidor"
66   - android:entries="@array/spinnerServidor"
67 66 android:prompt="@string/leyendaSpinner"/>
68 67  
69 68 <Button
app/src/main/res/layout/activity_splash.xml
... ... @@ -28,7 +28,7 @@
28 28 app:layout_constraintStart_toStartOf="parent"
29 29 app:layout_constraintTop_toTopOf="parent" />
30 30  
31   - <ImageView
  31 + MarginTopTitulos <ImageView
32 32 android:id="@+id/imageView"
33 33 android:layout_width="wrap_content"
34 34 android:layout_height="wrap_content"
app/src/main/res/layout/fragment_actua_maestros.xml
... ... @@ -60,7 +60,7 @@
60 60 android:textSize="@dimen/NormalText" />
61 61  
62 62 <RadioButton
63   - android:id="@+id/obViaArchivo"
  63 + android:id="@+id/obImpInventarios"
64 64 android:layout_width="wrap_content"
65 65 android:layout_height="wrap_content"
66 66 android:layout_margin="5dp"
app/src/main/res/layout/fragment_inv_importados.xml
... ... @@ -0,0 +1,88 @@
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3 + xmlns:app="http://schemas.android.com/apk/res-auto"
  4 + xmlns:tools="http://schemas.android.com/tools"
  5 + android:layout_width="match_parent"
  6 + android:layout_height="match_parent"
  7 + tools:context=".UI.actualizacionMaestros.ActuaMaestrosFragment">
  8 +
  9 +
  10 + <androidx.appcompat.widget.AppCompatTextView
  11 + android:id="@+id/tvActMaestros"
  12 + android:layout_width="match_parent"
  13 + android:layout_height="wrap_content"
  14 + android:layout_marginTop="@dimen/MarginTopTitulos"
  15 + android:gravity="center"
  16 + android:text="@string/tvActMaestros"
  17 + android:textColor="@color/colorAccent"
  18 + android:textSize="@dimen/Titulos"
  19 + app:fontFamily="sans-serif-condensed"
  20 + app:layout_constraintBottom_toTopOf="@+id/tvSeleccionInventario"
  21 + app:layout_constraintEnd_toEndOf="parent"
  22 + app:layout_constraintStart_toStartOf="parent"
  23 + app:layout_constraintTop_toTopOf="parent" />
  24 +
  25 + <TextView
  26 + android:id="@+id/tvSeleccionInventario"
  27 + android:layout_width="0dp"
  28 + android:layout_height="wrap_content"
  29 + android:layout_margin="30dp"
  30 + android:layout_marginTop="28dp"
  31 + android:gravity="center"
  32 + android:text="@string/tvSeleccionInventario"
  33 + android:textColor="@android:color/black"
  34 + android:textSize="@dimen/MarginTopTitulos"
  35 + app:fontFamily="sans-serif-condensed"
  36 + app:layout_constraintEnd_toEndOf="parent"
  37 + app:layout_constraintStart_toStartOf="parent"
  38 + app:layout_constraintTop_toBottomOf="@+id/tvActMaestros" />
  39 +
  40 + <androidx.recyclerview.widget.RecyclerView
  41 + android:id="@+id/rcDescripcion"
  42 + android:layout_width="match_parent"
  43 + android:layout_height="0dp"
  44 + android:background="@android:color/darker_gray"
  45 + android:scrollbars="vertical"
  46 + app:layout_constraintBottom_toTopOf="@+id/guideline"
  47 + app:layout_constraintEnd_toEndOf="parent"
  48 + app:layout_constraintStart_toStartOf="parent"
  49 + app:layout_constraintTop_toBottomOf="@id/tvSeleccionInventario"
  50 + tools:listitem="@layout/item_inv_importados" />
  51 +
  52 + <Button
  53 + android:id="@+id/btnConfirmarAct"
  54 + android:layout_width="0dp"
  55 + android:layout_height="wrap_content"
  56 + android:layout_margin="20dp"
  57 + android:text="@string/btnConfirmarAct"
  58 + android:textSize="@dimen/MarginTopTitulos"
  59 + android:textColor="@android:color/white"
  60 + android:padding="10dp"
  61 + android:background="@drawable/boton_borde_redondeado"
  62 + app:layout_constraintBottom_toBottomOf="parent"
  63 + app:layout_constraintEnd_toEndOf="parent"
  64 + app:layout_constraintStart_toStartOf="parent" />
  65 +
  66 +
  67 + <ProgressBar
  68 + android:id="@+id/loading_view"
  69 + android:layout_width="wrap_content"
  70 + android:layout_height="wrap_content"
  71 + android:layout_marginStart="8dp"
  72 + android:layout_marginLeft="8dp"
  73 + android:layout_marginTop="8dp"
  74 + android:layout_marginEnd="8dp"
  75 + android:layout_marginRight="8dp"
  76 + android:layout_marginBottom="8dp"
  77 + android:visibility="gone"
  78 + app:layout_constraintBottom_toBottomOf="parent"
  79 + app:layout_constraintEnd_toEndOf="parent"
  80 + app:layout_constraintStart_toStartOf="parent"
  81 + app:layout_constraintTop_toTopOf="parent" />
  82 + <androidx.constraintlayout.widget.Guideline
  83 + android:id="@+id/guideline"
  84 + android:layout_width="wrap_content"
  85 + android:layout_height="wrap_content"
  86 + android:orientation="horizontal"
  87 + app:layout_constraintGuide_percent="0.88" />
  88 +</androidx.constraintlayout.widget.ConstraintLayout>
app/src/main/res/layout/fragment_main.xml
... ... @@ -96,11 +96,11 @@
96 96 app:layout_constraintStart_toStartOf="parent"
97 97 app:layout_constraintTop_toBottomOf="@id/ivSort19"
98 98 tools:listitem="@layout/item_principal"
99   - app:layout_constraintBottom_toTopOf="@+id/guideline6"/>
  99 + app:layout_constraintBottom_toTopOf="@+id/guideline1"/>
100 100  
101 101  
102 102 <androidx.appcompat.widget.AppCompatTextView
103   - android:id="@+id/txtDeposito"
  103 + android:id="@+id/tvInvImportados"
104 104 android:layout_width="match_parent"
105 105 android:layout_height="90dp"
106 106 android:autoSizeMaxTextSize="150sp"
... ... @@ -119,4 +119,86 @@
119 119 app:layout_constraintStart_toStartOf="parent"
120 120 app:layout_constraintTop_toBottomOf="@id/tvInvDinamicos"
121 121 app:layout_constraintVertical_bias="0.0" />
  122 +
  123 + <androidx.appcompat.widget.AppCompatImageButton
  124 + android:id="@+id/ivSort19II"
  125 + android:layout_width="50dp"
  126 + android:layout_height="50dp"
  127 + android:layout_marginStart="10dp"
  128 + android:padding="5dp"
  129 + android:src="@drawable/ic_sort19"
  130 + android:visibility="gone"
  131 + app:layout_constraintHorizontal_bias="0.0"
  132 + app:layout_constraintHorizontal_chainStyle="packed"
  133 + app:layout_constraintStart_toStartOf="parent"
  134 + app:layout_constraintTop_toBottomOf="@id/tvInvImportados" />
  135 +
  136 + <androidx.appcompat.widget.AppCompatImageButton
  137 + android:id="@+id/ivSort91II"
  138 + android:layout_width="50dp"
  139 + android:layout_height="50dp"
  140 + android:layout_marginStart="10dp"
  141 + android:padding="5dp"
  142 + android:src="@drawable/ic_sort91"
  143 + android:visibility="gone"
  144 + app:layout_constraintHorizontal_chainStyle="packed"
  145 + app:layout_constraintStart_toStartOf="parent"
  146 + app:layout_constraintTop_toBottomOf="@id/tvInvImportados" />
  147 +
  148 + <TextView
  149 + android:id="@+id/tvTipoII"
  150 + android:layout_width="wrap_content"
  151 + android:layout_height="wrap_content"
  152 + android:layout_margin="5dp"
  153 + android:text="Tipo:"
  154 + android:layout_marginTop="12dp"
  155 + android:textSize="15sp"
  156 + android:visibility="gone"
  157 + app:layout_constraintBaseline_toBaselineOf="@+id/cbVentasII"
  158 + app:layout_constraintEnd_toStartOf="@+id/cbVentasII" />
  159 +
  160 + <com.google.android.material.checkbox.MaterialCheckBox
  161 + android:id="@+id/cbVentasII"
  162 + android:layout_width="wrap_content"
  163 + android:layout_height="wrap_content"
  164 + android:layout_margin="5dp"
  165 + android:checked="true"
  166 + android:text="Ventas"
  167 + android:layout_marginTop="12dp"
  168 + android:visibility="gone"
  169 + app:layout_constraintEnd_toStartOf="@+id/cbDepositoII"
  170 + app:layout_constraintTop_toBottomOf="@+id/tvInvImportados" />
  171 +
  172 + <com.google.android.material.checkbox.MaterialCheckBox
  173 + android:id="@+id/cbDepositoII"
  174 + android:layout_width="wrap_content"
  175 + android:layout_height="wrap_content"
  176 + android:layout_margin="5dp"
  177 + android:checked="true"
  178 + android:text="Deposito"
  179 + android:layout_marginTop="12dp"
  180 + android:visibility="gone"
  181 + app:layout_constraintEnd_toEndOf="parent"
  182 + app:layout_constraintTop_toBottomOf="@+id/tvInvImportados" />
  183 +
  184 +
  185 + <androidx.recyclerview.widget.RecyclerView
  186 + android:id="@+id/rcInventarioII"
  187 + android:layout_width="match_parent"
  188 + android:layout_height="0dp"
  189 + android:background="@android:color/darker_gray"
  190 + android:scrollbars="vertical"
  191 + android:visibility="gone"
  192 + app:layout_constraintEnd_toEndOf="parent"
  193 + app:layout_constraintStart_toStartOf="parent"
  194 + app:layout_constraintTop_toBottomOf="@id/ivSort19II"
  195 + tools:listitem="@layout/item_principal"
  196 + app:layout_constraintBottom_toTopOf="@+id/guideline1"/>
  197 +
  198 + <androidx.constraintlayout.widget.Guideline
  199 + android:id="@+id/guideline1"
  200 + android:layout_width="wrap_content"
  201 + android:layout_height="wrap_content"
  202 + android:orientation="horizontal"
  203 + app:layout_constraintGuide_percent="0.97" />
122 204 </androidx.constraintlayout.widget.ConstraintLayout>
123 205 \ No newline at end of file
app/src/main/res/layout/item_inv_importados.xml
... ... @@ -0,0 +1,6 @@
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<androidx.constraintlayout.widget.ConstraintLayout
  3 + xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
  4 + android:layout_height="match_parent">
  5 +
  6 +</androidx.constraintlayout.widget.ConstraintLayout>
0 7 \ No newline at end of file
app/src/main/res/navigation/mobile_navigation.xml
... ... @@ -43,7 +43,11 @@
43 43 android:id="@+id/actuaMaestrosFragment"
44 44 android:name="com.focasoftware.deboinventariov20.UI.actualizacionMaestros.ActuaMaestrosFragment"
45 45 android:label="Importaciones Varias"
46   - tools:layout="@layout/fragment_actua_maestros" />
  46 + tools:layout="@layout/fragment_actua_maestros" >
  47 + <action
  48 + android:id="@+id/action_actuaMaestrosFragment_to_invImportadosFragment"
  49 + app:destination="@id/invImportadosFragment" />
  50 + </fragment>
47 51  
48 52  
49 53 <fragment
... ... @@ -134,4 +138,13 @@
134 138 android:id="@+id/action_codigoOriFragment_to_inventarioFragment"
135 139 app:destination="@id/inventarioFragment" />
136 140 </fragment>
  141 + <fragment
  142 + android:id="@+id/invImportadosFragment"
  143 + android:name="com.focasoftware.deboinventariov20.UI.actualizacionMaestros.InvImportadosFragment"
  144 + android:label="Inventarios Importados"
  145 + tools:layout="@layout/fragment_inv_importados">
  146 + <action
  147 + android:id="@+id/action_invImportadosFragment_to_mainFragment2"
  148 + app:destination="@id/mainFragment2" />
  149 + </fragment>
137 150 </navigation>
app/src/main/res/values/strings.xml
... ... @@ -20,29 +20,27 @@
20 20 <string name="bien">Bienvenido</string>
21 21 <string name="debo">DEBO®</string>
22 22 <string name="inventario">Inventario</string>
23   - <string name="todo">TODO</string>
24   - <string name="hello_blank_fragment">Hello blank fragment</string>
25 23  
26 24 <!-- inventarios dinamicos-->
27   - <string name="invDinamicoVenta">Inventarios Dinamicos</string>
  25 + <string name="invDinamicoVenta">Inventarios Dinámicos</string>
28 26 <string name="invDinamicoCompra">Inventarios Importados(0) +</string>
29 27  
30 28 <!-- ventana emergente-->
31 29 <string name="adv">Ingrese la cantidad contada</string>
32   - <string name="invVentas">Inventarios Dinamicos de Ventas</string>
  30 + <string name="invVentas">Inventarios Dinámicos de Ventas</string>
33 31 <string name="btnCancela">Cancelar</string>
34 32  
35 33  
36 34 <!-- Fragment Inventario-->
37 35 <string name="invTitulo">Inventarios Dinámicos</string>
38 36 <string name="invTituloV">Inventarios de Ventas</string>
39   - <string name="invTituloD">Inventarios de Depositos</string>
  37 + <string name="invTituloD">Inventarios de Depósitos</string>
40 38 <string name="invCodigoBarras">Código Barras:</string>
41 39 <string name="btnExportarInv">Exportar Inventario</string>
42 40 <string name="btnBorrarInv">Borrar Inventario</string>
43   - <string name="ibBusDesc">Busqueda por Descripción</string>
44   - <string name="ibBusCB">Busqueda por Código Barras</string>
45   - <string name="ibBusCO">Busqueda por Código de Origen</string>
  41 + <string name="ibBusDesc">Búsqueda por Descripción</string>
  42 + <string name="ibBusCB">Búsqueda por Código Barras</string>
  43 + <string name="ibBusCO">Búsqueda por Código de Origen</string>
46 44 <string name="switch_1">+ 1</string>
47 45  
48 46 <!-- Fragmento Configuraciones-->
... ... @@ -69,31 +67,28 @@
69 67 <string name="rbCodigoOrigen">Código Origen</string>
70 68 <string name="rbCodigoBarras">Código de Barras</string>
71 69  
72   -
73   - <!-- Spinner servidor-->
74   - <string-array name="spinnerServidor">
75   - <item>Servidor Laboratorio 1</item>
76   - <item>Servidor Laboratorio 2</item>
77   - <item>Servidor Laboratorio 3</item>
78   - </string-array>
79 70 <string name="leyendaSpinner">Seleccione Servidor Predeterminado</string>
80 71  
81 72 <string name="cbMostrarExistencia">Existencia</string>
82 73 <string name="cbMostrarPrecio">Precio</string>
83 74  
84 75 <string name="btnGuardar">Guardar Cambios</string>
85   -
  76 + <string name="todo"> </string>
  77 + todo
86 78 <!-- fragment Actualizacion de Maestros-->
87 79 <string name="tvActMaestros">Importaciones</string>
88 80 <string name="tvMedio">Seleccione que tipo de importación desea realizar</string>
  81 + <string name="tvSeleccionInventario"> Seleccione el inventario a importar</string>
  82 +
89 83 <string name="obPorWifi">Importación de artículos</string>
90 84 <string name="obViaArchivo">Importación de inventarios</string>
91 85  
92 86 <string name="btnConfirmarAct">Confirmar Importación</string>
  87 + <string name="btnConfirmarInv">Confirmar Inventarios</string>
93 88  
94 89 <!-- Fragment Save-->
95 90 <string name="tvConfServi">Configuración de Servidores</string>
96   - <string name="server">Ingrese la direccion del servidor</string>
  91 + <string name="server">Ingrese la dirección del servidor</string>
97 92 <string name="etNomServer">Ingrese una descripción para la conexión</string>
98 93 <string name="btnGuardarConfServ">Guardar Conexión</string>
99 94