fix(pos-dashboard): show payment method names instead of order status

GetPosDashboardQuery payment breakdown SQL was grouping by
order_statuses.name (e.g. "Completed") instead of orders.payment_method
(e.g. "cash", "card", "qr", "transfer").

Fix: GROUP BY o.payment_method with COALESCE for empty values.
Frontend: apply MapPaymentMethodLabel() to translate method names
to Vietnamese (Tiền mặt, Thẻ, Mã QR, Chuyển khoản).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Ho Ngoc Hai
2026-03-26 17:08:50 +07:00
parent ee8f057d67
commit 9f52c27f56
2 changed files with 4 additions and 5 deletions

View File

@@ -547,7 +547,7 @@
{
<div class="pos-dashboard__payment-row">
<div class="pos-dashboard__payment-header">
<span>@p.Method</span>
<span>@MapPaymentMethodLabel(p.Method)</span>
<span style="font-weight:600;">@FormatPrice(p.Amount)</span>
</div>
<div class="pos-dashboard__payment-bar">

View File

@@ -140,18 +140,17 @@ public class GetPosDashboardQueryHandler : IRequestHandler<GetPosDashboardQuery,
var popularItems = (await _connection.QueryAsync<PopularItemDto>(popularSql, parameters, commandTimeout: 5)).AsList();
// EN: Payment breakdown by status / VI: Phân tích theo trạng thái
// EN: Payment breakdown by payment method / VI: Phân tích theo hình thức thanh toán
var paymentSql = @"
SELECT
os.name AS Method,
COALESCE(NULLIF(o.payment_method, ''), 'unknown') AS Method,
COUNT(*) AS Count,
COALESCE(SUM(o.total_amount), 0) AS Amount
FROM orders o
INNER JOIN order_statuses os ON o.status_id = os.id
WHERE o.shop_id = @ShopId
AND o.created_at >= @Today
AND o.created_at < @Tomorrow
GROUP BY os.name";
GROUP BY COALESCE(NULLIF(o.payment_method, ''), 'unknown')";
var paymentBreakdown = (await _connection.QueryAsync<PaymentBreakdownDto>(paymentSql, parameters, commandTimeout: 5)).AsList();