Advertisement
rifki_cs29

DocumentFragment

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