diff --git a/.idea/deploymentTargetDropDown.xml b/.idea/deploymentTargetDropDown.xml index b76d5a83504101aa827bf32bbcc5698b6603e58e..ab0d76e2e7db4d51742f98872c75074a8f72c796 100644 --- a/.idea/deploymentTargetDropDown.xml +++ b/.idea/deploymentTargetDropDown.xml @@ -10,12 +10,12 @@ <deviceKey> <Key> <type value="VIRTUAL_DEVICE_PATH" /> - <value value="C:\Users\Rayhan Hanif\.android\avd\Pixel_3a_API_34_extension_level_7_x86_64.avd" /> + <value value="C:\Users\Rayhan Hanif\.android\avd\Pixel_5_API_31.avd" /> </Key> </deviceKey> </Target> </targetSelectedWithDropDown> - <timeTargetWasSelectedWithDropDown value="2024-03-30T21:41:20.342716200Z" /> + <timeTargetWasSelectedWithDropDown value="2024-03-31T15:18:38.036207900Z" /> </State> </entry> </value> diff --git a/app/src/main/java/com/example/bondoyap/ui/transactions/EditTransactionsFragment.kt b/app/src/main/java/com/example/bondoyap/ui/transactions/EditTransactionsFragment.kt index 5a438050f5086e0f17af9662e6823e50612f6d9b..9ca1bc7c70e3a2fc21a5fdc169fc8c62b9e80476 100644 --- a/app/src/main/java/com/example/bondoyap/ui/transactions/EditTransactionsFragment.kt +++ b/app/src/main/java/com/example/bondoyap/ui/transactions/EditTransactionsFragment.kt @@ -2,14 +2,21 @@ package com.example.bondoyap.ui.transactions import android.R import android.os.Bundle +import android.text.Editable +import android.text.Spannable +import android.text.SpannableStringBuilder import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.ArrayAdapter import androidx.fragment.app.Fragment import androidx.fragment.app.viewModels +import androidx.navigation.fragment.findNavController import com.example.bondoyap.databinding.FragmentAddTransactionsBinding import com.example.bondoyap.databinding.FragmentEditTransactionsBinding +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers.Main +import kotlinx.coroutines.launch class EditTransactionsFragment : Fragment() { @@ -39,7 +46,22 @@ class EditTransactionsFragment : Fragment() { adapter.setDropDownViewResource(R.layout.simple_spinner_dropdown_item) binding.spinnerKategori.adapter = adapter + val transactionId: Int = arguments?.getInt("transaction_id") ?: -1 + CoroutineScope(Main).launch { + + val originalTransaction: Transactions = transactionsViewModel.get(transactionId) + + binding.editTextJudul.text = SpannableStringBuilder(originalTransaction.judul) + binding.editTextNominal.text = SpannableStringBuilder(originalTransaction.nominal.toString()) + + if (originalTransaction.isPemasukan) { + binding.spinnerKategori.setSelection(categories.indexOf(pemasukan)) + } else { + binding.spinnerKategori.setSelection(categories.indexOf(pengeluaran)) + } + + } binding.buttonSimpan.setOnClickListener { val isPemasukan: Boolean = when (binding.spinnerKategori.selectedItem.toString()) { @@ -50,14 +72,38 @@ class EditTransactionsFragment : Fragment() { val transaction: Transactions = Transactions( judul = binding.editTextJudul.text.toString(), nominal = binding.editTextNominal.text.toString().toDouble(), - isPemasukan = isPemasukan + isPemasukan = isPemasukan, + id = transactionId ) transactionsViewModel.upsert(transaction) - binding.editTextJudul.text.clear() - binding.editTextNominal.text.clear() - binding.spinnerKategori.setSelection(0) + binding.editTextJudul.text = SpannableStringBuilder(transaction.judul) + binding.editTextNominal.text = SpannableStringBuilder(transaction.nominal.toString()) + + if (transaction.isPemasukan) { + binding.spinnerKategori.setSelection(categories.indexOf(pemasukan)) + } else { + binding.spinnerKategori.setSelection(categories.indexOf(pengeluaran)) + } + } + + binding.buttonHapus.setOnClickListener { + val isPemasukan: Boolean = when (binding.spinnerKategori.selectedItem.toString()) { + pemasukan -> true + else -> false + } + + val transaction: Transactions = Transactions( + judul = binding.editTextJudul.text.toString(), + nominal = binding.editTextNominal.text.toString().toDouble(), + isPemasukan = isPemasukan, + id = transactionId + ) + + transactionsViewModel.delete(transaction) + + findNavController().navigate(com.example.bondoyap.R.id.navigation_transactions) } return binding.root diff --git a/app/src/main/java/com/example/bondoyap/ui/transactions/TransactionsDao.kt b/app/src/main/java/com/example/bondoyap/ui/transactions/TransactionsDao.kt index 253af5c2458a627a2b7ec985f305ff313dd2b0c2..9d808a52834fa7b7c3d032707694ee4cc8de1a53 100644 --- a/app/src/main/java/com/example/bondoyap/ui/transactions/TransactionsDao.kt +++ b/app/src/main/java/com/example/bondoyap/ui/transactions/TransactionsDao.kt @@ -20,5 +20,5 @@ interface TransactionsDao { fun getTransactions(): Flow<List<Transactions>> @Query("SELECT * FROM transactions WHERE transactions.id == :transactionsId") - fun getTransactionById(transactionsId: Int): Transactions + suspend fun getTransactionById(transactionsId: Int?): Transactions } \ No newline at end of file diff --git a/app/src/main/java/com/example/bondoyap/ui/transactions/TransactionsListAdapter.kt b/app/src/main/java/com/example/bondoyap/ui/transactions/TransactionsListAdapter.kt index c19d6bd754ba08d10edabdebeb943b2f4563df5f..578a578da94a61fd696d1d43e44c14877248d406 100644 --- a/app/src/main/java/com/example/bondoyap/ui/transactions/TransactionsListAdapter.kt +++ b/app/src/main/java/com/example/bondoyap/ui/transactions/TransactionsListAdapter.kt @@ -1,5 +1,6 @@ package com.example.bondoyap.ui.transactions +import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup @@ -42,7 +43,9 @@ class TransactionsViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) } cardView.setOnClickListener { - Navigation.findNavController(itemView).navigate(R.id.navigation_edit_transactions) + val bundle: Bundle = Bundle() + bundle.putInt("transaction_id", transaction.id) + Navigation.findNavController(itemView).navigate(R.id.navigation_edit_transactions, bundle) } } diff --git a/app/src/main/java/com/example/bondoyap/ui/transactions/TransactionsRepository.kt b/app/src/main/java/com/example/bondoyap/ui/transactions/TransactionsRepository.kt index 8887f9907c46d662ead061da80996f0f9f017ad5..e5e402a75ab9fa2205f9f274c465bd7868975925 100644 --- a/app/src/main/java/com/example/bondoyap/ui/transactions/TransactionsRepository.kt +++ b/app/src/main/java/com/example/bondoyap/ui/transactions/TransactionsRepository.kt @@ -2,12 +2,22 @@ package com.example.bondoyap.ui.transactions import androidx.annotation.WorkerThread import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.firstOrNull class TransactionsRepository(private val transactionsDao: TransactionsDao) { - val allTransactions: Flow<List<Transactions>> = transactionsDao.getTransactions(); + val allTransactions: Flow<List<Transactions>> = transactionsDao.getTransactions() @WorkerThread suspend fun upsert(transactions: Transactions) { transactionsDao.upsertTransaction(transactions) } + + @WorkerThread + suspend fun delete(transactions: Transactions) { + transactionsDao.deleteTransaction(transactions) + } + + suspend fun get(transactionId: Int?): Transactions { + return transactionsDao.getTransactionById(transactionId) + } } \ No newline at end of file diff --git a/app/src/main/java/com/example/bondoyap/ui/transactions/TransactionsViewModel.kt b/app/src/main/java/com/example/bondoyap/ui/transactions/TransactionsViewModel.kt index 69022fb483328916f2c0686f2ee6a80d363a9a15..ff47645bc7e10fbd57dd6763bea0e072756dd0c7 100644 --- a/app/src/main/java/com/example/bondoyap/ui/transactions/TransactionsViewModel.kt +++ b/app/src/main/java/com/example/bondoyap/ui/transactions/TransactionsViewModel.kt @@ -8,6 +8,8 @@ import androidx.lifecycle.asLiveData import androidx.lifecycle.createSavedStateHandle import androidx.lifecycle.viewModelScope import androidx.lifecycle.viewmodel.CreationExtras +import kotlinx.coroutines.Deferred +import kotlinx.coroutines.async import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch @@ -20,6 +22,15 @@ class TransactionsViewModel( fun upsert(transactions: Transactions) = viewModelScope.launch { repository.upsert(transactions) } + fun delete(transactions: Transactions) = viewModelScope.launch { + repository.delete(transactions) + } + suspend fun get(transactionId: Int?): Transactions { + val deferred: Deferred<Transactions> = viewModelScope.async { + repository.get(transactionId) + } + return deferred.await() + } } class TransactionsViewModelFactory(private val repository: TransactionsRepository): ViewModelProvider.Factory {