protected function printInfo()
 {
     $pdf = $this->pdf;
     $senderData = $this->senderData;
     $invoiceData = $this->invoiceData;
     $recipientData = $this->recipientData;
     // Invoice info headers
     $pdf->SetXY(115, 10);
     $pdf->SetFont('Helvetica', 'B', 12);
     $pdf->Cell(40, 5, $GLOBALS['locPDFOrderConfirmationHeader'], 0, 1, 'R');
     $pdf->SetFont('Helvetica', '', 10);
     $pdf->SetXY(115, $pdf->GetY() + 5);
     if ($recipientData['customer_no'] != 0) {
         $pdf->Cell(40, 4, $GLOBALS['locPDFCustomerNumber'] . ': ', 0, 0, 'R');
         $pdf->Cell(60, 4, $recipientData['customer_no'], 0, 1);
     }
     if ($recipientData['company_id']) {
         $pdf->SetX(115);
         $pdf->Cell(40, 4, $GLOBALS['locPDFClientVATID'] . ': ', 0, 0, 'R');
         $pdf->Cell(60, 4, $recipientData['company_id'], 0, 1);
     }
     $pdf->SetX(115);
     $pdf->Cell(40, 4, $GLOBALS['locPDFOrderConfirmationNumber'] . ': ', 0, 0, 'R');
     $pdf->Cell(60, 4, $invoiceData['invoice_no'], 0, 1);
     $pdf->SetX(115);
     $pdf->Cell(40, 4, $GLOBALS['locPDFOrderConfirmationDate'] . ': ', 0, 0, 'R');
     $strInvoiceDate = $this->_formatDate($invoiceData['invoice_date']);
     $pdf->Cell(60, 4, $strInvoiceDate, 0, 1);
     $pdf->SetX(115);
     $pdf->Cell(40, 5, $GLOBALS['locPDFTermsOfPayment'] . ': ', 0, 0, 'R');
     $paymentDays = round(dbDate2UnixTime($invoiceData['due_date']) / 3600 / 24 - dbDate2UnixTime($invoiceData['invoice_date']) / 3600 / 24);
     if ($paymentDays < 0) {
         // This shouldn't happen, but try to be safe...
         $paymentDays = getPaymentDays($invoiceData['company_id']);
     }
     $pdf->Cell(60, 5, sprintf(getTermsOfPayment($invoiceData['company_id']), $paymentDays), 0, 1);
     if ($invoiceData['reference']) {
         $pdf->SetX(115);
         $pdf->Cell(40, 5, $GLOBALS['locPDFYourReference'] . ': ', 0, 0, 'R');
         $pdf->MultiCell(50, 5, $invoiceData['reference'], 0, 'L');
     }
     if ($invoiceData['delivery_terms']) {
         $pdf->SetX(115);
         $pdf->Cell(40, 4, $GLOBALS['locPDFDeliveryTerms'] . ': ', 0, 0, 'R');
         $pdf->MultiCell(50, 4, $invoiceData['delivery_terms'], 0, 'L', 0);
     }
     if ($invoiceData['delivery_method']) {
         $pdf->SetX(115);
         $pdf->Cell(40, 4, $GLOBALS['locPDFDeliveryMethod'] . ': ', 0, 0, 'R');
         $pdf->MultiCell(50, 4, $invoiceData['delivery_method'], 0, 'L', 0);
     }
     if (isset($invoiceData['info']) && $invoiceData['info']) {
         $pdf->SetX(115);
         $pdf->Cell(40, 5, $GLOBALS['locPDFAdditionalInformation'] . ': ', 0, 0, 'R');
         $pdf->MultiCell(50, 4, $invoiceData['info'], 0, 'L', 0);
     }
 }
 protected function printInfo()
 {
     $pdf = $this->pdf;
     $senderData = $this->senderData;
     $invoiceData = $this->invoiceData;
     $recipientData = $this->recipientData;
     if ($this->printStyle == 'dispatch') {
         $locStr = 'DispatchNote';
     } elseif ($this->printStyle == 'receipt') {
         $locStr = 'Receipt';
     } else {
         $locStr = 'Invoice';
     }
     // Invoice info headers
     $pdf->SetXY(115, 10);
     $pdf->SetFont('Helvetica', 'B', 12);
     if ($this->printStyle == 'dispatch') {
         $pdf->Cell(40, 5, $GLOBALS['locPDFDispatchNoteHeader'], 0, 1, 'R');
     } elseif ($this->printStyle == 'receipt') {
         $pdf->Cell(40, 5, $GLOBALS['locPDFReceiptHeader'], 0, 1, 'R');
     } elseif ($invoiceData['state_id'] == 5) {
         $pdf->Cell(40, 5, $GLOBALS['locPDFFirstReminderHeader'], 0, 1, 'R');
     } elseif ($invoiceData['state_id'] == 6) {
         $pdf->Cell(40, 5, $GLOBALS['locPDFSecondReminderHeader'], 0, 1, 'R');
     } else {
         $pdf->Cell(40, 5, $GLOBALS['locPDFInvoiceHeader'], 0, 1, 'R');
     }
     $pdf->SetFont('Helvetica', '', 10);
     $pdf->SetXY(115, $pdf->GetY() + 5);
     if ($recipientData['customer_no'] != 0) {
         $pdf->Cell(40, 5, $GLOBALS['locPDFCustomerNumber'] . ": ", 0, 0, 'R');
         $pdf->Cell(60, 5, $recipientData['customer_no'], 0, 1);
     }
     if ($recipientData['company_id']) {
         $pdf->SetX(115);
         $pdf->Cell(40, 5, $GLOBALS['locPDFClientVATID'] . ": ", 0, 0, 'R');
         $pdf->Cell(60, 5, $recipientData['company_id'], 0, 1);
     }
     $pdf->SetX(115);
     $pdf->Cell(40, 5, $GLOBALS["locPDF{$locStr}Number"] . ': ', 0, 0, 'R');
     $pdf->Cell(60, 5, $invoiceData['invoice_no'], 0, 1);
     $pdf->SetX(115);
     $pdf->Cell(40, 5, $GLOBALS["locPDF{$locStr}Date"] . ': ', 0, 0, 'R');
     $strInvoiceDate = $this->_formatDate($invoiceData['invoice_date']);
     $strDueDate = $this->_formatDate($invoiceData['due_date']);
     $pdf->Cell(60, 5, $strInvoiceDate, 0, 1);
     if ($this->printStyle == 'invoice') {
         $pdf->SetX(115);
         $pdf->Cell(40, 5, $GLOBALS['locPDFDueDate'] . ": ", 0, 0, 'R');
         $pdf->Cell(60, 5, $strDueDate, 0, 1);
         $pdf->SetX(115);
         $pdf->Cell(40, 5, $GLOBALS['locPDFTermsOfPayment'] . ": ", 0, 0, 'R');
         $paymentDays = round(dbDate2UnixTime($invoiceData['due_date']) / 3600 / 24 - dbDate2UnixTime($invoiceData['invoice_date']) / 3600 / 24);
         if ($paymentDays < 0) {
             // This shouldn't happen, but try to be safe...
             $paymentDays = getPaymentDays($invoiceData['company_id']);
         }
         $pdf->Cell(60, 5, sprintf(getTermsOfPayment($invoiceData['company_id']), $paymentDays), 0, 1);
         $pdf->SetX(115);
         $pdf->Cell(40, 5, $GLOBALS['locPDFPeriodForComplaints'] . ": ", 0, 0, 'R');
         $pdf->Cell(60, 5, getSetting('invoice_period_for_complaints'), 0, 1);
         $pdf->SetX(115);
         $pdf->Cell(40, 5, $GLOBALS['locPDFPenaltyInterest'] . ": ", 0, 0, 'R');
         $pdf->Cell(60, 5, $this->_formatNumber(getSetting('invoice_penalty_interest'), 1, true) . ' %', 0, 1);
         $pdf->SetX(115);
         $pdf->Cell(40, 5, $GLOBALS['locPDFRecipientBankAccount'] . ": ", 0, 0, 'R');
         $pdf->Cell(60, 5, $senderData['bank_iban'], 0, 1);
         $pdf->SetX(115);
         $pdf->Cell(40, 5, $GLOBALS['locPDFRecipientBankBIC'] . ": ", 0, 0, 'R');
         $pdf->Cell(60, 5, $senderData['bank_swiftbic'], 0, 1);
         $pdf->SetX(115);
         if ($this->refNumber) {
             $pdf->Cell(40, 5, $GLOBALS['locPDFInvoiceRefNr'] . ": ", 0, 0, 'R');
             $pdf->Cell(60, 5, $this->refNumber, 0, 1);
         }
     }
     if ($invoiceData['reference'] && $this->printStyle != 'dispatch') {
         $pdf->SetX(115);
         $pdf->Cell(40, 5, $GLOBALS['locPDFYourReference'] . ": ", 0, 0, 'R');
         $pdf->Cell(60, 5, $invoiceData['reference'], 0, 1);
     }
     if (isset($invoiceData['info']) && $invoiceData['info']) {
         $pdf->SetX(115);
         $pdf->Cell(40, 5, $GLOBALS['locPDFAdditionalInformation'] . ': ', 0, 0, 'R');
         $pdf->MultiCell(50, 5, $invoiceData['info'], 0, 'L', 0);
     }
     if ($this->printStyle == 'invoice') {
         if ($invoiceData['refunded_invoice_no']) {
             $pdf->SetX(115);
             $pdf->Cell(40, 5, sprintf($GLOBALS['locPDFRefundsInvoice'], $invoiceData['refunded_invoice_no']), 0, 1, 'R');
         }
         if ($invoiceData['state_id'] == 5) {
             $pdf->SetX(108);
             $pdf->SetFont('Helvetica', 'B', 10);
             $pdf->MultiCell(98, 5, $GLOBALS['locPDFFirstReminderNote'], 0, 'L', 0);
             $pdf->SetFont('Helvetica', '', 10);
         } elseif ($invoiceData['state_id'] == 6) {
             $pdf->SetX(108);
             $pdf->SetFont('Helvetica', 'B', 10);
             $pdf->MultiCell(98, 5, $GLOBALS['locPDFSecondReminderNote'], 0, 'L', 0);
             $pdf->SetFont('Helvetica', '', 10);
         }
     }
 }
 protected function transform($xslt, $xsd = '')
 {
     $xml = new SimpleXMLElement('<?xml version="1.0"?><invoicedata/>');
     $sender = $xml->addChild('sender');
     $this->arrayToXML($this->senderData, $sender);
     $recipient = $xml->addChild('recipient');
     $this->arrayToXML($this->recipientData, $recipient);
     $invoice = $xml->addChild('invoice');
     $invoiceData = $this->invoiceData;
     $invoiceData['totalsum'] = $this->totalSum;
     $invoiceData['totalvat'] = $this->totalVAT;
     $invoiceData['totalsumvat'] = $this->totalSumVAT;
     $invoiceData['formatted_ref_number'] = $this->refNumber;
     $invoiceData['barcode'] = $this->barcode;
     $invoiceData['groupedvats'] = $this->groupedVATs;
     $this->arrayToXML($invoiceData, $invoice);
     $rows = $invoice->addChild('rows');
     $this->arrayToXML($this->invoiceRowData, $rows, 'row');
     foreach ($this->invoiceRowData as &$data) {
         if (isset($GLOBALS["locPDF{$data['type']}"])) {
             $data['type'] = $GLOBALS["locPDF{$data['type']}"];
         }
     }
     require 'settings_def.php';
     $settingsData = array();
     foreach ($arrSettings as $key => $value) {
         if (substr($key, 0, 8) == 'invoice_' && $value['type'] != 'LABEL') {
             switch ($key) {
                 case 'invoice_terms_of_payment':
                     $settingsData[$key] = sprintf(getTermsOfPayment($invoiceData['company_id']), getPaymentDays($invoiceData['company_id']));
                     break;
                 case 'invoice_pdf_filename':
                     $settingsData[$key] = $this->getPrintOutFileName(getSetting('invoice_pdf_filename'));
                     break;
                 default:
                     $settingsData[$key] = getSetting($key);
             }
         }
     }
     $settingsData['invoice_penalty_interest_desc'] = $GLOBALS['locPDFPenaltyInterestDesc'] . ': ' . miscRound2OptDecim(getSetting('invoice_penalty_interest'), 1) . ' %';
     $settingsData['current_time_year'] = date('Y');
     $settingsData['current_time_mon'] = date('m');
     $settingsData['current_time_day'] = date('d');
     $settingsData['current_time_hour'] = date('H');
     $settingsData['current_time_min'] = date('i');
     $settingsData['current_time_sec'] = date('s');
     $settingsData['current_timestamp'] = date('c');
     $settingsData['current_timestamp_utc'] = gmdate('Y-m-d\\TH:i:s\\Z');
     $settings = $xml->addChild('settings');
     $this->arrayToXML($settingsData, $settings);
     $xsltproc = new XSLTProcessor();
     $xsl = new DOMDocument();
     $xsl->load($xslt);
     $xsltproc->importStylesheet($xsl);
     $xsltproc->setParameter('', 'stylesheet', $this->printStyle);
     $domDoc = dom_import_simplexml($xml)->ownerDocument;
     $this->xml = $xsltproc->transformToXML($domDoc);
     if ($xsd) {
         libxml_use_internal_errors(true);
         $xmlDoc = new DOMDocument();
         $xmlDoc->loadXML($this->xml);
         if (!$xmlDoc->schemaValidate($xsd)) {
             header("Content-Type: text/plain");
             echo "Result XML validation failed:\n\n";
             $errors = libxml_get_errors();
             foreach ($errors as $error) {
                 switch ($error->level) {
                     case LIBXML_ERR_WARNING:
                         $type = 'Warning';
                         break;
                     case LIBXML_ERR_FATAL:
                         $type = 'Fatal';
                         break;
                     default:
                         $type = 'Error';
                 }
                 echo "{$type} {$error->code}({$error->level}) at {$error->line}:{$error->column}: {$error->message}\n";
             }
             echo "\n\nXML:\n\n";
             $lineno = 1;
             foreach (explode("\n", $this->xml) as $line) {
                 echo "{$lineno}\t{$line}\n";
                 ++$lineno;
             }
             exit(1);
         }
     }
 }