diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 534fd6f8b27b87cad3d3cdacdd66d550b8c2ed55..ac9740ef99aa043ef84dea2d2b40e1bee641cc1f 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -25,6 +25,15 @@
             android:permission="android.permission.INTERNET">
         </service>
 
+        <receiver
+            android:name=".ui.transactions.TransactionsBroadcastReceiver"
+            android:enabled="true"
+            android:exported="false">
+            <intent-filter>
+                <action android:name="com.BondoYap.transactions.randomize" />
+            </intent-filter>
+        </receiver>
+
         <activity
             android:name=".ui.login.LoginActivity"
             android:screenOrientation="portrait"
@@ -41,6 +50,8 @@
             android:exported="true">
         </activity>
 
+
+
     </application>
 
 </manifest>
\ No newline at end of file
diff --git a/app/src/main/java/com/example/bondoyap/MainActivity.kt b/app/src/main/java/com/example/bondoyap/MainActivity.kt
index 45bd03acce96fb18184ec41c63a83e7262d0af71..f99a955ca06223a0f5dc78aba72f6cc75a909984 100644
--- a/app/src/main/java/com/example/bondoyap/MainActivity.kt
+++ b/app/src/main/java/com/example/bondoyap/MainActivity.kt
@@ -2,23 +2,38 @@ package com.example.bondoyap
 
 import android.content.Context
 import android.content.Intent
+import android.content.IntentFilter
 import android.content.SharedPreferences
 import android.os.Bundle
+import androidx.activity.viewModels
 import com.google.android.material.bottomnavigation.BottomNavigationView
 import androidx.appcompat.app.AppCompatActivity
+import androidx.core.content.ContentProviderCompat.requireContext
+import androidx.fragment.app.viewModels
+import androidx.localbroadcastmanager.content.LocalBroadcastManager
 import androidx.navigation.findNavController
 import androidx.navigation.ui.AppBarConfiguration
 import androidx.navigation.ui.setupActionBarWithNavController
 import androidx.navigation.ui.setupWithNavController
 import com.example.bondoyap.service.api.Constants.SHARED_PREFS_NAME
 import com.example.bondoyap.databinding.ActivityMainBinding
+import com.example.bondoyap.service.api.Constants
 import com.example.bondoyap.service.jwt.JwtService
 import com.example.bondoyap.ui.login.LoginActivity
+import com.example.bondoyap.ui.transactions.TransactionsApplication
+import com.example.bondoyap.ui.transactions.TransactionsBroadcastReceiver
+import com.example.bondoyap.ui.transactions.TransactionsViewModel
+import com.example.bondoyap.ui.transactions.TransactionsViewModelFactory
 
 class MainActivity : AppCompatActivity() {
 
     private lateinit var binding: ActivityMainBinding
     private lateinit var sharedPreferences: SharedPreferences
+    private lateinit var transactionsBroadcastReceiver: TransactionsBroadcastReceiver
+
+    private val transactionsViewModel: TransactionsViewModel by viewModels {
+        TransactionsViewModelFactory((applicationContext as TransactionsApplication).repository)
+    }
 
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
@@ -48,6 +63,10 @@ class MainActivity : AppCompatActivity() {
         setupActionBarWithNavController(navController, appBarConfiguration)
 
         navView.setupWithNavController(navController)
+
+        transactionsBroadcastReceiver = TransactionsBroadcastReceiver(transactionsViewModel)
+        val filter = IntentFilter(Constants.ACTION_RANDOMIZE_TRANSACTIONS)
+        LocalBroadcastManager.getInstance(this).registerReceiver(transactionsBroadcastReceiver, filter)
     }
 
     override fun onSupportNavigateUp(): Boolean {
@@ -57,4 +76,9 @@ class MainActivity : AppCompatActivity() {
     private fun isLoggedIn(): Boolean {
         return sharedPreferences.getBoolean("isLoggedIn", false)
     }
+
+    override fun onDestroy() {
+        super.onDestroy()
+        LocalBroadcastManager.getInstance(this).unregisterReceiver(transactionsBroadcastReceiver)
+    }
 }
\ No newline at end of file
diff --git a/app/src/main/java/com/example/bondoyap/service/api/Constants.kt b/app/src/main/java/com/example/bondoyap/service/api/Constants.kt
index 76fb345217e505ad47427a35808c9e2a256b86ef..897daedea631dae9a33ff6c0eca3671394eb39df 100644
--- a/app/src/main/java/com/example/bondoyap/service/api/Constants.kt
+++ b/app/src/main/java/com/example/bondoyap/service/api/Constants.kt
@@ -3,4 +3,5 @@ package com.example.bondoyap.service.api
 object Constants {
     const val BASE_URL: String = "https://pbd-backend-2024.vercel.app/api/"
     const val SHARED_PREFS_NAME = "BondoYap"
+    const val ACTION_RANDOMIZE_TRANSACTIONS = "com.BondoYap.transactions.randomize"
 }
\ No newline at end of file
diff --git a/app/src/main/java/com/example/bondoyap/ui/settings/SettingsFragment.kt b/app/src/main/java/com/example/bondoyap/ui/settings/SettingsFragment.kt
index 8018684cc1dabee268479d5c16e1e2029ee1dba6..26e124b1865ee2317362cdf3300a906f46b81386 100644
--- a/app/src/main/java/com/example/bondoyap/ui/settings/SettingsFragment.kt
+++ b/app/src/main/java/com/example/bondoyap/ui/settings/SettingsFragment.kt
@@ -2,13 +2,16 @@ package com.example.bondoyap.ui.settings
 
 import android.content.Intent
 import android.os.Bundle
+import android.util.Log
 import android.view.LayoutInflater
 import android.view.View
 import android.view.ViewGroup
 import android.widget.Toast
 import androidx.fragment.app.Fragment
 import androidx.lifecycle.ViewModelProvider
+import androidx.localbroadcastmanager.content.LocalBroadcastManager
 import com.example.bondoyap.databinding.FragmentSettingsBinding
+import com.example.bondoyap.service.api.Constants.ACTION_RANDOMIZE_TRANSACTIONS
 import com.example.bondoyap.ui.login.LoginActivity
 
 class SettingsFragment : Fragment() {
@@ -25,6 +28,7 @@ class SettingsFragment : Fragment() {
         _binding = FragmentSettingsBinding.inflate(inflater, container, false)
         return binding.root
     }
+
     override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
         super.onViewCreated(view, savedInstanceState)
 
@@ -60,15 +64,20 @@ class SettingsFragment : Fragment() {
 
         randomButton.setOnClickListener {
             Toast.makeText(appContext, "Membuat transaksi random ...", Toast.LENGTH_SHORT).show()
-            //todo
+
+            val intent = Intent(ACTION_RANDOMIZE_TRANSACTIONS)
+            intent.putExtra("message", "Randomize from setting!")
+            LocalBroadcastManager.getInstance(requireContext()).sendBroadcast(intent)
+
+            Log.d("BroadcastDebug", "Sending broadcast from SettingsFragment")
         }
 
-        saveButton.setOnClickListener{
+        saveButton.setOnClickListener {
             Toast.makeText(appContext, "Menyimpan transaksi...", Toast.LENGTH_SHORT).show()
             //todo
         }
 
-        sendButton.setOnClickListener{
+        sendButton.setOnClickListener {
             Toast.makeText(appContext, "Mengirimkan transaksi ...", Toast.LENGTH_SHORT).show()
             //todo
         }
diff --git a/app/src/main/java/com/example/bondoyap/ui/transactions/AddTransactionsFragment.kt b/app/src/main/java/com/example/bondoyap/ui/transactions/AddTransactionsFragment.kt
index 88d64ef36a124fb2e7a944540da9f4ca8a2a2dd2..6463fa0928a6487d79dfda7d59da716d1f735aed 100644
--- a/app/src/main/java/com/example/bondoyap/ui/transactions/AddTransactionsFragment.kt
+++ b/app/src/main/java/com/example/bondoyap/ui/transactions/AddTransactionsFragment.kt
@@ -1,17 +1,23 @@
 package com.example.bondoyap.ui.transactions
 
 import android.R
+import android.content.Context
+import android.content.IntentFilter
 import android.content.pm.PackageManager
+import android.os.Build
 import android.os.Bundle
 import android.view.LayoutInflater
 import android.view.View
 import android.view.ViewGroup
 import android.widget.ArrayAdapter
 import android.widget.Toast
+import androidx.annotation.RequiresApi
 import androidx.core.app.ActivityCompat
 import androidx.fragment.app.Fragment
 import androidx.fragment.app.viewModels
+import androidx.localbroadcastmanager.content.LocalBroadcastManager
 import com.example.bondoyap.databinding.FragmentAddTransactionsBinding
+import com.example.bondoyap.service.api.Constants.ACTION_RANDOMIZE_TRANSACTIONS
 import com.example.bondoyap.ui.transactions.data.Transactions
 import com.google.android.gms.location.FusedLocationProviderClient
 import com.google.android.gms.location.LocationServices
@@ -85,7 +91,7 @@ class AddTransactionsFragment : Fragment() {
                 0.0
             }
 
-            val location = fusedLocationProviderClient.lastLocation
+                val location = fusedLocationProviderClient.lastLocation
             location.addOnSuccessListener {
                 if(it != null) {
                     latitude = it.latitude.toString()
diff --git a/app/src/main/java/com/example/bondoyap/ui/transactions/TransactionsBroadcastReceiver.kt b/app/src/main/java/com/example/bondoyap/ui/transactions/TransactionsBroadcastReceiver.kt
new file mode 100644
index 0000000000000000000000000000000000000000..01ec56df32f5ede55d12ea840944d5e1704bbe31
--- /dev/null
+++ b/app/src/main/java/com/example/bondoyap/ui/transactions/TransactionsBroadcastReceiver.kt
@@ -0,0 +1,74 @@
+package com.example.bondoyap.ui.transactions
+
+import android.content.BroadcastReceiver
+import android.content.Context
+import android.content.Intent
+import android.content.pm.PackageManager
+import android.util.Log
+import android.widget.Toast
+import androidx.core.app.ActivityCompat
+import com.example.bondoyap.ui.transactions.data.Transactions
+import com.google.android.gms.location.FusedLocationProviderClient
+import com.google.android.gms.location.LocationServices
+import java.text.SimpleDateFormat
+import java.util.Date
+import java.util.Locale
+import kotlin.random.Random
+
+class TransactionsBroadcastReceiver(private val transactionsViewModel: TransactionsViewModel) : BroadcastReceiver() {
+    private lateinit var fusedLocationProviderClient: FusedLocationProviderClient
+    private lateinit var latitude: String
+    private lateinit var longitude: String
+    override fun onReceive(context: Context?, intent: Intent?) {
+        Log.d("BroadcastDebug", "Broadcast received in AddTransactionsFragment")
+
+        context ?: return
+
+        val randomJudul = "Random Judul ${Random.nextInt(1000)}"
+        val randomNominal = Random.nextDouble(1000000000000000.0)
+        val randomIsPemasukan = Random.nextBoolean()
+        val dateFormat = SimpleDateFormat("dd/MM/yyyy", Locale.getDefault())
+        val currentDate = dateFormat.format(Date())
+
+        fusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(context)
+        val location = fusedLocationProviderClient.lastLocation
+        location.addOnSuccessListener {
+            if(it != null) {
+                latitude = it.latitude.toString()
+                longitude = it.longitude.toString()
+
+                val transaction: Transactions = Transactions(
+                    judul = randomJudul,
+                    nominal = randomNominal,
+                    isPemasukan = randomIsPemasukan,
+                    tanggal = currentDate,
+                    longitude = longitude,
+                    latitude = latitude
+                )
+                transactionsViewModel.upsert(transaction)
+            }
+        }
+
+        if(
+            ActivityCompat.checkSelfPermission(context, android.Manifest.permission.ACCESS_FINE_LOCATION)
+            != PackageManager.PERMISSION_GRANTED
+            && ActivityCompat.checkSelfPermission(context, android.Manifest.permission.ACCESS_COARSE_LOCATION)
+            != PackageManager.PERMISSION_GRANTED
+        ) {
+            val transaction: Transactions = Transactions(
+                judul = randomJudul,
+                nominal = randomNominal,
+                isPemasukan = randomIsPemasukan,
+                tanggal = currentDate,
+                longitude = "",
+                latitude = ""
+            )
+            transactionsViewModel.upsert(transaction)
+            Toast.makeText(context.applicationContext,
+                "Izinkan location permission untuk membuat transaksi random dengan lokasi",
+                Toast.LENGTH_SHORT).show()
+        }
+
+        Toast.makeText(context.applicationContext, "Transaksi random telah dibuat", Toast.LENGTH_SHORT).show()
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/bondoyap/ui/transactions/TransactionsFragment.kt b/app/src/main/java/com/example/bondoyap/ui/transactions/TransactionsFragment.kt
index 036cd83e1724a379928591b30b629adc6a195603..f928b30d81367d99044359eca8ad4d5c8754020a 100644
--- a/app/src/main/java/com/example/bondoyap/ui/transactions/TransactionsFragment.kt
+++ b/app/src/main/java/com/example/bondoyap/ui/transactions/TransactionsFragment.kt
@@ -2,6 +2,7 @@ package com.example.bondoyap.ui.transactions
 
 import android.content.pm.PackageManager
 import android.os.Bundle
+import android.util.Log
 import android.view.LayoutInflater
 import android.view.View
 import android.view.ViewGroup
@@ -15,12 +16,11 @@ import androidx.recyclerview.widget.LinearLayoutManager
 import androidx.recyclerview.widget.RecyclerView
 import com.example.bondoyap.R
 import com.example.bondoyap.databinding.FragmentTransactionsBinding
+import com.example.bondoyap.service.api.Constants.ACTION_RANDOMIZE_TRANSACTIONS
 
 class TransactionsFragment: Fragment() {
     private var _binding: FragmentTransactionsBinding? = null
 
-    // This property is only valid between onCreateView and
-    // onDestroyView.
     private val binding get() = _binding!!
 
     private val transactionsViewModel: TransactionsViewModel by viewModels {
@@ -52,6 +52,7 @@ class TransactionsFragment: Fragment() {
         return binding.root
     }
 
+
     override fun onDestroyView() {
         super.onDestroyView()
         _binding = null