mirror of
https://github.com/Tria-plc/edr-platform.git
synced 2026-08-30 06:28:12 +00:00
Refactor business logic for train,schedule,coach,seat and search modules
This commit is contained in:
@@ -69,37 +69,23 @@ export class ReportsService {
|
||||
}
|
||||
|
||||
private async generateOccupancyReport(dateFrom: Date, dateTo: Date) {
|
||||
const trips = await this.prisma.trip.findMany({
|
||||
const schedules = await this.prisma.trainSchedule.findMany({
|
||||
where: { departureAt: { gte: dateFrom, lte: dateTo } },
|
||||
include: {
|
||||
coaches: { include: { seats: true } },
|
||||
bookings: { where: { status: { in: ['CONFIRMED', 'COMPLETED'] } }, include: { seats: true } }
|
||||
}
|
||||
coachAssignments: { include: { coach: { include: { seats: true } } } },
|
||||
bookings: { where: { status: { in: ['CONFIRMED', 'COMPLETED'] } }, include: { seats: true } },
|
||||
},
|
||||
});
|
||||
|
||||
const tripData = trips.map(trip => {
|
||||
const totalSeats = trip.coaches.reduce((sum, c) => sum + c.seats.length, 0);
|
||||
const bookedSeats = trip.bookings.reduce((sum, b) => sum + b.seats.length, 0);
|
||||
const tripData = schedules.map(schedule => {
|
||||
const totalSeats = schedule.coachAssignments.reduce((sum, a) => sum + a.coach.seats.length, 0);
|
||||
const bookedSeats = schedule.bookings.reduce((sum, b) => sum + b.seats.length, 0);
|
||||
const occupancyRate = totalSeats > 0 ? (bookedSeats / totalSeats) * 100 : 0;
|
||||
|
||||
return {
|
||||
tripId: trip.id,
|
||||
departureAt: trip.departureAt,
|
||||
totalSeats,
|
||||
bookedSeats,
|
||||
occupancyRate: +occupancyRate.toFixed(2)
|
||||
};
|
||||
return { scheduleId: schedule.id, departureAt: schedule.departureAt, totalSeats, bookedSeats, occupancyRate: +occupancyRate.toFixed(2) };
|
||||
});
|
||||
|
||||
const avgOccupancy = tripData.length > 0
|
||||
? tripData.reduce((sum, t) => sum + t.occupancyRate, 0) / tripData.length
|
||||
: 0;
|
||||
|
||||
return {
|
||||
totalTrips: trips.length,
|
||||
averageOccupancyRate: +avgOccupancy.toFixed(2),
|
||||
trips: tripData
|
||||
};
|
||||
const avgOccupancy = tripData.length > 0 ? tripData.reduce((sum, t) => sum + t.occupancyRate, 0) / tripData.length : 0;
|
||||
return { totalSchedules: schedules.length, averageOccupancyRate: +avgOccupancy.toFixed(2), schedules: tripData };
|
||||
}
|
||||
|
||||
private async generateAgentSalesReport(dateFrom: Date, dateTo: Date, agentId?: string) {
|
||||
|
||||
Reference in New Issue
Block a user