Index.cshtml
3,565 bytes
| 1 | @model AdminExpenseIndexViewModel |
|---|---|
| 2 | @using App.Domain |
| 3 | |
| 4 | <div class="admin-page-header"> |
| 5 | <div> |
| 6 | <h1><i class="bi bi-cash-coin me-2"></i>@Localizer["Expenses"]</h1> |
| 7 | <p class="lead">@Localizer["Manage all expenses across trips"]</p> |
| 8 | </div> |
| 9 | <a asp-action="Create" class="btn btn-primary"> |
| 10 | <i class="bi bi-plus-lg me-1"></i>@Localizer["New"] |
| 11 | </a> |
| 12 | </div> |
| 13 | |
| 14 | <div class="admin-card mb-3"> |
| 15 | <div class="admin-card-body"> |
| 16 | <form method="get" class="row g-2 align-items-end"> |
| 17 | <div class="col-auto"> |
| 18 | <select name="tripId" class="form-select"> |
| 19 | <option value="">— @Localizer["All"] —</option> |
| 20 | @foreach (var t in Model.Trips) |
| 21 | { |
| 22 | <option value="@t.Id" selected="@(Model.CurrentTripId?.ToString() == t.Id.ToString())">@t.Name</option> |
| 23 | } |
| 24 | </select> |
| 25 | </div> |
| 26 | <div class="col-auto"> |
| 27 | <input type="text" name="search" value="@Model.CurrentSearch" class="form-control" placeholder="@Localizer["Search..."]" /> |
| 28 | </div> |
| 29 | <div class="col-auto"> |
| 30 | <button type="submit" class="btn btn-outline-primary"><i class="bi bi-search me-1"></i>@Localizer["Search"]</button> |
| 31 | </div> |
| 32 | </form> |
| 33 | </div> |
| 34 | </div> |
| 35 | |
| 36 | <div class="admin-card"> |
| 37 | <div class="admin-card-body p-0"> |
| 38 | @if (Model.Items.Any()) |
| 39 | { |
| 40 | <table class="table admin-table mb-0"> |
| 41 | <thead> |
| 42 | <tr> |
| 43 | <th>@Localizer["Description"]</th> |
| 44 | <th>@Localizer["Trip"]</th> |
| 45 | <th>@Localizer["PaidByUser"]</th> |
| 46 | <th>@Localizer["SplitMethod"]</th> |
| 47 | <th class="text-end">@Localizer["Amount"]</th> |
| 48 | <th>@Localizer["ExpenseDate"]</th> |
| 49 | <th class="text-end">@Localizer["Actions"]</th> |
| 50 | </tr> |
| 51 | </thead> |
| 52 | <tbody> |
| 53 | @foreach (var item in Model.Items) |
| 54 | { |
| 55 | <tr> |
| 56 | <td>@item.Description</td> |
| 57 | <td>@item.Trip?.Name</td> |
| 58 | <td>@item.PaidByUser?.Email</td> |
| 59 | <td>@WebApp.Helpers.EnumHelper.GetDisplayName(item.SplitMethod)</td> |
| 60 | <td class="text-end fw-bold">@item.Amount</td> |
| 61 | <td>@item.ExpenseDate.ToString("d")</td> |
| 62 | <td class="text-end"> |
| 63 | <div class="admin-action-group"> |
| 64 | <a asp-action="Details" asp-route-id="@item.Id" class="btn btn-outline-secondary btn-sm" title="@Localizer["Details"]"><i class="bi bi-eye"></i></a> |
| 65 | <a asp-action="Edit" asp-route-id="@item.Id" class="btn btn-outline-primary btn-sm" title="@Localizer["Edit"]"><i class="bi bi-pencil"></i></a> |
| 66 | <a asp-action="Delete" asp-route-id="@item.Id" class="btn btn-outline-danger btn-sm" title="@Localizer["Delete"]"><i class="bi bi-trash"></i></a> |
| 67 | </div> |
| 68 | </td> |
| 69 | </tr> |
| 70 | } |
| 71 | </tbody> |
| 72 | </table> |
| 73 | } |
| 74 | else |
| 75 | { |
| 76 | <div class="admin-empty"> |
| 77 | <i class="bi bi-inbox"></i> |
| 78 | <div>@Localizer["No items yet"]</div> |
| 79 | </div> |
| 80 | } |
| 81 | </div> |
| 82 | </div> |
| 83 | |