rifki_cs29

DocumentFragment

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