From cb419988ef0bdecc3756532c54b89fcbd1d0463b Mon Sep 17 00:00:00 2001 From: Razmig Sarkissian Date: Thu, 25 Apr 2019 18:39:32 +0200 Subject: [PATCH] add a new predicates variable to a criteria add the AllMonthsUpToNow --- .../android/model/CriteriaTest.kt | 27 ++++------- .../pokeranalytics/android/model/Criteria.kt | 45 +++++++++++++++++-- .../android/model/filter/QueryCondition.kt | 12 ++++- 3 files changed, 60 insertions(+), 24 deletions(-) diff --git a/app/src/androidTest/java/net/pokeranalytics/android/model/CriteriaTest.kt b/app/src/androidTest/java/net/pokeranalytics/android/model/CriteriaTest.kt index f2a1621b..c0040e5c 100644 --- a/app/src/androidTest/java/net/pokeranalytics/android/model/CriteriaTest.kt +++ b/app/src/androidTest/java/net/pokeranalytics/android/model/CriteriaTest.kt @@ -23,10 +23,10 @@ class CriteriaTest : BaseFilterInstrumentedUnitTest() { val cal = Calendar.getInstance() cal.time = Date() val s1 = Session.testInstance(100.0, false, cal.time) + val firstValue = cal.get(Calendar.YEAR) cal.add(Calendar.YEAR, 1) Session.testInstance(100.0, true, cal.time) cal.add(Calendar.YEAR, -11) - val firstValue = cal.get(Calendar.YEAR) Session.testInstance(100.0, true, cal.time) cal.add(Calendar.YEAR, 7) Session.testInstance(100.0, true, cal.time) @@ -35,23 +35,23 @@ class CriteriaTest : BaseFilterInstrumentedUnitTest() { cal.add(Calendar.YEAR, 10) Session.testInstance(100.0, true, cal.time) - val lastValue = firstValue + 10 + val lastValue = firstValue + 5 realm.commitTransaction() val years = Criteria.Years.queryConditions as List println("years = ${years.map { it.getDisplayName() }}") - assertEquals(11, years.size) - assertEquals(firstValue, years.first().listOfValues.first()) + assertEquals(16, years.size) + assertEquals(firstValue-10, years.first().listOfValues.first()) assertEquals(lastValue, years.last().listOfValues.first()) } @Test fun combined() { - val critierias = listOf(Criteria.MonthsOfYear, Criteria.DaysOfWeek) - val combined = critierias.combined() + val criterias = listOf(Criteria.MonthsOfYear, Criteria.DaysOfWeek) + val combined = criterias.combined() combined.forEach { it.forEach {qc-> println(qc.getDisplayName()) @@ -82,23 +82,12 @@ class CriteriaTest : BaseFilterInstrumentedUnitTest() { realm.commitTransaction() - val critierias = listOf(Criteria.Years, Criteria.MonthsOfYear) - val combined = critierias.combined() - combined.forEach { + val allMonths = Criteria.AllMonthsUpToNow.predicates + allMonths.forEach { it.forEach {qc-> println("<<<<< ${qc.getDisplayName()}") } } - - println("<<<<< reduced") - - val reduced= critierias.combined().upToNow() - reduced.forEach { - it.forEach {qc-> - println("<<<<< ${qc.getDisplayName()}") - } - } - } } \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/model/Criteria.kt b/app/src/main/java/net/pokeranalytics/android/model/Criteria.kt index eb295d5b..24071bfb 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/Criteria.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/Criteria.kt @@ -148,11 +148,50 @@ sealed class Criteria { object BankrollTypes: SimpleCriteria(listOf(QueryCondition.IsLive, QueryCondition.IsOnline)) object DayPeriods: SimpleCriteria(listOf(QueryCondition.IsWeekDay, QueryCondition.IsWeekEnd)) object Years: ListCriteria() + object AllMonthsUpToNow: ListCriteria() object Blinds: ListCriteria() object TournamentFees: ListCriteria() object Cash: SimpleCriteria(listOf(QueryCondition.IsCash)) object Tournament: SimpleCriteria(listOf(QueryCondition.IsTournament)) + val predicates: List> + get() { + return when (this) { + is AllMonthsUpToNow -> { + val realm = Realm.getDefaultInstance() + val firstSession= realm.where().sort("startDate", Sort.ASCENDING).findFirst() + val lastSession = realm.where().sort("startDate", Sort.DESCENDING).findFirst() + realm.close() + + val years: ArrayList> = arrayListOf() + + val firstYear = firstSession?.year ?: return years + val firstMonth = firstSession.month ?: return years + val lastYear = lastSession?.year ?: return years + val lastMonth = lastSession.month ?: return years + + for (year in firstYear..lastYear) { + val currentYear = QueryCondition.AnyYear(year) + for (month in 0..11) { + + if (year == firstYear && month < firstMonth) { + continue + } + if (year == lastYear && month > lastMonth) { + continue + } + + val currentMonth = QueryCondition.AnyMonthOfYear(month) + val currentList = listOf(currentYear, currentMonth) + years.add(currentList) + } + } + years + } + else -> listOf(listOf()) + } + } + val queryConditions: List get() { return when (this) { @@ -168,10 +207,10 @@ sealed class Criteria { is TournamentFees -> comparison() is Years -> { val years = arrayListOf() - val calendar = Calendar.getInstance() - calendar.time = Date() - val yearNow = calendar.get(Calendar.YEAR) val realm = Realm.getDefaultInstance() + val lastSession = realm.where().sort("startDate", Sort.DESCENDING).findFirst() + val yearNow = lastSession?.year ?: return years + realm.where().sort("year", Sort.ASCENDING).findFirst()?.year?.let { for (index in 0..(yearNow - it)) { years.add(QueryCondition.AnyYear().apply { diff --git a/app/src/main/java/net/pokeranalytics/android/model/filter/QueryCondition.kt b/app/src/main/java/net/pokeranalytics/android/model/filter/QueryCondition.kt index 0f44e1ae..de7cb184 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/filter/QueryCondition.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/filter/QueryCondition.kt @@ -346,16 +346,24 @@ sealed class QueryCondition : FilterElementRow { } } - class AnyMonthOfYear: ListOfInt() { + class AnyMonthOfYear(): ListOfInt() { override fun labelForValue(value: Int): String { return DateFormatSymbols.getInstance(Locale.getDefault()).months[value] } + + constructor(month:Int) : this() { + listOfValues = arrayListOf(month) + } } - class AnyYear: ListOfInt() { + class AnyYear(): ListOfInt() { override fun labelForValue(value: Int): String { return "$value" } + + constructor(year:Int) : this() { + listOfValues = arrayListOf(year) + } } object IsWeekDay: QueryCondition()