mirror of
https://github.com/opensourcepos/opensourcepos.git
synced 2026-01-04 23:47:52 -05:00
528 lines
16 KiB
PHP
528 lines
16 KiB
PHP
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
|
|
|
|
require_once("Secure_Controller.php");
|
|
|
|
class Taxes extends Secure_Controller
|
|
{
|
|
public function __construct()
|
|
{
|
|
parent::__construct('taxes');
|
|
|
|
$this->load->model('enums/Rounding_mode');
|
|
$this->load->library('tax_lib');
|
|
$this->load->helper('tax_helper');
|
|
}
|
|
|
|
public function index()
|
|
{
|
|
$data['tax_codes'] = $this->xss_clean($this->Tax_code->get_all()->result_array());
|
|
if (count($data['tax_codes']) == 0)
|
|
{
|
|
$data['tax_codes'] = $this->Tax_code->get_empty_row();
|
|
}
|
|
$data['tax_categories'] = $this->xss_clean($this->Tax_category->get_all()->result_array());
|
|
if (count($data['tax_categories']) == 0)
|
|
{
|
|
$data['tax_categories'] = $this->Tax_category->get_empty_row();
|
|
}
|
|
$data['tax_jurisdictions'] = $this->xss_clean($this->Tax_jurisdiction->get_all()->result_array());
|
|
if (count($data['tax_jurisdictions']) == 0)
|
|
{
|
|
$data['tax_jurisdictions'] = $this->Tax_jurisdiction->get_empty_row();
|
|
}
|
|
$data['tax_rate_table_headers'] = $this->xss_clean(get_tax_rates_manage_table_headers());
|
|
$data['tax_categories_table_headers'] = $this->xss_clean(get_tax_categories_table_headers());
|
|
$data['tax_types'] = $this->tax_lib->get_tax_types();
|
|
|
|
if($this->config->item('tax_included') == '1')
|
|
{
|
|
$data['default_tax_type'] = Tax_lib::TAX_TYPE_INCLUDED;
|
|
}
|
|
else
|
|
{
|
|
$data['default_tax_type'] = Tax_lib::TAX_TYPE_EXCLUDED;
|
|
}
|
|
|
|
$data['tax_type_options'] = $this->tax_lib->get_tax_type_options($data['default_tax_type']);
|
|
|
|
$this->load->view('taxes/manage', $data);
|
|
}
|
|
|
|
|
|
/*
|
|
Returns tax_codes table data rows. This will be called with AJAX.
|
|
*/
|
|
public function search()
|
|
{
|
|
$search = $this->input->get('search');
|
|
$limit = $this->input->get('limit');
|
|
$offset = $this->input->get('offset');
|
|
$sort = $this->input->get('sort');
|
|
$order = $this->input->get('order');
|
|
|
|
$tax_rates = $this->Tax->search($search, $limit, $offset, $sort, $order);
|
|
|
|
$total_rows = $this->Tax->get_found_rows($search);
|
|
|
|
$data_rows = array();
|
|
foreach($tax_rates->result() as $tax_rate_row)
|
|
{
|
|
$data_rows[] = $this->xss_clean(get_tax_rates_data_row($tax_rate_row));
|
|
}
|
|
|
|
echo json_encode(array('total' => $total_rows, 'rows' => $data_rows));
|
|
}
|
|
|
|
/*
|
|
Gives search suggestions based on what is being searched for
|
|
*/
|
|
public function suggest_search()
|
|
{
|
|
$suggestions = $this->xss_clean($this->Tax->get_search_suggestions($this->input->post('term')));
|
|
|
|
echo json_encode($suggestions);
|
|
}
|
|
|
|
/*
|
|
Provides list of tax categories to select from
|
|
*/
|
|
public function suggest_tax_categories()
|
|
{
|
|
$suggestions = $this->xss_clean($this->Tax_category->get_tax_category_suggestions($this->input->post('term')));
|
|
|
|
echo json_encode($suggestions);
|
|
}
|
|
|
|
|
|
public function get_row($row_id)
|
|
{
|
|
$data_row = $this->xss_clean(get_tax_rates_data_row($this->Tax->get_info($row_id), $this));
|
|
|
|
echo json_encode($data_row);
|
|
}
|
|
|
|
public function view_tax_codes($tax_code = -1)
|
|
{
|
|
$tax_code_info = $this->Tax->get_info($tax_code);
|
|
|
|
$default_tax_category_id = 1; // Tax category id is always the default tax category
|
|
$default_tax_category = $this->Tax->get_tax_category($default_tax_category_id);
|
|
|
|
$tax_rate_info = $this->Tax->get_rate_info($tax_code, $default_tax_category_id);
|
|
|
|
if($this->config->item('tax_included') == '1')
|
|
{
|
|
$data['default_tax_type'] = Tax_lib::TAX_TYPE_INCLUDED;
|
|
}
|
|
else
|
|
{
|
|
$data['default_tax_type'] = Tax_lib::TAX_TYPE_EXCLUDED;
|
|
}
|
|
|
|
$data['rounding_options'] = Rounding_mode::get_rounding_options();
|
|
$data['html_rounding_options'] = $this->get_html_rounding_options();
|
|
|
|
if($tax_code == -1)
|
|
{
|
|
$data['tax_code'] = '';
|
|
$data['tax_code_name'] = '';
|
|
$data['tax_code_type'] = '0';
|
|
$data['city'] = '';
|
|
$data['state'] = '';
|
|
$data['tax_rate'] = '0.0000';
|
|
$data['rate_tax_code'] = '';
|
|
$data['rate_tax_category_id'] = 1;
|
|
$data['tax_category'] = '';
|
|
$data['add_tax_category'] = '';
|
|
$data['rounding_code'] = '0';
|
|
}
|
|
else
|
|
{
|
|
$data['tax_code'] = $tax_code;
|
|
$data['tax_code_name'] = $tax_code_info->tax_code_name;
|
|
$data['tax_code_type'] = $tax_code_info->tax_code_type;
|
|
$data['city'] = $tax_code_info->city;
|
|
$data['state'] = $tax_code_info->state;
|
|
$data['rate_tax_code'] = $tax_code_info->rate_tax_code;
|
|
$data['rate_tax_category_id'] = $tax_code_info->rate_tax_category_id;
|
|
$data['tax_category'] = $tax_code_info->tax_category;
|
|
$data['add_tax_category'] = '';
|
|
$data['tax_rate'] = $tax_rate_info->tax_rate;
|
|
$data['rounding_code'] = $tax_rate_info->rounding_code;
|
|
}
|
|
|
|
$data = $this->xss_clean($data);
|
|
|
|
$tax_rates = array();
|
|
foreach($this->Tax->get_tax_code_rate_exceptions($tax_code) as $tax_code_rate)
|
|
{
|
|
$tax_rate_row = array();
|
|
$tax_rate_row['rate_tax_category_id'] = $this->xss_clean($tax_code_rate['rate_tax_category_id']);
|
|
$tax_rate_row['tax_category'] = $this->xss_clean($tax_code_rate['tax_category']);
|
|
$tax_rate_row['tax_rate'] = $this->xss_clean($tax_code_rate['tax_rate']);
|
|
$tax_rate_row['rounding_code'] = $this->xss_clean($tax_code_rate['rounding_code']);
|
|
|
|
$tax_rates[] = $tax_rate_row;
|
|
}
|
|
|
|
$data['tax_rates'] = $tax_rates;
|
|
|
|
$this->load->view('taxes/tax_code_form', $data);
|
|
}
|
|
|
|
|
|
public function view($tax_rate_id = -1)
|
|
{
|
|
|
|
$tax_rate_info = $this->Tax->get_info($tax_rate_id);
|
|
|
|
$data['tax_rate_id'] = $tax_rate_id;
|
|
$data['rounding_options'] = Rounding_mode::get_rounding_options();
|
|
|
|
$data['tax_code_options'] = $this->tax_lib->get_tax_code_options();
|
|
$data['tax_category_options'] = $this->tax_lib->get_tax_category_options();
|
|
$data['tax_jurisdiction_options'] = $this->tax_lib->get_tax_jurisdiction_options();
|
|
|
|
if($tax_rate_id == -1)
|
|
{
|
|
$data['rate_tax_code_id'] = $this->config->item('default_tax_code');
|
|
$data['rate_tax_category_id'] = $this->config->item('default_tax_category');
|
|
$data['rate_jurisdiction_id'] = $this->config->item('default_tax_jurisdiction');
|
|
$data['tax_rounding_code'] = Rounding_mode::HALF_UP;
|
|
$data['tax_rate'] = '0.0000';
|
|
}
|
|
else
|
|
{
|
|
$data['rate_tax_code_id'] = $tax_rate_info->rate_tax_code_id;
|
|
$data['rate_tax_code'] = $tax_rate_info->tax_code;
|
|
$data['rate_tax_category_id'] = $tax_rate_info->rate_tax_category_id;
|
|
$data['rate_jurisdiction_id'] = $tax_rate_info->rate_jurisdiction_id;
|
|
$data['tax_rounding_code'] = $tax_rate_info->tax_rounding_code;
|
|
$data['tax_rate'] = $tax_rate_info->tax_rate;
|
|
}
|
|
|
|
$data = $this->xss_clean($data);
|
|
|
|
$this->load->view('taxes/tax_rates_form', $data);
|
|
}
|
|
|
|
|
|
|
|
public function view_tax_categories($tax_code = -1)
|
|
{
|
|
$tax_code_info = $this->Tax->get_info($tax_code);
|
|
|
|
$default_tax_category_id = 1; // Tax category id is always the default tax category
|
|
$default_tax_category = $this->Tax->get_tax_category($default_tax_category_id);
|
|
|
|
$tax_rate_info = $this->Tax->get_rate_info($tax_code, $default_tax_category_id);
|
|
|
|
$data['rounding_options'] = Rounding_mode::get_rounding_options();
|
|
$data['html_rounding_options'] = $this->get_html_rounding_options();
|
|
|
|
if($this->config->item('tax_included') == '1')
|
|
{
|
|
$data['default_tax_type'] = Tax_lib::TAX_TYPE_INCLUDED;
|
|
}
|
|
else
|
|
{
|
|
$data['default_tax_type'] = Tax_lib::TAX_TYPE_EXCLUDED;
|
|
}
|
|
|
|
if($tax_code == -1)
|
|
{
|
|
$data['tax_code'] = '';
|
|
$data['tax_code_name'] = '';
|
|
$data['tax_code_type'] = '0';
|
|
$data['city'] = '';
|
|
$data['state'] = '';
|
|
$data['tax_rate'] = '0.0000';
|
|
$data['rate_tax_code'] = '';
|
|
$data['rate_tax_category_id'] = 1;
|
|
$data['tax_category'] = '';
|
|
$data['add_tax_category'] = '';
|
|
$data['rounding_code'] = '0';
|
|
}
|
|
else
|
|
{
|
|
$data['tax_code'] = $tax_code;
|
|
$data['tax_code_name'] = $tax_code_info->tax_code_name;
|
|
$data['tax_code_type'] = $tax_code_info->tax_code_type;
|
|
$data['city'] = $tax_code_info->city;
|
|
$data['state'] = $tax_code_info->state;
|
|
$data['rate_tax_code'] = $tax_code_info->rate_tax_code;
|
|
$data['rate_tax_category_id'] = $tax_code_info->rate_tax_category_id;
|
|
$data['tax_category'] = $tax_code_info->tax_category;
|
|
$data['add_tax_category'] = '';
|
|
$data['tax_rate'] = $tax_rate_info->tax_rate;
|
|
$data['rounding_code'] = $tax_rate_info->rounding_code;
|
|
}
|
|
|
|
$data = $this->xss_clean($data);
|
|
|
|
$tax_rates = array();
|
|
foreach($this->Tax->get_tax_code_rate_exceptions($tax_code) as $tax_code_rate)
|
|
{
|
|
$tax_rate_row = array();
|
|
$tax_rate_row['rate_tax_category_id'] = $this->xss_clean($tax_code_rate['rate_tax_category_id']);
|
|
$tax_rate_row['tax_category'] = $this->xss_clean($tax_code_rate['tax_category']);
|
|
$tax_rate_row['tax_rate'] = $this->xss_clean($tax_code_rate['tax_rate']);
|
|
$tax_rate_row['rounding_code'] = $this->xss_clean($tax_code_rate['rounding_code']);
|
|
|
|
$tax_rates[] = $tax_rate_row;
|
|
}
|
|
|
|
$data['tax_rates'] = $tax_rates;
|
|
|
|
$this->load->view('taxes/tax_category_form', $data);
|
|
}
|
|
|
|
public function view_tax_jurisdictions($tax_code = -1)
|
|
{
|
|
$tax_code_info = $this->Tax->get_info($tax_code);
|
|
|
|
$default_tax_category_id = 1; // Tax category id is always the default tax category
|
|
$default_tax_category = $this->Tax->get_tax_category($default_tax_category_id);
|
|
|
|
$tax_rate_info = $this->Tax->get_rate_info($tax_code, $default_tax_category_id);
|
|
|
|
$data['rounding_options'] = Rounding_mode::get_rounding_options();
|
|
$data['html_rounding_options'] = $this->get_html_rounding_options();
|
|
|
|
if($this->config->item('tax_included') == '1')
|
|
{
|
|
$data['default_tax_type'] = Tax_lib::TAX_TYPE_INCLUDED;
|
|
}
|
|
else
|
|
{
|
|
$data['default_tax_type'] = Tax_lib::TAX_TYPE_EXCLUDED;
|
|
}
|
|
|
|
if($tax_code == -1)
|
|
{
|
|
$data['tax_code'] = '';
|
|
$data['tax_code_name'] = '';
|
|
$data['tax_code_type'] = '0';
|
|
$data['city'] = '';
|
|
$data['state'] = '';
|
|
$data['tax_rate'] = '0.0000';
|
|
$data['rate_tax_code'] = '';
|
|
$data['rate_tax_category_id'] = 1;
|
|
$data['tax_category'] = '';
|
|
$data['add_tax_category'] = '';
|
|
$data['rounding_code'] = '0';
|
|
}
|
|
else
|
|
{
|
|
$data['tax_code'] = $tax_code;
|
|
$data['tax_code_name'] = $tax_code_info->tax_code_name;
|
|
$data['tax_code_type'] = $tax_code_info->tax_code_type;
|
|
$data['city'] = $tax_code_info->city;
|
|
$data['state'] = $tax_code_info->state;
|
|
$data['rate_tax_code'] = $tax_code_info->rate_tax_code;
|
|
$data['rate_tax_category_id'] = $tax_code_info->rate_tax_category_id;
|
|
$data['tax_category'] = $tax_code_info->tax_category;
|
|
$data['add_tax_category'] = '';
|
|
$data['tax_rate'] = $tax_rate_info->tax_rate;
|
|
$data['rounding_code'] = $tax_rate_info->rounding_code;
|
|
}
|
|
|
|
$data = $this->xss_clean($data);
|
|
|
|
$tax_rates = array();
|
|
foreach($this->Tax->get_tax_code_rate_exceptions($tax_code) as $tax_code_rate)
|
|
{
|
|
$tax_rate_row = array();
|
|
$tax_rate_row['rate_tax_category_id'] = $this->xss_clean($tax_code_rate['rate_tax_category_id']);
|
|
$tax_rate_row['tax_category'] = $this->xss_clean($tax_code_rate['tax_category']);
|
|
$tax_rate_row['tax_rate'] = $this->xss_clean($tax_code_rate['tax_rate']);
|
|
$tax_rate_row['rounding_code'] = $this->xss_clean($tax_code_rate['rounding_code']);
|
|
|
|
$tax_rates[] = $tax_rate_row;
|
|
}
|
|
|
|
$data['tax_rates'] = $tax_rates;
|
|
|
|
$this->load->view('taxes/tax_jurisdiction_form', $data);
|
|
}
|
|
|
|
public static function get_html_rounding_options()
|
|
{
|
|
return Rounding_mode::get_html_rounding_options();
|
|
}
|
|
|
|
public function save($tax_rate_id = -1)
|
|
{
|
|
$tax_category_id = $this->input->post('rate_tax_category_id');
|
|
$tax_rate = parse_decimals($this->input->post('tax_rate'));
|
|
|
|
if ($tax_rate == 0) {
|
|
$tax_category_info = $this->Tax_category->get_info($tax_category_id);
|
|
}
|
|
|
|
$tax_rate_data = array(
|
|
'rate_tax_code_id' => $this->input->post('rate_tax_code_id'),
|
|
'rate_tax_category_id' => $this->input->post('rate_tax_category_id'),
|
|
'rate_jurisdiction_id' => $this->input->post('rate_jurisdiction_id'),
|
|
'tax_rate' => $tax_rate,
|
|
'tax_rounding_code' => $this->input->post('tax_rounding_code')
|
|
);
|
|
|
|
if($this->Tax->save($tax_rate_data, $tax_rate_id))
|
|
{
|
|
if($tax_rate_id == -1)
|
|
{
|
|
echo json_encode(array('success' => TRUE, 'message' => $this->lang->line('taxes_tax_rate_successfully_added')));
|
|
}
|
|
else //Existing tax_code
|
|
{
|
|
echo json_encode(array('success' => TRUE, 'message' => $this->lang->line('taxes_tax_rate_successful_updated')));
|
|
}
|
|
}
|
|
else
|
|
{
|
|
echo json_encode(array('success' => FALSE, 'message' => $this->lang->line('taxes_tax_rate_error_adding_updating')));
|
|
}
|
|
}
|
|
|
|
public function delete()
|
|
{
|
|
$tax_codes_to_delete = $this->xss_clean($this->input->post('ids'));
|
|
|
|
if($this->Tax->delete_list($tax_codes_to_delete))
|
|
{
|
|
echo json_encode(array('success' => TRUE, 'message' => $this->lang->line('taxes_tax_code_successful_deleted')));
|
|
} else
|
|
{
|
|
echo json_encode(array('success' => FALSE, 'message' => $this->lang->line('taxes_tax_code_cannot_be_deleted')));
|
|
}
|
|
}
|
|
|
|
public function suggest_tax_codes()
|
|
{
|
|
$suggestions = $this->xss_clean($this->Tax_code->get_tax_codes_search_suggestions($this->input->post_get('term')));
|
|
|
|
echo json_encode($suggestions);
|
|
}
|
|
|
|
|
|
public function save_tax_codes()
|
|
{
|
|
$tax_code_id = $this->input->post('tax_code_id');
|
|
$tax_code = $this->input->post('tax_code');
|
|
$tax_code_name = $this->input->post('tax_code_name');
|
|
$tax_code_id = $this->input->post('tax_code_id');
|
|
$city = $this->input->post('city');
|
|
$state = $this->input->post('state');
|
|
|
|
$array_save = array();
|
|
foreach($tax_code_id as $key=>$val)
|
|
{
|
|
$array_save[] = array('tax_code_id'=>$this->xss_clean($val), 'tax_code'=>$this->xss_clean($tax_code[$key]),
|
|
'tax_code_name'=>$this->xss_clean($tax_code_name[$key]), 'tax_code_id'=>$this->xss_clean($tax_code_id[$key]),
|
|
'city'=>$this->xss_clean($city[$key]), 'state'=>$this->xss_clean($state[$key]));
|
|
}
|
|
|
|
$success = $this->Tax_code->save_tax_codes($array_save);
|
|
|
|
echo json_encode(array(
|
|
'success' => $success,
|
|
'message' => $this->lang->line('taxes_tax_codes_saved_' . ($success ? '' : 'un') . 'successfully')
|
|
));
|
|
}
|
|
|
|
public function save_tax_jurisdictions()
|
|
{
|
|
$jurisdiction_id = $this->input->post('jurisdiction_id');
|
|
$jurisdiction_name = $this->input->post('jurisdiction_name');
|
|
$tax_group = $this->input->post('tax_group');
|
|
$tax_type = $this->input->post('tax_type');
|
|
$reporting_authority = $this->input->post('reporting_authority');
|
|
$tax_group_sequence = $this->input->post('tax_group_sequence');
|
|
$cascade_sequence = $this->input->post('cascade_sequence');
|
|
|
|
$array_save = array();
|
|
|
|
foreach($jurisdiction_id as $key => $val)
|
|
{
|
|
$array_save[] = array(
|
|
'jurisdiction_id'=>$this->xss_clean($val),
|
|
'jurisdiction_name'=>$this->xss_clean($jurisdiction_name[$key]),
|
|
'tax_group'=>$this->xss_clean($tax_group[$key]),
|
|
'tax_type'=>$this->xss_clean($tax_type[$key]),
|
|
'reporting_authority'=>$this->xss_clean($reporting_authority[$key]),
|
|
'tax_group_sequence'=>$this->xss_clean($tax_group_sequence[$key]),
|
|
'cascade_sequence'=>$this->xss_clean($cascade_sequence[$key]));
|
|
}
|
|
|
|
$success = $this->Tax_jurisdiction->save_jurisdictions($array_save);
|
|
|
|
echo json_encode(array(
|
|
'success' => $success,
|
|
'message' => $this->lang->line('taxes_tax_jurisdictions_saved_' . ($success ? '' : 'un') . 'successfully')
|
|
));
|
|
}
|
|
|
|
public function save_tax_categories()
|
|
{
|
|
$tax_category_id = $this->input->post('tax_category_id');
|
|
$tax_category = $this->input->post('tax_category');
|
|
$tax_group_sequence = $this->input->post('tax_group_sequence');
|
|
|
|
$array_save= array();
|
|
|
|
foreach($tax_category_id as $key => $val)
|
|
{
|
|
$array_save[] = array(
|
|
'tax_category_id'=>$this->xss_clean($val),
|
|
'tax_category'=>$this->xss_clean($tax_category[$key]),
|
|
'tax_group_sequence'=>$this->xss_clean($tax_group_sequence[$key]));
|
|
}
|
|
|
|
$success = $this->Tax_category->save_categories($array_save);
|
|
|
|
echo json_encode(array(
|
|
'success' => $success,
|
|
'message' => $this->lang->line('taxes_tax_categories_saved_' . ($success ? '' : 'un') . 'successfully')
|
|
));
|
|
}
|
|
|
|
public function ajax_tax_codes()
|
|
{
|
|
$tax_codes = $this->Tax_code->get_all()->result_array();
|
|
|
|
$tax_codes = $this->xss_clean($tax_codes);
|
|
|
|
$this->load->view('partial/tax_codes', array('tax_codes' => $tax_codes));
|
|
}
|
|
|
|
public function ajax_tax_categories()
|
|
{
|
|
$tax_categories = $this->Tax_category->get_all()->result_array();
|
|
|
|
$tax_categories = $this->xss_clean($tax_categories);
|
|
|
|
$this->load->view('partial/tax_categories', array('tax_categories' => $tax_categories));
|
|
}
|
|
|
|
public function ajax_tax_jurisdictions()
|
|
{
|
|
$tax_jurisdictions = $this->Tax_jurisdiction->get_all()->result_array();
|
|
|
|
if($this->config->item('tax_included') == '1')
|
|
{
|
|
$default_tax_type = Tax_lib::TAX_TYPE_INCLUDED;
|
|
}
|
|
else
|
|
{
|
|
$default_tax_type = Tax_lib::TAX_TYPE_EXCLUDED;
|
|
}
|
|
|
|
$tax_jurisdictions = $this->xss_clean($tax_jurisdictions);
|
|
$tax_types = $this->tax_lib->get_tax_types();
|
|
|
|
$this->load->view('partial/tax_jurisdictions', array('tax_jurisdictions' => $tax_jurisdictions, 'tax_types' => $tax_types, 'default_tax_type' => $default_tax_type));
|
|
}
|
|
}
|
|
?>
|