From 529d4ad3df865a8e91fc663745430a57687f073d Mon Sep 17 00:00:00 2001 From: puriphatt Date: Thu, 20 Feb 2025 10:39:10 +0700 Subject: [PATCH] refactor: enhance request selection logic and improve filtering for empty step statuses --- .../09_task-order/SelectReadyRequestWork.vue | 82 ++++++++++++------- src/pages/11_credit-note/FormPage.vue | 1 + 2 files changed, 52 insertions(+), 31 deletions(-) diff --git a/src/pages/09_task-order/SelectReadyRequestWork.vue b/src/pages/09_task-order/SelectReadyRequestWork.vue index 1810d4a7..b294763e 100644 --- a/src/pages/09_task-order/SelectReadyRequestWork.vue +++ b/src/pages/09_task-order/SelectReadyRequestWork.vue @@ -165,35 +165,49 @@ function submit() { requestWorkId: string; requestWorkStep?: Task; }[] = []; - selectedEmployee.value.forEach((v, i) => { - const curr = v.stepStatus.find( - (s) => - s.workStatus === - (props.creditNote - ? RequestWorkStatus.Canceled - : RequestWorkStatus.Ready) || - s.workStatus === - (props.creditNote - ? RequestWorkStatus.Canceled - : RequestWorkStatus.InProgress), - ); - if (curr) { - const task: Task = { - ...curr, - attributes: curr.attributes, - workStatus: - curr.workStatus || props.creditNote - ? RequestWorkStatus.Ready - : RequestWorkStatus.Canceled, - taskOrderId: '', - requestWork: selectedEmployee.value[i], - }; + if (v.stepStatus.length === 0) { selected.push({ - step: task.step, - requestWorkId: task.requestWorkId, - requestWorkStep: task, + step: 0, + requestWorkId: v.id || '', + requestWorkStep: { + taskOrderId: '', + requestWork: v, + step: 0, + workStatus: '', + requestWorkId: '', + attributes: undefined, + }, }); + } else { + const curr = v.stepStatus.find( + (s) => + s.workStatus === + (props.creditNote + ? RequestWorkStatus.Canceled + : RequestWorkStatus.Ready) || + s.workStatus === + (props.creditNote + ? RequestWorkStatus.Canceled + : RequestWorkStatus.InProgress), + ); + if (curr) { + const task: Task = { + ...curr, + attributes: curr.attributes, + workStatus: + curr.workStatus || props.creditNote + ? RequestWorkStatus.Ready + : RequestWorkStatus.Canceled, + taskOrderId: '', + requestWork: selectedEmployee.value[i], + }; + selected.push({ + step: task.step, + requestWorkId: task.requestWorkId, + requestWorkStep: task, + }); + } } }); @@ -217,11 +231,17 @@ function onDialogOpen() { if (taskList.value.length === 0) return; const matchingItems = tempGroupEdit.value .flatMap((g) => g.list) - .filter((l) => - l.stepStatus.some((s) => - taskList.value.some((t) => s.requestWorkId === t.requestWorkId), - ), - ); + .filter((l) => { + if (l.stepStatus.length === 0) { + return taskList.value.some( + (t) => t.requestWorkStep?.requestWork.id === l.id, + ); + } else { + return l.stepStatus.some((s) => + taskList.value.some((t) => s.requestWorkId === t.requestWorkId), + ); + } + }); selectedEmployee.value = JSON.parse(JSON.stringify(matchingItems)); } diff --git a/src/pages/11_credit-note/FormPage.vue b/src/pages/11_credit-note/FormPage.vue index c0485725..3f1fe17c 100644 --- a/src/pages/11_credit-note/FormPage.vue +++ b/src/pages/11_credit-note/FormPage.vue @@ -630,6 +630,7 @@ onMounted(async () => { :task-list="taskListGroup" @add-product="openProductDialog" /> +