|
|
|
|
@@ -751,15 +751,8 @@ class Sale < ApplicationRecord
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def self.daily_sales_list(from,to)
|
|
|
|
|
sub_query = "SELECT (CASE WHEN SUM(sale_payments.payment_amount) > 0 THEN
|
|
|
|
|
(SUM(sale_payments.payment_amount) + SUM(sale_payments.outstanding_amount)) ELSE 0 END)
|
|
|
|
|
FROM sale_payments
|
|
|
|
|
INNER JOIN sale_audits sa ON SUBSTRING_INDEX(sa.remark,'||',1)=sale_payments.sale_payment_id
|
|
|
|
|
INNER JOIN sales s ON s.sale_id=sa.sale_id
|
|
|
|
|
WHERE s.sale_status='completed'
|
|
|
|
|
AND DATE_FORMAT(CONVERT_TZ(s.receipt_date,'+00:00','+06:30'),'%Y-%m-%d') = DATE_FORMAT(CONVERT_TZ(sales.receipt_date,'+00:00','+06:30'),'%Y-%m-%d')"
|
|
|
|
|
|
|
|
|
|
payments_total = Sale.select("CAST((CONVERT_TZ(sales.receipt_date,'+00:00','+06:30')) AS DATE) as sale_date,
|
|
|
|
|
sales = select("
|
|
|
|
|
sales.*,
|
|
|
|
|
SUM(case when (sale_payments.payment_method='KBZPay') then sale_payments.payment_amount else 0 end) as kbzpay_amount,
|
|
|
|
|
SUM(case when (sale_payments.payment_method='mpu') then sale_payments.payment_amount else 0 end) as mpu_amount,
|
|
|
|
|
SUM(case when (sale_payments.payment_method='master') then sale_payments.payment_amount else 0 end) as master_amount,
|
|
|
|
|
@@ -772,62 +765,43 @@ def self.daily_sales_list(from,to)
|
|
|
|
|
SUM(case when (sale_payments.payment_method='dinga') then sale_payments.payment_amount else 0 end) as dinga_amount,
|
|
|
|
|
SUM(case when (sale_payments.payment_method='JunctionPay') then sale_payments.payment_amount else 0 end) as junctionpay_amount,
|
|
|
|
|
SUM(case when (sale_payments.payment_method='cash') then sale_payments.payment_amount else 0 end) as cash_amount,
|
|
|
|
|
(CASE WHEN (SUM(case when (sale_payments.payment_method='creditnote') then sale_payments.payment_amount else 0 end)) > 0 THEN (SUM(case when (sale_payments.payment_method='creditnote') then sale_payments.payment_amount else 0 end) - (#{sub_query})) ELSE 0 END) as credit_amount,
|
|
|
|
|
CASE WHEN SUM(case when sale_payments.payment_method not in('creditnote') then sale_payments.payment_amount end) < sales.grand_total
|
|
|
|
|
THEN sales.grand_total - SUM(case when sale_payments.payment_method not in('creditnote') then sale_payments.payment_amount end)
|
|
|
|
|
ELSE 0 END as credit_amount,
|
|
|
|
|
SUM(case when (sale_payments.payment_method='giftvoucher') then sale_payments.payment_amount else 0 end) as giftvoucher_amount,
|
|
|
|
|
SUM(case when (sale_payments.payment_method='foc') then sale_payments.payment_amount else 0 end) as foc_amount")
|
|
|
|
|
.joins(" join sale_payments on sale_payments.sale_id = sales.sale_id")
|
|
|
|
|
.where("sale_status = ? AND sales.receipt_date between ? and ? ", 'completed', from, to)
|
|
|
|
|
.group("DATE_FORMAT((CONVERT_TZ(sales.receipt_date,'+00:00','+06:30')),'%Y-%m-%d')")
|
|
|
|
|
.joins("LEFT JOIN sale_payments on sales.sale_status != 'void' AND sale_payments.sale_id = sales.sale_id AND DATE(CONVERT_TZ(sale_payments.created_at,'+00:00','+06:30')) = DATE(CONVERT_TZ(sales.receipt_date,'+00:00','+06:30'))")
|
|
|
|
|
.where("(sale_status = ? OR sale_status = ?) AND sales.receipt_date between ? AND ? ", 'completed', 'void', from, to)
|
|
|
|
|
.group("sale_id").to_sql
|
|
|
|
|
|
|
|
|
|
daily_total = Array.new
|
|
|
|
|
|
|
|
|
|
payments_total.each do |pay|
|
|
|
|
|
sale_date = pay.sale_date
|
|
|
|
|
diff_time = payments_total.first.sale_date.beginning_of_day.utc - from
|
|
|
|
|
diff = diff_time % 86400
|
|
|
|
|
from_date = sale_date.beginning_of_day.utc - diff
|
|
|
|
|
to_date = sale_date.end_of_day.utc - diff
|
|
|
|
|
|
|
|
|
|
total_sale = Sale.select("IFNULL(SUM(case when (sale_status='completed') then grand_total else 0 end),0) as grand_total,
|
|
|
|
|
daily_total = connection.select_all("SELECT
|
|
|
|
|
IFNULL(SUM(case when (sale_status='completed') then grand_total else 0 end),0) as grand_total,
|
|
|
|
|
IFNULL(SUM(case when (sale_status='completed') then old_grand_total else 0 end),0) as old_grand_total,
|
|
|
|
|
IFNULL(SUM(case when (sale_status='completed') then total_discount else 0 end),0) as total_discount,
|
|
|
|
|
IFNULL(SUM(case when (sale_status='completed') then amount_changed else 0 end),0) as total_change_amount,
|
|
|
|
|
IFNULL(SUM(case when (sale_status='void') then grand_total else 0 end),0) as void_amount,
|
|
|
|
|
IFNULL(SUM(case when (sale_status='completed') then rounding_adjustment else 0 end),0) as rounding_adj")
|
|
|
|
|
.where("(sale_status = ? OR sale_status = ?) AND receipt_date between ? and ? AND total_amount != 0", 'completed', 'void', from_date, to_date)
|
|
|
|
|
IFNULL(SUM(case when (sale_status='completed') then rounding_adjustment else 0 end),0) as rounding_adj,
|
|
|
|
|
CAST((CONVERT_TZ(receipt_date,'+00:00','+06:30')) AS DATE) as sale_date,
|
|
|
|
|
SUM(kbzpay_amount) as kbzpay_amount,
|
|
|
|
|
SUM(mpu_amount) as mpu_amount,
|
|
|
|
|
SUM(master_amount) as master_amount,
|
|
|
|
|
SUM(visa_amount) as visa_amount,
|
|
|
|
|
SUM(jcb_amount) as jcb_amount,
|
|
|
|
|
SUM(paypar_amount) as paypar_amount,
|
|
|
|
|
SUM(unionpay_amount) as unionpay_amount,
|
|
|
|
|
SUM(alipay_amount) as alipay_amount,
|
|
|
|
|
SUM(paymal_amount) as paymal_amount,
|
|
|
|
|
SUM(dinga_amount) as dinga_amount,
|
|
|
|
|
SUM(junctionpay_amount) as junctionpay_amount,
|
|
|
|
|
SUM(cash_amount) as cash_amount,
|
|
|
|
|
SUM(credit_amount) as credit_amount,
|
|
|
|
|
SUM(giftvoucher_amount) as giftvoucher_amount,
|
|
|
|
|
SUM(foc_amount) as foc_amount
|
|
|
|
|
FROM (
|
|
|
|
|
#{sales}
|
|
|
|
|
) as s
|
|
|
|
|
GROUP BY DATE(CONVERT_TZ(receipt_date,'+00:00','+06:30'))").to_hash.map(&:symbolize_keys)
|
|
|
|
|
|
|
|
|
|
total_sale.each do |sale|
|
|
|
|
|
grand_total = sale.grand_total
|
|
|
|
|
old_grand_total = sale.old_grand_total
|
|
|
|
|
total_discount = sale.total_discount
|
|
|
|
|
void_amount = sale.void_amount
|
|
|
|
|
total_change_amount = sale.total_change_amount
|
|
|
|
|
total = {:sale_date => pay.sale_date,
|
|
|
|
|
:mpu_amount => pay.mpu_amount,
|
|
|
|
|
:master_amount => pay.master_amount,
|
|
|
|
|
:visa_amount => pay.visa_amount,
|
|
|
|
|
:jcb_amount => pay.jcb_amount,
|
|
|
|
|
:paypar_amount => pay.paypar_amount,
|
|
|
|
|
:unionpay_amount => pay.unionpay_amount,
|
|
|
|
|
:alipay_amount => pay.alipay_amount,
|
|
|
|
|
:kbzpay_amount => pay.kbzpay_amount,
|
|
|
|
|
:paymal_amount => pay.paymal_amount,
|
|
|
|
|
:dinga_amount => pay.dinga_amount,
|
|
|
|
|
:junctionpay_amount => pay.junctionpay_amount,
|
|
|
|
|
:cash_amount => pay.cash_amount,
|
|
|
|
|
:credit_amount => pay.credit_amount,
|
|
|
|
|
:foc_amount => pay.foc_amount,
|
|
|
|
|
:giftvoucher_amount => pay.giftvoucher_amount,
|
|
|
|
|
:total_discount => total_discount,
|
|
|
|
|
:total_change_amount => total_change_amount,
|
|
|
|
|
:grand_total => grand_total,
|
|
|
|
|
:old_grand_total => old_grand_total,
|
|
|
|
|
:void_amount => void_amount,
|
|
|
|
|
:rounding_adj => sale.rounding_adj}
|
|
|
|
|
daily_total.push(total)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
end
|
|
|
|
|
return daily_total
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
@@ -1257,73 +1231,64 @@ def self.get_shift_sales_by_receipt_no_detail(shift_sale_range,shift,from,to,pay
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def self.get_by_shift_sale_credit_payment(shift_sale_range,shift,from,to,filter,order_source)
|
|
|
|
|
sub_query = "SELECT (CASE WHEN SUM(payment_amount) > 0
|
|
|
|
|
THEN DATE_FORMAT(CONVERT_TZ(sale_payments.created_at,'+00:00','+06:30'),'%d %b %y %h:%i%p') ELSE '-' END)
|
|
|
|
|
FROM `sale_payments`
|
|
|
|
|
INNER JOIN sale_audits ON SUBSTRING_INDEX(sale_audits.remark,'||',1)=sale_payments.sale_payment_id
|
|
|
|
|
WHERE sale_audits.sale_id = s.sale_id"
|
|
|
|
|
order_sources = Order.select("sale_orders.sale_id, orders.source")
|
|
|
|
|
.joins(:sale_orders).to_sql
|
|
|
|
|
|
|
|
|
|
sub_query1 = "SELECT (CASE WHEN SUM(payment_amount) > 0 THEN SUM(payment_amount) -
|
|
|
|
|
(SUM(payment_amount) - (SELECT SUM(payment_amount) FROM sale_payments WHERE payment_method='creditnote' AND sale_id=s.sale_id)) ELSE 0 END)
|
|
|
|
|
FROM `sale_payments`
|
|
|
|
|
INNER JOIN sale_audits ON SUBSTRING_INDEX(sale_audits.remark,'||',1)=sale_payments.sale_payment_id
|
|
|
|
|
WHERE sale_audits.sale_id = s.sale_id"
|
|
|
|
|
credit_payments = SalePayment.select("
|
|
|
|
|
sales.sale_id,
|
|
|
|
|
DATE_FORMAT(CONVERT_TZ(sale_payments.created_at,'+00:00','+06:30'),'%d %b %y %h:%i%p') as credit_payment_receipt_date,
|
|
|
|
|
sale_payments.payment_amount as credit_payment,
|
|
|
|
|
employees.name as credit_payment_cashier_name,
|
|
|
|
|
CONCAT(DATE_FORMAT(CONVERT_TZ(shift_started_at,'+00:00','+06:30'),'%d %b %y %h:%i%p'),' - ',DATE_FORMAT(CONVERT_TZ(shift_closed_at,'+00:00','+06:30'),'%d %b %y %h:%i%p')) as credit_payment_shift_name")
|
|
|
|
|
.joins("JOIN sales ON sales.sale_id = sale_payments.sale_id")
|
|
|
|
|
.joins("JOIN sale_audits ON sale_audits.sale_id = sales.sale_id AND SUBSTRING_INDEX(sale_audits.remark,'||',1)=sale_payments.sale_payment_id")
|
|
|
|
|
.joins("JOIN shift_sales ON shift_sales.id = sales.shift_sale_id")
|
|
|
|
|
.joins("JOIN employees ON employees.id = shift_sales.employee_id").to_sql
|
|
|
|
|
|
|
|
|
|
sub_query2 = "SELECT (CASE WHEN shift_closed_at IS NOT NULL AND credit_payment > 0
|
|
|
|
|
THEN CONCAT(DATE_FORMAT(CONVERT_TZ(shift_started_at,'+00:00','+06:30'),'%d %b %y %h:%i%p'),' - ',DATE_FORMAT(CONVERT_TZ(shift_closed_at,'+00:00','+06:30'),'%d %b %y %h:%i%p'))
|
|
|
|
|
ELSE '-' END)
|
|
|
|
|
FROM shift_sales
|
|
|
|
|
WHERE shift_sales.id = s.shift_sale_id"
|
|
|
|
|
credits = SalePayment.select("
|
|
|
|
|
sale_payments.sale_payment_id,
|
|
|
|
|
sale_payments.payment_method,
|
|
|
|
|
sale_payments.payment_amount,
|
|
|
|
|
sale_payments.payment_status,
|
|
|
|
|
sales.sale_id,
|
|
|
|
|
sales.receipt_no,
|
|
|
|
|
sales.receipt_date as sale_date,
|
|
|
|
|
order_sources.source as order_source,
|
|
|
|
|
sales.cashier_name,
|
|
|
|
|
customers.name as customer_name,
|
|
|
|
|
IFNULL(credit_payments.credit_payment_receipt_date, '-') as credit_payment_receipt_date,
|
|
|
|
|
IFNULL(credit_payments.credit_payment, 0) as credit_payment,
|
|
|
|
|
IFNULL(credit_payments.credit_payment_cashier_name, '-') as credit_payment_cashier_name,
|
|
|
|
|
IFNULL(credit_payments.credit_payment_shift_name, '-') as credit_payment_shift_name")
|
|
|
|
|
.joins("JOIN sales ON sales.sale_id = sale_payments.sale_id")
|
|
|
|
|
.joins("JOIN shift_sales ON shift_sales.id = sales.shift_sale_id")
|
|
|
|
|
.joins("JOIN customers ON customers.customer_id = sales.customer_id")
|
|
|
|
|
.joins("JOIN (#{order_sources}) order_sources ON order_sources.sale_id = sales.sale_id")
|
|
|
|
|
.joins("LEFT JOIN (#{credit_payments}) credit_payments ON credit_payments.sale_id = sales.sale_id")
|
|
|
|
|
.where("sale_payments.payment_method= ? AND sales.sale_status = ?", 'creditnote', 'completed')
|
|
|
|
|
|
|
|
|
|
sub_query3 = "SELECT (CASE WHEN shift_closed_at IS NOT NULL OR shift_closed_at IS NULL AND credit_payment > 0
|
|
|
|
|
THEN employees.name ELSE '-' END)
|
|
|
|
|
FROM shift_sales
|
|
|
|
|
INNER JOIN employees ON employees.id=shift_sales.employee_id
|
|
|
|
|
WHERE shift_sales.id = s.shift_sale_id"
|
|
|
|
|
|
|
|
|
|
filter_check = ""
|
|
|
|
|
if filter == 'paid'
|
|
|
|
|
filter_check = " AND (SELECT (CASE WHEN SUM(payment_amount) > 0 THEN SUM(payment_amount) ELSE 0 END)
|
|
|
|
|
FROM `sale_payments`
|
|
|
|
|
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"
|
|
|
|
|
elsif filter == 'unpaid'
|
|
|
|
|
filter_check = " AND (SELECT (CASE WHEN SUM(payment_amount) > 0 THEN SUM(payment_amount) ELSE 0 END)
|
|
|
|
|
FROM `sale_payments`
|
|
|
|
|
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.present?
|
|
|
|
|
if order_source == "cashier"
|
|
|
|
|
source = "and #{order_source_query}='cashier' or #{order_source_query}='emenu'"
|
|
|
|
|
credits = credits.where("order_sources.source IN (?)", ['cashier', 'emenu'])
|
|
|
|
|
else
|
|
|
|
|
source = "and #{order_source_query}='#{order_source}'"
|
|
|
|
|
credits = credits.where("order_sources.source = ?", 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,
|
|
|
|
|
#{order_source_query} as order_source,
|
|
|
|
|
s.cashier_name as cashier_name,
|
|
|
|
|
(#{sub_query}) as credit_payment_receipt_date,
|
|
|
|
|
(#{sub_query1}) as credit_payment,
|
|
|
|
|
(#{sub_query3}) as credit_payment_cashier_name,
|
|
|
|
|
(#{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")
|
|
|
|
|
|
|
|
|
|
if filter == 'paid'
|
|
|
|
|
credits = credits.where("credit_payment IS NOT NULL")
|
|
|
|
|
elsif filter == 'unpaid'
|
|
|
|
|
credits = credits.where("credit_payment IS NULL")
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
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)
|
|
|
|
|
credits = credits.where("sales.shift_sale_id in (?)",shift.to_a)
|
|
|
|
|
elsif shift_sale_range.present?
|
|
|
|
|
query = query.where("sale_payments.payment_method='creditnote' and s.sale_status = 'completed' #{filter_check} and s.shift_sale_id in (?) #{source}",shift_sale_range.to_a)
|
|
|
|
|
credits = credits.where("sales.shift_sale_id in (?)",shift_sale_range.to_a)
|
|
|
|
|
else
|
|
|
|
|
query = query.where("sale_payments.payment_method='creditnote' and s.sale_status = 'completed' #{filter_check} and s.receipt_date between ? and ? #{source}",from,to)
|
|
|
|
|
credits = credits.where("sales.receipt_date between ? and ?",from,to)
|
|
|
|
|
end
|
|
|
|
|
query = query.group("s.sale_id")
|
|
|
|
|
credits = credits.group("sales.sale_id")
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def self.get_void_sale(shift,from,to)
|
|
|
|
|
|