From d97bada5e61861601f794afd53934e6ebcc2acd8 Mon Sep 17 00:00:00 2001 From: Aung Phyo Thant Date: Wed, 16 Jul 2025 15:38:12 +0630 Subject: [PATCH] Fix: Void amount in Daily Sale Report was not being handled correctly. --- app/models/sale.rb | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/app/models/sale.rb b/app/models/sale.rb index cab83801..98b04ac1 100644 --- a/app/models/sale.rb +++ b/app/models/sale.rb @@ -751,6 +751,14 @@ class Sale < ApplicationRecord .where('(sale_status = ? OR sale_status = ?) AND sales.receipt_date between ? AND ? ', 'completed', 'void', from, to) .group('sale_id') + void_audits = SaleAudit.select( + "`sale_audits`.`sale_id`", + "`sale_audits`.`action`", + "MAX(`sale_audits`.`created_at`) as latest_audit" + ) + .where(action: ['SALEVOID', 'CANCEL_MMQR_PAYMENT']) + .group("`sale_audits`.`sale_id`") + commercial_tax = '' if tax_profiles.present? sale_taxes = sale_taxes.select(tax_profiles.map { |name| "SUM(case when (sale_taxes.tax_name = '#{name}') then sale_taxes.tax_payable_amount else 0 end) as `#{name.parameterize}`"}.join(', ')) @@ -765,8 +773,8 @@ class Sale < ApplicationRecord 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' AND sa_salevoid.sale_audit_id IS NOT NULL) then grand_total else 0 end),0) as void_amount, - IFNULL(SUM(case when (sale_status='void' AND sa_mmqr.sale_audit_id IS NOT NULL) then grand_total else 0 end),0) as mmqr_cancelled_void_amount, + IFNULL(SUM(CASE WHEN sale_status = 'void' AND void_audits.action = 'SALEVOID' THEN grand_total ELSE 0 END),0) as void_amount, + IFNULL(SUM(CASE WHEN sale_status = 'void' AND void_audits.action = 'CANCEL_MMQR_PAYMENT' THEN grand_total ELSE 0 END),0) as mmqr_cancelled_void_amount, IFNULL(SUM(case when (sale_status='completed') then rounding_adjustment else 0 end),0) as rounding_adj, #{tax_profiles.map { |name| "IFNULL(SUM(case when (sale_status='completed') then `#{name.parameterize}` else 0 end),0) as `#{name.parameterize}`"}.push('').join(', ') if tax_profiles.present?} IFNULL(SUM(case when (sale_status='completed') then total_tax else 0 end),0) as tax, @@ -785,8 +793,7 @@ class Sale < ApplicationRecord #{sales.to_sql} ) as s LEFT JOIN (#{sale_taxes.to_sql}) AS st ON s.sale_id = st.sale_id - LEFT JOIN sale_audits sa_salevoid ON s.sale_id = sa_salevoid.sale_id AND sa_salevoid.action = 'SALEVOID' - LEFT JOIN sale_audits sa_mmqr ON s.sale_id = sa_mmqr.sale_id AND sa_mmqr.action = 'CANCEL_MMQR_PAYMENT' + LEFT JOIN (#{void_audits.to_sql}) AS `void_audits` ON `void_audits`.`sale_id` = `s`.`sale_id` GROUP BY DATE(CONVERT_TZ(receipt_date,'+00:00','+06:30'))").to_hash.map(&:symbolize_keys) return daily_total end