From 038eb3784246b587726ebcc074c0a8d4724f8dc0 Mon Sep 17 00:00:00 2001 From: waruneeauy Date: Fri, 25 Oct 2024 13:36:47 +0700 Subject: [PATCH 1/2] probation add root id & child id persons --- src/controllers/ProfileController.ts | 564 +++++++++++++++------------ 1 file changed, 307 insertions(+), 257 deletions(-) diff --git a/src/controllers/ProfileController.ts b/src/controllers/ProfileController.ts index 0f80e20c..b68cfbcd 100644 --- a/src/controllers/ProfileController.ts +++ b/src/controllers/ProfileController.ts @@ -5212,6 +5212,56 @@ export class ProfileController extends Controller { ? null : item.current_holders.find((x) => x.orgRevisionId == orgRevisionActive?.id) ?.orgChild4?.orgChild4Name, + root: + item.current_holders == null || + item.current_holders.find((x) => x.orgRevisionId == orgRevisionActive?.id) == null || + item.current_holders.find((x) => x.orgRevisionId == orgRevisionActive?.id)?.orgRoot == + null || + item.current_holders.find((x) => x.orgRevisionId == orgRevisionActive?.id)?.orgRoot + ?.orgRootName == null + ? null + : item.current_holders.find((x) => x.orgRevisionId == orgRevisionActive?.id)?.orgRoot + ?.id, + orgChild1: + item.current_holders == null || + item.current_holders.find((x) => x.orgRevisionId == orgRevisionActive?.id) == null || + item.current_holders.find((x) => x.orgRevisionId == orgRevisionActive?.id)?.orgChild1 == + null || + item.current_holders.find((x) => x.orgRevisionId == orgRevisionActive?.id)?.orgChild1 + ?.orgChild1Name == null + ? null + : item.current_holders.find((x) => x.orgRevisionId == orgRevisionActive?.id) + ?.orgChild1?.id, + orgChild2: + item.current_holders == null || + item.current_holders.find((x) => x.orgRevisionId == orgRevisionActive?.id) == null || + item.current_holders.find((x) => x.orgRevisionId == orgRevisionActive?.id)?.orgChild2 == + null || + item.current_holders.find((x) => x.orgRevisionId == orgRevisionActive?.id)?.orgChild2 + ?.orgChild2Name == null + ? null + : item.current_holders.find((x) => x.orgRevisionId == orgRevisionActive?.id) + ?.orgChild2?.id, + orgChild3: + item.current_holders == null || + item.current_holders.find((x) => x.orgRevisionId == orgRevisionActive?.id) == null || + item.current_holders.find((x) => x.orgRevisionId == orgRevisionActive?.id)?.orgChild3 == + null || + item.current_holders.find((x) => x.orgRevisionId == orgRevisionActive?.id)?.orgChild3 + ?.orgChild3Name == null + ? null + : item.current_holders.find((x) => x.orgRevisionId == orgRevisionActive?.id) + ?.orgChild3?.id, + orgChild4: + item.current_holders == null || + item.current_holders.find((x) => x.orgRevisionId == orgRevisionActive?.id) == null || + item.current_holders.find((x) => x.orgRevisionId == orgRevisionActive?.id)?.orgChild4 == + null || + item.current_holders.find((x) => x.orgRevisionId == orgRevisionActive?.id)?.orgChild4 + ?.orgChild4Name == null + ? null + : item.current_holders.find((x) => x.orgRevisionId == orgRevisionActive?.id) + ?.orgChild4?.id, }; }), ); @@ -6566,78 +6616,78 @@ export class ProfileController extends Controller { return new HttpSuccess(); } - /** + /** * API รายการทะเบียนประวัติในระบบอื่น * * @summary ORG_065 - รายการทะเบียนประวัติในระบบอื่น * */ - @Get("otherSystem") - @Example({ - status: 200, - message: "สำเร็จ", - result: { - data: [ - { - id: "ecb0b34c-037e-41f2-b95e-7e19f88b42ae", - createdAt: "2024-03-24T12:39:12.105Z", - createdUserId: "00000000-0000-0000-0000-000000000000", - lastUpdatedAt: "2024-03-24T12:41:43.164Z", - lastUpdateUserId: "00000000-0000-0000-0000-000000000000", - createdFullName: "string", - lastUpdateFullName: "string", - rank: null, - prefix: null, - firstName: "Methapon", - lastName: "Metanipat", - citizenId: null, - position: null, - posLevelId: null, - posTypeId: null, - email: null, - phone: null, - keycloak: null, - isProbation: false, - dateRetire: null, - birthDate: null, - ethnicity: null, - telephoneNumber: null, - gender: null, - relationship: null, - bloodGroup: null, - posLevel: null, - posType: null, - org: null, - }, - ], - total: 1, - }, - }) - async listProfileNoPermission( - @Request() request: RequestWithUser, - @Query("page") page: number = 1, - @Query("pageSize") pageSize: number = 10, - @Query() - searchField?: "firstName" | "lastName" | "fullName" | "citizenId" | "position" | "posNo", - @Query() searchKeyword: string = "", - @Query() posType?: string, - @Query() posLevel?: string, - @Query() yearLeave?: number, - @Query() isProbation?: boolean, - @Query() isRetire?: boolean, - @Query() node?: number, - @Query() nodeId?: string, - @Query() isAll?: boolean, - ) { + @Get("otherSystem") + @Example({ + status: 200, + message: "สำเร็จ", + result: { + data: [ + { + id: "ecb0b34c-037e-41f2-b95e-7e19f88b42ae", + createdAt: "2024-03-24T12:39:12.105Z", + createdUserId: "00000000-0000-0000-0000-000000000000", + lastUpdatedAt: "2024-03-24T12:41:43.164Z", + lastUpdateUserId: "00000000-0000-0000-0000-000000000000", + createdFullName: "string", + lastUpdateFullName: "string", + rank: null, + prefix: null, + firstName: "Methapon", + lastName: "Metanipat", + citizenId: null, + position: null, + posLevelId: null, + posTypeId: null, + email: null, + phone: null, + keycloak: null, + isProbation: false, + dateRetire: null, + birthDate: null, + ethnicity: null, + telephoneNumber: null, + gender: null, + relationship: null, + bloodGroup: null, + posLevel: null, + posType: null, + org: null, + }, + ], + total: 1, + }, + }) + async listProfileNoPermission( + @Request() request: RequestWithUser, + @Query("page") page: number = 1, + @Query("pageSize") pageSize: number = 10, + @Query() + searchField?: "firstName" | "lastName" | "fullName" | "citizenId" | "position" | "posNo", + @Query() searchKeyword: string = "", + @Query() posType?: string, + @Query() posLevel?: string, + @Query() yearLeave?: number, + @Query() isProbation?: boolean, + @Query() isRetire?: boolean, + @Query() node?: number, + @Query() nodeId?: string, + @Query() isAll?: boolean, + ) { // let _data = await new permission().PermissionOrgList(request, "SYS_REGISTRY_OFFICER"); - let queryLike = - "CONCAT(profile.prefix, profile.firstName, ' ', profile.lastName) LIKE :keyword"; - if (searchField == "citizenId") { - queryLike = "profile.citizenId LIKE :keyword"; - } else if (searchField == "position") { - queryLike = "profile.position LIKE :keyword"; - } else if (searchField == "posNo") { - queryLike = `CONCAT( + let queryLike = + "CONCAT(profile.prefix, profile.firstName, ' ', profile.lastName) LIKE :keyword"; + if (searchField == "citizenId") { + queryLike = "profile.citizenId LIKE :keyword"; + } else if (searchField == "position") { + queryLike = "profile.position LIKE :keyword"; + } else if (searchField == "posNo") { + queryLike = `CONCAT( IFNULL(orgChild4.orgChild4ShortName, ''), IFNULL(orgChild3.orgChild3ShortName, ''), IFNULL(orgChild2.orgChild2ShortName, ''), @@ -6645,37 +6695,37 @@ export class ProfileController extends Controller { IFNULL(orgRoot.orgRootShortName, ''), IFNULL(current_holders.posMasterNo , '') ) 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 [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.orgRoot", "orgRoot") - .leftJoinAndSelect("current_holders.orgChild1", "orgChild1") - .leftJoinAndSelect("current_holders.orgChild2", "orgChild2") - .leftJoinAndSelect("current_holders.orgChild3", "orgChild3") - .leftJoinAndSelect("current_holders.orgChild4", "orgChild4") + } + 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 [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.orgRoot", "orgRoot") + .leftJoinAndSelect("current_holders.orgChild1", "orgChild1") + .leftJoinAndSelect("current_holders.orgChild2", "orgChild2") + .leftJoinAndSelect("current_holders.orgChild3", "orgChild3") + .leftJoinAndSelect("current_holders.orgChild4", "orgChild4") // .andWhere( // _data.root != undefined && _data.root != null // ? _data.root[0] != null @@ -6726,164 +6776,164 @@ export class ProfileController extends Controller { // 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.dateLeave IS NOT NULL` - : "1=1", - ) - .andWhere( - searchKeyword != undefined && searchKeyword != null && searchKeyword != "" - ? queryLike - : "1=1", - { - keyword: `%${searchKeyword}%`, - }, - ) - .andWhere(nodeCondition, { - nodeId: nodeId, - }) - .skip((page - 1) * pageSize) - .take(pageSize) - .getManyAndCount(); - - const findRevision = await this.orgRevisionRepo.findOne({ - where: { orgRevisionIsCurrent: true }, - }); - if (!findRevision) { - throw new HttpError(HttpStatus.NOT_FOUND, "not found. OrgRevision"); - } - 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 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 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 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 == null ? "" : `${child1.orgChild1Name}/`; - let _child2 = child2 == null ? "" : `${child2.orgChild2Name}/`; - let _child3 = child3 == null ? "" : `${child3.orgChild3Name}/`; - let _child4 = child4 == null ? "" : `${child4.orgChild4Name}/`; - - return { - id: _data.id, - avatar: _data.avatar, - avatarName: _data.avatarName, - prefix: _data.prefix, - rank: _data.rank, - 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}${_child3}${_child2}${_child1}${root?.orgRootName ?? ""}`, - }; - }), - ); - - return new HttpSuccess({ data: data, total }); - } + .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.dateLeave IS NOT NULL` + : "1=1", + ) + .andWhere( + searchKeyword != undefined && searchKeyword != null && searchKeyword != "" + ? queryLike + : "1=1", + { + keyword: `%${searchKeyword}%`, + }, + ) + .andWhere(nodeCondition, { + nodeId: nodeId, + }) + .skip((page - 1) * pageSize) + .take(pageSize) + .getManyAndCount(); + + const findRevision = await this.orgRevisionRepo.findOne({ + where: { orgRevisionIsCurrent: true }, + }); + if (!findRevision) { + throw new HttpError(HttpStatus.NOT_FOUND, "not found. OrgRevision"); + } + 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 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 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 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 == null ? "" : `${child1.orgChild1Name}/`; + let _child2 = child2 == null ? "" : `${child2.orgChild2Name}/`; + let _child3 = child3 == null ? "" : `${child3.orgChild3Name}/`; + let _child4 = child4 == null ? "" : `${child4.orgChild4Name}/`; + + return { + id: _data.id, + avatar: _data.avatar, + avatarName: _data.avatarName, + prefix: _data.prefix, + rank: _data.rank, + 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}${_child3}${_child2}${_child1}${root?.orgRootName ?? ""}`, + }; + }), + ); + + return new HttpSuccess({ data: data, total }); + } } From eecc6f22c902c0af1c6f0aebdefc083a6d6640ed Mon Sep 17 00:00:00 2001 From: Bright Date: Fri, 25 Oct 2024 14:36:32 +0700 Subject: [PATCH 2/2] =?UTF-8?q?fix=20=E0=B8=9B=E0=B8=A5=E0=B8=94=E0=B8=95?= =?UTF-8?q?=E0=B8=B3=E0=B9=81=E0=B8=AB=E0=B8=99=E0=B9=88=E0=B8=87/?= =?UTF-8?q?=E0=B8=A5=E0=B8=9Akeycloak=20=E0=B8=84=E0=B8=B3=E0=B8=AA?= =?UTF-8?q?=E0=B8=B1=E0=B9=88=E0=B8=87=2012,=2013,=2017,=2018,=2019,=2020,?= =?UTF-8?q?=2023,?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/controllers/CommandController.ts | 58 +++++++++++++++++++++++++++- src/controllers/UserController.ts | 2 +- src/interfaces/utils.ts | 16 ++++++++ 3 files changed, 73 insertions(+), 3 deletions(-) diff --git a/src/controllers/CommandController.ts b/src/controllers/CommandController.ts index b53d192b..b15f828d 100644 --- a/src/controllers/CommandController.ts +++ b/src/controllers/CommandController.ts @@ -39,6 +39,7 @@ import { commandTypePath, removeProfileInOrganize, setLogDataDiff, + checkCommandType } from "../interfaces/utils"; import { Position } from "../entities/Position"; import { PosMaster } from "../entities/PosMaster"; @@ -50,7 +51,7 @@ import { PosMasterAct } from "../entities/PosMasterAct"; import { sendToQueue } from "../services/rabbitmq"; import { PosLevel } from "../entities/PosLevel"; import { PosType } from "../entities/PosType"; -import { addUserRoles, createUser, getRoles } from "../keycloak"; +import { addUserRoles, createUser, getRoles, deleteUser } from "../keycloak"; import { ProfileEducation, CreateProfileEducation } from "../entities/ProfileEducation"; import { ProfileEducationHistory } from "../entities/ProfileEducationHistory"; import { CreateProfileCertificate, ProfileCertificate } from "../entities/ProfileCertificate"; @@ -1826,6 +1827,16 @@ export class CommandController extends Controller { if (item.isLeave == true) { await removeProfileInOrganize(profile.id, "OFFICER"); } + const clearProfile = await checkCommandType(String(item.commandId)); + if(clearProfile) { + if(profile.keycloak != null) { + const delUserKeycloak = await deleteUser(profile.keycloak); + if (delUserKeycloak) profile.keycloak = _null; + } + profile.position = _null; + profile.posTypeId = _null; + profile.posLevelId = _null; + } await this.profileRepository.save(profile); }), ); @@ -1854,6 +1865,7 @@ export class CommandController extends Controller { leaveReason?: string | null; dateLeave?: Date | null; isGovernment?: boolean | null; + commandId?: string | null; }[]; }, ) { @@ -1905,6 +1917,16 @@ export class CommandController extends Controller { if (item.isLeave == true) { await removeProfileInOrganize(profile.id, "EMPLOYEE"); } + const clearProfile = await checkCommandType(String(item.commandId)); + if(clearProfile) { + if(profile.keycloak != null) { + const delUserKeycloak = await deleteUser(profile.keycloak); + if (delUserKeycloak) profile.keycloak = _null; + } + profile.position = _null; + profile.posTypeId = _null; + profile.posLevelId = _null; + } await this.profileEmployeeRepository.save(profile); }), ); @@ -1959,7 +1981,18 @@ export class CommandController extends Controller { createdAt: new Date(), lastUpdatedAt: new Date(), }; - + const clearProfile = await checkCommandType(String(item.commandId)); + const _null: any = null; + if(clearProfile) { + if(profile.keycloak != null) { + const delUserKeycloak = await deleteUser(profile.keycloak); + if (delUserKeycloak) profile.keycloak = _null; + } + profile.position = _null; + profile.posTypeId = _null; + profile.posLevelId = _null; + await this.profileRepository.save(profile, {data: req}); + } Object.assign(data, { ...item, ...meta }); const history = new ProfileSalaryHistory(); Object.assign(history, { ...data, id: undefined }); @@ -2155,6 +2188,16 @@ export class CommandController extends Controller { if (item.isLeave == true) { await removeProfileInOrganize(profile.id, "OFFICER"); } + const clearProfile = await checkCommandType(String(item.commandId)); + if(clearProfile) { + if(profile.keycloak != null) { + const delUserKeycloak = await deleteUser(profile.keycloak); + if (delUserKeycloak) profile.keycloak = _null; + } + profile.position = _null; + profile.posTypeId = _null; + profile.posLevelId = _null; + } await this.profileRepository.save(profile); } }), @@ -2327,6 +2370,17 @@ export class CommandController extends Controller { dateGovernment: new Date(), isGovernment: item.isGovernment, }); + const clearProfile = await checkCommandType(String(item.commandId)); + const _null: any = null; + if(clearProfile) { + if(_profile.keycloak != null) { + const delUserKeycloak = await deleteUser(_profile.keycloak); + if (delUserKeycloak) _profile.keycloak = _null; + } + _profile.position = _null; + _profile.posTypeId = _null; + _profile.posLevelId = _null; + } await Promise.all([ this.profileRepository.save(_profile), this.salaryRepo.save(profileSalary), diff --git a/src/controllers/UserController.ts b/src/controllers/UserController.ts index c04b82c5..deedb4b2 100644 --- a/src/controllers/UserController.ts +++ b/src/controllers/UserController.ts @@ -187,7 +187,7 @@ export class KeycloakController extends Controller { const profile = await this.profileRepo.findOne({ where: { - id: userId, + keycloak: userId, }, }); diff --git a/src/interfaces/utils.ts b/src/interfaces/utils.ts index b6b9a9a0..826df67f 100644 --- a/src/interfaces/utils.ts +++ b/src/interfaces/utils.ts @@ -6,6 +6,7 @@ import { EmployeePosMaster } from "../entities/EmployeePosMaster"; import { EmployeePosition } from "../entities/EmployeePosition"; import { In } from "typeorm"; import { RequestWithUser } from "../middlewares/user"; +import { Command } from "../entities/Command"; export function calculateAge(start: Date, end = new Date()) { if (start.getTime() > end.getTime()) return null; @@ -173,6 +174,21 @@ export async function removeProfileInOrganize(profileId: string, type: string) { .execute(); } } + +export async function checkCommandType(commandId: string) { + const commandRepository = AppDataSource.getRepository(Command); + const _type = await commandRepository.findOne({ + where: { + id: commandId + }, + relations: ["commandType"], + }); + if (!["C-PM-12", "C-PM-13", "C-PM-17", "C-PM-18", "C-PM-23", "C-PM-19", "C-PM-20"].includes(String(_type?.commandType.code))) { + return false; + } + return true; +} + //logs export type DataDiff = { before: any;