diff --git a/app/src/main/java/com/example/bondoman/models/TransactionViewModel.kt b/app/src/main/java/com/example/bondoman/models/TransactionViewModel.kt index 48877a4fe7a217080083d907a772cea19f460316..083618758f5e3579ebd30d6dbc3631feab164c9d 100644 --- a/app/src/main/java/com/example/bondoman/models/TransactionViewModel.kt +++ b/app/src/main/java/com/example/bondoman/models/TransactionViewModel.kt @@ -6,11 +6,17 @@ import android.util.Log.d 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 @@ -18,34 +24,19 @@ 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 kotlinx.coroutines.ExperimentalCoroutinesApi -import kotlinx.coroutines.flow.combine -import kotlinx.coroutines.flow.flatMapLatest +import com.example.bondoman.MainActivity import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.flow.collect -@OptIn(ExperimentalCoroutinesApi::class) class TransactionViewModel(private val dao : TransactionDao) : ViewModel() { private val _state = MutableStateFlow(TransactionState()) private val _transactions = MutableStateFlow(dao.observeAll() ) - val transactions = _transactions.asStateFlow() private val _sortTransactionStatsByValue = MutableStateFlow(true) - private val _transactionStats = _sortTransactionStatsByValue - .flatMapLatest { sortTransactionStatsByValue -> - when(sortTransactionStatsByValue){ - true -> dao.getTransactionStatsByValue() - false -> dao.getTransactionStatsByCount() - } - }.stateIn(viewModelScope, SharingStarted.WhileSubscribed(), emptyList()) - - // val state = _transactions.stateIn(viewModelScope, SharingStarted.WhileSubscribed(5000), TransactionState()) - val state = combine(_state,_transactions, _sortTransactionStatsByValue, _transactionStats) {state, transactions, sortTransactionStatsByValue, transactionStats -> - state.copy( - sortTransactionStatsByValue = sortTransactionStatsByValue, - transactionStats = transactionStats - )}.stateIn(viewModelScope, SharingStarted.WhileSubscribed(5000), TransactionState()) + val transactions = _transactions.asStateFlow() + val state = _transactions.stateIn(viewModelScope, SharingStarted.WhileSubscribed(5000), TransactionState()) @@ -120,10 +111,6 @@ class TransactionViewModel(private val dao : TransactionDao) : ViewModel() { } d("EVENT TRANSACTION","${_state.value.nominal.toString()}") } - - is TransactionEvent.ChangeTransactionStats -> { - _sortTransactionStatsByValue.value = event.sortTransactionStatsByValue - } } } 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 a8aef8c3a76fbde9b2fb53ee4e16499592fdb86a..a0746b398d323ac3224230f982c6cfc8b5f152d9 100644 --- a/app/src/main/java/com/example/bondoman/room/TransactionDao.kt +++ b/app/src/main/java/com/example/bondoman/room/TransactionDao.kt @@ -30,9 +30,6 @@ interface TransactionDao { suspend fun deleteAll() @Query("SELECT kategori, SUM(nominal) AS total FROM `transaction` GROUP BY kategori") - suspend fun getTransactionStatsByValue(): Flow<List<TransactionStats>> - - @Query("SELECT kategori, COUNT(id) AS total FROM `transaction` GROUP BY kategori") - suspend fun getTransactionStatsByCount(): Flow<List<TransactionStats>> + fun getTransactionStats(): Flow<List<TransactionStats>> } \ No newline at end of file diff --git a/app/src/main/java/com/example/bondoman/services/TransactionEvent.kt b/app/src/main/java/com/example/bondoman/services/TransactionEvent.kt index c9af7bae6113fe9c5554e2d424265ecbda3eb6e6..f11901724afaaefaaa9715ce2d1102243d1d3616 100644 --- a/app/src/main/java/com/example/bondoman/services/TransactionEvent.kt +++ b/app/src/main/java/com/example/bondoman/services/TransactionEvent.kt @@ -11,5 +11,4 @@ sealed interface TransactionEvent { data class SetNominal(val Nominal: BigDecimal) : TransactionEvent data class SetKategori(val Kategori: Category) : TransactionEvent data class SetLokasi(val Lokasi: Transaction.Position) : TransactionEvent - data class ChangeTransactionStats(val sortTransactionStatsByValue: Boolean): 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 index d9df667e20d3ceadc7dbf195bb07ff03ba52ce6d..436c94ff8edb6464b5913c566649e7c9a5b900e3 100644 --- a/app/src/main/java/com/example/bondoman/services/TransactionState.kt +++ b/app/src/main/java/com/example/bondoman/services/TransactionState.kt @@ -2,14 +2,11 @@ package com.example.bondoman.services import android.location.Location import com.example.bondoman.models.Transaction import com.example.bondoman.models.Transaction.Category -import com.example.bondoman.models.TransactionStats import java.math.BigDecimal import java.time.LocalDate data class TransactionState ( val transactions : List<Transaction> = emptyList(), - val transactionStats : List<TransactionStats> = emptyList(), - val sortTransactionStatsByValue: Boolean = true, val judul: String = "", val nominal: BigDecimal = BigDecimal(0), val kategori: Category = Category.PEMBELIAN, 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 d62f634ae64628f06e29237641daa11c843134f1..3aca81fdb757159d1048fd5c931d55b5a5d10a22 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 @@ -72,9 +72,9 @@ class ChartFragment : Fragment() { for(transaction in transactionsStats){ if(sortByValue){ - list.add(PieEntry(transaction.totalNominal, transaction.kategori)) + list.add(PieEntry(transaction.total, transaction.kategori)) } else { - list.add(PieEntry(transaction.count.toFloat(), transaction.kategori)) + list.add(PieEntry(transaction.total, transaction.kategori)) } } @@ -97,11 +97,11 @@ class ChartFragment : Fragment() { fun initDummy(){ transactionsStats.add( - TransactionStats(kategori = Transaction.Category.PEMBELIAN, count = 10, totalNominal = 10000f) + TransactionStats(kategori = Transaction.Category.PEMBELIAN, total = 6868f) ) transactionsStats.add( - TransactionStats(kategori = Transaction.Category.PENJUALAN, count = 89, totalNominal = 800123f) + TransactionStats(kategori = Transaction.Category.PENJUALAN, total = 7878f) ) } } \ No newline at end of file