Renamed haveAllTransactionsBeenRetrieved to haveAllRetainedTransactionsBeenRetrieved and made it evaluating countDaysForWhichTransactionsAreKeptOnBankServer and retrievedTransactionsFrom instead of being set to a fixed value

This commit is contained in:
dankito 2024-09-05 22:04:05 +02:00
parent bd052587c5
commit 1e5c83c369
1 changed files with 18 additions and 5 deletions

View File

@ -1,7 +1,6 @@
package net.codinux.banking.client.model
import kotlinx.datetime.Instant
import kotlinx.datetime.LocalDate
import kotlinx.datetime.*
import net.codinux.banking.client.model.config.JsonIgnore
import net.codinux.banking.client.model.config.NoArgConstructor
@ -22,12 +21,10 @@ open class BankAccount(
val isAccountTypeSupportedByApplication: Boolean = false,
val features: Set<BankAccountFeatures> = emptySet(),
val countDaysForWhichTransactionsAreKeptOnBankServer: Int? = null,
open var lastTransactionsRetrievalTime: Instant? = null,
var retrievedTransactionsFrom: LocalDate? = null,
var haveAllTransactionsBeenRetrieved: Boolean = false,
val countDaysForWhichTransactionsAreKept: Int? = null,
open val bookedTransactions: MutableList<AccountTransaction> = mutableListOf(),
open val unbookedTransactions: MutableList<UnbookedAccountTransaction> = mutableListOf(),
@ -44,5 +41,21 @@ open class BankAccount(
fun supportsAnyFeature(vararg features: BankAccountFeatures): Boolean =
features.any { this.features.contains(it) }
/**
* Determines if all transactions that are retained on bank server have been fetched.
*
* Does this by comparing [countDaysForWhichTransactionsAreKeptOnBankServer] to [retrievedTransactionsFrom].
*/
open val haveAllRetainedTransactionsBeenRetrieved: Boolean by lazy {
val fromDay = retrievedTransactionsFrom
if (fromDay == null) {
false
} else {
// if countDaysForWhichTransactionsAreKeptOnBankServer is not set, we cannot know for how long bank server keeps transactions. We then assume for 90 days
val storageDays = countDaysForWhichTransactionsAreKeptOnBankServer ?: 90
fromDay < Clock.System.now().toLocalDateTime(TimeZone.of("Europe/Berlin")).date.minus(storageDays, DateTimeUnit.DAY)
}
}
override fun toString() = "$type $identifier $productName (IBAN: $iban)"
}