diff --git a/lib/Fhp/Protocol/Message.php b/lib/Fhp/Protocol/Message.php index c637a896..d09cff36 100644 --- a/lib/Fhp/Protocol/Message.php +++ b/lib/Fhp/Protocol/Message.php @@ -217,6 +217,23 @@ public function findRueckmeldungen(int $code): array return $rueckmeldungen; } + /** + * @param int $requestSegmentNumber Only consider Rueckmeldungen that pertain to this request segment. + * @return int[] The codes of all the Rueckmeldung instances matching the request segment. + */ + public function findRueckmeldungscodesForReferenceSegment(int $requestSegmentNumber): array + { + $codes = []; + foreach ($this->plainSegments as $segment) { + if ($segment instanceof RueckmeldungContainer && $segment->segmentkopf->bezugselement === $requestSegmentNumber) { + foreach ($segment->getAllRueckmeldungen() as $rueckmeldung) { + $codes[] = $rueckmeldung->rueckmeldungscode; + } + } + } + return $codes; + } + /** * @return string The HBCI/FinTS wire format for this message, ISO-8859-1 encoded. */ diff --git a/lib/Fhp/Segment/HIRMS/FindRueckmeldungTrait.php b/lib/Fhp/Segment/HIRMS/FindRueckmeldungTrait.php index 2f0bebda..d41e44b6 100644 --- a/lib/Fhp/Segment/HIRMS/FindRueckmeldungTrait.php +++ b/lib/Fhp/Segment/HIRMS/FindRueckmeldungTrait.php @@ -29,4 +29,10 @@ public function findRueckmeldungen(int $code): array return $rueckmeldung->rueckmeldungscode === $code; })); } + + /** @return Rueckmeldung[] */ + public function getAllRueckmeldungen(): array + { + return $this->rueckmeldung; + } } diff --git a/lib/Fhp/Segment/HIRMS/RueckmeldungContainer.php b/lib/Fhp/Segment/HIRMS/RueckmeldungContainer.php index 33bcdd07..5f45baa6 100644 --- a/lib/Fhp/Segment/HIRMS/RueckmeldungContainer.php +++ b/lib/Fhp/Segment/HIRMS/RueckmeldungContainer.php @@ -15,4 +15,7 @@ public function findRueckmeldung(int $code): ?Rueckmeldung; /** @return Rueckmeldung[] */ public function findRueckmeldungen(int $code): array; + + /** @return Rueckmeldung[] */ + public function getAllRueckmeldungen(): array; } diff --git a/lib/Tests/Fhp/Segment/FindRueckmeldungTraitTest.php b/lib/Tests/Fhp/Segment/FindRueckmeldungTraitTest.php new file mode 100644 index 00000000..3b9ce9ab --- /dev/null +++ b/lib/Tests/Fhp/Segment/FindRueckmeldungTraitTest.php @@ -0,0 +1,62 @@ +testMessage = Message::createPlainMessage( + MessageBuilder::create() + ->add(Parser::parseSegments(self::TEST_RESPONSE)) + ); + } + + public function testFindRueckmeldungFound() + { + $this->assertEquals('Angemeldet.', $this->testMessage->findRueckmeldung(20)->rueckmeldungstext); + $this->assertEquals([900], $this->testMessage->findRueckmeldung(3920)->rueckmeldungsparameter); + } + + public function testFindRueckmeldungNotFound() + { + $this->assertNull($this->testMessage->findRueckmeldung(42)); + } + + public function testFindRueckmeldungen() + { + $this->assertCount(3, $this->testMessage->findRueckmeldungen(20)); + $this->assertCount(1, $this->testMessage->findRueckmeldungen(3920)); + $this->assertCount(0, $this->testMessage->findRueckmeldungen(42)); + } + + public function testGetAllRueckmeldungen() + { + /** @var HIRMGv2 $hirmg */ + $hirmg = $this->testMessage->findSegmentByNumber(2); + $this->assertCount(1, $hirmg->getAllRueckmeldungen()); + + /** @var HIRMSv2 $hirms */ + $hirms = $this->testMessage->findSegmentByNumber(3); + $this->assertCount(3, $hirms->getAllRueckmeldungen()); + } + + public function testFindRueckmeldungscodesForReferenceSegment() + { + $this->assertEquals([20, 3076, 901], $this->testMessage->findRueckmeldungscodesForReferenceSegment(3)); + $this->assertEquals([20, 3920], $this->testMessage->findRueckmeldungscodesForReferenceSegment(4)); + $this->assertEquals([20], $this->testMessage->findRueckmeldungscodesForReferenceSegment(6)); + } +}