feat: notify request, task update

This commit is contained in:
Methapon2001 2025-03-05 14:41:55 +07:00
parent afb4a83efa
commit 17b92b4012
2 changed files with 137 additions and 105 deletions

View file

@ -433,88 +433,101 @@ export class TaskController extends Controller {
);
}
return await prisma.$transaction(async (tx) => {
await Promise.all(
record.taskList
.filter(
(lhs) =>
!body.taskList.find(
(rhs) => lhs.requestWorkId === rhs.requestWorkId && lhs.step === rhs.step,
),
)
.map((v) =>
tx.task.update({
where: { id: v.id },
data: {
requestWorkStep: { update: { workStatus: "Ready" } },
},
}),
),
);
return await prisma
.$transaction(async (tx) => {
await Promise.all(
record.taskList
.filter(
(lhs) =>
!body.taskList.find(
(rhs) => lhs.requestWorkId === rhs.requestWorkId && lhs.step === rhs.step,
),
)
.map((v) =>
tx.task.update({
where: { id: v.id },
data: {
requestWorkStep: { update: { workStatus: "Ready" } },
},
}),
),
);
await tx.requestWorkStepStatus.updateMany({
where: {
OR: body.taskList,
workStatus: RequestWorkStatus.Ready,
},
data: { workStatus: RequestWorkStatus.InProgress },
});
const work = await tx.requestWorkStepStatus.findMany({
include: {
requestWork: {
include: {
request: {
include: { quotation: true },
},
},
await tx.requestWorkStepStatus.updateMany({
where: {
OR: body.taskList,
workStatus: RequestWorkStatus.Ready,
},
},
where: { OR: body.taskList },
});
data: { workStatus: RequestWorkStatus.InProgress },
});
return await tx.taskOrder.update({
where: { id: taskOrderId },
include: {
taskList: {
include: {
requestWorkStep: {
include: {
requestWork: true,
const work = await tx.requestWorkStepStatus.findMany({
include: {
requestWork: {
include: {
request: {
include: { quotation: true },
},
},
},
},
institution: true,
registeredBranch: true,
createdBy: true,
},
data: {
...body,
urgent: work.some((v) => v.requestWork.request.quotation.urgent),
taskList: {
deleteMany: record?.taskList
.filter(
(lhs) =>
!body.taskList.find(
(rhs) => lhs.requestWorkId === rhs.requestWorkId && lhs.step === rhs.step,
),
)
.map((v) => ({ id: v.id })),
createMany: {
data: body.taskList.filter(
(lhs) =>
!record?.taskList.find(
(rhs) => lhs.requestWorkId === rhs.requestWorkId && lhs.step === rhs.step,
),
),
skipDuplicates: true,
where: { OR: body.taskList },
});
return await tx.taskOrder.update({
where: { id: taskOrderId },
include: {
taskList: {
include: {
requestWorkStep: {
include: {
requestWork: true,
},
},
},
},
institution: true,
registeredBranch: true,
createdBy: true,
},
taskProduct: { deleteMany: {}, create: body.taskProduct },
},
data: {
...body,
urgent: work.some((v) => v.requestWork.request.quotation.urgent),
taskList: {
deleteMany: record?.taskList
.filter(
(lhs) =>
!body.taskList.find(
(rhs) => lhs.requestWorkId === rhs.requestWorkId && lhs.step === rhs.step,
),
)
.map((v) => ({ id: v.id })),
createMany: {
data: body.taskList.filter(
(lhs) =>
!record?.taskList.find(
(rhs) => lhs.requestWorkId === rhs.requestWorkId && lhs.step === rhs.step,
),
),
skipDuplicates: true,
},
},
taskProduct: { deleteMany: {}, create: body.taskProduct },
},
});
})
.then(async (ret) => {
if (body.taskOrderStatus && record.taskOrderStatus !== body.taskOrderStatus) {
await prisma.notification.create({
data: {
title: "Task Submitted",
detail: "Task submitted in order: " + record.code,
receiverId: record.createdByUserId,
},
});
}
return ret;
});
});
}
@Delete("{taskOrderId}")
@ -651,6 +664,13 @@ export class TaskActionController extends Controller {
},
data: { userTaskStatus: UserTaskStatus.Submit, submittedAt: new Date() },
}),
prisma.notification.create({
data: {
title: "Task Submitted",
detail: "Task submitted in order: " + record.code,
receiverId: record.createdByUserId,
},
}),
]);
}