Advertisement
rifki_cs29

DocumentFragment

Dec 14th, 2020
1,077
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Kotlin 17.56 KB | None | 0 0
  1. package com.pupukkaltim.signer.view.fragment
  2.  
  3. import android.app.AlertDialog
  4. import android.app.DatePickerDialog
  5. import android.content.Intent
  6. import android.os.Bundle
  7. import android.util.Log
  8. import android.view.LayoutInflater
  9. import android.view.View
  10. import android.view.ViewGroup
  11. import android.widget.*
  12. import androidx.core.view.isNotEmpty
  13. import androidx.fragment.app.Fragment
  14. import androidx.lifecycle.Observer
  15. import androidx.lifecycle.ViewModelProvider
  16. import androidx.recyclerview.widget.LinearLayoutManager
  17. import androidx.transition.TransitionInflater
  18. import com.google.android.material.textfield.TextInputEditText
  19. import com.pupukkaltim.signer.R
  20. import com.pupukkaltim.signer.adapter.DocumentAdapter
  21. import com.pupukkaltim.signer.helper.EventObserver
  22. import com.pupukkaltim.signer.model.Document
  23. import com.pupukkaltim.signer.view.activity.DetailDocumentActivity
  24. import com.pupukkaltim.signer.viewmodel.DocumentViewModel
  25. import kotlinx.android.synthetic.main.fragment_document.*
  26. import java.text.SimpleDateFormat
  27. import java.util.*
  28.  
  29. class DocumentFragment : Fragment() {
  30.     private lateinit var adapter: DocumentAdapter
  31.     private lateinit var documentViewModel: DocumentViewModel
  32.  
  33.     private lateinit var sortByFinal : String
  34.     private lateinit var sortValueFinal : String
  35.  
  36.     override fun onCreate(savedInstanceState: Bundle?) {
  37.         super.onCreate(savedInstanceState)
  38.         val inflater = TransitionInflater.from(requireContext())
  39.         enterTransition = inflater.inflateTransition(R.transition.fade_in)
  40.         exitTransition = inflater.inflateTransition(R.transition.fade_out)
  41.     }
  42.  
  43.     override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
  44.         return inflater.inflate(R.layout.fragment_document, container, false)
  45.     }
  46.  
  47.     override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
  48.         super.onViewCreated(view, savedInstanceState)
  49.  
  50.         adapter = DocumentAdapter()
  51.         showRecyclerView()
  52.  
  53.         documentViewModel = ViewModelProvider(this, ViewModelProvider.NewInstanceFactory()).get(DocumentViewModel::class.java)
  54.         documentViewModel.init(this@DocumentFragment.requireContext())
  55.  
  56.         //load data di sini
  57.         documentViewModel.setListDocuments("", "2000-01-01", "2100-01-01", "0", "1000000000000", "updated_at", "true")
  58.  
  59.         documentViewModel.listDocuments.observe(viewLifecycleOwner, Observer { document ->
  60.             if(document != null){
  61.                 adapter.setDocuments(document)
  62.                 shimmerFrameLayout.visibility = View.GONE
  63.                 tv_no_data.visibility = View.GONE
  64.             } else {
  65.                 tv_no_data.visibility = View.VISIBLE
  66.             }
  67.         })
  68.  
  69.         documentViewModel.errorMessage.observe(viewLifecycleOwner, EventObserver { errorMessage ->
  70. //            Toast.makeText(activity, errorMessage, Toast.LENGTH_SHORT).show()
  71.             if (errorMessage.isNullOrEmpty()){
  72.                 tv_no_data.visibility = View.GONE
  73.             } else {
  74.                 tv_no_data.visibility = View.VISIBLE
  75.                 tv_no_data.text = errorMessage
  76.             }
  77.         })
  78.  
  79. //        if(documentViewModel.errorMessage.hasObservers()) {
  80. //            documentViewModel.errorMessage.removeObservers(this)
  81. //        }
  82.     }
  83.  
  84.     override fun onResume() {
  85.         super.onResume()
  86.         search()
  87.  
  88.         //tombol filter sort
  89.         sort()
  90.  
  91.         //tombol filter Filter
  92.         filter()
  93.  
  94.         //tombol reset filter
  95.         reset()
  96.     }
  97.  
  98.     private fun search() {
  99.         fab_search.setOnClickListener(View.OnClickListener {
  100.             fab_menu.close(true)
  101.             val fabAlert = AlertDialog.Builder(activity)
  102.             val mView = layoutInflater.inflate(R.layout.dialog_fab_search, null)
  103.             fabAlert.setCancelable(false)
  104.             val edtSearch: TextInputEditText = mView.findViewById(R.id.edt_search)
  105.             val btnCancel = mView.findViewById<Button>(R.id.btn_cancel)
  106.             val btnSearch = mView.findViewById<Button>(R.id.btn_search)
  107.             fabAlert.setView(mView)
  108.             val alertShow = fabAlert.show()
  109.             btnSearch.setOnClickListener {
  110.                 Log.e("test", "editTextdariDocument : ${edtSearch.text}")
  111.                 //load data di sini
  112.  
  113.                 if (edtSearch.text!!.isNotEmpty()) {
  114.                     documentViewModel.setListSearchDocuments(edtSearch.text.toString(),"2000-01-01", "2100-01-01", "0", "1000000000000", "updated_at", "true")
  115.  
  116.                     documentViewModel.listDocuments.observe(viewLifecycleOwner, Observer { document ->
  117.                         if(document != null){
  118.                             adapter.setDocuments(document)
  119.                             tv_no_data.visibility = View.GONE
  120.                         }else {
  121.                             tv_no_data.visibility = View.VISIBLE
  122.                         }
  123.                     })
  124.  
  125.                     documentViewModel.errorMessage.observe(viewLifecycleOwner, EventObserver { errorMessage ->
  126. //                        Toast.makeText(activity, errorMessage, Toast.LENGTH_SHORT).show()
  127.                         if (errorMessage.isNullOrEmpty()){
  128.                             tv_no_data.visibility = View.GONE
  129.                         } else {
  130.                             tv_no_data.visibility = View.VISIBLE
  131.                             tv_no_data.text = errorMessage
  132.                         }
  133.                     })
  134.  
  135. //                    if(documentViewModel.errorMessage.hasObservers()) {
  136. //                        documentViewModel.errorMessage.removeObservers(this)
  137. //                    }
  138.                 }
  139.                 alertShow.dismiss()
  140.             }
  141.             btnCancel.setOnClickListener { alertShow.dismiss() }
  142.         })
  143.     }
  144.  
  145.     private fun sort() {
  146.         fab_sort.setOnClickListener(View.OnClickListener {
  147.             fab_menu.close(true)
  148.             val fabAlert = AlertDialog.Builder(activity)
  149.             val mView = layoutInflater.inflate(R.layout.dialog_fab_sort, null)
  150.             fabAlert.setCancelable(false)
  151.             val spnSortBy = mView.findViewById<Spinner>(R.id.spnsortby)
  152.             val spnSort = mView.findViewById<Spinner>(R.id.spnsort)
  153.             val btnCancel = mView.findViewById<Button>(R.id.btn_cancel)
  154.             val btnSort = mView.findViewById<Button>(R.id.btn_sort)
  155.             val sortBy = arrayOf("Nilai", "Tanggal Dokumen")
  156.             val sortByValue = arrayOf("amount", "created_at")
  157.             val sortValue = arrayOf("Ascending", "Descending")
  158.             val sortValueVal = arrayOf("false", "true")
  159.  
  160.             fabAlert.setView(mView)
  161.             val alertShow = fabAlert.show()
  162.  
  163.             val arrayAdapterSortBy = ArrayAdapter(this@DocumentFragment.requireContext(), android.R.layout.simple_spinner_item, sortBy)
  164.             arrayAdapterSortBy.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
  165.             spnSortBy.adapter = arrayAdapterSortBy
  166.  
  167.             spnSortBy.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
  168.                 override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
  169.                     sortByFinal = sortByValue[position]
  170.                     Log.e("test", "SortByFinal : $sortByFinal")
  171.                 }
  172.  
  173.                 override fun onNothingSelected(parent: AdapterView<*>?) { }
  174.             }
  175.  
  176.             val arrayAdapterSortValue = ArrayAdapter(this@DocumentFragment.requireContext(), android.R.layout.simple_spinner_item, sortValue)
  177.             arrayAdapterSortValue.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
  178.             spnSort.adapter = arrayAdapterSortValue
  179.  
  180.             spnSort.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
  181.                 override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
  182.                     sortValueFinal = sortValueVal[position]
  183.                     Log.e("test", "SortValueFinal : $sortValueFinal")
  184.                 }
  185.  
  186.                 override fun onNothingSelected(parent: AdapterView<*>?) {}
  187.  
  188.             }
  189.  
  190.             btnSort.setOnClickListener {
  191.                 if (spnSort!!.isNotEmpty() && spnSortBy!!.isNotEmpty()) {
  192.                     documentViewModel.setListDocuments("","2000-01-01", "2100-01-01", "0", "1000000000000", sortByFinal, sortValueFinal)
  193.  
  194.                     documentViewModel.listDocuments.observe(viewLifecycleOwner, Observer { document ->
  195.                         if(document != null){
  196.                             adapter.setDocuments(document)
  197.                         }
  198.                     })
  199.  
  200.                     documentViewModel.errorMessage.observe(viewLifecycleOwner, Observer {
  201.                         it.getContentIfNotHandled()?.let { it ->
  202.                             Toast.makeText(activity, it, Toast.LENGTH_LONG).show()
  203.                         }
  204.                     })
  205.                 }
  206.  
  207.                 alertShow.dismiss()
  208.             }
  209.             btnCancel.setOnClickListener {
  210.                 alertShow.dismiss() }
  211.         })
  212.     }
  213.  
  214.     private fun filter() {
  215.         fab_filter.setOnClickListener(View.OnClickListener {
  216.             fab_menu.close(true)
  217.             val fabAlert = AlertDialog.Builder(activity)
  218.             val mView = layoutInflater.inflate(R.layout.dialog_fab_filter, null)
  219.             fabAlert.setCancelable(false)
  220.             val btnCancel = mView.findViewById<Button>(R.id.btn_cancel)
  221.             val btnFilter = mView.findViewById<Button>(R.id.btn_filter)
  222.             val startDate: ImageButton = mView.findViewById(R.id.btn_start_date)
  223.             val tvStartDate: TextView = mView.findViewById(R.id.tv_start_date)
  224.             val endDate: ImageButton = mView.findViewById(R.id.btn_end_date)
  225.             val tvEndDate: TextView = mView.findViewById(R.id.tv_end_date)
  226.             val edtStartValue: TextInputEditText = mView.findViewById(R.id.start_value)
  227.             val edtEndValue: TextInputEditText = mView.findViewById(R.id.end_value)
  228.  
  229.             val startCalender = Calendar.getInstance()
  230.             val endCalender = Calendar.getInstance()
  231.  
  232.             val myFormatStart = "yyyy-MM-dd"
  233.             val myFormatEnd = "yyyy-MM-dd"
  234.             val sdfStart = SimpleDateFormat(myFormatStart, Locale.UK)
  235.             val sdfEnd = SimpleDateFormat(myFormatEnd, Locale.UK)
  236.  
  237.             val startDateSetListener = DatePickerDialog.OnDateSetListener { view, year, monthOfYear, dayOfMonth ->
  238.                 startCalender.set(Calendar.YEAR, year)
  239.                 startCalender.set(Calendar.MONTH, monthOfYear)
  240.                 startCalender.set(Calendar.DAY_OF_MONTH, dayOfMonth)
  241.  
  242.                 tvStartDate.text = sdfStart.format(startCalender.time)
  243.             }
  244.  
  245.             startDate.setOnClickListener {
  246.                 DatePickerDialog(this@DocumentFragment.requireContext(), startDateSetListener,
  247.                     startCalender.get(Calendar.YEAR),
  248.                     startCalender.get(Calendar.MONTH),
  249.                     startCalender.get(Calendar.DAY_OF_MONTH)).show()
  250.             }
  251.  
  252.             val endDateSetListener = DatePickerDialog.OnDateSetListener { view, year, monthOfYear, dayOfMonth ->
  253.                 endCalender.set(Calendar.YEAR, year)
  254.                 endCalender.set(Calendar.MONTH, monthOfYear)
  255.                 endCalender.set(Calendar.DAY_OF_MONTH, dayOfMonth)
  256.  
  257.                 tvEndDate.text = sdfEnd.format(endCalender.time)
  258.             }
  259.  
  260.             endDate.setOnClickListener {
  261.                 DatePickerDialog(this@DocumentFragment.requireContext(), endDateSetListener,
  262.                     endCalender.get(Calendar.YEAR),
  263.                     endCalender.get(Calendar.MONTH),
  264.                     endCalender.get(Calendar.DAY_OF_MONTH)).show()
  265.             }
  266.  
  267.             fabAlert.setView(mView)
  268.             val alertShow = fabAlert.show()
  269.             btnFilter.setOnClickListener {
  270.                 val tanggalAwal = sdfStart.format(startCalender.time)
  271.                 val tanggalAkhir = sdfEnd.format(endCalender.time)
  272.                 Log.e("test", "tanggal awal: $tanggalAwal")
  273.                 Log.e("test", "tanggal akhir: $tanggalAkhir")
  274.  
  275.                 if (edtStartValue.text!!.isNotEmpty() && edtEndValue.text!!.isNotEmpty()) {
  276.                     documentViewModel.setListDocuments("", "2000-01-01", "2100-01-01", edtStartValue.text.toString(), edtEndValue.text.toString(), "updated_at", "true")
  277.  
  278.                     documentViewModel.listDocuments.observe(viewLifecycleOwner, Observer { document ->
  279.                         if(document != null){
  280.                             adapter.setDocuments(document)
  281.                         }
  282.                     })
  283.  
  284.                     documentViewModel.errorMessage.observe(viewLifecycleOwner, Observer {
  285.                         it.getContentIfNotHandled()?.let { it ->
  286.                             Toast.makeText(activity, it, Toast.LENGTH_LONG).show()
  287.                         }
  288.                     })
  289.                 } else if (edtStartValue.text!!.isEmpty() && edtEndValue.text!!.isNotEmpty()) {
  290.                     documentViewModel.setListDocuments("", "2000-01-01", "2100-01-01", "0", edtEndValue.text.toString(), "updated_at", "true")
  291.  
  292.                     documentViewModel.listDocuments.observe(viewLifecycleOwner, Observer { document ->
  293.                         if(document != null){
  294.                             adapter.setDocuments(document)
  295.                         }
  296.                     })
  297.  
  298.                     documentViewModel.errorMessage.observe(viewLifecycleOwner, Observer {
  299.                         it.getContentIfNotHandled()?.let { it ->
  300.                             Toast.makeText(activity, it, Toast.LENGTH_LONG).show()
  301.                         }
  302.                     })
  303.                 } else if (edtStartValue.text!!.isNotEmpty() && edtEndValue.text!!.isEmpty()) {
  304.                     documentViewModel.setListDocuments("", "2000-01-01", "2100-01-01", edtStartValue.text.toString(), "1000000000000", "updated_at", "true")
  305.  
  306.                     documentViewModel.listDocuments.observe(viewLifecycleOwner, Observer { document ->
  307.                         if(document != null){
  308.                             adapter.setDocuments(document)
  309.                         }
  310.                     })
  311.  
  312.                     documentViewModel.errorMessage.observe(viewLifecycleOwner, Observer {
  313.                         it.getContentIfNotHandled()?.let { it ->
  314.                             Toast.makeText(activity, it, Toast.LENGTH_LONG).show()
  315.                         }
  316.                     })
  317.                 } else if (tanggalAwal.isNotEmpty() && tanggalAkhir.isNotEmpty()) {
  318.                     documentViewModel.setListDocuments("", tanggalAwal, tanggalAkhir, "0", "1000000000000", "updated_at", "true")
  319.  
  320.                     documentViewModel.listDocuments.observe(viewLifecycleOwner, Observer { document ->
  321.                         if(document != null){
  322.                             adapter.setDocuments(document)
  323.                         }
  324.                     })
  325.  
  326.                     documentViewModel.errorMessage.observe(viewLifecycleOwner, Observer {
  327.                         it.getContentIfNotHandled()?.let { it ->
  328.                             Toast.makeText(activity, it, Toast.LENGTH_LONG).show()
  329.                         }
  330.                     })
  331.                 } else if (tanggalAwal.isNotEmpty() && tanggalAkhir.isNotEmpty() && edtStartValue.text!!.isNotEmpty() && edtEndValue.text!!.isNotEmpty()) {
  332.                     documentViewModel.setListDocuments("", tanggalAwal, tanggalAkhir, edtStartValue.text.toString(), edtEndValue.text.toString(), "updated_at", "true")
  333.  
  334.                     documentViewModel.listDocuments.observe(viewLifecycleOwner, Observer { document ->
  335.                         if(document != null){
  336.                             adapter.setDocuments(document)
  337.                         }
  338.                     })
  339.  
  340.                     documentViewModel.errorMessage.observe(viewLifecycleOwner, Observer {
  341.                         it.getContentIfNotHandled()?.let { it ->
  342.                             Toast.makeText(activity, it, Toast.LENGTH_LONG).show()
  343.                         }
  344.                     })
  345.                 }
  346.  
  347.                 alertShow.dismiss()
  348.             }
  349.             btnCancel.setOnClickListener {
  350.                 alertShow.dismiss()
  351.             }
  352.         })
  353.     }
  354.  
  355.     private fun reset() {
  356.         fab_reset.setOnClickListener {
  357.             documentViewModel.setListDocuments("", "2000-01-01", "2100-01-01", "0", "1000000000000", "updated_at", "true")
  358.  
  359.             documentViewModel.listDocuments.observe(viewLifecycleOwner, Observer { document ->
  360.                 if(document != null){
  361.                     adapter.setDocuments(document)
  362.                 }
  363.             })
  364.  
  365.             documentViewModel.errorMessage.observe(viewLifecycleOwner, Observer {
  366.                 it.getContentIfNotHandled()?.let { it ->
  367.                     Toast.makeText(activity, it, Toast.LENGTH_LONG).show()
  368.                 }
  369.             })
  370.         }
  371.     }
  372.  
  373.     private fun showRecyclerView() {
  374.         rv_document.layoutManager = LinearLayoutManager(context)
  375.         rv_document.adapter = adapter
  376.  
  377.         adapter.notifyDataSetChanged()
  378.  
  379.         adapter.setOnItemClickCallback(object : DocumentAdapter.OnItemClickCallback {
  380.             override fun onItemClicked(data: Document) {
  381.                 val intent = Intent(context, DetailDocumentActivity::class.java)
  382.                 intent.putExtra(DetailDocumentActivity.EXTRA_DOCUMENT, data)
  383.                 startActivity(intent)
  384.             }
  385.         })
  386.     }
  387. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement