diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index c4b02bcc..21dc9ba3 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -67,40 +67,40 @@ jobs: docker compose pull docker compose up -d echo "${{ steps.gen_ver.outputs.image_ver }}"> success - - name: Notify Discord Success - if: success() - run: | - curl -H "Content-Type: application/json" \ - -X POST \ - -d '{ - "embeds": [{ - "title": "✅ Deployment Success!", - "description": "**Details:**\n- Image: `${{env.IMAGE_NAME}}`\n- Version: `${{ steps.gen_ver.outputs.image_ver }}`\n- Deployed by: `${{github.actor}}`", - "color": 3066993, - "footer": { - "text": "Release Notification", - "icon_url": "https://example.com/success-icon.png" - }, - "timestamp": "'$(date -u +%Y-%m-%dT%H:%M:%SZ)'" - }] - }' \ - ${{ secrets.DISCORD_WEBHOOK }} + # - name: Notify Discord Success + # if: success() + # run: | + # curl -H "Content-Type: application/json" \ + # -X POST \ + # -d '{ + # "embeds": [{ + # "title": "✅ Deployment Success!", + # "description": "**Details:**\n- Image: `${{env.IMAGE_NAME}}`\n- Version: `${{ steps.gen_ver.outputs.image_ver }}`\n- Deployed by: `${{github.actor}}`", + # "color": 3066993, + # "footer": { + # "text": "Release Notification", + # "icon_url": "https://example.com/success-icon.png" + # }, + # "timestamp": "'$(date -u +%Y-%m-%dT%H:%M:%SZ)'" + # }] + # }' \ + # ${{ secrets.DISCORD_WEBHOOK }} - - name: Notify Discord Failure - if: failure() - run: | - curl -H "Content-Type: application/json" \ - -X POST \ - -d '{ - "embeds": [{ - "title": "❌ Deployment Failed!", - "description": "**Details:**\n- Image: `${{env.IMAGE_NAME}}`\n- Version: `${{ steps.gen_ver.outputs.image_ver }}`\n- Attempted by: `${{github.actor}}`", - "color": 15158332, - "footer": { - "text": "Release Notification", - "icon_url": "https://example.com/failure-icon.png" - }, - "timestamp": "'$(date -u +%Y-%m-%dT%H:%M:%SZ)'" - }] - }' \ - ${{ secrets.DISCORD_WEBHOOK }} + # - name: Notify Discord Failure + # if: failure() + # run: | + # curl -H "Content-Type: application/json" \ + # -X POST \ + # -d '{ + # "embeds": [{ + # "title": "❌ Deployment Failed!", + # "description": "**Details:**\n- Image: `${{env.IMAGE_NAME}}`\n- Version: `${{ steps.gen_ver.outputs.image_ver }}`\n- Attempted by: `${{github.actor}}`", + # "color": 15158332, + # "footer": { + # "text": "Release Notification", + # "icon_url": "https://example.com/failure-icon.png" + # }, + # "timestamp": "'$(date -u +%Y-%m-%dT%H:%M:%SZ)'" + # }] + # }' \ + # ${{ secrets.DISCORD_WEBHOOK }} diff --git a/src/controllers/ReportController.ts b/src/controllers/ReportController.ts index 9e8063a9..4b993247 100644 --- a/src/controllers/ReportController.ts +++ b/src/controllers/ReportController.ts @@ -9,7 +9,7 @@ import { Path, Query, Post, - Body + Body, } from "tsoa"; import { AppDataSource } from "../database/data-source"; import HttpSuccess from "../interfaces/http-success"; @@ -30,6 +30,9 @@ import Extension from "../interfaces/extension"; import { LeaveType } from "../entities/LeaveType"; import HttpStatus from "../interfaces/http-status"; import { Profile } from "../entities/Profile"; +import { Position } from "../entities/Position"; +import { ProfileEducation } from "../entities/ProfileEducation"; +import { ProfileSalary } from "../entities/ProfileSalary"; import { viewRegistryOfficer } from "../entities/view/viewRegistryOfficer"; import { viewRegistryEmployee } from "../entities/view/viewRegistryEmployee"; import { EmployeeTempPosMaster } from "../entities/EmployeeTempPosMaster"; @@ -56,6 +59,9 @@ export class ReportController extends Controller { private profileRepository = AppDataSource.getRepository(Profile); private empPosMasterRepository = AppDataSource.getRepository(EmployeePosMaster); private empTempPosMasterRepository = AppDataSource.getRepository(EmployeeTempPosMaster); + private positionRepository = AppDataSource.getRepository(Position); + private profileEducationRepository = AppDataSource.getRepository(ProfileEducation); + private profileSalaryRepository = AppDataSource.getRepository(ProfileSalary); /** * API รายงานสถิติข้อมูลข้าราชการ กทม. สามัญ @@ -674,15 +680,15 @@ export class ReportController extends Controller { reqBody: { node: number; nodeId: string; - } + }, ) { - let _nodeId:string = reqBody.nodeId ? reqBody.nodeId : ""; - let _node:number = reqBody.node ? reqBody.node : 0; - if(_nodeId === "" || _node < 0 || _node > 4) { + let _nodeId: string = reqBody.nodeId ? reqBody.nodeId : ""; + let _node: number = reqBody.node ? reqBody.node : 0; + if (_nodeId === "" || _node < 0 || _node > 4) { throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); - } + } - let orgName:string = ""; + let orgName: string = ""; let data = new Array(); let no = 1; @@ -691,12 +697,12 @@ export class ReportController extends Controller { // ดึงข้อมูล orgRoot ตาม nodeId และลูกทั้งหมด (cascade 0..4) const orgRootData = await this.orgRootRepository.find({ where: { id: _nodeId }, - order: { + order: { orgRootOrder: "ASC", - posMasters:{ + posMasters: { posMasterOrder: "ASC", - posMasterCreatedAt: "ASC" - } + posMasterCreatedAt: "ASC", + }, }, relations: [ "posMasters", @@ -714,12 +720,12 @@ export class ReportController extends Controller { const orgRootIds = orgRootData.map((r) => r.id) || null; const orgChild1Data = await this.child1Repository.find({ where: { orgRootId: In(orgRootIds) }, - order: { + order: { orgChild1Order: "ASC", - posMasters:{ + posMasters: { posMasterOrder: "ASC", - posMasterCreatedAt: "ASC" - } + posMasterCreatedAt: "ASC", + }, }, relations: [ "posMasters", @@ -732,12 +738,12 @@ export class ReportController extends Controller { const orgChild1Ids = orgChild1Data.map((c) => c.id) || null; const orgChild2Data = await this.child2Repository.find({ where: { orgChild1: In(orgChild1Ids) }, - order: { + order: { orgChild2Order: "ASC", - posMasters:{ + posMasters: { posMasterOrder: "ASC", - posMasterCreatedAt: "ASC" - } + posMasterCreatedAt: "ASC", + }, }, relations: [ "posMasters", @@ -750,12 +756,12 @@ export class ReportController extends Controller { const orgChild2Ids = orgChild2Data.map((c) => c.id) || null; const orgChild3Data = await this.child3Repository.find({ where: { orgChild2: In(orgChild2Ids) }, - order: { + order: { orgChild3Order: "ASC", - posMasters:{ + posMasters: { posMasterOrder: "ASC", - posMasterCreatedAt: "ASC" - } + posMasterCreatedAt: "ASC", + }, }, relations: [ "posMasters", @@ -768,12 +774,12 @@ export class ReportController extends Controller { const orgChild3Ids = orgChild3Data.map((c) => c.id) || null; const orgChild4Data = await this.child4Repository.find({ where: { orgChild3: In(orgChild3Ids) }, - order: { + order: { orgChild4Order: "ASC", - posMasters:{ + posMasters: { posMasterOrder: "ASC", - posMasterCreatedAt: "ASC" - } + posMasterCreatedAt: "ASC", + }, }, relations: [ "posMasters", @@ -786,21 +792,256 @@ export class ReportController extends Controller { let _nodeTemp: any = null; for (let orgRoot of orgRootData) { - await Promise.all( - orgRoot.posMasters - .filter((x) => x.orgChild1Id == null) - .sort((a, b) => a.posMasterOrder - b.posMasterOrder) - .map(async (posMaster) => { - if (posMaster.orgChild1Id == null) { + const posMastersFiltered = orgRoot.posMasters + .filter((x) => x.orgChild1Id == null) + .sort((a, b) => a.posMasterOrder - b.posMasterOrder); + + for (let posMaster of posMastersFiltered) { + if (posMaster.orgChild1Id == null) { + const positionName = [ + ...new Set( + posMaster.positions + .sort((a: any, b: any) => a.orderNo - b.orderNo) + .map((x) => + x.positionArea ? `${x.positionName} (${x.positionArea})` : x.positionName, + ), + ), + ]; + const posType = [ + ...new Set( + posMaster.positions + .filter((x: any) => x.posType != null) + .map((x) => x.posType.posTypeName), + ), + ]; + const posLevel = [ + ...new Set( + posMaster.positions + .filter((x: any) => x.posLevel != null) + .map((x) => x.posLevel.posLevelName), + ), + ]; + const posExecutive = [ + ...new Set( + posMaster.positions + .filter((x: any) => x.posExecutive != null) + .map((x: any) => + x.positionExecutiveField + ? `${x.posExecutive.posExecutiveName} (${x.positionExecutiveField})` + : x.posExecutive.posExecutiveName, + ), + ), + ]; + + let node = { + orgTreeName: orgRoot.orgRootName, + orgTreeShortName: orgRoot.orgRootShortName, + posMasterNo: posMaster.posMasterNo, + positionName: positionName.join(" หรือ "), + posType: posType.join(" หรือ "), + posLevel: posLevel.join(" หรือ "), + posExecutive: posExecutive.join(" หรือ "), + reason: posMaster.reason == null ? "" : posMaster.reason, + }; + if (_nodeTemp == null) { + const head = { + posMasterNo: Extension.ToThaiNumber(node.orgTreeShortName.toString()), + posExecutive: Extension.ToThaiNumber(node.orgTreeName.toString()), + positionName: "", + posType: "", + posLevel: "", + reason: "", + }; + data.push(head); + const _head = { + no: Extension.ToThaiNumber(no.toString()), + posMasterNo: + node.posMasterNo == null + ? "" + : Extension.ToThaiNumber(node.posMasterNo.toString()), + posExecutive: Extension.ToThaiNumber(node.posExecutive.toString()), + positionName: Extension.ToThaiNumber(node.positionName.toString()), + posType: Extension.ToThaiNumber(node.posType.toString()), + posLevel: Extension.ToThaiNumber(node.posLevel.toString()), + reason: Extension.ToThaiNumber(node.reason.toString()), + }; + data.push(_head); + } else { + if ( + node.orgTreeShortName != _nodeTemp.orgTreeShortName || + node.orgTreeName != _nodeTemp.orgTreeName + ) { + const head = { + posMasterNo: + node.orgTreeShortName == _nodeTemp.orgTreeShortName + ? "" + : node.orgTreeShortName, + posExecutive: + node.orgTreeName == _nodeTemp.orgTreeName + ? "" + : Extension.ToThaiNumber(node.orgTreeName.toString()), + positionName: "", + posType: "", + posLevel: "", + reason: "", + }; + data.push(head); + _nodeTemp = null; + } + const head = { + no: Extension.ToThaiNumber(no.toString()), + posMasterNo: + node.posMasterNo == null + ? "" + : Extension.ToThaiNumber(node.posMasterNo.toString()), + posExecutive: Extension.ToThaiNumber(node.posExecutive.toString()), + positionName: Extension.ToThaiNumber(node.positionName.toString()), + posType: Extension.ToThaiNumber(node.posType.toString()), + posLevel: Extension.ToThaiNumber(node.posLevel.toString()), + reason: Extension.ToThaiNumber(node.reason.toString()), + }; + data.push(head); + } + no += 1; + _nodeTemp = node; + } + } + _nodeTemp = null; + + for (let orgChild1 of orgChild1Data.filter( + (orgChild1) => orgChild1.orgRootId === orgRoot.id, + )) { + const posMastersFiltered = orgChild1.posMasters + .filter((x) => x.orgChild2Id == null) + .sort((a, b) => a.posMasterOrder - b.posMasterOrder); + + for (let posMaster of posMastersFiltered) { + if (posMaster.orgChild2Id == null) { + const positionName = [ + ...new Set( + posMaster.positions + .sort((a: any, b: any) => a.orderNo - b.orderNo) + .map((x) => + x.positionArea ? `${x.positionName} (${x.positionArea})` : x.positionName, + ), + ), + ]; + const posType = [ + ...new Set( + posMaster.positions + .filter((x: any) => x.posType != null) + .map((x) => x.posType.posTypeName), + ), + ]; + const posLevel = [ + ...new Set( + posMaster.positions + .filter((x: any) => x.posLevel != null) + .map((x) => x.posLevel.posLevelName), + ), + ]; + const posExecutive = [ + ...new Set( + posMaster.positions + .filter((x: any) => x.posExecutive != null) + .map((x: any) => + x.positionExecutiveField + ? `${x.posExecutive.posExecutiveName} (${x.positionExecutiveField})` + : x.posExecutive.posExecutiveName, + ), + ), + ]; + + let node = { + orgTreeName: orgChild1.orgChild1Name, + orgTreeShortName: orgChild1.orgChild1ShortName, + posMasterNo: posMaster.posMasterNo, + positionName: positionName.join(" หรือ "), + posType: posType.join(" หรือ "), + posLevel: posLevel.join(" หรือ "), + posExecutive: posExecutive.join(" หรือ "), + reason: posMaster.reason == null ? "" : posMaster.reason, + }; + if (_nodeTemp == null) { + const head = { + posMasterNo: Extension.ToThaiNumber(node.orgTreeShortName?.toString() ?? ""), + posExecutive: Extension.ToThaiNumber(node.orgTreeName?.toString() ?? ""), + positionName: "", + posType: "", + posLevel: "", + reason: "", + }; + data.push(head); + const _head = { + no: Extension.ToThaiNumber(no.toString()), + posMasterNo: + node.posMasterNo == null + ? "" + : Extension.ToThaiNumber(node.posMasterNo.toString()), + posExecutive: Extension.ToThaiNumber(node.posExecutive.toString()), + positionName: Extension.ToThaiNumber(node.positionName.toString()), + posType: Extension.ToThaiNumber(node.posType.toString()), + posLevel: Extension.ToThaiNumber(node.posLevel.toString()), + reason: Extension.ToThaiNumber(node.reason.toString()), + }; + data.push(_head); + } else { + if ( + node.orgTreeShortName != _nodeTemp.orgTreeShortName || + node.orgTreeName != _nodeTemp.orgTreeName + ) { + const head = { + posMasterNo: + node.orgTreeShortName == _nodeTemp.orgTreeShortName + ? "" + : node.orgTreeShortName, + posExecutive: + node.orgTreeName == _nodeTemp.orgTreeName + ? "" + : Extension.ToThaiNumber(node.orgTreeName.toString()), + positionName: "", + posType: "", + posLevel: "", + reason: "", + }; + data.push(head); + _nodeTemp = null; + } + const head = { + no: Extension.ToThaiNumber(no.toString()), + posMasterNo: + node.posMasterNo == null + ? "" + : Extension.ToThaiNumber(node.posMasterNo.toString()), + posExecutive: Extension.ToThaiNumber(node.posExecutive.toString()), + positionName: Extension.ToThaiNumber(node.positionName.toString()), + posType: Extension.ToThaiNumber(node.posType.toString()), + posLevel: Extension.ToThaiNumber(node.posLevel.toString()), + reason: Extension.ToThaiNumber(node.reason.toString()), + }; + data.push(head); + } + no += 1; + _nodeTemp = node; + } + } + + for (let orgChild2 of orgChild2Data.filter( + (orgChild2) => orgChild2.orgChild1Id === orgChild1.id, + )) { + const posMastersFiltered = orgChild2.posMasters + .filter((x) => x.orgChild3Id == null) + .sort((a, b) => a.posMasterOrder - b.posMasterOrder); + + for (let posMaster of posMastersFiltered) { + if (posMaster.orgChild3Id == null) { const positionName = [ ...new Set( posMaster.positions .sort((a: any, b: any) => a.orderNo - b.orderNo) .map((x) => - x.positionArea - ? `${x.positionName} (${x.positionArea})` - : x.positionName - ) + x.positionArea ? `${x.positionName} (${x.positionArea})` : x.positionName, + ), ), ]; const posType = [ @@ -824,14 +1065,14 @@ export class ReportController extends Controller { .map((x: any) => x.positionExecutiveField ? `${x.posExecutive.posExecutiveName} (${x.positionExecutiveField})` - : x.posExecutive.posExecutiveName - ) + : x.posExecutive.posExecutiveName, + ), ), ]; let node = { - orgTreeName: orgRoot.orgRootName, - orgTreeShortName: orgRoot.orgRootShortName, + orgTreeName: orgChild2.orgChild2Name, + orgTreeShortName: orgChild2.orgChild2ShortName, posMasterNo: posMaster.posMasterNo, positionName: positionName.join(" หรือ "), posType: posType.join(" หรือ "), @@ -841,8 +1082,8 @@ export class ReportController extends Controller { }; if (_nodeTemp == null) { const head = { - posMasterNo: Extension.ToThaiNumber(node.orgTreeShortName.toString()), - posExecutive: Extension.ToThaiNumber(node.orgTreeName.toString()), + posMasterNo: Extension.ToThaiNumber(node.orgTreeShortName?.toString() ?? ""), + posExecutive: Extension.ToThaiNumber(node.orgTreeName?.toString() ?? ""), positionName: "", posType: "", posLevel: "", @@ -869,7 +1110,9 @@ export class ReportController extends Controller { ) { const head = { posMasterNo: - node.orgTreeShortName == _nodeTemp.orgTreeShortName ? "" : node.orgTreeShortName, + node.orgTreeShortName == _nodeTemp.orgTreeShortName + ? "" + : node.orgTreeShortName, posExecutive: node.orgTreeName == _nodeTemp.orgTreeName ? "" @@ -899,245 +1142,11 @@ export class ReportController extends Controller { no += 1; _nodeTemp = node; } - }) - ); - _nodeTemp = null; + } - for (let orgChild1 of orgChild1Data.filter((orgChild1) => orgChild1.orgRootId === orgRoot.id)) { - await Promise.all( - orgChild1.posMasters - .filter((x) => x.orgChild2Id == null) - .sort((a, b) => a.posMasterOrder - b.posMasterOrder) - .map(async (posMaster) => { - if (posMaster.orgChild2Id == null) { - const positionName = [ - ...new Set( - posMaster.positions - .sort((a: any, b: any) => a.orderNo - b.orderNo) - .map((x) => - x.positionArea - ? `${x.positionName} (${x.positionArea})` - : x.positionName - ) - ), - ]; - const posType = [ - ...new Set( - posMaster.positions - .filter((x: any) => x.posType != null) - .map((x) => x.posType.posTypeName), - ), - ]; - const posLevel = [ - ...new Set( - posMaster.positions - .filter((x: any) => x.posLevel != null) - .map((x) => x.posLevel.posLevelName), - ), - ]; - const posExecutive = [ - ...new Set( - posMaster.positions - .filter((x: any) => x.posExecutive != null) - .map((x: any) => - x.positionExecutiveField - ? `${x.posExecutive.posExecutiveName} (${x.positionExecutiveField})` - : x.posExecutive.posExecutiveName - ) - ), - ]; - - let node = { - orgTreeName: orgChild1.orgChild1Name, - orgTreeShortName: orgChild1.orgChild1ShortName, - posMasterNo: posMaster.posMasterNo, - positionName: positionName.join(" หรือ "), - posType: posType.join(" หรือ "), - posLevel: posLevel.join(" หรือ "), - posExecutive: posExecutive.join(" หรือ "), - reason: posMaster.reason == null ? "" : posMaster.reason, - }; - if (_nodeTemp == null) { - const head = { - posMasterNo: Extension.ToThaiNumber(node.orgTreeShortName?.toString() ?? ""), - posExecutive: Extension.ToThaiNumber(node.orgTreeName?.toString() ?? ""), - positionName: "", - posType: "", - posLevel: "", - reason: "", - }; - data.push(head); - const _head = { - no: Extension.ToThaiNumber(no.toString()), - posMasterNo: - node.posMasterNo == null - ? "" - : Extension.ToThaiNumber(node.posMasterNo.toString()), - posExecutive: Extension.ToThaiNumber(node.posExecutive.toString()), - positionName: Extension.ToThaiNumber(node.positionName.toString()), - posType: Extension.ToThaiNumber(node.posType.toString()), - posLevel: Extension.ToThaiNumber(node.posLevel.toString()), - reason: Extension.ToThaiNumber(node.reason.toString()), - }; - data.push(_head); - } else { - if ( - node.orgTreeShortName != _nodeTemp.orgTreeShortName || - node.orgTreeName != _nodeTemp.orgTreeName - ) { - const head = { - posMasterNo: - node.orgTreeShortName == _nodeTemp.orgTreeShortName ? "" : node.orgTreeShortName, - posExecutive: - node.orgTreeName == _nodeTemp.orgTreeName - ? "" - : Extension.ToThaiNumber(node.orgTreeName.toString()), - positionName: "", - posType: "", - posLevel: "", - reason: "", - }; - data.push(head); - _nodeTemp = null; - } - const head = { - no: Extension.ToThaiNumber(no.toString()), - posMasterNo: - node.posMasterNo == null - ? "" - : Extension.ToThaiNumber(node.posMasterNo.toString()), - posExecutive: Extension.ToThaiNumber(node.posExecutive.toString()), - positionName: Extension.ToThaiNumber(node.positionName.toString()), - posType: Extension.ToThaiNumber(node.posType.toString()), - posLevel: Extension.ToThaiNumber(node.posLevel.toString()), - reason: Extension.ToThaiNumber(node.reason.toString()), - }; - data.push(head); - } - no += 1; - _nodeTemp = node; - } - }) - ); - - for (let orgChild2 of orgChild2Data.filter((orgChild2) => orgChild2.orgChild1Id === orgChild1.id)) { - await Promise.all( - orgChild2.posMasters - .filter((x) => x.orgChild3Id == null) - .sort((a, b) => a.posMasterOrder - b.posMasterOrder) - .map(async (posMaster) => { - if (posMaster.orgChild3Id == null) { - const positionName = [ - ...new Set( - posMaster.positions - .sort((a: any, b: any) => a.orderNo - b.orderNo) - .map((x) => - x.positionArea - ? `${x.positionName} (${x.positionArea})` - : x.positionName - ) - ), - ]; - const posType = [ - ...new Set( - posMaster.positions - .filter((x: any) => x.posType != null) - .map((x) => x.posType.posTypeName), - ), - ]; - const posLevel = [ - ...new Set( - posMaster.positions - .filter((x: any) => x.posLevel != null) - .map((x) => x.posLevel.posLevelName), - ), - ]; - const posExecutive = [ - ...new Set( - posMaster.positions - .filter((x: any) => x.posExecutive != null) - .map((x: any) => - x.positionExecutiveField - ? `${x.posExecutive.posExecutiveName} (${x.positionExecutiveField})` - : x.posExecutive.posExecutiveName - ) - ), - ]; - - let node = { - orgTreeName: orgChild2.orgChild2Name, - orgTreeShortName: orgChild2.orgChild2ShortName, - posMasterNo: posMaster.posMasterNo, - positionName: positionName.join(" หรือ "), - posType: posType.join(" หรือ "), - posLevel: posLevel.join(" หรือ "), - posExecutive: posExecutive.join(" หรือ "), - reason: posMaster.reason == null ? "" : posMaster.reason, - }; - if (_nodeTemp == null) { - const head = { - posMasterNo: Extension.ToThaiNumber(node.orgTreeShortName?.toString() ?? ""), - posExecutive: Extension.ToThaiNumber(node.orgTreeName?.toString() ?? ""), - positionName: "", - posType: "", - posLevel: "", - reason: "", - }; - data.push(head); - const _head = { - no: Extension.ToThaiNumber(no.toString()), - posMasterNo: - node.posMasterNo == null - ? "" - : Extension.ToThaiNumber(node.posMasterNo.toString()), - posExecutive: Extension.ToThaiNumber(node.posExecutive.toString()), - positionName: Extension.ToThaiNumber(node.positionName.toString()), - posType: Extension.ToThaiNumber(node.posType.toString()), - posLevel: Extension.ToThaiNumber(node.posLevel.toString()), - reason: Extension.ToThaiNumber(node.reason.toString()), - }; - data.push(_head); - } else { - if ( - node.orgTreeShortName != _nodeTemp.orgTreeShortName || - node.orgTreeName != _nodeTemp.orgTreeName - ) { - const head = { - posMasterNo: - node.orgTreeShortName == _nodeTemp.orgTreeShortName ? "" : node.orgTreeShortName, - posExecutive: - node.orgTreeName == _nodeTemp.orgTreeName - ? "" - : Extension.ToThaiNumber(node.orgTreeName.toString()), - positionName: "", - posType: "", - posLevel: "", - reason: "", - }; - data.push(head); - _nodeTemp = null; - } - const head = { - no: Extension.ToThaiNumber(no.toString()), - posMasterNo: - node.posMasterNo == null - ? "" - : Extension.ToThaiNumber(node.posMasterNo.toString()), - posExecutive: Extension.ToThaiNumber(node.posExecutive.toString()), - positionName: Extension.ToThaiNumber(node.positionName.toString()), - posType: Extension.ToThaiNumber(node.posType.toString()), - posLevel: Extension.ToThaiNumber(node.posLevel.toString()), - reason: Extension.ToThaiNumber(node.reason.toString()), - }; - data.push(head); - } - no += 1; - _nodeTemp = node; - } - }) - ); - - for (let orgChild3 of orgChild3Data.filter((orgChild3) => orgChild3.orgChild2Id === orgChild2.id)) { + for (let orgChild3 of orgChild3Data.filter( + (orgChild3) => orgChild3.orgChild2Id === orgChild2.id, + )) { await Promise.all( orgChild3.posMasters .filter((x) => x.orgChild4Id == null) @@ -1151,8 +1160,8 @@ export class ReportController extends Controller { .map((x) => x.positionArea ? `${x.positionName} (${x.positionArea})` - : x.positionName - ) + : x.positionName, + ), ), ]; const posType = [ @@ -1176,8 +1185,8 @@ export class ReportController extends Controller { .map((x: any) => x.positionExecutiveField ? `${x.posExecutive.posExecutiveName} (${x.positionExecutiveField})` - : x.posExecutive.posExecutiveName - ) + : x.posExecutive.posExecutiveName, + ), ), ]; @@ -1193,8 +1202,12 @@ export class ReportController extends Controller { }; if (_nodeTemp == null) { const head = { - posMasterNo: Extension.ToThaiNumber(node.orgTreeShortName?.toString() ?? ""), - posExecutive: Extension.ToThaiNumber(node.orgTreeName?.toString() ?? ""), + posMasterNo: Extension.ToThaiNumber( + node.orgTreeShortName?.toString() ?? "", + ), + posExecutive: Extension.ToThaiNumber( + node.orgTreeName?.toString() ?? "", + ), positionName: "", posType: "", posLevel: "", @@ -1221,7 +1234,9 @@ export class ReportController extends Controller { ) { const head = { posMasterNo: - node.orgTreeShortName == _nodeTemp.orgTreeShortName ? "" : node.orgTreeShortName, + node.orgTreeShortName == _nodeTemp.orgTreeShortName + ? "" + : node.orgTreeShortName, posExecutive: node.orgTreeName == _nodeTemp.orgTreeName ? "" @@ -1251,10 +1266,12 @@ export class ReportController extends Controller { no += 1; _nodeTemp = node; } - }) + }), ); - for (let orgChild4 of orgChild4Data.filter((orgChild4) => orgChild4.orgChild3Id === orgChild3.id)) { + for (let orgChild4 of orgChild4Data.filter( + (orgChild4) => orgChild4.orgChild3Id === orgChild3.id, + )) { await Promise.all( orgChild4.posMasters .sort((a, b) => a.posMasterOrder - b.posMasterOrder) @@ -1266,8 +1283,8 @@ export class ReportController extends Controller { .map((x) => x.positionArea ? `${x.positionName} (${x.positionArea})` - : x.positionName - ) + : x.positionName, + ), ), ]; const posType = [ @@ -1291,8 +1308,8 @@ export class ReportController extends Controller { .map((x: any) => x.positionExecutiveField ? `${x.posExecutive.posExecutiveName} (${x.positionExecutiveField})` - : x.posExecutive.posExecutiveName - ) + : x.posExecutive.posExecutiveName, + ), ), ]; @@ -1308,8 +1325,12 @@ export class ReportController extends Controller { }; if (_nodeTemp == null) { const head = { - posMasterNo: Extension.ToThaiNumber(node.orgTreeShortName?.toString() ?? ""), - posExecutive: Extension.ToThaiNumber(node.orgTreeName?.toString() ?? ""), + posMasterNo: Extension.ToThaiNumber( + node.orgTreeShortName?.toString() ?? "", + ), + posExecutive: Extension.ToThaiNumber( + node.orgTreeName?.toString() ?? "", + ), positionName: "", posType: "", posLevel: "", @@ -1336,7 +1357,9 @@ export class ReportController extends Controller { ) { const head = { posMasterNo: - node.orgTreeShortName == _nodeTemp.orgTreeShortName ? "" : node.orgTreeShortName, + node.orgTreeShortName == _nodeTemp.orgTreeShortName + ? "" + : node.orgTreeShortName, posExecutive: node.orgTreeName == _nodeTemp.orgTreeName ? "" @@ -1365,7 +1388,7 @@ export class ReportController extends Controller { } no += 1; _nodeTemp = node; - }) + }), ); } } @@ -1378,12 +1401,12 @@ export class ReportController extends Controller { // ดึง orgChild1 และลูก (orgChild2, orgChild3, orgChild4) const orgChild1Data = await this.child1Repository.find({ where: { id: _nodeId }, - order: { + order: { orgChild1Order: "ASC", - posMasters:{ + posMasters: { posMasterOrder: "ASC", - posMasterCreatedAt: "ASC" - } + posMasterCreatedAt: "ASC", + }, }, relations: [ "posMasters", @@ -1401,12 +1424,12 @@ export class ReportController extends Controller { const orgChild1Ids = orgChild1Data.map((c) => c.id) || null; const orgChild2Data = await this.child2Repository.find({ where: { orgChild1: In(orgChild1Ids) }, - order: { + order: { orgChild2Order: "ASC", - posMasters:{ + posMasters: { posMasterOrder: "ASC", - posMasterCreatedAt: "ASC" - } + posMasterCreatedAt: "ASC", + }, }, relations: [ "posMasters", @@ -1419,12 +1442,12 @@ export class ReportController extends Controller { const orgChild2Ids = orgChild2Data.map((c) => c.id) || null; const orgChild3Data = await this.child3Repository.find({ where: { orgChild2: In(orgChild2Ids) }, - order: { + order: { orgChild3Order: "ASC", - posMasters:{ + posMasters: { posMasterOrder: "ASC", - posMasterCreatedAt: "ASC" - } + posMasterCreatedAt: "ASC", + }, }, relations: [ "posMasters", @@ -1437,12 +1460,12 @@ export class ReportController extends Controller { const orgChild3Ids = orgChild3Data.map((c) => c.id) || null; const orgChild4Data = await this.child4Repository.find({ where: { orgChild3: In(orgChild3Ids) }, - order: { + order: { orgChild4Order: "ASC", - posMasters:{ + posMasters: { posMasterOrder: "ASC", - posMasterCreatedAt: "ASC" - } + posMasterCreatedAt: "ASC", + }, }, relations: [ "posMasters", @@ -1466,10 +1489,8 @@ export class ReportController extends Controller { posMaster.positions .sort((a: any, b: any) => a.orderNo - b.orderNo) .map((x) => - x.positionArea - ? `${x.positionName} (${x.positionArea})` - : x.positionName - ) + x.positionArea ? `${x.positionName} (${x.positionArea})` : x.positionName, + ), ), ]; const posType = [ @@ -1493,8 +1514,8 @@ export class ReportController extends Controller { .map((x: any) => x.positionExecutiveField ? `${x.posExecutive.posExecutiveName} (${x.positionExecutiveField})` - : x.posExecutive.posExecutiveName - ) + : x.posExecutive.posExecutiveName, + ), ), ]; let node = { @@ -1537,7 +1558,9 @@ export class ReportController extends Controller { ) { const head = { posMasterNo: - node.orgTreeShortName == _nodeTemp.orgTreeShortName ? "" : node.orgTreeShortName, + node.orgTreeShortName == _nodeTemp.orgTreeShortName + ? "" + : node.orgTreeShortName, posExecutive: node.orgTreeName == _nodeTemp.orgTreeName ? "" @@ -1567,9 +1590,11 @@ export class ReportController extends Controller { no += 1; _nodeTemp = node; } - }) + }), ); - for (let orgChild2 of orgChild2Data.filter((orgChild2) => orgChild2.orgChild1Id === orgChild1.id)) { + for (let orgChild2 of orgChild2Data.filter( + (orgChild2) => orgChild2.orgChild1Id === orgChild1.id, + )) { await Promise.all( orgChild2.posMasters .filter((x) => x.orgChild3Id == null) @@ -1584,8 +1609,8 @@ export class ReportController extends Controller { .map((x) => x.positionArea ? `${x.positionName} (${x.positionArea})` - : x.positionName - ) + : x.positionName, + ), ), ]; const posType = [ @@ -1609,8 +1634,8 @@ export class ReportController extends Controller { .map((x: any) => x.positionExecutiveField ? `${x.posExecutive.posExecutiveName} (${x.positionExecutiveField})` - : x.posExecutive.posExecutiveName - ) + : x.posExecutive.posExecutiveName, + ), ), ]; let node = { @@ -1625,7 +1650,9 @@ export class ReportController extends Controller { }; if (_nodeTemp == null) { const head = { - posMasterNo: Extension.ToThaiNumber(node.orgTreeShortName?.toString() ?? ""), + posMasterNo: Extension.ToThaiNumber( + node.orgTreeShortName?.toString() ?? "", + ), posExecutive: Extension.ToThaiNumber(node.orgTreeName?.toString() ?? ""), positionName: "", posType: "", @@ -1653,7 +1680,9 @@ export class ReportController extends Controller { ) { const head = { posMasterNo: - node.orgTreeShortName == _nodeTemp.orgTreeShortName ? "" : node.orgTreeShortName, + node.orgTreeShortName == _nodeTemp.orgTreeShortName + ? "" + : node.orgTreeShortName, posExecutive: node.orgTreeName == _nodeTemp.orgTreeName ? "" @@ -1683,9 +1712,11 @@ export class ReportController extends Controller { no += 1; _nodeTemp = node; } - }) + }), ); - for (let orgChild3 of orgChild3Data.filter((orgChild3) => orgChild3.orgChild2Id === orgChild2.id)) { + for (let orgChild3 of orgChild3Data.filter( + (orgChild3) => orgChild3.orgChild2Id === orgChild2.id, + )) { await Promise.all( orgChild3.posMasters .filter((x) => x.orgChild4Id == null) @@ -1700,8 +1731,8 @@ export class ReportController extends Controller { .map((x) => x.positionArea ? `${x.positionName} (${x.positionArea})` - : x.positionName - ) + : x.positionName, + ), ), ]; const posType = [ @@ -1725,8 +1756,8 @@ export class ReportController extends Controller { .map((x: any) => x.positionExecutiveField ? `${x.posExecutive.posExecutiveName} (${x.positionExecutiveField})` - : x.posExecutive.posExecutiveName - ) + : x.posExecutive.posExecutiveName, + ), ), ]; let node = { @@ -1741,7 +1772,9 @@ export class ReportController extends Controller { }; if (_nodeTemp == null) { const head = { - posMasterNo: Extension.ToThaiNumber(node.orgTreeShortName?.toString() ?? ""), + posMasterNo: Extension.ToThaiNumber( + node.orgTreeShortName?.toString() ?? "", + ), posExecutive: Extension.ToThaiNumber(node.orgTreeName?.toString() ?? ""), positionName: "", posType: "", @@ -1769,7 +1802,9 @@ export class ReportController extends Controller { ) { const head = { posMasterNo: - node.orgTreeShortName == _nodeTemp.orgTreeShortName ? "" : node.orgTreeShortName, + node.orgTreeShortName == _nodeTemp.orgTreeShortName + ? "" + : node.orgTreeShortName, posExecutive: node.orgTreeName == _nodeTemp.orgTreeName ? "" @@ -1799,9 +1834,11 @@ export class ReportController extends Controller { no += 1; _nodeTemp = node; } - }) + }), ); - for (let orgChild4 of orgChild4Data.filter((orgChild4) => orgChild4.orgChild3Id === orgChild3.id)) { + for (let orgChild4 of orgChild4Data.filter( + (orgChild4) => orgChild4.orgChild3Id === orgChild3.id, + )) { await Promise.all( orgChild4.posMasters .sort((a, b) => a.posMasterOrder - b.posMasterOrder) @@ -1814,8 +1851,8 @@ export class ReportController extends Controller { .map((x) => x.positionArea ? `${x.positionName} (${x.positionArea})` - : x.positionName - ) + : x.positionName, + ), ), ]; const posType = [ @@ -1839,8 +1876,8 @@ export class ReportController extends Controller { .map((x: any) => x.positionExecutiveField ? `${x.posExecutive.posExecutiveName} (${x.positionExecutiveField})` - : x.posExecutive.posExecutiveName - ) + : x.posExecutive.posExecutiveName, + ), ), ]; let node = { @@ -1855,7 +1892,9 @@ export class ReportController extends Controller { }; if (_nodeTemp == null) { const head = { - posMasterNo: Extension.ToThaiNumber(node.orgTreeShortName?.toString() ?? ""), + posMasterNo: Extension.ToThaiNumber( + node.orgTreeShortName?.toString() ?? "", + ), posExecutive: Extension.ToThaiNumber(node.orgTreeName?.toString() ?? ""), positionName: "", posType: "", @@ -1883,7 +1922,9 @@ export class ReportController extends Controller { ) { const head = { posMasterNo: - node.orgTreeShortName == _nodeTemp.orgTreeShortName ? "" : node.orgTreeShortName, + node.orgTreeShortName == _nodeTemp.orgTreeShortName + ? "" + : node.orgTreeShortName, posExecutive: node.orgTreeName == _nodeTemp.orgTreeName ? "" @@ -1912,7 +1953,7 @@ export class ReportController extends Controller { } no += 1; _nodeTemp = node; - }) + }), ); } } @@ -1923,16 +1964,16 @@ export class ReportController extends Controller { case 2: { // ดึง orgChild2 และลูก (orgChild3, orgChild4) const orgChild2Data = await this.child2Repository.find({ - where: { + where: { id: _nodeId, - }, - order: { + }, + order: { orgChild2Order: "ASC", - posMasters:{ + posMasters: { posMasterOrder: "ASC", - posMasterCreatedAt: "ASC" - } - }, + posMasterCreatedAt: "ASC", + }, + }, relations: [ "posMasters", "posMasters.positions", @@ -1949,13 +1990,13 @@ export class ReportController extends Controller { const orgChild2Ids = orgChild2Data.map((c) => c.id) || null; const orgChild3Data = await this.child3Repository.find({ where: { orgChild2: In(orgChild2Ids) }, - order: { + order: { orgChild3Order: "ASC", - posMasters:{ + posMasters: { posMasterOrder: "ASC", - posMasterCreatedAt: "ASC" - } - }, + posMasterCreatedAt: "ASC", + }, + }, relations: [ "posMasters", "posMasters.positions", @@ -1967,13 +2008,13 @@ export class ReportController extends Controller { const orgChild3Ids = orgChild3Data.map((c) => c.id) || null; const orgChild4Data = await this.child4Repository.find({ where: { orgChild3: In(orgChild3Ids) }, - order: { + order: { orgChild4Order: "ASC", - posMasters:{ + posMasters: { posMasterOrder: "ASC", - posMasterCreatedAt: "ASC" - } - }, + posMasterCreatedAt: "ASC", + }, + }, relations: [ "posMasters", "posMasters.positions", @@ -1996,10 +2037,8 @@ export class ReportController extends Controller { posMaster.positions .sort((a: any, b: any) => a.orderNo - b.orderNo) .map((x) => - x.positionArea - ? `${x.positionName} (${x.positionArea})` - : x.positionName - ) + x.positionArea ? `${x.positionName} (${x.positionArea})` : x.positionName, + ), ), ]; const posType = [ @@ -2023,8 +2062,8 @@ export class ReportController extends Controller { .map((x: any) => x.positionExecutiveField ? `${x.posExecutive.posExecutiveName} (${x.positionExecutiveField})` - : x.posExecutive.posExecutiveName - ) + : x.posExecutive.posExecutiveName, + ), ), ]; let node = { @@ -2067,7 +2106,9 @@ export class ReportController extends Controller { ) { const head = { posMasterNo: - node.orgTreeShortName == _nodeTemp.orgTreeShortName ? "" : node.orgTreeShortName, + node.orgTreeShortName == _nodeTemp.orgTreeShortName + ? "" + : node.orgTreeShortName, posExecutive: node.orgTreeName == _nodeTemp.orgTreeName ? "" @@ -2097,9 +2138,11 @@ export class ReportController extends Controller { no += 1; _nodeTemp = node; } - }) + }), ); - for (let orgChild3 of orgChild3Data.filter((orgChild3) => orgChild3.orgChild2Id === orgChild2.id)) { + for (let orgChild3 of orgChild3Data.filter( + (orgChild3) => orgChild3.orgChild2Id === orgChild2.id, + )) { await Promise.all( orgChild3.posMasters .filter((x) => x.orgChild4Id == null) @@ -2114,8 +2157,8 @@ export class ReportController extends Controller { .map((x) => x.positionArea ? `${x.positionName} (${x.positionArea})` - : x.positionName - ) + : x.positionName, + ), ), ]; const posType = [ @@ -2139,8 +2182,8 @@ export class ReportController extends Controller { .map((x: any) => x.positionExecutiveField ? `${x.posExecutive.posExecutiveName} (${x.positionExecutiveField})` - : x.posExecutive.posExecutiveName - ) + : x.posExecutive.posExecutiveName, + ), ), ]; let node = { @@ -2155,7 +2198,9 @@ export class ReportController extends Controller { }; if (_nodeTemp == null) { const head = { - posMasterNo: Extension.ToThaiNumber(node.orgTreeShortName?.toString() ?? ""), + posMasterNo: Extension.ToThaiNumber( + node.orgTreeShortName?.toString() ?? "", + ), posExecutive: Extension.ToThaiNumber(node.orgTreeName?.toString() ?? ""), positionName: "", posType: "", @@ -2183,7 +2228,9 @@ export class ReportController extends Controller { ) { const head = { posMasterNo: - node.orgTreeShortName == _nodeTemp.orgTreeShortName ? "" : node.orgTreeShortName, + node.orgTreeShortName == _nodeTemp.orgTreeShortName + ? "" + : node.orgTreeShortName, posExecutive: node.orgTreeName == _nodeTemp.orgTreeName ? "" @@ -2213,9 +2260,11 @@ export class ReportController extends Controller { no += 1; _nodeTemp = node; } - }) + }), ); - for (let orgChild4 of orgChild4Data.filter((orgChild4) => orgChild4.orgChild3Id === orgChild3.id)) { + for (let orgChild4 of orgChild4Data.filter( + (orgChild4) => orgChild4.orgChild3Id === orgChild3.id, + )) { await Promise.all( orgChild4.posMasters .sort((a, b) => a.posMasterOrder - b.posMasterOrder) @@ -2228,8 +2277,8 @@ export class ReportController extends Controller { .map((x) => x.positionArea ? `${x.positionName} (${x.positionArea})` - : x.positionName - ) + : x.positionName, + ), ), ]; const posType = [ @@ -2253,8 +2302,8 @@ export class ReportController extends Controller { .map((x: any) => x.positionExecutiveField ? `${x.posExecutive.posExecutiveName} (${x.positionExecutiveField})` - : x.posExecutive.posExecutiveName - ) + : x.posExecutive.posExecutiveName, + ), ), ]; let node = { @@ -2269,7 +2318,9 @@ export class ReportController extends Controller { }; if (_nodeTemp == null) { const head = { - posMasterNo: Extension.ToThaiNumber(node.orgTreeShortName?.toString() ?? ""), + posMasterNo: Extension.ToThaiNumber( + node.orgTreeShortName?.toString() ?? "", + ), posExecutive: Extension.ToThaiNumber(node.orgTreeName?.toString() ?? ""), positionName: "", posType: "", @@ -2297,7 +2348,9 @@ export class ReportController extends Controller { ) { const head = { posMasterNo: - node.orgTreeShortName == _nodeTemp.orgTreeShortName ? "" : node.orgTreeShortName, + node.orgTreeShortName == _nodeTemp.orgTreeShortName + ? "" + : node.orgTreeShortName, posExecutive: node.orgTreeName == _nodeTemp.orgTreeName ? "" @@ -2326,7 +2379,7 @@ export class ReportController extends Controller { } no += 1; _nodeTemp = node; - }) + }), ); } } @@ -2337,12 +2390,12 @@ export class ReportController extends Controller { // ดึง orgChild3 และลูก (orgChild4) const orgChild3Data = await this.child3Repository.find({ where: { id: _nodeId }, - order: { + order: { orgChild3Order: "ASC", - posMasters:{ + posMasters: { posMasterOrder: "ASC", - posMasterCreatedAt: "ASC" - } + posMasterCreatedAt: "ASC", + }, }, relations: [ "posMasters", @@ -2360,12 +2413,12 @@ export class ReportController extends Controller { const orgChild3Ids = orgChild3Data.map((c) => c.id) || null; const orgChild4Data = await this.child4Repository.find({ where: { orgChild3: In(orgChild3Ids) }, - order: { + order: { orgChild4Order: "ASC", - posMasters:{ + posMasters: { posMasterOrder: "ASC", - posMasterCreatedAt: "ASC" - } + posMasterCreatedAt: "ASC", + }, }, relations: [ "posMasters", @@ -2389,10 +2442,8 @@ export class ReportController extends Controller { posMaster.positions .sort((a: any, b: any) => a.orderNo - b.orderNo) .map((x) => - x.positionArea - ? `${x.positionName} (${x.positionArea})` - : x.positionName - ) + x.positionArea ? `${x.positionName} (${x.positionArea})` : x.positionName, + ), ), ]; const posType = [ @@ -2416,8 +2467,8 @@ export class ReportController extends Controller { .map((x: any) => x.positionExecutiveField ? `${x.posExecutive.posExecutiveName} (${x.positionExecutiveField})` - : x.posExecutive.posExecutiveName - ) + : x.posExecutive.posExecutiveName, + ), ), ]; let node = { @@ -2460,7 +2511,9 @@ export class ReportController extends Controller { ) { const head = { posMasterNo: - node.orgTreeShortName == _nodeTemp.orgTreeShortName ? "" : node.orgTreeShortName, + node.orgTreeShortName == _nodeTemp.orgTreeShortName + ? "" + : node.orgTreeShortName, posExecutive: node.orgTreeName == _nodeTemp.orgTreeName ? "" @@ -2490,9 +2543,11 @@ export class ReportController extends Controller { no += 1; _nodeTemp = node; } - }) + }), ); - for (let orgChild4 of orgChild4Data.filter((orgChild4) => orgChild4.orgChild3Id === orgChild3.id)) { + for (let orgChild4 of orgChild4Data.filter( + (orgChild4) => orgChild4.orgChild3Id === orgChild3.id, + )) { await Promise.all( orgChild4.posMasters .sort((a, b) => a.posMasterOrder - b.posMasterOrder) @@ -2503,10 +2558,8 @@ export class ReportController extends Controller { posMaster.positions .sort((a: any, b: any) => a.orderNo - b.orderNo) .map((x) => - x.positionArea - ? `${x.positionName} (${x.positionArea})` - : x.positionName - ) + x.positionArea ? `${x.positionName} (${x.positionArea})` : x.positionName, + ), ), ]; const posType = [ @@ -2530,8 +2583,8 @@ export class ReportController extends Controller { .map((x: any) => x.positionExecutiveField ? `${x.posExecutive.posExecutiveName} (${x.positionExecutiveField})` - : x.posExecutive.posExecutiveName - ) + : x.posExecutive.posExecutiveName, + ), ), ]; let node = { @@ -2574,7 +2627,9 @@ export class ReportController extends Controller { ) { const head = { posMasterNo: - node.orgTreeShortName == _nodeTemp.orgTreeShortName ? "" : node.orgTreeShortName, + node.orgTreeShortName == _nodeTemp.orgTreeShortName + ? "" + : node.orgTreeShortName, posExecutive: node.orgTreeName == _nodeTemp.orgTreeName ? "" @@ -2603,7 +2658,7 @@ export class ReportController extends Controller { } no += 1; _nodeTemp = node; - }) + }), ); } } @@ -2613,12 +2668,12 @@ export class ReportController extends Controller { // ดึงข้อมูล orgChild4 ตาม nodeId const orgChild4Data = await this.child4Repository.find({ where: { id: _nodeId }, - order: { + order: { orgChild4Order: "ASC", - posMasters:{ + posMasters: { posMasterOrder: "ASC", - posMasterCreatedAt: "ASC" - } + posMasterCreatedAt: "ASC", + }, }, relations: [ "posMasters", @@ -2643,10 +2698,8 @@ export class ReportController extends Controller { posMaster.positions .sort((a: any, b: any) => a.orderNo - b.orderNo) .map((x) => - x.positionArea - ? `${x.positionName} (${x.positionArea})` - : x.positionName - ) + x.positionArea ? `${x.positionName} (${x.positionArea})` : x.positionName, + ), ), ]; const posType = [ @@ -2670,8 +2723,8 @@ export class ReportController extends Controller { .map((x: any) => x.positionExecutiveField ? `${x.posExecutive.posExecutiveName} (${x.positionExecutiveField})` - : x.posExecutive.posExecutiveName - ) + : x.posExecutive.posExecutiveName, + ), ), ]; @@ -2715,7 +2768,9 @@ export class ReportController extends Controller { ) { const head = { posMasterNo: - node.orgTreeShortName == _nodeTemp.orgTreeShortName ? "" : node.orgTreeShortName, + node.orgTreeShortName == _nodeTemp.orgTreeShortName + ? "" + : node.orgTreeShortName, posExecutive: node.orgTreeName == _nodeTemp.orgTreeName ? "" @@ -2744,7 +2799,7 @@ export class ReportController extends Controller { } no += 1; _nodeTemp = node; - }) + }), ); } break; @@ -2865,12 +2920,10 @@ export class ReportController extends Controller { const positionName = [ ...new Set( posMaster.positions - .sort((a:any, b:any) => a.orderNo - b.orderNo) + .sort((a: any, b: any) => a.orderNo - b.orderNo) .map((x) => - x.positionArea - ? `${x.positionName} (${x.positionArea})` - : x.positionName - ) + x.positionArea ? `${x.positionName} (${x.positionArea})` : x.positionName, + ), ), ]; const posType = [ @@ -2891,11 +2944,11 @@ export class ReportController extends Controller { ...new Set( posMaster.positions .filter((x: any) => x.posExecutive != null) - .map((x: any) => - x.positionExecutiveField - ? `${x.posExecutive.posExecutiveName} (${x.positionExecutiveField})` - : x.posExecutive.posExecutiveName - ) + .map((x: any) => + x.positionExecutiveField + ? `${x.posExecutive.posExecutiveName} (${x.positionExecutiveField})` + : x.posExecutive.posExecutiveName, + ), ), ]; @@ -2985,12 +3038,10 @@ export class ReportController extends Controller { const positionName = [ ...new Set( posMaster.positions - .sort((a:any, b:any) => a.orderNo - b.orderNo) + .sort((a: any, b: any) => a.orderNo - b.orderNo) .map((x) => - x.positionArea - ? `${x.positionName} (${x.positionArea})` - : x.positionName - ) + x.positionArea ? `${x.positionName} (${x.positionArea})` : x.positionName, + ), ), ]; const posType = [ @@ -3012,10 +3063,10 @@ export class ReportController extends Controller { posMaster.positions .filter((x: any) => x.posExecutive != null) .map((x: any) => - x.positionExecutiveField - ? `${x.posExecutive.posExecutiveName} (${x.positionExecutiveField})` - : x.posExecutive.posExecutiveName - ) + x.positionExecutiveField + ? `${x.posExecutive.posExecutiveName} (${x.positionExecutiveField})` + : x.posExecutive.posExecutiveName, + ), ), ]; @@ -3106,13 +3157,11 @@ export class ReportController extends Controller { if (posMaster.orgChild3Id == null) { const positionName = [ ...new Set( - posMaster.positions - .sort((a:any, b:any) => a.orderNo - b.orderNo) - .map((x) => - x.positionArea - ? `${x.positionName} (${x.positionArea})` - : x.positionName - ) + posMaster.positions + .sort((a: any, b: any) => a.orderNo - b.orderNo) + .map((x) => + x.positionArea ? `${x.positionName} (${x.positionArea})` : x.positionName, + ), ), ]; const posType = [ @@ -3129,17 +3178,17 @@ export class ReportController extends Controller { .map((x) => x.posLevel.posLevelName), ), ]; - const posExecutive = [ - ...new Set( - posMaster.positions - .filter((x: any) => x.posExecutive != null) - .map((x: any) => - x.positionExecutiveField - ? `${x.posExecutive.posExecutiveName} (${x.positionExecutiveField})` - : x.posExecutive.posExecutiveName - ) - ), - ]; + const posExecutive = [ + ...new Set( + posMaster.positions + .filter((x: any) => x.posExecutive != null) + .map((x: any) => + x.positionExecutiveField + ? `${x.posExecutive.posExecutiveName} (${x.positionExecutiveField})` + : x.posExecutive.posExecutiveName, + ), + ), + ]; let node = { orgTreeName: orgChild2.orgChild2Name, @@ -3225,13 +3274,13 @@ export class ReportController extends Controller { if (posMaster.orgChild4Id == null) { const positionName = [ ...new Set( - posMaster.positions - .sort((a:any, b:any) => a.orderNo - b.orderNo) - .map((x) => - x.positionArea - ? `${x.positionName} (${x.positionArea})` - : x.positionName - ) + posMaster.positions + .sort((a: any, b: any) => a.orderNo - b.orderNo) + .map((x) => + x.positionArea + ? `${x.positionName} (${x.positionArea})` + : x.positionName, + ), ), ]; const posType = [ @@ -3253,10 +3302,10 @@ export class ReportController extends Controller { posMaster.positions .filter((x: any) => x.posExecutive != null) .map((x: any) => - x.positionExecutiveField - ? `${x.posExecutive.posExecutiveName} (${x.positionExecutiveField})` - : x.posExecutive.posExecutiveName - ) + x.positionExecutiveField + ? `${x.posExecutive.posExecutiveName} (${x.positionExecutiveField})` + : x.posExecutive.posExecutiveName, + ), ), ]; @@ -3343,13 +3392,13 @@ export class ReportController extends Controller { .map(async (posMaster) => { const positionName = [ ...new Set( - posMaster.positions - .sort((a:any, b:any) => a.orderNo - b.orderNo) - .map((x) => - x.positionArea - ? `${x.positionName} (${x.positionArea})` - : x.positionName - ) + posMaster.positions + .sort((a: any, b: any) => a.orderNo - b.orderNo) + .map((x) => + x.positionArea + ? `${x.positionName} (${x.positionArea})` + : x.positionName, + ), ), ]; const posType = [ @@ -3371,10 +3420,10 @@ export class ReportController extends Controller { posMaster.positions .filter((x: any) => x.posExecutive != null) .map((x: any) => - x.positionExecutiveField - ? `${x.posExecutive.posExecutiveName} (${x.positionExecutiveField})` - : x.posExecutive.posExecutiveName - ) + x.positionExecutiveField + ? `${x.posExecutive.posExecutiveName} (${x.positionExecutiveField})` + : x.posExecutive.posExecutiveName, + ), ), ]; @@ -3475,10 +3524,10 @@ export class ReportController extends Controller { reqBody: { node: number; nodeId: string; - } + }, ) { - // @Get("report2/{rootId}") - // async findReport2(@Path() rootId: string) { + // @Get("report2/{rootId}") + // async findReport2(@Path() rootId: string) { // const orgRevision = await this.orgRevisionRepository.findOne({ // where: { orgRevisionIsDraft: true, orgRevisionIsCurrent: false }, // relations: ["orgRoots"], @@ -3487,9 +3536,9 @@ export class ReportController extends Controller { // throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); // } // (async () => { - let nodeId:string = reqBody.nodeId ? reqBody.nodeId : ""; - let node:number = reqBody.node ? reqBody.node : 0; - if(nodeId === "" || node < 0 || node > 4) { + let nodeId: string = reqBody.nodeId ? reqBody.nodeId : ""; + let node: number = reqBody.node ? reqBody.node : 0; + if (nodeId === "" || node < 0 || node > 4) { throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); } // ดึงแค่ rootId ก่อน ถ้าลูกค้า confirm ค่อยปรับ @@ -3497,308 +3546,1390 @@ export class ReportController extends Controller { case 0: { const orgRoot = await this.orgRootRepository.findOne({ select: ["id"], - where: { id: nodeId } + where: { id: nodeId }, }); - if (!orgRoot) - throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); + if (!orgRoot) throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); nodeId = orgRoot.id; break; } case 1: { const orgChild1 = await this.child1Repository.findOne({ select: ["id", "orgRootId"], - where: { id: nodeId } + where: { id: nodeId }, }); - if (!orgChild1) - throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); + if (!orgChild1) throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); nodeId = orgChild1.orgRootId; break; } case 2: { const orgChild2 = await this.child2Repository.findOne({ select: ["id", "orgRootId"], - where: { id: nodeId } + where: { id: nodeId }, }); - if (!orgChild2) - throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); + if (!orgChild2) throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); nodeId = orgChild2.orgRootId; break; } case 3: { const orgChild3 = await this.child3Repository.findOne({ select: ["id", "orgRootId"], - where: { id: nodeId } + where: { id: nodeId }, }); - if (!orgChild3) - throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); + if (!orgChild3) throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); nodeId = orgChild3.orgRootId; break; } case 4: { const orgChild4 = await this.child4Repository.findOne({ select: ["id", "orgRootId"], - where: { id: nodeId } + where: { id: nodeId }, }); - if (!orgChild4) - throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); + if (!orgChild4) throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); nodeId = orgChild4.orgRootId; break; } default: throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); } + // Step 1: ดึงข้อมูล OrgRoot พื้นฐาน + const orgRootData = await this.orgRootRepository + .createQueryBuilder("orgRoot") + .select([ + "orgRoot.id", + "orgRoot.orgRootName", + "orgRoot.orgRootShortName", + "orgRoot.orgRootOrder", + ]) + .where("orgRoot.id = :nodeId", { nodeId }) + .orderBy("orgRoot.orgRootOrder", "ASC") + .getMany(); + + if (!orgRootData || orgRootData.length === 0) { + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลองค์กร"); + } + + // Step 2: ดึงข้อมูล PosMasters ที่เกี่ยวข้องเท่านั้น + const posMastersData = await this.posMasterRepository + .createQueryBuilder("posMaster") + .select([ + "posMaster.id", + "posMaster.posMasterOrder", + "posMaster.isSit", + "posMaster.posMasterNo", + "posMaster.ancestorDNA", + "posMaster.reason", + "posMaster.orgRootId", + "posMaster.orgChild1Id", + "posMaster.current_holderId", + "posMaster.next_holderId", + ]) + .where("posMaster.orgRootId = :nodeId", { nodeId }) + .andWhere("posMaster.orgChild1Id IS NULL") // เฉพาะ root level + .orderBy("posMaster.posMasterOrder", "ASC") + .getMany(); + + // Step 3: ดึงข้อมูล Profiles ที่ใช้จริงเท่านั้น + const profileIds = [ + ...new Set([ + ...posMastersData.map((pm: any) => pm.current_holderId).filter(Boolean), + ...posMastersData.map((pm: any) => pm.next_holderId).filter(Boolean), + ]), + ]; + + let profilesData: any[] = []; + if (profileIds.length > 0) { + profilesData = await this.profileRepository + .createQueryBuilder("profile") + .select([ + "profile.id", + "profile.prefix", + "profile.firstName", + "profile.lastName", + "profile.position", + "profile.posTypeId", + "profile.posLevelId", + ]) + .where("profile.id IN (:...profileIds)", { profileIds }) + .getMany(); + } + + // Step 4: ดึงข้อมูล Education ล่าสุดของแต่ละ Profile + let educationsData: any[] = []; + if (profileIds.length > 0) { + educationsData = await this.profileEducationRepository + .createQueryBuilder("pe") + .select([ + "pe.profileId", + "pe.finishDate", + "pe.degree", + "ROW_NUMBER() OVER (PARTITION BY pe.profileId ORDER BY pe.finishDate DESC) as rn", + ]) + .where("pe.profileId IN (:...profileIds)", { profileIds }) + .getRawMany(); + + // Filter เฉพาะ latest education + educationsData = educationsData.filter((ed: any) => ed.rn === 1); + } + + // Step 5: ดึงข้อมูล Salary ล่าสุดของแต่ละ Profile + let salariesData: any[] = []; + if (profileIds.length > 0) { + salariesData = await this.profileSalaryRepository + .createQueryBuilder("ps") + .select([ + "ps.profileId", + "ps.commandDateAffect", + "ps.amount", + "ROW_NUMBER() OVER (PARTITION BY ps.profileId ORDER BY ps.commandDateAffect DESC) as rn", + ]) + .where("ps.profileId IN (:...profileIds)", { profileIds }) + .getRawMany(); + + // Filter เฉพาะ latest salary + salariesData = salariesData.filter((sal: any) => sal.rn === 1); + } + + // Step 6: ดึงข้อมูล Positions ที่เกี่ยวข้อง + const posMasterIds = posMastersData.map((pm: any) => pm.id); + let positionsData: any[] = []; + if (posMasterIds.length > 0) { + positionsData = await this.positionRepository + .createQueryBuilder("position") + .leftJoinAndSelect("position.posType", "posType") + .leftJoinAndSelect("position.posLevel", "posLevel") + .leftJoinAndSelect("position.posExecutive", "posExecutive") + .select([ + "position.id", + "position.positionName", + "position.positionIsSelected", + "position.posMasterId", + "posType.id", + "posType.posTypeName", + "posLevel.id", + "posLevel.posLevelName", + "posExecutive.id", + "posExecutive.posExecutiveName", + ]) + .where("position.posMasterId IN (:...posMasterIds)", { posMasterIds }) + .getMany(); + } + + // Step 7: Combine ข้อมูลกลับเหมือนเดิม + for (let orgRoot of orgRootData) { + orgRoot.posMasters = posMastersData.filter((pm: any) => pm.orgRootId === orgRoot.id); + + for (let posMaster of orgRoot.posMasters) { + // Attach current_holder + if (posMaster.current_holderId) { + posMaster.current_holder = profilesData.find( + (p: any) => p.id === posMaster.current_holderId, + ); + if (posMaster.current_holder) { + posMaster.current_holder.profileEducations = educationsData.filter( + (ed: any) => ed.profileId === posMaster.current_holderId, + ); + posMaster.current_holder.profileSalary = salariesData.filter( + (sal: any) => sal.profileId === posMaster.current_holderId, + ); + } + } + + // Attach next_holder + if (posMaster.next_holderId) { + posMaster.next_holder = profilesData.find((p: any) => p.id === posMaster.next_holderId); + if (posMaster.next_holder) { + posMaster.next_holder.profileEducations = educationsData.filter( + (ed: any) => ed.profileId === posMaster.next_holderId, + ); + posMaster.next_holder.profileSalary = salariesData.filter( + (sal: any) => sal.profileId === posMaster.next_holderId, + ); + } + } + + // Attach positions + posMaster.positions = positionsData.filter((pos: any) => pos.posMasterId === posMaster.id); + } + } + + if (!orgRootData || orgRootData.length === 0) { + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลองค์กร"); + } - const orgRootData = await this.orgRootRepository.find({ - where: { - id: nodeId, - // id: rootId, - // orgRevisionId: orgRevision.id, - }, - order: { orgRootOrder: "ASC" }, - relations: [ - "posMasters", - "posMasters.orgRoot", - "posMasters.orgChild1", - "posMasters.orgChild2", - "posMasters.orgChild3", - "posMasters.orgChild4", - "posMasters.current_holder", - "posMasters.current_holder.profileSalary", - "posMasters.current_holder.profileEducations", - "posMasters.next_holder", - "posMasters.next_holder.posLevel", - "posMasters.next_holder.posType", - "posMasters.next_holder.profileSalary", - "posMasters.next_holder.profileEducations", - "posMasters.next_holder.current_holders", - "posMasters.next_holder.current_holders.positions", - "posMasters.next_holder.current_holders.orgRoot", - "posMasters.next_holder.current_holders.orgChild1", - "posMasters.next_holder.current_holders.orgChild2", - "posMasters.next_holder.current_holders.orgChild3", - "posMasters.next_holder.current_holders.orgChild4", - "posMasters.positions", - "posMasters.positions.posLevel", - "posMasters.positions.posType", - "posMasters.positions.posExecutive", - ], - }); const orgName = orgRootData[0].orgRootName ?? ""; const orgRootIds = orgRootData.map((orgRoot) => orgRoot.id) || null; - const orgChild1Data = await this.child1Repository.find({ - where: { - orgRootId: In(orgRootIds), - }, - order: { orgChild1Order: "ASC" }, - relations: [ - "posMasters", - "posMasters.orgRoot", - "posMasters.orgChild1", - "posMasters.orgChild2", - "posMasters.orgChild3", - "posMasters.orgChild4", - "posMasters.current_holder", - "posMasters.current_holder.profileSalary", - "posMasters.current_holder.profileEducations", - "posMasters.next_holder", - "posMasters.next_holder.posLevel", - "posMasters.next_holder.posType", - "posMasters.next_holder.profileSalary", - "posMasters.next_holder.profileEducations", - "posMasters.next_holder.current_holders", - "posMasters.next_holder.current_holders.positions", - "posMasters.next_holder.current_holders.orgRoot", - "posMasters.next_holder.current_holders.orgChild1", - "posMasters.next_holder.current_holders.orgChild2", - "posMasters.next_holder.current_holders.orgChild3", - "posMasters.next_holder.current_holders.orgChild4", - "posMasters.positions", - "posMasters.positions.posLevel", - "posMasters.positions.posType", - "posMasters.positions.posExecutive", - ], - }); - const orgChild1Ids = orgChild1Data.map((orgChild1) => orgChild1.id) || null; - const orgChild2Data = await this.child2Repository.find({ - where: { - orgChild1: In(orgChild1Ids), - }, - order: { orgChild2Order: "ASC" }, - relations: [ - "posMasters", - "posMasters.orgRoot", - "posMasters.orgChild1", - "posMasters.orgChild2", - "posMasters.orgChild3", - "posMasters.orgChild4", - "posMasters.current_holder", - "posMasters.current_holder.profileSalary", - "posMasters.current_holder.profileEducations", - "posMasters.next_holder", - "posMasters.next_holder.posLevel", - "posMasters.next_holder.posType", - "posMasters.next_holder.profileSalary", - "posMasters.next_holder.profileEducations", - "posMasters.next_holder.current_holders", - "posMasters.next_holder.current_holders.positions", - "posMasters.next_holder.current_holders.orgRoot", - "posMasters.next_holder.current_holders.orgChild1", - "posMasters.next_holder.current_holders.orgChild2", - "posMasters.next_holder.current_holders.orgChild3", - "posMasters.next_holder.current_holders.orgChild4", - "posMasters.positions", - "posMasters.positions.posLevel", - "posMasters.positions.posType", - "posMasters.positions.posExecutive", - ], - }); + // Step 8: ปรับปรุง orgChild1Data - ใช้ optimized approach + const orgChild1Data = await this.child1Repository + .createQueryBuilder("orgChild1") + .select([ + "orgChild1.id", + "orgChild1.orgRootId", + "orgChild1.orgChild1Name", + "orgChild1.orgChild1ShortName", + "orgChild1.orgChild1Order", + ]) + .where("orgChild1.orgRootId IN (:...orgRootIds)", { orgRootIds }) + .orderBy("orgChild1.orgChild1Order", "ASC") + .getMany(); - const orgChild2Ids = orgChild2Data.map((orgChild2) => orgChild2.id) || null; - const orgChild3Data = await this.child3Repository.find({ - where: { - orgChild2: In(orgChild2Ids), - }, - order: { orgChild3Order: "ASC" }, - relations: [ - "posMasters", - "posMasters.orgRoot", - "posMasters.orgChild1", - "posMasters.orgChild2", - "posMasters.orgChild3", - "posMasters.orgChild4", - "posMasters.current_holder", - "posMasters.current_holder.profileSalary", - "posMasters.current_holder.profileEducations", - "posMasters.next_holder", - "posMasters.next_holder.posLevel", - "posMasters.next_holder.posType", - "posMasters.next_holder.profileSalary", - "posMasters.next_holder.profileEducations", - "posMasters.next_holder.current_holders", - "posMasters.next_holder.current_holders.positions", - "posMasters.next_holder.current_holders.orgRoot", - "posMasters.next_holder.current_holders.orgChild1", - "posMasters.next_holder.current_holders.orgChild2", - "posMasters.next_holder.current_holders.orgChild3", - "posMasters.next_holder.current_holders.orgChild4", - "posMasters.next_holder.current_holders.orgChild4", - "posMasters.positions", - "posMasters.positions.posLevel", - "posMasters.positions.posType", - "posMasters.positions.posExecutive", - ], - }); + // ดึงข้อมูล PosMasters สำหรับ orgChild1 + const orgChild1Ids = orgChild1Data.map((orgChild1) => orgChild1.id); + let child1PosMasters: any[] = []; + if (orgChild1Ids.length > 0) { + child1PosMasters = await this.posMasterRepository + .createQueryBuilder("posMaster") + .select([ + "posMaster.id", + "posMaster.posMasterOrder", + "posMaster.isSit", + "posMaster.posMasterNo", + "posMaster.ancestorDNA", + "posMaster.reason", + "posMaster.orgChild1Id", + "posMaster.orgChild2Id", + "posMaster.current_holderId", + "posMaster.next_holderId", + ]) + .where("posMaster.orgChild1Id IN (:...orgChild1Ids)", { orgChild1Ids }) + .andWhere("posMaster.orgChild2Id IS NULL") // เฉพาะ child1 level + .orderBy("posMaster.posMasterOrder", "ASC") + .getMany(); + } - const orgChild3Ids = orgChild3Data.map((orgChild3) => orgChild3.id) || null; - const orgChild4Data = await this.child4Repository.find({ - where: { - orgChild3: In(orgChild3Ids), - }, - order: { orgChild4Order: "ASC" }, - relations: [ - "posMasters", - "posMasters.orgRoot", - "posMasters.orgChild1", - "posMasters.orgChild2", - "posMasters.orgChild3", - "posMasters.orgChild4", - "posMasters.current_holder", - "posMasters.current_holder.profileSalary", - "posMasters.current_holder.profileEducations", - "posMasters.next_holder", - "posMasters.next_holder.posLevel", - "posMasters.next_holder.posType", - "posMasters.next_holder.profileSalary", - "posMasters.next_holder.profileEducations", - "posMasters.next_holder.current_holders", - "posMasters.next_holder.current_holders.positions", - "posMasters.next_holder.current_holders.orgRoot", - "posMasters.next_holder.current_holders.orgChild1", - "posMasters.next_holder.current_holders.orgChild2", - "posMasters.next_holder.current_holders.orgChild3", - "posMasters.next_holder.current_holders.orgChild4", - "posMasters.positions", - "posMasters.positions.posLevel", - "posMasters.positions.posType", - "posMasters.positions.posExecutive", - ], - }); + // รวบรวม Profile IDs สำหรับ child1 + const child1ProfileIds = + child1PosMasters.length > 0 + ? [ + ...new Set([ + ...child1PosMasters.map((pm: any) => pm.current_holderId).filter(Boolean), + ...child1PosMasters.map((pm: any) => pm.next_holderId).filter(Boolean), + ]), + ] + : []; + + // ดึงข้อมูล Profiles, Education, Salary, Positions สำหรับ child1 + let child1Profiles: any[] = []; + let child1Educations: any[] = []; + let child1Salaries: any[] = []; + let child1Positions: any[] = []; + + if (child1ProfileIds.length > 0) { + [child1Profiles, child1Educations, child1Salaries] = await Promise.all([ + this.profileRepository + .createQueryBuilder("profile") + .select([ + "profile.id", + "profile.prefix", + "profile.firstName", + "profile.lastName", + "profile.position", + "profile.posTypeId", + "profile.posLevelId", + ]) + .where("profile.id IN (:...child1ProfileIds)", { child1ProfileIds }) + .getMany(), + + this.profileEducationRepository + .createQueryBuilder("pe") + .select([ + "pe.profileId", + "pe.finishDate", + "pe.degree", + "ROW_NUMBER() OVER (PARTITION BY pe.profileId ORDER BY pe.finishDate DESC) as rn", + ]) + .where("pe.profileId IN (:...child1ProfileIds)", { child1ProfileIds }) + .getRawMany() + .then((data: any[]) => data.filter((ed: any) => ed.rn === 1)), + + this.profileSalaryRepository + .createQueryBuilder("ps") + .select([ + "ps.profileId", + "ps.commandDateAffect", + "ps.amount", + "ROW_NUMBER() OVER (PARTITION BY ps.profileId ORDER BY ps.commandDateAffect DESC) as rn", + ]) + .where("ps.profileId IN (:...child1ProfileIds)", { child1ProfileIds }) + .getRawMany() + .then((data: any[]) => data.filter((sal: any) => sal.rn === 1)), + ]); + } + + if (child1PosMasters.length > 0) { + const child1PosMasterIds = child1PosMasters.map((pm: any) => pm.id); + child1Positions = await this.positionRepository + .createQueryBuilder("position") + .leftJoinAndSelect("position.posType", "posType") + .leftJoinAndSelect("position.posLevel", "posLevel") + .leftJoinAndSelect("position.posExecutive", "posExecutive") + .select([ + "position.id", + "position.positionName", + "position.positionIsSelected", + "position.posMasterId", + "posType.id", + "posType.posTypeName", + "posLevel.id", + "posLevel.posLevelName", + "posExecutive.id", + "posExecutive.posExecutiveName", + ]) + .where("position.posMasterId IN (:...child1PosMasterIds)", { child1PosMasterIds }) + .getMany(); + } + + // Combine ข้อมูล orgChild1 + for (let orgChild1 of orgChild1Data) { + orgChild1.posMasters = child1PosMasters.filter((pm: any) => pm.orgChild1Id === orgChild1.id); + + for (let posMaster of orgChild1.posMasters) { + if (posMaster.current_holderId) { + posMaster.current_holder = child1Profiles.find( + (p: any) => p.id === posMaster.current_holderId, + ); + if (posMaster.current_holder) { + posMaster.current_holder.profileEducations = child1Educations.filter( + (ed: any) => ed.profileId === posMaster.current_holderId, + ); + posMaster.current_holder.profileSalary = child1Salaries.filter( + (sal: any) => sal.profileId === posMaster.current_holderId, + ); + } + } + + if (posMaster.next_holderId) { + posMaster.next_holder = child1Profiles.find((p: any) => p.id === posMaster.next_holderId); + if (posMaster.next_holder) { + posMaster.next_holder.profileEducations = child1Educations.filter( + (ed: any) => ed.profileId === posMaster.next_holderId, + ); + posMaster.next_holder.profileSalary = child1Salaries.filter( + (sal: any) => sal.profileId === posMaster.next_holderId, + ); + } + } + + posMaster.positions = child1Positions.filter( + (pos: any) => pos.posMasterId === posMaster.id, + ); + } + } + + // Step 9: ปรับปรุง orgChild2Data + const originalOrgChild1Ids = + orgChild1Data.length > 0 ? orgChild1Data.map((orgChild1) => orgChild1.id) : []; + const orgChild2Data = await this.child2Repository + .createQueryBuilder("orgChild2") + .select([ + "orgChild2.id", + "orgChild2.orgChild1Id", + "orgChild2.orgChild2Name", + "orgChild2.orgChild2ShortName", + "orgChild2.orgChild2Order", + ]) + .where( + originalOrgChild1Ids.length > 0 + ? "orgChild2.orgChild1Id IN (:...originalOrgChild1Ids)" + : "1=0", + { + originalOrgChild1Ids, + }, + ) + .orderBy("orgChild2.orgChild2Order", "ASC") + .getMany(); + + // ดึงข้อมูล PosMasters สำหรับ orgChild2 + const orgChild2Ids = orgChild2Data.map((orgChild2) => orgChild2.id); + let child2PosMasters: any[] = []; + if (orgChild2Ids.length > 0) { + child2PosMasters = await this.posMasterRepository + .createQueryBuilder("posMaster") + .select([ + "posMaster.id", + "posMaster.posMasterOrder", + "posMaster.isSit", + "posMaster.posMasterNo", + "posMaster.ancestorDNA", + "posMaster.reason", + "posMaster.orgChild2Id", + "posMaster.orgChild3Id", + "posMaster.current_holderId", + "posMaster.next_holderId", + ]) + .where("posMaster.orgChild2Id IN (:...orgChild2Ids)", { orgChild2Ids }) + .andWhere("posMaster.orgChild3Id IS NULL") // เฉพาะ child2 level + .orderBy("posMaster.posMasterOrder", "ASC") + .getMany(); + } + + // รวบรวม Profile IDs สำหรับ child2 + const child2ProfileIds = + child2PosMasters.length > 0 + ? [ + ...new Set([ + ...child2PosMasters.map((pm: any) => pm.current_holderId).filter(Boolean), + ...child2PosMasters.map((pm: any) => pm.next_holderId).filter(Boolean), + ]), + ] + : []; + + // ดึงข้อมูล Profiles, Education, Salary, Positions สำหรับ child2 + let child2Profiles: any[] = []; + let child2Educations: any[] = []; + let child2Salaries: any[] = []; + let child2Positions: any[] = []; + + if (child2ProfileIds.length > 0) { + [child2Profiles, child2Educations, child2Salaries] = await Promise.all([ + this.profileRepository + .createQueryBuilder("profile") + .select([ + "profile.id", + "profile.prefix", + "profile.firstName", + "profile.lastName", + "profile.position", + "profile.posTypeId", + "profile.posLevelId", + ]) + .where("profile.id IN (:...child2ProfileIds)", { child2ProfileIds }) + .getMany(), + + this.profileEducationRepository + .createQueryBuilder("pe") + .select([ + "pe.profileId", + "pe.finishDate", + "pe.degree", + "ROW_NUMBER() OVER (PARTITION BY pe.profileId ORDER BY pe.finishDate DESC) as rn", + ]) + .where("pe.profileId IN (:...child2ProfileIds)", { child2ProfileIds }) + .getRawMany() + .then((data: any[]) => data.filter((ed: any) => ed.rn === 1)), + + this.profileSalaryRepository + .createQueryBuilder("ps") + .select([ + "ps.profileId", + "ps.commandDateAffect", + "ps.amount", + "ROW_NUMBER() OVER (PARTITION BY ps.profileId ORDER BY ps.commandDateAffect DESC) as rn", + ]) + .where("ps.profileId IN (:...child2ProfileIds)", { child2ProfileIds }) + .getRawMany() + .then((data: any[]) => data.filter((sal: any) => sal.rn === 1)), + ]); + } + + if (child2PosMasters.length > 0) { + const child2PosMasterIds = child2PosMasters.map((pm: any) => pm.id); + child2Positions = await this.positionRepository + .createQueryBuilder("position") + .leftJoinAndSelect("position.posType", "posType") + .leftJoinAndSelect("position.posLevel", "posLevel") + .leftJoinAndSelect("position.posExecutive", "posExecutive") + .select([ + "position.id", + "position.positionName", + "position.positionIsSelected", + "position.posMasterId", + "posType.id", + "posType.posTypeName", + "posLevel.id", + "posLevel.posLevelName", + "posExecutive.id", + "posExecutive.posExecutiveName", + ]) + .where("position.posMasterId IN (:...child2PosMasterIds)", { child2PosMasterIds }) + .getMany(); + } + + // Combine ข้อมูล orgChild2 + for (let orgChild2 of orgChild2Data) { + orgChild2.posMasters = child2PosMasters.filter((pm: any) => pm.orgChild2Id === orgChild2.id); + + for (let posMaster of orgChild2.posMasters) { + if (posMaster.current_holderId) { + posMaster.current_holder = child2Profiles.find( + (p: any) => p.id === posMaster.current_holderId, + ); + if (posMaster.current_holder) { + posMaster.current_holder.profileEducations = child2Educations.filter( + (ed: any) => ed.profileId === posMaster.current_holderId, + ); + posMaster.current_holder.profileSalary = child2Salaries.filter( + (sal: any) => sal.profileId === posMaster.current_holderId, + ); + } + } + + if (posMaster.next_holderId) { + posMaster.next_holder = child2Profiles.find((p: any) => p.id === posMaster.next_holderId); + if (posMaster.next_holder) { + posMaster.next_holder.profileEducations = child2Educations.filter( + (ed: any) => ed.profileId === posMaster.next_holderId, + ); + posMaster.next_holder.profileSalary = child2Salaries.filter( + (sal: any) => sal.profileId === posMaster.next_holderId, + ); + } + } + + posMaster.positions = child2Positions.filter( + (pos: any) => pos.posMasterId === posMaster.id, + ); + } + } + + // Step 10: ปรับปรุง orgChild3Data + const originalOrgChild2Ids = + orgChild2Data.length > 0 ? orgChild2Data.map((orgChild2) => orgChild2.id) : []; + const orgChild3Data = await this.child3Repository + .createQueryBuilder("orgChild3") + .select([ + "orgChild3.id", + "orgChild3.orgChild2Id", + "orgChild3.orgChild3Name", + "orgChild3.orgChild3ShortName", + "orgChild3.orgChild3Order", + ]) + .where( + originalOrgChild2Ids.length > 0 + ? "orgChild3.orgChild2Id IN (:...originalOrgChild2Ids)" + : "1=0", + { + originalOrgChild2Ids, + }, + ) + .orderBy("orgChild3.orgChild3Order", "ASC") + .getMany(); + + // ดึงข้อมูล PosMasters สำหรับ orgChild3 + const orgChild3Ids = orgChild3Data.map((orgChild3) => orgChild3.id); + let child3PosMasters: any[] = []; + if (orgChild3Ids.length > 0) { + child3PosMasters = await this.posMasterRepository + .createQueryBuilder("posMaster") + .select([ + "posMaster.id", + "posMaster.posMasterOrder", + "posMaster.isSit", + "posMaster.posMasterNo", + "posMaster.ancestorDNA", + "posMaster.reason", + "posMaster.orgChild3Id", + "posMaster.orgChild4Id", + "posMaster.current_holderId", + "posMaster.next_holderId", + ]) + .where("posMaster.orgChild3Id IN (:...orgChild3Ids)", { orgChild3Ids }) + .andWhere("posMaster.orgChild4Id IS NULL") // เฉพาะ child3 level + .orderBy("posMaster.posMasterOrder", "ASC") + .getMany(); + } + + // รวบรวม Profile IDs สำหรับ child3 + const child3ProfileIds = + child3PosMasters.length > 0 + ? [ + ...new Set([ + ...child3PosMasters.map((pm: any) => pm.current_holderId).filter(Boolean), + ...child3PosMasters.map((pm: any) => pm.next_holderId).filter(Boolean), + ]), + ] + : []; + + // ดึงข้อมูล Profiles, Education, Salary, Positions สำหรับ child3 + let child3Profiles: any[] = []; + let child3Educations: any[] = []; + let child3Salaries: any[] = []; + let child3Positions: any[] = []; + + if (child3ProfileIds.length > 0) { + [child3Profiles, child3Educations, child3Salaries] = await Promise.all([ + this.profileRepository + .createQueryBuilder("profile") + .select([ + "profile.id", + "profile.prefix", + "profile.firstName", + "profile.lastName", + "profile.position", + "profile.posTypeId", + "profile.posLevelId", + ]) + .where("profile.id IN (:...child3ProfileIds)", { child3ProfileIds }) + .getMany(), + + this.profileEducationRepository + .createQueryBuilder("pe") + .select([ + "pe.profileId", + "pe.finishDate", + "pe.degree", + "ROW_NUMBER() OVER (PARTITION BY pe.profileId ORDER BY pe.finishDate DESC) as rn", + ]) + .where("pe.profileId IN (:...child3ProfileIds)", { child3ProfileIds }) + .getRawMany() + .then((data: any[]) => data.filter((ed: any) => ed.rn === 1)), + + this.profileSalaryRepository + .createQueryBuilder("ps") + .select([ + "ps.profileId", + "ps.commandDateAffect", + "ps.amount", + "ROW_NUMBER() OVER (PARTITION BY ps.profileId ORDER BY ps.commandDateAffect DESC) as rn", + ]) + .where("ps.profileId IN (:...child3ProfileIds)", { child3ProfileIds }) + .getRawMany() + .then((data: any[]) => data.filter((sal: any) => sal.rn === 1)), + ]); + } + + if (child3PosMasters.length > 0) { + const child3PosMasterIds = child3PosMasters.map((pm: any) => pm.id); + child3Positions = await this.positionRepository + .createQueryBuilder("position") + .leftJoinAndSelect("position.posType", "posType") + .leftJoinAndSelect("position.posLevel", "posLevel") + .leftJoinAndSelect("position.posExecutive", "posExecutive") + .select([ + "position.id", + "position.positionName", + "position.positionIsSelected", + "position.posMasterId", + "posType.id", + "posType.posTypeName", + "posLevel.id", + "posLevel.posLevelName", + "posExecutive.id", + "posExecutive.posExecutiveName", + ]) + .where("position.posMasterId IN (:...child3PosMasterIds)", { child3PosMasterIds }) + .getMany(); + } + + // Combine ข้อมูล orgChild3 + for (let orgChild3 of orgChild3Data) { + orgChild3.posMasters = child3PosMasters.filter((pm: any) => pm.orgChild3Id === orgChild3.id); + + for (let posMaster of orgChild3.posMasters) { + if (posMaster.current_holderId) { + posMaster.current_holder = child3Profiles.find( + (p: any) => p.id === posMaster.current_holderId, + ); + if (posMaster.current_holder) { + posMaster.current_holder.profileEducations = child3Educations.filter( + (ed: any) => ed.profileId === posMaster.current_holderId, + ); + posMaster.current_holder.profileSalary = child3Salaries.filter( + (sal: any) => sal.profileId === posMaster.current_holderId, + ); + } + } + + if (posMaster.next_holderId) { + posMaster.next_holder = child3Profiles.find((p: any) => p.id === posMaster.next_holderId); + if (posMaster.next_holder) { + posMaster.next_holder.profileEducations = child3Educations.filter( + (ed: any) => ed.profileId === posMaster.next_holderId, + ); + posMaster.next_holder.profileSalary = child3Salaries.filter( + (sal: any) => sal.profileId === posMaster.next_holderId, + ); + } + } + + posMaster.positions = child3Positions.filter( + (pos: any) => pos.posMasterId === posMaster.id, + ); + } + } + + // Step 11: ปรับปรุง orgChild4Data + const originalOrgChild3Ids = + orgChild3Data.length > 0 ? orgChild3Data.map((orgChild3) => orgChild3.id) : []; + const orgChild4Data = await this.child4Repository + .createQueryBuilder("orgChild4") + .select([ + "orgChild4.id", + "orgChild4.orgChild3Id", + "orgChild4.orgChild4Name", + "orgChild4.orgChild4ShortName", + "orgChild4.orgChild4Order", + ]) + .where( + originalOrgChild3Ids.length > 0 + ? "orgChild4.orgChild3Id IN (:...originalOrgChild3Ids)" + : "1=0", + { + originalOrgChild3Ids, + }, + ) + .orderBy("orgChild4.orgChild4Order", "ASC") + .getMany(); + + // ดึงข้อมูล PosMasters สำหรับ orgChild4 + const orgChild4Ids = orgChild4Data.map((orgChild4) => orgChild4.id); + let child4PosMasters: any[] = []; + if (orgChild4Ids.length > 0) { + child4PosMasters = await this.posMasterRepository + .createQueryBuilder("posMaster") + .select([ + "posMaster.id", + "posMaster.posMasterOrder", + "posMaster.isSit", + "posMaster.posMasterNo", + "posMaster.ancestorDNA", + "posMaster.reason", + "posMaster.orgChild4Id", + "posMaster.current_holderId", + "posMaster.next_holderId", + ]) + .where("posMaster.orgChild4Id IN (:...orgChild4Ids)", { orgChild4Ids }) + .orderBy("posMaster.posMasterOrder", "ASC") + .getMany(); + } + + // รวบรวม Profile IDs สำหรับ child4 + const child4ProfileIds = + child4PosMasters.length > 0 + ? [ + ...new Set([ + ...child4PosMasters.map((pm: any) => pm.current_holderId).filter(Boolean), + ...child4PosMasters.map((pm: any) => pm.next_holderId).filter(Boolean), + ]), + ] + : []; + + // ดึงข้อมูล Profiles, Education, Salary, Positions สำหรับ child4 + let child4Profiles: any[] = []; + let child4Educations: any[] = []; + let child4Salaries: any[] = []; + let child4Positions: any[] = []; + + if (child4ProfileIds.length > 0) { + [child4Profiles, child4Educations, child4Salaries] = await Promise.all([ + this.profileRepository + .createQueryBuilder("profile") + .select([ + "profile.id", + "profile.prefix", + "profile.firstName", + "profile.lastName", + "profile.position", + "profile.posTypeId", + "profile.posLevelId", + ]) + .where("profile.id IN (:...child4ProfileIds)", { child4ProfileIds }) + .getMany(), + + this.profileEducationRepository + .createQueryBuilder("pe") + .select([ + "pe.profileId", + "pe.finishDate", + "pe.degree", + "ROW_NUMBER() OVER (PARTITION BY pe.profileId ORDER BY pe.finishDate DESC) as rn", + ]) + .where("pe.profileId IN (:...child4ProfileIds)", { child4ProfileIds }) + .getRawMany() + .then((data: any[]) => data.filter((ed: any) => ed.rn === 1)), + + this.profileSalaryRepository + .createQueryBuilder("ps") + .select([ + "ps.profileId", + "ps.commandDateAffect", + "ps.amount", + "ROW_NUMBER() OVER (PARTITION BY ps.profileId ORDER BY ps.commandDateAffect DESC) as rn", + ]) + .where("ps.profileId IN (:...child4ProfileIds)", { child4ProfileIds }) + .getRawMany() + .then((data: any[]) => data.filter((sal: any) => sal.rn === 1)), + ]); + } + + if (child4PosMasters.length > 0) { + const child4PosMasterIds = child4PosMasters.map((pm: any) => pm.id); + child4Positions = await this.positionRepository + .createQueryBuilder("position") + .leftJoinAndSelect("position.posType", "posType") + .leftJoinAndSelect("position.posLevel", "posLevel") + .leftJoinAndSelect("position.posExecutive", "posExecutive") + .select([ + "position.id", + "position.positionName", + "position.positionIsSelected", + "position.posMasterId", + "posType.id", + "posType.posTypeName", + "posLevel.id", + "posLevel.posLevelName", + "posExecutive.id", + "posExecutive.posExecutiveName", + ]) + .where("position.posMasterId IN (:...child4PosMasterIds)", { child4PosMasterIds }) + .getMany(); + } + + // Combine ข้อมูล orgChild4 + for (let orgChild4 of orgChild4Data) { + orgChild4.posMasters = child4PosMasters.filter((pm: any) => pm.orgChild4Id === orgChild4.id); + + for (let posMaster of orgChild4.posMasters) { + if (posMaster.current_holderId) { + posMaster.current_holder = child4Profiles.find( + (p: any) => p.id === posMaster.current_holderId, + ); + if (posMaster.current_holder) { + posMaster.current_holder.profileEducations = child4Educations.filter( + (ed: any) => ed.profileId === posMaster.current_holderId, + ); + posMaster.current_holder.profileSalary = child4Salaries.filter( + (sal: any) => sal.profileId === posMaster.current_holderId, + ); + } + } + + if (posMaster.next_holderId) { + posMaster.next_holder = child4Profiles.find((p: any) => p.id === posMaster.next_holderId); + if (posMaster.next_holder) { + posMaster.next_holder.profileEducations = child4Educations.filter( + (ed: any) => ed.profileId === posMaster.next_holderId, + ); + posMaster.next_holder.profileSalary = child4Salaries.filter( + (sal: any) => sal.profileId === posMaster.next_holderId, + ); + } + } + + posMaster.positions = child4Positions.filter( + (pos: any) => pos.posMasterId === posMaster.id, + ); + } + } + + let orgRevisionActive: any = await this.orgRevisionRepository + .createQueryBuilder("orgRevision") + .select([ + "orgRevision.id", + "orgRevision.orgRevisionIsCurrent", + "orgRevision.orgRevisionIsDraft", + "orgRevision.createdAt", + ]) + .leftJoinAndSelect("orgRevision.posMasters", "posMasters") + .leftJoinAndSelect("posMasters.positions", "positions") + .leftJoinAndSelect("positions.posType", "posType") + .leftJoinAndSelect("positions.posLevel", "posLevel") + .leftJoinAndSelect("positions.posExecutive", "posExecutive") + .addSelect([ + "posMasters.posMasterOrder", + "posMasters.posMasterNo", + "posMasters.ancestorDNA", + "posMasters.orgRevisionId", + ]) + .addSelect(["positions.positionName", "positions.positionIsSelected"]) + .addSelect(["posType.posTypeName"]) + .addSelect(["posLevel.posLevelName"]) + .addSelect(["posExecutive.posExecutiveName"]) + .where("orgRevision.orgRevisionIsCurrent = :isCurrent", { isCurrent: true }) + .andWhere("orgRevision.orgRevisionIsDraft = :isDraft", { isDraft: false }) + .getOne(); - let orgRevisionActive: any = await this.orgRevisionRepository.findOne({ - where: { orgRevisionIsCurrent: true, orgRevisionIsDraft: false }, - relations: [ - "posMasters", - "posMasters.positions", - "posMasters.positions.posLevel", - "posMasters.positions.posType", - "posMasters.positions.posExecutive", - ], - }); if (orgRevisionActive == null) { - const _orgRevisionActive = await this.orgRevisionRepository.find({ - order: { createdAt: "DESC" }, - skip: 1, - relations: [ - "posMasters", - "posMasters.positions", - "posMasters.positions.posLevel", - "posMasters.positions.posType", - "posMasters.positions.posExecutive", - ], - }); + const _orgRevisionActive = await this.orgRevisionRepository + .createQueryBuilder("orgRevision") + .select([ + "orgRevision.id", + "orgRevision.orgRevisionIsCurrent", + "orgRevision.orgRevisionIsDraft", + "orgRevision.createdAt", + ]) + .leftJoinAndSelect("orgRevision.posMasters", "posMasters") + .leftJoinAndSelect("posMasters.positions", "positions") + .leftJoinAndSelect("positions.posType", "posType") + .leftJoinAndSelect("positions.posLevel", "posLevel") + .leftJoinAndSelect("positions.posExecutive", "posExecutive") + .addSelect([ + "posMasters.posMasterOrder", + "posMasters.posMasterNo", + "posMasters.ancestorDNA", + "posMasters.orgRevisionId", + ]) + .addSelect(["positions.positionName", "positions.positionIsSelected"]) + .addSelect(["posType.posTypeName"]) + .addSelect(["posLevel.posLevelName"]) + .addSelect(["posExecutive.posExecutiveName"]) + .orderBy("orgRevision.createdAt", "DESC") + .skip(1) + .take(1) + .getMany(); if (_orgRevisionActive.length > 0) orgRevisionActive = _orgRevisionActive[0]; } let data = new Array(); let _node: any; let no = 1; - for (let orgRoot of orgRootData) { - await Promise.all( - orgRoot.posMasters - .sort((a, b) => a.posMasterOrder - b.posMasterOrder) - .map(async (posMaster) => { - if (posMaster.orgChild1Id == null) { - const positionName = [...new Set(posMaster.positions.map((x) => x.positionName))]; - const posType = [ - ...new Set( - posMaster.positions - .filter((x: any) => x.posType != null) - .map((x) => x.posType.posTypeName), - ), - ]; - const posLevel = [ - ...new Set( - posMaster.positions - .filter((x: any) => x.posLevel != null) - .map((x) => x.posLevel.posLevelName), - ), - ]; - const posExecutive = [ - ...new Set( - posMaster.positions - .filter((x: any) => x.posExecutive != null) - .map((x) => x.posExecutive.posExecutiveName), - ), - ]; - let positionMasterProfileOld: any = null; - if (posMaster.next_holder != null) { - positionMasterProfileOld = posMaster.next_holder.current_holders.find( - (x) => x.orgRevisionId == orgRevisionActive.id, - ); - } - let positionMasterOld: any = null; - let profilePositionName: any = []; - let profilePosType: any = []; - let profilePosLevel: any = []; - let profilePosExecutive: any = []; - if (posMaster.ancestorDNA != null && posMaster.ancestorDNA != "") { - positionMasterOld = orgRevisionActive.posMasters.find( - (x: any) => - x.orgRevisionId == orgRevisionActive.id && - x.ancestorDNA == posMaster.ancestorDNA, - ); + for (let orgRoot of orgRootData) { + const posMastersFiltered = orgRoot.posMasters.sort( + (a, b) => a.posMasterOrder - b.posMasterOrder, + ); + + for (let posMaster of posMastersFiltered) { + if (posMaster.orgChild1Id == null) { + // Use temporary arrays to reduce memory allocation + const posNames = posMaster.positions.map((x) => x.positionName); + const positionName = [...new Set(posNames)]; + + const typeNames = posMaster.positions + .filter((x: any) => x.posType != null) + .map((x) => x.posType.posTypeName); + const posType = [...new Set(typeNames)]; + + const levelNames = posMaster.positions + .filter((x: any) => x.posLevel != null) + .map((x) => x.posLevel.posLevelName); + const posLevel = [...new Set(levelNames)]; + + const execNames = posMaster.positions + .filter((x: any) => x.posExecutive != null) + .map((x) => x.posExecutive.posExecutiveName); + const posExecutive = [...new Set(execNames)]; + let positionMasterProfileOld: any = null; + if (posMaster.next_holder != null && posMaster.next_holder.current_holders) { + positionMasterProfileOld = posMaster.next_holder.current_holders.find( + (x) => x.orgRevisionId == orgRevisionActive.id, + ); + } + + let positionMasterOld: any = null; + let profilePositionName: any = []; + let profilePosType: any = []; + let profilePosLevel: any = []; + let profilePosExecutive: any = []; + if ( + posMaster.ancestorDNA != null && + posMaster.ancestorDNA != "" && + orgRevisionActive && + orgRevisionActive.posMasters + ) { + positionMasterOld = orgRevisionActive.posMasters.find( + (x: any) => + x.orgRevisionId == orgRevisionActive.id && x.ancestorDNA == posMaster.ancestorDNA, + ); + if (positionMasterOld && positionMasterOld.positions) { + profilePositionName = [ + ...new Set(positionMasterOld.positions.map((x: any) => x.positionName)), + ]; + } + if (positionMasterOld && positionMasterOld.positions) { + profilePositionName = [ + ...new Set(positionMasterOld.positions.map((x: any) => x.positionName)), + ]; + profilePosType = [ + ...new Set( + positionMasterOld.positions + .filter((x: any) => x.posType != null) + .map((x: any) => x.posType.posTypeName), + ), + ]; + profilePosLevel = [ + ...new Set( + positionMasterOld.positions + .filter((x: any) => x.posLevel != null) + .map((x: any) => x.posLevel.posLevelName), + ), + ]; + profilePosExecutive = [ + ...new Set( + positionMasterOld.positions + .filter((x: any) => x.posExecutive != null) + .map((x: any) => x.posExecutive.posExecutiveName), + ), + ]; + } + } + let education: any = ""; + if ( + posMaster.next_holder != null && + posMaster.next_holder.profileEducations != null && + posMaster.next_holder.profileEducations.length > 0 + ) { + let _education: any = posMaster.next_holder.profileEducations.sort( + (a, b) => + (b.finishDate == null ? 0 : b.finishDate.getTime()) - + (a.finishDate == null ? 0 : a.finishDate.getTime()), + ); + if (_education.length > 0) { + education = _education[0]; + } + } else { + if ( + posMaster.current_holder != null && + posMaster.current_holder.profileEducations != null && + posMaster.current_holder.profileEducations.length > 0 + ) { + let _education: any = posMaster.current_holder.profileEducations.sort( + (a, b) => + (b.finishDate == null ? 0 : b.finishDate.getTime()) - + (a.finishDate == null ? 0 : a.finishDate.getTime()), + ); + if (_education.length > 0) { + education = _education[0]; + } + } + } + let salary: any = ""; + if ( + posMaster.next_holder != null && + posMaster.next_holder.profileSalary != null && + posMaster.next_holder.profileSalary.length > 0 + ) { + let _salary: any = posMaster.next_holder.profileSalary.sort( + (a, b) => + (b.commandDateAffect == null ? 0 : b.commandDateAffect.getTime()) - + (a.commandDateAffect == null ? 0 : a.commandDateAffect.getTime()), + ); + if (_salary.length > 0) { + salary = _salary[0]; + } + } else { + if ( + posMaster.current_holder != null && + posMaster.current_holder.profileSalary != null && + posMaster.current_holder.profileSalary.length > 0 + ) { + let _salary: any = posMaster.current_holder.profileSalary.sort( + (a, b) => + (b.commandDateAffect == null ? 0 : b.commandDateAffect.getTime()) - + (a.commandDateAffect == null ? 0 : a.commandDateAffect.getTime()), + ); + if (_salary.length > 0) { + salary = _salary[0]; + } + } + } + let node = { + posMasterOrder: posMaster.posMasterOrder, // + isSit: posMaster.isSit, // + orgTreeName: orgRoot.orgRootName, + orgTreeShortName: orgRoot.orgRootShortName, + posMasterNo: posMaster.posMasterNo, + positionName: + posMaster.next_holder == null + ? positionName.join(" หรือ ") + : posMaster.isSit == false + ? posMaster.positions.find((x: any) => x.positionIsSelected == true)?.positionName + : posMaster.next_holder.position, + posType: + posMaster.next_holder == null + ? posType.join(" หรือ ") + : posMaster.isSit == false + ? posMaster.positions.find((x: any) => x.positionIsSelected == true)?.posType + ?.posTypeName + : posMaster.next_holder.posType == null + ? "-" + : posMaster.next_holder.posType.posTypeName, + posLevel: + posMaster.next_holder == null + ? posLevel.join(" หรือ ") + : posMaster.isSit == false + ? posMaster.positions.find((x: any) => x.positionIsSelected == true)?.posLevel + ?.posLevelName + : posMaster.next_holder.posLevel == null + ? "-" + : posMaster.next_holder.posLevel.posLevelName, + posExecutive: + posMaster.next_holder == null + ? posExecutive.join(" หรือ ") + : posMaster.isSit == false + ? posMaster.positions.find((x: any) => x.positionIsSelected == true)?.posExecutive + ?.posExecutiveName + : positionMasterProfileOld == null + ? "-" + : positionMasterProfileOld.positions.find( + (x: any) => x.positionIsSelected == true, + )?.posExecutive?.posExecutiveName, + + profileOrgName: + posMaster.next_holder == null + ? orgRoot.orgRootName + : positionMasterProfileOld == null + ? "-" + : positionMasterProfileOld.orgChild4 != null + ? positionMasterProfileOld.orgChild4.orgChild4Name + : positionMasterProfileOld.orgChild3 != null + ? positionMasterProfileOld.orgChild3.orgChild3Name + : positionMasterProfileOld.orgChild2 != null + ? positionMasterProfileOld.orgChild2.orgChild2Name + : positionMasterProfileOld.orgChild1 != null + ? positionMasterProfileOld.orgChild1.orgChild1Name + : positionMasterProfileOld.orgRoot != null + ? positionMasterProfileOld.orgRoot.orgRootName + : "-", + profileOrgShortName: + posMaster.next_holder == null + ? orgRoot.orgRootShortName + : positionMasterProfileOld == null + ? "-" + : positionMasterProfileOld.orgChild4 != null + ? positionMasterProfileOld.orgChild4.orgChild4ShortName + : positionMasterProfileOld.orgChild3 != null + ? positionMasterProfileOld.orgChild3.orgChild3ShortName + : positionMasterProfileOld.orgChild2 != null + ? positionMasterProfileOld.orgChild2.orgChild2ShortName + : positionMasterProfileOld.orgChild1 != null + ? positionMasterProfileOld.orgChild1.orgChild1ShortName + : positionMasterProfileOld.orgRoot != null + ? positionMasterProfileOld.orgRoot.orgRootShortName + : "-", + profileFullname: + posMaster.next_holder == null + ? posMaster.current_holder == null + ? "- ว่าง -" + : `${posMaster.current_holder.prefix}${posMaster.current_holder.firstName} ${posMaster.current_holder.lastName}` + : `${posMaster.next_holder.prefix}${posMaster.next_holder.firstName} ${posMaster.next_holder.lastName}`, + profilePosMasterNo: + posMaster.next_holder == null + ? positionMasterOld == null + ? "-" + : positionMasterOld.posMasterNo + : positionMasterProfileOld == null + ? "-" + : positionMasterProfileOld.posMasterNo, + profilePositionName: + posMaster.next_holder == null + ? positionMasterOld == null + ? positionName.join(" หรือ ") + : profilePositionName.join(" หรือ ") + : posMaster.next_holder.position, + profilePosType: + posMaster.next_holder == null + ? positionMasterOld == null + ? posType.join(" หรือ ") + : profilePosType.join(" หรือ ") + : posMaster.next_holder.posType == null + ? "-" + : posMaster.next_holder.posType.posTypeName, + profilePosLevel: + posMaster.next_holder == null + ? positionMasterOld == null + ? posLevel.join(" หรือ ") + : profilePosLevel.join(" หรือ ") + : posMaster.next_holder.posLevel == null + ? "-" + : posMaster.next_holder.posLevel.posLevelName, + profilePosExecutive: + posMaster.next_holder == null + ? positionMasterOld == null + ? posExecutive.join(" หรือ ") + : profilePosExecutive.join(" หรือ ") + : positionMasterProfileOld == null + ? "-" + : positionMasterProfileOld.positions.find( + (x: any) => x.positionIsSelected == true, + )?.posExecutive?.posExecutiveName, + education: education == "" ? "" : education.degree, + salary: salary == "" ? "" : salary.amount, + reason: posMaster.reason, + }; + if (_node == null) { + const head = { + posMasterNo: Extension.ToThaiNumber(node.orgTreeShortName.toString()), + profileFullname: Extension.ToThaiNumber(node.profileOrgName.toString()), + posExecutive: Extension.ToThaiNumber(node.orgTreeName.toString()), + positionName: "", + posType: "", + posLevel: "", + profilePosMasterNo: Extension.ToThaiNumber(node.profileOrgShortName.toString()), + profilePosExecutive: "", + profilePositionName: "", + profilePosType: "", + profilePosLevel: "", + education: "", + salary: "", + reason: "", + }; + data.push(head); + const _head = { + no: Extension.ToThaiNumber(no.toString()), + posMasterNo: + node.posMasterNo == null ? "" : Extension.ToThaiNumber(node.posMasterNo.toString()), + profileFullname: + node.profileFullname == null + ? "" + : Extension.ToThaiNumber(node.profileFullname.toString()), + posExecutive: + node.posExecutive == null + ? "" + : Extension.ToThaiNumber(node.posExecutive.toString()), + positionName: + node.positionName == null + ? "" + : Extension.ToThaiNumber(node.positionName.toString()), + posType: node.posType == null ? "" : Extension.ToThaiNumber(node.posType.toString()), + posLevel: + node.posLevel == null ? "" : Extension.ToThaiNumber(node.posLevel.toString()), + profilePosMasterNo: Extension.ToThaiNumber(node.profilePosMasterNo.toString()), + profilePosExecutive: + node.profilePosExecutive == null + ? "" + : Extension.ToThaiNumber(node.profilePosExecutive.toString()), + profilePositionName: + node.profilePositionName == null + ? "" + : Extension.ToThaiNumber(node.profilePositionName.toString()), + profilePosType: + node.profilePosType == null + ? "" + : Extension.ToThaiNumber(node.profilePosType.toString()), + profilePosLevel: + node.profilePosLevel == null + ? "" + : Extension.ToThaiNumber(node.profilePosLevel.toString()), + education: + node.education == null ? "" : Extension.ToThaiNumber(node.education.toString()), + salary: node.salary ? Extension.ToThaiNumber(node.salary.toLocaleString()) : "", + reason: node.reason == null ? "" : Extension.ToThaiNumber(node.reason.toString()), + }; + data.push(_head); + } else { + if ( + node.orgTreeShortName != _node.orgTreeShortName || + node.orgTreeName != _node.orgTreeName || + node.profileOrgShortName != _node.profileOrgShortName || + node.profileOrgName != _node.profileOrgName + ) { + const head = { + posMasterNo: + node.orgTreeShortName == _node.orgTreeShortName ? "" : node.orgTreeShortName, + profileFullname: + node.profileOrgName == _node.profileOrgName ? "" : node.profileOrgName, + posExecutive: node.orgTreeName == _node.orgTreeName ? "" : node.orgTreeName, + positionName: "", + posType: "", + posLevel: "", + profilePosMasterNo: + node.profileOrgShortName == _node.profileOrgShortName + ? "" + : node.profileOrgShortName, + profilePosExecutive: "", + profilePositionName: "", + profilePosType: "", + profilePosLevel: "", + education: "", + salary: "", + reason: "", + }; + data.push(head); + _node == null; + } + const head = { + no: Extension.ToThaiNumber(no.toString()), + posMasterNo: + node.posMasterNo == null ? "" : Extension.ToThaiNumber(node.posMasterNo.toString()), + profileFullname: + node.profileFullname == null + ? "" + : Extension.ToThaiNumber(node.profileFullname.toString()), + posExecutive: + node.posExecutive == null + ? "" + : Extension.ToThaiNumber(node.posExecutive.toString()), + positionName: + node.positionName == null + ? "" + : Extension.ToThaiNumber(node.positionName.toString()), + posType: node.posType == null ? "" : Extension.ToThaiNumber(node.posType.toString()), + posLevel: + node.posLevel == null ? "" : Extension.ToThaiNumber(node.posLevel.toString()), + profilePosMasterNo: Extension.ToThaiNumber(node.profilePosMasterNo.toString()), + profilePosExecutive: + node.profilePosExecutive == null + ? "" + : Extension.ToThaiNumber(node.profilePosExecutive.toString()), + profilePositionName: + node.profilePositionName == null + ? "" + : Extension.ToThaiNumber(node.profilePositionName.toString()), + profilePosType: + node.profilePosType == null + ? "" + : Extension.ToThaiNumber(node.profilePosType.toString()), + profilePosLevel: + node.profilePosLevel == null + ? "" + : Extension.ToThaiNumber(node.profilePosLevel.toString()), + education: + node.education == null ? "" : Extension.ToThaiNumber(node.education.toString()), + salary: node.salary ? Extension.ToThaiNumber(node.salary.toLocaleString()) : "", + reason: node.reason == null ? "" : Extension.ToThaiNumber(node.reason.toString()), + }; + data.push(head); + } + no += 1; + _node = node; + } + } + _node = null; + + for (let orgChild1 of orgChild1Data.filter( + (orgChild1) => orgChild1.orgRootId === orgRoot.id, + )) { + const posMastersFiltered1 = orgChild1.posMasters.sort( + (a, b) => a.posMasterOrder - b.posMasterOrder, + ); + for (let posMaster of posMastersFiltered1) { + if (posMaster.orgChild2Id == null) { + const positionName = [...new Set(posMaster.positions.map((x) => x.positionName))]; + const posType = [ + ...new Set( + posMaster.positions + .filter((x: any) => x.posType != null) + .map((x) => x.posType.posTypeName), + ), + ]; + const posLevel = [ + ...new Set( + posMaster.positions + .filter((x: any) => x.posLevel != null) + .map((x) => x.posLevel.posLevelName), + ), + ]; + const posExecutive = [ + ...new Set( + posMaster.positions + .filter((x: any) => x.posExecutive != null) + .map((x) => x.posExecutive.posExecutiveName), + ), + ]; + let positionMasterProfileOld: any = null; + if (posMaster.next_holder != null && posMaster.next_holder.current_holders) { + positionMasterProfileOld = posMaster.next_holder.current_holders.find( + (x) => x.orgRevisionId == orgRevisionActive.id, + ); + } + + let positionMasterOld: any = null; + let profilePositionName: any = []; + let profilePosType: any = []; + let profilePosLevel: any = []; + let profilePosExecutive: any = []; + if ( + posMaster.ancestorDNA != null && + posMaster.ancestorDNA != "" && + orgRevisionActive && + orgRevisionActive.posMasters + ) { + positionMasterOld = orgRevisionActive.posMasters.find( + (x: any) => + x.orgRevisionId == orgRevisionActive.id && x.ancestorDNA == posMaster.ancestorDNA, + ); + if (positionMasterOld && positionMasterOld.positions) { profilePositionName = [ ...new Set(positionMasterOld.positions.map((x: any) => x.positionName)), ]; @@ -3824,6 +4955,419 @@ export class ReportController extends Controller { ), ]; } + } + let education: any = ""; + if ( + posMaster.next_holder != null && + posMaster.next_holder.profileEducations != null && + posMaster.next_holder.profileEducations.length > 0 + ) { + let _education: any = posMaster.next_holder.profileEducations.sort( + (a, b) => + (b.finishDate == null ? 0 : b.finishDate.getTime()) - + (a.finishDate == null ? 0 : a.finishDate.getTime()), + ); + if (_education.length > 0) { + education = _education[0]; + } + } else { + if ( + posMaster.current_holder != null && + posMaster.current_holder.profileEducations != null && + posMaster.current_holder.profileEducations.length > 0 + ) { + let _education: any = posMaster.current_holder.profileEducations.sort( + (a, b) => + (b.finishDate == null ? 0 : b.finishDate.getTime()) - + (a.finishDate == null ? 0 : a.finishDate.getTime()), + ); + if (_education.length > 0) { + education = _education[0]; + } + } + } + let salary: any = ""; + if ( + posMaster.next_holder != null && + posMaster.next_holder.profileSalary != null && + posMaster.next_holder.profileSalary.length > 0 + ) { + let _salary: any = posMaster.next_holder.profileSalary.sort( + (a, b) => + (b.commandDateAffect == null ? 0 : b.commandDateAffect.getTime()) - + (a.commandDateAffect == null ? 0 : a.commandDateAffect.getTime()), + ); + if (_salary.length > 0) { + salary = _salary[0]; + } + } else { + if ( + posMaster.current_holder != null && + posMaster.current_holder.profileSalary != null && + posMaster.current_holder.profileSalary.length > 0 + ) { + let _salary: any = posMaster.current_holder.profileSalary.sort( + (a, b) => + (b.commandDateAffect == null ? 0 : b.commandDateAffect.getTime()) - + (a.commandDateAffect == null ? 0 : a.commandDateAffect.getTime()), + ); + if (_salary.length > 0) { + salary = _salary[0]; + } + } + } + + let node = { + posMasterOrder: posMaster.posMasterOrder, // + isSit: posMaster.isSit, // + orgTreeName: orgChild1.orgChild1Name, + orgTreeShortName: orgChild1.orgChild1ShortName, + posMasterNo: posMaster.posMasterNo, + positionName: + posMaster.next_holder == null + ? positionName.join(" หรือ ") + : posMaster.isSit == false + ? posMaster.positions.find((x: any) => x.positionIsSelected == true) + ?.positionName + : posMaster.next_holder.position, + posType: + posMaster.next_holder == null + ? posType.join(" หรือ ") + : posMaster.isSit == false + ? posMaster.positions.find((x: any) => x.positionIsSelected == true)?.posType + ?.posTypeName + : posMaster.next_holder.posType == null + ? "-" + : posMaster.next_holder.posType.posTypeName, + posLevel: + posMaster.next_holder == null + ? posLevel.join(" หรือ ") + : posMaster.isSit == false + ? posMaster.positions.find((x: any) => x.positionIsSelected == true)?.posLevel + ?.posLevelName + : posMaster.next_holder.posLevel == null + ? "-" + : posMaster.next_holder.posLevel.posLevelName, + posExecutive: + posMaster.next_holder == null + ? posExecutive.join(" หรือ ") + : posMaster.isSit == false + ? posMaster.positions.find((x: any) => x.positionIsSelected == true) + ?.posExecutive?.posExecutiveName + : positionMasterProfileOld == null + ? "-" + : positionMasterProfileOld.positions.find( + (x: any) => x.positionIsSelected == true, + )?.posExecutive?.posExecutiveName, + + profileOrgName: + posMaster.next_holder == null + ? orgChild1.orgChild1Name + : positionMasterProfileOld == null + ? "-" + : positionMasterProfileOld.orgChild4 != null + ? positionMasterProfileOld.orgChild4.orgChild4Name + : positionMasterProfileOld.orgChild3 != null + ? positionMasterProfileOld.orgChild3.orgChild3Name + : positionMasterProfileOld.orgChild2 != null + ? positionMasterProfileOld.orgChild2.orgChild2Name + : positionMasterProfileOld.orgChild1 != null + ? positionMasterProfileOld.orgChild1.orgChild1Name + : positionMasterProfileOld.orgRoot != null + ? positionMasterProfileOld.orgRoot.orgRootName + : "-", + profileOrgShortName: + posMaster.next_holder == null + ? orgChild1.orgChild1ShortName + : positionMasterProfileOld == null + ? "-" + : positionMasterProfileOld.orgChild4 != null + ? positionMasterProfileOld.orgChild4.orgChild4ShortName + : positionMasterProfileOld.orgChild3 != null + ? positionMasterProfileOld.orgChild3.orgChild3ShortName + : positionMasterProfileOld.orgChild2 != null + ? positionMasterProfileOld.orgChild2.orgChild2ShortName + : positionMasterProfileOld.orgChild1 != null + ? positionMasterProfileOld.orgChild1.orgChild1ShortName + : positionMasterProfileOld.orgRoot != null + ? positionMasterProfileOld.orgRoot.orgRootShortName + : "-", + profileFullname: + posMaster.next_holder == null + ? posMaster.current_holder == null + ? "- ว่าง -" + : `${posMaster.current_holder.prefix}${posMaster.current_holder.firstName} ${posMaster.current_holder.lastName}` + : `${posMaster.next_holder.prefix}${posMaster.next_holder.firstName} ${posMaster.next_holder.lastName}`, + profilePosMasterNo: + posMaster.next_holder == null + ? positionMasterOld == null + ? "-" + : positionMasterOld.posMasterNo + : positionMasterProfileOld == null + ? "-" + : positionMasterProfileOld.posMasterNo, + profilePositionName: + posMaster.next_holder == null + ? positionMasterOld == null + ? positionName.join(" หรือ ") + : profilePositionName.join(" หรือ ") + : posMaster.next_holder.position, + profilePosType: + posMaster.next_holder == null + ? positionMasterOld == null + ? posType.join(" หรือ ") + : profilePosType.join(" หรือ ") + : posMaster.next_holder.posType == null + ? "-" + : posMaster.next_holder.posType.posTypeName, + profilePosLevel: + posMaster.next_holder == null + ? positionMasterOld == null + ? posLevel.join(" หรือ ") + : profilePosLevel.join(" หรือ ") + : posMaster.next_holder.posLevel == null + ? "-" + : posMaster.next_holder.posLevel.posLevelName, + profilePosExecutive: + posMaster.next_holder == null + ? positionMasterOld == null + ? posExecutive.join(" หรือ ") + : profilePosExecutive.join(" หรือ ") + : positionMasterProfileOld == null + ? "-" + : positionMasterProfileOld.positions.find( + (x: any) => x.positionIsSelected == true, + )?.posExecutive?.posExecutiveName, + education: education == "" ? "" : education.degree, + salary: salary == "" ? "" : salary.amount, + reason: posMaster.reason, + }; + if (_node == null) { + const head = { + posMasterNo: Extension.ToThaiNumber(node.orgTreeShortName.toString()), + profileFullname: Extension.ToThaiNumber(node.profileOrgName.toString()), + posExecutive: Extension.ToThaiNumber(node.orgTreeName.toString()), + positionName: "", + posType: "", + posLevel: "", + profilePosMasterNo: Extension.ToThaiNumber(node.profileOrgShortName.toString()), + profilePosExecutive: "", + profilePositionName: "", + profilePosType: "", + profilePosLevel: "", + education: "", + salary: "", + reason: "", + }; + data.push(head); + const _head = { + no: Extension.ToThaiNumber(no.toString()), + posMasterNo: + node.posMasterNo == null + ? "" + : Extension.ToThaiNumber(node.posMasterNo.toString()), + profileFullname: + node.profileFullname == null + ? "" + : Extension.ToThaiNumber(node.profileFullname.toString()), + posExecutive: + node.posExecutive == null + ? "" + : Extension.ToThaiNumber(node.posExecutive.toString()), + positionName: + node.positionName == null + ? "" + : Extension.ToThaiNumber(node.positionName.toString()), + posType: + node.posType == null ? "" : Extension.ToThaiNumber(node.posType.toString()), + posLevel: + node.posLevel == null ? "" : Extension.ToThaiNumber(node.posLevel.toString()), + profilePosMasterNo: Extension.ToThaiNumber(node.profilePosMasterNo.toString()), + profilePosExecutive: + node.profilePosExecutive == null + ? "" + : Extension.ToThaiNumber(node.profilePosExecutive.toString()), + profilePositionName: + node.profilePositionName == null + ? "" + : Extension.ToThaiNumber(node.profilePositionName.toString()), + profilePosType: + node.profilePosType == null + ? "" + : Extension.ToThaiNumber(node.profilePosType.toString()), + profilePosLevel: + node.profilePosLevel == null + ? "" + : Extension.ToThaiNumber(node.profilePosLevel.toString()), + education: + node.education == null ? "" : Extension.ToThaiNumber(node.education.toString()), + salary: node.salary ? Extension.ToThaiNumber(node.salary.toLocaleString()) : "", + reason: node.reason == null ? "" : Extension.ToThaiNumber(node.reason.toString()), + }; + data.push(_head); + } else { + if ( + node.orgTreeShortName != _node.orgTreeShortName || + node.orgTreeName != _node.orgTreeName || + node.profileOrgShortName != _node.profileOrgShortName || + node.profileOrgName != _node.profileOrgName + ) { + const head = { + posMasterNo: + node.orgTreeShortName == _node.orgTreeShortName ? "" : node.orgTreeShortName, + profileFullname: + node.profileOrgName == _node.profileOrgName ? "" : node.profileOrgName, + posExecutive: node.orgTreeName == _node.orgTreeName ? "" : node.orgTreeName, + positionName: "", + posType: "", + posLevel: "", + profilePosMasterNo: + node.profileOrgShortName == _node.profileOrgShortName + ? "" + : node.profileOrgShortName, + profilePosExecutive: "", + profilePositionName: "", + profilePosType: "", + profilePosLevel: "", + education: "", + salary: "", + reason: "", + }; + data.push(head); + _node == null; + } + const head = { + no: Extension.ToThaiNumber(no.toString()), + posMasterNo: + node.posMasterNo == null + ? "" + : Extension.ToThaiNumber(node.posMasterNo.toString()), + profileFullname: + node.profileFullname == null + ? "" + : Extension.ToThaiNumber(node.profileFullname.toString()), + posExecutive: + node.posExecutive == null + ? "" + : Extension.ToThaiNumber(node.posExecutive.toString()), + positionName: + node.positionName == null + ? "" + : Extension.ToThaiNumber(node.positionName.toString()), + posType: + node.posType == null ? "" : Extension.ToThaiNumber(node.posType.toString()), + posLevel: + node.posLevel == null ? "" : Extension.ToThaiNumber(node.posLevel.toString()), + profilePosMasterNo: Extension.ToThaiNumber(node.profilePosMasterNo.toString()), + profilePosExecutive: + node.profilePosExecutive == null + ? "" + : Extension.ToThaiNumber(node.profilePosExecutive.toString()), + profilePositionName: + node.profilePositionName == null + ? "" + : Extension.ToThaiNumber(node.profilePositionName.toString()), + profilePosType: + node.profilePosType == null + ? "" + : Extension.ToThaiNumber(node.profilePosType.toString()), + profilePosLevel: + node.profilePosLevel == null + ? "" + : Extension.ToThaiNumber(node.profilePosLevel.toString()), + education: + node.education == null ? "" : Extension.ToThaiNumber(node.education.toString()), + salary: node.salary ? Extension.ToThaiNumber(node.salary.toLocaleString()) : "", + reason: node.reason == null ? "" : Extension.ToThaiNumber(node.reason.toString()), + }; + data.push(head); + } + no += 1; + _node = node; + } + } + _node = null; + + for (let orgChild2 of orgChild2Data.filter( + (orgChild2) => orgChild2.orgChild1Id === orgChild1.id, + )) { + const posMastersFiltered2 = orgChild2.posMasters.sort( + (a, b) => a.posMasterOrder - b.posMasterOrder, + ); + for (let posMaster of posMastersFiltered2) { + if (posMaster.orgChild3Id == null) { + const positionName = [...new Set(posMaster.positions.map((x) => x.positionName))]; + const posType = [ + ...new Set( + posMaster.positions + .filter((x: any) => x.posType != null) + .map((x) => x.posType.posTypeName), + ), + ]; + const posLevel = [ + ...new Set( + posMaster.positions + .filter((x: any) => x.posLevel != null) + .map((x) => x.posLevel.posLevelName), + ), + ]; + const posExecutive = [ + ...new Set( + posMaster.positions + .filter((x: any) => x.posExecutive != null) + .map((x) => x.posExecutive.posExecutiveName), + ), + ]; + let positionMasterProfileOld: any = null; + if (posMaster.next_holder != null && posMaster.next_holder.current_holders) { + positionMasterProfileOld = posMaster.next_holder.current_holders.find( + (x) => x.orgRevisionId == orgRevisionActive.id, + ); + } + + let positionMasterOld: any = null; + let profilePositionName: any = []; + let profilePosType: any = []; + let profilePosLevel: any = []; + let profilePosExecutive: any = []; + if ( + posMaster.ancestorDNA != null && + posMaster.ancestorDNA != "" && + orgRevisionActive && + orgRevisionActive.posMasters + ) { + positionMasterOld = orgRevisionActive.posMasters.find( + (x: any) => + x.orgRevisionId == orgRevisionActive.id && + x.ancestorDNA == posMaster.ancestorDNA, + ); + if (positionMasterOld && positionMasterOld.positions) { + profilePositionName = [ + ...new Set(positionMasterOld.positions.map((x: any) => x.positionName)), + ]; + profilePosType = [ + ...new Set( + positionMasterOld.positions + .filter((x: any) => x.posType != null) + .map((x: any) => x.posType.posTypeName), + ), + ]; + profilePosLevel = [ + ...new Set( + positionMasterOld.positions + .filter((x: any) => x.posLevel != null) + .map((x: any) => x.posLevel.posLevelName), + ), + ]; + profilePosExecutive = [ + ...new Set( + positionMasterOld.positions + .filter((x: any) => x.posExecutive != null) + .map((x: any) => x.posExecutive.posExecutiveName), + ), + ]; + } + } let education: any = ""; if ( posMaster.next_holder != null && @@ -3838,8 +5382,7 @@ export class ReportController extends Controller { if (_education.length > 0) { education = _education[0]; } - } - else { + } else { if ( posMaster.current_holder != null && posMaster.current_holder.profileEducations != null && @@ -3869,8 +5412,7 @@ export class ReportController extends Controller { if (_salary.length > 0) { salary = _salary[0]; } - } - else { + } else { if ( posMaster.current_holder != null && posMaster.current_holder.profileSalary != null && @@ -3886,11 +5428,12 @@ export class ReportController extends Controller { } } } + let node = { posMasterOrder: posMaster.posMasterOrder, // isSit: posMaster.isSit, // - orgTreeName: orgRoot.orgRootName, - orgTreeShortName: orgRoot.orgRootShortName, + orgTreeName: orgChild2.orgChild2Name, + orgTreeShortName: orgChild2.orgChild2ShortName, posMasterNo: posMaster.posMasterNo, positionName: posMaster.next_holder == null @@ -3931,7 +5474,7 @@ export class ReportController extends Controller { profileOrgName: posMaster.next_holder == null - ? orgRoot.orgRootName + ? orgChild2.orgChild2Name : positionMasterProfileOld == null ? "-" : positionMasterProfileOld.orgChild4 != null @@ -3947,7 +5490,7 @@ export class ReportController extends Controller { : "-", profileOrgShortName: posMaster.next_holder == null - ? orgRoot.orgRootShortName + ? orgChild2.orgChild2ShortName : positionMasterProfileOld == null ? "-" : positionMasterProfileOld.orgChild4 != null @@ -3963,7 +5506,7 @@ export class ReportController extends Controller { : "-", profileFullname: posMaster.next_holder == null - ? posMaster.current_holder == null + ? posMaster.current_holder == null ? "- ว่าง -" : `${posMaster.current_holder.prefix}${posMaster.current_holder.firstName} ${posMaster.current_holder.lastName}` : `${posMaster.next_holder.prefix}${posMaster.next_holder.firstName} ${posMaster.next_holder.lastName}`, @@ -4154,18 +5697,18 @@ export class ReportController extends Controller { no += 1; _node = node; } - }), - ); - _node = null; + } + _node = null; - for (let orgChild1 of orgChild1Data.filter( - (orgChild1) => orgChild1.orgRootId === orgRoot.id, - )) { - await Promise.all( - orgChild1.posMasters - .sort((a, b) => a.posMasterOrder - b.posMasterOrder) - .map(async (posMaster) => { - if (posMaster.orgChild2Id == null) { + for (let orgChild3 of orgChild3Data.filter( + (orgChild3) => orgChild3.orgChild2Id === orgChild2.id, + )) { + const posMastersFiltered3 = orgChild3.posMasters.sort( + (a, b) => a.posMasterOrder - b.posMasterOrder, + ); + for (let posMaster of posMastersFiltered3) { + if (posMaster.orgChild4Id == null) { + console.log(posMaster); const positionName = [...new Set(posMaster.positions.map((x) => x.positionName))]; const posType = [ ...new Set( @@ -4189,7 +5732,7 @@ export class ReportController extends Controller { ), ]; let positionMasterProfileOld: any = null; - if (posMaster.next_holder != null) { + if (posMaster.next_holder != null && posMaster.next_holder.current_holders) { positionMasterProfileOld = posMaster.next_holder.current_holders.find( (x) => x.orgRevisionId == orgRevisionActive.id, ); @@ -4200,36 +5743,43 @@ export class ReportController extends Controller { let profilePosType: any = []; let profilePosLevel: any = []; let profilePosExecutive: any = []; - if (posMaster.ancestorDNA != null && posMaster.ancestorDNA != "") { + if ( + posMaster.ancestorDNA != null && + posMaster.ancestorDNA != "" && + orgRevisionActive && + orgRevisionActive.posMasters + ) { positionMasterOld = orgRevisionActive.posMasters.find( (x: any) => x.orgRevisionId == orgRevisionActive.id && x.ancestorDNA == posMaster.ancestorDNA, ); - profilePositionName = [ - ...new Set(positionMasterOld.positions.map((x: any) => x.positionName)), - ]; - profilePosType = [ - ...new Set( - positionMasterOld.positions - .filter((x: any) => x.posType != null) - .map((x: any) => x.posType.posTypeName), - ), - ]; - profilePosLevel = [ - ...new Set( - positionMasterOld.positions - .filter((x: any) => x.posLevel != null) - .map((x: any) => x.posLevel.posLevelName), - ), - ]; - profilePosExecutive = [ - ...new Set( - positionMasterOld.positions - .filter((x: any) => x.posExecutive != null) - .map((x: any) => x.posExecutive.posExecutiveName), - ), - ]; + if (positionMasterOld && positionMasterOld.positions) { + profilePositionName = [ + ...new Set(positionMasterOld.positions.map((x: any) => x.positionName)), + ]; + profilePosType = [ + ...new Set( + positionMasterOld.positions + .filter((x: any) => x.posType != null) + .map((x: any) => x.posType.posTypeName), + ), + ]; + profilePosLevel = [ + ...new Set( + positionMasterOld.positions + .filter((x: any) => x.posLevel != null) + .map((x: any) => x.posLevel.posLevelName), + ), + ]; + profilePosExecutive = [ + ...new Set( + positionMasterOld.positions + .filter((x: any) => x.posExecutive != null) + .map((x: any) => x.posExecutive.posExecutiveName), + ), + ]; + } } let education: any = ""; if ( @@ -4245,8 +5795,7 @@ export class ReportController extends Controller { if (_education.length > 0) { education = _education[0]; } - } - else { + } else { if ( posMaster.current_holder != null && posMaster.current_holder.profileEducations != null && @@ -4276,8 +5825,7 @@ export class ReportController extends Controller { if (_salary.length > 0) { salary = _salary[0]; } - } - else { + } else { if ( posMaster.current_holder != null && posMaster.current_holder.profileSalary != null && @@ -4297,8 +5845,8 @@ export class ReportController extends Controller { let node = { posMasterOrder: posMaster.posMasterOrder, // isSit: posMaster.isSit, // - orgTreeName: orgChild1.orgChild1Name, - orgTreeShortName: orgChild1.orgChild1ShortName, + orgTreeName: orgChild3.orgChild3Name, + orgTreeShortName: orgChild3.orgChild3ShortName, posMasterNo: posMaster.posMasterNo, positionName: posMaster.next_holder == null @@ -4339,7 +5887,7 @@ export class ReportController extends Controller { profileOrgName: posMaster.next_holder == null - ? orgChild1.orgChild1Name + ? orgChild3.orgChild3Name : positionMasterProfileOld == null ? "-" : positionMasterProfileOld.orgChild4 != null @@ -4355,7 +5903,7 @@ export class ReportController extends Controller { : "-", profileOrgShortName: posMaster.next_holder == null - ? orgChild1.orgChild1ShortName + ? orgChild3.orgChild3ShortName : positionMasterProfileOld == null ? "-" : positionMasterProfileOld.orgChild4 != null @@ -4371,7 +5919,7 @@ export class ReportController extends Controller { : "-", profileFullname: posMaster.next_holder == null - ? posMaster.current_holder == null + ? posMaster.current_holder == null ? "- ว่าง -" : `${posMaster.current_holder.prefix}${posMaster.current_holder.firstName} ${posMaster.current_holder.lastName}` : `${posMaster.next_holder.prefix}${posMaster.next_holder.firstName} ${posMaster.next_holder.lastName}`, @@ -4570,58 +6118,63 @@ export class ReportController extends Controller { no += 1; _node = node; } - }), - ); - _node = null; + } + console.log("Processing orgChild4"); + _node = null; - for (let orgChild2 of orgChild2Data.filter( - (orgChild2) => orgChild2.orgChild1Id === orgChild1.id, - )) { - await Promise.all( - orgChild2.posMasters - .sort((a, b) => a.posMasterOrder - b.posMasterOrder) - .map(async (posMaster) => { - if (posMaster.orgChild3Id == null) { - const positionName = [...new Set(posMaster.positions.map((x) => x.positionName))]; - const posType = [ - ...new Set( - posMaster.positions - .filter((x: any) => x.posType != null) - .map((x) => x.posType.posTypeName), - ), - ]; - const posLevel = [ - ...new Set( - posMaster.positions - .filter((x: any) => x.posLevel != null) - .map((x) => x.posLevel.posLevelName), - ), - ]; - const posExecutive = [ - ...new Set( - posMaster.positions - .filter((x: any) => x.posExecutive != null) - .map((x) => x.posExecutive.posExecutiveName), - ), - ]; - let positionMasterProfileOld: any = null; - if (posMaster.next_holder != null) { - positionMasterProfileOld = posMaster.next_holder.current_holders.find( - (x) => x.orgRevisionId == orgRevisionActive.id, - ); - } + for (let orgChild4 of orgChild4Data.filter( + (orgChild4) => orgChild4.orgChild3Id === orgChild3.id, + )) { + const posMastersFiltered4 = orgChild4.posMasters.sort( + (a, b) => a.posMasterOrder - b.posMasterOrder, + ); + for (let posMaster of posMastersFiltered4) { + const positionName = [...new Set(posMaster.positions.map((x) => x.positionName))]; + const posType = [ + ...new Set( + posMaster.positions + .filter((x: any) => x.posType != null) + .map((x) => x.posType.posTypeName), + ), + ]; + const posLevel = [ + ...new Set( + posMaster.positions + .filter((x: any) => x.posLevel != null) + .map((x) => x.posLevel.posLevelName), + ), + ]; + const posExecutive = [ + ...new Set( + posMaster.positions + .filter((x: any) => x.posExecutive != null) + .map((x) => x.posExecutive.posExecutiveName), + ), + ]; + let positionMasterProfileOld: any = null; + if (posMaster.next_holder != null && posMaster.next_holder.current_holders) { + positionMasterProfileOld = posMaster.next_holder.current_holders.find( + (x) => x.orgRevisionId == orgRevisionActive.id, + ); + } - let positionMasterOld: any = null; - let profilePositionName: any = []; - let profilePosType: any = []; - let profilePosLevel: any = []; - let profilePosExecutive: any = []; - if (posMaster.ancestorDNA != null && posMaster.ancestorDNA != "") { - positionMasterOld = orgRevisionActive.posMasters.find( - (x: any) => - x.orgRevisionId == orgRevisionActive.id && - x.ancestorDNA == posMaster.ancestorDNA, - ); + let positionMasterOld: any = null; + let profilePositionName: any = []; + let profilePosType: any = []; + let profilePosLevel: any = []; + let profilePosExecutive: any = []; + if ( + posMaster.ancestorDNA != null && + posMaster.ancestorDNA != "" && + orgRevisionActive && + orgRevisionActive.posMasters + ) { + positionMasterOld = orgRevisionActive.posMasters.find( + (x: any) => + x.orgRevisionId == orgRevisionActive.id && + x.ancestorDNA == posMaster.ancestorDNA, + ); + if (positionMasterOld && positionMasterOld.positions) { profilePositionName = [ ...new Set(positionMasterOld.positions.map((x: any) => x.positionName)), ]; @@ -4647,13 +6200,28 @@ export class ReportController extends Controller { ), ]; } - let education: any = ""; + } + let education: any = ""; + if ( + posMaster.next_holder != null && + posMaster.next_holder.profileEducations != null && + posMaster.next_holder.profileEducations.length > 0 + ) { + let _education: any = posMaster.next_holder.profileEducations.sort( + (a, b) => + (b.finishDate == null ? 0 : b.finishDate.getTime()) - + (a.finishDate == null ? 0 : a.finishDate.getTime()), + ); + if (_education.length > 0) { + education = _education[0]; + } + } else { if ( - posMaster.next_holder != null && - posMaster.next_holder.profileEducations != null && - posMaster.next_holder.profileEducations.length > 0 + posMaster.current_holder != null && + posMaster.current_holder.profileEducations != null && + posMaster.current_holder.profileEducations.length > 0 ) { - let _education: any = posMaster.next_holder.profileEducations.sort( + let _education: any = posMaster.current_holder.profileEducations.sort( (a, b) => (b.finishDate == null ? 0 : b.finishDate.getTime()) - (a.finishDate == null ? 0 : a.finishDate.getTime()), @@ -4662,29 +6230,28 @@ export class ReportController extends Controller { education = _education[0]; } } - else { - if ( - posMaster.current_holder != null && - posMaster.current_holder.profileEducations != null && - posMaster.current_holder.profileEducations.length > 0 - ) { - let _education: any = posMaster.current_holder.profileEducations.sort( - (a, b) => - (b.finishDate == null ? 0 : b.finishDate.getTime()) - - (a.finishDate == null ? 0 : a.finishDate.getTime()), - ); - if (_education.length > 0) { - education = _education[0]; - } - } + } + let salary: any = ""; + if ( + posMaster.next_holder != null && + posMaster.next_holder.profileSalary != null && + posMaster.next_holder.profileSalary.length > 0 + ) { + let _salary: any = posMaster.next_holder.profileSalary.sort( + (a, b) => + (b.commandDateAffect == null ? 0 : b.commandDateAffect.getTime()) - + (a.commandDateAffect == null ? 0 : a.commandDateAffect.getTime()), + ); + if (_salary.length > 0) { + salary = _salary[0]; } - let salary: any = ""; + } else { if ( - posMaster.next_holder != null && - posMaster.next_holder.profileSalary != null && - posMaster.next_holder.profileSalary.length > 0 + posMaster.current_holder != null && + posMaster.current_holder.profileSalary != null && + posMaster.current_holder.profileSalary.length > 0 ) { - let _salary: any = posMaster.next_holder.profileSalary.sort( + let _salary: any = posMaster.current_holder.profileSalary.sort( (a, b) => (b.commandDateAffect == null ? 0 : b.commandDateAffect.getTime()) - (a.commandDateAffect == null ? 0 : a.commandDateAffect.getTime()), @@ -4693,159 +6260,221 @@ export class ReportController extends Controller { salary = _salary[0]; } } - else { - if ( - posMaster.current_holder != null && - posMaster.current_holder.profileSalary != null && - posMaster.current_holder.profileSalary.length > 0 - ) { - let _salary: any = posMaster.current_holder.profileSalary.sort( - (a, b) => - (b.commandDateAffect == null ? 0 : b.commandDateAffect.getTime()) - - (a.commandDateAffect == null ? 0 : a.commandDateAffect.getTime()), - ); - if (_salary.length > 0) { - salary = _salary[0]; - } - } - } + } - let node = { - posMasterOrder: posMaster.posMasterOrder, // - isSit: posMaster.isSit, // - orgTreeName: orgChild2.orgChild2Name, - orgTreeShortName: orgChild2.orgChild2ShortName, - posMasterNo: posMaster.posMasterNo, - positionName: - posMaster.next_holder == null - ? positionName.join(" หรือ ") - : posMaster.isSit == false - ? posMaster.positions.find((x: any) => x.positionIsSelected == true) - ?.positionName - : posMaster.next_holder.position, - posType: - posMaster.next_holder == null - ? posType.join(" หรือ ") - : posMaster.isSit == false - ? posMaster.positions.find((x: any) => x.positionIsSelected == true) - ?.posType?.posTypeName - : posMaster.next_holder.posType == null - ? "-" - : posMaster.next_holder.posType.posTypeName, - posLevel: - posMaster.next_holder == null - ? posLevel.join(" หรือ ") - : posMaster.isSit == false - ? posMaster.positions.find((x: any) => x.positionIsSelected == true) - ?.posLevel?.posLevelName - : posMaster.next_holder.posLevel == null - ? "-" - : posMaster.next_holder.posLevel.posLevelName, - posExecutive: - posMaster.next_holder == null - ? posExecutive.join(" หรือ ") - : posMaster.isSit == false - ? posMaster.positions.find((x: any) => x.positionIsSelected == true) - ?.posExecutive?.posExecutiveName - : positionMasterProfileOld == null - ? "-" - : positionMasterProfileOld.positions.find( - (x: any) => x.positionIsSelected == true, - )?.posExecutive?.posExecutiveName, - - profileOrgName: - posMaster.next_holder == null - ? orgChild2.orgChild2Name - : positionMasterProfileOld == null - ? "-" - : positionMasterProfileOld.orgChild4 != null - ? positionMasterProfileOld.orgChild4.orgChild4Name - : positionMasterProfileOld.orgChild3 != null - ? positionMasterProfileOld.orgChild3.orgChild3Name - : positionMasterProfileOld.orgChild2 != null - ? positionMasterProfileOld.orgChild2.orgChild2Name - : positionMasterProfileOld.orgChild1 != null - ? positionMasterProfileOld.orgChild1.orgChild1Name - : positionMasterProfileOld.orgRoot != null - ? positionMasterProfileOld.orgRoot.orgRootName - : "-", - profileOrgShortName: - posMaster.next_holder == null - ? orgChild2.orgChild2ShortName - : positionMasterProfileOld == null - ? "-" - : positionMasterProfileOld.orgChild4 != null - ? positionMasterProfileOld.orgChild4.orgChild4ShortName - : positionMasterProfileOld.orgChild3 != null - ? positionMasterProfileOld.orgChild3.orgChild3ShortName - : positionMasterProfileOld.orgChild2 != null - ? positionMasterProfileOld.orgChild2.orgChild2ShortName - : positionMasterProfileOld.orgChild1 != null - ? positionMasterProfileOld.orgChild1.orgChild1ShortName - : positionMasterProfileOld.orgRoot != null - ? positionMasterProfileOld.orgRoot.orgRootShortName - : "-", - profileFullname: - posMaster.next_holder == null - ? posMaster.current_holder == null - ? "- ว่าง -" - : `${posMaster.current_holder.prefix}${posMaster.current_holder.firstName} ${posMaster.current_holder.lastName}` - : `${posMaster.next_holder.prefix}${posMaster.next_holder.firstName} ${posMaster.next_holder.lastName}`, - profilePosMasterNo: - posMaster.next_holder == null - ? positionMasterOld == null - ? "-" - : positionMasterOld.posMasterNo - : positionMasterProfileOld == null - ? "-" - : positionMasterProfileOld.posMasterNo, - profilePositionName: - posMaster.next_holder == null - ? positionMasterOld == null - ? positionName.join(" หรือ ") - : profilePositionName.join(" หรือ ") + let node = { + posMasterOrder: posMaster.posMasterOrder, // + isSit: posMaster.isSit, // + orgTreeName: orgChild4.orgChild4Name, + orgTreeShortName: orgChild4.orgChild4ShortName, + posMasterNo: posMaster.posMasterNo, + positionName: + posMaster.next_holder == null + ? positionName.join(" หรือ ") + : posMaster.isSit == false + ? posMaster.positions.find((x: any) => x.positionIsSelected == true) + ?.positionName : posMaster.next_holder.position, - profilePosType: - posMaster.next_holder == null - ? positionMasterOld == null - ? posType.join(" หรือ ") - : profilePosType.join(" หรือ ") + posType: + posMaster.next_holder == null + ? posType.join(" หรือ ") + : posMaster.isSit == false + ? posMaster.positions.find((x: any) => x.positionIsSelected == true) + ?.posType?.posTypeName : posMaster.next_holder.posType == null ? "-" : posMaster.next_holder.posType.posTypeName, - profilePosLevel: - posMaster.next_holder == null - ? positionMasterOld == null - ? posLevel.join(" หรือ ") - : profilePosLevel.join(" หรือ ") + posLevel: + posMaster.next_holder == null + ? posLevel.join(" หรือ ") + : posMaster.isSit == false + ? posMaster.positions.find((x: any) => x.positionIsSelected == true) + ?.posLevel?.posLevelName : posMaster.next_holder.posLevel == null ? "-" : posMaster.next_holder.posLevel.posLevelName, - profilePosExecutive: - posMaster.next_holder == null - ? positionMasterOld == null - ? posExecutive.join(" หรือ ") - : profilePosExecutive.join(" หรือ ") + posExecutive: + posMaster.next_holder == null + ? posExecutive.join(" หรือ ") + : posMaster.isSit == false + ? posMaster.positions.find((x: any) => x.positionIsSelected == true) + ?.posExecutive?.posExecutiveName : positionMasterProfileOld == null ? "-" : positionMasterProfileOld.positions.find( (x: any) => x.positionIsSelected == true, )?.posExecutive?.posExecutiveName, - education: education == "" ? "" : education.degree, - salary: salary == "" ? "" : salary.amount, - reason: posMaster.reason, + + profileOrgName: + posMaster.next_holder == null + ? orgChild4.orgChild4Name + : positionMasterProfileOld == null + ? "-" + : positionMasterProfileOld.orgChild4 != null + ? positionMasterProfileOld.orgChild4.orgChild4Name + : positionMasterProfileOld.orgChild3 != null + ? positionMasterProfileOld.orgChild3.orgChild3Name + : positionMasterProfileOld.orgChild2 != null + ? positionMasterProfileOld.orgChild2.orgChild2Name + : positionMasterProfileOld.orgChild1 != null + ? positionMasterProfileOld.orgChild1.orgChild1Name + : positionMasterProfileOld.orgRoot != null + ? positionMasterProfileOld.orgRoot.orgRootName + : "-", + profileOrgShortName: + posMaster.next_holder == null + ? orgChild4.orgChild4ShortName + : positionMasterProfileOld == null + ? "-" + : positionMasterProfileOld.orgChild4 != null + ? positionMasterProfileOld.orgChild4.orgChild4ShortName + : positionMasterProfileOld.orgChild3 != null + ? positionMasterProfileOld.orgChild3.orgChild3ShortName + : positionMasterProfileOld.orgChild2 != null + ? positionMasterProfileOld.orgChild2.orgChild2ShortName + : positionMasterProfileOld.orgChild1 != null + ? positionMasterProfileOld.orgChild1.orgChild1ShortName + : positionMasterProfileOld.orgRoot != null + ? positionMasterProfileOld.orgRoot.orgRootShortName + : "-", + profileFullname: + posMaster.next_holder == null + ? posMaster.current_holder == null + ? "- ว่าง -" + : `${posMaster.current_holder.prefix}${posMaster.current_holder.firstName} ${posMaster.current_holder.lastName}` + : `${posMaster.next_holder.prefix}${posMaster.next_holder.firstName} ${posMaster.next_holder.lastName}`, + profilePosMasterNo: + posMaster.next_holder == null + ? positionMasterOld == null + ? "-" + : positionMasterOld.posMasterNo + : positionMasterProfileOld == null + ? "-" + : positionMasterProfileOld.posMasterNo, + profilePositionName: + posMaster.next_holder == null + ? positionMasterOld == null + ? positionName.join(" หรือ ") + : profilePositionName.join(" หรือ ") + : posMaster.next_holder.position, + profilePosType: + posMaster.next_holder == null + ? positionMasterOld == null + ? posType.join(" หรือ ") + : profilePosType.join(" หรือ ") + : posMaster.next_holder.posType == null + ? "-" + : posMaster.next_holder.posType.posTypeName, + profilePosLevel: + posMaster.next_holder == null + ? positionMasterOld == null + ? posLevel.join(" หรือ ") + : profilePosLevel.join(" หรือ ") + : posMaster.next_holder.posLevel == null + ? "-" + : posMaster.next_holder.posLevel.posLevelName, + profilePosExecutive: + posMaster.next_holder == null + ? positionMasterOld == null + ? posExecutive.join(" หรือ ") + : profilePosExecutive.join(" หรือ ") + : positionMasterProfileOld == null + ? "-" + : positionMasterProfileOld.positions.find( + (x: any) => x.positionIsSelected == true, + )?.posExecutive?.posExecutiveName, + education: education == "" ? "" : education.degree, + salary: salary == "" ? "" : salary.amount, + reason: posMaster.reason, + }; + if (_node == null) { + const head = { + posMasterNo: Extension.ToThaiNumber(node.orgTreeShortName.toString()), + profileFullname: Extension.ToThaiNumber(node.profileOrgName.toString()), + posExecutive: Extension.ToThaiNumber(node.orgTreeName.toString()), + positionName: "", + posType: "", + posLevel: "", + profilePosMasterNo: Extension.ToThaiNumber(node.profileOrgShortName.toString()), + profilePosExecutive: "", + profilePositionName: "", + profilePosType: "", + profilePosLevel: "", + education: "", + salary: "", + reason: "", }; - if (_node == null) { + data.push(head); + const _head = { + no: Extension.ToThaiNumber(no.toString()), + posMasterNo: + node.posMasterNo == null + ? "" + : Extension.ToThaiNumber(node.posMasterNo.toString()), + profileFullname: + node.profileFullname == null + ? "" + : Extension.ToThaiNumber(node.profileFullname.toString()), + posExecutive: + node.posExecutive == null + ? "" + : Extension.ToThaiNumber(node.posExecutive.toString()), + positionName: + node.positionName == null + ? "" + : Extension.ToThaiNumber(node.positionName.toString()), + posType: + node.posType == null ? "" : Extension.ToThaiNumber(node.posType.toString()), + posLevel: + node.posLevel == null ? "" : Extension.ToThaiNumber(node.posLevel.toString()), + profilePosMasterNo: Extension.ToThaiNumber(node.profilePosMasterNo.toString()), + profilePosExecutive: + node.profilePosExecutive == null + ? "" + : Extension.ToThaiNumber(node.profilePosExecutive.toString()), + profilePositionName: + node.profilePositionName == null + ? "" + : Extension.ToThaiNumber(node.profilePositionName.toString()), + profilePosType: + node.profilePosType == null + ? "" + : Extension.ToThaiNumber(node.profilePosType.toString()), + profilePosLevel: + node.profilePosLevel == null + ? "" + : Extension.ToThaiNumber(node.profilePosLevel.toString()), + education: + node.education == null + ? "" + : Extension.ToThaiNumber(node.education.toString()), + salary: node.salary ? Extension.ToThaiNumber(node.salary.toLocaleString()) : "", + reason: + node.reason == null ? "" : Extension.ToThaiNumber(node.reason.toString()), + }; + data.push(_head); + } else { + if ( + node.orgTreeShortName != _node.orgTreeShortName || + node.orgTreeName != _node.orgTreeName || + node.profileOrgShortName != _node.profileOrgShortName || + node.profileOrgName != _node.profileOrgName + ) { const head = { - posMasterNo: Extension.ToThaiNumber(node.orgTreeShortName.toString()), - profileFullname: Extension.ToThaiNumber(node.profileOrgName.toString()), - posExecutive: Extension.ToThaiNumber(node.orgTreeName.toString()), + posMasterNo: + node.orgTreeShortName == _node.orgTreeShortName + ? "" + : node.orgTreeShortName, + profileFullname: + node.profileOrgName == _node.profileOrgName ? "" : node.profileOrgName, + posExecutive: node.orgTreeName == _node.orgTreeName ? "" : node.orgTreeName, positionName: "", posType: "", posLevel: "", - profilePosMasterNo: Extension.ToThaiNumber( - node.profileOrgShortName.toString(), - ), + profilePosMasterNo: + node.profileOrgShortName == _node.profileOrgShortName + ? "" + : node.profileOrgShortName, profilePosExecutive: "", profilePositionName: "", profilePosType: "", @@ -4855,1025 +6484,60 @@ export class ReportController extends Controller { reason: "", }; data.push(head); - const _head = { - no: Extension.ToThaiNumber(no.toString()), - posMasterNo: - node.posMasterNo == null - ? "" - : Extension.ToThaiNumber(node.posMasterNo.toString()), - profileFullname: - node.profileFullname == null - ? "" - : Extension.ToThaiNumber(node.profileFullname.toString()), - posExecutive: - node.posExecutive == null - ? "" - : Extension.ToThaiNumber(node.posExecutive.toString()), - positionName: - node.positionName == null - ? "" - : Extension.ToThaiNumber(node.positionName.toString()), - posType: - node.posType == null ? "" : Extension.ToThaiNumber(node.posType.toString()), - posLevel: - node.posLevel == null - ? "" - : Extension.ToThaiNumber(node.posLevel.toString()), - profilePosMasterNo: Extension.ToThaiNumber( - node.profilePosMasterNo.toString(), - ), - profilePosExecutive: - node.profilePosExecutive == null - ? "" - : Extension.ToThaiNumber(node.profilePosExecutive.toString()), - profilePositionName: - node.profilePositionName == null - ? "" - : Extension.ToThaiNumber(node.profilePositionName.toString()), - profilePosType: - node.profilePosType == null - ? "" - : Extension.ToThaiNumber(node.profilePosType.toString()), - profilePosLevel: - node.profilePosLevel == null - ? "" - : Extension.ToThaiNumber(node.profilePosLevel.toString()), - education: - node.education == null - ? "" - : Extension.ToThaiNumber(node.education.toString()), - salary: node.salary - ? Extension.ToThaiNumber(node.salary.toLocaleString()) - : "", - reason: - node.reason == null ? "" : Extension.ToThaiNumber(node.reason.toString()), - }; - data.push(_head); - } else { - if ( - node.orgTreeShortName != _node.orgTreeShortName || - node.orgTreeName != _node.orgTreeName || - node.profileOrgShortName != _node.profileOrgShortName || - node.profileOrgName != _node.profileOrgName - ) { - const head = { - posMasterNo: - node.orgTreeShortName == _node.orgTreeShortName - ? "" - : node.orgTreeShortName, - profileFullname: - node.profileOrgName == _node.profileOrgName ? "" : node.profileOrgName, - posExecutive: node.orgTreeName == _node.orgTreeName ? "" : node.orgTreeName, - positionName: "", - posType: "", - posLevel: "", - profilePosMasterNo: - node.profileOrgShortName == _node.profileOrgShortName - ? "" - : node.profileOrgShortName, - profilePosExecutive: "", - profilePositionName: "", - profilePosType: "", - profilePosLevel: "", - education: "", - salary: "", - reason: "", - }; - data.push(head); - _node == null; - } - const head = { - no: Extension.ToThaiNumber(no.toString()), - posMasterNo: - node.posMasterNo == null - ? "" - : Extension.ToThaiNumber(node.posMasterNo.toString()), - profileFullname: - node.profileFullname == null - ? "" - : Extension.ToThaiNumber(node.profileFullname.toString()), - posExecutive: - node.posExecutive == null - ? "" - : Extension.ToThaiNumber(node.posExecutive.toString()), - positionName: - node.positionName == null - ? "" - : Extension.ToThaiNumber(node.positionName.toString()), - posType: - node.posType == null ? "" : Extension.ToThaiNumber(node.posType.toString()), - posLevel: - node.posLevel == null - ? "" - : Extension.ToThaiNumber(node.posLevel.toString()), - profilePosMasterNo: Extension.ToThaiNumber( - node.profilePosMasterNo.toString(), - ), - profilePosExecutive: - node.profilePosExecutive == null - ? "" - : Extension.ToThaiNumber(node.profilePosExecutive.toString()), - profilePositionName: - node.profilePositionName == null - ? "" - : Extension.ToThaiNumber(node.profilePositionName.toString()), - profilePosType: - node.profilePosType == null - ? "" - : Extension.ToThaiNumber(node.profilePosType.toString()), - profilePosLevel: - node.profilePosLevel == null - ? "" - : Extension.ToThaiNumber(node.profilePosLevel.toString()), - education: - node.education == null - ? "" - : Extension.ToThaiNumber(node.education.toString()), - salary: node.salary - ? Extension.ToThaiNumber(node.salary.toLocaleString()) - : "", - reason: - node.reason == null ? "" : Extension.ToThaiNumber(node.reason.toString()), - }; - data.push(head); + _node == null; } - no += 1; - _node = node; + const head = { + no: Extension.ToThaiNumber(no.toString()), + posMasterNo: + node.posMasterNo == null + ? "" + : Extension.ToThaiNumber(node.posMasterNo.toString()), + profileFullname: + node.profileFullname == null + ? "" + : Extension.ToThaiNumber(node.profileFullname.toString()), + posExecutive: + node.posExecutive == null + ? "" + : Extension.ToThaiNumber(node.posExecutive.toString()), + positionName: + node.positionName == null + ? "" + : Extension.ToThaiNumber(node.positionName.toString()), + posType: + node.posType == null ? "" : Extension.ToThaiNumber(node.posType.toString()), + posLevel: + node.posLevel == null ? "" : Extension.ToThaiNumber(node.posLevel.toString()), + profilePosMasterNo: Extension.ToThaiNumber(node.profilePosMasterNo.toString()), + profilePosExecutive: + node.profilePosExecutive == null + ? "" + : Extension.ToThaiNumber(node.profilePosExecutive.toString()), + profilePositionName: + node.profilePositionName == null + ? "" + : Extension.ToThaiNumber(node.profilePositionName.toString()), + profilePosType: + node.profilePosType == null + ? "" + : Extension.ToThaiNumber(node.profilePosType.toString()), + profilePosLevel: + node.profilePosLevel == null + ? "" + : Extension.ToThaiNumber(node.profilePosLevel.toString()), + education: + node.education == null + ? "" + : Extension.ToThaiNumber(node.education.toString()), + salary: node.salary ? Extension.ToThaiNumber(node.salary.toLocaleString()) : "", + reason: + node.reason == null ? "" : Extension.ToThaiNumber(node.reason.toString()), + }; + data.push(head); } - }), - ); - _node = null; - - for (let orgChild3 of orgChild3Data.filter( - (orgChild3) => orgChild3.orgChild2Id === orgChild2.id, - )) { - await Promise.all( - orgChild3.posMasters - .sort((a, b) => a.posMasterOrder - b.posMasterOrder) - .map(async (posMaster) => { - if (posMaster.orgChild4Id == null) { - const positionName = [ - ...new Set(posMaster.positions.map((x) => x.positionName)), - ]; - const posType = [ - ...new Set( - posMaster.positions - .filter((x: any) => x.posType != null) - .map((x) => x.posType.posTypeName), - ), - ]; - const posLevel = [ - ...new Set( - posMaster.positions - .filter((x: any) => x.posLevel != null) - .map((x) => x.posLevel.posLevelName), - ), - ]; - const posExecutive = [ - ...new Set( - posMaster.positions - .filter((x: any) => x.posExecutive != null) - .map((x) => x.posExecutive.posExecutiveName), - ), - ]; - let positionMasterProfileOld: any = null; - if (posMaster.next_holder != null) { - positionMasterProfileOld = posMaster.next_holder.current_holders.find( - (x) => x.orgRevisionId == orgRevisionActive.id, - ); - } - - let positionMasterOld: any = null; - let profilePositionName: any = []; - let profilePosType: any = []; - let profilePosLevel: any = []; - let profilePosExecutive: any = []; - if (posMaster.ancestorDNA != null && posMaster.ancestorDNA != "") { - positionMasterOld = orgRevisionActive.posMasters.find( - (x: any) => - x.orgRevisionId == orgRevisionActive.id && - x.ancestorDNA == posMaster.ancestorDNA, - ); - profilePositionName = [ - ...new Set(positionMasterOld.positions.map((x: any) => x.positionName)), - ]; - profilePosType = [ - ...new Set( - positionMasterOld.positions - .filter((x: any) => x.posType != null) - .map((x: any) => x.posType.posTypeName), - ), - ]; - profilePosLevel = [ - ...new Set( - positionMasterOld.positions - .filter((x: any) => x.posLevel != null) - .map((x: any) => x.posLevel.posLevelName), - ), - ]; - profilePosExecutive = [ - ...new Set( - positionMasterOld.positions - .filter((x: any) => x.posExecutive != null) - .map((x: any) => x.posExecutive.posExecutiveName), - ), - ]; - } - let education: any = ""; - if ( - posMaster.next_holder != null && - posMaster.next_holder.profileEducations != null && - posMaster.next_holder.profileEducations.length > 0 - ) { - let _education: any = posMaster.next_holder.profileEducations.sort( - (a, b) => - (b.finishDate == null ? 0 : b.finishDate.getTime()) - - (a.finishDate == null ? 0 : a.finishDate.getTime()), - ); - if (_education.length > 0) { - education = _education[0]; - } - } - else { - if ( - posMaster.current_holder != null && - posMaster.current_holder.profileEducations != null && - posMaster.current_holder.profileEducations.length > 0 - ) { - let _education: any = posMaster.current_holder.profileEducations.sort( - (a, b) => - (b.finishDate == null ? 0 : b.finishDate.getTime()) - - (a.finishDate == null ? 0 : a.finishDate.getTime()), - ); - if (_education.length > 0) { - education = _education[0]; - } - } - } - let salary: any = ""; - if ( - posMaster.next_holder != null && - posMaster.next_holder.profileSalary != null && - posMaster.next_holder.profileSalary.length > 0 - ) { - let _salary: any = posMaster.next_holder.profileSalary.sort( - (a, b) => - (b.commandDateAffect == null ? 0 : b.commandDateAffect.getTime()) - - (a.commandDateAffect == null ? 0 : a.commandDateAffect.getTime()), - ); - if (_salary.length > 0) { - salary = _salary[0]; - } - } - else { - if ( - posMaster.current_holder != null && - posMaster.current_holder.profileSalary != null && - posMaster.current_holder.profileSalary.length > 0 - ) { - let _salary: any = posMaster.current_holder.profileSalary.sort( - (a, b) => - (b.commandDateAffect == null ? 0 : b.commandDateAffect.getTime()) - - (a.commandDateAffect == null ? 0 : a.commandDateAffect.getTime()), - ); - if (_salary.length > 0) { - salary = _salary[0]; - } - } - } - - let node = { - posMasterOrder: posMaster.posMasterOrder, // - isSit: posMaster.isSit, // - orgTreeName: orgChild3.orgChild3Name, - orgTreeShortName: orgChild3.orgChild3ShortName, - posMasterNo: posMaster.posMasterNo, - positionName: - posMaster.next_holder == null - ? positionName.join(" หรือ ") - : posMaster.isSit == false - ? posMaster.positions.find((x: any) => x.positionIsSelected == true) - ?.positionName - : posMaster.next_holder.position, - posType: - posMaster.next_holder == null - ? posType.join(" หรือ ") - : posMaster.isSit == false - ? posMaster.positions.find((x: any) => x.positionIsSelected == true) - ?.posType?.posTypeName - : posMaster.next_holder.posType == null - ? "-" - : posMaster.next_holder.posType.posTypeName, - posLevel: - posMaster.next_holder == null - ? posLevel.join(" หรือ ") - : posMaster.isSit == false - ? posMaster.positions.find((x: any) => x.positionIsSelected == true) - ?.posLevel?.posLevelName - : posMaster.next_holder.posLevel == null - ? "-" - : posMaster.next_holder.posLevel.posLevelName, - posExecutive: - posMaster.next_holder == null - ? posExecutive.join(" หรือ ") - : posMaster.isSit == false - ? posMaster.positions.find((x: any) => x.positionIsSelected == true) - ?.posExecutive?.posExecutiveName - : positionMasterProfileOld == null - ? "-" - : positionMasterProfileOld.positions.find( - (x: any) => x.positionIsSelected == true, - )?.posExecutive?.posExecutiveName, - - profileOrgName: - posMaster.next_holder == null - ? orgChild3.orgChild3Name - : positionMasterProfileOld == null - ? "-" - : positionMasterProfileOld.orgChild4 != null - ? positionMasterProfileOld.orgChild4.orgChild4Name - : positionMasterProfileOld.orgChild3 != null - ? positionMasterProfileOld.orgChild3.orgChild3Name - : positionMasterProfileOld.orgChild2 != null - ? positionMasterProfileOld.orgChild2.orgChild2Name - : positionMasterProfileOld.orgChild1 != null - ? positionMasterProfileOld.orgChild1.orgChild1Name - : positionMasterProfileOld.orgRoot != null - ? positionMasterProfileOld.orgRoot.orgRootName - : "-", - profileOrgShortName: - posMaster.next_holder == null - ? orgChild3.orgChild3ShortName - : positionMasterProfileOld == null - ? "-" - : positionMasterProfileOld.orgChild4 != null - ? positionMasterProfileOld.orgChild4.orgChild4ShortName - : positionMasterProfileOld.orgChild3 != null - ? positionMasterProfileOld.orgChild3.orgChild3ShortName - : positionMasterProfileOld.orgChild2 != null - ? positionMasterProfileOld.orgChild2.orgChild2ShortName - : positionMasterProfileOld.orgChild1 != null - ? positionMasterProfileOld.orgChild1.orgChild1ShortName - : positionMasterProfileOld.orgRoot != null - ? positionMasterProfileOld.orgRoot.orgRootShortName - : "-", - profileFullname: - posMaster.next_holder == null - ? posMaster.current_holder == null - ? "- ว่าง -" - : `${posMaster.current_holder.prefix}${posMaster.current_holder.firstName} ${posMaster.current_holder.lastName}` - : `${posMaster.next_holder.prefix}${posMaster.next_holder.firstName} ${posMaster.next_holder.lastName}`, - profilePosMasterNo: - posMaster.next_holder == null - ? positionMasterOld == null - ? "-" - : positionMasterOld.posMasterNo - : positionMasterProfileOld == null - ? "-" - : positionMasterProfileOld.posMasterNo, - profilePositionName: - posMaster.next_holder == null - ? positionMasterOld == null - ? positionName.join(" หรือ ") - : profilePositionName.join(" หรือ ") - : posMaster.next_holder.position, - profilePosType: - posMaster.next_holder == null - ? positionMasterOld == null - ? posType.join(" หรือ ") - : profilePosType.join(" หรือ ") - : posMaster.next_holder.posType == null - ? "-" - : posMaster.next_holder.posType.posTypeName, - profilePosLevel: - posMaster.next_holder == null - ? positionMasterOld == null - ? posLevel.join(" หรือ ") - : profilePosLevel.join(" หรือ ") - : posMaster.next_holder.posLevel == null - ? "-" - : posMaster.next_holder.posLevel.posLevelName, - profilePosExecutive: - posMaster.next_holder == null - ? positionMasterOld == null - ? posExecutive.join(" หรือ ") - : profilePosExecutive.join(" หรือ ") - : positionMasterProfileOld == null - ? "-" - : positionMasterProfileOld.positions.find( - (x: any) => x.positionIsSelected == true, - )?.posExecutive?.posExecutiveName, - education: education == "" ? "" : education.degree, - salary: salary == "" ? "" : salary.amount, - reason: posMaster.reason, - }; - if (_node == null) { - const head = { - posMasterNo: Extension.ToThaiNumber(node.orgTreeShortName.toString()), - profileFullname: Extension.ToThaiNumber(node.profileOrgName.toString()), - posExecutive: Extension.ToThaiNumber(node.orgTreeName.toString()), - positionName: "", - posType: "", - posLevel: "", - profilePosMasterNo: Extension.ToThaiNumber( - node.profileOrgShortName.toString(), - ), - profilePosExecutive: "", - profilePositionName: "", - profilePosType: "", - profilePosLevel: "", - education: "", - salary: "", - reason: "", - }; - data.push(head); - const _head = { - no: Extension.ToThaiNumber(no.toString()), - posMasterNo: - node.posMasterNo == null - ? "" - : Extension.ToThaiNumber(node.posMasterNo.toString()), - profileFullname: - node.profileFullname == null - ? "" - : Extension.ToThaiNumber(node.profileFullname.toString()), - posExecutive: - node.posExecutive == null - ? "" - : Extension.ToThaiNumber(node.posExecutive.toString()), - positionName: - node.positionName == null - ? "" - : Extension.ToThaiNumber(node.positionName.toString()), - posType: - node.posType == null - ? "" - : Extension.ToThaiNumber(node.posType.toString()), - posLevel: - node.posLevel == null - ? "" - : Extension.ToThaiNumber(node.posLevel.toString()), - profilePosMasterNo: Extension.ToThaiNumber( - node.profilePosMasterNo.toString(), - ), - profilePosExecutive: - node.profilePosExecutive == null - ? "" - : Extension.ToThaiNumber(node.profilePosExecutive.toString()), - profilePositionName: - node.profilePositionName == null - ? "" - : Extension.ToThaiNumber(node.profilePositionName.toString()), - profilePosType: - node.profilePosType == null - ? "" - : Extension.ToThaiNumber(node.profilePosType.toString()), - profilePosLevel: - node.profilePosLevel == null - ? "" - : Extension.ToThaiNumber(node.profilePosLevel.toString()), - education: - node.education == null - ? "" - : Extension.ToThaiNumber(node.education.toString()), - salary: node.salary - ? Extension.ToThaiNumber(node.salary.toLocaleString()) - : "", - reason: - node.reason == null ? "" : Extension.ToThaiNumber(node.reason.toString()), - }; - data.push(_head); - } else { - if ( - node.orgTreeShortName != _node.orgTreeShortName || - node.orgTreeName != _node.orgTreeName || - node.profileOrgShortName != _node.profileOrgShortName || - node.profileOrgName != _node.profileOrgName - ) { - const head = { - posMasterNo: - node.orgTreeShortName == _node.orgTreeShortName - ? "" - : node.orgTreeShortName, - profileFullname: - node.profileOrgName == _node.profileOrgName ? "" : node.profileOrgName, - posExecutive: - node.orgTreeName == _node.orgTreeName ? "" : node.orgTreeName, - positionName: "", - posType: "", - posLevel: "", - profilePosMasterNo: - node.profileOrgShortName == _node.profileOrgShortName - ? "" - : node.profileOrgShortName, - profilePosExecutive: "", - profilePositionName: "", - profilePosType: "", - profilePosLevel: "", - education: "", - salary: "", - reason: "", - }; - data.push(head); - _node == null; - } - const head = { - no: Extension.ToThaiNumber(no.toString()), - posMasterNo: - node.posMasterNo == null - ? "" - : Extension.ToThaiNumber(node.posMasterNo.toString()), - profileFullname: - node.profileFullname == null - ? "" - : Extension.ToThaiNumber(node.profileFullname.toString()), - posExecutive: - node.posExecutive == null - ? "" - : Extension.ToThaiNumber(node.posExecutive.toString()), - positionName: - node.positionName == null - ? "" - : Extension.ToThaiNumber(node.positionName.toString()), - posType: - node.posType == null - ? "" - : Extension.ToThaiNumber(node.posType.toString()), - posLevel: - node.posLevel == null - ? "" - : Extension.ToThaiNumber(node.posLevel.toString()), - profilePosMasterNo: Extension.ToThaiNumber( - node.profilePosMasterNo.toString(), - ), - profilePosExecutive: - node.profilePosExecutive == null - ? "" - : Extension.ToThaiNumber(node.profilePosExecutive.toString()), - profilePositionName: - node.profilePositionName == null - ? "" - : Extension.ToThaiNumber(node.profilePositionName.toString()), - profilePosType: - node.profilePosType == null - ? "" - : Extension.ToThaiNumber(node.profilePosType.toString()), - profilePosLevel: - node.profilePosLevel == null - ? "" - : Extension.ToThaiNumber(node.profilePosLevel.toString()), - education: - node.education == null - ? "" - : Extension.ToThaiNumber(node.education.toString()), - salary: node.salary - ? Extension.ToThaiNumber(node.salary.toLocaleString()) - : "", - reason: - node.reason == null ? "" : Extension.ToThaiNumber(node.reason.toString()), - }; - data.push(head); - } - no += 1; - _node = node; - } - }), - ); - _node = null; - - for (let orgChild4 of orgChild4Data.filter( - (orgChild4) => orgChild4.orgChild3Id === orgChild3.id, - )) { - await Promise.all( - orgChild4.posMasters - .sort((a, b) => a.posMasterOrder - b.posMasterOrder) - .map(async (posMaster) => { - const positionName = [ - ...new Set(posMaster.positions.map((x) => x.positionName)), - ]; - const posType = [ - ...new Set( - posMaster.positions - .filter((x: any) => x.posType != null) - .map((x) => x.posType.posTypeName), - ), - ]; - const posLevel = [ - ...new Set( - posMaster.positions - .filter((x: any) => x.posLevel != null) - .map((x) => x.posLevel.posLevelName), - ), - ]; - const posExecutive = [ - ...new Set( - posMaster.positions - .filter((x: any) => x.posExecutive != null) - .map((x) => x.posExecutive.posExecutiveName), - ), - ]; - let positionMasterProfileOld: any = null; - if (posMaster.next_holder != null) { - positionMasterProfileOld = posMaster.next_holder.current_holders.find( - (x) => x.orgRevisionId == orgRevisionActive.id, - ); - } - - let positionMasterOld: any = null; - let profilePositionName: any = []; - let profilePosType: any = []; - let profilePosLevel: any = []; - let profilePosExecutive: any = []; - if (posMaster.ancestorDNA != null && posMaster.ancestorDNA != "") { - positionMasterOld = orgRevisionActive.posMasters.find( - (x: any) => - x.orgRevisionId == orgRevisionActive.id && - x.ancestorDNA == posMaster.ancestorDNA, - ); - profilePositionName = [ - ...new Set(positionMasterOld.positions.map((x: any) => x.positionName)), - ]; - profilePosType = [ - ...new Set( - positionMasterOld.positions - .filter((x: any) => x.posType != null) - .map((x: any) => x.posType.posTypeName), - ), - ]; - profilePosLevel = [ - ...new Set( - positionMasterOld.positions - .filter((x: any) => x.posLevel != null) - .map((x: any) => x.posLevel.posLevelName), - ), - ]; - profilePosExecutive = [ - ...new Set( - positionMasterOld.positions - .filter((x: any) => x.posExecutive != null) - .map((x: any) => x.posExecutive.posExecutiveName), - ), - ]; - } - let education: any = ""; - if ( - posMaster.next_holder != null && - posMaster.next_holder.profileEducations != null && - posMaster.next_holder.profileEducations.length > 0 - ) { - let _education: any = posMaster.next_holder.profileEducations.sort( - (a, b) => - (b.finishDate == null ? 0 : b.finishDate.getTime()) - - (a.finishDate == null ? 0 : a.finishDate.getTime()), - ); - if (_education.length > 0) { - education = _education[0]; - } - } - else { - if ( - posMaster.current_holder != null && - posMaster.current_holder.profileEducations != null && - posMaster.current_holder.profileEducations.length > 0 - ) { - let _education: any = posMaster.current_holder.profileEducations.sort( - (a, b) => - (b.finishDate == null ? 0 : b.finishDate.getTime()) - - (a.finishDate == null ? 0 : a.finishDate.getTime()), - ); - if (_education.length > 0) { - education = _education[0]; - } - } - } - let salary: any = ""; - if ( - posMaster.next_holder != null && - posMaster.next_holder.profileSalary != null && - posMaster.next_holder.profileSalary.length > 0 - ) { - let _salary: any = posMaster.next_holder.profileSalary.sort( - (a, b) => - (b.commandDateAffect == null ? 0 : b.commandDateAffect.getTime()) - - (a.commandDateAffect == null ? 0 : a.commandDateAffect.getTime()), - ); - if (_salary.length > 0) { - salary = _salary[0]; - } - } - else { - if ( - posMaster.current_holder != null && - posMaster.current_holder.profileSalary != null && - posMaster.current_holder.profileSalary.length > 0 - ) { - let _salary: any = posMaster.current_holder.profileSalary.sort( - (a, b) => - (b.commandDateAffect == null ? 0 : b.commandDateAffect.getTime()) - - (a.commandDateAffect == null ? 0 : a.commandDateAffect.getTime()), - ); - if (_salary.length > 0) { - salary = _salary[0]; - } - } - } - - let node = { - posMasterOrder: posMaster.posMasterOrder, // - isSit: posMaster.isSit, // - orgTreeName: orgChild4.orgChild4Name, - orgTreeShortName: orgChild4.orgChild4ShortName, - posMasterNo: posMaster.posMasterNo, - positionName: - posMaster.next_holder == null - ? positionName.join(" หรือ ") - : posMaster.isSit == false - ? posMaster.positions.find((x: any) => x.positionIsSelected == true) - ?.positionName - : posMaster.next_holder.position, - posType: - posMaster.next_holder == null - ? posType.join(" หรือ ") - : posMaster.isSit == false - ? posMaster.positions.find((x: any) => x.positionIsSelected == true) - ?.posType?.posTypeName - : posMaster.next_holder.posType == null - ? "-" - : posMaster.next_holder.posType.posTypeName, - posLevel: - posMaster.next_holder == null - ? posLevel.join(" หรือ ") - : posMaster.isSit == false - ? posMaster.positions.find((x: any) => x.positionIsSelected == true) - ?.posLevel?.posLevelName - : posMaster.next_holder.posLevel == null - ? "-" - : posMaster.next_holder.posLevel.posLevelName, - posExecutive: - posMaster.next_holder == null - ? posExecutive.join(" หรือ ") - : posMaster.isSit == false - ? posMaster.positions.find((x: any) => x.positionIsSelected == true) - ?.posExecutive?.posExecutiveName - : positionMasterProfileOld == null - ? "-" - : positionMasterProfileOld.positions.find( - (x: any) => x.positionIsSelected == true, - )?.posExecutive?.posExecutiveName, - - profileOrgName: - posMaster.next_holder == null - ? orgChild4.orgChild4Name - : positionMasterProfileOld == null - ? "-" - : positionMasterProfileOld.orgChild4 != null - ? positionMasterProfileOld.orgChild4.orgChild4Name - : positionMasterProfileOld.orgChild3 != null - ? positionMasterProfileOld.orgChild3.orgChild3Name - : positionMasterProfileOld.orgChild2 != null - ? positionMasterProfileOld.orgChild2.orgChild2Name - : positionMasterProfileOld.orgChild1 != null - ? positionMasterProfileOld.orgChild1.orgChild1Name - : positionMasterProfileOld.orgRoot != null - ? positionMasterProfileOld.orgRoot.orgRootName - : "-", - profileOrgShortName: - posMaster.next_holder == null - ? orgChild4.orgChild4ShortName - : positionMasterProfileOld == null - ? "-" - : positionMasterProfileOld.orgChild4 != null - ? positionMasterProfileOld.orgChild4.orgChild4ShortName - : positionMasterProfileOld.orgChild3 != null - ? positionMasterProfileOld.orgChild3.orgChild3ShortName - : positionMasterProfileOld.orgChild2 != null - ? positionMasterProfileOld.orgChild2.orgChild2ShortName - : positionMasterProfileOld.orgChild1 != null - ? positionMasterProfileOld.orgChild1.orgChild1ShortName - : positionMasterProfileOld.orgRoot != null - ? positionMasterProfileOld.orgRoot.orgRootShortName - : "-", - profileFullname: - posMaster.next_holder == null - ? posMaster.current_holder == null - ? "- ว่าง -" - : `${posMaster.current_holder.prefix}${posMaster.current_holder.firstName} ${posMaster.current_holder.lastName}` - : `${posMaster.next_holder.prefix}${posMaster.next_holder.firstName} ${posMaster.next_holder.lastName}`, - profilePosMasterNo: - posMaster.next_holder == null - ? positionMasterOld == null - ? "-" - : positionMasterOld.posMasterNo - : positionMasterProfileOld == null - ? "-" - : positionMasterProfileOld.posMasterNo, - profilePositionName: - posMaster.next_holder == null - ? positionMasterOld == null - ? positionName.join(" หรือ ") - : profilePositionName.join(" หรือ ") - : posMaster.next_holder.position, - profilePosType: - posMaster.next_holder == null - ? positionMasterOld == null - ? posType.join(" หรือ ") - : profilePosType.join(" หรือ ") - : posMaster.next_holder.posType == null - ? "-" - : posMaster.next_holder.posType.posTypeName, - profilePosLevel: - posMaster.next_holder == null - ? positionMasterOld == null - ? posLevel.join(" หรือ ") - : profilePosLevel.join(" หรือ ") - : posMaster.next_holder.posLevel == null - ? "-" - : posMaster.next_holder.posLevel.posLevelName, - profilePosExecutive: - posMaster.next_holder == null - ? positionMasterOld == null - ? posExecutive.join(" หรือ ") - : profilePosExecutive.join(" หรือ ") - : positionMasterProfileOld == null - ? "-" - : positionMasterProfileOld.positions.find( - (x: any) => x.positionIsSelected == true, - )?.posExecutive?.posExecutiveName, - education: education == "" ? "" : education.degree, - salary: salary == "" ? "" : salary.amount, - reason: posMaster.reason, - }; - if (_node == null) { - const head = { - posMasterNo: Extension.ToThaiNumber(node.orgTreeShortName.toString()), - profileFullname: Extension.ToThaiNumber(node.profileOrgName.toString()), - posExecutive: Extension.ToThaiNumber(node.orgTreeName.toString()), - positionName: "", - posType: "", - posLevel: "", - profilePosMasterNo: Extension.ToThaiNumber( - node.profileOrgShortName.toString(), - ), - profilePosExecutive: "", - profilePositionName: "", - profilePosType: "", - profilePosLevel: "", - education: "", - salary: "", - reason: "", - }; - data.push(head); - const _head = { - no: Extension.ToThaiNumber(no.toString()), - posMasterNo: - node.posMasterNo == null - ? "" - : Extension.ToThaiNumber(node.posMasterNo.toString()), - profileFullname: - node.profileFullname == null - ? "" - : Extension.ToThaiNumber(node.profileFullname.toString()), - posExecutive: - node.posExecutive == null - ? "" - : Extension.ToThaiNumber(node.posExecutive.toString()), - positionName: - node.positionName == null - ? "" - : Extension.ToThaiNumber(node.positionName.toString()), - posType: - node.posType == null - ? "" - : Extension.ToThaiNumber(node.posType.toString()), - posLevel: - node.posLevel == null - ? "" - : Extension.ToThaiNumber(node.posLevel.toString()), - profilePosMasterNo: Extension.ToThaiNumber( - node.profilePosMasterNo.toString(), - ), - profilePosExecutive: - node.profilePosExecutive == null - ? "" - : Extension.ToThaiNumber(node.profilePosExecutive.toString()), - profilePositionName: - node.profilePositionName == null - ? "" - : Extension.ToThaiNumber(node.profilePositionName.toString()), - profilePosType: - node.profilePosType == null - ? "" - : Extension.ToThaiNumber(node.profilePosType.toString()), - profilePosLevel: - node.profilePosLevel == null - ? "" - : Extension.ToThaiNumber(node.profilePosLevel.toString()), - education: - node.education == null - ? "" - : Extension.ToThaiNumber(node.education.toString()), - salary: node.salary - ? Extension.ToThaiNumber(node.salary.toLocaleString()) - : "", - reason: - node.reason == null ? "" : Extension.ToThaiNumber(node.reason.toString()), - }; - data.push(_head); - } else { - if ( - node.orgTreeShortName != _node.orgTreeShortName || - node.orgTreeName != _node.orgTreeName || - node.profileOrgShortName != _node.profileOrgShortName || - node.profileOrgName != _node.profileOrgName - ) { - const head = { - posMasterNo: - node.orgTreeShortName == _node.orgTreeShortName - ? "" - : node.orgTreeShortName, - profileFullname: - node.profileOrgName == _node.profileOrgName ? "" : node.profileOrgName, - posExecutive: - node.orgTreeName == _node.orgTreeName ? "" : node.orgTreeName, - positionName: "", - posType: "", - posLevel: "", - profilePosMasterNo: - node.profileOrgShortName == _node.profileOrgShortName - ? "" - : node.profileOrgShortName, - profilePosExecutive: "", - profilePositionName: "", - profilePosType: "", - profilePosLevel: "", - education: "", - salary: "", - reason: "", - }; - data.push(head); - _node == null; - } - const head = { - no: Extension.ToThaiNumber(no.toString()), - posMasterNo: - node.posMasterNo == null - ? "" - : Extension.ToThaiNumber(node.posMasterNo.toString()), - profileFullname: - node.profileFullname == null - ? "" - : Extension.ToThaiNumber(node.profileFullname.toString()), - posExecutive: - node.posExecutive == null - ? "" - : Extension.ToThaiNumber(node.posExecutive.toString()), - positionName: - node.positionName == null - ? "" - : Extension.ToThaiNumber(node.positionName.toString()), - posType: - node.posType == null - ? "" - : Extension.ToThaiNumber(node.posType.toString()), - posLevel: - node.posLevel == null - ? "" - : Extension.ToThaiNumber(node.posLevel.toString()), - profilePosMasterNo: Extension.ToThaiNumber( - node.profilePosMasterNo.toString(), - ), - profilePosExecutive: - node.profilePosExecutive == null - ? "" - : Extension.ToThaiNumber(node.profilePosExecutive.toString()), - profilePositionName: - node.profilePositionName == null - ? "" - : Extension.ToThaiNumber(node.profilePositionName.toString()), - profilePosType: - node.profilePosType == null - ? "" - : Extension.ToThaiNumber(node.profilePosType.toString()), - profilePosLevel: - node.profilePosLevel == null - ? "" - : Extension.ToThaiNumber(node.profilePosLevel.toString()), - education: - node.education == null - ? "" - : Extension.ToThaiNumber(node.education.toString()), - salary: node.salary - ? Extension.ToThaiNumber(node.salary.toLocaleString()) - : "", - reason: - node.reason == null ? "" : Extension.ToThaiNumber(node.reason.toString()), - }; - data.push(head); - } - no += 1; - _node = node; - }), - ); + no += 1; + _node = node; + } _node = null; } // End for orgChild4 } // End for orgChild3 @@ -5940,27 +6604,10 @@ export class ReportController extends Controller { order: { orgChild1Order: "ASC" }, relations: [ "posMasters", - "posMasters.orgRoot", - "posMasters.orgChild1", - "posMasters.orgChild2", - "posMasters.orgChild3", - "posMasters.orgChild4", "posMasters.current_holder", - "posMasters.current_holder.posLevel", - "posMasters.current_holder.posType", "posMasters.current_holder.profileSalary", "posMasters.current_holder.profileEducations", - "posMasters.current_holder.current_holders", - "posMasters.current_holder.current_holders.positions", - "posMasters.current_holder.current_holders.orgRoot", - "posMasters.current_holder.current_holders.orgChild1", - "posMasters.current_holder.current_holders.orgChild2", - "posMasters.current_holder.current_holders.orgChild3", - "posMasters.current_holder.current_holders.orgChild4", "posMasters.positions", - "posMasters.positions.posLevel", - "posMasters.positions.posType", - "posMasters.positions.posExecutive", ], }); @@ -5972,27 +6619,10 @@ export class ReportController extends Controller { order: { orgChild2Order: "ASC" }, relations: [ "posMasters", - "posMasters.orgRoot", - "posMasters.orgChild1", - "posMasters.orgChild2", - "posMasters.orgChild3", - "posMasters.orgChild4", "posMasters.current_holder", - "posMasters.current_holder.posLevel", - "posMasters.current_holder.posType", "posMasters.current_holder.profileSalary", "posMasters.current_holder.profileEducations", - "posMasters.current_holder.current_holders", - "posMasters.current_holder.current_holders.positions", - "posMasters.current_holder.current_holders.orgRoot", - "posMasters.current_holder.current_holders.orgChild1", - "posMasters.current_holder.current_holders.orgChild2", - "posMasters.current_holder.current_holders.orgChild3", - "posMasters.current_holder.current_holders.orgChild4", "posMasters.positions", - "posMasters.positions.posLevel", - "posMasters.positions.posType", - "posMasters.positions.posExecutive", ], }); @@ -6004,27 +6634,10 @@ export class ReportController extends Controller { order: { orgChild3Order: "ASC" }, relations: [ "posMasters", - "posMasters.orgRoot", - "posMasters.orgChild1", - "posMasters.orgChild2", - "posMasters.orgChild3", - "posMasters.orgChild4", "posMasters.current_holder", - "posMasters.current_holder.posLevel", - "posMasters.current_holder.posType", "posMasters.current_holder.profileSalary", "posMasters.current_holder.profileEducations", - "posMasters.current_holder.current_holders", - "posMasters.current_holder.current_holders.positions", - "posMasters.current_holder.current_holders.orgRoot", - "posMasters.current_holder.current_holders.orgChild1", - "posMasters.current_holder.current_holders.orgChild2", - "posMasters.current_holder.current_holders.orgChild3", - "posMasters.current_holder.current_holders.orgChild4", "posMasters.positions", - "posMasters.positions.posLevel", - "posMasters.positions.posType", - "posMasters.positions.posExecutive", ], }); @@ -6036,27 +6649,10 @@ export class ReportController extends Controller { order: { orgChild4Order: "ASC" }, relations: [ "posMasters", - "posMasters.orgRoot", - "posMasters.orgChild1", - "posMasters.orgChild2", - "posMasters.orgChild3", - "posMasters.orgChild4", "posMasters.current_holder", - "posMasters.current_holder.posLevel", - "posMasters.current_holder.posType", "posMasters.current_holder.profileSalary", "posMasters.current_holder.profileEducations", - "posMasters.current_holder.current_holders", - "posMasters.current_holder.current_holders.positions", - "posMasters.current_holder.current_holders.orgRoot", - "posMasters.current_holder.current_holders.orgChild1", - "posMasters.current_holder.current_holders.orgChild2", - "posMasters.current_holder.current_holders.orgChild3", - "posMasters.current_holder.current_holders.orgChild4", "posMasters.positions", - "posMasters.positions.posLevel", - "posMasters.positions.posType", - "posMasters.positions.posExecutive", ], }); @@ -8080,10 +8676,10 @@ export class ReportController extends Controller { reqBody: { node: number; nodeId: string; - } + }, ) { - // @Get("report3/{rootId}") - // async findReport3(@Path() rootId: string) { + // @Get("report3/{rootId}") + // async findReport3(@Path() rootId: string) { // const orgRevision = await this.orgRevisionRepository.findOne({ // where: { orgRevisionIsDraft: true, orgRevisionIsCurrent: false }, // relations: ["orgRoots"], @@ -8091,9 +8687,9 @@ export class ReportController extends Controller { // if (!orgRevision) { // throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); // } - let nodeId:string = reqBody.nodeId ? reqBody.nodeId : ""; - let node:number = reqBody.node ? reqBody.node : 0; - if(nodeId === "" || node < 0 || node > 4) { + let nodeId: string = reqBody.nodeId ? reqBody.nodeId : ""; + let node: number = reqBody.node ? reqBody.node : 0; + if (nodeId === "" || node < 0 || node > 4) { throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); } // ดึงแค่ rootId ก่อน ถ้าลูกค้า confirm ค่อยปรับ @@ -8101,50 +8697,45 @@ export class ReportController extends Controller { case 0: { const orgRoot = await this.orgRootRepository.findOne({ select: ["id"], - where: { id: nodeId } + where: { id: nodeId }, }); - if (!orgRoot) - throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); + if (!orgRoot) throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); nodeId = orgRoot.id; break; } case 1: { const orgChild1 = await this.child1Repository.findOne({ select: ["id", "orgRootId"], - where: { id: nodeId } + where: { id: nodeId }, }); - if (!orgChild1) - throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); + if (!orgChild1) throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); nodeId = orgChild1.orgRootId; break; } case 2: { const orgChild2 = await this.child2Repository.findOne({ select: ["id", "orgRootId"], - where: { id: nodeId } + where: { id: nodeId }, }); - if (!orgChild2) - throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); + if (!orgChild2) throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); nodeId = orgChild2.orgRootId; break; } case 3: { const orgChild3 = await this.child3Repository.findOne({ select: ["id", "orgRootId"], - where: { id: nodeId } + where: { id: nodeId }, }); - if (!orgChild3) - throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); + if (!orgChild3) throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); nodeId = orgChild3.orgRootId; break; } case 4: { const orgChild4 = await this.child4Repository.findOne({ select: ["id", "orgRootId"], - where: { id: nodeId } + where: { id: nodeId }, }); - if (!orgChild4) - throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); + if (!orgChild4) throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); nodeId = orgChild4.orgRootId; break; } @@ -9389,28 +9980,27 @@ export class ReportController extends Controller { reqBody: { node: number; nodeId: string; - } + }, ) { - // @Get("report4/{rootId}") - // async findReport4(@Path() rootId: string) { - - let nodeId:string = reqBody.nodeId ? reqBody.nodeId : ""; - let node:number = reqBody.node ? reqBody.node : 0; - let rootName:string = ""; + // @Get("report4/{rootId}") + // async findReport4(@Path() rootId: string) { + + let nodeId: string = reqBody.nodeId ? reqBody.nodeId : ""; + let node: number = reqBody.node ? reqBody.node : 0; + let rootName: string = ""; let whereCase: string = ""; let params: any = {}; - if(nodeId === "" || node < 0 || node > 4) { + if (nodeId === "" || node < 0 || node > 4) { throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); } switch (node) { case 0: { const orgRoot = await this.orgRootRepository.findOne({ select: ["id", "orgRootName"], - where: { id: nodeId } + where: { id: nodeId }, }); - if (!orgRoot) - throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); + if (!orgRoot) throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); rootName = orgRoot.orgRootName; whereCase = "posMaster.orgRootId = :nodeId"; params = { nodeId }; @@ -9419,10 +10009,9 @@ export class ReportController extends Controller { case 1: { const orgChild1 = await this.child1Repository.findOne({ select: ["id", "orgChild1Name"], - where: { id: nodeId } + where: { id: nodeId }, }); - if (!orgChild1) - throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); + if (!orgChild1) throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); rootName = orgChild1.orgChild1Name; whereCase = "posMaster.orgChild1Id = :nodeId"; params = { nodeId }; @@ -9431,10 +10020,9 @@ export class ReportController extends Controller { case 2: { const orgChild2 = await this.child2Repository.findOne({ select: ["id", "orgChild2Name"], - where: { id: nodeId } + where: { id: nodeId }, }); - if (!orgChild2) - throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); + if (!orgChild2) throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); rootName = orgChild2.orgChild2Name; whereCase = "posMaster.orgChild2Id = :nodeId"; params = { nodeId }; @@ -9443,10 +10031,9 @@ export class ReportController extends Controller { case 3: { const orgChild3 = await this.child3Repository.findOne({ select: ["id", "orgChild3Name"], - where: { id: nodeId } + where: { id: nodeId }, }); - if (!orgChild3) - throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); + if (!orgChild3) throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); rootName = orgChild3.orgChild3Name; whereCase = "posMaster.orgChild3Id = :nodeId"; params = { nodeId }; @@ -9455,10 +10042,9 @@ export class ReportController extends Controller { case 4: { const orgChild4 = await this.child4Repository.findOne({ select: ["id", "orgChild4Name"], - where: { id: nodeId } + where: { id: nodeId }, }); - if (!orgChild4) - throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); + if (!orgChild4) throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); rootName = orgChild4.orgChild4Name; whereCase = "posMaster.orgChild4Id = :nodeId"; params = { nodeId };