From 369d0f46960e70eb4160468096c8dc41516efb21 Mon Sep 17 00:00:00 2001 From: Methapon2001 <61303214+Methapon2001@users.noreply.github.com> Date: Mon, 23 Dec 2024 09:34:30 +0700 Subject: [PATCH] feat: check if request data is completed --- src/controllers/06-request-list-controller.ts | 59 ++++++++++++++++--- 1 file changed, 52 insertions(+), 7 deletions(-) diff --git a/src/controllers/06-request-list-controller.ts b/src/controllers/06-request-list-controller.ts index c3fa8f4..223124f 100644 --- a/src/controllers/06-request-list-controller.ts +++ b/src/controllers/06-request-list-controller.ts @@ -421,7 +421,6 @@ export class RequestListController extends Controller { responsibleUserLocal?: boolean | null; responsibleUserId?: string | null; }, - @Query() successAll?: boolean, ) { if (!payload.responsibleUserId) payload.responsibleUserId = undefined; @@ -458,14 +457,60 @@ export class RequestListController extends Controller { break; } - if (successAll && (payload.workStatus === "Completed" || payload.workStatus === "Ended")) { - await prisma.requestData.update({ - where: { - id: record.requestWork.requestDataId, + await prisma.$transaction(async (tx) => { + const requestList = await tx.requestData.findMany({ + include: { + requestWork: { + include: { + productService: { + include: { + product: true, + service: true, + work: { + include: { productOnWork: true }, + }, + }, + }, + stepStatus: true, + }, + }, + }, + where: { + requestWork: { + some: { + requestDataId: record.requestWork.requestDataId, + }, + }, }, - data: { requestDataStatus: "Completed" }, }); - } + + const completed: string[] = []; + + requestList.forEach((item) => { + const completeCheck = item.requestWork.every((work) => { + const stepCount = + work.productService.work?.productOnWork.find( + (v) => v.productId === work.productService.productId, + )?.stepCount || 0; + + const completeCount = work.stepStatus.filter( + (v) => v.workStatus === RequestWorkStatus.Completed, + ).length; + + // NOTE: step found then check if complete count equals step count + if (stepCount === completeCount && completeCount > 0) return true; + // NOTE: likely no step found and completed at least one + if (stepCount === 0 && completeCount > 0) return true; + }); + + if (completeCheck) completed.push(item.id); + }); + + await tx.requestData.updateMany({ + where: { id: { in: completed } }, + data: { requestDataStatus: RequestDataStatus.Completed }, + }); + }); return record; }