Fixes crash when a Session without StartDate was caught in the Bankroll Report

od
Laurent 6 years ago
parent c87b828cdf
commit ca263b226f
  1. 13
      app/src/main/java/net/pokeranalytics/android/calculus/bankroll/BankrollCalculator.kt
  2. 8
      app/src/main/java/net/pokeranalytics/android/model/filter/Filterable.kt
  3. 7
      app/src/main/java/net/pokeranalytics/android/model/filter/QueryCondition.kt
  4. 5
      app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt
  5. 5
      app/src/main/java/net/pokeranalytics/android/model/realm/Transaction.kt

@ -6,6 +6,8 @@ import net.pokeranalytics.android.calculus.ComputableGroup
import net.pokeranalytics.android.calculus.ComputedResults
import net.pokeranalytics.android.calculus.Stat
import net.pokeranalytics.android.exceptions.PAIllegalStateException
import net.pokeranalytics.android.model.filter.Query
import net.pokeranalytics.android.model.filter.QueryCondition
import net.pokeranalytics.android.model.realm.*
import net.pokeranalytics.android.util.extensions.findById
@ -46,21 +48,22 @@ class BankrollCalculator {
report.transactionsNet = transactionNet
report.initial = initialValue
val query = setup.query(realm)
val transactions = Filter.queryOn<Transaction>(realm, query)
val baseQuery = setup.query(realm)
val transactions = Filter.queryOn<Transaction>(realm, baseQuery)
report.addDatedItems(transactions)
transactions.forEach {
report.addTransaction(it)
}
val sessions = Filter.queryOn<Session>(realm, query)
val sessionQuery = Query(QueryCondition.DateNotNull).merge(baseQuery)
val sessions = Filter.queryOn<Session>(realm, sessionQuery)
report.addDatedItems(sessions)
if (setup.virtualBankroll) {
val options = Calculator.Options(stats = listOf(Stat.NET_RESULT, Stat.HOURLY_RATE, Stat.STANDARD_DEVIATION_HOURLY))
val group = ComputableGroup(query)
val group = ComputableGroup(baseQuery)
val result = Calculator.compute(realm, group, options)
result.computedStat(Stat.NET_RESULT)?.let {
report.netResult = it.value
@ -69,7 +72,7 @@ class BankrollCalculator {
} else {
val results = Filter.queryOn<Result>(realm, query)
val results = Filter.queryOn<Result>(realm, baseQuery)
report.netResult = results.sum("net").toDouble()
}

@ -1,8 +1,9 @@
package net.pokeranalytics.android.model.filter
import com.crashlytics.android.Crashlytics
import io.realm.RealmModel
import io.realm.RealmResults
import net.pokeranalytics.android.exceptions.PokerAnalyticsException
import net.pokeranalytics.android.exceptions.PAIllegalStateException
import net.pokeranalytics.android.model.realm.*
/**
@ -57,20 +58,19 @@ class FilterHelper {
inline fun <reified T : Filterable > fieldNameForQueryType(queryCondition: Class< out QueryCondition>): String? {
val fieldName = when (T::class.java) {
return when (T::class.java) {
Session::class.java -> Session.fieldNameForQueryType(queryCondition)
ComputableResult::class.java -> ComputableResult.fieldNameForQueryType(queryCondition)
SessionSet::class.java -> SessionSet.fieldNameForQueryType(queryCondition)
Transaction::class.java -> Transaction.fieldNameForQueryType(queryCondition)
Result::class.java -> Result.fieldNameForQueryType(queryCondition)
else -> {
Crashlytics.logException(PAIllegalStateException("Filterable type fields are not defined for condition ${queryCondition::class}, class ${T::class}"))
null
// throw UnmanagedFilterField("Filterable type fields are not defined for class ${T::class}")
}
}
return fieldName
/*
fieldName?.let {
return fieldName

@ -88,6 +88,7 @@ sealed class QueryCondition : FilterElementRow {
LESS,
EQUALS,
TRUE,
NOTNULL
;
}
@ -600,6 +601,10 @@ sealed class QueryCondition : FilterElementRow {
}
}
object DateNotNull : QueryCondition() {
override var operator = Operator.NOTNULL
}
class StartedFromTime() : TimeQuery() {
override var operator = Operator.MORE
@ -607,7 +612,6 @@ sealed class QueryCondition : FilterElementRow {
singleValue = date
}
}
class EndedToTime() : TimeQuery() {
@ -928,6 +932,7 @@ sealed class QueryCondition : FilterElementRow {
else -> realmQuery
}
}
Operator.NOTNULL -> realmQuery.isNotNull(fieldName)
else -> realmQuery
}
}

@ -76,7 +76,7 @@ open class Session : RealmObject(), Savable, Editable, StaticRowRepresentableDat
} else {
session.bankroll = realm.where<Bankroll>().findFirst()
}
session.type = if (isTournament) Session.Type.TOURNAMENT.ordinal else Session.Type.CASH_GAME.ordinal
session.type = if (isTournament) Type.TOURNAMENT.ordinal else Type.CASH_GAME.ordinal
return if (managed) {
realm.copyToRealm(session)
@ -115,6 +115,7 @@ open class Session : RealmObject(), Savable, Editable, StaticRowRepresentableDat
CustomFieldListQuery::class.java -> "customFieldEntries.id"
CustomFieldAmountQuery::class.java, CustomFieldNumberQuery::class.java -> "customFieldEntries.numericValue"
CustomFieldQuery::class.java -> "customFieldEntries.customFields.id"
DateNotNull::class.java -> "startDate"
else -> null
}
}
@ -660,7 +661,7 @@ open class Session : RealmObject(), Savable, Editable, StaticRowRepresentableDat
fun duplicate() : Session {
val copy = Session.newInstance(this.realm, this.isTournament(), this.bankroll)
val copy = newInstance(this.realm, this.isTournament(), this.bankroll)
copy.game = this.game
copy.limit = this.limit

@ -56,7 +56,10 @@ open class Transaction : RealmObject(), Manageable, StaticRowRepresentableDataSo
QueryCondition.AnyDayOfWeek::class.java, QueryCondition.IsWeekEnd::class.java, QueryCondition.IsWeekDay::class.java -> "dayOfWeek"
QueryCondition.AnyMonthOfYear::class.java -> "month"
QueryCondition.AnyYear::class.java -> "year"
QueryCondition.PastDay::class.java, QueryCondition.IsToday::class.java, QueryCondition.WasYesterday::class.java, QueryCondition.WasTodayAndYesterday::class.java, QueryCondition.DuringThisYear::class.java, QueryCondition.DuringThisMonth::class.java, QueryCondition.DuringThisWeek::class.java -> "date"
QueryCondition.PastDay::class.java, QueryCondition.IsToday::class.java,
QueryCondition.WasYesterday::class.java, QueryCondition.WasTodayAndYesterday::class.java,
QueryCondition.DuringThisYear::class.java, QueryCondition.DuringThisMonth::class.java,
QueryCondition.DuringThisWeek::class.java, QueryCondition.DateNotNull::class.java -> "date"
else -> null
}
}

Loading…
Cancel
Save