array(), 'invoice'=>array(), 'service'=>array() ); protected $_has_many = array( 'invoice_item_tax'=>array('far_key'=>'id') ); protected $_updated_column = FALSE; // @todo No update columns // Display a transaction number public function trannum() { return sprintf('%03s-%06s',$this->item_type,$this->id); } // Display the period that a transaction applies public function period() { if ($this->date_start == $this->date_stop) return sprintf('%s: %s',_('Date'),Config::date($this->date_start)); else return sprintf('%s: %s -> %s',_('Period'),Config::date($this->date_start),Config::date($this->date_stop)); } /** * On invoices where there are multiple charges for the same item * (eg spanning the next invoice period), this should show the period * range for the additional sub-items. */ public function invoice_display() { return $this->period(); } public function subtotal() { return ($this->price_base+$this->price_setup)*$this->quantity; } public function total() { return ($this->price_base+$this->price_setup)*$this->quantity+$this->tax_amt-$this->discount_amt; } public function save(Validation $validation = NULL) { // Save the invoice item parent::save(); // Need to save the taxes and discounts associated with the invoice_item if ($this->saved()) { $invoice_item_tax = ORM::factory('invoice_item_tax'); $tax_total = 0; // Save TAX details // @todo tax parameters should come from user session foreach (Tax::detail(61,NULL,$this->subtotal()) as $tax) { $invoice_item_tax->clear(); $invoice_item_tax->invoice_item_id = $this->id; // @todo Rounding here should come from a global config $tax_total += ($invoice_item_tax->amount = round($tax['amount'],2)); $invoice_item_tax->tax_id = $tax['id']; if (! $invoice_item_tax->check()) throw new Kohana_Exception('Couldnt save tax for some reason - failed check()?'); $invoice_item_tax->save(); if (! $invoice_item_tax->saved()) throw new Kohana_Exception('Couldnt save tax for some reason - failed save()?'); } // Save DISCOUNT details // @todo calculate discounts $this->tax_amt = $tax_total; $this->total_amt = $this->total(); parent::save(); } else throw new Kohana_Exception('Couldnt save invoice_item for some reason?'); } } ?>