mirror of
https://github.com/opensourcepos/opensourcepos.git
synced 2026-04-11 10:31:19 -04:00
Optimise DB query, tidy up
This commit is contained in:
@@ -22,7 +22,7 @@ class Migration_RefundTracking extends CI_Migration
|
||||
$cash_payment = $this->lang->line('sales_cash');
|
||||
|
||||
$this->db->query('CREATE TEMPORARY TABLE IF NOT EXISTS ' . $this->db->dbprefix('migrate_taxes') .
|
||||
' (INDEX(sale_id))
|
||||
' (INDEX(sale_id)) ENGINE=MEMORY
|
||||
(
|
||||
SELECT sales.sale_id, SUM(sales_taxes.sale_tax_amount) AS total_taxes
|
||||
FROM ' . $this->db->dbprefix('sales') . ' AS sales
|
||||
@@ -34,15 +34,15 @@ class Migration_RefundTracking extends CI_Migration
|
||||
);
|
||||
|
||||
$this->db->query('CREATE TEMPORARY TABLE IF NOT EXISTS ' . $this->db->dbprefix('migrate_sales') .
|
||||
' (INDEX(sale_id))
|
||||
' (INDEX(sale_id)) ENGINE=MEMORY
|
||||
(
|
||||
SELECT sales.sale_id, '. $trans_amount . ', sales.employee_id, sales.sale_time'
|
||||
. ' FROM ' . $this->db->dbprefix('sales') . ' AS sales '
|
||||
. 'LEFT OUTER JOIN ' . $this->db->dbprefix('sales_items') . ' AS sales_items '
|
||||
. 'ON sales.sale_id = sales_items.sale_id '
|
||||
. 'LEFT OUTER JOIN ' . $this->db->dbprefix('migrate_taxes') . ' AS sumpay_taxes '
|
||||
. 'ON sales.sale_id = sumpay_taxes.sale_id '
|
||||
. 'WHERE sales.sale_status = \'' . COMPLETED . '\' GROUP BY sale_id
|
||||
. ' FROM ' . $this->db->dbprefix('sales') . ' AS sales '
|
||||
. 'LEFT OUTER JOIN ' . $this->db->dbprefix('sales_items') . ' AS sales_items '
|
||||
. 'ON sales.sale_id = sales_items.sale_id '
|
||||
. 'LEFT OUTER JOIN ' . $this->db->dbprefix('migrate_taxes') . ' AS sumpay_taxes '
|
||||
. 'ON sales.sale_id = sumpay_taxes.sale_id '
|
||||
. 'WHERE sales.sale_status = \'' . COMPLETED . '\' GROUP BY sale_id
|
||||
)'
|
||||
);
|
||||
|
||||
@@ -51,7 +51,7 @@ class Migration_RefundTracking extends CI_Migration
|
||||
. ' AS sumpay_taxes WHERE sumpay_items.sale_id = sumpay_taxes.sale_id),0)');
|
||||
|
||||
$this->db->query('CREATE TEMPORARY TABLE IF NOT EXISTS ' . $this->db->dbprefix('migrate_payments') .
|
||||
' (INDEX(sale_id))
|
||||
' (INDEX(sale_id)) ENGINE=MEMORY
|
||||
(
|
||||
SELECT sales.sale_id, COUNT(sales.sale_id) AS number_payments,
|
||||
SUM(sales_payments.payment_amount - sales_payments.cash_refund) AS total_payments
|
||||
@@ -67,35 +67,35 @@ class Migration_RefundTracking extends CI_Migration
|
||||
// The update statement that follows this CREATE TABLE is one of those statements.
|
||||
|
||||
$this->db->query('CREATE TABLE IF NOT EXISTS ' . $this->db->dbprefix('migrate_refund') .
|
||||
' (INDEX(sale_id))
|
||||
' (INDEX(sale_id)) ENGINE=MEMORY
|
||||
(
|
||||
select a.sale_id, total_payments - trans_amount as refund_amount
|
||||
from ' . $this->db->dbprefix('migrate_sales') . ' as a
|
||||
join ' . $this->db->dbprefix('migrate_payments') . ' as b on a.sale_id = b.sale_id
|
||||
where total_payments > trans_amount and number_payments = 1
|
||||
SELECT a.sale_id, total_payments - trans_amount AS refund_amount
|
||||
FROM ' . $this->db->dbprefix('migrate_sales') . ' AS a
|
||||
JOIN ' . $this->db->dbprefix('migrate_payments') . ' AS b ON a.sale_id = b.sale_id
|
||||
WHERE total_payments > trans_amount AND number_payments = 1
|
||||
)'
|
||||
);
|
||||
|
||||
// Update existing cash transactions with refund amount
|
||||
$this->db->query('update ' . $this->db->dbprefix('sales_payments') . ' as a
|
||||
set a.cash_refund =
|
||||
(select b.refund_amount
|
||||
from ' . $this->db->dbprefix('migrate_refund') . ' as b
|
||||
where a.sale_id = b.sale_id and a.payment_type = \'' . $cash_payment . '\')
|
||||
where exists
|
||||
(select b.refund_amount
|
||||
from ' . $this->db->dbprefix('migrate_refund') . ' as b
|
||||
where a.sale_id = b.sale_id and a.payment_type = \'' . $cash_payment . ' \')'
|
||||
$this->db->query('UPDATE ' . $this->db->dbprefix('sales_payments') . ' AS a
|
||||
SET a.cash_refund =
|
||||
(SELECT b.refund_amount
|
||||
FROM ' . $this->db->dbprefix('migrate_refund') . ' AS b
|
||||
WHERE a.sale_id = b.sale_id AND a.payment_type = \'' . $cash_payment . '\')
|
||||
WHERE EXISTS
|
||||
(SELECT b.refund_amount
|
||||
FROM ' . $this->db->dbprefix('migrate_refund') . ' AS b
|
||||
WHERE a.sale_id = b.sale_id AND a.payment_type = \'' . $cash_payment . ' \')'
|
||||
);
|
||||
|
||||
// Insert new cash refund transactions for non-cash payments
|
||||
$this->db->query('insert into ' . $this->db->dbprefix('sales_payments') .
|
||||
$this->db->query('INSERT INTO ' . $this->db->dbprefix('sales_payments') .
|
||||
' (sale_id, payment_type, employee_id, payment_time, payment_amount, cash_refund)
|
||||
select r.sale_id, \'' . $cash_payment . '\', s.employee_id, sale_time, 0, r.refund_amount
|
||||
from ' . $this->db->dbprefix('migrate_refund') . ' as r
|
||||
join ' . $this->db->dbprefix('sales_payments') . ' as p on r.sale_id = p.sale_id
|
||||
join ' . $this->db->dbprefix('migrate_sales') . ' as s on r.sale_id = s.sale_id
|
||||
where p.payment_type != \'' . $cash_payment . '\''
|
||||
SELECT r.sale_id, \'' . $cash_payment . '\', s.employee_id, sale_time, 0, r.refund_amount
|
||||
FROM ' . $this->db->dbprefix('migrate_refund') . ' AS r
|
||||
JOIN ' . $this->db->dbprefix('sales_payments') . ' AS p ON r.sale_id = p.sale_id
|
||||
JOIN ' . $this->db->dbprefix('migrate_sales') . ' AS s ON r.sale_id = s.sale_id
|
||||
WHERE p.payment_type != \'' . $cash_payment . '\''
|
||||
);
|
||||
|
||||
// Post migration cleanup
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
ALTER TABLE `ospos_sales_payments`
|
||||
ADD COLUMN `cash_refund` decimal(15,2) NOT NULL DEFAULT 0 AFTER `payment_amount`,
|
||||
CHANGE `payment_user` `employee_id` int(11) DEFAULT NULL,
|
||||
CHANGE`payment_date` `payment_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP;
|
||||
CHANGE `payment_user` `employee_id` int(11) DEFAULT NULL,
|
||||
CHANGE `payment_date` `payment_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP;
|
||||
|
||||
Reference in New Issue
Block a user