targo-backend/prisma/mock-seeds-scripts/03-employees.ts
2025-08-29 09:36:13 -04:00

94 lines
2.6 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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 na 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());