From c708bda364aa43d53f77f783f39769fa692976c8 Mon Sep 17 00:00:00 2001 From: Ho Ngoc Hai Date: Thu, 26 Mar 2026 09:56:14 +0700 Subject: [PATCH] fix(ui): translate order status and payment method to Vietnamese MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - ShopHelpers: add OrderStatusLabel(), OrderStatusBadge(), PaymentMethodLabel() — translate raw status/method strings to Vietnamese with correct badge colors - ShopFinance.razor: "Validated" → "Chờ thanh toán" (yellow badge) - ShopOverview.razor: same status translation - ShopReports.razor: same status translation - CafeDesktop.razor: update MapApiStatus() to include Draft/Validated/Paid/PaymentPending mappings; update MapPaymentMethodLabel() to include qr→"Mã QR", transfer→"Chuyển khoản", vnpay/momo, empty→"Chưa thanh toán" 4 payment methods supported: Tiền mặt, Thẻ, Mã QR, Chuyển khoản Co-Authored-By: Claude Opus 4.6 (1M context) --- .../Pages/Admin/Shop/ShopFinance.razor | 2 +- .../Pages/Admin/Shop/ShopHelpers.cs | 43 +++++++++++++++++++ .../Pages/Admin/Shop/ShopOverview.razor | 2 +- .../Pages/Admin/Shop/ShopReports.razor | 2 +- .../Pages/Pos/Cafe/CafeDesktop.razor | 13 ++++-- 5 files changed, 55 insertions(+), 7 deletions(-) diff --git a/apps/web-client-tpos-net/src/WebClientTpos.Client/Pages/Admin/Shop/ShopFinance.razor b/apps/web-client-tpos-net/src/WebClientTpos.Client/Pages/Admin/Shop/ShopFinance.razor index db56721c..21bebd54 100644 --- a/apps/web-client-tpos-net/src/WebClientTpos.Client/Pages/Admin/Shop/ShopFinance.razor +++ b/apps/web-client-tpos-net/src/WebClientTpos.Client/Pages/Admin/Shop/ShopFinance.razor @@ -72,7 +72,7 @@ @o.Id.ToString()[..8] @ShopHelpers.FormatVND(o.TotalAmount) - @(o.Status ?? "—") + @ShopHelpers.OrderStatusLabel(o.Status) @o.CreatedAt.ToString("dd/MM HH:mm") diff --git a/apps/web-client-tpos-net/src/WebClientTpos.Client/Pages/Admin/Shop/ShopHelpers.cs b/apps/web-client-tpos-net/src/WebClientTpos.Client/Pages/Admin/Shop/ShopHelpers.cs index a46e85e5..b13b136d 100644 --- a/apps/web-client-tpos-net/src/WebClientTpos.Client/Pages/Admin/Shop/ShopHelpers.cs +++ b/apps/web-client-tpos-net/src/WebClientTpos.Client/Pages/Admin/Shop/ShopHelpers.cs @@ -27,4 +27,47 @@ public static class ShopHelpers public static string FormatFileSize(long b) => b < 1024 ? $"{b} B" : b < 1048576 ? $"{b / 1024.0:F1} KB" : b < 1073741824 ? $"{b / 1048576.0:F1} MB" : $"{b / 1073741824.0:F2} GB"; public static string GetFileIcon(string? ct) => ct switch { string s when s.StartsWith("image/") => "image", string s when s.StartsWith("video/") => "video", string s when s.Contains("pdf") => "file-text", _ => "file" }; + + /// + /// EN: Translate order status to Vietnamese. + /// VI: Dịch trạng thái đơn hàng sang tiếng Việt. + /// + public static string OrderStatusLabel(string? status) => status?.ToLowerInvariant() switch + { + "draft" => "Nháp", + "validated" => "Chờ thanh toán", + "paid" => "Đã thanh toán", + "processing" => "Đang xử lý", + "completed" => "Hoàn thành", + "cancelled" => "Đã hủy", + "paymentpending" => "Chờ xác nhận TT", + _ => status ?? "—" + }; + + /// + /// EN: Get CSS badge class for order status. + /// VI: Lấy CSS badge class cho trạng thái đơn hàng. + /// + public static string OrderStatusBadge(string? status) => status?.ToLowerInvariant() switch + { + "completed" or "paid" => "online", + "validated" or "processing" or "paymentpending" => "setup", + "cancelled" => "paused", + _ => "setup" + }; + + /// + /// EN: Translate payment method to Vietnamese. + /// VI: Dịch hình thức thanh toán sang tiếng Việt. + /// + public static string PaymentMethodLabel(string? method) => method?.ToLowerInvariant() switch + { + "cash" => "Tiền mặt", + "card" => "Thẻ", + "qr" => "Mã QR", + "transfer" or "bank_transfer" => "Chuyển khoản", + "vnpay" => "VNPay", + "momo" => "MoMo", + _ => string.IsNullOrEmpty(method) ? "Chưa thanh toán" : method + }; } diff --git a/apps/web-client-tpos-net/src/WebClientTpos.Client/Pages/Admin/Shop/ShopOverview.razor b/apps/web-client-tpos-net/src/WebClientTpos.Client/Pages/Admin/Shop/ShopOverview.razor index 2dbf6968..32f7cbca 100644 --- a/apps/web-client-tpos-net/src/WebClientTpos.Client/Pages/Admin/Shop/ShopOverview.razor +++ b/apps/web-client-tpos-net/src/WebClientTpos.Client/Pages/Admin/Shop/ShopOverview.razor @@ -220,7 +220,7 @@ @o.CreatedAt.ToString("dd/MM HH:mm")
- @(o.Status ?? "—") + @ShopHelpers.OrderStatusLabel(o.Status) @FormatVND(o.TotalAmount)
diff --git a/apps/web-client-tpos-net/src/WebClientTpos.Client/Pages/Admin/Shop/ShopReports.razor b/apps/web-client-tpos-net/src/WebClientTpos.Client/Pages/Admin/Shop/ShopReports.razor index 78fbc9ca..de19c840 100644 --- a/apps/web-client-tpos-net/src/WebClientTpos.Client/Pages/Admin/Shop/ShopReports.razor +++ b/apps/web-client-tpos-net/src/WebClientTpos.Client/Pages/Admin/Shop/ShopReports.razor @@ -153,7 +153,7 @@ @o.Id.ToString()[..8] @ShopHelpers.FormatVND(o.TotalAmount) - @(o.Status ?? "—") + @ShopHelpers.OrderStatusLabel(o.Status) @o.CreatedAt.ToString("dd/MM/yyyy HH:mm") } diff --git a/apps/web-client-tpos-net/src/WebClientTpos.Client/Pages/Pos/Cafe/CafeDesktop.razor b/apps/web-client-tpos-net/src/WebClientTpos.Client/Pages/Pos/Cafe/CafeDesktop.razor index 15a2a0cc..87720d15 100644 --- a/apps/web-client-tpos-net/src/WebClientTpos.Client/Pages/Pos/Cafe/CafeDesktop.razor +++ b/apps/web-client-tpos-net/src/WebClientTpos.Client/Pages/Pos/Cafe/CafeDesktop.razor @@ -1121,11 +1121,14 @@ private static string MapApiStatus(string? status) => status switch { + "Draft" => "Nháp", + "Validated" => "Chờ thanh toán", + "Paid" => "Đã thanh toán", "Completed" or "Delivered" => "Hoàn thành", "Cancelled" => "Đã hủy", "Refunded" => "Hoàn trả", "Processing" => "Đang xử lý", - "Pending" => "Chờ xác nhận", + "Pending" or "PaymentPending" => "Chờ xác nhận TT", _ => status ?? "—" }; @@ -1133,9 +1136,11 @@ { "cash" => "Tiền mặt", "card" => "Thẻ", - "qr" => "QR Code", - "bank_transfer" => "Chuyển khoản", - _ => method ?? "Tiền mặt" + "qr" => "Mã QR", + "transfer" or "bank_transfer" => "Chuyển khoản", + "vnpay" => "VNPay", + "momo" => "MoMo", + _ => string.IsNullOrEmpty(method) ? "Chưa thanh toán" : method }; private async Task ViewOrderDetail(Guid orderId)