#1290 (ข้อมูลเท่าที่ where ได้)

This commit is contained in:
AdisakKanthawilang 2025-03-27 18:26:37 +07:00
parent 5f7ed72261
commit bdd654089f
2 changed files with 478 additions and 407 deletions

View file

@ -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),
};
}),
);