PBT import fix

blinds
Laurent 5 years ago
parent 6c6cf9a60f
commit 2e3d00ce41
  1. 13
      app/src/main/java/net/pokeranalytics/android/util/csv/CSVDescriptor.kt
  2. 45
      app/src/main/java/net/pokeranalytics/android/util/csv/PACSVDescriptor.kt
  3. 2
      app/src/main/java/net/pokeranalytics/android/util/csv/ProductCSVDescriptors.kt
  4. 10
      app/src/main/java/net/pokeranalytics/android/util/csv/SessionField.kt
  5. 2
      app/src/main/java/net/pokeranalytics/android/util/csv/SessionTransactionCSVDescriptor.kt

@ -17,7 +17,16 @@ enum class DataSource {
POKER_INCOME, POKER_INCOME,
POKER_BANKROLL_TRACKER, POKER_BANKROLL_TRACKER,
RUN_GOOD, RUN_GOOD,
POKER_AGENT POKER_AGENT;
val availableDateFormats: List<String>
get() {
return when(this) {
POKER_BANKROLL_TRACKER -> listOf("MM/dd/yy HH:mm", "yyyy-MM-dd HH:mm:ss")
else -> listOf()
}
}
} }
/** /**
@ -102,8 +111,6 @@ abstract class DataCSVDescriptor<T : Identifiable>(source: DataSource, vararg el
return null return null
} }
// abstract fun
} }
/** /**

@ -12,6 +12,9 @@ import net.pokeranalytics.android.util.extensions.getOrCreate
import net.pokeranalytics.android.util.extensions.setHourMinutes import net.pokeranalytics.android.util.extensions.setHourMinutes
import org.apache.commons.csv.CSVRecord import org.apache.commons.csv.CSVRecord
import timber.log.Timber import timber.log.Timber
import java.text.DateFormat
import java.text.ParseException
import java.text.SimpleDateFormat
import java.util.* import java.util.*
abstract class PACSVDescriptor<T : Identifiable>(source: DataSource, abstract class PACSVDescriptor<T : Identifiable>(source: DataSource,
@ -23,6 +26,8 @@ abstract class PACSVDescriptor<T : Identifiable>(source: DataSource,
private var currentDay: String = "" private var currentDay: String = ""
private var startInSeconds: Double = 20 * 3600.0 private var startInSeconds: Double = 20 * 3600.0
private var dateFormat: DateFormat? = null
/** /**
* Parses a [record] and return an optional Session * Parses a [record] and return an optional Session
*/ */
@ -35,7 +40,7 @@ abstract class PACSVDescriptor<T : Identifiable>(source: DataSource,
var endDate: Date? = null var endDate: Date? = null
var isLive = true var isLive = true
var bankrollName = "" var bankrollName = "Import"
var currencyCode: String? = null var currencyCode: String? = null
var currencyRate: Double? = null var currencyRate: Double? = null
var additionalBuyins = 0.0 // rebuy + addon var additionalBuyins = 0.0 // rebuy + addon
@ -50,7 +55,7 @@ abstract class PACSVDescriptor<T : Identifiable>(source: DataSource,
val value = record.get(index) val value = record.get(index)
when (field) { when (field) {
is SessionField.Start -> { is SessionField.Start -> {
startDate = field.parse(value) startDate = parseDate(field, value)
if (source == DataSource.POKER_AGENT) { if (source == DataSource.POKER_AGENT) {
if (currentDay == value) { if (currentDay == value) {
sameDaySessionCount++ sameDaySessionCount++
@ -61,7 +66,7 @@ abstract class PACSVDescriptor<T : Identifiable>(source: DataSource,
} else {} } else {}
} }
is SessionField.End -> { is SessionField.End -> {
endDate = field.parse(value) endDate = parseDate(field, value)
} }
is SessionField.StartTime -> { is SessionField.StartTime -> {
startDate?.setHourMinutes(value) startDate?.setHourMinutes(value)
@ -226,10 +231,6 @@ abstract class PACSVDescriptor<T : Identifiable>(source: DataSource,
} }
if (bankrollName.isEmpty()) {
bankrollName = "Import"
}
val bankroll = Bankroll.getOrCreate(realm, bankrollName, isLive, currencyCode, currencyRate) val bankroll = Bankroll.getOrCreate(realm, bankrollName, isLive, currencyCode, currencyRate)
session.bankroll = bankroll session.bankroll = bankroll
@ -270,4 +271,34 @@ abstract class PACSVDescriptor<T : Identifiable>(source: DataSource,
return null return null
} }
private fun parseDate(field: DateCSVField, value: String): Date {
try {
this.dateFormat?.parse(value)?.let { date ->
return date
}
} catch (e: ParseException) {
}
// if date null or exception
// try to find another valid dateformat
val formats = this.source.availableDateFormats.toMutableList()
field.dateFormat?.let { dateFormat ->
formats.add(0, dateFormat)
}
for (dateFormat in formats) {
val df = SimpleDateFormat(dateFormat)
try {
df.parse(value)?.let { date ->
this.dateFormat = df
return date
}
} catch (e: ParseException) {
}
}
throw PAIllegalStateException("No date format found to parse date: $value")
}
} }

@ -157,7 +157,7 @@ class ProductCSVDescriptors {
) )
} }
val pokerAnalyticsiOS: SessionCSVDescriptor private val pokerAnalyticsiOS: SessionCSVDescriptor
get() { get() {
return SessionCSVDescriptor( return SessionCSVDescriptor(
DataSource.POKER_ANALYTICS, DataSource.POKER_ANALYTICS,

@ -10,7 +10,7 @@ sealed class TrField {
data class TransactionDate( data class TransactionDate(
override var header: String, override var header: String,
override var callback: ((String) -> Date?)? = null, override var callback: ((String) -> Date?)? = null,
override val dateFormat: String? = null override val dateFormat: String? = null,
) : DateCSVField ) : DateCSVField
data class Amount( data class Amount(
@ -45,25 +45,25 @@ sealed class SessionField {
data class Start( data class Start(
override var header: String, override var header: String,
override var callback: ((String) -> Date?)? = null, override var callback: ((String) -> Date?)? = null,
override val dateFormat: String? = null override val dateFormat: String? = null,
) : DateCSVField ) : DateCSVField
data class StartTime( data class StartTime(
override var header: String, override var header: String,
override var callback: ((String) -> Date?)? = null, override var callback: ((String) -> Date?)? = null,
override val dateFormat: String? = null override val dateFormat: String? = null,
) : DateCSVField ) : DateCSVField
data class End( data class End(
override var header: String, override var header: String,
override var callback: ((String) -> Date?)? = null, override var callback: ((String) -> Date?)? = null,
override val dateFormat: String? = null override val dateFormat: String? = null,
) : DateCSVField ) : DateCSVField
data class EndTime( data class EndTime(
override var header: String, override var header: String,
override var callback: ((String) -> Date?)? = null, override var callback: ((String) -> Date?)? = null,
override val dateFormat: String? = null override val dateFormat: String? = null,
) : DateCSVField ) : DateCSVField
data class Duration( data class Duration(

@ -13,7 +13,7 @@ import java.util.*
/** /**
* A SessionCSVDescriptor is a CSVDescriptor specialized in parsing Session objects * A SessionCSVDescriptor is a CSVDescriptor specialized in parsing Session objects
*/ */
class SessionTransactionCSVDescriptor(source: DataSource, private var isTournament: Boolean?, vararg elements: CSVField) : class SessionTransactionCSVDescriptor(source: DataSource, isTournament: Boolean?, vararg elements: CSVField) :
PACSVDescriptor<Identifiable>(source, isTournament, *elements) { PACSVDescriptor<Identifiable>(source, isTournament, *elements) {
private enum class DataType { private enum class DataType {

Loading…
Cancel
Save