diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 429e5ba391808a24c61b1d9c12d6339afb22c1e8..19a7945c0328370bb1578a3f67d095c2558f6997 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -3,6 +3,7 @@ xmlns:tools="http://schemas.android.com/tools"> <uses-permission android:name="android.permission.INTERNET" /> + <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <application android:name=".ui.transactions.TransactionsApplication" diff --git a/app/src/main/java/com/example/bondoyap/ui/transactions/AddTransactionsFragment.kt b/app/src/main/java/com/example/bondoyap/ui/transactions/AddTransactionsFragment.kt index 0786702feda5826645d625e0aab66e265aa78686..00f3673be3940831dc3fd5c94bd51fbbe70ceca1 100644 --- a/app/src/main/java/com/example/bondoyap/ui/transactions/AddTransactionsFragment.kt +++ b/app/src/main/java/com/example/bondoyap/ui/transactions/AddTransactionsFragment.kt @@ -6,6 +6,7 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.ArrayAdapter +import android.widget.Toast import androidx.fragment.app.Fragment import androidx.fragment.app.viewModels import com.example.bondoyap.databinding.FragmentAddTransactionsBinding @@ -52,15 +53,29 @@ class AddTransactionsFragment : Fragment() { val dateFormat = SimpleDateFormat("dd/MM/yyyy", Locale.getDefault()) val currentDate = dateFormat.format(Date()) + val judul = if (binding.editTextJudul.text.toString().trim().isNotEmpty()) { + binding.editTextJudul.text.toString() + } else { + "Untitled" + } + + val nominal = if (binding.editTextNominal.text.toString().trim().isNotEmpty()) { + binding.editTextNominal.text.toString().toDouble() + } else { + 0.0 + } + val transaction: Transactions = Transactions( - judul = binding.editTextJudul.text.toString(), - nominal = binding.editTextNominal.text.toString().toDouble(), + judul = judul, + nominal = nominal, isPemasukan = isPemasukan, tanggal = currentDate ) transactionsViewModel.upsert(transaction) + Toast.makeText(requireContext(), "Transaksi berhasil disimpan", Toast.LENGTH_SHORT).show() + binding.editTextJudul.text.clear() binding.editTextNominal.text.clear() binding.spinnerKategori.setSelection(0) diff --git a/app/src/main/java/com/example/bondoyap/ui/transactions/EditTransactionsFragment.kt b/app/src/main/java/com/example/bondoyap/ui/transactions/EditTransactionsFragment.kt index 1a02e7560ea38d381079e543129dccd6b82b9c3b..a10402e363f98fbf0301093d1481508e1a96aec7 100644 --- a/app/src/main/java/com/example/bondoyap/ui/transactions/EditTransactionsFragment.kt +++ b/app/src/main/java/com/example/bondoyap/ui/transactions/EditTransactionsFragment.kt @@ -1,6 +1,7 @@ package com.example.bondoyap.ui.transactions import android.R +import android.app.AlertDialog import android.os.Bundle import android.text.Editable import android.text.Spannable @@ -9,6 +10,7 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.ArrayAdapter +import android.widget.Toast import androidx.fragment.app.Fragment import androidx.fragment.app.viewModels import androidx.navigation.fragment.findNavController @@ -57,7 +59,7 @@ class EditTransactionsFragment : Fragment() { val originalTransaction: Transactions = transactionsViewModel.get(transactionId) binding.editTextJudul.text = SpannableStringBuilder(originalTransaction.judul) - binding.editTextNominal.text = SpannableStringBuilder(originalTransaction.nominal.toString()) + binding.editTextNominal.text = SpannableStringBuilder(originalTransaction.nominal.toBigDecimal().toString()) if (originalTransaction.isPemasukan) { binding.spinnerKategori.setSelection(categories.indexOf(pemasukan)) @@ -69,29 +71,45 @@ class EditTransactionsFragment : Fragment() { } - binding.buttonSimpan.setOnClickListener { + binding.buttonUpdate.setOnClickListener { val isPemasukan: Boolean = when (binding.spinnerKategori.selectedItem.toString()) { pemasukan -> true else -> false } + val judul = if (binding.editTextJudul.text.toString().trim().isNotEmpty()) { + binding.editTextJudul.text.toString() + } else { + "Untitled" + } + + val nominal = if (binding.editTextNominal.text.toString().trim().isNotEmpty()) { + binding.editTextNominal.text.toString().toDouble() + } else { + 0.0 + } + val transaction: Transactions = Transactions( - judul = binding.editTextJudul.text.toString(), - nominal = binding.editTextNominal.text.toString().toDouble(), + judul = judul, + nominal = nominal, isPemasukan = isPemasukan, tanggal = tanggal, id = transactionId ) - transactionsViewModel.upsert(transaction) + showConfirmationDialog("Update", "Apakah Anda yakin ingin memperbarui transaksi ini?") { + transactionsViewModel.upsert(transaction) - binding.editTextJudul.text = SpannableStringBuilder(transaction.judul) - binding.editTextNominal.text = SpannableStringBuilder(transaction.nominal.toString()) + binding.editTextJudul.text = SpannableStringBuilder(transaction.judul) + binding.editTextNominal.text = + SpannableStringBuilder(transaction.nominal.toBigDecimal().toString()) - if (transaction.isPemasukan) { - binding.spinnerKategori.setSelection(categories.indexOf(pemasukan)) - } else { - binding.spinnerKategori.setSelection(categories.indexOf(pengeluaran)) + if (transaction.isPemasukan) { + binding.spinnerKategori.setSelection(categories.indexOf(pemasukan)) + } else { + binding.spinnerKategori.setSelection(categories.indexOf(pengeluaran)) + } + Toast.makeText(requireContext(), "Transaksi berhasil diperbarui", Toast.LENGTH_SHORT).show() } } @@ -104,14 +122,30 @@ class EditTransactionsFragment : Fragment() { id = transactionId ) - transactionsViewModel.delete(transaction) - - findNavController().navigate(com.example.bondoyap.R.id.navigation_transactions) + showConfirmationDialog("Hapus", "Apakah Anda yakin ingin menghapus transaksi ini?") { + transactionsViewModel.delete(transaction) + findNavController().navigate(com.example.bondoyap.R.id.navigation_transactions) + Toast.makeText(requireContext(), "Transaksi berhasil dihapus", Toast.LENGTH_SHORT).show() + } } return binding.root } + private fun showConfirmationDialog(title: String, message: String, action: () -> Unit) { + val builder = AlertDialog.Builder(requireContext()) + builder.setTitle(title) + builder.setMessage(message) + builder.setPositiveButton("Ya") { _, _ -> + action.invoke() + } + builder.setNegativeButton("Tidak") { dialog, _ -> + dialog.dismiss() + } + val dialog = builder.create() + dialog.show() + } + override fun onDestroyView() { super.onDestroyView() _binding = null diff --git a/app/src/main/java/com/example/bondoyap/ui/transactions/TransactionsListAdapter.kt b/app/src/main/java/com/example/bondoyap/ui/transactions/TransactionsListAdapter.kt index a9e9ff54b8b97519ac1447784dd48223c81f6e84..c79ddd8aa82c0a4346cbba83b424f23f1822c9f6 100644 --- a/app/src/main/java/com/example/bondoyap/ui/transactions/TransactionsListAdapter.kt +++ b/app/src/main/java/com/example/bondoyap/ui/transactions/TransactionsListAdapter.kt @@ -35,8 +35,22 @@ class TransactionsViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) private val transactionDate: TextView = itemView.findViewById(R.id.transactionDate) fun bind(transaction: Transactions) { - val amountText = "IDR " + transaction.nominal.toString() - transactionTitle.text = transaction.judul + val maxAmountLength = 12 + val maxTitleLength = 19 + + val amountText = if (transaction.nominal.toString().length > maxAmountLength) { + "IDR " + transaction.nominal.toBigDecimal().toString().substring(0, maxAmountLength) + "..." + } else { + "IDR " + transaction.nominal.toBigDecimal().toString() + } + + val titleText = if (transaction.judul.length > maxTitleLength) { + transaction.judul.substring(0, maxTitleLength) + "..." + } else { + transaction.judul + } + + transactionTitle.text = titleText transactionAmount.text = amountText transactionCategory.text = when (transaction.isPemasukan) { true -> "Pemasukan" diff --git a/app/src/main/res/layout/fragment_add_transactions.xml b/app/src/main/res/layout/fragment_add_transactions.xml index 854e98ebcfeb159d79b7f2b8c544d277eedf55c1..c7bc521ef2c2912a1614877a151b223a7d326f98 100644 --- a/app/src/main/res/layout/fragment_add_transactions.xml +++ b/app/src/main/res/layout/fragment_add_transactions.xml @@ -16,6 +16,7 @@ android:autofillHints="judul" android:hint="@string/hint_judul" android:inputType="text" + android:maxLength="150" android:layout_marginBottom="16dp" /> <TextView @@ -29,6 +30,7 @@ android:autofillHints="nominal" android:hint="@string/hint_nominal" android:inputType="numberDecimal" + android:maxLength="18" android:layout_marginBottom="16dp" /> <TextView diff --git a/app/src/main/res/layout/fragment_edit_transactions.xml b/app/src/main/res/layout/fragment_edit_transactions.xml index 5f8dcfe23bf8f2e46b518f34da93edc1590b63ad..b1bf97d41befb893d99ccc4ca40255f2474c01bf 100644 --- a/app/src/main/res/layout/fragment_edit_transactions.xml +++ b/app/src/main/res/layout/fragment_edit_transactions.xml @@ -16,6 +16,7 @@ android:autofillHints="judul" android:hint="@string/hint_judul" android:inputType="text" + android:maxLength="150" android:layout_marginBottom="16dp" /> <TextView @@ -29,6 +30,7 @@ android:autofillHints="nominal" android:hint="@string/hint_nominal" android:inputType="numberDecimal" + android:maxLength="18" android:layout_marginBottom="16dp" /> <TextView @@ -47,12 +49,12 @@ android:orientation="horizontal"> <Button - android:id="@+id/button_simpan" + android:id="@+id/button_update" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:layout_marginEnd="8dp" - android:text="@string/button_simpan" /> + android:text="@string/button_update" /> <Button android:id="@+id/button_hapus" diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 2846dd1e8183e24214ca989ddc92c832d6624f57..d59eb366c2f88c41ccacee48df8917b49bf379b0 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -28,6 +28,7 @@ <string name="textfield_label_lokasi">Lokasi</string> <string name="button_simpan">Simpan</string> <string name="button_hapus">Hapus</string> + <string name="button_update">Update</string> <string name="hint_judul">Enter Judul</string> <string name="hint_nominal">Enter Nominal</string> <string name="hint_kategori">Enter Kategori</string>