ConfiguracionFragment.kt 16.7 KB
package com.focasoftware.deboinventariov20.UI.configuracion

import android.content.Context
import android.content.SharedPreferences
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.*
import androidx.fragment.app.Fragment
import androidx.lifecycle.lifecycleScope
import androidx.navigation.NavController
import androidx.navigation.Navigation
import androidx.navigation.fragment.findNavController
import com.focasoftware.deboinventariov20.DB.DataBase.AppDb
import com.focasoftware.deboinventariov20.Model.*
import com.focasoftware.deboinventariov20.R
import com.focasoftware.deboinventariov20.UI.MainActivity
import com.focasoftware.deboinventariov20.UI.Utils.*
import kotlinx.android.synthetic.main.fragment_configuracion.*
import kotlinx.coroutines.*
import kotlinx.coroutines.Dispatchers.Main
import retrofit2.Call
import retrofit2.Callback
import retrofit2.Response
import java.net.SocketTimeoutException
import kotlin.math.absoluteValue


class ConfiguracionFragment : Fragment() {

    lateinit var sharedPreferences: SharedPreferences
    private lateinit var navController: NavController
    var itemSelect: Int = 0
    var indexSelect: Int = 0

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        sharedPreferences = (activity as MainActivity).getSharedPreferences("SP_INFO", Context.MODE_PRIVATE)
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        navController = Navigation.findNavController(view)

        GlobalScope.launch(Main) {
            val listServer = mutableListOf<String>()
            for (server in getDescServers()) {
                listServer.add((if (server.servNum < 9) "0" + server.servNum.toString() else server.servNum.toString()) + " - " + server.descripcion.toString())
            }
            val adapterSpServer = ArrayAdapter(
                requireContext(),
                R.layout.support_simple_spinner_dropdown_item,
                listServer
            )
            spServidor.adapter = adapterSpServer
            if (sharedPreferences.contains("ServerPredeterminado")) {
                spServidor.setSelection(
                    sharedPreferences.getString("ServerPredeterminado", "").toString().toInt()
                )
            } else (spServidor.setSelection(0))
        }
    }

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {

        val v = inflater.inflate(R.layout.fragment_configuracion, container, false)
        val btnGuardar = v.findViewById<Button>(R.id.btnGuardar)
        val rbProInclu = v.findViewById<RadioButton>(R.id.rbProInclu)
        val rbProNoInclu = v.findViewById<RadioButton>(R.id.rbProNoInclu)
        val cbHabiLectura = v.findViewById<CheckBox>(R.id.cbHabiLectura)
        val cbMostrarStock = v.findViewById<CheckBox>(R.id.cbMostrarStock)
//        val rbCodigoBarras = v.findViewById<RadioButton>(R.id.rbCodigoBarras)
//        val rbCodigoDebo = v.findViewById<RadioButton>(R.id.rbCodigoDebo)
//        val rbCodigoOrigen = v.findViewById<RadioButton>(R.id.rbCodigoOrigen)
        val rbDeposito = v.findViewById<RadioButton>(R.id.rbDeposito)
        val rbVentas = v.findViewById<RadioButton>(R.id.rbVentas)
        val btnAgregarServidor = v.findViewById<Button>(R.id.btnAgregarServidor)
        val spServidor = v.findViewById<Spinner>(R.id.spServidor)
        val btnValidarServidor = v.findViewById<Button>(R.id.btnValidarServidor)
        val cbAskTimeServerToStart = v.findViewById<CheckBox>(R.id.cbAskTimeServerToStart)

        if (sharedPreferences.contains("etRuta")) if (sharedPreferences.contains("rbProInclu")) {
            if (sharedPreferences.getString("rbProInclu", "").toString() == "0") {
                rbProInclu.isChecked = false
                rbProNoInclu.isChecked = true
            } else if (sharedPreferences.getString("rbProInclu", "").toString() == "1") {
                rbProInclu.isChecked = true
                rbProNoInclu.isChecked = false
            }
        } else (sharedPreferences.getString("rbProInclu", "").toString() == "")

        if (sharedPreferences.contains("rbProNoInclu")) {
            if (sharedPreferences.getString("rbProNoInclu", "").toString() == "0") {
                rbProNoInclu.isChecked = false
                rbProInclu.isChecked = true
            } else if (sharedPreferences.getString("rbProNoInclu", "").toString() == "1") {
                rbProNoInclu.isChecked = true
                rbProInclu.isChecked = false
            }
        } else (sharedPreferences.getString("rbProNoInclu", "").toString() == "")

        if (sharedPreferences.contains("cbHabiLectura")) {
            if (sharedPreferences.getString("cbHabiLectura", "").toString() == "0") {
                cbHabiLectura.isChecked = false
            } else if (sharedPreferences.getString("cbHabiLectura", "").toString() == "1") {
                cbHabiLectura.isChecked = true
            }
        } else (sharedPreferences.getString("cbHabiLectura", "").toString() == "")

        if (sharedPreferences.contains("cbMostrarStock")) {
            if (sharedPreferences.getString("cbMostrarStock", "").toString() == "0") {
                cbMostrarStock.isChecked = false
            } else if (sharedPreferences.getString("cbMostrarStock", "").toString() == "1") {
                cbMostrarStock.isChecked = true
            }
        } else (sharedPreferences.getString("cbMostrarStock", "").toString() == "")

        if (sharedPreferences.contains("rbVentas")) {
            if (sharedPreferences.getString("rbVentas", "").toString() == "0") {
                rbVentas.isChecked = false
                rbDeposito.isChecked = true
            } else if (sharedPreferences.getString("rbVentas", "").toString() == "1") {
                rbVentas.isChecked = true
                rbDeposito.isChecked = false
            }
        } else (sharedPreferences.getString("rbVentas", "").toString() == "")

        if (sharedPreferences.contains("rbDeposito")) {
            if (sharedPreferences.getString("rbDeposito", "").toString() == "0") {
                rbDeposito.isChecked = false
                rbVentas.isChecked = true
            } else if (sharedPreferences.getString("rbDeposito", "").toString() == "1") {
                rbDeposito.isChecked = true
                rbVentas.isChecked = false
            }
        } else (sharedPreferences.getString("rbDeposito", "").toString() == "")

//        if (sharedPreferences.contains("rbCodigoDebo")) {
//            if (sharedPreferences.getString("rbCodigoDebo", "").toString() == "0") {
//                rbCodigoDebo.isChecked = false
//                rbCodigoOrigen.isChecked = false
//                rbCodigoBarras.isChecked = false
//            } else if (sharedPreferences.getString("rbCodigoDebo", "").toString() == "1") {
//                rbCodigoDebo.isChecked = true
//                rbCodigoOrigen.isChecked = false
//                rbCodigoBarras.isChecked = false
//            }
//        } else (sharedPreferences.getString("rbCodigoDebo", "").toString() == "")
//
//        if (sharedPreferences.contains("rbCodigoOrigen")) {
//            if (sharedPreferences.getString("rbCodigoOrigen", "").toString() == "0") {
//                rbCodigoOrigen.isChecked = false
//            } else if (sharedPreferences.getString("rbCodigoOrigen", "").toString() == "1") {
//                rbCodigoOrigen.isChecked = true
//            }
//        } else (sharedPreferences.getString("rbCodigoOrigen", "").toString() == "")

//        if (sharedPreferences.contains("rbCodigoBarras")) {
//            if (sharedPreferences.getString("rbCodigoBarras", "").toString() == "0") {
//                rbCodigoBarras.isChecked = false
//            } else if (sharedPreferences.getString("rbCodigoBarras", "").toString() == "1") {
//                rbCodigoBarras.isChecked = true
//            }
//        } else (sharedPreferences.getString("rbCodigoBarras", "").toString() == "")

        if (sharedPreferences.contains("cbAskTimeServerToStart")) {
            if (sharedPreferences.getString("cbAskTimeServerToStart", "").toString() == "0") {
                cbAskTimeServerToStart.isChecked = false
            } else if (sharedPreferences.getString("cbAskTimeServerToStart", "").toString() == "1") {
                cbAskTimeServerToStart.isChecked = true
            }
        } else (sharedPreferences.getString("cbAskTimeServerToStart", "").toString() == "")


        btnGuardar.setOnClickListener {
            guardarPreferencias()
            GlobalScope.launch(Main) {

                val serverBajada = AppDb.getAppDb((activity as MainActivity))!!.ServeInvDao()!!.fetchServerPreOne()
                if (serverBajada != null) {
                    if (serverBajada.direccion.isNullOrEmpty()) {
                        val modalDialog = NoServerConf()
                        modalDialog.show((activity as MainActivity).supportFragmentManager, "confirmDialog")
                    } else {
                        BASE_URL = serverBajada.direccion.toString() + ":" + serverBajada.puertoBajada.toString() + "/"
                        val call: Call<List<Time?>?>? = WebService.instance
                            ?.createService(WebServiceApi::class.java)
                            ?.getTime()
                        call!!.enqueue(object : Callback<List<Time?>?> {
                            override fun onResponse(call: Call<List<Time?>?>?, response: Response<List<Time?>?>) {
                                if (response.code() == 200) {
                                    try {
                                        val timeServer =
                                            response.body()?.get(0)?.dia + "/" +
                                                    response.body()?.get(0)?.mes + "/" +
                                                    response.body()?.get(0)?.ano + " " +
                                                    response.body()?.get(0)?.hora + ":" +
                                                    response.body()?.get(0)?.minutos + ":" +
                                                    response.body()?.get(0)?.segundos
                                        val horaServer = response.body()?.get(0)?.hora + "" +
                                                response.body()?.get(0)?.minutos + "" +
                                                response.body()?.get(0)?.segundos
                                        val fechaServer = response.body()?.get(0)?.dia + "" +
                                                response.body()?.get(0)?.mes + "" +
                                                response.body()?.get(0)?.ano
                                        if (!askTimeServer(timeServer, horaServer, fechaServer)) {
//                                                Toast.makeText(v.context, "Los Datos se guardaron correctamente", Toast.LENGTH_SHORT).show()
//                                                navController.navigate(R.id.action_configuracionFragment_to_mainFragment2)
                                        }
                                    } catch (e: SocketTimeoutException) {

                                    }
                                } else if (response.code() == 400) {
                                }
                            }

                            override fun onFailure(call: Call<List<Time?>?>?, t: Throwable?) {}
                        })

                            Toast.makeText(v.context, "Los Datos se guardaron correctamente", Toast.LENGTH_SHORT).show()
                            navController.navigate(R.id.action_configuracionFragment_to_mainFragment2)

                    }
                }
            }
        }
        btnAgregarServidor.setOnClickListener { findNavController().navigate(R.id.servidoresFragment) }

        spServidor.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
            override fun onNothingSelected(parent: AdapterView<*>?) {}
            override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
                itemSelect = parent!!.getItemAtPosition(position).toString().substring(0, 2).toInt()
                indexSelect = position
            }
        }

        btnValidarServidor.setOnClickListener {
            GlobalScope.launch(Main) {
                val serverPre = fetchServer()
                if (serverPre != null) {
                    if (isConnectedToThisServer(serverPre.direccion.toString().substring(7, serverPre.direccion.toString().length))) {
                        val modalDialog = ServerValido()
                        modalDialog.show((activity as MainActivity).supportFragmentManager, "confirmDialog")
                    } else {
                        val modalDialog = ServerNoValido()
                        modalDialog.show((activity as MainActivity).supportFragmentManager, "confirmDialog")
                    }
                }
            }
        }

        rbVentas.setOnClickListener {
            val modalDialog = SelAreaInventarioVentas()
            modalDialog.show((activity as MainActivity).supportFragmentManager, "confirmDialog")
        }

        rbDeposito.setOnClickListener {
            val modalDialog = SelAreaInventarioDeposito()
            modalDialog.show((activity as MainActivity).supportFragmentManager, "confirmDialog")
        }
        return v
    }

    private suspend fun fetchServer(): ServeInv? {
        return GlobalScope.async(Dispatchers.IO) {
            return@async AppDb.getAppDb((activity as MainActivity))!!.ServeInvDao()!!.fetchServer(itemSelect)
        }.await()
    }

    private suspend fun getDescServers(): List<ServeInv> {
        return GlobalScope.async(Dispatchers.IO) {
            return@async AppDb.getAppDb((activity as MainActivity))!!.ServeInvDao()!!.fetchAllServers()
        }.await()
    }

    fun guardarPreferencias() {
        try {
            val editor = sharedPreferences.edit()

            if (etRuta.text.isNotEmpty()) editor?.putString("etRuta", etRuta.text.toString())

            if (rbProInclu.isChecked) editor?.putString("rbProInclu", "1") else editor?.putString("rbProInclu", "0")
            if (rbProNoInclu.isChecked) editor?.putString("rbProNoInclu", "1") else editor?.putString("rbProNoInclu", "0")
            if (cbHabiLectura.isChecked) editor?.putString("cbHabiLectura", "1") else editor?.putString("cbHabiLectura", "0")
            if (cbMostrarStock.isChecked) editor?.putString("cbMostrarStock", "1") else editor?.putString("cbMostrarStock", "0")
            if (rbVentas.isChecked) editor?.putString("rbVentas", "1") else editor?.putString("rbVentas", "0")
            if (rbDeposito.isChecked) editor?.putString("rbDeposito", "1") else editor?.putString("rbDeposito", "0")
            if (cbAskTimeServerToStart.isChecked) editor?.putString("cbAskTimeServerToStart", "1") else editor?.putString("cbAskTimeServerToStart", "0")
            editor?.putString("ServerPredeterminado", indexSelect.toString())
            updateServerPreInZero()
            updateServerPre(itemSelect)

            editor?.apply()
            editor.commit()

        } catch (e: Exception) {
            Toast.makeText(requireContext(), "Error ", Toast.LENGTH_LONG).show()
            e.printStackTrace()
        }
    }

    private fun askTimeServer(timeServer: String, horaServer: String, fechaServer: String): Boolean {

        var existeDiferencias = false
        val horaAct = obtenerHoraActual().toDouble()
        val fechaAct = obtenerDiaActual().toDouble()
        val difFecha = fechaAct - fechaServer.toDouble()
        val difHora = horaAct - horaServer.toDouble()
        if (difFecha.absoluteValue > 0) existeDiferencias = true
        if (difHora.absoluteValue > 130) existeDiferencias = true

        if (existeDiferencias) {
            dialogoHoraServer((activity as MainActivity), requireContext(), obtenerFechaActual(), timeServer)
        }
        return existeDiferencias
    }

    private fun updateServerPreInZero() {
        lifecycleScope.launch {
            withContext(Dispatchers.IO) {
//                val activity: FragmentActivity? = activity
//                if (activity != null && isAdded) {
                AppDb.getAppDb((activity as MainActivity))!!.ServeInvDao()!!.UpdateServerPreInZero()
//                }
            }
        }
    }

    private fun updateServerPre(server: Int) {
        lifecycleScope.launch {
            withContext(Dispatchers.IO) {
//                val activity: FragmentActivity? = activity
//                if (activity != null) {
                AppDb.getAppDb((activity as MainActivity))!!.ServeInvDao()!!.UpdateServerPre(server)
//                }
            }
        }
    }
}