diff --git a/app/src/main/java/net/pokeranalytics/android/calculus/Calculator.kt b/app/src/main/java/net/pokeranalytics/android/calculus/Calculator.kt index b0422dbb..98abe3a3 100644 --- a/app/src/main/java/net/pokeranalytics/android/calculus/Calculator.kt +++ b/app/src/main/java/net/pokeranalytics/android/calculus/Calculator.kt @@ -4,12 +4,12 @@ import io.realm.Realm import net.pokeranalytics.android.calculus.Stat.* import net.pokeranalytics.android.model.comparison.Comparator import net.pokeranalytics.android.model.comparison.combined +import net.pokeranalytics.android.model.extensions.hourlyDuration import net.pokeranalytics.android.model.filter.QueryCondition import net.pokeranalytics.android.model.filter.filter import net.pokeranalytics.android.model.filter.name import net.pokeranalytics.android.model.realm.ComputableResult import net.pokeranalytics.android.model.realm.SessionSet -import net.pokeranalytics.android.model.realm.hourlyDuration import net.pokeranalytics.android.util.extensions.startOfDay import timber.log.Timber import java.util.* @@ -309,7 +309,7 @@ class Calculator { sessionSets.forEach { sessionSet -> tIndex++ - val setStats = SSStats(realm, sessionSet, computableGroup.conditions) + val setStats = SSStats(sessionSet, computableGroup.conditions) tRatedNetSum += setStats.ratedNet tBBSum += setStats.bbSum @@ -473,7 +473,7 @@ class Calculator { if (gHourlyDuration != null) { var hourlyStdSum = 0.0 sessionSets.forEach { set -> - val ssStats = SSStats(realm, set, computableGroup.conditions) + val ssStats = SSStats(set, computableGroup.conditions) val sHourlyRate = ssStats.hourlyRate hourlyStdSum += Math.pow(sHourlyRate - hourlyRate, 2.0) } @@ -492,9 +492,8 @@ class Calculator { } -class SSStats(realm: Realm, sessionSet: SessionSet, conditions: List) { // Session Set Stats +class SSStats(sessionSet: SessionSet, conditions: List) { // Session Set Stats - private var realm = realm private var sessionSet = sessionSet private var conditions = conditions diff --git a/app/src/main/java/net/pokeranalytics/android/model/extensions/SessionExtensions.kt b/app/src/main/java/net/pokeranalytics/android/model/extensions/SessionExtensions.kt index 02d9495b..a6caa598 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/extensions/SessionExtensions.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/extensions/SessionExtensions.kt @@ -25,9 +25,6 @@ enum class SessionState { */ fun Session.getState(): SessionState { -// if (timeFrame == null) { -// return SessionState.PENDING -// } val start = this.startDate if (start == null) { return SessionState.PENDING @@ -43,4 +40,59 @@ fun Session.getState(): SessionState { } } +} + +val AbstractList.hourlyDuration: Double + get() { + val intervals = mutableListOf() + this.forEach { + val interval = TimeInterval(it.startDate!!, it.endDate!!, it.breakDuration) + intervals.update(interval) + } + return intervals.sumByDouble { it.hourlyDuration } + } + +class TimeInterval(var start: Date, var end: Date, var breakDuration: Long) { + + val hourlyDuration: Double + get() { + val netDuration = end.time - start.time - breakDuration + return (netDuration / 3600000).toDouble() + } +} + +fun MutableList.update(timeInterval: TimeInterval): MutableList { + + val overlapped = this.filter { + + (it.start.before(timeInterval.start) && it.end.after(timeInterval.start)) || + (it.start.before(timeInterval.end) && it.end.after(timeInterval.end)) || + (it.start.after(timeInterval.start) && it.end.before(timeInterval.end)) + + } + + if (overlapped.size == 0) { // add + this.add(timeInterval) + } else { // update + + var start = timeInterval.start + var end = timeInterval.end + var breakDuration = timeInterval.breakDuration + + overlapped.forEach { + if (it.start.before(start)) { + start = it.start + } + if (it.end.after(end)) { + end = it.end + } + breakDuration = kotlin.math.max(it.breakDuration, breakDuration) + } + + this.removeAll(overlapped) + this.add(TimeInterval(start, end, breakDuration)) + + } + + return this } \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt index 7d10e29a..934528ee 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt @@ -968,58 +968,3 @@ open class Session : RealmObject(), Savable, Editable, StaticRowRepresentableDat } - -val AbstractList.hourlyDuration: Double - get() { - val intervals = mutableListOf() - this.forEach { - val interval = TimeInterval(it.startDate!!, it.endDate!!, it.breakDuration) - intervals.update(interval) - } - return intervals.sumByDouble { it.hourlyDuration } - } - -class TimeInterval(var start: Date, var end: Date, var breakDuration: Long) { - - val hourlyDuration: Double - get() { - val netDuration = end.time - start.time - breakDuration - return (netDuration / 3600000).toDouble() - } -} - -fun MutableList.update(timeInterval: TimeInterval): MutableList { - - val overlapped = this.filter { - - (it.start.before(timeInterval.start) && it.end.after(timeInterval.start)) || - (it.start.before(timeInterval.end) && it.end.after(timeInterval.end)) || - (it.start.after(timeInterval.start) && it.end.before(timeInterval.end)) - - } - - if (overlapped.size == 0) { // add - this.add(timeInterval) - } else { // update - - var start = timeInterval.start - var end = timeInterval.end - var breakDuration = timeInterval.breakDuration - - overlapped.forEach { - if (it.start.before(start)) { - start = it.start - } - if (it.end.after(end)) { - end = it.end - } - breakDuration = kotlin.math.max(it.breakDuration, breakDuration) - } - - this.removeAll(overlapped) - this.add(TimeInterval(start, end, breakDuration)) - - } - - return this -} \ No newline at end of file