Add initial value to Bankroll

feature/top10
Laurent 7 years ago
parent 4b9cb85fbb
commit 883b10e302
  1. 7
      app/src/main/java/net/pokeranalytics/android/calculus/bankroll/BankrollCalculator.kt
  2. 13
      app/src/main/java/net/pokeranalytics/android/calculus/bankroll/BankrollReport.kt
  3. 4
      app/src/main/java/net/pokeranalytics/android/model/migrations/PokerAnalyticsMigration.kt
  4. 54
      app/src/main/java/net/pokeranalytics/android/model/realm/Bankroll.kt
  5. 9
      app/src/main/java/net/pokeranalytics/android/ui/fragment/BankrollDataFragment.kt
  6. 6
      app/src/main/java/net/pokeranalytics/android/ui/fragment/EditableDataFragment.kt
  7. 11
      app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/BankrollRow.kt
  8. 1
      app/src/main/res/values/strings.xml

@ -5,10 +5,7 @@ import net.pokeranalytics.android.calculus.Calculator
import net.pokeranalytics.android.calculus.ComputableGroup import net.pokeranalytics.android.calculus.ComputableGroup
import net.pokeranalytics.android.calculus.ComputedResults import net.pokeranalytics.android.calculus.ComputedResults
import net.pokeranalytics.android.calculus.Stat import net.pokeranalytics.android.calculus.Stat
import net.pokeranalytics.android.model.realm.Filter import net.pokeranalytics.android.model.realm.*
import net.pokeranalytics.android.model.realm.Session
import net.pokeranalytics.android.model.realm.Transaction
import net.pokeranalytics.android.model.realm.TransactionType
class BankrollCalculator { class BankrollCalculator {
@ -19,6 +16,8 @@ class BankrollCalculator {
val realm = Realm.getDefaultInstance() val realm = Realm.getDefaultInstance()
val report = BankrollReport(setup) val report = BankrollReport(setup)
val bankrolls: List<Bankroll> = 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 queryConditions = setup.queryConditions
val transactions = Filter.queryOn<Transaction>(realm, queryConditions) val transactions = Filter.queryOn<Transaction>(realm, queryConditions)

@ -25,13 +25,18 @@ class BankrollReport(setup: BankrollReportSetup) {
var total: Double = 0.0 var total: Double = 0.0
private set 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 * The net result from poker computables
*/ */
var netResult: Double = 0.0 var netResult: Double = 0.0
set(value) { set(value) {
field = value field = value
total = this.netResult + this.transactionsNet this.computeBankrollTotal()
} }
/** /**
@ -40,9 +45,13 @@ class BankrollReport(setup: BankrollReportSetup) {
var transactionsNet: Double = 0.0 var transactionsNet: Double = 0.0
set(value) { set(value) {
field = 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 * The sum of all deposits
*/ */

@ -64,6 +64,10 @@ class PokerAnalyticsMigration : RealmMigration {
it.removeField("sessionSet") it.removeField("sessionSet")
} }
schema.get("Bankroll")?.let {
it.addField("initialValue", Double::class.java).setRequired("initialValue", true)
}
currentVersion++ currentVersion++
} }

@ -8,29 +8,12 @@ import io.realm.kotlin.where
import net.pokeranalytics.android.R import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.interfaces.NameManageable import net.pokeranalytics.android.model.interfaces.NameManageable
import net.pokeranalytics.android.model.interfaces.SaveValidityStatus 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.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.BankrollRow
import net.pokeranalytics.android.ui.view.rowrepresentable.CustomizableRowRepresentable
import net.pokeranalytics.android.ui.view.rowrepresentable.SimpleRow import net.pokeranalytics.android.ui.view.rowrepresentable.SimpleRow
import net.pokeranalytics.android.util.NULL_TEXT
import java.util.* import java.util.*
import kotlin.collections.ArrayList
open class Bankroll() : RealmObject(), NameManageable, StaticRowRepresentableDataSource, RowRepresentable { open class Bankroll() : RealmObject(), NameManageable, RowRepresentable {
companion object {
val rowRepresentation : List<RowRepresentable> by lazy {
val rows = ArrayList<RowRepresentable>()
rows.add(SimpleRow.NAME)
rows.add(BankrollRow.LIVE)
rows.add(CustomizableRowRepresentable(customViewType = RowViewType.HEADER_TITLE, resId = R.string.currency))
rows.add(BankrollRow.CURRENCY)
rows
}
}
@PrimaryKey @PrimaryKey
override var id = UUID.randomUUID().toString() override var id = UUID.randomUUID().toString()
@ -46,44 +29,21 @@ open class Bankroll() : RealmObject(), NameManageable, StaticRowRepresentableDat
// The currency of the bankroll // The currency of the bankroll
var currency: Currency? = null var currency: Currency? = null
// The initial value of the bankroll
var initialValue: Double = 0.0
override fun getDisplayName(): String { override fun getDisplayName(): String {
return this.name return this.name
} }
// Row Representable Datasource
override fun adapterRows(): List<RowRepresentable>? {
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<RowRepresentableEditDescriptor>? {
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) { override fun updateValue(value: Any?, row: RowRepresentable) {
when (row) { when (row) {
SimpleRow.NAME -> this.name = value as String? ?: "" SimpleRow.NAME -> this.name = value as String? ?: ""
BankrollRow.LIVE -> { BankrollRow.LIVE -> {
this.live = if (value is Boolean) !value else false this.live = if (value is Boolean) !value else false
}
BankrollRow.INITIAL_VALUE -> {
this.initialValue = value as Double? ?: 0.0
} }
BankrollRow.CURRENCY -> { BankrollRow.CURRENCY -> {
//TODO handle a use default currency option //TODO handle a use default currency option

@ -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.CustomizableRowRepresentable
import net.pokeranalytics.android.ui.view.rowrepresentable.SimpleRow import net.pokeranalytics.android.ui.view.rowrepresentable.SimpleRow
import net.pokeranalytics.android.util.NULL_TEXT import net.pokeranalytics.android.util.NULL_TEXT
import net.pokeranalytics.android.util.Preferences
import net.pokeranalytics.android.util.UserDefaults import net.pokeranalytics.android.util.UserDefaults
import net.pokeranalytics.android.util.extensions.toCurrency
import net.pokeranalytics.android.util.extensions.toRate import net.pokeranalytics.android.util.extensions.toRate
import retrofit2.Call import retrofit2.Call
import retrofit2.Response import retrofit2.Response
@ -95,6 +95,9 @@ class BankrollDataFragment : EditableDataFragment(), StaticRowRepresentableDataS
NULL_TEXT NULL_TEXT
} }
} }
BankrollRow.INITIAL_VALUE -> {
this.bankroll.initialValue.toCurrency()
}
BankrollRow.RATE -> { BankrollRow.RATE -> {
val rate = this.bankroll.currency?.rate ?: 1.0 val rate = this.bankroll.currency?.rate ?: 1.0
rate.toRate() rate.toRate()
@ -114,6 +117,9 @@ class BankrollDataFragment : EditableDataFragment(), StaticRowRepresentableDataS
override fun editDescriptors(row: RowRepresentable): ArrayList<RowRepresentableEditDescriptor>? { override fun editDescriptors(row: RowRepresentable): ArrayList<RowRepresentableEditDescriptor>? {
return when (row) { return when (row) {
SimpleRow.NAME -> row.editingDescriptors(mapOf("defaultValue" to this.bankroll.name)) SimpleRow.NAME -> row.editingDescriptors(mapOf("defaultValue" to this.bankroll.name))
BankrollRow.INITIAL_VALUE -> {
row.editingDescriptors(mapOf("defaultValue" to this.bankroll.initialValue))
}
BankrollRow.RATE -> { BankrollRow.RATE -> {
val rate = this.bankroll.currency?.rate val rate = this.bankroll.currency?.rate
row.editingDescriptors(mapOf("defaultValue" to rate)) row.editingDescriptors(mapOf("defaultValue" to rate))
@ -163,6 +169,7 @@ class BankrollDataFragment : EditableDataFragment(), StaticRowRepresentableDataS
rows.clear() rows.clear()
rows.add(SimpleRow.NAME) rows.add(SimpleRow.NAME)
rows.add(BankrollRow.LIVE) rows.add(BankrollRow.LIVE)
rows.add(BankrollRow.INITIAL_VALUE)
rows.add(CustomizableRowRepresentable(customViewType = RowViewType.HEADER_TITLE, resId = R.string.currency)) rows.add(CustomizableRowRepresentable(customViewType = RowViewType.HEADER_TITLE, resId = R.string.currency))
rows.add(BankrollRow.CURRENCY) rows.add(BankrollRow.CURRENCY)
if (this.shouldShowCurrencyRate) { if (this.shouldShowCurrencyRate) {

@ -159,12 +159,6 @@ open class EditableDataFragment : PokerAnalyticsFragment(), RowRepresentableDele
finishActivityWithResult(uniqueIdentifier) finishActivityWithResult(uniqueIdentifier)
} }
// if (managedItem is Bankroll) {
// managedItem.currency?.refreshRelatedRatedValues(it)
// }
//
// val uniqueIdentifier = (managedItem as Savable).id
// finishActivityWithResult(uniqueIdentifier)
} }
} }
else -> { else -> {

@ -11,6 +11,7 @@ import net.pokeranalytics.android.ui.view.RowViewType
enum class BankrollRow : RowRepresentable, DefaultEditDataSource { enum class BankrollRow : RowRepresentable, DefaultEditDataSource {
LIVE, LIVE,
INITIAL_VALUE,
CURRENCY, CURRENCY,
RATE, RATE,
REFRESH_RATE; REFRESH_RATE;
@ -19,6 +20,7 @@ enum class BankrollRow : RowRepresentable, DefaultEditDataSource {
get() { get() {
return when (this) { return when (this) {
LIVE -> R.string.online LIVE -> R.string.online
INITIAL_VALUE -> R.string.initial_value
CURRENCY -> R.string.currency CURRENCY -> R.string.currency
RATE -> R.string.rate RATE -> R.string.rate
REFRESH_RATE -> R.string.refresh_rate REFRESH_RATE -> R.string.refresh_rate
@ -29,6 +31,7 @@ enum class BankrollRow : RowRepresentable, DefaultEditDataSource {
get() { get() {
return when (this) { return when (this) {
LIVE -> RowViewType.TITLE_SWITCH.ordinal LIVE -> RowViewType.TITLE_SWITCH.ordinal
INITIAL_VALUE -> RowViewType.TITLE_VALUE.ordinal
CURRENCY -> RowViewType.TITLE_VALUE_ARROW.ordinal CURRENCY -> RowViewType.TITLE_VALUE_ARROW.ordinal
RATE -> RowViewType.TITLE_VALUE.ordinal RATE -> RowViewType.TITLE_VALUE.ordinal
REFRESH_RATE -> RowViewType.ROW_BUTTON.ordinal REFRESH_RATE -> RowViewType.ROW_BUTTON.ordinal
@ -39,6 +42,7 @@ enum class BankrollRow : RowRepresentable, DefaultEditDataSource {
get() { get() {
return when (this) { return when (this) {
LIVE -> BottomSheetType.NONE LIVE -> BottomSheetType.NONE
INITIAL_VALUE -> BottomSheetType.NUMERIC_TEXT
CURRENCY -> BottomSheetType.NONE CURRENCY -> BottomSheetType.NONE
RATE -> BottomSheetType.NUMERIC_TEXT RATE -> BottomSheetType.NUMERIC_TEXT
REFRESH_RATE -> BottomSheetType.NONE REFRESH_RATE -> BottomSheetType.NONE
@ -47,6 +51,13 @@ enum class BankrollRow : RowRepresentable, DefaultEditDataSource {
override fun editingDescriptors(map: Map<String, Any?>): ArrayList<RowRepresentableEditDescriptor>? { override fun editingDescriptors(map: Map<String, Any?>): ArrayList<RowRepresentableEditDescriptor>? {
return when (this) { 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 -> { RATE -> {
val defaultValue : Any? by map val defaultValue : Any? by map
arrayListOf( arrayListOf(

@ -8,6 +8,7 @@
<string name="more">More</string> <string name="more">More</string>
<string name="variant">Variant</string> <string name="variant">Variant</string>
<string name="line">Line</string> <string name="line">Line</string>
<string name="initial_value">Initial Value</string>
<!--<string name="session_missing_end_date">Please set the end date for the session</string>--> <!--<string name="session_missing_end_date">Please set the end date for the session</string>-->
<!--<string name="default_error_message">Sorry, something went wrong...please contact us!</string>--> <!--<string name="default_error_message">Sorry, something went wrong...please contact us!</string>-->

Loading…
Cancel
Save