Added Custom Fields to comparators

dev
Laurent 7 years ago
parent 3aa289525d
commit 8c186d3cf3
  1. 29
      app/src/main/java/net/pokeranalytics/android/model/Criteria.kt
  2. 51
      app/src/main/java/net/pokeranalytics/android/ui/fragment/ReportCreationFragment.kt
  3. 1
      app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterSectionRow.kt

@ -16,7 +16,6 @@ import net.pokeranalytics.android.model.Criteria.TournamentFees.comparison
import net.pokeranalytics.android.model.Criteria.TournamentNames.comparison
import net.pokeranalytics.android.model.Criteria.TournamentTypes.comparison
import net.pokeranalytics.android.model.Criteria.TransactionTypes.comparison
import net.pokeranalytics.android.model.filter.FilterHelper
import net.pokeranalytics.android.model.filter.Query
import net.pokeranalytics.android.model.filter.QueryCondition
import net.pokeranalytics.android.model.interfaces.NameManageable
@ -64,7 +63,7 @@ sealed class Criteria(override var uniqueIdentifier: Int) : IntIdentifiable, Row
if (this is ListCustomFields) {
val objects = mutableListOf<QueryCondition.CustomFieldListQuery>()
val realm = Realm.getDefaultInstance()
realm.where<CustomFieldEntry>().equalTo("customField.id", this.customField.id).findAll().forEach {
realm.where<CustomFieldEntry>().equalTo("customField.id", this.customFieldId).findAll().forEach {
objects.add(QueryCondition.CustomFieldListQuery(it))
}
objects.sorted()
@ -75,7 +74,8 @@ sealed class Criteria(override var uniqueIdentifier: Int) : IntIdentifiable, Row
}
}
abstract class SimpleCriteria(private val conditions: List<QueryCondition>, uniqueIdentifier: Int) : Criteria(uniqueIdentifier) {
abstract class SimpleCriteria(private val conditions: List<QueryCondition>, uniqueIdentifier: Int) :
Criteria(uniqueIdentifier) {
fun comparison(): List<Query> {
return conditions.map { Query(it) }
}
@ -86,13 +86,16 @@ sealed class Criteria(override var uniqueIdentifier: Int) : IntIdentifiable, Row
if (this is ValueCustomFields) {
val realm = Realm.getDefaultInstance()
val distincts = realm.where<CustomFieldEntry>().equalTo("customField.id", this.customField.id).distinct("value").findAll().sort("value", Sort.ASCENDING)
val distincts =
realm.where<CustomFieldEntry>().equalTo("customField.id", this.customFieldId).distinct("value")
.findAll().sort("value", Sort.ASCENDING)
realm.close()
val objects = mutableListOf<QueryCondition.CustomFieldNumberQuery>()
distincts.distinct().forEach {
val condition: QueryCondition.CustomFieldNumberQuery = QueryCondition.CustomFieldNumberQuery().apply {
this.customFieldId = this@ListCriteria.customField.id
val condition: QueryCondition.CustomFieldNumberQuery =
QueryCondition.CustomFieldNumberQuery().apply {
this.customFieldId = this@ListCriteria.customFieldId
listOfValues = arrayListOf(it.value)
}
objects.add(condition)
@ -155,8 +158,13 @@ sealed class Criteria(override var uniqueIdentifier: Int) : IntIdentifiable, Row
object TournamentFees : ListCriteria(18)
object Cash : SimpleCriteria(listOf(QueryCondition.IsCash), 19)
object Tournament : SimpleCriteria(listOf(QueryCondition.IsTournament), 20)
data class ListCustomFields(var customField: CustomField) : RealmCriteria(21)
data class ValueCustomFields(var customField: CustomField) : ListCriteria(22)
data class ListCustomFields(override var customField: CustomField) : RealmCriteria(21), CustomFieldCriteria {
override var customFieldId: String = customField.id
}
data class ValueCustomFields(override var customField: CustomField) : ListCriteria(22), CustomFieldCriteria {
override var customFieldId: String = customField.id
}
val queries: List<Query>
get() {
@ -308,3 +316,8 @@ sealed class Criteria(override var uniqueIdentifier: Int) : IntIdentifiable, Row
}
interface CustomFieldCriteria {
var customField: CustomField
var customFieldId: String
}

@ -11,6 +11,8 @@ import net.pokeranalytics.android.R
import net.pokeranalytics.android.calculus.Calculator
import net.pokeranalytics.android.calculus.Stat
import net.pokeranalytics.android.model.Criteria
import net.pokeranalytics.android.model.CustomFieldCriteria
import net.pokeranalytics.android.model.realm.CustomField
import net.pokeranalytics.android.model.realm.Filter
import net.pokeranalytics.android.ui.activity.FiltersActivity
import net.pokeranalytics.android.ui.activity.ReportCreationActivity
@ -23,6 +25,7 @@ import net.pokeranalytics.android.ui.interfaces.FilterableType
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowViewType
import net.pokeranalytics.android.ui.view.rowrepresentable.CustomizableRowRepresentable
import net.pokeranalytics.android.ui.view.rowrepresentable.SeparatorRow
import net.pokeranalytics.android.util.extensions.sorted
class ReportCreationFragment : RealmFragment(), RowRepresentableDataSource, RowRepresentableDelegate {
@ -68,7 +71,11 @@ class ReportCreationFragment : RealmFragment(), RowRepresentableDataSource, RowR
when (item?.itemId) {
R.id.add -> {
if (this.assistant.step == Assistant.Step.FILTER) {
FiltersActivity.newInstanceForResult(this, currentFilterable = FilterableType.SESSION, hideMostUsedFilters = true)
FiltersActivity.newInstanceForResult(
this,
currentFilterable = FilterableType.SESSION,
hideMostUsedFilters = true
)
}
}
}
@ -238,7 +245,22 @@ class Assistant {
}
}
Step.COMPARATOR -> {
val comparator = this.dataSource[position] as Criteria
val item = this.dataSource[position]
val comparator = when (item) {
is CustomField -> {
val criteria: Criteria = when (item.type) {
CustomField.Type.LIST.ordinal -> Criteria.ListCustomFields(item)
else -> Criteria.ValueCustomFields(item)
}
criteria
}
is Criteria -> item
else -> {
throw IllegalStateException("Unmanaged data type: $item")
}
}
if (this.comparators.contains(comparator)) {
this.comparators.remove(comparator)
} else {
@ -257,7 +279,17 @@ class Assistant {
fun isSelected(row: RowRepresentable): Boolean {
return when (this.step) {
Step.STAT -> this.stats.contains(row as Stat)
Step.COMPARATOR -> this.comparators.contains(row as Criteria)
Step.COMPARATOR -> {
when (row) {
is Criteria -> this.comparators.contains(row)
is CustomField -> {
val cfCriteria = this.comparators.filterIsInstance<CustomFieldCriteria>()
val cfCriterion = cfCriteria.firstOrNull { it.customField == row }
return cfCriterion != null
}
else -> false
}
}
Step.FILTER -> this.filter == row
else -> false
}
@ -308,9 +340,18 @@ class Assistant {
else -> Stat.userSelectableList
}
}
Step.COMPARATOR -> Criteria.all
Step.COMPARATOR -> {
val list = mutableListOf<RowRepresentable>()
val realm = Realm.getDefaultInstance()
val customFields = realm.sorted<CustomField>()
list.addAll(customFields)
list.add(SeparatorRow())
list.addAll(Criteria.all)
realm.close()
return list
}
Step.FILTER -> {
val data = ArrayList<RowRepresentable>()
val realm = Realm.getDefaultInstance()
val filters = realm.sorted(Filter::class.java)
realm.close()

@ -6,7 +6,6 @@ import net.pokeranalytics.android.exceptions.PokerAnalyticsException
import net.pokeranalytics.android.model.Criteria
import net.pokeranalytics.android.model.filter.QueryCondition
import net.pokeranalytics.android.model.filter.mapFirstCondition
import net.pokeranalytics.android.model.realm.CustomField
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowViewType

Loading…
Cancel
Save