87 lines
2.8 KiB
TypeScript
87 lines
2.8 KiB
TypeScript
import { PrismaClient, LeaveApprovalStatus, LeaveTypes } from '@prisma/client';
|
|
|
|
if (process.env.SKIP_LEAVE_REQUESTS === 'true') {
|
|
console.log('?? Seed leave-requests ignoré (SKIP_LEAVE_REQUESTS=true)');
|
|
process.exit(0);
|
|
}
|
|
|
|
const prisma = new PrismaClient();
|
|
|
|
function daysAgo(n: number) {
|
|
const d = new Date();
|
|
d.setUTCDate(d.getUTCDate() - n);
|
|
d.setUTCHours(0, 0, 0, 0);
|
|
return d;
|
|
}
|
|
|
|
async function main() {
|
|
const employees = await prisma.employees.findMany({ select: { id: true } });
|
|
if (!employees.length) {
|
|
throw new Error('Aucun employé trouvé. Exécute le seed employees avant celui-ci.');
|
|
}
|
|
|
|
const leaveCodes = await prisma.bankCodes.findMany({
|
|
where: { type: { in: ['SICK', 'VACATION', 'HOLIDAY'] } },
|
|
select: { id: true, type: true },
|
|
});
|
|
if (!leaveCodes.length) {
|
|
throw new Error("Aucun bank code trouvé avec type in ('SICK','VACATION','HOLIDAY'). Vérifie ta table bank_codes.");
|
|
}
|
|
|
|
const statuses = Object.values(LeaveApprovalStatus);
|
|
const created = [] as Array<{ id: number; employee_id: number; leave_type: LeaveTypes; date: Date; comment: string; approval_status: LeaveApprovalStatus; requested_hours: number; payable_hours: number | null }>;
|
|
|
|
const COUNT = 12;
|
|
for (let i = 0; i < COUNT; i++) {
|
|
const emp = employees[i % employees.length];
|
|
const leaveCode = leaveCodes[Math.floor(Math.random() * leaveCodes.length)];
|
|
|
|
const date = daysAgo(120 - i * 3);
|
|
const status = statuses[(i + 2) % statuses.length];
|
|
const requestedHours = 4 + (i % 5); // 4 ? 8 h
|
|
const payableHours = status === LeaveApprovalStatus.APPROVED ? Math.min(requestedHours, 8) : null;
|
|
|
|
const lr = await prisma.leaveRequests.create({
|
|
data: {
|
|
employee_id: emp.id,
|
|
bank_code_id: leaveCode.id,
|
|
leave_type: leaveCode.type as LeaveTypes,
|
|
date,
|
|
comment: `Past leave #${i + 1} (${leaveCode.type})`,
|
|
approval_status: status,
|
|
requested_hours: requestedHours,
|
|
payable_hours: payableHours,
|
|
},
|
|
});
|
|
|
|
created.push({
|
|
id: lr.id,
|
|
employee_id: lr.employee_id,
|
|
leave_type: lr.leave_type,
|
|
date: lr.date,
|
|
comment: lr.comment,
|
|
approval_status: lr.approval_status,
|
|
requested_hours: requestedHours,
|
|
payable_hours: payableHours,
|
|
});
|
|
}
|
|
|
|
for (const lr of created) {
|
|
await prisma.leaveRequestsArchive.create({
|
|
data: {
|
|
leave_request_id: lr.id,
|
|
employee_id: lr.employee_id,
|
|
leave_type: lr.leave_type,
|
|
date: lr.date,
|
|
comment: lr.comment,
|
|
approval_status: lr.approval_status,
|
|
requested_hours: lr.requested_hours,
|
|
payable_hours: lr.payable_hours,
|
|
},
|
|
});
|
|
}
|
|
|
|
console.log(`? LeaveRequestsArchive: ${created.length} rows`);
|
|
}
|
|
|
|
main().finally(() => prisma.$disconnect()); |