94 lines
2.6 KiB
TypeScript
94 lines
2.6 KiB
TypeScript
import { PrismaClient, Roles } from '@prisma/client';
|
||
|
||
const prisma = new PrismaClient();
|
||
|
||
function randInt(min: number, max: number) {
|
||
return Math.floor(Math.random() * (max - min + 1)) + min;
|
||
}
|
||
|
||
function randomPastDate(yearsBack = 3) {
|
||
const now = new Date();
|
||
const past = new Date(now);
|
||
past.setFullYear(now.getFullYear() - yearsBack);
|
||
const t = randInt(past.getTime(), now.getTime());
|
||
const d = new Date(t);
|
||
d.setHours(0, 0, 0, 0);
|
||
return d;
|
||
}
|
||
|
||
const jobTitles = [
|
||
'Directeur des ventes',
|
||
'Directeur technique',
|
||
'Programmeur',
|
||
'Technicien',
|
||
'Comptable',
|
||
'Magasinier',
|
||
'Responsable Resources Humaines',
|
||
'Conseiller en vente',
|
||
'Support technique',
|
||
];
|
||
|
||
function randomTitle() {
|
||
return jobTitles[randInt(0, jobTitles.length - 1)];
|
||
}
|
||
|
||
// Sélection aléatoire entre 271583 et 271585
|
||
function randomCompanyCode() {
|
||
return Math.random() < 0.5 ? 271583 : 271585;
|
||
}
|
||
|
||
async function main() {
|
||
const employeeUsers = await prisma.users.findMany({
|
||
where: { role: { in: [Roles.ADMIN, Roles.SUPERVISOR, Roles.HR, Roles.ACCOUNTING, Roles.EMPLOYEE] } },
|
||
orderBy: { email: 'asc' },
|
||
});
|
||
|
||
// 1) Trouver le user qui sera le superviseur fixe
|
||
const supervisorUser = await prisma.users.findUnique({
|
||
where: { email: 'user5@example.test' },
|
||
});
|
||
if (!supervisorUser) {
|
||
throw new Error("Le user 'user5@example.test' n'existe pas !");
|
||
}
|
||
|
||
// 2) Créer ou récupérer son employee avec is_supervisor = true
|
||
const supervisorEmp = await prisma.employees.upsert({
|
||
where: { user_id: supervisorUser.id },
|
||
update: { is_supervisor: true },
|
||
create: {
|
||
user_id: supervisorUser.id,
|
||
external_payroll_id: randInt(10000, 99999),
|
||
company_code: randomCompanyCode(),
|
||
first_work_day: randomPastDate(3),
|
||
last_work_day: null,
|
||
job_title: randomTitle(),
|
||
is_supervisor: true,
|
||
},
|
||
});
|
||
|
||
// 3) Créer tous les autres employés avec ce superviseur (sauf ADMIN qui n’a pas de superviseur)
|
||
for (const u of employeeUsers) {
|
||
const already = await prisma.employees.findUnique({ where: { user_id: u.id } });
|
||
if (already) continue;
|
||
|
||
const supervisor_id = u.role === Roles.ADMIN ? null : supervisorEmp.id;
|
||
|
||
await prisma.employees.create({
|
||
data: {
|
||
user_id: u.id,
|
||
external_payroll_id: randInt(10000, 99999),
|
||
company_code: randomCompanyCode(),
|
||
first_work_day: randomPastDate(3),
|
||
last_work_day: null,
|
||
supervisor_id,
|
||
job_title: randomTitle(),
|
||
},
|
||
});
|
||
}
|
||
|
||
const total = await prisma.employees.count();
|
||
console.log(`✓ Employees: ${total} rows (supervisor = ${supervisorUser.email})`);
|
||
}
|
||
|
||
main().finally(() => prisma.$disconnect());
|