80 lines
2.4 KiB
TypeScript
80 lines
2.4 KiB
TypeScript
import { PrismaClient, LeaveApprovalStatus, LeaveRequests } 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() {
|
||
// 1) Récupère tous les employés
|
||
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.');
|
||
}
|
||
|
||
// 2) Va chercher les bank codes dont le type est SICK, VACATION ou HOLIDAY
|
||
const leaveCodes = await prisma.bankCodes.findMany({
|
||
where: { type: { in: ['SICK', 'VACATION'] } },
|
||
select: { id: true, type: true, bank_code: 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: LeaveRequests[] = [];
|
||
|
||
// 3) Crée quelques leave requests
|
||
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 start = daysAgo(120 - i * 3);
|
||
const end = Math.random() < 0.6 ? daysAgo(119 - i * 3) : null;
|
||
|
||
const lr = await prisma.leaveRequests.create({
|
||
data: {
|
||
employee_id: emp.id,
|
||
bank_code_id: leaveCode.id,
|
||
// on stocke le "type" tel qu’il est défini dans bank_codes
|
||
leave_type: leaveCode.type as any,
|
||
start_date_time: start,
|
||
end_date_time: end,
|
||
comment: `Past leave #${i + 1} (${leaveCode.type})`,
|
||
approval_status: statuses[(i + 2) % statuses.length],
|
||
},
|
||
});
|
||
|
||
created.push(lr);
|
||
}
|
||
|
||
// 4) Archive
|
||
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,
|
||
start_date_time: lr.start_date_time,
|
||
end_date_time: lr.end_date_time,
|
||
comment: lr.comment,
|
||
approval_status: lr.approval_status,
|
||
},
|
||
});
|
||
}
|
||
|
||
console.log(`✓ LeaveRequestsArchive: ${created.length} rows`);
|
||
}
|
||
|
||
main().finally(() => prisma.$disconnect());
|