targo-backend/src/identity-and-account/employees/services/employees-archival.service.ts

174 lines
7.5 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 { Injectable } from "@nestjs/common";
// import { Employees, Users } from "@prisma/client";
// // import { UpdateEmployeeDto } from "src/identity-and-account/employees/dtos/update-employee.dto";
// import { toDateOrUndefined, toDateOrNull } from "src/identity-and-account/employees/utils/employee.utils";
// import { PrismaService } from "src/prisma/prisma.service";
// @Injectable()
// export class EmployeesArchivalService {
// constructor(private readonly prisma: PrismaService) { }
// async patchEmployee(email: string, dto: UpdateEmployeeDto): Promise<Employees | null> {
// // 1) Tenter sur employés actifs
// const active = await this.prisma.employees.findFirst({
// where: { user: { email } },
// include: { user: true },
// });
// if (active) {
// // Archivage : si on reçoit un last_work_day défini et que l'employé nest pas déjà terminé
// // if (dto.last_work_day !== undefined && active.last_work_day == null && dto.last_work_day !== null) {
// // return this.archiveOnTermination(active, dto);
// // }
// // Sinon, update standard (split Users/Employees)
// const {
// first_name,
// last_name,
// email: new_email,
// phone_number,
// residence,
// external_payroll_id,
// company_code,
// job_title,
// first_work_day,
// last_work_day,
// supervisor_id,
// is_supervisor,
// } = dto as any;
// const first_work_d = toDateOrUndefined(first_work_day);
// const last_work_d = Object.prototype.hasOwnProperty('last_work_day')
// ? toDateOrNull(last_work_day ?? null)
// : undefined;
// await this.prisma.$transaction(async (transaction) => {
// if (
// first_name !== undefined ||
// last_name !== undefined ||
// new_email !== undefined ||
// phone_number !== undefined ||
// residence !== undefined
// ) {
// await transaction.users.update({
// where: { id: active.user_id },
// data: {
// ...(first_name !== undefined ? { first_name } : {}),
// ...(last_name !== undefined ? { last_name } : {}),
// ...(email !== undefined ? { email: new_email } : {}),
// ...(phone_number !== undefined ? { phone_number } : {}),
// ...(residence !== undefined ? { residence } : {}),
// },
// });
// }
// const updated = await transaction.employees.update({
// where: { id: active.id },
// data: {
// ...(external_payroll_id !== undefined ? { external_payroll_id } : {}),
// ...(company_code !== undefined ? { company_code } : {}),
// ...(job_title !== undefined ? { job_title } : {}),
// ...(first_work_d !== undefined ? { first_work_day: first_work_d } : {}),
// ...(last_work_d !== undefined ? { last_work_day: last_work_d } : {}),
// ...(is_supervisor !== undefined ? { is_supervisor } : {}),
// ...(supervisor_id !== undefined ? { supervisor_id } : {}),
// },
// include: { user: true },
// });
// return updated;
// });
// return this.prisma.employees.findFirst({ where: { user: { email } } });
// }
// const user = await this.prisma.users.findUnique({ where: { email } });
// if (!user) return null;
// // 2) Pas trouvé en actifs → regarder en archive (pour restauration)
// // const archived = await this.prisma.employeesArchive.findFirst({
// // where: { user_id: user.id },
// // include: { user: true },
// // });
// // if (archived) {
// // // Condition de restauration : last_work_day === null ou first_work_day fourni
// // const restore = dto.last_work_day === null || dto.first_work_day != null;
// // if (restore) {
// // return this.restoreEmployee(archived, dto);
// // }
// // }
// // 3) Ni actif, ni archivé → 404 dans le controller
// return null;
// }
// //transfers the employee to archive and then delete from employees table
// // private async archiveOnTermination(active: Employees & { user: Users }, dto: UpdateEmployeeDto): Promise<EmployeesArchive> {
// // const last_work_d = toDateOrNull(dto.last_work_day!);
// // if (!last_work_d) throw new Error('invalide last_work_day for archive');
// // return this.prisma.$transaction(async transaction => {
// // //detach crew from supervisor if employee is a supervisor
// // await transaction.employees.updateMany({
// // where: { supervisor_id: active.id },
// // data: { supervisor_id: null },
// // })
// // const archived = await transaction.employeesArchive.create({
// // data: {
// // employee_id: active.id,
// // user_id: active.user_id,
// // first_name: active.user.first_name,
// // last_name: active.user.last_name,
// // company_code: active.company_code,
// // job_title: active.job_title,
// // first_work_day: active.first_work_day,
// // last_work_day: last_work_d,
// // supervisor_id: active.supervisor_id ?? null,
// // is_supervisor: active.is_supervisor,
// // external_payroll_id: active.external_payroll_id,
// // },
// // include: { user: true }
// // });
// // //delete from employees table
// // await transaction.employees.delete({ where: { id: active.id } });
// // //return archived employee
// // return archived
// // });
// // }
// // //transfers the employee from archive to the employees table
// // private async restoreEmployee(archived: EmployeesArchive & { user: Users }, dto: UpdateEmployeeDto): Promise<Employees> {
// // // const first_work_d = toDateOrUndefined(dto.first_work_day);
// // return this.prisma.$transaction(async transaction => {
// // //restores the archived employee into the employees table
// // const restored = await transaction.employees.create({
// // data: {
// // user_id: archived.user_id,
// // company_code: archived.company_code,
// // job_title: archived.job_title,
// // first_work_day: archived.first_work_day,
// // last_work_day: null,
// // is_supervisor: archived.is_supervisor ?? false,
// // external_payroll_id: archived.external_payroll_id,
// // },
// // });
// // //deleting archived entry by id
// // await transaction.employeesArchive.delete({ where: { id: archived.id } });
// // //return restored employee
// // return restored;
// // });
// // }
// // //fetches all archived employees
// // async findAllArchived(): Promise<EmployeesArchive[]> {
// // return this.prisma.employeesArchive.findMany();
// // }
// // //fetches an archived employee
// // async findOneArchived(id: number): Promise<EmployeesArchive> {
// // return this.prisma.employeesArchive.findUniqueOrThrow({ where: { id } });
// // }
// }