diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index 40dd2cd9471830b545e5d48baf5c6967aea8212a..82eb6647a6a2659f89516714c79f5722838a46b3 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -138,7 +138,7 @@ dependencies {
     implementation("androidx.lifecycle:lifecycle-viewmodel-compose:2.6.2")
 
 
-    val cameraxVersion = "1.3.0-rc01"
+    val cameraxVersion = "1.3.2"
 
     implementation("androidx.camera:camera-core:$cameraxVersion")
     implementation("androidx.camera:camera-camera2:$cameraxVersion")
@@ -152,7 +152,7 @@ dependencies {
     implementation("org.apache.poi:poi-ooxml:5.2.5")
 
     implementation("androidx.core:core-splashscreen:1.0.1")
-    implementation("com.androidplot:androidplot-core:1.5.10")
+    implementation("com.github.PhilJay:MPAndroidChart:v3.1.0")
 
 }
 
diff --git a/app/src/main/java/com/example/pbd_jwr/ui/dashboard/DashboardFragment.kt b/app/src/main/java/com/example/pbd_jwr/ui/dashboard/DashboardFragment.kt
index ca8cc7fa84035731323c4ba230edb924cb2d599b..e518c7a8642989047e94238f9b9a7e97a54e73cc 100644
--- a/app/src/main/java/com/example/pbd_jwr/ui/dashboard/DashboardFragment.kt
+++ b/app/src/main/java/com/example/pbd_jwr/ui/dashboard/DashboardFragment.kt
@@ -1,42 +1,80 @@
 package com.example.pbd_jwr.ui.dashboard
 
+import android.graphics.Color
 import android.os.Bundle
 import android.view.LayoutInflater
 import android.view.View
 import android.view.ViewGroup
-import android.widget.TextView
 import androidx.fragment.app.Fragment
 import androidx.lifecycle.ViewModelProvider
-import com.example.pbd_jwr.databinding.FragmentDashboardBinding
+import com.example.pbd_jwr.R
+import com.example.pbd_jwr.data.entity.Transaction
+import com.example.pbd_jwr.ui.transaction.TransactionViewModel
+import com.github.mikephil.charting.animation.Easing
 
-class DashboardFragment : Fragment() {
+import com.github.mikephil.charting.charts.PieChart
+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.utils.ColorTemplate
+import java.util.Locale
 
-    private var _binding: FragmentDashboardBinding? = null
+class DashboardFragment : Fragment() {
 
-    // This property is only valid between onCreateView and
-    // onDestroyView.
-    private val binding get() = _binding!!
+    private lateinit var pieChart: PieChart
+    private lateinit var viewModel: TransactionViewModel
 
     override fun onCreateView(
-        inflater: LayoutInflater,
-        container: ViewGroup?,
+        inflater: LayoutInflater, container: ViewGroup?,
         savedInstanceState: Bundle?
-    ): View {
-        val dashboardViewModel =
-            ViewModelProvider(this)[DashboardViewModel::class.java]
+    ): View? {
+        val view = inflater.inflate(R.layout.fragment_dashboard, container, false)
+
+        pieChart = view.findViewById(R.id.pieChart)
+        viewModel = ViewModelProvider(this)[TransactionViewModel::class.java]
 
-        _binding = FragmentDashboardBinding.inflate(inflater, container, false)
-        val root: View = binding.root
+        return view
+    }
+
+    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+        super.onViewCreated(view, savedInstanceState)
 
-        val textView: TextView = binding.textDashboard
-        dashboardViewModel.text.observe(viewLifecycleOwner) {
-            textView.text = it
+        viewModel.getAllTransactions().observe(viewLifecycleOwner) { transactions ->
+            loadPieChartData(transactions)
         }
-        return root
     }
 
-    override fun onDestroyView() {
-        super.onDestroyView()
-        _binding = null
+    private fun loadPieChartData(transactions: List<Transaction>) {
+
+        val totalPerCategory = transactions.groupBy { it.category }
+            .mapValues { entry ->
+                entry.value.sumOf { it.amount }
+            }
+
+        val entries = ArrayList<PieEntry>()
+        for ((category, total) in totalPerCategory) {
+            entries.add(PieEntry(total.toFloat(),
+                category.replaceFirstChar { if (it.isLowerCase()) it.titlecase(Locale.ROOT) else it.toString() }))
+        }
+
+        val dataSet = PieDataSet(entries, "Categories")
+        dataSet.setColors(*ColorTemplate.MATERIAL_COLORS) // Atur warna
+        dataSet.valueTextSize = 12f
+        dataSet.valueTextColor = Color.BLACK
+
+        val data = PieData(dataSet)
+        pieChart.data = data
+        pieChart.invalidate() // refresh chart
+        pieChart.animateY(1400, Easing.EaseInOutQuad)
+
+        pieChart.description.isEnabled = false
+        pieChart.isDrawHoleEnabled = true
+        pieChart.setEntryLabelColor(Color.BLACK)
+        pieChart.setEntryLabelTextSize(12f)
+        pieChart.legend.horizontalAlignment = Legend.LegendHorizontalAlignment.CENTER
+        pieChart.centerText = "Transactions\nCategory Amount"
+        pieChart.setCenterTextSize(20F)
     }
-}
\ No newline at end of file
+}
+
diff --git a/app/src/main/res/layout/fragment_dashboard.xml b/app/src/main/res/layout/fragment_dashboard.xml
index dd4238dd9d29ae2b34101781e10132b85ecbaee9..feed448c4aac31ab15bf7ced37bf9e323ab9f82f 100644
--- a/app/src/main/res/layout/fragment_dashboard.xml
+++ b/app/src/main/res/layout/fragment_dashboard.xml
@@ -1,14 +1,13 @@
 <?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"
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
-    tools:context="ui.dashboard.DashboardFragment">
+    tools:context=".ui.dashboard.DashboardFragment">
 
-    <com.androidplot.pie.PieChart
+    <com.github.mikephil.charting.charts.PieChart
         android:id="@+id/pieChart"
         android:layout_width="match_parent"
-        android:layout_height="match_parent" />
+        android:layout_height="600dp" />
 
-</androidx.constraintlayout.widget.ConstraintLayout>
+</RelativeLayout>
diff --git a/build.gradle.kts b/build.gradle.kts
index 5cf2105177c3d52e19649d5c35bf3ec5593ad14e..0871bc044ec7162bdc48ff9ee15db80fdf366b11 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -2,6 +2,8 @@
 buildscript {
     repositories {
         google()
+        mavenCentral()
+        maven (url = "https://jitpack.io")
     }
 
     dependencies {
diff --git a/settings.gradle.kts b/settings.gradle.kts
index 06a181712081f24b027ac117313326414cc05a6a..7e8557db7b6d36fd6bdc5c5f2a0d913258ea0874 100644
--- a/settings.gradle.kts
+++ b/settings.gradle.kts
@@ -10,6 +10,7 @@ dependencyResolutionManagement {
     repositories {
         google()
         mavenCentral()
+        maven { url = uri("https://jitpack.io") }
     }
 }