From 87a1c3fa802505c8b985adf7ce53820da174a057 Mon Sep 17 00:00:00 2001 From: Methapon2001 <61303214+Methapon2001@users.noreply.github.com> Date: Wed, 22 Jan 2025 16:47:20 +0700 Subject: [PATCH] feat: update task order revert status if removed --- src/controllers/07-task-controller.ts | 89 +++++++++++++++++++-------- 1 file changed, 63 insertions(+), 26 deletions(-) diff --git a/src/controllers/07-task-controller.ts b/src/controllers/07-task-controller.ts index 77a593b..111b828 100644 --- a/src/controllers/07-task-controller.ts +++ b/src/controllers/07-task-controller.ts @@ -381,43 +381,71 @@ export class TaskController extends Controller { await permissionCheckCompany(req.user, record.registeredBranch); - await prisma.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( + if (record.taskList.some((v) => v.taskStatus !== "Pending")) { + throw new HttpError( + HttpStatus.BAD_REQUEST, + "One or more task is not pending", + "taskListNotPending", + ); + } + + 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: "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) => - !record?.taskList.find( + !body.taskList.find( (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: { include: branchRelationPermInclude(req.user), }, + taskList: true, }, }); @@ -438,6 +467,14 @@ export class TaskController extends Controller { 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 tx.taskOrder.delete({ where: { id: taskOrderId } }); });