mirror of
https://github.com/opensourcepos/opensourcepos.git
synced 2026-10-26 10:08:42 -04:00
Fix Sales Takings multiple taxes issue and swap table columns (#976)
This commit is contained in:
1 parent
5267eadc56
commit
5047ca0f41
2 files changed
+48
-32
No files matched your search
@@ -8,8 +8,8 @@ function get_sales_manage_table_headers()
|
||||
array('sale_id' => $CI->lang->line('common_id')),
|
||||
array('sale_time' => $CI->lang->line('sales_sale_time')),
|
||||
array('customer_name' => $CI->lang->line('customers_customer')),
|
||||
array('amount_tendered' => $CI->lang->line('sales_amount_tendered')),
|
||||
array('amount_due' => $CI->lang->line('sales_amount_due')),
|
||||
array('amount_tendered' => $CI->lang->line('sales_amount_tendered')),
|
||||
array('change_due' => $CI->lang->line('sales_change_due')),
|
||||
array('payment_type' => $CI->lang->line('sales_payment_type'))
|
||||
);
|
||||
@@ -29,23 +29,22 @@ function get_sales_manage_table_headers()
|
||||
function get_sale_data_last_row($sales, $controller)
|
||||
{
|
||||
$CI =& get_instance();
|
||||
$table_data_rows = '';
|
||||
$sum_amount_tendered = 0;
|
||||
$sum_amount_due = 0;
|
||||
$sum_amount_tendered = 0;
|
||||
$sum_change_due = 0;
|
||||
|
||||
foreach($sales->result() as $key=>$sale)
|
||||
{
|
||||
$sum_amount_tendered += $sale->amount_tendered;
|
||||
$sum_amount_due += $sale->amount_due;
|
||||
$sum_amount_tendered += $sale->amount_tendered;
|
||||
$sum_change_due += $sale->change_due;
|
||||
}
|
||||
|
||||
return array(
|
||||
'sale_id' => '-',
|
||||
'sale_time' => '<b>'.$CI->lang->line('sales_total').'</b>',
|
||||
'amount_tendered' => '<b>'. to_currency($sum_amount_tendered).'</b>',
|
||||
'amount_due' => '<b>'.to_currency($sum_amount_due).'</b>',
|
||||
'amount_tendered' => '<b>'. to_currency($sum_amount_tendered).'</b>',
|
||||
'change_due' => '<b>'.to_currency($sum_change_due).'</b>'
|
||||
);
|
||||
}
|
||||
@@ -59,8 +58,8 @@ function get_sale_data_row($sale, $controller)
|
||||
'sale_id' => $sale->sale_id,
|
||||
'sale_time' => date( $CI->config->item('dateformat') . ' ' . $CI->config->item('timeformat'), strtotime($sale->sale_time) ),
|
||||
'customer_name' => $sale->customer_name,
|
||||
'amount_tendered' => to_currency($sale->amount_tendered),
|
||||
'amount_due' => to_currency($sale->amount_due),
|
||||
'amount_tendered' => to_currency($sale->amount_tendered),
|
||||
'change_due' => to_currency($sale->change_due),
|
||||
'payment_type' => $sale->payment_type
|
||||
);
|
||||
|
||||
+43
-26
@@ -83,25 +83,8 @@ class Sale extends CI_Model
|
||||
*/
|
||||
public function search($search, $filters, $rows = 0, $limit_from = 0, $sort = 'sale_date', $order = 'desc')
|
||||
{
|
||||
if($this->config->item('tax_included'))
|
||||
{
|
||||
$total = '1';
|
||||
$subtotal = '(1 - (SUM(1 - 100 / (100 + sales_items_taxes.percent))))';
|
||||
$tax = '(SUM(1 - 100 / (100 + sales_items_taxes.percent)))';
|
||||
}
|
||||
else
|
||||
{
|
||||
$tax = '(SUM(sales_items_taxes.percent) / 100)';
|
||||
$total = '(1 + (SUM(sales_items_taxes.percent / 100)))';
|
||||
$subtotal = '1';
|
||||
}
|
||||
|
||||
$sale_total = 'SUM(sales_items.item_unit_price * sales_items.quantity_purchased - sales_items.item_unit_price * sales_items.quantity_purchased * sales_items.discount_percent / 100)';
|
||||
$sale_cost = 'SUM(sales_items.item_cost_price * sales_items.quantity_purchased)';
|
||||
|
||||
$decimals = totals_decimals();
|
||||
|
||||
// create payments temp table to speed up the sales listing
|
||||
// NOTE: temporary tables are created to speed up searches due to the fact that are ortogonal to the main query
|
||||
// create a temporary table to contain all the payments per sale item
|
||||
$this->db->query('CREATE TEMPORARY TABLE IF NOT EXISTS ' . $this->db->dbprefix('sales_payments_temp') .
|
||||
' (PRIMARY KEY(sale_id), INDEX(sale_id))
|
||||
(
|
||||
@@ -116,6 +99,40 @@ class Sale extends CI_Model
|
||||
)'
|
||||
);
|
||||
|
||||
// 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') .
|
||||
' (INDEX(sale_id), INDEX(item_id))
|
||||
(
|
||||
SELECT sales_items_taxes.sale_id AS sale_id,
|
||||
sales_items_taxes.item_id AS item_id,
|
||||
SUM(sales_items_taxes.percent) AS percent
|
||||
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
|
||||
INNER JOIN ' . $this->db->dbprefix('sales_items') . ' AS sales_items
|
||||
ON sales_items.sale_id = sales_items_taxes.sale_id AND sales_items.line = sales_items_taxes.line
|
||||
WHERE DATE(sales.sale_time) BETWEEN ' . $this->db->escape($filters['start_date']) . ' AND ' . $this->db->escape($filters['end_date']) . '
|
||||
GROUP BY sales_items_taxes.sale_id, sales_items_taxes.item_id
|
||||
)'
|
||||
);
|
||||
|
||||
if($this->config->item('tax_included'))
|
||||
{
|
||||
$sale_total = 'SUM(sales_items.item_unit_price * sales_items.quantity_purchased * (1 - sales_items.discount_percent / 100))';
|
||||
$sale_subtotal = 'SUM(sales_items.item_unit_price * sales_items.quantity_purchased * (1 - sales_items.discount_percent / 100) * (100 / (100 + sales_items_taxes.percent)))';
|
||||
$sale_tax = 'SUM(sales_items.item_unit_price * sales_items.quantity_purchased * (1 - sales_items.discount_percent / 100) * (1 - 100 / (100 + sales_items_taxes.percent)))';
|
||||
}
|
||||
else
|
||||
{
|
||||
$sale_total = 'SUM(sales_items.item_unit_price * sales_items.quantity_purchased * (1 - sales_items.discount_percent / 100) * (1 + (sales_items_taxes.percent / 100)))';
|
||||
$sale_subtotal = 'SUM(sales_items.item_unit_price * sales_items.quantity_purchased * (1 - sales_items.discount_percent / 100))';
|
||||
$sale_tax = 'SUM(sales_items.item_unit_price * sales_items.quantity_purchased * (1 - sales_items.discount_percent / 100) * (sales_items_taxes.percent / 100))';
|
||||
}
|
||||
|
||||
$sale_cost = 'SUM(sales_items.item_cost_price * sales_items.quantity_purchased)';
|
||||
|
||||
$decimals = totals_decimals();
|
||||
|
||||
$this->db->select('
|
||||
sales.sale_id AS sale_id,
|
||||
DATE(sales.sale_time) AS sale_date,
|
||||
@@ -124,13 +141,13 @@ class Sale extends CI_Model
|
||||
CONCAT(customer_p.first_name, " ", customer_p.last_name) AS customer_name,
|
||||
customer.company_name AS company_name,
|
||||
' . "
|
||||
ROUND($sale_total * $subtotal, $decimals) AS subtotal,
|
||||
IFNULL(ROUND($sale_total * $total, $decimals), ROUND($sale_total * $subtotal, $decimals)) AS total,
|
||||
IFNULL(ROUND($sale_total * $tax, $decimals), 0) AS tax,
|
||||
ROUND($sale_total - $sale_cost, $decimals) AS profit,
|
||||
ROUND($sale_subtotal, $decimals) AS subtotal,
|
||||
IFNULL(ROUND($sale_total, $decimals), ROUND($sale_subtotal, $decimals)) AS total,
|
||||
IFNULL(ROUND($sale_tax, $decimals), 0) AS tax,
|
||||
ROUND($sale_cost, $decimals) AS cost,
|
||||
IFNULL(ROUND($sale_total * $total, $decimals), ROUND($sale_total * $subtotal, $decimals)) AS amount_due,
|
||||
(payments.sale_payment_amount - IFNULL(ROUND($sale_total * $total, $decimals), ROUND($sale_total * $subtotal, $decimals))) AS change_due,
|
||||
ROUND($sale_total - IFNULL($sale_tax, 0) - $sale_cost, $decimals) AS profit,
|
||||
IFNULL(ROUND($sale_total, $decimals), ROUND($sale_subtotal, $decimals)) AS amount_due,
|
||||
(payments.sale_payment_amount - IFNULL(ROUND($sale_total, $decimals), ROUND($sale_subtotal, $decimals))) AS change_due,
|
||||
" . '
|
||||
payments.sale_payment_amount AS amount_tendered,
|
||||
payments.payment_type AS payment_type,
|
||||
@@ -142,7 +159,7 @@ class Sale extends CI_Model
|
||||
$this->db->join('people AS customer_p', 'sales.customer_id = customer_p.person_id', 'left');
|
||||
$this->db->join('customers AS customer', 'sales.customer_id = customer.person_id', 'left');
|
||||
$this->db->join('sales_payments_temp AS payments', 'sales.sale_id = payments.sale_id', 'left outer');
|
||||
$this->db->join('sales_items_taxes AS sales_items_taxes', 'sales_items.sale_id = sales_items_taxes.sale_id AND sales_items.item_id = sales_items_taxes.item_id AND sales_items.line = sales_items_taxes.line', 'left outer');
|
||||
$this->db->join('sales_items_taxes_temp AS sales_items_taxes', 'sales_items.sale_id = sales_items_taxes.sale_id AND sales_items.item_id = sales_items_taxes.item_id', 'left outer');
|
||||
|
||||
$this->db->where('DATE(sales.sale_time) BETWEEN ' . $this->db->escape($filters['start_date']) . ' AND ' . $this->db->escape($filters['end_date']));
|
||||
|
||||
|
||||
Reference in new issue
Block a user