Untitled

 avatar
unknown
plain_text
2 years ago
45 kB
1
Indexable
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...