2008-11-26 22:50:40 +00:00
|
|
|
<?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
|
2009-08-03 04:10:16 +00:00
|
|
|
*
|
|
|
|
* Originally authored by Tony Landis, AgileBill LLC
|
|
|
|
*
|
|
|
|
* Recent modifications by Deon George
|
|
|
|
*
|
|
|
|
* @author Deon George <deonATleenooksDOTnet>
|
|
|
|
* @copyright 2009 Deon George
|
|
|
|
* @link http://osb.leenooks.net
|
2008-11-26 22:50:40 +00:00
|
|
|
*
|
|
|
|
* @link http://www.agileco.com/
|
|
|
|
* @copyright 2004-2008 Agileco, LLC.
|
|
|
|
* @license http://www.agileco.com/agilebill/license1-4.txt
|
2009-08-03 04:10:16 +00:00
|
|
|
* @author Tony Landis <tony@agileco.com>
|
|
|
|
* @package AgileBill
|
|
|
|
* @subpackage Modules:Tax
|
|
|
|
*/
|
|
|
|
|
|
|
|
/**
|
|
|
|
* The main AgileBill Tax Class
|
|
|
|
*
|
2008-11-26 22:50:40 +00:00
|
|
|
* @package AgileBill
|
2009-08-03 04:10:16 +00:00
|
|
|
* @subpackage Modules:Tax
|
2008-11-26 22:50:40 +00:00
|
|
|
*/
|
2009-08-03 04:10:16 +00:00
|
|
|
class tax extends OSB_module {
|
2008-11-26 22:50:40 +00:00
|
|
|
/**
|
2009-08-03 04:10:16 +00:00
|
|
|
* 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())
|
2008-11-26 22:50:40 +00:00
|
|
|
return false;
|
|
|
|
|
2009-08-03 04:10:16 +00:00
|
|
|
else
|
|
|
|
while (! $result->EOF) {
|
|
|
|
array_push($arr,
|
|
|
|
array('rate'=>round($result->fields['rate']*$taxable_amount,2),
|
|
|
|
'name' => $result->fields['description'],
|
|
|
|
'id' => $result->fields['id']));
|
2008-11-26 22:50:40 +00:00
|
|
|
|
|
|
|
$result->MoveNext();
|
|
|
|
}
|
2009-08-03 04:10:16 +00:00
|
|
|
|
|
|
|
return count($arr) ? $arr : false;
|
2008-11-26 22:50:40 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2009-08-03 04:10:16 +00:00
|
|
|
* 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'])));
|
2008-11-26 22:50:40 +00:00
|
|
|
}
|
2009-08-03 04:10:16 +00:00
|
|
|
|
2008-11-26 22:50:40 +00:00
|
|
|
/**
|
2009-08-03 04:10:16 +00:00
|
|
|
* Generate the HTML for tax id collection on account creation/update form
|
2008-11-26 22:50:40 +00:00
|
|
|
*/
|
2009-08-03 04:10:16 +00:00
|
|
|
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;
|
2008-11-26 22:50:40 +00:00
|
|
|
$rs->MoveNext();
|
|
|
|
}
|
2009-08-03 04:10:16 +00:00
|
|
|
|
2008-11-26 22:50:40 +00:00
|
|
|
} else {
|
|
|
|
return false;
|
|
|
|
}
|
2009-08-03 04:10:16 +00:00
|
|
|
|
|
|
|
$ret = array();
|
|
|
|
foreach ($arr as $val)
|
|
|
|
array_push($ret,$val);
|
|
|
|
|
2008-11-26 22:50:40 +00:00
|
|
|
global $smarty;
|
2009-08-03 04:10:16 +00:00
|
|
|
$smarty->assign('tax_ids',$ret);
|
2008-11-26 22:50:40 +00:00
|
|
|
}
|
2009-08-03 04:10:16 +00:00
|
|
|
|
2008-11-26 22:50:40 +00:00
|
|
|
/**
|
|
|
|
* Validate inputted tax id on account addition/update
|
|
|
|
*/
|
2009-08-03 04:10:16 +00:00
|
|
|
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()) {
|
2008-11-26 22:50:40 +00:00
|
|
|
$this->errField = $rs->fields['tax_id_name'];
|
2009-08-03 04:10:16 +00:00
|
|
|
|
|
|
|
if (empty($tax_id))
|
|
|
|
if ($rs->fields['tax_id_exempt'] && $exempt)
|
2008-11-26 22:50:40 +00:00
|
|
|
return true;
|
|
|
|
else
|
|
|
|
return false;
|
|
|
|
|
2009-08-03 04:10:16 +00:00
|
|
|
if (! empty($rs->fields['tax_id_regex'])) {
|
|
|
|
$regex = $rs->fields['tax_id_regex'];
|
2008-11-26 22:50:40 +00:00
|
|
|
|
2009-08-03 04:10:16 +00:00
|
|
|
if (! preg_match("/$regex/",trim($tax_id)))
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
2008-11-26 22:50:40 +00:00
|
|
|
|
2009-08-03 04:10:16 +00:00
|
|
|
return true;
|
2008-11-26 22:50:40 +00:00
|
|
|
}
|
|
|
|
}
|
2009-08-03 04:10:16 +00:00
|
|
|
?>
|