Completed
Push — master ( b5ae25...349033 )
by Frederik
02:37
created

Message::addStatements()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 20
Code Lines 12

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 16
CRAP Score 2

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 20
ccs 16
cts 16
cp 1
rs 9.4285
cc 2
eloc 12
nc 2
nop 2
crap 2
1
<?php
2
3
namespace Genkgo\Camt\Camt053\Decoder;
4
5
use Genkgo\Camt\Decoder\Message as BaseMessageDecoder;
6
use Genkgo\Camt\Camt053\DTO as Camt053DTO;
7
use Genkgo\Camt\DTO;
8
use \SimpleXMLElement;
9
use \DateTimeImmutable;
10
use Genkgo\Camt\Iban;
11
12
class Message extends BaseMessageDecoder
13
{
14
    /**
15
     * @param DTO\Message      $message
16
     * @param SimpleXMLElement $document
17
     */
18 12
    public function addGroupHeader(DTO\Message $message, SimpleXMLElement $document)
19
    {
20 11
        $xmlGroupHeader = $document->BkToCstmrStmt->GrpHdr;
21 11
        $groupHeader = new DTO\GroupHeader(
22 12
            (string)$xmlGroupHeader->MsgId,
23 11
            new DateTimeImmutable((string)$xmlGroupHeader->CreDtTm)
24 11
        );
25
26 11
        $message->setGroupHeader($groupHeader);
27 11
    }
28
29
    /**
30
     * @param DTO\Message      $message
31
     * @param SimpleXMLElement $document
32
     */
33 11
    public function addRecords(DTO\Message $message, SimpleXMLElement $document)
34 10
    {
35 11
        $statements = [];
36
37 11
        $xmlStatements = $document->BkToCstmrStmt->Stmt;
38 11
        foreach ($xmlStatements as $xmlStatement) {
39 11
            $statement = new Camt053DTO\Statement(
40 11
                (string) $xmlStatement->Id,
41 11
                new DateTimeImmutable((string)$xmlStatement->CreDtTm),
42 11
                $this->getAccount($xmlStatement)
43 11
            );
44
45 11
            $this->recordDecoder->addBalances($statement, $xmlStatement);
46 11
            $this->recordDecoder->addEntries($statement, $xmlStatement);
47
48 11
            $statements[] = $statement;
49 11
        }
50
51 11
        $message->setRecords($statements);
52 11
    }
53
54
    /**
55
     * @param SimpleXMLElement $xmlRecord
56
     *
57
     * @return DTO\Account
58
     */
59 11
    protected function getAccount(SimpleXMLElement $xmlRecord)
60
    {
61 11
        if (isset($xmlRecord->Acct->Id->IBAN)) {
62 9
            return new DTO\IbanAccount(new Iban((string) $xmlRecord->Acct->Id->IBAN));
63
        }
64
65 7
        $xmlOtherIdentification = $xmlRecord->Acct->Id->Othr;
66 7
        $otherAccount = new Camt053DTO\OtherAccount((string) $xmlOtherIdentification->Id);
67
68 7
        if (isset($xmlOtherIdentification->SchmeNm)) {
69
            if (isset($xmlOtherIdentification->SchmeNm->Cd)) {
70
                $otherAccount->setSchemeName((string) $xmlOtherIdentification->SchmeNm->Cd);
71
            }
72
73
            if (isset($otherIdentification->SchmeNm->Prtry)) {
0 ignored issues
show
Bug introduced by
The variable $otherIdentification does not exist. Did you mean $xmlOtherIdentification?

This check looks for variables that are accessed but have not been defined. It raises an issue if it finds another variable that has a similar name.

The variable may have been renamed without also renaming all references.

Loading history...
74 10
                $otherAccount->setSchemeName((string) $xmlOtherIdentification->SchmeNm->Prtry);
75 10
            }
76 10
        }
77
78 7
        if (isset($xmlOtherIdentification->Issr)) {
79 10
            $otherAccount->setIssuer($xmlOtherIdentification->Issr);
80
        }
81
82 7
        return $otherAccount;
83
    }
84
}
85