From 26d44c0a7dc8c8908ae7aeb9d697389cbc9fccf9 Mon Sep 17 00:00:00 2001 From: phyusin Date: Wed, 14 Nov 2018 17:47:31 +0630 Subject: [PATCH] change query for credit notes payment --- .../transactions/credit_notes_controller.rb | 7 +++---- app/models/sale.rb | 21 +++++++++---------- app/models/sale_payment.rb | 8 +++---- app/models/shift_sale.rb | 2 +- 4 files changed, 18 insertions(+), 20 deletions(-) diff --git a/app/controllers/transactions/credit_notes_controller.rb b/app/controllers/transactions/credit_notes_controller.rb index f7070e8d..6740c89d 100755 --- a/app/controllers/transactions/credit_notes_controller.rb +++ b/app/controllers/transactions/credit_notes_controller.rb @@ -16,14 +16,13 @@ class Transactions::CreditNotesController < ApplicationController order_source = params[:order_source] if filter.nil? && from.nil? && to.nil? && customer.nil? && order_source.nil? - @credit_notes = Sale.select("sales.*, orders.source") + order_source_query = "(select orders.source FROM orders JOIN sale_orders so ON so.order_id=orders.order_id WHERE so.sale_id=sales.sale_id GROUP BY so.sale_id)" + + @credit_notes = Sale.select("sales.*, #{order_source_query} as source") .joins("JOIN sale_payments sp on sp.sale_id = sales.sale_id") .where("(CASE WHEN (sales.grand_total + sales.amount_changed)=(select SUM(sale_payments.payment_amount) FROM sale_payments WHERE sale_payments.sale_id=sales.sale_id AND sale_payments.payment_method!='creditnote') THEN NULL ELSE payment_method='creditnote' END)") - .joins(" JOIN bookings ON bookings.sale_id=sales.sale_id") - .joins(" JOIN booking_orders ON booking_orders.booking_id=bookings.booking_id") - .joins(" JOIN orders ON orders.order_id=booking_orders.order_id") @credit_notes = Kaminari.paginate_array(@credit_notes).page(params[:page]).per(20) else sale = Sale.search_credit_sales(customer,filter,from,to,order_source) diff --git a/app/models/sale.rb b/app/models/sale.rb index 550ab4c1..d283d62e 100644 --- a/app/models/sale.rb +++ b/app/models/sale.rb @@ -755,26 +755,26 @@ class Sale < ApplicationRecord else custo = "and sales.customer_id = '#{customer}'" end - + order_source_query = "(select orders.source FROM orders JOIN sale_orders so ON so.order_id=orders.order_id WHERE so.sale_id=sales.sale_id GROUP BY so.sale_id)" if order_source.blank? source = "" else if order_source == "cashier" - source = "and orders.source='cashier' or orders.source='emenu'" + source = "and #{order_source_query}='cashier' or #{order_source_query}='emenu'" else - source = "and orders.source='#{order_source}'" + source = "and #{order_source_query}='#{order_source}'" end end if from.present? && to.present? - sale = Sale.select("sales.*,orders.source").joins("JOIN sale_payments sp on sp.sale_id = sales.sale_id") + sale = Sale.select("sales.*,#{order_source_query} as source").joins("JOIN sale_payments sp on sp.sale_id = sales.sale_id") .joins(" JOIN bookings ON bookings.sale_id=sales.sale_id") .joins(" JOIN booking_orders ON booking_orders.booking_id=bookings.booking_id") .joins(" JOIN orders ON orders.order_id=booking_orders.order_id") .where("DATE_FORMAT(receipt_date,'%d-%m-%Y') >= ?" + " AND DATE_FORMAT(receipt_date,'%d-%m-%Y') <= ? and (CASE WHEN (sales.grand_total + sales.amount_changed)=(select SUM(sale_payments.payment_amount) FROM sale_payments WHERE sale_payments.sale_id=sales.sale_id AND sale_payments.payment_method!='creditnote') THEN NULL ELSE payment_method='creditnote' END) #{keyword} #{custo} #{source}", from,to) else - sale = Sale.select("sales.*,orders.source").joins(" JOIN sale_payments sp on sp.sale_id = sales.sale_id") + sale = Sale.select("sales.*,#{order_source_query} as source").joins(" JOIN sale_payments sp on sp.sale_id = sales.sale_id") .joins(" JOIN bookings ON bookings.sale_id=sales.sale_id") .joins(" JOIN booking_orders ON booking_orders.booking_id=bookings.booking_id") .joins(" JOIN orders ON orders.order_id=booking_orders.order_id") @@ -1247,19 +1247,21 @@ def self.get_by_shift_sale_credit_payment(shift_sale_range,shift,from,to,filter, INNER JOIN sale_audits ON SUBSTRING_INDEX(sale_audits.remark,'||',1)=sale_payments.sale_payment_id WHERE sale_audits.sale_id = s.sale_id) = 0" end + order_source_query = "(select orders.source FROM orders JOIN sale_orders so ON so.order_id=orders.order_id WHERE so.sale_id=s.sale_id GROUP BY so.sale_id)" + if order_source.blank? source = "" else if order_source == "cashier" - source = "and orders.source='cashier' or orders.source='emenu'" + source = "and #{order_source_query}='cashier' or #{order_source_query}='emenu'" else - source = "and orders.source='#{order_source}'" + source = "and #{order_source_query}='#{order_source}'" end end query = SalePayment.select("s.receipt_no, sale_payments.*, SUM(sale_payments.payment_amount) as payment_amount, s.receipt_date as sale_date, - orders.source as order_source, + #{order_source_query} as order_source, s.cashier_name as cashier_name, (#{sub_query}) as credit_payment_receipt_date, (#{sub_query1}) as credit_payment, @@ -1267,9 +1269,6 @@ def self.get_by_shift_sale_credit_payment(shift_sale_range,shift,from,to,filter, (#{sub_query2}) as credit_payment_shift_name") .joins("INNER JOIN sales s ON s.sale_id = sale_payments.sale_id") .joins("INNER JOIN shift_sales ss ON ss.id = s.shift_sale_id") - .joins("INNER JOIN bookings ON bookings.sale_id=s.sale_id") - .joins("INNER JOIN booking_orders ON booking_orders.booking_id=bookings.booking_id") - .joins("INNER JOIN orders ON orders.order_id=booking_orders.order_id") if shift.present? query = query.where("sale_payments.payment_method= 'creditnote' and s.sale_status = 'completed' #{filter_check} and s.shift_sale_id in (?) #{source}",shift.to_a) diff --git a/app/models/sale_payment.rb b/app/models/sale_payment.rb index 04e1c981..6a94e156 100755 --- a/app/models/sale_payment.rb +++ b/app/models/sale_payment.rb @@ -874,6 +874,8 @@ class SalePayment < ApplicationRecord customer = " and s.customer_id = '#{params["customer_id"]}'" end + order_source_query = "(select orders.source FROM orders JOIN sale_orders so ON so.order_id=orders.order_id WHERE so.sale_id=s.sale_id GROUP BY so.sale_id)" + query = SalePayment.select("s.receipt_no, sale_payments.sale_payment_id, sale_payments.payment_method, SUM(sale_payments.payment_amount) as payment_amount, @@ -882,15 +884,13 @@ class SalePayment < ApplicationRecord s.cashier_name as cashier_name, c.name as customer_name") .joins("INNER JOIN sales s ON s.sale_id = sale_payments.sale_id") .joins("INNER JOIN customers c ON c.customer_id = s.customer_id") - .joins("INNER JOIN sale_orders so ON so.sale_id = s.sale_id") - .joins("INNER JOIN orders o ON o.order_id = so.order_id") if params[:type].nil? query = query.where("(CASE WHEN (s.grand_total + s.amount_changed)=(select SUM(payment_amount) FROM sale_payments WHERE sale_id=s.sale_id AND payment_method!='creditnote') THEN NULL ELSE payment_method='creditnote' END) and s.sale_status = 'completed' and s.payment_status='paid' #{receipt_no} #{customer}") elsif params[:type] == "cashier" - query = query.where("(CASE WHEN (s.grand_total + s.amount_changed)=(select SUM(payment_amount) FROM sale_payments WHERE sale_id=s.sale_id AND payment_method!='creditnote') THEN NULL ELSE payment_method='creditnote' AND o.source='#{params[:type]}' OR o.source='emenu' END) and s.sale_status = 'completed' and s.payment_status='paid' #{receipt_no} #{customer}") + query = query.where("(CASE WHEN (s.grand_total + s.amount_changed)=(select SUM(payment_amount) FROM sale_payments WHERE sale_id=s.sale_id AND payment_method!='creditnote') THEN NULL ELSE payment_method='creditnote' AND #{order_source_query}='#{params[:type]}' OR #{order_source_query}='emenu' END) and s.sale_status = 'completed' and s.payment_status='paid' #{receipt_no} #{customer}") else - query = query.where("(CASE WHEN (s.grand_total + s.amount_changed)=(select SUM(payment_amount) FROM sale_payments WHERE sale_id=s.sale_id AND payment_method!='creditnote') THEN NULL ELSE payment_method='creditnote' AND o.source='#{params[:type]}' END) and s.sale_status = 'completed' and s.payment_status='paid' #{receipt_no} #{customer}") + query = query.where("(CASE WHEN (s.grand_total + s.amount_changed)=(select SUM(payment_amount) FROM sale_payments WHERE sale_id=s.sale_id AND payment_method!='creditnote') THEN NULL ELSE payment_method='creditnote' AND #{order_source_query}='#{params[:type]}' END) and s.sale_status = 'completed' and s.payment_status='paid' #{receipt_no} #{customer}") end query = query.group("s.receipt_no") .order("s.receipt_date ASC, s.receipt_no ASC") diff --git a/app/models/shift_sale.rb b/app/models/shift_sale.rb index 3ea6b5b0..eb812b7b 100755 --- a/app/models/shift_sale.rb +++ b/app/models/shift_sale.rb @@ -182,7 +182,7 @@ class ShiftSale < ApplicationRecord end def self.get_shift_sales_with_credit_payment(shift_id) - query = SalePayment.select("(CASE WHEN SUM(sale_payments.payment_amount) > 0 THEN SUM(sale_payments.payment_amount) ELSE 0 END) as total_credit_payments") + query = SalePayment.select("(CASE WHEN (SUM(sale_payments.payment_amount) + SUM(sale_payments.outstanding_amount)) > 0 THEN (SUM(sale_payments.payment_amount) + SUM(sale_payments.outstanding_amount)) ELSE 0 END) as total_credit_payments") .joins(" JOIN sale_audits sa ON SUBSTRING_INDEX(sa.remark,'||',1)=sale_payments.sale_payment_id") .where("SUBSTRING_INDEX(SUBSTRING_INDEX(sa.remark,'||',-1),' -> ',1) = #{shift_id}") .first()