* @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 * @package AgileBill * @subpackage Modules:Tax */ /** * The main AgileBill Tax Class * * @package AgileBill * @subpackage Modules:Tax */ class tax extends OSB_module { /** * Calculate all applicable taxes for a given product * @return Array */ public function calculate($taxable_amount,$country_id,$zone) { $db = &DB(); $arr = array(); $result = $db->Execute( sqlSelect($db,'tax','id,description,rate', sprintf("(zone='' OR zone IS NULL OR zone=::*:: OR zone=::%s::) AND (country_id=::%s:: OR country_id='' OR country_id IS NULL)",$zone,$country_id), 'zone')); if (! $result || ! $result->RecordCount()) return false; else while (! $result->EOF) { array_push($arr, array('rate'=>round($result->fields['rate']*$taxable_amount,2), 'name' => $result->fields['description'], 'id' => $result->fields['id'])); $result->MoveNext(); } return count($arr) ? $arr : false; } /** * Insert invoice_item_tax Records */ public function invoice_item($invoice_id,$invoice_item_id,$account_id,$tax_arr) { $db = &DB(); if (! is_array($tax_arr)) return false; foreach ($tax_arr as $tax) $db->Execute(sqlInsert($db,'invoice_item_tax',array('date_orig'=>time(),'invoice_id'=>$invoice_id,'invoice_item_id'=>$invoice_item_id,'account_id'=>$account_id,'tax_id'=>$tax['id'],'amount'=>$tax['rate']))); } /** * Generate the HTML for tax id collection on account creation/update form */ public function get_tax_ids() { $db = &DB(); $rs = $db->Execute(sqlSelect($db,'tax','*',array('tax_id_collect'=>1,'zone'=>'*'))); if ($rs && $rs->RecordCount()) { while (! $rs->EOF) { $arr[$rs->fields['tax_id_name']] = $rs->fields; $rs->MoveNext(); } } else { return false; } $ret = array(); foreach ($arr as $val) array_push($ret,$val); global $smarty; $smarty->assign('tax_ids',$ret); } /** * Validate inputted tax id on account addition/update */ function TaxIdsValidate($country_id, $tax_id, $exempt=false) { $db = &DB(); $rs = $db->Execute(sqlSelect($db,'tax','*',array('country_id'=>$country_id,'zone'=>'*','tax_id_collect'=>1,'tax_id_req'=>1))); if ($rs && $rs->RecordCount()) { $this->errField = $rs->fields['tax_id_name']; if (empty($tax_id)) if ($rs->fields['tax_id_exempt'] && $exempt) return true; else return false; if (! empty($rs->fields['tax_id_regex'])) { $regex = $rs->fields['tax_id_regex']; if (! preg_match("/$regex/",trim($tax_id))) return false; } } return true; } } ?>