From 7a4cf1e2bd88dff7a0e5b39ac2f8a6a9bfaa9938 Mon Sep 17 00:00:00 2001 From: Steve Ireland Date: Sat, 13 Feb 2021 15:15:49 -0500 Subject: [PATCH] Fix discounted price rounding issues in reports --- application/libraries/Sale_lib.php | 4 ++++ application/models/Sale.php | 14 +++++++++++--- application/models/reports/Summary_report.php | 5 ++++- 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/application/libraries/Sale_lib.php b/application/libraries/Sale_lib.php index f08b75458..2fde857fc 100644 --- a/application/libraries/Sale_lib.php +++ b/application/libraries/Sale_lib.php @@ -1270,6 +1270,10 @@ class Sale_lib { $discount = bcmul($total, bcdiv($discount, 100)); } + else + { + $discount = bcmul($quantity, $discount); + } return round($discount, totals_decimals(), PHP_ROUND_HALF_UP); } diff --git a/application/models/Sale.php b/application/models/Sale.php index a67391084..63af16ec3 100644 --- a/application/models/Sale.php +++ b/application/models/Sale.php @@ -29,7 +29,9 @@ 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'; + $sale_price = 'CASE WHEN sales_items.discount_type = ' . PERCENT + . " THEN ROUND(sales_items.quantity_purchased * (sales_items.item_unit_price - sales_items.item_unit_price * sales_items.discount / 100), $decimals) " + . 'ELSE sales_items.quantity_purchased * (sales_items.item_unit_price - sales_items.discount) END'; $sales_tax = "ROUND(IFNULL(SUM(sales_items_taxes.sales_tax), 0), $decimals)"; $internal_tax = "ROUND(IFNULL(SUM(sales_items_taxes.internal_tax), 0), $decimals)"; @@ -153,7 +155,10 @@ 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'; + $sale_price = 'CASE WHEN sales_items.discount_type = ' . PERCENT + . " THEN ROUND(sales_items.quantity_purchased * (sales_items.item_unit_price - sales_items.item_unit_price * sales_items.discount / 100), $decimals) " + . 'ELSE sales_items.quantity_purchased * (sales_items.item_unit_price - sales_items.discount) END'; + $sale_cost = 'SUM(sales_items.item_cost_price * sales_items.quantity_purchased)'; $tax = 'IFNULL(SUM(sales_items_taxes.tax), 0)'; @@ -1133,7 +1138,10 @@ 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'; + $sale_price = 'CASE WHEN sales_items.discount_type = ' . PERCENT + . " THEN ROUND(sales_items.quantity_purchased * (sales_items.item_unit_price - sales_items.item_unit_price * sales_items.discount / 100), $decimals) " + . 'ELSE sales_items.quantity_purchased * (sales_items.item_unit_price - sales_items.discount) END'; + $sale_cost = 'SUM(sales_items.item_cost_price * sales_items.quantity_purchased)'; $tax = 'IFNULL(SUM(sales_items_taxes.tax), 0)'; diff --git a/application/models/reports/Summary_report.php b/application/models/reports/Summary_report.php index 870024c02..f2006d2b0 100644 --- a/application/models/reports/Summary_report.php +++ b/application/models/reports/Summary_report.php @@ -23,7 +23,10 @@ abstract class Summary_report extends Report $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'; + $sale_price = 'CASE WHEN sales_items.discount_type = ' . PERCENT + . " THEN ROUND(sales_items.quantity_purchased * (sales_items.item_unit_price - sales_items.item_unit_price * sales_items.discount / 100), $decimals) " + . 'ELSE sales_items.quantity_purchased * (sales_items.item_unit_price - sales_items.discount) END'; + $sale_cost = 'SUM(sales_items.item_cost_price * sales_items.quantity_purchased)'; $tax = 'IFNULL(SUM(sales_items_taxes.tax), 0)';