fix(prefs): small fix
This commit is contained in:
parent
822763db2b
commit
42060ad9b4
|
|
@ -1,165 +1,165 @@
|
|||
import { PrismaClient as Prisma } from "@prisma/client";
|
||||
import { PrismaClient as PrismaLegacy } from "@prisma/client-legacy"
|
||||
import { toDateFromString, toHHmmFromDate, toStringFromDate } from "src/common/utils/date-utils";
|
||||
// import { PrismaClient as Prisma } from "@prisma/client";
|
||||
// import { PrismaClient as PrismaLegacy } from "@prisma/client-legacy"
|
||||
// import { toDateFromString, toHHmmFromDate, toStringFromDate } from "src/common/utils/date-utils";
|
||||
|
||||
const prisma_legacy = new PrismaLegacy({});
|
||||
const prisma = new Prisma({});
|
||||
// const prisma_legacy = new PrismaLegacy({});
|
||||
// const prisma = new Prisma({});
|
||||
|
||||
type NewEmployee = {
|
||||
id: number;
|
||||
company_code: number;
|
||||
external_payroll_id: number;
|
||||
}
|
||||
// type NewEmployee = {
|
||||
// id: number;
|
||||
// company_code: number;
|
||||
// external_payroll_id: number;
|
||||
// }
|
||||
|
||||
type OldExpense = {
|
||||
time_sheet_id: string | null;
|
||||
date: string | null;
|
||||
code: string | null;
|
||||
description: string | null;
|
||||
value: number | null;
|
||||
status: boolean | null;
|
||||
}
|
||||
// type OldExpense = {
|
||||
// time_sheet_id: string | null;
|
||||
// date: string | null;
|
||||
// code: string | null;
|
||||
// description: string | null;
|
||||
// value: number | null;
|
||||
// status: boolean | null;
|
||||
// }
|
||||
|
||||
export const extractOldExpenses = async () => {
|
||||
for (let id = 1; id <= 61; id++) {
|
||||
// export const extractOldExpenses = async () => {
|
||||
// for (let id = 1; id <= 61; id++) {
|
||||
|
||||
console.log(`Start of Expense migration ***************************************************************`);
|
||||
// console.log(`Start of Expense migration ***************************************************************`);
|
||||
|
||||
const new_employee = await findOneNewEmployee(id);
|
||||
console.log(`Employee ${id} found in new DB`);
|
||||
// const new_employee = await findOneNewEmployee(id);
|
||||
// console.log(`Employee ${id} found in new DB`);
|
||||
|
||||
const new_timesheets = await findManyNewTimesheets(new_employee.id);
|
||||
console.log(`New Timesheets found for employee ${id}`);
|
||||
// const new_timesheets = await findManyNewTimesheets(new_employee.id);
|
||||
// console.log(`New Timesheets found for employee ${id}`);
|
||||
|
||||
const old_employee_id = await findOneOldEmployee(new_employee);
|
||||
console.log(`Employee ${new_employee.id} found in old DB`);
|
||||
// const old_employee_id = await findOneOldEmployee(new_employee);
|
||||
// console.log(`Employee ${new_employee.id} found in old DB`);
|
||||
|
||||
const old_timesheets = await findManyOldTimesheets(old_employee_id);
|
||||
console.log(`Timesheets for employee ${old_employee_id}/${new_employee.id} found in old DB`);
|
||||
// const old_timesheets = await findManyOldTimesheets(old_employee_id);
|
||||
// console.log(`Timesheets for employee ${old_employee_id}/${new_employee.id} found in old DB`);
|
||||
|
||||
console.log('Start of Expense creation*****************************************************************');
|
||||
for (const old_timesheet of old_timesheets) {
|
||||
if (!old_timesheet.start_date) continue;
|
||||
const new_timesheet = new_timesheets.find((ts) => ts.start_date.getTime() === old_timesheet.start_date!.getTime());
|
||||
if (!new_timesheet) {
|
||||
console.warn(`No new timesheet matching legacy timesheet ${old_timesheet.id}`);
|
||||
continue;
|
||||
}
|
||||
const old_expenses = await prisma_legacy.expenses.findMany({
|
||||
where: { time_sheet_id: old_timesheet.id },
|
||||
select: {
|
||||
time_sheet_id: true,
|
||||
date: true,
|
||||
code: true,
|
||||
description: true,
|
||||
value: true,
|
||||
status: true,
|
||||
// console.log('Start of Expense creation*****************************************************************');
|
||||
// for (const old_timesheet of old_timesheets) {
|
||||
// if (!old_timesheet.start_date) continue;
|
||||
// const new_timesheet = new_timesheets.find((ts) => ts.start_date.getTime() === old_timesheet.start_date!.getTime());
|
||||
// if (!new_timesheet) {
|
||||
// console.warn(`No new timesheet matching legacy timesheet ${old_timesheet.id}`);
|
||||
// continue;
|
||||
// }
|
||||
// const old_expenses = await prisma_legacy.expenses.findMany({
|
||||
// where: { time_sheet_id: old_timesheet.id },
|
||||
// select: {
|
||||
// time_sheet_id: true,
|
||||
// date: true,
|
||||
// code: true,
|
||||
// description: true,
|
||||
// value: true,
|
||||
// status: true,
|
||||
|
||||
},
|
||||
});
|
||||
await createManyNewExpenses(new_timesheet.id, old_expenses);
|
||||
}
|
||||
// },
|
||||
// });
|
||||
// await createManyNewExpenses(new_timesheet.id, old_expenses);
|
||||
// }
|
||||
|
||||
}
|
||||
await prisma_legacy.$disconnect();
|
||||
await prisma.$disconnect();
|
||||
}
|
||||
// }
|
||||
// await prisma_legacy.$disconnect();
|
||||
// await prisma.$disconnect();
|
||||
// }
|
||||
|
||||
const findOneNewEmployee = async (id: number): Promise<NewEmployee> => {
|
||||
const new_employee = await prisma.employees.findUnique({
|
||||
where: { id: id },
|
||||
select: {
|
||||
id: true,
|
||||
company_code: true,
|
||||
external_payroll_id: true,
|
||||
},
|
||||
});
|
||||
if (!new_employee) throw new Error(`New Employee with id ${id} not found`)
|
||||
return new_employee;
|
||||
}
|
||||
// const findOneNewEmployee = async (id: number): Promise<NewEmployee> => {
|
||||
// const new_employee = await prisma.employees.findUnique({
|
||||
// where: { id: id },
|
||||
// select: {
|
||||
// id: true,
|
||||
// company_code: true,
|
||||
// external_payroll_id: true,
|
||||
// },
|
||||
// });
|
||||
// if (!new_employee) throw new Error(`New Employee with id ${id} not found`)
|
||||
// return new_employee;
|
||||
// }
|
||||
|
||||
const findOneOldEmployee = async (new_employee: NewEmployee): Promise<string> => {
|
||||
const old_employee = await prisma_legacy.employees.findFirst({
|
||||
where: {
|
||||
company: new_employee.company_code,
|
||||
employee_number: new_employee.external_payroll_id.toString(),
|
||||
},
|
||||
select: {
|
||||
id: true,
|
||||
},
|
||||
});
|
||||
if (!old_employee) throw new Error(`Old Employee not found`);
|
||||
return old_employee.id;
|
||||
}
|
||||
// const findOneOldEmployee = async (new_employee: NewEmployee): Promise<string> => {
|
||||
// const old_employee = await prisma_legacy.employees.findFirst({
|
||||
// where: {
|
||||
// company: new_employee.company_code,
|
||||
// employee_number: new_employee.external_payroll_id.toString(),
|
||||
// },
|
||||
// select: {
|
||||
// id: true,
|
||||
// },
|
||||
// });
|
||||
// if (!old_employee) throw new Error(`Old Employee not found`);
|
||||
// return old_employee.id;
|
||||
// }
|
||||
|
||||
const findManyOldTimesheets = async (old_employee_id: string) => {
|
||||
const old_timesheets = await prisma_legacy.time_sheets.findMany({
|
||||
where: { employee_id: old_employee_id },
|
||||
select: { id: true, start_date: true, status: true }
|
||||
});
|
||||
return old_timesheets;
|
||||
}
|
||||
// const findManyOldTimesheets = async (old_employee_id: string) => {
|
||||
// const old_timesheets = await prisma_legacy.time_sheets.findMany({
|
||||
// where: { employee_id: old_employee_id },
|
||||
// select: { id: true, start_date: true, status: true }
|
||||
// });
|
||||
// return old_timesheets;
|
||||
// }
|
||||
|
||||
const findManyNewTimesheets = async (employee_id: number) => {
|
||||
const timesheets = await prisma.timesheets.findMany({
|
||||
where: { employee_id: employee_id },
|
||||
select: { id: true, start_date: true }
|
||||
})
|
||||
return timesheets;
|
||||
}
|
||||
// const findManyNewTimesheets = async (employee_id: number) => {
|
||||
// const timesheets = await prisma.timesheets.findMany({
|
||||
// where: { employee_id: employee_id },
|
||||
// select: { id: true, start_date: true }
|
||||
// })
|
||||
// return timesheets;
|
||||
// }
|
||||
|
||||
const createManyNewExpenses = async (timesheet_id: number, old_expenses: OldExpense[]) => {
|
||||
for (const old_expense of old_expenses) {
|
||||
let mileage: number = 0;
|
||||
let amount: number = old_expense.value ?? 0;
|
||||
if (old_expense.code === 'G503') {
|
||||
mileage = old_expense.value!;
|
||||
amount = mileage * 0.72;
|
||||
}
|
||||
if (mileage < 0 || amount < 0) {
|
||||
console.warn(`expense of value less than '0' found`)
|
||||
continue;
|
||||
}
|
||||
// const createManyNewExpenses = async (timesheet_id: number, old_expenses: OldExpense[]) => {
|
||||
// for (const old_expense of old_expenses) {
|
||||
// let mileage: number = 0;
|
||||
// let amount: number = old_expense.value ?? 0;
|
||||
// if (old_expense.code === 'G503') {
|
||||
// mileage = old_expense.value!;
|
||||
// amount = mileage * 0.72;
|
||||
// }
|
||||
// if (mileage < 0 || amount < 0) {
|
||||
// console.warn(`expense of value less than '0' found`)
|
||||
// continue;
|
||||
// }
|
||||
|
||||
if (old_expense.date == null) {
|
||||
console.warn(`Expense date invalid ${old_expense.date}`);
|
||||
continue;
|
||||
}
|
||||
const date = toDateFromString(old_expense.date);
|
||||
// if (old_expense.date == null) {
|
||||
// console.warn(`Expense date invalid ${old_expense.date}`);
|
||||
// continue;
|
||||
// }
|
||||
// const date = toDateFromString(old_expense.date);
|
||||
|
||||
if (old_expense.status == null) {
|
||||
console.warn(`status null for legacy expense ${old_expense}`);
|
||||
continue;
|
||||
}
|
||||
// if (old_expense.status == null) {
|
||||
// console.warn(`status null for legacy expense ${old_expense}`);
|
||||
// continue;
|
||||
// }
|
||||
|
||||
if (old_expense.code == null) {
|
||||
console.warn(`Code null for legacy expense ${old_expense.code}`);
|
||||
continue;
|
||||
}
|
||||
const bank_code_id = await findBankCodeIdUsingOldCode(old_expense.code);
|
||||
// if (old_expense.code == null) {
|
||||
// console.warn(`Code null for legacy expense ${old_expense.code}`);
|
||||
// continue;
|
||||
// }
|
||||
// const bank_code_id = await findBankCodeIdUsingOldCode(old_expense.code);
|
||||
|
||||
await prisma.expenses.upsert({
|
||||
where: { unique_ts_id_date_amount_mileage: { timesheet_id: timesheet_id, date, amount, mileage } },
|
||||
update: {
|
||||
is_approved: old_expense.status,
|
||||
},
|
||||
create: {
|
||||
date: date,
|
||||
comment: old_expense.description ?? '',
|
||||
timesheet_id: timesheet_id,
|
||||
bank_code_id: bank_code_id,
|
||||
amount: amount,
|
||||
mileage: mileage,
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
// await prisma.expenses.upsert({
|
||||
// where: { unique_ts_id_date_amount_mileage: { timesheet_id: timesheet_id, date, amount, mileage } },
|
||||
// update: {
|
||||
// is_approved: old_expense.status,
|
||||
// },
|
||||
// create: {
|
||||
// date: date,
|
||||
// comment: old_expense.description ?? '',
|
||||
// timesheet_id: timesheet_id,
|
||||
// bank_code_id: bank_code_id,
|
||||
// amount: amount,
|
||||
// mileage: mileage,
|
||||
// }
|
||||
// });
|
||||
// }
|
||||
// }
|
||||
|
||||
const findBankCodeIdUsingOldCode = async (code: string): Promise<number> => {
|
||||
const bank_code = await prisma.bankCodes.findFirst({
|
||||
where: { bank_code: code },
|
||||
select: { id: true },
|
||||
});
|
||||
if (!bank_code) throw new Error(`Bank_code_id not found for Code ${code}`)
|
||||
return bank_code.id;
|
||||
}
|
||||
// const findBankCodeIdUsingOldCode = async (code: string): Promise<number> => {
|
||||
// const bank_code = await prisma.bankCodes.findFirst({
|
||||
// where: { bank_code: code },
|
||||
// select: { id: true },
|
||||
// });
|
||||
// if (!bank_code) throw new Error(`Bank_code_id not found for Code ${code}`)
|
||||
// return bank_code.id;
|
||||
// }
|
||||
|
|
@ -1,210 +1,210 @@
|
|||
import { PrismaClient as PrismaNew } from "@prisma/client";
|
||||
import { PrismaClient as PrismaLegacy } from "@prisma/client-legacy"
|
||||
// import { PrismaClient as PrismaNew } from "@prisma/client";
|
||||
// import { PrismaClient as PrismaLegacy } from "@prisma/client-legacy"
|
||||
|
||||
const prisma_legacy = new PrismaLegacy({});
|
||||
const prisma = new PrismaNew({});
|
||||
// const prisma_legacy = new PrismaLegacy({});
|
||||
// const prisma = new PrismaNew({});
|
||||
|
||||
type NewEmployee = {
|
||||
id: number;
|
||||
company_code: number;
|
||||
external_payroll_id: number;
|
||||
}
|
||||
// type NewEmployee = {
|
||||
// id: number;
|
||||
// company_code: number;
|
||||
// external_payroll_id: number;
|
||||
// }
|
||||
|
||||
type OldShifts = {
|
||||
time_sheet_id: string | null;
|
||||
code: string | null;
|
||||
type: string | null;
|
||||
date: Date | null;
|
||||
start_time: bigint | null;
|
||||
end_time: bigint | null;
|
||||
comment: string | null;
|
||||
status: boolean | null;
|
||||
}
|
||||
// type OldShifts = {
|
||||
// time_sheet_id: string | null;
|
||||
// code: string | null;
|
||||
// type: string | null;
|
||||
// date: Date | null;
|
||||
// start_time: bigint | null;
|
||||
// end_time: bigint | null;
|
||||
// comment: string | null;
|
||||
// status: boolean | null;
|
||||
// }
|
||||
|
||||
export const extractOldShifts = async () => {
|
||||
for (let id = 1; id <= 61; id++) {
|
||||
console.log(`Start of shift migration ***************************************************************`);
|
||||
const new_employee = await findOneNewEmployee(id);
|
||||
console.log(`Employee ${id} found in new DB`);
|
||||
// export const extractOldShifts = async () => {
|
||||
// for (let id = 1; id <= 61; id++) {
|
||||
// console.log(`Start of shift migration ***************************************************************`);
|
||||
// const new_employee = await findOneNewEmployee(id);
|
||||
// console.log(`Employee ${id} found in new DB`);
|
||||
|
||||
const new_timesheets = await findManyNewTimesheets(new_employee.id);
|
||||
console.log(`New Timesheets found for employee ${id}`);
|
||||
for (const ts of new_timesheets) {
|
||||
console.log(`start_date = ${ts.start_date} timesheet_id = ${ts.id}`)
|
||||
// const new_timesheets = await findManyNewTimesheets(new_employee.id);
|
||||
// console.log(`New Timesheets found for employee ${id}`);
|
||||
// for (const ts of new_timesheets) {
|
||||
// console.log(`start_date = ${ts.start_date} timesheet_id = ${ts.id}`)
|
||||
|
||||
}
|
||||
console.log('***************************************************************');
|
||||
const old_employee_id = await findOneOldEmployee(new_employee);
|
||||
console.log(`Employee ${new_employee.id} found in old DB`);
|
||||
// }
|
||||
// console.log('***************************************************************');
|
||||
// const old_employee_id = await findOneOldEmployee(new_employee);
|
||||
// console.log(`Employee ${new_employee.id} found in old DB`);
|
||||
|
||||
const old_timesheets = await findManyOldTimesheets(old_employee_id);
|
||||
console.log(`Timesheets for employee ${old_employee_id}/${new_employee.id} found in old DB`);
|
||||
// const old_timesheets = await findManyOldTimesheets(old_employee_id);
|
||||
// console.log(`Timesheets for employee ${old_employee_id}/${new_employee.id} found in old DB`);
|
||||
|
||||
for (const old_timesheet of old_timesheets) {
|
||||
if (!old_timesheet.start_date) continue;
|
||||
const new_timesheet = new_timesheets.find((ts) => ts.start_date.getTime() === old_timesheet.start_date!.getTime());
|
||||
if (!new_timesheet) {
|
||||
console.warn(`No new timesheet ${new_timesheet} matching legacy timesheet ${old_timesheet.id}`);
|
||||
continue;
|
||||
}
|
||||
const old_shifts = await prisma_legacy.shifts.findMany({
|
||||
where: { time_sheet_id: old_timesheet.id },
|
||||
select: {
|
||||
time_sheet_id: true,
|
||||
code: true,
|
||||
type: true,
|
||||
date: true,
|
||||
start_time: true,
|
||||
end_time: true,
|
||||
comment: true,
|
||||
status: true,
|
||||
},
|
||||
});
|
||||
await createManyNewShifts(new_timesheet.id, old_shifts);
|
||||
}
|
||||
}
|
||||
await prisma_legacy.$disconnect();
|
||||
await prisma.$disconnect();
|
||||
}
|
||||
// for (const old_timesheet of old_timesheets) {
|
||||
// if (!old_timesheet.start_date) continue;
|
||||
// const new_timesheet = new_timesheets.find((ts) => ts.start_date.getTime() === old_timesheet.start_date!.getTime());
|
||||
// if (!new_timesheet) {
|
||||
// console.warn(`No new timesheet ${new_timesheet} matching legacy timesheet ${old_timesheet.id}`);
|
||||
// continue;
|
||||
// }
|
||||
// const old_shifts = await prisma_legacy.shifts.findMany({
|
||||
// where: { time_sheet_id: old_timesheet.id },
|
||||
// select: {
|
||||
// time_sheet_id: true,
|
||||
// code: true,
|
||||
// type: true,
|
||||
// date: true,
|
||||
// start_time: true,
|
||||
// end_time: true,
|
||||
// comment: true,
|
||||
// status: true,
|
||||
// },
|
||||
// });
|
||||
// await createManyNewShifts(new_timesheet.id, old_shifts);
|
||||
// }
|
||||
// }
|
||||
// await prisma_legacy.$disconnect();
|
||||
// await prisma.$disconnect();
|
||||
// }
|
||||
|
||||
const findOneNewEmployee = async (id: number): Promise<NewEmployee> => {
|
||||
const new_employee = await prisma.employees.findUnique({
|
||||
where: { id: id },
|
||||
select: {
|
||||
id: true,
|
||||
company_code: true,
|
||||
external_payroll_id: true,
|
||||
},
|
||||
});
|
||||
if (!new_employee) throw new Error(`New Employee with id ${id} not found`)
|
||||
return new_employee;
|
||||
}
|
||||
// const findOneNewEmployee = async (id: number): Promise<NewEmployee> => {
|
||||
// const new_employee = await prisma.employees.findUnique({
|
||||
// where: { id: id },
|
||||
// select: {
|
||||
// id: true,
|
||||
// company_code: true,
|
||||
// external_payroll_id: true,
|
||||
// },
|
||||
// });
|
||||
// if (!new_employee) throw new Error(`New Employee with id ${id} not found`)
|
||||
// return new_employee;
|
||||
// }
|
||||
|
||||
const findOneOldEmployee = async (new_employee: NewEmployee): Promise<string> => {
|
||||
const old_employee = await prisma_legacy.employees.findFirst({
|
||||
where: {
|
||||
company: new_employee.company_code,
|
||||
employee_number: new_employee.external_payroll_id.toString(),
|
||||
},
|
||||
select: {
|
||||
id: true,
|
||||
},
|
||||
});
|
||||
if (!old_employee) throw new Error(`Old Employee not found`);
|
||||
return old_employee.id;
|
||||
}
|
||||
// const findOneOldEmployee = async (new_employee: NewEmployee): Promise<string> => {
|
||||
// const old_employee = await prisma_legacy.employees.findFirst({
|
||||
// where: {
|
||||
// company: new_employee.company_code,
|
||||
// employee_number: new_employee.external_payroll_id.toString(),
|
||||
// },
|
||||
// select: {
|
||||
// id: true,
|
||||
// },
|
||||
// });
|
||||
// if (!old_employee) throw new Error(`Old Employee not found`);
|
||||
// return old_employee.id;
|
||||
// }
|
||||
|
||||
const findManyOldTimesheets = async (old_employee_id: string) => {
|
||||
const old_timesheets = await prisma_legacy.time_sheets.findMany({
|
||||
where: { employee_id: old_employee_id },
|
||||
select: { id: true, start_date: true, status: true }
|
||||
});
|
||||
return old_timesheets;
|
||||
}
|
||||
// const findManyOldTimesheets = async (old_employee_id: string) => {
|
||||
// const old_timesheets = await prisma_legacy.time_sheets.findMany({
|
||||
// where: { employee_id: old_employee_id },
|
||||
// select: { id: true, start_date: true, status: true }
|
||||
// });
|
||||
// return old_timesheets;
|
||||
// }
|
||||
|
||||
const findManyNewTimesheets = async (employee_id: number) => {
|
||||
const timesheets = await prisma.timesheets.findMany({
|
||||
where: { employee_id: employee_id },
|
||||
select: { id: true, start_date: true }
|
||||
})
|
||||
return timesheets;
|
||||
}
|
||||
// const findManyNewTimesheets = async (employee_id: number) => {
|
||||
// const timesheets = await prisma.timesheets.findMany({
|
||||
// where: { employee_id: employee_id },
|
||||
// select: { id: true, start_date: true }
|
||||
// })
|
||||
// return timesheets;
|
||||
// }
|
||||
|
||||
const createManyNewShifts = async (timesheet_id: number, old_shifts: OldShifts[]) => {
|
||||
for (const old_shift of old_shifts) {
|
||||
let is_remote = true;
|
||||
// const createManyNewShifts = async (timesheet_id: number, old_shifts: OldShifts[]) => {
|
||||
// for (const old_shift of old_shifts) {
|
||||
// let is_remote = true;
|
||||
|
||||
const start = toHHmmfromLegacyTimestamp(old_shift.start_time);
|
||||
if (old_shift.start_time == null || !start) {
|
||||
console.warn(`Shift start invalid ${old_shift.start_time}`);
|
||||
continue;
|
||||
}
|
||||
// const start = toHHmmfromLegacyTimestamp(old_shift.start_time);
|
||||
// if (old_shift.start_time == null || !start) {
|
||||
// console.warn(`Shift start invalid ${old_shift.start_time}`);
|
||||
// continue;
|
||||
// }
|
||||
|
||||
const end = toHHmmfromLegacyTimestamp(old_shift.end_time);
|
||||
if (old_shift.end_time == null || !end) {
|
||||
console.warn(`Shift end invalid ${old_shift.end_time}`);
|
||||
continue;
|
||||
}
|
||||
// const end = toHHmmfromLegacyTimestamp(old_shift.end_time);
|
||||
// if (old_shift.end_time == null || !end) {
|
||||
// console.warn(`Shift end invalid ${old_shift.end_time}`);
|
||||
// continue;
|
||||
// }
|
||||
|
||||
if (old_shift.date == null) {
|
||||
console.warn(`Shift date invalid ${old_shift.date}`);
|
||||
continue;
|
||||
}
|
||||
// if (old_shift.date == null) {
|
||||
// console.warn(`Shift date invalid ${old_shift.date}`);
|
||||
// continue;
|
||||
// }
|
||||
|
||||
if (old_shift.status == null) {
|
||||
console.warn(`status null for legacy shift ${old_shift}`);
|
||||
continue;
|
||||
}
|
||||
if (old_shift.type == null) {
|
||||
console.warn(`type null for legacy shift ${old_shift.type}`);
|
||||
continue;
|
||||
}
|
||||
// if (old_shift.status == null) {
|
||||
// console.warn(`status null for legacy shift ${old_shift}`);
|
||||
// continue;
|
||||
// }
|
||||
// if (old_shift.type == null) {
|
||||
// console.warn(`type null for legacy shift ${old_shift.type}`);
|
||||
// continue;
|
||||
// }
|
||||
|
||||
if (old_shift.type === 'office') {
|
||||
is_remote = false;
|
||||
}
|
||||
// if (old_shift.type === 'office') {
|
||||
// is_remote = false;
|
||||
// }
|
||||
|
||||
if (old_shift.code == null) {
|
||||
console.warn(`Code null for legacy shift ${old_shift.code}`);
|
||||
continue;
|
||||
}
|
||||
const bank_code_id = await findBankCodeIdUsingOldCode(old_shift.code);
|
||||
try {
|
||||
await prisma.shifts.create({
|
||||
// where: { unique_ts_id_date_start_time: {
|
||||
// timesheet_id,
|
||||
// date: old_shift.date,
|
||||
// start_time: toDateFromHHmm(start) }},
|
||||
// update: {
|
||||
// start_time: toDateFromHHmm(start),
|
||||
// end_time: toDateFromHHmm(end),
|
||||
// comment: old_shift.comment,
|
||||
// is_approved: old_shift.status,
|
||||
// is_remote: is_remote,
|
||||
// bank_code_id: bank_code_id,
|
||||
// },
|
||||
data: {
|
||||
date: old_shift.date,
|
||||
start_time: toDateFromHHmm(start),
|
||||
end_time: toDateFromHHmm(end),
|
||||
comment: old_shift.comment,
|
||||
is_approved: old_shift.status,
|
||||
is_remote: is_remote,
|
||||
timesheet_id: timesheet_id,
|
||||
bank_code_id: bank_code_id,
|
||||
},
|
||||
});
|
||||
} catch (error) {
|
||||
console.log('An error occured during shifts creation');
|
||||
}
|
||||
}
|
||||
}
|
||||
// if (old_shift.code == null) {
|
||||
// console.warn(`Code null for legacy shift ${old_shift.code}`);
|
||||
// continue;
|
||||
// }
|
||||
// const bank_code_id = await findBankCodeIdUsingOldCode(old_shift.code);
|
||||
// try {
|
||||
// await prisma.shifts.create({
|
||||
// // where: { unique_ts_id_date_start_time: {
|
||||
// // timesheet_id,
|
||||
// // date: old_shift.date,
|
||||
// // start_time: toDateFromHHmm(start) }},
|
||||
// // update: {
|
||||
// // start_time: toDateFromHHmm(start),
|
||||
// // end_time: toDateFromHHmm(end),
|
||||
// // comment: old_shift.comment,
|
||||
// // is_approved: old_shift.status,
|
||||
// // is_remote: is_remote,
|
||||
// // bank_code_id: bank_code_id,
|
||||
// // },
|
||||
// data: {
|
||||
// date: old_shift.date,
|
||||
// start_time: toDateFromHHmm(start),
|
||||
// end_time: toDateFromHHmm(end),
|
||||
// comment: old_shift.comment,
|
||||
// is_approved: old_shift.status,
|
||||
// is_remote: is_remote,
|
||||
// timesheet_id: timesheet_id,
|
||||
// bank_code_id: bank_code_id,
|
||||
// },
|
||||
// });
|
||||
// } catch (error) {
|
||||
// console.log('An error occured during shifts creation');
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
const toHHmmfromLegacyTimestamp = (value: bigint | null): string | null => {
|
||||
if (value == null) return null;
|
||||
const date = new Date(Number(value));
|
||||
const hh = String(date.getHours()).padStart(2, '0');
|
||||
const mm = String(date.getMinutes()).padStart(2, '0');
|
||||
return `${hh}:${mm}`;
|
||||
}
|
||||
// const toHHmmfromLegacyTimestamp = (value: bigint | null): string | null => {
|
||||
// if (value == null) return null;
|
||||
// const date = new Date(Number(value));
|
||||
// const hh = String(date.getHours()).padStart(2, '0');
|
||||
// const mm = String(date.getMinutes()).padStart(2, '0');
|
||||
// return `${hh}:${mm}`;
|
||||
// }
|
||||
|
||||
const toDateFromHHmm = (hhmm: string): Date => {
|
||||
const [hh, mm] = hhmm.split(':');
|
||||
const hours = Number(hh);
|
||||
const minutes = Number(mm);
|
||||
return new Date(Date.UTC(1970, 0, 1, hours, minutes, 0, 0));
|
||||
}
|
||||
// const toDateFromHHmm = (hhmm: string): Date => {
|
||||
// const [hh, mm] = hhmm.split(':');
|
||||
// const hours = Number(hh);
|
||||
// const minutes = Number(mm);
|
||||
// return new Date(Date.UTC(1970, 0, 1, hours, minutes, 0, 0));
|
||||
// }
|
||||
|
||||
const findBankCodeIdUsingOldCode = async (code: string): Promise<number> => {
|
||||
if (code === 'G700') {
|
||||
code = 'G104';
|
||||
} else if (code === 'G140') {
|
||||
code = 'G56'
|
||||
}
|
||||
const bank_code = await prisma.bankCodes.findFirst({
|
||||
where: { bank_code: code },
|
||||
select: { id: true, bank_code: true },
|
||||
});
|
||||
if (!bank_code) throw new Error(`Bank_code_id not found for Code ${code}`)
|
||||
return bank_code.id;
|
||||
}
|
||||
// const findBankCodeIdUsingOldCode = async (code: string): Promise<number> => {
|
||||
// if (code === 'G700') {
|
||||
// code = 'G104';
|
||||
// } else if (code === 'G140') {
|
||||
// code = 'G56'
|
||||
// }
|
||||
// const bank_code = await prisma.bankCodes.findFirst({
|
||||
// where: { bank_code: code },
|
||||
// select: { id: true, bank_code: true },
|
||||
// });
|
||||
// if (!bank_code) throw new Error(`Bank_code_id not found for Code ${code}`)
|
||||
// return bank_code.id;
|
||||
// }
|
||||
|
|
|
|||
|
|
@ -1,118 +1,118 @@
|
|||
import { PrismaClient as Prisma } from "@prisma/client";
|
||||
import { PrismaClient as PrismaLegacy } from "@prisma/client-legacy"
|
||||
import { toStringFromDate } from "src/common/utils/date-utils";
|
||||
// import { PrismaClient as Prisma } from "@prisma/client";
|
||||
// import { PrismaClient as PrismaLegacy } from "@prisma/client-legacy"
|
||||
// import { toStringFromDate } from "src/common/utils/date-utils";
|
||||
|
||||
|
||||
type NewEmployee = {
|
||||
id: number;
|
||||
company_code: number;
|
||||
external_payroll_id: number;
|
||||
}
|
||||
// type NewEmployee = {
|
||||
// id: number;
|
||||
// company_code: number;
|
||||
// external_payroll_id: number;
|
||||
// }
|
||||
|
||||
type OldTimesheets = {
|
||||
id: string;
|
||||
start_date: Date | null;
|
||||
status: boolean | null;
|
||||
}
|
||||
// type OldTimesheets = {
|
||||
// id: string;
|
||||
// start_date: Date | null;
|
||||
// status: boolean | null;
|
||||
// }
|
||||
|
||||
const prisma_legacy = new PrismaLegacy({});
|
||||
const prisma_new = new Prisma({});
|
||||
// const prisma_legacy = new PrismaLegacy({});
|
||||
// const prisma_new = new Prisma({});
|
||||
|
||||
export const extractOldTimesheets = async () => {
|
||||
for (let id = 1; id <= 61; id++) {
|
||||
const new_employee = await findOneNewEmployee(id);
|
||||
console.log(`Employee ${id} found in new DB ${new_employee.external_payroll_id}`);
|
||||
// export const extractOldTimesheets = async () => {
|
||||
// for (let id = 1; id <= 61; id++) {
|
||||
// const new_employee = await findOneNewEmployee(id);
|
||||
// console.log(`Employee ${id} found in new DB ${new_employee.external_payroll_id}`);
|
||||
|
||||
const old_employee_id = await findOneOldEmployee(new_employee);
|
||||
console.log(`Employee ${new_employee.id} found in old DB`);
|
||||
// const old_employee_id = await findOneOldEmployee(new_employee);
|
||||
// console.log(`Employee ${new_employee.id} found in old DB`);
|
||||
|
||||
const old_timesheets = await findManyOldTimesheets(old_employee_id);
|
||||
console.log(` ${old_timesheets.length} Timesheets for employee ${old_employee_id}/${new_employee.id} found in old DB`);
|
||||
// const old_timesheets = await findManyOldTimesheets(old_employee_id);
|
||||
// console.log(` ${old_timesheets.length} Timesheets for employee ${old_employee_id}/${new_employee.id} found in old DB`);
|
||||
|
||||
await createManyNewTimesheets(old_timesheets, new_employee);
|
||||
console.log(`${old_timesheets.length} New Timesheets created in new DB for employee ${new_employee.id}`);
|
||||
}
|
||||
await prisma_legacy.$disconnect();
|
||||
await prisma_new.$disconnect();
|
||||
}
|
||||
// await createManyNewTimesheets(old_timesheets, new_employee);
|
||||
// console.log(`${old_timesheets.length} New Timesheets created in new DB for employee ${new_employee.id}`);
|
||||
// }
|
||||
// await prisma_legacy.$disconnect();
|
||||
// await prisma_new.$disconnect();
|
||||
// }
|
||||
|
||||
const findOneNewEmployee = async (id: number): Promise<NewEmployee> => {
|
||||
const new_employee = await prisma_new.employees.findUnique({
|
||||
where: { id: id },
|
||||
select: {
|
||||
id: true,
|
||||
company_code: true,
|
||||
external_payroll_id: true,
|
||||
},
|
||||
});
|
||||
if (!new_employee) throw new Error(`New Employee with id ${id} not found`)
|
||||
return new_employee;
|
||||
}
|
||||
// const findOneNewEmployee = async (id: number): Promise<NewEmployee> => {
|
||||
// const new_employee = await prisma_new.employees.findUnique({
|
||||
// where: { id: id },
|
||||
// select: {
|
||||
// id: true,
|
||||
// company_code: true,
|
||||
// external_payroll_id: true,
|
||||
// },
|
||||
// });
|
||||
// if (!new_employee) throw new Error(`New Employee with id ${id} not found`)
|
||||
// return new_employee;
|
||||
// }
|
||||
|
||||
const findOneOldEmployee = async (new_employee: NewEmployee): Promise<string> => {
|
||||
const employee_number = new_employee.external_payroll_id.toString()
|
||||
const old_employee = await prisma_legacy.employees.findFirst({
|
||||
where: {
|
||||
company: new_employee.company_code,
|
||||
employee_number: employee_number,
|
||||
},
|
||||
select: {
|
||||
id: true,
|
||||
},
|
||||
});
|
||||
if (!old_employee) throw new Error(`Old Employee not found`);
|
||||
return old_employee.id;
|
||||
}
|
||||
// const findOneOldEmployee = async (new_employee: NewEmployee): Promise<string> => {
|
||||
// const employee_number = new_employee.external_payroll_id.toString()
|
||||
// const old_employee = await prisma_legacy.employees.findFirst({
|
||||
// where: {
|
||||
// company: new_employee.company_code,
|
||||
// employee_number: employee_number,
|
||||
// },
|
||||
// select: {
|
||||
// id: true,
|
||||
// },
|
||||
// });
|
||||
// if (!old_employee) throw new Error(`Old Employee not found`);
|
||||
// return old_employee.id;
|
||||
// }
|
||||
|
||||
const findManyOldTimesheets = async (old_employee_id: string) => {
|
||||
const old_timesheets = await prisma_legacy.time_sheets.findMany({
|
||||
where: { employee_id: old_employee_id },
|
||||
select: { id: true, start_date: true, status: true }
|
||||
});
|
||||
if (!old_timesheets) throw new Error(`old Timesheets not found for employee_id ${old_employee_id}`)
|
||||
return old_timesheets;
|
||||
}
|
||||
// const findManyOldTimesheets = async (old_employee_id: string) => {
|
||||
// const old_timesheets = await prisma_legacy.time_sheets.findMany({
|
||||
// where: { employee_id: old_employee_id },
|
||||
// select: { id: true, start_date: true, status: true }
|
||||
// });
|
||||
// if (!old_timesheets) throw new Error(`old Timesheets not found for employee_id ${old_employee_id}`)
|
||||
// return old_timesheets;
|
||||
// }
|
||||
|
||||
const createManyNewTimesheets = async (old_timesheets: OldTimesheets[], new_employee: NewEmployee) => {
|
||||
for (const timesheet of old_timesheets) {
|
||||
if (timesheet.start_date == null) {
|
||||
console.warn(`start_date invalid for legacy timesheet ${timesheet.id}`);
|
||||
continue;
|
||||
}
|
||||
if (timesheet.status == null) {
|
||||
console.warn(`status null for legacy timesheet ${timesheet.id}`);
|
||||
continue;
|
||||
}
|
||||
// const createManyNewTimesheets = async (old_timesheets: OldTimesheets[], new_employee: NewEmployee) => {
|
||||
// for (const timesheet of old_timesheets) {
|
||||
// if (timesheet.start_date == null) {
|
||||
// console.warn(`start_date invalid for legacy timesheet ${timesheet.id}`);
|
||||
// continue;
|
||||
// }
|
||||
// if (timesheet.status == null) {
|
||||
// console.warn(`status null for legacy timesheet ${timesheet.id}`);
|
||||
// continue;
|
||||
// }
|
||||
|
||||
try {
|
||||
const new_timesheet = await prisma_new.timesheets.upsert({
|
||||
where: { employee_id_start_date: { employee_id: new_employee.id, start_date: timesheet.start_date } },
|
||||
update: {
|
||||
is_approved: timesheet.status,
|
||||
},
|
||||
create: {
|
||||
employee_id: new_employee.id,
|
||||
start_date: timesheet.start_date,
|
||||
is_approved: timesheet.status,
|
||||
},
|
||||
});
|
||||
if (!new_timesheet) throw new Error(
|
||||
`Timesheet with start_date: ${toStringFromDate(timesheet.start_date!)} for employee ${new_employee.id} not created`
|
||||
);
|
||||
} catch (error) {
|
||||
throw new Error('An error occured during timesheets creation');
|
||||
}
|
||||
}
|
||||
}
|
||||
// try {
|
||||
// const new_timesheet = await prisma_new.timesheets.upsert({
|
||||
// where: { employee_id_start_date: { employee_id: new_employee.id, start_date: timesheet.start_date } },
|
||||
// update: {
|
||||
// is_approved: timesheet.status,
|
||||
// },
|
||||
// create: {
|
||||
// employee_id: new_employee.id,
|
||||
// start_date: timesheet.start_date,
|
||||
// is_approved: timesheet.status,
|
||||
// },
|
||||
// });
|
||||
// if (!new_timesheet) throw new Error(
|
||||
// `Timesheet with start_date: ${toStringFromDate(timesheet.start_date!)} for employee ${new_employee.id} not created`
|
||||
// );
|
||||
// } catch (error) {
|
||||
// throw new Error('An error occured during timesheets creation');
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
extractOldTimesheets()
|
||||
.then(() => {
|
||||
console.log("Migration completed");
|
||||
})
|
||||
.catch((error) => {
|
||||
console.error("Migration failed:", error);
|
||||
})
|
||||
.finally(async () => {
|
||||
await prisma_legacy.$disconnect();
|
||||
await prisma_new.$disconnect();
|
||||
});
|
||||
// extractOldTimesheets()
|
||||
// .then(() => {
|
||||
// console.log("Migration completed");
|
||||
// })
|
||||
// .catch((error) => {
|
||||
// console.error("Migration failed:", error);
|
||||
// })
|
||||
// .finally(async () => {
|
||||
// await prisma_legacy.$disconnect();
|
||||
// await prisma_new.$disconnect();
|
||||
// });
|
||||
|
|
@ -1,21 +1,21 @@
|
|||
// import { extractOldTimesheets } from "scripts/migrate-timesheets";
|
||||
// import { extractOldExpenses } from "scripts/migrate-expenses";
|
||||
// import { extractOldShifts } from "scripts/migrate-shifts";
|
||||
import { Injectable } from "@nestjs/common";
|
||||
// // import { extractOldTimesheets } from "scripts/migrate-timesheets";
|
||||
// // import { extractOldExpenses } from "scripts/migrate-expenses";
|
||||
// // import { extractOldShifts } from "scripts/migrate-shifts";
|
||||
// import { Injectable } from "@nestjs/common";
|
||||
|
||||
@Injectable()
|
||||
export class MigrationService {
|
||||
constructor() {}
|
||||
// @Injectable()
|
||||
// export class MigrationService {
|
||||
// constructor() {}
|
||||
|
||||
async migrateTimesheets() {
|
||||
// extractOldTimesheets();
|
||||
};
|
||||
// async migrateTimesheets() {
|
||||
// // extractOldTimesheets();
|
||||
// };
|
||||
|
||||
async migrateShifts() {
|
||||
// extractOldShifts();
|
||||
}
|
||||
// async migrateShifts() {
|
||||
// // extractOldShifts();
|
||||
// }
|
||||
|
||||
async migrateExpenses() {
|
||||
// extractOldExpenses();
|
||||
}
|
||||
}
|
||||
// async migrateExpenses() {
|
||||
// // extractOldExpenses();
|
||||
// }
|
||||
// }
|
||||
Loading…
Reference in New Issue
Block a user