Untitled

 avatar
unknown
plain_text
2 years ago
46 kB
3
Indexable
package com.android.kepr.ui.filters

import android.database.CursorWindow
import android.os.Bundle
import android.text.Editable
import android.text.TextWatcher
import android.util.Log
import android.view.View
import android.view.View.VISIBLE
import android.widget.AdapterView
import android.widget.Spinner
import androidx.core.view.isVisible
import androidx.fragment.app.FragmentManager
import androidx.fragment.app.FragmentTransaction
import androidx.sqlite.db.SimpleSQLiteQuery
import com.android.kepr.R
import com.android.kepr.data.db.AgentDatabase
import com.android.kepr.data.db.AppExecutors
import com.android.kepr.data.domain.apiresponse.*
import com.android.kepr.ui.base.BaseFragment
import com.android.kepr.ui.filters.adapters.FiltersAdapter
import com.android.kepr.ui.scanner.adapter.*
import com.android.kepr.utils.Utils
import com.google.android.material.textfield.TextInputLayout
import kotlinx.android.synthetic.main.fragment_filters.*
import java.lang.reflect.Field
import java.lang.reflect.Method


class FilterFragment : BaseFragment(R.layout.fragment_filters), FiltersAdapter.ItemClickListener {

    private var isDataForAssetClass: Boolean = false
    private var isDataForUpdatedBuilding: Boolean = false
    private var isDataForUpdatedRoom: Boolean = false
    private var spinnerFilterSelected: Boolean? = false
    private var spinnerFilterName: String? = ""
    private var filtersObjListing: ArrayList<FiltersObject> = ArrayList()
    private lateinit var listAllBuildingData: List<BuildingDataObject>
    private lateinit var listAllRoomData: List<RoomDataObject>
    private var isSpinnerTouched = false
    private lateinit var agentDatabase: AgentDatabase
    private var roomPosition: Int? = null
    private var updatedRoomPosition: Int? = null
    private var updatedBuildingPosition: Int? = null
    private var buildingPosition: Int? = null
    private var roomDataObj: RoomDataObject? = null
    private var buildingDataObj: BuildingDataObject? = null
    private var updatedRoomDataObj: RoomDataObject? = null
    private var updatedBuildingDataObj: BuildingDataObject? = null
    private var roomNumber: String? = ""
    private var roomName: String? = ""
    private lateinit var buildingName: String
    private lateinit var updatedBuildingName: String
    private var isDataForBuilding: Boolean = false
    private var isDataForRoom: Boolean = false
    private lateinit var buildingId: String
    private lateinit var updatedBuildingId: String


    private var departmentDataObj: DepartmentDataObject? = null
    private var custodiansDataObj: CustodiansDataObject? = null
    private var departmentID: String? = ""
    private var departmentName: String? = ""
    private var custodiansID: String? = ""
    private var custodiansName: String? = ""
    private var isDataForCustodians: Boolean = false
    private var isDataForDepartment: Boolean = false
    private lateinit var listingSyncAllDepartment: List<DepartmentDataObject>
    private lateinit var listingSyncAllCustodians: List<CustodiansDataObject>
    private var statusObjListing: java.util.ArrayList<StatusObj> = java.util.ArrayList()
    private var isSpinnerTouchedForStatus = false

    private var spinnerStatusKey: String? = ""
    private var spinnerStatusVal: String? = ""

    private val filtersAdapter: FiltersAdapter by lazy {
        FiltersAdapter(requireActivity(), filtersObjListing, this)
    }

    private val adapter: CustomRoomAdapter by lazy {
        CustomRoomAdapter(requireActivity(), R.id.tv_spinner_item, listAllRoomData)
    }

    private val updatedRoomsAdapter: UpdatedRoomAdapter by lazy {
        UpdatedRoomAdapter(requireActivity(), R.id.tv_spinner_item, listAllRoomData)
    }

    private val buildingAdapter: BuildingAdapter by lazy {
        BuildingAdapter(requireActivity(), R.id.tv_spinner_item, listAllBuildingData)
    }

    private val updatedBuildingAdapter: UpdatedBuildingAdapter by lazy {
        UpdatedBuildingAdapter(requireActivity(), R.id.tv_spinner_item, listAllBuildingData)
    }

    private val departmentAdapter: DepartmentAdapter by lazy {
        DepartmentAdapter(requireActivity(), R.id.tv_spinner_item, listingSyncAllDepartment)
    }
    private val custodiansAdapter: CustodiansAdapter by lazy {
        CustodiansAdapter(requireActivity(), R.id.tv_spinner_item, listingSyncAllCustodians)
    }

    private val verifyAssetStatusAdapter: VerifyAssetStatusAdapter by lazy {
        VerifyAssetStatusAdapter(requireActivity(), statusObjListing)
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        addValuesToList()
        addDataToList()
        increaseCursorSize()
        setClickListeners()
        addTextWatcherListener()




        agentDatabase = AgentDatabase.getInstance(activity)
        AppExecutors.getInstance().diskIO()
            .execute {
                try {
                    listAllBuildingData =
                        agentDatabase.daoAccess().getAllBuildingData()
                    activity?.runOnUiThread {
                        autocompletetextview.setAdapter(buildingAdapter)
                    }

                    activity?.runOnUiThread {
                        autocompletetextviewUpdatedBuild.setAdapter(updatedBuildingAdapter)
                    }
                } catch (e: Exception) {
                    Log.e("Exception", "" + e.printStackTrace())
                }

                try {
                    listAllRoomData = agentDatabase.daoAccess().getAllRoomsData()
                    activity?.runOnUiThread {
                        autocompletetextviewRoom.setAdapter(adapter)
                    }
                    activity?.runOnUiThread {
                        autocompletetextviewRoomUpdated.setAdapter(updatedRoomsAdapter)
                    }
                } catch (e: Exception) {
                    Log.e("Exception", "" + e.printStackTrace())
                }

                try {
                    listingSyncAllDepartment = agentDatabase.daoAccess().getAllDepartments()
                    activity?.runOnUiThread {
                        autocompletetextviewDepartments.setAdapter(departmentAdapter)
                    }
                } catch (e: Exception) {
                    Log.e("Exception", "" + e.printStackTrace())
                }

                try {
                    listingSyncAllCustodians = agentDatabase.daoAccess().getAllCustodians()
                    activity?.runOnUiThread {
                        autocompletetextviewCustodians.setAdapter(custodiansAdapter)
                    }
                } catch (e: Exception) {
                    Log.e("Exception", "" + e.printStackTrace())
                }


            }

        sp_filters.setOnTouchListener { _, _ ->
            sp_filters.adapter = filtersAdapter
            isSpinnerTouched = true
            false
        }
        sp_filters.adapter = filtersAdapter

        sp_filters?.onItemSelectedListener =
            object : AdapterView.OnItemSelectedListener {
                override fun onNothingSelected(parent: AdapterView<*>?) {

                }

                override fun onItemSelected(
                    parent: AdapterView<*>?,
                    view: View?,
                    position: Int,
                    id: Long
                ) {

                    if (!isSpinnerTouched) return
                    sp_filters.setSelection(0)
                    val filtersObject: FiltersObject = filtersAdapter.getItem(position)
                    spinnerFilterName = filtersObject.filterName
                    spinnerFilterSelected = filtersObject.isSelected
                    checkAllTheMandatoryFieldsAreFilledOrNot()
                }


            }

    }

    private fun addDataToList() {
        statusObjListing.clear()
        statusObjListing.add(StatusObj("Please select", "Please select"))
        statusObjListing.add(StatusObj(" ", "Not Accounted For"))
        statusObjListing.add(StatusObj("Y", "Accounted"))
        statusObjListing.add(StatusObj("NA", "Not Active"))
        statusObjListing.add(StatusObj("PS", "Pending Surplus"))
        statusObjListing.add(StatusObj("VNS", "Verified Not Scanned"))
        statusObjListing.add(StatusObj("W/T", "Wrong Tag"))
        statusObjListing.add(StatusObj("NT", "Not Tagged"))
        statusObjListing.add(StatusObj("UT", "Untaggable"))
        statusObjListing.add(StatusObj("OS", "Off-Site"))
    }

    private fun setClickListeners() {
        tv_remove_building.setOnClickListener(listener)
        tv_remove_room.setOnClickListener(listener)
        tv_remove_accounted_for.setOnClickListener(listener)
        tv_remove_custodians.setOnClickListener(listener)
        tv_remove_department.setOnClickListener(listener)
        tv_remove_updated_building.setOnClickListener(listener)
        tv_remove_updated_room.setOnClickListener(listener)
        tv_remove_asset_class.setOnClickListener(listener)
        tv_action_search.setOnClickListener(listener)



        autocompletetextview.setOnItemClickListener { _, _, position, _ ->
            buildingDataObj = (buildingAdapter?.getItem(position) as BuildingDataObject?)!!
            buildingPosition = position
            Utils.hideSoftKeyboard(requireActivity(), autocompletetextview)
            autocompletetextview.setText(buildingDataObj?.buildingName)
            buildingName = buildingDataObj?.buildingName.toString()
            buildingId = buildingDataObj?.buildingId.toString()
            Log.e("building id", "" + buildingId)
            autocompletetextview.setSelection(autocompletetextview.length())
            isDataForBuilding = true
            checkAllTheMandatoryFieldsAreFilledOrNot()
        }

        autocompletetextviewRoom.setOnItemClickListener { _, _, position, _ ->
            roomDataObj = (adapter.getItem(position) as RoomDataObject?)!!
            roomPosition = position
            Utils.hideSoftKeyboard(requireActivity(), autocompletetextview)
            roomName = roomDataObj?.roomName
            roomNumber = roomDataObj?.roomNumber
            autocompletetextviewRoom.setText("(#$roomNumber)$roomName")
            autocompletetextviewRoom.setSelection(autocompletetextviewRoom.length())
            isDataForRoom = true
            textInputLayoutRooms.endIconMode =
                TextInputLayout.END_ICON_DROPDOWN_MENU // may be set in xml
            checkAllTheMandatoryFieldsAreFilledOrNot()
            textInputLayoutRooms.setEndIconOnClickListener {
                autocompletetextviewRoom.showDropDown()

            }


        }

        autocompletetextviewCustodians.setOnItemClickListener { _, _, position, _ ->
            custodiansDataObj = (custodiansAdapter.getItem(position) as CustodiansDataObject?)!!
            Utils.hideSoftKeyboard(requireActivity(), autocompletetextviewCustodians)
            custodiansName = custodiansDataObj?.name
            custodiansID = custodiansDataObj?.custodianId
            autocompletetextviewCustodians.setText(custodiansName)
            isDataForCustodians = true
            checkAllTheMandatoryFieldsAreFilledOrNot()
            autocompletetextviewCustodians.setSelection(autocompletetextviewCustodians.length())

        }
        autocompletetextviewDepartments.setOnItemClickListener { _, _, position, _ ->
            departmentDataObj = (departmentAdapter.getItem(position) as DepartmentDataObject?)!!
            Utils.hideSoftKeyboard(requireActivity(), autocompletetextviewDepartments)
            departmentName = departmentDataObj?.departmentName
            departmentID = departmentDataObj?.departmentId
            autocompletetextviewDepartments.setText(departmentName)
            isDataForDepartment = true
            checkAllTheMandatoryFieldsAreFilledOrNot()
            autocompletetextviewDepartments.setSelection(autocompletetextviewDepartments.length())
        }

        autocompletetextviewUpdatedBuild.setOnItemClickListener { _, _, position, _ ->
            updatedBuildingDataObj =
                (updatedBuildingAdapter?.getItem(position) as BuildingDataObject?)!!
            updatedBuildingPosition = position
            Utils.hideSoftKeyboard(requireActivity(), autocompletetextviewUpdatedBuild)
            autocompletetextviewUpdatedBuild.setText(updatedBuildingDataObj?.buildingName)
            updatedBuildingName = updatedBuildingDataObj?.buildingName.toString()
            updatedBuildingId = updatedBuildingDataObj?.buildingId.toString()
            autocompletetextviewUpdatedBuild.setSelection(autocompletetextviewUpdatedBuild.length())
            isDataForUpdatedBuilding = true
            checkAllTheMandatoryFieldsAreFilledOrNot()
        }

        autocompletetextviewRoomUpdated.setOnItemClickListener { _, _, position, _ ->
            updatedRoomDataObj = (updatedRoomsAdapter.getItem(position) as RoomDataObject?)!!
            updatedRoomPosition = position
            Utils.hideSoftKeyboard(requireActivity(), autocompletetextviewRoomUpdated)
            roomName = updatedRoomDataObj?.roomName
            roomNumber = updatedRoomDataObj?.roomNumber
            autocompletetextviewRoomUpdated.setText("(#$roomNumber)$roomName")
            autocompletetextviewRoomUpdated.setSelection(autocompletetextviewRoomUpdated.length())
            isDataForUpdatedRoom = true
            textInputLayoutUpdatedRooms.endIconMode =
                TextInputLayout.END_ICON_DROPDOWN_MENU // may be set in xml
            textInputLayoutUpdatedRooms.setEndIconOnClickListener {
                autocompletetextviewRoomUpdated.showDropDown()
            }
            checkAllTheMandatoryFieldsAreFilledOrNot()
        }

        sp_status.setOnTouchListener { _, _ ->
            isSpinnerTouchedForStatus = true
            false
        }

        sp_status.adapter = verifyAssetStatusAdapter

        sp_status?.onItemSelectedListener =
            object : AdapterView.OnItemSelectedListener {
                override fun onNothingSelected(parent: AdapterView<*>?) {

                }

                override fun onItemSelected(
                    parent: AdapterView<*>?,
                    view: View?,
                    position: Int,
                    id: Long
                ) {

                    if (!isSpinnerTouched) return
                    val spinnerStatus: StatusObj = verifyAssetStatusAdapter.getItem(position)
                    spinnerStatusKey = spinnerStatus.statusKey
                    spinnerStatusVal = spinnerStatus.statusValue
                    checkAllTheMandatoryFieldsAreFilledOrNot()
                }

            }


    }

    private fun checkAllTheMandatoryFieldsAreFilledOrNot() {

        if (ll_parent_building.isVisible && isDataForBuilding) {
            tv_action_search.alpha = 1f
        }
        if (ll_parent_room.isVisible && isDataForRoom) {
            tv_action_search.alpha = 1f
        }
        if (ll_parent_department.isVisible && isDataForDepartment) {
            tv_action_search.alpha = 1f
        }
        if (ll_parent_custodians.isVisible && isDataForCustodians) {
            tv_action_search.alpha = 1f
        }
        if (ll_parent_accounted_for.isVisible && !spinnerStatusKey.equals("")) {
            tv_action_search.alpha = 1f
        }
        if (ll_parent_asset_class.isVisible && !et_asset_class.text.toString().trim().equals("")) {
            tv_action_search.alpha = 1f
        }
        if (ll_parent_updated_building.isVisible && isDataForUpdatedBuilding) {
            tv_action_search.alpha = 1f
        }
        if (ll_parent_updated_room.isVisible && isDataForUpdatedRoom) {
            tv_action_search.alpha = 1f
        }
    }

    private fun addTextWatcherListener() {
        autocompletetextview.addTextChangedListener(object : TextWatcher {
            override fun afterTextChanged(s: Editable?) {
            }

            override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
            }

            override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
                if (s?.length!! > 0) {
                    isDataForBuilding = false
                    tv_action_search.alpha = 0.5f
                    checkAllTheMandatoryFieldsAreFilledOrNot()
                } else {
                    isDataForBuilding = false
                    tv_action_search.alpha = 0.5f
                    checkAllTheMandatoryFieldsAreFilledOrNot()
                }

            }
        })

        autocompletetextviewRoom.addTextChangedListener(object : TextWatcher {
            override fun afterTextChanged(s: Editable?) {
            }

            override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
            }

            override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
                if (s?.length!! > 0) {
                    tv_action_search.alpha = 0.5f
                    isDataForRoom = false
                    checkAllTheMandatoryFieldsAreFilledOrNot()
                } else {
                    tv_action_search.alpha = 0.5f
                    isDataForRoom = false
                    checkAllTheMandatoryFieldsAreFilledOrNot()
                }

            }
        })

        autocompletetextviewUpdatedBuild.addTextChangedListener(object : TextWatcher {
            override fun afterTextChanged(s: Editable?) {
            }

            override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
            }

            override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
                if (s?.length!! > 0) {
                    isDataForUpdatedBuilding = false
                    tv_action_search.alpha = 0.5f
                    checkAllTheMandatoryFieldsAreFilledOrNot()
                } else {
                    isDataForUpdatedBuilding = false
                    checkAllTheMandatoryFieldsAreFilledOrNot()
                    tv_action_search.alpha = 0.5f
                }

            }
        })

        autocompletetextviewRoomUpdated.addTextChangedListener(object : TextWatcher {
            override fun afterTextChanged(s: Editable?) {
            }

            override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
            }

            override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
                if (s?.length!! > 0) {
                    tv_action_search.alpha = 0.5f
                    isDataForUpdatedRoom = false
                    checkAllTheMandatoryFieldsAreFilledOrNot()
                } else {
                    tv_action_search.alpha = 0.5f
                    isDataForUpdatedRoom = false
                    checkAllTheMandatoryFieldsAreFilledOrNot()
                }

            }
        })




        autocompletetextviewDepartments.addTextChangedListener(object : TextWatcher {
            override fun afterTextChanged(s: Editable?) {
            }

            override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
            }

            override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
                isDataForDepartment = false
                checkAllTheMandatoryFieldsAreFilledOrNot()

            }
        })

        et_asset_class.addTextChangedListener(object : TextWatcher {
            override fun afterTextChanged(s: Editable?) {
            }

            override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
            }

            override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
                if (s?.length!! > 0) {
                    tv_action_search.alpha = 0.5f
                    isDataForAssetClass = true
                    checkAllTheMandatoryFieldsAreFilledOrNot()
                } else {
                    tv_action_search.alpha = 0.5f
                    isDataForAssetClass = false
                    checkAllTheMandatoryFieldsAreFilledOrNot()
                }

            }
        })
        autocompletetextviewCustodians.addTextChangedListener(object : TextWatcher {
            override fun afterTextChanged(s: Editable?) {
            }

            override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
            }

            override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
                isDataForCustodians = false
                checkAllTheMandatoryFieldsAreFilledOrNot()

            }
        })
    }

    private fun updateObjForAsset(filterType: String) {
        filtersObjListing.mapIndexed { _, filtersObject ->
            if (filtersObject.filterName == resources.getString(R.string.building) && filtersObject.isSelected && filterType == resources.getString(
                    R.string.building
                )
            ) {
                filtersObject.isSelected = false
            } else if (filtersObject.filterName == resources.getString(R.string.label_room_small) && filtersObject.isSelected && filterType == resources.getString(
                    R.string.label_room_small
                )
            ) {
                filtersObject.isSelected = false
            } else if (filtersObject.filterName == resources.getString(R.string.department_small) && filtersObject.isSelected && filterType == resources.getString(
                    R.string.department_small
                )
            ) {
                filtersObject.isSelected = false
            } else if (filtersObject.filterName == resources.getString(R.string.custodian_small) && filtersObject.isSelected && filterType == resources.getString(
                    R.string.custodian_small
                )
            ) {
                filtersObject.isSelected = false
            } else if (filtersObject.filterName == resources.getString(R.string.asset_class) && filtersObject.isSelected && filterType == resources.getString(
                    R.string.asset_class
                )
            ) {
                filtersObject.isSelected = false
            } else if (filtersObject.filterName == resources.getString(R.string.accounted_for) && filtersObject.isSelected && filterType == resources.getString(
                    R.string.accounted_for
                )
            ) {
                filtersObject.isSelected = false
            } else if (filtersObject.filterName == resources.getString(R.string.updated_building) && filtersObject.isSelected && filterType == resources.getString(
                    R.string.updated_building
                )
            ) {
                filtersObject.isSelected = false
            } else if (filtersObject.filterName == resources.getString(R.string.updated_room) && filtersObject.isSelected && filterType == resources.getString(
                    R.string.updated_room
                )
            ) {
                filtersObject.isSelected = false
            }

        }
        filtersAdapter.updateList(filtersObjListing)
    }

    private val listener = View.OnClickListener { view ->
        when (view.id) {
            R.id.tv_action_search -> {
                if (tv_action_search.alpha == 1f) {
                    if (checkValidation()) {
                        fetchResultBasedOnFilters()
                    }
                }
            }
            R.id.tv_remove_building -> {
                ll_parent_building.isVisible = false
                autocompletetextview.setText("")
                mFinalBuildingId = ""
                buildingDataObj = null
                filtersObjListing.mapIndexed { _, filtersObject ->
                    if (filtersObject.filterName == resources.getString(R.string.building) && filtersObject.isSelected) {
                        filtersObject.isSelected = false
                    }
                }
                filtersAdapter.updateList(filtersObjListing)
                checkAllTheMandatoryFieldsAreFilledOrNot()
                //updateObjForAsset(resources.getString(R.string.building))
            }
            R.id.tv_remove_room -> {
                ll_parent_room.isVisible = false
                autocompletetextviewRoom.setText("")
                mFinalRoomId = ""
                roomDataObj = null
                filtersObjListing.mapIndexed { _, filtersObject ->
                    if (filtersObject.filterName == resources.getString(R.string.label_room_small) && filtersObject.isSelected) {
                        filtersObject.isSelected = false
                    }
                }
                checkAllTheMandatoryFieldsAreFilledOrNot()
                filtersAdapter.updateList(filtersObjListing)
                //updateObjForAsset(resources.getString(R.string.label_room_small))
            }
            R.id.tv_remove_department -> {
                autocompletetextviewDepartments.setText("")
                ll_parent_department.isVisible = false
                departmentID = ""
                departmentDataObj = null
                filtersObjListing.mapIndexed { _, filtersObject ->
                    if (filtersObject.filterName == resources.getString(R.string.department_small) && filtersObject.isSelected) {
                        filtersObject.isSelected = false
                    }
                }
                checkAllTheMandatoryFieldsAreFilledOrNot()
                filtersAdapter.updateList(filtersObjListing)
                ///updateObjForAsset(resources.getString(R.string.department_small))
            }
            R.id.tv_remove_custodians -> {
                autocompletetextviewCustodians.setText("")
                ll_parent_custodians.isVisible = false
                custodiansID = ""
                custodiansDataObj = null
                filtersObjListing.mapIndexed { _, filtersObject ->
                    if (filtersObject.filterName == resources.getString(R.string.custodian_small) && filtersObject.isSelected) {
                        filtersObject.isSelected = false
                    }
                }
                checkAllTheMandatoryFieldsAreFilledOrNot()
                filtersAdapter.updateList(filtersObjListing)
                // updateObjForAsset(resources.getString(R.string.custodian_small))
            }
            R.id.tv_remove_asset_class -> {
                et_asset_class.setText("")
                ll_parent_asset_class.isVisible = false
                filtersObjListing.mapIndexed { _, filtersObject ->
                    if (filtersObject.filterName == resources.getString(R.string.asset_class) && filtersObject.isSelected) {
                        filtersObject.isSelected = false
                    }
                }
                filtersAdapter.updateList(filtersObjListing)
                checkAllTheMandatoryFieldsAreFilledOrNot()
                //updateObjForAsset(resources.getString(R.string.asset_class))
            }
            R.id.tv_remove_accounted_for -> {
                sp_status.setSelection(0)
                ll_parent_accounted_for.isVisible = false
                spinnerStatusKey = ""
                filtersObjListing.mapIndexed { _, filtersObject ->
                    if (filtersObject.filterName == resources.getString(R.string.accounted_for) && filtersObject.isSelected) {
                        filtersObject.isSelected = false
                    }
                }
                filtersAdapter.updateList(filtersObjListing)
                checkAllTheMandatoryFieldsAreFilledOrNot()
                // updateObjForAsset(resources.getString(R.string.accounted_for))
            }
            R.id.tv_remove_updated_building -> {
                autocompletetextviewUpdatedBuild.setText("")
                ll_parent_updated_building.isVisible = false
                mFinalUpdatedBuildingId = ""

                updatedBuildingDataObj = null

                filtersObjListing.mapIndexed { _, filtersObject ->
                    if (filtersObject.filterName == resources.getString(R.string.updated_building) && filtersObject.isSelected) {
                        filtersObject.isSelected = false
                    }
                }
                filtersAdapter.updateList(filtersObjListing)
                checkAllTheMandatoryFieldsAreFilledOrNot()
                //updateObjForAsset(resources.getString(R.string.updated_building))
            }
            R.id.tv_remove_updated_room -> {
                autocompletetextviewRoomUpdated.setText("")
                ll_parent_updated_room.isVisible = false
                mFinalUpdatedRoomId = ""
                updatedRoomDataObj = null
                filtersObjListing.mapIndexed { _, filtersObject ->
                    if (filtersObject.filterName == resources.getString(R.string.updated_room) && filtersObject.isSelected) {
                        filtersObject.isSelected = false
                    }
                }
                filtersAdapter.updateList(filtersObjListing)
                checkAllTheMandatoryFieldsAreFilledOrNot()
                //updateObjForAsset(resources.getString(R.string.updated_room))
            }
        }
    }
    private lateinit var dataList: List<AssetDataObject>

    private fun checkValidation(): Boolean {

        if (buildingDataObj != null) {
            mFinalBuildingId = if (buildingDataObj?.buildingId == null) {
                buildingDataObj?.buildingId.toString().replace("null", "")
            } else {
                buildingDataObj?.buildingId.toString()
            }
        }


        if (roomDataObj != null) {
            mFinalRoomId = if (roomDataObj?.roomId == null) {
                roomDataObj?.roomId.toString().replace("null", "")
            } else {
                roomDataObj?.roomId.toString()
            }
        }


        if (updatedBuildingDataObj != null) {
            mFinalUpdatedBuildingId = if (updatedBuildingDataObj?.buildingId == null) {
                updatedBuildingDataObj?.buildingId.toString().replace("null", "")
            } else {
                updatedBuildingDataObj?.buildingId.toString()
            }
        }


        if (updatedRoomDataObj != null) {
            mFinalUpdatedRoomId = if (updatedRoomDataObj?.roomId == null) {
                updatedRoomDataObj?.roomId.toString().replace("null", "")
            } else {
                updatedRoomDataObj?.roomId.toString()
            }
        }


        if (ll_parent_building.visibility == VISIBLE && mFinalBuildingId == "") {
            Utils.showToastForFragments(requireActivity(), "Please select building")
            tv_action_search.alpha = 0.5f
            return false
        } else if (ll_parent_room.visibility == VISIBLE && mFinalRoomId == "") {
            Utils.showToastForFragments(requireActivity(), "Please select room")
            tv_action_search.alpha = 0.5f
            return false
        } else if (ll_parent_department.visibility == VISIBLE && departmentID == "") {
            Utils.showToastForFragments(requireActivity(), "Please select department")
            tv_action_search.alpha = 0.5f
            return false
        } else if (ll_parent_custodians.visibility == VISIBLE && custodiansID == "") {
            Utils.showToastForFragments(requireActivity(), "Please select custodian")
            tv_action_search.alpha = 0.5f
            return false
        } else if (ll_parent_asset_class.visibility == VISIBLE && et_asset_class.text.toString()
                .trim() == ""
        ) {
            Utils.showToastForFragments(requireActivity(), "Please enter asset class")
            tv_action_search.alpha = 0.5f
            return false
        } else if (ll_parent_accounted_for.visibility == VISIBLE && spinnerStatusKey == "Please select") {
            Utils.showToastForFragments(requireActivity(), "Please select accounted for")
            tv_action_search.alpha = 0.5f
            return false
        } else if (ll_parent_updated_building.visibility == VISIBLE && mFinalUpdatedBuildingId == "") {
            Utils.showToastForFragments(requireActivity(), "Please select updated building")
            tv_action_search.alpha = 0.5f
            return false
        } else if (ll_parent_updated_room.visibility == VISIBLE && mFinalUpdatedRoomId == "") {
            Utils.showToastForFragments(requireActivity(), "Please select updated room")
            tv_action_search.alpha = 0.5f
            return false
        } /*else {
            tv_action_search.alpha = 0.5f
            return false
        }*/

        return true
    }

    var mFinalBuildingId: String = ""
    var mFinalRoomId: String = ""
    var mFinalUpdatedBuildingId: String = ""
    var mFinalUpdatedRoomId: String = ""

    private fun fetchResultBasedOnFilters() {


        if (buildingDataObj != null) {
            mFinalBuildingId = if (buildingDataObj?.buildingId == null) {
                buildingDataObj?.buildingId.toString().replace("null", "")
            } else {
                buildingDataObj?.buildingId.toString()
            }
        }


        if (roomDataObj != null) {
            mFinalRoomId = if (roomDataObj?.roomId == null) {
                roomDataObj?.roomId.toString().replace("null", "")
            } else {
                roomDataObj?.roomId.toString()
            }
        }


        if (updatedBuildingDataObj != null) {
            mFinalUpdatedBuildingId = if (updatedBuildingDataObj?.buildingId == null) {
                updatedBuildingDataObj?.buildingId.toString().replace("null", "")
            } else {
                updatedBuildingDataObj?.buildingId.toString()
            }
        }


        if (updatedRoomDataObj != null) {
            mFinalUpdatedRoomId = if (updatedRoomDataObj?.roomId == null) {
                updatedRoomDataObj?.roomId.toString().replace("null", "")
            } else {
                updatedRoomDataObj?.roomId.toString()
            }
        }
        activity?.runOnUiThread {
            progressBar.isVisible = true
        }


        AppExecutors.getInstance().diskIO()
            .execute {
                try {

                    // Query string
                    var queryString = String()

                    val args = ArrayList<String>()

                    var containsCondition = false
                    queryString += "SELECT * FROM all_assets WHERE 1"


                    // Optional parts are added to query string and to args upon here
                    if (mFinalBuildingId.isNotEmpty()) {
                        queryString += " AND originalBuildingId = ? "
                        args.add(mFinalBuildingId)
                        containsCondition = true
                    }

                    if (mFinalRoomId.isNotEmpty()) {
                        if (containsCondition) {
                            queryString += " AND"
                        } else {
                            queryString += " AND"
                            containsCondition = true
                        }
                        queryString += " originalRoomId = ? "
                        args.add(mFinalRoomId)
                    }

                    if (departmentID.toString().isNotEmpty()) {
                        if (containsCondition) {
                            queryString += " AND"
                        } else {
                            queryString += " AND"
                            containsCondition = true
                        }
                        queryString += " departmentId = ? "
                        args.add(departmentID.toString())
                    }

                    if (custodiansID.toString().isNotEmpty()) {
                        if (containsCondition) {
                            queryString += " AND"
                        } else {
                            queryString += " AND"
                            containsCondition = true
                        }
                        queryString += " custodianId = ? "
                        args.add(departmentID.toString())
                    }
                    if (et_asset_class.text.toString().trim().isNotEmpty()) {
                        if (containsCondition) {
                            queryString += " AND"
                        } else {
                            queryString += " AND"
                            containsCondition = true
                        }
                        queryString += " assetClass = ? "
                        args.add(et_asset_class.text.toString().trim())
                    }

                    if (spinnerStatusKey?.isNotEmpty()!!) {
                        if (containsCondition) {
                            queryString += " AND"
                        } else {
                            queryString += " AND"
                            containsCondition = true
                        }
                        queryString += " accountedForStatus = ? "
                        args.add(spinnerStatusKey!!)
                    }

                    if (mFinalUpdatedBuildingId.isNotEmpty()) {
                        if (containsCondition) {
                            queryString += " AND"
                        } else {
                            queryString += " AND"
                            containsCondition = true
                        }
                        queryString += " updatedBuildingId = ? "
                        args.add(departmentID.toString())
                    }


                    if (mFinalUpdatedRoomId.isNotEmpty()) {
                        if (containsCondition) {
                            queryString += " AND"
                        } else {
                            queryString += " AND"
                            containsCondition = true
                        }
                        queryString += " updatedRoomId = ? "
                        args.add(departmentID.toString())
                    }

                    // End of query string

                    Log.d("tags:", "" + queryString)
                    Log.d("args:", "" + args.toString())
                    Log.d("args:", "" + args.toArray())
                    val query = SimpleSQLiteQuery(queryString, args.toArray())
                    Log.d("query:", "" + query.sql.toString())
                    dataList =
                        AgentDatabase.getInstance(activity).daoAccess()
                            .getAssetsAccordingToFilter(query)
                    Log.d("dataList", "dataList" + dataList.size)
                    Log.d(
                        "dataList", "dataList" + "mFinalRoomId " + mFinalRoomId +
                                "mFinalBuildingId  " + mFinalBuildingId + "mFinalDepartmentId " + departmentID.toString() + "mFinalCustodians  " + custodiansID.toString() + "mSpinnerStiatusKeyId " + spinnerStatusKey + "mFinalUpdatedBuildId " + mFinalUpdatedBuildingId + "mFinalUpdatedRoomId  " + mFinalUpdatedRoomId

                                + " asset class " + et_asset_class.text.toString().trim()
                    )

                    if (dataList.isNotEmpty()) {
                        activity?.runOnUiThread(Runnable {
                            progressBar.isVisible = false
                            AgentDatabase.getInstance(requireActivity()).daoAccess().makeNullItems()
                            parentFragmentManager.doTransaction {
                                add(
                                    R.id.fl_dashboard,
                                    FilteredAssetsFragment.newInstance(dataList)
                                )
                            }
                        })
                    } else {
                        activity?.runOnUiThread {
                            progressBar.isVisible = false
                            Utils.showToastForFragments(
                                requireActivity(),
                                "No Assets found, please choose different filter"
                            )

                        }

                    }

                } catch (e: Exception) {
                    e.printStackTrace()

                }
            }
    }

    private fun increaseCursorSize() {
        try {
            val field: Field = CursorWindow::class.java.getDeclaredField("sCursorWindowSize")
            field.isAccessible = true
            field.set(null, 500 * 1024 * 1024) //the 100MB is the new size
        } catch (e: java.lang.Exception) {
            e.printStackTrace()
        }
    }

    fun FragmentManager.doTransaction(
        func: FragmentTransaction.() ->
        FragmentTransaction
    ) {
        beginTransaction().func().addToBackStack(null).commit()
    }

    private fun addValuesToList() {

        filtersObjListing.add(FiltersObject("Please select", false))
        filtersObjListing.add(FiltersObject("Building", false))
        filtersObjListing.add(FiltersObject("Room", false))
        filtersObjListing.add(FiltersObject("Department", false))
        filtersObjListing.add(FiltersObject("Custodian", false))
        filtersObjListing.add(FiltersObject("Asset Class", false))
        filtersObjListing.add(FiltersObject("Accounted For", false))
        filtersObjListing.add(FiltersObject("Updated Building", false))
        filtersObjListing.add(FiltersObject("Updated Room", false))
    }

    //2
    companion object {
        fun newInstance(): FilterFragment {
            return FilterFragment()
        }
    }

    private fun hideSpinnerDropDown(spinner: Spinner?) {
        try {
            val method: Method = Spinner::class.java.getDeclaredMethod("onDetachedFromWindow")
            method.isAccessible = true
            method.invoke(spinner)
        } catch (e: Exception) {
            e.printStackTrace()
        }
    }

    override fun onItemClick(position: Int, filtersObject: FiltersObject) {
        hideSpinnerDropDown(sp_filters)
        checkAllTheMandatoryFieldsAreFilledOrNot()
        if (filtersObject.isSelected) {
            when (filtersObject.filterName) {
                activity?.resources?.getString(R.string.building) -> {
                    ll_parent_building.isVisible = true
                }
                activity?.resources?.getString(R.string.label_room_small) -> {
                    ll_parent_room.isVisible = true
                }
                activity?.resources?.getString(R.string.department_small) -> {
                    ll_parent_department.isVisible = true
                }
                activity?.resources?.getString(R.string.custodian_small) -> {
                    ll_parent_custodians.isVisible = true
                }
                activity?.resources?.getString(R.string.asset_class) -> {
                    ll_parent_asset_class.isVisible = true
                }
                activity?.resources?.getString(R.string.accounted_for) -> {
                    ll_parent_accounted_for.isVisible = true
                }
                activity?.resources?.getString(R.string.updated_building) -> {
                    ll_parent_updated_building.isVisible = true
                }
                activity?.resources?.getString(R.string.updated_room) -> {
                    ll_parent_updated_room.isVisible = true
                }
            }
        } else {
            when (filtersObject.filterName) {
                activity?.resources?.getString(R.string.building) -> {
                    ll_parent_building.isVisible = false
                }
                activity?.resources?.getString(R.string.label_room_small) -> {
                    ll_parent_room.isVisible = false
                }
                activity?.resources?.getString(R.string.department_small) -> {
                    ll_parent_department.isVisible = false
                }
                activity?.resources?.getString(R.string.custodian_small) -> {
                    ll_parent_custodians.isVisible = false
                }
                activity?.resources?.getString(R.string.asset_class) -> {
                    ll_parent_asset_class.isVisible = false
                }
                activity?.resources?.getString(R.string.accounted_for) -> {
                    ll_parent_accounted_for.isVisible = false
                }
                activity?.resources?.getString(R.string.updated_building) -> {
                    ll_parent_updated_building.isVisible = false
                }
                activity?.resources?.getString(R.string.updated_room) -> {
                    ll_parent_updated_room.isVisible = false
                }
            }
        }
    }

}
Editor is loading...