Issues (24)

src/Camt054/Decoder/Message.php (1 issue)

Labels
Severity
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Genkgo\Camt\Camt054\Decoder;
6
7
use Genkgo\Camt\Camt054\DTO as Camt054DTO;
8
use Genkgo\Camt\Decoder\Message as BaseMessageDecoder;
9
use Genkgo\Camt\DTO;
10
use Genkgo\Camt\DTO\Account;
11
use Genkgo\Camt\Exception\InvalidMessageException;
12
use Genkgo\Camt\Iban;
13
use SimpleXMLElement;
14
15
class Message extends BaseMessageDecoder
16 5
{
17
    public function addRecords(DTO\Message $message, SimpleXMLElement $document): void
18 5
    {
19
        $notifications = [];
20 5
21 5
        $xmlNotifications = $this->getRootElement($document)->Ntfctn;
22 5
        foreach ($xmlNotifications as $xmlNotification) {
23 5
            $notification = new Camt054DTO\Notification(
24 5
                (string) $xmlNotification->Id,
25 5
                $this->dateDecoder->decode((string) $xmlNotification->CreDtTm),
26
                $this->getAccount($xmlNotification)
0 ignored issues
show
It seems like $xmlNotification can also be of type null; however, parameter $xmlRecord of Genkgo\Camt\Camt054\Decoder\Message::getAccount() does only seem to accept SimpleXMLElement, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

26
                $this->getAccount(/** @scrutinizer ignore-type */ $xmlNotification)
Loading history...
27
            );
28 5
29 4
            if (isset($xmlNotification->NtfctnPgntn)) {
30 4
                $notification->setPagination(new DTO\Pagination(
31 4
                    (string) $xmlNotification->NtfctnPgntn->PgNb,
32
                    ('true' === (string) $xmlNotification->NtfctnPgntn->LastPgInd) ? true : false
33
                ));
34
            }
35 5
36 4
            if (isset($xmlNotification->AddtlNtfctnInf)) {
37
                $notification->setAdditionalInformation((string) $xmlNotification->AddtlNtfctnInf);
38
            }
39 5
40 5
            $this->addCommonRecordInformation($notification, $xmlNotification);
41
            $this->recordDecoder->addEntries($notification, $xmlNotification);
42 5
43
            $notifications[] = $notification;
44
        }
45 5
46 5
        $message->setRecords($notifications);
47
    }
48
49
    /**
50
     * @inheritDoc
51 6
     */
52
    public function getRootElement(SimpleXMLElement $document): SimpleXMLElement
53 6
    {
54
        return $document->BkToCstmrDbtCdtNtfctn;
55
    }
56 5
57
    protected function getAccount(SimpleXMLElement $xmlRecord): Account
58 5
    {
59 4
        if (isset($xmlRecord->Acct->Id->IBAN)) {
60
            return new DTO\IbanAccount(new Iban((string) $xmlRecord->Acct->Id->IBAN));
61
        }
62 5
63
        if (isset($xmlRecord->Acct->Id->BBAN)) {
64
            return new DTO\BBANAccount((string) $xmlRecord->Acct->Id->BBAN);
65
        }
66 5
67
        if (isset($xmlRecord->Acct->Id->UPIC)) {
68
            return new DTO\UPICAccount((string) $xmlRecord->Acct->Id->UPIC);
69
        }
70 5
71 1
        if (isset($xmlRecord->Acct->Id->PrtryAcct)) {
72
            return new DTO\ProprietaryAccount((string) $xmlRecord->Acct->Id->PrtryAcct->Id);
73
        }
74 4
75 4
        if (isset($xmlRecord->Acct->Id->Othr)) {
76 4
            $xmlOtherIdentification = $xmlRecord->Acct->Id->Othr;
77
            $otherAccount = new DTO\OtherAccount((string) $xmlOtherIdentification->Id);
78 4
79
            if (isset($xmlOtherIdentification->SchmeNm)) {
80
                if (isset($xmlOtherIdentification->SchmeNm->Cd)) {
81
                    $otherAccount->setSchemeName((string) $xmlOtherIdentification->SchmeNm->Cd);
82
                }
83
84
                if (isset($xmlOtherIdentification->SchmeNm->Prtry)) {
85
                    $otherAccount->setSchemeName((string) $xmlOtherIdentification->SchmeNm->Prtry);
86
                }
87
            }
88 4
89
            if (isset($xmlOtherIdentification->Issr)) {
90
                $otherAccount->setIssuer((string) $xmlOtherIdentification->Issr);
91
            }
92 4
93
            return $otherAccount;
94
        }
95
96
        throw new InvalidMessageException('Cannot decode account');
97
    }
98
}
99