import { Controller, Get, Post, Put, Delete, Patch, Route, Security, Tags, Body, Path, Request, Example, SuccessResponse, Response, Query, } from "tsoa"; import { AppDataSource } from "../database/data-source"; import HttpSuccess from "../interfaces/http-success"; import HttpStatusCode from "../interfaces/http-status"; import { PosExecutive } from "../entities/PosExecutive"; import { PosType } from "../entities/PosType"; import { PosLevel } from "../entities/PosLevel"; import { CreatePosDict, PosDict } from "../entities/PosDict"; import HttpError from "../interfaces/http-error"; import { In, IsNull, Like } from "typeorm"; import { CreatePosMaster, PosMaster } from "../entities/PosMaster"; import { OrgRevision } from "../entities/OrgRevision"; import { OrgRoot } from "../entities/OrgRoot"; import { OrgChild1 } from "../entities/OrgChild1"; import { OrgChild2 } from "../entities/OrgChild2"; import { OrgChild3 } from "../entities/OrgChild3"; import { OrgChild4 } from "../entities/OrgChild4"; import { Position } from "../entities/Position"; @Route("api/v1/org/pos") @Tags("Position") @Security("bearerAuth") @Response( HttpStatusCode.INTERNAL_SERVER_ERROR, "เกิดข้อผิดพลาด ไม่สามารถแสดงรายการได้ กรุณาลองใหม่ในภายหลัง", ) @SuccessResponse(HttpStatusCode.OK, "สำเร็จ") export class PositionController extends Controller { private posExecutiveRepository = AppDataSource.getRepository(PosExecutive); private posTypeRepository = AppDataSource.getRepository(PosType); private posLevelRepository = AppDataSource.getRepository(PosLevel); private posDictRepository = AppDataSource.getRepository(PosDict); private posMasterRepository = AppDataSource.getRepository(PosMaster); private positionRepository = AppDataSource.getRepository(Position); private orgRevisionRepository = AppDataSource.getRepository(OrgRevision); private orgRootRepository = AppDataSource.getRepository(OrgRoot); private child1Repository = AppDataSource.getRepository(OrgChild1); private child2Repository = AppDataSource.getRepository(OrgChild2); private child3Repository = AppDataSource.getRepository(OrgChild3); private child4Repository = AppDataSource.getRepository(OrgChild4); /** * API รายการตำแหน่งทางการบริหาร * * @summary ORG_026 - รายการตำแหน่งทางการบริหาร (ADMIN) #28 * */ @Get("executive") @Example([ { id: "00000000-0000-0000-0000-000000000000", posExecutiveName: "นักบริหาร", posExecutivePriority: 1, }, ]) async GetPosExecutive() { try { const posExecutive = await this.posExecutiveRepository.find({ select: ["id", "posExecutiveName", "posExecutivePriority"], }); if (!posExecutive) { return new HttpSuccess([]); } return new HttpSuccess(posExecutive); } catch (error) { return error; } } /** * API รายการประเภทตำแหน่ง * * @summary ORG_027 - รายการประเภทตำแหน่ง (ADMIN) #29 * */ @Get("type") @Example([ { id: "00000000-0000-0000-0000-000000000000", posTypeName: "นักบริหาร", posTypeRank: 1, posLevels: [ { id: "00000000-0000-0000-0000-000000000000", posLevelName: "นักบริหาร", posLevelRank: 1, posLevelAuthority: "HEAD", }, ], }, ]) async GetPosType() { try { const posType = await this.posTypeRepository.find({ select: ["id", "posTypeName", "posTypeRank"], relations: ["posLevels"], }); if (!posType) { return new HttpSuccess([]); } const mapPosType = posType.map((item) => ({ id: item.id, posTypeName: item.posTypeName, posTypeRank: item.posTypeRank, posLevels: item.posLevels.map((posLevel) => ({ id: posLevel.id, posLevelName: posLevel.posLevelName, posLevelRank: posLevel.posLevelRank, posLevelAuthority: posLevel.posLevelAuthority, })), })); return new HttpSuccess(mapPosType); } catch (error) { return error; } } /** * API รายการระดับตำแหน่ง * * @summary ORG_028 - รายการระดับตำแหน่ง (ADMIN) #30 * */ @Get("level") @Example([ { id: "00000000-0000-0000-0000-000000000000", posLevelName: "นักบริหาร", posLevelRank: 1, posLevelAuthority: "HEAD", posTypes: { id: "00000000-0000-0000-0000-000000000000", posTypeName: "นักบริหาร", posTypeRank: 1, }, }, ]) async GetPosLevel() { try { const posLevel = await this.posLevelRepository.find({ select: ["id", "posLevelName", "posLevelRank", "posLevelAuthority", "posTypeId"], relations: ["posType"], }); if (!posLevel) { return new HttpSuccess([]); } const mapPosLevel = posLevel.map((item) => ({ id: item.id, posLevelName: item.posLevelName, posLevelRank: item.posLevelRank, posLevelAuthority: item.posLevelAuthority, posTypes: { id: item.posType.id, posTypeName: item.posType.posTypeName, posTypeRank: item.posType.posTypeRank, }, })); return new HttpSuccess(mapPosLevel); } catch (error) { return error; } } /** * API เพิ่มตำแหน่ง * * @summary ORG_030 - เพิ่มตำแหน่ง (ADMIN) #33 * */ @Post("position") @Example([ { positionName: "นักบริหาร", positionField: "บริหาร", posTypeId: "08db9e81-fc46-4e95-8b33-be4ca0016abf", posLevelId: "08db9e81-fc46-4e95-8b33-be4ca0016abf", posExecutiveId: "08db9e81-fc46-4e95-8b33-be4ca0016abf", positionExecutiveField: "นักบริหาร", positionArea: "บริหาร", }, ]) async createPosition( @Body() requestBody: CreatePosDict, @Request() request: { user: Record }, ) { const posDict = Object.assign(new PosDict(), requestBody); if (!posDict) { throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); } const checkPosTypeId = await this.posTypeRepository.findOne({ where: { id: requestBody.posTypeId }, }); if (!checkPosTypeId) { throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล PosTypeId"); } const checkPosLevelId = await this.posLevelRepository.findOne({ where: { id: requestBody.posLevelId }, }); if (!checkPosLevelId) { throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล PosLevelId"); } const checkPosExecutiveId = await this.posExecutiveRepository.findOne({ where: { id: requestBody.posExecutiveId }, }); if (!checkPosExecutiveId) { throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล PosExecutiveId"); } try { posDict.createdUserId = request.user.sub; posDict.createdFullName = request.user.name; posDict.lastUpdateUserId = request.user.sub; posDict.lastUpdateFullName = request.user.name; await this.posDictRepository.save(posDict); return new HttpSuccess(posDict.id); } catch (error) { return error; } } /** * API ลบตำแหน่ง * * @summary ORG_032 - ลบตำแหน่ง (ADMIN) #40 * * @param {string} id Id ตำแหน่ง */ @Delete("position/{id}") async delete(@Path() id: string) { const delPosDict = await this.posDictRepository.findOne({ where: { id } }); if (!delPosDict) { throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลตำแหน่งตามไอดีนี้ : " + id); } try { await this.posDictRepository.remove(delPosDict); return new HttpSuccess(); } catch (error) { return error; } } /** * API ค้นหารายการตำแหน่ง * * @summary ORG_029 - ค้นหารายการตำแหน่ง (ADMIN) #32 * */ @Get("position") async findPosition(@Query("keyword") keyword?: string, @Query("type") type?: string) { try { let findPosDict: any; switch (type) { case "positionName": findPosDict = await this.posDictRepository.find({ where: { posDictName: Like(`%${keyword}%`) }, relations: ["posType", "posLevel", "posExecutive"], }); if (!findPosDict) { throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล " + keyword); } break; case "positionField": findPosDict = await this.posDictRepository.find({ where: { posDictField: Like(`%${keyword}%`) }, relations: ["posType", "posLevel", "posExecutive"], }); if (!findPosDict) { throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล " + keyword); } break; case "positionType": const findTypes: PosType[] = await this.posTypeRepository.find({ where: { posTypeName: Like(`%${keyword}%`) }, select: ["id"], }); findPosDict = await this.posDictRepository.find({ where: { posTypeId: In(findTypes.map((x) => x.id)) }, relations: ["posType", "posLevel", "posExecutive"], }); break; case "positionLevel": const findLevel: PosLevel[] = await this.posLevelRepository.find({ where: { posLevelName: Like(`%${keyword}%`) }, select: ["id"], }); findPosDict = await this.posDictRepository.find({ where: { posLevelId: In(findLevel.map((x) => x.id)) }, relations: ["posType", "posLevel", "posExecutive"], }); break; case "positionExecutive": const findExecutive: PosExecutive[] = await this.posExecutiveRepository.find({ where: { posExecutiveName: Like(`%${keyword}%`) }, select: ["id"], }); findPosDict = await this.posDictRepository.find({ where: { posExecutiveId: In(findExecutive.map((x) => x.id)) }, relations: ["posType", "posLevel", "posExecutive"], }); break; case "positionExecutiveField": findPosDict = await this.posDictRepository.find({ where: { posDictExecutiveField: Like(`%${keyword}%`) }, relations: ["posType", "posLevel", "posExecutive"], }); if (!findPosDict) { throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล " + keyword); } break; case "positionArea": findPosDict = await this.posDictRepository.find({ where: { posDictArea: Like(`%${keyword}%`) }, relations: ["posType", "posLevel", "posExecutive"], }); if (!findPosDict) { throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล " + keyword); } break; default: findPosDict = await this.posDictRepository.find({ relations: ["posType", "posLevel", "posExecutive"], }); if (!findPosDict) { throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); } break; } const mapDataPosDict = await Promise.all( findPosDict.map(async (item: any) => { return { id: item.id, positionName: item.posDictName, positionField: item.posDictField, posTypeId: item.posTypeId, posTypeName: item.posType == null ? null : item.posType.posTypeName, posLevelId: item.posLevelId, posLevelName: item.posLevel == null ? null : item.posLevel.posLevelName, posExecutiveId: item.posExecutiveId, posExecutiveName: item.posExecutive == null ? null : item.posExecutive.posExecutiveName, positionExecutiveField: item.posDictExecutiveField, positionArea: item.posDictArea, positionIsSelected: false, }; }), ); return new HttpSuccess(mapDataPosDict); } catch (error) { return error; } } /** * API เพิ่มอัตรากำลัง * * @summary ORG_033 - เพิ่มอัตรากำลัง (ADMIN) #35 * */ @Post("master") @Example({ posMasterNoPrefix: "กบ.", posMasterNo: 1, posMasterNoSuffix: "ช", posId: ["08db9e81-fc46-4e95-8b33-be4ca0016abf", "08db9e81-fc46-4e95-8b33-be4ca0016abf"], orgRootId: "08db9e81-fc46-4e95-8b33-be4ca0016abf", orgChild1Id: "08db9e81-fc46-4e95-8b33-be4ca0016abf", orgChild2Id: "08db9e81-fc46-4e95-8b33-be4ca0016abf", orgChild3Id: "08db9e81-fc46-4e95-8b33-be4ca0016abf", orgChild4Id: "08db9e81-fc46-4e95-8b33-be4ca0016abf", positions: [ { posDictName: "นักบริหาร", posDictField: "บริหาร", posTypeId: "08db9e81-fc46-4e95-8b33-be4ca0016abf", posLevelId: "08db9e81-fc46-4e95-8b33-be4ca0016abf", posExecutiveId: "08db9e81-fc46-4e95-8b33-be4ca0016abf", posDictExecutiveField: "นักบริหาร", posDictArea: "บริหาร", }, ], }) async createMaster( @Body() requestBody: CreatePosMaster, @Request() request: { user: Record }, ) { const posMaster = Object.assign(new PosMaster(), requestBody); if (!posMaster) { throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); } let orgRoot: any = null; if (requestBody.orgRootId != null) orgRoot = await this.orgRootRepository.findOne({ where: { id: requestBody.orgRootId }, }); if (!orgRoot) { let orgChild1: any = null; if (requestBody.orgChild1Id != null) orgChild1 = await this.child1Repository.findOne({ where: { id: requestBody.orgChild1Id }, }); if (!orgChild1) { let orgChild2: any = null; if (requestBody.orgChild2Id != null) orgChild2 = await this.child2Repository.findOne({ where: { id: requestBody.orgChild2Id }, }); if (!orgChild2) { let orgChild3: any = null; if (requestBody.orgChild3Id != null) orgChild3 = await this.child3Repository.findOne({ where: { id: requestBody.orgChild3Id }, }); if (!orgChild3) { let orgChild4: any = null; if (requestBody.orgChild4Id != null) orgChild4 = await this.child4Repository.findOne({ where: { id: requestBody.orgChild4Id }, }); if (!orgChild4) { throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลโครงสร้าง"); } else { posMaster.orgRootId = orgChild4.orgRootId; posMaster.orgChild1Id = orgChild4.orgChild1Id; posMaster.orgChild2Id = orgChild4.orgChild2Id; posMaster.orgChild3Id = orgChild4.orgChild3Id; posMaster.orgChild4Id = orgChild4.id; posMaster.orgRevisionId = orgChild4.orgRevisionId; } } else { posMaster.orgRootId = orgChild3.orgRootId; posMaster.orgChild1Id = orgChild3.orgChild1Id; posMaster.orgChild2Id = orgChild3.orgChild2Id; posMaster.orgChild3Id = orgChild3.id; posMaster.orgRevisionId = orgChild3.orgRevisionId; } } else { posMaster.orgRootId = orgChild2.orgRootId; posMaster.orgChild1Id = orgChild2.orgChild1Id; posMaster.orgChild2Id = orgChild2.id; posMaster.orgRevisionId = orgChild2.orgRevisionId; } } else { posMaster.orgRootId = orgChild1.orgRootId; posMaster.orgChild1Id = orgChild1.id; posMaster.orgRevisionId = orgChild1.orgRevisionId; } } else { posMaster.orgRootId = orgRoot.id; posMaster.orgRevisionId = orgRoot.orgRevisionId; } posMaster.createdUserId = request.user.sub; posMaster.createdFullName = request.user.name; posMaster.lastUpdateUserId = request.user.sub; posMaster.lastUpdateFullName = request.user.name; await this.posMasterRepository.save(posMaster); requestBody.positions.forEach(async (x: any) => { const position = Object.assign(new Position()); position.positionName = x.posDictName; position.positionField = x.posDictField; position.posTypeId = x.posTypeId; position.posLevelId = x.posLevelId; position.posExecutiveId = x.posExecutiveId; position.positionExecutiveField = x.posDictExecutiveField; position.positionArea = x.posDictArea; position.positionIsSelected = false; position.posMasterId = posMaster.id; position.createdUserId = request.user.sub; position.createdFullName = request.user.name; position.lastUpdateUserId = request.user.sub; position.lastUpdateFullName = request.user.name; await this.positionRepository.save(position); }); return new HttpSuccess(posMaster.id); } /** * API เพิ่มอัตรากำลัง * * @summary ORG_033 - เพิ่มอัตรากำลัง (ADMIN) #35 * */ @Put("master/{id}") @Example({ posMasterNoPrefix: "กบ.", posMasterNo: "1", posMasterNoSuffix: "ช", posId: ["08db9e81-fc46-4e95-8b33-be4ca0016abf", "08db9e81-fc46-4e95-8b33-be4ca0016abf"], orgRootId: "08db9e81-fc46-4e95-8b33-be4ca0016abf", orgChild1Id: "08db9e81-fc46-4e95-8b33-be4ca0016abf", orgChild2Id: "08db9e81-fc46-4e95-8b33-be4ca0016abf", orgChild3Id: "08db9e81-fc46-4e95-8b33-be4ca0016abf", orgChild4Id: "08db9e81-fc46-4e95-8b33-be4ca0016abf", positions: [ { posDictName: "นักบริหาร", posDictField: "บริหาร", posTypeId: "08db9e81-fc46-4e95-8b33-be4ca0016abf", posLevelId: "08db9e81-fc46-4e95-8b33-be4ca0016abf", posExecutiveId: "08db9e81-fc46-4e95-8b33-be4ca0016abf", posDictExecutiveField: "นักบริหาร", posDictArea: "บริหาร", }, ], }) async updateMaster( @Path() id: string, @Body() requestBody: CreatePosMaster, @Request() request: { user: Record }, ) { const posMaster = await this.posMasterRepository.findOne({ where: { id: id } }); if (!posMaster) { throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลอัตรากำลัง"); } posMaster.orgRootId = ""; posMaster.orgChild1Id = ""; posMaster.orgChild2Id = ""; posMaster.orgChild3Id = ""; posMaster.orgChild4Id = ""; let orgRoot: any = null; if (requestBody.orgRootId != null) orgRoot = await this.orgRootRepository.findOne({ where: { id: requestBody.orgRootId }, }); if (!orgRoot) { let orgChild1: any = null; if (requestBody.orgChild1Id != null) orgChild1 = await this.child1Repository.findOne({ where: { id: requestBody.orgChild1Id }, }); if (!orgChild1) { let orgChild2: any = null; if (requestBody.orgChild2Id != null) orgChild2 = await this.child2Repository.findOne({ where: { id: requestBody.orgChild2Id }, }); if (!orgChild2) { let orgChild3: any = null; if (requestBody.orgChild3Id != null) orgChild3 = await this.child3Repository.findOne({ where: { id: requestBody.orgChild3Id }, }); if (!orgChild3) { let orgChild4: any = null; if (requestBody.orgChild4Id != null) orgChild4 = await this.child4Repository.findOne({ where: { id: requestBody.orgChild4Id }, }); if (!orgChild4) { throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลโครงสร้าง"); } else { posMaster.orgRootId = orgChild4.orgRootId; posMaster.orgChild1Id = orgChild4.orgChild1Id; posMaster.orgChild2Id = orgChild4.orgChild2Id; posMaster.orgChild3Id = orgChild4.orgChild3Id; posMaster.orgChild4Id = orgChild4.id; posMaster.orgRevisionId = orgChild4.orgRevisionId; } } else { posMaster.orgRootId = orgChild3.orgRootId; posMaster.orgChild1Id = orgChild3.orgChild1Id; posMaster.orgChild2Id = orgChild3.orgChild2Id; posMaster.orgChild3Id = orgChild3.id; posMaster.orgRevisionId = orgChild3.orgRevisionId; } } else { posMaster.orgRootId = orgChild2.orgRootId; posMaster.orgChild1Id = orgChild2.orgChild1Id; posMaster.orgChild2Id = orgChild2.id; posMaster.orgRevisionId = orgChild2.orgRevisionId; } } else { posMaster.orgRootId = orgChild1.orgRootId; posMaster.orgChild1Id = orgChild1.id; posMaster.orgRevisionId = orgChild1.orgRevisionId; } } else { posMaster.orgRootId = orgRoot.id; posMaster.orgRevisionId = orgRoot.orgRevisionId; } posMaster.createdUserId = request.user.sub; posMaster.createdFullName = request.user.name; posMaster.lastUpdateUserId = request.user.sub; posMaster.lastUpdateFullName = request.user.name; await this.posMasterRepository.save(posMaster); await this.positionRepository.delete({ posMasterId: posMaster.id }); requestBody.positions.forEach(async (x: any) => { const position = Object.assign(new Position()); position.positionName = x.posDictName; position.positionField = x.posDictField; position.posTypeId = x.posTypeId; position.posLevelId = x.posLevelId; position.posExecutiveId = x.posExecutiveId; position.positionExecutiveField = x.posDictExecutiveField; position.positionArea = x.posDictArea; position.positionIsSelected = false; position.posMasterId = posMaster.id; position.createdUserId = request.user.sub; position.createdFullName = request.user.name; position.lastUpdateUserId = request.user.sub; position.lastUpdateFullName = request.user.name; await this.positionRepository.save(position); }); return new HttpSuccess(posMaster.id); } /** * API รายละเอียดอัตรากำลัง * * @summary ORG_037 - รายละเอียดอัตรากำลัง (ADMIN) #36 * */ @Get("position/{id}") async detailPosition(@Path() id: string) { try { const posMaster = await this.posMasterRepository.findOne({ where: { id }, relations: ["posType", "posLevel", "posExecutive"], }); if (!posMaster) { throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); } const positions = await this.positionRepository.find({ where: { posMasterId: posMaster.id }, }); const formattedData = { id: posMaster.id, posMasterNoPrefix: posMaster.posMasterNoPrefix, posMasterNo: posMaster.posMasterNo, posMasterNoSuffix: posMaster.posMasterNoSuffix, positions: positions.map((position) => ({ id: position.id, positionName: position.positionName, positionField: position.positionField, posTypeId: position.posTypeId, posTypeName: position.posType == null ? null : position.posType.posTypeName, posLevelId: position.posLevelId, posLevelName: position.posLevel == null ? null : position.posLevel.posLevelName, posExecutiveId: position.posExecutiveId, posExecutiveName: position.posExecutive == null ? null : position.posExecutive.posExecutiveName, positionExecutiveField: position.positionExecutiveField, positionArea: position.positionArea, positionIsSelected: position.positionIsSelected, })), }; return new HttpSuccess(formattedData); } catch (error) { return error; } } /** * API ลบอัตรากำลัง * * @summary ORG_035 - ลบอัตรากำลัง (ADMIN) #38 * * @param {string} id Id ตำแหน่ง */ @Delete("master/{id}") async deletePosMaster(@Path() id: string) { const delPosMaster = await this.posMasterRepository.findOne({ where: { id }, // relations: ["position"], }); if (!delPosMaster) { throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลตำแหน่งตามไอดีนี้ : " + id); } try { await this.positionRepository.delete({ posMasterId: id }); await this.posMasterRepository.delete({ id }); return new HttpSuccess(); } catch (error) { return error; } } /** * API รายการอัตรากำลัง * * @summary ORG_053 - รายการอัตรากำลัง (ADMIN) #56 * */ @Post("master/list") async list( @Body() body: { id: string; type: number; isAll: boolean; page: number; pageSize: number; keyword?: string; }, ) { try { let typeCondition: any = {}; let checkChildConditions: any = {}; if (body.type === 0) { typeCondition = { orgRootId: body.id, }; if (!body.isAll) { checkChildConditions = { orgChild1Id: IsNull(), }; } } else if (body.type === 1) { typeCondition = { orgChild1Id: body.id, }; if (!body.isAll) { checkChildConditions = { orgChild2Id: IsNull(), }; } } else if (body.type === 2) { typeCondition = { orgChild2Id: body.id, }; if (!body.isAll) { checkChildConditions = { orgChild3Id: IsNull(), }; } } else if (body.type === 3) { typeCondition = { orgChild3Id: body.id, }; if (!body.isAll) { checkChildConditions = { orgChild4Id: IsNull(), }; } } else if (body.type === 4) { typeCondition = { orgChild4Id: body.id, }; } const posMaster = await this.posMasterRepository.find({ where: { ...typeCondition, ...checkChildConditions, }, }); if (!posMaster || posMaster.length === 0) { throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); } const formattedData = await Promise.all( posMaster.map(async (posMaster) => { const positions = await this.positionRepository.find({ where: { posMasterId: posMaster.id }, }); return { id: posMaster.id, posMasterNoPrefix: posMaster.posMasterNoPrefix, posMasterNo: posMaster.posMasterNo, posMasterNoSuffix: posMaster.posMasterNoSuffix, positions: positions.map((position) => ({ id: position.id, positionName: position.positionName, positionField: position.positionField, posTypeId: position.posTypeId, posTypeName: position.posType == null ? null : position.posType.posTypeName, posLevelId: position.posLevelId, posLevelName: position.posLevel == null ? null : position.posLevel.posLevelName, posExecutiveId: position.posExecutiveId, posExecutiveName: position.posExecutive == null ? null : position.posExecutive.posExecutiveName, positionExecutiveField: position.positionExecutiveField, positionArea: position.positionArea, positionIsSelected: position.positionIsSelected, })), }; }), ); return new HttpSuccess(formattedData); } catch (error) { return error; } } }