diff --git a/src/controllers/ProfileController.ts b/src/controllers/ProfileController.ts index 0ad007d5..a30667f6 100644 --- a/src/controllers/ProfileController.ts +++ b/src/controllers/ProfileController.ts @@ -78,6 +78,10 @@ import { ProfileDuty } from "../entities/ProfileDuty"; import { ProfileAssessment } from "../entities/ProfileAssessment"; import { ProfileAbility } from "../entities/ProfileAbility"; import { PermissionProfile } from "../entities/PermissionProfile"; +import { OrgChild1 } from "../entities/OrgChild1"; +import { OrgChild2 } from "../entities/OrgChild2"; +import { OrgChild3 } from "../entities/OrgChild3"; +import { OrgChild4 } from "../entities/OrgChild4"; @Route("api/v1/org/profile") @Tags("Profile") @@ -90,6 +94,10 @@ import { PermissionProfile } from "../entities/PermissionProfile"; export class ProfileController extends Controller { private orgRevisionRepo = AppDataSource.getRepository(OrgRevision); private orgRootRepo = AppDataSource.getRepository(OrgRoot); + private orgChild1Repo = AppDataSource.getRepository(OrgChild1); + private orgChild2Repo = AppDataSource.getRepository(OrgChild2); + private orgChild3Repo = AppDataSource.getRepository(OrgChild3); + private orgChild4Repo = AppDataSource.getRepository(OrgChild4); private posMasterRepo = AppDataSource.getRepository(PosMaster); private profileRepo = AppDataSource.getRepository(Profile); private profileEmpRepo = AppDataSource.getRepository(ProfileEmployee); @@ -5542,251 +5550,251 @@ export class ProfileController extends Controller { queryLike = "profile.citizenId LIKE :keyword"; } else if (searchField == "position") { queryLike = "profile.position LIKE :keyword"; - } else if (searchField == "posNo") { - queryLike = ` - CASE - WHEN current_holders.orgChild4Id IS NOT NULL THEN CONCAT(orgChild4.orgChild4ShortName, current_holders.posMasterNo) - WHEN current_holders.orgChild3Id IS NOT NULL THEN CONCAT(orgChild3.orgChild3ShortName, current_holders.posMasterNo) - WHEN current_holders.orgChild2Id IS NOT NULL THEN CONCAT(orgChild2.orgChild2ShortName, current_holders.posMasterNo) - WHEN current_holders.orgChild1Id IS NOT NULL THEN CONCAT(orgChild1.orgChild1ShortName, current_holders.posMasterNo) - ELSE CONCAT(orgRoot.orgRootShortName, current_holders.posMasterNo) - END LIKE :keyword - `; - } + } + // else if (searchField == "posNo") { + // queryLike = ` + // CASE + // WHEN current_holders.orgChild4Id IS NOT NULL THEN CONCAT(orgChild4.orgChild4ShortName, current_holders.posMasterNo) + // WHEN current_holders.orgChild3Id IS NOT NULL THEN CONCAT(orgChild3.orgChild3ShortName, current_holders.posMasterNo) + // WHEN current_holders.orgChild2Id IS NOT NULL THEN CONCAT(orgChild2.orgChild2ShortName, current_holders.posMasterNo) + // WHEN current_holders.orgChild1Id IS NOT NULL THEN CONCAT(orgChild1.orgChild1ShortName, current_holders.posMasterNo) + // ELSE CONCAT(orgRoot.orgRootShortName, current_holders.posMasterNo) + // END LIKE :keyword + // `; + // } let nodeCondition = "1=1"; let nodeAll = ""; + let orgRoot = null; + let orgChild1 = null; + let orgChild2 = null; + let orgChild3 = null; + let orgChild4 = null; + + let pmsCondition = "1=1"; + let orgRootPms = null; + let orgChild1Pms = null; + let orgChild2Pms = null; + let orgChild3Pms = null; + let orgChild4Pms = null; + if (node === 0 && nodeId) { - nodeCondition = "current_holders.orgRootId = :nodeId"; - if (isAll == false) nodeAll = " AND current_holders.orgChild1Id IS NULL"; + orgRoot = await this.orgRootRepo.findOne({where: { id: nodeId }}); + if (orgRoot) { + nodeCondition = "profileSalary.orgRoot = :orgRoot"; + } + if (isAll == false) nodeAll = " AND profileSalary.orgChild1Id IS NULL"; } else if (node === 1 && nodeId) { - nodeCondition = "current_holders.orgChild1Id = :nodeId"; - if (isAll == false) nodeAll = " AND current_holders.orgChild2Id IS NULL"; + orgChild1 = await this.orgChild1Repo.findOne({where: { id: nodeId }}); + if (orgChild1) { + nodeCondition = "profileSalary.orgChild1 = :orgChild1"; + } + if (isAll == false) nodeAll = " AND profileSalary.orgChild2Id IS NULL"; } else if (node === 2 && nodeId) { - nodeCondition = "current_holders.orgChild2Id = :nodeId"; - if (isAll == false) nodeAll = " AND current_holders.orgChild3Id IS NULL"; + orgChild2 = await this.orgChild2Repo.findOne({where: { id: nodeId }}); + if (orgChild2) { + nodeCondition = "profileSalary.orgChild2 = :orgChild2"; + } + if (isAll == false) nodeAll = " AND profileSalary.orgChild3Id IS NULL"; } else if (node === 3 && nodeId) { - nodeCondition = "current_holders.orgChild3Id = :nodeId"; - if (isAll == false) nodeAll = " AND current_holders.orgChild4Id IS NULL"; + orgChild3 = await this.orgChild3Repo.findOne({where: { id: nodeId }}); + if (orgChild3) { + nodeCondition = "profileSalary.orgChild3 = :orgChild3"; + } + if (isAll == false) nodeAll = " AND profileSalary.orgChild4Id IS NULL"; } else if (node === 4 && nodeId) { - nodeCondition = "current_holders.orgChild4Id = :nodeId"; + orgChild4 = await this.orgChild4Repo.findOne({where: { id: nodeId }}); + if (orgChild4) { + nodeCondition = "profileSalary.orgChild4 = :orgChild4"; + } } nodeCondition = nodeCondition + nodeAll; - const findRevision = await this.orgRevisionRepo.findOne({ - where: { orgRevisionIsCurrent: true }, - }); - if (!findRevision) { - throw new HttpError(HttpStatus.NOT_FOUND, "not found. OrgRevision"); + + if (_data.root) { + orgRootPms = await this.orgRootRepo.findOne({where: { id: _data.root }}); + if (orgRootPms) { + pmsCondition = "profileSalary.orgRoot = :orgRoot"; + } + } else if (_data.child1) { + orgChild1Pms = await this.orgChild1Repo.findOne({where: { id: _data.child1 }}); + if (orgChild1Pms) { + pmsCondition = "profileSalary.orgChild1 = :orgChild1"; + } + } else if (_data.child2) { + orgChild2Pms = await this.orgChild2Repo.findOne({where: { id: _data.child2 }}); + if (orgChild2Pms) { + pmsCondition = "profileSalary.orgChild2 = :orgChild2"; + } + } else if (_data.child3) { + orgChild3Pms = await this.orgChild3Repo.findOne({where: { id: _data.child3 }}); + if (orgChild3Pms) { + pmsCondition = "profileSalary.orgChild3 = :orgChild3"; + } + } else if (_data.child4) { + orgChild4Pms = await this.orgChild4Repo.findOne({where: { id: _data.child4 }}); + if (orgChild4Pms) { + pmsCondition = "profileSalary.orgChild4 = :orgChild4"; + } } + + + // const findRevision = await this.orgRevisionRepo.findOne({ + // where: { orgRevisionIsCurrent: true }, + // }); + // if (!findRevision) { + // throw new HttpError(HttpStatus.NOT_FOUND, "not found. OrgRevision"); + // } const [record, total] = await this.profileRepo .createQueryBuilder("profile") .leftJoinAndSelect("profile.posLevel", "posLevel") .leftJoinAndSelect("profile.posType", "posType") - .leftJoinAndSelect("profile.current_holders", "current_holders") - .leftJoinAndSelect("current_holders.positions", "positions") - .leftJoinAndSelect("positions.posExecutive", "posExecutive") - .leftJoinAndSelect("current_holders.orgRevision", "orgRevision") - .leftJoinAndSelect("current_holders.orgRoot", "orgRoot") - .leftJoinAndSelect("current_holders.orgChild1", "orgChild1") - .leftJoinAndSelect("current_holders.orgChild2", "orgChild2") - .leftJoinAndSelect("current_holders.orgChild3", "orgChild3") - .leftJoinAndSelect("current_holders.orgChild4", "orgChild4") - .where(node && nodeId ? "current_holders.orgRevisionId = :orgRevisionId" : "1=1", { - orgRevisionId: node && nodeId ? findRevision.id : undefined, - }) - .andWhere( - new Brackets(qb => { - qb.where("profile.isLeave IS TRUE") - .orWhere("profile.isRetirement IS TRUE"); - }) - ) - .andWhere( - _data.root != undefined && _data.root != null - ? _data.root[0] != null - ? `current_holders.orgRootId IN (:...root)` - : `current_holders.orgRootId is null` - : "1=1", - { - root: _data.root, - }, - ) - .andWhere( - _data.child1 != undefined && _data.child1 != null - ? _data.child1[0] != null - ? `current_holders.orgChild1Id IN (:...child1)` - : `current_holders.orgChild1Id is null` - : "1=1", - { - child1: _data.child1, - }, - ) - .andWhere( - _data.child2 != undefined && _data.child2 != null - ? _data.child2[0] != null - ? `current_holders.orgChild2Id IN (:...child2)` - : `current_holders.orgChild2Id is null` - : "1=1", - { - child2: _data.child2, - }, - ) - .andWhere( - _data.child3 != undefined && _data.child3 != null - ? _data.child3[0] != null - ? `current_holders.orgChild3Id IN (:...child3)` - : `current_holders.orgChild3Id is null` - : "1=1", - { - child3: _data.child3, - }, - ) - .andWhere( - _data.child4 != undefined && _data.child4 != null - ? _data.child4[0] != null - ? `current_holders.orgChild4Id IN (:...child4)` - : `current_holders.orgChild4Id is null` - : "1=1", - { - child4: _data.child4, - }, - ) - .andWhere( - posType != undefined && posType != null && posType != "" - ? "posType.posTypeName LIKE :keyword1" - : "1=1", - { - keyword1: `${posType}`, - }, - ) - .andWhere( - posLevel != undefined && posLevel != null && posLevel != "" - ? "posLevel.posLevelName LIKE :keyword2" - : "1=1", - { - keyword2: `${posLevel}`, - }, - ) - .andWhere( - isProbation != undefined && isProbation != null - ? `profile.isProbation = ${isProbation}` - : "1=1", - ) - // .andWhere( - // isRetire != undefined && isRetire != null - // ? isRetire == false - // ? // ? `profile.dateLeave IS NULL` - // `profile.isLeave IS FALSE` - // : isRetire == true && retireType != undefined && retireType != null - // ? // ? `profile.dateLeave IS NOT NULL AND profile.leaveType = '${retireType}'` - // // : `profile.dateLeave IS NOT NULL` - // `profile.isLeave IS TRUE AND profile.leaveType = '${retireType}'` - // : `profile.isLeave IS TRUE` - // : "1=1", - // ) - .andWhere(nodeCondition, { - nodeId: nodeId, - }) - - .andWhere( + .leftJoinAndSelect("profile.profileSalary", "profileSalary") + // .leftJoinAndSelect("profile.current_holders", "current_holders") + // .leftJoinAndSelect("current_holders.positions", "positions") + // .leftJoinAndSelect("positions.posExecutive", "posExecutive") + .where( new Brackets((qb) => { - qb.orWhere( - searchKeyword != undefined && searchKeyword != null && searchKeyword != "" - ? queryLike - : "1=1", - { - keyword: `%${searchKeyword}%`, - }, - ); - }), + qb.where("profile.isLeave = :isLeave", { isLeave: true }) + .orWhere("profile.isRetirement = :isRetirement", { isRetirement: true }); + }) ) - // .orderBy("current_holders.posMasterNo", "ASC") - .orderBy(`${sortBy}`, sort) - .skip((page - 1) * pageSize) - .take(pageSize) - .getManyAndCount(); - + .andWhere("profileSalary.order = (SELECT MAX(ps.order) FROM profileSalary ps WHERE ps.profileId = profile.id)") + + .andWhere( + posType != undefined && posType != null && posType != "" + ? "posType.posTypeName LIKE :keyword1" + : "1=1", + { + keyword1: `${posType}`, + }, + ) + .andWhere( + posLevel != undefined && posLevel != null && posLevel != "" + ? "posLevel.posLevelName LIKE :keyword2" + : "1=1", + { + keyword2: `${posLevel}`, + }, + ) + .andWhere( + isProbation != undefined && isProbation != null + ? `profile.isProbation = ${isProbation}` + : "1=1", + ) + .andWhere(pmsCondition, { + orgRoot: orgRootPms ? orgRootPms.orgRootName : undefined, + orgChild1: orgChild1Pms ? orgChild1Pms.orgChild1Name : undefined, + orgChild2: orgChild2Pms ? orgChild2Pms.orgChild2Name : undefined, + orgChild3: orgChild3Pms ? orgChild3Pms.orgChild3Name : undefined, + orgChild4: orgChild4Pms ? orgChild4Pms.orgChild4Name : undefined, + }) + .andWhere(nodeCondition, { + orgRoot: orgRoot ? orgRoot.orgRootName : undefined, + orgChild1: orgChild1 ? orgChild1.orgChild1Name : undefined, + orgChild2: orgChild2 ? orgChild2.orgChild2Name : undefined, + orgChild3: orgChild3 ? orgChild3.orgChild3Name : undefined, + orgChild4: orgChild4 ? orgChild4.orgChild4Name : undefined, + }) + .andWhere( + new Brackets((qb) => { + qb.orWhere( + searchKeyword != undefined && searchKeyword != null && searchKeyword != "" + ? queryLike + : "1=1", + { + keyword: `%${searchKeyword}%`, + }, + ); + }), + ) + // .orderBy("current_holders.posMasterNo", "ASC") + // .orderBy(`${sortBy}`, sort) + .skip((page - 1) * pageSize) + .take(pageSize) + .getManyAndCount(); + const data = await Promise.all( record.map((_data) => { - const posExecutive = - _data.current_holders.length == 0 || - _data.current_holders.find((x) => x.orgRevisionId == findRevision.id) == null || - _data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.positions.length == - 0 || - _data.current_holders - .find((x) => x.orgRevisionId == findRevision.id) - ?.positions.find((x: any) => x.positionIsSelected == true) == null || - _data.current_holders - .find((x) => x.orgRevisionId == findRevision.id) - ?.positions.find((x: any) => x.positionIsSelected == true)?.posExecutive == null - ? null - : _data.current_holders - .find((x) => x.orgRevisionId == findRevision.id) - ?.positions.find((x: any) => x.positionIsSelected == true)?.posExecutive - ?.posExecutiveName; + // const posExecutive = + // _data.current_holders.length == 0 || + // _data.current_holders.find((x) => x.orgRevisionId == findRevision.id) == null || + // _data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.positions.length == + // 0 || + // _data.current_holders + // .find((x) => x.orgRevisionId == findRevision.id) + // ?.positions.find((x: any) => x.positionIsSelected == true) == null || + // _data.current_holders + // .find((x) => x.orgRevisionId == findRevision.id) + // ?.positions.find((x: any) => x.positionIsSelected == true)?.posExecutive == null + // ? null + // : _data.current_holders + // .find((x) => x.orgRevisionId == findRevision.id) + // ?.positions.find((x: any) => x.positionIsSelected == true)?.posExecutive + // ?.posExecutiveName; - const shortName = - _data.current_holders.length == 0 - ? null - : _data.current_holders.find((x) => x.orgRevisionId == findRevision.id) != null && - _data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.orgChild4 != - null - ? `${_data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.orgChild4.orgChild4ShortName}${_data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.posMasterNo}` - : _data.current_holders.find((x) => x.orgRevisionId == findRevision.id) != null && - _data.current_holders.find((x) => x.orgRevisionId == findRevision.id) - ?.orgChild3 != null - ? `${_data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.orgChild3.orgChild3ShortName}${_data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.posMasterNo}` - : _data.current_holders.find((x) => x.orgRevisionId == findRevision.id) != null && - _data.current_holders.find((x) => x.orgRevisionId == findRevision.id) - ?.orgChild2 != null - ? `${_data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.orgChild2.orgChild2ShortName}${_data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.posMasterNo}` - : _data.current_holders.find((x) => x.orgRevisionId == findRevision.id) != null && - _data.current_holders.find((x) => x.orgRevisionId == findRevision.id) - ?.orgChild1 != null - ? `${_data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.orgChild1.orgChild1ShortName}${_data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.posMasterNo}` - : _data.current_holders.find((x) => x.orgRevisionId == findRevision.id) != - null && - _data.current_holders.find((x) => x.orgRevisionId == findRevision.id) - ?.orgRoot != null - ? `${_data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.orgRoot.orgRootShortName}${_data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.posMasterNo}` - : null; - const root = - _data.current_holders.length == 0 || - (_data.current_holders.find((x) => x.orgRevisionId == findRevision.id) != null && - _data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.orgRoot == null) - ? null - : _data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.orgRoot; + // const shortName = + // _data.current_holders.length == 0 + // ? null + // : _data.current_holders.find((x) => x.orgRevisionId == findRevision.id) != null && + // _data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.orgChild4 != + // null + // ? `${_data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.orgChild4.orgChild4ShortName}${_data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.posMasterNo}` + // : _data.current_holders.find((x) => x.orgRevisionId == findRevision.id) != null && + // _data.current_holders.find((x) => x.orgRevisionId == findRevision.id) + // ?.orgChild3 != null + // ? `${_data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.orgChild3.orgChild3ShortName}${_data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.posMasterNo}` + // : _data.current_holders.find((x) => x.orgRevisionId == findRevision.id) != null && + // _data.current_holders.find((x) => x.orgRevisionId == findRevision.id) + // ?.orgChild2 != null + // ? `${_data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.orgChild2.orgChild2ShortName}${_data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.posMasterNo}` + // : _data.current_holders.find((x) => x.orgRevisionId == findRevision.id) != null && + // _data.current_holders.find((x) => x.orgRevisionId == findRevision.id) + // ?.orgChild1 != null + // ? `${_data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.orgChild1.orgChild1ShortName}${_data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.posMasterNo}` + // : _data.current_holders.find((x) => x.orgRevisionId == findRevision.id) != + // null && + // _data.current_holders.find((x) => x.orgRevisionId == findRevision.id) + // ?.orgRoot != null + // ? `${_data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.orgRoot.orgRootShortName}${_data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.posMasterNo}` + // : null; + // const root = + // _data.current_holders.length == 0 || + // (_data.current_holders.find((x) => x.orgRevisionId == findRevision.id) != null && + // _data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.orgRoot == null) + // ? null + // : _data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.orgRoot; - const child1 = - _data.current_holders == null || - _data.current_holders.length == 0 || - _data.current_holders.find((x) => x.orgRevisionId == findRevision.id) == null - ? null - : _data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.orgChild1; + // const child1 = + // _data.current_holders == null || + // _data.current_holders.length == 0 || + // _data.current_holders.find((x) => x.orgRevisionId == findRevision.id) == null + // ? null + // : _data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.orgChild1; - const child2 = - _data.current_holders == null || - _data.current_holders.length == 0 || - _data.current_holders.find((x) => x.orgRevisionId == findRevision.id) == null - ? null - : _data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.orgChild2; + // const child2 = + // _data.current_holders == null || + // _data.current_holders.length == 0 || + // _data.current_holders.find((x) => x.orgRevisionId == findRevision.id) == null + // ? null + // : _data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.orgChild2; - const child3 = - _data.current_holders == null || - _data.current_holders.length == 0 || - _data.current_holders.find((x) => x.orgRevisionId == findRevision.id) == null - ? null - : _data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.orgChild3; + // const child3 = + // _data.current_holders == null || + // _data.current_holders.length == 0 || + // _data.current_holders.find((x) => x.orgRevisionId == findRevision.id) == null + // ? null + // : _data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.orgChild3; - const child4 = - _data.current_holders == null || - _data.current_holders.length == 0 || - _data.current_holders.find((x) => x.orgRevisionId == findRevision.id) == null - ? null - : _data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.orgChild4; + // const child4 = + // _data.current_holders == null || + // _data.current_holders.length == 0 || + // _data.current_holders.find((x) => x.orgRevisionId == findRevision.id) == null + // ? null + // : _data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.orgChild4; - let _child1 = child1?.orgChild1Name; - let _child2 = child2?.orgChild2Name; - let _child3 = child3?.orgChild3Name; - let _child4 = child4?.orgChild4Name; + // let _child1 = child1?.orgChild1Name; + // let _child2 = child2?.orgChild2Name; + // let _child3 = child3?.orgChild3Name; + // let _child4 = child4?.orgChild4Name; return { id: _data.id, @@ -5798,23 +5806,24 @@ export class ProfileController extends Controller { firstName: _data.firstName, lastName: _data.lastName, citizenId: _data.citizenId, + posLevel: _data.posLevel == null ? null : _data.posLevel.posLevelName, posType: _data.posType == null ? null : _data.posType.posTypeName, posLevelId: _data.posLevel == null ? null : _data.posLevel.id, posTypeId: _data.posType == null ? null : _data.posType.id, position: _data.position, - posExecutive: posExecutive, - posNo: shortName, - rootId: root == null ? null : root.id, - root: root == null ? null : root.orgRootName, - orgRootShortName: root == null ? null : root.orgRootShortName, - orgRevisionId: root == null ? null : root.orgRevisionId, - org: (_child4 == null ? "" : _child4 + "\n") + - (_child3 == null ? "" : _child3 + "\n") + - (_child2 == null ? "" : _child2 + "\n") + - (_child1 == null ? "" : _child1 + "\n") + - (root?.orgRootName == null ? "" : root?.orgRootName), - }; + posExecutive: _data.profileSalary[0].positionExecutive == null ? null : _data.profileSalary[0].positionExecutive, + posNo: _data.profileSalary[0].posNoAbb == "" ? "" : _data.profileSalary[0].posNoAbb + _data.profileSalary[0].posNo == "" ? "" : _data.profileSalary[0].posNo, + rootId: null , + root: _data.profileSalary[0].orgRoot == null ? null : _data.profileSalary[0].orgRoot, + orgRootShortName: _data.profileSalary[0].posNoAbb == null ? null : _data.profileSalary[0].posNoAbb, + orgRevisionId: null, + org: (_data.profileSalary[0].orgChild4 == null ? "" : _data.profileSalary[0].orgChild4 + "\n") + + (_data.profileSalary[0].orgChild3 == null ? "" : _data.profileSalary[0].orgChild3 + "\n") + + (_data.profileSalary[0].orgChild2 == null ? "" : _data.profileSalary[0].orgChild2 + "\n") + + (_data.profileSalary[0].orgChild1 == null ? "" : _data.profileSalary[0].orgChild1 + "\n") + + (_data.profileSalary[0].orgRoot == null ? "" : _data.profileSalary[0].orgRoot) , + }; }), ); diff --git a/src/controllers/ProfileEmployeeController.ts b/src/controllers/ProfileEmployeeController.ts index 0ffcfd2d..0fd56f32 100644 --- a/src/controllers/ProfileEmployeeController.ts +++ b/src/controllers/ProfileEmployeeController.ts @@ -1686,113 +1686,172 @@ export class ProfileEmployeeController extends Controller { queryLike = "profileEmployee.citizenId LIKE :keyword"; } else if (searchField == "position") { queryLike = "profileEmployee.position LIKE :keyword"; - } else if (searchField == "posNo") { - queryLike = ` - CASE - WHEN current_holders.orgChild4Id IS NOT NULL THEN CONCAT(orgChild4.orgChild4ShortName, current_holders.posMasterNo) - WHEN current_holders.orgChild3Id IS NOT NULL THEN CONCAT(orgChild3.orgChild3ShortName, current_holders.posMasterNo) - WHEN current_holders.orgChild2Id IS NOT NULL THEN CONCAT(orgChild2.orgChild2ShortName, current_holders.posMasterNo) - WHEN current_holders.orgChild1Id IS NOT NULL THEN CONCAT(orgChild1.orgChild1ShortName, current_holders.posMasterNo) - ELSE CONCAT(orgRoot.orgRootShortName, current_holders.posMasterNo) - END LIKE :keyword - `; - } + } + // else if (searchField == "posNo") { + // queryLike = ` + // CASE + // WHEN current_holders.orgChild4Id IS NOT NULL THEN CONCAT(orgChild4.orgChild4ShortName, current_holders.posMasterNo) + // WHEN current_holders.orgChild3Id IS NOT NULL THEN CONCAT(orgChild3.orgChild3ShortName, current_holders.posMasterNo) + // WHEN current_holders.orgChild2Id IS NOT NULL THEN CONCAT(orgChild2.orgChild2ShortName, current_holders.posMasterNo) + // WHEN current_holders.orgChild1Id IS NOT NULL THEN CONCAT(orgChild1.orgChild1ShortName, current_holders.posMasterNo) + // ELSE CONCAT(orgRoot.orgRootShortName, current_holders.posMasterNo) + // END LIKE :keyword + // `; + // } let nodeCondition = "1=1"; - let nodeAll = ""; - if (node === 0 && nodeId) { - nodeCondition = "current_holders.orgRootId = :nodeId"; - if (isAll == false) nodeAll = " AND current_holders.orgChild1Id IS NULL"; - } else if (node === 1 && nodeId) { - nodeCondition = "current_holders.orgChild1Id = :nodeId"; - if (isAll == false) nodeAll = " AND current_holders.orgChild2Id IS NULL"; - } else if (node === 2 && nodeId) { - nodeCondition = "current_holders.orgChild2Id = :nodeId"; - if (isAll == false) nodeAll = " AND current_holders.orgChild3Id IS NULL"; - } else if (node === 3 && nodeId) { - nodeCondition = "current_holders.orgChild3Id = :nodeId"; - if (isAll == false) nodeAll = " AND current_holders.orgChild4Id IS NULL"; - } else if (node === 4 && nodeId) { - nodeCondition = "current_holders.orgChild4Id = :nodeId"; - } - nodeCondition = nodeCondition + nodeAll; - const findRevision = await this.orgRevisionRepo.findOne({ - where: { orgRevisionIsCurrent: true }, - }); - if (!findRevision) { - throw new HttpError(HttpStatus.NOT_FOUND, "not found. OrgRevision"); + let nodeAll = ""; + let orgRoot = null; + let orgChild1 = null; + let orgChild2 = null; + let orgChild3 = null; + let orgChild4 = null; + + let pmsCondition = "1=1"; + let orgRootPms = null; + let orgChild1Pms = null; + let orgChild2Pms = null; + let orgChild3Pms = null; + let orgChild4Pms = null; + + if (node === 0 && nodeId) { + orgRoot = await this.orgRootRepository.findOne({where: { id: nodeId }}); + if (orgRoot) { + nodeCondition = "profileSalary.orgRoot = :orgRoot"; + } + if (isAll == false) nodeAll = " AND profileSalary.orgChild1Id IS NULL"; + } else if (node === 1 && nodeId) { + orgChild1 = await this.child1Repository.findOne({where: { id: nodeId }}); + if (orgChild1) { + nodeCondition = "profileSalary.orgChild1 = :orgChild1"; + } + if (isAll == false) nodeAll = " AND profileSalary.orgChild2Id IS NULL"; + } else if (node === 2 && nodeId) { + orgChild2 = await this.child2Repository.findOne({where: { id: nodeId }}); + if (orgChild2) { + nodeCondition = "profileSalary.orgChild2 = :orgChild2"; + } + if (isAll == false) nodeAll = " AND profileSalary.orgChild3Id IS NULL"; + } else if (node === 3 && nodeId) { + orgChild3 = await this.child3Repository.findOne({where: { id: nodeId }}); + if (orgChild3) { + nodeCondition = "profileSalary.orgChild3 = :orgChild3"; + } + if (isAll == false) nodeAll = " AND profileSalary.orgChild4Id IS NULL"; + } else if (node === 4 && nodeId) { + orgChild4 = await this.child4Repository.findOne({where: { id: nodeId }}); + if (orgChild4) { + nodeCondition = "profileSalary.orgChild4Id = :nodeId"; + } + } + nodeCondition = nodeCondition + nodeAll; + + if (_data.root) { + orgRootPms = await this.orgRootRepository.findOne({where: { id: _data.root }}); + if (orgRootPms) { + pmsCondition = "profileSalary.orgRoot = :orgRoot"; + } + } else if (_data.child1) { + orgChild1Pms = await this.child1Repository.findOne({where: { id: _data.child1 }}); + if (orgChild1Pms) { + pmsCondition = "profileSalary.orgChild1 = :orgChild1"; + } + } else if (_data.child2) { + orgChild2Pms = await this.child2Repository.findOne({where: { id: _data.child2 }}); + if (orgChild2Pms) { + pmsCondition = "profileSalary.orgChild2 = :orgChild2"; + } + } else if (_data.child3) { + orgChild3Pms = await this.child3Repository.findOne({where: { id: _data.child3 }}); + if (orgChild3Pms) { + pmsCondition = "profileSalary.orgChild3 = :orgChild3"; + } + } else if (_data.child4) { + orgChild4Pms = await this.child4Repository.findOne({where: { id: _data.child4 }}); + if (orgChild4Pms) { + pmsCondition = "profileSalary.orgChild4 = :orgChild4"; + } } + // const findRevision = await this.orgRevisionRepo.findOne({ + // where: { orgRevisionIsCurrent: true }, + // }); + // if (!findRevision) { + // throw new HttpError(HttpStatus.NOT_FOUND, "not found. OrgRevision"); + // } const [record, total] = await this.profileRepo .createQueryBuilder("profileEmployee") .leftJoinAndSelect("profileEmployee.posLevel", "posLevel") .leftJoinAndSelect("profileEmployee.posType", "posType") - .leftJoinAndSelect("profileEmployee.current_holders", "current_holders") + // .leftJoinAndSelect("profileEmployee.current_holders", "current_holders") .leftJoinAndSelect("profileEmployee.profileEmployeeEmployment", "profileEmployeeEmployment") - .leftJoinAndSelect("current_holders.positions", "positions") - .leftJoinAndSelect("current_holders.orgRevision", "orgRevision") - .leftJoinAndSelect("current_holders.orgRoot", "orgRoot") - .leftJoinAndSelect("current_holders.orgChild1", "orgChild1") - .leftJoinAndSelect("current_holders.orgChild2", "orgChild2") - .leftJoinAndSelect("current_holders.orgChild3", "orgChild3") - .leftJoinAndSelect("current_holders.orgChild4", "orgChild4") - .where(node && nodeId ? "current_holders.orgRevisionId = :orgRevisionId" : "1=1", { - orgRevisionId: node && nodeId ? findRevision.id : undefined, - }) - .andWhere( - new Brackets(qb => { - qb.where("profileEmployee.isLeave IS TRUE") - .orWhere("profileEmployee.isRetirement IS TRUE"); + // .leftJoinAndSelect("current_holders.positions", "positions") + .leftJoinAndSelect("profileEmployee.profileSalary", "profileSalary") + // .leftJoinAndSelect("current_holders.orgRevision", "orgRevision") + // .leftJoinAndSelect("current_holders.orgRoot", "orgRoot") + // .leftJoinAndSelect("current_holders.orgChild1", "orgChild1") + // .leftJoinAndSelect("current_holders.orgChild2", "orgChild2") + // .leftJoinAndSelect("current_holders.orgChild3", "orgChild3") + // .leftJoinAndSelect("current_holders.orgChild4", "orgChild4") + // .where(node && nodeId ? "current_holders.orgRevisionId = :orgRevisionId" : "1=1", { + // orgRevisionId: node && nodeId ? findRevision.id : undefined, + // }) + .where( + new Brackets((qb) => { + qb.where("profileEmployee.isLeave = :isLeave", { isLeave: true }) + .orWhere("profileEmployee.isRetirement = :isRetirement", { isRetirement: true }); }) ) - .andWhere( - _data.root != undefined && _data.root != null - ? _data.root[0] != null - ? `current_holders.orgRootId IN (:...root)` - : `current_holders.orgRootId is null` - : "1=1", - { - root: _data.root, - }, - ) - .andWhere( - _data.child1 != undefined && _data.child1 != null - ? _data.child1[0] != null - ? `current_holders.orgChild1Id IN (:...child1)` - : `current_holders.orgChild1Id is null` - : "1=1", - { - child1: _data.child1, - }, - ) - .andWhere( - _data.child2 != undefined && _data.child2 != null - ? _data.child2[0] != null - ? `current_holders.orgChild2Id IN (:...child2)` - : `current_holders.orgChild2Id is null` - : "1=1", - { - child2: _data.child2, - }, - ) - .andWhere( - _data.child3 != undefined && _data.child3 != null - ? _data.child3[0] != null - ? `current_holders.orgChild3Id IN (:...child3)` - : `current_holders.orgChild3Id is null` - : "1=1", - { - child3: _data.child3, - }, - ) - .andWhere( - _data.child4 != undefined && _data.child4 != null - ? _data.child4[0] != null - ? `current_holders.orgChild4Id IN (:...child4)` - : `current_holders.orgChild4Id is null` - : "1=1", - { - child4: _data.child4, - }, - ) + .andWhere("profileSalary.order = (SELECT MAX(ps.order) FROM profileSalary ps WHERE ps.profileEmployeeId = profileEmployee.id)") + + // .andWhere( + // _data.root != undefined && _data.root != null + // ? _data.root[0] != null + // ? `current_holders.orgRootId IN (:...root)` + // : `current_holders.orgRootId is null` + // : "1=1", + // { + // root: _data.root, + // }, + // ) + // .andWhere( + // _data.child1 != undefined && _data.child1 != null + // ? _data.child1[0] != null + // ? `current_holders.orgChild1Id IN (:...child1)` + // : `current_holders.orgChild1Id is null` + // : "1=1", + // { + // child1: _data.child1, + // }, + // ) + // .andWhere( + // _data.child2 != undefined && _data.child2 != null + // ? _data.child2[0] != null + // ? `current_holders.orgChild2Id IN (:...child2)` + // : `current_holders.orgChild2Id is null` + // : "1=1", + // { + // child2: _data.child2, + // }, + // ) + // .andWhere( + // _data.child3 != undefined && _data.child3 != null + // ? _data.child3[0] != null + // ? `current_holders.orgChild3Id IN (:...child3)` + // : `current_holders.orgChild3Id is null` + // : "1=1", + // { + // child3: _data.child3, + // }, + // ) + // .andWhere( + // _data.child4 != undefined && _data.child4 != null + // ? _data.child4[0] != null + // ? `current_holders.orgChild4Id IN (:...child4)` + // : `current_holders.orgChild4Id is null` + // : "1=1", + // { + // child4: _data.child4, + // }, + // ) .andWhere( posType != undefined && posType != null && posType != "" ? "posType.posTypeName LIKE :keyword1" @@ -1814,15 +1873,6 @@ export class ProfileEmployeeController extends Controller { ? `profileEmployee.isProbation = ${isProbation}` : "1=1", ) - // .andWhere( - // isRetire != undefined && isRetire != null - // ? isRetire == false - // ? `profileEmployee.isLeave IS FALSE` - // : isRetire == true && retireType != undefined && retireType != null - // ? `profileEmployee.isLeave IS TRUE AND profileEmployee.leaveType = '${retireType}'` - // : `profileEmployee.isLeave IS TRUE` - // : "1=1", - // ) .andWhere("profileEmployee.employeeClass LIKE :type", { type: "PERM", }) @@ -1834,89 +1884,101 @@ export class ProfileEmployeeController extends Controller { keyword: `%${searchKeyword}%`, }, ) + .andWhere(pmsCondition, { + orgRoot: orgRootPms ? orgRootPms.orgRootName : undefined, + orgChild1: orgChild1Pms ? orgChild1Pms.orgChild1Name : undefined, + orgChild2: orgChild2Pms ? orgChild2Pms.orgChild2Name : undefined, + orgChild3: orgChild3Pms ? orgChild3Pms.orgChild3Name : undefined, + orgChild4: orgChild4Pms ? orgChild4Pms.orgChild4Name : undefined, + }) + .andWhere(nodeCondition, { - nodeId: nodeId, + orgRoot: orgRoot ? orgRoot.orgRootName : undefined, + orgChild1: orgChild1 ? orgChild1.orgChild1Name : undefined, + orgChild2: orgChild2 ? orgChild2.orgChild2Name : undefined, + orgChild3: orgChild3 ? orgChild3.orgChild3Name : undefined, + orgChild4: orgChild4 ? orgChild4.orgChild4Name : undefined, }) // .andWhere(`current_holders.orgRevisionId LIKE :orgRevisionId`, { // orgRevisionId: findRevision.id, // }) // .orderBy("current_holders.posMasterNo", "ASC") - .orderBy(`${sortBy}`, sort) + // .orderBy(`${sortBy}`, sort) .skip((page - 1) * pageSize) .take(pageSize) .getManyAndCount(); const data = await Promise.all( record.map((_data) => { - const shortName = - _data.current_holders.length == 0 - ? null - : _data.current_holders.find((x) => x.orgRevisionId == findRevision.id) != null && - _data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.orgChild4 != - null - ? `${_data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.orgChild4.orgChild4ShortName}${_data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.posMasterNo}` - : _data.current_holders.find((x) => x.orgRevisionId == findRevision.id) != null && - _data.current_holders.find((x) => x.orgRevisionId == findRevision.id) - ?.orgChild3 != null - ? `${_data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.orgChild3.orgChild3ShortName}${_data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.posMasterNo}` - : _data.current_holders.find((x) => x.orgRevisionId == findRevision.id) != null && - _data.current_holders.find((x) => x.orgRevisionId == findRevision.id) - ?.orgChild2 != null - ? `${_data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.orgChild2.orgChild2ShortName}${_data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.posMasterNo}` - : _data.current_holders.find((x) => x.orgRevisionId == findRevision.id) != null && - _data.current_holders.find((x) => x.orgRevisionId == findRevision.id) - ?.orgChild1 != null - ? `${_data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.orgChild1.orgChild1ShortName}${_data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.posMasterNo}` - : _data.current_holders.find((x) => x.orgRevisionId == findRevision.id) != - null && - _data.current_holders.find((x) => x.orgRevisionId == findRevision.id) - ?.orgRoot != null - ? `${_data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.orgRoot.orgRootShortName}${_data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.posMasterNo}` - : null; + // const shortName = + // _data.current_holders.length == 0 + // ? null + // : _data.current_holders.find((x) => x.orgRevisionId == findRevision.id) != null && + // _data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.orgChild4 != + // null + // ? `${_data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.orgChild4.orgChild4ShortName}${_data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.posMasterNo}` + // : _data.current_holders.find((x) => x.orgRevisionId == findRevision.id) != null && + // _data.current_holders.find((x) => x.orgRevisionId == findRevision.id) + // ?.orgChild3 != null + // ? `${_data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.orgChild3.orgChild3ShortName}${_data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.posMasterNo}` + // : _data.current_holders.find((x) => x.orgRevisionId == findRevision.id) != null && + // _data.current_holders.find((x) => x.orgRevisionId == findRevision.id) + // ?.orgChild2 != null + // ? `${_data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.orgChild2.orgChild2ShortName}${_data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.posMasterNo}` + // : _data.current_holders.find((x) => x.orgRevisionId == findRevision.id) != null && + // _data.current_holders.find((x) => x.orgRevisionId == findRevision.id) + // ?.orgChild1 != null + // ? `${_data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.orgChild1.orgChild1ShortName}${_data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.posMasterNo}` + // : _data.current_holders.find((x) => x.orgRevisionId == findRevision.id) != + // null && + // _data.current_holders.find((x) => x.orgRevisionId == findRevision.id) + // ?.orgRoot != null + // ? `${_data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.orgRoot.orgRootShortName}${_data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.posMasterNo}` + // : null; const dateEmployment = _data.profileEmployeeEmployment.length == 0 ? null : _data.profileEmployeeEmployment.reduce((latest, current) => { return latest.date > current.date ? latest : current; }).date; - const root = - _data.current_holders.length == 0 || - (_data.current_holders.find((x) => x.orgRevisionId == findRevision.id) != null && - _data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.orgRoot == null) - ? null - : _data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.orgRoot; + // const root = + // _data.current_holders.length == 0 || + // (_data.current_holders.find((x) => x.orgRevisionId == findRevision.id) != null && + // _data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.orgRoot == null) + // ? null + // : _data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.orgRoot; - const child1 = - _data.current_holders == null || - _data.current_holders.length == 0 || - _data.current_holders.find((x) => x.orgRevisionId == findRevision.id) == null - ? null - : _data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.orgChild1; + // const child1 = + // _data.current_holders == null || + // _data.current_holders.length == 0 || + // _data.current_holders.find((x) => x.orgRevisionId == findRevision.id) == null + // ? null + // : _data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.orgChild1; - const child2 = - _data.current_holders == null || - _data.current_holders.length == 0 || - _data.current_holders.find((x) => x.orgRevisionId == findRevision.id) == null - ? null - : _data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.orgChild2; + // const child2 = + // _data.current_holders == null || + // _data.current_holders.length == 0 || + // _data.current_holders.find((x) => x.orgRevisionId == findRevision.id) == null + // ? null + // : _data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.orgChild2; - const child3 = - _data.current_holders == null || - _data.current_holders.length == 0 || - _data.current_holders.find((x) => x.orgRevisionId == findRevision.id) == null - ? null - : _data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.orgChild3; + // const child3 = + // _data.current_holders == null || + // _data.current_holders.length == 0 || + // _data.current_holders.find((x) => x.orgRevisionId == findRevision.id) == null + // ? null + // : _data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.orgChild3; - const child4 = - _data.current_holders == null || - _data.current_holders.length == 0 || - _data.current_holders.find((x) => x.orgRevisionId == findRevision.id) == null - ? null - : _data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.orgChild4; + // const child4 = + // _data.current_holders == null || + // _data.current_holders.length == 0 || + // _data.current_holders.find((x) => x.orgRevisionId == findRevision.id) == null + // ? null + // : _data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.orgChild4; - let _child1 = child1?.orgChild1Name; - let _child2 = child2?.orgChild2Name; - let _child3 = child3?.orgChild3Name; - let _child4 = child4?.orgChild4Name; + // let _child1 = child1?.orgChild1Name; + // let _child2 = child2?.orgChild2Name; + // let _child3 = child3?.orgChild3Name; + // let _child4 = child4?.orgChild4Name; return { id: _data.id, prefix: _data.prefix, @@ -1932,7 +1994,7 @@ export class ProfileEmployeeController extends Controller { positionId: _data.positionIdTemp, posmasterId: _data.posmasterIdTemp, position: _data.position, - posNo: _data.employeeClass == "TEMP" ? _data.posMasterNoTemp : shortName, + posNo: _data.profileSalary[0].posNoAbb == "" ? "" : _data.profileSalary[0].posNoAbb + _data.profileSalary[0].posNo == "" ? "" : _data.profileSalary[0].posNo, employeeClass: _data.employeeClass == null ? null : _data.employeeClass, govAge: Extension.CalculateGovAge(_data.dateAppoint, 0, 0), age: Extension.CalculateAgeStrV2(_data.birthDate, 0, 0), @@ -1996,11 +2058,11 @@ export class ProfileEmployeeController extends Controller { child4: _data.child4Temp ? _data.child4Temp : null, child4Id: _data.child4IdTemp ? _data.child4IdTemp : null, child4ShortName: _data.child4ShortNameTemp ? _data.child4ShortNameTemp : null, - org: (_child4 == null ? "" : _child4 + "\n") + - (_child3 == null ? "" : _child3 + "\n") + - (_child2 == null ? "" : _child2 + "\n") + - (_child1 == null ? "" : _child1 + "\n") + - (root?.orgRootName == null ? "" : root?.orgRootName), + org: (_data.profileSalary[0].orgChild4 == null ? "" : _data.profileSalary[0].orgChild4 + "\n") + + (_data.profileSalary[0].orgChild3 == null ? "" : _data.profileSalary[0].orgChild3 + "\n") + + (_data.profileSalary[0].orgChild2 == null ? "" : _data.profileSalary[0].orgChild2 + "\n") + + (_data.profileSalary[0].orgChild1 == null ? "" : _data.profileSalary[0].orgChild1 + "\n") + + (_data.profileSalary[0].orgRoot == null ? "" : _data.profileSalary[0].orgRoot), }; }), );