From 883b10e302cdc492e91ee0661c1c6fca029b607a Mon Sep 17 00:00:00 2001 From: Laurent Date: Tue, 23 Apr 2019 14:16:55 +0200 Subject: [PATCH] Add initial value to Bankroll --- .../calculus/bankroll/BankrollCalculator.kt | 7 ++- .../calculus/bankroll/BankrollReport.kt | 13 ++++- .../migrations/PokerAnalyticsMigration.kt | 4 ++ .../android/model/realm/Bankroll.kt | 54 +++---------------- .../ui/fragment/BankrollDataFragment.kt | 9 +++- .../ui/fragment/EditableDataFragment.kt | 6 --- .../ui/view/rowrepresentable/BankrollRow.kt | 11 ++++ app/src/main/res/values/strings.xml | 1 + 8 files changed, 45 insertions(+), 60 deletions(-) diff --git a/app/src/main/java/net/pokeranalytics/android/calculus/bankroll/BankrollCalculator.kt b/app/src/main/java/net/pokeranalytics/android/calculus/bankroll/BankrollCalculator.kt index facdad21..392fdf4c 100644 --- a/app/src/main/java/net/pokeranalytics/android/calculus/bankroll/BankrollCalculator.kt +++ b/app/src/main/java/net/pokeranalytics/android/calculus/bankroll/BankrollCalculator.kt @@ -5,10 +5,7 @@ import net.pokeranalytics.android.calculus.Calculator import net.pokeranalytics.android.calculus.ComputableGroup import net.pokeranalytics.android.calculus.ComputedResults import net.pokeranalytics.android.calculus.Stat -import net.pokeranalytics.android.model.realm.Filter -import net.pokeranalytics.android.model.realm.Session -import net.pokeranalytics.android.model.realm.Transaction -import net.pokeranalytics.android.model.realm.TransactionType +import net.pokeranalytics.android.model.realm.* class BankrollCalculator { @@ -19,6 +16,8 @@ class BankrollCalculator { val realm = Realm.getDefaultInstance() val report = BankrollReport(setup) + val bankrolls: List = if (setup.bankroll != null) listOf(setup.bankroll) else realm.where(Bankroll::class.java).findAll() + report.initial = bankrolls.sumByDouble { it.initialValue } val queryConditions = setup.queryConditions val transactions = Filter.queryOn(realm, queryConditions) diff --git a/app/src/main/java/net/pokeranalytics/android/calculus/bankroll/BankrollReport.kt b/app/src/main/java/net/pokeranalytics/android/calculus/bankroll/BankrollReport.kt index 8490523a..aa9eb9f2 100644 --- a/app/src/main/java/net/pokeranalytics/android/calculus/bankroll/BankrollReport.kt +++ b/app/src/main/java/net/pokeranalytics/android/calculus/bankroll/BankrollReport.kt @@ -25,13 +25,18 @@ class BankrollReport(setup: BankrollReportSetup) { var total: Double = 0.0 private set + /** + * The initial value of the bankroll, or of all bankrolls if virtual is computed + */ + var initial: Double = 0.0 + /** * The net result from poker computables */ var netResult: Double = 0.0 set(value) { field = value - total = this.netResult + this.transactionsNet + this.computeBankrollTotal() } /** @@ -40,9 +45,13 @@ class BankrollReport(setup: BankrollReportSetup) { var transactionsNet: Double = 0.0 set(value) { field = value - total = this.netResult + this.transactionsNet + this.computeBankrollTotal() } + fun computeBankrollTotal() { + this.total = this.initial + this.netResult + this.transactionsNet + } + /** * The sum of all deposits */ diff --git a/app/src/main/java/net/pokeranalytics/android/model/migrations/PokerAnalyticsMigration.kt b/app/src/main/java/net/pokeranalytics/android/model/migrations/PokerAnalyticsMigration.kt index 3ea96ad8..c3905e00 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/migrations/PokerAnalyticsMigration.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/migrations/PokerAnalyticsMigration.kt @@ -64,6 +64,10 @@ class PokerAnalyticsMigration : RealmMigration { it.removeField("sessionSet") } + schema.get("Bankroll")?.let { + it.addField("initialValue", Double::class.java).setRequired("initialValue", true) + } + currentVersion++ } diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/Bankroll.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/Bankroll.kt index 264400fd..8dc58731 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/Bankroll.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/Bankroll.kt @@ -8,29 +8,12 @@ import io.realm.kotlin.where import net.pokeranalytics.android.R import net.pokeranalytics.android.model.interfaces.NameManageable import net.pokeranalytics.android.model.interfaces.SaveValidityStatus -import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource import net.pokeranalytics.android.ui.view.RowRepresentable -import net.pokeranalytics.android.ui.view.RowRepresentableEditDescriptor -import net.pokeranalytics.android.ui.view.RowViewType import net.pokeranalytics.android.ui.view.rowrepresentable.BankrollRow -import net.pokeranalytics.android.ui.view.rowrepresentable.CustomizableRowRepresentable import net.pokeranalytics.android.ui.view.rowrepresentable.SimpleRow -import net.pokeranalytics.android.util.NULL_TEXT import java.util.* -import kotlin.collections.ArrayList -open class Bankroll() : RealmObject(), NameManageable, StaticRowRepresentableDataSource, RowRepresentable { - - companion object { - val rowRepresentation : List by lazy { - val rows = ArrayList() - rows.add(SimpleRow.NAME) - rows.add(BankrollRow.LIVE) - rows.add(CustomizableRowRepresentable(customViewType = RowViewType.HEADER_TITLE, resId = R.string.currency)) - rows.add(BankrollRow.CURRENCY) - rows - } - } +open class Bankroll() : RealmObject(), NameManageable, RowRepresentable { @PrimaryKey override var id = UUID.randomUUID().toString() @@ -46,44 +29,21 @@ open class Bankroll() : RealmObject(), NameManageable, StaticRowRepresentableDat // The currency of the bankroll var currency: Currency? = null + // The initial value of the bankroll + var initialValue: Double = 0.0 + override fun getDisplayName(): String { return this.name } - // Row Representable Datasource - override fun adapterRows(): List? { - return Bankroll.rowRepresentation - } - - override fun stringForRow(row: RowRepresentable): String { - return when (row) { - SimpleRow.NAME -> if (this.name.isNotEmpty()) this.name else NULL_TEXT - else -> return super.stringForRow(row) - } - } - - override fun boolForRow(row: RowRepresentable): Boolean { - return when (row) { - BankrollRow.LIVE -> !this.live - else -> super.boolForRow(row) - } - } - - override fun editDescriptors(row: RowRepresentable): ArrayList? { - return when (row) { - SimpleRow.NAME -> row.editingDescriptors(mapOf("defaultValue" to this.name)) - BankrollRow.RATE -> row.editingDescriptors(mapOf()) - else -> { - row.editingDescriptors(mapOf()) - } - } - } - override fun updateValue(value: Any?, row: RowRepresentable) { when (row) { SimpleRow.NAME -> this.name = value as String? ?: "" BankrollRow.LIVE -> { this.live = if (value is Boolean) !value else false + } + BankrollRow.INITIAL_VALUE -> { + this.initialValue = value as Double? ?: 0.0 } BankrollRow.CURRENCY -> { //TODO handle a use default currency option diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/BankrollDataFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/BankrollDataFragment.kt index 8079f8e9..7f15c747 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/BankrollDataFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/BankrollDataFragment.kt @@ -18,8 +18,8 @@ import net.pokeranalytics.android.ui.view.rowrepresentable.BankrollRow import net.pokeranalytics.android.ui.view.rowrepresentable.CustomizableRowRepresentable import net.pokeranalytics.android.ui.view.rowrepresentable.SimpleRow import net.pokeranalytics.android.util.NULL_TEXT -import net.pokeranalytics.android.util.Preferences import net.pokeranalytics.android.util.UserDefaults +import net.pokeranalytics.android.util.extensions.toCurrency import net.pokeranalytics.android.util.extensions.toRate import retrofit2.Call import retrofit2.Response @@ -95,6 +95,9 @@ class BankrollDataFragment : EditableDataFragment(), StaticRowRepresentableDataS NULL_TEXT } } + BankrollRow.INITIAL_VALUE -> { + this.bankroll.initialValue.toCurrency() + } BankrollRow.RATE -> { val rate = this.bankroll.currency?.rate ?: 1.0 rate.toRate() @@ -114,6 +117,9 @@ class BankrollDataFragment : EditableDataFragment(), StaticRowRepresentableDataS override fun editDescriptors(row: RowRepresentable): ArrayList? { return when (row) { SimpleRow.NAME -> row.editingDescriptors(mapOf("defaultValue" to this.bankroll.name)) + BankrollRow.INITIAL_VALUE -> { + row.editingDescriptors(mapOf("defaultValue" to this.bankroll.initialValue)) + } BankrollRow.RATE -> { val rate = this.bankroll.currency?.rate row.editingDescriptors(mapOf("defaultValue" to rate)) @@ -163,6 +169,7 @@ class BankrollDataFragment : EditableDataFragment(), StaticRowRepresentableDataS rows.clear() rows.add(SimpleRow.NAME) rows.add(BankrollRow.LIVE) + rows.add(BankrollRow.INITIAL_VALUE) rows.add(CustomizableRowRepresentable(customViewType = RowViewType.HEADER_TITLE, resId = R.string.currency)) rows.add(BankrollRow.CURRENCY) if (this.shouldShowCurrencyRate) { diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/EditableDataFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/EditableDataFragment.kt index f5d78f5a..ba10376a 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/EditableDataFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/EditableDataFragment.kt @@ -159,12 +159,6 @@ open class EditableDataFragment : PokerAnalyticsFragment(), RowRepresentableDele finishActivityWithResult(uniqueIdentifier) } -// if (managedItem is Bankroll) { -// managedItem.currency?.refreshRelatedRatedValues(it) -// } -// -// val uniqueIdentifier = (managedItem as Savable).id -// finishActivityWithResult(uniqueIdentifier) } } else -> { diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/BankrollRow.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/BankrollRow.kt index f5cfdc6a..1e3b3152 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/BankrollRow.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/BankrollRow.kt @@ -11,6 +11,7 @@ import net.pokeranalytics.android.ui.view.RowViewType enum class BankrollRow : RowRepresentable, DefaultEditDataSource { LIVE, + INITIAL_VALUE, CURRENCY, RATE, REFRESH_RATE; @@ -19,6 +20,7 @@ enum class BankrollRow : RowRepresentable, DefaultEditDataSource { get() { return when (this) { LIVE -> R.string.online + INITIAL_VALUE -> R.string.initial_value CURRENCY -> R.string.currency RATE -> R.string.rate REFRESH_RATE -> R.string.refresh_rate @@ -29,6 +31,7 @@ enum class BankrollRow : RowRepresentable, DefaultEditDataSource { get() { return when (this) { LIVE -> RowViewType.TITLE_SWITCH.ordinal + INITIAL_VALUE -> RowViewType.TITLE_VALUE.ordinal CURRENCY -> RowViewType.TITLE_VALUE_ARROW.ordinal RATE -> RowViewType.TITLE_VALUE.ordinal REFRESH_RATE -> RowViewType.ROW_BUTTON.ordinal @@ -39,6 +42,7 @@ enum class BankrollRow : RowRepresentable, DefaultEditDataSource { get() { return when (this) { LIVE -> BottomSheetType.NONE + INITIAL_VALUE -> BottomSheetType.NUMERIC_TEXT CURRENCY -> BottomSheetType.NONE RATE -> BottomSheetType.NUMERIC_TEXT REFRESH_RATE -> BottomSheetType.NONE @@ -47,6 +51,13 @@ enum class BankrollRow : RowRepresentable, DefaultEditDataSource { override fun editingDescriptors(map: Map): ArrayList? { return when (this) { + INITIAL_VALUE -> { + val defaultValue : Any? by map + arrayListOf( + RowRepresentableEditDescriptor(defaultValue, R.string.initial_value, InputType.TYPE_CLASS_NUMBER + or InputType.TYPE_NUMBER_FLAG_DECIMAL) + ) + } RATE -> { val defaultValue : Any? by map arrayListOf( diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index a6a2e029..1a1952fd 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -8,6 +8,7 @@ More Variant Line + Initial Value