diff --git a/src/controllers/PositionController.ts b/src/controllers/PositionController.ts index f70f8ec6..5ba95b57 100644 --- a/src/controllers/PositionController.ts +++ b/src/controllers/PositionController.ts @@ -702,7 +702,7 @@ export class PositionController extends Controller { // { // ...checkChildConditions, // ...typeCondition, - // // id: masterId.length > 0 ? In(masterId) : false, + // id: masterId.length > 0 ? In(masterId) : false, // }, // { // ...checkChildConditions, diff --git a/src/controllers/ReportController.ts b/src/controllers/ReportController.ts index d24f9df8..2df2ef49 100644 --- a/src/controllers/ReportController.ts +++ b/src/controllers/ReportController.ts @@ -74,19 +74,19 @@ export class ReportController extends Controller { throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); } - const orgRootData = await AppDataSource.getRepository(OrgRoot) - .createQueryBuilder("orgRoot") - .where("orgRoot.orgRevisionId IN (:...ids)", { - ids: [orgRevision.id], - }) - .select([ - "orgRoot.id", - "orgRoot.orgRootName", - "orgRoot.orgRootShortName", - "orgRoot.orgRootOrder", - ]) - .orderBy("orgRoot.orgRootOrder", "ASC") - .getMany(); + const orgRootData = await this.orgRootRepository.find({ + where: { + orgRevisionId: orgRevision.id, + }, + order: { orgRootOrder: "ASC" }, + relations: [ + "posMasters", + "posMasters.next_holder", + "posMasters.positions", + "posMasters.positions.posLevel", + "posMasters.positions.posType", + ], + }); const orgRootIds = orgRootData.map((orgRoot) => orgRoot.id) || null; const orgChild1Data = @@ -195,373 +195,101 @@ export class ReportController extends Controller { }); let data = new Array(); - await Promise.all( - orgRootData.map(async (orgRoot) => { - const node = { - orgRootName: orgRoot.orgRootName, - orgTreeName: orgRoot.orgRootName, - orgTreeShortName: orgRoot.orgRootShortName, - posMasters: await Promise.all( - posMasters - .filter((posMaster) => posMaster.orgRootId === orgRoot.id) - .map(async (posMaster) => { - let posMasterOld: any = null; - if (posMaster.next_holder != null) { - // posMasterOld = posMasterOlds.find((posMasOld) => - // posMasOld.current_holder == null - // ? false - // : posMasOld.current_holder.id === posMaster.next_holder.id, - // ); - } - let positionOld: any = null; - if (posMasterOld != null) - positionOld = positionOlds.find( - (positionold) => positionold.posMasterId === posMasterOld.id, - ); - return { - posMasterNoPrefix: posMaster.posMasterNoPrefix, - posMasterNo: posMaster.posMasterNo, - posMasterNoSuffix: posMaster.posMasterNoSuffix, - // profileFullname: - // posMaster.next_holder == null - // ? null - // : `${posMaster.next_holder.prefix}${posMaster.next_holder.firstName} ${posMaster.next_holder.lastName}`, - profilePosMasterNo: posMasterOld == null ? null : posMasterOld.posMasterNo, - profilePositionName: positionOld == null ? null : positionOld.positionName, - profilePosType: positionOld == null ? null : positionOld.posType.posTypeName, - profilePosLevel: positionOld == null ? null : positionOld.posLevel.posLevelName, - profilePositionField: positionOld == null ? null : positionOld.positionField, - positions: await Promise.all( - positions - .filter((position) => position.posMasterId === posMaster.id) - .map(async (position) => { - return { - positionName: position.positionName, - positionField: position.positionField, - posType: position.posType == null ? null : position.posType.posTypeName, - posLevel: - position.posLevel == null ? null : position.posLevel.posLevelName, - posExecutive: - position.posExecutive == null - ? null - : position.posExecutive.posExecutiveName, - }; - }), - ), - }; - }), - ), - }; - data.push(node); + for (let orgRoot of orgRootData) { + const node = { + orgRootName: orgRoot.orgRootName, + orgTreeName: orgRoot.orgRootName, + orgTreeShortName: orgRoot.orgRootShortName, + posMasters: await Promise.all( + orgRoot.posMasters.map(async (posMaster) => { + // let posMasterOld: any = null; + // if (posMaster.next_holder != null) { + // // posMasterOld = posMasterOlds.find((posMasOld) => + // // posMasOld.current_holder == null + // // ? false + // // : posMasOld.current_holder.id === posMaster.next_holder.id, + // // ); + // } + // let positionOld: any = null; + // if (posMasterOld != null) + // positionOld = positionOlds.find( + // (positionold) => positionold.posMasterId === posMasterOld.id, + // ); + // const positionNow = await Promise.all( + // positions + // .filter((position) => position.posMasterId === posMaster.id) + // .map(async (position) => { + // return { + // positionName: position.positionName, + // positionField: position.positionField, + // posType: position.posType == null ? null : position.posType.posTypeName, + // posLevel: position.posLevel == null ? null : position.posLevel.posLevelName, + // posExecutive: + // position.posExecutive == null + // ? null + // : position.posExecutive.posExecutiveName, + // }; + // }), + // ); + const positionName = [ + ...new Set(posMaster.positions.map((x) => x.positionName)), + ].join(" หรือ "); + const posType = [ + ...new Set(posMaster.positions.map((x) => x.posType.posTypeName)), + ].join(" หรือ "); + const posLevel = [ + ...new Set(posMaster.positions.map((x) => x.posLevel.posLevelName)), + ].join(" หรือ "); + const positionField = [ + ...new Set(posMaster.positions.map((x) => x.positionField)), + ].join(" หรือ "); + return { + posMasterNoPrefix: posMaster.posMasterNoPrefix, + posMasterNo: posMaster.posMasterNo, + posMasterNoSuffix: posMaster.posMasterNoSuffix, + profileFullname: + posMaster.next_holder == null + ? "- ว่าง -" + : `${posMaster.next_holder.prefix}${posMaster.next_holder.firstName} ${posMaster.next_holder.lastName}`, - await Promise.all( - orgChild1Data - .filter((orgChild1) => orgChild1.orgRootId === orgRoot.id) - .map(async (orgChild1) => { - const node = { - orgRootName: orgChild1.orgChild1Name, - orgTreeName: orgChild1.orgChild1Name, - orgTreeShortName: orgChild1.orgChild1ShortName, - posMasters: await Promise.all( - posMasters - .filter((posMaster) => posMaster.orgChild1Id === orgChild1.id) - .map(async (posMaster) => { - let posMasterOld: any = null; - if (posMaster.next_holder != null) { - // posMasterOld = posMasterOlds.find((posMasOld) => - // posMasOld.current_holder == null - // ? false - // : posMasOld.current_holder.id === posMaster.next_holder.id, - // ); - } - let positionOld: any = null; - if (posMasterOld != null) - positionOld = positionOlds.find( - (positionold) => positionold.posMasterId === posMasterOld.id, - ); - return { - posMasterNoPrefix: posMaster.posMasterNoPrefix, - posMasterNo: posMaster.posMasterNo, - posMasterNoSuffix: posMaster.posMasterNoSuffix, - // fullname: - // posMaster.next_holder == null - // ? null - // : `${posMaster.next_holder.prefix}${posMaster.next_holder.firstName} ${posMaster.next_holder.lastName}`, - profilePosMasterNo: - posMasterOld == null ? null : posMasterOld.posMasterNo, - profilePositionName: - positionOld == null ? null : positionOld.positionName, - profilePosType: - positionOld == null ? null : positionOld.posType.posTypeName, - profilePosLevel: - positionOld == null ? null : positionOld.posLevel.posLevelName, - profilePositionField: - positionOld == null ? null : positionOld.positionField, - positions: await Promise.all( - positions - .filter((position) => position.posMasterId === posMaster.id) - .map(async (position) => { - return { - positionName: position.positionName, - posType: - position.posType == null ? null : position.posType.posTypeName, - posLevel: - position.posLevel == null - ? null - : position.posLevel.posLevelName, - posExecutive: - position.posExecutive == null - ? null - : position.posExecutive.posExecutiveName, - }; - }), - ), - }; - }), - ), - }; - data.push(node); - await Promise.all( - orgChild2Data - .filter((orgChild2) => orgChild2.orgChild1Id === orgChild1.id) - .map(async (orgChild2) => { - const node = { - orgRootName: orgChild2.orgChild2Name, - orgTreeName: orgChild2.orgChild2Name, - orgTreeShortName: orgChild2.orgChild2ShortName, - posMasters: await Promise.all( - posMasters - .filter((posMaster) => posMaster.orgChild2Id === orgChild2.id) - .map(async (posMaster) => { - let posMasterOld: any = null; - if (posMaster.next_holder != null) { - // posMasterOld = posMasterOlds.find((posMasOld) => - // posMasOld.current_holder == null - // ? false - // : posMasOld.current_holder.id === posMaster.next_holder.id, - // ); - } - let positionOld: any = null; - if (posMasterOld != null) - positionOld = positionOlds.find( - (positionold) => positionold.posMasterId === posMasterOld.id, - ); - return { - posMasterNoPrefix: posMaster.posMasterNoPrefix, - posMasterNo: posMaster.posMasterNo, - posMasterNoSuffix: posMaster.posMasterNoSuffix, - // fullname: - // posMaster.next_holder == null - // ? null - // : `${posMaster.next_holder.prefix}${posMaster.next_holder.firstName} ${posMaster.next_holder.lastName}`, - profilePosMasterNo: - posMasterOld == null ? null : posMasterOld.posMasterNo, - profilePositionName: - positionOld == null ? null : positionOld.positionName, - profilePosType: - positionOld == null ? null : positionOld.posType.posTypeName, - profilePosLevel: - positionOld == null ? null : positionOld.posLevel.posLevelName, - profilePositionField: - positionOld == null ? null : positionOld.positionField, - positions: await Promise.all( - positions - .filter((position) => position.posMasterId === posMaster.id) - .map(async (position) => { - return { - positionName: position.positionName, - posType: - position.posType == null - ? null - : position.posType.posTypeName, - posLevel: - position.posLevel == null - ? null - : position.posLevel.posLevelName, - posExecutive: - position.posExecutive == null - ? null - : position.posExecutive.posExecutiveName, - }; - }), - ), - }; - }), - ), - }; - data.push(node); - await Promise.all( - orgChild3Data - .filter((orgChild3) => orgChild3.orgChild2Id === orgChild2.id) - .map(async (orgChild3) => { - const node = { - orgRootName: orgChild3.orgChild3Name, - orgTreeName: orgChild3.orgChild3Name, - orgTreeShortName: orgChild3.orgChild3ShortName, - posMasters: await Promise.all( - posMasters - .filter((posMaster) => posMaster.orgChild3Id === orgChild3.id) - .map(async (posMaster) => { - let posMasterOld: any = null; - if (posMaster.next_holder != null) { - // posMasterOld = posMasterOlds.find((posMasOld) => - // posMasOld.current_holder == null - // ? false - // : posMasOld.current_holder.id === - // posMaster.next_holder.id, - // ); - } - let positionOld: any = null; - if (posMasterOld != null) - positionOld = positionOlds.find( - (positionold) => - positionold.posMasterId === posMasterOld.id, - ); - return { - posMasterNoPrefix: posMaster.posMasterNoPrefix, - posMasterNo: posMaster.posMasterNo, - posMasterNoSuffix: posMaster.posMasterNoSuffix, - // fullname: - // posMaster.next_holder == null - // ? null - // : `${posMaster.next_holder.prefix}${posMaster.next_holder.firstName} ${posMaster.next_holder.lastName}`, - profilePosMasterNo: - posMasterOld == null ? null : posMasterOld.posMasterNo, - profilePositionName: - positionOld == null ? null : positionOld.positionName, - profilePosType: - positionOld == null - ? null - : positionOld.posType.posTypeName, - profilePosLevel: - positionOld == null - ? null - : positionOld.posLevel.posLevelName, - profilePositionField: - positionOld == null ? null : positionOld.positionField, - positions: await Promise.all( - positions - .filter( - (position) => position.posMasterId === posMaster.id, - ) - .map(async (position) => { - return { - positionName: position.positionName, - posType: - position.posType == null - ? null - : position.posType.posTypeName, - posLevel: - position.posLevel == null - ? null - : position.posLevel.posLevelName, - posExecutive: - position.posExecutive == null - ? null - : position.posExecutive.posExecutiveName, - }; - }), - ), - }; - }), - ), - }; - data.push(node); - await Promise.all( - orgChild4Data - .filter((orgChild4) => orgChild4.orgChild3Id === orgChild3.id) - .map(async (orgChild4) => { - const node = { - orgRootName: orgChild4.orgChild4Name, - orgTreeName: orgChild4.orgChild4Name, - orgTreeShortName: orgChild4.orgChild4ShortName, - posMasters: await Promise.all( - posMasters - .filter( - (posMaster) => posMaster.orgChild4Id === orgChild4.id, - ) - .map(async (posMaster) => { - let posMasterOld: any = null; - if (posMaster.next_holder != null) { - // posMasterOld = posMasterOlds.find((posMasOld) => - // posMasOld.current_holder == null - // ? false - // : posMasOld.current_holder.id === - // posMaster.next_holder.id, - // ); - } - let positionOld: any = null; - if (posMasterOld != null) - positionOld = positionOlds.find( - (positionold) => - positionold.posMasterId === posMasterOld.id, - ); - return { - posMasterNoPrefix: posMaster.posMasterNoPrefix, - posMasterNo: posMaster.posMasterNo, - posMasterNoSuffix: posMaster.posMasterNoSuffix, - // fullname: - // posMaster.next_holder == null - // ? null - // : `${posMaster.next_holder.prefix}${posMaster.next_holder.firstName} ${posMaster.next_holder.lastName}`, - profilePosMasterNo: - posMasterOld == null - ? null - : posMasterOld.posMasterNo, - profilePositionName: - positionOld == null ? null : positionOld.positionName, - profilePosType: - positionOld == null - ? null - : positionOld.posType.posTypeName, - profilePosLevel: - positionOld == null - ? null - : positionOld.posLevel.posLevelName, - profilePositionField: - positionOld == null - ? null - : positionOld.positionField, - positions: await Promise.all( - positions - .filter( - (position) => - position.posMasterId === posMaster.id, - ) - .map(async (position) => { - return { - positionName: position.positionName, - posType: - position.posType == null - ? null - : position.posType.posTypeName, - posLevel: - position.posLevel == null - ? null - : position.posLevel.posLevelName, - posExecutive: - position.posExecutive == null - ? null - : position.posExecutive.posExecutiveName, - }; - }), - ), - }; - }), - ), - }; - data.push(node); - }), - ); - }), - ); - }), - ); - }), - ); - }), - ); + profilePosMasterNo: posMaster.next_holder == null ? null : "xxx", + profilePositionName: posMaster.next_holder == null ? positionName : "xxx", + profilePosType: posMaster.next_holder == null ? posType : "xxx", + profilePosLevel: posMaster.next_holder == null ? posLevel : "xxx", + profilePositionField: posMaster.next_holder == null ? positionField : "xxx", + // profilePosMasterNo: (posMasterOld == null ? null : posMasterOld.posMasterNo), + // profilePositionName: (positionOld == null ? null : positionOld.positionName), + // profilePosType: (positionOld == null ? null : positionOld.posType.posTypeName), + // profilePosLevel: (positionOld == null ? null : positionOld.posLevel.posLevelName), + // profilePositionField: (positionOld == null ? null : positionOld.positionField), + PositionName: positionName, + PosType: posType, + PosLevel: posLevel, + PositionField: positionField, + // positions: await Promise.all( + // positions + // .filter((position) => position.posMasterId === posMaster.id) + // .map(async (position) => { + // return { + // positionName: position.positionName, + // positionField: position.positionField, + // posType: position.posType == null ? null : position.posType.posTypeName, + // posLevel: + // position.posLevel == null ? null : position.posLevel.posLevelName, + // posExecutive: + // position.posExecutive == null + // ? null + // : position.posExecutive.posExecutiveName, + // }; + // }), + // ), + }; + }), + ), + }; + data.push(node); + } return new HttpSuccess(data); } catch (error) { return error;