feat: update task order revert status if removed

This commit is contained in:
Methapon2001 2025-01-22 16:47:20 +07:00
parent b1c56b7c4e
commit 87a1c3fa80

View file

@ -381,43 +381,71 @@ export class TaskController extends Controller {
await permissionCheckCompany(req.user, record.registeredBranch); await permissionCheckCompany(req.user, record.registeredBranch);
await prisma.taskOrder.update({ if (record.taskList.some((v) => v.taskStatus !== "Pending")) {
where: { id: taskOrderId }, throw new HttpError(
include: { HttpStatus.BAD_REQUEST,
taskList: { "One or more task is not pending",
include: { "taskListNotPending",
requestWorkStep: { );
include: { }
requestWork: true,
}, return await prisma.$transaction(async (tx) => {
}, await Promise.all(
}, record.taskList
}, .filter(
institution: true,
registeredBranch: true,
createdBy: true,
},
data: {
...body,
taskList: {
deleteMany: record?.taskList.filter(
(lhs) => (lhs) =>
!body.taskList.find( !body.taskList.find(
(rhs) => lhs.requestWorkId === rhs.requestWorkId && lhs.step === rhs.step, (rhs) => lhs.requestWorkId === rhs.requestWorkId && lhs.step === rhs.step,
), ),
)
.map((v) =>
tx.task.update({
where: { id: v.id },
data: {
requestWorkStep: { update: { workStatus: "Pending" } },
},
}),
), ),
createMany: { );
data: body.taskList.filter(
return await tx.taskOrder.update({
where: { id: taskOrderId },
include: {
taskList: {
include: {
requestWorkStep: {
include: {
requestWork: true,
},
},
},
},
institution: true,
registeredBranch: true,
createdBy: true,
},
data: {
...body,
taskList: {
deleteMany: record?.taskList.filter(
(lhs) => (lhs) =>
!record?.taskList.find( !body.taskList.find(
(rhs) => lhs.requestWorkId === rhs.requestWorkId && lhs.step === rhs.step, (rhs) => lhs.requestWorkId === rhs.requestWorkId && lhs.step === rhs.step,
), ),
), ),
skipDuplicates: true, 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 },
}, },
taskProduct: { deleteMany: {}, create: body.taskProduct }, });
},
}); });
} }
@ -431,6 +459,7 @@ export class TaskController extends Controller {
registeredBranch: { registeredBranch: {
include: branchRelationPermInclude(req.user), include: branchRelationPermInclude(req.user),
}, },
taskList: true,
}, },
}); });
@ -438,6 +467,14 @@ export class TaskController extends Controller {
await permissionCheck(req.user, record.registeredBranch); await permissionCheck(req.user, record.registeredBranch);
if (record.taskList.some((v) => v.taskStatus !== "Pending")) {
throw new HttpError(
HttpStatus.BAD_REQUEST,
"One or more task is not pending",
"taskListNotPending",
);
}
await Promise.all([deleteFolder(fileLocation.task.attachment(taskOrderId))]); await Promise.all([deleteFolder(fileLocation.task.attachment(taskOrderId))]);
await tx.taskOrder.delete({ where: { id: taskOrderId } }); await tx.taskOrder.delete({ where: { id: taskOrderId } });
}); });