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 17b412f8..f2a1621b 100644 --- a/app/src/androidTest/java/net/pokeranalytics/android/model/CriteriaTest.kt +++ b/app/src/androidTest/java/net/pokeranalytics/android/model/CriteriaTest.kt @@ -58,4 +58,47 @@ class CriteriaTest : BaseFilterInstrumentedUnitTest() { } } } + + @Test + fun upToNow() { + val realm = this.mockRealm + realm.beginTransaction() + val cal = Calendar.getInstance() + cal.time = Date() + val s1 = Session.testInstance(100.0, false, cal.time) + 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) + cal.add(Calendar.YEAR, -2) + Session.testInstance(100.0, true, cal.time) + cal.add(Calendar.YEAR, 10) + Session.testInstance(100.0, true, cal.time) + + val lastValue = firstValue + 10 + + realm.commitTransaction() + + val critierias = listOf(Criteria.Years, Criteria.MonthsOfYear) + val combined = critierias.combined() + combined.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 99f138bd..9df897ab 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/Criteria.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/Criteria.kt @@ -18,6 +18,31 @@ fun List.combined(): List> { return getCombinations(comparatorList) } +fun List>.upToNow(): List> { + val calendar = Calendar.getInstance() + calendar.time = Date() + val currentYear = calendar.get(Calendar.YEAR) + val currentMonth = calendar.get(Calendar.MONTH) + + val toRemove = this.filter { list -> + list.any { it is QueryCondition.AnyYear && it.listOfValues.first() == currentYear } + }.filter { list -> + list.any { + it is QueryCondition.AnyMonthOfYear && it.listOfValues.first() > currentMonth + } + } + + return this.filter{ list -> + var keep = true + toRemove.forEach { + if (list.containsAll(it)) { + keep = false + } + } + keep + } +} + fun getCombinations(lists: List>): List> { var combinations: LinkedHashSet> = LinkedHashSet() var newCombinations: LinkedHashSet>