From 5d7e0394a080158812a6765d88aabe99596e3da2 Mon Sep 17 00:00:00 2001 From: fds2610-bot Date: Wed, 30 Sep 2026 14:26:00 +0200 Subject: [PATCH] Support HKWPD/HIWPD/HIWPDS version 6 for the depot statement DKB announces HIWPDS only in version 6, so GetDepotAufstellung failed with 'The server does not support any HIWPDS versions implemented in this library'. Also declares the pagination token for the new request segment. --- Tests/Unit/Segment/HKWPDTest.php | 36 ++++++++++++++++++++++++++++++ src/Action/GetDepotAufstellung.php | 9 +++++++- src/Segment/WPD/HIWPDSv6.php | 22 ++++++++++++++++++ src/Segment/WPD/HIWPDv6.php | 24 ++++++++++++++++++++ src/Segment/WPD/HKWPDv6.php | 35 +++++++++++++++++++++++++++++ 5 files changed, 125 insertions(+), 1 deletion(-) create mode 100644 Tests/Unit/Segment/HKWPDTest.php create mode 100644 src/Segment/WPD/HIWPDSv6.php create mode 100644 src/Segment/WPD/HIWPDv6.php create mode 100644 src/Segment/WPD/HKWPDv6.php diff --git a/Tests/Unit/Segment/HKWPDTest.php b/Tests/Unit/Segment/HKWPDTest.php new file mode 100644 index 00000000..6da4bf91 --- /dev/null +++ b/Tests/Unit/Segment/HKWPDTest.php @@ -0,0 +1,36 @@ +assertEquals(6, $hiwpds->getVersion()); + $this->assertFalse($hiwpds->getParameter()->getEingabeAnzahlEintraegeErlaubt()); + $this->assertFalse($hiwpds->getParameter()->getWaehrungDepotaufstellungWaehlbar()); + $this->assertFalse($hiwpds->getParameter()->getKursqualitaetWaehlbar()); + } + + public function testRequestOfVersion6() + { + $hkwpd = HKWPDv6::create(KtvV3::create('502022353', null, Kik::create('12030000'))); + $hkwpd->setSegmentNumber(3); + $this->assertEquals("HKWPD:3:6+502022353::280:12030000'", $hkwpd->serialize()); + + $hkwpd->setPaginationToken('TOKEN'); + $this->assertEquals("HKWPD:3:6+502022353::280:12030000++++TOKEN'", $hkwpd->serialize()); + } +} diff --git a/src/Action/GetDepotAufstellung.php b/src/Action/GetDepotAufstellung.php index 17e644e3..c67493b2 100644 --- a/src/Action/GetDepotAufstellung.php +++ b/src/Action/GetDepotAufstellung.php @@ -15,7 +15,9 @@ use Fhp\Segment\WPD\HIWPD; use Fhp\Segment\WPD\HIWPDS; use Fhp\Segment\WPD\HIWPDv5; +use Fhp\Segment\WPD\HIWPDv6; use Fhp\Segment\WPD\HKWPDv5; +use Fhp\Segment\WPD\HKWPDv6; use Fhp\UnsupportedException; /** @@ -119,6 +121,8 @@ protected function createRequest(BPD $bpd, ?UPD $upd) switch ($hiwpds->getVersion()) { case 5: return HKWPDv5::create(KtvV3::fromAccount($this->account)); + case 6: + return HKWPDv6::create(KtvV3::fromAccount($this->account)); default: throw new UnsupportedException('Unsupported HKWPD version: ' . $hiwpds->getVersion()); } @@ -129,7 +133,10 @@ public function processResponse(Message $response) parent::processResponse($response); $isUnavailable = $response->findRueckmeldung(Rueckmeldungscode::NICHT_VERFUEGBAR) !== null; - $responseHiwpd = $response->findSegments(HIWPDv5::class); + $responseHiwpd = array_merge( + $response->findSegments(HIWPDv5::class), + $response->findSegments(HIWPDv6::class) + ); $numResponseSegments = count($responseHiwpd); if (!$isUnavailable && $numResponseSegments < count($this->getRequestSegmentNumbers())) { diff --git a/src/Segment/WPD/HIWPDSv6.php b/src/Segment/WPD/HIWPDSv6.php new file mode 100644 index 00000000..70d6ae84 --- /dev/null +++ b/src/Segment/WPD/HIWPDSv6.php @@ -0,0 +1,22 @@ +parameter; + } +} diff --git a/src/Segment/WPD/HIWPDv6.php b/src/Segment/WPD/HIWPDv6.php new file mode 100644 index 00000000..efdae189 --- /dev/null +++ b/src/Segment/WPD/HIWPDv6.php @@ -0,0 +1,24 @@ +depotaufstellung; + } +} diff --git a/src/Segment/WPD/HKWPDv6.php b/src/Segment/WPD/HKWPDv6.php new file mode 100644 index 00000000..90410943 --- /dev/null +++ b/src/Segment/WPD/HKWPDv6.php @@ -0,0 +1,35 @@ +depot = $ktv; + return $result; + } + + public function setPaginationToken(string $paginationToken) + { + $this->aufsetzpunkt = $paginationToken; + } +}