Fix included destination tax

This commit is contained in:
SteveIreland
2020-04-04 11:42:39 -04:00
parent be44fb2aa7
commit 6d91ae3845
4 changed files with 58 additions and 56 deletions

View File

@@ -472,29 +472,27 @@ class Sale_lib
$prediscount_subtotal= bcadd($prediscount_subtotal, $extended_amount);
$total = bcadd($total, $extended_discounted_amount);
if($this->CI->config->item('tax_included'))
{
$subtotal = bcadd($subtotal, $this->get_extended_total_tax_exclusive($item['item_id'], $extended_discounted_amount, $item['quantity'], $item['price'], $item['discount'],$item['discount_type']));
}
else
{
$subtotal = bcadd($subtotal, $extended_discounted_amount);
}
$subtotal = bcadd($subtotal, $extended_discounted_amount);
}
$totals['prediscount_subtotal'] = $prediscount_subtotal;
$totals['total_discount'] = $total_discount;
$totals['subtotal'] = $subtotal;
$sales_tax = 0;
foreach($taxes as $tax_excluded)
foreach($taxes as $tax)
{
if($tax_excluded['tax_type'] == Tax_lib::TAX_TYPE_EXCLUDED)
if($tax['tax_type'] === Tax_lib::TAX_TYPE_EXCLUDED)
{
$total = bcadd($total, $tax_excluded['sale_tax_amount']);
$sales_tax = bcadd($sales_tax, $tax_excluded['sale_tax_amount']);
$total = bcadd($total, $tax['sale_tax_amount']);
$sales_tax = bcadd($sales_tax, $tax['sale_tax_amount']);
}
else
{
$subtotal = bcsub($subtotal, $tax['sale_tax_amount']);
}
}
$totals['subtotal'] = $subtotal;
$totals['total'] = $total;
$totals['tax_total'] = $sales_tax;
@@ -1215,19 +1213,19 @@ class Sale_lib
public function get_item_tax($quantity, $price, $discount, $discount_type, $tax_percentage)
{
$price = $this->get_item_total($quantity, $price, $discount, $discount_type, TRUE);
$item_total = $this->get_item_total($quantity, $price, $discount, $discount_type, TRUE);
if($this->CI->config->item('tax_included'))
{
$tax_fraction = bcdiv(bcadd(100, $tax_percentage), 100);
$price_tax_excl = bcdiv($price, $tax_fraction);
$price_tax_excl = bcdiv($item_total, $tax_fraction);
return bcsub($price, $price_tax_excl);
return bcsub($item_total, $price_tax_excl);
}
$tax_fraction = bcdiv($tax_percentage, 100);
return bcmul($price, $tax_fraction);
return bcmul($item_total, $tax_fraction);
}
public function calculate_subtotal($include_discount = FALSE, $exclude_tax = FALSE)

View File

@@ -8,8 +8,8 @@
class Tax_lib
{
const TAX_TYPE_EXCLUDED = 1;
const TAX_TYPE_INCLUDED = 0;
const TAX_TYPE_EXCLUDED = '1';
const TAX_TYPE_INCLUDED = '0';
private $CI;
@@ -150,9 +150,10 @@ class Tax_lib
public function get_included_tax($quantity, $price, $discount_percentage, $discount_type, $tax_percentage, $tax_decimal, $rounding_code)
{
$tax_amount = $this->CI->sale_lib->get_item_tax($quantity, $price, $discount_percentage, $discount_type, $tax_percentage);
return Rounding_mode::round_number($rounding_code, $tax_amount, $tax_decimal);
$item_total = $this->CI->sale_lib->get_item_total($quantity, $price, $discount_percentage, $discount_type, TRUE);
$tax_fraction = bcdiv(bcadd(100, $tax_percentage), 100);
$price_tax_excl = bcdiv($item_total, $tax_fraction);
return bcsub($item_total, $price_tax_excl);
}
/*
@@ -443,11 +444,11 @@ class Tax_lib
$s1 = '';
$s2 = '';
if($selected_tax_type == Tax_lib::TAX_TYPE_EXCLUDED)
if($selected_tax_type === Tax_lib::TAX_TYPE_EXCLUDED)
{
$s1 = $selected;
}
else if($selected_tax_type == Tax_lib::TAX_TYPE_INCLUDED)
else if($selected_tax_type === Tax_lib::TAX_TYPE_INCLUDED)
{
$s2 = $selected;
}

View File

@@ -28,17 +28,17 @@ class Sale extends CI_Model
$decimals = totals_decimals();
$sale_price = 'CASE WHEN sales_items.discount_type = ' . PERCENT . ' THEN sales_items.item_unit_price * sales_items.quantity_purchased * (1 - sales_items.discount / 100) ELSE sales_items.item_unit_price * sales_items.quantity_purchased - sales_items.discount END';
$tax = 'ROUND(IFNULL(SUM(sales_items_taxes.tax), 0), ' . $decimals . ')';
$sales_tax = 'ROUND(IFNULL(SUM(sales_items_taxes.sales_tax), 0), ' . $decimals . ')';
$internal_tax = 'ROUND(IFNULL(SUM(sales_items_taxes.internal_tax), 0), ' . $decimals . ')';
if($this->config->item('tax_included'))
{
$sale_total = 'ROUND(SUM(' . $sale_price . '),' . $decimals . ')';
$sale_subtotal = $sale_total . ' - ' . $tax;
}
else
{
$sale_subtotal = 'ROUND(SUM(' . $sale_price . '),' . $decimals . ')';
$sale_total = $sale_subtotal . ' + ' . $tax;
$sale_total = 'ROUND(SUM(' . $sale_price . '),' . $decimals . ') + ' . $sales_tax;
}
// create a temporary table to contain all the sum of taxes per sale item
@@ -48,7 +48,8 @@ class Sale extends CI_Model
SELECT sales_items_taxes.sale_id AS sale_id,
sales_items_taxes.item_id AS item_id,
sales_items_taxes.line AS line,
SUM(sales_items_taxes.item_tax_amount) AS tax
SUM(CASE WHEN sales_items_taxes.tax_type = 0 THEN sales_items_taxes.item_tax_amount ELSE 0 END) AS internal_tax,
SUM(CASE WHEN sales_items_taxes.tax_type = 1 THEN sales_items_taxes.item_tax_amount ELSE 0 END) AS sales_tax
FROM ' . $this->db->dbprefix('sales_items_taxes') . ' AS sales_items_taxes
INNER JOIN ' . $this->db->dbprefix('sales') . ' AS sales
ON sales.sale_id = sales_items_taxes.sale_id
@@ -75,9 +76,9 @@ class Sale extends CI_Model
MAX(customer_p.email) AS email,
MAX(customer_p.comments) AS comments,
' . "
IFNULL($sale_total, $sale_subtotal) AS amount_due,
MAX($sale_total) AS amount_due,
IFNULL(MAX(payments.sale_payment_amount), 0) AS amount_tendered,
IFNULL(MAX(payments.sale_payment_amount) - IFNULL($sale_total, $sale_subtotal),0) AS change_due,
IFNULL(MAX(payments.sale_payment_amount) - MAX($sale_total),0) AS change_due,
" . '
MAX(payments.payment_type) AS payment_type
');
@@ -144,18 +145,13 @@ class Sale extends CI_Model
$sale_price = 'CASE WHEN sales_items.discount_type = ' . PERCENT . ' THEN sales_items.item_unit_price * sales_items.quantity_purchased * (1 - sales_items.discount / 100) ELSE sales_items.item_unit_price * sales_items.quantity_purchased - sales_items.discount END';
$sale_cost = 'SUM(sales_items.item_cost_price * sales_items.quantity_purchased)';
$tax = 'IFNULL(SUM(sales_items_taxes.tax), 0)';
if($this->config->item('tax_included'))
{
$sale_total = 'ROUND(SUM(' . $sale_price . '), ' . $decimals . ')';
$sale_subtotal = $sale_total . ' - ' . $tax;
}
else
{
$sale_subtotal = 'ROUND(SUM(' . $sale_price . '), ' . $decimals . ')';
$sale_total = $sale_subtotal . ' + ' . $tax;
}
$tax = 'IFNULL(SUM(sales_items_taxes.tax), 0)';
$sales_tax = 'IFNULL(SUM(sales_items_taxes.sales_tax), 0)';
$internal_tax = 'IFNULL(SUM(sales_items_taxes.internal_tax), 0)';
$sale_subtotal = 'ROUND(SUM(' . $sale_price . '), ' . $decimals . ') - ' . $internal_tax;
$sale_total = 'ROUND(SUM(' . $sale_price . '), ' . $decimals . ') + ' . $sales_tax;
// create a temporary table to contain all the sum of taxes per sale item
$this->db->query('CREATE TEMPORARY TABLE IF NOT EXISTS ' . $this->db->dbprefix('sales_items_taxes_temp') .
@@ -164,7 +160,9 @@ class Sale extends CI_Model
SELECT sales_items_taxes.sale_id AS sale_id,
sales_items_taxes.item_id AS item_id,
sales_items_taxes.line AS line,
SUM(sales_items_taxes.item_tax_amount) AS tax
SUM(sales_items_taxes.item_tax_amount) AS tax,
SUM(CASE WHEN sales_items_taxes.tax_type = 0 THEN sales_items_taxes.item_tax_amount ELSE 0 END) AS internal_tax,
SUM(CASE WHEN sales_items_taxes.tax_type = 1 THEN sales_items_taxes.item_tax_amount ELSE 0 END) AS sales_tax
FROM ' . $this->db->dbprefix('sales_items_taxes') . ' AS sales_items_taxes
INNER JOIN ' . $this->db->dbprefix('sales') . ' AS sales
ON sales.sale_id = sales_items_taxes.sale_id
@@ -192,14 +190,14 @@ class Sale extends CI_Model
MAX(CONCAT(customer_p.first_name, " ", customer_p.last_name)) AS customer_name,
MAX(customer.company_name) AS company_name,
' . "
IFNULL($sale_subtotal, $sale_total) AS subtotal,
$sale_subtotal AS subtotal,
$tax AS tax,
IFNULL($sale_total, $sale_subtotal) AS total,
$sale_total AS total,
$sale_cost AS cost,
(IFNULL($sale_subtotal, $sale_total) - $sale_cost) AS profit,
IFNULL($sale_total, $sale_subtotal) AS amount_due,
($sale_total - $sale_cost) AS profit,
$sale_total AS amount_due,
MAX(payments.sale_payment_amount) AS amount_tendered,
(MAX(payments.sale_payment_amount) - IFNULL($sale_total, $sale_subtotal)) AS change_due,
(MAX(payments.sale_payment_amount) - ($sale_total)) AS change_due,
" . '
MAX(payments.payment_type) AS payment_type
');
@@ -1089,17 +1087,20 @@ class Sale extends CI_Model
$sale_price = 'CASE WHEN sales_items.discount_type = ' . PERCENT . ' THEN sales_items.item_unit_price * sales_items.quantity_purchased * (1 - sales_items.discount / 100) ELSE sales_items.item_unit_price * sales_items.quantity_purchased - sales_items.discount END';
$sale_cost = 'SUM(sales_items.item_cost_price * sales_items.quantity_purchased)';
$tax = 'IFNULL(SUM(sales_items_taxes.tax), 0)';
$sales_tax = 'IFNULL(SUM(sales_items_taxes.sales_tax), 0)';
$internal_tax = 'IFNULL(SUM(sales_items_taxes.internal_tax), 0)';
if($this->config->item('tax_included'))
{
$sale_total = 'ROUND(SUM(' . $sale_price . '), ' . $decimals . ')';
$sale_subtotal = $sale_total . ' - ' . $tax;
$sale_subtotal = $sale_total . ' - ' . $internal_tax;
}
else
{
$sale_subtotal = 'ROUND(SUM(' . $sale_price . '), ' . $decimals . ')';
$sale_total = $sale_subtotal . ' + ' . $tax;
$sale_subtotal = 'ROUND(SUM(' . $sale_price . '), ' . $decimals . ') - ' . $internal_tax;
$sale_total = 'ROUND(SUM(' . $sale_price . '), ' . $decimals . ') + ' . $sales_tax;
}
// create a temporary table to contain all the sum of taxes per sale item
@@ -1109,7 +1110,9 @@ class Sale extends CI_Model
SELECT sales_items_taxes.sale_id AS sale_id,
sales_items_taxes.item_id AS item_id,
sales_items_taxes.line AS line,
SUM(sales_items_taxes.item_tax_amount) AS tax
SUM(sales_items_taxes.item_tax_amount) AS tax,
SUM(CASE WHEN sales_items_taxes.tax_type = 0 THEN sales_items_taxes.item_tax_amount ELSE 0 END) AS internal_tax,
SUM(CASE WHEN sales_items_taxes.tax_type = 1 THEN sales_items_taxes.item_tax_amount ELSE 0 END) AS sales_tax
FROM ' . $this->db->dbprefix('sales_items_taxes') . ' AS sales_items_taxes
INNER JOIN ' . $this->db->dbprefix('sales') . ' AS sales
ON sales.sale_id = sales_items_taxes.sale_id
@@ -1173,11 +1176,11 @@ class Sale extends CI_Model
MAX(payments.payment_type) AS payment_type,
MAX(payments.sale_payment_amount) AS sale_payment_amount,
' . "
IFNULL($sale_subtotal, $sale_total) AS subtotal,
$sale_subtotal AS subtotal,
$tax AS tax,
IFNULL($sale_total, $sale_subtotal) AS total,
$sale_total AS total,
$sale_cost AS cost,
(IFNULL($sale_subtotal, $sale_total) - $sale_cost) AS profit
($sale_subtotal - $sale_cost) AS profit
" . '
FROM ' . $this->db->dbprefix('sales_items') . ' AS sales_items
INNER JOIN ' . $this->db->dbprefix('sales') . ' AS sales

View File

@@ -7,7 +7,7 @@
}
</style>
</style>
<script type="text/javascript" src="dist/clipboard.min.js"></script>
<script type="text/javascript" src="js/clipboard.min.js"></script>
<div id="config_wrapper" class="col-sm-12">
<?php echo $this->lang->line('config_server_notice'); ?>
<div class="container">