From 00717b590db62e9b1d23e64caa8dd98ac9469e82 Mon Sep 17 00:00:00 2001
From: rayhanp1402 <rayhan.hanif14maulana@gmail.com>
Date: Mon, 1 Apr 2024 00:09:00 +0700
Subject: [PATCH] db migration: Add 'lokasi' and 'tanggal' columns

---
 .../transactions/AddTransactionsFragment.kt   |  4 ++-
 .../transactions/EditTransactionsFragment.kt  | 19 ++++++++------
 .../bondoyap/ui/transactions/Transactions.kt  |  6 +++++
 .../transactions/TransactionsRoomDatabase.kt  | 25 +++++++++++++++++--
 4 files changed, 43 insertions(+), 11 deletions(-)

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 4d43062..52f6442 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
@@ -9,6 +9,7 @@ import android.widget.ArrayAdapter
 import androidx.fragment.app.Fragment
 import androidx.fragment.app.viewModels
 import com.example.bondoyap.databinding.FragmentAddTransactionsBinding
+import java.util.Date
 
 class AddTransactionsFragment : Fragment() {
 
@@ -49,7 +50,8 @@ class AddTransactionsFragment : Fragment() {
             val transaction: Transactions = Transactions(
                 judul = binding.editTextJudul.text.toString(),
                 nominal = binding.editTextNominal.text.toString().toDouble(),
-                isPemasukan = isPemasukan
+                isPemasukan = isPemasukan,
+                tanggal = Date().toString()
             )
 
             transactionsViewModel.upsert(transaction)
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 9ca1bc7..1a02e75 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
@@ -37,6 +37,8 @@ class EditTransactionsFragment : Fragment() {
     ): View {
         _binding = FragmentEditTransactionsBinding.inflate(inflater, container, false)
 
+        var tanggal: String = ""
+
         val pemasukan = "Pemasukan"
         val pengeluaran = "Pengeluaran"
 
@@ -46,6 +48,8 @@ class EditTransactionsFragment : Fragment() {
         adapter.setDropDownViewResource(R.layout.simple_spinner_dropdown_item)
         binding.spinnerKategori.adapter = adapter
 
+        binding.spinnerKategori.isEnabled = false
+
         val transactionId: Int = arguments?.getInt("transaction_id") ?: -1
 
         CoroutineScope(Main).launch {
@@ -61,6 +65,8 @@ class EditTransactionsFragment : Fragment() {
                 binding.spinnerKategori.setSelection(categories.indexOf(pengeluaran))
             }
 
+            tanggal = originalTransaction.tanggal
+
         }
 
         binding.buttonSimpan.setOnClickListener {
@@ -73,6 +79,7 @@ class EditTransactionsFragment : Fragment() {
                 judul = binding.editTextJudul.text.toString(),
                 nominal = binding.editTextNominal.text.toString().toDouble(),
                 isPemasukan = isPemasukan,
+                tanggal = tanggal,
                 id = transactionId
             )
 
@@ -89,15 +96,11 @@ class EditTransactionsFragment : Fragment() {
         }
 
         binding.buttonHapus.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,
+                judul = "",
+                nominal = 0.0,
+                isPemasukan = false,
+                tanggal = "",
                 id = transactionId
             )
 
diff --git a/app/src/main/java/com/example/bondoyap/ui/transactions/Transactions.kt b/app/src/main/java/com/example/bondoyap/ui/transactions/Transactions.kt
index 152e463..c5e55dd 100644
--- a/app/src/main/java/com/example/bondoyap/ui/transactions/Transactions.kt
+++ b/app/src/main/java/com/example/bondoyap/ui/transactions/Transactions.kt
@@ -15,6 +15,12 @@ data class Transactions(
     @ColumnInfo(name = "is_pemasukan")
     val isPemasukan: Boolean,
 
+    @ColumnInfo(name = "tanggal")
+    val tanggal: String,
+
+    @ColumnInfo(name = "lokasi")
+    val lokasi: String = "",
+
     @PrimaryKey(autoGenerate = true)
     @ColumnInfo(name = "id")
     val id: Int = 0
diff --git a/app/src/main/java/com/example/bondoyap/ui/transactions/TransactionsRoomDatabase.kt b/app/src/main/java/com/example/bondoyap/ui/transactions/TransactionsRoomDatabase.kt
index 7785d48..b5e530f 100644
--- a/app/src/main/java/com/example/bondoyap/ui/transactions/TransactionsRoomDatabase.kt
+++ b/app/src/main/java/com/example/bondoyap/ui/transactions/TransactionsRoomDatabase.kt
@@ -4,10 +4,12 @@ import android.content.Context
 import androidx.room.Database
 import androidx.room.Room
 import androidx.room.RoomDatabase
+import androidx.room.migration.Migration
+import androidx.sqlite.db.SupportSQLiteDatabase
 
 @Database(
     entities = [Transactions::class],
-    version = 1,
+    version = 2,
     exportSchema = false
 )
 public abstract class TransactionsRoomDatabase: RoomDatabase() {
@@ -24,10 +26,29 @@ public abstract class TransactionsRoomDatabase: RoomDatabase() {
                     context.applicationContext,
                     TransactionsRoomDatabase::class.java,
                     "transactions_database"
-                ).build()
+                ).addMigrations(MIGRATION_1_2).
+                build()
                 INSTANCE = instance
                 instance
             }
         }
+        private val MIGRATION_1_2: Migration = object : Migration(1, 2) {
+            override fun migrate(db: SupportSQLiteDatabase) {
+                db.execSQL("CREATE TABLE IF NOT EXISTS `transactions_new` " +
+                        "(`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, " +
+                        "`judul` TEXT NOT NULL, " +
+                        "`nominal` REAL NOT NULL, " +
+                        "`is_pemasukan` INTEGER NOT NULL, " +
+                        "`tanggal` TEXT NOT NULL, " +
+                        "`lokasi` TEXT NOT NULL)")
+
+                db.execSQL("INSERT INTO transactions_new (id, judul, nominal, is_pemasukan) " +
+                        "SELECT id, judul, nominal, is_pemasukan FROM transactions")
+
+                db.execSQL("DROP TABLE transactions")
+
+                db.execSQL("ALTER TABLE transactions_new RENAME TO transactions")
+            }
+        }
     }
 }
\ No newline at end of file
-- 
GitLab