diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ec5722d..3beef69 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -14,7 +14,7 @@ android:theme="@style/AppTheme" android:usesCleartextTraffic="true"> @@ -23,6 +23,12 @@ + + + \ No newline at end of file diff --git a/app/src/main/java/com/focasoftware/deboinventariov20/DB/DAO/ArticulosDAO.kt b/app/src/main/java/com/focasoftware/deboinventariov20/DB/DAO/ArticulosDAO.kt index 0b9ebcc..0750bff 100644 --- a/app/src/main/java/com/focasoftware/deboinventariov20/DB/DAO/ArticulosDAO.kt +++ b/app/src/main/java/com/focasoftware/deboinventariov20/DB/DAO/ArticulosDAO.kt @@ -67,9 +67,12 @@ interface ServeInvDao { @Insert(onConflict = OnConflictStrategy.REPLACE) fun insertServer(servidor: ServeInv) - @Query("SELECT SER_NUM,SER_DESC, SER_DIR FROM $TABLA_SERV_INV") + @Query("SELECT * FROM ServeInv") suspend fun fetchAllServers(): List @Query("DELETE FROM ServeInv WHERE SER_NUM = :number") suspend fun deleteServer(number: Long) + + @Query("SELECT SER_NUM FROM ServeInv ORDER BY SER_NUM DESC") + suspend fun findLastSer(): Long } \ No newline at end of file diff --git a/app/src/main/java/com/focasoftware/deboinventariov20/MainActivity.kt b/app/src/main/java/com/focasoftware/deboinventariov20/MainActivity.kt deleted file mode 100644 index 4e66919..0000000 --- a/app/src/main/java/com/focasoftware/deboinventariov20/MainActivity.kt +++ /dev/null @@ -1,48 +0,0 @@ -package com.focasoftware.deboinventariov20 - -import android.os.Bundle -import android.view.Menu -import com.google.android.material.floatingactionbutton.FloatingActionButton -import com.google.android.material.snackbar.Snackbar -import com.google.android.material.navigation.NavigationView -import androidx.navigation.findNavController -import androidx.navigation.ui.AppBarConfiguration -import androidx.navigation.ui.navigateUp -import androidx.navigation.ui.setupActionBarWithNavController -import androidx.navigation.ui.setupWithNavController -import androidx.drawerlayout.widget.DrawerLayout -import androidx.appcompat.app.AppCompatActivity -import androidx.appcompat.widget.Toolbar - -class MainActivity : AppCompatActivity() { - - private lateinit var appBarConfiguration: AppBarConfiguration - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - setContentView(R.layout.activity_main) - val toolbar: Toolbar = findViewById(R.id.toolbar) - setSupportActionBar(toolbar) - - - val drawerLayout: DrawerLayout = findViewById(R.id.drawer_layout) - val navView: NavigationView = findViewById(R.id.nav_view) - val navController = findNavController(R.id.nav_host_fragment) - - appBarConfiguration = AppBarConfiguration(setOf( - R.id.mainFragment2,R.id.inventarioFragment, R.id.actuaMaestrosFragment, R.id.configuracionFragment), drawerLayout) - setupActionBarWithNavController(navController, appBarConfiguration) - navView.setupWithNavController(navController) - } - - override fun onCreateOptionsMenu(menu: Menu): Boolean { - // Inflate the menu; this adds items to the action bar if it is present. - menuInflater.inflate(R.menu.main, menu) - return true - } - - override fun onSupportNavigateUp(): Boolean { - val navController = findNavController(R.id.nav_host_fragment) - return navController.navigateUp(appBarConfiguration) || super.onSupportNavigateUp() - } -} \ No newline at end of file diff --git a/app/src/main/java/com/focasoftware/deboinventariov20/Model/ProductosService.kt b/app/src/main/java/com/focasoftware/deboinventariov20/Model/ProductosService.kt index 3957eab..21ff6d7 100644 --- a/app/src/main/java/com/focasoftware/deboinventariov20/Model/ProductosService.kt +++ b/app/src/main/java/com/focasoftware/deboinventariov20/Model/ProductosService.kt @@ -4,8 +4,8 @@ import retrofit2.Retrofit import retrofit2.converter.gson.GsonConverterFactory object ProductosService { - private val BASE_URL ="http://10.0.2.2:3000/" - //"http://10.231.45.83:3000/" + private val BASE_URL ="http://192.168.0.8:3000/" + //"http://10.0.2.2:3000/" fun getProductosService(): ProductosApi { diff --git a/app/src/main/java/com/focasoftware/deboinventariov20/Model/Tablas.kt b/app/src/main/java/com/focasoftware/deboinventariov20/Model/Tablas.kt index 1a5aef8..58e6dbc 100644 --- a/app/src/main/java/com/focasoftware/deboinventariov20/Model/Tablas.kt +++ b/app/src/main/java/com/focasoftware/deboinventariov20/Model/Tablas.kt @@ -10,8 +10,7 @@ import com.focasoftware.deboinventario.ui.actualizacionMaestros.Constans.Compani import com.google.gson.annotations.SerializedName import java.io.Serializable -data class Productos( - @SerializedName("SEC")var sector: String?, +data class Productos(@SerializedName("SEC") var sector: String?, @SerializedName("COD") var codigo: String?, @SerializedName("DESC") var descripcion: String?, @SerializedName("CB") var codBar: String?, @@ -23,8 +22,7 @@ data class Productos( @SerializedName("FOTO") var imagen: String?) @Entity(tableName = TABLA_ART) -data class Articles( - @ColumnInfo(name = "SEC") var sector: String?, +data class Articles(@ColumnInfo(name = "SEC") var sector: String?, @ColumnInfo(name = "COD") var codigo: String?, @ColumnInfo(name = "DES") var descripcion: String?, @ColumnInfo(name = "CB") var codBar: String?, @@ -35,7 +33,8 @@ data class Articles( @ColumnInfo(name = "DEPSN") var depSn: Int?, @ColumnInfo(name = "FOTO") var imagen: String?) : Serializable { @PrimaryKey(autoGenerate = true) - @ColumnInfo(name = "id") var id: Long = 0 + @ColumnInfo(name = "id") + var id: Long = 0 } @@ -56,8 +55,7 @@ data class InvHead(@PrimaryKey(autoGenerate = true) @ColumnInfo(name = "INV_NUM" @Entity(tableName = TABLA_INV_B) -data class InvBody( - @ColumnInfo(name = "INV_NUM") var invNum: Int, +data class InvBody(@ColumnInfo(name = "INV_NUM") var invNum: Int, @ColumnInfo(name = "SEC") var sector: String?, @ColumnInfo(name = "COD") var codigo: String?, @ColumnInfo(name = "DES") var descripcion: String?, @@ -69,15 +67,18 @@ data class InvBody( @ColumnInfo(name = "BAL") var balanza: Int?, @ColumnInfo(name = "DSN") var depSn: Int?, @ColumnInfo(name = "INV_FEI") var fechaInicio: String?, - @ColumnInfo(name = "INV_FEF") var fechaFinal: String?):Serializable{ - @PrimaryKey(autoGenerate = true) @ColumnInfo(name = "id") var id: Long = 0 + @ColumnInfo(name = "INV_FEF") var fechaFinal: String?) : Serializable { + @PrimaryKey(autoGenerate = true) + @ColumnInfo(name = "id") + var id: Long = 0 } @Entity(tableName = TABLA_SERV_INV) data class ServeInv( - @ColumnInfo(name = "SER_DESC") var descripcion: String?, @ColumnInfo(name = "SER_DIR") var direccion: String?, @ColumnInfo(name = "SER_PRE") var predeterminado: String?) : Serializable { - @PrimaryKey(autoGenerate = true) - @ColumnInfo(name = "SER_NUM") - var ID: Int = 0 -} + @PrimaryKey(autoGenerate = true) @ColumnInfo(name = "SER_NUM") var SER_NUM: Long, + @ColumnInfo(name = "SER_DESC") var descripcion: String?, + @ColumnInfo(name = "SER_DIR") var direccion: String?, + @ColumnInfo(name = "SER_PRE") var predeterminado: String?) + + diff --git a/app/src/main/java/com/focasoftware/deboinventariov20/ui/MainActivity.kt b/app/src/main/java/com/focasoftware/deboinventariov20/ui/MainActivity.kt new file mode 100644 index 0000000..28cbd4d --- /dev/null +++ b/app/src/main/java/com/focasoftware/deboinventariov20/ui/MainActivity.kt @@ -0,0 +1,46 @@ +package com.focasoftware.deboinventariov20.ui + +import android.os.Bundle +import android.view.Menu +import com.google.android.material.navigation.NavigationView +import androidx.navigation.findNavController +import androidx.navigation.ui.AppBarConfiguration +import androidx.navigation.ui.navigateUp +import androidx.navigation.ui.setupActionBarWithNavController +import androidx.navigation.ui.setupWithNavController +import androidx.drawerlayout.widget.DrawerLayout +import androidx.appcompat.app.AppCompatActivity +import androidx.appcompat.widget.Toolbar +import com.focasoftware.deboinventariov20.R + +class MainActivity : AppCompatActivity() { + + private lateinit var appBarConfiguration: AppBarConfiguration + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_main) + val toolbar: Toolbar = findViewById(R.id.toolbar) + setSupportActionBar(toolbar) + + + val drawerLayout: DrawerLayout = findViewById(R.id.drawer_layout) + val navView: NavigationView = findViewById(R.id.nav_view) + val navController = findNavController(R.id.nav_host_fragment) + + appBarConfiguration = AppBarConfiguration(setOf(R.id.mainFragment2, R.id.inventarioFragment, R.id.actuaMaestrosFragment, R.id.configuracionFragment), drawerLayout) + setupActionBarWithNavController(navController, appBarConfiguration) + navView.setupWithNavController(navController) + } + + override fun onCreateOptionsMenu(menu: Menu): Boolean { + // Inflate the menu; this adds items to the action bar if it is present. + menuInflater.inflate(R.menu.main, menu) + return true + } + + override fun onSupportNavigateUp(): Boolean { + val navController = findNavController(R.id.nav_host_fragment) + return navController.navigateUp(appBarConfiguration) || super.onSupportNavigateUp() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/focasoftware/deboinventariov20/ui/SplashActivity.kt b/app/src/main/java/com/focasoftware/deboinventariov20/ui/SplashActivity.kt new file mode 100644 index 0000000..146ffe6 --- /dev/null +++ b/app/src/main/java/com/focasoftware/deboinventariov20/ui/SplashActivity.kt @@ -0,0 +1,29 @@ +package com.focasoftware.deboinventariov20.ui + +import android.app.Activity +import android.content.Intent +import android.os.Bundle +import com.focasoftware.deboinventariov20.R + +class SplashActivity : Activity() { + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_splash) + //window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_LAYOUT_STABLE or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or View.SYSTEM_UI_FLAG_FULLSCREEN or View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY + + val bac = object : Thread(){ + override fun run(){ + try { + Thread.sleep(500) + val intent = Intent(baseContext, MainActivity:: class.java) + startActivity(intent) + finish() + } catch (e : Exception){ + e.printStackTrace() + } + } + } + bac.start() + } +} diff --git a/app/src/main/java/com/focasoftware/deboinventariov20/ui/descripcionFragment/DescripcionFragment.kt b/app/src/main/java/com/focasoftware/deboinventariov20/ui/descripcionFragment/DescripcionFragment.kt index 48f450f..e58e4b1 100644 --- a/app/src/main/java/com/focasoftware/deboinventariov20/ui/descripcionFragment/DescripcionFragment.kt +++ b/app/src/main/java/com/focasoftware/deboinventariov20/ui/descripcionFragment/DescripcionFragment.kt @@ -84,7 +84,7 @@ class DescripcionFragment : Fragment() { } override fun onSwiped(viewHolder: RecyclerView.ViewHolder, position: Int) { - val type = InputType.TYPE_CLASS_PHONE + val type = InputType.TYPE_CLASS_NUMBER MaterialDialog(requireContext()).show { title(text = "Producto: ${(viewAdapter2 as DescripcionListAdapter).items2?.get(indice)!!.descripcion}") message(R.string.sMensajeEncontrado) diff --git a/app/src/main/java/com/focasoftware/deboinventariov20/ui/inventario/InventarioFragment.kt b/app/src/main/java/com/focasoftware/deboinventariov20/ui/inventario/InventarioFragment.kt index df8b7bd..491b60e 100644 --- a/app/src/main/java/com/focasoftware/deboinventariov20/ui/inventario/InventarioFragment.kt +++ b/app/src/main/java/com/focasoftware/deboinventariov20/ui/inventario/InventarioFragment.kt @@ -50,6 +50,7 @@ class InventarioFragment : Fragment() { private lateinit var navController: NavController private var InventarioNuevo: Int = 0 private var iEstado = 0 + private var iBusquedaPor=0 private var fCant = 0F private var bFirst = false private lateinit var deleteIcon: Drawable @@ -100,7 +101,7 @@ class InventarioFragment : Fragment() { var indiceDelArtEncontrado = 0 //TODO COMIENZA LA BUSQUEDA POR CODIGO DE BARRAS - when (iEstado) { + when (iBusquedaPor) { 0 -> { indiceDelArtEncontrado = buscoArtEnRv(sChangeUpper.toUpperCase(Locale.ROOT), 0)//TODO Si encuentra el articulo en el RV devuelve el indice //TODO Si no lo encuentra devuelve -1 @@ -132,7 +133,7 @@ class InventarioFragment : Fragment() { // } fCant = listArticulos[indiceDelArtEncontrado].cantTomada - val type = InputType.TYPE_CLASS_PHONE + val type = InputType.TYPE_CLASS_NUMBER MaterialDialog(requireContext()).show { title(text = "Producto '$sChangeUpper', se encuentra cargado.") @@ -228,7 +229,7 @@ class InventarioFragment : Fragment() { viewAdapter.notifyDataSetChanged() } else { fCant = listArticulos[indiceDelArtEncontrado].cantTomada - val type = InputType.TYPE_CLASS_PHONE + val type = InputType.TYPE_CLASS_NUMBER MaterialDialog(requireContext()).show { title(text = "Producto '$sChangeUpper', se encuentra cargado.") @@ -320,19 +321,22 @@ class InventarioFragment : Fragment() { ivCamara.setImageResource(R.drawable.codbar) etCodigoBarras.hint = "Busqueda por C. Barras" swSumaUno.visibility = View.VISIBLE - iEstado = 0 + iBusquedaPor=0 + iEstado = 1 } 1 -> { ivCamara.setImageResource(R.drawable.desc) etCodigoBarras.hint = "Busqueda por Descripción" swSumaUno.visibility = View.GONE - iEstado = 1 + iBusquedaPor=1 + iEstado = 2 } 2 -> { ivCamara.setImageResource(R.drawable.cod_origen) etCodigoBarras.hint = "Busqueda por C. Origen" swSumaUno.visibility = View.GONE - iEstado = 2 + iBusquedaPor=2 + iEstado = 0 } } } @@ -434,47 +438,19 @@ class InventarioFragment : Fragment() { // } // } } else {//TODO si no lo encuentra en la BD -// MaterialDialog(requireContext()).show { -// title(R.string.sTitulo) -// message(R.string.sMensaje) -// positiveButton(R.string.btnOk) { -// dismiss() -// } -// }.cornerRadius(10F) - -// val modalDialog = DialogNoEncontrado() -// modalDialog.isCancelable=false -// modalDialog.show(requireActivity().supportFragmentManager, "confirmDialog") -// -// -// val modalDialog = DialogNoEncontrado().newInstance( -// "El producto $etCodigoBarras.text.toString()", -// "No se encotro en la Base de Datos." -// ) -// modalDialog?.show(requireActivity().supportFragmentManager, "DialogFragment") - -// val mDialogView = LayoutInflater.from(context).inflate(R.layout.login_dialog, null) -// val mBuilder = AlertDialog.Builder(requireContext()).setView(mDialogView).setTitle("Login Form").setCancelable(false) -// val mAlertDialog = mBuilder.show() -// mDialogView.dialogLoginBtn.setOnClickListener { -// mAlertDialog.dismiss() -// //get text from EditTexts of custom layout -// val name = mDialogView.tvgenerico4.text.toString() -// -//// fCant = 0F -//// fCant = name.toFloat() -// } -// mDialogView.dialogCancelBtn.setOnClickListener { -// mAlertDialog.dismiss() -// } + MaterialDialog(requireContext()).show { + title(text = "El articulo ${etCodigoBarras.text}") + message(R.string.sMensaje) + positiveButton(R.string.btnOk) { + dismiss() + } + }.cornerRadius(10F) } - } private fun ContinuarCargaCB(artAcargar: Articles?) { if (artAcargar != null) {//Si lo encuentra en la BD - if (swSumaUno!!.isChecked) {// SI ESTA +1, PONE CANTIDAD 1 fCant = 0F fCant += 1F diff --git a/app/src/main/java/com/focasoftware/deboinventariov20/ui/main/Base/BaseViewHolder.kt b/app/src/main/java/com/focasoftware/deboinventariov20/ui/main/Base/BaseViewHolder.kt new file mode 100644 index 0000000..1635663 --- /dev/null +++ b/app/src/main/java/com/focasoftware/deboinventariov20/ui/main/Base/BaseViewHolder.kt @@ -0,0 +1,8 @@ +package com.focasoftware.deboinventariov20.ui.main.Base + +import android.view.View +import androidx.recyclerview.widget.RecyclerView + +abstract class BaseViewHolder(itemView:View):RecyclerView.ViewHolder(itemView) { + abstract fun bind(item:T, position:Int) +} \ No newline at end of file diff --git a/app/src/main/java/com/focasoftware/deboinventariov20/ui/main/InventarioListAdapter.kt b/app/src/main/java/com/focasoftware/deboinventariov20/ui/main/InventarioListAdapter.kt index b4ba238..3088f48 100644 --- a/app/src/main/java/com/focasoftware/deboinventariov20/ui/main/InventarioListAdapter.kt +++ b/app/src/main/java/com/focasoftware/deboinventariov20/ui/main/InventarioListAdapter.kt @@ -1,49 +1,44 @@ package com.focasoftware.deboinventariov20.ui.main +import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.AdapterView import androidx.recyclerview.widget.RecyclerView import com.focasoftware.deboinventariov20.R -import com.google.android.material.snackbar.Snackbar -import kotlinx.android.synthetic.main.item.view.* +import com.focasoftware.deboinventariov20.ui.main.Base.BaseViewHolder import kotlinx.android.synthetic.main.item_principal.view.* -import javax.sql.ConnectionEventListener +class InventarioListAdapter(private val context: Context, private val inv: ArrayList, private val itemClickListener: OnInventarioClickListener) : + RecyclerView.Adapter>() { -class InventarioListAdapter(private val productos: ArrayList, private val listener: OnItemClickListener) : RecyclerView.Adapter() { + interface OnInventarioClickListener { + fun onItemClick(inventario: String?) + } - internal var items2: ArrayList? = null + override fun onCreateViewHolder(parent: ViewGroup, p1: Int) = ItemsViewHolder(LayoutInflater.from(context).inflate(R.layout.item_principal, parent, false)) - init { - this.items2 = productos - } + override fun getItemCount() = inv.size - override fun onCreateViewHolder(parent: ViewGroup, p1: Int) = ItemsViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.item_principal, parent, false)) - override fun getItemCount() = productos.size + inner class ItemsViewHolder(itemview: View) : BaseViewHolder(itemview) { + override fun bind(item: ItemInventario, position: Int) { + itemView.setOnClickListener {itemClickListener.onItemClick(item.inventario)} + itemView.tvPrincipalinventario.text = item.inventario + } - override fun onBindViewHolder(holder: ItemsViewHolder, position: Int) { - val currentItem=productos[position] - holder.inventario.text=currentItem.inventario } - inner class ItemsViewHolder constructor(view: View) : RecyclerView.ViewHolder(view),View.OnClickListener { - - val inventario = view.inventario - init { - itemView.setOnClickListener(this) - } - override fun onClick(p0: View?) { - val position=adapterPosition - if (position!=RecyclerView.NO_POSITION) { - listener.OnItemClick(position) - } + override fun onBindViewHolder(holder: BaseViewHolder<*>, position: Int) { + when (holder) { + is ItemsViewHolder -> holder.bind(inv[position], position) + else -> IllegalArgumentException("No se pudo pasar el ViewHolder") } } - interface OnItemClickListener{ - fun OnItemClick(position: Int) - } + } + + diff --git a/app/src/main/java/com/focasoftware/deboinventariov20/ui/main/MainFragment.kt b/app/src/main/java/com/focasoftware/deboinventariov20/ui/main/MainFragment.kt index 0ccc21b..58d9fea 100644 --- a/app/src/main/java/com/focasoftware/deboinventariov20/ui/main/MainFragment.kt +++ b/app/src/main/java/com/focasoftware/deboinventariov20/ui/main/MainFragment.kt @@ -20,7 +20,7 @@ import kotlinx.coroutines.async import kotlinx.coroutines.launch import java.util.* -class MainFragment : Fragment(), InventarioListAdapter.OnItemClickListener { +class MainFragment : Fragment(), InventarioListAdapter.OnInventarioClickListener { private lateinit var inventarios: List private lateinit var rcInventario: RecyclerView private lateinit var viewAdapter: RecyclerView.Adapter<*> @@ -75,7 +75,7 @@ class MainFragment : Fragment(), InventarioListAdapter.OnItemClickListener { //(articulos.sector, articulos.codigo, articulos.descripcion, cant, articulos.codBar) listIvn.add(item) - viewAdapter = InventarioListAdapter(listIvn, this) + viewAdapter = InventarioListAdapter(requireContext(),listIvn,this) viewManager = LinearLayoutManager(requireContext()) rcInventario.apply { @@ -90,15 +90,17 @@ class MainFragment : Fragment(), InventarioListAdapter.OnItemClickListener { listIvn.clear() } - override fun OnItemClick(position: Int) { - val editor = sharedPreferences.edit() - var invSel:String = listIvn[position].inventario.toString() - invSel=invSel.substring(3, 5) - editor?.putString("Inventario", invSel) - editor?.apply() - editor.commit() - navController.navigate(R.id.action_mainFragment2_to_inventarioFragment) + override fun onItemClick(inventario: String?) { + val editor = sharedPreferences.edit() + var invSel:String =inventario.toString() + invSel=invSel.substring(3, 5) + editor?.putString("Inventario", invSel) + editor?.apply() + editor.commit() + navController.navigate(R.id.action_mainFragment2_to_inventarioFragment) } + + } diff --git a/app/src/main/java/com/focasoftware/deboinventariov20/ui/servidores/ItemsServidores.kt b/app/src/main/java/com/focasoftware/deboinventariov20/ui/servidores/ItemsServidores.kt index a0f8af9..c05e18d 100644 --- a/app/src/main/java/com/focasoftware/deboinventariov20/ui/servidores/ItemsServidores.kt +++ b/app/src/main/java/com/focasoftware/deboinventariov20/ui/servidores/ItemsServidores.kt @@ -1,3 +1,3 @@ package com.focasoftware.deboinventariov20.ui.servidores -data class ItemsServidores (val descripcion: String?, var direccion: String?, var predeterminado: String?) \ No newline at end of file +data class ItemsServidores(val ID: Long?, val descripcion: String?, var direccion: String?, var predeterminado: String?) \ No newline at end of file diff --git a/app/src/main/java/com/focasoftware/deboinventariov20/ui/servidores/ServidoresFragment.kt b/app/src/main/java/com/focasoftware/deboinventariov20/ui/servidores/ServidoresFragment.kt index b8de4af..27e8133 100644 --- a/app/src/main/java/com/focasoftware/deboinventariov20/ui/servidores/ServidoresFragment.kt +++ b/app/src/main/java/com/focasoftware/deboinventariov20/ui/servidores/ServidoresFragment.kt @@ -7,24 +7,21 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.Toast import androidx.core.content.ContextCompat import androidx.fragment.app.Fragment import androidx.lifecycle.lifecycleScope -import androidx.recyclerview.widget.DefaultItemAnimator import androidx.recyclerview.widget.ItemTouchHelper import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.focasoftware.deboinventariov20.DB.DataBase.AppDb import com.focasoftware.deboinventariov20.Model.ServeInv import com.focasoftware.deboinventariov20.R -import com.focasoftware.deboinventariov20.ui.inventario.ProductosListAdapter import kotlinx.android.synthetic.main.fragment_servidores.* import kotlinx.coroutines.* -import java.text.FieldPosition class ServidoresFragment : Fragment() { - private val servidorNuevo = ArrayList() - private var index = 0 + private lateinit var rvServidores: RecyclerView private lateinit var viewAdapter: RecyclerView.Adapter<*> private lateinit var viewManager: RecyclerView.LayoutManager @@ -34,52 +31,60 @@ class ServidoresFragment : Fragment() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - buscaEnBD() + CargarRV() } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - rvServidores.layoutManager = LinearLayoutManager(context) - rvServidores.itemAnimator = DefaultItemAnimator() +// rvServidores.layoutManager = LinearLayoutManager(context) +// rvServidores.itemAnimator = DefaultItemAnimator() btnGuardarServidores.setOnClickListener { - if (etNombreServidor.text.isNullOrBlank()){ - etNombreServidor.error="Nombre no valido" + if (etNombreServidor.text.isNullOrBlank()) { + etNombreServidor.error = "Nombre no valido" etNombreServidor.requestFocus() - etNombreServidor.hint="Nombre no valido" + etNombreServidor.hint = "Nombre no valido" } - if (etDireccionServidor.text.isNullOrBlank()){ - etDireccionServidor.error="Dirección no valida" + if (etDireccionServidor.text.isNullOrBlank()) { + etDireccionServidor.error = "Dirección no valida" etDireccionServidor.requestFocus() - etDireccionServidor.hint="Dirección no valida" + etDireccionServidor.hint = "Dirección no valida" } - if (!etDireccionServidor.text.isNullOrBlank() || !etNombreServidor.text.isNullOrBlank()){ - btnGuardarServidores.isEnabled=true - buscaEnBD() - rvServidores.adapter = AdapterServidores(ingresarDatos(), requireContext()) - btnGuardarServidores.isEnabled=false + if (!etDireccionServidor.text.isNullOrBlank() || !etNombreServidor.text.isNullOrBlank()) { + Toast.makeText(requireContext(), "Servidor ${etNombreServidor.text} Guardado", Toast.LENGTH_LONG).show() + GlobalScope.launch(Dispatchers.Main) { + val num: Long = buscaUltimoNroEnBD() + val servidor = ServeInv(num, etNombreServidor.text.toString(), "http://${etDireccionServidor.text}/", "0") + ingresarDatos(servidor) + cargarRecicler(servidor) + } + etNombreServidor.text.clear() + etDireccionServidor.text.clear() } } } + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { val v = inflater.inflate(R.layout.fragment_servidores, container, false) rvServidores = v.findViewById(R.id.rvServidores) - return v } - fun ingresarDatos(): ArrayList { - val item = ItemsServidores(etNombreServidor.text.toString(), etDireccionServidor.text.toString(), "0") - val servidor = ServeInv(etNombreServidor.text.toString(), etDireccionServidor.text.toString(), "0") - index += index - servidorNuevo.add(item) + suspend fun buscaUltimoNroEnBD(): Long { + + var busqueda: Long + return GlobalScope.async(Dispatchers.IO) { + busqueda = AppDb.getAppDb(requireContext())!!.ServeInvDao()!!.findLastSer() + return@async busqueda + }.await() + } + + fun ingresarDatos(servidor:ServeInv) { val Job = GlobalScope.launch { AppDb.getAppDb(requireActivity())!!.ServeInvDao()!!.insertServer(servidor) } - - return servidorNuevo } suspend fun buscarEnBD(): List { @@ -91,11 +96,11 @@ class ServidoresFragment : Fragment() { }.await() } - fun buscaEnBD() { + fun CargarRV() { GlobalScope.launch(Dispatchers.Main) { servidores = buscarEnBD() for ((i, item) in servidores.withIndex()) { - val ser = ServeInv(servidores[i].descripcion, servidores[i].direccion, servidores[i].predeterminado) + val ser = ServeInv(servidores[i].SER_NUM, servidores[i].descripcion, servidores[i].direccion, servidores[i].predeterminado) cargarRecicler(ser) } } @@ -104,8 +109,8 @@ class ServidoresFragment : Fragment() { fun cargarRecicler(ser: ServeInv) { //TODO CARGO EN LE RV deleteIcon = ContextCompat.getDrawable(requireContext(), R.drawable.borrar)!! - val item = ItemsServidores(ser.descripcion, ser.direccion, ser.predeterminado) - index += index + val item = ItemsServidores(ser.SER_NUM, ser.descripcion, ser.direccion, ser.predeterminado) + listIvn.add(item) viewAdapter = AdapterServidores(listIvn, requireContext()) @@ -121,7 +126,8 @@ class ServidoresFragment : Fragment() { } override fun onSwiped(viewHolder: RecyclerView.ViewHolder, position: Int) { - BorrarInvActual(viewHolder.adapterPosition.toLong()) +// viewManager[ +// BorrarInvActual(viewHolder.adapterPosition.toInt()) (viewAdapter as AdapterServidores).removeItem(viewHolder) viewAdapter.notifyDataSetChanged() @@ -137,7 +143,8 @@ class ServidoresFragment : Fragment() { if (dX < c.width / 2) c.drawColor(Color.GREEN) else c.drawColor(Color.RED) deleteIcon.setBounds(itemView.left + iconMargin, itemView.top + iconMargin, itemView.left + iconMargin + deleteIcon.intrinsicWidth, itemView.bottom - iconMargin) - } else { } + } else { + } super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive) deleteIcon.draw(c) @@ -148,6 +155,7 @@ class ServidoresFragment : Fragment() { val itemTouchHelper = ItemTouchHelper(itemTouchHelperCallback) itemTouchHelper.attachToRecyclerView(rvServidores) } + private fun BorrarInvActual(idServer: Long) { lifecycleScope.launch { withContext(Dispatchers.IO) { diff --git a/app/src/main/res/drawable/suitedebo.png b/app/src/main/res/drawable/suitedebo.png new file mode 100644 index 0000000000000000000000000000000000000000..1a117c8cb0e6002a12dcc8bc35436ec58bf861f6 GIT binary patch literal 6899 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/layout/activity_splash.xml b/app/src/main/res/layout/activity_splash.xml new file mode 100644 index 0000000..1719b22 --- /dev/null +++ b/app/src/main/res/layout/activity_splash.xml @@ -0,0 +1,79 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/app_bar_main.xml b/app/src/main/res/layout/app_bar_main.xml index 37cb8f7..f9b4eb9 100644 --- a/app/src/main/res/layout/app_bar_main.xml +++ b/app/src/main/res/layout/app_bar_main.xml @@ -4,7 +4,7 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" - tools:context=".MainActivity"> + tools:context=".ui.MainActivity"> + app:layout_constraintGuide_percent="0.29" /> - - @@ -32,9 +31,8 @@ android:id="@+id/tvDirServer" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginStart="8dp" - android:layout_marginEnd="8dp" - android:gravity="center" + android:layout_margin="10dp" + android:gravity="start" android:lines="1" android:text="@string/tvDirServer" android:textColor="@android:color/black" @@ -44,121 +42,84 @@ app:layout_constraintBottom_toTopOf="@+id/etDireccionServidor" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toBottomOf="@id/guideline3" - app:layout_constraintVertical_bias="0.451" /> - - + app:layout_constraintTop_toBottomOf="@id/tvTitutloServer" /> + app:layout_constraintTop_toBottomOf="@id/tvDirServer" /> - + app:layout_constraintTop_toBottomOf="@id/etDireccionServidor" /> + + + -