|
|
|
@ -114,17 +114,29 @@ sealed class QueryCondition : FilterElementRow { |
|
|
|
abstract var listOfValues: ArrayList<T> |
|
|
|
abstract var listOfValues: ArrayList<T> |
|
|
|
abstract fun labelForValue(value:T, context: Context): String |
|
|
|
abstract fun labelForValue(value:T, context: Context): String |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
open fun entityName(context: Context): String { |
|
|
|
|
|
|
|
return baseId |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
override fun getDisplayName(context: Context): String { |
|
|
|
override fun getDisplayName(context: Context): String { |
|
|
|
|
|
|
|
val prefix = this.resId?.let { |
|
|
|
|
|
|
|
context.getString(it)+" " |
|
|
|
|
|
|
|
} ?: "" |
|
|
|
|
|
|
|
|
|
|
|
return when (listOfValues.size) { |
|
|
|
return when (listOfValues.size) { |
|
|
|
0 -> return NULL_TEXT |
|
|
|
0 -> return NULL_TEXT |
|
|
|
1,2 -> listOfValues.map { labelForValue(it, context) }.joinToString(", ") |
|
|
|
1,2 -> prefix+ listOfValues.map { labelForValue(it, context) }.joinToString(", ") |
|
|
|
else -> "${listOfValues.size} $baseId" |
|
|
|
else -> "${listOfValues.size} $prefix ${entityName(context)}" |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
override fun compareTo(other: ListOfValues<T>): Int { |
|
|
|
override fun compareTo(other: ListOfValues<T>): Int { |
|
|
|
return listOfValues.sorted().first().compareTo(other.listOfValues.sorted().first()) |
|
|
|
return listOfValues.sorted().first().compareTo(other.listOfValues.sorted().first()) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
fun firstValue(context:Context): String? { |
|
|
|
|
|
|
|
return this.listOfValues.firstOrNull()?.let { this.labelForValue(it, context) } |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
abstract class SingleValue<T>: ListOfValues<T>() where T:Comparable<T> { |
|
|
|
abstract class SingleValue<T>: ListOfValues<T>() where T:Comparable<T> { |
|
|
|
@ -141,10 +153,7 @@ sealed class QueryCondition : FilterElementRow { |
|
|
|
listOfValues = filterCondition.getValues() |
|
|
|
listOfValues = filterCondition.getValues() |
|
|
|
} |
|
|
|
} |
|
|
|
override fun labelForValue(value: Double, context: Context): String { |
|
|
|
override fun labelForValue(value: Double, context: Context): String { |
|
|
|
val prefix = this.resId?.let { |
|
|
|
return value.toCurrency(UserDefaults.currency) |
|
|
|
context.getString(it)+" " |
|
|
|
|
|
|
|
} ?: "" |
|
|
|
|
|
|
|
return prefix+value.toCurrency(UserDefaults.currency) |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@ -156,10 +165,7 @@ sealed class QueryCondition : FilterElementRow { |
|
|
|
listOfValues = filterCondition.getValues() |
|
|
|
listOfValues = filterCondition.getValues() |
|
|
|
} |
|
|
|
} |
|
|
|
override fun labelForValue(value: Int, context: Context): String { |
|
|
|
override fun labelForValue(value: Int, context: Context): String { |
|
|
|
val prefix = this.resId?.let { |
|
|
|
return value.toString() |
|
|
|
context.getString(it)+" " |
|
|
|
|
|
|
|
} ?: "" |
|
|
|
|
|
|
|
return prefix+value.toString() |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@ -175,10 +181,7 @@ sealed class QueryCondition : FilterElementRow { |
|
|
|
|
|
|
|
|
|
|
|
abstract class SingleDate: SingleValue<Date>() { |
|
|
|
abstract class SingleDate: SingleValue<Date>() { |
|
|
|
override fun labelForValue(value: Date, context: Context): String { |
|
|
|
override fun labelForValue(value: Date, context: Context): String { |
|
|
|
val prefix = this.resId?.let { |
|
|
|
return value.shortDate() |
|
|
|
context.getString(it)+" " |
|
|
|
|
|
|
|
} ?: "" |
|
|
|
|
|
|
|
return prefix+value.shortDate() |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
override var listOfValues = ArrayList<Date>() |
|
|
|
override var listOfValues = ArrayList<Date>() |
|
|
|
@ -198,10 +201,7 @@ sealed class QueryCondition : FilterElementRow { |
|
|
|
|
|
|
|
|
|
|
|
abstract class SingleInt: SingleValue<Int>() { |
|
|
|
abstract class SingleInt: SingleValue<Int>() { |
|
|
|
override fun labelForValue(value: Int, context: Context): String { |
|
|
|
override fun labelForValue(value: Int, context: Context): String { |
|
|
|
val prefix = this.resId?.let { |
|
|
|
return value.toString() |
|
|
|
context.getString(it)+" " |
|
|
|
|
|
|
|
} ?: "" |
|
|
|
|
|
|
|
return prefix+value.toString() |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
override var singleValue: Int? |
|
|
|
override var singleValue: Int? |
|
|
|
@ -236,17 +236,22 @@ sealed class QueryCondition : FilterElementRow { |
|
|
|
|
|
|
|
|
|
|
|
override fun getDisplayName(context: Context): String { |
|
|
|
override fun getDisplayName(context: Context): String { |
|
|
|
val realm = Realm.getDefaultInstance() |
|
|
|
val realm = Realm.getDefaultInstance() |
|
|
|
|
|
|
|
val entityName = entityName(realm) |
|
|
|
val completeLabel = when (listOfValues.size) { |
|
|
|
val completeLabel = when (listOfValues.size) { |
|
|
|
0 -> return NULL_TEXT |
|
|
|
0 -> NULL_TEXT |
|
|
|
1,2 -> { |
|
|
|
1,2 -> { |
|
|
|
return listOfValues.map { labelForValue(realm, it) }.joinToString(", ") |
|
|
|
listOfValues.map { labelForValue(realm, it) }.joinToString(", ") |
|
|
|
} |
|
|
|
} |
|
|
|
else -> "${listOfValues.size} $baseId" |
|
|
|
else -> "${listOfValues.size} $entityName" |
|
|
|
} |
|
|
|
} |
|
|
|
realm.close() |
|
|
|
realm.close() |
|
|
|
return completeLabel |
|
|
|
return completeLabel |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
open fun entityName(realm: Realm): String { |
|
|
|
|
|
|
|
return baseId |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private fun labelForValue(realm:Realm, value:String): String { |
|
|
|
private fun labelForValue(realm:Realm, value:String): String { |
|
|
|
val query = realm.where(entity) |
|
|
|
val query = realm.where(entity) |
|
|
|
return query.equalTo("id", value).findFirst()?.name ?: NULL_TEXT |
|
|
|
return query.equalTo("id", value).findFirst()?.name ?: NULL_TEXT |
|
|
|
@ -261,6 +266,15 @@ sealed class QueryCondition : FilterElementRow { |
|
|
|
abstract class DateQuery: SingleDate(), DateTime { |
|
|
|
abstract class DateQuery: SingleDate(), DateTime { |
|
|
|
override val showTime: Boolean = false |
|
|
|
override val showTime: Boolean = false |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
override fun labelForValue(value: Date, context: Context): String { |
|
|
|
|
|
|
|
return singleValue?.let { |
|
|
|
|
|
|
|
if (showTime) { |
|
|
|
|
|
|
|
it.shortTime() |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
it.shortDate() |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} ?: NULL_TEXT |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
abstract class TimeQuery: DateQuery() { |
|
|
|
abstract class TimeQuery: DateQuery() { |
|
|
|
@ -359,10 +373,11 @@ sealed class QueryCondition : FilterElementRow { |
|
|
|
|
|
|
|
|
|
|
|
class NumberOfTable: ListOfInt() { |
|
|
|
class NumberOfTable: ListOfInt() { |
|
|
|
override fun labelForValue(value: Int, context: Context): String { |
|
|
|
override fun labelForValue(value: Int, context: Context): String { |
|
|
|
val prefix = this.resId?.let { |
|
|
|
return value.toString() |
|
|
|
context.getString(it) + " " |
|
|
|
} |
|
|
|
} ?: "" |
|
|
|
|
|
|
|
return prefix + value.toString() + " " + context.getString(R.string.tables) |
|
|
|
override fun entityName(context: Context): String { |
|
|
|
|
|
|
|
return context.getString(R.string.number_of_tables) |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@ -373,10 +388,7 @@ sealed class QueryCondition : FilterElementRow { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
override fun labelForValue(value: Double, context: Context): String { |
|
|
|
override fun labelForValue(value: Double, context: Context): String { |
|
|
|
val prefix = this.resId?.let { |
|
|
|
return value.toString() |
|
|
|
context.getString(it) + " " |
|
|
|
|
|
|
|
} ?: "" |
|
|
|
|
|
|
|
return prefix + value.toString() |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@ -387,11 +399,8 @@ sealed class QueryCondition : FilterElementRow { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
override fun labelForValue(value: Int, context: Context): String { |
|
|
|
override fun labelForValue(value: Int, context: Context): String { |
|
|
|
val prefix = this.resId?.let { |
|
|
|
|
|
|
|
context.getString(it) + " " |
|
|
|
|
|
|
|
} ?: "" |
|
|
|
|
|
|
|
val nf = RuleBasedNumberFormat(Locale.getDefault(), RuleBasedNumberFormat.ORDINAL) |
|
|
|
val nf = RuleBasedNumberFormat(Locale.getDefault(), RuleBasedNumberFormat.ORDINAL) |
|
|
|
return prefix + nf.format(value) |
|
|
|
return nf.format(value) |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@ -402,10 +411,11 @@ sealed class QueryCondition : FilterElementRow { |
|
|
|
|
|
|
|
|
|
|
|
class TournamentNumberOfPlayer: ListOfInt() { |
|
|
|
class TournamentNumberOfPlayer: ListOfInt() { |
|
|
|
override fun labelForValue(value: Int, context: Context): String { |
|
|
|
override fun labelForValue(value: Int, context: Context): String { |
|
|
|
val prefix = this.resId?.let { |
|
|
|
return value.toString() |
|
|
|
context.getString(it) + " " |
|
|
|
} |
|
|
|
} ?: "" |
|
|
|
|
|
|
|
return prefix + value.toString() + context.getString(R.string.number_of_players) |
|
|
|
override fun entityName(context: Context): String { |
|
|
|
|
|
|
|
return context.getString(R.string.number_of_players) |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@ -451,10 +461,7 @@ sealed class QueryCondition : FilterElementRow { |
|
|
|
|
|
|
|
|
|
|
|
class TournamentFee: ListOfDouble() { |
|
|
|
class TournamentFee: ListOfDouble() { |
|
|
|
override fun labelForValue(value: Double, context: Context): String { |
|
|
|
override fun labelForValue(value: Double, context: Context): String { |
|
|
|
val prefix = this.resId?.let { |
|
|
|
return value.toCurrency(UserDefaults.currency) |
|
|
|
context.getString(it)+" " |
|
|
|
|
|
|
|
} ?: "" |
|
|
|
|
|
|
|
return prefix+value.toCurrency(UserDefaults.currency) |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@ -463,10 +470,13 @@ sealed class QueryCondition : FilterElementRow { |
|
|
|
override val viewType: Int = RowViewType.TITLE_VALUE_CHECK.ordinal |
|
|
|
override val viewType: Int = RowViewType.TITLE_VALUE_CHECK.ordinal |
|
|
|
|
|
|
|
|
|
|
|
override fun labelForValue(value: Int, context: Context): String { |
|
|
|
override fun labelForValue(value: Int, context: Context): String { |
|
|
|
val suffix = this.resId?.let { |
|
|
|
return value.toString() |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
override fun entityName(context: Context): String { |
|
|
|
|
|
|
|
return this.resId?.let { |
|
|
|
" "+context.getString(it) |
|
|
|
" "+context.getString(it) |
|
|
|
} ?: "" |
|
|
|
} ?: "" |
|
|
|
return value.toString() + suffix |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@ -478,42 +488,100 @@ sealed class QueryCondition : FilterElementRow { |
|
|
|
|
|
|
|
|
|
|
|
override val viewType: Int = RowViewType.TITLE_VALUE_CHECK.ordinal |
|
|
|
override val viewType: Int = RowViewType.TITLE_VALUE_CHECK.ordinal |
|
|
|
override val bottomSheetType: BottomSheetType = BottomSheetType.DOUBLE_EDIT_TEXT |
|
|
|
override val bottomSheetType: BottomSheetType = BottomSheetType.DOUBLE_EDIT_TEXT |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
override fun labelForValue(value: Int, context: Context): String { |
|
|
|
|
|
|
|
val nf = RuleBasedNumberFormat(Locale.getDefault(), RuleBasedNumberFormat.DURATION) |
|
|
|
|
|
|
|
return nf.format(value.toDouble()) |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
class StartedFromTime(startTime:Date = Date().startOfDay()): TimeQuery() { |
|
|
|
class StartedFromTime: TimeQuery() { |
|
|
|
override var operator = Operator.MORE |
|
|
|
override var operator = Operator.MORE |
|
|
|
init { |
|
|
|
|
|
|
|
this.listOfValues = arrayListOf() |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
class EndedToTime(endTime:Date = Date().endOfDay()): TimeQuery() { |
|
|
|
class EndedToTime: TimeQuery() { |
|
|
|
override var operator = Operator.LESS |
|
|
|
override var operator = Operator.LESS |
|
|
|
init { |
|
|
|
|
|
|
|
this.listOfValues = arrayListOf() |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
interface CustomFieldQuery { |
|
|
|
interface CustomFieldRelated { |
|
|
|
var customFieldId : String? |
|
|
|
var customFieldId : String? |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
fun customFieldName(realm: Realm): String { |
|
|
|
|
|
|
|
val query = realm.where(CustomField::class.java) |
|
|
|
|
|
|
|
val name = query.equalTo("id", customFieldId).findFirst()?.name |
|
|
|
|
|
|
|
return name?.let { |
|
|
|
|
|
|
|
"$it " |
|
|
|
|
|
|
|
} ?: run { "" } |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
class CustomFieldNumberQuery() : ListOfString(), CustomFieldQuery { |
|
|
|
class CustomFieldQuery() : QueryDataCondition<CustomField>() { |
|
|
|
|
|
|
|
override var entity: Class<CustomField> = CustomField::class.java |
|
|
|
|
|
|
|
constructor(customField: CustomField): this() { |
|
|
|
|
|
|
|
this.setObject(customField) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
open class CustomFieldNumberQuery() : ListOfString(), CustomFieldRelated { |
|
|
|
override var customFieldId : String? = null |
|
|
|
override var customFieldId : String? = null |
|
|
|
override var operator: Operator = Operator.EQUALS |
|
|
|
override var operator: Operator = Operator.EQUALS |
|
|
|
constructor(customFieldId: String, value: Double): this() { |
|
|
|
constructor(customFieldId: String, value: Double): this() { |
|
|
|
this.listOfValues = arrayListOf(value.toString()) |
|
|
|
this.listOfValues = arrayListOf(value.toString()) |
|
|
|
this.customFieldId = customFieldId |
|
|
|
this.customFieldId = customFieldId |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
override fun getDisplayName(context: Context): String { |
|
|
|
|
|
|
|
val realm = Realm.getDefaultInstance() |
|
|
|
|
|
|
|
val name = customFieldName(realm) |
|
|
|
|
|
|
|
val prefix = this.resId?.let { |
|
|
|
|
|
|
|
context.getString(it)+" " |
|
|
|
|
|
|
|
} ?: "" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
val completeLabel = when (listOfValues.size) { |
|
|
|
|
|
|
|
0 -> return NULL_TEXT |
|
|
|
|
|
|
|
1,2 -> { |
|
|
|
|
|
|
|
return name+prefix+listOfValues.map { labelForValue(it, context) }.joinToString(", ") |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
else -> "${listOfValues.size} $prefix $name" |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
realm.close() |
|
|
|
|
|
|
|
return completeLabel |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
override fun labelForValue(value: String, context: Context): String { |
|
|
|
|
|
|
|
return value |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
override fun updateValueBy(filterCondition: FilterCondition) { |
|
|
|
|
|
|
|
super.updateValueBy(filterCondition) |
|
|
|
|
|
|
|
listOfValues = filterCondition.getValues() |
|
|
|
|
|
|
|
customFieldId = filterCondition.stringValue |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
class CustomFieldListQuery() : QueryDataCondition<CustomFieldEntry>(), CustomFieldQuery { |
|
|
|
class CustomFieldAmountQuery : CustomFieldNumberQuery() { |
|
|
|
|
|
|
|
override fun labelForValue(value: String, context: Context): String { |
|
|
|
|
|
|
|
return value.toDouble().toCurrency(UserDefaults.currency) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class CustomFieldListQuery() : QueryDataCondition<CustomFieldEntry>(), CustomFieldRelated { |
|
|
|
override var entity: Class<CustomFieldEntry> = CustomFieldEntry::class.java |
|
|
|
override var entity: Class<CustomFieldEntry> = CustomFieldEntry::class.java |
|
|
|
override var customFieldId : String? = null |
|
|
|
override var customFieldId : String? = null |
|
|
|
constructor(customFieldEntry: CustomFieldEntry): this() { |
|
|
|
constructor(customFieldEntry: CustomFieldEntry): this() { |
|
|
|
this.setObject(customFieldEntry) |
|
|
|
this.setObject(customFieldEntry) |
|
|
|
this.customFieldId = customFieldEntry.customField?.id |
|
|
|
this.customFieldId = customFieldEntry.customField?.id |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
override fun entityName(realm: Realm): String { |
|
|
|
|
|
|
|
return customFieldName(realm) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
override fun updateValueBy(filterCondition: FilterCondition) { |
|
|
|
|
|
|
|
super.updateValueBy(filterCondition) |
|
|
|
|
|
|
|
listOfValues = filterCondition.getValues() |
|
|
|
|
|
|
|
customFieldId = filterCondition.stringValue |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
/** |
|
|
|
@ -608,8 +676,10 @@ sealed class QueryCondition : FilterElementRow { |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (this is CustomFieldQuery) { |
|
|
|
if (this is CustomFieldRelated) { |
|
|
|
realmQuery.equalTo("customFieldEntries.customField.id", customFieldId) |
|
|
|
FilterHelper.fieldNameForQueryType<T>(CustomFieldQuery::class.java)?.let { |
|
|
|
|
|
|
|
realmQuery.equalTo(it, customFieldId) |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
return when (operator) { |
|
|
|
return when (operator) { |
|
|
|
|