From a61ddc19d27f506cd04a2751657a331246a0fa54 Mon Sep 17 00:00:00 2001 From: FrancescoUK Date: Sun, 9 Jun 2019 10:53:48 +0100 Subject: [PATCH] Optimise DB query, tidy up --- .../20190502100000_refundtracking.php | 58 +++++++++---------- .../sqlscripts/3.3.0_refundtracking.sql | 4 +- 2 files changed, 31 insertions(+), 31 deletions(-) diff --git a/application/migrations/20190502100000_refundtracking.php b/application/migrations/20190502100000_refundtracking.php index 4bd94f296..86f1a7af4 100644 --- a/application/migrations/20190502100000_refundtracking.php +++ b/application/migrations/20190502100000_refundtracking.php @@ -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 diff --git a/application/migrations/sqlscripts/3.3.0_refundtracking.sql b/application/migrations/sqlscripts/3.3.0_refundtracking.sql index dc626abb2..b61d26377 100644 --- a/application/migrations/sqlscripts/3.3.0_refundtracking.sql +++ b/application/migrations/sqlscripts/3.3.0_refundtracking.sql @@ -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;