hrms-api-org/src/entities/view/viewRegistryEmployee.ts
2025-02-24 14:08:11 +07:00

203 lines
5.4 KiB
TypeScript

import { ViewColumn, ViewEntity } from "typeorm";
@ViewEntity({
expression: `
WITH Position AS (
SELECT
pn.posMasterId,
ROW_NUMBER() OVER (PARTITION BY pn.posMasterId) AS pn_number
FROM employeePosition pn
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,
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 employeePosMaster 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.profileEmployeeId,
ed.level,
ROW_NUMBER() OVER (PARTITION BY ed.profileEmployeeId ORDER BY ed.level DESC) AS ed_number
FROM profileEducation ed
WHERE ed.isUse IS TRUE
ORDER BY ed.level ASC
)
SELECT
p.id as profileEmployeeId,
p.citizenId,
p.rank,
p.prefix,
p.firstName,
p.lastName,
p.isProbation,
p.isLeave,
p.isRetirement,
p.leaveType,
p.employeeClass,
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,
p.position,
posType.posTypeName,
posLevel.posLevelName,
p.gender,
p.relationship,
p.dateAppoint,
p.dateRetire,
p.dateRetireLaw,
p.birthdate,
ed.degree,
TIMESTAMPDIFF(YEAR, p.birthdate, CURDATE()) AS age
FROM profileEmployee p
LEFT JOIN employeePosLevel posLevel ON p.posLevelId = posLevel.id
LEFT JOIN employeePosType 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.profileEmployeeId AND ed.ed_number = 1
`,
})
export class viewRegistryEmployee {
@ViewColumn()
profileEmployeeId: string;
@ViewColumn()
citizenId: 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()
position: string;
@ViewColumn()
posTypeName: string;
@ViewColumn()
posLevelName: string;
@ViewColumn()
gender: string;
@ViewColumn()
relationship: string;
@ViewColumn()
dateAppoint: Date;
@ViewColumn()
dateRetire: Date;
@ViewColumn()
dateRetireLaw: Date;
@ViewColumn()
birthdate: Date;
@ViewColumn()
degree: string;
@ViewColumn()
age: number;
}