shop-old/core/output/deliverynotepdf.class.php
2026-04-20 01:03:43 +02:00

397 lines
12 KiB
PHP

<?php
/*
* @version $Id: index.php 10381 2008-06-01 03:35:53Z $
* @package Carteasy
* @copyright Copyright (C) 2005 - 2011 Wlanium
* @license proprietary
* @author Thomas Bartelt
* Carteasy is a web shop system
*/
include_once './libs/tcpdf/tcpdf.php';
include_once './core/config.class.php';
class DeliveryNotePDF extends TCPDF {
private $_image_path;
// fill color for header
private $_fill_r = 102;
private $_fill_g = 102;
private $_fill_b = 102;
// table border color
private $_border_r = 0;
private $_border_g = 0;
private $_boerder_b = 0;
// stripe color for items list
private $_stripe_r = 249;
private $_stripe_g = 249;
private $_stripe_b = 249;
// normal text color
private $_text_r = 0;
private $_text_g = 0;
private $_text_b = 0;
// light text color
private $_light_text_r = 128;
private $_light_text_g = 128;
private $_light_text_b = 128;
private $_line_width = 0.2;
// new page
private $new_page_lines = 260;
// header image
private $header_image_x = 5;
private $header_image_y = 5;
// footer image
private $footer_image_x = 5;
private $footer_image_y = 260;
// invoice data
private $invoice_data_y = 53;
public function __construct() {
parent::__construct(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
$this->_image_path = ROOT_DIR.'web/'.SHOP_SYSTEM.'/documents/';
$this->SetMargins(6, 5, 5);
if (Config::has_key('bill_new_page_lines')) {
$this->new_page_lines = Config::get_value('bill_new_page_lines');
}
if (Config::has_key('bill_invoice_data_y')) {
$this->invoice_data_y = Config::get_value('bill_invoice_data_y');
}
if (Config::has_key('bill_header_image_x')) {
$this->header_image_x = Config::get_value('bill_header_image_x');
}
if (Config::has_key('bill_header_image_y')) {
$this->header_image_y = Config::get_value('bill_header_image_y');
}
if (Config::has_key('bill_footer_image_x')) {
$this->footer_image_x = Config::get_value('bill_footer_image_x');
}
if (Config::has_key('bill_footer_image_y')) {
$this->footer_image_y = Config::get_value('bill_footer_image_y');
}
}
private function CheckForNewPage($lines = false) {
if ($lines && ($this->GetY() + $lines * 3.52778) > $this->new_page_lines) {
$this->addPage('', '', true, true);
} else if ($this->GetY() > $this->new_page_lines) {
$this->addPage('', '', true, true);
}
}
public function Header() {
if (Config::has_key('bill_header_image')) {
$this->Image($this->_image_path.(string)Config::get_value('bill_header_image'), $this->header_image_x, $this->header_image_y, 200, 0);
}
if (Config::has_key('bill_header_text_window')) {
$this->SetXY(7, 50);
$this->SetFont('', '', 6);
$this->Cell(50, 0, Config::get_value('bill_header_text_window'), 0, 0, 'L', 0);
}
if (Config::has_key('bill_header_text_address')) {
$address = Config::get_value('bill_header_text_address');
if (Config::has_key('bill_header_alignment_address')) {
$alignment = $this->_getAlignment(Config::get_value('bill_header_alignment_address'));
} else {
$alignment = 'L';
}
$this->SetXY(125, 50);
$this->SetFont('', '', 7);
$this->MultiCell(70, 20, $address, 0, $alignment);
}
$this->setTopMargin(60 + 5);
}
public function Footer() {
$this->SetFont('', '', 8);
if (Config::has_key('bill_footer_image')) {
$this->Image($this->_image_path.(string)Config::get_value('bill_footer_image'), $this->footer_image_x, $this->footer_image_y, 200, 0);
}
$footer_position_y = -25;
if (Config::has_key('bill_footer_text_margin_bottom')) {
$footer_position_y = (int)Config::get_value('bill_footer_text_margin_bottom');
}
// left
if (Config::has_key('bill_footer_text_left')) {
$footer_left_text = (string)Config::get_value('bill_footer_text_left');
if ($footer_left_text != '') {
if (Config::has_key('bill_footer_alignment_left')) {
$alignment = $this->_getAlignment(Config::get_value('bill_footer_alignment_left'));
} else {
$alignment = 'L';
}
$this->SetXY(5, $footer_position_y);
$this->MultiCell(65, 20, $footer_left_text, 0, $alignment);
}
}
// center
if (Config::has_key('bill_footer_text_center')) {
$footer_center_text = (string)Config::get_value('bill_footer_text_center');
if ($footer_center_text != '') {
if (Config::has_key('bill_footer_alignment_center')) {
$alignment = $this->_getAlignment(Config::get_value('bill_footer_alignment_center'));
} else {
$alignment = 'L';
}
$this->SetXY(70, $footer_position_y);
$this->MultiCell(70, 20, $footer_center_text, 0, $alignment);
}
}
// right
if (Config::has_key('bill_footer_text_right')) {
$footer_right_text = (string)Config::get_value('bill_footer_text_right');
if ($footer_right_text != '') {
if (Config::has_key('bill_footer_alignment_right')) {
$alignment = $this->_getAlignment(Config::get_value('bill_footer_alignment_right'));
} else {
$alignment = 'R';
}
$this->SetXY(140, $footer_position_y);
$this->MultiCell(65, 20, $footer_right_text, 0, $alignment);
}
}
}
public function PrintCustomerAddress($data) {
$this->SetX(5);
$this->SetY(53);
$this->SetFont('', '', 10);
$this->MultiCell(80,35, $data, 0, 'L');
}
public function PrintInvoiceData($data) {
$this->SetFont('', '', 10);
$key_string = '';
$value_string = '';
foreach ($data as $key => $value) {
if ($key_string == '') {
$key_string = $key;
$value_string = $value;
} else {
$key_string .= "\n".$key;
$value_string .= "\n".$value;
}
}
$this->SetXY(125, $this->invoice_data_y);
$this->MultiCell(40, 35, $key_string, 0, 'L');
$this->SetXY(165, $this->invoice_data_y);
$this->MultiCell(40, 35, $value_string, 0, 'R');
}
public function PrintInvoiceOrder($data) {
$this->SetFont('', 'B', 18);
$this->Cell(120, 0, "Lieferschein", '', 0, 'L');
$this->Ln();
$this->SetX(5);
$this->SetY($this->tMargin + 40);
$this->SetFont('', '', 8);
// conf header
$this->SetFillColor($this->_fill_r, $this->_fill_g, $this->_fill_b);
$this->SetTextColor(255);
$this->SetDrawColor($this->_border_r, $this->_border_g, $this->_border_b);
$this->SetLineWidth($this->_line_width);
$this->SetFont('', 'B');
$header_width = array(15, 10, 100, 20, 30, 25);
$length = count($header_width);
// draw header
$this->Cell($header_width[0], 0, 'Pos.', 'LTB', 0, 'C', 1); // Pos.
$this->Cell($header_width[1], 0, 'St.', 'TB', 0, 'C', 1); // St.
$this->Cell($header_width[2], 0, 'Beschreibung/Art-Nr.', 'TB', 0, 'L', 1); // Art-Nr./Beschreibung
$this->Cell($header_width[3], 0, '', 'TB', 0, 'R', 1); //
$this->Cell($header_width[4], 0, '', 'TB', 0, 'R', 1); //
$this->Cell($header_width[5], 0, '', 'RTB', 0, 'R', 1); // mwst
$this->Ln();
// conf data
$this->SetFillColor($this->_stripe_r, $this->_stripe_g, $this->_stripe_b);
$this->SetTextColor(0);
$this->SetFont('');
$fill = 0;
// draw data
$i = 1;
foreach ($data->items as $row) {
$this->CheckForNewPage();
// first row
$this->SetFont('', '', 8);
$this->SetTextColor($this->_text_r, $this->_text_g, $this->_text_b);
$this->Cell($header_width[0], 0, $i, 'L', 0, 'C', $fill); // Pos.
$this->Cell($header_width[1], 0, $row->amount, 0, 0, 'C', $fill); // St.
$this->Cell($header_width[2], 0, $this->_stringCleaner($row->item_name), 0, 0, 'L', $fill); // Beschreibung
$this->Cell($header_width[3], 0, '', 0, 0, 'R', $fill); //
$this->Cell($header_width[4], 0, '', 0, 0, 'R', $fill); //
$this->Cell($header_width[5], 0, '', 'R', 0, 'R', $fill); // mwst
$this->Ln();
//$this->SetTextColor($this->_light_text_r, $this->_light_text_g, $this->_light_text_b);
$this->Cell($header_width[0], 0, '', 'L', 0, 'C', $fill);
$this->Cell($header_width[1], 0, '', 0, 0, 'R', $fill);
$this->Cell($header_width[2], 0, 'Art-Nr.: '.$row->item_number, 0, 0, 'L', $fill); // Art-Nr.
$this->Cell($header_width[3], 0, '', 0, 0, 'R', $fill);
$this->Cell($header_width[4], 0, '', 0, 0, 'R', $fill);
$this->Cell($header_width[5], 0, '', 'R', 0, 'R', $fill);
$this->Ln();
if ($row->variant1) {
$this->Cell($header_width[0], 0, '', 'L', 0, 'C', $fill);
$this->Cell($header_width[1], 0, '', 0, 0, 'R', $fill);
if ($row->vn1) {
$txt=$row->vn1.': ';
} else {
$txt='Attr: ';
}
$this->Cell($header_width[2], 0,$txt.$row->variant1, 0, 0, 'L', $fill); // Varieant1
$this->Cell($header_width[3], 0, '', 0, 0, 'R', $fill);
$this->Cell($header_width[4], 0, '', 0, 0, 'R', $fill);
$this->Cell($header_width[5], 0, '', 'R', 0, 'R', $fill);
$this->Ln();
}
if ($row->variant2) {
$this->Cell($header_width[0], 0, '', 'L', 0, 'C', $fill);
$this->Cell($header_width[1], 0, '', 0, 0, 'R', $fill);
if ($row->vn2) {
$txt=$row->vn2.': ';
} else {
$txt='Attr: ';
}
$this->Cell($header_width[2], 0,$txt.$row->variant2, 0, 0, 'L', $fill); // Varieant1
$this->Cell($header_width[3], 0, '', 0, 0, 'R', $fill);
$this->Cell($header_width[4], 0, '', 0, 0, 'R', $fill);
$this->Cell($header_width[5], 0, '', 'R', 0, 'R', $fill);
$this->Ln();
}
// last row
if ($row->item_status) {
$this->SetFont('', '', 8);
//$this->SetTextColor($this->_text_r, $this->_text_g, $this->_text_b);
$this->Cell($header_width[0] + $header_width[1], 0, '', 'L', 0, 'C', $fill);
$text = '';
if ($row->item_status == 1) {
// nicht lieferbar
if ($row->item_status_text) {
$text = $row->item_status_text;
} else {
$text = 'nicht lieferbar';
}
} else if ($row->item_status == 2) {
// nachliefern
if ($row->backorder_quantity) {
$text .= $row->backorder_quantity ;
}
if ($text == '' && $row->item_status_text) {
$text .= $row->item_status_text;
} else if ($row->item_status_text) {
$text .= ' '.$row->item_status_text;
} else {
$text .= ' nachliefern';
}
if ($row->delivery_date) {
if ($text != '') {
$date = explode(' ', $row->delivery_date);
$text .= ' - '.$date[2].'.'.$date[1].'.'.$date[0];
}
}
} else if ($row->item_status == 3) {
// info
if ($row->backorder_quantity) {
$text .= $row->backorder_quantity ;
}
if ($text == '' && $row->item_status_text) {
$text .= $row->item_status_text;
} else if ($row->item_status_text) {
$text .= ' '.$row->item_status_text;
} else {
$text .= ' info';
}
if ($row->delivery_date) {
if ($text != '') {
$date = explode(' ', $row->delivery_date);
$text .= ' - '.$date[2].'.'.$date[1].'.'.$date[0];
}
}
}
$this->Cell($header_width[2] + $header_width[3] + $header_width[4], 0, $this->_stringCleaner($text), 0, 0, 'L', $fill);
$this->Cell($header_width[5], 0, '', 'R', 0, 'L', $fill);
$this->Ln();
}
$fill = !$fill;
$i++;
}
$this->Cell(array_sum($header_width), 0, '', 'T');
$this->Ln();
}
public function PrintNotice($title, $notice) {
$this->CheckForNewPage(substr_count($notice, "\n") + 1);
$this->SetFillColor($this->_fill_r, $this->_fill_g, $this->_fill_b);
$this->SetTextColor(255);
$this->SetDrawColor($this->_border_r, $this->_border_g, $this->_border_b);
$this->SetLineWidth($this->_line_width);
$this->SetFont('', 'B');
$this->Cell(200, 1, $title, 1, 0, 'L', 1);
$this->Ln();
$this->SetTextColor(0);
$this->SetFont('');
$this->MultiCell(200, 1, $notice, 'LRB', 'L', 0);
$this->Ln(4);
}
protected function _getAlignment($num) {
if ($num == 0) {
return 'L';
} else if ($num == 1) {
return 'C';
} else if ($num == 2) {
return 'R';
}
return 'C';
}
protected function _stringCleaner($sting) {
$search = array('€', 'ß', 'ä', 'ö', 'ü', 'Ä', 'Ö', 'Ü');
$replace = array($this->unichr(8364), $this->unichr(223), $this->unichr(228), $this->unichr(246), $this->unichr(252), $this->unichr(196), $this->unichr(214), $this->unichr(220));
return str_replace($search, $replace, $sting);
}
}