159 lines
5.3 KiB
TypeScript
159 lines
5.3 KiB
TypeScript
import dayjs from "dayjs";
|
|
import { CronJob } from "cron";
|
|
|
|
import prisma from "../db";
|
|
|
|
const jobs = [
|
|
CronJob.from({
|
|
cronTime: "0 0 0 * * *",
|
|
runOnInit: true,
|
|
onTick: async () => {
|
|
const current = new Date();
|
|
|
|
const date = current.getDate();
|
|
const month = current.getMonth();
|
|
const year = current.getFullYear();
|
|
|
|
await prisma.quotation
|
|
.updateMany({
|
|
where: {
|
|
quotationStatus: "Issued",
|
|
dueDate: { lte: new Date(year, date - 1 === 0 ? month - 1 : month, date - 1) },
|
|
},
|
|
data: { quotationStatus: "Expired" },
|
|
})
|
|
.then(() => console.log("[INFO]: Update expired quotation status, OK."))
|
|
.catch((e) => console.error("[ERR]: Update expired quotation status, FAILED.", e));
|
|
},
|
|
}),
|
|
CronJob.from({
|
|
cronTime: "0 0 0 * * *",
|
|
runOnInit: true,
|
|
onTick: async () => {
|
|
await prisma.notification
|
|
.deleteMany({
|
|
where: { createdAt: { lte: dayjs().subtract(1, "month").toDate() } },
|
|
})
|
|
.then(() => console.log("[INFO]: Delete expired notification, OK."))
|
|
.catch((e) => console.error("[ERR]: Update expired quotation status, FAILED.", e));
|
|
},
|
|
}),
|
|
CronJob.from({
|
|
cronTime: "0 0 0 * * *",
|
|
runOnInit: true,
|
|
onTick: async () => {
|
|
const employeeExpireData = await prisma.employee.findMany({
|
|
include: {
|
|
employeePassport: {
|
|
orderBy: {
|
|
expireDate: "desc",
|
|
},
|
|
take: 1,
|
|
},
|
|
customerBranch: {
|
|
include: {
|
|
customer: true,
|
|
},
|
|
},
|
|
},
|
|
where: {
|
|
employeePassport: {
|
|
some: {
|
|
expireDate: dayjs().add(90, "day").toDate(),
|
|
},
|
|
},
|
|
},
|
|
});
|
|
|
|
await employeeExpireData.map(async (record) => {
|
|
const fullName = `${record.namePrefix}${record.firstNameEN} ${record.lastNameEN}`;
|
|
const expireDate = `${dayjs(record.employeePassport[0].expireDate).format("DD/MM")}/${dayjs(record.employeePassport[0].expireDate).year() + 543}`;
|
|
const textDetail = `ลูกจ้างรหัส / code : ${record.code} ชื่อ : ${fullName} หนังสือเดินทางจะหมดอายุในวันที่ ${expireDate}`;
|
|
const duplicateText = await prisma.notification.findFirst({
|
|
where: {
|
|
detail: textDetail,
|
|
},
|
|
});
|
|
|
|
if (!duplicateText) {
|
|
await prisma.notification
|
|
.create({
|
|
data: {
|
|
title: "หนังสือเดินทางลูกจ้างหมดอายุ / Employee Passport Expire",
|
|
detail: textDetail,
|
|
groupReceiver: {
|
|
create: [{ name: "sale" }, { name: "head_of_sale" }],
|
|
},
|
|
registeredBranchId: record.customerBranch.customer.registeredBranchId,
|
|
},
|
|
})
|
|
.then(() => console.log("[INFO]: Create notification employee passport expired, OK."))
|
|
.catch((e) =>
|
|
console.error("[ERR]: Create notification employee passport expired, FAILED.", e),
|
|
);
|
|
}
|
|
});
|
|
},
|
|
}),
|
|
CronJob.from({
|
|
cronTime: "0 0 0 * * *",
|
|
runOnInit: true,
|
|
onTick: async () => {
|
|
const employeeVisaData = await prisma.employee.findMany({
|
|
include: {
|
|
employeeVisa: {
|
|
orderBy: {
|
|
expireDate: "desc",
|
|
},
|
|
take: 1,
|
|
},
|
|
customerBranch: {
|
|
include: {
|
|
customer: true,
|
|
},
|
|
},
|
|
},
|
|
where: {
|
|
employeeVisa: {
|
|
some: {
|
|
expireDate: dayjs().add(90, "day").toDate(),
|
|
},
|
|
},
|
|
},
|
|
});
|
|
|
|
await employeeVisaData.map(async (record) => {
|
|
const fullName = `${record.namePrefix}${record.firstNameEN} ${record.lastNameEN}`;
|
|
const expireDate = `${dayjs(record.employeeVisa[0].expireDate).format("DD/MM")}/${dayjs(record.employeeVisa[0].expireDate).year() + 543}`;
|
|
const textDetail = `ลูกจ้างรหัส / code : ${record.code} ชื่อ : ${fullName} ข้อมูลการตรวจลงตราจะหมดอายุในวันที่ ${expireDate}`;
|
|
const duplicateText = await prisma.notification.findFirst({
|
|
where: {
|
|
detail: textDetail,
|
|
},
|
|
});
|
|
|
|
if (!duplicateText) {
|
|
await prisma.notification
|
|
.create({
|
|
data: {
|
|
title: "ข้อมูลการตรวจลงตราลูกจ้างหมดอายุ / Employee Visa Expire",
|
|
detail: textDetail,
|
|
groupReceiver: {
|
|
create: [{ name: "sale" }, { name: "head_of_sale" }],
|
|
},
|
|
registeredBranchId: record.customerBranch.customer.registeredBranchId,
|
|
},
|
|
})
|
|
.then(() => console.log("[INFO]: Create notification employee visa expired, OK."))
|
|
.catch((e) =>
|
|
console.error("[ERR]: Create notification employee visa expired, FAILED.", e),
|
|
);
|
|
}
|
|
});
|
|
},
|
|
}),
|
|
];
|
|
|
|
export function initSchedule() {
|
|
for (const job of jobs) job.start();
|
|
}
|