Work on invoice printing - to clean up
This commit is contained in:
@@ -11,17 +11,21 @@
|
||||
* @license http://dev.leenooks.net/license.html
|
||||
*/
|
||||
class Invoice {
|
||||
// This invoice Object
|
||||
private $io;
|
||||
|
||||
public static function instance() {
|
||||
return new Invoice;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return a list of invoices for an invoice
|
||||
* Return a list of invoices for an service
|
||||
*
|
||||
* @param $id int Service ID
|
||||
* @param $paid boolean Optionally only list the ones that are not paid.
|
||||
* @return array
|
||||
*/
|
||||
// @todo Function Not Used
|
||||
public static function servicelist($id,$paid=TRUE) {
|
||||
// @todo need to add the db prefix
|
||||
$invoices = DB::Query(Database::SELECT,'
|
||||
@@ -50,6 +54,7 @@ SELECT i.id AS iid,i.due_date AS due FROM ab_invoice i,ab_invoice_item ii WHERE
|
||||
* @return real Total amount outstanding
|
||||
* @see Invoice::listservice()
|
||||
*/
|
||||
// @todo Function Not Used
|
||||
public static function servicetotal($id,$paid=TRUE) {
|
||||
$total = 0;
|
||||
|
||||
@@ -65,6 +70,7 @@ SELECT i.id AS iid,i.due_date AS due FROM ab_invoice i,ab_invoice_item ii WHERE
|
||||
* @param $id int Service ID
|
||||
* @return datetime
|
||||
*/
|
||||
// @todo Function Not Used
|
||||
public static function servicedue($id) {
|
||||
$due = 0;
|
||||
|
||||
@@ -75,18 +81,149 @@ SELECT i.id AS iid,i.due_date AS due FROM ab_invoice i,ab_invoice_item ii WHERE
|
||||
return $due;
|
||||
}
|
||||
|
||||
// @todo Function Not Used
|
||||
public static function balance($id) {
|
||||
$invoice = ORM::factory('invoice')
|
||||
->where('id','=',$id)
|
||||
->find();
|
||||
return ORM::factory('invoice',$id)->due();
|
||||
}
|
||||
|
||||
// @todo We should call check() here to re-run the validation, which re-calcs the total
|
||||
// @todo might need to cache these results for performance
|
||||
#if ($invoice->loaded() AND $invoice->check())
|
||||
if ($invoice->loaded())
|
||||
return $invoice->total_amt-$invoice->billed_amt-$invoice->credit_amt;
|
||||
else
|
||||
return 0;
|
||||
/**
|
||||
* Generate a PDF invoice
|
||||
*/
|
||||
public function pdf($io) {
|
||||
$invoice_class = sprintf('invoice_pdf_%s',Kohana::config('invoice.driver'));
|
||||
|
||||
if (! class_exists($invoice_class))
|
||||
throw new Kohana_Exception('Invoice class :class doesnt exist',array(':class'=>$invoice_class));
|
||||
|
||||
$this->io = $io;
|
||||
$pdf = new $invoice_class($io);
|
||||
|
||||
if ($pdf->getTemplate()) {
|
||||
$pagecount = $pdf->setSourceFile($pdf->getTemplate());
|
||||
$tplidx = $pdf->ImportPage(1);
|
||||
}
|
||||
|
||||
$pdf->addPage();
|
||||
|
||||
# If we are using FPDI
|
||||
if (isset($tplidx))
|
||||
$pdf->useTemplate($tplidx);
|
||||
|
||||
$this->draw_summary_invoice($pdf);
|
||||
|
||||
# If we get here, all is OK.
|
||||
return $pdf;
|
||||
}
|
||||
|
||||
private function draw_summary_invoice($pdf) {
|
||||
// Draw Invoice Basics
|
||||
$pdf->drawCompanyLogo();
|
||||
$pdf->drawCompanyAddress();
|
||||
$pdf->drawInvoiceHeader();
|
||||
// @todo Get news from DB
|
||||
$pdf->drawNews('');
|
||||
$pdf->drawRemittenceStub();
|
||||
$pdf->drawPaymentMethods();
|
||||
|
||||
if ($this->io->billing_status !=1 && $this->io->suspend_billing != 1 && $this->io->due_date <= time())
|
||||
$pdf->drawInvoiceDueNotice();
|
||||
elseif($this->io->billing_status == 1)
|
||||
$pdf->drawInvoicePaidNotice();
|
||||
|
||||
if ($this->io->account->invoices_due_total())
|
||||
$pdf->drawSummaryInvoicesDue();
|
||||
|
||||
$pdf->drawSummaryLineItems();
|
||||
return;
|
||||
#unset($pdf->itemsSummary);
|
||||
|
||||
# BEGIN loop for enumerating information in multiple ways on the invoice
|
||||
$iteration = 0;
|
||||
while ($pdf->drawLineItems_pre($iteration)) {
|
||||
foreach ($this->sInvoiceItems() as $index => $items) {
|
||||
# Get the date range if set
|
||||
if (! empty($items['date_start']) && ! empty($items['date_stop'])) {
|
||||
global $C_translate;
|
||||
$C_translate->value('invoice','start',date(UNIX_DATE_FORMAT,$items['date_start']));
|
||||
$C_translate->value('invoice','stop',date(UNIX_DATE_FORMAT,$items['date_stop']));
|
||||
}
|
||||
|
||||
$line = array(
|
||||
'name'=>$this->sLineItemDesc($index),
|
||||
'domain'=>$items['domain_name'],
|
||||
'amount'=>$items['price_base'],
|
||||
'sku'=>$items['sku'],
|
||||
'qty'=>$items['quantity'],
|
||||
'cost'=>$items['price_base'],
|
||||
'attr'=>$items['product_attr'],
|
||||
'price_type'=>$items['price_type'],
|
||||
'price_base'=>$items['price_base'],
|
||||
'item_type'=>$items['item_type'],
|
||||
'total_amt'=>$items['total_amt']
|
||||
);
|
||||
|
||||
if ($items['date_start'] && $items['date_stop'])
|
||||
if ($items['date_start'] == $items['date_stop'])
|
||||
$line['daterange'] = sprintf('%s',date(UNIX_DATE_FORMAT,$items['date_start']));
|
||||
else
|
||||
$line['daterange'] = sprintf('%s - %s',date(UNIX_DATE_FORMAT,$items['date_start']),date(UNIX_DATE_FORMAT,$items['date_stop']));
|
||||
|
||||
$pdf->drawLineItems($db,$line,$this->getRecordAttr('id'));
|
||||
|
||||
if ($items['price_setup']) {
|
||||
$line = array(
|
||||
'name'=>sprintf('%s - %s',$this->sLineItemDesc($index),_('Setup Charge')),
|
||||
'amount'=>$items['price_setup'],
|
||||
'qty'=>'1',
|
||||
'sku'=>$items['sku'],
|
||||
'cost'=>$items['price_setup'],
|
||||
'price_base'=>$items['price_setup'],
|
||||
'price_type'=>999
|
||||
);
|
||||
|
||||
$pdf->drawLineItems($db,$line,$this->getRecordAttr('id'));
|
||||
}
|
||||
}
|
||||
|
||||
if ($this->print['invoice']['discount_amt']) {
|
||||
$line = array(
|
||||
'name'=>_('Discount'),
|
||||
'amount'=>-($this->print['invoice']['discount_amt']),
|
||||
'qty'=>'1',
|
||||
'cost'=>-($this->print['invoice']['discount_amt']),
|
||||
'price_base'=>-($this->print['invoice']['discount_amt']),
|
||||
'price_type'=>999);
|
||||
|
||||
$pdf->drawLineItems($db,$line,$this->getRecordAttr('id'));
|
||||
}
|
||||
|
||||
if ($this->print['invoice']['tax_amt']) {
|
||||
$rs = $db->Execute(sqlSelect($db,array('invoice_item_tax','tax'),'A.amount,B.description',sprintf('A.tax_id=B.id AND A.invoice_id=%s',$this->getRecordAttr('id'))));
|
||||
if ($rs && $rs->RecordCount()) {
|
||||
$taxes = array();
|
||||
|
||||
while (! $rs->EOF) {
|
||||
if (! isset($taxes[$rs->fields['description']]))
|
||||
$taxes[$rs->fields['description']] = $rs->fields['amount'];
|
||||
else
|
||||
$taxes[$rs->fields['description']] += $rs->fields['amount'];
|
||||
|
||||
$rs->MoveNext();
|
||||
}
|
||||
|
||||
foreach ($taxes as $txds => $txamt) {
|
||||
$line = array('name'=>$txds,'amount'=>$txamt,'total_amt'=>$txamt,'price_type'=>999);
|
||||
$pdf->drawLineItems($db,$line,$this->getRecordAttr('id'));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# Increment the iteration
|
||||
++$iteration;
|
||||
}
|
||||
|
||||
# Custom functions:
|
||||
$pdf->drawCustom();
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
Reference in New Issue
Block a user