diff --git a/app/src/main/java/com/example/bandung_bondowoso/MainActivity.kt b/app/src/main/java/com/example/bandung_bondowoso/MainActivity.kt
index feaa155b36e460d935e1ede78445f3299912ec45..d28853329b08cc55e280b39976c46dba4ba4fea4 100644
--- a/app/src/main/java/com/example/bandung_bondowoso/MainActivity.kt
+++ b/app/src/main/java/com/example/bandung_bondowoso/MainActivity.kt
@@ -16,10 +16,12 @@ import androidx.navigation.ui.setupWithNavController
 import com.example.bandung_bondowoso.broadcast.connection.ConnectionChangeListener
 import com.example.bandung_bondowoso.broadcast.jwt_expired.JwtExpiredReceiver
 import com.example.bandung_bondowoso.broadcast.jwt_valid.JwtValidReceiver
+import com.example.bandung_bondowoso.broadcast.randomize_transaction.RandomizeTransactionReceiver
 import com.example.bandung_bondowoso.databinding.ActivityMainBinding
 import com.example.bandung_bondowoso.service.JwtCheckerService
 import com.example.bandung_bondowoso.util.ConnectionStateMonitor
 import com.example.bandung_bondowoso.viewmodel.AuthViewModel
+import com.example.bandung_bondowoso.viewmodel.transaction.RandomizeTransactionViewModel
 import com.google.android.material.bottomnavigation.BottomNavigationView
 
 class MainActivity : AppCompatActivity(), ConnectionChangeListener {
@@ -36,6 +38,8 @@ class MainActivity : AppCompatActivity(), ConnectionChangeListener {
 
     private lateinit var navController : NavController
 
+    private lateinit var randomizeTransactionViewModel: RandomizeTransactionViewModel
+
     override fun onCreate(savedInstanceState: Bundle?) {
         Log.d("MainActivity", "onCreate")
         super.onCreate(savedInstanceState)
@@ -44,65 +48,22 @@ class MainActivity : AppCompatActivity(), ConnectionChangeListener {
         setContentView(binding.root)
 
         authViewModel = ViewModelProvider(this).get(AuthViewModel::class.java)
+        randomizeTransactionViewModel = ViewModelProvider(this).get(RandomizeTransactionViewModel::class.java)
+
+        /* Navigation Related Configuration */
+        configureNavigation()
 
+        /* Auth Related Configuration */
         jwtExpiredReceiver = JwtExpiredReceiver(authViewModel)
         LocalBroadcastManager.getInstance(this).registerReceiver(
             jwtExpiredReceiver,
             IntentFilter(JwtExpiredReceiver.ACTION)
         )
-
         jwtValidReceiver = JwtValidReceiver(authViewModel)
         LocalBroadcastManager.getInstance(this).registerReceiver(
             jwtValidReceiver,
             IntentFilter(JwtValidReceiver.ACTION)
         )
-
-        navView = binding.navView
-        navView.visibility = View.GONE
-
-        navController = findNavController(R.id.nav_host_fragment_activity_main)
-        navView.setupWithNavController(navController)
-        navView.setOnItemSelectedListener {
-            when (it.itemId) {
-                R.id.navigation_transaction -> {
-                    if (navController.currentDestination != null && navController.currentDestination?.id != R.id.navigation_transaction) {
-                        navController.navigate(R.id.navigation_transaction)
-                    }
-                }
-                R.id.navigation_scan -> {
-                    if (navController.currentDestination != null && navController.currentDestination?.id != R.id.navigation_scan) {
-                        navController.navigate(R.id.navigation_scan)
-                    }
-                }
-                R.id.navigation_graph -> {
-                    if (navController.currentDestination != null && navController.currentDestination?.id != R.id.navigation_graph) {
-                        navController.navigate(R.id.navigation_graph)
-                    }
-                }
-                R.id.navigation_twibbon -> {
-                    if (navController.currentDestination != null && navController.currentDestination?.id != R.id.navigation_twibbon) {
-                        navController.navigate(R.id.navigation_twibbon)
-                    }
-                }
-                R.id.navigation_settings -> {
-                    if (navController.currentDestination != null && navController.currentDestination?.id != R.id.navigation_settings) {
-                        navController.navigate(R.id.navigation_settings)
-                    }
-                }
-            }
-            true
-        }
-
-        navController.addOnDestinationChangedListener(NavController.OnDestinationChangedListener { controller, destination, arguments ->
-            if (destination.id == R.id.fragment_login) {
-                Log.d("MainActivity", "onCreate: fragment_login")
-                navView.visibility = View.GONE
-            } else {
-                Log.d("MainActivity", "onCreate: not fragment_login")
-                navView.visibility = View.VISIBLE
-            }
-        })
-
         authViewModel.isLoggedIn.observe(this) {
             Log.d("MainActivity", "isLoggedIn: $it")
             if (it == false) {
@@ -114,11 +75,23 @@ class MainActivity : AppCompatActivity(), ConnectionChangeListener {
             } else if (it != null) {
                 Log.d("MainActivity", "onValid")
                 if (navController.currentDestination?.id == R.id.fragment_login) {
-                    navController.navigate(R.id.action_loginFragment_to_navigation_transaction)
+                    navController.navigate(R.id.action_fragment_login_to_navigation_transaction)
                 }
             }
         }
 
+        /* Randomize Transaction Configuration */
+        val randomizeTransactionReceiver = RandomizeTransactionReceiver(randomizeTransactionViewModel)
+        LocalBroadcastManager.getInstance(this).registerReceiver(
+            randomizeTransactionReceiver,
+            IntentFilter(RandomizeTransactionReceiver.ACTION)
+        )
+        randomizeTransactionViewModel.isRandomized.observe(this){
+            Log.d("MainActivity", "isRandomized: $it")
+            findNavController(R.id.nav_host_fragment_activity_main).navigate(R.id.newTransactionFragment)
+        }
+
+        /* Connection State Related Configuration */
         val connectionStateMonitor = ConnectionStateMonitor(this)
         connectionStateMonitor.enable(this)
     }
@@ -176,4 +149,50 @@ class MainActivity : AppCompatActivity(), ConnectionChangeListener {
             dialog.show()
         }
     }
+
+    private fun configureNavigation() {
+        navView = binding.navView
+        navController = findNavController(R.id.nav_host_fragment_activity_main)
+        navView.setupWithNavController(navController)
+        navView.setOnItemSelectedListener {
+            when (it.itemId) {
+                R.id.navigation_transaction -> {
+                    if (navController.currentDestination != null && navController.currentDestination?.id != R.id.navigation_transaction) {
+                        navController.navigate(R.id.navigation_transaction)
+                    }
+                }
+                R.id.navigation_scan -> {
+                    if (navController.currentDestination != null && navController.currentDestination?.id != R.id.navigation_scan) {
+                        navController.navigate(R.id.navigation_scan)
+                    }
+                }
+                R.id.navigation_graph -> {
+                    if (navController.currentDestination != null && navController.currentDestination?.id != R.id.navigation_graph) {
+                        navController.navigate(R.id.navigation_graph)
+                    }
+                }
+                R.id.navigation_twibbon -> {
+                    if (navController.currentDestination != null && navController.currentDestination?.id != R.id.navigation_twibbon) {
+                        navController.navigate(R.id.navigation_twibbon)
+                    }
+                }
+                R.id.navigation_settings -> {
+                    if (navController.currentDestination != null && navController.currentDestination?.id != R.id.navigation_settings) {
+                        navController.navigate(R.id.navigation_settings)
+                    }
+                }
+            }
+            true
+        }
+
+        navController.addOnDestinationChangedListener(NavController.OnDestinationChangedListener { controller, destination, arguments ->
+            if (destination.id == R.id.fragment_login) {
+                Log.d("MainActivity", "onCreate: fragment_login")
+                navView.visibility = View.GONE
+            } else {
+                Log.d("MainActivity", "onCreate: not fragment_login")
+                navView.visibility = View.VISIBLE
+            }
+        })
+    }
 }
\ No newline at end of file
diff --git a/app/src/main/java/com/example/bandung_bondowoso/broadcast/randomize_transaction/RandomizeTransactionListener.kt b/app/src/main/java/com/example/bandung_bondowoso/broadcast/randomize_transaction/RandomizeTransactionListener.kt
new file mode 100644
index 0000000000000000000000000000000000000000..79b7b0bd09600518ac3804aef9be176c6f08097f
--- /dev/null
+++ b/app/src/main/java/com/example/bandung_bondowoso/broadcast/randomize_transaction/RandomizeTransactionListener.kt
@@ -0,0 +1,6 @@
+package com.example.bandung_bondowoso.broadcast.randomize_transaction
+
+interface RandomizeTransactionListener {
+    fun onRandomized()
+    fun onReceivedRandomTransaction(transactionName: String, transactionAmount: Int)
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/bandung_bondowoso/broadcast/randomize_transaction/RandomizeTransactionReceiver.kt b/app/src/main/java/com/example/bandung_bondowoso/broadcast/randomize_transaction/RandomizeTransactionReceiver.kt
new file mode 100644
index 0000000000000000000000000000000000000000..bf70dd985664fd67735214429996bfd33591fb07
--- /dev/null
+++ b/app/src/main/java/com/example/bandung_bondowoso/broadcast/randomize_transaction/RandomizeTransactionReceiver.kt
@@ -0,0 +1,28 @@
+package com.example.bandung_bondowoso.broadcast.randomize_transaction
+
+
+import android.content.BroadcastReceiver
+import android.content.Context
+import android.content.Intent
+import android.util.Log
+import android.widget.Toast
+
+class RandomizeTransactionReceiver(private val listener: RandomizeTransactionListener) : BroadcastReceiver() {
+    override fun onReceive(context: Context?, intent: Intent?) {
+        if (intent?.action == ACTION) {
+            Log.d("RandomizeTransactionReceiver", "onReceive")
+            Toast.makeText(context, "Randomize Transaction", Toast.LENGTH_SHORT).show()
+            val transactionName = intent.getStringExtra("name")
+            val transactionAmount = intent.getIntExtra("amount", 0)
+            listener.onRandomized()
+            if (transactionName != null) {
+                Log.d("RandomizeTransactionReceiver", "onReceive: $transactionName $transactionAmount")
+                listener.onReceivedRandomTransaction(transactionName, transactionAmount)
+            }
+        }
+    }
+
+    companion object {
+        const val ACTION = "com.example.bandung_bondowoso.ACTION_SEND_RANDOMIZE_TRANSACTION"
+    }
+}
diff --git a/app/src/main/java/com/example/bandung_bondowoso/local/AppDatabase.kt b/app/src/main/java/com/example/bandung_bondowoso/local/AppDatabase.kt
index 88e4c77a7bb082f1d26d60c71e8283b75dacae13..a0984856f8b5e4a279576780ea04d1f18204afde 100644
--- a/app/src/main/java/com/example/bandung_bondowoso/local/AppDatabase.kt
+++ b/app/src/main/java/com/example/bandung_bondowoso/local/AppDatabase.kt
@@ -5,37 +5,46 @@ import androidx.room.Database
 import androidx.room.Room
 import androidx.room.RoomDatabase
 import androidx.room.TypeConverters
+import androidx.room.migration.Migration
+import androidx.sqlite.db.SupportSQLiteDatabase
 import com.example.bandung_bondowoso.local.dao.TransactionDao
 import com.example.bandung_bondowoso.model.Transaction
 
-@Database(entities = [Transaction::class], version = 1)
+@Database(entities = [Transaction::class], version = 2)
 @TypeConverters(Converters::class)
 abstract class AppDatabase : RoomDatabase() {
     abstract fun transactionDao(): TransactionDao
 
-    // Singleton
     companion object {
         private const val DATABASE_NAME = "app_database"
 
-        // Safe thread
+        val MIGRATION_1_2 = object : Migration(1, 2) {
+            override fun migrate(db: SupportSQLiteDatabase) {
+                db.execSQL("ALTER TABLE `transaction` ADD COLUMN email TEXT NOT NULL DEFAULT ''")
+            }
+        }
+
+        // Singleton
         @Volatile
         private var INSTANCE: AppDatabase? = null
 
         fun getInstance(context: Context): AppDatabase {
-           synchronized(this) {
-               var instance = INSTANCE
-               if (instance == null) {
-                   instance = Room.databaseBuilder(
-                       context.applicationContext,
-                       AppDatabase::class.java,
-                       DATABASE_NAME
-                   ).build()
-
-                   INSTANCE = instance
-               }
-
-               return instance
-           }
+            synchronized(this) {
+                var instance = INSTANCE
+                if (instance == null) {
+                    instance = Room.databaseBuilder(
+                        context.applicationContext,
+                        AppDatabase::class.java,
+                        DATABASE_NAME
+                    )
+                        .addMigrations(MIGRATION_1_2)
+                        .build()
+
+                    INSTANCE = instance
+                }
+
+                return instance
+            }
         }
     }
-}
\ No newline at end of file
+}
diff --git a/app/src/main/java/com/example/bandung_bondowoso/local/dao/TransactionDao.kt b/app/src/main/java/com/example/bandung_bondowoso/local/dao/TransactionDao.kt
index 795578439396f1759d36e98f706687dba9473d86..0207dc49753624cacf170119fbab858a0a9ff418 100644
--- a/app/src/main/java/com/example/bandung_bondowoso/local/dao/TransactionDao.kt
+++ b/app/src/main/java/com/example/bandung_bondowoso/local/dao/TransactionDao.kt
@@ -1,6 +1,5 @@
 package com.example.bandung_bondowoso.local.dao
 
-import androidx.lifecycle.LiveData
 import androidx.room.Dao
 import androidx.room.Delete
 import androidx.room.Query
@@ -12,10 +11,12 @@ import kotlinx.coroutines.flow.Flow
 interface TransactionDao {
     @Query("SELECT * FROM `transaction` ORDER BY created_at DESC")
     fun getAll(): Flow<List<Transaction>>
-    @Query("SELECT SUM(amount) FROM `transaction` WHERE category = 0")
-    suspend fun getIncome(): Int
-    @Query("SELECT SUM(amount) FROM `transaction` WHERE category = 1")
-    suspend fun getExpense(): Int
+    @Query("SELECT * FROM `transaction` WHERE email = :email ORDER BY created_at DESC")
+    fun getAllByEmail(email: String): List<Transaction>
+    @Query("SELECT SUM(amount) FROM `transaction` WHERE category = 0 AND email= :email")
+    suspend fun getIncome(email:String): Int
+    @Query("SELECT SUM(amount) FROM `transaction` WHERE category = 1 AND email= :email")
+    suspend fun getExpense(email:String): Int
     @Query("SELECT * FROM `transaction` WHERE id = :id")
     suspend fun getTransaction(id: Int): Transaction
     @Query("SELECT COUNT(*) FROM `transaction`")
diff --git a/app/src/main/java/com/example/bandung_bondowoso/model/Transaction.kt b/app/src/main/java/com/example/bandung_bondowoso/model/Transaction.kt
index 9bee418afdc790eb50ef3e6a179acce520560925..0a1faf4cdfe4a15af3af1dbd1334d05125a58303 100644
--- a/app/src/main/java/com/example/bandung_bondowoso/model/Transaction.kt
+++ b/app/src/main/java/com/example/bandung_bondowoso/model/Transaction.kt
@@ -8,6 +8,7 @@ import java.util.Date
 @Entity(tableName = "transaction")
 data class Transaction (
     @PrimaryKey(autoGenerate = true) val id: Int = 0,
+    @ColumnInfo(name = "email") val email:String,
     @ColumnInfo(name = "name") val name: String,
     @ColumnInfo(name = "amount") val amount: Int,
     @ColumnInfo(name = "category") val type: TransactionCategory,
diff --git a/app/src/main/java/com/example/bandung_bondowoso/repository/TransactionRepository.kt b/app/src/main/java/com/example/bandung_bondowoso/repository/TransactionRepository.kt
index f5394a52d8c330dae8d92086af2c0cad006d825a..f8ed7a38ab0243de2d6351b95d998cb813d3032f 100644
--- a/app/src/main/java/com/example/bandung_bondowoso/repository/TransactionRepository.kt
+++ b/app/src/main/java/com/example/bandung_bondowoso/repository/TransactionRepository.kt
@@ -13,14 +13,14 @@ class TransactionRepository(private val transactionDao: TransactionDao,
     ) {
     private val defaultDispatcher: CoroutineDispatcher = Dispatchers.Default
     private val TAG:String = "TransactionRepository"
-    suspend fun getIncome() = withContext(defaultDispatcher){
+    suspend fun getIncome(email:String) = withContext(defaultDispatcher){
         Log.d(TAG, "getIncome")
-        transactionDao.getIncome()
+        transactionDao.getIncome(email)
     }
 
-    suspend fun getExpense() = withContext(defaultDispatcher){
+    suspend fun getExpense(email:String) = withContext(defaultDispatcher){
         Log.d(TAG, "getExpense")
-        transactionDao.getExpense()
+        transactionDao.getExpense(email)
     }
 
     suspend fun getTransaction(id:Int) = withContext(defaultDispatcher){
@@ -42,6 +42,10 @@ class TransactionRepository(private val transactionDao: TransactionDao,
     }
         .flowOn(defaultDispatcher)
 
+    suspend fun getAllByEmail(email:String) = withContext(defaultDispatcher){
+        Log.d(TAG, "getAllbyEmail")
+        transactionDao.getAllByEmail(email)
+    }
     suspend fun delete(transaction: Transaction) = withContext(defaultDispatcher) {
         Log.d(TAG, "delete: $transaction")
         transactionDao.delete(transaction)
diff --git a/app/src/main/java/com/example/bandung_bondowoso/view/dashboard/DashboardFragment.kt b/app/src/main/java/com/example/bandung_bondowoso/view/dashboard/DashboardFragment.kt
index 8eeed8bdb72743e4904ff6ee4bc89a79040d24df..aa4c00b7b46e03246809c319325c03680e88c093 100644
--- a/app/src/main/java/com/example/bandung_bondowoso/view/dashboard/DashboardFragment.kt
+++ b/app/src/main/java/com/example/bandung_bondowoso/view/dashboard/DashboardFragment.kt
@@ -5,18 +5,26 @@ import android.util.Log
 import android.view.LayoutInflater
 import android.view.View
 import android.view.ViewGroup
+import android.widget.Button
 import android.widget.TextView
 import androidx.fragment.app.Fragment
+import androidx.fragment.app.viewModels
 import androidx.lifecycle.ViewModelProvider
+import com.example.bandung_bondowoso.BandungBondowosoApp
 import com.example.bandung_bondowoso.broadcast.connection.ConnectionChangeListener
 import com.example.bandung_bondowoso.databinding.FragmentDashboardBinding
 import com.example.bandung_bondowoso.util.ConnectionStateMonitor
 import com.example.bandung_bondowoso.view.network.NoNetworkFragment
 import com.example.bandung_bondowoso.viewmodel.AuthViewModel
+import com.example.bandung_bondowoso.viewmodel.transaction.TransactionViewModel
+import com.example.bandung_bondowoso.viewmodel.transaction.TransactionViewModelFactory
 
 class DashboardFragment : Fragment(), ConnectionChangeListener {
 
     private var _binding: FragmentDashboardBinding? = null
+    private val transactionViewModel: TransactionViewModel by viewModels {
+        TransactionViewModelFactory((activity?.application as BandungBondowosoApp).transactionRepository)
+    }
 
     // This property is only valid between onCreateView and
     // onDestroyView.
diff --git a/app/src/main/java/com/example/bandung_bondowoso/view/graph/GraphFragment.kt b/app/src/main/java/com/example/bandung_bondowoso/view/graph/GraphFragment.kt
index 184ac44e8fac5d3602655d07cc134fd66d50dd06..19b8bea1e1bd7b453213b1bdcacdb1ebb37db8ad 100644
--- a/app/src/main/java/com/example/bandung_bondowoso/view/graph/GraphFragment.kt
+++ b/app/src/main/java/com/example/bandung_bondowoso/view/graph/GraphFragment.kt
@@ -12,8 +12,10 @@ import androidx.lifecycle.lifecycleScope
 import com.example.bandung_bondowoso.BandungBondowosoApp
 import com.example.bandung_bondowoso.R
 import com.example.bandung_bondowoso.databinding.FragmentGraphBinding
-import com.example.bandung_bondowoso.viewmodel.TransactionViewModel
-import com.example.bandung_bondowoso.viewmodel.TransactionViewModelFactory
+import com.example.bandung_bondowoso.viewmodel.transaction.TransactionViewModel
+import com.example.bandung_bondowoso.viewmodel.transaction.TransactionViewModelFactory
+import com.example.bandung_bondowoso.viewmodel.login.LoginViewModel
+import com.example.bandung_bondowoso.viewmodel.login.LoginViewModelFactory
 import com.github.mikephil.charting.animation.Easing
 import com.github.mikephil.charting.charts.PieChart
 import com.github.mikephil.charting.data.PieEntry
@@ -22,62 +24,102 @@ import kotlinx.coroutines.launch
 
 class GraphFragment : Fragment() {
     private var _binding: FragmentGraphBinding? = null
-
-    // This property is only valid between onCreateView and
-    // onDestroyView.
     private val binding get() = _binding!!
     private val tag = "graphFragment"
     private val transactionViewModel: TransactionViewModel by viewModels {
         TransactionViewModelFactory((activity?.application as BandungBondowosoApp).transactionRepository)
     }
-    private lateinit var chart:PieChart
-    override fun onCreate(savedInstanceState: Bundle?) {
-        Log.d(tag, "onCreate")
-        super.onCreate(savedInstanceState)
+    private val loginViewModel: LoginViewModel by viewModels {
+        LoginViewModelFactory((activity?.application as BandungBondowosoApp).userRepository)
     }
+    private lateinit var chart:PieChart
+    private lateinit var emailUser:String
+    private var income:Int = 0
+    private var expense:Int = 0
     override fun onCreateView(
         inflater: LayoutInflater,
         container: ViewGroup?,
         savedInstanceState: Bundle?
     ): View {
-        _binding = FragmentGraphBinding.inflate(inflater, container, false)
-        val root: View = binding.root
-
-        chart = binding.chart1!!
-        chart.setBackgroundColor(ContextCompat.getColor(requireContext(), R.color.md_theme_surface))
-        chart.animateY(1400, Easing.EaseInOutQuad)
-        chart.setUsePercentValues(true)
-
-
+        Log.d(tag, "onCreateView")
+        if (_binding == null) {
+            _binding = FragmentGraphBinding.inflate(inflater, container, false)
+        }
+        return binding.root
+    }
+    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+        Log.d(tag, "onViewCreated")
+        super.onViewCreated(view, savedInstanceState)
 
-        val l: com.github.mikephil.charting.components.Legend? = chart.legend
-        l?.verticalAlignment = com.github.mikephil.charting.components.Legend.LegendVerticalAlignment.TOP
-        l?.horizontalAlignment = com.github.mikephil.charting.components.Legend.LegendHorizontalAlignment.RIGHT
-        l?.orientation = com.github.mikephil.charting.components.Legend.LegendOrientation.VERTICAL
-        l?.setDrawInside(false)
-        l?.xEntrySpace = 7f
-        l?.yEntrySpace = 0f
-        l?.yOffset = 0f
-        chart.setEntryLabelColor(ContextCompat.getColor(requireContext(), R.color.md_theme_surface))
-        chart.setEntryLabelTextSize(16f)
+        if (_binding != null) {
+            chart = binding.chart1
+            chart.setBackgroundColor(ContextCompat.getColor(requireContext(), R.color.md_theme_surface))
+            chart.animateY(1400, Easing.EaseInOutQuad)
+            chart.setUsePercentValues(true)
+            chart.isDrawHoleEnabled = false
+            chart.isDrawHoleEnabled = false
 
+            val l: com.github.mikephil.charting.components.Legend? = chart.legend
+            l?.verticalAlignment = com.github.mikephil.charting.components.Legend.LegendVerticalAlignment.TOP
+            l?.horizontalAlignment = com.github.mikephil.charting.components.Legend.LegendHorizontalAlignment.RIGHT
+            l?.orientation = com.github.mikephil.charting.components.Legend.LegendOrientation.VERTICAL
+            l?.setDrawInside(false)
+            l?.xEntrySpace = 7f
+            l?.yEntrySpace = 0f
+            l?.yOffset = 0f
+            chart.setEntryLabelColor(ContextCompat.getColor(requireContext(), R.color.md_theme_surface))
+            chart.setEntryLabelTextSize(16f)
+            chart.setNoDataText("")
+        }
         val values = ArrayList<PieEntry>()
-        lifecycleScope.launch{
-            values.add(PieEntry(transactionViewModel.getIncome().toFloat(), "Pemasukan"))
-            values.add(PieEntry(transactionViewModel.getExpense().toFloat(), "Pengeluaran"))
-            val dataSet = com.github.mikephil.charting.data.PieDataSet(values, "")
-            dataSet.setColors(ContextCompat.getColor(requireContext(), R.color.md_theme_primary),
-                ContextCompat.getColor(requireContext(), R.color.md_theme_tertiary))
-            val data = com.github.mikephil.charting.data.PieData(dataSet)
-            chart.data = data
-            data.setValueFormatter(PercentFormatter(chart))
-            data.setValueTextSize(16f)
-            data.setValueTextColor(ContextCompat.getColor(requireContext(), R.color.md_theme_surface))
-            chart.invalidate()
+        loginViewModel.getEmail().observe(viewLifecycleOwner) { email ->
+            Log.d(tag, "User Email: $email")
+            this.emailUser = email.toString()
+            lifecycleScope.launch {
+                income = transactionViewModel.getIncome(emailUser)
+                expense = transactionViewModel.getExpense(emailUser)
+                values.clear()
+                values.add(PieEntry(income.toFloat(), "Pemasukan"))
+                values.add(PieEntry(expense.toFloat(), "Pengeluaran"))
+                val dataSet = com.github.mikephil.charting.data.PieDataSet(values, "")
+                dataSet.setColors(
+                    ContextCompat.getColor(requireContext(), R.color.md_theme_primary),
+                    ContextCompat.getColor(requireContext(), R.color.md_theme_peach)
+                )
+                val data = com.github.mikephil.charting.data.PieData(dataSet)
+                chart.data = data
+                data.setValueFormatter(PercentFormatter(chart))
+                data.setValueTextSize(16f)
+                data.setValueTextColor(ContextCompat.getColor(requireContext(), R.color.md_theme_surface))
+                if (values.isEmpty()) {
+                    chart.visibility = View.GONE
+                    binding.clEmptyRv?.visibility = View.VISIBLE
+                } else {
+                    chart.visibility = View.VISIBLE
+                    binding.clEmptyRv?.visibility = View.GONE
+                }
+                chart.invalidate()
+            }
         }
-        return root
     }
 
+//    override fun onSaveInstanceState(outState: Bundle) {
+//        super.onSaveInstanceState(outState)
+//        val incomeState = income
+//        val expenseState = expense
+//        val chart = chart
+//        outState.putInt("income", incomeState)
+//        outState.putInt("expense", expenseState)
+//    }
+//
+//    override fun onViewStateRestored(savedInstanceState: Bundle?) {
+//        super.onViewStateRestored(savedInstanceState)
+//        if(savedInstanceState != null){
+//            income = savedInstanceState.getInt("income")
+//            expense = savedInstanceState.getInt("expense")
+//        }
+//    }
+
     override fun onDestroyView() {
         super.onDestroyView()
         _binding = null
diff --git a/app/src/main/java/com/example/bandung_bondowoso/view/home/HomeFragment.kt b/app/src/main/java/com/example/bandung_bondowoso/view/home/HomeFragment.kt
deleted file mode 100644
index 35b52891b740c989b04ac2ec23586817e00f0b00..0000000000000000000000000000000000000000
--- a/app/src/main/java/com/example/bandung_bondowoso/view/home/HomeFragment.kt
+++ /dev/null
@@ -1,115 +0,0 @@
-package com.example.bandung_bondowoso.view.home
-
-import android.Manifest
-import android.content.pm.PackageManager
-import android.location.Location
-import android.os.Bundle
-import android.util.Log
-import android.view.LayoutInflater
-import android.view.View
-import android.view.ViewGroup
-import android.widget.TextView
-import androidx.activity.result.contract.ActivityResultContracts
-import androidx.core.app.ActivityCompat
-import androidx.fragment.app.Fragment
-import androidx.lifecycle.ViewModelProvider
-import com.example.bandung_bondowoso.broadcast.connection.ConnectionChangeListener
-import com.example.bandung_bondowoso.databinding.FragmentHomeBinding
-import com.example.bandung_bondowoso.viewmodel.HomeViewModel
-import com.google.android.gms.location.FusedLocationProviderClient
-import com.google.android.gms.location.LocationServices
-
-class HomeFragment : Fragment() {
-
-    private var _binding: FragmentHomeBinding? = null
-
-    // This property is only valid between onCreateView and
-    // onDestroyView.
-    private val binding get() = _binding!!
-    private lateinit var fusedLocationClient: FusedLocationProviderClient
-    private lateinit var homeViewModel: HomeViewModel
-
-
-    override fun onCreateView(
-        inflater: LayoutInflater,
-        container: ViewGroup?,
-        savedInstanceState: Bundle?
-    ): View {
-        Log.d("HomeFragment", "onCreateView")
-        homeViewModel =
-            ViewModelProvider(this).get(HomeViewModel::class.java)
-
-        _binding = FragmentHomeBinding.inflate(inflater, container, false)
-        val root: View = binding.root
-
-        val textView: TextView = binding.textHome
-        homeViewModel.text.observe(viewLifecycleOwner) {
-            textView.text = it
-        }
-
-        homeViewModel.transactions.observe(viewLifecycleOwner) {
-            Log.d("HomeFragment", "Transactions: $it")
-        }
-
-        binding.buttonAddTransaction.setOnClickListener {
-            homeViewModel.upsertDummyTransaction()
-        }
-
-        homeViewModel.locationName.observe(viewLifecycleOwner) {
-            Log.d("HomeFragment", "Location: $it")
-            binding.textLocation.text = it
-        }
-
-        binding.buttonDeleteAllTransaction.setOnClickListener {
-            homeViewModel.deleteAll()
-        }
-
-        return root
-    }
-
-    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
-        super.onViewCreated(view, savedInstanceState)
-
-        // Request location permission
-        val locationPermissionRequest = registerForActivityResult(
-            ActivityResultContracts.RequestMultiplePermissions()
-        ) { permissions ->
-            when {
-                permissions.getOrDefault(android.Manifest.permission.ACCESS_COARSE_LOCATION, false) -> {
-                    Log.d("HomeFragment", "Approximate location access granted")
-                    getLastLocation()
-                } else -> {
-                Log.d("HomeFragment", "No location access granted")
-            }
-            }
-        }
-
-        locationPermissionRequest.launch(arrayOf(
-            android.Manifest.permission.ACCESS_FINE_LOCATION,
-            android.Manifest.permission.ACCESS_COARSE_LOCATION)
-        )
-    }
-
-    override fun onDestroyView() {
-        super.onDestroyView()
-        _binding = null
-    }
-
-    private fun getLastLocation() {
-        fusedLocationClient = LocationServices.getFusedLocationProviderClient(requireActivity())
-        if (ActivityCompat.checkSelfPermission(
-                requireContext(),
-                Manifest.permission.ACCESS_COARSE_LOCATION
-            ) != PackageManager.PERMISSION_GRANTED
-        ) {
-            return
-        }
-        fusedLocationClient.lastLocation
-            .addOnSuccessListener { location: Location? ->
-                if (location != null) {
-                    Log.d("HomeFragment", "Location: ${location.latitude}, ${location.longitude}")
-                    homeViewModel.setLocationByLatLong(location.latitude, location.longitude)
-                }
-            }
-    }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/bandung_bondowoso/view/setting/SettingFragment.kt b/app/src/main/java/com/example/bandung_bondowoso/view/setting/SettingFragment.kt
index 701d657012c7fe623658e6b1e30231f47b8ddc0d..5f53d7ad6d5d8250d7b727427473b43925c3d3f1 100644
--- a/app/src/main/java/com/example/bandung_bondowoso/view/setting/SettingFragment.kt
+++ b/app/src/main/java/com/example/bandung_bondowoso/view/setting/SettingFragment.kt
@@ -15,16 +15,18 @@ import android.widget.Toast
 import androidx.core.content.FileProvider
 import androidx.fragment.app.Fragment
 import androidx.fragment.app.viewModels
+import androidx.lifecycle.ViewModelProvider
 import androidx.localbroadcastmanager.content.LocalBroadcastManager
 import com.example.bandung_bondowoso.BandungBondowosoApp
 import com.example.bandung_bondowoso.broadcast.connection.ConnectionChangeListener
 import com.example.bandung_bondowoso.broadcast.jwt_expired.JwtExpiredReceiver
+import com.example.bandung_bondowoso.broadcast.randomize_transaction.RandomizeTransactionReceiver
 import com.example.bandung_bondowoso.databinding.FragmentSettingsBinding
 import com.example.bandung_bondowoso.model.Transaction
+import com.example.bandung_bondowoso.viewmodel.transaction.TransactionViewModel
+import com.example.bandung_bondowoso.viewmodel.transaction.TransactionViewModelFactory
 import com.example.bandung_bondowoso.util.ConnectionStateMonitor
-import com.example.bandung_bondowoso.viewmodel.AuthViewModel
-import com.example.bandung_bondowoso.viewmodel.TransactionViewModel
-import com.example.bandung_bondowoso.viewmodel.TransactionViewModelFactory
+import com.example.bandung_bondowoso.viewmodel.transaction.RandomizeTransactionViewModel
 import com.example.bandung_bondowoso.viewmodel.login.LoginViewModel
 import com.example.bandung_bondowoso.viewmodel.login.LoginViewModelFactory
 import com.example.bandung_bondowoso.viewmodel.setting.SettingViewModel
@@ -40,6 +42,8 @@ class SettingFragment : Fragment(), ConnectionChangeListener {
     private var transactionList = listOf<Transaction>()
 
     private lateinit var settingViewModel: SettingViewModel
+    private lateinit var randomizeTransactionViewModel: RandomizeTransactionViewModel
+
 
     fun createFile(): XSSFWorkbook {
         val workbook = XSSFWorkbook()
@@ -138,6 +142,8 @@ class SettingFragment : Fragment(), ConnectionChangeListener {
             ((this.activity?.application as BandungBondowosoApp) as BandungBondowosoApp).userRepository,
         ).create(SettingViewModel::class.java)
 
+        randomizeTransactionViewModel = ViewModelProvider(this).get(RandomizeTransactionViewModel::class.java)
+
         userEmail = binding.userEmail
         binding.buttonSendEmail.setOnClickListener {
             writingEmail(createFile(), "test", userEmail.text.toString())
@@ -152,9 +158,21 @@ class SettingFragment : Fragment(), ConnectionChangeListener {
             LocalBroadcastManager.getInstance(requireContext()).sendBroadcast(Intent(JwtExpiredReceiver.ACTION))
         }
 
+        binding.buttonRandom.setOnClickListener {
+            randomizeTransactionViewModel.onRandomized()
+            val intent = Intent(RandomizeTransactionReceiver.ACTION)
+            val randomNumber = (0..100000).random()
+            val randomAmount = (1 .. 9999999).random()
+            intent.putExtra("name", "Random Transaction $randomNumber")
+            intent.putExtra("amount", randomAmount)
+            LocalBroadcastManager.getInstance(requireContext()).sendBroadcast(intent)
+
+        }
+
         val connectionStateMonitor = ConnectionStateMonitor(this)
         connectionStateMonitor.enable(requireContext())
 
+
         return root
     }
     private val loginViewModel: LoginViewModel by viewModels {
@@ -175,9 +193,6 @@ class SettingFragment : Fragment(), ConnectionChangeListener {
             transactionList = it
         }
     }
-    fun randomizeTransaction(){
-
-    }
 
     override fun onDestroyView() {
         super.onDestroyView()
diff --git a/app/src/main/java/com/example/bandung_bondowoso/view/transaction/CreateTransactionFragment.kt b/app/src/main/java/com/example/bandung_bondowoso/view/transaction/CreateTransactionFragment.kt
index 1b4ce26d3f9d4c4ccc42831443c284a9e49ec0fa..06bc93dfbc3a5b61870c4e12fe23f5e7103924d0 100644
--- a/app/src/main/java/com/example/bandung_bondowoso/view/transaction/CreateTransactionFragment.kt
+++ b/app/src/main/java/com/example/bandung_bondowoso/view/transaction/CreateTransactionFragment.kt
@@ -24,6 +24,7 @@ import androidx.core.app.ActivityCompat
 import androidx.fragment.app.viewModels
 import androidx.lifecycle.LiveData
 import androidx.lifecycle.MutableLiveData
+import androidx.lifecycle.ViewModelProvider
 import androidx.navigation.Navigation
 import com.example.bandung_bondowoso.BandungBondowosoApp
 import com.example.bandung_bondowoso.MainActivity
@@ -33,8 +34,11 @@ import com.example.bandung_bondowoso.helper.LocationHelper
 import com.example.bandung_bondowoso.helper.TransactionHelper
 import com.example.bandung_bondowoso.model.Transaction
 import com.example.bandung_bondowoso.model.TransactionCategory
-import com.example.bandung_bondowoso.viewmodel.TransactionViewModel
-import com.example.bandung_bondowoso.viewmodel.TransactionViewModelFactory
+import com.example.bandung_bondowoso.viewmodel.transaction.RandomizeTransactionViewModel
+import com.example.bandung_bondowoso.viewmodel.transaction.TransactionViewModel
+import com.example.bandung_bondowoso.viewmodel.transaction.TransactionViewModelFactory
+import com.example.bandung_bondowoso.viewmodel.login.LoginViewModel
+import com.example.bandung_bondowoso.viewmodel.login.LoginViewModelFactory
 import com.google.android.gms.location.FusedLocationProviderClient
 import com.google.android.gms.location.LocationServices
 import java.util.Date
@@ -71,10 +75,19 @@ class CreateTransactionFragment : Fragment() {
     private lateinit var transactionHelper: TransactionHelper
     private lateinit var locationHelper: LocationHelper
 
+    private lateinit var emailUser:String
+
     /** Initialize Transaction View Model */
     private val transactionViewModel: TransactionViewModel by viewModels {
         TransactionViewModelFactory((activity?.application as BandungBondowosoApp).transactionRepository)
     }
+
+    private val loginViewModel: LoginViewModel by viewModels {
+        LoginViewModelFactory((activity?.application as BandungBondowosoApp).userRepository)
+    }
+
+    private lateinit var randomizeTransactionViewModel: RandomizeTransactionViewModel
+
     override fun onCreate(savedInstanceState: Bundle?) {
         Log.d(tag, "onCreate")
         super.onCreate(savedInstanceState)
@@ -84,10 +97,16 @@ class CreateTransactionFragment : Fragment() {
         savedInstanceState: Bundle?
     ): View {
         Log.d(tag, "onCreateView")
-
         _binding = FragmentTransactionCreateBinding.inflate(inflater, container, false)
-        val root:View = binding.root
+        return binding.root
+    }
+
+    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+        Log.d(tag, "onViewCreated")
+        super.onViewCreated(view, savedInstanceState)
         (activity as MainActivity).binding.navView.visibility = View.GONE
+        randomizeTransactionViewModel = ViewModelProvider(requireActivity()).get(
+            RandomizeTransactionViewModel::class.java)
         transactionHelper = TransactionHelper(requireContext())
         locationHelper = LocationHelper(requireContext())
         transactionName = binding.etTransactionName
@@ -112,7 +131,8 @@ class CreateTransactionFragment : Fragment() {
         submitButton.setOnClickListener {
             if(createNewTransaction()){
                 clearField()
-                Navigation.findNavController(root).navigate(R.id.action_newTransactionFragment_to_navigation_transaction)
+                Navigation.findNavController(view).navigate(R.id.action_newTransactionFragment_to_navigation_transaction)
+                (activity as MainActivity).binding.navView.selectedItemId = R.id.navigation_transaction
                 Toast.makeText(requireContext(), "Create ETransaction Success", Toast.LENGTH_SHORT).show()
             } else {
                 Toast.makeText(requireContext(), "Create ETransaction Failed", Toast.LENGTH_SHORT).show()
@@ -123,7 +143,8 @@ class CreateTransactionFragment : Fragment() {
             dialog.show()
             btnDialogSubmit.setOnClickListener {
                 clearField()
-                Navigation.findNavController(root).navigate(R.id.action_newTransactionFragment_to_navigation_transaction)
+                Navigation.findNavController(view).navigate(R.id.action_newTransactionFragment_to_navigation_transaction)
+                (activity as MainActivity).binding.navView.selectedItemId = R.id.navigation_transaction
                 dialog.dismiss()
             }
             btnDialogCancel.setOnClickListener {
@@ -138,23 +159,28 @@ class CreateTransactionFragment : Fragment() {
             val intent = Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS)
             startActivity(intent)
         }
-        return root
-    }
+        loginViewModel.getEmail().observe(viewLifecycleOwner) { email ->
+            emailUser = email.toString()
+        }
 
-    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
-        super.onViewCreated(view, savedInstanceState)
         locationName.observe(viewLifecycleOwner) { location ->
             if(location != null){
                 transactionLocation.setText(location)
             }
         }
 
+        randomizeTransactionViewModel.transactionName.observe(viewLifecycleOwner) { name ->
+            transactionName.setText(name)
+        }
+        randomizeTransactionViewModel.transactionAmount.observe(viewLifecycleOwner) { amount ->
+            transactionAmount.setText(amount.toString())
+        }
+
         if (ActivityCompat.checkSelfPermission(
                 requireContext(),
                 Manifest.permission.ACCESS_COARSE_LOCATION
             ) != PackageManager.PERMISSION_GRANTED
         ) {
-//            setLatLongFromAddress(transactionLocation.text.toString())
             locationHelper.setLatLongFromAddress(transactionLocation.text.toString())
         }
     }
@@ -182,6 +208,7 @@ class CreateTransactionFragment : Fragment() {
 
         val newTransaction = Transaction(
             name = name,
+            email = emailUser,
             amount = amount,
             type = category,
             locationLat = coordinates!!.first,
@@ -213,6 +240,7 @@ class CreateTransactionFragment : Fragment() {
         ) {
             return
         }
+
         fusedLocationClient.lastLocation
             .addOnSuccessListener { location: Location? ->
                 if (location != null) {
@@ -224,15 +252,14 @@ class CreateTransactionFragment : Fragment() {
             }
     }
 
-    fun askLocation(): Boolean {
+    private fun askLocation(): Boolean {
         val service: LocationManager =
             requireContext().getSystemService(Context.LOCATION_SERVICE) as LocationManager
         return service.isProviderEnabled(LocationManager.GPS_PROVIDER)
     }
 
-
-
     override fun onDestroyView() {
+        Log.d(tag, "onDestroy")
         super.onDestroyView()
         (activity as MainActivity).binding.navView.visibility = View.VISIBLE
     }
diff --git a/app/src/main/java/com/example/bandung_bondowoso/view/transaction/EditTransactionFragment.kt b/app/src/main/java/com/example/bandung_bondowoso/view/transaction/EditTransactionFragment.kt
index 6a6bf7e3fbf598b1176036b6a9c437a555bc206c..06e91bf1fd9a83ef69e5fd5e525410f8f939f96e 100644
--- a/app/src/main/java/com/example/bandung_bondowoso/view/transaction/EditTransactionFragment.kt
+++ b/app/src/main/java/com/example/bandung_bondowoso/view/transaction/EditTransactionFragment.kt
@@ -23,8 +23,10 @@ import com.example.bandung_bondowoso.helper.LocationHelper
 import com.example.bandung_bondowoso.helper.TransactionHelper
 import com.example.bandung_bondowoso.model.Transaction
 import com.example.bandung_bondowoso.model.TransactionCategory
-import com.example.bandung_bondowoso.viewmodel.TransactionViewModel
-import com.example.bandung_bondowoso.viewmodel.TransactionViewModelFactory
+import com.example.bandung_bondowoso.viewmodel.transaction.TransactionViewModel
+import com.example.bandung_bondowoso.viewmodel.transaction.TransactionViewModelFactory
+import com.example.bandung_bondowoso.viewmodel.login.LoginViewModel
+import com.example.bandung_bondowoso.viewmodel.login.LoginViewModelFactory
 import kotlinx.coroutines.launch
 import java.util.Date
 import kotlin.properties.Delegates
@@ -42,6 +44,9 @@ class EditTransactionFragment : Fragment() {
     private val transactionViewModel: TransactionViewModel by viewModels {
         TransactionViewModelFactory((activity?.application as BandungBondowosoApp).transactionRepository)
     }
+    private val loginViewModel: LoginViewModel by viewModels {
+        LoginViewModelFactory((activity?.application as BandungBondowosoApp).userRepository)
+    }
     private lateinit var transactionName: EditText
     private lateinit var transactionAmount: EditText
     private lateinit var transactionLocation: EditText
@@ -60,6 +65,7 @@ class EditTransactionFragment : Fragment() {
     private lateinit var transactionDate:Date
     private var locationLat by Delegates.notNull<Double>()
     private var locationLong by Delegates.notNull<Double>()
+    private lateinit var emailUser:String
 
     override fun onCreate(savedInstanceState: Bundle?) {
         Log.d(tag, "onCreate")
@@ -71,7 +77,12 @@ class EditTransactionFragment : Fragment() {
     ): View {
         // Inflate the layout for this fragment
         _binding = FragmentTransactionCreateBinding.inflate(inflater, container, false)
-        val root:View = binding.root
+        return binding.root
+    }
+
+    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+        Log.d(tag, "onViewCreated")
+        super.onViewCreated(view, savedInstanceState)
         title = binding.tvTransactionNew
         transactionHelper = TransactionHelper(requireContext())
         locationHelper = LocationHelper(requireContext())
@@ -95,6 +106,10 @@ class EditTransactionFragment : Fragment() {
         btnDialogSubmit.text = getString(R.string.button_ok)
         submitButton = binding.btnSubmit
 
+        loginViewModel.getEmail().observe(viewLifecycleOwner) { email ->
+            emailUser = email.toString()
+        }
+
         lifecycleScope.launch{
             transaction = transactionViewModel.getTransaction(transactionId)
             title.text = transaction.name
@@ -115,7 +130,7 @@ class EditTransactionFragment : Fragment() {
 
         submitButton.setOnClickListener {
             if(editTransaction()){
-                Navigation.findNavController(root).navigate(R.id.action_editTransactionFragment_to_navigation_transaction)
+                Navigation.findNavController(view).navigate(R.id.action_editTransactionFragment_to_navigation_transaction)
                 Toast.makeText(requireContext(), "Edit Transaction Success", Toast.LENGTH_SHORT).show()
             } else {
                 Toast.makeText(requireContext(), "Edit Transaction Failed", Toast.LENGTH_SHORT).show()
@@ -124,14 +139,13 @@ class EditTransactionFragment : Fragment() {
         cancelButton.setOnClickListener {
             dialog.show()
             btnDialogSubmit.setOnClickListener {
-                Navigation.findNavController(root).navigate(R.id.action_editTransactionFragment_to_navigation_transaction)
+                Navigation.findNavController(view).navigate(R.id.action_editTransactionFragment_to_navigation_transaction)
                 dialog.dismiss()
             }
             btnDialogCancel.setOnClickListener {
                 dialog.dismiss()
             }
         }
-       return root
     }
 
     private fun editTransaction(): Boolean{
diff --git a/app/src/main/java/com/example/bandung_bondowoso/view/transaction/TransactionAdapter.kt b/app/src/main/java/com/example/bandung_bondowoso/view/transaction/TransactionAdapter.kt
index 4d598de26425ff78942fc53dae30306e88c19fca..79e73f39e66bbbf6d1b9b8be7fda47b46e3362ee 100644
--- a/app/src/main/java/com/example/bandung_bondowoso/view/transaction/TransactionAdapter.kt
+++ b/app/src/main/java/com/example/bandung_bondowoso/view/transaction/TransactionAdapter.kt
@@ -13,14 +13,15 @@ import androidx.core.content.ContextCompat
 import androidx.recyclerview.widget.RecyclerView
 import com.bumptech.glide.Glide
 import com.example.bandung_bondowoso.R
-import com.example.bandung_bondowoso.`interface`.TransactionItemClickListener
 import com.example.bandung_bondowoso.model.Transaction
 import com.example.bandung_bondowoso.model.TransactionCategory
 import java.text.SimpleDateFormat
 import java.util.Locale
 
-class TransactionAdapter (var transactionList: List<Transaction>,
-                          private val itemClickListener: TransactionItemClickListener):
+class TransactionAdapter(
+    var transactionList: List<Transaction>,
+    private val itemClickListener: TransactionFragment
+):
     RecyclerView.Adapter<TransactionAdapter.TransactionViewHolder>(){
     inner class TransactionViewHolder(view: View): RecyclerView.ViewHolder(view){
         val tvTransactionName:TextView = view.findViewById(R.id.tv_transaction_name)
diff --git a/app/src/main/java/com/example/bandung_bondowoso/view/transaction/TransactionFragment.kt b/app/src/main/java/com/example/bandung_bondowoso/view/transaction/TransactionFragment.kt
index 4ff8de22b8eeb4bff8e5fb2552fa9e772fce91a2..00c713a8788781019fb41cff4513045d3d8e0a4b 100644
--- a/app/src/main/java/com/example/bandung_bondowoso/view/transaction/TransactionFragment.kt
+++ b/app/src/main/java/com/example/bandung_bondowoso/view/transaction/TransactionFragment.kt
@@ -1,5 +1,6 @@
 package com.example.bandung_bondowoso.view.transaction
 
+import android.annotation.SuppressLint
 import android.content.Intent
 import android.net.Uri
 import android.os.Bundle
@@ -20,8 +21,8 @@ import com.example.bandung_bondowoso.databinding.FragmentTransactionBinding
 import com.example.bandung_bondowoso.helper.LocationHelper
 import com.example.bandung_bondowoso.`interface`.TransactionItemClickListener
 import com.example.bandung_bondowoso.model.Transaction
-import com.example.bandung_bondowoso.viewmodel.TransactionViewModel
-import com.example.bandung_bondowoso.viewmodel.TransactionViewModelFactory
+import com.example.bandung_bondowoso.viewmodel.transaction.TransactionViewModel
+import com.example.bandung_bondowoso.viewmodel.transaction.TransactionViewModelFactory
 import com.example.bandung_bondowoso.viewmodel.login.LoginViewModel
 import com.example.bandung_bondowoso.viewmodel.login.LoginViewModelFactory
 import com.google.android.material.bottomsheet.BottomSheetDialog
@@ -30,6 +31,7 @@ import com.google.android.material.floatingactionbutton.FloatingActionButton
 class TransactionFragment : Fragment(), TransactionItemClickListener {
     private var _binding: FragmentTransactionBinding? = null
     private val tag = "transactionFragment"
+    private lateinit var userEmailValue:String
     private val binding get() = _binding!!
     private var transactionList = listOf<Transaction>()
     private lateinit var adapter: TransactionAdapter
@@ -37,6 +39,7 @@ class TransactionFragment : Fragment(), TransactionItemClickListener {
     private lateinit var balance: TextView
     private lateinit var locationHelper: LocationHelper
     private lateinit var  bottomSheetDialog: BottomSheetDialog
+    private lateinit var email:String
 
     private val transactionViewModel: TransactionViewModel by viewModels {
         TransactionViewModelFactory((activity?.application as BandungBondowosoApp).transactionRepository)
@@ -46,14 +49,18 @@ class TransactionFragment : Fragment(), TransactionItemClickListener {
         LoginViewModelFactory((activity?.application as BandungBondowosoApp).userRepository)
     }
 
-
     override fun onCreateView(
         inflater: LayoutInflater, container: ViewGroup?,
         savedInstanceState: Bundle?
     ): View {
         Log.d(tag, "onCreateView")
         _binding = FragmentTransactionBinding.inflate(inflater, container, false)
-        val root:View = binding.root
+        return binding.root
+    }
+
+    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+        Log.d(tag, "onViewCreated")
+        super.onViewCreated(view, savedInstanceState)
         locationHelper = LocationHelper(requireContext())
         bottomSheetDialog = BottomSheetDialog(requireContext())
 
@@ -64,38 +71,43 @@ class TransactionFragment : Fragment(), TransactionItemClickListener {
         balance = binding.tvBalanceNominal
 
 
-        transactionViewModel.transactions.observe(viewLifecycleOwner) {
-            Log.d(tag, "Transactions: $it")
 
-            transactionList = it
-           if(transactionList.isNotEmpty()){
-               adapter = TransactionAdapter(transactionList, itemClickListener = this)
-                binding.rvTransaction.adapter = adapter
-           } else {
-                Log.d(tag, "Transaction list is empty")
-                binding.clEmptyRv.visibility = View.VISIBLE
-               binding.rvTransaction.visibility = View.GONE
-           }
+        loginViewModel.getEmail().observe(viewLifecycleOwner) { email ->
+            Log.d(tag, "User Email: $email")
+            userEmail.text = email.toString()
+            userEmailValue = email.toString()
+            this.email = userEmailValue
+            transactionViewModel.fetchTransactionsByEmail(email.toString())
+            transactionViewModel.updateBalance(email.toString())
         }
 
-        transactionViewModel.balance.observe(viewLifecycleOwner) { amount ->
-            Log.d(tag, "Balance: $amount")
-            balance.text = getString(R.string.balance_value, amount.toString())
+        transactionViewModel.balance.observe(viewLifecycleOwner) { balanceValue ->
+            balance.text = getString(R.string.balance_value, balanceValue.toString())
         }
 
-        loginViewModel.getEmail().observe(viewLifecycleOwner) { email ->
-            Log.d(tag, "User Email: $email")
-            userEmail.text = email.toString()
+        transactionViewModel.transactions.observe(viewLifecycleOwner) { transactions ->
+            transactionList = transactions
+            if(transactionList.isEmpty()){
+                binding.clEmptyRv.visibility = View.VISIBLE
+                binding.rvTransaction.visibility = View.GONE
+            } else {
+                adapter = TransactionAdapter(transactionList, itemClickListener = this)
+                binding.rvTransaction.adapter = adapter
+            }
         }
+
         val createTransactionButton:FloatingActionButton = binding.fabCreateTransaction
         createTransactionButton.setOnClickListener {
-            Navigation.findNavController(root).navigate(R.id.action_navigation_transaction_to_newTransactionFragment)
+            Navigation.findNavController(view).navigate(R.id.action_navigation_transaction_to_newTransactionFragment)
         }
-        return root
     }
 
+    @SuppressLint("NotifyDataSetChanged")
     override fun onDeleteTransaction(transaction: Transaction) {
-        transactionViewModel.delete(transaction)
+        val position = transactionList.indexOf(transaction)
+        transactionViewModel.delete(transaction, email)
+        adapter.notifyItemRemoved(position)
+        adapter.notifyDataSetChanged()
     }
 
     override fun onEditTransaction(root:View, id:Int) {
@@ -109,8 +121,6 @@ class TransactionFragment : Fragment(), TransactionItemClickListener {
         val addressTextView = bottomSheetView.findViewById<TextView>(R.id.tv_address)
         val buttonOpenMap = bottomSheetView.findViewById<Button>(R.id.btn_open_map)
 
-
-        val coordinates = locationHelper.setLatLongFromAddress(location)
         addressTextView.text = location
         nameTextView.text = name
 
diff --git a/app/src/main/java/com/example/bandung_bondowoso/viewmodel/GraphViewModel.kt b/app/src/main/java/com/example/bandung_bondowoso/viewmodel/GraphViewModel.kt
deleted file mode 100644
index e5fdfca5f49f2ee7beb3f0d70b14e2674ff7050d..0000000000000000000000000000000000000000
--- a/app/src/main/java/com/example/bandung_bondowoso/viewmodel/GraphViewModel.kt
+++ /dev/null
@@ -1,6 +0,0 @@
-package com.example.bandung_bondowoso.viewmodel
-
-import androidx.lifecycle.ViewModel
-
-class GraphViewModel : ViewModel() {
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/bandung_bondowoso/viewmodel/HomeViewModel.kt b/app/src/main/java/com/example/bandung_bondowoso/viewmodel/HomeViewModel.kt
deleted file mode 100644
index 9dcb246df278c465915859ea75afbf3237c166ca..0000000000000000000000000000000000000000
--- a/app/src/main/java/com/example/bandung_bondowoso/viewmodel/HomeViewModel.kt
+++ /dev/null
@@ -1,106 +0,0 @@
-package com.example.bandung_bondowoso.viewmodel
-
-import android.app.Application
-import android.location.Geocoder
-import android.os.Build
-import android.util.Log
-import androidx.lifecycle.AndroidViewModel
-import androidx.lifecycle.LiveData
-import androidx.lifecycle.MutableLiveData
-import androidx.lifecycle.viewModelScope
-import com.example.bandung_bondowoso.local.AppDatabase
-import com.example.bandung_bondowoso.model.Transaction
-import com.example.bandung_bondowoso.repository.TransactionRepository
-import kotlinx.coroutines.flow.Flow
-import kotlinx.coroutines.flow.collect
-import kotlinx.coroutines.launch
-
-class HomeViewModel(application: Application) : AndroidViewModel(application) {
-    private val _text = MutableLiveData<String>().apply {
-        value = "This is home Fragment"
-    }
-
-    val text: LiveData<String> = _text
-
-    private val transactionDao = AppDatabase.getInstance(application).transactionDao()
-    private val repository = TransactionRepository(transactionDao)
-
-    private val _transactions = MutableLiveData<List<Transaction>>()
-    val transactions = _transactions
-
-    init {
-        viewModelScope.launch {
-            repository.getAll.collect() {
-                _transactions.value = it
-            }
-        }
-    }
-    fun getTransactionCount(){
-        viewModelScope.launch {
-            repository.getCount()
-        }
-    }
-    fun upsert(transaction: Transaction) = viewModelScope.launch {
-        repository.upsert(transaction)
-    }
-
-    // Experimenting with location
-    fun upsertDummyTransaction() {
-        val transaction = Transaction(0, "Test", 100,
-            com.example.bandung_bondowoso.model.TransactionCategory.INCOME, _locationLat.value ?: 0.0, _locationLong.value ?: 0.0, _locationName.value?:"",
-            java.util.Date()
-        )
-        upsert(transaction)
-    }
-
-    private val _locationName = MutableLiveData<String?>()
-    val locationName: LiveData<String?> = _locationName
-
-    private val _locationLat = MutableLiveData<Double>()
-    val locationLat: LiveData<Double> = _locationLat
-
-    private val _locationLong = MutableLiveData<Double>()
-    val locationLong: LiveData<Double> = _locationLong
-
-    fun setLocation(location: String?) {
-        _locationName.value = location
-    }
-
-    @Suppress("DEPRECATION")
-    fun setLocationByLatLong(
-        lat: Double,
-        long: Double,
-    ) {
-        _locationLat.value = lat
-        _locationLong.value = long
-
-        val geocoder = Geocoder(getApplication())
-        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
-            geocoder.getFromLocation(lat, long, 1) {
-                address ->
-                setLocation(address.firstOrNull()?.getAddressLine(0))
-            }
-            return
-        }
-
-        try {
-            val address = geocoder.getFromLocation(lat, long, 1)
-            if (address != null) {
-                setLocation(address.firstOrNull()?.getAddressLine(0))
-            } else {
-                setLocation(null)
-            }
-        } catch(e: Exception) {
-            //will catch if there is an internet problem
-            Log.e("HomeViewModel", "Error getting location", e)
-            setLocation(null)
-        }
-    }
-
-    // Development function
-    fun deleteAll() {
-        viewModelScope.launch {
-            repository.deleteAll()
-        }
-    }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/bandung_bondowoso/viewmodel/setting/SettingViewModel.kt b/app/src/main/java/com/example/bandung_bondowoso/viewmodel/setting/SettingViewModel.kt
index 379ca4554a087816a00f6aeb68d5d2dbd608f7d7..c40b0afe8c51dccfeec1f33c86550a0873db5e3e 100644
--- a/app/src/main/java/com/example/bandung_bondowoso/viewmodel/setting/SettingViewModel.kt
+++ b/app/src/main/java/com/example/bandung_bondowoso/viewmodel/setting/SettingViewModel.kt
@@ -1,12 +1,18 @@
 package com.example.bandung_bondowoso.viewmodel.setting
 
+import android.content.Intent
+import android.util.Log
+import androidx.core.content.ContentProviderCompat.requireContext
 import androidx.lifecycle.ViewModel
 import androidx.lifecycle.ViewModelProvider
 import androidx.lifecycle.viewModelScope
+import androidx.localbroadcastmanager.content.LocalBroadcastManager
+import com.example.bandung_bondowoso.broadcast.randomize_transaction.RandomizeTransactionListener
+import com.example.bandung_bondowoso.model.TransactionCategory
 import com.example.bandung_bondowoso.repository.UserRepository
 import kotlinx.coroutines.launch
 
-class SettingViewModel(private val userRepository: UserRepository): ViewModel() {
+class SettingViewModel(private val userRepository: UserRepository): ViewModel(){
     fun logout() {
         viewModelScope.launch {
             userRepository.logout()
diff --git a/app/src/main/java/com/example/bandung_bondowoso/viewmodel/transaction/RandomizeTransactionViewModel.kt b/app/src/main/java/com/example/bandung_bondowoso/viewmodel/transaction/RandomizeTransactionViewModel.kt
new file mode 100644
index 0000000000000000000000000000000000000000..0312e531ae6a6885f629c11d29bd56bac94af369
--- /dev/null
+++ b/app/src/main/java/com/example/bandung_bondowoso/viewmodel/transaction/RandomizeTransactionViewModel.kt
@@ -0,0 +1,43 @@
+package com.example.bandung_bondowoso.viewmodel.transaction
+
+import android.content.Intent
+import android.util.Log
+import androidx.lifecycle.LiveData
+import androidx.lifecycle.MutableLiveData
+import androidx.lifecycle.ViewModel
+import androidx.localbroadcastmanager.content.LocalBroadcastManager
+import com.example.bandung_bondowoso.broadcast.randomize_transaction.RandomizeTransactionListener
+import com.example.bandung_bondowoso.broadcast.randomize_transaction.RandomizeTransactionReceiver
+import com.example.bandung_bondowoso.model.TransactionCategory
+
+class RandomizeTransactionViewModel: ViewModel(), RandomizeTransactionListener {
+    private val _isRandomized = MutableLiveData<Boolean>()
+    val isRandomized = _isRandomized
+
+    private val _transactionName = MutableLiveData<String>()
+    val transactionName: LiveData<String> = _transactionName
+
+    private val _transactionAmount = MutableLiveData<Int>()
+    val transactionAmount:LiveData<Int> = _transactionAmount
+
+    override fun onRandomized() {
+        Log.d("RandomizeTransactionViewModel", "onRandomized")
+        _isRandomized.value = true
+    }
+
+    override fun onReceivedRandomTransaction(
+        transactionName: String,
+        transactionAmount: Int,
+    ) {
+        Log.d("RandomizeTransactionViewModel", "onReceivedRandomTransaction")
+        _transactionName.value = transactionName
+        _transactionAmount.value = transactionAmount
+    }
+
+    fun getTransactionName(): String? {
+        return _transactionName.value
+    }
+
+
+
+}
diff --git a/app/src/main/java/com/example/bandung_bondowoso/viewmodel/TransactionViewModel.kt b/app/src/main/java/com/example/bandung_bondowoso/viewmodel/transaction/TransactionViewModel.kt
similarity index 68%
rename from app/src/main/java/com/example/bandung_bondowoso/viewmodel/TransactionViewModel.kt
rename to app/src/main/java/com/example/bandung_bondowoso/viewmodel/transaction/TransactionViewModel.kt
index 9aa4db76782a9eda0f285044cb2aaaf187d2b25c..3d01c05e0683df301361ed1055b5ae87ad3f348b 100644
--- a/app/src/main/java/com/example/bandung_bondowoso/viewmodel/TransactionViewModel.kt
+++ b/app/src/main/java/com/example/bandung_bondowoso/viewmodel/transaction/TransactionViewModel.kt
@@ -1,32 +1,35 @@
-package com.example.bandung_bondowoso.viewmodel
+package com.example.bandung_bondowoso.viewmodel.transaction
 
+import android.content.Intent
 import androidx.lifecycle.LiveData
 import androidx.lifecycle.MutableLiveData
 import androidx.lifecycle.ViewModel
 import androidx.lifecycle.ViewModelProvider
 import androidx.lifecycle.viewModelScope
+import com.example.bandung_bondowoso.broadcast.randomize_transaction.RandomizeTransactionListener
 import com.example.bandung_bondowoso.model.Transaction
 import com.example.bandung_bondowoso.model.TransactionCategory
 import com.example.bandung_bondowoso.repository.TransactionRepository
 import kotlinx.coroutines.launch
 
-class TransactionViewModel(private val repository:TransactionRepository) : ViewModel() {
+class TransactionViewModel(private val repository:TransactionRepository) : ViewModel(){
 
     private val _transactions = MutableLiveData<List<Transaction>>()
-    val transactions = _transactions
+    val transactions:LiveData<List<Transaction>> = _transactions
     private val _balance = MutableLiveData<Int>()
     val balance: LiveData<Int> = _balance
-    private val TAG = "TransactionViewModel"
+    private val tag = "TransactionViewModel"
 
-    init {
+
+    suspend fun fetchTransactions(email: String): List<Transaction> {
+        return repository.getAllByEmail(email)
+    }
+    fun fetchTransactionsByEmail(email: String) {
         viewModelScope.launch {
-            repository.getAll.collect {
-                _transactions.value = it
-                _balance.value = getBalance()
-            }
+            val transactions = repository.getAllByEmail(email)
+            _transactions.value = transactions
         }
     }
-
     suspend fun getTransaction(id: Int): Transaction {
         return repository.getTransaction(id)
     }
@@ -39,32 +42,34 @@ class TransactionViewModel(private val repository:TransactionRepository) : ViewM
     fun upsert(transaction: Transaction) {
         viewModelScope.launch {
             repository.upsert(transaction)
+            updateBalance(transaction.email)
         }
     }
-
-    suspend fun getIncome(): Int {
-        return repository.getIncome()
+    fun updateBalance(email: String) {
+        viewModelScope.launch {
+            val newBalance = (getIncome(email) - getExpense(email))
+            _balance.postValue(newBalance)
+        }
     }
-
-    suspend fun getExpense(): Int {
-        return repository.getExpense()
+    suspend fun getIncome(email:String): Int {
+        return repository.getIncome(email)
     }
-    private suspend fun getBalance(): Int {
-        return  -1 * (getExpense() - getIncome())
+
+    suspend fun getExpense(email:String): Int {
+        return repository.getExpense(email)
     }
 
-    fun edit(transaction: Transaction) {
+    fun delete(transaction: Transaction, email:String) {
         viewModelScope.launch {
-            repository.upsert(transaction)
+            repository.delete(transaction)
+            updateBalance(transaction.email)
+            fetchTransactionsByEmail(email)
         }
     }
-
-    fun validateAndUpdateTransaction(prevTransaction:Transaction, newTransaction: Transaction, field:String):Boolean{
-        TODO()
-    }
-    fun delete(transaction: Transaction) {
+    // Development function
+    fun deleteAll() {
         viewModelScope.launch {
-            repository.delete(transaction)
+            repository.deleteAll()
         }
     }
     fun randomizeTransaction():Transaction{
@@ -76,39 +81,34 @@ class TransactionViewModel(private val repository:TransactionRepository) : ViewM
         val randomLat = (-90..90).random().toDouble()
         val randomLong = (-180..180).random().toDouble()
         val randomLocationName = if(randomLocation == 0) "Bandung" else "Bondowoso"
-        return Transaction( name = "Random Transaction $randomName", amount = randomAmount,
+        return Transaction( name = "Random Transaction $randomName", email = "13521132@std.stei.itb.ac.id",
+            amount = randomAmount,
             type = randomType, locationLat =  randomLat,
             locationLong =  randomLong, locationName =  randomLocationName,
             createdAt =  java.util.Date()) }
-    // Development function
-    fun deleteAll() {
-        viewModelScope.launch {
-            repository.deleteAll()
-        }
-    }
     fun seedData(){
         val transactionList = mutableListOf<Transaction>(
-            Transaction( name = "Test 1", amount = 100,
+            Transaction( email = "13521132@std.stei.itb.ac.id", name = "Test 1", amount = 100,
                 type = TransactionCategory.INCOME, locationLat = 6.1944,
                 locationLong =  106.8229, locationName =  "Jakarta",
                createdAt =  java.util.Date()),
-            Transaction( name = "Test 2", amount = 100,
+            Transaction( email = "13521132@std.stei.itb.ac.id", name = "Test 2", amount = 100,
                 type = TransactionCategory.INCOME, locationLat =  6.1944,
                 locationLong =  106.8229, locationName =  "Jakarta",
                 createdAt =  java.util.Date()),
-            Transaction( name = "Test 3", amount = 100,
+            Transaction( email = "13521132@std.stei.itb.ac.id", name = "Test 3", amount = 100,
                 type = TransactionCategory.INCOME, locationLat =  6.1944,
                 locationLong =  106.8229, locationName =  "Jakarta",
                 createdAt =  java.util.Date()),
-            Transaction( name = "Test 4 ", amount = 100,
+            Transaction(email = "13521132@std.stei.itb.ac.id", name = "Test 4 ", amount = 100,
                 type = TransactionCategory.INCOME, locationLat =  6.1944,
                 locationLong =  106.8229, locationName =  "Jakarta",
                 createdAt =  java.util.Date()),
-            Transaction( name = "Test 5", amount = 100,
+            Transaction(email = "13521132@std.stei.itb.ac.id", name = "Test 5", amount = 100,
                 type = TransactionCategory.INCOME, locationLat =  6.1944,
                 locationLong =  106.8229, locationName =  "Jakarta",
                 createdAt =  java.util.Date()),
-            Transaction( name = "Test 6", amount = 100,
+            Transaction(email = "13521132@std.stei.itb.ac.id", name = "Test 6", amount = 100,
                 type = TransactionCategory.INCOME, locationLat =  6.1944,
                 locationLong =  106.8229, locationName =  "Jakarta",
                 createdAt =  java.util.Date())
@@ -118,6 +118,7 @@ class TransactionViewModel(private val repository:TransactionRepository) : ViewM
             upsert(it)
         }
     }
+
 }
 
 /** Provides repository to transaction view model */
diff --git a/app/src/main/res/drawable/bg_settings_card_email.xml b/app/src/main/res/drawable/bg_settings_card_email.xml
deleted file mode 100644
index 211758aeefd78f338544978746ff5f3704ae3fcc..0000000000000000000000000000000000000000
--- a/app/src/main/res/drawable/bg_settings_card_email.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<shape xmlns:android="http://schemas.android.com/apk/res/android">
-    <solid android:color="@color/md_theme_peach" />
-    <corners android:radius="10dp" />
-</shape>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_settings_card_excel.xml b/app/src/main/res/drawable/bg_settings_card_excel.xml
deleted file mode 100644
index 99e0d60361eea5facc82cf339d4d19e14d91d3f0..0000000000000000000000000000000000000000
--- a/app/src/main/res/drawable/bg_settings_card_excel.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<shape xmlns:android="http://schemas.android.com/apk/res/android">
-    <solid android:color="@color/md_theme_light_green" />
-    <corners android:radius="10dp" />
-</shape>
\ No newline at end of file
diff --git a/app/src/main/res/layout-land/fragment_graph.xml b/app/src/main/res/layout-land/fragment_graph.xml
index 3fd26d23f8421a621c611d9737584aa6190b4d0b..dc83539a7fc87b91cb263af91d96389c02dbdd68 100644
--- a/app/src/main/res/layout-land/fragment_graph.xml
+++ b/app/src/main/res/layout-land/fragment_graph.xml
@@ -5,24 +5,71 @@
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     tools:context=".view.graph.GraphFragment"
+    android:background="@color/md_theme_surface"
     >
-
     <TextView
         android:id="@+id/textView"
         style="@style/TextAppearance.HeadlineLarge"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:layout_marginTop="20dp"
+        android:layout_marginStart="20dp"
+        android:layout_marginTop="10dp"
         android:padding="10dp"
-        android:text="Graph"
+        android:text="@string/title_chart"
         android:textColor="@color/md_theme_primary"
         app:layout_constraintStart_toStartOf="parent"
         app:layout_constraintTop_toTopOf="parent" />
 
-    <com.anychart.AnyChartView
-        android:id="@+id/anyChartView"
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:id="@+id/cl_empty_rv"
         android:layout_width="match_parent"
-        android:layout_height="match_parent"
+        android:layout_height="wrap_content"
+        android:visibility="gone"
         app:layout_constraintBottom_toBottomOf="parent"
-        />
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toBottomOf="@id/textView">
+
+        <ImageView
+            android:id="@+id/iv_no_data"
+            android:layout_width="300dp"
+            android:layout_height="300dp"
+            android:layout_marginTop="20dp"
+            android:contentDescription="@string/cd_transaction_empty"
+            android:src="@drawable/no_data_cuate"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
+        <TextView
+            style="@style/TextAppearance.LabelLarge"
+            android:layout_width="wrap_content"
+            android:layout_height="match_parent"
+            android:text="@string/msg_empty_transaction"
+            android:textColor="@color/md_theme_tertiary"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toBottomOf="@id/iv_no_data"
+
+            />
+
+    </androidx.constraintlayout.widget.ConstraintLayout>
+
+    <RelativeLayout
+        android:id="@+id/relativeLayout"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:orientation="vertical"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toBottomOf="@id/textView"
+        app:layout_goneMarginTop="@dimen/title_top_margin">
+
+        <com.github.mikephil.charting.charts.PieChart
+            android:id="@+id/chart1"
+            android:layout_width="match_parent"
+            android:layout_height="200dp"
+            />
+
+    </RelativeLayout>
 </androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_dashboard.xml b/app/src/main/res/layout/fragment_dashboard.xml
index 61536b7d44c4f5cab0550befbd98719f34307d93..9b360e21e81cb94a2129baf0187188982e428fc3 100644
--- a/app/src/main/res/layout/fragment_dashboard.xml
+++ b/app/src/main/res/layout/fragment_dashboard.xml
@@ -21,6 +21,7 @@
         android:text="Logout"
         app:layout_constraintBottom_toBottomOf="parent"
         app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintHorizontal_bias="0.0"
         app:layout_constraintStart_toStartOf="parent"
         app:layout_constraintTop_toBottomOf="@id/dashboard_child_fragment"
         />
diff --git a/app/src/main/res/layout/fragment_graph.xml b/app/src/main/res/layout/fragment_graph.xml
index ed95a4c4451ee6a0cf528c307cc4f9c8892614ee..c5026257ae8494c365d336c436fe2de0e09db831 100644
--- a/app/src/main/res/layout/fragment_graph.xml
+++ b/app/src/main/res/layout/fragment_graph.xml
@@ -20,21 +20,55 @@
         app:layout_constraintStart_toStartOf="parent"
         app:layout_constraintTop_toTopOf="parent" />
 
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:id="@+id/cl_empty_rv"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        android:visibility="gone"
+        app:layout_constraintTop_toBottomOf="@id/textView">
+
+        <ImageView
+            android:id="@+id/iv_no_data"
+            android:layout_width="300dp"
+            android:layout_height="300dp"
+            android:layout_marginTop="20dp"
+            android:contentDescription="@string/cd_transaction_empty"
+            android:src="@drawable/no_data_cuate"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
+        <TextView
+            style="@style/TextAppearance.LabelLarge"
+            android:layout_width="wrap_content"
+            android:layout_height="match_parent"
+            android:text="@string/msg_empty_transaction"
+            android:textColor="@color/md_theme_tertiary"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toBottomOf="@id/iv_no_data"
+
+            />
+
+    </androidx.constraintlayout.widget.ConstraintLayout>
+
     <RelativeLayout
+        android:id="@+id/relativeLayout"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:layout_marginTop="0dp"
         android:orientation="vertical"
         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintStart_toStartOf="parent"
-        app:layout_goneMarginTop="@dimen/title_top_margin"
-        app:layout_constraintTop_toBottomOf="@id/textView">
+        app:layout_constraintTop_toBottomOf="@id/textView"
+        app:layout_goneMarginTop="@dimen/title_top_margin">
 
         <com.github.mikephil.charting.charts.PieChart
             android:id="@+id/chart1"
             android:layout_width="match_parent"
             android:layout_height="match_parent"
-
             />
 
     </RelativeLayout>
diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml
deleted file mode 100644
index 4f7bcc61551a3497aa93cad4760226bbe92db78e..0000000000000000000000000000000000000000
--- a/app/src/main/res/layout/fragment_home.xml
+++ /dev/null
@@ -1,54 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
-    xmlns:tools="http://schemas.android.com/tools"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:background="@color/md_theme_onPrimary"
-    tools:context=".view.home.HomeFragment">
-
-    <TextView
-        android:id="@+id/text_home"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:layout_marginStart="8dp"
-        android:layout_marginTop="8dp"
-        android:layout_marginEnd="8dp"
-        android:textAlignment="center"
-        style="@style/TextAppearance.HeadlineLarge"
-        android:text="@string/app_name"
-        android:textColor="@color/black"
-        app:layout_constraintBottom_toBottomOf="parent"
-        app:layout_constraintEnd_toEndOf="parent"
-        app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintTop_toTopOf="parent" />
-
-    <TextView
-        android:id="@+id/text_location"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:text="@{viewModel.location}"
-        app:layout_constraintTop_toBottomOf="@id/text_home"
-        app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintEnd_toEndOf="parent"
-        />
-
-    <Button
-        android:id="@+id/button_add_transaction"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:text="Add Transaction"
-        app:layout_constraintEnd_toEndOf="parent"
-        app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintTop_toBottomOf="@+id/text_location" />
-
-    <Button
-        android:id="@+id/button_delete_all_transaction"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:text="Delete All Transaction"
-        app:layout_constraintTop_toBottomOf="@+id/button_add_transaction"
-        app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintEnd_toEndOf="parent"
-        />
-</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_settings.xml b/app/src/main/res/layout/fragment_settings.xml
index bb5d17bd4e80a410f281c0667110b824ea89941b..9c3ad01122706a5c29044565dc17c9725213d12f 100644
--- a/app/src/main/res/layout/fragment_settings.xml
+++ b/app/src/main/res/layout/fragment_settings.xml
@@ -51,7 +51,7 @@
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
                 android:layout_marginStart="@dimen/title_start_margin"
-                android:textColor="@color/md_theme_primary"
+                android:textColor="@color/textColor"
                 app:layout_constraintStart_toEndOf="@id/avatar"
                 app:layout_constraintTop_toTopOf="parent"
                 app:layout_constraintBottom_toBottomOf="parent"
@@ -65,7 +65,7 @@
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:layout_marginTop="24dp"
-        android:background="@drawable/bg_settings_card_excel"
+        android:background="@drawable/bg_settings_card_user"
         android:padding="10dp"
         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintStart_toStartOf="parent"
@@ -82,7 +82,7 @@
             app:layout_constraintStart_toStartOf="parent"
             app:layout_constraintEnd_toStartOf="@id/tv_title_settings_card_excel"
             app:layout_constraintTop_toTopOf="parent"
-            app:tint="@color/md_theme_primary" />
+            app:tint="@color/textColor" />
 
             <TextView
                 android:id="@+id/tv_title_settings_card_excel"
@@ -90,7 +90,7 @@
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
                 android:text="@string/save_transaction"
-                android:textColor="@color/md_theme_primary"
+                android:textColor="@color/textColor"
                 android:textStyle="bold"
                 android:layout_marginStart="@dimen/title_start_margin"
                 app:layout_constraintStart_toEndOf="@id/icon_settings_card_excel"
@@ -102,7 +102,7 @@
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
                 android:text="@string/file_type"
-                android:textColor="@color/md_theme_primary"
+                android:textColor="@color/textColor"
                 android:layout_marginStart="@dimen/title_start_margin"
                 app:layout_constraintStart_toEndOf="@id/icon_settings_card_excel"
                 app:layout_constraintTop_toBottomOf="@id/tv_title_settings_card_excel"
@@ -125,7 +125,7 @@
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:layout_marginTop="16dp"
-        android:background="@drawable/bg_settings_card_email"
+        android:background="@drawable/bg_settings_card_user"
         android:padding="10dp"
         app:layout_constraintTop_toBottomOf="@+id/constraintLayout3"
         tools:layout_editor_absoluteX="-16dp">
@@ -142,7 +142,7 @@
             app:layout_constraintStart_toStartOf="parent"
             app:layout_constraintEnd_toStartOf="@id/tv_title_settings_card_email"
             app:layout_constraintTop_toTopOf="parent"
-            app:tint="@color/md_theme_primary" />
+            app:tint="@color/textColor" />
 
             <TextView
                 android:id="@+id/tv_title_settings_card_email"
@@ -150,7 +150,7 @@
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
                 android:text="@string/kirim_daftar_transaksi"
-                android:textColor="@color/md_theme_primary"
+                android:textColor="@color/textColor"
                 android:textStyle="bold"
                 android:layout_marginStart="@dimen/title_start_margin"
                 app:layout_constraintStart_toEndOf="@id/icon_email"
@@ -164,7 +164,7 @@
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
                 android:text="@string/gmail"
-                android:textColor="@color/md_theme_primary"
+                android:textColor="@color/textColor"
                 android:layout_marginStart="@dimen/title_start_margin"
                 app:layout_constraintStart_toEndOf="@id/icon_email"
                 app:layout_constraintTop_toBottomOf="@id/tv_title_settings_card_email"
@@ -239,7 +239,7 @@
             android:layout_height="wrap_content"
             android:layout_marginStart="@dimen/title_start_margin"
             android:text="@string/random_transaksi"
-            android:textColor="@color/md_theme_primary"
+            android:textColor="@color/textColor"
             android:textStyle="bold"
             app:layout_constraintStart_toEndOf="@+id/icon_random_transaction"
             app:layout_constraintTop_toTopOf="parent" />
@@ -253,10 +253,10 @@
             app:layout_constraintStart_toStartOf="parent"
             app:layout_constraintTop_toTopOf="parent"
             app:srcCompat="@drawable/ic_transaction"
-            app:tint="@color/md_theme_primary" />
+            app:tint="@color/textColor" />
 
         <Button
-            android:id="@+id/button"
+            android:id="@+id/buttonRandom"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_marginTop="@dimen/title_top_margin"
diff --git a/app/src/main/res/navigation/mobile_navigation.xml b/app/src/main/res/navigation/mobile_navigation.xml
index f4c1c834ed5a714f7a2977447b41e029a31149bc..d1f85e9422bc5710f1accea6ba584031704251c0 100644
--- a/app/src/main/res/navigation/mobile_navigation.xml
+++ b/app/src/main/res/navigation/mobile_navigation.xml
@@ -36,24 +36,29 @@
         android:id = "@+id/navigation_settings"
         android:name= "com.example.bandung_bondowoso.view.setting.SettingFragment"
         android:label="Settings"
-        tools:layout="@layout/fragment_settings" />
+        tools:layout="@layout/fragment_settings" >
+        <action
+            android:id="@+id/action_navigation_settings_to_newTransactionFragment"
+            app:destination="@id/newTransactionFragment" />
+    </fragment>
 
     <fragment
         android:id="@+id/fragment_login"
         android:name="com.example.bandung_bondowoso.view.login.LoginFragment"
         android:label="fragment_login"
         tools:layout="@layout/fragment_login" >
-        <action
-            android:id="@+id/action_loginFragment_to_navigation_transaction"
-            app:destination="@id/navigation_transaction"
-            app:popUpTo="@id/mobile_navigation"
-            app:popUpToInclusive="true" />
         <action
             android:id="@+id/action_fragment_login_to_noNetworkFragment"
             app:destination="@id/noNetworkFragment"
             app:popUpTo="@id/mobile_navigation"
             app:popUpToInclusive="true"
             />
+        <action
+            android:id="@+id/action_fragment_login_to_navigation_transaction"
+            app:destination="@id/navigation_transaction"
+            app:popUpTo="@id/mobile_navigation"
+            app:popUpToInclusive="true"
+            />
     </fragment>
     <fragment
         android:id="@+id/newTransactionFragment"
diff --git a/app/src/main/res/values-night/colors.xml b/app/src/main/res/values-night/colors.xml
index 11eeb49d770da6630a3fd8f99833fc3b89631cb8..993be82593165eab34c4d40d0f784b060ac47f0b 100644
--- a/app/src/main/res/values-night/colors.xml
+++ b/app/src/main/res/values-night/colors.xml
@@ -1,12 +1,12 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
-    <color name="md_theme_primary">#DFE0FF</color>
+    <color name="md_theme_primary">#2E8CFF</color>
     <color name="md_theme_onPrimary">#242B61</color>
-    <color name="md_theme_primaryContainer">#3B4279</color>
+    <color name="md_theme_primaryContainer">#0819B6</color>
     <color name="md_theme_onPrimaryContainer">#DFE0FF</color>
     <color name="md_theme_red">#BE0707</color>
     <color name="md_theme_green">#44C34A</color>
-    <color name="md_theme_peach">#3B4279</color>
+    <color name="md_theme_peach">#F12BFF</color>
     <color name="md_theme_light_green">#3B4279</color>
     <color name="md_theme_blue">#ADC7FF</color>
     <color name="md_theme_secondary">#BCC3FF</color>
@@ -23,7 +23,7 @@
     <color name="md_theme_onErrorContainer">#FFDAD6</color>
     <color name="md_theme_background">#131318</color>
     <color name="md_theme_onBackground">#E4E1E9</color>
-    <color name="md_theme_surface">#131318</color>
+    <color name="md_theme_surface">#0D1931</color>
     <color name="md_theme_onSurface">#E4E1E9</color>
     <color name="md_theme_surfaceVariant">#46464F</color>
     <color name="md_theme_onSurfaceVariant">#C7C5D0</color>
@@ -146,4 +146,5 @@
     <color name="md_theme_surfaceContainer_highContrast">#1F1F25</color>
     <color name="md_theme_surfaceContainerHigh_highContrast">#29292F</color>
     <color name="md_theme_surfaceContainerHighest_highContrast">#34343A</color>
+    <color name="textColor">#ffffff</color>
 </resources>
\ No newline at end of file
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
index 3753890d8dc3b6770bfb3c94275ec9bb9b4a9f03..14cfa7e8d4d9b1d1306de6b0b3f8195fef03b594 100644
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -6,7 +6,7 @@
     <color name="md_theme_onPrimary">#FFFFFF</color>
     <color name="md_theme_red">#BE0707</color>
     <color name="md_theme_green">#44C34A</color>
-    <color name="md_theme_peach">#FFDAD6</color>
+    <color name="md_theme_peach">#FF639A</color>
     <color name="md_theme_light_green">#C7ECC1</color>
     <color name="md_theme_blue">#ADC7FF</color>
     <color name="md_theme_primaryContainer">#DFE0FF</color>
@@ -150,4 +150,5 @@
     <color name="md_theme_surfaceContainerHighest_highContrast">#E4E1E9</color>
     <color name="black">#000000</color>
     <color name="white">#FFFFFF</color>
+    <color name="textColor">#000E8E</color>
 </resources>
\ No newline at end of file