From 90ed094319f0b3bb6a113cf2c3396cf4e02821b9 Mon Sep 17 00:00:00 2001
From: rayhanp1402 <rayhan.hanif14maulana@gmail.com>
Date: Sun, 31 Mar 2024 19:59:57 +0700
Subject: [PATCH] feat: Edit transaction fragment

---
 .../transactions/EditTransactionsFragment.kt  | 70 +++++++++++++++++++
 .../ui/transactions/TransactionsFragment.kt   |  4 +-
 .../transactions/TransactionsListAdapter.kt   |  8 +++
 .../res/layout/fragment_edit_transactions.xml | 69 ++++++++++++++++++
 .../res/layout/recyclerview_transactions.xml  |  1 +
 .../main/res/navigation/mobile_navigation.xml |  6 ++
 app/src/main/res/values/strings.xml           |  1 +
 7 files changed, 157 insertions(+), 2 deletions(-)
 create mode 100644 app/src/main/java/com/example/bondoyap/ui/transactions/EditTransactionsFragment.kt
 create mode 100644 app/src/main/res/layout/fragment_edit_transactions.xml

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
new file mode 100644
index 0000000..5a43805
--- /dev/null
+++ b/app/src/main/java/com/example/bondoyap/ui/transactions/EditTransactionsFragment.kt
@@ -0,0 +1,70 @@
+package com.example.bondoyap.ui.transactions
+
+import android.R
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ArrayAdapter
+import androidx.fragment.app.Fragment
+import androidx.fragment.app.viewModels
+import com.example.bondoyap.databinding.FragmentAddTransactionsBinding
+import com.example.bondoyap.databinding.FragmentEditTransactionsBinding
+
+class EditTransactionsFragment : Fragment() {
+
+    private var _binding: FragmentEditTransactionsBinding? = null
+
+    // This property is only valid between onCreateView and
+    // onDestroyView.
+    private val binding get() = _binding!!
+
+    private val transactionsViewModel: TransactionsViewModel by viewModels {
+        TransactionsViewModelFactory((requireContext().applicationContext as TransactionsApplication).repository)
+    }
+
+    override fun onCreateView(
+        inflater: LayoutInflater,
+        container: ViewGroup?,
+        savedInstanceState: Bundle?
+    ): View {
+        _binding = FragmentEditTransactionsBinding.inflate(inflater, container, false)
+
+        val pemasukan = "Pemasukan"
+        val pengeluaran = "Pengeluaran"
+
+        val categories = arrayOf(pemasukan, pengeluaran)
+        val adapter = ArrayAdapter(requireContext(), R.layout.simple_spinner_item, categories)
+
+        adapter.setDropDownViewResource(R.layout.simple_spinner_dropdown_item)
+        binding.spinnerKategori.adapter = adapter
+
+
+
+        binding.buttonSimpan.setOnClickListener {
+            val isPemasukan: Boolean = when (binding.spinnerKategori.selectedItem.toString()) {
+                pemasukan -> true
+                else -> false
+            }
+
+            val transaction: Transactions = Transactions(
+                judul = binding.editTextJudul.text.toString(),
+                nominal = binding.editTextNominal.text.toString().toDouble(),
+                isPemasukan = isPemasukan
+            )
+
+            transactionsViewModel.upsert(transaction)
+
+            binding.editTextJudul.text.clear()
+            binding.editTextNominal.text.clear()
+            binding.spinnerKategori.setSelection(0)
+        }
+
+        return binding.root
+    }
+
+    override fun onDestroyView() {
+        super.onDestroyView()
+        _binding = null
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/bondoyap/ui/transactions/TransactionsFragment.kt b/app/src/main/java/com/example/bondoyap/ui/transactions/TransactionsFragment.kt
index d7ecda3..02ae440 100644
--- a/app/src/main/java/com/example/bondoyap/ui/transactions/TransactionsFragment.kt
+++ b/app/src/main/java/com/example/bondoyap/ui/transactions/TransactionsFragment.kt
@@ -37,8 +37,8 @@ class TransactionsFragment: Fragment() {
         recyclerView.adapter = adapter
         recyclerView.layoutManager = LinearLayoutManager(requireContext())
 
-        transactionsViewModel.allTransactions.observe(viewLifecycleOwner, Observer { words ->
-            words?.let { adapter.submitList(it) }
+        transactionsViewModel.allTransactions.observe(viewLifecycleOwner, Observer { transactions ->
+            transactions?.let { adapter.submitList(it) }
         })
 
         binding.buttonAddTransaction.setOnClickListener {
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 2797943..c19d6bd 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
@@ -4,6 +4,9 @@ import android.view.LayoutInflater
 import android.view.View
 import android.view.ViewGroup
 import android.widget.TextView
+import androidx.cardview.widget.CardView
+import androidx.navigation.Navigation
+import androidx.navigation.fragment.findNavController
 import androidx.recyclerview.widget.DiffUtil
 import androidx.recyclerview.widget.ListAdapter
 import androidx.recyclerview.widget.RecyclerView
@@ -24,6 +27,7 @@ class TransactionsListAdapter :
 }
 
 class TransactionsViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
+    private val cardView: CardView = itemView.findViewById(R.id.cardViewTransaction)
     private val transactionTitle: TextView = itemView.findViewById(R.id.transactionTitle)
     private val transactionAmount: TextView = itemView.findViewById(R.id.transactionAmount)
     private val transactionCategory: TextView = itemView.findViewById(R.id.transactionCategory)
@@ -36,6 +40,10 @@ class TransactionsViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView)
             true -> "Pemasukan"
             else -> "Pengeluaran"
         }
+
+        cardView.setOnClickListener {
+            Navigation.findNavController(itemView).navigate(R.id.navigation_edit_transactions)
+        }
     }
 
     companion object {
diff --git a/app/src/main/res/layout/fragment_edit_transactions.xml b/app/src/main/res/layout/fragment_edit_transactions.xml
new file mode 100644
index 0000000..5f8dcfe
--- /dev/null
+++ b/app/src/main/res/layout/fragment_edit_transactions.xml
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:padding="16dp"
+    android:orientation="vertical">
+
+    <TextView
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:text="@string/textfield_label_judul" />
+    <EditText
+        android:id="@+id/editText_judul"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:autofillHints="judul"
+        android:hint="@string/hint_judul"
+        android:inputType="text"
+        android:layout_marginBottom="16dp" />
+
+    <TextView
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:text="@string/textfield_label_nominal" />
+    <EditText
+        android:id="@+id/editText_nominal"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:autofillHints="nominal"
+        android:hint="@string/hint_nominal"
+        android:inputType="numberDecimal"
+        android:layout_marginBottom="16dp" />
+
+    <TextView
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:text="@string/textfield_label_kategori" />
+    <Spinner
+        android:id="@+id/spinner_kategori"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginBottom="16dp" />
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:orientation="horizontal">
+
+        <Button
+            android:id="@+id/button_simpan"
+            android:layout_width="0dp"
+            android:layout_height="wrap_content"
+            android:layout_weight="1"
+            android:layout_marginEnd="8dp"
+            android:text="@string/button_simpan" />
+
+        <Button
+            android:id="@+id/button_hapus"
+            android:layout_width="0dp"
+            android:layout_height="wrap_content"
+            android:layout_weight="1"
+            android:text="@string/button_hapus"
+            android:backgroundTint="@color/red"/>
+
+    </LinearLayout>
+
+
+
+</LinearLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/recyclerview_transactions.xml b/app/src/main/res/layout/recyclerview_transactions.xml
index b7809f7..61d9975 100644
--- a/app/src/main/res/layout/recyclerview_transactions.xml
+++ b/app/src/main/res/layout/recyclerview_transactions.xml
@@ -1,6 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:id="@+id/cardViewTransaction"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:layout_margin="8dp"
diff --git a/app/src/main/res/navigation/mobile_navigation.xml b/app/src/main/res/navigation/mobile_navigation.xml
index bfdc451..27c15a6 100644
--- a/app/src/main/res/navigation/mobile_navigation.xml
+++ b/app/src/main/res/navigation/mobile_navigation.xml
@@ -23,6 +23,12 @@
         android:label="@string/title_transactions"
         tools:layout="@layout/fragment_add_transactions" />
 
+    <fragment
+        android:id="@+id/navigation_edit_transactions"
+        android:name="com.example.bondoyap.ui.transactions.EditTransactionsFragment"
+        android:label="@string/title_transactions"
+        tools:layout="@layout/fragment_edit_transactions" />
+
     <fragment
         android:id="@+id/navigation_scanner"
         android:name="com.example.bondoyap.ui.scanner.ScannerFragment"
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 7aa97cd..2846dd1 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -27,6 +27,7 @@
     <string name="textfield_label_kategori">Kategori</string>
     <string name="textfield_label_lokasi">Lokasi</string>
     <string name="button_simpan">Simpan</string>
+    <string name="button_hapus">Hapus</string>
     <string name="hint_judul">Enter Judul</string>
     <string name="hint_nominal">Enter Nominal</string>
     <string name="hint_kategori">Enter Kategori</string>
-- 
GitLab