<?php
namespace Modules\Documents\ImportedDocuments\ImportStatements\Model; abstract class Camt052Abstract extends GeneralAbstract { protected $externalSystemCode; public function validateFormat() : void { $xml = simplexml_load_string($this->statementContents); if (!$xml) { throw new \Modules\Documents\ImportedDocuments\ImportStatements\Model\Exception("The file format is not XML."); } if (!$xml->BkToCstmrStmt) { throw new \Modules\Documents\ImportedDocuments\ImportStatements\Model\Exception("The file format is different than CAMT .052."); } if (!$xml->BkToCstmrStmt->Stmt) { throw new \Modules\Documents\ImportedDocuments\ImportStatements\Model\Exception("The statement is missing from the file."); } if (!$xml->BkToCstmrStmt->Stmt->Ntry) { throw new \Modules\Documents\ImportedDocuments\ImportStatements\Model\Exception("No entries found in the statement."); } } protected function createImportedDocumentObjects() : void { $xml = new \SimpleXMLElement($this->statementContents); foreach ($xml->BkToCstmrStmt->Stmt->Ntry as $entry) { if ((string)$entry->CdtDbtInd == 'CRDT') { $impDocObj = new \App\ImportedDocument\Cashing(); $clientName = (string)$entry->NtryDtls->TxDtls->RltdPties->Dbtr->Pty->Nm; if ($this->getClientType($clientName) == 'legalEntity') { $corporateObj = new \App\ImportedDocument\Corporate(); $corporateObj->name = $clientName; $corporateObj->idSystem = $clientName; $impDocObj->setCorporate($corporateObj); } elseif ($this->getClientType($clientName) == 'individual') { $customerObj = new \App\ImportedDocument\Customer(); list($lastName, $firstName) = explode(' ', $clientName, 2); $customerObj->firstName = $firstName; $customerObj->lastName = $lastName; $customerObj->idSystem = $clientName; $impDocObj->setCustomer($customerObj); } $impDocObj->explanations = (string)$entry->NtryDtls->TxDtls->RltdPties->Dbtr->Pty->Nm." / IBAN: ".(string)$entry->NtryDtls->TxDtls->RltdPties->DbtrAcct->Id->IBAN; } elseif ((string)$entry->CdtDbtInd == 'DBIT') { $impDocObj = new \App\ImportedDocument\Payment(); $supplier = new \App\ImportedDocument\Supplier(); $supplier->idSystem = (string)$entry->NtryDtls->TxDtls->RltdPties->Cdtr->Pty->Nm; $impDocObj->setSupplier($supplier); $impDocObj->explanations = (string)$entry->NtryDtls->TxDtls->RltdPties->Cdtr->Pty->Nm." / IBAN: ".(string)$entry->NtryDtls->TxDtls->RltdPties->CdtrAcct->Id->IBAN; } $impDocObj->operation = 'add'; $docNumber = (string)$entry->NtryDtls->TxDtls->Refs->AcctSvcrRef; $impDocObj->externalSystemCode = $this->externalSystemCode; $impDocObj->idDocumentSystem = sprintf("%s-%s", (string)$entry->BookgDt->Dt, $docNumber); $impDocObj->docNumber = $docNumber; $impDocObj->docType = 'paymentOrder'; $impDocObj->docDate = (string)$entry->BookgDt->Dt; $impDocObj->value = (float)$entry->Amt; $impDocObj->currency = (string)$entry->Amt['Ccy']; $this->importedDocObjList []= $impDocObj; } } }