diff --git a/src/app.ts b/src/app.ts index e919c0f7..6913a2c1 100644 --- a/src/app.ts +++ b/src/app.ts @@ -68,7 +68,7 @@ async function main() { // const cronTime_Oct = "0 0 1 10 *"; // Test #1892 - const cronTime_Oct = "0 0 30 10 *"; + const cronTime_Oct = "0 0 31 10 *"; cron.schedule(cronTime_Oct, async () => { try { const commandController = new CommandController(); diff --git a/src/controllers/CommandController.ts b/src/controllers/CommandController.ts index c9302286..a6885004 100644 --- a/src/controllers/CommandController.ts +++ b/src/controllers/CommandController.ts @@ -62,6 +62,7 @@ import { getUserByUsername, getRoleMappings, removeUserRoles, + getToken, } from "../keycloak"; import { ProfileEducation, CreateProfileEducation } from "../entities/ProfileEducation"; import { ProfileEducationHistory } from "../entities/ProfileEducationHistory"; @@ -1476,24 +1477,25 @@ export class CommandController extends Controller { } // @Get("XXX") async cronjobUpdateRetirementStatus(/*@Request() request: RequestWithUser*/) { - let body = { - client_id: "gettoken", - client_secret: process.env.AUTH_ACCOUNT_SECRET, - grant_type: "client_credentials", - }; - const postData = querystring.stringify(body); - const response = await axios.post( - `${process.env.KC_URL}/realms/${process.env.KC_REALMS}/protocol/openid-connect/token`, - postData, - { - headers: { - "Content-Type": "application/x-www-form-urlencoded", - api_key: process.env.API_KEY, - }, - }, - ); - const adminToken = response.data.access_token; + // let body = { + // client_id: "gettoken", + // client_secret: process.env.AUTH_ACCOUNT_SECRET, + // grant_type: "client_credentials", + // }; + // const postData = querystring.stringify(body); + // const response = await axios.post( + // `${process.env.KC_URL}/realms/${process.env.KC_REALMS}/protocol/openid-connect/token`, + // postData, + // { + // headers: { + // "Content-Type": "application/x-www-form-urlencoded", + // api_key: process.env.API_KEY, + // }, + // }, + // ); + // const adminToken = response.data.access_token; // const adminToken = request.headers["authorization"]?.replace("Bearer ", ""); + const adminToken = await getToken() ?? ""; const today = new Date(); today.setUTCHours(0, 0, 0, 0); let type: string = "OFFICER"; diff --git a/src/controllers/ProfileController.ts b/src/controllers/ProfileController.ts index e32494c0..7a114b6e 100644 --- a/src/controllers/ProfileController.ts +++ b/src/controllers/ProfileController.ts @@ -9773,9 +9773,13 @@ export class ProfileController extends Controller { keyword?: string; }, ) { - let conditionFullName = - "CONCAT(profile.prefix, profile.firstName, ' ', profile.lastName) LIKE :keyword"; - const [findProfile, total] = await AppDataSource.getRepository(Profile) + const orgRevisionActive = await this.orgRevisionRepo.findOne({ + where: { orgRevisionIsCurrent: true, orgRevisionIsDraft: false }, + }); + if (!orgRevisionActive) { + throw new HttpError(HttpStatus.NOT_FOUND, "not found. OrgRevision"); + } + let query = AppDataSource.getRepository(Profile) .createQueryBuilder("profile") .leftJoinAndSelect("profile.posLevel", "posLevel") .leftJoinAndSelect("profile.posType", "posType") @@ -9788,103 +9792,83 @@ export class ProfileController extends Controller { .leftJoinAndSelect("current_holders.orgChild4", "orgChild4") .leftJoinAndSelect("current_holders.positions", "positions") .leftJoinAndSelect("positions.posExecutive", "posExecutive") - .where(`profile.position LIKE :keyword`, { - keyword: `%${body.keyword}%`, - }) - .orWhere(`profile.prefix LIKE :keyword`, { - keyword: `%${body.keyword}%`, - }) - .orWhere(`profile.firstName LIKE :keyword`, { - keyword: `%${body.keyword}%`, - }) - .orWhere(`profile.lastName LIKE :keyword`, { - keyword: `%${body.keyword}%`, - }) - .orWhere(`posLevel.posLevelName LIKE :keyword`, { - keyword: `%${body.keyword}%`, - }) - .orWhere(`posType.posTypeName LIKE :keyword`, { - keyword: `%${body.keyword}%`, - }) - .orWhere(conditionFullName, { - keyword: `%${body.keyword}%`, - }) + .andWhere( + new Brackets(qb => { + qb.where("profile.position LIKE :keyword", { keyword: `%${body.keyword}%` }) + .orWhere("posLevel.posLevelName LIKE :keyword", { keyword: `%${body.keyword}%` }) + .orWhere("posType.posTypeName LIKE :keyword", { keyword: `%${body.keyword}%` }) + .orWhere("CONCAT(profile.prefix, profile.firstName, ' ', profile.lastName) LIKE :keyword", { keyword: `%${body.keyword}%` }); + }) + ) .andWhere("profile.isLeave = false") - .orderBy("profile.citizenId", "ASC") - .skip((body.page - 1) * body.pageSize) - .take(body.pageSize) - .getManyAndCount(); + .andWhere("current_holders.orgRevisionId = :orgRevisionId", { orgRevisionId: orgRevisionActive.id }); - const orgRevisionActive = await this.orgRevisionRepo.findOne({ - where: { orgRevisionIsCurrent: true, orgRevisionIsDraft: false }, - }); - const findRevision = await this.orgRevisionRepo.findOne({ - where: { orgRevisionIsCurrent: true }, - }); - if (!findRevision) { - throw new HttpError(HttpStatus.NOT_FOUND, "not found. OrgRevision"); - } + const [findProfile, total] = await query + .orderBy("profile.citizenId", "ASC") + .skip((body.page - 1) * body.pageSize) + .take(body.pageSize) + .getManyAndCount(); const mapDataProfile = await Promise.all( findProfile.map(async (item: Profile) => { const posMaster = item.current_holders == null || item.current_holders.length == 0 || - item.current_holders.find((x) => x.orgRevisionId == findRevision.id) == null + item.current_holders.find((x) => x.orgRevisionId == orgRevisionActive.id) == null ? null - : item.current_holders.find((x) => x.orgRevisionId == findRevision.id); + : item.current_holders.find((x) => x.orgRevisionId == orgRevisionActive.id); const position = posMaster == null || - item.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.positions == null || - item.current_holders?.find((x) => x.orgRevisionId == findRevision.id)?.positions.length == + item.current_holders.find((x) => x.orgRevisionId == orgRevisionActive.id)?.positions == null || + item.current_holders?.find((x) => x.orgRevisionId == orgRevisionActive.id)?.positions.length == 0 || item.current_holders - .find((x) => x.orgRevisionId == findRevision.id) + .find((x) => x.orgRevisionId == orgRevisionActive.id) ?.positions?.find((position) => position.positionIsSelected == true) == null ? null : item.current_holders - .find((x) => x.orgRevisionId == findRevision.id) + .find((x) => x.orgRevisionId == orgRevisionActive.id) ?.positions?.find((position) => position.positionIsSelected == true); const posExecutive = position == null || item.current_holders - .find((x) => x.orgRevisionId == findRevision.id) + .find((x) => x.orgRevisionId == orgRevisionActive.id) ?.positions?.find((position) => position.positionIsSelected == true)?.posExecutive == null || item.current_holders - .find((x) => x.orgRevisionId == findRevision.id) + .find((x) => x.orgRevisionId == orgRevisionActive.id) ?.positions?.find((position) => position.positionIsSelected == true)?.posExecutive ?.posExecutiveName == null ? null : item.current_holders - .find((x) => x.orgRevisionId == findRevision.id) + .find((x) => x.orgRevisionId == orgRevisionActive.id) ?.positions?.find((position) => position.positionIsSelected == true)?.posExecutive .posExecutiveName; const shortName = item.current_holders.length == 0 ? null - : item.current_holders.find((x) => x.orgRevisionId == findRevision.id) != null && - item.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.orgChild4 != + : 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 == findRevision.id)?.orgChild4.orgChild4ShortName} ${item.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.posMasterNo}` - : item.current_holders.find((x) => x.orgRevisionId == findRevision.id) != null && - item.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.orgChild3 != + ? `${item.current_holders.find((x) => x.orgRevisionId == orgRevisionActive.id)?.orgChild4.orgChild4ShortName} ${item.current_holders.find((x) => x.orgRevisionId == orgRevisionActive.id)?.posMasterNo}` + : 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 == findRevision.id)?.orgChild3.orgChild3ShortName} ${item.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.posMasterNo}` - : item.current_holders.find((x) => x.orgRevisionId == findRevision.id) != null && - item.current_holders.find((x) => x.orgRevisionId == findRevision.id) + ? `${item.current_holders.find((x) => x.orgRevisionId == orgRevisionActive.id)?.orgChild3.orgChild3ShortName} ${item.current_holders.find((x) => x.orgRevisionId == orgRevisionActive.id)?.posMasterNo}` + : 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 == findRevision.id)?.orgChild2.orgChild2ShortName} ${item.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.posMasterNo}` - : item.current_holders.find((x) => x.orgRevisionId == findRevision.id) != null && - item.current_holders.find((x) => x.orgRevisionId == findRevision.id) + ? `${item.current_holders.find((x) => x.orgRevisionId == orgRevisionActive.id)?.orgChild2.orgChild2ShortName} ${item.current_holders.find((x) => x.orgRevisionId == orgRevisionActive.id)?.posMasterNo}` + : 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 == findRevision.id)?.orgChild1.orgChild1ShortName} ${item.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.posMasterNo}` - : item.current_holders.find((x) => x.orgRevisionId == findRevision.id) != + ? `${item.current_holders.find((x) => x.orgRevisionId == orgRevisionActive.id)?.orgChild1.orgChild1ShortName} ${item.current_holders.find((x) => x.orgRevisionId == orgRevisionActive.id)?.posMasterNo}` + : item.current_holders.find((x) => x.orgRevisionId == orgRevisionActive.id) != null && - item.current_holders.find((x) => x.orgRevisionId == findRevision.id) + item.current_holders.find((x) => x.orgRevisionId == orgRevisionActive.id) ?.orgRoot != null - ? `${item.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.orgRoot.orgRootShortName} ${item.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.posMasterNo}` + ? `${item.current_holders.find((x) => x.orgRevisionId == orgRevisionActive.id)?.orgRoot.orgRootShortName} ${item.current_holders.find((x) => x.orgRevisionId == orgRevisionActive.id)?.posMasterNo}` : null; return { diff --git a/src/controllers/ProfileEmployeeController.ts b/src/controllers/ProfileEmployeeController.ts index dad205a4..cdbac600 100644 --- a/src/controllers/ProfileEmployeeController.ts +++ b/src/controllers/ProfileEmployeeController.ts @@ -4419,11 +4419,16 @@ export class ProfileEmployeeController extends Controller { page: number; pageSize: number; keyword?: string; + type?: string; }, ) { - let conditionFullName = - "CONCAT(profileEmployee.prefix, profileEmployee.firstName, ' ', profileEmployee.lastName) LIKE :keyword"; - const [findProfile, total] = await AppDataSource.getRepository(ProfileEmployee) + const orgRevisionActive = await this.orgRevisionRepo.findOne({ + where: { orgRevisionIsCurrent: true, orgRevisionIsDraft: false }, + }); + if (!orgRevisionActive) { + throw new HttpError(HttpStatus.NOT_FOUND, "not found. OrgRevision"); + } + let query = AppDataSource.getRepository(ProfileEmployee) .createQueryBuilder("profileEmployee") .leftJoinAndSelect("profileEmployee.posLevel", "posLevel") .leftJoinAndSelect("profileEmployee.posType", "posType") @@ -4435,88 +4440,78 @@ export class ProfileEmployeeController extends Controller { .leftJoinAndSelect("current_holders.orgChild3", "orgChild3") .leftJoinAndSelect("current_holders.orgChild4", "orgChild4") .leftJoinAndSelect("current_holders.positions", "positions") - .where(`profileEmployee.position LIKE :keyword`, { - keyword: `%${body.keyword}%`, - }) - .orWhere(`profileEmployee.prefix LIKE :keyword`, { - keyword: `%${body.keyword}%`, - }) - .orWhere(`profileEmployee.firstName LIKE :keyword`, { - keyword: `%${body.keyword}%`, - }) - .orWhere(`profileEmployee.lastName LIKE :keyword`, { - keyword: `%${body.keyword}%`, - }) - .orWhere(`posLevel.posLevelName LIKE :keyword`, { - keyword: `%${body.keyword}%`, - }) - .orWhere(`posType.posTypeName LIKE :keyword`, { - keyword: `%${body.keyword}%`, - }) - .orWhere(conditionFullName, { - keyword: `%${body.keyword}%`, - }) + .andWhere( + new Brackets(qb => { + qb.where("profileEmployee.position LIKE :keyword", { keyword: `%${body.keyword}%` }) + .orWhere("posLevel.posLevelName LIKE :keyword", { keyword: `%${body.keyword}%` }) + .orWhere("posType.posTypeName LIKE :keyword", { keyword: `%${body.keyword}%` }) + .orWhere("CONCAT(profileEmployee.prefix, profileEmployee.firstName, ' ', profileEmployee.lastName) LIKE :keyword", { keyword: `%${body.keyword}%` }); + }) + ) .andWhere("profileEmployee.isLeave = false") + .andWhere("current_holders.orgRevisionId = :orgRevisionId", { orgRevisionId: orgRevisionActive.id }); + + if (body.type) { + const typeUpper = body.type.trim().toUpperCase(); + if (typeUpper === "EMPLOYEE") { + query = query.andWhere("profileEmployee.employeeClass = 'PERM'"); + } + else if (typeUpper === "TEMP"){ + query = query.andWhere("profileEmployee.employeeClass = 'TEMP'"); + } + } + + const [findProfile, total] = await query .orderBy("profileEmployee.citizenId", "ASC") .skip((body.page - 1) * body.pageSize) .take(body.pageSize) .getManyAndCount(); - const orgRevisionActive = await this.orgRevisionRepo.findOne({ - where: { orgRevisionIsCurrent: true, orgRevisionIsDraft: false }, - }); - const findRevision = await this.orgRevisionRepo.findOne({ - where: { orgRevisionIsCurrent: true }, - }); - if (!findRevision) { - throw new HttpError(HttpStatus.NOT_FOUND, "not found. OrgRevision"); - } - const mapDataProfile = await Promise.all( findProfile.map(async (item: ProfileEmployee) => { const posMaster = item.current_holders == null || item.current_holders.length == 0 || - item.current_holders.find((x) => x.orgRevisionId == findRevision.id) == null + item.current_holders.find((x) => x.orgRevisionId == orgRevisionActive.id) == null ? null - : item.current_holders.find((x) => x.orgRevisionId == findRevision.id); + : item.current_holders.find((x) => x.orgRevisionId == orgRevisionActive.id); const position = posMaster == null || - item.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.positions == null || - item.current_holders?.find((x) => x.orgRevisionId == findRevision.id)?.positions.length == + item.current_holders.find((x) => x.orgRevisionId == orgRevisionActive.id)?.positions == null || + item.current_holders?.find((x) => x.orgRevisionId == orgRevisionActive.id)?.positions.length == 0 || item.current_holders - .find((x) => x.orgRevisionId == findRevision.id) + .find((x) => x.orgRevisionId == orgRevisionActive.id) ?.positions?.find((position) => position.positionIsSelected == true) == null ? null : item.current_holders - .find((x) => x.orgRevisionId == findRevision.id) + .find((x) => x.orgRevisionId == orgRevisionActive.id) ?.positions?.find((position) => position.positionIsSelected == true); const shortName = item.current_holders.length == 0 ? null - : item.current_holders.find((x) => x.orgRevisionId == findRevision.id) != null && - item.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.orgChild4 != + : 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 == findRevision.id)?.orgChild4.orgChild4ShortName} ${item.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.posMasterNo}` - : item.current_holders.find((x) => x.orgRevisionId == findRevision.id) != null && - item.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.orgChild3 != + ? `${item.current_holders.find((x) => x.orgRevisionId == orgRevisionActive.id)?.orgChild4.orgChild4ShortName} ${item.current_holders.find((x) => x.orgRevisionId == orgRevisionActive.id)?.posMasterNo}` + : 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 == findRevision.id)?.orgChild3.orgChild3ShortName} ${item.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.posMasterNo}` - : item.current_holders.find((x) => x.orgRevisionId == findRevision.id) != null && - item.current_holders.find((x) => x.orgRevisionId == findRevision.id) + ? `${item.current_holders.find((x) => x.orgRevisionId == orgRevisionActive.id)?.orgChild3.orgChild3ShortName} ${item.current_holders.find((x) => x.orgRevisionId == orgRevisionActive.id)?.posMasterNo}` + : 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 == findRevision.id)?.orgChild2.orgChild2ShortName} ${item.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.posMasterNo}` - : item.current_holders.find((x) => x.orgRevisionId == findRevision.id) != null && - item.current_holders.find((x) => x.orgRevisionId == findRevision.id) + ? `${item.current_holders.find((x) => x.orgRevisionId == orgRevisionActive.id)?.orgChild2.orgChild2ShortName} ${item.current_holders.find((x) => x.orgRevisionId == orgRevisionActive.id)?.posMasterNo}` + : 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 == findRevision.id)?.orgChild1.orgChild1ShortName} ${item.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.posMasterNo}` - : item.current_holders.find((x) => x.orgRevisionId == findRevision.id) != + ? `${item.current_holders.find((x) => x.orgRevisionId == orgRevisionActive.id)?.orgChild1.orgChild1ShortName} ${item.current_holders.find((x) => x.orgRevisionId == orgRevisionActive.id)?.posMasterNo}` + : item.current_holders.find((x) => x.orgRevisionId == orgRevisionActive.id) != null && - item.current_holders.find((x) => x.orgRevisionId == findRevision.id) + item.current_holders.find((x) => x.orgRevisionId == orgRevisionActive.id) ?.orgRoot != null - ? `${item.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.orgRoot.orgRootShortName} ${item.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.posMasterNo}` + ? `${item.current_holders.find((x) => x.orgRevisionId == orgRevisionActive.id)?.orgRoot.orgRootShortName} ${item.current_holders.find((x) => x.orgRevisionId == orgRevisionActive.id)?.posMasterNo}` : null; return {