This repository has been archived on 2024-04-08. You can view files and clone it, but cannot push or open issues or pull requests.
khosb/modules/invoice/invoice_base_fpdf.inc.php
2011-05-03 09:49:04 +10:00

198 lines
5.1 KiB
PHP

<?php
/**
* AgileBill - Open Billing Software
*
* This body of work is free software; you can redistribute it and/or
* modify it under the terms of the Open AgileBill License
* License as published at http://www.agileco.com/agilebill/license1-4.txt
*
* Originally authored by Joseph Benden
* Modifications by Tony Landis, AgileBill LLC
*
* Recent modifications by Deon George
*
* @author Deon George <deonATleenooksDOTnet>
* @copyright 2009 Deon George
* @link http://osb.leenooks.net
*
* @link http://www.agileco.com/
* @copyright 2004-2008 Agileco, LLC.
* @license http://www.agileco.com/agilebill/license1-4.txt
* @author Tony Landis <tony@agileco.com>
* @package AgileBill
* @subpackage Module:Invoice
*/
define('FPDF_FONTPATH',PATH_INCLUDES.'fpdf/font/');
require_once(PATH_INCLUDES.'fpdf/fpdf.php');
/**
* PDF Invoice Base
*
* @package AgileBill
* @subpackage Module:Invoice
*/
abstract class pdf_invoice_base extends fpdf {
protected $billToCompany = true;
protected $itemsSummaryMax = 16;
protected $itemsPreviousMax = 5;
protected $news = '';
protected $pageType = 'blank';
protected $show_itemized = true;
protected $show_service_range = false;
private $invoiceCurrency = '$';
private $invoiceDecimals = 2;
# Store previous invoices due
private $itemsPrevious = array();
# Stores the invoice items
protected $invoice;
protected $itemsFull;
protected $account;
# Iteration of drawing the items on the invoice
protected $iteration;
# Store the date range, that the invoice covers
protected $dateRange;
public function __construct($inv) {
parent::__construct();
$this->SetCreator('Open Source Billing');
$this->SetAuthor($inv->print['site']['NAME']);
$this->SetTitle(sprintf('%s Invoice',$inv->print['site']['NAME']));
$this->SetSubject(sprintf('Invoice #%06s',$inv->getPrintInvoiceNum()));
$this->SetKeywords($inv->getPrintInvoiceID());
$this->SetAutoPageBreak(TRUE,25);
$this->SetDisplayMode('fullwidth');
return $this;
}
public function load_setup($rs=false) {
if (! $rs) {
$db =& DB();
$rs = $db->Execute(sqlSelect($db,'setup_invoice','*',''));
}
$this->billToCompany = $rs->fields['bill_to_company'];
$this->invoiceCurrency = $rs->fields['invoice_currency'];
$this->invoiceDecimals = $rs->fields['invoice_decimals'];
$this->itemsSummaryMax = $rs->fields['items_summary_max'];
$this->news = $rs->fields['news'];
$this->pageType = $rs->fields['page_type'];
$this->show_itemized = $rs->fields['invoice_show_itemized'];
$this->show_service_range = $rs->fields['invoice_show_service_dates'];
}
abstract public function drawCompanyLogo();
abstract public function drawCompanyAddress($inv);
abstract public function drawInvoiceHeader($inv);
/**
* Enable re-iteration of the invoices items, so that they can be displayed many ways
*/
abstract public function drawLineItems_pre($iteration);
/**
* This is called for each line item.
*/
abstract public function drawLineItems($db,$line,$invnum);
/**
* Draws the summary on the first page
*/
abstract public function drawSummaryLineItems($inv);
abstract public function drawPaymentMethods($inv);
public function drawRemittenceStub() {}
public function drawCustom() {}
public function drawInvoiceDueNotice() {}
public function drawInvoicePaidNotice() {}
public function setLateFeeNotice() {}
/**
* Get a blank invoice template
*/
public function getTemplate() {
return false;
}
/**
* Assigns the invoice fields to this object.
*/
public function setInvoiceFields($flds) {
$this->invoice = $flds;
}
/**
* Assigns the account fields to this object.
*/
public function setAccountFields($flds) {
$this->account = $flds;
}
public function setItemsFull($items) {
$this->itemsFull = $items;
}
public function setItemsPrevious($items) {
$this->itemsPrevious = $items;
}
public function setDateRange($periodStart,$periodEnd) {
$this->dateRange = sprintf('%s - %s',date(UNIX_DATE_FORMAT,$periodStart),date(UNIX_DATE_FORMAT,$periodEnd));
}
public function setCurrency($currency) {
$this->invoiceCurrency = $currency;
}
public function setDecimals($decimals) {
$this->invoiceDecimals = $decimals;
}
/**
* Render an amount into a currency display
*/
protected function _currency($num) {
global $C_list;
if ($this->invoiceDecimals>3)
return $this->invoiceCurrency.number_format($num,$this->invoiceDecimals);
else
return $C_list->format_currency_num($num,$this->invoice['actual_billed_currency_id']);
}
protected function Rotate($angle,$x=-1,$y=-1) {
if ($x==-1)
$x = $this->x;
if ($y==-1)
$y = $this->y;
if ($this->angle!=0)
$this->_out('Q');
$this->angle = $angle;
if ($angle != 0) {
$angle *= M_PI/180;
$c = cos($angle);
$s = sin($angle);
$cx = $x*$this->k;
$cy = ($this->h-$y)*$this->k;
$this->_out(sprintf('q %.5f %.5f %.5f %.5f %.2f %.2f cm 1 0 0 1 %.2f %.2f cm',$c,$s,-$s,$c,$cx,$cy,-$cx,-$cy));
}
}
/**
* Add a watermark to the PDF
*/
public function addWaterMark($text) {
$this->SetFont('arial','B',50);
$this->SetTextColor(203,203,203);
$this->Rotate(0);
$this->Text(10,50,$text);
$this->Rotate(0);
$this->SetTextColor(0,0,0);
}
}
?>