Beispiel #1
0
 private function addRelatedAgentsToTransactionDetails(SimpleXMLElement $detailXml, EntryTransactionDetail $detail, Entry $entry)
 {
     if (isset($detailXml->RltdAgts)) {
         foreach ($detailXml->RltdAgts as $relatedAgentXml) {
             if ($entry->isDebit() && isset($relatedAgentXml->CdtrAgt)) {
                 $relatedFinancialInstitution = $relatedAgentXml->CdtrAgt->FinInstnId;
                 $agentClass = CreditorAgent::class;
             } elseif ($entry->isCredit() && isset($relatedAgentXml->DbtrAgt)) {
                 $relatedFinancialInstitution = $relatedAgentXml->DbtrAgt->FinInstnId;
                 $agentClass = DebtorAgent::class;
             } else {
                 continue;
             }
             $bankCode = null;
             if (isset($relatedFinancialInstitution->BIC)) {
                 $bankCode = $relatedFinancialInstitution->BIC;
             } elseif (isset($relatedFinancialInstitution->Othr->Id)) {
                 $bankCode = $relatedFinancialInstitution->Othr->Id;
             }
             $name = null;
             if (isset($relatedFinancialInstitution->Nm)) {
                 $name = $relatedFinancialInstitution->Nm;
             }
             /** @var RelatedAgentTypeInterface $agentDetails */
             $agentDetails = new $agentClass((string) $name);
             if (isset($relatedFinancialInstitution->PstlAdr)) {
                 $address = new Address();
                 /** @var SimpleXMLElement $addressPart */
                 foreach ($relatedFinancialInstitution->PstlAdr as $addressPart) {
                     if ($addressPart->getName() === 'Ctry') {
                         $address = $address->setCountry((string) $addressPart);
                     } else {
                         $address = $address->addAddressLine((string) $addressPart);
                     }
                 }
                 $agentDetails->setAddress($address);
             }
             $relatedAgent = new RelatedAgent($agentDetails, (string) $bankCode);
             $detail->addRelatedAgent($relatedAgent);
         }
     }
 }