UAT findings resolutions and enhancements

This commit is contained in:
Stephanos A
2026-07-01 09:03:09 +03:00
parent be9c6c4adb
commit b50a386b25
14 changed files with 743 additions and 535 deletions

View File

@@ -593,6 +593,58 @@ export class FleetService {
};
}
async getCoachUtilization() {
const coaches = await this.prisma.coach.findMany({
include: {
coachType: true,
seats: { select: { id: true, status: true } },
assignments: {
include: {
schedule: {
select: { id: true, departureAt: true, status: true, _count: { select: { bookings: true } } },
},
},
orderBy: { schedule: { departureAt: 'desc' } },
take: 10,
},
},
orderBy: { sequence: 'asc' },
});
return coaches.map((coach) => {
const totalSeats = coach.seats.length;
const bookedSeats = coach.seats.filter((s) => s.status === 'BOOKED').length;
const blockedSeats = coach.seats.filter((s) => s.status === 'BLOCKED').length;
const maintenanceSeats = coach.seats.filter((s) => (s.status as string) === 'UNDER_MAINTENANCE').length;
const availableSeats = coach.seats.filter((s) => s.status === 'AVAILABLE').length;
const totalAssignments = coach.assignments.length;
const totalBookings = coach.assignments.reduce((sum, a) => sum + ((a.schedule as any)._count?.bookings ?? 0), 0);
const utilizationRate = totalSeats > 0 ? +((bookedSeats / totalSeats) * 100).toFixed(2) : 0;
return {
id: coach.id,
number: coach.number,
sequence: coach.sequence,
coachType: coach.coachType?.name,
status: coach.status,
totalSeats,
availableSeats,
bookedSeats,
blockedSeats,
maintenanceSeats,
utilizationRate,
totalAssignments,
totalBookings,
recentSchedules: coach.assignments.slice(0, 5).map((a) => ({
scheduleId: a.scheduleId,
departureAt: a.schedule.departureAt,
scheduleStatus: a.schedule.status,
bookings: (a.schedule as any)._count?.bookings ?? 0,
})),
};
});
}
async getAnalytics() {
const [totalTrains, totalSchedules, totalSeats, bookedSeats] = await Promise.all([
this.prisma.train.count(),