diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 497e69a30d2e3148e20ee25c48d931ee8caeb56e..d73827b90f37a8647c087fb2ac478c2aab77a0e6 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -24,6 +24,9 @@ <activity android:name=".AddTransactionActivity" android:exported="false"/> + <activity + android:name=".EditTransactionActivity" + android:exported="false"/> </application> </manifest> \ No newline at end of file diff --git a/app/src/main/java/com/onionsquad/bondoman/EditTransactionActivity.kt b/app/src/main/java/com/onionsquad/bondoman/EditTransactionActivity.kt new file mode 100644 index 0000000000000000000000000000000000000000..5606ede65b8da631bc51b5024b1e7c5ff9ef8537 --- /dev/null +++ b/app/src/main/java/com/onionsquad/bondoman/EditTransactionActivity.kt @@ -0,0 +1,79 @@ +package com.onionsquad.bondoman + +import android.content.Intent +import android.os.Bundle +import androidx.appcompat.app.AppCompatActivity +import androidx.lifecycle.ViewModelProvider +import com.onionsquad.bondoman.databinding.ActivityEditTransactionBinding +import com.onionsquad.bondoman.repository.TransactionRepository +import com.onionsquad.bondoman.room.TransactionCategory +import com.onionsquad.bondoman.room.TransactionDatabase +import com.onionsquad.bondoman.room.TransactionEntity +import com.onionsquad.bondoman.ui.transaction.TransactionViewModel +import com.onionsquad.bondoman.ui.transaction.TransactionViewModelFactory +import java.util.Date + +class EditTransactionActivity : AppCompatActivity() { + private lateinit var binding: ActivityEditTransactionBinding + private val database by lazy { TransactionDatabase.getInstance(this) } + private val repository by lazy { TransactionRepository(database.transactionDao()) } + private lateinit var viewModel: TransactionViewModel + + private var transactionId: Int = -1 + private var transactionDate: Date = Date() + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + binding = ActivityEditTransactionBinding.inflate(layoutInflater) + setContentView(binding.root) + + val factory = TransactionViewModelFactory(repository) + viewModel = ViewModelProvider(this, factory)[TransactionViewModel::class.java] + + transactionId = intent.getIntExtra("transactionId", -1) + if (transactionId != -1) { + viewModel.getTransactionById(transactionId).observe(this) { transaction -> + if (transaction != null) { + binding.titleEditText.setText(transaction.title) + binding.amountEditText.setText(transaction.amount.toString()) + when (transaction.category) { + TransactionCategory.INCOME -> binding.incomeRadioButton.isChecked = true + TransactionCategory.OUTCOME -> binding.outcomeRadioButton.isChecked = true + else -> { + + } + } + binding.locationEditText.setText(transaction.location) + transactionDate = transaction.date + } + } + } + + binding.saveButton.setOnClickListener { + val title = binding.titleEditText.text.toString() + val amount = binding.amountEditText.text.toString().toDoubleOrNull() ?: 0.0 + val selectedCategoryId = binding.categoryRadioGroup.checkedRadioButtonId + val category = when (selectedCategoryId) { + R.id.incomeRadioButton -> TransactionCategory.INCOME + R.id.outcomeRadioButton -> TransactionCategory.OUTCOME + else -> TransactionCategory.OUTCOME + } + val location = binding.locationEditText.text.toString() + + val updatedTransaction = TransactionEntity( + id = transactionId, + title = title, + amount = amount, + category = category, + date = transactionDate, + location = location + ) + + viewModel.updateTransaction(updatedTransaction) + + Intent(this@EditTransactionActivity, MainActivity::class.java).also { + startActivity(it) + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/onionsquad/bondoman/repository/TransactionRepository.kt b/app/src/main/java/com/onionsquad/bondoman/repository/TransactionRepository.kt index 6d31c4ab7d591d2cb2a82a8c5af4fcd690fbeee8..f284dfb547caa702a574fab60db157775cb6c4f9 100644 --- a/app/src/main/java/com/onionsquad/bondoman/repository/TransactionRepository.kt +++ b/app/src/main/java/com/onionsquad/bondoman/repository/TransactionRepository.kt @@ -17,4 +17,8 @@ class TransactionRepository(private val transactionDao: TransactionDao) { suspend fun deleteTransaction(transaction: TransactionEntity) { transactionDao.deleteTransaction(transaction) } + + fun getTransactionById(id: Int): LiveData<TransactionEntity> { + return transactionDao.getTransactionById(id) + } } \ No newline at end of file diff --git a/app/src/main/java/com/onionsquad/bondoman/room/TransactionDao.kt b/app/src/main/java/com/onionsquad/bondoman/room/TransactionDao.kt index 35e64cc4e012610fb9739a15fc9e6a5132680f45..5eeeedb3bfe998598bd1cf3d29b2171e661ee551 100644 --- a/app/src/main/java/com/onionsquad/bondoman/room/TransactionDao.kt +++ b/app/src/main/java/com/onionsquad/bondoman/room/TransactionDao.kt @@ -16,4 +16,7 @@ interface TransactionDao { @Delete suspend fun deleteTransaction(transaction: TransactionEntity) + + @Query("SELECT * FROM transactions WHERE id = :id") + fun getTransactionById(id: Int): LiveData<TransactionEntity> } \ No newline at end of file diff --git a/app/src/main/java/com/onionsquad/bondoman/ui/transaction/TransactionAdapter.kt b/app/src/main/java/com/onionsquad/bondoman/ui/transaction/TransactionAdapter.kt index 11d9bfd2ba181b7c590583959b7eafd6a14f76aa..b39a926ac4c347ae5a3e08f8d1763d99622c9af9 100644 --- a/app/src/main/java/com/onionsquad/bondoman/ui/transaction/TransactionAdapter.kt +++ b/app/src/main/java/com/onionsquad/bondoman/ui/transaction/TransactionAdapter.kt @@ -1,8 +1,10 @@ package com.onionsquad.bondoman.ui.transaction +import android.content.Intent import android.view.LayoutInflater import android.view.ViewGroup import androidx.recyclerview.widget.RecyclerView +import com.onionsquad.bondoman.EditTransactionActivity import com.onionsquad.bondoman.databinding.TransactionCardBinding import com.onionsquad.bondoman.room.TransactionEntity @@ -14,7 +16,7 @@ class TransactionAdapter( inner class ViewHolder(private val binding: TransactionCardBinding) : RecyclerView.ViewHolder(binding.root) { fun bind(transaction: TransactionEntity) { binding.titleTextView.text = transaction.title - binding.amountTextView.text = transaction.amount.toString() + binding.amountTextView.text = "IDR ".plus(transaction.amount) binding.categoryTextView.text = transaction.category.toString() binding.dateTextView.text = transaction.date.toString() binding.locationTextView.text = transaction.location @@ -22,6 +24,11 @@ class TransactionAdapter( binding.deleteButton.setOnClickListener { viewModel.deleteTransaction(transaction) } + binding.editButton.setOnClickListener { + val intent = Intent(binding.root.context, EditTransactionActivity::class.java) + intent.putExtra("transactionId", transaction.id) + binding.root.context.startActivity(intent) + } } } diff --git a/app/src/main/java/com/onionsquad/bondoman/ui/transaction/TransactionViewModel.kt b/app/src/main/java/com/onionsquad/bondoman/ui/transaction/TransactionViewModel.kt index cf96283f3289be47bfd3205f7e6faa0ac4467748..e34a11eb51d9dcf434b68e8089586dab0911a7a2 100644 --- a/app/src/main/java/com/onionsquad/bondoman/ui/transaction/TransactionViewModel.kt +++ b/app/src/main/java/com/onionsquad/bondoman/ui/transaction/TransactionViewModel.kt @@ -21,4 +21,8 @@ class TransactionViewModel(private val repository : TransactionRepository) : Vie fun deleteTransaction(transaction: TransactionEntity) = viewModelScope.launch { repository.deleteTransaction(transaction) } + + fun getTransactionById(id: Int): LiveData<TransactionEntity> { + return repository.getTransactionById(id) + } } \ No newline at end of file diff --git a/app/src/main/res/layout/activity_edit_transaction.xml b/app/src/main/res/layout/activity_edit_transaction.xml new file mode 100644 index 0000000000000000000000000000000000000000..8b23b5075a31acd86cc49cdd54a73576f5b219d7 --- /dev/null +++ b/app/src/main/res/layout/activity_edit_transaction.xml @@ -0,0 +1,66 @@ +<?xml version="1.0" encoding="utf-8"?> +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:orientation="vertical" + android:padding="16dp"> + + <TextView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="Edit Transaksi" + android:textSize="24sp" + android:textStyle="bold" /> + + <EditText + android:id="@+id/titleEditText" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="16dp" + android:hint="Judul" + android:inputType="text" /> + + <EditText + android:id="@+id/amountEditText" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="8dp" + android:hint="Nominal" + android:inputType="numberDecimal" /> + + <RadioGroup + android:id="@+id/categoryRadioGroup" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="8dp" + android:orientation="horizontal"> + + <RadioButton + android:id="@+id/incomeRadioButton" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="Pemasukan" /> + + <RadioButton + android:id="@+id/outcomeRadioButton" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="Pengeluaran" /> + </RadioGroup> + + <EditText + android:id="@+id/locationEditText" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="8dp" + android:hint="Lokasi" + android:inputType="text" /> + + <Button + android:id="@+id/saveButton" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="16dp" + android:text="Simpan" /> + +</LinearLayout> \ No newline at end of file