DescripcionFragment.kt 11.9 KB
package com.focasoftware.deboinventariov20.ui.descripcionFragment

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 android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Button
import androidx.fragment.app.Fragment
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.afollestad.materialdialogs.MaterialDialog
import com.afollestad.materialdialogs.input.input
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.inventario.InventarioFragment
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.*

class DescripcionFragment : Fragment() {
    private var artAcargar2: List<Articles>? = null
    private var listArticulos2: List<Articles>? = null
    lateinit var viewAdapter2: RecyclerView.Adapter<*>
    private lateinit var viewManager2: RecyclerView.LayoutManager
    private lateinit var rcDescripcion: 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 indice = 0
    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<Articles>
            numeroInventario = requireArguments().getInt("numeroInv")
        }
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        navController = Navigation.findNavController(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)
        val btnSalir = v.findViewById<Button>(R.id.btnSalir)

        IngresarRecicler(artAcargar2)

        btnSalir.setOnClickListener {
            VolverAinventario()
        }
        return v
    }

    fun IngresarRecicler(articulos: List<Articles>?) {

        viewAdapter2 = DescripcionListAdapter(articulos)
        viewManager2 = LinearLayoutManager(requireContext())

        rcDescripcion.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) {

                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())
                    if (artCargadoEnBD == null) {
//                        val type = InputType.TYPE_CLASS_NUMBER
//
//                        MaterialDialog(requireContext()).show {
//                            title(text = "Producto: ${(viewAdapter2 as DescripcionListAdapter).items2?.get(indice)!!.descripcion}")
//                            message(R.string.sMensajeEncontrado)
//                            input(waitForPositiveButton = false, hint = "99.99", inputType = type) { materialDialog, charSequence ->
//                                cantidad = 0F
//                                cantidad = charSequence.toString().toFloat()
//                            }
//                            positiveButton(R.string.btnOk) {
                        val mDialogView = LayoutInflater.from(context).inflate(R.layout.ingresar_cantidad, null)
                        val mBuilder = AlertDialog.Builder(context).setView(mDialogView).setCancelable(false)
                        mDialogView.tvTitulo.text="Producto '${(viewAdapter2 as DescripcionListAdapter).items2?.get(indice)!!.descripcion}'."
                        val mAlertDialog = mBuilder.show()
                        mDialogView.btnAceptar.setOnClickListener {
                            cantidad = mDialogView.etCantidad.text.toString().toFloat()
                                val body = InvBody(numeroInventario,
                                    (viewAdapter2 as DescripcionListAdapter).items2?.get(indice)!!.sector,
                                    // TODO: PREPARO PARA MANDAR A CARGAR EN LA BD
                                    (viewAdapter2 as DescripcionListAdapter).items2?.get(indice)!!.codigo,
                                    (viewAdapter2 as DescripcionListAdapter).items2?.get(indice)!!.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,
                                    InventarioFragment().ObtenerFechaActual(),
                                    InventarioFragment().ObtenerFechaActual())
                                InsertarArtEnDB(body)// TODO: MANDO A CARGAR A LA BASE DE DATOS
                                VolverAinventario()
                            mAlertDialog.dismiss()
//                                dismiss()
                            }
//                        }.cancelOnTouchOutside(false).cornerRadius(10F)

                    } 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)
                        mDialogView.tvCantInicial.text = artCargadoEnBD!!.cantTomada

                        val mAlertDialog = mBuilder.show()
                        mDialogView.rbSumar.setOnClickListener {
                            if (!mDialogView.tvNuevaCantidad.text.isNullOrEmpty()) {
                                mDialogView.tvgenerico4.text = (mDialogView.tvCantInicial.text.toString().toFloat() + mDialogView.tvNuevaCantidad.text.toString().toFloat()).toString()
                            }
                        }
                        mDialogView.rbRestar.setOnClickListener {
                            if (!mDialogView.tvNuevaCantidad.text.isNullOrEmpty()) {
                                if (mDialogView.tvCantInicial.text.toString().toFloat() >= mDialogView.tvNuevaCantidad.text.toString().toFloat()) {
                                    mDialogView.tvgenerico4.text = (mDialogView.tvCantInicial.text.toString().toFloat() - mDialogView.tvNuevaCantidad.text.toString().toFloat()).toString()
                                }
                            }
                        }
                        mDialogView.rbMdodificar.setOnClickListener {
                            if (!mDialogView.tvNuevaCantidad.text.isNullOrEmpty()) {
                                mDialogView.tvgenerico4.text = (mDialogView.tvNuevaCantidad.text.toString().toFloat()).toString()
                            }
                        }
                        mDialogView.btnAceptar.setOnClickListener {
                            val name = mDialogView.tvgenerico4.text.toString().toFloat()
                            updateCantidad((viewAdapter2 as DescripcionListAdapter).items2?.get(indice)!!.sector.toString(),   (viewAdapter2 as DescripcionListAdapter).items2?.get(indice)!!.codigo
                                .toString(), name)
                            VolverAinventario()
                            mAlertDialog.dismiss()
                        }
                        mDialogView.dialogCancelBtn.setOnClickListener {
                            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(rcDescripcion)

    }

    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)
                }

            }
        }
    }
}