diff --git a/.idea/deploymentTargetDropDown.xml b/.idea/deploymentTargetDropDown.xml
index 0c0c3383890637b4721df1f49d0b229e55c0f361..a66b819ba559ff9fdfae0152fb801e344d77af1e 100644
--- a/.idea/deploymentTargetDropDown.xml
+++ b/.idea/deploymentTargetDropDown.xml
@@ -3,7 +3,20 @@
   <component name="deploymentTargetDropDown">
     <value>
       <entry key="app">
-        <State />
+        <State>
+          <targetSelectedWithDropDown>
+            <Target>
+              <type value="QUICK_BOOT_TARGET" />
+              <deviceKey>
+                <Key>
+                  <type value="VIRTUAL_DEVICE_PATH" />
+                  <value value="C:\Users\alilo\.android\avd\Medium_Phone_API_34.avd" />
+                </Key>
+              </deviceKey>
+            </Target>
+          </targetSelectedWithDropDown>
+          <timeTargetWasSelectedWithDropDown value="2024-03-31T12:50:50.834909800Z" />
+        </State>
       </entry>
     </value>
   </component>
diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index 04056f64ca88cadbf3a5f930e66e19ab323d9bf5..c10d88c9eea0c196636a610e5db54b854efdd1ee 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -3,6 +3,7 @@ plugins {
     id("org.jetbrains.kotlin.android")
     id("kotlin-android")
     id("kotlin-kapt")
+    id("kotlin-parcelize")
 }
 
 android {
@@ -43,11 +44,12 @@ android {
 
 dependencies {
     val navVersion = "2.7.7"
+    implementation("androidx.lifecycle:lifecycle-viewmodel-compose:2.7.0")
     implementation("androidx.core:core-ktx:1.12.0")
     implementation("androidx.appcompat:appcompat:1.6.1")
     implementation("androidx.navigation:navigation-fragment-ktx:$navVersion")
     implementation("androidx.navigation:navigation-ui-ktx:$navVersion")
-    implementation("com.google.android.material:material:1.9.0")
+    implementation("com.google.android.material:material:1.11.0")
     implementation("com.squareup.retrofit2:retrofit:2.9.0")
     implementation("com.squareup.retrofit2:converter-gson:2.9.0")
     testImplementation("junit:junit:4.13.2")
@@ -55,26 +57,13 @@ dependencies {
     androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1")
 
     implementation("androidx.room:room-runtime:2.6.1")
-    annotationProcessor("androidx.room:room-compiler:2.6.1")
+    kapt("androidx.room:room-compiler:2.6.1")
 
     kapt("androidx.room:room-compiler:2.6.1")
 
     implementation("org.apache.poi:poi:5.2.2")
     implementation("org.apache.poi:poi-ooxml:5.2.2")
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+    // Graph
+    implementation("com.github.PhilJay:MPAndroidChart:v3.1.0")
 }
\ No newline at end of file
diff --git a/app/src/main/java/com/atm/bondowowo/adapter/TransactionAdapter.kt b/app/src/main/java/com/atm/bondowowo/adapter/TransactionAdapter.kt
index d1c5c5ca5b066e8631b919b59ef2a57e05753258..4e11c819090a74697c44e55bb435c518aaa8b52e 100644
--- a/app/src/main/java/com/atm/bondowowo/adapter/TransactionAdapter.kt
+++ b/app/src/main/java/com/atm/bondowowo/adapter/TransactionAdapter.kt
@@ -6,8 +6,8 @@ import android.view.ViewGroup
 import android.widget.TextView
 import androidx.recyclerview.widget.RecyclerView
 import com.atm.bondowowo.R
-import com.atm.bondowowo.data.entity.Transaction
-class TransactionAdapter(var list: List<Transaction>) : RecyclerView.Adapter<TransactionAdapter.ViewHolder>() {
+import com.atm.bondowowo.data.local.entity.TransactionEntity
+class TransactionAdapter(var list: List<TransactionEntity>) : RecyclerView.Adapter<TransactionAdapter.ViewHolder>() {
 
     private lateinit var dialog: Dialog
 
diff --git a/app/src/main/java/com/atm/bondowowo/data/dao/TransactionDao.kt b/app/src/main/java/com/atm/bondowowo/data/dao/TransactionDao.kt
deleted file mode 100644
index bc0dd890c52b99ea23a13a83507a3c90d58b22ab..0000000000000000000000000000000000000000
--- a/app/src/main/java/com/atm/bondowowo/data/dao/TransactionDao.kt
+++ /dev/null
@@ -1,26 +0,0 @@
-package com.atm.bondowowo.data.dao
-
-import androidx.room.Dao
-import androidx.room.Delete
-import androidx.room.Insert
-import androidx.room.Query
-import androidx.room.Update
-import com.atm.bondowowo.data.entity.Transaction
-
-@Dao
-interface TransactionDao {
-    @Query("SELECT * FROM `Transaction`")
-    fun getAll(): List<Transaction>
-
-    @Insert
-    fun insertAll(vararg transactions: Transaction)
-
-    @Delete
-    fun delete(transaction: Transaction)
-
-    @Query("SELECT * FROM `Transaction` WHERE id = :id")
-    fun get(id: Int): Transaction
-
-    @Update
-    fun update(transaction: Transaction)
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/atm/bondowowo/data/local/dao/TransactionDao.kt b/app/src/main/java/com/atm/bondowowo/data/local/dao/TransactionDao.kt
new file mode 100644
index 0000000000000000000000000000000000000000..666f838100b9dbefa4e788d9ee71bc1293abbe4b
--- /dev/null
+++ b/app/src/main/java/com/atm/bondowowo/data/local/dao/TransactionDao.kt
@@ -0,0 +1,26 @@
+package com.atm.bondowowo.data.local.dao
+
+import androidx.room.Dao
+import androidx.room.Delete
+import androidx.room.Insert
+import androidx.room.Query
+import androidx.room.Update
+import com.atm.bondowowo.data.local.entity.TransactionEntity
+
+@Dao
+interface TransactionDao {
+    @Query("SELECT * FROM TransactionEntity")
+    fun getAll(): List<TransactionEntity>
+
+    @Insert
+    fun insertAll(vararg transactionEntities: TransactionEntity)
+
+    @Delete
+    fun delete(transactionEntity: TransactionEntity)
+
+    @Query("SELECT * FROM TransactionEntity WHERE id = :id")
+    fun get(id: Int): TransactionEntity
+
+    @Update
+    fun update(transactionEntity: TransactionEntity)
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/atm/bondowowo/data/AppDatabase.kt b/app/src/main/java/com/atm/bondowowo/data/local/database/AppDatabase.kt
similarity index 68%
rename from app/src/main/java/com/atm/bondowowo/data/AppDatabase.kt
rename to app/src/main/java/com/atm/bondowowo/data/local/database/AppDatabase.kt
index 37884407c02db6d46dc72c9fd1754f0a9a9cdc1a..12f533b9520501adc9e78950475646c67c6deb7a 100644
--- a/app/src/main/java/com/atm/bondowowo/data/AppDatabase.kt
+++ b/app/src/main/java/com/atm/bondowowo/data/local/database/AppDatabase.kt
@@ -1,14 +1,15 @@
-package com.atm.bondowowo.data
+package com.atm.bondowowo.data.local.database
 
 import android.content.Context
 import androidx.room.Database
 import androidx.room.Room
 import androidx.room.RoomDatabase
 import androidx.room.TypeConverters
-import com.atm.bondowowo.data.dao.TransactionDao
-import com.atm.bondowowo.data.entity.Transaction
+import com.atm.bondowowo.data.local.dao.TransactionDao
+import com.atm.bondowowo.data.local.entity.TransactionEntity
+import com.atm.bondowowo.utils.Converters
 
-@Database(entities = [Transaction::class], version = 1)
+@Database(entities = [TransactionEntity::class], version = 2)
 @TypeConverters(Converters::class)
 abstract class AppDatabase: RoomDatabase() {
     abstract fun transactionDao(): TransactionDao
@@ -16,7 +17,7 @@ abstract class AppDatabase: RoomDatabase() {
     companion object{
         private var instance: AppDatabase? = null
 
-        fun getInstance(context: Context): AppDatabase{
+        fun getInstance(context: Context): AppDatabase {
             if(instance == null){
                 instance = Room.databaseBuilder(context, AppDatabase::class.java, name = "app-database")
                     .fallbackToDestructiveMigration()
diff --git a/app/src/main/java/com/atm/bondowowo/data/entity/Transaction.kt b/app/src/main/java/com/atm/bondowowo/data/local/entity/TransactionEntity.kt
similarity index 83%
rename from app/src/main/java/com/atm/bondowowo/data/entity/Transaction.kt
rename to app/src/main/java/com/atm/bondowowo/data/local/entity/TransactionEntity.kt
index 70a4641819fa22c54f2bdbd3fa74deaba41dc1ff..85737264f17d64a336bdf7f2fd66ff0b41af908e 100644
--- a/app/src/main/java/com/atm/bondowowo/data/entity/Transaction.kt
+++ b/app/src/main/java/com/atm/bondowowo/data/local/entity/TransactionEntity.kt
@@ -1,4 +1,4 @@
-package com.atm.bondowowo.data.entity
+package com.atm.bondowowo.data.local.entity
 
 import android.os.Parcel
 import android.os.Parcelable
@@ -8,7 +8,7 @@ import androidx.room.PrimaryKey
 import java.time.LocalDateTime
 
 @Entity
-data class Transaction(
+data class TransactionEntity(
     @PrimaryKey(autoGenerate = true) var id: Int? = null,
     @ColumnInfo(name = "date") var date: LocalDateTime?,
     @ColumnInfo(name = "nama") var nama: String?,
@@ -38,12 +38,12 @@ data class Transaction(
         return 0
     }
 
-    companion object CREATOR : Parcelable.Creator<Transaction> {
-        override fun createFromParcel(parcel: Parcel): Transaction {
-            return Transaction(parcel)
+    companion object CREATOR : Parcelable.Creator<TransactionEntity> {
+        override fun createFromParcel(parcel: Parcel): TransactionEntity {
+            return TransactionEntity(parcel)
         }
 
-        override fun newArray(size: Int): Array<Transaction?> {
+        override fun newArray(size: Int): Array<TransactionEntity?> {
             return arrayOfNulls(size)
         }
     }
diff --git a/app/src/main/java/com/atm/bondowowo/data/model/Transaction.kt b/app/src/main/java/com/atm/bondowowo/data/model/Transaction.kt
new file mode 100644
index 0000000000000000000000000000000000000000..0f95946d338492464212a4c52cf7eefd026df617
--- /dev/null
+++ b/app/src/main/java/com/atm/bondowowo/data/model/Transaction.kt
@@ -0,0 +1,15 @@
+package com.atm.bondowowo.data.model
+
+import android.os.Parcelable
+import kotlinx.parcelize.Parcelize
+import java.time.LocalDateTime
+
+@Parcelize
+data class Transaction(
+    val id: Int? = null,
+    val date: LocalDateTime?,
+    val nama: String?,
+    val kategori: String?,
+    val nominal: Double?,
+    val lokasi: String?
+) : Parcelable
\ No newline at end of file
diff --git a/app/src/main/java/com/atm/bondowowo/data/repository/TransactionRepository.kt b/app/src/main/java/com/atm/bondowowo/data/repository/TransactionRepository.kt
new file mode 100644
index 0000000000000000000000000000000000000000..138c1355357aa4945b607a83c835343202a416ed
--- /dev/null
+++ b/app/src/main/java/com/atm/bondowowo/data/repository/TransactionRepository.kt
@@ -0,0 +1,55 @@
+package com.atm.bondowowo.data.repository
+
+import com.atm.bondowowo.data.local.dao.TransactionDao
+import com.atm.bondowowo.data.local.database.AppDatabase
+import com.atm.bondowowo.data.local.entity.TransactionEntity
+import com.atm.bondowowo.data.model.Transaction
+
+class TransactionRepository(private val database: AppDatabase) {
+
+    fun getAllTransactions(): List<Transaction> {
+        return database.transactionDao().getAll().map { it.toTransaction() }
+    }
+
+    fun insertTransaction(transaction: Transaction) {
+        database.transactionDao().insertAll(transaction.toTransactionEntity())
+    }
+
+    fun insertTransactions(transactions: List<Transaction>) {
+        database.transactionDao().insertAll(*transactions.map { it.toTransactionEntity() }.toTypedArray())
+    }
+
+    fun deleteTransaction(transaction: Transaction) {
+        database.transactionDao().delete(transaction.toTransactionEntity())
+    }
+
+    fun getTransaction(id: Int): Transaction {
+        return database.transactionDao().get(id).toTransaction()
+    }
+
+    fun updateTransaction(transaction: Transaction) {
+        database.transactionDao().update(transaction.toTransactionEntity())
+    }
+
+    private fun TransactionEntity.toTransaction(): Transaction {
+        return Transaction(
+            id = this.id,
+            date = this.date,
+            nama = this.nama,
+            kategori = this.kategori,
+            nominal = this.nominal,
+            lokasi = this.lokasi
+        )
+    }
+
+    private fun Transaction.toTransactionEntity(): TransactionEntity {
+        return TransactionEntity(
+            id = this.id,
+            date = this.date,
+            nama = this.nama,
+            kategori = this.kategori,
+            nominal = this.nominal,
+            lokasi = this.lokasi
+        )
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/atm/bondowowo/ui/graph/ChartView.kt b/app/src/main/java/com/atm/bondowowo/ui/graph/ChartView.kt
new file mode 100644
index 0000000000000000000000000000000000000000..7e150c1255d6f2239d27ddc2a896b7369443c8bc
--- /dev/null
+++ b/app/src/main/java/com/atm/bondowowo/ui/graph/ChartView.kt
@@ -0,0 +1,83 @@
+package com.atm.bondowowo.ui.graph
+
+import android.content.Context
+import android.graphics.Color
+import android.view.View
+import android.widget.TextView
+import androidx.lifecycle.LiveData
+import com.atm.bondowowo.R
+import com.atm.bondowowo.data.model.Transaction
+import com.github.mikephil.charting.charts.PieChart
+import androidx.lifecycle.Observer
+import com.github.mikephil.charting.animation.Easing
+import com.github.mikephil.charting.components.Legend
+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.formatter.PercentFormatter
+
+class ChartView(context: Context) : View(context) {
+
+    lateinit var pieChart: PieChart
+
+    override fun onFinishInflate() {
+        super.onFinishInflate()
+        pieChart = findViewById(R.id.pieChart)
+
+    }
+
+    private val observer = Observer<List<Transaction>> { newData ->
+        newData.let {
+            updateChart(it)
+        }
+    }
+
+    fun setChartData(data: LiveData<List<Transaction>>) {
+        data.observeForever(observer)
+    }
+
+    private fun updateChart(transactions: List<Transaction>) {
+        val groupedTransactions = transactions.groupBy { it.kategori }
+        val entries = groupedTransactions.map { (group, transactions) ->
+            val totalQuantity = transactions.sumOf { it.nominal?.toInt() ?: 0 }
+            PieEntry(totalQuantity.toFloat(), group)
+        }
+
+
+        if (entries.isNotEmpty()) {
+//            pieChart.visibility = VISIBLE
+            pieChart.description.text = "Amount each Category"
+            pieChart.description.textSize = 20f
+            pieChart.description.textColor = Color.BLACK
+            pieChart.holeRadius = 40f
+
+            val pieDataSet = PieDataSet(entries, "")
+            pieDataSet.colors = listOf(Color.RED, Color.GREEN, Color.BLUE)
+            pieDataSet.valueTextSize = 24f
+            pieDataSet.valueTextColor = Color.WHITE
+            pieDataSet.valueFormatter = PercentFormatter()
+            pieDataSet.sliceSpace = 3f
+            pieDataSet.selectionShift = 15f
+
+            pieChart.legend.isEnabled = true
+            pieChart.legend.orientation = Legend.LegendOrientation.VERTICAL
+            pieChart.legend.horizontalAlignment = Legend.LegendHorizontalAlignment.RIGHT
+            pieChart.legend.verticalAlignment = Legend.LegendVerticalAlignment.BOTTOM
+            pieChart.legend.textSize = 32f
+            pieChart.legend.textColor = Color.BLACK
+            pieChart.animateY(1500, Easing.EaseInOutQuad)
+            pieChart.animateX(1500, Easing.EaseInOutQuad)
+            pieChart.isHighlightPerTapEnabled = true
+            pieChart.isRotationEnabled = true
+            pieChart.setEntryLabelColor(Color.WHITE)
+            pieChart.setEntryLabelTextSize(24f)
+
+            val pieData = PieData(pieDataSet)
+            pieChart.data = pieData
+            pieChart.invalidate()
+        } else {
+//            pieChart.visibility = GONE
+        }
+    }
+
+}
diff --git a/app/src/main/java/com/atm/bondowowo/ui/graph/GraphFragment.kt b/app/src/main/java/com/atm/bondowowo/ui/graph/GraphFragment.kt
index 45c25f900da09ffce345b2d3fc9629c9c109458a..317d9f22436814fbcd82d462be8dc259a686c1b9 100644
--- a/app/src/main/java/com/atm/bondowowo/ui/graph/GraphFragment.kt
+++ b/app/src/main/java/com/atm/bondowowo/ui/graph/GraphFragment.kt
@@ -1,6 +1,36 @@
 package com.atm.bondowowo.ui.graph
 
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
 import androidx.fragment.app.Fragment
+import androidx.lifecycle.ViewModelProvider
+import com.atm.bondowowo.R
+import com.atm.bondowowo.data.local.database.AppDatabase
+import com.atm.bondowowo.data.repository.TransactionRepository
 
+class GraphFragment : Fragment() {
+    private lateinit var graphViewModel: GraphViewModel
 
-class GraphFragment : Fragment()
+    private lateinit var pieChart: ChartView
+
+    override fun onCreateView(
+        inflater: LayoutInflater, container: ViewGroup?,
+        savedInstanceState: Bundle?
+    ): View? {
+        return inflater.inflate(R.layout.fragment_graph, container, false)
+    }
+
+    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+        super.onViewCreated(view, savedInstanceState)
+        val database = AppDatabase.getInstance(requireContext())
+        val transactionRepository = TransactionRepository(database)
+        val graphViewModelFactory = GraphViewModelFactory(transactionRepository)
+        graphViewModel = ViewModelProvider(this, graphViewModelFactory)[GraphViewModel::class.java]
+
+        pieChart = ChartView(requireContext())
+        pieChart.pieChart = view.findViewById(R.id.pieChart)
+        pieChart.setChartData(graphViewModel.transactionData)
+    }
+}
diff --git a/app/src/main/java/com/atm/bondowowo/ui/graph/GraphViewModel.kt b/app/src/main/java/com/atm/bondowowo/ui/graph/GraphViewModel.kt
new file mode 100644
index 0000000000000000000000000000000000000000..749260e48c6b9f85dd0d9b1a9cf6c850046f27c4
--- /dev/null
+++ b/app/src/main/java/com/atm/bondowowo/ui/graph/GraphViewModel.kt
@@ -0,0 +1,40 @@
+package com.atm.bondowowo.ui.graph
+
+import androidx.lifecycle.LiveData
+import androidx.lifecycle.MutableLiveData
+import androidx.lifecycle.ViewModel
+import androidx.lifecycle.viewModelScope
+import com.atm.bondowowo.data.repository.TransactionRepository
+import com.atm.bondowowo.data.model.Transaction
+import kotlinx.coroutines.launch
+
+class GraphViewModel(
+    private val transactionRepository: TransactionRepository
+) : ViewModel() {
+
+
+    private val _transactionData = MutableLiveData<List<Transaction>>()
+    val transactionData: LiveData<List<Transaction>> = _transactionData
+    private val toastMessage = MutableLiveData<String>()
+
+    init {
+        loadTransactionData()
+    }
+
+    private fun loadTransactionData() {
+        viewModelScope.launch {
+            try {
+                val transactions = transactionRepository.getAllTransactions()
+                _transactionData.postValue(transactions)
+            } catch (e: Exception) {
+                showToast(e.message ?: "Failed to load transaction data")
+            } finally {
+            }
+        }
+    }
+
+    fun showToast(message: String) {
+        toastMessage.value = message
+    }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/atm/bondowowo/ui/graph/GraphViewModelFactory.kt b/app/src/main/java/com/atm/bondowowo/ui/graph/GraphViewModelFactory.kt
new file mode 100644
index 0000000000000000000000000000000000000000..8f69586b7402f954dd2e5ca175eecfaf1a6b0395
--- /dev/null
+++ b/app/src/main/java/com/atm/bondowowo/ui/graph/GraphViewModelFactory.kt
@@ -0,0 +1,18 @@
+package com.atm.bondowowo.ui.graph
+
+import androidx.lifecycle.ViewModel
+import androidx.lifecycle.ViewModelProvider
+import com.atm.bondowowo.data.repository.TransactionRepository
+
+class GraphViewModelFactory(
+    private val transactionRepository: TransactionRepository
+) : ViewModelProvider.Factory {
+
+    override fun <T : ViewModel> create(modelClass: Class<T>): T {
+        if (modelClass.isAssignableFrom(GraphViewModel::class.java)) {
+            @Suppress("UNCHECKED_CAST")
+            return GraphViewModel(transactionRepository) as T
+        }
+        throw IllegalArgumentException("Unknown ViewModel class")
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/atm/bondowowo/ui/settings/ExportToFileActivity.kt b/app/src/main/java/com/atm/bondowowo/ui/settings/ExportToFileActivity.kt
index b7d354f06916bd5c460c86658869a1d45b4e9771..c31d778915540b087ed8ec9ba3c9b640c8fe25ad 100644
--- a/app/src/main/java/com/atm/bondowowo/ui/settings/ExportToFileActivity.kt
+++ b/app/src/main/java/com/atm/bondowowo/ui/settings/ExportToFileActivity.kt
@@ -3,8 +3,7 @@ package com.atm.bondowowo.ui.settings
 import android.os.Bundle
 import android.widget.Toast
 import androidx.appcompat.app.AppCompatActivity
-import com.atm.bondowowo.R
-import com.atm.bondowowo.data.entity.Transaction
+import com.atm.bondowowo.data.local.entity.TransactionEntity
 import org.apache.poi.xssf.usermodel.XSSFWorkbook
 import java.io.File
 import java.io.FileOutputStream
@@ -14,16 +13,16 @@ class ExportToFileActivity : AppCompatActivity() {
         super.onCreate(savedInstanceState)
 //        setContentView(R.layout.fragment_transaction)
 
-        val transactions: ArrayList<Transaction>? = intent.getSerializableExtra("transactions") as? ArrayList<Transaction>
+        val transactionEntities: ArrayList<TransactionEntity>? = intent.getSerializableExtra("transactions") as? ArrayList<TransactionEntity>
 
-        if (transactions != null) {
-            exportDataToFile(transactions)
+        if (transactionEntities != null) {
+            exportDataToFile(transactionEntities)
         } else {
             Toast.makeText(this, "No transaction data available", Toast.LENGTH_SHORT).show()
         }
     }
 
-    private fun exportDataToFile(transactions: List<Transaction>) {
+    private fun exportDataToFile(transactionEntities: List<TransactionEntity>) {
         val workbook = XSSFWorkbook()
         val sheet = workbook.createSheet("Transaction Data")
 
@@ -36,7 +35,7 @@ class ExportToFileActivity : AppCompatActivity() {
             cell.setCellValue(headerText)
         }
 
-        transactions.forEachIndexed { rowIndex, transaction ->
+        transactionEntities.forEachIndexed { rowIndex, transaction ->
             val dataRow = sheet.createRow(rowIndex + 1)
 //            dataRow.createCell(0).setCellValue(transaction.id ?: -1)
             dataRow.createCell(0).setCellValue(transaction.date.toString())
diff --git a/app/src/main/java/com/atm/bondowowo/ui/settings/SettingsFragment.kt b/app/src/main/java/com/atm/bondowowo/ui/settings/SettingsFragment.kt
index 7b21b7158353d53cca86fc7da16d90288e4dad34..34b88565e0c2c6b78956156e9177b5b82d7ac39e 100644
--- a/app/src/main/java/com/atm/bondowowo/ui/settings/SettingsFragment.kt
+++ b/app/src/main/java/com/atm/bondowowo/ui/settings/SettingsFragment.kt
@@ -9,7 +9,7 @@ import android.widget.Button
 import android.widget.LinearLayout
 import androidx.fragment.app.Fragment
 import com.atm.bondowowo.R
-import com.atm.bondowowo.data.AppDatabase
+import com.atm.bondowowo.data.local.database.AppDatabase
 
 
 class SettingsFragment : Fragment(){
diff --git a/app/src/main/java/com/atm/bondowowo/ui/transaction/TransactionFragment.kt b/app/src/main/java/com/atm/bondowowo/ui/transaction/TransactionFragment.kt
index 41cf1c5c2db8ea686a7729b483d2aa315a0d3f77..024da2b21172c97f0151b5abb55d0d77ccbcb314 100644
--- a/app/src/main/java/com/atm/bondowowo/ui/transaction/TransactionFragment.kt
+++ b/app/src/main/java/com/atm/bondowowo/ui/transaction/TransactionFragment.kt
@@ -1,20 +1,19 @@
 package com.atm.bondowowo.ui.transaction
 
 import android.app.AlertDialog
-import android.content.DialogInterface
 import android.content.Intent
 import android.os.Bundle
 import android.view.LayoutInflater
 import android.view.View
 import android.view.ViewGroup
 import androidx.fragment.app.Fragment
-import com.atm.bondowowo.R
 import androidx.recyclerview.widget.DividerItemDecoration
 import androidx.recyclerview.widget.LinearLayoutManager
 import androidx.recyclerview.widget.RecyclerView
+import com.atm.bondowowo.R
 import com.atm.bondowowo.adapter.TransactionAdapter
-import com.atm.bondowowo.data.AppDatabase
-import com.atm.bondowowo.data.entity.Transaction
+import com.atm.bondowowo.data.local.database.AppDatabase
+import com.atm.bondowowo.data.local.entity.TransactionEntity
 import com.google.android.material.floatingactionbutton.FloatingActionButton
 
 
@@ -22,7 +21,7 @@ class TransactionFragment : Fragment() {
 
     private lateinit var recyclerView: RecyclerView
     private lateinit var fab: FloatingActionButton
-    private var list = mutableListOf<Transaction>()
+    private var list = mutableListOf<TransactionEntity>()
     private lateinit var adapter: TransactionAdapter
     private lateinit var database: AppDatabase
     private lateinit var listener: TransactionInteractionListener
@@ -50,7 +49,8 @@ class TransactionFragment : Fragment() {
             override fun onClick(position: Int) {
                 val dialog = AlertDialog.Builder(requireContext())
                 dialog.setTitle(list[position].nama)
-                dialog.setItems(R.array.transaction_option
+                dialog.setItems(
+                    R.array.transaction_option
                 ) { dialog, which ->
                     if (which == 0) {
                         val intent =
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 4ecbf1f361e9c6b6fe717426b67a2f6a5172b1e3..c5389afb8991242846b7c3be9ba8306c15f11dcf 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,8 +1,6 @@
 package com.atm.bondowowo.ui.transaction
 
-import android.content.Intent
 import android.os.Bundle
-import android.util.Log
 import android.view.LayoutInflater
 import android.view.View
 import android.view.ViewGroup
@@ -10,11 +8,9 @@ import android.widget.Button
 import android.widget.EditText
 import android.widget.Toast
 import androidx.fragment.app.Fragment
-import androidx.navigation.fragment.findNavController
-import com.atm.bondowowo.MainActivity
 import com.atm.bondowowo.R
-import com.atm.bondowowo.data.AppDatabase
-import com.atm.bondowowo.data.entity.Transaction
+import com.atm.bondowowo.data.local.database.AppDatabase
+import com.atm.bondowowo.data.local.entity.TransactionEntity
 import java.time.LocalDateTime
 
 class TransactionInputFragment : Fragment() {
@@ -60,7 +56,7 @@ class TransactionInputFragment : Fragment() {
             if (nama_transaksi.text.isNotEmpty() && nominal_transaksi.text.isNotEmpty() && kategori_transaksi.text.isNotEmpty() && lokasi_transaksi.text.isNotEmpty()) {
                 if (args != null) {
                     database.transactionDao().update(
-                        Transaction(
+                        TransactionEntity(
                             args.getInt("id", 0),
                             LocalDateTime.now(),
                             nama_transaksi.text.toString(),
@@ -69,9 +65,10 @@ class TransactionInputFragment : Fragment() {
                             lokasi_transaksi.text.toString()
                         )
                     )
+                    listener.onTransactionSubmitted()
                 } else {
                     database.transactionDao().insertAll(
-                        Transaction(
+                        TransactionEntity(
                             null,
                             LocalDateTime.now(),
                             nama_transaksi.text.toString(),
diff --git a/app/src/main/java/com/atm/bondowowo/data/Converters.kt b/app/src/main/java/com/atm/bondowowo/utils/ConvertersUtils.kt
similarity index 91%
rename from app/src/main/java/com/atm/bondowowo/data/Converters.kt
rename to app/src/main/java/com/atm/bondowowo/utils/ConvertersUtils.kt
index 49e875102c36ae663a8da798dbf3049319c6bda4..cf23604d752358dd5330330ed75de02c6ca5494f 100644
--- a/app/src/main/java/com/atm/bondowowo/data/Converters.kt
+++ b/app/src/main/java/com/atm/bondowowo/utils/ConvertersUtils.kt
@@ -1,4 +1,4 @@
-package com.atm.bondowowo.data
+package com.atm.bondowowo.utils
 
 import androidx.room.TypeConverter
 import java.time.LocalDateTime
diff --git a/app/src/main/res/layout/fragment_graph.xml b/app/src/main/res/layout/fragment_graph.xml
index ea6389a9f1b11a731add532fc7ea5ace60afe744..f6e9ebc7f0a051c11e6fb04b7396d69ad63a16f5 100644
--- a/app/src/main/res/layout/fragment_graph.xml
+++ b/app/src/main/res/layout/fragment_graph.xml
@@ -1,10 +1,9 @@
 <?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"
+    xmlns:chart="http://schemas.android.com/apk/res-auto"
     android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    tools:context="com.atm.bondowowo.ui.scan.ScanFragment">
+    android:layout_height="match_parent">
 
     <com.google.android.material.appbar.AppBarLayout
         android:id="@+id/header"
@@ -24,5 +23,17 @@
             android:textStyle="bold" />
     </com.google.android.material.appbar.AppBarLayout>
 
+    <com.github.mikephil.charting.charts.PieChart
+        android:id="@+id/pieChart"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:layout_marginStart="20dp"
+        android:layout_marginTop="70dp"
+        android:layout_marginEnd="20dp"
+        android:layout_marginBottom="30dp"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent" />
 
-</androidx.constraintlayout.widget.ConstraintLayout>
+</androidx.constraintlayout.widget.ConstraintLayout>
\ 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 5cc739c92f594ecffb54970a2b231c4a7debca03..99ab9a4ca9140f4938bdb47c93f4242692426563 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -6,6 +6,7 @@
     <string name="pengaturan">Pengaturan</string>
     <string name="add">+</string>
     <string name="capture">Capture</string>
+    <string name="no_data_to_display">Empty :( Please fill transaction</string>
     <string-array name="transaction_option">
         <item>Edit</item>
         <item>Delete</item>
diff --git a/settings.gradle.kts b/settings.gradle.kts
index a166835a10904b5765bb52544763026579db581d..3fd94ef69f37af6fea3947a69af56df295f834c8 100644
--- a/settings.gradle.kts
+++ b/settings.gradle.kts
@@ -10,6 +10,9 @@ dependencyResolutionManagement {
     repositories {
         google()
         mavenCentral()
+        maven {
+            url = uri("https://jitpack.io")
+        }
     }
 }