mirror of
https://github.com/Tria-plc/edr-platform.git
synced 2026-08-30 14:38:12 +00:00
85 lines
3.1 KiB
TypeScript
85 lines
3.1 KiB
TypeScript
import { Body, Controller, Get, Param, Post, Query } from "@nestjs/common";
|
|
import { ApiTags, ApiOperation, ApiBearerAuth } from "@nestjs/swagger";
|
|
import { ReportsService } from "./reports.service";
|
|
import { GenerateReportDto } from "./reports.dto";
|
|
import { PassengerStaff } from "../../common/passenger-guards";
|
|
import { PASSENGER_PERMS } from "../../seed/passenger-permissions.registry";
|
|
|
|
@ApiTags("Reports")
|
|
@Controller("reports")
|
|
@PassengerStaff([PASSENGER_PERMS.reports.view, PASSENGER_PERMS.admin])
|
|
@ApiBearerAuth("IAM-auth")
|
|
export class ReportsController {
|
|
constructor(private service: ReportsService) {}
|
|
|
|
@Post("generate")
|
|
@ApiOperation({ summary: "Generate operational report" })
|
|
generateReport(@Body() dto: GenerateReportDto) {
|
|
return this.service.generateReport(dto);
|
|
}
|
|
|
|
@Get('schedules')
|
|
@ApiOperation({ summary: 'List schedules for the passengers report picker' })
|
|
listSchedulesForPicker(@Query('all') all?: string) {
|
|
return this.service.listSchedulesForPicker(all === 'true');
|
|
}
|
|
|
|
@Get("passengers/list")
|
|
@ApiOperation({ summary: "Flat passenger list for a specific schedule" })
|
|
getPassengerList(@Query("scheduleId") scheduleId: string) {
|
|
return this.service.getPassengerList(scheduleId);
|
|
}
|
|
|
|
@Get("passengers")
|
|
@ApiOperation({ summary: "Passengers report for a specific schedule" })
|
|
getOccupancyReport(@Query("scheduleId") scheduleId: string) {
|
|
return this.service.getOccupancyBySchedule(scheduleId);
|
|
}
|
|
|
|
@Get("payment-discrepancy")
|
|
@ApiOperation({ summary: "Payment discrepancy report — bookings where paid amount is less than the fare. Pass `search` to look up a specific PNR or ticket number." })
|
|
getPaymentDiscrepancy(
|
|
@Query('from') from?: string,
|
|
@Query('to') to?: string,
|
|
@Query('sortBy') sortBy?: string,
|
|
@Query('search') search?: string,
|
|
) {
|
|
return this.service.getPaymentDiscrepancyReport({ from, to, sortBy, search });
|
|
}
|
|
|
|
@Get("seat-status")
|
|
@ApiOperation({ summary: "Seat status breakdown for a schedule (paid, unpaid, expired holds, blocked)" })
|
|
getSeatStatusReport(@Query('scheduleId') scheduleId: string) {
|
|
return this.service.getSeatStatusReport(scheduleId);
|
|
}
|
|
|
|
@Get("payments")
|
|
@ApiOperation({ summary: "Payments collected for a schedule" })
|
|
getPaymentsReport(@Query('scheduleId') scheduleId: string) {
|
|
return this.service.getPaymentsReport(scheduleId);
|
|
}
|
|
|
|
@Get("payments/discrepancy")
|
|
@ApiOperation({ summary: "Payment discrepancy breakdown for a schedule" })
|
|
getPaymentDiscrepancyBySchedule(
|
|
@Query('scheduleId') scheduleId: string,
|
|
@Query('search') search?: string,
|
|
@Query('seatClass') seatClass?: string,
|
|
@Query('sort') sort?: string,
|
|
) {
|
|
return this.service.getPaymentDiscrepancyBySchedule(scheduleId, { search, seatClass, sort });
|
|
}
|
|
|
|
@Get(":reportId")
|
|
@ApiOperation({ summary: "Get report by ID" })
|
|
getReport(@Param("reportId") reportId: string) {
|
|
return this.service.getReport(reportId);
|
|
}
|
|
|
|
@Get()
|
|
@ApiOperation({ summary: "List reports" })
|
|
listReports(@Query("type") type?: string) {
|
|
return this.service.listReports(type);
|
|
}
|
|
}
|