|
|
|
|
@ -17,12 +17,23 @@ class BankrollCalculator { |
|
|
|
|
|
|
|
|
|
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 } |
|
|
|
|
|
|
|
|
|
var initialValue = 0.0 |
|
|
|
|
var transactionNet = 0.0 |
|
|
|
|
|
|
|
|
|
bankrolls.forEach { bankroll -> |
|
|
|
|
|
|
|
|
|
val rate = if (setup.virtualBankroll) bankroll.rate else 1.0 |
|
|
|
|
|
|
|
|
|
initialValue += bankroll.initialValue * rate |
|
|
|
|
transactionNet += bankroll.transactions.sumByDouble { it.amount } * rate |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
report.transactionsNet = transactionNet |
|
|
|
|
report.initial = initialValue |
|
|
|
|
|
|
|
|
|
val queryConditions = setup.queryConditions |
|
|
|
|
val transactions = Filter.queryOn<Transaction>(realm, queryConditions) |
|
|
|
|
|
|
|
|
|
val transactionsNet = transactions.sum("amount") |
|
|
|
|
report.addDatedItems(transactions) |
|
|
|
|
|
|
|
|
|
transactions.forEach { |
|
|
|
|
@ -32,16 +43,22 @@ class BankrollCalculator { |
|
|
|
|
val sessions = Filter.queryOn<Session>(realm, queryConditions) |
|
|
|
|
report.addDatedItems(sessions) |
|
|
|
|
|
|
|
|
|
val options = Calculator.Options(stats = listOf(Stat.NET_RESULT, Stat.HOURLY_RATE, Stat.STANDARD_DEVIATION_HOURLY)) |
|
|
|
|
val group = ComputableGroup(conditions = queryConditions) |
|
|
|
|
val result = Calculator.compute(realm, group, options) |
|
|
|
|
result.computedStat(Stat.NET_RESULT)?.let { |
|
|
|
|
report.netResult = it.value |
|
|
|
|
} |
|
|
|
|
if (setup.virtualBankroll) { |
|
|
|
|
|
|
|
|
|
val options = Calculator.Options(stats = listOf(Stat.NET_RESULT, Stat.HOURLY_RATE, Stat.STANDARD_DEVIATION_HOURLY)) |
|
|
|
|
val group = ComputableGroup(conditions = queryConditions) |
|
|
|
|
val result = Calculator.compute(realm, group, options) |
|
|
|
|
result.computedStat(Stat.NET_RESULT)?.let { |
|
|
|
|
report.netResult = it.value |
|
|
|
|
} |
|
|
|
|
this.computeRiskOfRuin(report, result) |
|
|
|
|
|
|
|
|
|
report.transactionsNet = transactionsNet.toDouble() |
|
|
|
|
} else { |
|
|
|
|
|
|
|
|
|
this.computeRiskOfRuin(report, result) |
|
|
|
|
val results = Filter.queryOn<Result>(realm, queryConditions) |
|
|
|
|
report.netResult = results.sum("net").toDouble() |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
val depositType = TransactionType.getByValue(TransactionType.Value.DEPOSIT, realm) |
|
|
|
|
report.transactionBuckets[depositType.id]?.let { bucket -> |
|
|
|
|
|