|
|
|
|
@ -63,11 +63,14 @@ class SessionCSVDescriptor(source: DataSource, private var isTournament: Boolean |
|
|
|
|
private fun parseTransaction(realm: Realm, record: CSVRecord): Transaction? { |
|
|
|
|
|
|
|
|
|
var date: Date? = null |
|
|
|
|
var amount: Double? = null |
|
|
|
|
var type: TransactionType? = null |
|
|
|
|
var currencyCode: String? = null |
|
|
|
|
var currencyRate: Double? = null |
|
|
|
|
|
|
|
|
|
// Poker Bankroll Tracker specifics |
|
|
|
|
var buyin: Double? = null |
|
|
|
|
var cashedOut: Double? = null |
|
|
|
|
|
|
|
|
|
fields.forEach { field -> |
|
|
|
|
|
|
|
|
|
val index = this.fieldMapping[field] |
|
|
|
|
@ -77,10 +80,8 @@ class SessionCSVDescriptor(source: DataSource, private var isTournament: Boolean |
|
|
|
|
is SessionField.Start -> { |
|
|
|
|
date = field.parse(value) |
|
|
|
|
} |
|
|
|
|
is SessionField.Buyin -> amount = field.parse(value) |
|
|
|
|
is SessionField.SessionType -> { |
|
|
|
|
type = realm.getOrCreate(value) |
|
|
|
|
} |
|
|
|
|
is SessionField.Buyin -> buyin = field.parse(value) |
|
|
|
|
is SessionField.CashedOut -> cashedOut = field.parse(value) |
|
|
|
|
is SessionField.CurrencyCode -> currencyCode = value |
|
|
|
|
is SessionField.CurrencyRate -> currencyRate = field.parse(value) |
|
|
|
|
else -> { |
|
|
|
|
@ -89,13 +90,23 @@ class SessionCSVDescriptor(source: DataSource, private var isTournament: Boolean |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
val amount = if (buyin != null && buyin!! > 0) { |
|
|
|
|
type = TransactionType.getByValue(TransactionType.Value.DEPOSIT, realm) |
|
|
|
|
buyin |
|
|
|
|
} else if (cashedOut != null && cashedOut!! > 0) { |
|
|
|
|
type = TransactionType.getByValue(TransactionType.Value.WITHDRAWAL, realm) |
|
|
|
|
cashedOut!! * -1 |
|
|
|
|
} else { |
|
|
|
|
null |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (date != null && amount != null && type != null && currencyCode != null) { |
|
|
|
|
|
|
|
|
|
if (DataUtils.transactionUnicityCheck(realm, date!!, amount!!, type!!)) { |
|
|
|
|
if (DataUtils.transactionUnicityCheck(realm, date!!, amount, type)) { |
|
|
|
|
|
|
|
|
|
val transaction = realm.copyToRealm(Transaction()) |
|
|
|
|
transaction.date = date!! |
|
|
|
|
transaction.amount = amount!! |
|
|
|
|
transaction.amount = amount |
|
|
|
|
transaction.type = type |
|
|
|
|
|
|
|
|
|
val bankroll = Bankroll.getOrCreate(realm, currencyCode!!, currencyCode = currencyCode!!, currencyRate = currencyRate) |
|
|
|
|
@ -113,7 +124,10 @@ class SessionCSVDescriptor(source: DataSource, private var isTournament: Boolean |
|
|
|
|
|
|
|
|
|
private fun parseSession(realm: Realm, record: CSVRecord): Session? { |
|
|
|
|
|
|
|
|
|
val session = Session.newInstance(realm, this.isTournament) |
|
|
|
|
val session = Session.newInstance(realm, this.isTournament, managed = false) |
|
|
|
|
|
|
|
|
|
var startDate: Date? = null |
|
|
|
|
var endDate: Date? = null |
|
|
|
|
|
|
|
|
|
var isLive = true |
|
|
|
|
var bankrollName: String? = null |
|
|
|
|
@ -128,19 +142,30 @@ class SessionCSVDescriptor(source: DataSource, private var isTournament: Boolean |
|
|
|
|
val value = record.get(index) |
|
|
|
|
when (field) { |
|
|
|
|
is SessionField.Start -> { |
|
|
|
|
session.startDate = field.parse(value) |
|
|
|
|
startDate = field.parse(value) |
|
|
|
|
} |
|
|
|
|
is SessionField.End -> { |
|
|
|
|
session.endDate = field.parse(value) |
|
|
|
|
endDate = field.parse(value) |
|
|
|
|
} |
|
|
|
|
is SessionField.StartTime -> { |
|
|
|
|
session.startDate?.setHourMinutes(value) |
|
|
|
|
startDate?.setHourMinutes(value) |
|
|
|
|
} |
|
|
|
|
is SessionField.EndTime -> { |
|
|
|
|
session.endDate?.setHourMinutes(value) |
|
|
|
|
endDate?.setHourMinutes(value) |
|
|
|
|
} |
|
|
|
|
is SessionField.Buyin -> { |
|
|
|
|
val buyin = field.parse(value) |
|
|
|
|
session.result?.buyin = buyin |
|
|
|
|
if (session.type == Session.Type.TOURNAMENT.ordinal) { |
|
|
|
|
session.tournamentEntryFee = buyin |
|
|
|
|
} else {} |
|
|
|
|
} |
|
|
|
|
is SessionField.Buyin -> session.result?.buyin = field.parse(value) |
|
|
|
|
is SessionField.CashedOut -> session.result?.cashout = field.parse(value) |
|
|
|
|
is SessionField.SessionType -> { |
|
|
|
|
Session.Type.getValueFromString(value)?.let { type -> |
|
|
|
|
session.type = type.ordinal |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
is SessionField.Addon -> additionalBuyins += field.parse(value) ?: 0.0 |
|
|
|
|
is SessionField.Rebuy -> additionalBuyins += field.parse(value) ?: 0.0 |
|
|
|
|
is SessionField.Tips -> session.result?.tips = field.parse(value) |
|
|
|
|
@ -152,14 +177,12 @@ class SessionCSVDescriptor(source: DataSource, private var isTournament: Boolean |
|
|
|
|
is SessionField.Game -> { |
|
|
|
|
if (value.isNotEmpty()) { |
|
|
|
|
session.game = realm.getOrCreate(value) |
|
|
|
|
} else { |
|
|
|
|
} |
|
|
|
|
} else { } |
|
|
|
|
} |
|
|
|
|
is SessionField.Location -> { |
|
|
|
|
if (value.isNotEmpty()) { |
|
|
|
|
session.location = realm.getOrCreate(value) |
|
|
|
|
} else { |
|
|
|
|
} |
|
|
|
|
} else { } |
|
|
|
|
} |
|
|
|
|
is SessionField.Bankroll -> bankrollName = value |
|
|
|
|
is SessionField.LimitType -> session.limit = Limit.getInstance(value)?.ordinal |
|
|
|
|
@ -172,14 +195,13 @@ class SessionCSVDescriptor(source: DataSource, private var isTournament: Boolean |
|
|
|
|
is SessionField.SmallBlind -> session.cgSmallBlind = field.parse(value) |
|
|
|
|
is SessionField.BigBlind -> session.cgBigBlind = field.parse(value) |
|
|
|
|
is SessionField.TableSize -> session.tableSize = TableSize.valueForLabel(value) |
|
|
|
|
is SessionField.SessionType -> { |
|
|
|
|
Session.Type.getValueFromString(value)?.let { type -> |
|
|
|
|
session.type = type.ordinal |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
is SessionField.TournamentPosition -> session.result?.tournamentFinalPosition = |
|
|
|
|
field.parse(value)?.toInt() |
|
|
|
|
is SessionField.TournamentName -> session.tournamentName = realm.getOrCreate(value) |
|
|
|
|
is SessionField.TournamentName -> { |
|
|
|
|
if (value.isNotEmpty()) { |
|
|
|
|
session.tournamentName = realm.getOrCreate(value) |
|
|
|
|
} else { } |
|
|
|
|
} |
|
|
|
|
is SessionField.TournamentType -> session.tournamentType = |
|
|
|
|
TournamentType.getValueForLabel(value)?.ordinal |
|
|
|
|
is SessionField.TournamentNumberOfPlayers -> session.tournamentNumberOfPlayers = |
|
|
|
|
@ -199,26 +221,26 @@ class SessionCSVDescriptor(source: DataSource, private var isTournament: Boolean |
|
|
|
|
|
|
|
|
|
session.bankroll = Bankroll.getOrCreate(realm, bankrollName ?: "Import", isLive, currencyCode, currencyRate) |
|
|
|
|
|
|
|
|
|
val startDate = session.startDate |
|
|
|
|
val endDate = session.endDate |
|
|
|
|
val net = session.result?.net |
|
|
|
|
session.result?.buyin?.let { |
|
|
|
|
session.result?.buyin = it + additionalBuyins |
|
|
|
|
} |
|
|
|
|
val net = session.result?.net |
|
|
|
|
|
|
|
|
|
if (startDate != null && endDate != null && net != null) { // valid session |
|
|
|
|
// session already in realm, we'd love not put it in Realm before doing the check |
|
|
|
|
if (DataUtils.sessionCount(realm, startDate, endDate, net) == 1) { |
|
|
|
|
return session |
|
|
|
|
val count = DataUtils.sessionCount(realm, startDate!!, endDate!!, net) |
|
|
|
|
if (count == 0) { |
|
|
|
|
val managedSession = realm.copyToRealm(session) |
|
|
|
|
managedSession.startDate = startDate |
|
|
|
|
managedSession.endDate = endDate |
|
|
|
|
return managedSession |
|
|
|
|
} else { |
|
|
|
|
Timber.d("Session already exists") |
|
|
|
|
Timber.d("Session already exists(count=$count): sd=$startDate, ed=$endDate, net=$net") |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
Timber.d("Can't import session: sd=$startDate, ed=$endDate, net=$net") |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
session.cleanup() |
|
|
|
|
session.deleteFromRealm() |
|
|
|
|
return null |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|