Disabled transaction type delete if used

dev
Laurent 7 years ago
parent 2344f4dc9f
commit 8ffa72d0f4
  1. 5
      app/src/main/java/net/pokeranalytics/android/model/realm/TransactionType.kt
  2. 15
      app/src/main/java/net/pokeranalytics/android/ui/activity/SessionActivity.kt
  3. 4
      app/src/main/java/net/pokeranalytics/android/ui/activity/components/Codes.kt
  4. 23
      app/src/main/java/net/pokeranalytics/android/ui/fragment/FeedFragment.kt
  5. 5
      app/src/main/java/net/pokeranalytics/android/ui/fragment/data/TransactionTypeDataFragment.kt
  6. 1
      app/src/main/res/values/strings.xml

@ -96,11 +96,12 @@ open class TransactionType : RealmObject(), NameManageable, StaticRowRepresentab
} }
override fun isValidForDelete(realm: Realm): Boolean { override fun isValidForDelete(realm: Realm): Boolean {
return true return realm.where(Transaction::class.java)
.equalTo("type.id", this.id).findAll().isEmpty()
} }
override fun getFailedDeleteMessage(status: DeleteValidityStatus): Int { override fun getFailedDeleteMessage(status: DeleteValidityStatus): Int {
return R.string.relationship_error return R.string.transaction_relationship_error
} }
} }

@ -1,8 +1,10 @@
package net.pokeranalytics.android.ui.activity package net.pokeranalytics.android.ui.activity
import android.app.Activity
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.os.Bundle import android.os.Bundle
import androidx.fragment.app.Fragment
import kotlinx.android.synthetic.main.activity_session.* import kotlinx.android.synthetic.main.activity_session.*
import net.pokeranalytics.android.R import net.pokeranalytics.android.R
import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity
@ -16,6 +18,7 @@ class SessionActivity: PokerAnalyticsActivity() {
} }
companion object { companion object {
fun newInstance(context: Context, isTournament: Boolean? = false, sessionId: String? = "") { fun newInstance(context: Context, isTournament: Boolean? = false, sessionId: String? = "") {
val intent = Intent(context, SessionActivity::class.java) val intent = Intent(context, SessionActivity::class.java)
isTournament?.let { isTournament?.let {
@ -27,6 +30,17 @@ class SessionActivity: PokerAnalyticsActivity() {
context.startActivity(intent) context.startActivity(intent)
} }
fun newInstanceforResult(fragment: Fragment, isTournament: Boolean? = false, sessionId: String? = "", requestCode: Int) {
val intent = Intent(fragment.requireContext(), SessionActivity::class.java)
isTournament?.let {
intent.putExtra(IntentKey.IS_TOURNAMENT.keyName, isTournament)
}
sessionId?.let {
intent.putExtra(IntentKey.SESSION_ID.keyName, sessionId)
}
fragment.startActivityForResult(intent, requestCode)
}
} }
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
@ -37,6 +51,7 @@ class SessionActivity: PokerAnalyticsActivity() {
} }
override fun onBackPressed() { override fun onBackPressed() {
setResult(Activity.RESULT_OK)
super.onBackPressed() super.onBackPressed()
(sessionFragment as SessionFragment).onBackPressed() (sessionFragment as SessionFragment).onBackPressed()
} }

@ -2,7 +2,9 @@ package net.pokeranalytics.android.ui.activity.components
enum class RequestCode(var value: Int) { enum class RequestCode(var value: Int) {
DEFAULT(1), DEFAULT(1),
NEW_REPORT(800), NEW_SESSION(800),
NEW_TRANSACTION(801),
NEW_REPORT(802),
IMPORT(900) IMPORT(900)
} }

@ -23,6 +23,7 @@ import net.pokeranalytics.android.model.realm.Filter
import net.pokeranalytics.android.model.realm.Session import net.pokeranalytics.android.model.realm.Session
import net.pokeranalytics.android.model.realm.Transaction import net.pokeranalytics.android.model.realm.Transaction
import net.pokeranalytics.android.ui.activity.* import net.pokeranalytics.android.ui.activity.*
import net.pokeranalytics.android.ui.activity.components.RequestCode
import net.pokeranalytics.android.ui.adapter.FeedSessionRowRepresentableAdapter import net.pokeranalytics.android.ui.adapter.FeedSessionRowRepresentableAdapter
import net.pokeranalytics.android.ui.adapter.FeedTransactionRowRepresentableAdapter import net.pokeranalytics.android.ui.adapter.FeedTransactionRowRepresentableAdapter
import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate
@ -38,6 +39,11 @@ import java.util.*
class FeedFragment : FilterableFragment(), RowRepresentableDelegate { class FeedFragment : FilterableFragment(), RowRepresentableDelegate {
private enum class Tab {
SESSIONS,
TRANSACTIONS
}
companion object { companion object {
const val REQUEST_CODE_MENU = 100 const val REQUEST_CODE_MENU = 100
@ -107,6 +113,10 @@ class FeedFragment : FilterableFragment(), RowRepresentableDelegate {
data?.let { data?.let {
this.saveFilter(this.requireContext(), it.getStringExtra(FiltersActivity.IntentKey.FILTER_ID.keyName)) this.saveFilter(this.requireContext(), it.getStringExtra(FiltersActivity.IntentKey.FILTER_ID.keyName))
} }
} else if (requestCode == RequestCode.NEW_TRANSACTION.value && resultCode == RESULT_OK) {
this.selectTab(Tab.TRANSACTIONS)
} else if (requestCode == RequestCode.NEW_SESSION.value && resultCode == RESULT_OK) {
this.selectTab(Tab.SESSIONS)
} }
} }
@ -276,7 +286,7 @@ class FeedFragment : FilterableFragment(), RowRepresentableDelegate {
return return
} }
SessionActivity.newInstance(requireContext(), isTournament) SessionActivity.newInstanceforResult(this, isTournament, requestCode = RequestCode.NEW_SESSION.value)
newSessionCreated = true newSessionCreated = true
} }
@ -289,8 +299,9 @@ class FeedFragment : FilterableFragment(), RowRepresentableDelegate {
this.showEndOfBetaMessage() this.showEndOfBetaMessage()
return return
} }
EditableDataActivity.newInstanceForResult(this, LiveData.TRANSACTION, null, RequestCode.NEW_TRANSACTION.value)
EditableDataActivity.newInstance(requireContext(), LiveData.TRANSACTION.ordinal) // EditableDataActivity.newInstance(requireContext(), LiveData.TRANSACTION.ordinal)
} }
/** /**
@ -329,11 +340,11 @@ class FeedFragment : FilterableFragment(), RowRepresentableDelegate {
when (it.filterableType) { when (it.filterableType) {
FilterableType.SESSION -> { FilterableType.SESSION -> {
recyclerView.adapter = feedSessionAdapter recyclerView.adapter = feedSessionAdapter
tabs.getTabAt(0)?.select() this.selectTab(Tab.SESSIONS)
} }
FilterableType.TRANSACTION -> { FilterableType.TRANSACTION -> {
recyclerView.adapter = feedTransactionAdapter recyclerView.adapter = feedTransactionAdapter
tabs.getTabAt(1)?.select() this.selectTab(Tab.TRANSACTIONS)
} }
else -> { else -> {
} }
@ -359,4 +370,8 @@ class FeedFragment : FilterableFragment(), RowRepresentableDelegate {
} }
} }
private fun selectTab(tab: Tab) {
this.tabs.getTabAt(tab.ordinal)?.select()
}
} }

@ -54,10 +54,7 @@ class TransactionTypeDataFragment : EditableDataFragment(), RowRepresentableData
override fun isEnabled(row: RowRepresentable): Boolean { override fun isEnabled(row: RowRepresentable): Boolean {
return when (row) { return when (row) {
TransactionTypeRow.TRANSACTION_ADDITIVE -> { TransactionTypeRow.TRANSACTION_ADDITIVE -> {
val realm = getRealm() return this.transactionType.isValidForDelete(getRealm())
val useCount = realm.where(Transaction::class.java)
.equalTo("type.id", this.transactionType.id).findAll().size
return useCount == 0
} }
else -> super.isEnabled(row) else -> super.isEnabled(row)
} }

@ -36,6 +36,7 @@
<string name="comparison_chart">Comparison chart</string> <string name="comparison_chart">Comparison chart</string>
<string name="filter_currently_selected">The filter cannot be deleted because it is currently selected.</string> <string name="filter_currently_selected">The filter cannot be deleted because it is currently selected.</string>
<string name="custom_field">Custom field</string> <string name="custom_field">Custom field</string>
<string name="transaction_relationship_error">The item is used in one or more transactions&#8230;Please delete the linked transactions first</string>
<string name="address">Address</string> <string name="address">Address</string>
<string name="suggestions">Naming suggestions</string> <string name="suggestions">Naming suggestions</string>

Loading…
Cancel
Save