diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index 37c7e49930d44b3c5461da6f86f32ae3a5d2e1b1..8ae03e12297b83b59f3c1bf2ef1e8c2db52d0f86 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -1,6 +1,7 @@
 plugins {
     id("com.android.application")
     id("org.jetbrains.kotlin.android")
+    id("com.google.devtools.ksp")
 }
 
 android {
@@ -38,15 +39,38 @@ android {
 }
 
 dependencies {
+    implementation("com.google.android.gms:play-services-location:21.2.0")
+    val room_version = "2.6.1"
+    implementation("androidx.room:room-runtime:$room_version")
+    ksp("androidx.room:room-compiler:$room_version")
+
+    // optional - RxJava2 support for Room
+    implementation("androidx.room:room-rxjava2:$room_version")
+
+    // optional - RxJava3 support for Room
+    implementation ("androidx.room:room-rxjava3:$room_version")
+
+    // optional - Guava support for Room, including Optional and ListenableFuture
+    implementation ("androidx.room:room-guava:$room_version")
+
+    // optional - Test helpers
+    testImplementation ("androidx.room:room-testing:$room_version")
+
+    // optional - Paging 3 Integration
+    implementation ("androidx.room:room-paging:$room_version")
+
     implementation ("androidx.camera:camera-core:1.2.2")
     implementation ("androidx.camera:camera-camera2:1.2.2")
     implementation ("androidx.camera:camera-lifecycle:1.2.2")
     implementation ("androidx.camera:camera-video:1.2.2")
-
+    implementation("androidx.fragment:fragment-ktx:1.6.2")
     implementation ("androidx.camera:camera-view:1.2.2")
     implementation ("androidx.camera:camera-extensions:1.2.2")
     implementation("androidx.core:core-ktx:1.10.1")
     implementation("androidx.appcompat:appcompat:1.6.1")
+    implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.4.0")
+    implementation("androidx.activity:activity-ktx:1.3.3")
+
     implementation ("com.squareup.retrofit2:retrofit:2.9.0")
     implementation ("com.squareup.retrofit2:converter-gson:2.9.0")
 
@@ -57,4 +81,7 @@ dependencies {
     testImplementation("junit:junit:4.13.2")
     androidTestImplementation("androidx.test.ext:junit:1.1.5")
     androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1")
+
+    implementation("com.github.PhilJay:MPAndroidChart:v3.1.0")
+
 }
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 326df95d756d958680c6f6a32c15173983dfc900..bb502cea9ae4a8e885ac732232014cb695d8c227 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -10,6 +10,14 @@
     <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
 
 
+    <!-- Always include this permission -->
+    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
+
+    <!-- Include only if your app benefits from precise location access. -->
+    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
+
+    <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
+
 
     <application
         android:allowBackup="true"
@@ -21,16 +29,28 @@
         android:supportsRtl="true"
         android:theme="@style/Theme.BondoMan"
         tools:targetApi="31">
+
+        <service
+            android:name="location"
+            android:foregroundServiceType="location" >
+            <!-- Any inner elements would go here. -->
+        </service>
         <activity android:name=".MainActivity"/>
         <activity
             android:name=".LoginActivity"
             android:exported="true"
-            android:theme="@style/Theme.AppCompat.Light.NoActionBar">
+            android:theme="@style/Theme.AppCompat.Light.NoActionBar"
+            >
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
 
                 <category android:name="android.intent.category.LAUNCHER" />
             </intent-filter>
+
+            <intent-filter>
+                <action android:name="android.intent.action.SEND" />
+                <category android:name="android.intent.category.DEFAULT" />
+            </intent-filter>
         </activity>
     </application>
 
diff --git a/app/src/main/java/com/example/bondoman/MainActivity.kt b/app/src/main/java/com/example/bondoman/MainActivity.kt
index 2bd31288e0714cbd36e89a055e0f6c517ebc9b89..7229152a018354814f6062b8061c789facd4de60 100644
--- a/app/src/main/java/com/example/bondoman/MainActivity.kt
+++ b/app/src/main/java/com/example/bondoman/MainActivity.kt
@@ -1,5 +1,7 @@
 package com.example.bondoman
 
+import android.Manifest.permission.ACCESS_COARSE_LOCATION
+import android.Manifest.permission.ACCESS_FINE_LOCATION
 import android.app.AlertDialog
 import android.content.Context
 import androidx.appcompat.app.AppCompatActivity
@@ -18,7 +20,14 @@ import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.launch
 import android.net.ConnectivityManager
 import android.net.NetworkCapabilities
+import android.util.Log.d
+import androidx.activity.result.contract.ActivityResultContracts
+import androidx.activity.viewModels
+import com.example.bondoman.models.TransactionViewModel
+import com.example.bondoman.room.BondomanDatabase
 import android.os.Build
+import android.util.Log.w
+import androidx.appcompat.widget.Toolbar
 import com.example.bondoman.ui.nointernet.NoInternetFragment
 import retrofit2.HttpException
 
@@ -26,31 +35,59 @@ class MainActivity : AppCompatActivity() {
 
     private lateinit var binding: ActivityMainBinding
 
+    private val db by lazy {
+        BondomanDatabase.getDatabase(applicationContext)
+    }
+
+    private val viewModel: TransactionViewModel by viewModels {
+        TransactionViewModel.provideFactory(db.dao,this)
+    }
+
+    private val locationPermissionRequest = this.registerForActivityResult(
+        ActivityResultContracts.RequestMultiplePermissions()
+    ) { permissions ->
+        when {
+            permissions.getOrDefault(ACCESS_FINE_LOCATION, false) -> {
+                // Precise location access granted.
+            }
+            permissions.getOrDefault(ACCESS_COARSE_LOCATION, false) -> {
+                // Only approximate location access granted.
+            } else -> {
+            // No location access granted.
+                w("Location Access","Not Granted")
+        }
+        }
+    }
+
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
-
+        d("OKE",viewModel.state.value.toString())
+        locationPermissionRequest.launch(arrayOf(
+            ACCESS_FINE_LOCATION,
+            ACCESS_COARSE_LOCATION
+        ))
         binding = ActivityMainBinding.inflate(layoutInflater)
         setContentView(binding.root)
-        replaceFragment(ChartFragment(), NoInternetFragment())
+        replaceFragment(CartFragment(), NoInternetFragment(), "Cart")
 
         binding.bottomNavigationView.menu.findItem(R.id.bottom_nav_cart).isChecked = true
 
         binding.bottomNavigationView.setOnItemSelectedListener {
             when(it.itemId){
                 R.id.bottom_nav_chart -> {
-                    replaceFragment(ChartFragment(), NoInternetFragment())
+                    replaceFragment(ChartFragment(), NoInternetFragment(), "Chart")
                 }
                 R.id.bottom_nav_scan -> {
-                    replaceFragment(ScanFragment(), NoInternetFragment())
+                    replaceFragment(ScanFragment(), NoInternetFragment(), "Scan")
                 }
                 R.id.bottom_nav_cart -> {
-                    replaceFragment(CartFragment(), NoInternetFragment())
+                    replaceFragment(CartFragment(), NoInternetFragment(),"Cart")
                 }
                 R.id.bottom_nav_twibbon -> {
-                    replaceFragment(TwibbonFragment(), NoInternetFragment())
+                    replaceFragment(TwibbonFragment(), NoInternetFragment(),"Twibbon")
                 }
                 R.id.bottom_nav_settings -> {
-                    replaceFragment(SettingsFragment(), NoInternetFragment())
+                    replaceFragment(SettingsFragment(), NoInternetFragment(),"Settings")
                 }
 
                 else -> {
@@ -120,7 +157,7 @@ class MainActivity : AppCompatActivity() {
         dialog.show()
     }
 
-    private fun replaceFragment(fragment: Fragment, noInternetFragment: Fragment){
+    private fun replaceFragment(fragment: Fragment, noInternetFragment: Fragment, headerTitle : String){
         val fragmentManager = supportFragmentManager
         val fragmentTransaction = fragmentManager.beginTransaction()
         if (this.isNetworkConnected(this)){
@@ -129,6 +166,7 @@ class MainActivity : AppCompatActivity() {
             showNoInternetDialog(this)
             fragmentTransaction.replace(R.id.main_frame_layout,noInternetFragment)
         }
+        setTitle(headerTitle)
         fragmentTransaction.commit()
     }
 }
\ No newline at end of file
diff --git a/app/src/main/java/com/example/bondoman/models/Transaction.kt b/app/src/main/java/com/example/bondoman/models/Transaction.kt
index 2293041b3c1c5d349baa80f0929ea1e85d1def0f..f6f51a725a1356c2cf3d2f461d81fa4c157c2d1c 100644
--- a/app/src/main/java/com/example/bondoman/models/Transaction.kt
+++ b/app/src/main/java/com/example/bondoman/models/Transaction.kt
@@ -2,18 +2,28 @@ package com.example.bondoman.models
 
 import android.location.Location
 import androidx.room.*
+import java.math.BigDecimal
+import java.time.LocalDate
 
 @Entity(
     tableName = "transaction"
 )
 data class Transaction(
-    @PrimaryKey val id : String,
+    @PrimaryKey(autoGenerate = true)
+    val id : Int = 0,
     val judul: String,
-    val nominal: Float,
+    val nominal: BigDecimal,
     val kategori: Category,
     val lokasi: Location,
+    val tanggal: LocalDate
 ){
     enum class Category {
         PEMBELIAN, PENJUALAN
     }
 }
+
+data class TransactionStats(
+    val kategori: Transaction.Category,
+    val count: Int,
+    val totalNominal: Float
+)
diff --git a/app/src/main/java/com/example/bondoman/models/TransactionViewModel.kt b/app/src/main/java/com/example/bondoman/models/TransactionViewModel.kt
new file mode 100644
index 0000000000000000000000000000000000000000..e0164ebabfabc1ee3eeec28be2caea9a0f2ea32c
--- /dev/null
+++ b/app/src/main/java/com/example/bondoman/models/TransactionViewModel.kt
@@ -0,0 +1,122 @@
+package com.example.bondoman.models
+
+import android.location.Location
+import android.os.Bundle
+import androidx.lifecycle.AbstractSavedStateViewModelFactory
+import androidx.lifecycle.SavedStateHandle
+import androidx.lifecycle.ViewModel
+import androidx.lifecycle.ViewModelProvider
+import androidx.lifecycle.ViewModelProvider.AndroidViewModelFactory.Companion.APPLICATION_KEY
+import androidx.lifecycle.createSavedStateHandle
+import androidx.lifecycle.viewModelScope
+import androidx.lifecycle.viewmodel.CreationExtras
+import com.example.bondoman.models.Transaction.Category
+import com.example.bondoman.room.TransactionDao
+import com.example.bondoman.services.TransactionEvent
+import com.example.bondoman.services.TransactionState
+import com.google.android.material.search.SearchView.TransitionState
+import kotlinx.coroutines.flow.Flow
+import kotlinx.coroutines.flow.MutableStateFlow
+import kotlinx.coroutines.flow.SharingStarted
+import kotlinx.coroutines.flow.stateIn
+import kotlinx.coroutines.flow.update
+import kotlinx.coroutines.launch
+import java.math.BigDecimal
+import java.time.LocalDate
+import androidx.lifecycle.createSavedStateHandle
+import androidx.savedstate.SavedStateRegistryOwner
+import com.example.bondoman.MainActivity
+
+class TransactionViewModel(private  val dao : TransactionDao) : ViewModel() {
+
+
+    private val _state = MutableStateFlow(TransactionState())
+    private val _transactions = MutableStateFlow(dao.observeAll() )
+
+    val state = _transactions.stateIn(viewModelScope, SharingStarted.WhileSubscribed(5000), TransactionState())
+
+
+
+
+    fun _onEvent(event : TransactionEvent){
+        when(event){
+            TransactionEvent.SaveTransaction -> {
+                val judul = _state.value.judul
+                val nominal = _state.value.nominal
+                val kategori = _state.value.kategori
+                val tanggal = _state.value.tanggal
+                val lokasi = _state.value.lokasi
+
+                if(judul.isBlank()) { return }
+
+                val transaction = Transaction(
+                    judul = judul,
+                    nominal = nominal,
+                    kategori = kategori,
+                    tanggal = tanggal,
+                    lokasi = lokasi
+                )
+                viewModelScope.launch {
+                    dao.upsert(transaction)
+                }
+
+                _state.update {
+                    it.copy(
+                        judul = "",
+                        kategori = Category.PEMBELIAN,
+                        nominal = BigDecimal(0),
+                        lokasi = Location(""),
+                        tanggal = LocalDate.now(),
+                    )
+                }
+            }
+            is TransactionEvent.SetJudul -> {
+                _state.update {
+                    it.copy(
+                        judul = event.Judul
+                    )
+                }
+            }
+            is TransactionEvent.SetKategori -> {
+                _state.update {
+                    it.copy(
+                        kategori = event.Kategori
+                    )
+                }
+            }
+            is TransactionEvent.SetLokasi -> {
+                _state.update {
+                    it.copy(
+                        lokasi = event.Lokasi
+                    )
+                }
+            }
+            is TransactionEvent.SetNominal -> {
+                _state.update {
+                    it.copy(
+                        nominal = event.Nominal
+                    )
+                }
+            }
+        }
+    }
+
+    // Define ViewModel factory in a companion object
+    companion object {
+        fun provideFactory(
+            dao: TransactionDao,
+            owner: SavedStateRegistryOwner,
+            defaultArgs: Bundle? = null,
+        ): AbstractSavedStateViewModelFactory =
+            object : AbstractSavedStateViewModelFactory(owner, defaultArgs) {
+                @Suppress("UNCHECKED_CAST")
+                override fun <T : ViewModel> create(
+                    key: String,
+                    modelClass: Class<T>,
+                    handle: SavedStateHandle
+                ): T {
+                    return TransactionViewModel(dao) as T
+                }
+            }
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/bondoman/room/BondomanDatabase.kt b/app/src/main/java/com/example/bondoman/room/BondomanDatabase.kt
index 766b50070e7dbb2c74fc6d3811a76ef130f3c5c3..758c5f73d775853553ea67b2bb4bcbaa1a7a8960 100644
--- a/app/src/main/java/com/example/bondoman/room/BondomanDatabase.kt
+++ b/app/src/main/java/com/example/bondoman/room/BondomanDatabase.kt
@@ -1,11 +1,15 @@
 package com.example.bondoman.room
 
+import com.example.bondoman.models.Transaction
 import android.content.Context
 import androidx.room.*
 
-@Database(entities = [Transaction::class], version = 1, exportSchema = false)
+@Database(entities = [Transaction::class],
+    version = 1,
+    exportSchema = false)
+@TypeConverters(Converters::class)
 abstract class BondomanDatabase : RoomDatabase(){
-    abstract fun transactionDao() : TransactionDao
+    abstract val dao : TransactionDao
     companion object {
         @Volatile
         private var INSTANCE: BondomanDatabase? = null
diff --git a/app/src/main/java/com/example/bondoman/room/Converter.kt b/app/src/main/java/com/example/bondoman/room/Converter.kt
new file mode 100644
index 0000000000000000000000000000000000000000..332acbc8c064631abb2d839703ef000fd04fe659
--- /dev/null
+++ b/app/src/main/java/com/example/bondoman/room/Converter.kt
@@ -0,0 +1,41 @@
+package com.example.bondoman.room
+
+import android.location.Location
+import androidx.room.TypeConverter
+import com.google.gson.Gson
+import java.math.BigDecimal
+import java.time.LocalDate
+
+class Converters {
+    private val gson = Gson()
+
+    @TypeConverter
+    fun fromBigDecimal(value: BigDecimal): String {
+        return value.toString()
+    }
+
+    @TypeConverter
+    fun toBigDecimal(value: String): BigDecimal {
+        return BigDecimal(value)
+    }
+    @TypeConverter
+    fun fromLocation(location: Location): String {
+        return gson.toJson(location)
+    }
+
+    @TypeConverter
+    fun toLocation(json: String): Location {
+        return gson.fromJson(json, Location::class.java)
+    }
+
+    @TypeConverter
+    fun fromLocalDate(localDate: LocalDate): String {
+        return localDate.toString()
+    }
+
+    @TypeConverter
+    fun toLocalDate(dateString: String): LocalDate {
+        return LocalDate.parse(dateString)
+    }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/bondoman/room/TransactionDao.kt b/app/src/main/java/com/example/bondoman/room/TransactionDao.kt
index 73ffed4253acd310137b84e51f3221195bae2a71..187f1b68133c119c2f4e72b8dadfb1f1bfb23ad3 100644
--- a/app/src/main/java/com/example/bondoman/room/TransactionDao.kt
+++ b/app/src/main/java/com/example/bondoman/room/TransactionDao.kt
@@ -2,11 +2,13 @@ package com.example.bondoman.room
 
 import android.location.Location
 import androidx.room.*
+import com.example.bondoman.models.TransactionStats
 import kotlinx.coroutines.flow.Flow
+import com.example.bondoman.models.Transaction
 
 @Dao
 interface TransactionDao {
-    @Query("SELECT * FROM `transaction`")
+    @Query("SELECT * FROM `transaction` ORDER BY tanggal DESC")
     fun observeAll(): Flow<List<Transaction>>
 
     @Upsert
@@ -26,4 +28,8 @@ interface TransactionDao {
 
     @Query("DELETE FROM `transaction`")
     suspend fun deleteAll()
+
+    @Query("SELECT kategori, COUNT(id) AS count, SUM(nominal) AS totalNominal FROM `transaction` GROUP BY kategori")
+    fun getTransactionStats(): Flow<List<TransactionStats>>
+
 }
\ No newline at end of file
diff --git a/app/src/main/java/com/example/bondoman/services/ApiService.kt b/app/src/main/java/com/example/bondoman/services/ApiService.kt
index 1d3ea96da2e6d180b01f61817044c38dd08c6ac5..3b761c1186aa3d0bac8c19478737ca379bc77782 100644
--- a/app/src/main/java/com/example/bondoman/services/ApiService.kt
+++ b/app/src/main/java/com/example/bondoman/services/ApiService.kt
@@ -1,4 +1,4 @@
-package com.example.bondoman.services
+package com.example.bondoman.service
 
 
 import com.example.bondoman.models.ItemsResponse
diff --git a/app/src/main/java/com/example/bondoman/services/LocationDefault.kt b/app/src/main/java/com/example/bondoman/services/LocationDefault.kt
new file mode 100644
index 0000000000000000000000000000000000000000..e3397536ad08f459647c63c71b2baad7ba93f924
--- /dev/null
+++ b/app/src/main/java/com/example/bondoman/services/LocationDefault.kt
@@ -0,0 +1,4 @@
+package com.example.bondoman.services
+
+class LocationDefault {
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/bondoman/services/RetrofitInstance.kt b/app/src/main/java/com/example/bondoman/services/RetrofitInstance.kt
index 8e399979ab1ae0e36bf69f154c29aac3ba1cb790..f7abcc7a544270da5c3eca0f5dfd5f0b373c12a9 100644
--- a/app/src/main/java/com/example/bondoman/services/RetrofitInstance.kt
+++ b/app/src/main/java/com/example/bondoman/services/RetrofitInstance.kt
@@ -2,6 +2,7 @@ package com.example.bondoman.services
 
 import android.content.Context
 import android.content.SharedPreferences
+import com.example.bondoman.service.ApiService
 import okhttp3.Interceptor
 import okhttp3.OkHttpClient
 import okhttp3.Request
diff --git a/app/src/main/java/com/example/bondoman/services/TransactionEvent.kt b/app/src/main/java/com/example/bondoman/services/TransactionEvent.kt
new file mode 100644
index 0000000000000000000000000000000000000000..36667f5f5d156a8462eac46568e683cc16c4ca99
--- /dev/null
+++ b/app/src/main/java/com/example/bondoman/services/TransactionEvent.kt
@@ -0,0 +1,13 @@
+package com.example.bondoman.services
+
+import android.location.Location
+import com.example.bondoman.models.Transaction.Category
+import java.math.BigDecimal
+
+sealed interface TransactionEvent {
+    object SaveTransaction : TransactionEvent
+    data class SetJudul(val Judul: String) : TransactionEvent
+    data class SetNominal(val Nominal: BigDecimal) : TransactionEvent
+    data class SetKategori(val Kategori: Category) : TransactionEvent
+    data class SetLokasi(val Lokasi: Location) : TransactionEvent
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/bondoman/services/TransactionState.kt b/app/src/main/java/com/example/bondoman/services/TransactionState.kt
new file mode 100644
index 0000000000000000000000000000000000000000..df4080c776c23b968d3c333508331314167395cb
--- /dev/null
+++ b/app/src/main/java/com/example/bondoman/services/TransactionState.kt
@@ -0,0 +1,15 @@
+package com.example.bondoman.services
+import android.location.Location
+import com.example.bondoman.models.Transaction
+import com.example.bondoman.models.Transaction.Category
+import java.math.BigDecimal
+import java.time.LocalDate
+
+data class TransactionState (
+    val transactions : List<Transaction> = emptyList(),
+    val judul: String = "",
+    val nominal: BigDecimal = BigDecimal(0),
+    val kategori: Category = Category.PEMBELIAN,
+    val lokasi: Location =  Location(""),
+    val tanggal: LocalDate = LocalDate.now()
+)
\ No newline at end of file
diff --git a/app/src/main/java/com/example/bondoman/ui/cart/CartAdapter.kt b/app/src/main/java/com/example/bondoman/ui/cart/CartAdapter.kt
new file mode 100644
index 0000000000000000000000000000000000000000..2936f87ec8f46a1788541872e77cf2dd3915d661
--- /dev/null
+++ b/app/src/main/java/com/example/bondoman/ui/cart/CartAdapter.kt
@@ -0,0 +1,46 @@
+package com.example.bondoman.ui.cart
+
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.TextView
+import androidx.recyclerview.widget.RecyclerView
+import com.example.bondoman.R
+import com.example.bondoman.models.Transaction
+
+class CartAdapter(
+    private val listData : List<Transaction>
+) : RecyclerView.Adapter<CartAdapter.ViewHolder>(){
+    class ViewHolder(item: View) : RecyclerView.ViewHolder(item) {
+        fun bind(data : Transaction){
+            itemView.apply {
+                val date = itemView.findViewById<TextView>(R.id.textDate)
+                val title = itemView.findViewById<TextView>(R.id.textTitle)
+                val nominal = itemView.findViewById<TextView>(R.id.textNominal)
+                val category = itemView.findViewById<TextView>(R.id.textCategory)
+                val location = itemView.findViewById<TextView>(R.id.textLocation)
+
+                date.text = data.tanggal.toString();
+                title.text = data.judul;
+                nominal.text = data.nominal.toString()
+                category.text = data.kategori.toString()
+                location.text = "${data.lokasi.longitude} ${data.lokasi.latitude}"
+            }
+        }
+    }
+
+    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CartAdapter.ViewHolder {
+        val layoutInflanter = LayoutInflater.from(parent.context)
+        val view = layoutInflanter.inflate(R.layout.item_chart, parent, false)
+        return ViewHolder(view)
+    }
+
+    override fun onBindViewHolder(holder: CartAdapter.ViewHolder, position: Int) {
+        holder.bind(listData[position])
+    }
+
+    override fun getItemCount(): Int {
+        return listData.size
+    }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/bondoman/ui/cart/CartFragment.kt b/app/src/main/java/com/example/bondoman/ui/cart/CartFragment.kt
index 510dbacc67a555bc3e297b14240667825509bcc4..c46e2a10589b17c307bf66acd287947d7cafcd5d 100644
--- a/app/src/main/java/com/example/bondoman/ui/cart/CartFragment.kt
+++ b/app/src/main/java/com/example/bondoman/ui/cart/CartFragment.kt
@@ -1,16 +1,74 @@
 package com.example.bondoman.ui.cart
 
+import android.Manifest
+import android.content.pm.PackageManager
+import android.location.Location
 import android.os.Bundle
-import androidx.fragment.app.Fragment
+import android.util.Log
 import android.view.LayoutInflater
 import android.view.View
 import android.view.ViewGroup
+import androidx.core.app.ActivityCompat
+import androidx.fragment.app.Fragment
+import androidx.fragment.app.activityViewModels
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.RecyclerView
 import com.example.bondoman.R
+import com.example.bondoman.models.Transaction
+import com.example.bondoman.models.TransactionViewModel
+import com.google.android.gms.location.FusedLocationProviderClient
+import com.google.android.gms.location.LocationServices
+import java.math.BigDecimal
+import java.time.LocalDate
 
-class CartFragment : Fragment() {
 
+private const val ARG_PARAM1 = "param1"
+private const val ARG_PARAM2 = "param2"
+/**
+ * A simple [Fragment] subclass.
+ * Use the [CartFragment.newInstance] factory method to
+ * create an instance of this fragment.
+ */
+class CartFragment : Fragment() {
+    // TODO: Rename and change types of parameters
+    private var param1: String? = null
+    private var param2: String? = null
+    private var transactions : ArrayList<Transaction> = ArrayList()
+    private val viewModel by activityViewModels<TransactionViewModel>()
+    private lateinit var fusedLocationClient: FusedLocationProviderClient
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
+        arguments?.let {
+            param1 = it.getString(ARG_PARAM1)
+            param2 = it.getString(ARG_PARAM2)
+        }
+    }
+
+    fun initDummy() {
+        val local = Location("")
+        Log.d(
+            "DEBUG LOKASI", "Current location is \n" + "lat : ${local.latitude}\n" +
+                    "long : ${local.longitude}\n" + "fetched at ${System.currentTimeMillis()}"
+        )
+        transactions.add(
+            Transaction(
+                1, "Warteg", BigDecimal(10000), Transaction.Category.PEMBELIAN, local,
+                LocalDate.now()
+            )
+        )
+        transactions.add(
+            Transaction(
+                2, "Warteg123", BigDecimal(10000), Transaction.Category.PEMBELIAN, local,
+                LocalDate.now()
+            )
+        )
+        transactions.add(
+            Transaction(
+                3, "Warteg456", BigDecimal(10000), Transaction.Category.PEMBELIAN, local,
+                LocalDate.now()
+            )
+        )
+//        d("DEBUG",viewModel.state.value.toString())
     }
 
     override fun onCreateView(
@@ -20,4 +78,36 @@ class CartFragment : Fragment() {
         // Inflate the layout for this fragment
         return inflater.inflate(R.layout.fragment_cart, container, false)
     }
+
+    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+        super.onViewCreated(view, savedInstanceState)
+        initDummy()
+        var adapter = CartAdapter(transactions)
+        var layoutManager : RecyclerView.LayoutManager = LinearLayoutManager(context)
+        val rclist = view.findViewById<RecyclerView>(R.id.rclist)
+        rclist.layoutManager = layoutManager
+        rclist.adapter = adapter
+
+    }
+
+
+    companion object {
+        /**
+         * Use this factory method to create a new instance of
+         * this fragment using the provided parameters.
+         *
+         * @param param1 Parameter 1.
+         * @param param2 Parameter 2.
+         * @return A new instance of fragment CartFragment.
+         */
+        // TODO: Rename and change types and number of parameters
+        @JvmStatic
+        fun newInstance(param1: String, param2: String) =
+            CartFragment().apply {
+                arguments = Bundle().apply {
+                    putString(ARG_PARAM1, param1)
+                    putString(ARG_PARAM2, param2)
+                }
+            }
+    }
 }
\ No newline at end of file
diff --git a/app/src/main/java/com/example/bondoman/ui/chart/ChartFragment.kt b/app/src/main/java/com/example/bondoman/ui/chart/ChartFragment.kt
index 241d291e9ab9ea8596fc047eec00753edd5ee8be..714627195eb4916f53ab8ad5e382110d790f7f36 100644
--- a/app/src/main/java/com/example/bondoman/ui/chart/ChartFragment.kt
+++ b/app/src/main/java/com/example/bondoman/ui/chart/ChartFragment.kt
@@ -1,33 +1,27 @@
 package com.example.bondoman.ui.chart
 
+import android.graphics.Color
 import android.os.Bundle
 import androidx.fragment.app.Fragment
 import android.view.LayoutInflater
 import android.view.View
 import android.view.ViewGroup
 import com.example.bondoman.R
+import com.example.bondoman.databinding.FragmentChartBinding
+import com.example.bondoman.databinding.FragmentLoginBinding
+import com.github.mikephil.charting.charts.PieChart
+import com.github.mikephil.charting.data.PieData
+import com.github.mikephil.charting.data.PieDataSet
+import com.github.mikephil.charting.data.PieEntry
+import com.github.mikephil.charting.utils.ColorTemplate
 
-// TODO: Rename parameter arguments, choose names that match
-// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
-private const val ARG_PARAM1 = "param1"
-private const val ARG_PARAM2 = "param2"
-
-/**
- * A simple [Fragment] subclass.
- * Use the [ChartFragment.newInstance] factory method to
- * create an instance of this fragment.
- */
 class ChartFragment : Fragment() {
-    // TODO: Rename and change types of parameters
-    private var param1: String? = null
-    private var param2: String? = null
+
+    private lateinit var binding: FragmentChartBinding
+    lateinit var pieChart: PieChart
 
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
-        arguments?.let {
-            param1 = it.getString(ARG_PARAM1)
-            param2 = it.getString(ARG_PARAM2)
-        }
     }
 
     override fun onCreateView(
@@ -38,23 +32,32 @@ class ChartFragment : Fragment() {
         return inflater.inflate(R.layout.fragment_chart, container, false)
     }
 
-    companion object {
-        /**
-         * Use this factory method to create a new instance of
-         * this fragment using the provided parameters.
-         *
-         * @param param1 Parameter 1.
-         * @param param2 Parameter 2.
-         * @return A new instance of fragment ChartFragment.
-         */
-        // TODO: Rename and change types and number of parameters
-        @JvmStatic
-        fun newInstance(param1: String, param2: String) =
-            ChartFragment().apply {
-                arguments = Bundle().apply {
-                    putString(ARG_PARAM1, param1)
-                    putString(ARG_PARAM2, param2)
-                }
-            }
+    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+        super.onViewCreated(view, savedInstanceState)
+
+        binding = FragmentChartBinding.bind(view)
+
+        var pieChart = binding.chart
+
+        val list:ArrayList<PieEntry> = ArrayList()
+
+        list.add(PieEntry(30f,"Pembelian"))
+        list.add(PieEntry(50f,"Penjualan"))
+
+        val pieDataSet= PieDataSet(list,"Chart")
+
+        pieDataSet.setColors(ColorTemplate.MATERIAL_COLORS,255)
+        pieDataSet.valueTextColor= Color.BLACK
+        pieDataSet.valueTextSize=15f
+
+        val pieData= PieData(pieDataSet)
+
+        pieChart.data= pieData
+
+        pieChart.description.text= "Pie Chart"
+
+        pieChart.centerText="List"
+
+        pieChart.animateY(2000)
     }
 }
\ No newline at end of file
diff --git a/app/src/main/java/com/example/bondoman/ui/login/LoginFragment.kt b/app/src/main/java/com/example/bondoman/ui/login/LoginFragment.kt
index 89176e507e22c9df9e8f90ca11c73571110a1fc7..b4bebcc4e98708ebf8d7398c03ca0d76203effec 100644
--- a/app/src/main/java/com/example/bondoman/ui/login/LoginFragment.kt
+++ b/app/src/main/java/com/example/bondoman/ui/login/LoginFragment.kt
@@ -13,7 +13,6 @@ import com.example.bondoman.R
 import com.example.bondoman.databinding.FragmentLoginBinding
 import com.example.bondoman.models.LoginRequest
 import com.example.bondoman.services.RetrofitClient
-import com.example.bondoman.services.ApiService
 import kotlinx.coroutines.CoroutineScope
 import kotlinx.coroutines.withContext
 import retrofit2.HttpException
@@ -103,7 +102,7 @@ class LoginFragment : Fragment() {
          *
          * @param param1 Parameter 1.
          * @param param2 Parameter 2.
-         * @return A new instance of fragment ChartFragment.
+         * @return A new instance of fragment CartFragment.
          */
         // TODO: Rename and change types and number of parameters
         @JvmStatic
diff --git a/app/src/main/java/com/example/bondoman/ui/nointernet/NoInternetFragment.kt b/app/src/main/java/com/example/bondoman/ui/nointernet/NoInternetFragment.kt
index c4a351b337f43bdd0ecacde4f72cb5bbdbc88166..8de5a3e2e64fa78b473d04e37cbf4351abefe46e 100644
--- a/app/src/main/java/com/example/bondoman/ui/nointernet/NoInternetFragment.kt
+++ b/app/src/main/java/com/example/bondoman/ui/nointernet/NoInternetFragment.kt
@@ -45,7 +45,7 @@ class NoInternetFragment : Fragment() {
          *
          * @param param1 Parameter 1.
          * @param param2 Parameter 2.
-         * @return A new instance of fragment ChartFragment.
+         * @return A new instance of fragment CartFragment.
          */
         // TODO: Rename and change types and number of parameters
         @JvmStatic
diff --git a/app/src/main/java/com/example/bondoman/ui/scan/ItemAdapter.kt b/app/src/main/java/com/example/bondoman/ui/scan/ItemAdapter.kt
index b6fece3755b7d3c8bab1b1b336d140e2fbfed693..c57c90ed839b0e1aa58017dc1e1f4749162408fa 100644
--- a/app/src/main/java/com/example/bondoman/ui/scan/ItemAdapter.kt
+++ b/app/src/main/java/com/example/bondoman/ui/scan/ItemAdapter.kt
@@ -13,14 +13,14 @@ class ItemAdapter(private val items: List<Item>?) :
     RecyclerView.Adapter<ItemAdapter.ItemViewHolder>() {
 
     class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
-        val itemName: TextView = itemView.findViewById(R.id.itemName)
-        val itemQty: TextView = itemView.findViewById(R.id.itemQty)
-        val itemPrice: TextView = itemView.findViewById(R.id.itemPrice)
+        val itemName: TextView = itemView.findViewById<TextView>(R.id.textTitle)
+        val itemQty: TextView = itemView.findViewById<TextView>(R.id.textNominal)
+        val itemPrice: TextView = itemView.findViewById(R.id.textNominal)
     }
 
     override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder {
         val itemView =
-            LayoutInflater.from(parent.context).inflate(R.layout.item_list, parent, false)
+            LayoutInflater.from(parent.context).inflate(R.layout.item_chart, parent, false)
         return ItemViewHolder(itemView)
     }
 
diff --git a/app/src/main/java/com/example/bondoman/ui/settings/SettingsFragment.kt b/app/src/main/java/com/example/bondoman/ui/settings/SettingsFragment.kt
index 6656b403d22167210abfee06772b4d5a1e39e1d7..86d783020f0a2b1d5938e5247cb54c81545717f7 100644
--- a/app/src/main/java/com/example/bondoman/ui/settings/SettingsFragment.kt
+++ b/app/src/main/java/com/example/bondoman/ui/settings/SettingsFragment.kt
@@ -1,11 +1,17 @@
 package com.example.bondoman.ui.settings
 
+import android.content.Intent
 import android.os.Bundle
 import androidx.fragment.app.Fragment
 import android.view.LayoutInflater
 import android.view.View
 import android.view.ViewGroup
+import android.widget.Button
+import android.widget.Toast
+import com.example.bondoman.MainActivity
 import com.example.bondoman.R
+import com.example.bondoman.databinding.FragmentChartBinding
+import com.example.bondoman.databinding.FragmentSettingsBinding
 
 // TODO: Rename parameter arguments, choose names that match
 // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
@@ -18,16 +24,13 @@ private const val ARG_PARAM2 = "param2"
  * create an instance of this fragment.
  */
 class SettingsFragment : Fragment() {
-    // TODO: Rename and change types of parameters
-    private var param1: String? = null
-    private var param2: String? = null
+    private lateinit var binding: FragmentSettingsBinding
+    private lateinit var saveButton: Button
+    private lateinit var sendButton: Button
+    private lateinit var logoutButton: Button
 
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
-        arguments?.let {
-            param1 = it.getString(ARG_PARAM1)
-            param2 = it.getString(ARG_PARAM2)
-        }
     }
 
     override fun onCreateView(
@@ -38,23 +41,46 @@ class SettingsFragment : Fragment() {
         return inflater.inflate(R.layout.fragment_settings, container, false)
     }
 
-    companion object {
-        /**
-         * Use this factory method to create a new instance of
-         * this fragment using the provided parameters.
-         *
-         * @param param1 Parameter 1.
-         * @param param2 Parameter 2.
-         * @return A new instance of fragment SettingsFragment.
-         */
-        // TODO: Rename and change types and number of parameters
-        @JvmStatic
-        fun newInstance(param1: String, param2: String) =
-            SettingsFragment().apply {
-                arguments = Bundle().apply {
-                    putString(ARG_PARAM1, param1)
-                    putString(ARG_PARAM2, param2)
-                }
-            }
+    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+        super.onViewCreated(view, savedInstanceState)
+
+        binding = FragmentSettingsBinding.bind(view)
+
+        saveButton = binding.settingsSaveButton
+        sendButton = binding.settingSendButton
+        logoutButton = binding.settingsLogoutButton
+
+        saveButton.setOnClickListener {
+            Toast.makeText(requireContext(), "save",Toast.LENGTH_SHORT).show()
+        }
+
+        sendButton.setOnClickListener {
+            // Create an Intent with ACTION_SEND to send an email
+            val emailIntent = Intent(Intent.ACTION_SEND)
+
+            // Set the type to 'message/rfc822' MIME type, which is the standard MIME type for email messages
+            emailIntent.type = "message/rfc822"
+
+            // Set recipients (to whom you want to send the email)
+            emailIntent.putExtra(Intent.EXTRA_EMAIL, arrayOf("13521106@std.stei.itb.ac.id"))
+
+            // Set subject of the email
+            emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Transaction Data")
+
+            // Set body of the email
+            emailIntent.putExtra(Intent.EXTRA_TEXT, "This is your data transaction")
+
+            // Start the activity with the emailIntent
+            startActivity(Intent.createChooser(emailIntent, "Send Email"))
+
+            // Display a toast indicating the action
+            Toast.makeText(requireContext(), "Sending email...", Toast.LENGTH_SHORT).show()
+        }
+
+        logoutButton.setOnClickListener {
+            Toast.makeText(requireContext(), "logout",Toast.LENGTH_SHORT).show()
+        }
+
     }
+
 }
\ No newline at end of file
diff --git a/app/src/main/java/com/example/bondoman/ui/splash/SplashScreenFragment.kt b/app/src/main/java/com/example/bondoman/ui/splash/SplashScreenFragment.kt
index 54f5a3bcf68c1e6ec1a3d08b51e659e473aaa43d..5ca143876129af546612bfeb69389ac12f676904 100644
--- a/app/src/main/java/com/example/bondoman/ui/splash/SplashScreenFragment.kt
+++ b/app/src/main/java/com/example/bondoman/ui/splash/SplashScreenFragment.kt
@@ -45,7 +45,7 @@ class SplashScreenFragment : Fragment() {
          *
          * @param param1 Parameter 1.
          * @param param2 Parameter 2.
-         * @return A new instance of fragment ChartFragment.
+         * @return A new instance of fragment CartFragment.
          */
         // TODO: Rename and change types and number of parameters
         @JvmStatic
diff --git a/app/src/main/res/drawable/take_photo_button.xml b/app/src/main/res/drawable/take_photo_button.xml
index 15594d98b42e7458206c874fe3397963b65198ad..f8c52371980679bd6018e065e2031de712dec409 100644
--- a/app/src/main/res/drawable/take_photo_button.xml
+++ b/app/src/main/res/drawable/take_photo_button.xml
@@ -1,4 +1,4 @@
 <shape xmlns:android="http://schemas.android.com/apk/res/android"
     android:shape="oval">
-    <solid android:color="@color/red" />
+    <solid android:color="@color/red.500" />
 </shape>
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index fc48df1bc0b4d8dde28d0635e50f384ab1aa7183..0eef30b51ebbe9cab671e0e5890096e72e7689c7 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -7,8 +7,6 @@
     android:id="@+id/main_frame_layout"
     tools:context=".MainActivity">
 
-
-
     <com.google.android.material.bottomnavigation.BottomNavigationView
         android:id="@+id/bottomNavigationView"
         android:layout_width="0dp"
diff --git a/app/src/main/res/layout/fragment_cart.xml b/app/src/main/res/layout/fragment_cart.xml
index 16550b047863bd6b20baa0d19ae7e9091f12fcca..aa56e30c9db13a3a6684b4a65beb1e800d1c93db 100644
--- a/app/src/main/res/layout/fragment_cart.xml
+++ b/app/src/main/res/layout/fragment_cart.xml
@@ -5,11 +5,13 @@
     android:layout_height="match_parent"
     tools:context=".ui.cart.CartFragment">
 
-    <TextView
+    <!-- TODO: Update blank fragment layout -->
+    <androidx.recyclerview.widget.RecyclerView
+        android:id="@+id/rclist"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
-        android:gravity="center"
-        android:text="Cart Fragment"
-        android:textSize="26sp" />
+        tools:listitem="@layout/item_chart"
+        tools:itemCount="1"
 
+        />
 </FrameLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_chart.xml b/app/src/main/res/layout/fragment_chart.xml
index 49d4584d84cffb60b6c297c3c53ddb2e04cde384..c4f4655b1165d7a8f6072cdc39202b15658fbeb9 100644
--- a/app/src/main/res/layout/fragment_chart.xml
+++ b/app/src/main/res/layout/fragment_chart.xml
@@ -1,17 +1,16 @@
 <?xml version="1.0" encoding="utf-8"?>
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:tools="http://schemas.android.com/tools"
+    android:id="@+id/ConstraintLayout"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
-    tools:context=".ui.chart.ChartFragment">
+    android:padding="10dp"
+    tools:context=".ui.chart.ChartFragment" >
 
-    <!-- TODO: Update blank fragment layout -->
-    <TextView
+    <com.github.mikephil.charting.charts.PieChart
         android:layout_width="match_parent"
         android:layout_height="match_parent"
-        android:text="Chart Fragment"
-        android:textSize="26sp"
-        android:layout_gravity="center"
-        />
+        android:id="@+id/chart">
 
-</FrameLayout>
\ No newline at end of file
+    </com.github.mikephil.charting.charts.PieChart>
+</androidx.constraintlayout.widget.ConstraintLayout>
diff --git a/app/src/main/res/layout/fragment_settings.xml b/app/src/main/res/layout/fragment_settings.xml
index 4493e46a171c8daf5716b588a78f28b8c70e0c27..f02883c27643546ac18e2533afeaca653675ed4c 100644
--- a/app/src/main/res/layout/fragment_settings.xml
+++ b/app/src/main/res/layout/fragment_settings.xml
@@ -1,16 +1,47 @@
 <?xml version="1.0" encoding="utf-8"?>
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<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:id="@+id/ConstraintLayout"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
-    tools:context=".ui.settings.SettingsFragment">
+    android:padding="10dp"
+    tools:context=".ui.settings.SettingsFragment" >
 
-    <!-- TODO: Update blank fragment layout -->
-    <TextView
-        android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:text="Settings Fragment"
-        android:textSize="26sp"
-        android:layout_gravity="center" />
+    <Button
+        android:id="@+id/settingsSaveButton"
+        android:layout_width="0dp"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="4dp"
+        android:backgroundTint="@color/green.500"
+        android:text="@string/settings_save_button_title"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintHorizontal_bias="1.0"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent" />
 
-</FrameLayout>
\ No newline at end of file
+    <Button
+        android:id="@+id/settingSendButton"
+        android:layout_width="0dp"
+        android:layout_height="wrap_content"
+        android:backgroundTint="@color/green.500"
+        android:text="@string/settings_send_button_title"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toBottomOf="@+id/settingsSaveButton" />
+
+    <Button
+        android:id="@+id/settingsLogoutButton"
+        android:layout_width="0dp"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="28dp"
+        android:backgroundTint="@color/red.200"
+        android:text="@string/settings_logout_button_title"
+        android:textColor="@color/white"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintHorizontal_bias="1.0"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toBottomOf="@+id/settingSendButton" />
+
+
+</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_chart.xml b/app/src/main/res/layout/item_chart.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c37887b62c2ff5a9f491149dd1bc20edef2888cd
--- /dev/null
+++ b/app/src/main/res/layout/item_chart.xml
@@ -0,0 +1,61 @@
+<?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="wrap_content">
+
+    <TextView
+        android:id="@+id/textDate"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="28dp"
+        android:layout_marginTop="24dp"
+        android:text="20/03/2023"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent" />
+
+    <TextView
+        android:id="@+id/textTitle"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="28dp"
+        android:layout_marginTop="16dp"
+        android:text="Warteg"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toBottomOf="@+id/textDate" />
+
+    <TextView
+        android:id="@+id/textNominal"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="28dp"
+        android:layout_marginTop="16dp"
+        android:layout_marginBottom="16dp"
+        android:text="IDR15000"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toBottomOf="@+id/textTitle"
+        app:layout_constraintVertical_bias="0.0" />
+
+    <TextView
+        android:id="@+id/textCategory"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="24dp"
+        android:layout_marginEnd="28dp"
+        android:text="Pembelian"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintTop_toTopOf="parent" />
+
+    <TextView
+        android:id="@+id/textLocation"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="32dp"
+        android:layout_marginEnd="28dp"
+        android:text="Bandung, Dago"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintTop_toBottomOf="@+id/textCategory" />
+
+</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_list.xml b/app/src/main/res/layout/item_list.xml
deleted file mode 100644
index 8b3fffc2da1c8fb9fe1226052856cbfb93549d80..0000000000000000000000000000000000000000
--- a/app/src/main/res/layout/item_list.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="wrap_content"
-    android:orientation="vertical"
-    android:paddingStart="16dp"
-    android:paddingEnd="16dp"
-    android:paddingTop="8dp"
-    android:paddingBottom="8dp"
-    android:layout_marginStart="8dp"
-    android:layout_marginEnd="8dp"
-    android:layout_marginTop="4dp"
-    android:layout_marginBottom="4dp">
-
-    <!-- Your TextViews for item name, quantity, and price -->
-        <TextView
-        android:id="@+id/itemName"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:textSize="18sp"
-        android:textColor="@color/black"/>
-
-        <TextView
-        android:id="@+id/itemQty"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:textSize="14sp"
-        android:textColor="@color/black"/>
-
-        <TextView
-        android:id="@+id/itemPrice"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:textSize="16sp"
-        android:textColor="@color/black"/>
-
-</LinearLayout>
diff --git a/app/src/main/res/values-night/themes.xml b/app/src/main/res/values-night/themes.xml
index 8111560848797c9c2dba96310f97f8d0415f575f..d88d6d50ac6d8cf6039db9b4e672e18a93aafa7d 100644
--- a/app/src/main/res/values-night/themes.xml
+++ b/app/src/main/res/values-night/themes.xml
@@ -1,7 +1,9 @@
 <resources xmlns:tools="http://schemas.android.com/tools">
     <!-- Base application theme. -->
-    <style name="Base.Theme.BondoMan" parent="Theme.Material3.DayNight.NoActionBar">
+    <style name="Base.Theme.BondoMan" parent="Theme.Material3.DayNight">
         <!-- Customize your dark theme here. -->
         <!-- <item name="colorPrimary">@color/my_dark_primary</item> -->
+        <item name="colorPrimary">#4CAF50</item>
+        <item name="android:statusBarColor">?attr/colorPrimary</item>
     </style>
 </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 7a4c95b2fb7a917498376463c34ea6eedc5a3303..08f60c953cbf8e9fc908c3bfa5ddcafcb209a42c 100644
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -2,5 +2,8 @@
 <resources>
     <color name="black">#FF000000</color>
     <color name="white">#FFFFFFFF</color>
-    <color name="red">#FFED1515</color>
+    <color name="green.500">#4CAF50</color>
+    <color name="green.200">#A5D6A7</color>
+    <color name="red.500">#F44336</color>
+    <color name="red.200">#EF9A9A</color>
 </resources>
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 508df8180b0f84fa7228f843499a3f72e049c0e1..ae9dec8a6782bbfb750d001d606f41b7c8580347 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -5,4 +5,7 @@
     <string name="bottom_nav_cart_title">Cart</string>
     <string name="bottom_nav_twibbon_title">Twibbon</string>
     <string name="bottom_nav_settings_title">Settings</string>
+    <string name="settings_save_button_title">Save Transaction</string>
+    <string name="settings_send_button_title">Send Transaction to Email</string>
+    <string name="settings_logout_button_title">Logout</string>
 </resources>
\ No newline at end of file
diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml
index 4f3ed1ef0dab9c06604f9b50bd1015baf4608f0f..1d197d0d446e703725b574cddf255754f9d2e0cb 100644
--- a/app/src/main/res/values/themes.xml
+++ b/app/src/main/res/values/themes.xml
@@ -1,8 +1,12 @@
 <resources xmlns:tools="http://schemas.android.com/tools">
     <!-- Base application theme. -->
-    <style name="Base.Theme.BondoMan" parent="Theme.Material3.DayNight.NoActionBar">
+    <style name="Base.Theme.BondoMan" parent="Theme.Material3.DayNight">
         <!-- Customize your light theme here. -->
         <!-- <item name="colorPrimary">@color/my_light_primary</item> -->
+        <item name="colorPrimary">@color/green.500</item>
+        <item name="colorSecondary">@color/green.200</item>
+        <item name="android:statusBarColor">?attr/colorPrimary</item>
+        <item name="actionBarItemBackground">?attr/colorSecondary</item>
     </style>
 
     <style name="Theme.BondoMan" parent="Base.Theme.BondoMan" />
diff --git a/build.gradle.kts b/build.gradle.kts
index 31ed43cc99341f5b95f5b15fd54f84d14a585002..efefc9f92965c46843951be887e193b0a7c5743c 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -2,4 +2,5 @@
 plugins {
     id("com.android.application") version "8.3.0" apply false
     id("org.jetbrains.kotlin.android") version "1.9.22" apply false
+    id("com.google.devtools.ksp") version "1.9.21-1.0.15" apply false
 }
\ No newline at end of file
diff --git a/settings.gradle.kts b/settings.gradle.kts
index 1151a8a8c6011d230cce7a785c669ead68bf9be8..f321e45123aa3299f55ff577d3437de032b1c43a 100644
--- a/settings.gradle.kts
+++ b/settings.gradle.kts
@@ -10,6 +10,7 @@ dependencyResolutionManagement {
     repositories {
         google()
         mavenCentral()
+        maven(url = "https://jitpack.io")
     }
 }