diff --git a/app/src/main/java/com/example/bondoman/DBViewModel.kt b/app/src/main/java/com/example/bondoman/DBViewModel.kt index d0898cb4c566b5d4dc233056e42226aeb5170947..dcc237e75adf86ccc8f583136cb65f4d2e86423e 100644 --- a/app/src/main/java/com/example/bondoman/DBViewModel.kt +++ b/app/src/main/java/com/example/bondoman/DBViewModel.kt @@ -1,7 +1,9 @@ package com.example.bondoman import android.app.Application +import android.util.Log import androidx.lifecycle.AndroidViewModel +import com.example.bondoman.models.GraphData import com.example.bondoman.retrofit.data.TransactionDB import com.example.bondoman.retrofit.data.entity.Category import com.example.bondoman.retrofit.data.entity.TransactionEntity @@ -19,7 +21,7 @@ class DBViewModel(application: Application) : AndroidViewModel(application) { fun addTransaksi(name: String, category: String, price: Double, location: String = "") { viewModelScope.launch { val currentDate = SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()).format(Date()) - var tempLocation = location + val tempLocation = location val newTransaction = TransactionEntity( name = name, category = Category.valueOf(category), @@ -30,4 +32,31 @@ class DBViewModel(application: Application) : AndroidViewModel(application) { db.transactionDao().insertAll(newTransaction) } } + + fun getGraphData(): List<GraphData> { + val data: MutableList<GraphData> = mutableListOf() + var dbData = listOf<GraphData>() + viewModelScope.launch { + dbData = db.transactionDao().sumPriceByCategory() + } + Log.d("VIEWMODELDATA", dbData.toString()) + if(dbData.size != 2) { + if (dbData.size==1) { + if (Category.valueOf(dbData[0].category!!) == Category.Pemasukan) { + data.add(0, dbData[0]) + data.add(1, GraphData("Pengeluaran", 0.0)) + } else { + data.add(0, GraphData("Pemasukan", 0.0)) + data.add(1, dbData[0]) + } + } else { + data.add(0, GraphData("Pemasukan", 0.0)) + data.add(1, GraphData("Pengeluaran", 0.0)) + } + } else { + data.add(0, dbData[0]) + data.add(1, dbData[1]) + } + return data + } } \ No newline at end of file diff --git a/app/src/main/java/com/example/bondoman/GraphFragment.kt b/app/src/main/java/com/example/bondoman/GraphFragment.kt index 6f2ee6ca948c3b3d6412eae40bb6b943a9a99217..c6de94cb611aefaf3950b1e8010863f18245b7ca 100644 --- a/app/src/main/java/com/example/bondoman/GraphFragment.kt +++ b/app/src/main/java/com/example/bondoman/GraphFragment.kt @@ -14,6 +14,8 @@ import android.widget.RelativeLayout import android.widget.TextView import androidx.core.content.ContextCompat import androidx.fragment.app.Fragment +import androidx.lifecycle.ViewModelProvider +import com.example.bondoman.retrofit.data.TransactionDB import com.github.mikephil.charting.charts.PieChart import com.github.mikephil.charting.data.PieData import com.github.mikephil.charting.data.PieDataSet @@ -21,13 +23,19 @@ import com.github.mikephil.charting.data.PieEntry class GraphFragment : Fragment() { + private lateinit var db: DBViewModel + private lateinit var database: TransactionDB override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { - + database = TransactionDB.getInstance(requireContext()) + if (!database.isOpen){ + database.openHelper.writableDatabase + } val view = inflater.inflate(R.layout.fragment_grafik, container, false) val pieChart: PieChart = view.findViewById(R.id.pieChart) + db = ViewModelProvider(requireActivity())[DBViewModel::class.java] val navbar = requireActivity().findViewById<LinearLayout>(R.id.navbar_main) val toolbar = requireActivity().findViewById<RelativeLayout>(R.id.toolbar) @@ -47,12 +55,12 @@ class GraphFragment : Fragment() { settingButton.isSelected = false // Dummy data - val income = 5000f - val outcome = 3000f + val graphData = db.getGraphData() + Log.d("DATA", graphData.toString()) val entries = ArrayList<PieEntry>() - entries.add(PieEntry(income, "Income")) - entries.add(PieEntry(outcome, "Outcome")) + entries.add(PieEntry(graphData[0].amount!!.toFloat(), graphData[0].category.toString())) + entries.add(PieEntry(graphData[1].amount!!.toFloat(), graphData[1].category.toString())) val dataSet = PieDataSet(entries, "Transaction Summary") @@ -80,38 +88,5 @@ class GraphFragment : Fragment() { return view } - override fun onConfigurationChanged(newConfig: Configuration) { - super.onConfigurationChanged(newConfig) - - if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { - val transactionButton = requireActivity().findViewById<ImageButton>(R.id.transaction_button) - val graphButton = requireActivity().findViewById<ImageButton>(R.id.graph_button) - val settingButton = requireActivity().findViewById<ImageButton>(R.id.setting_button) - val scanButton = requireActivity().findViewById<ImageButton>(R.id.scan_button) - - val animation = AnimationUtils.loadAnimation(requireContext(), R.anim.rotate_90_deg) - - transactionButton.startAnimation(animation) - graphButton.startAnimation(animation) - settingButton.startAnimation(animation) - scanButton.startAnimation(animation) - - Log.d("ORIENTATION CHANGED", "rotate 90") - } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) { - val transactionButton = requireActivity().findViewById<ImageButton>(R.id.transaction_button) - val graphButton = requireActivity().findViewById<ImageButton>(R.id.graph_button) - val settingButton = requireActivity().findViewById<ImageButton>(R.id.setting_button) - val scanButton = requireActivity().findViewById<ImageButton>(R.id.scan_button) - val animation = AnimationUtils.loadAnimation(requireContext(), R.anim.rotate_270_deg) - - transactionButton.startAnimation(animation) - graphButton.startAnimation(animation) - settingButton.startAnimation(animation) - scanButton.startAnimation(animation) - - Log.d("ORIENTATION CHANGED", "rotate 270") - - } - } } diff --git a/app/src/main/java/com/example/bondoman/LoginActivity.kt b/app/src/main/java/com/example/bondoman/LoginActivity.kt index 46560ff0b1ee0e10f6a3565a609e9f614f22602b..3b469221573494ba65b1981a9f26ebd8a5b22c7e 100644 --- a/app/src/main/java/com/example/bondoman/LoginActivity.kt +++ b/app/src/main/java/com/example/bondoman/LoginActivity.kt @@ -43,6 +43,7 @@ class LoginActivity : AppCompatActivity() { val editor = sharedPreferences.edit() editor.apply { putString("TOKEN", token) + putString("EMAIL", email) }.apply() val intent = Intent(this@LoginActivity, MainActivity::class.java) startActivity(intent) diff --git a/app/src/main/java/com/example/bondoman/SettingFragment.kt b/app/src/main/java/com/example/bondoman/SettingFragment.kt index f3858cc21959ef6ea362c6a0698b41599bdae777..9c1aa9127bf2616d62065465631ebb29686d2ea3 100644 --- a/app/src/main/java/com/example/bondoman/SettingFragment.kt +++ b/app/src/main/java/com/example/bondoman/SettingFragment.kt @@ -1,6 +1,7 @@ package com.example.bondoman import android.app.AlertDialog import android.content.ActivityNotFoundException +import android.content.Context import android.content.Context.MODE_PRIVATE import android.content.Intent import android.graphics.Color @@ -21,6 +22,9 @@ import com.example.bondoman.helper.Xls import com.example.bondoman.models.SqlTransaction import com.example.bondoman.retrofit.data.TransactionDB import com.example.bondoman.services.RandomizeTransaction +import java.text.SimpleDateFormat +import java.util.Date +import java.util.Locale import kotlin.random.Random class SettingFragment: Fragment() { @@ -89,14 +93,21 @@ class SettingFragment: Fragment() { } private fun sendEmail() { + val sharedPreferences = + requireActivity().getSharedPreferences( + "sharedPrefs", + Context.MODE_PRIVATE + ) + val email = sharedPreferences.getString("EMAIL", "") ?: "" + // Create an intent to send an email val intent = Intent(Intent.ACTION_SEND) intent.type = "message/rfc822" // Email MIME type - + val currentDate = SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()).format(Date()) // Fill in the email details (optional) - intent.putExtra(Intent.EXTRA_EMAIL, arrayOf("bintanghijriawan433@gmail.com")) - intent.putExtra(Intent.EXTRA_SUBJECT, "Subject") - intent.putExtra(Intent.EXTRA_TEXT, "Body of the email") + intent.putExtra(Intent.EXTRA_EMAIL, arrayOf(email)) + intent.putExtra(Intent.EXTRA_SUBJECT, "Daftar Transaksi") + intent.putExtra(Intent.EXTRA_TEXT, "Daftar Transaksi $currentDate") try { // Start the email activity diff --git a/app/src/main/java/com/example/bondoman/TransactionFragment.kt b/app/src/main/java/com/example/bondoman/TransactionFragment.kt index 32c455c45274ec818519807b0bd4d4933dce18d5..d4b76b3242da331559a036d889db1d29354c430c 100644 --- a/app/src/main/java/com/example/bondoman/TransactionFragment.kt +++ b/app/src/main/java/com/example/bondoman/TransactionFragment.kt @@ -63,8 +63,6 @@ class TransactionFragment : Fragment() { graphButton.isSelected = false settingButton.isSelected = false - - return binding.root } @@ -72,18 +70,6 @@ class TransactionFragment : Fragment() { super.onViewCreated(view, savedInstanceState) adapter = TransactionAdapter(listTransaction) - - transactionData = binding.itemTransaction - transactionData.adapter = adapter - transactionData.layoutManager = - LinearLayoutManager(requireContext(), RecyclerView.VERTICAL, false) - transactionData.addItemDecoration( - DividerItemDecoration( - requireContext(), - RecyclerView.VERTICAL - ) - ) - db = ViewModelProvider(requireActivity())[DBViewModel::class.java] Log.d("PENDING LIST NOT EMPTY?", pendingTransaction.isNotEmpty().toString()) @@ -97,6 +83,16 @@ class TransactionFragment : Fragment() { } pendingTransaction.clear() } + transactionData = binding.itemTransaction + transactionData.adapter = adapter + transactionData.layoutManager = + LinearLayoutManager(requireContext(), RecyclerView.VERTICAL, false) + transactionData.addItemDecoration( + DividerItemDecoration( + requireContext(), + RecyclerView.VERTICAL + ) + ) binding.addButton.setOnClickListener { val intent = Intent(requireContext(), ContainerActivity::class.java) diff --git a/app/src/main/java/com/example/bondoman/models/GraphData.kt b/app/src/main/java/com/example/bondoman/models/GraphData.kt new file mode 100644 index 0000000000000000000000000000000000000000..c3d7fd06fc8482acd1c8fe305c93bf00c6fe17a1 --- /dev/null +++ b/app/src/main/java/com/example/bondoman/models/GraphData.kt @@ -0,0 +1,9 @@ +package com.example.bondoman.models + +import androidx.room.ColumnInfo +import com.example.bondoman.retrofit.data.entity.Category + +data class GraphData( + @ColumnInfo(name = "category") val category: String?, + @ColumnInfo(name = "amount") val amount: Double? +) diff --git a/app/src/main/java/com/example/bondoman/retrofit/data/dao/TransactionDao.kt b/app/src/main/java/com/example/bondoman/retrofit/data/dao/TransactionDao.kt index 8f93301768d951c03f872de36169dc31674d6363..55304ec05c3b776723ad4a0340f3dae3768ce9c7 100644 --- a/app/src/main/java/com/example/bondoman/retrofit/data/dao/TransactionDao.kt +++ b/app/src/main/java/com/example/bondoman/retrofit/data/dao/TransactionDao.kt @@ -5,6 +5,7 @@ import androidx.room.Delete import androidx.room.Insert import androidx.room.Query import androidx.room.Update +import com.example.bondoman.models.GraphData import com.example.bondoman.retrofit.data.entity.TransactionEntity @Dao @@ -30,4 +31,6 @@ interface TransactionDao { @Query("SELECT * FROM transactionentity WHERE id = :id") fun getId(id: Int): TransactionEntity + @Query("SELECT 'kategori_transaksi' as 'category', 'nominal_transaksi' as 'amount' FROM transactionentity GROUP BY 'kategori_transaksi'") + fun sumPriceByCategory(): List<GraphData> } \ No newline at end of file