From f3875674c21d070fc19d2f43cf601e8bd4c5346b Mon Sep 17 00:00:00 2001
From: Muhammad Rifko Favian <13521075@std.stei.itb.ac.id>
Date: Tue, 2 Apr 2024 02:33:17 +0700
Subject: [PATCH] feat: add enum for transaction category

---
 .../bondoman/AddTransactionActivity.kt        | 13 +++++---
 .../bondoman/room/TransactionCategory.kt      |  6 ++++
 .../bondoman/room/TransactionEntity.kt        |  6 ++--
 .../onionsquad/bondoman/util/Converters.kt    | 30 +++++++++++++++++++
 .../onionsquad/bondoman/util/DateConverter.kt | 19 ------------
 .../res/layout/activity_add_transaction.xml   | 21 ++++++++++---
 6 files changed, 65 insertions(+), 30 deletions(-)
 create mode 100644 app/src/main/java/com/onionsquad/bondoman/room/TransactionCategory.kt
 create mode 100644 app/src/main/java/com/onionsquad/bondoman/util/Converters.kt
 delete mode 100644 app/src/main/java/com/onionsquad/bondoman/util/DateConverter.kt

diff --git a/app/src/main/java/com/onionsquad/bondoman/AddTransactionActivity.kt b/app/src/main/java/com/onionsquad/bondoman/AddTransactionActivity.kt
index 3408874..7f670a8 100644
--- a/app/src/main/java/com/onionsquad/bondoman/AddTransactionActivity.kt
+++ b/app/src/main/java/com/onionsquad/bondoman/AddTransactionActivity.kt
@@ -4,9 +4,11 @@ import android.content.Intent
 import android.os.Bundle
 import android.widget.Button
 import android.widget.EditText
+import android.widget.RadioGroup
 import androidx.appcompat.app.AppCompatActivity
 import androidx.lifecycle.ViewModelProvider
 import com.onionsquad.bondoman.repository.TransactionRepository
+import com.onionsquad.bondoman.room.TransactionCategory
 import com.onionsquad.bondoman.room.TransactionDatabase
 import com.onionsquad.bondoman.room.TransactionEntity
 import com.onionsquad.bondoman.ui.transaction.TransactionViewModel
@@ -24,7 +26,7 @@ class AddTransactionActivity : AppCompatActivity() {
 
         val titleEditText: EditText = findViewById(R.id.titleEditText)
         val amountEditText: EditText = findViewById(R.id.amountEditText)
-        val categoryEditText: EditText = findViewById(R.id.categoryEditText)
+        val categoryRadioGroup: RadioGroup = findViewById(R.id.categoryRadioGroup)
         val locationEditText: EditText = findViewById(R.id.locationEditText)
 
         val factory = TransactionViewModelFactory(repository)
@@ -34,10 +36,14 @@ class AddTransactionActivity : AppCompatActivity() {
         saveButton.setOnClickListener {
             val title = titleEditText.text.toString()
             val amount = amountEditText.text.toString().toDoubleOrNull() ?: 0.0
-            val category = categoryEditText.text.toString()
+            val selectedCategoryId = categoryRadioGroup.checkedRadioButtonId
+            val category = when (selectedCategoryId) {
+                R.id.incomeRadioButton -> TransactionCategory.INCOME
+                R.id.outcomeRadioButton -> TransactionCategory.OUTCOME
+                else -> TransactionCategory.OUTCOME
+            }
             val location = locationEditText.text.toString()
 
-            // Dapatkan tanggal saat ini
             val currentDate = Date()
 
             val transaction = TransactionEntity(
@@ -51,7 +57,6 @@ class AddTransactionActivity : AppCompatActivity() {
             viewModel.insertTransaction(transaction)
 
 
-            // Navigasi kembali ke halaman daftar transaksi
             Intent(this@AddTransactionActivity, MainActivity::class.java).also {
                 startActivity(it)
             }
diff --git a/app/src/main/java/com/onionsquad/bondoman/room/TransactionCategory.kt b/app/src/main/java/com/onionsquad/bondoman/room/TransactionCategory.kt
new file mode 100644
index 0000000..a49c479
--- /dev/null
+++ b/app/src/main/java/com/onionsquad/bondoman/room/TransactionCategory.kt
@@ -0,0 +1,6 @@
+package com.onionsquad.bondoman.room
+
+enum class TransactionCategory {
+    INCOME,
+    OUTCOME
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/onionsquad/bondoman/room/TransactionEntity.kt b/app/src/main/java/com/onionsquad/bondoman/room/TransactionEntity.kt
index 66c1766..64898cb 100644
--- a/app/src/main/java/com/onionsquad/bondoman/room/TransactionEntity.kt
+++ b/app/src/main/java/com/onionsquad/bondoman/room/TransactionEntity.kt
@@ -4,11 +4,11 @@ import androidx.room.Entity
 import androidx.room.PrimaryKey
 import androidx.room.ColumnInfo
 import androidx.room.TypeConverters
-import com.onionsquad.bondoman.util.DateConverter
+import com.onionsquad.bondoman.util.Converters
 import java.util.Date
 
 @Entity(tableName = "transactions")
-@TypeConverters(DateConverter::class)
+@TypeConverters(Converters::class)
 data class TransactionEntity(
     @PrimaryKey(autoGenerate = true)
     val id: Int = 0,
@@ -20,7 +20,7 @@ data class TransactionEntity(
     val amount: Double,
 
     @ColumnInfo(name = "category")
-    val category: String,
+    val category: TransactionCategory,
 
     @ColumnInfo(name = "date", defaultValue = "CURRENT_TIMESTAMP")
     val date: Date,
diff --git a/app/src/main/java/com/onionsquad/bondoman/util/Converters.kt b/app/src/main/java/com/onionsquad/bondoman/util/Converters.kt
new file mode 100644
index 0000000..eb9f90a
--- /dev/null
+++ b/app/src/main/java/com/onionsquad/bondoman/util/Converters.kt
@@ -0,0 +1,30 @@
+package com.onionsquad.bondoman.util
+
+import androidx.room.TypeConverter
+import com.onionsquad.bondoman.room.TransactionCategory
+import java.util.Date
+
+object Converters {
+
+    @TypeConverter
+    @JvmStatic
+    fun fromTimestamp(value: Long?): Date? {
+        return value?.let { Date(it) }
+    }
+
+    @TypeConverter
+    @JvmStatic
+    fun dateToTimestamp(value: Date?): Long? {
+        return value?.time
+    }
+
+    @TypeConverter
+    fun fromTransactionCategory(category: TransactionCategory): String {
+        return category.name
+    }
+
+    @TypeConverter
+    fun toTransactionCategory(categoryString: String): TransactionCategory {
+        return TransactionCategory.valueOf(categoryString)
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/onionsquad/bondoman/util/DateConverter.kt b/app/src/main/java/com/onionsquad/bondoman/util/DateConverter.kt
deleted file mode 100644
index 408d43f..0000000
--- a/app/src/main/java/com/onionsquad/bondoman/util/DateConverter.kt
+++ /dev/null
@@ -1,19 +0,0 @@
-package com.onionsquad.bondoman.util
-
-import androidx.room.TypeConverter
-import java.util.Date
-
-object DateConverter {
-
-    @TypeConverter
-    @JvmStatic
-    fun fromTimestamp(value: Long?): Date? {
-        return value?.let { Date(it) }
-    }
-
-    @TypeConverter
-    @JvmStatic
-    fun dateToTimestamp(value: Date?): Long? {
-        return value?.time
-    }
-}
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_add_transaction.xml b/app/src/main/res/layout/activity_add_transaction.xml
index 1858a85..95fa2b3 100644
--- a/app/src/main/res/layout/activity_add_transaction.xml
+++ b/app/src/main/res/layout/activity_add_transaction.xml
@@ -28,13 +28,26 @@
         android:hint="Nominal"
         android:inputType="numberDecimal" />
 
-    <EditText
-        android:id="@+id/categoryEditText"
+    <RadioGroup
+        android:id="@+id/categoryRadioGroup"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:layout_marginTop="8dp"
-        android:hint="Kategori"
-        android:inputType="text" />
+        android:orientation="horizontal">
+
+        <RadioButton
+            android:id="@+id/incomeRadioButton"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="Pemasukan" />
+
+        <RadioButton
+            android:id="@+id/outcomeRadioButton"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="Pengeluaran" />
+
+    </RadioGroup>
 
     <EditText
         android:id="@+id/locationEditText"
-- 
GitLab