diff --git a/src/controllers/OrganizationUnauthorizeController.ts b/src/controllers/OrganizationUnauthorizeController.ts new file mode 100644 index 00000000..8dee46d4 --- /dev/null +++ b/src/controllers/OrganizationUnauthorizeController.ts @@ -0,0 +1,253 @@ +import { + Controller, + Get, + Post, + Put, + Delete, + Patch, + Route, + Security, + Tags, + Body, + Path, + Request, + Example, + SuccessResponse, + Response, + Query, +} from "tsoa"; +import { OrgRevision } from "../entities/OrgRevision"; +import { AppDataSource } from "../database/data-source"; +import HttpSuccess from "../interfaces/http-success"; +import HttpError from "../interfaces/http-error"; +import HttpStatusCode from "../interfaces/http-status"; +import { Brackets, IsNull, Not } from "typeorm"; +import { OrgRoot } from "../entities/OrgRoot"; +import { PosMaster } from "../entities/PosMaster"; + +@Route("api/v1/org/unauthorize") +@Tags("OrganizationUnauthorize") +@Response( + HttpStatusCode.INTERNAL_SERVER_ERROR, + "เกิดข้อผิดพลาด ไม่สามารถแสดงรายการได้ กรุณาลองใหม่ในภายหลัง", +) +@SuccessResponse(HttpStatusCode.OK, "สำเร็จ") +export class OrganizationUnauthorizeController extends Controller { + private orgRevisionRepository = AppDataSource.getRepository(OrgRevision); + private orgRootRepository = AppDataSource.getRepository(OrgRoot); + + /** + * API รายชื่อราชการที่เลื่อนเงินเดือน (unauthorize) + * + * @summary ORG_072 - รายชื่อราชการที่เลื่อนเงินเดือน #76 (unauthorize) + * + */ + @Post("salary/gen") + async salaryGen( + @Body() + body: { + page: number; + pageSize: number; + keyword?: string; + }, + ) { + const findRevision = await this.orgRevisionRepository.findOne({ + where: { orgRevisionIsCurrent: true }, + }); + if (!findRevision) { + throw new HttpError(HttpStatusCode.NOT_FOUND, "not found. OrgRevision"); + } + + const [findPosMaster, total] = await AppDataSource.getRepository(PosMaster) + .createQueryBuilder("posMaster") + .leftJoinAndSelect("posMaster.current_holder", "current_holder") + .leftJoinAndSelect("posMaster.orgRoot", "orgRoot") + .leftJoinAndSelect("posMaster.orgChild1", "orgChild1") + .leftJoinAndSelect("posMaster.orgChild2", "orgChild2") + .leftJoinAndSelect("posMaster.orgChild3", "orgChild3") + .leftJoinAndSelect("posMaster.orgChild4", "orgChild4") + .leftJoinAndSelect("posMaster.positions", "positions") + .leftJoinAndSelect("positions.posExecutive", "posExecutive") + .leftJoinAndSelect("current_holder.profileSalary", "profileSalary") + .leftJoinAndSelect("current_holder.posLevel", "posLevel") + .leftJoinAndSelect("current_holder.posType", "posType") + .where({ + orgRevisionId: findRevision?.id, + current_holderId: Not(IsNull()), + }) + .andWhere( + new Brackets((qb) => { + qb.where( + body.keyword != null && body.keyword != "" + ? "current_holder.prefix LIKE :keyword" + : "1=1", + { + keyword: `%${body.keyword}%`, + }, + ) + .orWhere( + body.keyword != null && body.keyword != "" + ? "current_holder.firstName LIKE :keyword" + : "1=1", + { + keyword: `%${body.keyword}%`, + }, + ) + .orWhere( + body.keyword != null && body.keyword != "" + ? "current_holder.lastName LIKE :keyword" + : "1=1", + { + keyword: `%${body.keyword}%`, + }, + ) + .orWhere( + body.keyword != null && body.keyword != "" + ? "current_holder.position LIKE :keyword" + : "1=1", + { + keyword: `%${body.keyword}%`, + }, + ) + + .orWhere( + body.keyword != null && body.keyword != "" + ? "current_holder.citizenId LIKE :keyword" + : "1=1", + { + keyword: `%${body.keyword}%`, + }, + ) + .orWhere( + body.keyword != null && body.keyword != "" + ? "posType.posTypeName LIKE :keyword" + : "1=1", + { + keyword: `%${body.keyword}%`, + }, + ) + .orWhere( + body.keyword != null && body.keyword != "" + ? "posLevel.posLevelName LIKE :keyword" + : "1=1", + { + keyword: `%${body.keyword}%`, + }, + ); + }), + ) + .skip((body.page - 1) * body.pageSize) + .take(body.pageSize) + .getManyAndCount(); + if (!findPosMaster) { + throw new HttpError(HttpStatusCode.NOT_FOUND, "not found. PosMaster"); + } + + const formattedData = findPosMaster.map((item) => { + let orgShortName = ""; + + if (item.orgChild1Id === null) { + orgShortName = item.orgRoot?.orgRootShortName; + } else if (item.orgChild2Id === null) { + orgShortName = item.orgChild1?.orgChild1ShortName; + } else if (item.orgChild3Id === null) { + orgShortName = item.orgChild2?.orgChild2ShortName; + } else if (item.orgChild4Id === null) { + orgShortName = item.orgChild3?.orgChild3ShortName; + } else { + orgShortName = item.orgChild4?.orgChild4ShortName; + } + const posExecutive = + item.positions == null || + item.positions?.find((position) => position.positionIsSelected == true) == null || + item.positions?.find((position) => position.positionIsSelected == true)?.posExecutive == + null || + item.positions?.find((position) => position.positionIsSelected == true)?.posExecutive + ?.posExecutiveName == null + ? null + : item.positions?.find((position) => position.positionIsSelected == true)?.posExecutive + .posExecutiveName; + + const amount = + item.current_holder == null || item.current_holder.profileSalary.length == 0 + ? null + : item.current_holder.profileSalary.sort((a: any, b: any) => b.date - a.date)[0].amount; + + return { + prefix: item.current_holder.prefix, + firstName: item.current_holder.firstName, + lastName: item.current_holder.lastName, + citizenId: item.current_holder.citizenId, + posMasterNoPrefix: item.posMasterNoPrefix, + posMasterNo: item.posMasterNo, + posMasterNoSuffix: item.posMasterNoSuffix, + orgShortName: orgShortName, + position: item.current_holder.position, + posType: item.current_holder.posType.posTypeName, + posLevel: item.current_holder.posLevel.posLevelName, + posExecutive: posExecutive, + amount: amount ? amount : null, + rootId: item.orgRootId, + root: item.orgRoot?.orgRootName ? item.orgRoot.orgRootName : null, + child1Id: item.orgChild1Id, + child1: item.orgChild1?.orgChild1Name ? item.orgChild1.orgChild1Name : null, + child2Id: item.orgChild2Id, + child2: item.orgChild2?.orgChild2Name ? item.orgChild2.orgChild2Name : null, + child3Id: item.orgChild3Id, + child3: item.orgChild3?.orgChild3Name ? item.orgChild3.orgChild3Name : null, + child4Id: item.orgChild4Id, + child4: item.orgChild4?.orgChild4Name ? item.orgChild4.orgChild4Name : null, + result: null, + duration: null, + punish: null, + retired: null, + retired2: null, + isRetired: false, + }; + }); + + return new HttpSuccess({ data: formattedData, total: total }); + } + + /** + * API หาสำนักทั้งหมด (unauthorize) + * + * @summary หาสำนักทั้งหมด (unauthorize) + * + */ + @Get("active/root/id") + async _GetActiveRootId() { + try { + const orgRevisionActive = await this.orgRevisionRepository.findOne({ + where: { orgRevisionIsCurrent: true, orgRevisionIsDraft: false }, + }); + if (!orgRevisionActive) { + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบโครงสร้างที่เผยแพร๋อยู่ตอนนี้"); + } + + const data = await this.orgRootRepository.find({ + where: { orgRevisionId: orgRevisionActive.id }, + }); + return new HttpSuccess(data.map((x) => x.id)); + } catch (error) { + return error; + } + } + + /** + * API หา revision ล่าสุด (unauthorize) + * + * @summary หา revision ล่าสุด (unauthorize) + * + */ + @Get("revision/latest") + async _salaryGen() { + const findRevision = await this.orgRevisionRepository.findOne({ + where: { orgRevisionIsCurrent: true }, + }); + if (!findRevision) { + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบโครงสร้างล่าสุด"); + } + return new HttpSuccess(findRevision.id); + } +} diff --git a/src/controllers/PositionController.ts b/src/controllers/PositionController.ts index 9a8b782e..614a56b1 100644 --- a/src/controllers/PositionController.ts +++ b/src/controllers/PositionController.ts @@ -397,35 +397,30 @@ export class PositionController extends Controller { orgRoot = await this.orgRootRepository.findOne({ where: { id: requestBody.orgRootId }, }); - SName = orgRoot.orgRootShortName; if (!orgRoot) { let orgChild1: any = null; if (requestBody.orgChild1Id != null) orgChild1 = await this.child1Repository.findOne({ where: { id: requestBody.orgChild1Id }, }); - SName = orgChild1.orgChild1ShortName; if (!orgChild1) { let orgChild2: any = null; if (requestBody.orgChild2Id != null) orgChild2 = await this.child2Repository.findOne({ where: { id: requestBody.orgChild2Id }, }); - SName = orgChild2.orgChild2ShortName; if (!orgChild2) { let orgChild3: any = null; if (requestBody.orgChild3Id != null) orgChild3 = await this.child3Repository.findOne({ where: { id: requestBody.orgChild3Id }, }); - SName = orgChild3.orgChild3ShortName; if (!orgChild3) { let orgChild4: any = null; if (requestBody.orgChild4Id != null) orgChild4 = await this.child4Repository.findOne({ where: { id: requestBody.orgChild4Id }, }); - SName = orgChild4.orgChild4ShortName; if (!orgChild4) { throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลโครงสร้าง"); } else { @@ -445,6 +440,7 @@ export class PositionController extends Controller { posMaster.orgChild3Id = orgChild4.orgChild3Id; posMaster.orgChild4Id = orgChild4.id; posMaster.orgRevisionId = orgChild4.orgRevisionId; + SName = orgChild4.orgChild4ShortName; } } else { const order: any = await this.posMasterRepository.findOne({ @@ -463,6 +459,7 @@ export class PositionController extends Controller { posMaster.orgChild2Id = orgChild3.orgChild2Id; posMaster.orgChild3Id = orgChild3.id; posMaster.orgRevisionId = orgChild3.orgRevisionId; + SName = orgChild3.orgChild3ShortName; } } else { const order: any = await this.posMasterRepository.findOne({ @@ -481,6 +478,7 @@ export class PositionController extends Controller { posMaster.orgChild1Id = orgChild2.orgChild1Id; posMaster.orgChild2Id = orgChild2.id; posMaster.orgRevisionId = orgChild2.orgRevisionId; + SName = orgChild2.orgChild2ShortName; } } else { const order: any = await this.posMasterRepository.findOne({ @@ -499,6 +497,7 @@ export class PositionController extends Controller { posMaster.orgRootId = orgChild1.orgRootId; posMaster.orgChild1Id = orgChild1.id; posMaster.orgRevisionId = orgChild1.orgRevisionId; + SName = orgChild1.orgChild1ShortName; } } else { const order: any = await this.posMasterRepository.findOne({ @@ -517,6 +516,7 @@ export class PositionController extends Controller { : 1; posMaster.orgRootId = orgRoot.id; posMaster.orgRevisionId = orgRoot.orgRevisionId; + SName = orgRoot.orgRootShortName; } const chk_SName0 = await this.posMasterRepository.findOne({ @@ -680,35 +680,30 @@ export class PositionController extends Controller { orgRoot = await this.orgRootRepository.findOne({ where: { id: requestBody.orgRootId }, }); - SName = orgRoot.orgRootShortName; if (!orgRoot) { let orgChild1: any = null; if (requestBody.orgChild1Id != null) orgChild1 = await this.child1Repository.findOne({ where: { id: requestBody.orgChild1Id }, }); - SName = orgChild1.orgChild1ShortName; if (!orgChild1) { let orgChild2: any = null; if (requestBody.orgChild2Id != null) orgChild2 = await this.child2Repository.findOne({ where: { id: requestBody.orgChild2Id }, }); - SName = orgChild2.orgChild2ShortName; if (!orgChild2) { let orgChild3: any = null; if (requestBody.orgChild3Id != null) orgChild3 = await this.child3Repository.findOne({ where: { id: requestBody.orgChild3Id }, }); - SName = orgChild3.orgChild3ShortName; if (!orgChild3) { let orgChild4: any = null; if (requestBody.orgChild4Id != null) orgChild4 = await this.child4Repository.findOne({ where: { id: requestBody.orgChild4Id }, }); - SName = orgChild4.orgChild4ShortName; if (!orgChild4) { throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลโครงสร้าง"); } else { @@ -718,6 +713,7 @@ export class PositionController extends Controller { posMaster.orgChild3Id = orgChild4.orgChild3Id; posMaster.orgChild4Id = orgChild4.id; posMaster.orgRevisionId = orgChild4.orgRevisionId; + SName = orgChild4.orgChild4ShortName; } } else { posMaster.orgRootId = orgChild3.orgRootId; @@ -725,21 +721,25 @@ export class PositionController extends Controller { posMaster.orgChild2Id = orgChild3.orgChild2Id; posMaster.orgChild3Id = orgChild3.id; posMaster.orgRevisionId = orgChild3.orgRevisionId; + SName = orgChild3.orgChild3ShortName; } } else { posMaster.orgRootId = orgChild2.orgRootId; posMaster.orgChild1Id = orgChild2.orgChild1Id; posMaster.orgChild2Id = orgChild2.id; posMaster.orgRevisionId = orgChild2.orgRevisionId; + SName = orgChild2.orgChild2ShortName; } } else { posMaster.orgRootId = orgChild1.orgRootId; posMaster.orgChild1Id = orgChild1.id; posMaster.orgRevisionId = orgChild1.orgRevisionId; + SName = orgChild1.orgChild1ShortName; } } else { posMaster.orgRootId = orgRoot.id; posMaster.orgRevisionId = orgRoot.orgRevisionId; + SName = orgRoot.orgRootShortName; } const chk_SName0 = await this.posMasterRepository.findOne({ @@ -1971,10 +1971,7 @@ export class PositionController extends Controller { relations: ["positions"], }); if (!dataMaster) { - throw new HttpError( - HttpStatusCode.NOT_FOUND, - "ไม่พบข้อมูลตำแหน่งนี้" - ); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลตำแหน่งนี้"); } dataMaster.positions.forEach(async (position) => { if (position.id === requestBody.position) { @@ -2045,10 +2042,7 @@ export class PositionController extends Controller { }, }); if (!dataPublish) { - throw new HttpError( - HttpStatusCode.NOT_FOUND, - "ไม่พบข้อมูลตำแหน่งนี้", - ); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลตำแหน่งนี้"); } const dataDraft = await this.posMasterRepository.findOne({ @@ -2057,10 +2051,7 @@ export class PositionController extends Controller { }, }); if (!dataDraft) { - throw new HttpError( - HttpStatusCode.NOT_FOUND, - "ไม่พบข้อมูลตำแหน่งนี้" - ); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลตำแหน่งนี้"); } await this.posMasterRepository.update( diff --git a/src/controllers/ProfileController.ts b/src/controllers/ProfileController.ts index 3719744f..3da9ec80 100644 --- a/src/controllers/ProfileController.ts +++ b/src/controllers/ProfileController.ts @@ -1043,7 +1043,7 @@ export class ProfileController extends Controller { posType: item.current_holder.posType.posTypeName, posLevel: item.current_holder.posLevel.posLevelName, posExecutive: posExecutive, - amount: amount ? amount : 0, + amount: amount ? amount : null, // revisionId: item.orgRevisionId, rootId: item.orgRootId, root: item.orgRoot?.orgRootName ? item.orgRoot.orgRootName : null, @@ -1055,11 +1055,12 @@ export class ProfileController extends Controller { child3: item.orgChild3?.orgChild3Name ? item.orgChild3.orgChild3Name : null, child4Id: item.orgChild4Id, child4: item.orgChild4?.orgChild4Name ? item.orgChild4.orgChild4Name : null, - isResult: true, - isDuration: false, - isPunish: true, + result: null, + duration: null, + punish: null, + retired: null, + retired2: null, isRetired: false, - isRetired2: true, }; }); diff --git a/tsoa.json b/tsoa.json index ab2e9101..588162ec 100644 --- a/tsoa.json +++ b/tsoa.json @@ -76,6 +76,9 @@ }, { "name": "EducationLevel", "description": "ระดับการศึกษา" + }, + { + "name": "OrganizationUnauthorize", "description": "โครงสร้างส่วนอื่น ๆ (Unauthorize)" } ] },