diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml index c414bd1..3cc336b 100644 --- a/.idea/codeStyles/Project.xml +++ b/.idea/codeStyles/Project.xml @@ -1,29 +1,5 @@ - - - - - - - - - - - - @@ -158,14 +133,6 @@ \ No newline at end of file diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml index 79ee123..6e6eec1 100644 --- a/.idea/codeStyles/codeStyleConfig.xml +++ b/.idea/codeStyles/codeStyleConfig.xml @@ -1,5 +1,6 @@ \ 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 c8abda2..40d9d5b 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 @@ -20,22 +20,22 @@ interface ArticulosDAO { @Insert(onConflict = OnConflictStrategy.REPLACE) suspend fun insertArticulos(articulos: Articles?) - @Query("SELECT * FROM $TABLA_ART ORDER BY DES DESC") + @Query("SELECT * FROM $TABLA_ART ORDER BY DETART DESC") suspend fun findAllArticulos(): List - @Query("SELECT * FROM $TABLA_ART WHERE DEPSN=:dep AND DES LIKE '%' || :description || '%' GROUP BY DES ORDER BY DES") - suspend fun findArticuloByDesc(description: String?, dep: Int): List + @Query("SELECT * FROM $TABLA_ART WHERE DEPSN=:dep AND DETART LIKE '%' || :description || '%' GROUP BY DETART ORDER BY DETART") + suspend fun findArticuloByDesc(description: String?, dep: Boolean): List - @Query("SELECT * FROM $TABLA_ART WHERE DEPSN=:dep AND CB LIKE :codBarra") - suspend fun findArticuloByCodBar(codBarra: String?, dep: Int): Articles? + @Query("SELECT * FROM $TABLA_ART WHERE DEPSN=:dep AND TRIM(CODBAR) = :codBarra") + suspend fun findArticuloByCodBar(codBarra: String, dep: Boolean): Articles - @Query("SELECT * FROM $TABLA_ART WHERE DEPSN=:dep AND CBC LIKE :CodOrigen") - suspend fun findArticuloByCodOri(CodOrigen: String?, dep: Int): Articles? + @Query("SELECT * FROM $TABLA_ART WHERE DEPSN=:dep AND TRIM(COO) LIKE :CodOrigen") + suspend fun findArticuloByCodOri(CodOrigen: String?, dep: Boolean): List @Query("DELETE FROM $TABLA_ART") suspend fun deleteAllArticulos() - @Query("SELECT * FROM $TABLA_ART WHERE SEC=:sector AND COD=:codigo") + @Query("SELECT * FROM $TABLA_ART WHERE CODSEC=:sector AND CODART=:codigo") suspend fun fetchArticuloByCodSec(sector: String?, codigo: String?): Articles? } @@ -56,6 +56,9 @@ interface InvHeadDAO { @Query("SELECT * FROM $TABLA_INV_H ORDER BY INV_FEI") suspend fun fetchAllInvHead(): List + @Query("SELECT INV_LUG FROM $TABLA_INV_H WHERE INV_NUM=:inven") + suspend fun fetchAreaInvH (inven: Int): Boolean + @Query("SELECT INV_PRODCONT FROM $TABLA_INV_H WHERE INV_NUM=:inven") suspend fun consultaCantidadInvH (inven: Int): Int diff --git a/app/src/main/java/com/focasoftware/deboinventariov20/Model/ProductosApi.kt b/app/src/main/java/com/focasoftware/deboinventariov20/Model/ProductosApi.kt index 24ba60f..e060b3f 100644 --- a/app/src/main/java/com/focasoftware/deboinventariov20/Model/ProductosApi.kt +++ b/app/src/main/java/com/focasoftware/deboinventariov20/Model/ProductosApi.kt @@ -5,7 +5,7 @@ import retrofit2.http.GET interface ProductosApi { - @GET("api/articulos") + @GET("articulos/articulosCodBarra") suspend fun getProductos(): Response> } \ No newline at end of file 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 e4a74f2..ab53801 100644 --- a/app/src/main/java/com/focasoftware/deboinventariov20/Model/Tablas.kt +++ b/app/src/main/java/com/focasoftware/deboinventariov20/Model/Tablas.kt @@ -10,40 +10,69 @@ import com.focasoftware.deboinventariov20.DB.Constans.Constans.Companion.TABLA_S import com.google.gson.annotations.SerializedName import java.io.Serializable -data class Productos(@SerializedName("SEC") var sector: String?, - @SerializedName("COD") var codigo: String?, - @SerializedName("DESC") var descripcion: String?, - @SerializedName("CB") var codBar: String?, - @SerializedName("CBC") var codOrigen: String?, - @SerializedName("PRE_VTA") var precio: String?, - @SerializedName("PRE_COS") var costo: String?, - @SerializedName( "EV") var exiVenta: String?, - @SerializedName( "ED") var exiDeposito: String?, - @SerializedName( "DE") var de: String?, - @SerializedName( "BAL") var balanza: Int?, - @SerializedName("DEPSN") var depSn: Int?, - @SerializedName("FOTO") var imagen: String?) - +//data class Productos(@SerializedName("SEC") var sector: String?, +// @SerializedName("COD") var codigo: String?, +// @SerializedName("DESC") var descripcion: String?, +// @SerializedName("CB") var codBar: String?, +// @SerializedName("CBC") var codOrigen: String?, +// @SerializedName("PRE_VTA") var precio: String?, +// @SerializedName("PRE_COS") var costo: String?, +// @SerializedName( "EV") var exiVenta: String?, +// @SerializedName( "ED") var exiDeposito: String?, +// @SerializedName( "DE") var de: String?, +// @SerializedName( "BAL") var balanza: Int?, +// @SerializedName("DEPSN") var depSn: Int?, +// @SerializedName("FOTO") var imagen: String?) +data class Productos(@SerializedName("CODSEC") var sector: String?, + @SerializedName("CODART") var codigo: String?, + @SerializedName("DETART") var descripcion: String?, + @SerializedName("CODBAR") var codBar: String?, + @SerializedName("COO") var codOrigen: String?, + @SerializedName("PREVEN") var precio: String?, + @SerializedName("COSTO") var costo: String?, + @SerializedName( "EXIVTA") var exiVenta: String?, + @SerializedName( "EXIDEP") var exiDeposito: String?, + @SerializedName( "DVE") var de: String?, + @SerializedName( "UNIVEN") var balanza: Int?, + @SerializedName("DEPSN") var depSn: Boolean?, + @SerializedName("FOTO") var imagen: String?) +//@Entity(tableName = TABLA_ART) +//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?, +// @ColumnInfo(name = "CBC") var codOrigen: String?, +// @ColumnInfo(name = "PRE_VTA") var precio: String?, +// @ColumnInfo(name = "PRE_COS") var costo: String?, +// @ColumnInfo(name = "EV") var exiVenta: String?, +// @ColumnInfo(name = "ED") var exiDeposito: String?, +// @ColumnInfo(name = "DE") var de: String?, +// @ColumnInfo(name = "BAL") var balanza: Int?, +// @ColumnInfo(name = "DEPSN") var depSn: Int?, +// @ColumnInfo(name = "FOTO") var imagen: String?) : Serializable { +// @PrimaryKey(autoGenerate = true) +// @ColumnInfo(name = "id") +// var id: Long = 0 +//} @Entity(tableName = TABLA_ART) -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?, - @ColumnInfo(name = "CBC") var codOrigen: String?, - @ColumnInfo(name = "PRE_VTA") var precio: String?, - @ColumnInfo(name = "PRE_COS") var costo: String?, - @ColumnInfo(name = "EV") var exiVenta: String?, - @ColumnInfo(name = "ED") var exiDeposito: String?, - @ColumnInfo(name = "DE") var de: String?, - @ColumnInfo(name = "BAL") var balanza: Int?, - @ColumnInfo(name = "DEPSN") var depSn: Int?, - @ColumnInfo(name = "FOTO") var imagen: String?) : Serializable { +data class Articles(@ColumnInfo(name = "CODSEC") var sector: String?, + @ColumnInfo(name = "CODART") var codigo: String?, + @ColumnInfo(name = "DETART") var descripcion: String?, + @ColumnInfo(name = "CODBAR") var codBar: String?, + @ColumnInfo(name = "COO") var codOrigen: String?, + @ColumnInfo(name = "PREVEN") var precio: String?, + @ColumnInfo(name = "COSTO") var costo: String?, + @ColumnInfo(name = "EXIVTA") var exiVenta: String?, + @ColumnInfo(name = "EXIDEP") var exiDeposito: String?, + @ColumnInfo(name = "DVE") var de: String?, + @ColumnInfo(name = "UNIVEN") var balanza: Int?, + @ColumnInfo(name = "DEPSN") var depSn: Boolean?, + @ColumnInfo(name = "FOTO") var imagen: String?) : Serializable { @PrimaryKey(autoGenerate = true) @ColumnInfo(name = "id") var id: Long = 0 } - @Entity(tableName = TABLA_INV_H) data class InvHead(@PrimaryKey(autoGenerate = true) @ColumnInfo(name = "INV_NUM") var invNum: Int, @ColumnInfo(name = "INV_DESC") var descripcion: String?, @@ -52,7 +81,7 @@ data class InvHead(@PrimaryKey(autoGenerate = true) @ColumnInfo(name = "INV_NUM" @ColumnInfo(name = "INV_FEF") var fechaFinal: String?, // productos contados en el inventario @ColumnInfo(name = "INV_PRODCONT") var prodContados: Long?, - @ColumnInfo(name = "INV_LUG") var lugar: Int?, + @ColumnInfo(name = "INV_LUG") var lugar: Boolean?, // Solo se ajustan los productos incluidos en el conteo=0 // Ajusta productos no incluidos en el conteo con stock en cero=1 @ColumnInfo(name = "PRO_NO_CONTA") var stDesc: Int?, @@ -62,18 +91,18 @@ 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, - @ColumnInfo(name = "SEC") var sector: String?, - @ColumnInfo(name = "COD") var codigo: String?, - @ColumnInfo(name = "DES") var descripcion: String?, - @ColumnInfo(name = "CANT") var cantTomada: String?, - @ColumnInfo(name = "CB") var codBar: String?, - @ColumnInfo(name = "CBC") var codOrigen: String?, - @ColumnInfo(name = "PRE_VTA") var precio: String?, - @ColumnInfo(name = "PRE_COS") var costo: String?, - @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 { + @ColumnInfo(name = "SEC") var sector: String?, + @ColumnInfo(name = "COD") var codigo: String?, + @ColumnInfo(name = "DES") var descripcion: String?, + @ColumnInfo(name = "CANT") var cantTomada: String?, + @ColumnInfo(name = "CB") var codBar: String?, + @ColumnInfo(name = "CBC") var codOrigen: String?, + @ColumnInfo(name = "PRE_VTA") var precio: String?, + @ColumnInfo(name = "PRE_COS") var costo: String?, + @ColumnInfo(name = "BAL") var balanza: Int?, + @ColumnInfo(name = "DSN") var depSn: Boolean?, + @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 diff --git a/app/src/main/java/com/focasoftware/deboinventariov20/UI/actualizacionMaestros/ActuaMaestrosFragment.kt b/app/src/main/java/com/focasoftware/deboinventariov20/UI/actualizacionMaestros/ActuaMaestrosFragment.kt index 0ef95f5..176ac9a 100644 --- a/app/src/main/java/com/focasoftware/deboinventariov20/UI/actualizacionMaestros/ActuaMaestrosFragment.kt +++ b/app/src/main/java/com/focasoftware/deboinventariov20/UI/actualizacionMaestros/ActuaMaestrosFragment.kt @@ -15,6 +15,7 @@ import kotlinx.android.synthetic.main.fragment_actua_maestros.* import kotlinx.coroutines.* import kotlinx.coroutines.Dispatchers.IO import kotlinx.coroutines.Dispatchers.Main +import java.util.ArrayList var BASE_URL = "" @@ -54,18 +55,18 @@ class ActuaMaestrosFragment : Fragment() { return v } - private suspend fun obtenerArticulos() { val productosService = ProductosService.getProductosService() var index: Long = 1 withContext(IO) { - val job = CoroutineScope(Dispatchers.IO).launch { + val job = CoroutineScope(IO).launch { // TODO: BORRO TODO LOS ARTICULOS DE LA BASE PARA CARGARLOS DE NUEVO AppDb.getAppDb(requireActivity())!!.ArticulosDAO()!!.deleteAllArticulos() val response = productosService.getProductos() if (response.isSuccessful) { + for (pro in response.body()!!) { val artiAcargar = Articles(pro.sector, pro.codigo, @@ -88,6 +89,12 @@ class ActuaMaestrosFragment : Fragment() { countriesList.text = "¡Datos Importados Correctamente!" loading_view.visibility = View.GONE } + }else{ + withContext(Main) { + countriesList.visibility = View.VISIBLE + countriesList.text = "¡Error!" + loading_view.visibility = View.GONE + } } } if (job == null) { @@ -99,6 +106,7 @@ class ActuaMaestrosFragment : Fragment() { } } + // withContext(Dispatchers.Main) { // if (response.isSuccessful) { // val call = WebService diff --git a/app/src/main/java/com/focasoftware/deboinventariov20/UI/descripCorigenFragment/CodigoOriFragment.kt b/app/src/main/java/com/focasoftware/deboinventariov20/UI/descripCorigenFragment/CodigoOriFragment.kt new file mode 100644 index 0000000..08dcc3d --- /dev/null +++ b/app/src/main/java/com/focasoftware/deboinventariov20/UI/descripCorigenFragment/CodigoOriFragment.kt @@ -0,0 +1,274 @@ +package com.focasoftware.deboinventariov20.UI.descripCorigenFragment + +import android.app.AlertDialog +import android.content.Context +import android.content.SharedPreferences +import android.graphics.Canvas +import android.graphics.Color +import android.graphics.drawable.ColorDrawable +import android.os.Bundle +import android.text.InputType +import androidx.fragment.app.Fragment +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.view.WindowManager +import android.view.inputmethod.InputMethodManager +import androidx.fragment.app.FragmentActivity +import androidx.lifecycle.lifecycleScope +import androidx.navigation.NavController +import androidx.navigation.Navigation +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.Articles +import com.focasoftware.deboinventariov20.Model.InvBody +import com.focasoftware.deboinventariov20.R +import com.focasoftware.deboinventariov20.UI.Utils.modificarCantidadEnCabecera +import com.focasoftware.deboinventariov20.UI.inventario.InventarioFragment +import kotlinx.android.synthetic.main.ingresar_cantidad.view.* +import kotlinx.android.synthetic.main.ingresar_cantidad.view.btnAceptar +import kotlinx.android.synthetic.main.login_dialog.view.* +import kotlinx.coroutines.* + +// +class CodigoOriFragment : Fragment() { + + private lateinit var artAcargar2: List + private var listArticulos: List? = null + lateinit var viewAdapter2: RecyclerView.Adapter<*> + private lateinit var viewManager2: RecyclerView.LayoutManager + private lateinit var rcCodigoOri: RecyclerView + private var swipeBackground: ColorDrawable = ColorDrawable(Color.YELLOW) + private var cantidad = 0F + private var numeroInventario = 0 + lateinit var navController: NavController + lateinit var sharedPreferences: SharedPreferences + private var artCargadoEnBD: InvBody? = null + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + + sharedPreferences = requireActivity().getSharedPreferences("SP_INFO", Context.MODE_PRIVATE) + arguments.apply { + artAcargar2 = requireArguments().getSerializable("ArrayDesc") as List + numeroInventario = requireArguments().getInt("numeroInv") + } + + } + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + navController = Navigation.findNavController(view) + showSoftKeyboard(view) + } + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { + val v = inflater.inflate(R.layout.fragment_codigo_ori, container, false) + rcCodigoOri = v.findViewById(R.id.rcCodigoOri) + + IngresarRecicler(artAcargar2) + showSoftKeyboard(v) +// btnSalir.setOnClickListener { +// activity?.onBackPressed(); +//// VolverAinventario() +// } + return v + } + + private fun showSoftKeyboard(view: View) { + if (view.requestFocus()) { + val imm = requireActivity().getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager + imm.showSoftInput(view, InputMethodManager.HIDE_IMPLICIT_ONLY) + } + } + + fun IngresarRecicler(articulos: List) { + + viewAdapter2 = CodigoOrigenAdapter(requireContext(),articulos) + viewManager2 = LinearLayoutManager(requireContext()) + + rcCodigoOri.apply { + adapter = viewAdapter2 + layoutManager = viewManager2 + } + val itemTouchHelperCallback = object : ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT) { + override fun onMove(p0: RecyclerView, p1: RecyclerView.ViewHolder, target: RecyclerView.ViewHolder): Boolean { + return false + } + + override fun onSwiped(viewHolder: RecyclerView.ViewHolder, position: Int) { + + GlobalScope.launch(Dispatchers.Main) { + //TODO BUSCO EN BASE DE DATOS + artCargadoEnBD = buscarCodigoDeboEnBD((viewAdapter2 as CodigoOrigenAdapter).items2?.get(viewHolder.layoutPosition)?.sector.toString(), + (viewAdapter2 as CodigoOrigenAdapter).items2?.get(viewHolder.layoutPosition)?.codigo.toString(), + numeroInventario.toString()) + if (artCargadoEnBD == null) { + val mDialogView = LayoutInflater.from(context).inflate(R.layout.ingresar_cantidad, null) + val mBuilder = AlertDialog.Builder(context).setView(mDialogView).setCancelable(false) + //TODO: DEPENDIENDO DEL TIPO DE ARTICULO PERMITER INGRESAR DECIMALES O NO + if ((viewAdapter2 as CodigoOrigenAdapter).items2?.get(viewHolder.layoutPosition)!!.balanza==1 || (viewAdapter2 as CodigoOrigenAdapter).items2?.get(viewHolder.layoutPosition)!!.balanza==3 || (viewAdapter2 as CodigoOrigenAdapter).items2?.get( + viewHolder.layoutPosition)!!.balanza==7) + mDialogView.etCantidad.inputType= InputType.TYPE_CLASS_NUMBER + + mDialogView.tvTitulo.text = "${(viewAdapter2 as CodigoOrigenAdapter).items2?.get(viewHolder.layoutPosition)!!.descripcion}" + val mAlertDialog = mBuilder.show() + mDialogView.etCantidad.requestFocus() + mAlertDialog.window!!.clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE or WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM) + mAlertDialog.window!!.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE) + mDialogView.btnAceptar.setOnClickListener { + if (mDialogView.etCantidad.text.isNullOrEmpty()) { + mDialogView.etCantidad.error = "No vacio" + mDialogView.etCantidad.requestFocus() + mDialogView.etCantidad.hint = "Ingrese un valor" + } else if (!mDialogView.etCantidad.text.isNullOrEmpty()) { + cantidad = mDialogView.etCantidad.text.toString().toFloat() + val body = InvBody(numeroInventario, + (viewAdapter2 as CodigoOrigenAdapter).items2?.get(viewHolder.layoutPosition)!!.sector, + // TODO: PREPARO PARA MANDAR A CARGAR EN LA BD + (viewAdapter2 as CodigoOrigenAdapter).items2?.get(viewHolder.layoutPosition)!!.codigo, + (viewAdapter2 as CodigoOrigenAdapter).items2?.get(viewHolder.layoutPosition)!!.descripcion, + cantidad.toString(), + (viewAdapter2 as CodigoOrigenAdapter).items2?.get(viewHolder.layoutPosition)!!.codBar, + (viewAdapter2 as CodigoOrigenAdapter).items2?.get(viewHolder.layoutPosition)!!.codOrigen, + (viewAdapter2 as CodigoOrigenAdapter).items2?.get(viewHolder.layoutPosition)!!.precio, + (viewAdapter2 as CodigoOrigenAdapter).items2?.get(viewHolder.layoutPosition)!!.precio, + (viewAdapter2 as CodigoOrigenAdapter).items2?.get(viewHolder.layoutPosition)!!.balanza, + (viewAdapter2 as CodigoOrigenAdapter).items2?.get(viewHolder.layoutPosition)!!.depSn, + InventarioFragment().ObtenerFechaActual(), + InventarioFragment().ObtenerFechaActual()) + InsertarArtEnDB(body)// TODO: MANDO A CARGAR A LA BASE DE DATOS + modificarCantidadEnCabecera(numeroInventario, true, requireActivity()) +// VolverAinventario() + activity?.onBackPressed() + mAlertDialog.dismiss() + } + } + } else if (artCargadoEnBD != null) { + + val mDialogView = LayoutInflater.from(context).inflate(R.layout.login_dialog, null) + val mBuilder = AlertDialog.Builder(context).setView(mDialogView).setTitle("Producto '${artCargadoEnBD!!.descripcion}', se encuentra cargado.").setCancelable(false) + if (artCargadoEnBD!!.balanza.toString().contains("1") || artCargadoEnBD!!.balanza.toString().contains("3") || artCargadoEnBD!!.balanza.toString().contains("7")) mDialogView.tvNuevaCantidad.inputType= InputType.TYPE_CLASS_NUMBER + mDialogView.tvCantInicial.text =String.format("%.2f", artCargadoEnBD!!.cantTomada.toString().toFloat()) + + val mAlertDialog = mBuilder.show() + mDialogView.tvNuevaCantidad.requestFocus() + + + mAlertDialog?.window!!.clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE or WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM) + mAlertDialog.window!!.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE) + + mDialogView.rbSumar.setOnClickListener { + if (!mDialogView.tvNuevaCantidad.text.isNullOrEmpty()) { + mDialogView.tvResultado.text = String.format("%.2f", (mDialogView.tvCantInicial.text.toString().toFloat() + mDialogView.tvNuevaCantidad.text.toString().toFloat())) + mDialogView.tvNuevaCantidad.isEnabled=false + } + } + mDialogView.rbRestar.setOnClickListener { + if (!mDialogView.tvNuevaCantidad.text.isNullOrEmpty()) { + if (mDialogView.tvCantInicial.text.toString().toFloat() >= mDialogView.tvNuevaCantidad.text.toString().toFloat()) { + mDialogView.tvResultado.text = String.format("%.2f", mDialogView.tvCantInicial.text.toString().toFloat() - mDialogView.tvNuevaCantidad.text.toString().toFloat()) + mDialogView.tvNuevaCantidad.isEnabled = false + }else{ + mDialogView.tvResultado.text="" + mDialogView.tvResultado.error = "Operación No Valida" + mDialogView.tvResultado.requestFocus() + mDialogView.tvResultado.hint = "Error" + } + } + } + mDialogView.rbMdodificar.setOnClickListener { + if (!mDialogView.tvNuevaCantidad.text.isNullOrEmpty()) { + mDialogView.tvResultado.text = String.format("%.2f", (mDialogView.tvNuevaCantidad.text.toString().toFloat())) + mDialogView.tvNuevaCantidad.isEnabled = false + } + } + mDialogView.btnAceptar.setOnClickListener { + if (mDialogView.tvNuevaCantidad.text.isNotEmpty() || !mDialogView.tvNuevaCantidad.text.isBlank()) { + if (mDialogView.tvResultado.text.isNotEmpty() || !mDialogView.tvResultado.text.isBlank()) { + + updateCantidad((viewAdapter2 as CodigoOrigenAdapter).items2?.get(viewHolder.layoutPosition)!!.sector.toString(), + (viewAdapter2 as CodigoOrigenAdapter).items2?.get(viewHolder.layoutPosition)!!.codigo.toString(), + mDialogView.tvResultado.text.toString().toFloat()) +// VolverAinventario() + activity?.onBackPressed(); + mAlertDialog.dismiss() + } else if (mDialogView.tvNuevaCantidad.text.isNotEmpty() || mDialogView.tvNuevaCantidad.text.isBlank()) { + mDialogView.tvResultado.error = "Operación Requerida" + mDialogView.tvResultado.requestFocus() + mDialogView.tvResultado.hint = "Seleccione Operación" + } + } else if (mDialogView.tvNuevaCantidad.text.isEmpty() || mDialogView.tvNuevaCantidad.text.isBlank()) { + mDialogView.tvNuevaCantidad.error = "Completar" + mDialogView.tvNuevaCantidad.requestFocus() + mDialogView.tvNuevaCantidad.hint = "Ingrese un valor" + } + } + mDialogView.dialogCancelBtn.setOnClickListener { + activity?.onBackPressed(); + mAlertDialog.dismiss() + } + } + } + } + + override fun onChildDraw(c: Canvas, recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder, dX: Float, dY: Float, actionState: Int, isCurrentlyActive: Boolean) { + super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive) + val itemView = viewHolder.itemView + + c.clipRect(0f, itemView.top.toFloat(), dX, itemView.bottom.toFloat()) + + if (dX > 0) { + + c.drawColor(Color.RED) + } else if (dX < 0) { + // swipeBackground.setBounds(itemView.right+dX.toInt(),itemView.top,itemView.right,itemView.bottom) + c.drawColor(Color.YELLOW) + } + swipeBackground.draw(c) + super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive) + } + } + val itemTouchHelper2 = ItemTouchHelper(itemTouchHelperCallback) + itemTouchHelper2.attachToRecyclerView(rcCodigoOri) + + } + + fun InsertarArtEnDB(cuarpoInventario: InvBody) { + lifecycleScope.launch { + withContext(Dispatchers.IO) { + AppDb.getAppDb(requireActivity())!!.InvBodyDAO()!!.insertInvBody(cuarpoInventario) + } + } + } + +// fun VolverAinventario() { +// +// val editor = sharedPreferences.edit() +// editor?.putString("Inventario", numeroInventario.toString()) +// editor?.apply() +// editor.commit() +// navController.navigate(R.id.action_descripcionFragment_to_inventarioFragment) +// } + + suspend fun buscarCodigoDeboEnBD(sector: String, codigo: String, numInventario: String): InvBody? { + //TODO BUSQUEDA POR CODIGO DE BARRAS + var busqueda: InvBody? = null + return GlobalScope.async(Dispatchers.IO) { + busqueda = AppDb.getAppDb(requireContext())!!.InvBodyDAO()!!.fetchArtInInvBody(sector, codigo, numInventario) + return@async busqueda + }.await() + } + + fun updateCantidad(sector: String, codigo: String, cantidad: Float) { + lifecycleScope.launch { + withContext(Dispatchers.IO) { + val activity: FragmentActivity? = activity + if (activity != null && isAdded) { + AppDb.getAppDb(requireActivity())!!.InvBodyDAO()!!.UpdateInvBody(cantidad, sector, codigo) + } + } + } + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/focasoftware/deboinventariov20/UI/descripCorigenFragment/CodigoOrigenAdapter.kt b/app/src/main/java/com/focasoftware/deboinventariov20/UI/descripCorigenFragment/CodigoOrigenAdapter.kt new file mode 100644 index 0000000..02b7d59 --- /dev/null +++ b/app/src/main/java/com/focasoftware/deboinventariov20/UI/descripCorigenFragment/CodigoOrigenAdapter.kt @@ -0,0 +1,55 @@ +package com.focasoftware.deboinventariov20.UI.descripCorigenFragment + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.recyclerview.widget.RecyclerView +import com.focasoftware.deboinventariov20.Model.Articles +import com.focasoftware.deboinventariov20.Model.InvHead +import com.focasoftware.deboinventariov20.R +import com.focasoftware.deboinventariov20.UI.Utils.BaseViewHolder +import com.focasoftware.deboinventariov20.UI.descripcionFragment.DescripcionListAdapter +import kotlinx.android.synthetic.main.item.view.* +import kotlinx.android.synthetic.main.item.view.tvCodigo +import kotlinx.android.synthetic.main.item.view.tvCodigoOrigen +import kotlinx.android.synthetic.main.item.view.tvDescripcion +import kotlinx.android.synthetic.main.item.view.tvSector +import kotlinx.android.synthetic.main.item_codigo_origen.view.* + +class CodigoOrigenAdapter(private val cnxt: Context, private val corigen: List) : + RecyclerView.Adapter() { + internal var items2: List? = null + + init { + this.items2 = corigen + } + + override fun onCreateViewHolder(parent: ViewGroup, p1: Int) = ItemsViewHolder( + LayoutInflater.from(cnxt).inflate(R.layout.item_codigo_origen, parent, false)) + + override fun getItemCount() = corigen.size + + override fun onBindViewHolder(holder: ItemsViewHolder, position: Int) { + when (holder) { + is ItemsViewHolder -> { + holder.bind(items2!![position]) + } + } + } + + class ItemsViewHolder constructor(view: View) : RecyclerView.ViewHolder(view) { + + val sector = view.tvSector + val codigo = view.tvCodigo + val descripcion = view.tvDescripcion + val CodigoOrigen = view.tvCodigoOrigen + + fun bind(pro: Articles) { + sector.text = pro.sector + codigo.text = pro.codigo + descripcion.text = pro.descripcion + CodigoOrigen.text = pro.codOrigen + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/focasoftware/deboinventariov20/UI/descripCorigenFragment/ItemCodigoOrigen.kt b/app/src/main/java/com/focasoftware/deboinventariov20/UI/descripCorigenFragment/ItemCodigoOrigen.kt new file mode 100644 index 0000000..66c6a92 --- /dev/null +++ b/app/src/main/java/com/focasoftware/deboinventariov20/UI/descripCorigenFragment/ItemCodigoOrigen.kt @@ -0,0 +1,3 @@ +package com.focasoftware.deboinventariov20.UI.descripCorigenFragment + +data class ItemCodigoOrigen(val sector: String?,val codigo: String?, val descripcion: String?, val codigoOrigen: String?) \ No newline at end of file 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 62dd939..2d28929 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 @@ -1,6 +1,5 @@ package com.focasoftware.deboinventariov20.UI.descripcionFragment -import android.app.Activity import android.app.AlertDialog import android.content.Context import android.content.SharedPreferences @@ -14,7 +13,6 @@ import android.view.View import android.view.ViewGroup import android.view.WindowManager import android.view.inputmethod.InputMethodManager -import androidx.core.content.ContextCompat.getSystemService import androidx.fragment.app.Fragment import androidx.fragment.app.FragmentActivity import androidx.lifecycle.lifecycleScope @@ -46,7 +44,6 @@ class DescripcionFragment : Fragment() { private var numeroInventario = 0 lateinit var navController: NavController lateinit var sharedPreferences: SharedPreferences - private var indice = 0 private var artCargadoEnBD: InvBody? = null override fun onCreate(savedInstanceState: Bundle?) { @@ -58,18 +55,11 @@ class DescripcionFragment : Fragment() { } } - private fun showSoftKeyboard(view: View) { - if (view.requestFocus()) { - val imm = requireActivity().getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager - imm.showSoftInput(view, InputMethodManager.HIDE_IMPLICIT_ONLY) - } - } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) navController = Navigation.findNavController(view) showSoftKeyboard(view) } - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { val v = inflater.inflate(R.layout.fragment_descripcion, container, false) rcDescripcion = v.findViewById(R.id.rcDescripcion) @@ -85,6 +75,13 @@ class DescripcionFragment : Fragment() { return v } + private fun showSoftKeyboard(view: View) { + if (view.requestFocus()) { + val imm = requireActivity().getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager + imm.showSoftInput(view, InputMethodManager.HIDE_IMPLICIT_ONLY) + } + } + fun IngresarRecicler(articulos: List?) { viewAdapter2 = DescripcionListAdapter(articulos) @@ -101,23 +98,20 @@ class DescripcionFragment : Fragment() { override fun onSwiped(viewHolder: RecyclerView.ViewHolder, position: Int) { - var indice = 0 - indice = viewHolder.layoutPosition GlobalScope.launch(Dispatchers.Main) { //TODO BUSCO EN BASE DE DATOS - artCargadoEnBD = buscarCodigoDeboEnBD((viewAdapter2 as DescripcionListAdapter).items2?.get(indice)?.sector.toString(), - (viewAdapter2 as DescripcionListAdapter).items2?.get(indice)?.codigo.toString(), - numeroInventario.toString()) + artCargadoEnBD = buscarCodigoDeboEnBD((viewAdapter2 as DescripcionListAdapter).items2?.get(viewHolder.layoutPosition)?.sector.toString(), + (viewAdapter2 as DescripcionListAdapter).items2?.get(viewHolder.layoutPosition)?.codigo.toString(), numeroInventario.toString()) if (artCargadoEnBD == null) { val mDialogView = LayoutInflater.from(context).inflate(R.layout.ingresar_cantidad, null) val mBuilder = AlertDialog.Builder(context).setView(mDialogView).setCancelable(false) //TODO: DEPENDIENDO DEL TIPO DE ARTICULO PERMITER INGRESAR DECIMALES O NO - 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) + if ((viewAdapter2 as DescripcionListAdapter).items2?.get(viewHolder.layoutPosition)!!.balanza==1 || (viewAdapter2 as DescripcionListAdapter).items2?.get(viewHolder.layoutPosition)!!.balanza==3 || (viewAdapter2 as DescripcionListAdapter).items2?.get( + viewHolder.layoutPosition)!!.balanza==7) mDialogView.etCantidad.inputType= InputType.TYPE_CLASS_NUMBER - mDialogView.tvTitulo.text = "${(viewAdapter2 as DescripcionListAdapter).items2?.get(indice)!!.descripcion}" + mDialogView.tvTitulo.text = "${(viewAdapter2 as DescripcionListAdapter).items2?.get(viewHolder.layoutPosition)!!.descripcion}" val mAlertDialog = mBuilder.show() mDialogView.etCantidad.requestFocus() mAlertDialog.window!!.clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE or WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM) @@ -128,19 +122,19 @@ class DescripcionFragment : Fragment() { mDialogView.etCantidad.requestFocus() mDialogView.etCantidad.hint = "Ingrese un valor" } else if (!mDialogView.etCantidad.text.isNullOrEmpty()) { - cantidad = mDialogView.etCantidad.text.toString().toFloat() + cantidad =String.format("%.2f", mDialogView.etCantidad.text.toString().toFloat()).toFloat() val body = InvBody(numeroInventario, - (viewAdapter2 as DescripcionListAdapter).items2?.get(indice)!!.sector, + (viewAdapter2 as DescripcionListAdapter).items2?.get(viewHolder.layoutPosition)!!.sector, // TODO: PREPARO PARA MANDAR A CARGAR EN LA BD - (viewAdapter2 as DescripcionListAdapter).items2?.get(indice)!!.codigo, - (viewAdapter2 as DescripcionListAdapter).items2?.get(indice)!!.descripcion, + (viewAdapter2 as DescripcionListAdapter).items2?.get(viewHolder.layoutPosition)!!.codigo, + (viewAdapter2 as DescripcionListAdapter).items2?.get(viewHolder.layoutPosition)!!.descripcion, cantidad.toString(), - (viewAdapter2 as DescripcionListAdapter).items2?.get(indice)!!.codBar, - (viewAdapter2 as DescripcionListAdapter).items2?.get(indice)!!.codOrigen, - (viewAdapter2 as DescripcionListAdapter).items2?.get(indice)!!.precio, - (viewAdapter2 as DescripcionListAdapter).items2?.get(indice)!!.precio, - (viewAdapter2 as DescripcionListAdapter).items2?.get(indice)!!.balanza, - (viewAdapter2 as DescripcionListAdapter).items2?.get(indice)!!.depSn, + (viewAdapter2 as DescripcionListAdapter).items2?.get(viewHolder.layoutPosition)!!.codBar, + (viewAdapter2 as DescripcionListAdapter).items2?.get(viewHolder.layoutPosition)!!.codOrigen, + (viewAdapter2 as DescripcionListAdapter).items2?.get(viewHolder.layoutPosition)!!.precio, + (viewAdapter2 as DescripcionListAdapter).items2?.get(viewHolder.layoutPosition)!!.precio, + (viewAdapter2 as DescripcionListAdapter).items2?.get(viewHolder.layoutPosition)!!.balanza, + (viewAdapter2 as DescripcionListAdapter).items2?.get(viewHolder.layoutPosition)!!.depSn, InventarioFragment().ObtenerFechaActual(), InventarioFragment().ObtenerFechaActual()) InsertarArtEnDB(body)// TODO: MANDO A CARGAR A LA BASE DE DATOS @@ -193,8 +187,8 @@ class DescripcionFragment : Fragment() { if (mDialogView.tvNuevaCantidad.text.isNotEmpty() || !mDialogView.tvNuevaCantidad.text.isBlank()) { if (mDialogView.tvResultado.text.isNotEmpty() || !mDialogView.tvResultado.text.isBlank()) { - updateCantidad((viewAdapter2 as DescripcionListAdapter).items2?.get(indice)!!.sector.toString(), - (viewAdapter2 as DescripcionListAdapter).items2?.get(indice)!!.codigo.toString(), + updateCantidad((viewAdapter2 as DescripcionListAdapter).items2?.get(viewHolder.layoutPosition)!!.sector.toString(), + (viewAdapter2 as DescripcionListAdapter).items2?.get(viewHolder.layoutPosition)!!.codigo.toString(), mDialogView.tvResultado.text.toString().toFloat()) // VolverAinventario() activity?.onBackPressed(); diff --git a/app/src/main/java/com/focasoftware/deboinventariov20/UI/descripcionFragment/DescripcionListAdapter.kt b/app/src/main/java/com/focasoftware/deboinventariov20/UI/descripcionFragment/DescripcionListAdapter.kt index 2e99d48..a162d3c 100644 --- a/app/src/main/java/com/focasoftware/deboinventariov20/UI/descripcionFragment/DescripcionListAdapter.kt +++ b/app/src/main/java/com/focasoftware/deboinventariov20/UI/descripcionFragment/DescripcionListAdapter.kt @@ -17,8 +17,7 @@ class DescripcionListAdapter(private val productos: List?) : } override fun onCreateViewHolder(parent: ViewGroup, p1: Int) = ItemsViewHolder( - LayoutInflater.from(parent.context).inflate(R.layout.item_descripcion, parent, false) - ) + LayoutInflater.from(parent.context).inflate(R.layout.item_descripcion, parent, false)) override fun getItemCount() = productos!!.size @@ -30,7 +29,6 @@ class DescripcionListAdapter(private val productos: List?) : } } - class ItemsViewHolder constructor(view: View) : RecyclerView.ViewHolder(view) { val sector = view.tvSector diff --git a/app/src/main/java/com/focasoftware/deboinventariov20/UI/detalleProducto/DetalleArtFragment.kt b/app/src/main/java/com/focasoftware/deboinventariov20/UI/detalleProducto/DetalleArtFragment.kt index 4c50077..8c4073b 100644 --- a/app/src/main/java/com/focasoftware/deboinventariov20/UI/detalleProducto/DetalleArtFragment.kt +++ b/app/src/main/java/com/focasoftware/deboinventariov20/UI/detalleProducto/DetalleArtFragment.kt @@ -6,6 +6,7 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.view.inputmethod.InputMethodManager import androidx.fragment.app.Fragment import com.focasoftware.deboinventariov20.DB.DataBase.AppDb import com.focasoftware.deboinventariov20.Model.Articles @@ -32,9 +33,11 @@ class DetalleArtFragment : Fragment() { codigo = it.getString("codigo") Inventario= it.getInt("numeroInv") } + val imm = requireActivity().getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager? + imm!!.hideSoftInputFromWindow(requireActivity().currentFocus?.windowToken, InputMethodManager.HIDE_NOT_ALWAYS) + marcarInventario() GlobalScope.launch(Dispatchers.Main) { - artSerch = buscarCodigoDeboEnBD(sector, codigo) if (artSerch == null) { @@ -59,14 +62,29 @@ class DetalleArtFragment : Fragment() { } else if (artSerch != null) { tvSector.text=sector tvCodigo.text=codigo - tvDeposito.text=if(artSerch!!.depSn!!.toInt() ==0)"No" else "Si" + tvDeposito.text=if(!artSerch!!.depSn!!)"No" else "Si" tvDescripcion.text=artSerch!!.descripcion.toString() - tvCodigoBarras.text=artSerch!!.codBar.toString() - tvCodigoOrigen.text=artSerch!!.codOrigen.toString() + tvCodigoBarras.text=if (artSerch!!.codBar.toString()=="null")"" else artSerch!!.codBar.toString() + tvCodigoOrigen.text=if (artSerch!!.codOrigen.toString()=="null")"" else artSerch!!.codOrigen.toString() tvExiVenta.text=artSerch!!.exiVenta.toString() tvExiDeposito.text=artSerch!!.exiDeposito.toString() - tvBal.text=artSerch!!.balanza.toString() - tvDE.text=artSerch!!.de.toString() + + when ( artSerch!!.balanza.toString().toInt()) { + 1 ->tvBal.text="Unidades" + 2 ->tvBal.text="Litros" + 3 ->tvBal.text="Cajas" + 4 ->tvBal.text="M3" + 5 ->tvBal.text="Metros" + 6 ->tvBal.text="Fracción" + 7 ->tvBal.text="Bultos" + 8 ->tvBal.text="Gramos" + 9 ->tvBal.text="Cent. cúbicos" + 10 ->tvBal.text="Kgs" + else -> { tvBal.text="Otros" + } + } + tvCosto.text=String.format("%.2f", artSerch!!.costo.toString().toFloat()) + tvPrecio.text=String.format("%.2f", artSerch!!.precio.toString().toFloat()) } } } @@ -78,7 +96,7 @@ class DetalleArtFragment : Fragment() { suspend fun buscarCodigoDeboEnBD(sector: String?, codigo: String?): Articles? { //TODO BUSQUEDA POR CODIGO DE BARRAS - var busqueda: Articles? = null + var busqueda: Articles? return GlobalScope.async(Dispatchers.IO) { busqueda = AppDb.getAppDb(requireContext())!!.ArticulosDAO()!!.fetchArticuloByCodSec(sector, codigo) return@async busqueda 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 f2d9890..6c0d68c 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 @@ -37,6 +37,7 @@ import kotlinx.android.synthetic.main.ingresar_cantidad.view.* import kotlinx.android.synthetic.main.login_dialog.view.* import kotlinx.android.synthetic.main.login_dialog.view.btnAceptar import kotlinx.coroutines.* +import kotlinx.coroutines.Dispatchers.IO import java.time.LocalDateTime import java.time.format.DateTimeFormatter import java.util.* @@ -44,7 +45,7 @@ import java.util.* class InventarioFragment : Fragment(), ProductosListAdapter.OnImageDotsClickListener { private lateinit var sharedPreferences: SharedPreferences - private var iArea: Int = 0 + private var iArea: Boolean = false private lateinit var invHead: InvHead private lateinit var rcInventarios: RecyclerView private lateinit var viewAdapter: RecyclerView.Adapter<*> @@ -94,7 +95,7 @@ class InventarioFragment : Fragment(), ProductosListAdapter.OnImageDotsClickList //TODO: BUSCO EL ULTIMO INVENTARIO EN LA BD PARA PODER CREAR EL PROXIMO InventarioNuevo = AppDb.getAppDb(requireActivity())?.InvHeadDAO()?.findLastInv()?.plus(1) ?: 1 //TODO: CREAMOS EL INVENTARIO EN LA CABECERA DEL INVENTARIO - invHead = InvHead(InventarioNuevo, if (SerchArea() == 0) "Ventas" else "Deposito", 1, ObtenerFechaActual(), ObtenerFechaActual(), 0L, SerchArea(), AjusteProductos(), ProdNoCont()) + invHead = InvHead(InventarioNuevo, if (!SerchArea()) "Ventas" else "Deposito", 1, ObtenerFechaActual(), ObtenerFechaActual(), 0L, SerchArea(), AjusteProductos(), ProdNoCont()) AppDb.getAppDb(requireActivity())!!.InvHeadDAO()!!.insertInvHead(invHead) tvTitulo.text = "Inventario Dinamico" + " N° $InventarioNuevo" } @@ -109,10 +110,15 @@ class InventarioFragment : Fragment(), ProductosListAdapter.OnImageDotsClickList sChangeUpper = tCodigoBarras.text.toString() var indiceDelArtEncontrado = 0 - if (tCodigoBarras.text.isNullOrBlank()) { + if (tCodigoBarras.text.isNullOrBlank() ) { tCodigoBarras.error = "No puede estar vacio" tCodigoBarras.requestFocus() tCodigoBarras.hint = "No puede estar vacio" + }else if (tCodigoBarras.text.toString().length<4 && iEstado==2) { + tCodigoBarras.error = "Minimo 4 caracteres" + tCodigoBarras.requestFocus() + tCodigoBarras.hint = "4 Minimo" + } else { //TODO COMIENZA LA BUSQUEDA POR CODIGO DE BARRAS @@ -190,6 +196,8 @@ class InventarioFragment : Fragment(), ProductosListAdapter.OnImageDotsClickList val artEncontrado = buscarDescEnBD(sChangeUpper.toUpperCase(Locale.ROOT)) ContinuarCargaDesc(artEncontrado as ArrayList) } + + iBusquedaPor = 0 // } return@setOnKeyListener true @@ -198,22 +206,22 @@ class InventarioFragment : Fragment(), ProductosListAdapter.OnImageDotsClickList val imm = requireActivity().getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager? imm!!.hideSoftInputFromWindow(requireActivity().currentFocus?.windowToken, InputMethodManager.HIDE_NOT_ALWAYS) - GlobalScope.launch(Dispatchers.Main) { - indiceDelArtEncontrado = buscoArtEnRv(sChangeUpper.toUpperCase(Locale.ROOT), 2)//TODO Si encuentra el articulo en el RV devuelve el indice -// //TODO Si no lo encuentra devuelve -1 - if (indiceDelArtEncontrado != -1) { - if (swSumaUno!!.isChecked) { - fCant = 0F - fCant = listArticulos[indiceDelArtEncontrado].cantTomada - fCant += 1F - //TODO ACTUALIZO LA CANTIDAD EN LA BD - updateCantidad(listArticulos[indiceDelArtEncontrado].sector.toString(), listArticulos[indiceDelArtEncontrado].codigo.toString(), fCant) - //TODO ACTUALIZO LA CANTIDAD EN EL RV - listArticulos[indiceDelArtEncontrado].cantTomada = fCant - viewAdapter.notifyDataSetChanged() - } else { - dialogoSumaResta(requireContext(), indiceDelArtEncontrado, listArticulos[indiceDelArtEncontrado].univta, false) - } +// GlobalScope.launch(Dispatchers.Main) { +// indiceDelArtEncontrado = buscoArtEnRv(sChangeUpper.toUpperCase(Locale.ROOT), 2)//TODO Si encuentra el articulo en el RV devuelve el indice +//// //TODO Si no lo encuentra devuelve -1 +// if (indiceDelArtEncontrado != -1) { +// if (swSumaUno!!.isChecked) { +// fCant = 0F +// fCant = listArticulos[indiceDelArtEncontrado].cantTomada +// fCant += 1F +// //TODO ACTUALIZO LA CANTIDAD EN LA BD +// updateCantidad(listArticulos[indiceDelArtEncontrado].sector.toString(), listArticulos[indiceDelArtEncontrado].codigo.toString(), fCant) +// //TODO ACTUALIZO LA CANTIDAD EN EL RV +// listArticulos[indiceDelArtEncontrado].cantTomada = fCant +// viewAdapter.notifyDataSetChanged() +// } else { +// dialogoSumaResta(requireContext(), indiceDelArtEncontrado, listArticulos[indiceDelArtEncontrado].univta, false) +// } // } else { // val mDialogView = LayoutInflater.from(context).inflate(R.layout.login_dialog, null) // val mBuilder = @@ -271,17 +279,17 @@ class InventarioFragment : Fragment(), ProductosListAdapter.OnImageDotsClickList // } // }.cancelOnTouchOutside(false).cornerRadius(10F) // } - } else if (indiceDelArtEncontrado == -1) { +// } else if (indiceDelArtEncontrado == -1) { // no lo encontro en el RV, lo va a buscar en al BD GlobalScope.launch(Dispatchers.Main) { //TODO BUSCO EN BASE DE DATOS - listArticulos[indiceDelArtEncontrado].cantTomada val artEncontrado = buscarCodiogoOriEnBD(sChangeUpper.toUpperCase(Locale.ROOT)) - ContinuarCargaCB(artEncontrado) + ContinuarCargaCodigoOri(artEncontrado ) } - } - } + iBusquedaPor = 0 +// } +// } return@setOnKeyListener true } } @@ -385,7 +393,27 @@ class InventarioFragment : Fragment(), ProductosListAdapter.OnImageDotsClickList } } - // @SuppressLint("RestrictedApi") + private fun ContinuarCargaCodigoOri(artAcargar:List) { + + if (artAcargar.isNotEmpty() || !artAcargar.isNullOrEmpty()) {// TODO: Si lo encuentra en la BD + // TODO: ESCONDE EL TECLADO VIRTUAL AL PRESIONAR ENTER + val imm = requireActivity().getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager? + imm!!.hideSoftInputFromWindow(requireActivity().currentFocus?.windowToken, InputMethodManager.HIDE_NOT_ALWAYS) + + var bundle = Bundle() + bundle = bundleOf("ArrayDesc" to artAcargar) + bundle.putInt("numeroInv", InventarioNuevo) + navController.navigate(R.id.action_inventarioFragment_to_codigoOriFragment, bundle) + + } else {//TODO si no lo encuentra en la BD + val modalDialog = NoEncontradoSimple() + modalDialog.show(requireActivity().supportFragmentManager, "confirmDialog") + } + etCodigoBarras.focusable = View.FOCUSABLE + etCodigoBarras.setText("") + etCodigoBarras.selectAll() + } + private fun ContinuarCargaDesc(artAcargar: ArrayList) { //TODO DESPUES DE INGRESAR LA DESCRIPCION Y DE BUSCAR LOS CAINCIDENCIAS EN LA BASE SE VA A MOSTRAR LAS MISMAS //TODO SI LA CANTIDAD ENCONTRADA ES UNO, LO CARGO DIRECTAMENTE EN EL RV @@ -489,7 +517,6 @@ class InventarioFragment : Fragment(), ProductosListAdapter.OnImageDotsClickList etCodigoBarras.selectAll() } - fun DialogingresarCantidad(cnxt: Context, artAcargar: Articles?): Float { var cantidad = 0F val mDialogView = LayoutInflater.from(cnxt).inflate(R.layout.ingresar_cantidad, null) @@ -583,11 +610,12 @@ class InventarioFragment : Fragment(), ProductosListAdapter.OnImageDotsClickList mAlertDialog.dismiss() } } - suspend fun buscarCodiogoOriEnBD(CodOri: String): Articles? { + + suspend fun buscarCodiogoOriEnBD(CodOri: String): List { //TODO BUSQUEDA POR CODIGO DE BARRAS - var busqueda: Articles? = null + var busqueda: List return GlobalScope.async(Dispatchers.IO) { - busqueda = AppDb.getAppDb(requireContext())!!.ArticulosDAO()!!.findArticuloByCodOri(CodOri, SerchArea()) + busqueda = AppDb.getAppDb(requireContext())!!.ArticulosDAO()!!.findArticuloByCodOri(CodOri, SerchAreaInventario()) return@async busqueda }.await() } @@ -595,8 +623,8 @@ class InventarioFragment : Fragment(), ProductosListAdapter.OnImageDotsClickList suspend fun buscarCBEnBD(CodigoBarras: String): Articles? { //TODO BUSQUEDA POR CODIGO DE BARRAS var busqueda: Articles? = null - return GlobalScope.async(Dispatchers.IO) { - busqueda = AppDb.getAppDb(requireContext())!!.ArticulosDAO()!!.findArticuloByCodBar(CodigoBarras, SerchArea()) + return GlobalScope.async(IO) { + busqueda = AppDb.getAppDb(requireContext())!!.ArticulosDAO()!!.findArticuloByCodBar(CodigoBarras, SerchAreaInventario()) return@async busqueda }.await() } @@ -605,7 +633,7 @@ class InventarioFragment : Fragment(), ProductosListAdapter.OnImageDotsClickList //TODO BUSQUEDA POR DESCRIPCION var busqueda: List? = null return GlobalScope.async(Dispatchers.IO) { - busqueda = AppDb.getAppDb(requireContext())!!.ArticulosDAO()!!.findArticuloByDesc(descripcion, SerchArea()) + busqueda = AppDb.getAppDb(requireContext())!!.ArticulosDAO()!!.findArticuloByDesc(descripcion, SerchAreaInventario()) return@async busqueda }.await() } @@ -613,14 +641,14 @@ class InventarioFragment : Fragment(), ProductosListAdapter.OnImageDotsClickList suspend fun borrarArticulo(sector: String, codigo: String, inventario: String): Int? { //TODO BUSQUEDA POR DESCRIPCION var result: Int - return GlobalScope.async(Dispatchers.IO) { + return GlobalScope.async(IO) { result = AppDb.getAppDb(requireContext())!!.InvBodyDAO()!!.deleteItemFromInvBody(sector, codigo, inventario) return@async result }.await() } private suspend fun buscoArtEnRv(codigoBarras: String, sTipoBusqueda: Int): Int { - return GlobalScope.async(Dispatchers.IO) { + return GlobalScope.async(IO) { var indice = 0 var bEncontrado = false if (sTipoBusqueda == 0) {//TODO BUSQUEDA POR CODIGO DE BARRAS @@ -660,7 +688,7 @@ class InventarioFragment : Fragment(), ProductosListAdapter.OnImageDotsClickList suspend fun cambioCBporCodigoDebo(codigoBarras: String): Articles? { //TODO BUSQUEDA POR DESCRIPCION var busqueda: Articles? = null - return GlobalScope.async(Dispatchers.IO) { + return GlobalScope.async(IO) { busqueda = AppDb.getAppDb(requireContext())!!.ArticulosDAO()!!.findArticuloByCodBar(codigoBarras, SerchArea()) return@async busqueda }.await() @@ -685,7 +713,8 @@ class InventarioFragment : Fragment(), ProductosListAdapter.OnImageDotsClickList fun cargarRecicler(articulos: Articles, cant: Float) { //TODO CARGO EN LE RV - val item = ItemsRecycler(articulos.sector, articulos.codigo, articulos.descripcion, cant, articulos.codBar, articulos.codOrigen, articulos.balanza.toString(), articulos.de.toString()) + val item = ItemsRecycler(if (articulos.sector.toString().toInt()<9) "0${articulos.sector.toString()}" else articulos.sector.toString() + , articulos.codigo, articulos.descripcion, cant, articulos.codBar, articulos.codOrigen, articulos.balanza.toString(), articulos.de.toString()) listArticulos.add(item) viewAdapter = ProductosListAdapter(requireContext(), listArticulos, this) @@ -746,12 +775,17 @@ class InventarioFragment : Fragment(), ProductosListAdapter.OnImageDotsClickList return prodInclu } - private fun SerchArea(): Int { - if (sharedPreferences.contains("rbVentas")) if (sharedPreferences.getString("rbVentas", "").toString() == "1") iArea = 0 - if (sharedPreferences.contains("rbDeposito")) if (sharedPreferences.getString("rbDeposito", "").toString() == "1") iArea = 1 + private fun SerchArea(): Boolean { + if (sharedPreferences.contains("rbVentas")) if (sharedPreferences.getString("rbVentas", "").toString() == "1") iArea =false + if (sharedPreferences.contains("rbDeposito")) if (sharedPreferences.getString("rbDeposito", "").toString() == "1") iArea = true return iArea } + suspend fun SerchAreaInventario(): Boolean { + return GlobalScope.async(IO) { + return@async AppDb.getAppDb(requireActivity())!!.InvHeadDAO()!!.fetchAreaInvH(InventarioNuevo) + }.await() + } fun ObtenerFechaActual(): String? { //TODO OBTENGO FECHA Y HORA ACTUAL PARA LA CABECERA DEL INVENTARIO Y PARA CADA ITEM QUE SE INSERTA EN LA BD val current = LocalDateTime.now() @@ -784,7 +818,7 @@ class InventarioFragment : Fragment(), ProductosListAdapter.OnImageDotsClickList override fun onImageDotsClick(sector: String?, codigo: String?) { val bundle = Bundle() - bundle.putString("sector", sector) + bundle.putString("sector", sector!!.toInt().toString()) bundle.putString("codigo", codigo) bundle.putInt("numeroInv", InventarioNuevo) navController.navigate(R.id.action_inventarioFragment_to_detalleArtFragment, bundle) 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 453fd3b..760202e 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 @@ -4,15 +4,22 @@ import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.Filter +import android.widget.Filterable import androidx.recyclerview.widget.RecyclerView import com.focasoftware.deboinventariov20.Model.InvHead import com.focasoftware.deboinventariov20.R import com.focasoftware.deboinventariov20.UI.Utils.BaseViewHolder import kotlinx.android.synthetic.main.item_principal.view.* +import java.util.* +import kotlin.collections.ArrayList class InventarioListAdapter(private val context: Context, private val inv: List, private val itemClickListener: OnInventarioClickListener) : - RecyclerView.Adapter>() { - + RecyclerView.Adapter>(), Filterable { + var invFiltrados: List + init { + invFiltrados=inv + } interface OnInventarioClickListener { fun onItemClick(inventario: String?) } @@ -40,8 +47,33 @@ class InventarioListAdapter(private val context: Context, private val inv: List< } } + override fun getFilter(): Filter { + return object : Filter() { + override fun performFiltering(charSequence: CharSequence): FilterResults { + val charString = charSequence.toString() -} + invFiltrados = if (charString.isEmpty()) { + inv + } else { + val filteredList = ArrayList() + for (row in inv) { + if (row.lugar.toString().contains(charString.toLowerCase(Locale.ROOT))) { + filteredList.add(row) + } + } + filteredList + } + val filterResults = FilterResults() + filterResults.values=invFiltrados + return filterResults + } + override fun publishResults(charSequence: CharSequence?, filterResults: FilterResults?) { + invFiltrados = filterResults!!.values as ArrayList + notifyDataSetChanged() + } + } + } +} \ No newline at end of file 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 8a06093..d7e22de 100644 --- a/app/src/main/java/com/focasoftware/deboinventariov20/UI/main/MainFragment.kt +++ b/app/src/main/java/com/focasoftware/deboinventariov20/UI/main/MainFragment.kt @@ -6,7 +6,9 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import android.widget.* +import android.widget.CheckBox +import android.widget.ImageButton +import android.widget.TextView import androidx.fragment.app.Fragment import androidx.navigation.NavController import androidx.navigation.Navigation @@ -20,6 +22,7 @@ import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.async import kotlinx.coroutines.launch import java.util.* +import java.util.Locale.filter class MainFragment : Fragment(), InventarioListAdapter.OnInventarioClickListener { private lateinit var inventarios: List @@ -27,33 +30,38 @@ class MainFragment : Fragment(), InventarioListAdapter.OnInventarioClickListener private lateinit var rcInventario: RecyclerView private lateinit var viewAdapter: RecyclerView.Adapter<*> private lateinit var viewManager: RecyclerView.LayoutManager -// private var listIvn2 = List() -private var listIvn2 = ArrayList() + private var listIvn2 = ArrayList() private lateinit var navController: NavController private lateinit var sharedPreferences: SharedPreferences private var cantidadInventarios: Int = 0 + private var adapterFilter: InventarioListAdapter? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) sharedPreferences = requireActivity().getSharedPreferences("SP_INFO", Context.MODE_PRIVATE) } - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { + override fun onCreateView( + inflater: LayoutInflater, + container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { var bAbiertoCerrado = false val v = inflater.inflate(R.layout.fragment_main, container, false) val tvInvDinamicos = v.findViewById(R.id.tvInvDinamicos) val txtDeposito = v.findViewById(R.id.txtDeposito) - val ivSort19= v.findViewById(R.id.ivSort19) - val ivSort91= v.findViewById(R.id.ivSort91) - val cbVentas= v.findViewById(R.id.cbVentas) - val cbDeposito= v.findViewById(R.id.cbDeposito) - val tvTipo = v.findViewById(R.id.tvTipo) + val ivSort19 = v.findViewById(R.id.ivSort19) + val ivSort91 = v.findViewById(R.id.ivSort91) + val cbVentas = v.findViewById(R.id.cbVentas) + val cbDeposito = v.findViewById(R.id.cbDeposito) + val tvTipo = v.findViewById(R.id.tvTipo) rcInventario = v.findViewById(R.id.rcInventario) GlobalScope.launch(Dispatchers.Main) { inventarios = buscarEnBDInvHead() for ((i, item) in inventarios.withIndex()) { - val inv = InvHead(inventarios[i].invNum, + val inv = InvHead( + inventarios[i].invNum, inventarios[i].descripcion, inventarios[i].estado, inventarios[i].fechaInicio, @@ -61,11 +69,12 @@ private var listIvn2 = ArrayList() inventarios[i].prodContados, inventarios[i].lugar, inventarios[i].stDesc, - inventarios[i].proNoCont) + inventarios[i].proNoCont + ) cargarRecicler(inv) cantidadInventarios = i + 1 } - tvInvDinamicos.text = "Inventarios Dinamicos (${cantidadInventarios.toString()}) +" + tvInvDinamicos.text = "Inventarios Dinamicos ($cantidadInventarios) +" tvInvDinamicos.setOnClickListener { if (!bAbiertoCerrado) { bAbiertoCerrado = true @@ -76,7 +85,8 @@ private var listIvn2 = ArrayList() cbVentas.visibility = View.VISIBLE cbDeposito.visibility = View.VISIBLE tvTipo.visibility = View.VISIBLE - tvInvDinamicos.text = "Inventarios Dinamicos (${cantidadInventarios.toString()}) -" + tvInvDinamicos.text = + "Inventarios Dinamicos ($cantidadInventarios) -" } else { bAbiertoCerrado = false rcInventario.visibility = View.GONE @@ -86,13 +96,14 @@ private var listIvn2 = ArrayList() cbVentas.visibility = View.GONE cbDeposito.visibility = View.GONE tvTipo.visibility = View.GONE - tvInvDinamicos.text = "Inventarios Dinamicos (${cantidadInventarios.toString()}) +" + tvInvDinamicos.text = + "Inventarios Dinamicos ($cantidadInventarios) +" } } ivSort19.setOnClickListener { - ordenado= inventarios.sortedByDescending { - it.invNum - } + ordenado = inventarios.sortedByDescending { + it.invNum + } viewAdapter = InventarioListAdapter(requireContext(), ordenado, this@MainFragment) viewManager = LinearLayoutManager(requireContext()) @@ -101,11 +112,11 @@ private var listIvn2 = ArrayList() layoutManager = viewManager } viewAdapter.notifyDataSetChanged() - ivSort19.visibility=View.INVISIBLE - ivSort91.visibility=View.VISIBLE + ivSort19.visibility = View.INVISIBLE + ivSort91.visibility = View.VISIBLE } ivSort91.setOnClickListener { - ordenado= inventarios.sortedBy { + ordenado = inventarios.sortedBy { it.invNum } viewAdapter = InventarioListAdapter(requireContext(), ordenado, this@MainFragment) @@ -116,10 +127,23 @@ private var listIvn2 = ArrayList() layoutManager = viewManager } viewAdapter.notifyDataSetChanged() - ivSort91.visibility=View.INVISIBLE - ivSort19.visibility=View.VISIBLE + ivSort91.visibility = View.INVISIBLE + ivSort19.visibility = View.VISIBLE } } + +// cbVentas.setOnClickListener { +// if (cbVentas.isChecked) { +// rcInventario.apply { +// adapter = viewAdapter +// layoutManager = viewManager +// } +// adapterFilter. +// adapterFilter?.filter?.filter("Deposito") +// adapterFilter?.notifyDataSetChanged() +// viewAdapter.notifyDataSetChanged() +// } +// } return v } diff --git a/app/src/main/res/layout/fragment_codigo_ori.xml b/app/src/main/res/layout/fragment_codigo_ori.xml new file mode 100644 index 0000000..4e03208 --- /dev/null +++ b/app/src/main/res/layout/fragment_codigo_ori.xml @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_descripcion.xml b/app/src/main/res/layout/fragment_descripcion.xml index 1f06e8b..76bc496 100644 --- a/app/src/main/res/layout/fragment_descripcion.xml +++ b/app/src/main/res/layout/fragment_descripcion.xml @@ -1,14 +1,11 @@ - - - + - - - - - - - - - - - - - + + + + + + + + + + + + + - + - + - + diff --git a/app/src/main/res/layout/fragment_detalle_art.xml b/app/src/main/res/layout/fragment_detalle_art.xml index 54475bf..18a9f54 100644 --- a/app/src/main/res/layout/fragment_detalle_art.xml +++ b/app/src/main/res/layout/fragment_detalle_art.xml @@ -46,7 +46,7 @@ android:layout_marginTop="10dp" android:text="Sector:" android:textAppearance="@style/TextAppearance.AppCompat.Large" - android:textSize="14sp" + android:textSize="15sp" app:layout_constraintEnd_toStartOf="@id/tvSector" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/tvTime" /> @@ -55,13 +55,12 @@ android:id="@+id/tvSector" android:layout_width="0dp" android:layout_height="wrap_content" - android:layout_marginTop="10dp" android:text="" android:textAppearance="@style/TextAppearance.AppCompat.Large" - android:textSize="14sp" + android:textSize="18sp" + app:layout_constraintBaseline_toBaselineOf="@+id/textView19" app:layout_constraintEnd_toStartOf="@id/textView18" - app:layout_constraintStart_toEndOf="@id/textView19" - app:layout_constraintTop_toBottomOf="@+id/tvTime" /> + app:layout_constraintStart_toEndOf="@id/textView19" /> @@ -79,13 +78,12 @@ android:id="@+id/tvCodigo" android:layout_width="0dp" android:layout_height="wrap_content" - android:layout_marginTop="10dp" android:text="" android:textAppearance="@style/TextAppearance.AppCompat.Large" - android:textSize="14sp" + android:textSize="18sp" + app:layout_constraintBaseline_toBaselineOf="@+id/textView18" app:layout_constraintEnd_toStartOf="@+id/textView3" - app:layout_constraintStart_toEndOf="@id/textView18" - app:layout_constraintTop_toBottomOf="@+id/tvTime" /> + app:layout_constraintStart_toEndOf="@id/textView18" /> @@ -103,13 +101,12 @@ android:id="@+id/tvDeposito" android:layout_width="0dp" android:layout_height="wrap_content" - android:layout_marginTop="10dp" android:text="" android:textAppearance="@style/TextAppearance.AppCompat.Large" - android:textSize="14sp" + android:textSize="18sp" + app:layout_constraintBaseline_toBaselineOf="@+id/textView3" app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintStart_toEndOf="@id/textView3" - app:layout_constraintTop_toBottomOf="@+id/tvTime" /> + app:layout_constraintStart_toEndOf="@id/textView3" /> @@ -146,7 +143,7 @@ android:layout_marginTop="10dp" android:text="C. de barras:" android:textAppearance="@style/TextAppearance.AppCompat.Large" - android:textSize="14sp" + android:textSize="15sp" app:layout_constraintEnd_toStartOf="@id/tvCodigoBarras" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/tvDescripcion" /> @@ -155,13 +152,12 @@ android:id="@+id/tvCodigoBarras" android:layout_width="0dp" android:layout_height="wrap_content" - android:layout_marginTop="10dp" android:text="" android:textAppearance="@style/TextAppearance.AppCompat.Large" - android:textSize="14sp" + android:textSize="18sp" + app:layout_constraintBaseline_toBaselineOf="@+id/textView1" app:layout_constraintEnd_toStartOf="@id/textView2" - app:layout_constraintStart_toEndOf="@id/textView1" - app:layout_constraintTop_toBottomOf="@+id/tvDescripcion" /> + app:layout_constraintStart_toEndOf="@id/textView1" /> @@ -179,13 +175,12 @@ android:id="@+id/tvCodigoOrigen" android:layout_width="0dp" android:layout_height="wrap_content" - android:layout_marginTop="10dp" android:text="" android:textAppearance="@style/TextAppearance.AppCompat.Large" - android:textSize="14sp" + android:textSize="18sp" + app:layout_constraintBaseline_toBaselineOf="@+id/textView2" app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintStart_toEndOf="@id/textView2" - app:layout_constraintTop_toBottomOf="@+id/tvDescripcion" /> + app:layout_constraintStart_toEndOf="@id/textView2" /> @@ -205,13 +200,12 @@ android:id="@+id/tvExiVenta" android:layout_width="0dp" android:layout_height="wrap_content" - android:layout_marginTop="10dp" android:text="" android:textAppearance="@style/TextAppearance.AppCompat.Large" - android:textSize="14sp" + android:textSize="18sp" + app:layout_constraintBaseline_toBaselineOf="@+id/textView5" app:layout_constraintEnd_toStartOf="@id/textView7" - app:layout_constraintStart_toEndOf="@id/textView5" - app:layout_constraintTop_toBottomOf="@+id/tvCodigoBarras" /> + app:layout_constraintStart_toEndOf="@id/textView5" /> @@ -229,88 +223,111 @@ android:id="@+id/tvExiDeposito" android:layout_width="0dp" android:layout_height="wrap_content" - android:layout_marginTop="10dp" android:text="" android:textAppearance="@style/TextAppearance.AppCompat.Large" - android:textSize="14sp" - app:layout_constraintEnd_toStartOf="@+id/textView8" - app:layout_constraintStart_toEndOf="@id/textView7" - app:layout_constraintTop_toBottomOf="@+id/tvCodigoBarras" /> + android:textSize="18sp" + app:layout_constraintBaseline_toBaselineOf="@+id/textView7" + app:layout_constraintEnd_toStartOf="@+id/textView9" + app:layout_constraintStart_toEndOf="@id/textView7" /> + android:textSize="18sp" + app:layout_constraintBaseline_toBaselineOf="@+id/textView9" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toEndOf="@id/textView9" /> + + + + android:textSize="15sp" + app:layout_constraintEnd_toStartOf="@id/tvBal" + app:layout_constraintStart_toEndOf="@id/tvCosto" + app:layout_constraintTop_toBottomOf="@+id/tvExiVenta" /> + app:layout_constraintStart_toEndOf="@+id/textView10" /> + app:layout_constraintTop_toBottomOf="@+id/textView8" /> + app:layout_constraintHorizontal_bias="0.003" + app:layout_constraintStart_toEndOf="@id/textView11" + app:layout_constraintTop_toBottomOf="@+id/tvBal" /> diff --git a/app/src/main/res/layout/ingresar_cantidad.xml b/app/src/main/res/layout/ingresar_cantidad.xml index 16eb1e2..eab6810 100644 --- a/app/src/main/res/layout/ingresar_cantidad.xml +++ b/app/src/main/res/layout/ingresar_cantidad.xml @@ -52,18 +52,18 @@ app:layout_constraintTop_toBottomOf="@id/barraSuperior"> - + android:maxLength="8" + android:text="" + android:textSize="20sp" /> + + + app:layout_constraintStart_toEndOf="@+id/tvCodigo" + app:layout_constraintTop_toTopOf="parent" /> + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/navigation/mobile_navigation.xml b/app/src/main/res/navigation/mobile_navigation.xml index d6ccc12..a8c3f81 100644 --- a/app/src/main/res/navigation/mobile_navigation.xml +++ b/app/src/main/res/navigation/mobile_navigation.xml @@ -69,6 +69,9 @@ + + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 5136c49..fada822 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -30,7 +30,6 @@ Ingrese la cantidad contada Inventarios Dinamicos de Ventas - Confirmar Cancelar