@page "/trip-reports" @rendermode InteractiveServer

Trip Reports

System generated consolidated cost per trip, in line with NT Cost Containment reporting

Trip TRP-2026-0488, J. Mokoena, Cape Town engagement

Travel Authorisation TA-44219, dated 02 to 04 Jun 2026

All components consolidated
@foreach (var item in ConsolidatedItems) { }
Component Supplier Reference Date Negotiated Amount
@item.Component @item.Supplier @item.Reference @item.Date @item.Negotiated @item.Amount
Total trip cost R 12,960.00
Savings against open rates R 1,840.00

Standard Monthly Reports

Auto-issued per NT Cost Containment template

@foreach (var report in MonthlyReports) {
@report.Title
@report.Description
}

SLA Reports

Per the SAQA SLA template

@foreach (var report in SlaReports) {
@report.Title
@report.Description
}
@code { public class ReportItem { public string Component { get; set; } = string.Empty; public string Supplier { get; set; } = string.Empty; public string Reference { get; set; } = string.Empty; public string Date { get; set; } = string.Empty; public string Negotiated { get; set; } = string.Empty; public string Amount { get; set; } = string.Empty; public string Type { get; set; } = "default"; } public class ReportInfo { public string Title { get; set; } = string.Empty; public string Description { get; set; } = string.Empty; } private List ConsolidatedItems = new() { new ReportItem { Component = "Flight (out)", Supplier = "SAA, SA 311", Reference = "AB23PQ", Date = "02 Jun", Negotiated = "Yes, 12 percent off", Amount = "R 2,890.00", Type = "blue" }, new ReportItem { Component = "Flight (return)", Supplier = "SAA, SA 322", Reference = "AB23PQ", Date = "04 Jun", Negotiated = "Yes", Amount = "R 2,640.00", Type = "blue" }, new ReportItem { Component = "Hotel", Supplier = "Premier Hotel Waterfront", Reference = "HT7811", Date = "02 to 04 Jun, 2 nights", Negotiated = "Govt rate", Amount = "R 3,790.00", Type = "default" }, new ReportItem { Component = "Car rental", Supplier = "Avis, Group B", Reference = "AV1140", Date = "02 to 04 Jun, 3 days", Negotiated = "Yes", Amount = "R 1,420.00", Type = "gold" }, new ReportItem { Component = "Shuttle", Supplier = "SA Express Shuttle", Reference = "SX0921", Date = "02 Jun", Negotiated = "No", Amount = "R 380.00", Type = "default" }, new ReportItem { Component = "Daily allowance", Supplier = "SAQA per diem policy", Reference = "PD-019", Date = "3 days", Negotiated = "n/a", Amount = "R 1,560.00", Type = "default" }, new ReportItem { Component = "Service fee", Supplier = "TMT Projects", Reference = "SF-2026-0488", Date = "02 Jun", Negotiated = "Flat", Amount = "R 280.00", Type = "green" } }; private List MonthlyReports = new() { new ReportInfo { Title = "Cost per trip report", Description = "Consolidated, all components, all travellers" }, new ReportInfo { Title = "Spend by category", Description = "Air, accommodation, ground, other" }, new ReportInfo { Title = "Traveller activity", Description = "Per cost centre and per traveller" } }; private List SlaReports = new() { new ReportInfo { Title = "After hours report", Description = "All out of hours support events" }, new ReportInfo { Title = "Consultant productivity", Description = "Bookings handled per consultant" }, new ReportInfo { Title = "Refund and open voucher log", Description = "Status of all open items" } }; private string GetComponentBadgeClass(string type) { return type switch { "blue" => "bg-[#e2eefb] text-[#0066b3]", "green" => "bg-[#e3f6ed] text-[#22a06b]", "gold" => "bg-[#fff4dd] text-[#b06b00]", _ => "bg-[#e8f4f4] text-[#00a3a1]" }; } }