From cb9dc30c95350ed67c436df53977a769b3bea63b Mon Sep 17 00:00:00 2001 From: dankito Date: Wed, 29 Apr 2020 20:05:29 +0200 Subject: [PATCH] Implemented HKSAL version 7 --- .../dankito/fints/messages/MessageBuilder.kt | 12 +++---- ...{Saldenabfrage.kt => SaldenabfrageBase.kt} | 12 +++---- .../umsaetze/SaldenabfrageVersion5.kt | 14 ++++++++ .../umsaetze/SaldenabfrageVersion7.kt | 16 +++++++++ ...geTest.kt => SaldenabfrageVersion5Test.kt} | 7 ++-- .../umsaetze/SaldenabfrageVersion7Test.kt | 36 +++++++++++++++++++ 6 files changed, 82 insertions(+), 15 deletions(-) rename fints4javaLib/src/main/kotlin/net/dankito/fints/messages/segmente/implementierte/umsaetze/{Saldenabfrage.kt => SaldenabfrageBase.kt} (75%) create mode 100644 fints4javaLib/src/main/kotlin/net/dankito/fints/messages/segmente/implementierte/umsaetze/SaldenabfrageVersion5.kt create mode 100644 fints4javaLib/src/main/kotlin/net/dankito/fints/messages/segmente/implementierte/umsaetze/SaldenabfrageVersion7.kt rename fints4javaLib/src/test/kotlin/net/dankito/fints/messages/segmente/implementierte/umsaetze/{SaldenabfrageTest.kt => SaldenabfrageVersion5Test.kt} (77%) create mode 100644 fints4javaLib/src/test/kotlin/net/dankito/fints/messages/segmente/implementierte/umsaetze/SaldenabfrageVersion7Test.kt diff --git a/fints4javaLib/src/main/kotlin/net/dankito/fints/messages/MessageBuilder.kt b/fints4javaLib/src/main/kotlin/net/dankito/fints/messages/MessageBuilder.kt index 3bb16120..4e5ff767 100644 --- a/fints4javaLib/src/main/kotlin/net/dankito/fints/messages/MessageBuilder.kt +++ b/fints4javaLib/src/main/kotlin/net/dankito/fints/messages/MessageBuilder.kt @@ -15,10 +15,7 @@ import net.dankito.fints.messages.segmente.implementierte.* import net.dankito.fints.messages.segmente.implementierte.sepa.SepaEinzelueberweisung import net.dankito.fints.messages.segmente.implementierte.tan.TanGeneratorListeAnzeigen import net.dankito.fints.messages.segmente.implementierte.tan.TanGeneratorTanMediumAnOderUmmelden -import net.dankito.fints.messages.segmente.implementierte.umsaetze.KontoumsaetzeZeitraumMt940Version5 -import net.dankito.fints.messages.segmente.implementierte.umsaetze.KontoumsaetzeZeitraumMt940Version6 -import net.dankito.fints.messages.segmente.implementierte.umsaetze.KontoumsaetzeZeitraumMt940Version7 -import net.dankito.fints.messages.segmente.implementierte.umsaetze.Saldenabfrage +import net.dankito.fints.messages.segmente.implementierte.umsaetze.* import net.dankito.fints.model.* import net.dankito.fints.response.segments.JobParameters import net.dankito.fints.response.segments.SepaAccountInfoParameters @@ -142,8 +139,11 @@ open class MessageBuilder(protected val generator: ISegmentNumberGenerator = Seg val result = supportsGetBalanceMessage(account) if (result.isJobVersionSupported) { + val balanceJob = if (result.isAllowed(5)) SaldenabfrageVersion5(generator.resetSegmentNumber(2), account) + else SaldenabfrageVersion7(generator.resetSegmentNumber(2), account, bank) + val segments = listOf( - Saldenabfrage(generator.resetSegmentNumber(2), account), + balanceJob, ZweiSchrittTanEinreichung(generator.getNextSegmentNumber(), TanProcess.TanProcess4, CustomerSegmentId.Balance) ) @@ -158,7 +158,7 @@ open class MessageBuilder(protected val generator: ISegmentNumberGenerator = Seg } protected open fun supportsGetBalanceMessage(account: AccountData): MessageBuilderResult { - return getSupportedVersionsOfJob(CustomerSegmentId.Balance, account, listOf(5)) + return getSupportedVersionsOfJob(CustomerSegmentId.Balance, account, listOf(5, 7)) } diff --git a/fints4javaLib/src/main/kotlin/net/dankito/fints/messages/segmente/implementierte/umsaetze/Saldenabfrage.kt b/fints4javaLib/src/main/kotlin/net/dankito/fints/messages/segmente/implementierte/umsaetze/SaldenabfrageBase.kt similarity index 75% rename from fints4javaLib/src/main/kotlin/net/dankito/fints/messages/segmente/implementierte/umsaetze/Saldenabfrage.kt rename to fints4javaLib/src/main/kotlin/net/dankito/fints/messages/segmente/implementierte/umsaetze/SaldenabfrageBase.kt index 9d99cc78..5c586d56 100644 --- a/fints4javaLib/src/main/kotlin/net/dankito/fints/messages/segmente/implementierte/umsaetze/Saldenabfrage.kt +++ b/fints4javaLib/src/main/kotlin/net/dankito/fints/messages/segmente/implementierte/umsaetze/SaldenabfrageBase.kt @@ -4,23 +4,23 @@ import net.dankito.fints.messages.Existenzstatus import net.dankito.fints.messages.datenelemente.implementierte.Aufsetzpunkt import net.dankito.fints.messages.datenelemente.implementierte.account.AlleKonten import net.dankito.fints.messages.datenelemente.implementierte.account.MaximaleAnzahlEintraege +import net.dankito.fints.messages.datenelementgruppen.Datenelementgruppe import net.dankito.fints.messages.datenelementgruppen.implementierte.Segmentkopf -import net.dankito.fints.messages.datenelementgruppen.implementierte.account.Kontoverbindung import net.dankito.fints.messages.segmente.Segment import net.dankito.fints.messages.segmente.id.CustomerSegmentId -import net.dankito.fints.model.AccountData -open class Saldenabfrage( +open class SaldenabfrageBase( segmentNumber: Int, - account: AccountData, + segmentVersion: Int, + account: Datenelementgruppe, allAccounts: Boolean = false, maxAmountEntries: Int? = null, continuationId: String? = null ) : Segment(listOf( - Segmentkopf(CustomerSegmentId.Balance, 5, segmentNumber), - Kontoverbindung(account), + Segmentkopf(CustomerSegmentId.Balance, segmentVersion, segmentNumber), + account, AlleKonten(allAccounts, Existenzstatus.Mandatory), MaximaleAnzahlEintraege(maxAmountEntries, Existenzstatus.Optional), Aufsetzpunkt(continuationId, Existenzstatus.Optional) diff --git a/fints4javaLib/src/main/kotlin/net/dankito/fints/messages/segmente/implementierte/umsaetze/SaldenabfrageVersion5.kt b/fints4javaLib/src/main/kotlin/net/dankito/fints/messages/segmente/implementierte/umsaetze/SaldenabfrageVersion5.kt new file mode 100644 index 00000000..f87f0d5f --- /dev/null +++ b/fints4javaLib/src/main/kotlin/net/dankito/fints/messages/segmente/implementierte/umsaetze/SaldenabfrageVersion5.kt @@ -0,0 +1,14 @@ +package net.dankito.fints.messages.segmente.implementierte.umsaetze + +import net.dankito.fints.messages.datenelementgruppen.implementierte.account.Kontoverbindung +import net.dankito.fints.model.AccountData + + +open class SaldenabfrageVersion5( + segmentNumber: Int, + account: AccountData, + allAccounts: Boolean = false, + maxAmountEntries: Int? = null, + continuationId: String? = null +) + : SaldenabfrageBase(segmentNumber, 5, Kontoverbindung(account), allAccounts, maxAmountEntries, continuationId) \ No newline at end of file diff --git a/fints4javaLib/src/main/kotlin/net/dankito/fints/messages/segmente/implementierte/umsaetze/SaldenabfrageVersion7.kt b/fints4javaLib/src/main/kotlin/net/dankito/fints/messages/segmente/implementierte/umsaetze/SaldenabfrageVersion7.kt new file mode 100644 index 00000000..049652fc --- /dev/null +++ b/fints4javaLib/src/main/kotlin/net/dankito/fints/messages/segmente/implementierte/umsaetze/SaldenabfrageVersion7.kt @@ -0,0 +1,16 @@ +package net.dankito.fints.messages.segmente.implementierte.umsaetze + +import net.dankito.fints.messages.datenelementgruppen.implementierte.account.KontoverbindungInternational +import net.dankito.fints.model.AccountData +import net.dankito.fints.model.BankData + + +open class SaldenabfrageVersion7( + segmentNumber: Int, + account: AccountData, + bank: BankData, + allAccounts: Boolean = false, + maxAmountEntries: Int? = null, + continuationId: String? = null +) + : SaldenabfrageBase(segmentNumber, 7, KontoverbindungInternational(account, bank), allAccounts, maxAmountEntries, continuationId) \ No newline at end of file diff --git a/fints4javaLib/src/test/kotlin/net/dankito/fints/messages/segmente/implementierte/umsaetze/SaldenabfrageTest.kt b/fints4javaLib/src/test/kotlin/net/dankito/fints/messages/segmente/implementierte/umsaetze/SaldenabfrageVersion5Test.kt similarity index 77% rename from fints4javaLib/src/test/kotlin/net/dankito/fints/messages/segmente/implementierte/umsaetze/SaldenabfrageTest.kt rename to fints4javaLib/src/test/kotlin/net/dankito/fints/messages/segmente/implementierte/umsaetze/SaldenabfrageVersion5Test.kt index 01232226..b8a00635 100644 --- a/fints4javaLib/src/test/kotlin/net/dankito/fints/messages/segmente/implementierte/umsaetze/SaldenabfrageTest.kt +++ b/fints4javaLib/src/test/kotlin/net/dankito/fints/messages/segmente/implementierte/umsaetze/SaldenabfrageVersion5Test.kt @@ -4,13 +4,14 @@ import net.dankito.fints.FinTsTestBase import org.assertj.core.api.Assertions.assertThat import org.junit.Test -class SaldenabfrageTest : FinTsTestBase() { + +class SaldenabfrageVersion5Test : FinTsTestBase() { @Test fun format_NotAllAccounts() { // given - val underTest = Saldenabfrage(3, Account, false) + val underTest = SaldenabfrageVersion5(3, Account, false) // when val result = underTest.format() @@ -23,7 +24,7 @@ class SaldenabfrageTest : FinTsTestBase() { fun format_AllAccounts() { // given - val underTest = Saldenabfrage(3, Account, true) + val underTest = SaldenabfrageVersion5(3, Account, true) // when val result = underTest.format() diff --git a/fints4javaLib/src/test/kotlin/net/dankito/fints/messages/segmente/implementierte/umsaetze/SaldenabfrageVersion7Test.kt b/fints4javaLib/src/test/kotlin/net/dankito/fints/messages/segmente/implementierte/umsaetze/SaldenabfrageVersion7Test.kt new file mode 100644 index 00000000..f1fbe338 --- /dev/null +++ b/fints4javaLib/src/test/kotlin/net/dankito/fints/messages/segmente/implementierte/umsaetze/SaldenabfrageVersion7Test.kt @@ -0,0 +1,36 @@ +package net.dankito.fints.messages.segmente.implementierte.umsaetze + +import net.dankito.fints.FinTsTestBase +import org.assertj.core.api.Assertions.assertThat +import org.junit.Test + + +class SaldenabfrageVersion7Test : FinTsTestBase() { + + @Test + fun format_NotAllAccounts() { + + // given + val underTest = SaldenabfrageVersion7(3, Account, Bank, false) + + // when + val result = underTest.format() + + // then + assertThat(result).isEqualTo("HKSAL:3:7+$Iban::$CustomerId::280:$BankCode+N") + } + + @Test + fun format_AllAccounts() { + + // given + val underTest = SaldenabfrageVersion7(3, Account, Bank, true) + + // when + val result = underTest.format() + + // then + assertThat(result).isEqualTo("HKSAL:3:7+$Iban::$CustomerId::280:$BankCode+J") + } + +} \ No newline at end of file