Detail.cshtml 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. @page "{id:int}"
  2. @model Admin.Pages.Store.Settlement.DetailModel
  3. @using Domain.Entities.Store.ValueObject
  4. @{
  5. ViewData["Title"] = "정산 상세";
  6. }
  7. <div class="container-fluid">
  8. <h3>@ViewData["Title"]</h3>
  9. <hr />
  10. <partial name="_StatusMessage" />
  11. @if (Model.Data is null)
  12. {
  13. <div class="alert alert-danger">정산 정보를 불러올 수 없습니다.</div>
  14. }
  15. else
  16. {
  17. var d = Model.Data;
  18. var platformRate = 100m - d.GameCommissionRate;
  19. <div class="card mb-3">
  20. <div class="card-header"><strong>정산 기본 정보</strong></div>
  21. <div class="card-body">
  22. <dl class="row mb-0">
  23. <dt class="col-sm-2">게임</dt>
  24. <dd class="col-sm-4"><strong>@d.GameName</strong> <small class="text-muted">(@d.GamePublisher)</small></dd>
  25. <dt class="col-sm-2">정산월</dt>
  26. <dd class="col-sm-4">@d.Year.@(d.Month.ToString("00"))</dd>
  27. <dt class="col-sm-2">매출(게임사 몫)</dt>
  28. <dd class="col-sm-4"><strong>@d.TotalRevenueAmount.ToString("N0") P</strong></dd>
  29. <dt class="col-sm-2">주문 건수</dt>
  30. <dd class="col-sm-4">@d.OrderCount.ToString("N0")건</dd>
  31. <dt class="col-sm-2">수익률(게임사/antooza)</dt>
  32. <dd class="col-sm-4">
  33. @d.GameCommissionRate.ToString("0.##")% / @platformRate.ToString("0.##")%
  34. <br /><small class="text-muted">* 채널 보상률은 주문별 채널 선택에 따라 다름 (Channel.StoreCommissionRate)</small>
  35. </dd>
  36. <dt class="col-sm-2">상태</dt>
  37. <dd class="col-sm-4">
  38. @if (d.Status == GameSettlementStatus.Pending)
  39. {
  40. <span class="badge bg-warning text-dark">@Admin.Pages.Store.Settlement.IndexModel.StatusToText(d.Status)</span>
  41. }
  42. else
  43. {
  44. <span class="badge bg-success">@Admin.Pages.Store.Settlement.IndexModel.StatusToText(d.Status)</span>
  45. }
  46. </dd>
  47. <dt class="col-sm-2">등록 일시</dt>
  48. <dd class="col-sm-4">@d.CreatedAt.ToString("yyyy-MM-dd HH:mm")</dd>
  49. <dt class="col-sm-2">처리 일시</dt>
  50. <dd class="col-sm-4">@(d.SettledAt?.ToString("yyyy-MM-dd HH:mm") ?? "-")</dd>
  51. <dt class="col-sm-2">처리 관리자</dt>
  52. <dd class="col-sm-10">@(d.SettledByAdminEmail ?? "-")</dd>
  53. </dl>
  54. </div>
  55. </div>
  56. @if (d.Status == GameSettlementStatus.Pending)
  57. {
  58. <div class="card mb-3">
  59. <div class="card-header"><strong>정산 완료 처리</strong></div>
  60. <div class="card-body">
  61. <div class="alert alert-info">
  62. 해당 게임사에 위 금액(<strong>@d.TotalRevenueAmount.ToString("N0") P</strong>)을 송금한 후 [정산 완료로 표시] 버튼을 눌러주세요.
  63. 한 번 완료 처리하면 되돌릴 수 없습니다.
  64. </div>
  65. <form method="post" asp-page-handler="MarkSettled" asp-route-id="@d.ID" accept-charset="utf-8">
  66. @Html.AntiForgeryToken()
  67. <div class="row mb-2">
  68. <label asp-for="Input.AdminMemo" class="col-sm-2 col-form-label">관리자 메모</label>
  69. <div class="col-sm-10">
  70. <textarea asp-for="Input.AdminMemo" class="form-control" rows="3" maxlength="500" placeholder="송금 일시, 송금 계좌, 영수증 번호 등 (최대 500자)"></textarea>
  71. <span asp-validation-for="Input.AdminMemo" class="text-danger"></span>
  72. </div>
  73. </div>
  74. <div class="text-end">
  75. <button type="submit" class="btn btn-success" onclick="return confirm('정산 완료로 처리하시겠습니까? 한 번 처리하면 되돌릴 수 없습니다.');">
  76. 정산 완료로 표시
  77. </button>
  78. </div>
  79. </form>
  80. </div>
  81. </div>
  82. }
  83. else
  84. {
  85. <div class="card mb-3">
  86. <div class="card-header"><strong>관리자 메모</strong></div>
  87. <div class="card-body">
  88. <pre class="mb-0">@(string.IsNullOrWhiteSpace(d.AdminMemo) ? "-" : d.AdminMemo)</pre>
  89. </div>
  90. </div>
  91. }
  92. <div class="d-flex justify-content-end gap-2">
  93. <a class="btn btn-secondary" asp-page="/Store/Settlement/Index">목록</a>
  94. </div>
  95. }
  96. </div>