io = $io; } public static function instance($io) { return new Invoice($io); } /** * 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,' SELECT i.id AS iid,i.due_date AS due FROM ab_invoice i,ab_invoice_item ii WHERE ii.invoice_id=i.id AND service_id=:id GROUP BY i.id ') ->param(':id',$id) ->execute(); $service_invoices = array(); foreach ($invoices as $item) { if ($bal = Invoice::balance($item['iid']) OR $paid) { $service_invoices[$item['iid']]['id'] = $item['iid']; $service_invoices[$item['iid']]['total'] = $bal; $service_invoices[$item['iid']]['due'] = $item['due']; } } return $service_invoices; } /** * Return the total of amount outstanding for a service * * @param $id int Service ID * @param $paid boolean Optionally only list the ones that are not paid. * @return real Total amount outstanding * @see Invoice::listservice() */ // @todo Function Not Used public static function servicetotal($id,$paid=TRUE) { $total = 0; foreach (Invoice::servicelist($id,$paid) as $item) $total += $item['total']; return $total; } /** * Return the earliest due date of an outstanding invoice * * @param $id int Service ID * @return datetime */ // @todo Function Not Used public static function servicedue($id) { $due = 0; foreach (Invoice::servicelist($id,FALSE) as $item) if ($due < $item['due']) $due = $item['due']; return $due; } // @todo Function Not Used public static function balance($id) { return ORM::factory('Invoice',$id)->due(); } /** * Generate a PDF invoice */ public function pdf() { $invoice_class = sprintf('Invoice_TCPDF_%s',ucfirst(Kohana::$config->load('invoice')->driver)); $pdf = new $invoice_class($this->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->due_date <= time()) $pdf->drawInvoiceDueNotice(); elseif($this->io->billing_status == 1) $pdf->drawInvoicePaidNotice(); if ($this->io->account->invoices_due_total()) $pdf->drawSummaryInvoicesDue(); $pdf->drawSummaryLineItems(); // Next Page $pdf->drawDetailLineItems(); // Draw any Custom functions: $pdf->drawCustom(); } } ?>