Advertisement
arijulianto

PiutangInputActivity

Aug 8th, 2023
1,523
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Kotlin 8.95 KB | None | 0 0
  1. package com.arijulianto.hutang
  2.  
  3. import android.app.DatePickerDialog
  4. import android.content.Intent
  5. import android.graphics.drawable.ColorDrawable
  6. import android.os.Bundle
  7. import android.text.Editable
  8. import android.text.TextWatcher
  9. import android.widget.CompoundButton
  10. import android.widget.Toast
  11. import androidx.activity.result.contract.ActivityResultContracts
  12. import androidx.appcompat.app.AppCompatActivity
  13. import com.arijulianto.hutang.databinding.PiutangInputBinding
  14. import kotlinx.coroutines.Dispatchers
  15. import kotlinx.coroutines.runBlocking
  16. import kotlinx.coroutines.withContext
  17. import java.text.DecimalFormat
  18. import java.text.DecimalFormatSymbols
  19. import java.util.Calendar
  20. import java.util.Locale
  21.  
  22.  
  23. class PiutangInputActivity : AppCompatActivity() {
  24.     private lateinit var binding:PiutangInputBinding
  25.     lateinit var dataAdapter: AdapterPiutang
  26.  
  27.     var dataModel: PengutangData? = null
  28.  
  29.     private var appDb: AppDatabase? = null
  30.  
  31.     override fun onCreate(savedInstanceState: Bundle?) {
  32.         super.onCreate(savedInstanceState)
  33.  
  34.         binding = PiutangInputBinding.inflate(layoutInflater)
  35.         val view = binding.root
  36.         setContentView(view)
  37.  
  38.         supportActionBar?.setTitle("Input Piutang")
  39.         supportActionBar?.setDisplayHomeAsUpEnabled(true)
  40.         supportActionBar?.setBackgroundDrawable(ColorDrawable(getColor(R.color.primaryColorBlue)))
  41.         supportActionBar?.setLogo(R.drawable.ic_back)
  42.         supportActionBar?.setDisplayUseLogoEnabled(true)
  43.  
  44.         appDb = AppDatabase.getDatabase(this)
  45.         var txtError = ""
  46.  
  47.  
  48.         with(binding){
  49.  
  50.             rbWanita.setOnCheckedChangeListener(radioListener)
  51.             rbPria.setOnCheckedChangeListener(radioListener)
  52.  
  53.             txtNama.setOnClickListener {
  54.                 val intent = Intent(baseContext,ChoosePengutang::class.java)
  55.                 startActivity(intent)
  56.             }
  57.             txtTanggal.setOnClickListener {
  58.                 val c = Calendar.getInstance()
  59.                 var v = txtTanggal.text.toString();
  60.  
  61.                 var year = c.get(Calendar.YEAR)
  62.                 var month = c.get(Calendar.MONTH)
  63.                 var day = c.get(Calendar.DAY_OF_MONTH)
  64.  
  65.                 val datePickerDialog = DatePickerDialog(
  66.                     this@PiutangInputActivity,
  67.                     { _, sYear, sMonth, sDay ->
  68.                         val dat = String.format("%d-%02d-%02d", sYear, (sMonth + 1), sDay)
  69.                         txtTanggal.setText(dat)
  70.                     },
  71.                     year,
  72.                     month,
  73.                     day
  74.                 )
  75.                 if(v.length==10){
  76.                     var ev = v.split("-")
  77.                     datePickerDialog.updateDate(ev[0].toInt(), (ev[1].toInt()-1), ev[2].toInt())
  78.                 }
  79.                 datePickerDialog.show()
  80.             }
  81.  
  82.             txtJumlah.addTextChangedListener(object : TextWatcher {
  83.                 override fun beforeTextChanged(s: CharSequence, start: Int, count: Int, after: Int) {}
  84.                 override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) {
  85.                     var input = s.toString()
  86.                     if (!input.isEmpty()) {
  87.                         input = input.replace(",", "")
  88.                         input = input.replace(".", "")
  89.                         val format = DecimalFormat("#,###,###")
  90.                         var formatted: String = format.format(input.toDouble()).replace(",", ".")
  91.                         txtJumlah.removeTextChangedListener(this)
  92.                         txtJumlah.setText(formatted)
  93.                         txtJumlah.setSelection(formatted.length)
  94.                         txtJumlah.addTextChangedListener(this)
  95.                     }
  96.                 }
  97.                 override fun afterTextChanged(s: Editable) {}
  98.             })
  99.  
  100.             btnSimpan.setOnClickListener{
  101.                 var ok = false;
  102.                 /** Validate Input **/
  103.                 // validate Nama
  104.                 if(txtNama.text.toString().isEmpty()){
  105.                     //txtNama.error = "Wajib diisi"
  106.                     txtNama.requestFocus()
  107.                     txtError = "Nama harus diisi"
  108.                     //return@setOnClickListener
  109.                 }
  110.                 // validate Gender
  111.                 else if(!rbWanita.isChecked && !rbPria.isChecked){
  112.                     txtError = "Silahkan pilih Jenis Kelamin!"
  113.                     //return@setOnClickListener
  114.                 }
  115.                 // validate Tanggal
  116.                 else if(txtTanggal.text.toString().isEmpty()){
  117.                     //txtTanggal.error = "Pilih Tanggal"
  118.                     txtError = "Silahkan pilih Tanggal!"
  119.                     //return@setOnClickListener
  120.                 }
  121.                 // validate Jenis
  122.                 else if(optHutang.selectedItem.toString() == "Pilih Satu"){
  123.                     //val errHutang = optHutang.selectedView as TextView
  124.                     //errHutang.error = "Silahkan Pilih Satu"
  125.                     txtError = "Silahkan pilih Jenis Hutang!"
  126.                     optHutang.requestFocus()
  127.                     //return@setOnClickListener
  128.                 }
  129.                 // validate Jumlah
  130.                 else if(txtJumlah.text.toString().isEmpty()){
  131.                     //txtJumlah.error = "Wajib diisi"
  132.                     txtError = "Silahkan input Jumlah Hutang!"
  133.                     txtJumlah.requestFocus()
  134.                     //return@setOnClickListener
  135.                 }else{
  136.                     txtError = "Data berhasil disimpan";
  137.                     ok = true
  138.                 }
  139.  
  140.                 var dataPiutang = Piutang(
  141.                         nama = txtNama.text.toString(),
  142.                         gender = if(rbWanita.isChecked) "Perempuan" else "Laki-laki",
  143.                         tanggal = txtTanggal.text.toString(),
  144.                         jenis = optHutang.selectedItem.toString(),
  145.                         jumlah = txtJumlah.text.toString(),
  146.                         keterangan = txtKeterangan.text.toString(),
  147.                 )
  148.  
  149.                 /** Display Result **/
  150.                 // display Result
  151.                 if(txtError!="") {
  152.                     Toast.makeText(
  153.                         this@PiutangInputActivity,
  154.                         txtError,
  155.                         Toast.LENGTH_LONG
  156.                     ).show()
  157.                 }
  158.                 if(ok){
  159.                     //txtResult.setText(String.format(java.util.Locale.GERMANY, "%,d", txtJumlah.replace(".","").toLong()))
  160.                     // Tampil ke text (v1)
  161.                     /*var result = "Nama Lengkap : ${txtNama.text}"
  162.                     result += "\nJenis Kelamin : ${if(rbWanita.isChecked) "Perempuan" else "Laki-laki"}"
  163.                     result += "\nTanggal : ${txtTanggal.text}"
  164.                     result += "\nJenis Hutang : ${optHutang.selectedItem }"
  165.                     result += "\nJumlah : ${txtJumlah.text }"
  166.  
  167.                     txtResult.text = result*/
  168.  
  169.                     // tampil ke intent (v2)
  170.                     /*val intent = Intent(baseContext,PiutangViewActivity::class.java)
  171.                     intent.putExtra("data", dataPiutang)
  172.                     startActivity(intent)*/
  173.  
  174.                     // tampil ke list view (v3)
  175.                     /*listData.add(dataPiutang)
  176.                     dataAdapter.updateData(listData)*/
  177.  
  178.                     // simpan ke database (v4)
  179.                     runBlocking {
  180.                         withContext(Dispatchers.IO) {
  181.                             appDb?.piutangDao()?.insert(dataPiutang)
  182.                         }
  183.                     }
  184.                     finish()
  185.                 }
  186.             }
  187.         }
  188.  
  189.         val intentData = intent.extras
  190.         if(intentData != null){
  191.             val user : PengutangData = intentData.getParcelable("user") ?: PengutangData()
  192.             bindData(user)
  193.         }
  194.     }
  195.  
  196.     val startForResult = registerForActivityResult(ActivityResultContracts.StartActivityForResult()){ result ->
  197.         if(result.resultCode == RESULT_OK){
  198.             val bundle = result.data
  199.             val user : PengutangData = bundle?.getParcelableExtra("user") ?: PengutangData()
  200.             bindData(user)
  201.         }
  202.     }
  203.  
  204.     fun bindData(data: PengutangData){
  205.         with(binding){
  206.             txtIdUser.setText(dataModel?.iduser.toString())
  207.             txtNama.setText(data?.nama)
  208.             if (data?.gender == "L") {
  209.                 rbPria.isChecked = true
  210.             } else if (data?.gender == "P") {
  211.                 rbWanita.isChecked = true
  212.             }
  213.  
  214.         }
  215.     }
  216.  
  217.  
  218.     private val radioListener = CompoundButton.OnCheckedChangeListener{ rb, isChecked ->
  219.         if(isChecked){
  220.             if(rb.id == R.id.rbWanita){
  221.                 binding.rbPria.isChecked = false
  222.             }else if(rb.id == R.id.rbPria){
  223.                 binding.rbWanita.isChecked = false
  224.             }
  225.         }
  226.     }
  227.  
  228.  
  229.  
  230. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement