diff --git a/src/XmlConverterCiiToUbl.php b/src/XmlConverterCiiToUbl.php index 05074b0..c17c5cd 100644 --- a/src/XmlConverterCiiToUbl.php +++ b/src/XmlConverterCiiToUbl.php @@ -167,9 +167,9 @@ public function enableAmountFormatDisabled(): XmlConverterCiiToUbl private function checkValidSource(): void { $invoiceElement = $this->source->query('//rsm:CrossIndustryInvoice')->item(0); - $invoiceExchangeDocumentContext = $this->source->query('//rsm:ExchangedDocumentContext', $invoiceElement)->item(0); + $invoiceExchangeDocumentContext = $this->source->query('./rsm:ExchangedDocumentContext', $invoiceElement)->item(0); - $submittedProfile = $this->source->queryValue('.//ram:GuidelineSpecifiedDocumentContextParameter/ram:ID', $invoiceExchangeDocumentContext); + $submittedProfile = $this->source->queryValue('./ram:GuidelineSpecifiedDocumentContextParameter/ram:ID', $invoiceExchangeDocumentContext); if (!in_array($submittedProfile, static::SUPPORTED_PROFILES)) { throw new \RuntimeException(sprintf('The submitted profile %s is not supported', $submittedProfile)); @@ -184,41 +184,41 @@ private function checkValidSource(): void private function convertGeneral(): void { $invoiceElement = $this->source->query('//rsm:CrossIndustryInvoice')->item(0); - $invoiceExchangeDocumentContext = $this->source->query('//rsm:ExchangedDocumentContext', $invoiceElement)->item(0); - $invoiceExchangeDocument = $this->source->query('//rsm:ExchangedDocument', $invoiceElement)->item(0); - $invoiceSuppyChainTradeTransaction = $this->source->query('//rsm:SupplyChainTradeTransaction', $invoiceElement)->item(0); - $invoiceHeaderSettlement = $this->source->query('//ram:ApplicableHeaderTradeSettlement', $invoiceSuppyChainTradeTransaction)->item(0); - $invoiceHeaderAgreement = $this->source->query('//ram:ApplicableHeaderTradeAgreement', $invoiceSuppyChainTradeTransaction)->item(0); - $invoiceHeaderDelivery = $this->source->query('//ram:ApplicableHeaderTradeDelivery', $invoiceSuppyChainTradeTransaction)->item(0); - - $this->destination->element('cbc:CustomizationID', $this->source->queryValue('.//ram:GuidelineSpecifiedDocumentContextParameter/ram:ID', $invoiceExchangeDocumentContext)); + $invoiceExchangeDocumentContext = $this->source->query('./rsm:ExchangedDocumentContext', $invoiceElement)->item(0); + $invoiceExchangeDocument = $this->source->query('./rsm:ExchangedDocument', $invoiceElement)->item(0); + $invoiceSuppyChainTradeTransaction = $this->source->query('./rsm:SupplyChainTradeTransaction', $invoiceElement)->item(0); + $invoiceHeaderSettlement = $this->source->query('./ram:ApplicableHeaderTradeSettlement', $invoiceSuppyChainTradeTransaction)->item(0); + $invoiceHeaderAgreement = $this->source->query('./ram:ApplicableHeaderTradeAgreement', $invoiceSuppyChainTradeTransaction)->item(0); + $invoiceHeaderDelivery = $this->source->query('./ram:ApplicableHeaderTradeDelivery', $invoiceSuppyChainTradeTransaction)->item(0); + + $this->destination->element('cbc:CustomizationID', $this->source->queryValue('./ram:GuidelineSpecifiedDocumentContextParameter/ram:ID', $invoiceExchangeDocumentContext)); $this->destination->element('cbc:ProfileID', 'urn:fdc:peppol.eu:2017:poacc:billing:01:1.0'); - $this->destination->element('cbc:ID', $this->source->queryValue('.//ram:ID', $invoiceExchangeDocument)); + $this->destination->element('cbc:ID', $this->source->queryValue('./ram:ID', $invoiceExchangeDocument)); $this->destination->element( 'cbc:IssueDate', $this->convertDateTime( - $this->source->queryValue('.//ram:IssueDateTime/udt:DateTimeString', $invoiceExchangeDocument), - $this->source->queryValue('.//ram:IssueDateTime/udt:DateTimeString/@format', $invoiceExchangeDocument) + $this->source->queryValue('./ram:IssueDateTime/udt:DateTimeString', $invoiceExchangeDocument), + $this->source->queryValue('./ram:IssueDateTime/udt:DateTimeString/@format', $invoiceExchangeDocument) ) ); $this->destination->element( 'cbc:DueDate', $this->convertDateTime( - $this->source->queryValue('.//ram:SpecifiedTradePaymentTerms/ram:DueDateDateTime/udt:DateTimeString', $invoiceHeaderSettlement), - $this->source->queryValue('.//ram:SpecifiedTradePaymentTerms/ram:DueDateDateTime/udt:DateTimeString/@format', $invoiceHeaderSettlement) + $this->source->queryValue('./ram:SpecifiedTradePaymentTerms/ram:DueDateDateTime/udt:DateTimeString', $invoiceHeaderSettlement), + $this->source->queryValue('./ram:SpecifiedTradePaymentTerms/ram:DueDateDateTime/udt:DateTimeString/@format', $invoiceHeaderSettlement) ) ); - $this->destination->element('cbc:InvoiceTypeCode', $this->source->queryValue('.//ram:TypeCode', $invoiceExchangeDocument)); + $this->destination->element('cbc:InvoiceTypeCode', $this->source->queryValue('./ram:TypeCode', $invoiceExchangeDocument)); - $this->source->queryValues('.//ram:IncludedNote', $invoiceExchangeDocument)->forEach( + $this->source->queryValues('./ram:IncludedNote', $invoiceExchangeDocument)->forEach( function ($includedNoteNode) { - $note = $this->source->queryValue('.//ram:Content', $includedNoteNode); - if ($this->source->queryValue('.//ram:SubjectCode', $includedNoteNode)) { - $note = sprintf('#%s#%s', $this->source->queryValue('.//ram:SubjectCode'), $note); + $note = $this->source->queryValue('./ram:Content', $includedNoteNode); + if ($this->source->queryValue('./ram:SubjectCode', $includedNoteNode)) { + $note = sprintf('#%s#%s', $this->source->queryValue('./ram:SubjectCode', $includedNoteNode), $note); } $this->destination->element('cbc:Note', $note); } @@ -227,36 +227,36 @@ function ($includedNoteNode) { $this->destination->element( 'cbc:TaxPointDate', $this->convertDateTime( - $this->source->queryValue('.//ram:ApplicableTradeTax/ram:TaxPointDate/udt:DateString', $invoiceHeaderSettlement), - $this->source->queryValue('.//ram:ApplicableTradeTax/ram:TaxPointDate/udt:DateString/@format', $invoiceHeaderSettlement) + $this->source->queryValue('./ram:ApplicableTradeTax/ram:TaxPointDate/udt:DateString', $invoiceHeaderSettlement), + $this->source->queryValue('./ram:ApplicableTradeTax/ram:TaxPointDate/udt:DateString/@format', $invoiceHeaderSettlement) ) ); - $this->destination->element('cbc:DocumentCurrencyCode', $this->source->queryValue('.//ram:InvoiceCurrencyCode', $invoiceHeaderSettlement)); + $this->destination->element('cbc:DocumentCurrencyCode', $this->source->queryValue('./ram:InvoiceCurrencyCode', $invoiceHeaderSettlement)); - $this->destination->element('cbc:TaxCurrencyCode', $this->source->queryValue('.//ram:TaxCurrencyCode', $invoiceHeaderSettlement)); + $this->destination->element('cbc:TaxCurrencyCode', $this->source->queryValue('./ram:TaxCurrencyCode', $invoiceHeaderSettlement)); - $this->destination->element('cbc:AccountingCost', $this->source->queryValue('.//ram:ReceivableSpecifiedTradeAccountingAccount/ram:ID', $invoiceHeaderSettlement)); + $this->destination->element('cbc:AccountingCost', $this->source->queryValue('./ram:ReceivableSpecifiedTradeAccountingAccount/ram:ID', $invoiceHeaderSettlement)); - $this->destination->element('cbc:BuyerReference', $this->source->queryValue('.//ram:BuyerReference', $invoiceHeaderAgreement)); + $this->destination->element('cbc:BuyerReference', $this->source->queryValue('./ram:BuyerReference', $invoiceHeaderAgreement)); $this->source->whenExists( - './/ram:BillingSpecifiedPeriod', + './ram:BillingSpecifiedPeriod', $invoiceHeaderSettlement, function ($nodeFound) { $this->destination->startElement('cac:InvoicePeriod'); $this->destination->element( 'cbc:StartDate', $this->convertDateTime( - $this->source->queryValue('.//ram:StartDateTime/udt:DateTimeString', $nodeFound), - $this->source->queryValue('.//ram:StartDateTime/udt:DateTimeString/@format', $nodeFound) + $this->source->queryValue('./ram:StartDateTime/udt:DateTimeString', $nodeFound), + $this->source->queryValue('./ram:StartDateTime/udt:DateTimeString/@format', $nodeFound) ) ); $this->destination->element( 'cbc:EndDate', $this->convertDateTime( - $this->source->queryValue('.//ram:EndDateTime/udt:DateTimeString', $nodeFound), - $this->source->queryValue('.//ram:EndDateTime/udt:DateTimeString/@format', $nodeFound) + $this->source->queryValue('./ram:EndDateTime/udt:DateTimeString', $nodeFound), + $this->source->queryValue('./ram:EndDateTime/udt:DateTimeString/@format', $nodeFound) ) ); $this->destination->endElement(); @@ -264,17 +264,17 @@ function ($nodeFound) { ); $this->source->whenExists( - './/ram:BuyerOrderReferencedDocument/ram:IssuerAssignedID', + './ram:BuyerOrderReferencedDocument/ram:IssuerAssignedID', $invoiceHeaderAgreement, function ($nodeFound) use ($invoiceHeaderAgreement) { $this->destination->startElement('cac:OrderReference'); $this->destination->element('cbc:ID', $nodeFound->nodeValue); - $this->destination->element('cbc:SalesOrderID', $this->source->queryValue('.//ram:SellerOrderReferencedDocument/ram:IssuerAssignedID', $invoiceHeaderAgreement)); + $this->destination->element('cbc:SalesOrderID', $this->source->queryValue('./ram:SellerOrderReferencedDocument/ram:IssuerAssignedID', $invoiceHeaderAgreement)); $this->destination->endElement(); }, function () use ($invoiceHeaderAgreement) { $this->source->whenExists( - './/ram:SellerOrderReferencedDocument/ram:IssuerAssignedID', + './ram:SellerOrderReferencedDocument/ram:IssuerAssignedID', $invoiceHeaderAgreement, function ($sellerOrderReferencedDocumentNode) { $this->destination->startElement('cac:OrderReference'); @@ -286,17 +286,17 @@ function ($sellerOrderReferencedDocumentNode) { ); $this->source->whenExists( - './/ram:InvoiceReferencedDocument', + './ram:InvoiceReferencedDocument', $invoiceHeaderSettlement, function ($nodeFound) use ($invoiceHeaderSettlement) { $this->destination->startElement('cac:BillingReference'); $this->destination->startElement('cac:InvoiceDocumentReference'); - $this->destination->element('cbc:ID', $this->source->queryValue('.//ram:IssuerAssignedID', $nodeFound)); + $this->destination->element('cbc:ID', $this->source->queryValue('./ram:IssuerAssignedID', $nodeFound)); $this->destination->element( 'cbc:IssueDate', $this->convertDateTime( - $this->source->queryValue('.//ram:FormattedIssueDateTime/qdt:DateTimeString', $nodeFound), - $this->source->queryValue('.//ram:FormattedIssueDateTime/qdt:DateTimeString/@format', $nodeFound) + $this->source->queryValue('./ram:FormattedIssueDateTime/qdt:DateTimeString', $nodeFound), + $this->source->queryValue('./ram:FormattedIssueDateTime/qdt:DateTimeString/@format', $nodeFound) ) ); $this->destination->endElement(); @@ -304,7 +304,7 @@ function ($nodeFound) use ($invoiceHeaderSettlement) { } ); - $this->source->queryValues('.//ram:DespatchAdviceReferencedDocument/ram:IssuerAssignedID', $invoiceHeaderDelivery)->forEach( + $this->source->queryValues('./ram:DespatchAdviceReferencedDocument/ram:IssuerAssignedID', $invoiceHeaderDelivery)->forEach( function ($nodeFound) { $this->destination->startElement('cac:DespatchDocumentReference'); $this->destination->element('cbc:ID', $nodeFound->nodeValue); @@ -312,7 +312,7 @@ function ($nodeFound) { } ); - $this->source->queryValues('.//ram:ReceivingAdviceReferencedDocument/ram:IssuerAssignedID', $invoiceHeaderDelivery)->forEach( + $this->source->queryValues('./ram:ReceivingAdviceReferencedDocument/ram:IssuerAssignedID', $invoiceHeaderDelivery)->forEach( function ($nodeFound) { $this->destination->startElement('cac:ReceiptDocumentReference'); $this->destination->element('cbc:ID', $nodeFound->nodeValue); @@ -320,22 +320,22 @@ function ($nodeFound) { } ); - $this->source->queryValues('.//ram:AdditionalReferencedDocument', $invoiceHeaderAgreement)->forEach( + $this->source->queryValues('./ram:AdditionalReferencedDocument', $invoiceHeaderAgreement)->forEach( function ($nodeFound) { $this->source->whenEquals( - './/ram:TypeCode', + './ram:TypeCode', $nodeFound, '50', function () use ($nodeFound) { $this->destination->startElement('cac:OriginatorDocumentReference'); - $this->destination->element('cbc:ID', $this->source->queryValue('.//ram:IssuerAssignedID', $nodeFound)); + $this->destination->element('cbc:ID', $this->source->queryValue('./ram:IssuerAssignedID', $nodeFound)); $this->destination->endElement(); } ); } ); - $this->source->queryValues('.//ram:ContractReferencedDocument/ram:IssuerAssignedID', $invoiceHeaderAgreement)->forEach( + $this->source->queryValues('./ram:ContractReferencedDocument/ram:IssuerAssignedID', $invoiceHeaderAgreement)->forEach( function ($nodeFound) { $this->destination->startElement('cac:ContractDocumentReference'); $this->destination->element('cbc:ID', $nodeFound->nodeValue); @@ -343,26 +343,26 @@ function ($nodeFound) { } ); - $this->source->queryValues('.//ram:AdditionalReferencedDocument', $invoiceHeaderAgreement)->forEach( + $this->source->queryValues('./ram:AdditionalReferencedDocument', $invoiceHeaderAgreement)->forEach( function ($additionalReferencedDocumentNode) { $this->source->whenNotEquals( - './/ram:TypeCode', + './ram:TypeCode', $additionalReferencedDocumentNode, '50', function () use ($additionalReferencedDocumentNode) { $this->destination->startElement('cac:AdditionalDocumentReference'); - $this->destination->element('cbc:ID', $this->source->queryValue('.//ram:IssuerAssignedID', $additionalReferencedDocumentNode)); + $this->destination->element('cbc:ID', $this->source->queryValue('./ram:IssuerAssignedID', $additionalReferencedDocumentNode)); $this->source->whenEquals( - './/ram:TypeCode', + './ram:TypeCode', $additionalReferencedDocumentNode, '130', function () use ($additionalReferencedDocumentNode) { - $this->destination->element('cbc:DocumentTypeCode', $this->source->queryValue('.//ram:TypeCode', $additionalReferencedDocumentNode)); + $this->destination->element('cbc:DocumentTypeCode', $this->source->queryValue('./ram:TypeCode', $additionalReferencedDocumentNode)); } ); - $this->destination->element('cbc:DocumentDescription', $this->source->queryValue('.//ram:Name', $additionalReferencedDocumentNode)); + $this->destination->element('cbc:DocumentDescription', $this->source->queryValue('./ram:Name', $additionalReferencedDocumentNode)); $this->source->whenExists( - './/ram:AttachmentBinaryObject', + './ram:AttachmentBinaryObject', $additionalReferencedDocumentNode, function ($attachmentBinaryObjectNode, $additionalReferencedDocumentNode) { $this->destination->startElement('cac:Attachment'); @@ -375,7 +375,7 @@ function ($attachmentBinaryObjectNode, $additionalReferencedDocumentNode) { ] ); $this->source->whenExists( - './/ram:URIID', + './ram:URIID', $additionalReferencedDocumentNode, function ($uriIdNode) { $this->destination->startElement('cac:ExternalReference'); @@ -395,7 +395,7 @@ function ($uriIdNode) { //TODO: See Mapping lines 42..45 //TODO: See Mapping lines 47..51 - $this->source->queryValues('.//ram:SpecifiedProcuringProject/ram:ID', $invoiceHeaderAgreement)->forEach( + $this->source->queryValues('./ram:SpecifiedProcuringProject/ram:ID', $invoiceHeaderAgreement)->forEach( function ($nodeFound) { $this->destination->startElement('cac:ProjectReference'); $this->destination->element('cbc:ID', $nodeFound->nodeValue); @@ -412,18 +412,18 @@ function ($nodeFound) { private function convertSellerTradeParty(): void { $invoiceElement = $this->source->query('//rsm:CrossIndustryInvoice')->item(0); - $invoiceSuppyChainTradeTransaction = $this->source->query('//rsm:SupplyChainTradeTransaction', $invoiceElement)->item(0); - $invoiceHeaderSettlement = $this->source->query('//ram:ApplicableHeaderTradeSettlement', $invoiceSuppyChainTradeTransaction)->item(0); - $invoiceHeaderAgreement = $this->source->query('//ram:ApplicableHeaderTradeAgreement', $invoiceSuppyChainTradeTransaction)->item(0); + $invoiceSuppyChainTradeTransaction = $this->source->query('./rsm:SupplyChainTradeTransaction', $invoiceElement)->item(0); + $invoiceHeaderSettlement = $this->source->query('./ram:ApplicableHeaderTradeSettlement', $invoiceSuppyChainTradeTransaction)->item(0); + $invoiceHeaderAgreement = $this->source->query('./ram:ApplicableHeaderTradeAgreement', $invoiceSuppyChainTradeTransaction)->item(0); $this->source->whenExists( - './/ram:SellerTradeParty', + './ram:SellerTradeParty', $invoiceHeaderAgreement, function ($sellerTradePartyNode) use ($invoiceHeaderAgreement, $invoiceHeaderSettlement) { $this->destination->startElement('cac:AccountingSupplierParty'); $this->destination->startElement('cac:Party'); $this->source->whenExists( - './/ram:URIUniversalCommunication/ram:URIID', + './ram:URIUniversalCommunication/ram:URIID', $sellerTradePartyNode, function ($sellerTradePartyUniversalCommNode) { $this->destination->startElement('cbc:EndpointID', $sellerTradePartyUniversalCommNode->nodeValue); @@ -439,7 +439,7 @@ function ($sellerTradePartyIdNode) { } ); $this->source->whenExists( - './/ram:GlobalID', + './ram:GlobalID', $sellerTradePartyNode, function ($sellerTradePartyGlobalIdNode) { $this->destination->startElement('cac:PartyIdentification'); @@ -448,7 +448,7 @@ function ($sellerTradePartyGlobalIdNode) { } ); $this->source->whenExists( - './/ram:CreditorReferenceID', + './ram:CreditorReferenceID', $invoiceHeaderSettlement, function ($DirectDebitMandateNode) use ($invoiceHeaderSettlement) { $this->destination->startElement('cac:PartyIdentification'); @@ -459,7 +459,7 @@ function ($DirectDebitMandateNode) use ($invoiceHeaderSettlement) { } ); $this->source->whenExists( - './/ram:Name', + './ram:Name', $sellerTradePartyNode, function ($sellerTradePartyNameNode) { $this->destination->startElement('cac:PartyName'); @@ -468,17 +468,17 @@ function ($sellerTradePartyNameNode) { } ); $this->source->whenExists( - './/ram:PostalTradeAddress', + './ram:PostalTradeAddress', $sellerTradePartyNode, function ($sellerTradePartyPostalAddressNode) { $this->destination->startElement('cac:PostalAddress'); - $this->destination->element('cbc:StreetName', $this->source->queryValue('.//ram:LineOne', $sellerTradePartyPostalAddressNode)); - $this->destination->element('cbc:AdditionalStreetName', $this->source->queryValue('.//ram:LineTwo', $sellerTradePartyPostalAddressNode)); - $this->destination->element('cbc:CityName', $this->source->queryValue('.//ram:CityName', $sellerTradePartyPostalAddressNode)); - $this->destination->element('cbc:PostalZone', $this->source->queryValue('.//ram:PostcodeCode', $sellerTradePartyPostalAddressNode)); - $this->destination->element('cbc:CountrySubentity', $this->source->queryValue('.//ram:CountrySubDivisionName', $sellerTradePartyPostalAddressNode)); + $this->destination->element('cbc:StreetName', $this->source->queryValue('./ram:LineOne', $sellerTradePartyPostalAddressNode)); + $this->destination->element('cbc:AdditionalStreetName', $this->source->queryValue('./ram:LineTwo', $sellerTradePartyPostalAddressNode)); + $this->destination->element('cbc:CityName', $this->source->queryValue('./ram:CityName', $sellerTradePartyPostalAddressNode)); + $this->destination->element('cbc:PostalZone', $this->source->queryValue('./ram:PostcodeCode', $sellerTradePartyPostalAddressNode)); + $this->destination->element('cbc:CountrySubentity', $this->source->queryValue('./ram:CountrySubDivisionName', $sellerTradePartyPostalAddressNode)); $this->source->whenExists( - './/ram:LineThree', + './ram:LineThree', $sellerTradePartyPostalAddressNode, function ($sellerTradePartyPostalAddressNode) { $this->destination->startElement('cac:AddressLine'); @@ -487,7 +487,7 @@ function ($sellerTradePartyPostalAddressNode) { } ); $this->source->whenExists( - './/ram:CountryID', + './ram:CountryID', $sellerTradePartyPostalAddressNode, function ($sellerTradePartyPostalAddressCountryNode) { $this->destination->startElement('cac:Country'); @@ -499,7 +499,7 @@ function ($sellerTradePartyPostalAddressCountryNode) { } ); $this->source->whenExists( - './/ram:SpecifiedTaxRegistration/ram:ID[@schemeID=\'VA\']', + './ram:SpecifiedTaxRegistration/ram:ID[@schemeID=\'VA\']', $sellerTradePartyNode, function ($sellerTradePartyTaxRegNode) { $this->destination->startElement('cac:PartyTaxScheme'); @@ -511,7 +511,7 @@ function ($sellerTradePartyTaxRegNode) { } ); $this->source->whenExists( - './/ram:SpecifiedTaxRegistration/ram:ID[@schemeID=\'FC\']', + './ram:SpecifiedTaxRegistration/ram:ID[@schemeID=\'FC\']', $sellerTradePartyNode, function ($sellerTradePartyTaxRegNode) { $this->destination->startElement('cac:PartyTaxScheme'); @@ -523,26 +523,26 @@ function ($sellerTradePartyTaxRegNode) { } ); $this->source->whenExists( - './/ram:SpecifiedLegalOrganization', + './ram:SpecifiedLegalOrganization', $sellerTradePartyNode, function ($sellerTradePartyLegalOrgNode) use ($sellerTradePartyNode) { $this->destination->startElement('cac:PartyLegalEntity'); - $this->destination->element('cbc:RegistrationName', $this->source->queryValue('.//ram:Name', $sellerTradePartyNode)); + $this->destination->element('cbc:RegistrationName', $this->source->queryValue('./ram:Name', $sellerTradePartyNode)); $this->source->whenExists( - './/ram:ID', + './ram:ID', $sellerTradePartyLegalOrgNode, function ($sellerTradePartyLegalOrgIdNode) { $this->destination->startElement('cbc:CompanyID', $sellerTradePartyLegalOrgIdNode->nodeValue); - $this->destination->attribute('schemeID', $this->source->queryValue('.//@schemeID', $sellerTradePartyLegalOrgIdNode)); + $this->destination->attribute('schemeID', $this->source->queryValue('./@schemeID', $sellerTradePartyLegalOrgIdNode)); $this->destination->endElement(); } ); - $this->destination->element('cbc:CompanyLegalForm', $this->source->queryValue('.//ram:Description', $sellerTradePartyNode)); + $this->destination->element('cbc:CompanyLegalForm', $this->source->queryValue('./ram:Description', $sellerTradePartyNode)); $this->destination->endElement(); }, function () use ($sellerTradePartyNode) { $this->source->whenExists( - './/ram:Name', + './ram:Name', $sellerTradePartyNode, function ($sellerTradePartyNameNode) { $this->destination->startElement('cac:PartyLegalEntity'); @@ -553,13 +553,13 @@ function ($sellerTradePartyNameNode) { } ); $this->source->whenExists( - './/ram:DefinedTradeContact', + './ram:DefinedTradeContact', $sellerTradePartyNode, function ($sellerTradePartyContactNode) { $this->destination->startElement('cac:Contact'); - $this->destination->element('cbc:Name', $this->source->queryValue('.//ram:PersonName', $sellerTradePartyContactNode)); - $this->destination->element('cbc:Telephone', $this->source->queryValue('.//ram:TelephoneUniversalCommunication/ram:CompleteNumber', $sellerTradePartyContactNode)); - $this->destination->element('cbc:ElectronicMail', $this->source->queryValue('.//ram:EmailURIUniversalCommunication/ram:URIID', $sellerTradePartyContactNode)); + $this->destination->element('cbc:Name', $this->source->queryValue('./ram:PersonName', $sellerTradePartyContactNode)); + $this->destination->element('cbc:Telephone', $this->source->queryValue('./ram:TelephoneUniversalCommunication/ram:CompleteNumber', $sellerTradePartyContactNode)); + $this->destination->element('cbc:ElectronicMail', $this->source->queryValue('./ram:EmailURIUniversalCommunication/ram:URIID', $sellerTradePartyContactNode)); $this->destination->endElement(); } ); @@ -577,17 +577,17 @@ function ($sellerTradePartyContactNode) { private function convertBuyerTradeParty(): void { $invoiceElement = $this->source->query('//rsm:CrossIndustryInvoice')->item(0); - $invoiceSuppyChainTradeTransaction = $this->source->query('//rsm:SupplyChainTradeTransaction', $invoiceElement)->item(0); - $invoiceHeaderAgreement = $this->source->query('//ram:ApplicableHeaderTradeAgreement', $invoiceSuppyChainTradeTransaction)->item(0); + $invoiceSuppyChainTradeTransaction = $this->source->query('./rsm:SupplyChainTradeTransaction', $invoiceElement)->item(0); + $invoiceHeaderAgreement = $this->source->query('./ram:ApplicableHeaderTradeAgreement', $invoiceSuppyChainTradeTransaction)->item(0); $this->source->whenExists( - './/ram:BuyerTradeParty', + './ram:BuyerTradeParty', $invoiceHeaderAgreement, function ($buyerTradePartyNode) use ($invoiceHeaderAgreement) { $this->destination->startElement('cac:AccountingCustomerParty'); $this->destination->startElement('cac:Party'); $this->source->whenExists( - './/ram:URIUniversalCommunication/ram:URIID', + './ram:URIUniversalCommunication/ram:URIID', $buyerTradePartyNode, function ($buyerTradePartyUniversalCommNode) { $this->destination->startElement('cbc:EndpointID', $buyerTradePartyUniversalCommNode->nodeValue); @@ -603,7 +603,7 @@ function ($buyerTradePartyIdNode) { } ); $this->source->whenExists( - './/ram:GlobalID', + './ram:GlobalID', $buyerTradePartyNode, function ($buyerTradePartyGlobalIdNode) { $this->destination->startElement('cac:PartyIdentification'); @@ -612,7 +612,7 @@ function ($buyerTradePartyGlobalIdNode) { } ); $this->source->whenExists( - './/ram:Name', + './ram:Name', $buyerTradePartyNode, function ($buyerTradePartyNameNode) { $this->destination->startElement('cac:PartyName'); @@ -621,17 +621,17 @@ function ($buyerTradePartyNameNode) { } ); $this->source->whenExists( - './/ram:PostalTradeAddress', + './ram:PostalTradeAddress', $buyerTradePartyNode, function ($buyerTradePartyPostalAddressNode) { $this->destination->startElement('cac:PostalAddress'); - $this->destination->element('cbc:StreetName', $this->source->queryValue('.//ram:LineOne', $buyerTradePartyPostalAddressNode)); - $this->destination->element('cbc:AdditionalStreetName', $this->source->queryValue('.//ram:LineTwo', $buyerTradePartyPostalAddressNode)); - $this->destination->element('cbc:CityName', $this->source->queryValue('.//ram:CityName', $buyerTradePartyPostalAddressNode)); - $this->destination->element('cbc:PostalZone', $this->source->queryValue('.//ram:PostcodeCode', $buyerTradePartyPostalAddressNode)); - $this->destination->element('cbc:CountrySubentity', $this->source->queryValue('.//ram:CountrySubDivisionName', $buyerTradePartyPostalAddressNode)); + $this->destination->element('cbc:StreetName', $this->source->queryValue('./ram:LineOne', $buyerTradePartyPostalAddressNode)); + $this->destination->element('cbc:AdditionalStreetName', $this->source->queryValue('./ram:LineTwo', $buyerTradePartyPostalAddressNode)); + $this->destination->element('cbc:CityName', $this->source->queryValue('./ram:CityName', $buyerTradePartyPostalAddressNode)); + $this->destination->element('cbc:PostalZone', $this->source->queryValue('./ram:PostcodeCode', $buyerTradePartyPostalAddressNode)); + $this->destination->element('cbc:CountrySubentity', $this->source->queryValue('./ram:CountrySubDivisionName', $buyerTradePartyPostalAddressNode)); $this->source->whenExists( - './/ram:LineThree', + './ram:LineThree', $buyerTradePartyPostalAddressNode, function ($buyerTradePartyPostalAddressNode) { $this->destination->startElement('cac:AddressLine'); @@ -640,7 +640,7 @@ function ($buyerTradePartyPostalAddressNode) { } ); $this->source->whenExists( - './/ram:CountryID', + './ram:CountryID', $buyerTradePartyPostalAddressNode, function ($buyerTradePartyPostalAddressCountryNode) { $this->destination->startElement('cac:Country'); @@ -652,7 +652,7 @@ function ($buyerTradePartyPostalAddressCountryNode) { } ); $this->source->whenExists( - './/ram:SpecifiedTaxRegistration/ram:ID[@schemeID=\'VA\']', + './ram:SpecifiedTaxRegistration/ram:ID[@schemeID=\'VA\']', $buyerTradePartyNode, function ($buyerTradePartyTaxRegNode) { $this->destination->startElement('cac:PartyTaxScheme'); @@ -664,7 +664,7 @@ function ($buyerTradePartyTaxRegNode) { } ); $this->source->whenExists( - './/ram:SpecifiedTaxRegistration/ram:ID[@schemeID=\'FC\']', + './ram:SpecifiedTaxRegistration/ram:ID[@schemeID=\'FC\']', $buyerTradePartyNode, function ($sellerTradePartyTaxRegNode) { $this->destination->startElement('cac:PartyTaxScheme'); @@ -676,26 +676,26 @@ function ($sellerTradePartyTaxRegNode) { } ); $this->source->whenExists( - './/ram:SpecifiedLegalOrganization', + './ram:SpecifiedLegalOrganization', $buyerTradePartyNode, function ($buyerTradePartyLegalOrgNode) use ($buyerTradePartyNode) { $this->destination->startElement('cac:PartyLegalEntity'); - $this->destination->element('cbc:RegistrationName', $this->source->queryValue('.//ram:Name', $buyerTradePartyNode)); + $this->destination->element('cbc:RegistrationName', $this->source->queryValue('./ram:Name', $buyerTradePartyNode)); $this->source->whenExists( - './/ram:ID', + './ram:ID', $buyerTradePartyLegalOrgNode, function ($buyerTradePartyLegalOrgIdNode) { $this->destination->startElement('cbc:CompanyID', $buyerTradePartyLegalOrgIdNode->nodeValue); - $this->destination->attribute('schemeID', $this->source->queryValue('.//@schemeID', $buyerTradePartyLegalOrgIdNode)); + $this->destination->attribute('schemeID', $this->source->queryValue('./@schemeID', $buyerTradePartyLegalOrgIdNode)); $this->destination->endElement(); } ); - $this->destination->element('cbc:CompanyLegalForm', $this->source->queryValue('.//ram:Description', $buyerTradePartyNode)); + $this->destination->element('cbc:CompanyLegalForm', $this->source->queryValue('./ram:Description', $buyerTradePartyNode)); $this->destination->endElement(); }, function () use ($buyerTradePartyNode) { $this->source->whenExists( - './/ram:Name', + './ram:Name', $buyerTradePartyNode, function ($buyerTradePartyNameNode) { $this->destination->startElement('cac:PartyLegalEntity'); @@ -706,13 +706,13 @@ function ($buyerTradePartyNameNode) { } ); $this->source->whenExists( - './/ram:DefinedTradeContact', + './ram:DefinedTradeContact', $buyerTradePartyNode, function ($buyerTradePartyContactNode) { $this->destination->startElement('cac:Contact'); - $this->destination->element('cbc:Name', $this->source->queryValue('.//ram:PersonName', $buyerTradePartyContactNode)); - $this->destination->element('cbc:Telephone', $this->source->queryValue('.//ram:TelephoneUniversalCommunication/ram:CompleteNumber', $buyerTradePartyContactNode)); - $this->destination->element('cbc:ElectronicMail', $this->source->queryValue('.//ram:EmailURIUniversalCommunication/ram:URIID', $buyerTradePartyContactNode)); + $this->destination->element('cbc:Name', $this->source->queryValue('./ram:PersonName', $buyerTradePartyContactNode)); + $this->destination->element('cbc:Telephone', $this->source->queryValue('./ram:TelephoneUniversalCommunication/ram:CompleteNumber', $buyerTradePartyContactNode)); + $this->destination->element('cbc:ElectronicMail', $this->source->queryValue('./ram:EmailURIUniversalCommunication/ram:URIID', $buyerTradePartyContactNode)); $this->destination->endElement(); } ); @@ -730,16 +730,16 @@ function ($buyerTradePartyContactNode) { private function convertPayeeTradeParty(): void { $invoiceElement = $this->source->query('//rsm:CrossIndustryInvoice')->item(0); - $invoiceSuppyChainTradeTransaction = $this->source->query('//rsm:SupplyChainTradeTransaction', $invoiceElement)->item(0); - $invoiceHeaderSettlement = $this->source->query('//ram:ApplicableHeaderTradeSettlement', $invoiceSuppyChainTradeTransaction)->item(0); + $invoiceSuppyChainTradeTransaction = $this->source->query('./rsm:SupplyChainTradeTransaction', $invoiceElement)->item(0); + $invoiceHeaderSettlement = $this->source->query('./ram:ApplicableHeaderTradeSettlement', $invoiceSuppyChainTradeTransaction)->item(0); $this->source->whenExists( - './/ram:PayeeTradeParty', + './ram:PayeeTradeParty', $invoiceHeaderSettlement, function ($payeeTradePartyNode) { $this->destination->startElement('cac:PayeeParty'); $this->source->whenExists( - './/ram:URIUniversalCommunication/ram:URIID', + './ram:URIUniversalCommunication/ram:URIID', $payeeTradePartyNode, function ($payeeTradePartyUniversalCommNode) { $this->destination->startElement('cbc:EndpointID', $payeeTradePartyUniversalCommNode->nodeValue); @@ -755,7 +755,7 @@ function ($payeeTradePartyIdNode) { } ); $this->source->whenExists( - './/ram:GlobalID', + './ram:GlobalID', $payeeTradePartyNode, function ($payeeTradePartyGlobalIdNode) { $this->destination->startElement('cac:PartyIdentification'); @@ -764,7 +764,7 @@ function ($payeeTradePartyGlobalIdNode) { } ); $this->source->whenExists( - './/ram:Name', + './ram:Name', $payeeTradePartyNode, function ($payeeTradePartyNameNode) { $this->destination->startElement('cac:PartyName'); @@ -773,17 +773,17 @@ function ($payeeTradePartyNameNode) { } ); $this->source->whenExists( - './/ram:PostalTradeAddress', + './ram:PostalTradeAddress', $payeeTradePartyNode, function ($payeeTradePartyPostalAddressNode) { $this->destination->startElement('cac:PostalAddress'); - $this->destination->element('cbc:StreetName', $this->source->queryValue('.//ram:LineOne', $payeeTradePartyPostalAddressNode)); - $this->destination->element('cbc:AdditionalStreetName', $this->source->queryValue('.//ram:LineTwo', $payeeTradePartyPostalAddressNode)); - $this->destination->element('cbc:CityName', $this->source->queryValue('.//ram:CityName', $payeeTradePartyPostalAddressNode)); - $this->destination->element('cbc:PostalZone', $this->source->queryValue('.//ram:PostcodeCode', $payeeTradePartyPostalAddressNode)); - $this->destination->element('cbc:CountrySubentity', $this->source->queryValue('.//ram:CountrySubDivisionName', $payeeTradePartyPostalAddressNode)); + $this->destination->element('cbc:StreetName', $this->source->queryValue('./ram:LineOne', $payeeTradePartyPostalAddressNode)); + $this->destination->element('cbc:AdditionalStreetName', $this->source->queryValue('./ram:LineTwo', $payeeTradePartyPostalAddressNode)); + $this->destination->element('cbc:CityName', $this->source->queryValue('./ram:CityName', $payeeTradePartyPostalAddressNode)); + $this->destination->element('cbc:PostalZone', $this->source->queryValue('./ram:PostcodeCode', $payeeTradePartyPostalAddressNode)); + $this->destination->element('cbc:CountrySubentity', $this->source->queryValue('./ram:CountrySubDivisionName', $payeeTradePartyPostalAddressNode)); $this->source->whenExists( - './/ram:LineThree', + './ram:LineThree', $payeeTradePartyPostalAddressNode, function ($payeeTradePartyPostalAddressNode) { $this->destination->startElement('cac:AddressLine'); @@ -792,7 +792,7 @@ function ($payeeTradePartyPostalAddressNode) { } ); $this->source->whenExists( - './/ram:CountryID', + './ram:CountryID', $payeeTradePartyPostalAddressNode, function ($payeeTradePartyPostalAddressCountryNode) { $this->destination->startElement('cac:Country'); @@ -804,7 +804,7 @@ function ($payeeTradePartyPostalAddressCountryNode) { } ); $this->source->whenExists( - './/ram:SpecifiedTaxRegistration/ram:ID[@schemeID=\'VA\']', + './ram:SpecifiedTaxRegistration/ram:ID[@schemeID=\'VA\']', $payeeTradePartyNode, function ($payeeTradePartyTaxRegNode) { $this->destination->startElement('cac:PartyTaxScheme'); @@ -816,7 +816,7 @@ function ($payeeTradePartyTaxRegNode) { } ); $this->source->whenExists( - './/ram:SpecifiedTaxRegistration/ram:ID[@schemeID=\'FC\']', + './ram:SpecifiedTaxRegistration/ram:ID[@schemeID=\'FC\']', $payeeTradePartyNode, function ($sellerTradePartyTaxRegNode) { $this->destination->startElement('cac:PartyTaxScheme'); @@ -828,32 +828,32 @@ function ($sellerTradePartyTaxRegNode) { } ); $this->source->whenExists( - './/ram:SpecifiedLegalOrganization', + './ram:SpecifiedLegalOrganization', $payeeTradePartyNode, function ($payeeTradePartyLegalOrgNode) use ($payeeTradePartyNode) { $this->destination->startElement('cac:PartyLegalEntity'); - $this->destination->element('cbc:RegistrationName', $this->source->queryValue('.//ram:Name', $payeeTradePartyNode)); + $this->destination->element('cbc:RegistrationName', $this->source->queryValue('./ram:Name', $payeeTradePartyNode)); $this->source->whenExists( - './/ram:ID', + './ram:ID', $payeeTradePartyLegalOrgNode, function ($payeeTradePartyLegalOrgIdNode) { $this->destination->startElement('cbc:CompanyID', $payeeTradePartyLegalOrgIdNode->nodeValue); - $this->destination->attribute('schemeID', $this->source->queryValue('.//@schemeID', $payeeTradePartyLegalOrgIdNode)); + $this->destination->attribute('schemeID', $this->source->queryValue('./@schemeID', $payeeTradePartyLegalOrgIdNode)); $this->destination->endElement(); } ); - $this->destination->element('cbc:CompanyLegalForm', $this->source->queryValue('.//ram:Description', $payeeTradePartyNode)); + $this->destination->element('cbc:CompanyLegalForm', $this->source->queryValue('./ram:Description', $payeeTradePartyNode)); $this->destination->endElement(); } ); $this->source->whenExists( - './/ram:DefinedTradeContact', + './ram:DefinedTradeContact', $payeeTradePartyNode, function ($payeeTradePartyContactNode) { $this->destination->startElement('cac:Contact'); - $this->destination->element('cbc:Name', $this->source->queryValue('.//ram:PersonName', $payeeTradePartyContactNode)); - $this->destination->element('cbc:Telephone', $this->source->queryValue('.//ram:TelephoneUniversalCommunication/ram:CompleteNumber', $payeeTradePartyContactNode)); - $this->destination->element('cbc:ElectronicMail', $this->source->queryValue('.//ram:EmailURIUniversalCommunication/ram:URIID', $payeeTradePartyContactNode)); + $this->destination->element('cbc:Name', $this->source->queryValue('./ram:PersonName', $payeeTradePartyContactNode)); + $this->destination->element('cbc:Telephone', $this->source->queryValue('./ram:TelephoneUniversalCommunication/ram:CompleteNumber', $payeeTradePartyContactNode)); + $this->destination->element('cbc:ElectronicMail', $this->source->queryValue('./ram:EmailURIUniversalCommunication/ram:URIID', $payeeTradePartyContactNode)); $this->destination->endElement(); } ); @@ -870,16 +870,16 @@ function ($payeeTradePartyContactNode) { private function convertTaxRepresentativeParty(): void { $invoiceElement = $this->source->query('//rsm:CrossIndustryInvoice')->item(0); - $invoiceSuppyChainTradeTransaction = $this->source->query('//rsm:SupplyChainTradeTransaction', $invoiceElement)->item(0); - $invoiceHeaderAgreement = $this->source->query('//ram:ApplicableHeaderTradeAgreement', $invoiceSuppyChainTradeTransaction)->item(0); + $invoiceSuppyChainTradeTransaction = $this->source->query('./rsm:SupplyChainTradeTransaction', $invoiceElement)->item(0); + $invoiceHeaderAgreement = $this->source->query('./ram:ApplicableHeaderTradeAgreement', $invoiceSuppyChainTradeTransaction)->item(0); $this->source->whenExists( - './/ram:SellerTaxRepresentativeTradeParty', + './ram:SellerTaxRepresentativeTradeParty', $invoiceHeaderAgreement, function ($sellerTaxRepresentativePartyNode) { $this->destination->startElement('cac:TaxRepresentativeParty'); $this->source->whenExists( - './/ram:URIUniversalCommunication/ram:URIID', + './ram:URIUniversalCommunication/ram:URIID', $sellerTaxRepresentativePartyNode, function ($sellerTaxRepresentativePartyUniversalCommNode) { $this->destination->startElement('cbc:EndpointID', $sellerTaxRepresentativePartyUniversalCommNode->nodeValue); @@ -895,7 +895,7 @@ function ($sellerTaxRepresentativePartyIdNode) { } ); $this->source->whenExists( - './/ram:GlobalID', + './ram:GlobalID', $sellerTaxRepresentativePartyNode, function ($sellerTaxRepresentativePartyGlobalIdNode) { $this->destination->startElement('cac:PartyIdentification'); @@ -904,7 +904,7 @@ function ($sellerTaxRepresentativePartyGlobalIdNode) { } ); $this->source->whenExists( - './/ram:Name', + './ram:Name', $sellerTaxRepresentativePartyNode, function ($sellerTaxRepresentativePartyNameNode) { $this->destination->startElement('cac:PartyName'); @@ -913,17 +913,17 @@ function ($sellerTaxRepresentativePartyNameNode) { } ); $this->source->whenExists( - './/ram:PostalTradeAddress', + './ram:PostalTradeAddress', $sellerTaxRepresentativePartyNode, function ($sellerTaxRepresentativePartyPostalAddressNode) { $this->destination->startElement('cac:PostalAddress'); - $this->destination->element('cbc:StreetName', $this->source->queryValue('.//ram:LineOne', $sellerTaxRepresentativePartyPostalAddressNode)); - $this->destination->element('cbc:AdditionalStreetName', $this->source->queryValue('.//ram:LineTwo', $sellerTaxRepresentativePartyPostalAddressNode)); - $this->destination->element('cbc:CityName', $this->source->queryValue('.//ram:CityName', $sellerTaxRepresentativePartyPostalAddressNode)); - $this->destination->element('cbc:PostalZone', $this->source->queryValue('.//ram:PostcodeCode', $sellerTaxRepresentativePartyPostalAddressNode)); - $this->destination->element('cbc:CountrySubentity', $this->source->queryValue('.//ram:CountrySubDivisionName', $sellerTaxRepresentativePartyPostalAddressNode)); + $this->destination->element('cbc:StreetName', $this->source->queryValue('./ram:LineOne', $sellerTaxRepresentativePartyPostalAddressNode)); + $this->destination->element('cbc:AdditionalStreetName', $this->source->queryValue('./ram:LineTwo', $sellerTaxRepresentativePartyPostalAddressNode)); + $this->destination->element('cbc:CityName', $this->source->queryValue('./ram:CityName', $sellerTaxRepresentativePartyPostalAddressNode)); + $this->destination->element('cbc:PostalZone', $this->source->queryValue('./ram:PostcodeCode', $sellerTaxRepresentativePartyPostalAddressNode)); + $this->destination->element('cbc:CountrySubentity', $this->source->queryValue('./ram:CountrySubDivisionName', $sellerTaxRepresentativePartyPostalAddressNode)); $this->source->whenExists( - './/ram:LineThree', + './ram:LineThree', $sellerTaxRepresentativePartyPostalAddressNode, function ($sellerTaxRepresentativePartyPostalAddressNode) { $this->destination->startElement('cac:AddressLine'); @@ -932,7 +932,7 @@ function ($sellerTaxRepresentativePartyPostalAddressNode) { } ); $this->source->whenExists( - './/ram:CountryID', + './ram:CountryID', $sellerTaxRepresentativePartyPostalAddressNode, function ($sellerTaxRepresentativePartyPostalAddressCountryNode) { $this->destination->startElement('cac:Country'); @@ -944,7 +944,7 @@ function ($sellerTaxRepresentativePartyPostalAddressCountryNode) { } ); $this->source->whenExists( - './/ram:SpecifiedTaxRegistration/ram:ID[@schemeID=\'VA\']', + './ram:SpecifiedTaxRegistration/ram:ID[@schemeID=\'VA\']', $sellerTaxRepresentativePartyNode, function ($sellerTaxRepresentativePartyTaxRegNode) { $this->destination->startElement('cac:PartyTaxScheme'); @@ -956,7 +956,7 @@ function ($sellerTaxRepresentativePartyTaxRegNode) { } ); $this->source->whenExists( - './/ram:SpecifiedTaxRegistration/ram:ID[@schemeID=\'FC\']', + './ram:SpecifiedTaxRegistration/ram:ID[@schemeID=\'FC\']', $sellerTaxRepresentativePartyNode, function ($sellerTradePartyTaxRegNode) { $this->destination->startElement('cac:PartyTaxScheme'); @@ -968,32 +968,32 @@ function ($sellerTradePartyTaxRegNode) { } ); $this->source->whenExists( - './/ram:SpecifiedLegalOrganization', + './ram:SpecifiedLegalOrganization', $sellerTaxRepresentativePartyNode, function ($sellerTaxRepresentativePartyLegalOrgNode) use ($sellerTaxRepresentativePartyNode) { $this->destination->startElement('cac:PartyLegalEntity'); - $this->destination->element('cbc:RegistrationName', $this->source->queryValue('.//ram:Name', $sellerTaxRepresentativePartyNode)); + $this->destination->element('cbc:RegistrationName', $this->source->queryValue('./ram:Name', $sellerTaxRepresentativePartyNode)); $this->source->whenExists( - './/ram:ID', + './ram:ID', $sellerTaxRepresentativePartyLegalOrgNode, function ($sellerTaxRepresentativePartyLegalOrgIdNode) { $this->destination->startElement('cbc:CompanyID', $sellerTaxRepresentativePartyLegalOrgIdNode->nodeValue); - $this->destination->attribute('schemeID', $this->source->queryValue('.//@schemeID', $sellerTaxRepresentativePartyLegalOrgIdNode)); + $this->destination->attribute('schemeID', $this->source->queryValue('./@schemeID', $sellerTaxRepresentativePartyLegalOrgIdNode)); $this->destination->endElement(); } ); - $this->destination->element('cbc:CompanyLegalForm', $this->source->queryValue('.//ram:Description', $sellerTaxRepresentativePartyNode)); + $this->destination->element('cbc:CompanyLegalForm', $this->source->queryValue('./ram:Description', $sellerTaxRepresentativePartyNode)); $this->destination->endElement(); } ); $this->source->whenExists( - './/ram:DefinedTradeContact', + './ram:DefinedTradeContact', $sellerTaxRepresentativePartyNode, function ($sellerTaxRepresentativePartyContactNode) { $this->destination->startElement('cac:Contact'); - $this->destination->element('cbc:Name', $this->source->queryValue('.//ram:PersonName', $sellerTaxRepresentativePartyContactNode)); - $this->destination->element('cbc:Telephone', $this->source->queryValue('.//ram:TelephoneUniversalCommunication/ram:CompleteNumber', $sellerTaxRepresentativePartyContactNode)); - $this->destination->element('cbc:ElectronicMail', $this->source->queryValue('.//ram:EmailURIUniversalCommunication/ram:URIID', $sellerTaxRepresentativePartyContactNode)); + $this->destination->element('cbc:Name', $this->source->queryValue('./ram:PersonName', $sellerTaxRepresentativePartyContactNode)); + $this->destination->element('cbc:Telephone', $this->source->queryValue('./ram:TelephoneUniversalCommunication/ram:CompleteNumber', $sellerTaxRepresentativePartyContactNode)); + $this->destination->element('cbc:ElectronicMail', $this->source->queryValue('./ram:EmailURIUniversalCommunication/ram:URIID', $sellerTaxRepresentativePartyContactNode)); $this->destination->endElement(); } ); @@ -1010,40 +1010,40 @@ function ($sellerTaxRepresentativePartyContactNode) { private function convertShipToTradeParty(): void { $invoiceElement = $this->source->query('//rsm:CrossIndustryInvoice')->item(0); - $invoiceSuppyChainTradeTransaction = $this->source->query('//rsm:SupplyChainTradeTransaction', $invoiceElement)->item(0); - $invoiceHeaderDelivery = $this->source->query('//ram:ApplicableHeaderTradeDelivery', $invoiceSuppyChainTradeTransaction)->item(0); + $invoiceSuppyChainTradeTransaction = $this->source->query('./rsm:SupplyChainTradeTransaction', $invoiceElement)->item(0); + $invoiceHeaderDelivery = $this->source->query('./ram:ApplicableHeaderTradeDelivery', $invoiceSuppyChainTradeTransaction)->item(0); $this->source->whenExists( - './/ram:ShipToTradeParty', + './ram:ShipToTradeParty', $invoiceHeaderDelivery, function ($shipToTradePartyNode) use ($invoiceHeaderDelivery) { $this->destination->startElement('cac:Delivery'); $this->destination->element( 'cbc:ActualDeliveryDate', $this->convertDateTime( - $this->source->queryValue('.//ram:ActualDeliverySupplyChainEvent/ram:OccurrenceDateTime/udt:DateTimeString', $invoiceHeaderDelivery), - $this->source->queryValue('.//ram:ActualDeliverySupplyChainEvent/ram:OccurrenceDateTime/udt:DateTimeString/@format', $invoiceHeaderDelivery) + $this->source->queryValue('./ram:ActualDeliverySupplyChainEvent/ram:OccurrenceDateTime/udt:DateTimeString', $invoiceHeaderDelivery), + $this->source->queryValue('./ram:ActualDeliverySupplyChainEvent/ram:OccurrenceDateTime/udt:DateTimeString/@format', $invoiceHeaderDelivery) ) ); $this->destination->startElement('cac:DeliveryLocation'); $this->source->whenExists( - './/ram:ID', + './ram:ID', $shipToTradePartyNode, function ($shipToTradePartyIdNode) use ($invoiceHeaderDelivery) { $this->destination->startElement('cbc:ID', $shipToTradePartyIdNode->nodeValue); - $this->destination->attribute('schemeID', $this->source->queryValue('.//ram:ShipToTradeParty/ram:GlobalID/@schemeID', $invoiceHeaderDelivery)); + $this->destination->attribute('schemeID', $this->source->queryValue('./ram:ShipToTradeParty/ram:GlobalID/@schemeID', $invoiceHeaderDelivery)); $this->destination->endElement(); } ); $this->source->whenExists( - './/ram:PostalTradeAddress', + './ram:PostalTradeAddress', $shipToTradePartyNode, function ($shipToTradePartyPostalAddressNode) { $this->destination->startElement('cac:Address'); - $this->destination->element('cbc:StreetName', $this->source->queryValue('.//ram:LineOne', $shipToTradePartyPostalAddressNode)); - $this->destination->element('cbc:AdditionalStreetName', $this->source->queryValue('.//ram:LineTwo', $shipToTradePartyPostalAddressNode)); + $this->destination->element('cbc:StreetName', $this->source->queryValue('./ram:LineOne', $shipToTradePartyPostalAddressNode)); + $this->destination->element('cbc:AdditionalStreetName', $this->source->queryValue('./ram:LineTwo', $shipToTradePartyPostalAddressNode)); $this->source->whenExists( - './/ram:LineThree', + './ram:LineThree', $shipToTradePartyPostalAddressNode, function ($shipToTradePartyPostalAddressNode) { $this->destination->startElement('cac:AddressLine'); @@ -1051,11 +1051,11 @@ function ($shipToTradePartyPostalAddressNode) { $this->destination->endElement(); } ); - $this->destination->element('cbc:CityName', $this->source->queryValue('.//ram:CityName', $shipToTradePartyPostalAddressNode)); - $this->destination->element('cbc:PostalZone', $this->source->queryValue('.//ram:PostcodeCode', $shipToTradePartyPostalAddressNode)); - $this->destination->element('cbc:CountrySubentity', $this->source->queryValue('.//ram:CountrySubDivisionName', $shipToTradePartyPostalAddressNode)); + $this->destination->element('cbc:CityName', $this->source->queryValue('./ram:CityName', $shipToTradePartyPostalAddressNode)); + $this->destination->element('cbc:PostalZone', $this->source->queryValue('./ram:PostcodeCode', $shipToTradePartyPostalAddressNode)); + $this->destination->element('cbc:CountrySubentity', $this->source->queryValue('./ram:CountrySubDivisionName', $shipToTradePartyPostalAddressNode)); $this->source->whenExists( - './/ram:CountryID', + './ram:CountryID', $shipToTradePartyPostalAddressNode, function ($shipToTradePartyPostalAddressCountryNode) { $this->destination->startElement('cac:Country'); @@ -1068,7 +1068,7 @@ function ($shipToTradePartyPostalAddressCountryNode) { ); $this->destination->endElement(); $this->source->whenExists( - './/ram:Name', + './ram:Name', $shipToTradePartyNode, function ($shipToTradePartyNameNode) { $this->destination->startElement('cac:DeliveryParty'); @@ -1082,7 +1082,7 @@ function ($shipToTradePartyNameNode) { }, function () use ($invoiceHeaderDelivery) { $this->source->whenExists( - './/ram:ActualDeliverySupplyChainEvent/ram:OccurrenceDateTime/udt:DateTimeString', + './ram:ActualDeliverySupplyChainEvent/ram:OccurrenceDateTime/udt:DateTimeString', $invoiceHeaderDelivery, function ($actualDeliverySupplyChainEventNode) { $this->destination->startElement('cac:Delivery'); @@ -1108,43 +1108,43 @@ function ($actualDeliverySupplyChainEventNode) { private function convertPaymentMeans(): void { $invoiceElement = $this->source->query('//rsm:CrossIndustryInvoice')->item(0); - $invoiceSuppyChainTradeTransaction = $this->source->query('//rsm:SupplyChainTradeTransaction', $invoiceElement)->item(0); - $invoiceHeaderSettlement = $this->source->query('//ram:ApplicableHeaderTradeSettlement', $invoiceSuppyChainTradeTransaction)->item(0); + $invoiceSuppyChainTradeTransaction = $this->source->query('./rsm:SupplyChainTradeTransaction', $invoiceElement)->item(0); + $invoiceHeaderSettlement = $this->source->query('./ram:ApplicableHeaderTradeSettlement', $invoiceSuppyChainTradeTransaction)->item(0); $this->source->whenExists( - './/ram:SpecifiedTradeSettlementPaymentMeans', + './ram:SpecifiedTradeSettlementPaymentMeans', $invoiceHeaderSettlement, function ($peymentMeansNode) use ($invoiceHeaderSettlement) { $this->destination->startElement('cac:PaymentMeans'); $this->source->whenExists( - './/ram:TypeCode', + './ram:TypeCode', $peymentMeansNode, function ($paymentMeansTypeCodeNode) use ($peymentMeansNode) { $this->destination->startElement('cbc:PaymentMeansCode', $paymentMeansTypeCodeNode->nodeValue); - $this->destination->attribute('name', $this->source->queryValue('.//ram:Information', $peymentMeansNode)); + $this->destination->attribute('name', $this->source->queryValue('./ram:Information', $peymentMeansNode)); $this->destination->endElement(); } ); - $this->destination->element('cbc:PaymentID', $this->source->queryValue('.//ram:PaymentReference', $invoiceHeaderSettlement)); + $this->destination->element('cbc:PaymentID', $this->source->queryValue('./ram:PaymentReference', $invoiceHeaderSettlement)); $this->source->whenExists( - './/ram:ApplicableTradeSettlementFinancialCard', + './ram:ApplicableTradeSettlementFinancialCard', $peymentMeansNode, function ($paymentMeansFinancialCardNode) { $this->destination->startElement('cac:CardAccount'); - $this->destination->element('cbc:PrimaryAccountNumberID', $this->source->queryValue('.//ram:ID', $paymentMeansFinancialCardNode)); - $this->destination->element('cbc:HolderName', $this->source->queryValue('.//ram:CardholderName', $paymentMeansFinancialCardNode)); + $this->destination->element('cbc:PrimaryAccountNumberID', $this->source->queryValue('./ram:ID', $paymentMeansFinancialCardNode)); + $this->destination->element('cbc:HolderName', $this->source->queryValue('./ram:CardholderName', $paymentMeansFinancialCardNode)); $this->destination->endElement(); } ); $this->source->whenExists( - './/ram:PayeePartyCreditorFinancialAccount', + './ram:PayeePartyCreditorFinancialAccount', $peymentMeansNode, function ($paymentMeansCreditorFinancialAccountNode) use ($peymentMeansNode) { $this->destination->startElement('cac:PayeeFinancialAccount'); - $this->destination->element('cbc:ID', $this->source->queryValue('.//ram:IBANID', $paymentMeansCreditorFinancialAccountNode)); - $this->destination->element('cbc:Name', $this->source->queryValue('.//ram:AccountName', $paymentMeansCreditorFinancialAccountNode)); + $this->destination->element('cbc:ID', $this->source->queryValue('./ram:IBANID', $paymentMeansCreditorFinancialAccountNode)); + $this->destination->element('cbc:Name', $this->source->queryValue('./ram:AccountName', $paymentMeansCreditorFinancialAccountNode)); $this->source->whenExists( - './/ram:PayeeSpecifiedCreditorFinancialInstitution', + './ram:PayeeSpecifiedCreditorFinancialInstitution', $peymentMeansNode, function ($paymentMeansCreditorFinancialInstNode) { $this->destination->startElement('cac:FinancialInstitutionBranch'); @@ -1156,17 +1156,17 @@ function ($paymentMeansCreditorFinancialInstNode) { } ); $this->source->whenExists( - './/ram:SpecifiedTradePaymentTerms/ram:DirectDebitMandateID', + './ram:SpecifiedTradePaymentTerms/ram:DirectDebitMandateID', $invoiceHeaderSettlement, function ($DirectDebitMandateNode) use ($invoiceHeaderSettlement, $peymentMeansNode) { $this->destination->startElement('cac:PaymentMandate'); $this->destination->element('cbc:ID', $DirectDebitMandateNode->nodeValue); $this->source->whenExists( - './/ram:PayerPartyDebtorFinancialAccount', + './ram:PayerPartyDebtorFinancialAccount', $peymentMeansNode, function ($paymentMeansDebtorFinancialAccountNode) { $this->destination->startElement('cac:PayerFinancialAccount'); - $this->destination->element('cbc:ID', $this->source->queryValue('.//ram:IBANID', $paymentMeansDebtorFinancialAccountNode)); + $this->destination->element('cbc:ID', $this->source->queryValue('./ram:IBANID', $paymentMeansDebtorFinancialAccountNode)); $this->destination->endElement(); } ); @@ -1186,15 +1186,15 @@ function ($paymentMeansDebtorFinancialAccountNode) { private function convertPaymentTerms(): void { $invoiceElement = $this->source->query('//rsm:CrossIndustryInvoice')->item(0); - $invoiceSuppyChainTradeTransaction = $this->source->query('//rsm:SupplyChainTradeTransaction', $invoiceElement)->item(0); - $invoiceHeaderSettlement = $this->source->query('//ram:ApplicableHeaderTradeSettlement', $invoiceSuppyChainTradeTransaction)->item(0); + $invoiceSuppyChainTradeTransaction = $this->source->query('./rsm:SupplyChainTradeTransaction', $invoiceElement)->item(0); + $invoiceHeaderSettlement = $this->source->query('./ram:ApplicableHeaderTradeSettlement', $invoiceSuppyChainTradeTransaction)->item(0); $this->source->whenExists( - './/ram:SpecifiedTradePaymentTerms', + './ram:SpecifiedTradePaymentTerms', $invoiceHeaderSettlement, function ($peymentTermsNode) { $this->destination->startElement('cac:PaymentTerms'); - $this->destination->element('cbc:Note', $this->source->queryValue('.//ram:Description', $peymentTermsNode)); + $this->destination->element('cbc:Note', $this->source->queryValue('./ram:Description', $peymentTermsNode)); $this->destination->endElement(); } ); @@ -1208,27 +1208,27 @@ function ($peymentTermsNode) { private function convertDocumentLevelAllowanceCharge(): void { $invoiceElement = $this->source->query('//rsm:CrossIndustryInvoice')->item(0); - $invoiceSuppyChainTradeTransaction = $this->source->query('//rsm:SupplyChainTradeTransaction', $invoiceElement)->item(0); - $invoiceHeaderSettlement = $this->source->query('//ram:ApplicableHeaderTradeSettlement', $invoiceSuppyChainTradeTransaction)->item(0); + $invoiceSuppyChainTradeTransaction = $this->source->query('./rsm:SupplyChainTradeTransaction', $invoiceElement)->item(0); + $invoiceHeaderSettlement = $this->source->query('./ram:ApplicableHeaderTradeSettlement', $invoiceSuppyChainTradeTransaction)->item(0); - $this->source->queryValues('.//ram:SpecifiedTradeAllowanceCharge', $invoiceHeaderSettlement)->forEach( + $this->source->queryValues('./ram:SpecifiedTradeAllowanceCharge', $invoiceHeaderSettlement)->forEach( function ($tradeAllowanceChargeNode) use ($invoiceHeaderSettlement) { $this->destination->startElement('cac:AllowanceCharge'); - $this->destination->element('cbc:ChargeIndicator', $this->source->queryValue('.//ram:ChargeIndicator/udt:Indicator', $tradeAllowanceChargeNode)); - $this->destination->element('cbc:AllowanceChargeReasonCode', $this->source->queryValue('.//ram:ReasonCode', $tradeAllowanceChargeNode)); - $this->destination->element('cbc:AllowanceChargeReason', $this->source->queryValue('.//ram:Reason', $tradeAllowanceChargeNode)); - $this->destination->element('cbc:MultiplierFactorNumeric', $this->source->queryValue('.//ram:CalculationPercent', $tradeAllowanceChargeNode)); - $this->destination->elementWithAttribute('cbc:Amount', $this->formatAmount($this->source->queryValue('.//ram:ActualAmount', $tradeAllowanceChargeNode)), 'currencyID', $this->source->queryValue('.//ram:InvoiceCurrencyCode', $invoiceHeaderSettlement)); - $this->destination->elementWithAttribute('cbc:BaseAmount', $this->formatAmount($this->source->queryValue('.//ram:BasisAmount', $tradeAllowanceChargeNode)), 'currencyID', $this->source->queryValue('.//ram:InvoiceCurrencyCode', $invoiceHeaderSettlement)); + $this->destination->element('cbc:ChargeIndicator', $this->source->queryValue('./ram:ChargeIndicator/udt:Indicator', $tradeAllowanceChargeNode)); + $this->destination->element('cbc:AllowanceChargeReasonCode', $this->source->queryValue('./ram:ReasonCode', $tradeAllowanceChargeNode)); + $this->destination->element('cbc:AllowanceChargeReason', $this->source->queryValue('./ram:Reason', $tradeAllowanceChargeNode)); + $this->destination->element('cbc:MultiplierFactorNumeric', $this->source->queryValue('./ram:CalculationPercent', $tradeAllowanceChargeNode)); + $this->destination->elementWithAttribute('cbc:Amount', $this->formatAmount($this->source->queryValue('./ram:ActualAmount', $tradeAllowanceChargeNode)), 'currencyID', $this->source->queryValue('./ram:InvoiceCurrencyCode', $invoiceHeaderSettlement)); + $this->destination->elementWithAttribute('cbc:BaseAmount', $this->formatAmount($this->source->queryValue('./ram:BasisAmount', $tradeAllowanceChargeNode)), 'currencyID', $this->source->queryValue('./ram:InvoiceCurrencyCode', $invoiceHeaderSettlement)); $this->source->whenExists( - './/ram:CategoryTradeTax', + './ram:CategoryTradeTax', $tradeAllowanceChargeNode, function ($tradeAllowanceChargeTaxNode) { $this->destination->startElement('cac:TaxCategory'); - $this->destination->element('cbc:ID', $this->source->queryValue('.//ram:CategoryCode', $tradeAllowanceChargeTaxNode)); - $this->destination->element('cbc:Percent', $this->source->queryValue('.//ram:RateApplicablePercent', $tradeAllowanceChargeTaxNode)); + $this->destination->element('cbc:ID', $this->source->queryValue('./ram:CategoryCode', $tradeAllowanceChargeTaxNode)); + $this->destination->element('cbc:Percent', $this->source->queryValue('./ram:RateApplicablePercent', $tradeAllowanceChargeTaxNode)); $this->destination->startElement('cac:TaxScheme'); - $this->destination->element('cbc:ID', $this->source->queryValue('.//ram:TypeCode', $tradeAllowanceChargeTaxNode)); + $this->destination->element('cbc:ID', $this->source->queryValue('./ram:TypeCode', $tradeAllowanceChargeTaxNode)); $this->destination->endElement(); $this->destination->endElement(); } @@ -1246,19 +1246,19 @@ function ($tradeAllowanceChargeTaxNode) { private function convertDocumentLevelTax(): void { $invoiceElement = $this->source->query('//rsm:CrossIndustryInvoice')->item(0); - $invoiceSuppyChainTradeTransaction = $this->source->query('//rsm:SupplyChainTradeTransaction', $invoiceElement)->item(0); - $invoiceHeaderSettlement = $this->source->query('//ram:ApplicableHeaderTradeSettlement', $invoiceSuppyChainTradeTransaction)->item(0); + $invoiceSuppyChainTradeTransaction = $this->source->query('./rsm:SupplyChainTradeTransaction', $invoiceElement)->item(0); + $invoiceHeaderSettlement = $this->source->query('./ram:ApplicableHeaderTradeSettlement', $invoiceSuppyChainTradeTransaction)->item(0); - $invoiceCurrencyCode = $this->source->queryValue('.//ram:InvoiceCurrencyCode', $invoiceHeaderSettlement); - $taxCurrencyCode = $this->source->queryValue('.//ram:TaxCurrencyCode', $invoiceHeaderSettlement); + $invoiceCurrencyCode = $this->source->queryValue('./ram:InvoiceCurrencyCode', $invoiceHeaderSettlement); + $taxCurrencyCode = $this->source->queryValue('./ram:TaxCurrencyCode', $invoiceHeaderSettlement); $this->source->whenExists( - './/ram:ApplicableTradeTax', + './ram:ApplicableTradeTax', $invoiceHeaderSettlement, function () use ($invoiceHeaderSettlement, $invoiceCurrencyCode, $taxCurrencyCode) { $this->destination->startElement('cac:TaxTotal'); $this->source->whenExists( - sprintf('.//ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TaxTotalAmount[@currencyID=\'%s\']', $invoiceCurrencyCode), + sprintf('./ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TaxTotalAmount[@currencyID=\'%s\']', $invoiceCurrencyCode), $invoiceHeaderSettlement, function ($taxTotalAmountNode) { $this->destination->elementWithAttribute( @@ -1269,28 +1269,28 @@ function ($taxTotalAmountNode) { ); } ); - $this->source->queryValues('.//ram:ApplicableTradeTax', $invoiceHeaderSettlement)->forEach( + $this->source->queryValues('./ram:ApplicableTradeTax', $invoiceHeaderSettlement)->forEach( function ($tradeTaxNode) use ($invoiceHeaderSettlement) { $this->destination->startElement('cac:TaxSubtotal'); $this->destination->elementWithAttribute( 'cbc:TaxableAmount', - $this->formatAmount($this->source->queryValue('.//ram:BasisAmount', $tradeTaxNode)), + $this->formatAmount($this->source->queryValue('./ram:BasisAmount', $tradeTaxNode)), 'currencyID', - $this->source->queryValue('.//ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TaxTotalAmount/@currencyID', $invoiceHeaderSettlement) + $this->source->queryValue('./ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TaxTotalAmount/@currencyID', $invoiceHeaderSettlement) ); $this->destination->elementWithAttribute( 'cbc:TaxAmount', - $this->formatAmount($this->source->queryValue('.//ram:CalculatedAmount', $tradeTaxNode)), + $this->formatAmount($this->source->queryValue('./ram:CalculatedAmount', $tradeTaxNode)), 'currencyID', - $this->source->queryValue('.//ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TaxTotalAmount/@currencyID', $invoiceHeaderSettlement) + $this->source->queryValue('./ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TaxTotalAmount/@currencyID', $invoiceHeaderSettlement) ); $this->destination->startElement('cac:TaxCategory'); - $this->destination->element('cbc:ID', $this->source->queryValue('.//ram:CategoryCode', $tradeTaxNode)); - $this->destination->element('cbc:Percent', $this->source->queryValue('.//ram:RateApplicablePercent', $tradeTaxNode)); - $this->destination->element('cbc:TaxExemptionReasonCode', $this->source->queryValue('.//ram:ExemptionReasonCode', $tradeTaxNode)); - $this->destination->element('cbc:TaxExemptionReason', $this->source->queryValue('.//ram:ExemptionReason', $tradeTaxNode)); + $this->destination->element('cbc:ID', $this->source->queryValue('./ram:CategoryCode', $tradeTaxNode)); + $this->destination->element('cbc:Percent', $this->source->queryValue('./ram:RateApplicablePercent', $tradeTaxNode)); + $this->destination->element('cbc:TaxExemptionReasonCode', $this->source->queryValue('./ram:ExemptionReasonCode', $tradeTaxNode)); + $this->destination->element('cbc:TaxExemptionReason', $this->source->queryValue('./ram:ExemptionReason', $tradeTaxNode)); $this->destination->startElement('cac:TaxScheme'); - $this->destination->element('cbc:ID', $this->source->queryValue('.//ram:TypeCode', $tradeTaxNode)); + $this->destination->element('cbc:ID', $this->source->queryValue('./ram:TypeCode', $tradeTaxNode)); $this->destination->endElement(); $this->destination->endElement(); $this->destination->endElement(); @@ -1300,7 +1300,7 @@ function ($tradeTaxNode) use ($invoiceHeaderSettlement) { if ($invoiceCurrencyCode && $taxCurrencyCode && ($invoiceCurrencyCode != $taxCurrencyCode)) { $this->source->whenExists( - sprintf('.//ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TaxTotalAmount[@currencyID=\'%s\']', $taxCurrencyCode), + sprintf('./ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TaxTotalAmount[@currencyID=\'%s\']', $taxCurrencyCode), $invoiceHeaderSettlement, function ($taxTotalAmountNode) { $this->destination->startElement('cac:TaxTotal'); @@ -1326,61 +1326,61 @@ function ($taxTotalAmountNode) { private function convertDocumentSummation(): void { $invoiceElement = $this->source->query('//rsm:CrossIndustryInvoice')->item(0); - $invoiceSuppyChainTradeTransaction = $this->source->query('//rsm:SupplyChainTradeTransaction', $invoiceElement)->item(0); - $invoiceHeaderSettlement = $this->source->query('//ram:ApplicableHeaderTradeSettlement', $invoiceSuppyChainTradeTransaction)->item(0); + $invoiceSuppyChainTradeTransaction = $this->source->query('./rsm:SupplyChainTradeTransaction', $invoiceElement)->item(0); + $invoiceHeaderSettlement = $this->source->query('./ram:ApplicableHeaderTradeSettlement', $invoiceSuppyChainTradeTransaction)->item(0); $this->source->whenExists( - './/ram:SpecifiedTradeSettlementHeaderMonetarySummation', + './ram:SpecifiedTradeSettlementHeaderMonetarySummation', $invoiceHeaderSettlement, function ($monetarySummationNode) use ($invoiceHeaderSettlement) { $this->destination->startElement('cac:LegalMonetaryTotal'); $this->destination->elementWithAttribute( 'cbc:LineExtensionAmount', - $this->formatAmount($this->source->queryValue('.//ram:LineTotalAmount', $monetarySummationNode)), + $this->formatAmount($this->source->queryValue('./ram:LineTotalAmount', $monetarySummationNode)), 'currencyID', - $this->source->queryValue('.//ram:InvoiceCurrencyCode', $invoiceHeaderSettlement) + $this->source->queryValue('./ram:InvoiceCurrencyCode', $invoiceHeaderSettlement) ); $this->destination->elementWithAttribute( 'cbc:TaxExclusiveAmount', - $this->formatAmount($this->source->queryValue('.//ram:TaxBasisTotalAmount', $monetarySummationNode)), + $this->formatAmount($this->source->queryValue('./ram:TaxBasisTotalAmount', $monetarySummationNode)), 'currencyID', - $this->source->queryValue('.//ram:InvoiceCurrencyCode', $invoiceHeaderSettlement) + $this->source->queryValue('./ram:InvoiceCurrencyCode', $invoiceHeaderSettlement) ); $this->destination->elementWithAttribute( 'cbc:TaxInclusiveAmount', - $this->formatAmount($this->source->queryValue('.//ram:GrandTotalAmount', $monetarySummationNode)), + $this->formatAmount($this->source->queryValue('./ram:GrandTotalAmount', $monetarySummationNode)), 'currencyID', - $this->source->queryValue('.//ram:InvoiceCurrencyCode', $invoiceHeaderSettlement) + $this->source->queryValue('./ram:InvoiceCurrencyCode', $invoiceHeaderSettlement) ); $this->destination->elementWithAttribute( 'cbc:AllowanceTotalAmount', - $this->formatAmount($this->source->queryValue('.//ram:AllowanceTotalAmount', $monetarySummationNode)), + $this->formatAmount($this->source->queryValue('./ram:AllowanceTotalAmount', $monetarySummationNode)), 'currencyID', - $this->source->queryValue('.//ram:InvoiceCurrencyCode', $invoiceHeaderSettlement) + $this->source->queryValue('./ram:InvoiceCurrencyCode', $invoiceHeaderSettlement) ); $this->destination->elementWithAttribute( 'cbc:ChargeTotalAmount', - $this->formatAmount($this->source->queryValue('.//ram:ChargeTotalAmount', $monetarySummationNode)), + $this->formatAmount($this->source->queryValue('./ram:ChargeTotalAmount', $monetarySummationNode)), 'currencyID', - $this->source->queryValue('.//ram:InvoiceCurrencyCode', $invoiceHeaderSettlement) + $this->source->queryValue('./ram:InvoiceCurrencyCode', $invoiceHeaderSettlement) ); $this->destination->elementWithAttribute( 'cbc:PrepaidAmount', - $this->formatAmount($this->source->queryValue('.//ram:TotalPrepaidAmount', $monetarySummationNode)), + $this->formatAmount($this->source->queryValue('./ram:TotalPrepaidAmount', $monetarySummationNode)), 'currencyID', - $this->source->queryValue('.//ram:InvoiceCurrencyCode', $invoiceHeaderSettlement) + $this->source->queryValue('./ram:InvoiceCurrencyCode', $invoiceHeaderSettlement) ); $this->destination->elementWithAttribute( 'cbc:PayableRoundingAmount', - $this->formatAmount($this->source->queryValue('.//ram:RoundingAmount', $monetarySummationNode)), + $this->formatAmount($this->source->queryValue('./ram:RoundingAmount', $monetarySummationNode)), 'currencyID', - $this->source->queryValue('.//ram:InvoiceCurrencyCode', $invoiceHeaderSettlement) + $this->source->queryValue('./ram:InvoiceCurrencyCode', $invoiceHeaderSettlement) ); $this->destination->elementWithAttribute( 'cbc:PayableAmount', - $this->formatAmount($this->source->queryValue('.//ram:DuePayableAmount', $monetarySummationNode)), + $this->formatAmount($this->source->queryValue('./ram:DuePayableAmount', $monetarySummationNode)), 'currencyID', - $this->source->queryValue('.//ram:InvoiceCurrencyCode', $invoiceHeaderSettlement) + $this->source->queryValue('./ram:InvoiceCurrencyCode', $invoiceHeaderSettlement) ); $this->destination->endElement(); } @@ -1395,58 +1395,58 @@ function ($monetarySummationNode) use ($invoiceHeaderSettlement) { private function convertLines(): void { $invoiceElement = $this->source->query('//rsm:CrossIndustryInvoice')->item(0); - $invoiceSuppyChainTradeTransaction = $this->source->query('//rsm:SupplyChainTradeTransaction', $invoiceElement)->item(0); - $invoiceHeaderSettlement = $this->source->query('//ram:ApplicableHeaderTradeSettlement', $invoiceSuppyChainTradeTransaction)->item(0); + $invoiceSuppyChainTradeTransaction = $this->source->query('./rsm:SupplyChainTradeTransaction', $invoiceElement)->item(0); + $invoiceHeaderSettlement = $this->source->query('./ram:ApplicableHeaderTradeSettlement', $invoiceSuppyChainTradeTransaction)->item(0); $this->source->whenExists( - './/ram:IncludedSupplyChainTradeLineItem', + './ram:IncludedSupplyChainTradeLineItem', $invoiceSuppyChainTradeTransaction, function () use ($invoiceSuppyChainTradeTransaction, $invoiceHeaderSettlement) { $this->source->queryValues( - './/ram:IncludedSupplyChainTradeLineItem', + './ram:IncludedSupplyChainTradeLineItem', $invoiceSuppyChainTradeTransaction )->forEach( function ($tradeLineItemNode) use ($invoiceHeaderSettlement) { $this->destination->startElement('cac:InvoiceLine'); - $this->destination->element('cbc:ID', $this->source->queryValue('.//ram:AssociatedDocumentLineDocument/ram:LineID', $tradeLineItemNode)); - $this->destination->element('cbc:Note', $this->source->queryValue('.//ram:AssociatedDocumentLineDocument/ram:IncludedNote/ram:Content', $tradeLineItemNode)); + $this->destination->element('cbc:ID', $this->source->queryValue('./ram:AssociatedDocumentLineDocument/ram:LineID', $tradeLineItemNode)); + $this->destination->element('cbc:Note', $this->source->queryValue('./ram:AssociatedDocumentLineDocument/ram:IncludedNote/ram:Content', $tradeLineItemNode)); $this->destination->elementWithAttribute( 'cbc:InvoicedQuantity', - $this->source->queryValue('.//ram:SpecifiedLineTradeDelivery/ram:BilledQuantity', $tradeLineItemNode), + $this->source->queryValue('./ram:SpecifiedLineTradeDelivery/ram:BilledQuantity', $tradeLineItemNode), 'unitCode', - $this->source->queryValue('.//ram:SpecifiedLineTradeDelivery/ram:BilledQuantity/@unitCode', $tradeLineItemNode) + $this->source->queryValue('./ram:SpecifiedLineTradeDelivery/ram:BilledQuantity/@unitCode', $tradeLineItemNode) ); $this->destination->elementWithAttribute( 'cbc:LineExtensionAmount', - $this->formatAmount($this->source->queryValue('.//ram:LineTotalAmount', $tradeLineItemNode)), + $this->formatAmount($this->source->queryValue('./ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:LineTotalAmount', $tradeLineItemNode)), 'currencyID', - $this->source->queryValue('.//ram:InvoiceCurrencyCode', $invoiceHeaderSettlement) + $this->source->queryValue('./ram:InvoiceCurrencyCode', $invoiceHeaderSettlement) ); - $this->destination->element('cbc:AccountingCost', $this->source->queryValue('.//ram:SpecifiedLineTradeSettlement/ram:ReceivableSpecifiedTradeAccountingAccount/ram:ID', $tradeLineItemNode)); + $this->destination->element('cbc:AccountingCost', $this->source->queryValue('./ram:SpecifiedLineTradeSettlement/ram:ReceivableSpecifiedTradeAccountingAccount/ram:ID', $tradeLineItemNode)); $this->source->whenExists( - './/ram:SpecifiedLineTradeSettlement/ram:BillingSpecifiedPeriod', + './ram:SpecifiedLineTradeSettlement/ram:BillingSpecifiedPeriod', $tradeLineItemNode, function ($billingSpecifiedPeriodNode) { $this->destination->startElement('cac:InvoicePeriod'); $this->destination->element( 'cbc:StartDate', $this->convertDateTime( - $this->source->queryValue('.//ram:StartDateTime/udt:DateTimeString', $billingSpecifiedPeriodNode), - $this->source->queryValue('.//ram:StartDateTime/udt:DateTimeString/@format', $billingSpecifiedPeriodNode) + $this->source->queryValue('./ram:StartDateTime/udt:DateTimeString', $billingSpecifiedPeriodNode), + $this->source->queryValue('./ram:StartDateTime/udt:DateTimeString/@format', $billingSpecifiedPeriodNode) ) ); $this->destination->element( 'cbc:EndDate', $this->convertDateTime( - $this->source->queryValue('.//ram:EndDateTime/udt:DateTimeString', $billingSpecifiedPeriodNode), - $this->source->queryValue('.//ram:EndDateTime/udt:DateTimeString/@format', $billingSpecifiedPeriodNode) + $this->source->queryValue('./ram:EndDateTime/udt:DateTimeString', $billingSpecifiedPeriodNode), + $this->source->queryValue('./ram:EndDateTime/udt:DateTimeString/@format', $billingSpecifiedPeriodNode) ) ); $this->destination->endElement(); } ); $this->source->whenExists( - './/ram:SpecifiedLineTradeAgreement/ram:BuyerOrderReferencedDocument/ram:LineID', + './ram:SpecifiedLineTradeAgreement/ram:BuyerOrderReferencedDocument/ram:LineID', $tradeLineItemNode, function ($buyerOrderReferencedDocumentNode) { $this->destination->startElement('cac:OrderLineReference'); @@ -1455,7 +1455,7 @@ function ($buyerOrderReferencedDocumentNode) { } ); $this->source->whenExists( - './/ram:SpecifiedLineTradeSettlement/ram:AdditionalReferencedDocument/ram:IssuerAssignedID', + './ram:SpecifiedLineTradeSettlement/ram:AdditionalReferencedDocument/ram:IssuerAssignedID', $tradeLineItemNode, function ($additionalReferencedDocumentNode) { $this->destination->startElement('cac:DocumentReference'); @@ -1463,25 +1463,25 @@ function ($additionalReferencedDocumentNode) { $this->destination->endElement(); } ); - $this->source->queryValues('.//ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge', $tradeLineItemNode)->forEach( + $this->source->queryValues('./ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeAllowanceCharge', $tradeLineItemNode)->forEach( function ($tradeLineItemAllowanceChargeNode) use ($invoiceHeaderSettlement) { $this->destination->startElement('cac:AllowanceCharge'); - $this->destination->element('cbc:ChargeIndicator', $this->source->queryValue('.//ram:ChargeIndicator/udt:Indicator', $tradeLineItemAllowanceChargeNode)); - $this->destination->element('cbc:AllowanceChargeReasonCode', $this->source->queryValue('.//ram:ReasonCode', $tradeLineItemAllowanceChargeNode)); - $this->destination->element('cbc:AllowanceChargeReason', $this->source->queryValue('.//ram:Reason', $tradeLineItemAllowanceChargeNode)); - $this->destination->element('cbc:MultiplierFactorNumeric', $this->source->queryValue('.//ram:CalculationPercent', $tradeLineItemAllowanceChargeNode)); - $this->destination->element('cbc:Amount', $this->source->queryValue('.//ram:ActualAmount', $tradeLineItemAllowanceChargeNode)); - $this->destination->elementWithAttribute('cbc:Amount', $this->formatAmount($this->source->queryValue('.//ram:ActualAmount', $tradeLineItemAllowanceChargeNode)), 'currencyID', $this->source->queryValue('.//ram:InvoiceCurrencyCode', $invoiceHeaderSettlement)); - $this->destination->elementWithAttribute('cbc:BaseAmount', $this->formatAmount($this->source->queryValue('.//ram:BasisAmount', $tradeLineItemAllowanceChargeNode)), 'currencyID', $this->source->queryValue('.//ram:InvoiceCurrencyCode', $invoiceHeaderSettlement)); + $this->destination->element('cbc:ChargeIndicator', $this->source->queryValue('./ram:ChargeIndicator/udt:Indicator', $tradeLineItemAllowanceChargeNode)); + $this->destination->element('cbc:AllowanceChargeReasonCode', $this->source->queryValue('./ram:ReasonCode', $tradeLineItemAllowanceChargeNode)); + $this->destination->element('cbc:AllowanceChargeReason', $this->source->queryValue('./ram:Reason', $tradeLineItemAllowanceChargeNode)); + $this->destination->element('cbc:MultiplierFactorNumeric', $this->source->queryValue('./ram:CalculationPercent', $tradeLineItemAllowanceChargeNode)); + $this->destination->element('cbc:Amount', $this->source->queryValue('./ram:ActualAmount', $tradeLineItemAllowanceChargeNode)); + $this->destination->elementWithAttribute('cbc:Amount', $this->formatAmount($this->source->queryValue('./ram:ActualAmount', $tradeLineItemAllowanceChargeNode)), 'currencyID', $this->source->queryValue('./ram:InvoiceCurrencyCode', $invoiceHeaderSettlement)); + $this->destination->elementWithAttribute('cbc:BaseAmount', $this->formatAmount($this->source->queryValue('./ram:BasisAmount', $tradeLineItemAllowanceChargeNode)), 'currencyID', $this->source->queryValue('./ram:InvoiceCurrencyCode', $invoiceHeaderSettlement)); $this->source->whenExists( - './/ram:CategoryTradeTax', + './ram:CategoryTradeTax', $tradeLineItemAllowanceChargeNode, function ($tradeLineItemAllowanceChargeTaxNode) { $this->destination->startElement('cac:TaxCategory'); - $this->destination->element('cbc:ID', $this->source->queryValue('.//ram:CategoryCode', $tradeLineItemAllowanceChargeTaxNode)); - $this->destination->element('cbc:Percent', $this->source->queryValue('.//ram:RateApplicablePercent', $tradeLineItemAllowanceChargeTaxNode)); + $this->destination->element('cbc:ID', $this->source->queryValue('./ram:CategoryCode', $tradeLineItemAllowanceChargeTaxNode)); + $this->destination->element('cbc:Percent', $this->source->queryValue('./ram:RateApplicablePercent', $tradeLineItemAllowanceChargeTaxNode)); $this->destination->startElement('cac:TaxScheme'); - $this->destination->element('cbc:ID', $this->source->queryValue('.//ram:TypeCode', $tradeLineItemAllowanceChargeTaxNode)); + $this->destination->element('cbc:ID', $this->source->queryValue('./ram:TypeCode', $tradeLineItemAllowanceChargeTaxNode)); $this->destination->endElement(); $this->destination->endElement(); } @@ -1490,14 +1490,14 @@ function ($tradeLineItemAllowanceChargeTaxNode) { } ); $this->source->whenExists( - './/ram:SpecifiedTradeProduct', + './ram:SpecifiedTradeProduct', $tradeLineItemNode, function ($tradeLineItemProductNode) use ($tradeLineItemNode) { $this->destination->startElement('cac:Item'); - $this->destination->element('cbc:Description', $this->source->queryValue('.//ram:Description', $tradeLineItemProductNode)); - $this->destination->element('cbc:Name', $this->source->queryValue('.//ram:Name', $tradeLineItemProductNode)); + $this->destination->element('cbc:Description', $this->source->queryValue('./ram:Description', $tradeLineItemProductNode)); + $this->destination->element('cbc:Name', $this->source->queryValue('./ram:Name', $tradeLineItemProductNode)); $this->source->whenExists( - './/ram:BuyerAssignedID', + './ram:BuyerAssignedID', $tradeLineItemProductNode, function ($tradeLineItemProductIdNode) { $this->destination->startElement('cac:BuyersItemIdentification'); @@ -1506,7 +1506,7 @@ function ($tradeLineItemProductIdNode) { } ); $this->source->whenExists( - './/ram:SellerAssignedID', + './ram:SellerAssignedID', $tradeLineItemProductNode, function ($tradeLineItemProductIdNode) { $this->destination->startElement('cac:SellersItemIdentification'); @@ -1515,7 +1515,7 @@ function ($tradeLineItemProductIdNode) { } ); $this->source->whenExists( - './/ram:GlobalID', + './ram:GlobalID', $tradeLineItemProductNode, function ($tradeLineItemProductGlobalIdNode) { $this->destination->startElement('cac:StandardItemIdentification'); @@ -1524,7 +1524,7 @@ function ($tradeLineItemProductGlobalIdNode) { } ); $this->source->whenExists( - './/ram:OriginTradeCountry/ram:ID', + './ram:OriginTradeCountry/ram:ID', $tradeLineItemProductNode, function ($tradeLineItemProductOriginTradeCountryNode) { $this->destination->startElement('cac:OriginCountry'); @@ -1533,7 +1533,7 @@ function ($tradeLineItemProductOriginTradeCountryNode) { } ); $this->source->whenExists( - './/ram:DesignatedProductClassification/ram:ClassCode', + './ram:DesignatedProductClassification/ram:ClassCode', $tradeLineItemProductNode, function ($tradeLineItemProductClassificationNode) { $this->destination->startElement('cac:CommodityClassification'); @@ -1542,11 +1542,11 @@ function ($tradeLineItemProductClassificationNode) { } ); $this->source->whenExists( - './/ram:SpecifiedLineTradeSettlement', + './ram:SpecifiedLineTradeSettlement', $tradeLineItemNode, function ($tradeLineItemSettlementNode) { $this->source->whenExists( - './/ram:ApplicableTradeTax', + './ram:ApplicableTradeTax', $tradeLineItemSettlementNode, function ($tradeLineItemSettlementTaxNode) { $this->destination->startElement('cac:ClassifiedTaxCategory'); @@ -1561,16 +1561,16 @@ function ($tradeLineItemSettlementTaxNode) { } ); $this->source->whenExists( - './/ram:SpecifiedTradeProduct', + './ram:SpecifiedTradeProduct', $tradeLineItemNode, function ($tradeLineItemProductNode) { $this->source->whenExists( - './/ram:ApplicableProductCharacteristic', + './ram:ApplicableProductCharacteristic', $tradeLineItemProductNode, function ($tradeLineProductCharacteristicNode) { $this->destination->startElement('cac:AdditionalItemProperty'); - $this->destination->element('cbc:Name', $this->source->queryValue('.//ram:Description', $tradeLineProductCharacteristicNode)); - $this->destination->element('cbc:Value', $this->source->queryValue('.//ram:Value', $tradeLineProductCharacteristicNode)); + $this->destination->element('cbc:Name', $this->source->queryValue('./ram:Description', $tradeLineProductCharacteristicNode)); + $this->destination->element('cbc:Value', $this->source->queryValue('./ram:Value', $tradeLineProductCharacteristicNode)); $this->destination->endElement(); } ); @@ -1580,12 +1580,12 @@ function ($tradeLineProductCharacteristicNode) { } ); $this->source->whenExists( - './/ram:SpecifiedLineTradeAgreement', + './ram:SpecifiedLineTradeAgreement', $tradeLineItemNode, function ($tradeLineItemAgreementNode) use ($invoiceHeaderSettlement) { $this->destination->startElement('cac:Price'); - $this->destination->elementWithAttribute('cbc:PriceAmount', $this->formatAmount($this->source->queryValue('.//ram:NetPriceProductTradePrice/ram:ChargeAmount', $tradeLineItemAgreementNode)), 'currencyID', $this->source->queryValue('.//ram:InvoiceCurrencyCode', $invoiceHeaderSettlement)); - $this->destination->elementWithAttribute('cbc:BaseQuantity', $this->source->queryValue('.//ram:NetPriceProductTradePrice/ram:BasisQuantity', $tradeLineItemAgreementNode), 'unitCode', $this->source->queryValue('.//ram:NetPriceProductTradePrice/ram:BasisQuantity/@unitCode', $tradeLineItemAgreementNode)); + $this->destination->elementWithAttribute('cbc:PriceAmount', $this->formatAmount($this->source->queryValue('./ram:NetPriceProductTradePrice/ram:ChargeAmount', $tradeLineItemAgreementNode)), 'currencyID', $this->source->queryValue('./ram:InvoiceCurrencyCode', $invoiceHeaderSettlement)); + $this->destination->elementWithAttribute('cbc:BaseQuantity', $this->source->queryValue('./ram:NetPriceProductTradePrice/ram:BasisQuantity', $tradeLineItemAgreementNode), 'unitCode', $this->source->queryValue('./ram:NetPriceProductTradePrice/ram:BasisQuantity/@unitCode', $tradeLineItemAgreementNode)); $this->destination->endElement(); } ); diff --git a/src/XmlDocumentReader.php b/src/XmlDocumentReader.php index e532f99..95a4816 100644 --- a/src/XmlDocumentReader.php +++ b/src/XmlDocumentReader.php @@ -136,7 +136,7 @@ public function exists(string $expression, ?DOMNode $contextNode = null): bool return false; } - if (is_null($nodeList->item(0)->nodeValue)) { + if (is_null($nodeList->item(0)->nodeValue) || $nodeList->item(0)->nodeValue == "") { return false; }