/** * Turns a passed Transaction class into the required markup for interacting * with Twinfield. * * This method doesn't return anything, instead just adds the transaction * to this DOMDocument instance for submission usage. * * @param \Pronamic\Twinfield\Transaction\Transaction $transaction */ public function addTransaction(Transaction $transaction) { // Transaction $transactionElement = $this->createElement('transaction'); $transactionElement->setAttribute('destiny', $transaction->getDestiny()); $this->transactionsElement->appendChild($transactionElement); // Header $headerElement = $this->createElement('header'); $transactionElement->appendChild($headerElement); $officeElement = $this->createElement('office', $transaction->getOffice()); $headerElement->appendChild($officeElement); $codeElement = $this->createElement('code', $transaction->getCode()); $headerElement->appendChild($codeElement); $dateElement = $this->createElement('date', $transaction->getDate()); $headerElement->appendChild($dateElement); if ($transaction->getPeriod() !== null) { $periodElement = $this->createElement('period', $transaction->getPeriod()); $headerElement->appendChild($periodElement); } if ($transaction->getInvoiceNumber() !== null) { $invoiceNumberElement = $this->createElement('invoicenumber', $transaction->getInvoiceNumber()); $headerElement->appendChild($invoiceNumberElement); } if ($transaction->getDueDate() !== null) { $dueDateElement = $this->createElement('duedate', $transaction->getDueDate()); $headerElement->appendChild($dueDateElement); } if ($transaction->getFreetext1() !== null) { $freetext1Element = $this->createElement('freetext1', $transaction->getFreetext1()); $headerElement->appendChild($freetext1Element); } if ($transaction->getFreetext2() !== null) { $freetext2Element = $this->createElement('freetext2', $transaction->getFreetext2()); $headerElement->appendChild($freetext2Element); } if ($transaction->getFreetext3() !== null) { $freetext3Element = $this->createElement('freetext3', $transaction->getFreetext3()); $headerElement->appendChild($freetext3Element); } $linesElement = $this->createElement('lines'); $transactionElement->appendChild($linesElement); // Lines foreach ($transaction->getLines() as $transactionLine) { /* @var $transactionLine \Pronamic\Twinfield\Transaction\TransactionLine */ $lineElement = $this->createElement('line'); $lineElement->setAttribute('type', $transactionLine->getType()); $lineElement->setAttribute('id', $transactionLine->getID()); $linesElement->appendChild($lineElement); $dim1Element = $this->createElement('dim1', $transactionLine->getDim1()); $dim2Element = $this->createElement('dim2', $transactionLine->getDim2()); $value = $transactionLine->getValue(); $value = number_format($value, 2, '.', ''); $valueElement = $this->createElement('value', $value); $debitCreditElement = $this->createElement('debitcredit', $transactionLine->getDebitCredit()); if ($transactionLine->getType() != 'total' && $transactionLine->getVatCode() !== null) { $vatCodeElement = $this->createElement('vatcode', $transactionLine->getVatCode()); $lineElement->appendChild($vatCodeElement); } $descriptionNode = $this->createTextNode(substr($transactionLine->getDescription(), 0, 40)); $descriptionElement = $this->createElement('description'); $descriptionElement->appendChild($descriptionNode); $lineElement->appendChild($dim1Element); $lineElement->appendChild($dim2Element); $lineElement->appendChild($valueElement); $lineElement->appendChild($debitCreditElement); $invoicenumber = $transactionLine->getInvoicenumber(); if (!empty($invoicenumber)) { $invoicenumberElement = $this->createElement('invoicenumber', $invoicenumber); $lineElement->appendChild($invoicenumberElement); } $performanceType = $transactionLine->getPerformanceType(); if (!empty($performanceType)) { $perfElement = $this->createElement('performancetype', $performanceType); $lineElement->appendChild($perfElement); } $currencyDate = $transactionLine->getCurrencyDate(); if (!empty($currencyDate)) { $currencyDateElement = $this->createElement('currencydate', $currencyDate); $lineElement->appendChild($currencyDateElement); } $vatValue = $transactionLine->getVatValue(); if (!empty($vatValue)) { $vatElement = $this->createElement('vatvalue', $vatValue); $lineElement->appendChild($vatElement); } $lineElement->appendChild($descriptionElement); } }