|
|
|
@ -1,12 +1,109 @@ |
|
|
|
package net.pokeranalytics.android.calculus.bankroll |
|
|
|
package net.pokeranalytics.android.calculus.bankroll |
|
|
|
|
|
|
|
|
|
|
|
import net.pokeranalytics.android.calculus.interfaces.DatableValue |
|
|
|
|
|
|
|
import net.pokeranalytics.android.model.filter.QueryCondition |
|
|
|
import net.pokeranalytics.android.model.filter.QueryCondition |
|
|
|
|
|
|
|
import net.pokeranalytics.android.model.interfaces.DatedValue |
|
|
|
import net.pokeranalytics.android.model.realm.Bankroll |
|
|
|
import net.pokeranalytics.android.model.realm.Bankroll |
|
|
|
import net.pokeranalytics.android.model.realm.Transaction |
|
|
|
import net.pokeranalytics.android.model.realm.Transaction |
|
|
|
import java.util.* |
|
|
|
import java.util.* |
|
|
|
import kotlin.collections.HashMap |
|
|
|
import kotlin.collections.HashMap |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class BankrollReport(setup: BankrollReportSetup) { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
|
|
* The setup used to compute the report |
|
|
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
var setup: BankrollReportSetup = setup |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
|
|
* The value of the bankroll |
|
|
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
var total: Double = 0.0 |
|
|
|
|
|
|
|
private set |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
|
|
* The net result from poker computables |
|
|
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
var netResult: Double = 0.0 |
|
|
|
|
|
|
|
set(value) { |
|
|
|
|
|
|
|
field = value |
|
|
|
|
|
|
|
total = this.netResult + this.transactionsNet |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
|
|
* The net result from transactions |
|
|
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
var transactionsNet: Double = 0.0 |
|
|
|
|
|
|
|
set(value) { |
|
|
|
|
|
|
|
field = value |
|
|
|
|
|
|
|
total = this.netResult + this.transactionsNet |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
|
|
* The sum of all deposits |
|
|
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
var depositTotal: Double = 0.0 |
|
|
|
|
|
|
|
set(value) { |
|
|
|
|
|
|
|
field = value |
|
|
|
|
|
|
|
this.netBanked = this.depositTotal + this.withdrawalTotal |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
|
|
* The sum of all withdrawals |
|
|
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
var withdrawalTotal: Double = 0.0 |
|
|
|
|
|
|
|
set(value) { |
|
|
|
|
|
|
|
field = value |
|
|
|
|
|
|
|
this.netBanked = this.depositTotal + this.withdrawalTotal |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
|
|
* The difference between withdrawals and deposits |
|
|
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
var netBanked: Double = 0.0 |
|
|
|
|
|
|
|
private set |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
|
|
* The risk of ruin |
|
|
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
var riskOfRuin: Double? = null |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var transactions: List<Transaction> = mutableListOf() |
|
|
|
|
|
|
|
private set |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var transactionBuckets: HashMap<String, TransactionBucket> = HashMap() |
|
|
|
|
|
|
|
private set |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var evolutionPoints: MutableList<BRGraphPoint> = mutableListOf() |
|
|
|
|
|
|
|
var evolutionItems: MutableList<DatedValue> = mutableListOf() |
|
|
|
|
|
|
|
private set |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
fun addDatedItems(items: Collection<DatedValue>) { |
|
|
|
|
|
|
|
this.evolutionItems.addAll(items) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
fun addTransaction(transaction: Transaction) { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
transaction.type?.let { type -> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var bucket = this.transactionBuckets[type.id] |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (bucket == null) { |
|
|
|
|
|
|
|
val b = TransactionBucket(this.setup.bankroll == null) |
|
|
|
|
|
|
|
this.transactionBuckets[type.id] = b |
|
|
|
|
|
|
|
bucket = b |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
bucket.addTransaction(transaction) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} ?: run { |
|
|
|
|
|
|
|
throw Exception("Transaction has no type") |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
/** |
|
|
|
* A class describing the parameters required to launch a bankroll report |
|
|
|
* A class describing the parameters required to launch a bankroll report |
|
|
|
* |
|
|
|
* |
|
|
|
@ -60,72 +157,8 @@ class TransactionBucket(useRate: Boolean = false) { |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
class BRGraphPoint { |
|
|
|
data class BRGraphPoint(var value: Double = 0.0, var date: Date? = null, var data: Any? = null) { |
|
|
|
|
|
|
|
|
|
|
|
var value: Double = 0.0 |
|
|
|
|
|
|
|
var variation: Double = 0.0 |
|
|
|
var variation: Double = 0.0 |
|
|
|
var date: Date? = null |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
class BankrollReport(setup: BankrollReportSetup) { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
|
|
* The setup used to compute the report |
|
|
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
var setup: BankrollReportSetup = setup |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
|
|
* The value of the bankroll |
|
|
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
var total: Double = 0.0 |
|
|
|
|
|
|
|
private set |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
|
|
* The net result from poker computables |
|
|
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
var netResult: Double = 0.0 |
|
|
|
|
|
|
|
private set |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
|
|
* The difference between withdrawals and deposits |
|
|
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
var netBanked: Double = 0.0 |
|
|
|
|
|
|
|
private set |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
|
|
* The risk of ruin |
|
|
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
var riskOfRuin: Double = 0.0 |
|
|
|
|
|
|
|
private set |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var transactions: List<Transaction> = mutableListOf() |
|
|
|
|
|
|
|
private set |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var transactionBuckets: HashMap<String, TransactionBucket> = HashMap() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var evolutionPoints: Array<BRGraphPoint> = arrayOf() |
|
|
|
|
|
|
|
var evolutionItems: Array<DatableValue> = arrayOf() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
fun addTransaction(transaction: Transaction) { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
transaction.type?.let { type -> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var bucket = this.transactionBuckets[type.id] |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (bucket == null) { |
|
|
|
|
|
|
|
val b = TransactionBucket(this.setup.bankroll == null) |
|
|
|
|
|
|
|
this.transactionBuckets[type.id] = b |
|
|
|
|
|
|
|
bucket = b |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
bucket.addTransaction(transaction) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} ?: run { |
|
|
|
|
|
|
|
throw Exception("Transaction has no type") |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|