diff --git a/app/src/main/java/com/atm/bondowowo/ui/transaction/TransactionInputFragment.kt b/app/src/main/java/com/atm/bondowowo/ui/transaction/TransactionInputFragment.kt
index 6ce3208cacdb38620ac5815d16b9eb77cde8c090..98897c01c7a65bbf3e4376fd834fc20742b8b169 100644
--- a/app/src/main/java/com/atm/bondowowo/ui/transaction/TransactionInputFragment.kt
+++ b/app/src/main/java/com/atm/bondowowo/ui/transaction/TransactionInputFragment.kt
@@ -1,9 +1,16 @@
 package com.atm.bondowowo.ui.transaction
 
+import android.Manifest
+import android.annotation.SuppressLint
 import android.content.BroadcastReceiver
 import android.content.Context
 import android.content.Intent
 import android.content.IntentFilter
+import android.content.pm.PackageManager
+import android.location.Geocoder
+import android.location.Location
+import android.location.LocationListener
+import android.location.LocationManager
 import android.os.Build
 import android.os.Bundle
 import android.view.LayoutInflater
@@ -15,6 +22,7 @@ import android.widget.EditText
 import android.widget.Spinner
 import android.widget.Toast
 import androidx.annotation.RequiresApi
+import androidx.core.app.ActivityCompat
 import androidx.fragment.app.Fragment
 import com.atm.bondowowo.R
 import com.atm.bondowowo.data.local.database.AppDatabase
@@ -24,7 +32,6 @@ import java.time.LocalDateTime
 class TransactionInputFragment : Fragment() {
     private lateinit var nama_transaksi: EditText
     private lateinit var nominal_transaksi: EditText
-//    private lateinit var kategori_transaksi: EditText
     private lateinit var kategori_transaksi: Spinner
 
     private lateinit var lokasi_transaksi: EditText
@@ -105,6 +112,7 @@ class TransactionInputFragment : Fragment() {
         return view
     }
 
+    @SuppressLint("MissingPermission")
     @RequiresApi(Build.VERSION_CODES.TIRAMISU)
     override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
         super.onViewCreated(view, savedInstanceState)
@@ -113,17 +121,26 @@ class TransactionInputFragment : Fragment() {
             IntentFilter("com.atm.bondowowo.RANDOM_INPUT_TRANSACTION"),
             Context.RECEIVER_NOT_EXPORTED
         )
+
+        if (checkLocationPermission()) {
+            locationManager = requireActivity().getSystemService(Context.LOCATION_SERVICE) as LocationManager
+            locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0f, locationListener)
+        }
     }
 
     override fun onDestroyView() {
         super.onDestroyView()
         requireContext().unregisterReceiver(inputValueReceiver)
+        if (this::locationManager.isInitialized) {
+            locationManager.removeUpdates(locationListener)
+        }
     }
 
     fun setListener(listener: TransactionInputListener) {
         this.listener = listener
     }
 
+    
     // Failed still broadcast reciever
     private val inputValueReceiver = object : BroadcastReceiver() {
         override fun onReceive(context: Context, intent: Intent) {
@@ -133,4 +150,64 @@ class TransactionInputFragment : Fragment() {
             }
         }
     }
+
+    private lateinit var locationManager: LocationManager
+
+    private val locationListener: LocationListener = object : LocationListener {
+        override fun onLocationChanged(location: Location) {
+            val geocoder = Geocoder(requireContext())
+            val addresses = geocoder.getFromLocation(location.latitude, location.longitude, 1)
+
+            if (addresses != null) {
+                if (addresses.isNotEmpty()) {
+                    val address = addresses[0].getAddressLine(0)
+                    lokasi_transaksi.setText(address)
+                }
+            }
+        }
+
+        @Deprecated("Deprecated in Java")
+        override fun onStatusChanged(provider: String?, status: Int, extras: Bundle?) {}
+
+        override fun onProviderEnabled(provider: String) {}
+
+        override fun onProviderDisabled(provider: String) {}
+    }
+
+    private fun checkLocationPermission(): Boolean {
+        if (ActivityCompat.checkSelfPermission(
+                requireContext(),
+                Manifest.permission.ACCESS_FINE_LOCATION
+            ) != PackageManager.PERMISSION_GRANTED
+        ) {
+            requestPermissions(arrayOf(Manifest.permission.ACCESS_FINE_LOCATION), 1)
+            return false
+        }
+        return true
+    }
+
+    override fun onRequestPermissionsResult(
+        requestCode: Int,
+        permissions: Array<out String>,
+        grantResults: IntArray
+    ) {
+        super.onRequestPermissionsResult(requestCode, permissions, grantResults)
+        if (requestCode == 1) {
+            if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
+                if (ActivityCompat.checkSelfPermission(
+                        requireContext(),
+                        Manifest.permission.ACCESS_FINE_LOCATION
+                    ) == PackageManager.PERMISSION_GRANTED
+                ) {
+                    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0f, locationListener)
+                }
+            } else {
+                Toast.makeText(
+                    requireContext(),
+                    "Location permission denied. Cannot get current location.",
+                    Toast.LENGTH_SHORT
+                ).show()
+            }
+        }
+    }
 }