Index: arms/js/reqAddTable.js =================================================================== diff -u -r28436d4d5f04fc2bce39d6bbdf245ad96d4b64ba -ra958f7aa148e0b84423c37a0d94504c630e5ad9e --- arms/js/reqAddTable.js (.../reqAddTable.js) (revision 28436d4d5f04fc2bce39d6bbdf245ad96d4b64ba) +++ arms/js/reqAddTable.js (.../reqAddTable.js) (revision a958f7aa148e0b84423c37a0d94504c630e5ad9e) @@ -9,7 +9,7 @@ version: "Version", category: "구분", id: "TASK NO", - manager: "TASK OWNER", + writer: "TASK OWNER", status: "Status", depth1: "Depth 1", depth2: "Depth 2", @@ -24,7 +24,7 @@ }, version: { version: "Version", - manager: "TASK OWNER", + writer: "TASK OWNER", depth1: "Depth 1", content: "기능", open: "열림", @@ -34,7 +34,7 @@ statusTotal: "총계" }, owner: { - manager: "TASK OWNER", + writer: "TASK OWNER", version: "Version", depth1: "Depth 1", content: "기능", @@ -140,7 +140,7 @@ c_id, c_parentid, c_title, - c_req_owner, + c_req_writer, c_req_contents, reqStateEntity, reqPriorityEntity, @@ -162,7 +162,7 @@ version: getVersionTitle(vid), id: c_id, category: CategoryName[c_type], - manager: c_type !== "folder" ? c_req_owner : "", + writer: c_type !== "folder" ? c_req_writer : "", status: c_type !== "folder" ? reqStateEntity?.data ?? "" : "", ...Object.assign({ depth1: "", depth2: "", depth3: "" }, setDepth(data, c_parentid, [c_title])), content: c_title, @@ -188,7 +188,7 @@ c_id, c_parentid, c_title, - c_req_owner, + c_req_writer, c_req_contents, reqStateEntity, reqPriorityEntity, @@ -206,8 +206,8 @@ { id: c_id, version: JSON.parse(c_req_pdservice_versionset_link) ?? "", - manager: c_req_owner, - _manager: c_req_owner, + writer: c_req_writer, + _writer: c_req_writer, open: reqStateEntity?.c_id === 10 ? 1 : "", investigation: "", resolved: reqStateEntity?.c_id === 11 ? 1 : "", @@ -221,7 +221,7 @@ }, []); }; -const rearrangement = (arr, key, root, data) => +const rearrangement = (arr, key, root, data) => // arr를 key 기준으로 그룹화 첫번째 한테는 root 속성을 넣어줌 arr.reduce((acc, cur) => { const result = { ...cur, ...data }; const index = acc?.findIndex((item) => item.some((task) => task[key] === result[key])); @@ -247,77 +247,79 @@ } if (pivotType === "version") { - return versionList.map((version) => { - const filterItems = pivotTableData.filter((item) => item.version?.includes(`${version.c_id}`)); - const childrenItem = rearrangement(filterItems, "manager", "manager", { - version: version.c_title, - _version: version.c_id - }).reduce((acc, cur) => { - return [ - ...acc, - { - ...cur[0], - children: cur.slice(1, cur.length - 1), - lastChild: { - _version: version.c_id, - manager: `${cur[0].manager} 총계`, - _manager: cur[0].manager, - col: 1, - colSpan: 3, - origin: version, - ...calcStatus(cur) - } - } - ]; - }, []); + return versionList.map((version) => { + const filterItems = pivotTableData + .filter(item => item.origin && item.origin.attr && item.origin.attr.rel !== 'folder') // 폴더 제거 + .filter((item) => item.version?.includes(`${version.c_id}`)); - return { - version: `${version.c_title} 총계`, - _version: version.c_id, - col: 0, - colSpan: 4, - root: "version", - origin: version, - children: childrenItem, - ...calcStatus(filterItems) - }; - }); + const childrenItem = rearrangement(filterItems, "writer", "writer", { + version: version.c_title, + _version: version.c_id + }) + .reduce((acc, cur) => { + return [ + ...acc, + { + ...cur[0], + children: cur.slice(1, cur.length), + lastChild: { + _version: version.c_id, + writer: `${cur[0].writer} 총계`, + _writer: cur[0].writer, + col: 1, + colSpan: 3, + origin: version, + ...calcStatus(cur) + } + } + ]; + }, []); + return { + version: `${version.c_title} 총계`, + _version: version.c_id, + col: 0, + colSpan: 4, + root: "version", + origin: version, + children: childrenItem, + ...calcStatus(filterItems) + }; + }); } - if (pivotType === "owner") { - return rearrangement( - pivotTableData - .flatMap((task) => - task.version.reduce((acc, cur) => { - const versionItem = versionList.find((item) => item.c_id === Number(cur)); - return [...acc, { ...task, _version: versionItem.c_id, version: versionItem.c_title }]; - }, []) - ) - .sort((a, b) => a.manager?.localeCompare(b.manager) || a._version - b._version) - ).map((group) => ({ - manager: `${group[0].manager} 총계`, - _manager: group[0].manager, - col: 0, - colSpan: 4, - root: "manager", - children: rearrangement(group, "version", "version").reduce((acc, cur) => { - return [ - ...acc, - { - ...cur[0], - children: cur.slice(1, cur.length - 1), - lastChild: { - version: `${cur[0].version} 총계`, - _manager: group[0].manager, - col: 1, - colSpan: 3, - ...calcStatus(cur) - } - } - ]; - }, []), - ...calcStatus(group) - })); + if (pivotType === "owner") { // Task Owner + const 모든_요구사항데이터= pivotTableData + .filter(item => item.origin && item.origin.attr && item.origin.attr.rel !== 'folder') // 폴더 제외(요구사항만 포함) + .flatMap((task) => + task.version.reduce((acc, cur) => { + const versionItem = versionList.find((item) => item.c_id === Number(cur)); + return [...acc, { ...task, _version: versionItem.c_id, version: versionItem.c_title }]; + }, [])).sort((a, b) => a.writer?.localeCompare(b.writer) || a._version - b._version); // 데이터 정렬 + return rearrangement(모든_요구사항데이터,"writer", "writer").map((group) => ( + { + writer: `${group[0].writer} 총계`, + _writer: group[0].writer, + col: 0, + colSpan: 4, + root: "writer", + children: rearrangement(group, "version", "version").reduce((acc, cur) => { + return [ + ...acc, + { + ...cur[0], + children: cur.slice(1, cur.length), + lastChild: { + writer: `${cur[0].version} 총계`, + _writer: group[0].writer, + col: 1, + colSpan: 3, + ...calcStatus(cur) + } + } + ]; + }, []), + ...calcStatus(group) + })); } } @@ -428,8 +430,7 @@ const $tr = this.makeElement("tr"); $tr.setAttribute("data-id", cur.id ?? ""); $tr.setAttribute("data-version", cur._version ?? ""); - $tr.setAttribute("data-manager", cur._manager ?? ""); - + $tr.setAttribute("data-writer", cur._writer ?? ""); Object.keys(ContentType[pivotType]).forEach((key, index) => { const $col = this.makeElement(tag); $col.className = key; @@ -590,7 +591,7 @@ bindHeadEvent($el) { $el.addEventListener("click", (e) => { - !["manager", "depth1", "depth2", "depth3", "content"].includes(e.target.className) && + !["writer", "depth1", "depth2", "depth3", "content"].includes(e.target.className) && this.handleSorting(e, e.target.classList.item(0)); }); }