From b35f1146a5fab7f097f16ee0e63bb23bd658cad2 Mon Sep 17 00:00:00 2001 From: dankito Date: Thu, 22 Aug 2024 18:23:44 +0200 Subject: [PATCH] Added example to show the options of getAccountData() --- README.md | 24 +++++++++++-- .../client/fints4k/example/ShowUsage.kt | 34 +++++++++++++++++-- 2 files changed, 53 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index ea4afeb8..76777a2e 100644 --- a/README.md +++ b/README.md @@ -32,11 +32,13 @@ dependencies { ## Usage +For the full example source code see [ShowUsage](SampleApp/src/main/kotlin/net/codinux/banking/client/fints4k/example/ShowUsage.kt). + ### Get AccountData Retrieves data like accounts, balance and booked transactions (Konten, Saldo und Kontoumsätze). -Basically: +Simple example: ```kotlin class ShowUsage { @@ -52,7 +54,12 @@ class ShowUsage { val client = FinTs4kBankingClientForCustomer(bankCode, loginName, password, SimpleBankingClientCallback()) val response = client.getAccountData() - + + printReceivedData(response) + } + + + private fun printReceivedData(response: Response) { response.data?.let { data -> val customer = data.customer println("Kunde: ${customer.customerName} ${customer.accounts.size} Konten @ ${customer.bic} ${customer.bankName}") @@ -84,6 +91,19 @@ val client = FinTs4kBankingClientForCustomer(bankCode, loginName, password, Simp }) ``` +You can also specify options e.g. which transactions should be retrieved: + +```kotlin +val options = GetAccountDataOptions( + retrieveBalance = true, // retrieve balance (Saldo / Kontostand) yes or no + retrieveTransactions = RetrieveTransactions.AccordingToRetrieveFromAndTo, // so that fromDate and toDate below determine of which time period transactions (Umsätze) should be retrieved; defaults to OfLast90Days which in most cases doesn't require a TAN + retrieveTransactionsFrom = LocalDate(2023, 1, 1), + retrieveTransactionsTo = LocalDate(2023, 12, 31), + abortIfTanIsRequired = false // e.g. for command line application when entering TAN is either not possible or a TAN procedure is used that cannot be handled via a break point (e.g. showing a TAN image or flicker code) +) +val response = client.getAccountData(options) +``` + Add some error handling by checking `response.error`: ```kotlin diff --git a/SampleApp/src/main/kotlin/net/codinux/banking/client/fints4k/example/ShowUsage.kt b/SampleApp/src/main/kotlin/net/codinux/banking/client/fints4k/example/ShowUsage.kt index 869a3a3c..07edbf62 100644 --- a/SampleApp/src/main/kotlin/net/codinux/banking/client/fints4k/example/ShowUsage.kt +++ b/SampleApp/src/main/kotlin/net/codinux/banking/client/fints4k/example/ShowUsage.kt @@ -1,12 +1,20 @@ package net.codinux.banking.client.fints4k.example +import kotlinx.datetime.LocalDate import net.codinux.banking.client.SimpleBankingClientCallback import net.codinux.banking.client.fints4k.FinTs4kBankingClientForCustomer import net.codinux.banking.client.getAccountData +import net.codinux.banking.client.model.options.GetAccountDataOptions +import net.codinux.banking.client.model.options.RetrieveTransactions +import net.codinux.banking.client.model.response.GetAccountDataResponse +import net.codinux.banking.client.model.response.Response import net.codinux.banking.client.model.tan.EnterTanResult fun main() { - ShowUsage().getAccountData() + val showUsage = ShowUsage() + + showUsage.getAccountDataSimpleExample() +// showUsage.getAccountDataFullExample() } class ShowUsage { @@ -18,18 +26,38 @@ class ShowUsage { private val password = "" // Online-Banking Password mit dem du dich beim Online-Banking deiner Bank anmeldest - fun getAccountData() { + fun getAccountDataSimpleExample() { + val client = FinTs4kBankingClientForCustomer(bankCode, loginName, password, SimpleBankingClientCallback()) + + val response = client.getAccountData() + + printReceivedData(response) + } + + fun getAccountDataFullExample() { val client = FinTs4kBankingClientForCustomer(bankCode, loginName, password, SimpleBankingClientCallback { tanChallenge, callback -> val tan: String? = null // if a TAN is required, add a UI or ... callback.invoke(EnterTanResult(tan)) // ... set a break point here, get TAN e.g. from your TAN app, set tan variable in debugger view and resume debugger }) - val response = client.getAccountData() + val options = GetAccountDataOptions( + retrieveBalance = true, // retrieve balance (Saldo / Kontostand) yes or no + retrieveTransactions = RetrieveTransactions.AccordingToRetrieveFromAndTo, // so that fromDate and toDate below determine of which time period transactions (Umsätze) should be retrieved; defaults to OfLast90Days which in most cases doesn't require a TAN + retrieveTransactionsFrom = LocalDate(2023, 1, 1), + retrieveTransactionsTo = LocalDate(2023, 12, 31), + abortIfTanIsRequired = false // e.g. for command line application when entering TAN is either not possible or a TAN procedure is used that cannot be handled via a break point (e.g. showing a TAN image or flicker code) + ) + val response = client.getAccountData(options) response.error?.let{ error -> println("Could not fetch account data: ${error.internalError ?: error.errorMessagesFromBank.joinToString()}") } + printReceivedData(response) + } + + + private fun printReceivedData(response: Response) { response.data?.let { data -> val customer = data.customer println("Kunde: ${customer.customerName} ${customer.accounts.size} Konten @ ${customer.bic} ${customer.bankName}")