import { ViewColumn, ViewEntity } from "typeorm"; @ViewEntity({ expression: ` WITH Position AS ( SELECT posExecutive.posExecutiveName, pn.posMasterId, ROW_NUMBER() OVER (PARTITION BY pn.posMasterId) AS pn_number FROM position pn LEFT JOIN posExecutive ON pn.posExecutiveId = posExecutive.id WHERE pn.positionIsSelected IS TRUE ), PosMaster AS ( SELECT pm.current_holderId, pm.posMasterNo, pm.orgRootId, pm.orgChild1Id, pm.orgChild2Id, pm.orgChild3Id, pm.orgChild4Id, orgRoot.orgRootName, orgChild1.orgChild1Name, orgChild2.orgChild2Name, orgChild3.orgChild3Name, orgChild4.orgChild4Name, pn.posExecutiveName, CASE WHEN pm.orgChild1Id IS NULL THEN CONCAT(orgRoot.orgRootShortName, pm.posMasterNo) WHEN pm.orgChild2Id IS NULL THEN CONCAT(orgChild1.orgChild1ShortName, pm.posMasterNo) WHEN pm.orgChild3Id IS NULL THEN CONCAT(orgChild2.orgChild2ShortName, pm.posMasterNo) WHEN pm.orgChild4Id IS NULL THEN CONCAT(orgChild3.orgChild3ShortName, pm.posMasterNo) ELSE CONCAT(orgChild4.orgChild4ShortName, pm.posMasterNo) END AS searchShortName, ROW_NUMBER() OVER (PARTITION BY pm.current_holderId ORDER BY pm.posMasterNo DESC) AS pm_number FROM posMaster pm LEFT JOIN orgRevision ON orgRevision.id = pm.orgRevisionId LEFT JOIN orgRoot ON orgRoot.id = pm.orgRootId LEFT JOIN orgChild1 ON orgChild1.id = pm.orgChild1Id LEFT JOIN orgChild2 ON orgChild2.id = pm.orgChild2Id LEFT JOIN orgChild3 ON orgChild3.id = pm.orgChild3Id LEFT JOIN orgChild4 ON orgChild4.id = pm.orgChild4Id LEFT JOIN Position pn ON pm.id = pn.posMasterId AND pn.pn_number = 1 WHERE orgRevision.orgRevisionIsCurrent IS TRUE AND orgRevision.orgRevisionIsDraft IS FALSE ), Education AS ( SELECT ed.degree, ed.profileId, ed.level, ROW_NUMBER() OVER (PARTITION BY ed.profileId ORDER BY ed.level DESC) AS ed_number FROM profileEducation ed WHERE ed.isUse IS TRUE ORDER BY ed.level ASC ) SELECT p.citizenId, p.prefix, p.firstName, p.lastName, p.isProbation, p.isLeave, p.isRetirement, p.leaveType, pm.posMasterNo, pm.orgRootId, pm.orgChild1Id, pm.orgChild2Id, pm.orgChild3Id, pm.orgChild4Id, pm.orgRootName, pm.orgChild1Name, pm.orgChild2Name, pm.orgChild3Name, pm.orgChild4Name, CASE WHEN pm.orgChild1Id IS NULL THEN pm.orgRootName WHEN pm.orgChild2Id IS NULL THEN CONCAT(pm.orgChild1Name, " ", pm.orgRootName) WHEN pm.orgChild3Id IS NULL THEN CONCAT(pm.orgChild2Name, " ", pm.orgChild1Name, " ", pm.orgRootName) WHEN pm.orgChild4Id IS NULL THEN CONCAT(pm.orgChild3Name, " ", pm.orgChild2Name, " ", pm.orgChild1Name, " ", pm.orgRootName) ELSE CONCAT(pm.orgChild4Name, " ", pm.orgChild3Name, " ", pm.orgChild2Name, " ", pm.orgChild1Name, " ", pm.orgRootName) END AS org, pm.searchShortName, pm.posExecutiveName, p.position, posType.posTypeName, posLevel.posLevelName, p.gender, p.relationship, p.dateAppoint, p.birthdate, ed.degree, TIMESTAMPDIFF(YEAR, p.birthdate, CURDATE()) AS age FROM profile p LEFT JOIN posLevel ON p.posLevelId = posLevel.id LEFT JOIN posType ON p.posTypeId = posType.id LEFT JOIN PosMaster pm ON p.id = pm.current_holderId AND pm.pm_number = 1 LEFT JOIN Education ed ON p.id = ed.profileId AND ed.ed_number = 1 `, }) export class viewRegistryOfficer { @ViewColumn() id: string; @ViewColumn() prefix: string; @ViewColumn() firstName: string; @ViewColumn() lastName: string; @ViewColumn() isProbation: boolean; @ViewColumn() isLeave: boolean; @ViewColumn() isRetirement: boolean; @ViewColumn() leaveType: string; @ViewColumn() posMasterNo: string; @ViewColumn() orgRootId: string; @ViewColumn() orgChild1Id: string; @ViewColumn() orgChild2Id: string; @ViewColumn() orgChild3Id: string; @ViewColumn() orgChild4Id: string; @ViewColumn() orgRootName: string; @ViewColumn() orgChild1Name: string; @ViewColumn() orgChild2Name: string; @ViewColumn() orgChild3Name: string; @ViewColumn() orgChild4Name: string; @ViewColumn() org: string; @ViewColumn() searchShortName: string; @ViewColumn() posExecutiveName: string; @ViewColumn() position: string; @ViewColumn() posTypeName: string; @ViewColumn() posLevelName: string; @ViewColumn() gender: string; @ViewColumn() relationship: string; @ViewColumn() dateAppoint: Date; @ViewColumn() birthdate: Date; @ViewColumn() degree: string; @ViewColumn() age: number; }