_RewardHistoryList.cshtml 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. @model LotteryWebApp.Models.RewardHistoryModel
  2. @using LotteryWebApp.Languages
  3. @using LotteryWebApp.Common
  4. @functions {
  5. public string FormatMoney(string amount) {
  6. if (string.IsNullOrEmpty(amount)) return "0";
  7. var clean = new string(amount.Where(c => char.IsDigit(c)).ToArray());
  8. if (long.TryParse(clean, out long val)) {
  9. return val.ToString("#,##0", new System.Globalization.CultureInfo("vi-VN")).Replace(",", ".");
  10. }
  11. return amount;
  12. }
  13. public string FormatTime(string raw) {
  14. if (string.IsNullOrEmpty(raw)) return "-";
  15. string[] formats = { "M/d/yyyy h:mm:ss tt", "MM/dd/yyyy h:mm:ss tt", "dd/MM/yyyy HH:mm:ss", "yyyy-MM-dd HH:mm:ss" };
  16. if (System.DateTime.TryParseExact(raw, formats, System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None, out var dt)
  17. || System.DateTime.TryParse(raw, System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None, out dt)) {
  18. return dt.ToString("dd/MM/yyyy HH:mm", new System.Globalization.CultureInfo("en-US"));
  19. }
  20. return raw;
  21. }
  22. public (string cls, string label) MapStatus(string status) {
  23. switch (status) {
  24. case "1": return ("reward-status-success", "Success");
  25. case "0": return ("reward-status-processing", "Processing");
  26. case "2": return ("reward-status-pending", "Pending");
  27. case "3": return ("reward-status-reverted", "Reverted");
  28. default: return ("reward-status-unknown", string.IsNullOrEmpty(status) ? "-" : status);
  29. }
  30. }
  31. public string MapPayment(string channelPayment) {
  32. if (channelPayment == "1") return "Wallet";
  33. if (channelPayment == "0") return "Main Account";
  34. return "-";
  35. }
  36. }
  37. @if (Model != null && Model.list != null && Model.list.Count > 0)
  38. {
  39. foreach (var t in Model.list)
  40. {
  41. var (statusCls, statusLabel) = MapStatus(t.status);
  42. <div class="reward-card animate__animated animate__fadeInUp">
  43. <div class="reward-card-top">
  44. <div class="reward-card-header">
  45. <span class="reward-id">#@(t.seq ?? t.id ?? "-")</span>
  46. <span class="reward-status @statusCls">@statusLabel</span>
  47. </div>
  48. <div class="reward-amount-wrap">
  49. <span class="reward-amount">@FormatMoney(t.money)</span>
  50. <span class="reward-currency">HTG</span>
  51. </div>
  52. </div>
  53. <div class="reward-card-perforation"></div>
  54. <div class="reward-card-bottom">
  55. <div class="reward-info-grid">
  56. <div class="reward-info-row">
  57. <span class="reward-info-label">From</span>
  58. <span class="reward-info-value">@(string.IsNullOrEmpty(t.acountSend) ? "-" : t.acountSend)</span>
  59. </div>
  60. <div class="reward-info-row">
  61. <span class="reward-info-label">To</span>
  62. <span class="reward-info-value">@(string.IsNullOrEmpty(t.acountRecieve) ? "-" : t.acountRecieve)</span>
  63. </div>
  64. <div class="reward-info-row">
  65. <span class="reward-info-label">Time</span>
  66. <span class="reward-info-value">@FormatTime(t.timeRequest)</span>
  67. </div>
  68. <div class="reward-info-row">
  69. <span class="reward-info-label">Method</span>
  70. <span class="reward-info-value">@MapPayment(t.channelPayment)</span>
  71. </div>
  72. </div>
  73. </div>
  74. </div>
  75. }
  76. @if (!string.IsNullOrEmpty(Model.totalPage) && int.TryParse(Model.totalPage, out var total) && total > 1)
  77. {
  78. var seq = int.TryParse(Model.seqPage, out var s) ? s : 1;
  79. <div class="reward-pagination">
  80. <button onclick="changeRewardPage(currentSeqPage - 1)" class="reward-page-btn" id="prevPage" @(seq <= 1 ? "disabled" : "")>
  81. <i class="fas fa-chevron-left mr-1"></i> Prev
  82. </button>
  83. <div class="reward-page-indicator">
  84. <span class="reward-page-label">Page</span>
  85. <span class="reward-page-value" id="pageDisplay">@Model.seqPage / @Model.totalPage</span>
  86. </div>
  87. <button onclick="changeRewardPage(currentSeqPage + 1)" class="reward-page-btn" id="nextPage" @(seq >= total ? "disabled" : "")>
  88. Next <i class="fas fa-chevron-right ml-1"></i>
  89. </button>
  90. </div>
  91. <script>
  92. totalPages = parseInt('@Model.totalPage');
  93. </script>
  94. }
  95. else
  96. {
  97. <div class="w-full pb-32"></div>
  98. }
  99. }
  100. else
  101. {
  102. <div class="reward-empty">
  103. <i class="fa-solid fa-gift"></i>
  104. <p>@Lang.no_results_found</p>
  105. </div>
  106. }